| 1 | /*============================================================================= |
| 2 | Copyright (c) 2019 Nikita Kniazev |
| 3 | |
| 4 | Use, modification and distribution is subject to the Boost Software |
| 5 | License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at |
| 6 | http://www.boost.org/LICENSE_1_0.txt) |
| 7 | =============================================================================*/ |
| 8 | |
| 9 | #include "rule_separate_tu_grammar.hpp" |
| 10 | |
| 11 | |
| 12 | #include "test.hpp" |
| 13 | |
| 14 | namespace sem_act { |
| 15 | |
| 16 | namespace x3 = boost::spirit::x3; |
| 17 | |
| 18 | auto nop = [](auto const&){}; |
| 19 | |
| 20 | x3::rule<class used_attr1_r, int> used_attr1; |
| 21 | auto const used_attr1_def = used_attr::grammar[nop]; |
| 22 | BOOST_SPIRIT_DEFINE(used_attr1); |
| 23 | |
| 24 | x3::rule<class used_attr2_r, int> used_attr2; |
| 25 | auto const used_attr2_def = unused_attr::grammar[nop]; |
| 26 | BOOST_SPIRIT_DEFINE(used_attr2); |
| 27 | |
| 28 | x3::rule<class unused_attr1_r> unused_attr1; |
| 29 | auto const unused_attr1_def = used_attr::grammar[nop]; |
| 30 | BOOST_SPIRIT_DEFINE(unused_attr1); |
| 31 | |
| 32 | x3::rule<class unused_attr2_r> unused_attr2; |
| 33 | auto const unused_attr2_def = unused_attr::grammar[nop]; |
| 34 | BOOST_SPIRIT_DEFINE(unused_attr2); |
| 35 | |
| 36 | } |
| 37 | |
| 38 | int main() |
| 39 | { |
| 40 | using spirit_test::test; |
| 41 | using spirit_test::test_attr; |
| 42 | |
| 43 | { |
| 44 | BOOST_TEST(test("*" , unused_attr::skipper)); |
| 45 | BOOST_TEST(test("#" , unused_attr::skipper2)); |
| 46 | BOOST_TEST(test("==" , unused_attr::grammar)); |
| 47 | BOOST_TEST(test("*=*=" , unused_attr::grammar, unused_attr::skipper)); |
| 48 | BOOST_TEST(test("#=#=" , unused_attr::grammar, unused_attr::skipper2)); |
| 49 | } |
| 50 | |
| 51 | { |
| 52 | long i; |
| 53 | static_assert(!std::is_same<decltype(i), used_attr::grammar_type::attribute_type>::value, |
| 54 | "ensure we have instantiated the rule with a different attribute type" ); |
| 55 | BOOST_TEST(test_attr("123" , used_attr::grammar, i)); |
| 56 | BOOST_TEST_EQ(i, 123); |
| 57 | BOOST_TEST(test_attr(" 42" , used_attr::grammar, i, used_attr::skipper)); |
| 58 | BOOST_TEST_EQ(i, 42); |
| 59 | } |
| 60 | |
| 61 | { |
| 62 | long i; |
| 63 | BOOST_TEST(test_attr("123" , sem_act::used_attr1, i)); |
| 64 | BOOST_TEST(test_attr("===" , sem_act::used_attr2, i)); |
| 65 | BOOST_TEST(test("123" , sem_act::unused_attr1)); |
| 66 | BOOST_TEST(test("===" , sem_act::unused_attr2)); |
| 67 | } |
| 68 | |
| 69 | return boost::report_errors(); |
| 70 | } |
| 71 | |