Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> boost test 
:(
    Опции темы
Superklug
Дата 10.8.2010, 13:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 227
Регистрация: 16.6.2006

Репутация: нет
Всего: нет



Доброго времени суток!

Может кто-нибудь пользовался этой библиотекой?

Добавил в проект файл test.cpp. Создал конфигурацию UnitTest (в этой конфигурации собирается exe, а в Debug и Release статическая библиотека). В Post build event добавил:
Код

"$(TargetPath)" --result_code=no --report_level=short


Большинство тестов работают нормально. А вот тесты в которых используются файловые потоки заваливаются...
Например такой тест:
Код

#define BOOST_TEST_MODULE Main_test
#include <boost/test/unit_test.hpp>

BOOST_AUTO_TEST_CASE(Some_test_case)
{
    std::ifstream is_1( "file_1", std::ios::binary );
    is_1.seekg( 0, std::ios::end );
    size_t size_1 = is_1.tellg();
    is_1.seekg(0, std::ios::beg);
    char* data_1 = new char[size_1];
    is_1.read( data_1, size_1 );
    is_1.close();

    std::ifstream is_2( "file_2", std::ios::binary );
    is_2.seekg( 0, std::ios::end );
    size_t size_2 = is_2.tellg();
    is_2.seekg(0, std::ios::beg);
    char* data_2 = new char[size_2];
    is_2.read( data_2, size_2 );
    is_2.close();

    BOOST_CHECK( ( memcmp( data_1, data_2, size_1 > size_2 ? size_1 : size_2 ) == 0 ) );
    delete[] data_1;
    delete[] data_2;
}


После сборки в логе примерно такие сообщения:
Код

fatal error in "Some_test_case": Invalid allocation size: 4294967295 bytes.    unknown location


Помогите, пожалуйста, разобраться в чем дело...

Это сообщение отредактировал(а) Superklug - 10.8.2010, 13:35
PM MAIL   Вверх
SenkraD
Дата 10.8.2010, 13:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 933
Регистрация: 3.2.2006
Где: Украина::Киев

Репутация: 2
Всего: 23



Superklug,  у вас валится new - генерит std::bad_alloc из-за того, что у Microsoft  размер массива не должен превышать 0x7fffffff байтов (в стандарт по этому поводу глянить не успел и о других компилерах ничего сказать не могу, под рукой нет).
P.S. код ошибки от мелкомягких - C2148

Это сообщение отредактировал(а) SenkraD - 10.8.2010, 13:49


--------------------
 Имеющий язык - да не убоится спросить! 
user posted image
PM MAIL ICQ   Вверх
Superklug
Дата 10.8.2010, 13:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 227
Регистрация: 16.6.2006

Репутация: нет
Всего: нет



Размер файла около 200 байт...
Да и потом, если бы было исключение boost его отловил бы.
Если написать что-нибудь вроде:
Код

int main()
    std::ifstream is_1( "file_1", std::ios::binary );
    is_1.seekg( 0, std::ios::end );
    size_t size_1 = is_1.tellg();
    is_1.seekg(0, std::ios::beg);
    char* data_1 = new char[size_1];
    is_1.read( data_1, size_1 );
    is_1.close();
    std::ifstream is_2( "file_2", std::ios::binary );
    is_2.seekg( 0, std::ios::end );
    size_t size_2 = is_2.tellg();
    is_2.seekg(0, std::ios::beg);
    char* data_2 = new char[size_2];
    is_2.read( data_2, size_2 );
    is_2.close();
    std::cout << ( memcmp( data_1, data_2, size_1 > size_2 ? size_1 : size_2 ) == 0 ) ? "OK" : "error";
    delete[] data_1;
    delete[] data_2;
    return 0;
}

то все работает как надо. 

А когда делаю это с помощью буста и через Post Build Event, почему-то не работает...
PM MAIL   Вверх
SenkraD
Дата 10.8.2010, 14:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 933
Регистрация: 3.2.2006
Где: Украина::Киев

Репутация: 2
Всего: 23



ну там не исключение, а что-то типа assert, который CRT делает.
Цитата(Superklug @  10.8.2010,  13:55 Найти цитируемый пост)
Размер файла около 200 байт...
Не спорю, скорее фолит какой-то с tellg из-за чего вы и страдаете. Поставьте свои асерты аля assert(size_1 < 0x7fffffff); и assert(size_2 < 0x7fffffff); или зайдите под дебагом в тесты


Это сообщение отредактировал(а) SenkraD - 10.8.2010, 14:07


--------------------
 Имеющий язык - да не убоится спросить! 
user posted image
PM MAIL ICQ   Вверх
maxim1000
Дата 10.8.2010, 16:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 3334
Регистрация: 11.1.2003
Где: Киев

Репутация: 17
Всего: 110



4294967295  это (-1)
сильно похоже на то, что просто файлы не найдены
для проверки гипотезы можно прописать абсолютные пути и посмотреть, что будет
а если проблема в этом - разбираться, с какой текущей директорией запускаются тесты


--------------------
qqq
PM WWW   Вверх
Superklug
Дата 11.8.2010, 07:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 227
Регистрация: 16.6.2006

Репутация: нет
Всего: нет



maxim1000, спасибо! Проблема действительно в этом...
Помогите пожалуйста настроить проект, чтобы все работало корректно.. Не хочется оставлять абсолютные пути)

Сейчас такие настройки:
General
Output Directory: $(SolutionDir)$(ProjectName)\$(ConfigurationName)
Intermediate Directory: $(ConfigurationName)

Linker
Output File: $(OutDir)\$(ProjectName)_test.exe

Build Events / Post Build Event
Command: "$(TargetPath)" --result_code=no --report_level=short

Если с настройками все в порядке, подскажите относительно чего нужно задавать пути? Нужный мне файл лежит в $(TargetDir)


Это сообщение отредактировал(а) Superklug - 11.8.2010, 08:00
PM MAIL   Вверх
maxim1000
Дата 11.8.2010, 11:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 3334
Регистрация: 11.1.2003
Где: Киев

Репутация: 17
Всего: 110



если я не ошибаюсь, текущая директория во время билда - директория проекта

но это можно и выяснить экспериментально - просто вывести текущую директорию в post-build event
(что-то типа echo %CD%)


--------------------
qqq
PM WWW   Вверх
Superklug
Дата 11.8.2010, 11:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 227
Регистрация: 16.6.2006

Репутация: нет
Всего: нет



Цитата(maxim1000 @  11.8.2010,  11:12 Найти цитируемый пост)
если я не ошибаюсь, текущая директория во время билда - директория проекта

Да, так и есть...

Спасибо!
PM MAIL   Вверх
Superklug
Дата 12.8.2010, 12:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 227
Регистрация: 16.6.2006

Репутация: нет
Всего: нет



У меня опять проблема(
Для тестирования другого проекта (dll Библиотека) решил сделать отдельный проект.
При попытке вызова какой-либо функции из dll возникает ошибка. Вызываю так:
Код

void (*func)(void*);
(FARPROC&)func = GetProcAddress( hLib, "Func" );


Если написать свой int main() (без буста), то все вызовы работают нормально.. В чем может быть проблема?
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1016 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.