4#include <gtest/gtest.h>
16 JIT * jit = JIT::ReCreate();
19 ObjPtr test = Obj::CreateDict();
21 test->push_back(Obj::Arg(10));
22 test->push_back(Obj::Arg(11));
23 test->push_back(Obj::Arg(12));
24 test->push_back(Obj::Arg(13));
25 ASSERT_EQ(4, test->size());
26 ASSERT_EQ(10, (*test)[0].second->GetValueAsInteger());
27 ASSERT_EQ(13, (*test)[3].second->GetValueAsInteger());
29 ASSERT_EQ(test->resize_(4,
nullptr), test->size());
30 ASSERT_EQ(4, test->size());
31 ASSERT_EQ(10, (*test)[0].second->GetValueAsInteger());
32 ASSERT_EQ(13, (*test)[3].second->GetValueAsInteger());
34 test->resize_(-3,
nullptr);
35 ASSERT_EQ(3, test->size());
36 ASSERT_EQ(11, (*test)[0].second->GetValueAsInteger());
37 ASSERT_EQ(13, (*test)[2].second->GetValueAsInteger());
39 test->resize_(-1,
nullptr);
40 ASSERT_EQ(1, test->size());
41 ASSERT_EQ(13, (*test)[0].second->GetValueAsInteger());
43 test->resize_(0,
nullptr);
44 ASSERT_EQ(0, test->size());
47 ASSERT_NO_THROW(counter = jit->
Run(
"counter := 100"));
49 ASSERT_EQ(100, counter->GetValueAsInteger());
51 ASSERT_NO_THROW(counter = jit->
Run(
"counter"));
53 ASSERT_EQ(100, counter->GetValueAsInteger());
54 void *cnt_ptr = counter.get();
57 ASSERT_NO_THROW(dict = jit->
Run(
"dict := (0,1,2,)"));
59 ASSERT_TRUE(dict->is_dictionary_type());
60 ASSERT_EQ(3, dict->size());
61 ASSERT_EQ(0, (*dict)[0].second->GetValueAsInteger());
62 ASSERT_EQ(1, (*dict)[1].second->GetValueAsInteger());
63 ASSERT_EQ(2, (*dict)[2].second->GetValueAsInteger());
66 ASSERT_NO_THROW(counter = jit->
Run(
"counter"));
67 ASSERT_EQ(100, counter->GetValueAsInteger());
68 ASSERT_EQ(cnt_ptr, counter.get());
71 ASSERT_NO_THROW(temp = jit->
Run(
"counter, dict = ... dict"));
73 ASSERT_TRUE(temp->is_dictionary_type()) << temp->toString();
74 ASSERT_EQ(2, temp->size());
76 ASSERT_NO_THROW(counter = jit->
Run(
"counter"));
78 ASSERT_EQ(0, counter->GetValueAsInteger());
80 ASSERT_TRUE(dict->is_dictionary_type());
81 ASSERT_EQ(2, dict->size());
82 ASSERT_EQ(1, (*dict)[0].second->GetValueAsInteger());
83 ASSERT_EQ(2, (*dict)[1].second->GetValueAsInteger());
85 ASSERT_NO_THROW(temp = jit->
Run(
"counter, dict = ... dict"));
87 ASSERT_TRUE(temp->is_dictionary_type());
88 ASSERT_EQ(1, temp->size());
90 ASSERT_NO_THROW(counter = jit->
Run(
"counter"));
92 ASSERT_EQ(1, counter->GetValueAsInteger());
94 ASSERT_TRUE(dict->is_dictionary_type());
95 ASSERT_EQ(1, dict->size());
96 ASSERT_EQ(2, (*dict)[0].second->GetValueAsInteger());
98 ASSERT_NO_THROW(temp = jit->
Run(
"counter += 1"));
100 ASSERT_EQ(2, temp->GetValueAsInteger());
102 ASSERT_NO_THROW(temp = jit->
Run(
"counter += counter"));
104 ASSERT_EQ(4, temp->GetValueAsInteger());
107 ASSERT_NO_THROW(temp = jit->
Run(
"counter, dict = ... dict"));
109 ASSERT_TRUE(temp->is_dictionary_type()) << temp->toString();
110 ASSERT_EQ(0, temp->size());
112 ASSERT_NO_THROW(counter = jit->
Run(
"counter"));
113 ASSERT_TRUE(counter);
114 ASSERT_EQ(2, counter->GetValueAsInteger());
116 ASSERT_TRUE(dict->is_dictionary_type());
117 ASSERT_EQ(0, dict->size());
119 ASSERT_NO_THROW(temp = jit->
Run(
"{ counter, dict = ... dict }"));
121 ASSERT_TRUE(temp->is_dictionary_type());
122 ASSERT_TRUE(dict->is_dictionary_type());
123 ASSERT_EQ(0, dict->size());
125 ASSERT_NO_THROW(counter = jit->
Run(
"counter"));
126 ASSERT_TRUE(counter);
127 ASSERT_TRUE(counter->is_none_type()) << counter->toString();
130 dict->push_back(Obj::Arg(10));
131 dict->push_back(Obj::Arg(20));
132 dict->push_back(Obj::Arg(30));
133 dict->push_back(Obj::Arg(40));
134 dict->push_back(Obj::Arg(50));
135 ASSERT_EQ(5, dict->size());
137 ASSERT_NO_THROW(temp = jit->
Run(
"dict"));
139 ASSERT_TRUE(temp->is_dictionary_type());
140 ASSERT_FALSE(temp->is_scalar());
141 ASSERT_TRUE(temp->GetValueAsBoolean());
142 ASSERT_EQ(5, temp->size());
144 void *ptr_dict = temp.get();
146 ASSERT_NO_THROW(temp = jit->
Run(
":Bool[...](dict)"));
148 ASSERT_TRUE(temp->is_bool_type());
149 ASSERT_FALSE(temp->is_scalar());
150 ASSERT_TRUE(temp->GetValueAsBoolean());
151 ASSERT_EQ(5, temp->size());
153 ASSERT_NO_THROW(temp = jit->
Run(
":Bool[_](dict)"));
155 ASSERT_TRUE(temp->is_bool_type());
156 ASSERT_FALSE(temp->is_scalar());
157 ASSERT_TRUE(temp->GetValueAsBoolean());
158 ASSERT_EQ(5, temp->size());
160 ASSERT_NO_THROW(temp = jit->
Run(
":Bool[0](dict)"));
162 ASSERT_TRUE(temp->is_bool_type());
163 ASSERT_TRUE(temp->is_scalar());
164 ASSERT_TRUE(temp->GetValueAsBoolean());
165 ASSERT_EQ(0, temp->size());
167 ASSERT_NO_THROW(temp = jit->
Run(
":Bool(dict)"));
169 ASSERT_TRUE(temp->is_bool_type());
170 ASSERT_TRUE(temp->is_scalar());
171 ASSERT_TRUE(temp->GetValueAsBoolean());
172 ASSERT_EQ(0, temp->size());
174 ASSERT_NO_THROW(temp = jit->
Run(
"@not(dict)"));
176 ASSERT_TRUE(temp->is_bool_type());
177 ASSERT_FALSE(temp->GetValueAsBoolean());
179 ASSERT_NO_THROW(temp = jit->
Run(
"dict"));
181 ASSERT_EQ(ptr_dict, temp.get());
182 ASSERT_STREQ(
"(10, 20, 30, 40, 50,)", temp->toString().c_str());
185 ASSERT_NO_THROW(summa = jit->
Run(
"::summa := 0"));
186 ASSERT_STREQ(
"0", summa->toString().c_str());
187 ASSERT_NO_THROW(summa = jit->
Run(
"summa += 100"));
188 ASSERT_STREQ(
"100", summa->toString().c_str());
190 ASSERT_NO_THROW(temp = jit->
Run(
":Bool[...]( (1,) )"));
191 ASSERT_STREQ(
"[1,]:Bool", temp->toString().c_str());
192 ASSERT_NO_THROW(temp = jit->
Run(
":Bool( (1,) )"));
193 ASSERT_STREQ(
"1", temp->toString().c_str());
195 ASSERT_NO_THROW(temp = jit->
Run(
":Bool[...]( (1,) )"));
196 ASSERT_STREQ(
"[1,]:Bool", temp->toString().c_str());
197 ASSERT_NO_THROW(temp = jit->
Run(
":Bool( (1,) )"));
198 ASSERT_STREQ(
"1", temp->toString().c_str());
200 ASSERT_NO_THROW(temp = jit->
Run(
":Bool[...]( (0,) )"));
201 ASSERT_STREQ(
"[0,]:Bool", temp->toString().c_str());
202 ASSERT_NO_THROW(temp = jit->
Run(
":Bool( (0,) )"));
203 ASSERT_STREQ(
"1", temp->toString().c_str());
205 ASSERT_ANY_THROW(temp = jit->
Run(
":Bool[...]( (,) )"));
206 ASSERT_ANY_THROW(temp = jit->
Run(
":Bool[_]( (,) )"));
207 ASSERT_NO_THROW(temp = jit->
Run(
":Bool( (,) )"));
208 ASSERT_STREQ(
"0", temp->toString().c_str());
211 ASSERT_NO_THROW(summa = jit->
Run(
"summa"));
212 ASSERT_STREQ(
"100", summa->toString().c_str());
214 ASSERT_NO_THROW(temp = jit->
Run(
"counter = 0; [dict] <-> {counter, dict := ... dict; summa += counter}")) << jit->
Dump(
"*dict*;*count*");
216 ASSERT_NO_THROW(summa = jit->
Run(
"summa"));
217 ASSERT_STREQ(
"250", summa->toString().c_str());
219 ASSERT_NO_THROW(temp = jit->
Run(
"counter"));
221 ASSERT_TRUE(temp->is_integer());
222 ASSERT_STREQ(
"50", temp->toString().c_str());
224 ASSERT_TRUE(dict->is_dictionary_type());
225 ASSERT_EQ(0, dict->size());
228 ASSERT_NO_THROW(dict = jit->
Run(
"dict := (0,1,2,3,4,)"));
230 ASSERT_STREQ(
"(0, 1, 2, 3, 4,)", dict->toString().c_str());
233 ASSERT_NO_THROW(temp = jit->
Run(
"dict"));
235 ASSERT_STREQ(
"(0, 1, 2, 3, 4,)", temp->toString().c_str());
238 ASSERT_NO_THROW(item = jit->
Run(
"item := 0"));
239 ASSERT_EQ(0, item->GetValueAsInteger());
240 ASSERT_NO_THROW(item = jit->
Run(
"item, dict := ... dict; item"));
241 ASSERT_EQ(0, item->GetValueAsInteger());
243 ASSERT_NO_THROW(temp = jit->
Run(
"dict"));
245 ASSERT_STREQ(
"(1, 2, 3, 4,)", temp->toString().c_str());
247 ASSERT_NO_THROW(item = jit->
Run(
"item, dict := ... dict; item"));
248 ASSERT_EQ(1, item->GetValueAsInteger());
250 ASSERT_NO_THROW(temp = jit->
Run(
"dict"));
252 ASSERT_STREQ(
"(2, 3, 4,)", temp->toString().c_str());
254 ASSERT_NO_THROW(item = jit->
Run(
"item, dict := ... dict; item"));
255 ASSERT_EQ(2, item->GetValueAsInteger());
258 ASSERT_NO_THROW(summa = jit->
Run(
"sum := 0"));
260 ASSERT_STREQ(
"0", summa->toString().c_str());
261 ASSERT_NO_THROW(summa = jit->
Run(
"sum += 1"));
263 ASSERT_STREQ(
"1", summa->toString().c_str());
264 ASSERT_NO_THROW(summa = jit->
Run(
"sum += 2"));
266 ASSERT_STREQ(
"3", summa->toString().c_str());
268 ASSERT_NO_THROW(temp = jit->
Run(
"dict"));
270 ASSERT_STREQ(
"(3, 4,)", temp->toString().c_str());
273 ASSERT_NO_THROW(dict = jit->
Run(
"dict := (0,1,2,3,4,)"));
274 ASSERT_NO_THROW(temp = jit->
Run(
"dict"));
276 ASSERT_STREQ(
"(0, 1, 2, 3, 4,)", temp->toString().c_str());
280 ASSERT_NO_THROW(temp = jit->
Run(
"val::=1; item := 0; [dict] <-> {item, dict := ... dict; print('Sum: %s, Item: %s\\n', :StrChar(sum), :StrChar(item)); sum += item}")) << jit->
Dump(
"*print*");
282 ASSERT_STREQ(
"13", temp->GetValueAsString().c_str());
284 ASSERT_NO_THROW(summa = jit->
Run(
"item"));
285 ASSERT_EQ(4, summa->GetValueAsInteger());
287 ASSERT_NO_THROW(summa = jit->
Run(
"sum"));
288 ASSERT_EQ(13, summa->GetValueAsInteger());
294 ASSERT_NO_THROW(counter = jit->
Run(
"counter := 55"));
295 ASSERT_EQ(55, counter->GetValueAsInteger());
298 ASSERT_NO_THROW(tensor = jit->
Run(
"tensor := [10,11,12,]"));
300 ASSERT_TRUE(tensor->is_tensor_type());
301 ASSERT_TRUE(tensor->GetValueAsBoolean());
302 ASSERT_EQ(3, tensor->size());
303 ASSERT_EQ(10, (*tensor)[0].second->GetValueAsInteger());
304 ASSERT_EQ(11, (*tensor)[1].second->GetValueAsInteger());
305 ASSERT_EQ(12, (*tensor)[2].second->GetValueAsInteger());
307 ASSERT_NO_THROW(temp = jit->
Run(
"counter, tensor := ... tensor "));
309 ASSERT_TRUE(temp->is_tensor_type());
310 ASSERT_EQ(2, temp->size());
312 ASSERT_NO_THROW(counter = jit->
Run(
"counter"));
313 ASSERT_EQ(10, counter->GetValueAsInteger());
315 ASSERT_TRUE(tensor->is_tensor_type());
316 ASSERT_TRUE(tensor->GetValueAsBoolean());
317 ASSERT_EQ(2, tensor ->size());
318 ASSERT_EQ(11, (*tensor)[0].second->GetValueAsInteger());
319 ASSERT_EQ(12, (*tensor)[1].second->GetValueAsInteger());
321 ASSERT_NO_THROW(temp = jit->
Run(
"counter, tensor := ... tensor "));
323 ASSERT_TRUE(temp->is_tensor_type());
324 ASSERT_EQ(1, temp->size());
326 ASSERT_NO_THROW(counter = jit->
Run(
"counter"));
327 ASSERT_EQ(11, counter->GetValueAsInteger());
329 ASSERT_TRUE(tensor->is_tensor_type());
330 ASSERT_TRUE(tensor->GetValueAsBoolean());
331 ASSERT_EQ(1, tensor ->size());
332 ASSERT_EQ(12, (*tensor)[0].second->GetValueAsInteger());
334 ASSERT_NO_THROW(temp = jit->
Run(
"counter, tensor := ... tensor "));
336 ASSERT_TRUE(temp->is_none_type());
338 ASSERT_NO_THROW(counter = jit->
Run(
"counter"));
339 ASSERT_EQ(12, counter->GetValueAsInteger());
341 ASSERT_TRUE(tensor->is_none_type());
342 ASSERT_FALSE(tensor->GetValueAsBoolean());
344 ASSERT_ANY_THROW(temp = jit->
Run(
"counter, tensor := ... tensor"));
352 ASSERT_NO_THROW(counter = jit->
Run(
"counter"));
353 ASSERT_TRUE(counter);
354 ASSERT_TRUE(counter->empty());
361 ASSERT_NO_THROW(jit->
Run(
"item2 := 0"));
362 ASSERT_NO_THROW(summa2 = jit->
Run(
"summa := 0"));
363 ASSERT_NO_THROW(tensor2 = jit->
Run(
"tensor := [10,20,30,40,50,60,]"));
364 ASSERT_NO_THROW(temp2 = jit->
Run(
"[tensor] <-> {item2, tensor := ... tensor; summa += item2}"));
366 ASSERT_EQ(210, temp2->GetValueAsInteger()) << temp2->toString();
368 ASSERT_NO_THROW(summa2 = jit->
Run(
"summa"));
369 ASSERT_EQ(210, summa2->GetValueAsInteger());
371 ASSERT_NO_THROW(temp2 = jit->
Run(
"item2"));
372 ASSERT_EQ(60, temp2->GetValueAsInteger());
374 ASSERT_NO_THROW(tensor2 = jit->
Run(
"tensor"));
375 ASSERT_TRUE(tensor2->is_none_type());
376 ASSERT_FALSE(tensor2->GetValueAsBoolean());
379 ASSERT_NO_THROW(tensor_size = jit->
Run(
"tensor_size := [10,20,30,40,]"));
380 ASSERT_EQ(4, tensor_size->size());
381 ASSERT_EQ(10, (*tensor_size)[0].second->GetValueAsInteger());
382 ASSERT_EQ(40, (*tensor_size)[3].second->GetValueAsInteger());
384 tensor_size->resize_(-10,
nullptr);
385 ASSERT_EQ(10, tensor_size->size());
386 ASSERT_EQ(0, (*tensor_size)[0].second->GetValueAsInteger());
387 ASSERT_EQ(0, (*tensor_size)[5].second->GetValueAsInteger());
388 ASSERT_EQ(10, (*tensor_size)[6].second->GetValueAsInteger());
389 ASSERT_EQ(40, (*tensor_size)[9].second->GetValueAsInteger());
395 JIT * jit = JIT::ReCreate();
400 ASSERT_NO_THROW(
result = jit->
Run(
"result := 0"));
402 ASSERT_EQ(0,
result->GetValueAsInteger());
405 ASSERT_NO_THROW(cond = jit->
Run(
"result < 4"));
407 ASSERT_TRUE(cond->GetValueAsBoolean());
409 ASSERT_NO_THROW(
result = jit->
Run(
"result += 1"));
411 ASSERT_EQ(1,
result->GetValueAsInteger());
413 ASSERT_NO_THROW(cond = jit->
Run(
"result < 4"));
415 ASSERT_TRUE(cond->GetValueAsBoolean());
417 ASSERT_NO_THROW(
result = jit->
Run(
"result += 3"));
419 ASSERT_EQ(4,
result->GetValueAsInteger());
421 ASSERT_NO_THROW(cond = jit->
Run(
"result < 4"));
423 ASSERT_FALSE(cond->GetValueAsBoolean());
427 ASSERT_NO_THROW(counter = jit->
Run(
"counter := 0"));
428 ASSERT_EQ(0, counter->GetValueAsInteger());
430 ASSERT_EQ(4,
result->GetValueAsInteger());
431 ASSERT_NO_THROW(
result = jit->
Run(
"result -= 1"));
432 ASSERT_EQ(3,
result->GetValueAsInteger());
434 ASSERT_NO_THROW(counter = jit->
Run(
"[result -= 1] <-> {counter += 1}"));
435 ASSERT_TRUE(counter);
436 ASSERT_EQ(2, counter->GetValueAsInteger());
438 ASSERT_NO_THROW(counter = jit->
Run(
"counter"));
439 ASSERT_EQ(2, counter->GetValueAsInteger());
443 ASSERT_NO_THROW(counter = jit->
Run(
"{result += 1; counter += 1} <-> [result < 10]"));
444 ASSERT_EQ(10,
result->GetValueAsInteger());
446 ASSERT_TRUE(counter);
447 ASSERT_EQ(12, counter->GetValueAsInteger());
449 ASSERT_NO_THROW(counter = jit->
Run(
"counter"));
450 ASSERT_EQ(12, counter->GetValueAsInteger());
452 ASSERT_NO_THROW(counter = jit->
Run(
"result"));
453 ASSERT_EQ(10, counter->GetValueAsInteger());
459 JIT * jit = JIT::ReCreate();
464 ASSERT_NO_THROW(
result = jit->
Run(
"[1]-->100"));
466 ASSERT_EQ(100,
result->GetValueAsInteger());
468 ASSERT_NO_THROW(
result = jit->
Run(
"[-1]-->99"));
470 ASSERT_EQ(99,
result->GetValueAsInteger());
472 ASSERT_NO_THROW(
result = jit->
Run(
"[0]-->111"));
474 ASSERT_TRUE(
result->is_none_type());
476 ASSERT_NO_THROW(
result = jit->
Run(
"[1]-->111"));
478 ASSERT_EQ(111,
result->GetValueAsInteger());
482 ASSERT_NO_THROW(
result = jit->
Run(
"[0]-->100,[1]-->300"));
484 ASSERT_EQ(300,
result->GetValueAsInteger());
486 ASSERT_NO_THROW(
result = jit->
Run(
"[0]-->100,[0]-->300,[99]-->99,[...]-->1000"));
488 ASSERT_EQ(99,
result->GetValueAsInteger());
490 ASSERT_NO_THROW(
result = jit->
Run(
"[0]-->111,[...]-->1000"));
492 ASSERT_EQ(1000,
result->GetValueAsInteger());
494 ASSERT_NO_THROW(
result = jit->
Run(
"[0]-->{100},[1]-->{10;20;30}"));
496 ASSERT_EQ(30,
result->GetValueAsInteger());
498 ASSERT_NO_THROW(
result = jit->
Run(
"[0]-->{100},[0]-->{300},[99]-->{99},[...]-->{1000}"));
500 ASSERT_EQ(99,
result->GetValueAsInteger());
502 ASSERT_NO_THROW(
result = jit->
Run(
"[0]-->111,[...]-->{30;50;1000}"));
504 ASSERT_EQ(1000,
result->GetValueAsInteger());
507 ASSERT_NO_THROW(
result = jit->
Run(
"cond := 100; [cond]-->111,[...]-->1000"));
509 ASSERT_EQ(111,
result->GetValueAsInteger());
511 ASSERT_NO_THROW(
result = jit->
Run(
"cond2 := 0; [cond2]-->111,[...]-->1000"));
513 ASSERT_EQ(1000,
result->GetValueAsInteger());
515 ASSERT_NO_THROW(
result = jit->
Run(
"val := 1\\1; [val == 1]-->111,[...]-->1000"));
517 ASSERT_EQ(111,
result->GetValueAsInteger());
519 ASSERT_NO_THROW(
result = jit->
Run(
"val := 1\\1; [val < 0]-->111,[...]-->1000"));
521 ASSERT_EQ(1000,
result->GetValueAsInteger());
523 ASSERT_NO_THROW(
result = jit->
Run(
"val := 1\\1; [val > 0]-->{111},[...]-->1000"));
525 ASSERT_EQ(111,
result->GetValueAsInteger());
530 JIT * jit = JIT::ReCreate();
537 ASSERT_ANY_THROW(
result = jit->
Run(
"--"));
547 ASSERT_ANY_THROW(
result = jit->
Run(
":: --"));
548 }
catch (
IntAny &except) {
551 ASSERT_STREQ(
"::", except.
m_value.c_str());
558 ASSERT_ANY_THROW(
result = jit->
Run(
"--100--"));
563 ASSERT_STREQ(
"100", except.
m_return_obj->toString().c_str());
568 ASSERT_ANY_THROW(
result = jit->
Run(
":: --100--"));
569 }
catch (
IntAny &except) {
572 ASSERT_STREQ(
"::", except.
m_value.c_str());
574 ASSERT_STREQ(
"100", except.
m_return_obj->toString().c_str());
581 ASSERT_ANY_THROW(
result = jit->
Run(
"++"));
585 ASSERT_STREQ(
"::", except.
m_value.c_str());
592 ASSERT_ANY_THROW(
result = jit->
Run(
":: ++"));
593 }
catch (
IntAny &except) {
595 ASSERT_STREQ(
"::", except.
m_value.c_str());
603 ASSERT_ANY_THROW(
result = jit->
Run(
"++100++"));
608 ASSERT_STREQ(
"100", except.
m_return_obj->toString().c_str());
613 ASSERT_ANY_THROW(
result = jit->
Run(
":: ++100++"));
614 }
catch (
IntAny &except) {
618 ASSERT_STREQ(
"100", except.
m_return_obj->toString().c_str());
627 ASSERT_ANY_THROW(
result = jit->
Run(
"{ -- }"));
637 ASSERT_NO_THROW(
result = jit->
Run(
"ns{ ns ++ }"));
639 ASSERT_TRUE(
result->is_none_type()) <<
result->toString();
640 }
catch (
IntAny &except) {
646 ASSERT_NO_THROW(
result = jit->
Run(
"ns{ { ns ++ } }"));
648 ASSERT_TRUE(
result->is_none_type()) <<
result->toString();
649 }
catch (
IntAny &except) {
656 ASSERT_ANY_THROW(
result = jit->
Run(
"{ ++100++; 200 }"));
661 ASSERT_STREQ(
"100", except.
m_return_obj->toString().c_str());
666 ASSERT_NO_THROW(
result = jit->
Run(
"ns { ns ++100++; 200}"));
668 ASSERT_STREQ(
"100",
result->toString().c_str());
669 }
catch (
IntAny &except) {
675 ASSERT_NO_THROW(
result = jit->
Run(
"br:= 5; ns { br+=1; [br>10]--> ns:: ++ br ++; ns:: --br--; 200 }"));
677 ASSERT_STREQ(
"11",
result->toString().c_str());
678 }
catch (
IntAny &except) {
906TEST(Alg, DISABLED_BreakContinue) {
907 JIT * jit = JIT::ReCreate();
910 const char * run_raw =
""
922 ASSERT_NO_THROW(
result = jit->
Run(run_raw));
923 ASSERT_NO_THROW(count = jit->
Run(
"count"));
925 ASSERT_TRUE(
result->is_integer());
926 ASSERT_EQ(6, count->GetValueAsInteger());
927 ASSERT_EQ(100,
result->GetValueAsInteger());
929 const char * run_macro =
""
939 ASSERT_NO_THROW(
result = jit->
Run(run_macro));
940 ASSERT_NO_THROW(count = jit->
Run(
"count"));
942 ASSERT_TRUE(
result->is_integer());
943 ASSERT_EQ(6, count->GetValueAsInteger());
944 ASSERT_EQ(42,
result->GetValueAsInteger());
949 JIT * jit = JIT::ReCreate();
954 ASSERT_NO_THROW(
result = jit->
Run(
"42"));
957 ASSERT_EQ(42,
result->GetValueAsInteger()) <<
result->toString().c_str();
959 ASSERT_NO_THROW(
result = jit->
Run(
"[0]<->{ 43 },[...]-->{44}"));
962 ASSERT_EQ(44,
result->GetValueAsInteger()) <<
result->toString().c_str();
964 ASSERT_NO_THROW(
result = jit->
Run(
"{- --100-- -}"));
967 ASSERT_STREQ(
"--100--",
result->toString().c_str());
969 ASSERT_NO_THROW(
result = jit->
Run(
"**{- --100-- -}"));
971 ASSERT_STREQ(
"100",
result->toString().c_str());
std::string Dump(const std::string_view filter="", const char delim=';')
ObjPtr Run(const std::string_view str, Obj *args=nullptr)
std::string m_value
Содержит байтовую строку или байтовый массив с данными для представления в нативном виде (Struct,...
std::shared_ptr< Obj > ObjPtr
const char * toString(TermID type)