1
2// Copyright (C) 2008-2018 Lorenzo Caminiti
3// Distributed under the Boost Software License, Version 1.0 (see accompanying
4// file LICENSE_1_0.txt or a copy at http://www.boost.org/LICENSE_1_0.txt).
5// See: http://www.boost.org/doc/libs/release/libs/contract/doc/html/index.html
6
7// Test specify pre, post, and except, no old (same if not free func).
8
9#include "../detail/oteststream.hpp"
10#include <boost/contract/function.hpp>
11#include <boost/contract/check.hpp>
12#include <boost/detail/lightweight_test.hpp>
13#include <sstream>
14
15boost::contract::test::detail::oteststream out;
16
17void f() {
18 boost::contract::check c = boost::contract::function()
19 .precondition(f: [] { out << "f::pre" << std::endl; })
20 .postcondition(f: [] { out << "f::post" << std::endl; })
21 .except(f: [] { out << "f::except" << std::endl; })
22 ;
23 out << "f::body" << std::endl;
24}
25
26int main() {
27 std::ostringstream ok;
28
29 out.str(s: "");
30 f();
31 ok.str(s: "");
32 ok
33 #ifndef BOOST_CONTRACT_NO_PRECONDITIONS
34 << "f::pre" << std::endl
35 #endif
36 << "f::body" << std::endl
37 #ifndef BOOST_CONTRACT_NO_POSTCONDITIONS
38 << "f::post" << std::endl
39 #endif
40 ;
41 BOOST_TEST(out.eq(ok.str()));
42
43 return boost::report_errors();
44}
45
46

source code of boost/libs/contract/test/specify/pre_post_except.cpp