72 BOOST_CHECK_EQUAL(
formula(
"strength").evaluate(
c).as_int(), 15);
73 BOOST_CHECK_EQUAL(
formula(
"17").evaluate().as_int(), 17);
75 BOOST_CHECK_EQUAL(
formula(
"strength/2 + agility").evaluate(
c).as_int(), 19);
76 BOOST_CHECK_EQUAL(
formula(
"(strength+agility)/2").evaluate(
c).as_int(), 13);
78 BOOST_CHECK_EQUAL(
formula(
"20 % 3").evaluate().as_int(), 2);
79 BOOST_CHECK_EQUAL(
formula(
"19.5 % 3").evaluate().as_decimal(),
80 static_cast<int>(1000.0 * 1.5));
82 BOOST_CHECK_EQUAL(
formula(
"-5").evaluate().as_int(), -5);
84 BOOST_CHECK_EQUAL(
formula(
"4^2").evaluate().as_int(), 16);
85 BOOST_CHECK_EQUAL(
formula(
"2+3^3").evaluate().as_int(), 29);
86 BOOST_CHECK_EQUAL(
formula(
"2*3^3+2").evaluate().as_int(), 56);
87 BOOST_CHECK_EQUAL(
formula(
"2^3^2").evaluate().as_int(), 512);
88 BOOST_CHECK_EQUAL(
formula(
"9^3").evaluate().as_int(), 729);
89 BOOST_CHECK(
formula(
"(-2)^0.5").evaluate().is_null());
94 BOOST_CHECK_EQUAL(
formula(
"strength > 12").evaluate(
c).as_int(), 1);
95 BOOST_CHECK_EQUAL(
formula(
"strength > 18").evaluate(
c).as_int(), 0);
97 BOOST_CHECK_EQUAL(
formula(
"if(strength > 12, 7, 2)").evaluate(
c).as_int(), 7);
98 BOOST_CHECK_EQUAL(
formula(
"if(strength > 18, 7, 2)").evaluate(
c).as_int(), 2);
100 BOOST_CHECK_EQUAL(
formula(
"2 and 1").evaluate().as_int(), 1);
101 BOOST_CHECK_EQUAL(
formula(
"2 and 0").evaluate().as_int(), 0);
102 BOOST_CHECK_EQUAL(
formula(
"2 or 0").evaluate().as_int(), 2);
104 BOOST_CHECK_EQUAL(
formula(
"not 5").evaluate().as_int(), 0);
105 BOOST_CHECK_EQUAL(
formula(
"not 0").evaluate().as_int(), 1);
151 BOOST_CHECK_EQUAL(myarray[0].as_int(), 1);
152 BOOST_CHECK_EQUAL(myarray[1].as_int(), 2);
153 BOOST_CHECK_EQUAL(myarray[2].as_int(), 3);
157 BOOST_CHECK_EQUAL(mydict[
variant(
"foo")].as_int(), 5);
158 BOOST_CHECK_EQUAL(mydict[
variant(
"bar")].as_int(), 7);
162 BOOST_CHECK_EQUAL(myrange[0].as_int(), -2);
163 BOOST_CHECK_EQUAL(myrange[1].as_int(), -1);
164 BOOST_CHECK_EQUAL(myrange[2].as_int(), 0);
165 BOOST_CHECK_EQUAL(myrange[3].as_int(), 1);
166 BOOST_CHECK_EQUAL(myrange[4].as_int(), 2);
170 BOOST_CHECK_EQUAL(myslice[0].as_int(), 11);
171 BOOST_CHECK_EQUAL(myslice[1].as_int(), 13);
172 BOOST_CHECK_EQUAL(myslice[2].as_int(), 17);
173 BOOST_CHECK_EQUAL(myslice[3].as_int(), 19);
178 const std::string test =
"[(abc + 4 * (5+3))^2.0, functions, '[']thing[']']";
179 auto i1 = test.begin();
180 auto i2 = test.end();
181 const std::array<std::pair<std::string, token_type>, 25> tokens {{
182 {
"[", token_type::lsquare},
183 {
"(", token_type::lparens},
184 {
"abc", token_type::identifier},
185 {
" ", token_type::whitespace},
186 {
"+", token_type::operator_token},
187 {
" ", token_type::whitespace},
188 {
"4", token_type::integer},
189 {
" ", token_type::whitespace},
190 {
"*", token_type::operator_token},
191 {
" ", token_type::whitespace},
192 {
"(", token_type::lparens},
193 {
"5", token_type::integer},
194 {
"+", token_type::operator_token},
195 {
"3", token_type::integer},
196 {
")", token_type::rparens},
197 {
")", token_type::rparens},
198 {
"^", token_type::operator_token},
199 {
"2.0", token_type::decimal},
200 {
",", token_type::comma},
201 {
" ", token_type::whitespace},
202 {
"functions", token_type::keyword},
203 {
",", token_type::comma},
204 {
" ", token_type::whitespace},
205 {
"'[']thing[']'", token_type::string_literal},
206 {
"]", token_type::rsquare},
208 for(
const auto& [str, type] : tokens) {
209 const token t = get_token(i1, i2);
210 assert(std::string(
t.begin,
t.end) == str);
211 assert(
t.type == type);