библиотека контрактов, сложности использования/сборки примера
От: niXman Ниоткуда https://github.com/niXman
Дата: 06.07.16 14:39
Оценка:
привет.

решил попроовать поюзать сабж.
клонировал, при попытке выполнить необходимые степы, получаю:
nixman@nixman-pc:~/contract$ tools/waf build
Waf: Entering directory `/home/nixman/contract/build'
[ 1/17] cxx: src/contract.cpp -> build/src/contract.cpp.1.o
[ 2/17] cxx: test/classcontract.cpp -> build/test/classcontract.cpp.2.o
[ 3/17] cxx: test/ctorcontract.cpp -> build/test/ctorcontract.cpp.2.o
[ 4/17] cxx: test/derivedcontract.cpp -> build/test/derivedcontract.cpp.2.o
[ 5/17] cxx: test/disableinvariants.cpp -> build/test/disableinvariants.cpp.2.o
In file included from /home/nixman/contract/include/contract/contract.hpp:187:0,
                 from ../test/classcontract.cpp:1:
/home/nixman/contract/include/contract/detail/contract_imp.hpp:90:5: error: expected unqualified-id before ‘dodo {                                                                     \
     ^
/home/nixman/contract/include/contract/detail/contract_imp.hpp:98:7: error: expected unqualified-id before ‘while’
     } while (0)                                                              \
       ^
In file included from /usr/local/include/boost/test/tools/fpc_tolerance.hpp:19:0,
                 from /usr/local/include/boost/test/tools/fpc_op.hpp:19,
                 from /usr/local/include/boost/test/test_tools.hpp:54,
                 from /usr/local/include/boost/test/unit_test.hpp:18,
                 from ../test/contract_error.hpp:6,
                 from ../test/classcontract.cpp:3:
/usr/local/include/boost/test/tree/decorator.hpp: In member function ‘virtual boost::unit_test::decorator::base_ptr boost::unit_test::decorator::precondition::clone() const’:
/usr/local/include/boost/test/tree/decorator.hpp:253:60: error: expected primary-expression before ‘(’ token
     virtual base_ptr        clone() const { return base_ptr(new precondition( m_precondition )); }
                                                            ^
In file included from /home/nixman/contract/include/contract/contract.hpp:187:0,
                 from ../test/classcontract.cpp:1:
/home/nixman/contract/include/contract/detail/contract_imp.hpp:90:5: error: expected type-specifier before ‘dodo {                                                                     \
     ^
In file included from /home/nixman/contract/include/contract/contract.hpp:187:0,
                 from ../test/disableinvariants.cpp:2:
/home/nixman/contract/include/contract/detail/contract_imp.hpp:90:5: error: expected unqualified-id before ‘dodo {                                                                     \
     ^
/home/nixman/contract/include/contract/detail/contract_imp.hpp:98:7: error: expected unqualified-id before ‘while’
     } while (0)                                                              \
       ^
In file included from /usr/local/include/boost/test/tools/fpc_tolerance.hpp:19:0,
                 from /usr/local/include/boost/test/tools/fpc_op.hpp:19,
                 from /usr/local/include/boost/test/test_tools.hpp:54,
                 from /usr/local/include/boost/test/unit_test.hpp:18,
                 from ../test/contract_error.hpp:6,
                 from ../test/disableinvariants.cpp:4:
/usr/local/include/boost/test/tree/decorator.hpp: In member function ‘virtual boost::unit_test::decorator::base_ptr boost::unit_test::decorator::precondition::clone() const’:
/usr/local/include/boost/test/tree/decorator.hpp:253:60: error: expected primary-expression before ‘(’ token
     virtual base_ptr        clone() const { return base_ptr(new precondition( m_precondition )); }
                                                            ^
In file included from /home/nixman/contract/include/contract/contract.hpp:187:0,
                 from ../test/disableinvariants.cpp:2:
/home/nixman/contract/include/contract/detail/contract_imp.hpp:90:5: error: expected type-specifier before ‘dodo {                                                                     \
     ^
In file included from /home/nixman/contract/include/contract/contract.hpp:187:0,
                 from ../test/ctorcontract.cpp:1:
/home/nixman/contract/include/contract/detail/contract_imp.hpp:90:5: error: expected unqualified-id before ‘dodo {                                                                     \
     ^
/home/nixman/contract/include/contract/detail/contract_imp.hpp:98:7: error: expected unqualified-id before ‘while’
     } while (0)                                                              \
       ^
In file included from /usr/local/include/boost/test/tools/fpc_tolerance.hpp:19:0,
                 from /usr/local/include/boost/test/tools/fpc_op.hpp:19,
                 from /usr/local/include/boost/test/test_tools.hpp:54,
                 from /usr/local/include/boost/test/unit_test.hpp:18,
                 from ../test/contract_error.hpp:6,
                 from ../test/ctorcontract.cpp:3:
/usr/local/include/boost/test/tree/decorator.hpp: In member function ‘virtual boost::unit_test::decorator::base_ptr boost::unit_test::decorator::precondition::clone() const’:
/usr/local/include/boost/test/tree/decorator.hpp:253:60: error: expected primary-expression before ‘(’ token
     virtual base_ptr        clone() const { return base_ptr(new precondition( m_precondition )); }
                                                            ^
In file included from /home/nixman/contract/include/contract/contract.hpp:187:0,
                 from ../test/ctorcontract.cpp:1:
/home/nixman/contract/include/contract/detail/contract_imp.hpp:90:5: error: expected type-specifier before ‘dodo {                                                                     \
     ^
In file included from /home/nixman/contract/include/contract/contract.hpp:187:0,
                 from ../test/derivedcontract.cpp:1:
/home/nixman/contract/include/contract/detail/contract_imp.hpp:90:5: error: expected unqualified-id before ‘dodo {                                                                     \
     ^
/home/nixman/contract/include/contract/detail/contract_imp.hpp:98:7: error: expected unqualified-id before ‘while’
     } while (0)                                                              \
       ^
In file included from /usr/local/include/boost/test/tools/fpc_tolerance.hpp:19:0,
                 from /usr/local/include/boost/test/tools/fpc_op.hpp:19,
                 from /usr/local/include/boost/test/test_tools.hpp:54,
                 from /usr/local/include/boost/test/unit_test.hpp:18,
                 from ../test/contract_error.hpp:6,
                 from ../test/derivedcontract.cpp:3:
/usr/local/include/boost/test/tree/decorator.hpp: In member function ‘virtual boost::unit_test::decorator::base_ptr boost::unit_test::decorator::precondition::clone() const’:
/usr/local/include/boost/test/tree/decorator.hpp:253:60: error: expected primary-expression before ‘(’ token
     virtual base_ptr        clone() const { return base_ptr(new precondition( m_precondition )); }
                                                            ^
In file included from /home/nixman/contract/include/contract/contract.hpp:187:0,
                 from ../test/derivedcontract.cpp:1:
/home/nixman/contract/include/contract/detail/contract_imp.hpp:90:5: error: expected type-specifier before ‘dodo {                                                                     \
     ^
Waf: Leaving directory `/home/nixman/contract/build'


препроцессированный код смотрел, ничего невалидного не вижу.

ЧЯДНТ?
пачка бумаги А4 стОит 2000 р, в ней 500 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)
Re: библиотека контрактов, сложности использования/сборки примера
От: niXman Ниоткуда https://github.com/niXman
Дата: 06.07.16 15:13
Оценка:
лады, выбросим waf, и будем собирать тесты "руками".

выполняем: g++ -std=c++11 -I../include disableinvariants.cpp, и получаем тот же результат:
In file included from ../include/contract/contract.hpp:187:0,
                 from disableinvariants.cpp:2:
../include/contract/detail/contract_imp.hpp:90:5: error: expected unqualified-id before ‘dodo {                                                                     \
     ^
../include/contract/detail/contract_imp.hpp:98:7: error: expected unqualified-id before ‘while’
     } while (0)                                                              \
       ^
In file included from /usr/local/include/boost/test/tools/fpc_tolerance.hpp:19:0,
                 from /usr/local/include/boost/test/tools/fpc_op.hpp:19,
                 from /usr/local/include/boost/test/test_tools.hpp:54,
                 from /usr/local/include/boost/test/unit_test.hpp:18,
                 from contract_error.hpp:6,
                 from disableinvariants.cpp:4:
/usr/local/include/boost/test/tree/decorator.hpp: In member function ‘virtual boost::unit_test::decorator::base_ptr boost::unit_test::decorator::precondition::clone() const’:
/usr/local/include/boost/test/tree/decorator.hpp:253:60: error: expected primary-expression before ‘(’ token
     virtual base_ptr        clone() const { return base_ptr(new precondition( m_precondition )); }
                                                            ^
In file included from ../include/contract/contract.hpp:187:0,
                 from disableinvariants.cpp:2:
../include/contract/detail/contract_imp.hpp:90:5: error: expected type-specifier before ‘dodo {                                                                     \
     ^
пачка бумаги А4 стОит 2000 р, в ней 500 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)
Re[2]: библиотека контрактов, сложности использования/сборки
От: niXman Ниоткуда https://github.com/niXman
Дата: 06.07.16 15:22
Оценка:
препроцессированный тест: https://ru.files.fm/u/u42ymp5k
sha1: 9c5f015ed4c22afa28dd790345cc22c5fd08efe8

невижу ничего подозрительного %)
пачка бумаги А4 стОит 2000 р, в ней 500 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)
Отредактировано 06.07.2016 17:57 niXman . Предыдущая версия . Еще …
Отредактировано 06.07.2016 15:28 niXman . Предыдущая версия .
Re[3]: библиотека контрактов, сложности использования/сборки
От: niXman Ниоткуда https://github.com/niXman
Дата: 06.07.16 17:48
Оценка:
итак, disableinvariants.cpp имеет такое содержание:
#define CONTRACT_DISABLE_INVARIANTS
#include <contract/contract.hpp>

#include "contract_error.hpp"

#include <boost/test/unit_test.hpp>

namespace
{

void test_disable_invariants()
{
    contract (fun) { invariant(false); };
}

void test_disable_invariants_precondition()
{
    contract (fun) { precondition(false); };
}

void test_disable_invariants_postcondition()
{
    contract (fun) { postcondition(false); };
}

}

BOOST_AUTO_TEST_CASE(macro_disable_invariants)
{
    test::contract_handler_frame cframe;

    // expect disabled invariant
    BOOST_CHECK_NO_THROW(test_disable_invariants());

    // expect precondition to fail
    BOOST_CHECK_THROW(test_disable_invariants_precondition(),
                      test::contract_error);

    // expect postcondition to fail
    BOOST_CHECK_THROW(test_disable_invariants_postcondition(),
                      test::contract_error);
}

// Copyright Alexei Zakharov, 2013.
//
// Distributed under the Boost Software License, Version 1.0.
// (See accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt)

ошибки пропадают, только если этот код изменить так?:
#define CONTRACT_DISABLE_INVARIANTS
#include <contract/contract.hpp>

//#include "contract_error.hpp"

//#include <boost/test/unit_test.hpp>

#if 0
namespace
{

void test_disable_invariants()
{
    contract (fun) { invariant(false); };
}

void test_disable_invariants_precondition()
{
    contract (fun) { precondition(false); };
}

void test_disable_invariants_postcondition()
{
    contract (fun) { postcondition(false); };
}

}

BOOST_AUTO_TEST_CASE(macro_disable_invariants)
{
    test::contract_handler_frame cframe;

    // expect disabled invariant
    BOOST_CHECK_NO_THROW(test_disable_invariants());

    // expect precondition to fail
    BOOST_CHECK_THROW(test_disable_invariants_precondition(),
                      test::contract_error);

    // expect postcondition to fail
    BOOST_CHECK_THROW(test_disable_invariants_postcondition(),
                      test::contract_error);
}
#endif
// Copyright Alexei Zakharov, 2013.
//
// Distributed under the Boost Software License, Version 1.0.
// (See accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt)
пачка бумаги А4 стОит 2000 р, в ней 500 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)
Re[4]: библиотека контрактов, сложности использования/сборки
От: VTT http://vtt.to
Дата: 06.07.16 18:29
Оценка: +2
contract.hpp:41
#define precondition(...)


boost\test\tree\decorator.hpp:244
class BOOST_TEST_DECL precondition : public decorator::base {


Для тех, кто делает макросы в нижнем регистре в аду есть отдельный котел...
А вообще библиотека в таком виде совершенно бесполезная, лучше обычный ассерт.
Говорить дальше не было нужды. Как и все космонавты, капитан Нортон не испытывал особого доверия к явлениям, внешне слишком заманчивым.
Re[5]: библиотека контрактов, сложности использования/сборки
От: niXman Ниоткуда https://github.com/niXman
Дата: 06.07.16 19:50
Оценка:
Здравствуйте, VTT, Вы писали:

VTT>contract.hpp:41

VTT>
#define precondition(...)


VTT>boost\test\tree\decorator.hpp:244

VTT>
class BOOST_TEST_DECL precondition : public decorator::base {


а как вы поняли что проблема в этом? любопытно.
пачка бумаги А4 стОит 2000 р, в ней 500 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)
Re[5]: библиотека контрактов, сложности использования/сборки
От: niXman Ниоткуда https://github.com/niXman
Дата: 06.07.16 19:53
Оценка:
Здравствуйте, VTT, Вы писали:

VTT>А вообще библиотека в таком виде совершенно бесполезная, лучше обычный ассерт.

есть желание поведать о своих мыслях по этому поводу? буду рад выслушать.
пачка бумаги А4 стОит 2000 р, в ней 500 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)
Re[6]: библиотека контрактов, сложности использования/сборки
От: VTT http://vtt.to
Дата: 06.07.16 19:59
Оценка: +1
Здравствуйте, niXman, Вы писали:

X>Здравствуйте, VTT, Вы писали:


VTT>>contract.hpp:41

VTT>>
#define precondition(...)


VTT>>boost\test\tree\decorator.hpp:244

VTT>>
class BOOST_TEST_DECL precondition : public decorator::base {


X>а как вы поняли что проблема в этом? любопытно.


Ничтоже сумняшеся, я сделал студийный проект.
Первая ошибка при компиляции указывала на место перед precondition.
Первый результат поиска precondition по проекту указывал не место перед дефайном.
Собственно precondition подсвечивалось как макрос, что сразу навело подозрения.
Говорить дальше не было нужды. Как и все космонавты, капитан Нортон не испытывал особого доверия к явлениям, внешне слишком заманчивым.
Отредактировано 06.07.2016 20:06 VTT . Предыдущая версия .
Re[6]: библиотека контрактов, сложности использования/сборки
От: VTT http://vtt.to
Дата: 06.07.16 20:13
Оценка:
Здравствуйте, niXman, Вы писали:

X>Здравствуйте, VTT, Вы писали:


VTT>>А вообще библиотека в таком виде совершенно бесполезная, лучше обычный ассерт.

X>есть желание поведать о своих мыслях по этому поводу? буду рад выслушать.

А о чем тут говорить?
Да, было бы хорошо иметь толковые средства контрактного программирования. Как в D, или даже как в ada.
Но комитет страдает фигней со всякими "If and switch with initializer".
Так что в обозримом будущем таких средств не предвидится.
Ну а пока я ставлю ассерты, много ассертов, и SAL.
Говорить дальше не было нужды. Как и все космонавты, капитан Нортон не испытывал особого доверия к явлениям, внешне слишком заманчивым.
Re[7]: библиотека контрактов, сложности использования/сборки
От: niXman Ниоткуда https://github.com/niXman
Дата: 06.07.16 20:38
Оценка:
Здравствуйте, VTT, Вы писали:

VTT>Но комитет страдает фигней со всякими "If and switch with initializer".

синтаксический сахар, но приятно =)

VTT>Ну а пока я ставлю ассерты, много ассертов, и SAL.

что такое SAL?
пачка бумаги А4 стОит 2000 р, в ней 500 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)
Re[8]: библиотека контрактов, сложности использования/сборки
От: VTT http://vtt.to
Дата: 06.07.16 20:52
Оценка: 4 (1) +1
VTT>>Ну а пока я ставлю ассерты, много ассертов, и SAL.
X>что такое SAL?

https://msdn.microsoft.com/en-us/library/ms182032.aspx
tl;dr; специальные макросы для аннотации методов, позволяющие в связке со статическим анализатором студии диагностировать многие распространенные проблемы

constexpr _Check_return_ _Ret_range_(0, 12) auto
Convert_To_Neighbor(_Inout_ t_Vector & vector, _In_range_(0, 12) ::std::uint8_t const neighbor_index_hint) const throw()
Говорить дальше не было нужды. Как и все космонавты, капитан Нортон не испытывал особого доверия к явлениям, внешне слишком заманчивым.
Отредактировано 06.07.2016 20:58 VTT . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.