NewLang Project
Yet another programm language
Main Page
Namespaces
Classes
Files
File List
File Members
Loading...
Searching...
No Matches
lib
test
run_test.cpp
Go to the documentation of this file.
1
//#ifdef BUILD_UNITTEST
2
//
3
//#include "warning_push.h"
4
//#include <gtest/gtest.h>
5
//
6
//#include <torch/torch.h>
7
//#include <ATen/ATen.h>
8
//#include "warning_pop.h"
9
//
10
//
11
//#include "parser.h"
12
//
13
//#include <signal.h>
14
//
15
//#include "builtin.h"
16
//#include "runtime.h"
17
//#include "context.h"
18
//#include "jit.h"
19
//
20
//using namespace newlang;
21
//
22
//TEST(Run, Simple) {
23
// JIT * jit = JIT::ReCreate();
24
// ASSERT_TRUE(jit);
25
//
26
// ObjPtr res = jit->Run("123");
27
// ASSERT_TRUE(res);
28
// ASSERT_STREQ("123", res->toString().c_str());
29
// ASSERT_EQ(1, jit->m_main_ast->m_block.size());
30
//
31
// res = jit->Run("123.456");
32
// ASSERT_TRUE(res);
33
// ASSERT_STREQ("123.456", res->toString().c_str());
34
// ASSERT_EQ(2, jit->m_main_ast->m_block.size());
35
//
36
// res = jit->Run("'123.456'");
37
// ASSERT_TRUE(res);
38
// ASSERT_STREQ("'123.456'", res->toString().c_str());
39
// ASSERT_EQ(3, jit->m_main_ast->m_block.size());
40
//
41
// res = jit->Run("\"123.456\"");
42
// ASSERT_TRUE(res);
43
// ASSERT_STREQ("\"123.456\"", res->toString().c_str());
44
// ASSERT_EQ(4, jit->m_main_ast->m_block.size());
45
//
46
// res = jit->Run("(,)");
47
// ASSERT_TRUE(res);
48
// ASSERT_STREQ("(,)", res->toString().c_str());
49
// ASSERT_EQ(5, jit->m_main_ast->m_block.size());
50
//
51
// res = jit->Run("(123,)");
52
// ASSERT_TRUE(res);
53
// ASSERT_STREQ("(123,)", res->toString().c_str());
54
// ASSERT_EQ(6, jit->m_main_ast->m_block.size());
55
//
56
// res = jit->Run("(name=123,)");
57
// ASSERT_TRUE(res);
58
// ASSERT_STREQ("(name=123,)", res->toString().c_str());
59
// ASSERT_EQ(7, jit->m_main_ast->m_block.size());
60
//
61
// res = jit->Run("(name=123,):ClassName");
62
// ASSERT_TRUE(res);
63
// ASSERT_STREQ("(name=123,):ClassName", res->toString().c_str());
64
// ASSERT_EQ(8, jit->m_main_ast->m_block.size());
65
//
66
// res = jit->Run("[123,]");
67
// ASSERT_TRUE(res);
68
// ASSERT_STREQ("[123,]:Int8", res->toString().c_str());
69
// ASSERT_EQ(9, jit->m_main_ast->m_block.size());
70
//
71
// res = jit->Run("[123,456,]:Float32");
72
// ASSERT_TRUE(res);
73
// ASSERT_STREQ("[123, 456,]:Float32", res->toString().c_str());
74
// ASSERT_EQ(10, jit->m_main_ast->m_block.size());
75
//}
76
//
317
//
318
//
319
//static int64_t var_long = 987654321;
320
//
321
//static int64_t func_export(int64_t arg_long, uint8_t arg_byte) {
322
// return arg_long + 2 * arg_byte;
323
//}
324
//
325
//TEST(Eval, Assign) {
326
//
327
// JIT * jit = JIT::ReCreate();
328
//
329
// ObjPtr list = jit->Run("$?!");
330
// ASSERT_STREQ("(,)", list->toString().c_str());
331
//
332
// ObjPtr var1 = jit->Run("var1 ::= 123");
333
// ASSERT_TRUE(var1);
334
// ASSERT_TRUE(var1->is_arithmetic_type());
335
// ASSERT_TRUE(var1->is_integer());
336
// ASSERT_TRUE(std::holds_alternative<int64_t>(var1->m_var));
337
// ASSERT_EQ(var1->m_var_type_current, ObjType::Int8) << newlang::toString(var1->m_var_type_current);
338
// ASSERT_EQ(var1->m_var_type_fixed, ObjType::None) << newlang::toString(var1->m_var_type_fixed);
339
// ASSERT_STREQ("123", var1->toString().c_str());
340
//
341
// list = jit->Run("$?!");
342
// ASSERT_STREQ("('var1',)", list->toString().c_str());
343
//
344
// ASSERT_ANY_THROW(jit->Run("var1 ::= 123"));
345
//
346
// ASSERT_NO_THROW(var1 = jit->Run("var1 = 100:Int8"));
347
// ASSERT_EQ(var1->m_var_type_current, ObjType::Int8) << newlang::toString(var1->m_var_type_current);
348
// ASSERT_EQ(var1->m_var_type_fixed, ObjType::Int8) << newlang::toString(var1->m_var_type_fixed);
349
// ASSERT_STREQ("100", var1->toString().c_str());
350
//
351
// ASSERT_NO_THROW(var1 = jit->Run("var1 = 999"));
352
// ASSERT_STREQ("999", var1->toString().c_str());
353
//
354
// ASSERT_NO_THROW(var1 = jit->Run("var1 = _"));
355
// ASSERT_EQ(var1->getType(), ObjType::None);
356
// ASSERT_STREQ("_", var1->toString().c_str());
357
//
358
// list = jit->Run("$?!");
359
// ASSERT_STREQ("('var1',)", list->toString().c_str());
360
//
361
// // ASSERT_TRUE(ctx.ExecStr("var1 = "));
362
// // ASSERT_TRUE(ctx.select("var1").complete());
363
//
364
// jit = JIT::ReCreate();
365
//
366
// list = jit->Run("$?!");
367
// ASSERT_STREQ("(,)", list->toString().c_str());
368
//
369
// ObjPtr var_str;
370
// ASSERT_NO_THROW(var_str = jit->Run("var_str := 'Строка'"));
371
// ASSERT_TRUE(var_str);
372
// ASSERT_TRUE(var_str->is_string_type());
373
// ASSERT_EQ(var_str->m_var_type_current, ObjType::StrChar) << newlang::toString(var_str->m_var_type_current);
374
// ASSERT_EQ(var_str->m_var_type_fixed, ObjType::String) << newlang::toString(var_str->m_var_type_fixed);
375
// ASSERT_STREQ("'Строка'", var_str->toString().c_str());
376
//
377
// list = jit->Run("$?!");
378
// ASSERT_STREQ("('var_str',)", list->toString().c_str());
379
//
380
// ObjPtr var_num;
381
// ASSERT_NO_THROW(var_num = jit->Run("$var_num := 123.456: Single"));
382
// ASSERT_TRUE(var_num);
383
// ASSERT_TRUE(var_num->is_arithmetic_type());
384
// ASSERT_TRUE(var_num->is_tensor_type());
385
// ASSERT_EQ(var_num->m_var_type_current, ObjType::Single) << newlang::toString(var_num->m_var_type_current);
386
// ASSERT_EQ(var_num->m_var_type_fixed, ObjType::Single) << newlang::toString(var_num->m_var_type_fixed);
387
// ASSERT_STREQ("123.456", var_num->toString().c_str());
388
//
389
// list = jit->Run("$?!");
390
// ASSERT_STREQ("('$var_num', 'var_str',)", list->toString().c_str());
391
//
392
//
393
// var_long = 987654321;
394
// ObjPtr var_export;
395
//
396
// ASSERT_ANY_THROW(jit->Run("var_export:= %var_long"));
397
// ASSERT_ANY_THROW(jit->Run("var_export:= %var_long..."));
398
// ASSERT_ANY_THROW(jit->Run("var_export:Int64 := %var_long:Int32 "));
399
// ASSERT_ANY_THROW(jit->Run("var_export := %var_long:Int64 "));
400
//
401
// ASSERT_ANY_THROW(var_export = jit->Run("var_export:Int64 := %var_long..."));
402
//
403
// LLVMAddSymbol("var_long", &var_long);
404
//
405
// ASSERT_NO_THROW(var_export = jit->Run("var_export:Int64 := %var_long..."));
406
//
407
// ASSERT_TRUE(var_export);
408
// ASSERT_TRUE(var_export->is_tensor_type()) << var_export->toString();
409
// ASSERT_EQ(var_export->getType(), ObjType::Int64) << toString(var_export->getType());
410
// ASSERT_STREQ("987654321", var_export->toString().c_str());
411
// var_long = 123132132;
412
// ASSERT_STREQ("123132132", var_export->toString().c_str());
413
// var_export->SetValue_(Obj::CreateValue(59875, ObjType::None));
414
// ASSERT_EQ(59875, var_long);
415
//
416
// list = jit->Run("$?!");
417
// ASSERT_STREQ("('var_export', '$var_num', 'var_str',)", list->toString().c_str());
418
//
419
//
420
// /*
421
// * Аргументы по умолчанию для нативных функций.
422
// * Функция шаблон для создания списка аргументов для встраиваемого кода,
423
// * чтобы было как в C/C++ func_export(10, 20), а не func_export( (10, 20,) )
424
// * + проверка компилятором, например:
425
// * extern "C" _$$_func_export$( Obj &args );
426
// * extern "C" _$$_func_export$_$(int64_t arg_long, uint8_t arg_byte);
427
// * тогда при раскрытии EMBED {% $func_export(10, 20) %}?
428
// * $func_export заменяется на _$$_func_export$_$ и компилятор будет счстлив проверкой аргументов :-)
429
// */
430
// ObjPtr func;
431
// ASSERT_ANY_THROW(jit->Run("$func_export(arg1:Int64, arg2:Int8):Int64 := %func_export"));
432
// ASSERT_ANY_THROW(jit->Run("$func_export(arg1:Int64, arg2:Int8):Int64 := %func_export..."));
433
//
434
// LLVMAddSymbol("func_export", (void *) &func_export);
435
//
436
// ASSERT_NO_THROW(func = jit->Run("$func_export(arg1:Int64, arg2:Int8):Int64 := %func_export..."));
437
//
438
// ASSERT_TRUE(func);
439
// ASSERT_TRUE(func->is_function_type()) << func;
440
// ASSERT_EQ(func->getType(), ObjType::NativeFunc);
441
// ASSERT_STREQ("$func_export::(arg1:Int64, arg2:Int8):Int64{ }", func->toString().c_str());
442
//
443
// ObjPtr result = (*func)(200, 10);
444
// ASSERT_TRUE(result);
445
// ASSERT_EQ(220, result->GetValueAsInteger());
446
//
447
// result = (*func)(10, 10);
448
// ASSERT_TRUE(result);
449
// ASSERT_EQ(30, result->GetValueAsInteger());
450
//
451
// // result = (*func)({10, "arg2"}, {20, "arg1"});
452
// // ASSERT_TRUE(result);
453
// // ASSERT_EQ(40, result->GetValueAsInteger());
454
//
455
// // result = (*func_export)(10);
456
// // ASSERT_TRUE(result);
457
// // ASSERT_EQ(110, result.GetValueAsInteger());
458
//
459
//
460
//
461
// // Переполнение второго аргумента
462
// // ASSERT_ANY_THROW(func_expojit->Call(&ctx, Obj::Arg(1000), Obj::Arg(1000)));
463
// //
464
// // list = ctx.ExecStr("$$");
465
// // ASSERT_STREQ("$$=('var_str', 'var_num', 'var_export', 'func_export',)", list->toString().c_str());
466
// //
467
// // var_num.reset();
468
// // func_export.reset();
469
// //
470
// // list = ctx.ExecStr("$$");
471
// // ASSERT_STREQ("$$=('var_str', 'var_export',)", list->toString().c_str());
472
// //
473
// // // Функция возвращает словарь с именами объектов в текущем контексте
474
// // ObjPtr func_eval = ctx.ExecStr("func_eval(arg1, arg2) := {$$;}");
475
// // ASSERT_TRUE(func_eval);
476
// // ASSERT_TRUE(func_eval->is_function_type()) << func_eval;
477
// // ASSERT_EQ(func_eval->getType(), ObjType::EVAL_FUNCTION) << toString(func_eval->getType());
478
// // ASSERT_STREQ("func_eval=::func_eval(arg1, arg2):={$$;}", func_eval->toString().c_str());
479
// //
480
// // ObjPtr result_eval = func_eval->Call(&ctx, Obj::Arg(200), Obj::Arg(10));
481
// // ASSERT_TRUE(result_eval);
482
// // ASSERT_STREQ("$$=('$0', 'arg1', 'arg2', 'var_str', 'var_export', 'func_eval',)", result_eval->toString().c_str());
483
// //
484
// // list = ctx.ExecStr("$$");
485
// // ASSERT_STREQ("$$=('var_str', 'var_export', 'func_eval',)", list->toString().c_str());
486
// //
487
// //
488
// // ObjPtr dict1 = ctx.ExecStr("(10, 2, 3, 4, )");
489
// // ASSERT_TRUE(dict1);
490
// // ASSERT_EQ(ObjType::Dictionary, dict1->m_var_type_current) << toString(dict1->m_var_type_current);
491
// // ASSERT_EQ(ObjType::None, dict1->m_var_type_fixed) << toString(dict1->m_var_type_fixed);
492
// // ASSERT_EQ(4, dict1->size());
493
// // ASSERT_STREQ("(10, 2, 3, 4,)", dict1->toString().c_str());
494
// //
495
// // ObjPtr dict2 = ctx.ExecStr("( (10, 2, 3, 4, (1,2,), ), (10, 2, 3, 4, ),)");
496
// // ASSERT_TRUE(dict2);
497
// // ASSERT_EQ(ObjType::Dictionary, dict2->m_var_type_current) << toString(dict2->m_var_type_current);
498
// // ASSERT_EQ(ObjType::None, dict2->m_var_type_fixed) << toString(dict2->m_var_type_fixed);
499
// // ASSERT_EQ(2, dict2->size());
500
// // ASSERT_STREQ("((10, 2, 3, 4, (1, 2,),), (10, 2, 3, 4,),)", dict2->toString().c_str());
501
// //
502
// // ObjPtr tensor = ctx.ExecStr("[1,1,0,0,]");
503
// // ASSERT_TRUE(tensor);
504
// // ASSERT_EQ(ObjType::Bool, tensor->m_var_type_current) << toString(tensor->m_var_type_current);
505
// // ASSERT_EQ(ObjType::None, tensor->m_var_type_fixed) << toString(tensor->m_var_type_fixed);
506
// // ASSERT_EQ(1, tensor->m_tensor->dim());
507
// // ASSERT_EQ(4, tensor->m_tensor->size(0));
508
// // ASSERT_EQ(1, tensor->index_get({0})->GetValueAsInteger());
509
// // ASSERT_EQ(1, tensor->index_get({1})->GetValueAsInteger());
510
// // ASSERT_EQ(0, tensor->index_get({2})->GetValueAsInteger());
511
// // ASSERT_EQ(0, tensor->index_get({3})->GetValueAsInteger());
512
// //
513
// // ASSERT_STREQ("[1, 1, 0, 0,]:Bool", tensor->GetValueAsString().c_str());
514
// //
515
// // ObjPtr tensor2 = ctx.ExecStr("[222,333,3333,]");
516
// // ASSERT_TRUE(tensor2);
517
// // ASSERT_STREQ("[222, 333, 3333,]:Int16", tensor2->GetValueAsString().c_str());
518
// //
519
// // ObjPtr tensorf = ctx.ExecStr("[1.2, 0.22, 0.69,]");
520
// // ASSERT_TRUE(tensorf);
521
// // ASSERT_STREQ("[1.2, 0.22, 0.69,]:Float32", tensorf->GetValueAsString().c_str());
522
// //
523
// // ObjPtr tensor_all = ctx.ExecStr("[ [1, 1, 0, 0,], [10, 10, 0.1, 0.2,], ]");
524
// // ASSERT_TRUE(tensor_all);
525
// // ASSERT_EQ(ObjType::Float32, tensor_all->m_var_type_current) << toString(tensor_all->m_var_type_current);
526
// // ASSERT_EQ(ObjType::None, tensor_all->m_var_type_fixed) << toString(tensor_all->m_var_type_fixed);
527
// // ASSERT_EQ(2, tensor_all->m_tensor->dim()) << tensor_all->m_tensor->size(0);
528
// // ASSERT_EQ(2, tensor_all->m_tensor->size(0));
529
// // ASSERT_EQ(4, tensor_all->m_tensor->size(1));
530
// //
531
// // ASSERT_STREQ("1", tensor_all->index_get({0, 0})->GetValueAsString().c_str());
532
// // ASSERT_STREQ("1", tensor_all->index_get({0, 1})->GetValueAsString().c_str());
533
// // ASSERT_STREQ("0", tensor_all->index_get({0, 2})->GetValueAsString().c_str());
534
// // ASSERT_STREQ("0", tensor_all->index_get({0, 3})->GetValueAsString().c_str());
535
// //
536
// // ASSERT_STREQ("10", tensor_all->index_get({1, 0})->GetValueAsString().c_str());
537
// // ASSERT_STREQ("10", tensor_all->index_get({1, 1})->GetValueAsString().c_str());
538
// // ASSERT_STREQ("0.1", tensor_all->index_get({1, 2})->GetValueAsString().c_str());
539
// // ASSERT_STREQ("0.2", tensor_all->index_get({1, 3})->GetValueAsString().c_str());
540
// //
541
// // ASSERT_STREQ("[\n [1, 1, 0, 0,], [10, 10, 0.1, 0.2,],\n]:Float32", tensor_all->GetValueAsString().c_str());
542
//}
543
//
544
//TEST(Run, Tensor) {
545
//
546
// JIT * jit = JIT::ReCreate();
547
//
548
// ObjPtr ddd;
549
//
550
// ASSERT_NO_THROW(ddd = jit->Run("(1,2,3,)"));
551
// ASSERT_TRUE(ddd);
552
// ASSERT_STREQ("(1, 2, 3,)", ddd->GetValueAsString().c_str()) << ddd->GetValueAsString().c_str();
553
//
554
// ASSERT_NO_THROW(ddd = jit->Run(":Tensor[...]( (1,2,3,) )")); // << Dump(*jit);
555
// ASSERT_TRUE(ddd);
556
// ASSERT_STREQ("[1, 2, 3,]:Int8", ddd->GetValueAsString().c_str()) << ddd->GetValueAsString().c_str();
557
//
558
//
559
// ASSERT_NO_THROW(ddd = jit->Run(":Dictionary(1,2,3)"));
560
// ASSERT_TRUE(ddd);
561
// ASSERT_STREQ("(1, 2, 3,)", ddd->GetValueAsString().c_str()) << ddd->GetValueAsString().c_str();
562
//
563
// ASSERT_NO_THROW(ddd = jit->Run(":Dictionary( (1,2,3,) )"));
564
// ASSERT_TRUE(ddd);
565
// ASSERT_STREQ("((1, 2, 3,),)", ddd->GetValueAsString().c_str()) << ddd->GetValueAsString().c_str();
566
//
567
// ObjPtr tensor;
568
// ASSERT_NO_THROW(tensor = jit->Run(":Tensor(1)"));
569
// ASSERT_TRUE(tensor);
570
// ASSERT_EQ(ObjType::Tensor, tensor->m_var_type_fixed) << toString(tensor->m_var_type_fixed);
571
// ASSERT_EQ(ObjType::Bool, tensor->getType()) << toString(tensor->m_var_type_current);
572
// ASSERT_EQ(0, tensor->size());
573
//
574
// ASSERT_STREQ("1", tensor->GetValueAsString().c_str()) << tensor->GetValueAsString().c_str();
575
//
576
// ASSERT_NO_THROW(tensor = jit->Run("(1,2,3,)"));
577
// ASSERT_TRUE(tensor);
578
// ASSERT_STREQ("(1, 2, 3,)", tensor->GetValueAsString().c_str()) << tensor->GetValueAsString().c_str();
579
//
580
// ASSERT_NO_THROW(tensor = jit->Run(":Tensor[...]([1,2,3,])"));
581
// ASSERT_TRUE(tensor);
582
// ASSERT_STREQ("[1, 2, 3,]:Int8", tensor->GetValueAsString().c_str()) << tensor->GetValueAsString().c_str();
583
//
584
// ASSERT_NO_THROW(tensor = jit->Run(":Int32[_]([1,])"));
585
// ASSERT_TRUE(tensor);
586
// ASSERT_STREQ("[1,]:Int32", tensor->GetValueAsString().c_str()) << tensor->GetValueAsString().c_str();
587
//
588
// ASSERT_NO_THROW(tensor = jit->Run(":Int32([1,])"));
589
// ASSERT_TRUE(tensor);
590
// ASSERT_STREQ("1", tensor->GetValueAsString().c_str()) << tensor->GetValueAsString().c_str();
591
//
592
// ObjPtr tt;
593
// ASSERT_NO_THROW(tt = jit->Run(":Tensor[3]( (1,2,3,) )"));
594
// ASSERT_TRUE(tt);
595
// ASSERT_STREQ("[1, 2, 3,]:Int8", tt->GetValueAsString().c_str()) << tt->GetValueAsString().c_str();
596
//
597
// ASSERT_NO_THROW(tensor = jit->Run(":Int32[...]((1,2,3,))"));
598
// ASSERT_TRUE(tensor);
599
// ASSERT_STREQ("[1, 2, 3,]:Int32", tensor->GetValueAsString().c_str()) << tensor->GetValueAsString().c_str();
600
//
601
// ASSERT_NO_THROW(tensor = jit->Run(":Int32[2,3]((1,2,3,4,5,6,))"));
602
// ASSERT_TRUE(tensor);
603
//
604
// EXPECT_EQ(2, tensor->m_tensor->dim());
605
// EXPECT_EQ(2, tensor->m_tensor->size(0));
606
// EXPECT_EQ(3, tensor->m_tensor->size(1));
607
//
608
// ASSERT_STREQ("[\n [1, 2, 3,], [4, 5, 6,],\n]:Int32", tensor->GetValueAsString().c_str());
609
//
610
// ObjPtr str;
611
// ASSERT_NO_THROW(str = jit->Run(":Tensor[_]('first second')"));
612
// ASSERT_TRUE(str);
613
// ASSERT_STREQ("[102, 105, 114, 115, 116, 32, 115, 101, 99, 111, 110, 100,]:Int8", str->GetValueAsString().c_str());
614
//
615
// ASSERT_NO_THROW(tt = jit->Run(":Tensor[...]((item1='first', space=32, item3='second',))"));
616
// ASSERT_TRUE(tt);
617
// ASSERT_STREQ("[102, 105, 114, 115, 116, 32, 115, 101, 99, 111, 110, 100,]:Int8", tt->GetValueAsString().c_str());
618
//
619
// ASSERT_TRUE(str->op_equal(tt));
620
//
621
// ASSERT_NO_THROW(tt = jit->Run(":Int32[7,2](\"Тензор Int32 \")"));
622
// ASSERT_TRUE(tt);
623
// ASSERT_STREQ("[\n [1058, 1077,], [1085, 1079,], [1086, 1088,], [32, 73,], "
624
// "[110, 116,], [51, 50,], [32, 32,],\n]:Int32",
625
// tt->GetValueAsString().c_str());
626
//
627
// ASSERT_NO_THROW(tt = jit->Run(":Tensor(99)"));
628
// ASSERT_TRUE(tt);
629
// ASSERT_STREQ("99", tt->GetValueAsString().c_str());
630
//
631
// ASSERT_NO_THROW(tt = jit->Run(":Float64[10,2](0, ... )"));
632
// ASSERT_TRUE(tt);
633
// ASSERT_STREQ("[\n [0, 0,], [0, 0,], [0, 0,], [0, 0,], [0, 0,], [0, 0,], [0, "
634
// "0,], [0, 0,], [0, 0,], [0, 0,],\n]:Float64",
635
// tt->GetValueAsString().c_str());
636
//
637
//}
638
//
639
//TEST(Run, Comprehensions) {
640
//
641
// JIT * jit = JIT::ReCreate();
642
//
643
// ASSERT_NO_THROW(jit->Run("srand(100)"));
644
//
645
// ObjPtr tt;
646
// // Может быть раскрытие словаря, который возвращает вызов функции
647
// // и может быть многократный вызов одной и той функции
648
// // :Int32[3,2]( ... rand() ... )
649
// Logger::LogLevelType save = Logger::Instance()->SetLogLevel(LOG_LEVEL_INFO);
650
// ASSERT_NO_THROW(tt = jit->Run(":Int32[3,2]( 42, ... rand() ... )"));
651
// Logger::Instance()->SetLogLevel(save);
652
//
653
// ASSERT_TRUE(tt);
654
// std::string rand_str = tt->GetValueAsString();
655
// ASSERT_TRUE(50 < tt->GetValueAsString().size()) << rand_str;
656
// //ASSERT_STREQ("[\n [42, 677741240,], [611911301, 516687479,], [1039653884, 807009856,],\n]:Int32", tt->GetValueAsString().c_str()) << rand_str;
657
//
658
//
659
// ASSERT_NO_THROW(tt = jit->Run(":Int32[5,2]( ... 0..10 )"));
660
// ASSERT_TRUE(tt);
661
// ASSERT_STREQ("[\n [0, 1,], [2, 3,], [4, 5,], [6, 7,], [8, 9,],\n]:Int32", tt->GetValueAsString().c_str());
662
//
663
// ASSERT_NO_THROW(tt = jit->Run(":Float64[5,2]( 0..10 )"));
664
// ASSERT_TRUE(tt);
665
// ASSERT_STREQ("[\n [0, 1,], [2, 3,], [4, 5,], [6, 7,], [8, 9,],\n]:Float64", tt->GetValueAsString().c_str());
666
//
667
// ASSERT_NO_THROW(tt = jit->Run("0..1..0.1"));
668
// ASSERT_TRUE(tt);
669
// ASSERT_STREQ("0..1..0.1", tt->toString().c_str());
670
//
671
// ASSERT_NO_THROW(tt = jit->Run(":Tensor[_]( ... 0..0.99..0.1 )"));
672
// ASSERT_TRUE(tt);
673
// ASSERT_STREQ("[0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9,]:Float64", tt->GetValueAsString().c_str());
674
//
675
// // ASSERT_NO_THROW(tt = jit->Run(":Tensor( ... 0..0.99..0.1:Float32 )"));
676
// // ASSERT_TRUE(tt);
677
// // ASSERT_STREQ("[0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9,]:Float32", tt->GetValueAsString().c_str());
678
//
679
// ASSERT_NO_THROW(tt = jit->Run(":Tensor[10]( 1, 2, ... )"));
680
// ASSERT_TRUE(tt);
681
// ASSERT_STREQ("[1, 2, 1, 2, 1, 2, 1, 2, 1, 2,]:Int8", tt->GetValueAsString().c_str());
682
//
683
// ASSERT_NO_THROW(tt = jit->Run(":Tensor[10]( 1, 2, ... 0 ...)"));
684
// ASSERT_TRUE(tt);
685
// ASSERT_STREQ("[1, 2, 0, 0, 0, 0, 0, 0, 0, 0,]:Int8", tt->GetValueAsString().c_str());
686
//
687
// ASSERT_NO_THROW(tt = jit->Run(":Tensor[14]( 99, 100, ... 0..5, ... )"));
688
// ASSERT_TRUE(tt);
689
// ASSERT_STREQ("[99, 100, 0, 1, 2, 3, 4, 99, 100, 0, 1, 2, 3, 4,]:Int8", tt->GetValueAsString().c_str());
690
//
691
// ObjPtr dict;
692
// ASSERT_NO_THROW(dict = jit->Run(":Dictionary( ... 0..0.99..0.1 )"));
693
// ASSERT_TRUE(dict);
694
// ASSERT_STREQ("(0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9,)", dict->GetValueAsString().c_str());
695
//
696
// ASSERT_NO_THROW(dict = jit->Run(":Dictionary( ... 10..0..-1\\1 )"));
697
// ASSERT_TRUE(dict);
698
// ASSERT_STREQ("(10\\1, 9\\1, 8\\1, 7\\1, 6\\1, 5\\1, 4\\1, 3\\1, 2\\1, 1\\1,)", dict->GetValueAsString().c_str());
699
//
700
// ASSERT_NO_THROW(dict = jit->Run("dict ::= ( 1, two=2, .three=3,)"));
701
// ASSERT_TRUE(dict);
702
// ASSERT_STREQ("(1, two=2, three=3,)", dict->GetValueAsString().c_str());
703
//
704
// ObjPtr dd;
705
// ASSERT_NO_THROW(dd = jit->Run(":Dictionary( 0, ... dict)"));
706
// ASSERT_TRUE(dd);
707
// ASSERT_STREQ("(0, 1, 2, 3,)", dd->GetValueAsString().c_str());
708
//
709
// ASSERT_NO_THROW(dd = jit->Run(":Dictionary( 0, ... ... dict, end=42)"));
710
// ASSERT_TRUE(dd);
711
// ASSERT_STREQ("(0, 1, two=2, three=3, end=42,)", dd->GetValueAsString().c_str());
712
//
713
//
714
// ASSERT_TRUE(jit->m_diag->m_fill_remainder);
715
// ASSERT_ANY_THROW(tt = jit->Run(":Tensor[16]( 99, 100, ... 0..5, ... )"));
716
// jit->m_diag->m_fill_remainder = false;
717
// ASSERT_NO_THROW(tt = jit->Run(":Tensor[16]( 99, 100, ... 0..5, ... )"));
718
// ASSERT_TRUE(tt);
719
// ASSERT_STREQ("[99, 100, 0, 1, 2, 3, 4, 99, 100, 0, 1, 2, 3, 4, 99, 100,]:Int8", tt->GetValueAsString().c_str());
720
//
721
//}
722
//
723
//
1368
//
1369
//TEST(Run, Iterator) {
1370
//
1371
// JIT * jit = JIT::ReCreate();
1372
//
1373
// ObjPtr dict;
1374
// ASSERT_NO_THROW(dict = jit->Run("dict := ('1'=1, \"22\"=2, '333'=3, 4, \"555\"=5,)"));
1375
// ASSERT_TRUE(dict);
1376
// ASSERT_EQ(5, dict->size());
1377
// ASSERT_EQ(1, dict->at(0).second->GetValueAsInteger());
1378
// ASSERT_EQ(2, dict->at(1).second->GetValueAsInteger());
1379
// ASSERT_EQ(3, dict->at(2).second->GetValueAsInteger());
1380
// ASSERT_EQ(4, dict->at(3).second->GetValueAsInteger());
1381
// ASSERT_EQ(5, dict->at(4).second->GetValueAsInteger());
1382
// ASSERT_STREQ("1", dict->at(0).first.c_str());
1383
// ASSERT_STREQ("22", dict->at(1).first.c_str());
1384
// ASSERT_STREQ("333", dict->at(2).first.c_str());
1385
// ASSERT_STREQ("", dict->at(3).first.c_str());
1386
// ASSERT_STREQ("555", dict->at(4).first.c_str());
1387
//
1388
// ObjPtr dict1;
1389
// ASSERT_NO_THROW(dict1 = jit->Run("dict??"));
1390
// ASSERT_TRUE(dict1);
1391
// ASSERT_EQ(5, dict1->size());
1392
// ASSERT_EQ(1, dict1->at(0).second->GetValueAsInteger());
1393
// ASSERT_EQ(2, dict1->at(1).second->GetValueAsInteger());
1394
// ASSERT_EQ(3, dict1->at(2).second->GetValueAsInteger());
1395
// ASSERT_EQ(4, dict1->at(3).second->GetValueAsInteger());
1396
// ASSERT_EQ(5, dict1->at(4).second->GetValueAsInteger());
1397
// ASSERT_STREQ("1", dict1->at(0).first.c_str());
1398
// ASSERT_STREQ("22", dict1->at(1).first.c_str());
1399
// ASSERT_STREQ("333", dict1->at(2).first.c_str());
1400
// ASSERT_STREQ("", dict1->at(3).first.c_str());
1401
// ASSERT_STREQ("555", dict1->at(4).first.c_str());
1402
//
1403
//
1404
// ObjPtr iter_d = dict->IteratorMake();
1405
//
1406
// ASSERT_TRUE(iter_d);
1407
// ASSERT_EQ(iter_d->getType(), ObjType::Iterator);
1408
//
1409
// ASSERT_STREQ("1", iter_d->IteratorData()->toString().c_str());
1410
// ASSERT_STREQ("1", iter_d->IteratorNext(0)->toString().c_str());
1411
//
1412
// ASSERT_STREQ("2", iter_d->IteratorData()->toString().c_str());
1413
// ASSERT_STREQ("2", iter_d->IteratorNext(0)->toString().c_str());
1414
//
1415
// ASSERT_STREQ("3", iter_d->IteratorData()->toString().c_str());
1416
// ASSERT_STREQ("3", iter_d->IteratorNext(0)->toString().c_str());
1417
//
1418
// ASSERT_STREQ("4", iter_d->IteratorData()->toString().c_str());
1419
// ASSERT_STREQ("4", iter_d->IteratorNext(0)->toString().c_str());
1420
//
1421
// ASSERT_STREQ("5", iter_d->IteratorData()->toString().c_str());
1422
// ASSERT_STREQ("5", iter_d->IteratorNext(0)->toString().c_str());
1423
//
1424
// ASSERT_STREQ(":IteratorEnd", iter_d->IteratorData()->toString().c_str());
1425
// ObjPtr iter_end = iter_d->IteratorNext(0);
1426
// ASSERT_TRUE(iter_end);
1427
// EXPECT_EQ(ObjType::IteratorEnd, iter_end->getType()) << newlang::toString(iter_end->getType());
1428
// EXPECT_FALSE(iter_end->GetValueAsBoolean());
1429
// ASSERT_STREQ(":IteratorEnd", iter_end->IteratorData()->toString().c_str());
1430
//
1431
// iter_end = iter_d->IteratorNext(0);
1432
// ASSERT_TRUE(iter_end);
1433
// ASSERT_EQ(ObjType::IteratorEnd, iter_end->getType());
1434
// ASSERT_FALSE(iter_end->GetValueAsBoolean());
1435
// ASSERT_STREQ(":IteratorEnd", iter_d->IteratorData()->toString().c_str());
1436
//
1437
//
1438
// ObjPtr iter;
1439
// ASSERT_NO_THROW(iter = jit->Run("it := dict?"));
1440
//
1441
// ASSERT_TRUE(iter);
1442
// ASSERT_EQ(ObjType::Iterator, iter->getType()) << toString(iter->getType());
1443
// ASSERT_TRUE(iter->m_iterator);
1444
//
1445
// ASSERT_TRUE(iter->m_iterator->begin() != iter->m_iterator->end());
1446
// ASSERT_TRUE(*(iter->m_iterator) == iter->m_iterator->begin());
1447
//
1448
// ObjPtr one;
1449
// ASSERT_NO_THROW(one = jit->Run("it!"));
1450
// ASSERT_TRUE(one);
1451
// ASSERT_EQ(1, dict->at(0).second->GetValueAsInteger());
1452
//
1453
// ASSERT_NO_THROW(one = jit->Run("it!"));
1454
// ASSERT_TRUE(one);
1455
// ASSERT_EQ(2, one->GetValueAsInteger());
1456
//
1457
// ASSERT_NO_THROW(one = jit->Run("@next(it)"));
1458
// ASSERT_TRUE(one);
1459
// ASSERT_EQ(3, one->GetValueAsInteger());
1460
//
1461
// ASSERT_NO_THROW(one = jit->Run("it!"));
1462
// ASSERT_TRUE(one);
1463
// ASSERT_EQ(4, one->GetValueAsInteger());
1464
//
1465
// ASSERT_NO_THROW(one = jit->Run("it!"));
1466
// ASSERT_TRUE(one);
1467
// ASSERT_EQ(5, one->GetValueAsInteger());
1468
//
1469
// ASSERT_NO_THROW(one = jit->Run("it!"));
1470
// ASSERT_TRUE(one);
1471
// ASSERT_EQ(ObjType::IteratorEnd, one->getType()) << one << " " << toString(one->getType());
1472
//
1473
// ASSERT_NO_THROW(one = jit->Run("it!"));
1474
// ASSERT_TRUE(one);
1475
// ASSERT_EQ(ObjType::IteratorEnd, one->getType()) << one << " " << toString(one->getType());
1476
//
1477
// // "@@ iter( obj, ... ) @@ ::= @@ @$obj ? (@$...) @@"
1478
// // "@@ next( obj, ... ) @@ ::= @@ @$obj ! (@$...) @@"
1479
// // "@@ curr( obj ) @@ ::= @@ @$obj !? @@"
1480
// // "@@ first( obj ) @@ ::= @@ @$obj !! @@"
1481
// // "@@ all( obj ) @@ ::= @@ @$obj ?? @@"
1482
//
1483
//
1484
// ASSERT_TRUE(*(iter->m_iterator) == iter->m_iterator->end());
1485
// ASSERT_NO_THROW(one = jit->Run("it!!"));
1486
// ASSERT_TRUE(*(iter->m_iterator) != iter->m_iterator->end());
1487
//
1488
// ASSERT_NO_THROW(dict1 = jit->Run("it??(-3)"));
1489
// ASSERT_TRUE(dict1);
1490
// ASSERT_EQ(3, dict1->size());
1491
// ASSERT_EQ(1, dict1->at(0).second->GetValueAsInteger());
1492
// ASSERT_EQ(2, dict1->at(1).second->GetValueAsInteger());
1493
// ASSERT_EQ(3, dict1->at(2).second->GetValueAsInteger());
1494
//
1495
// ObjPtr dict2;
1496
// ASSERT_NO_THROW(dict2 = jit->Run("it??(-3)"));
1497
// ASSERT_TRUE(dict2);
1498
// ASSERT_EQ(3, dict2->size());
1499
// ASSERT_EQ(4, dict2->at(0).second->GetValueAsInteger());
1500
// ASSERT_EQ(5, dict2->at(1).second->GetValueAsInteger());
1501
// ASSERT_EQ(ObjType::IteratorEnd, dict2->at(2).second->getType());
1502
//
1503
// ObjPtr dict3;
1504
// ASSERT_NO_THROW(dict3 = jit->Run("it??(-3)"));
1505
// ASSERT_TRUE(dict3);
1506
// ASSERT_EQ(3, dict1->size());
1507
// ASSERT_EQ(ObjType::IteratorEnd, dict3->at(0).second->getType());
1508
// ASSERT_EQ(ObjType::IteratorEnd, dict3->at(1).second->getType());
1509
// ASSERT_EQ(ObjType::IteratorEnd, dict3->at(2).second->getType());
1510
//
1511
//
1512
//
1513
// ASSERT_TRUE(*(iter->m_iterator) == iter->m_iterator->end());
1514
// ASSERT_NO_THROW(jit->Run("it!!"));
1515
// ASSERT_TRUE(*(iter->m_iterator) != iter->m_iterator->end());
1516
//
1517
// ASSERT_NO_THROW(dict1 = jit->Run("it??(3)"));
1518
// ASSERT_TRUE(dict1);
1519
// ASSERT_EQ(3, dict1->size());
1520
// ASSERT_EQ(1, dict1->at(0).second->GetValueAsInteger());
1521
// ASSERT_EQ(2, dict1->at(1).second->GetValueAsInteger());
1522
// ASSERT_EQ(3, dict1->at(2).second->GetValueAsInteger());
1523
//
1524
// ASSERT_NO_THROW(dict2 = jit->Run("it??(3)"));
1525
// ASSERT_TRUE(dict2);
1526
// ASSERT_EQ(2, dict2->size());
1527
// ASSERT_EQ(4, dict2->at(0).second->GetValueAsInteger());
1528
// ASSERT_EQ(5, dict2->at(1).second->GetValueAsInteger());
1529
//
1530
// ASSERT_NO_THROW(dict3 = jit->Run("it??(3)"));
1531
// ASSERT_TRUE(dict3);
1532
// ASSERT_EQ(0, dict3->size());
1533
//
1534
//
1535
//
1536
// ASSERT_TRUE(*(iter->m_iterator) == iter->m_iterator->end());
1537
// ASSERT_NO_THROW(jit->Run("it!!"));
1538
// ASSERT_TRUE(*(iter->m_iterator) != iter->m_iterator->end());
1539
//
1540
// ObjPtr flt_res;
1541
// ASSERT_NO_THROW(flt_res = jit->Run("dict??('')"));
1542
// ASSERT_TRUE(flt_res);
1543
// ASSERT_EQ(1, flt_res->size());
1544
// ASSERT_EQ(4, flt_res->at(0).second->GetValueAsInteger());
1545
//
1546
//
1547
// ObjPtr flt1_res;
1548
// ASSERT_NO_THROW(flt1_res = jit->Run("dict??('.',100)"));
1549
// ASSERT_TRUE(flt1_res);
1550
// ASSERT_EQ(1, flt1_res->size());
1551
// ASSERT_EQ(1, flt1_res->at(0).second->GetValueAsInteger());
1552
//
1553
//
1554
// ObjPtr flt2_res;
1555
// ASSERT_NO_THROW(flt2_res = jit->Run("dict??('..',100)"));
1556
// ASSERT_TRUE(flt2_res);
1557
// ASSERT_EQ(1, flt2_res->size());
1558
// ASSERT_EQ(2, flt2_res->at(0).second->GetValueAsInteger());
1559
//
1560
// ObjPtr flt3_res;
1561
// ASSERT_NO_THROW(flt3_res = jit->Run("dict??('...',100)"));
1562
// ASSERT_TRUE(flt3_res);
1563
// ASSERT_EQ(2, flt3_res->size());
1564
// ASSERT_EQ(3, flt3_res->at(0).second->GetValueAsInteger());
1565
// ASSERT_EQ(5, flt3_res->at(1).second->GetValueAsInteger());
1566
//
1567
//
1568
//
1569
// ObjPtr range_test;
1570
// ASSERT_NO_THROW(range_test = jit->Run("1\\1..1..-1"));
1571
// ASSERT_TRUE(range_test);
1572
// ASSERT_EQ(3, range_test->size());
1573
// ASSERT_STREQ("1\\1", range_test->at(0).second->GetValueAsString().c_str());
1574
// ASSERT_STREQ("1\\1", range_test->at(1).second->GetValueAsString().c_str());
1575
// ASSERT_STREQ("-1\\1", range_test->at(2).second->GetValueAsString().c_str());
1576
// ASSERT_STREQ("1\\1..1\\1..-1\\1", range_test->GetValueAsString().c_str());
1577
//
1578
// // ObjPtr iter_test = ctx.ExecStr("(1,'sss',(,),2,3,)??", nullptr, true);
1579
// // ASSERT_TRUE(iter_test);
1580
// // ASSERT_STREQ("(1, 'sss', (,), 2, 3,)", iter_test->GetValueAsString().c_str());
1581
//
1582
// ObjPtr iter_dict;
1583
// ASSERT_NO_THROW(iter_dict = jit->Run("1..1..-1??"));
1584
// ASSERT_TRUE(iter_dict);
1585
// ASSERT_STREQ("(,)", iter_dict->GetValueAsString().c_str());
1586
//
1587
// ASSERT_NO_THROW(iter_dict = jit->Run("2..1..-1??"));
1588
// ASSERT_TRUE(iter_dict);
1589
// ASSERT_STREQ("(2,)", iter_dict->GetValueAsString().c_str());
1590
//
1591
// ASSERT_NO_THROW(iter_dict = jit->Run("3..1..-1??"));
1592
// ASSERT_TRUE(iter_dict);
1593
// ASSERT_STREQ("(3, 2,)", iter_dict->GetValueAsString().c_str());
1594
//
1595
// ASSERT_NO_THROW(iter_dict = jit->Run("3\\1..1..-1??"));
1596
// ASSERT_TRUE(iter_dict);
1597
// ASSERT_STREQ("(3\\1, 2\\1,)", iter_dict->GetValueAsString().c_str());
1598
//
1599
// ObjPtr iter_test;
1600
// ASSERT_NO_THROW(iter_test = jit->Run("iter_test := 3\\1..1..-1?"));
1601
// ASSERT_TRUE(iter_test);
1602
// ASSERT_TRUE(iter_test->m_iterator);
1603
// ASSERT_TRUE(iter_test->m_iterator->m_iter_obj);
1604
// ASSERT_TRUE(iter_test->m_iterator->m_iter_obj->m_iter_range_value);
1605
// ASSERT_STREQ("3\\1", iter_test->m_iterator->m_iter_obj->m_iter_range_value->GetValueAsString().c_str()) << iter_test->m_iterator->m_iter_obj->m_iter_range_value->GetValueAsString().c_str();
1606
// ASSERT_EQ(iter_test->getType(), ObjType::Iterator);
1607
//
1608
// ObjPtr while_test;
1609
//
1610
// ASSERT_NO_THROW(while_test = jit->Run("[@next(iter_test)]<->{- --'EXIT'-- -}"));
1611
// ASSERT_TRUE(while_test);
1612
// ASSERT_TRUE(while_test->is_return()) << while_test->toString();
1613
// ASSERT_STREQ(":RetMinus('EXIT')", while_test->toString().c_str()) << while_test->toString();
1614
//
1615
// ASSERT_NO_THROW(while_test = jit->Run("$^"));
1616
// ASSERT_TRUE(while_test);
1617
// ASSERT_TRUE(while_test->is_return()) << while_test->toString();
1618
// ASSERT_STREQ(":RetMinus('EXIT')", while_test->toString().c_str()) << while_test->toString();
1619
//
1620
// ASSERT_NO_THROW(while_test = jit->Run("@latter"));
1621
// ASSERT_TRUE(while_test);
1622
// ASSERT_TRUE(while_test->is_return()) << while_test->toString();
1623
// ASSERT_STREQ(":RetMinus('EXIT')", while_test->toString().c_str()) << while_test->toString();
1624
//
1625
// ASSERT_NO_THROW(while_test = jit->Run("* $^"));
1626
// ASSERT_TRUE(while_test);
1627
// ASSERT_TRUE(while_test->is_string_type()) << while_test->toString();
1628
// ASSERT_STREQ("'EXIT'", while_test->toString().c_str()) << while_test->toString();
1629
//
1630
//
1631
// ASSERT_NO_THROW(while_test = jit->Run("[iter_test!]<->{+ ++'PLUS'++ +}"));
1632
// ASSERT_TRUE(while_test);
1633
// ASSERT_TRUE(while_test->is_return()) << while_test->toString();
1634
// ASSERT_STREQ(":RetPlus('PLUS')", while_test->toString().c_str()) << while_test->toString();
1635
//
1636
//
1637
// ASSERT_NO_THROW(iter_dict = jit->Run("iter_dict := (1,2,3,)?"));
1638
// ASSERT_TRUE(iter_dict);
1639
// // ASSERT_TRUE(iter_dict->m_iterator->m_iter_obj->m_iter_range_value);
1640
// // ASSERT_STREQ("3\\1", iter_dict->m_iterator->m_iter_obj->m_iter_range_value->GetValueAsString().c_str()) << iter_test->m_iterator->m_iter_obj->m_iter_range_value->GetValueAsString().c_str();
1641
// ASSERT_EQ(iter_dict->getType(), ObjType::Iterator);
1642
//
1643
// ASSERT_NO_THROW(while_test = jit->Run("[iter_dict!]<->{+ ++'EXIT'++ +}"));
1644
// ASSERT_TRUE(while_test);
1645
// ASSERT_TRUE(while_test->is_return()) << while_test->toString();
1646
// ASSERT_STREQ(":RetPlus('EXIT')", while_test->toString().c_str()) << while_test->toString();
1647
//
1648
// ASSERT_NO_THROW(while_test = jit->Run("$^"));
1649
// ASSERT_TRUE(while_test);
1650
// ASSERT_TRUE(while_test->is_return()) << while_test->toString();
1651
// ASSERT_STREQ(":RetPlus('EXIT')", while_test->toString().c_str()) << while_test->toString();
1652
//
1653
// ASSERT_NO_THROW(while_test = jit->Run("@latter"));
1654
// ASSERT_TRUE(while_test);
1655
// ASSERT_TRUE(while_test->is_return()) << while_test->toString();
1656
// ASSERT_STREQ(":RetPlus('EXIT')", while_test->toString().c_str()) << while_test->toString();
1657
//
1658
// ASSERT_NO_THROW(while_test = jit->Run("*@latter"));
1659
// ASSERT_TRUE(while_test);
1660
// ASSERT_TRUE(while_test->is_string_type()) << while_test->toString();
1661
// ASSERT_STREQ("'EXIT'", while_test->toString().c_str()) << while_test->toString();
1662
//
1663
//
1664
// ASSERT_NO_THROW(iter_test = jit->Run("iter_test := @iter(3\\1..1..-1)"));
1665
//
1666
// ObjPtr item_val;
1667
// ASSERT_NO_THROW(item_val = jit->Run("@curr(iter_test)"));
1668
// ASSERT_TRUE(item_val);
1669
// ASSERT_STREQ("3\\1", item_val->GetValueAsString().c_str()) << iter_test->toString();
1670
//
1671
// ASSERT_NO_THROW(item_val = jit->Run("@next(iter_test)"));
1672
// ASSERT_TRUE(item_val);
1673
// ASSERT_STREQ("3\\1", item_val->GetValueAsString().c_str());
1674
//
1675
// ASSERT_NO_THROW(item_val = jit->Run("iter_test!?"));
1676
// ASSERT_TRUE(item_val);
1677
// ASSERT_STREQ("2\\1", item_val->GetValueAsString().c_str());
1678
//
1679
// ASSERT_NO_THROW(item_val = jit->Run("iter_test?!"));
1680
// ASSERT_TRUE(item_val);
1681
// ASSERT_STREQ("2\\1", item_val->GetValueAsString().c_str());
1682
//
1683
// ASSERT_STREQ(":Iterator", iter_test->GetValueAsString().c_str());
1684
// ASSERT_TRUE(iter_test->m_iterator);
1685
// ASSERT_TRUE(iter_test->m_iterator->m_iter_obj);
1686
// ASSERT_STREQ("2\\1", iter_test->m_iterator->m_iter_obj->m_iter_range_value->GetValueAsString().c_str());
1687
// ASSERT_STREQ("3\\1..1\\1..-1\\1", iter_test->m_iterator->m_iter_obj->GetValueAsString().c_str());
1688
//
1689
// ASSERT_NO_THROW(item_val = jit->Run("@next(iter_test)"));
1690
// ASSERT_TRUE(item_val);
1691
// ASSERT_STREQ("2\\1", item_val->GetValueAsString().c_str());
1692
// ASSERT_TRUE(item_val->GetValueAsBoolean());
1693
//
1694
// ASSERT_STREQ(":Iterator", iter_test->GetValueAsString().c_str());
1695
// ASSERT_TRUE(iter_test->m_iterator);
1696
// ASSERT_TRUE(iter_test->m_iterator->m_iter_obj);
1697
// ASSERT_STREQ("1\\1", iter_test->m_iterator->m_iter_obj->m_iter_range_value->GetValueAsString().c_str());
1698
// ASSERT_STREQ("3\\1..1\\1..-1\\1", iter_test->m_iterator->m_iter_obj->GetValueAsString().c_str());
1699
//
1700
// ASSERT_NO_THROW(item_val = jit->Run("@next(iter_test)"));
1701
// ASSERT_TRUE(item_val);
1702
//
1703
// ASSERT_STREQ(":Iterator", iter_test->GetValueAsString().c_str());
1704
// ASSERT_TRUE(iter_test->m_iterator);
1705
// ASSERT_TRUE(iter_test->m_iterator->m_iter_obj);
1706
// ASSERT_STREQ("1\\1", iter_test->m_iterator->m_iter_obj->m_iter_range_value->GetValueAsString().c_str());
1707
// ASSERT_STREQ("3\\1..1\\1..-1\\1", iter_test->m_iterator->m_iter_obj->GetValueAsString().c_str());
1708
//
1709
//
1710
//
1711
// ASSERT_TRUE(iter_test->m_iterator->m_iter_obj);
1712
// ASSERT_STREQ("3\\1..1\\1..-1\\1", iter_test->m_iterator->m_iter_obj->GetValueAsString().c_str());
1713
//
1714
// ASSERT_STREQ(":IteratorEnd", item_val->GetValueAsString().c_str());
1715
// ASSERT_FALSE(item_val->GetValueAsBoolean());
1716
//
1717
// ASSERT_NO_THROW(item_val = jit->Run("iter_test"));
1718
// ASSERT_TRUE(item_val);
1719
// ASSERT_STREQ(":Iterator", item_val->GetValueAsString().c_str());
1720
//
1721
// ASSERT_STREQ(":IteratorEnd", item_val->IteratorData()->GetValueAsString().c_str());
1722
// ASSERT_FALSE(item_val->IteratorNext(0)->GetValueAsBoolean());
1723
//
1724
// ASSERT_NO_THROW(while_test = jit->Run("[iter_test?!]<->{ --'EXIT'-- }"));
1725
// ASSERT_TRUE(while_test);
1726
// ASSERT_STRNE("EXIT", while_test->GetValueAsString().c_str()) << while_test->GetValueAsString().c_str();
1727
//
1728
//
1729
// ASSERT_NO_THROW(item_val = jit->Run("@first(iter_test)"));
1730
// ASSERT_TRUE(item_val);
1731
// ASSERT_STREQ("3\\1", item_val->GetValueAsString().c_str());
1732
//
1733
//
1734
//}
1735
//
1844
//
1845
//class RunTester : public ::testing::Test {
1846
//protected:
1847
// RuntimePtr m_rt;
1848
// JIT * m_jit;
1849
// ObjPtr m_result;
1850
// std::string m_string;
1851
//
1852
// RunTester() : m_jit(JIT::ReCreate()) {
1853
// }
1854
//
1855
// const char *Test(std::string eval, Obj *vars) {
1856
// eval += ";";
1857
// m_result = m_jit->Run(eval, vars);
1858
// if (m_result) {
1859
// m_string = m_result->GetValueAsString();
1860
// return m_string.c_str();
1861
// }
1862
// std::cout << "Fail parsing: '" << eval << "'\n";
1863
// ADD_FAILURE();
1864
//
1865
// return nullptr;
1866
// }
1867
//
1868
// const char *Test(const char *eval) {
1869
// Obj vars;
1870
//
1871
// return Test(eval, &vars);
1872
// }
1873
//};
1874
//
1875
//TEST_F(RunTester, Ops) {
1876
// ASSERT_STREQ("10", Test("10"));
1877
// ASSERT_STREQ("32", Test("10+22"));
1878
// ASSERT_STREQ("5.1", Test("1.1+4"));
1879
// ASSERT_STREQ("5.5", Test("1+4.5"));
1880
//
1881
// ASSERT_STREQ("10\\1", Test("10\\1"));
1882
// ASSERT_STREQ("32\\1", Test("10\\1+22\\1"));
1883
// ASSERT_STREQ("5\\1", Test("4\\5 + 42\\10"));
1884
// ASSERT_STREQ("11\\1", Test("10\\1 + 1"));
1885
// ASSERT_STREQ("4\\3", Test("1\\3 + 1"));
1886
//
1887
// ASSERT_STREQ("-12", Test("10 - 22"));
1888
// ASSERT_STREQ("-2.9", Test("1.1 - 4"));
1889
// ASSERT_STREQ("-3.5", Test("1 - 4.5"));
1890
// ASSERT_STREQ("-17\\5", Test("4\\5 - 42\\10"));
1891
// ASSERT_STREQ("-9\\10", Test("1\\10 - 1"));
1892
// ASSERT_STREQ("-2\\3", Test("1\\3 - 1"));
1893
//
1894
// ASSERT_STREQ("66", Test("2 * 33"));
1895
// ASSERT_STREQ("-5.5", Test("1.1 * -5"));
1896
// ASSERT_STREQ("180", Test("10 * 18"));
1897
// ASSERT_STREQ("66\\1", Test("2\\1 * 66\\2"));
1898
// ASSERT_STREQ("-15\\1", Test("3\\1 * -5"));
1899
// ASSERT_STREQ("9\\5", Test("18\\100 * 10"));
1900
//
1901
// ASSERT_STREQ("5", Test("10/2"));
1902
// ASSERT_STREQ("5.05", Test("10.1 / 2"));
1903
// ASSERT_STREQ("0.1", Test("1 / 10"));
1904
// ASSERT_STREQ("0.1", Test("1.0 / 10"));
1905
//
1906
// ASSERT_STREQ("4\\3", Test("12\\3 / 3"));
1907
// ASSERT_STREQ("1\\1", Test("5\\10 / 1\\2"));
1908
// ASSERT_STREQ("1\\100", Test("1\\10 / 10"));
1909
//
1910
// ASSERT_STREQ("5", Test("10//2"));
1911
// ASSERT_STREQ("5", Test("10.0 // 2"));
1912
// ASSERT_STREQ("0", Test("1 // 10"));
1913
// ASSERT_STREQ("7", Test("15 // 2"));
1914
// ASSERT_STREQ("-8", Test("-15 // 2"));
1915
// ASSERT_STREQ("2", Test("25 // 10"));
1916
// ASSERT_STREQ("-3", Test("-25 // 10"));
1917
// ASSERT_STREQ("-3", Test("-30 // 10"));
1918
// ASSERT_STREQ("-4", Test("-31 // 10"));
1919
//
1920
// // ASSERT_STREQ("100", Test("2*20+10*5"));
1921
//
1922
// ASSERT_STREQ("", Test("\"\""));
1923
// ASSERT_STREQ(" ", Test("\" \""));
1924
// ASSERT_STREQ("строка", Test("\"\" \"строка\" "));
1925
// ASSERT_STREQ("строка 222", Test("\"строка \" \"222\" "));
1926
// // ASSERT_STREQ("строка строка строка ", Test("\"строка \" * 3 "));
1927
//
1928
// ASSERT_STREQ("100", Test("$var1:=100"));
1929
// ObjPtr var1 = m_result;
1930
// ASSERT_TRUE(var1);
1931
// ASSERT_STREQ("('$var1',)", Test("$?!"));
1932
// ASSERT_STREQ("100", Test("var1"));
1933
//
1934
// ObjPtr vars = Obj::CreateDict(Obj::Arg(var1, "var1"));
1935
//
1936
// // ASSERT_ANY_THROW(Test("$var1"));
1937
// ASSERT_NO_THROW(Test("$var1", vars.get()));
1938
// ASSERT_STREQ("100", Test("$var1", vars.get()));
1939
//
1940
// ASSERT_STREQ("20", Test("$var2:=9+11"));
1941
// ObjPtr var2 = m_result;
1942
// ASSERT_TRUE(var2);
1943
// ASSERT_STREQ("('$var1', '$var2',)", Test("$!?"));
1944
// ASSERT_STREQ("20", Test("var2"));
1945
//
1946
// // ASSERT_ANY_THROW(Test("$var2"));
1947
// // ASSERT_ANY_THROW(Test("$var2", vars.get()));
1948
// vars->push_back(Obj::Arg(var2, "var2"));
1949
//
1950
// ASSERT_NO_THROW(Test("$var2", vars.get()));
1951
// ASSERT_STREQ("20", Test("$var2", vars.get()));
1952
//
1953
// ASSERT_STREQ("100", Test("var1"));
1954
// ASSERT_STREQ("120", Test("var1+=var2"));
1955
// ASSERT_STREQ("('$var1', '$var2',)", Test("$!?"));
1956
//
1957
// ASSERT_STREQ("120", Test("$var1", vars.get()));
1958
//
1959
// ASSERT_NO_THROW(Test("var1 := _"));
1960
// ASSERT_STREQ("('$var1', '$var2',)", Test("$?!"));
1961
// ASSERT_NO_THROW(Test("var2 := _"));
1962
// ASSERT_STREQ("('$var1', '$var2',)", Test("$?!"));
1963
//}
1964
//
2231
//
2232
//
2233
//
2234
//using namespace newlang;
2235
//
2236
//TEST(RunTest, Empty) {
2237
// Obj var;
2238
// ASSERT_TRUE(var.empty());
2239
// ASSERT_EQ(ObjType::None, var.getType());
2240
//}
2241
//
2242
//TEST(RunTest, Value) {
2243
// Obj var;
2244
//
2245
// var.SetValue_(0);
2246
// ASSERT_EQ(ObjType::Bool, var.getType());
2247
//
2248
// var.SetValue_(1);
2249
// ASSERT_EQ(ObjType::Bool, var.getType());
2250
//
2251
// var.SetValue_(1.0);
2252
// ASSERT_EQ(ObjType::Float32, var.getType());
2253
//
2254
// var.SetValue_(1.0E+40);
2255
// ASSERT_EQ(ObjType::Float64, var.getType());
2256
//
2257
// var.SetValue_(true);
2258
// ASSERT_EQ(ObjType::Bool, var.getType());
2259
//
2260
// var.SetValue_(2);
2261
// ASSERT_EQ(ObjType::Int8, var.getType());
2262
//
2263
// var.SetValue_(-100);
2264
// ASSERT_EQ(ObjType::Int8, var.getType());
2265
//
2266
// var.SetValue_(1000);
2267
// ASSERT_EQ(ObjType::Int16, var.getType());
2268
//
2269
// var.SetValue_(100000);
2270
// ASSERT_EQ(ObjType::Int32, var.getType());
2271
//
2272
// var.SetValue_(10000000000);
2273
// ASSERT_EQ(ObjType::Int64, var.getType());
2274
//
2275
// var.SetValue_(2.0);
2276
// ASSERT_EQ(ObjType::Float32, var.getType());
2277
//
2278
// var.SetValue_(2.0E+40);
2279
// ASSERT_EQ(ObjType::Float64, var.getType());
2280
//
2281
// var.SetValue_(false);
2282
// ASSERT_EQ(ObjType::Bool, var.getType());
2283
//}
2284
//
2285
//TEST(RunTest, String) {
2286
// Obj var;
2287
//
2288
// var.SetValue_(std::string("test"));
2289
// ASSERT_EQ(ObjType::StrChar, var.getType()) << toString(var.getType());
2290
//
2291
// Obj str1;
2292
// str1.SetValue_(L"Test str");
2293
// ASSERT_EQ(ObjType::StrWide, str1.getType()) << toString(str1.getType());
2294
//
2295
// Obj str2;
2296
// str2.SetValue_(std::string("test2"));
2297
// ASSERT_EQ(ObjType::StrChar, str2.getType()) << toString(str2.getType());
2298
//
2299
// ObjPtr str_byte = Obj::CreateString("byte");
2300
// ASSERT_STREQ("byte", str_byte->GetValueAsString().c_str());
2301
// ASSERT_EQ(4, str_byte->size());
2302
// ASSERT_EQ(4, str_byte->m_value.size());
2303
// ASSERT_STREQ("b", (*str_byte)[0].second->GetValueAsString().c_str());
2304
// ASSERT_STREQ("y", (*str_byte)[1].second->GetValueAsString().c_str());
2305
// ASSERT_STREQ("t", (*str_byte)[2].second->GetValueAsString().c_str());
2306
// ASSERT_STREQ("e", (*str_byte)[3].second->GetValueAsString().c_str());
2307
//
2308
// str_byte->op_set_index(0, "B");
2309
// str_byte->op_set_index(1, "Y");
2310
// ASSERT_STREQ("BYte", str_byte->GetValueAsString().c_str());
2311
// str_byte->op_set_index(2, "T");
2312
// str_byte->op_set_index(3, "E");
2313
// ASSERT_STREQ("BYTE", str_byte->GetValueAsString().c_str());
2314
//
2315
// ObjPtr str_char = Obj::CreateString(L"строка");
2316
// ASSERT_EQ(6, str_char->size());
2317
// ASSERT_EQ(6, str_char->m_string.size());
2318
//
2319
// ASSERT_STREQ("с", (*str_char)[0].second->GetValueAsString().c_str());
2320
// ASSERT_STREQ("т", (*str_char)[1].second->GetValueAsString().c_str());
2321
// ASSERT_STREQ("р", (*str_char)[2].second->GetValueAsString().c_str());
2322
// ASSERT_STREQ("о", (*str_char)[3].second->GetValueAsString().c_str());
2323
// ASSERT_STREQ("к", (*str_char)[4].second->GetValueAsString().c_str());
2324
// ASSERT_STREQ("а", (*str_char)[5].second->GetValueAsString().c_str());
2325
//
2326
// str_char->op_set_index(0, "С");
2327
// str_char->op_set_index(1, "Т");
2328
// ASSERT_STREQ("СТрока", str_char->GetValueAsString().c_str());
2329
// str_char->op_set_index(2, "Р");
2330
// str_char->op_set_index(3, "О");
2331
// ASSERT_STREQ("СТРОка", str_char->GetValueAsString().c_str());
2332
//
2333
//
2334
// ObjPtr format = Obj::CreateString("{1} {2} {name}");
2335
//
2336
// ASSERT_ANY_THROW((*format)(););
2337
// ASSERT_ANY_THROW((*format)(100););
2338
//
2339
// ObjPtr str3;
2340
// ASSERT_NO_THROW(str3 = (*format)(Obj::Arg(-1), Obj::Arg("222"), Obj::Arg("NAME", "name")));
2341
// ASSERT_STREQ("-1 222 NAME", str3->GetValueAsString().c_str());
2342
//
2343
// ObjPtr str4;
2344
// ASSERT_NO_THROW(str4 = (*format)(Obj::Arg("value", "name"), Obj::Arg("VAL")););
2345
// ASSERT_STREQ("value VAL value", str4->GetValueAsString().c_str());
2346
//
2347
// format = Obj::CreateString("{name}no {3} {name} {name2}");
2348
// ObjPtr str5;
2349
// ASSERT_NO_THROW(str5 = (*format)(Obj::Arg("value", "name"), Obj::Arg("УТФ8-УТФ8", "name2"), Obj::Arg("УТФ8", "name3")));
2350
// ASSERT_STREQ("valueno УТФ8 value УТФ8-УТФ8", str5->GetValueAsString().c_str());
2351
//
2352
//}
2353
//
2354
//TEST(RunTest, StrFormat) {
2355
//
2356
// JIT * jit = JIT::ReCreate();
2357
// ASSERT_TRUE(jit);
2358
//
2359
// ObjPtr str;
2360
// ASSERT_NO_THROW(str = jit->Run("'{1}'('template')"));
2361
// ASSERT_STREQ("template", str->GetValueAsString().c_str());
2362
//
2363
// ASSERT_NO_THROW(str = jit->Run("'{1} {2} {1}'('template', 'str')"));
2364
// ASSERT_STREQ("template str template", str->GetValueAsString().c_str());
2365
//
2366
// ASSERT_NO_THROW(str = jit->Run("'{1} {2} {1} {name}'('template', name='str')"));
2367
// ASSERT_STREQ("template str template str", str->GetValueAsString().c_str());
2368
//
2369
// ASSERT_NO_THROW(str = jit->Run("'{1} {2} {1} {name}'(333, name=0.123)"));
2370
// ASSERT_STREQ("333 0.123 333 0.123", str->GetValueAsString().c_str());
2371
//
2372
// ASSERT_ANY_THROW(str = jit->Run("'{1} {2} {1} {name}'(333)"));
2373
// ASSERT_ANY_THROW(str = jit->Run("'{1} {2} {1} {name}'(name=333)"));
2374
// ASSERT_ANY_THROW(str = jit->Run("'{1} {2} {1} {name}'(333, error=333)"));
2375
//
2376
//
2377
// ASSERT_NO_THROW(str = jit->Run("tmpl1:FmtChar := '%s'; tmpl1('template')"));
2378
// ASSERT_STREQ("template", str->GetValueAsString().c_str());
2379
//
2380
// ASSERT_NO_THROW(str = jit->Run("tmpl2:FmtChar := '%s %s'; tmpl2('template', 'str')"));
2381
// ASSERT_STREQ("template str", str->GetValueAsString().c_str());
2382
//
2383
//#pragma message WARNING("Wrong float argument type!")
2384
// ASSERT_NO_THROW(str = jit->Run("tmpl3:FmtChar := '%d %f'; tmpl3(333, 1.123)"));
2385
// ASSERT_STREQ("333 0.000000", str->GetValueAsString().c_str());
2387
//
2390
//}
2391
//
2392
//TEST(RunTest, Dict) {
2393
//
2394
// JIT * jit = JIT::ReCreate();
2395
// ASSERT_TRUE(jit);
2396
//
2397
// Obj var(ObjType::Dictionary);
2398
// ASSERT_TRUE(var.empty());
2399
// EXPECT_ANY_THROW(var[0]);
2400
//
2401
// ASSERT_EQ(0, var.size());
2402
// ObjPtr var2;
2403
// ASSERT_NO_THROW(var2 = jit->Run("(,)"));
2404
//
2405
// var.push_back(Obj::CreateString("Test1"));
2406
// ASSERT_EQ(1, var.size());
2407
// var.push_back(Obj::CreateString("Test3"));
2408
// ASSERT_EQ(2, var.size());
2409
// var.insert(var.at_index_const(1), Obj::Arg(2, "2"));
2410
// var.insert(var.at_index_const(0), Obj::Arg(0, "0"));
2411
// ASSERT_EQ(4, var.size());
2412
//
2413
// ASSERT_TRUE(var[0].second->op_accurate(Obj::CreateValue(0, ObjType::None)));
2414
// ASSERT_TRUE(var[1].second->op_accurate(Obj::CreateString("Test1")));
2415
// ASSERT_TRUE(var[2].second->op_accurate(Obj::CreateValue(2, ObjType::None)));
2416
// ASSERT_TRUE(var[3].second->op_accurate(Obj::CreateString(L"Test3")));
2417
//
2418
// ASSERT_NO_THROW(var2 = jit->Run("(0, \"Test1\", 2, 'Test3',)"));
2419
//
2420
// ASSERT_TRUE((*var2)[0].second->op_accurate(Obj::CreateValue(0, ObjType::None)));
2421
// ASSERT_TRUE((*var2)[1].second->op_accurate(Obj::CreateString("Test1")));
2422
// ASSERT_TRUE((*var2)[2].second->op_accurate(Obj::CreateValue(2, ObjType::None)));
2423
// ASSERT_TRUE((*var2)[3].second->op_accurate(Obj::CreateString(L"Test3")));
2424
//
2425
// ObjPtr var3;
2426
//
2427
// ASSERT_NO_THROW(var3 = jit->Run("(0, \"Test1\", 2, 'Test3',)"));
2428
//
2429
// ASSERT_TRUE((*var3)[0].second->op_accurate(Obj::CreateValue(0, ObjType::None)));
2430
// ASSERT_TRUE((*var3)[1].second->op_accurate(Obj::CreateString("Test1")));
2431
// ASSERT_TRUE((*var3)[2].second->op_accurate(Obj::CreateValue(2, ObjType::None)));
2432
// ASSERT_TRUE((*var3)[3].second->op_accurate(Obj::CreateString(L"Test3")));
2433
//}
2434
//
2435
//TEST(RunTest, AsMap) {
2436
//
2437
// ObjPtr map = Obj::CreateType(ObjType::Dictionary);
2438
// ASSERT_TRUE(map->empty());
2439
// EXPECT_ANY_THROW((*map)["test1"]);
2440
// ASSERT_EQ(0, map->size());
2441
//
2442
// ObjPtr temp = Obj::CreateString("Test");
2443
// map->push_back(temp, "test1");
2444
// map->push_back(Obj::CreateValue(100, ObjType::None), "test2");
2445
// ASSERT_EQ(2, map->size());
2446
// ASSERT_STREQ((*map)["test1"].second->toString().c_str(), temp->toString().c_str()) << temp->toString().c_str();
2447
//
2448
// ASSERT_TRUE((*map)["test2"].second);
2449
// ObjPtr temp100 = Obj::CreateValue(100, ObjType::None);
2450
// ASSERT_TRUE(map->exist(temp100, true));
2451
//
2452
// ObjPtr test2 = (*map)["test2"].second;
2453
// ASSERT_TRUE(test2);
2454
// ASSERT_TRUE(test2);
2455
// ASSERT_STREQ("100", test2->toString().c_str());
2456
//}
2457
//
2458
//TEST(RunTest, Eq) {
2459
//
2460
// ObjPtr var_int = Obj::CreateValue(100, ObjType::None);
2461
// ObjPtr var_num = Obj::CreateValue(100.0, ObjType::None);
2462
// ObjPtr var_str = Obj::CreateString(L"STRING");
2463
// ObjPtr var_bool = Obj::CreateBool(true);
2464
// ObjPtr var_empty = Obj::CreateNone();
2465
//
2466
// ASSERT_EQ(var_int->m_var_type_current, ObjType::Int8) << (int) var_int->getType();
2467
// ASSERT_EQ(var_num->m_var_type_current, ObjType::Float32) << (int) var_num->getType();
2468
// ASSERT_EQ(var_str->m_var_type_current, ObjType::StrWide) << (int) var_str->getType();
2469
// ASSERT_EQ(var_bool->m_var_type_current, ObjType::Bool) << (int) var_bool->getType();
2470
// ASSERT_EQ(var_empty->m_var_type_current, ObjType::None) << (int) var_empty->getType();
2471
// ASSERT_TRUE(var_empty->empty()) << (int) var_empty->getType();
2472
// ASSERT_FALSE(var_int->empty()) << (int) var_int->getType();
2473
//
2474
//
2475
// ASSERT_TRUE(var_int->op_accurate(Obj::CreateValue(100, ObjType::None)));
2476
// ASSERT_FALSE(var_int->op_accurate(Obj::CreateValue(111, ObjType::None)));
2477
//
2478
// ASSERT_TRUE(var_num->op_equal(Obj::CreateValue(100.0, ObjType::None)));
2479
// ASSERT_FALSE(var_num->op_equal(Obj::CreateValue(100.0001, ObjType::None)));
2480
// ASSERT_TRUE(var_num->op_accurate(Obj::CreateValue(100.0, ObjType::None)));
2481
// ASSERT_FALSE(var_num->op_accurate(Obj::CreateValue(100.0001, ObjType::None)));
2482
//
2483
// ASSERT_TRUE(var_int->op_equal(Obj::CreateValue(100.0, ObjType::None)));
2484
// ASSERT_TRUE(var_int->op_accurate(Obj::CreateValue(100.0, ObjType::None)));
2485
// ASSERT_FALSE(var_int->op_equal(Obj::CreateValue(100.1, ObjType::None)));
2486
// ASSERT_FALSE(var_int->op_accurate(Obj::CreateValue(100.1, ObjType::None)));
2487
//
2488
//
2489
// ObjPtr var_int2 = Obj::CreateValue(101, ObjType::None);
2490
// ObjPtr var_num2 = Obj::CreateValue(100.1, ObjType::None);
2491
//
2492
//
2493
// ASSERT_TRUE(var_int->op_accurate(var_int));
2494
// ASSERT_FALSE(var_int->op_accurate(var_int2));
2495
//
2496
// ASSERT_TRUE(var_num->op_accurate(var_num));
2497
// ASSERT_FALSE(var_num->op_accurate(var_num2));
2498
//
2499
// ASSERT_TRUE(var_int->op_equal(var_num));
2500
//
2501
// ASSERT_FALSE(var_int->op_equal(var_num2));
2502
// ASSERT_FALSE(var_num2->op_equal(var_int));
2503
//
2504
// ObjPtr var_bool2 = Obj::CreateBool(false);
2505
//
2506
// ASSERT_TRUE(var_bool->op_accurate(var_bool));
2507
// ASSERT_FALSE(var_bool->op_accurate(var_bool2));
2508
//
2509
// ObjPtr var_str2 = Obj::CreateString("STRING2");
2510
//
2511
// ASSERT_TRUE(var_str->op_accurate(var_str));
2512
// ASSERT_TRUE(var_str->op_accurate(Obj::CreateString("STRING")));
2513
// ASSERT_FALSE(var_str->op_accurate(var_str2));
2514
//
2515
//
2516
// ObjPtr var_empty2 = Obj::CreateNone();
2517
//
2518
// ASSERT_TRUE(var_empty->op_accurate(var_empty));
2519
// ASSERT_TRUE(var_empty->op_accurate(var_empty2));
2520
//}
2521
//
2522
//TEST(RunTest, Ops) {
2523
//
2524
// ObjPtr var_zero = Obj::CreateValue(0, ObjType::None);
2525
// ASSERT_TRUE(var_zero->is_bool_type());
2526
// ASSERT_TRUE(var_zero->is_arithmetic_type());
2527
// ASSERT_EQ(ObjType::Bool, var_zero->m_var_type_current);
2528
//
2529
// ObjPtr var_bool = Obj::CreateBool(true);
2530
// ASSERT_TRUE(var_bool->is_bool_type());
2531
// ASSERT_TRUE(var_bool->is_arithmetic_type());
2532
// ASSERT_EQ(ObjType::Bool, var_bool->m_var_type_current);
2533
//
2534
// ObjPtr var_char = Obj::CreateValue(100);
2535
// ASSERT_TRUE(var_char->is_arithmetic_type());
2536
// ASSERT_EQ(ObjType::Int8, var_char->m_var_type_current);
2537
//
2538
// ObjPtr var_int = Obj::CreateValue(100000);
2539
// ASSERT_TRUE(var_int->is_arithmetic_type());
2540
// ASSERT_EQ(ObjType::Int32, var_int->m_var_type_current) << newlang::toString(var_char->m_var_type_current);
2541
//
2542
// ObjPtr var_float = Obj::CreateValue(1.0);
2543
// ASSERT_TRUE(var_float->is_arithmetic_type());
2544
// ASSERT_EQ(ObjType::Float32, var_float->m_var_type_current) << newlang::toString(var_char->m_var_type_current);
2545
//
2546
// ObjPtr var_tensor = Obj::CreateRange(0, 10)->toType(ObjType::Int32);
2547
// ASSERT_TRUE(var_tensor->is_arithmetic_type());
2548
// ASSERT_EQ(ObjType::Int32, var_tensor->m_var_type_current) << newlang::toString(var_char->m_var_type_current);
2549
//
2550
// var_tensor->operator*=(var_bool);
2551
// ASSERT_TRUE(var_tensor->is_arithmetic_type());
2552
// EXPECT_EQ(ObjType::Int32, var_tensor->m_var_type_current) << newlang::toString(var_char->m_var_type_current);
2553
//
2554
// var_tensor->operator*=(var_int);
2555
// ASSERT_TRUE(var_tensor->is_arithmetic_type());
2556
// EXPECT_EQ(ObjType::Int32, var_tensor->m_var_type_current) << newlang::toString(var_char->m_var_type_current);
2557
//
2558
// var_tensor->operator*=(var_float);
2559
// ASSERT_TRUE(var_tensor->is_arithmetic_type());
2560
// EXPECT_EQ(ObjType::Float32, var_tensor->m_var_type_current) << newlang::toString(var_char->m_var_type_current);
2561
//}
2562
//
2563
//TEST(RunTest, Exist) {
2564
//
2565
// Obj var_array(ObjType::Dictionary);
2566
//
2567
// var_array.push_back(Obj::CreateString("item1"));
2568
// var_array.push_back(Obj::CreateString("item2"));
2569
//
2570
// ObjPtr item = Obj::CreateString("item1");
2571
// ASSERT_TRUE(var_array.exist(item, true));
2572
// item->SetValue_("item2");
2573
// ASSERT_TRUE(var_array.exist(item, true));
2574
// item->SetValue_("item");
2575
// ASSERT_FALSE(var_array.exist(item, true));
2576
//
2577
//
2578
// Obj var_map(ObjType::Dictionary);
2579
//
2580
// var_map.push_back(Obj::CreateString("MAP_VALUE1"), "map1");
2581
// var_map.push_back(Obj::CreateString("MAP_VALUE2"), "map2");
2582
//
2583
// ASSERT_TRUE(var_map[std::string("map1")].second);
2584
// ASSERT_TRUE(var_map["map2"].second);
2585
// ASSERT_EQ(var_map.find("map"), var_map.end());
2586
//
2587
//}
2588
//
2589
//TEST(RunTest, Intersec) {
2590
//
2591
// Obj var_array(ObjType::Dictionary);
2592
// Obj var_array2(ObjType::Dictionary);
2593
//
2594
// var_array.push_back(Obj::CreateString("item1"));
2595
// var_array.push_back(Obj::CreateString("item2"));
2596
//
2597
// ObjPtr result = var_array.op_bit_and(var_array2, true);
2598
// ASSERT_TRUE(result->empty());
2599
//
2600
// var_array2.push_back(Obj::CreateString("item3"));
2601
//
2602
// result = var_array.op_bit_and(var_array2, true);
2603
// ASSERT_TRUE(result->empty());
2604
//
2605
// var_array2.push_back(Obj::CreateString("item1"));
2606
// result = var_array.op_bit_and(var_array2, true);
2607
// ASSERT_FALSE(result->empty());
2608
// ASSERT_EQ(1, result->size());
2609
//
2610
// var_array2.push_back(Obj::CreateString("item2"));
2611
// result = var_array.op_bit_and(var_array2, true);
2612
// ASSERT_FALSE(result->empty());
2613
// ASSERT_EQ(2, result->size());
2614
// //
2615
// // result = Op:intersec(var_array, var_array2);
2616
// // ASSERT_TRUE(Var::isEmpty(result));
2617
// //
2618
// //
2619
// // ASSERT_TRUE(var_array.Exist(std::string("item1")));
2620
// //
2621
// // ASSERT_TRUE(var_array.Exist(std::string("item1")));
2622
// // ASSERT_TRUE(var_array.Exist(std::string("item2")));
2623
// // ASSERT_FALSE(var_array.Exist(std::string("item")));
2624
// //
2625
// //
2626
// // Var var_map(Var::Type::MAP);
2627
// //
2628
// // var_map.Set("map1", "MAP1");
2629
// // var_map.Set("map2", "MAP2");
2630
// //
2631
// // ASSERT_TRUE(var_map.Exist(std::string("map1")));
2632
// // ASSERT_TRUE(var_map.Exist(std::string("map2")));
2633
// // ASSERT_FALSE(var_map.Exist(std::string("map")));
2634
//
2635
//
2636
//
2637
//
2638
// // Var var_object(Var::Type::OBJECT);
2639
// // Var var_list(Var::Type::LIST);
2640
// //
2641
// // var_list.Set("map1", "MAP1");
2642
// // var_map.Set("map2", "MAP2");
2643
// //
2644
// // ASSERT_TRUE(var_map.Exist("map1"));
2645
// // ASSERT_TRUE(var_map.Exist("map2"));
2646
// // ASSERT_FALSE(var_map.Exist("map"));
2647
//}
2648
//
2649
//TEST(RunTest, Print) {
2650
//
2651
// RuntimePtr rt = RunTime::Init();
2652
// ASSERT_TRUE(rt);
2653
//
2654
// ObjPtr var_int = Obj::CreateValue(100, ObjType::None);
2655
// ObjPtr var_num = Obj::CreateValue(100.123, ObjType::None);
2656
// ObjPtr var_str = Obj::CreateString(L"STRCHAR");
2657
// ObjPtr var_strbyte = Obj::CreateString("STRBYTE");
2658
// ObjPtr var_bool = Obj::CreateBool(true);
2659
// ObjPtr var_empty = Obj::CreateNone();
2660
//
2661
// ASSERT_STREQ("100", var_int->toString().c_str()) << var_int;
2662
// ASSERT_STREQ("100.123", var_num->toString().c_str()) << var_num;
2663
// ASSERT_STREQ("\"STRCHAR\"", var_str->toString().c_str()) << var_str;
2664
// ASSERT_STREQ("'STRBYTE'", var_strbyte->toString().c_str()) << var_strbyte;
2665
// ASSERT_STREQ("1", var_bool->toString().c_str()) << var_bool;
2666
// ASSERT_STREQ("_", var_empty->toString().c_str()) << var_empty;
2667
//
2668
// ObjPtr var_dict = Obj::CreateType(ObjType::Dictionary);
2669
//
2670
// ASSERT_STREQ("(,)", var_dict->toString().c_str()) << var_dict;
2671
//
2672
// var_dict->m_var_name = "dict";
2673
// ASSERT_STREQ("dict=(,)", var_dict->toString().c_str()) << var_dict;
2674
//
2675
// var_dict->push_back(Obj::CreateString(L"item1"));
2676
// ASSERT_STREQ("dict=(\"item1\",)", var_dict->toString().c_str()) << var_dict;
2677
// var_dict->push_back(var_int);
2678
// var_dict->push_back(var_bool);
2679
// ASSERT_STREQ("dict=(\"item1\", 100, 1,)", var_dict->toString().c_str()) << var_dict;
2680
//
2681
//
2682
// ObjPtr var_array = Obj::CreateDict(); //CreateTensor({1});
2683
//
2684
// ASSERT_STREQ("(,)", var_array->toString().c_str()) << var_array;
2685
//
2686
// var_array->m_var_name = "array";
2687
// ASSERT_STREQ("array=(,)", var_array->toString().c_str()) << var_array;
2688
//
2689
// var_array->push_back(Obj::CreateString("item1"));
2690
// ASSERT_STREQ("array=('item1',)", var_array->toString().c_str()) << var_array;
2691
// ASSERT_NO_THROW(var_array->push_back(var_int));
2692
// ASSERT_NO_THROW(var_array->push_back(var_bool));
2693
// ASSERT_STREQ("array=('item1', 100, 1,)", var_array->toString().c_str()) << var_array;
2694
//
2695
//}
2696
//
2697
//TEST(RunTest, CreateFromInteger) {
2698
//
2699
// JIT * jit = JIT::ReCreate();
2700
// ASSERT_TRUE(jit);
2701
//
2702
// ObjPtr var = jit->Run("123");
2703
// ASSERT_TRUE(var);
2704
// ASSERT_EQ(ObjType::Int8, var->getType()) << toString(var->getType());
2705
// ASSERT_EQ(123, var->GetValueAsInteger());
2706
//
2707
// ObjPtr var2 = jit->Run("123");
2708
// ASSERT_TRUE(var2);
2709
// ASSERT_EQ(ObjType::Int8, var2->getType()) << toString(var2->getType());
2710
// ASSERT_EQ(123, var2->GetValueAsInteger());
2711
//
2712
// var = jit->Run("-123");
2713
// ASSERT_TRUE(var);
2714
// ASSERT_EQ(ObjType::Int8, var->getType()) << toString(var->getType());
2715
// ASSERT_EQ(-123, var->GetValueAsInteger());
2716
//
2717
// var2 = jit->Run("-123");
2718
// ASSERT_TRUE(var2);
2719
// ASSERT_EQ(ObjType::Int8, var2->getType()) << toString(var2->getType());
2720
// ASSERT_EQ(-123, var2->GetValueAsInteger());
2721
//}
2722
//
2723
//TEST(RunTest, CreateFromNumber) {
2724
//
2725
// JIT * jit = JIT::ReCreate();
2726
// ASSERT_TRUE(jit);
2727
//
2728
// ObjPtr var = jit->Run("123.123");
2729
// ASSERT_TRUE(var);
2730
// ASSERT_EQ(ObjType::Float32, var->getType());
2731
// ASSERT_DOUBLE_EQ(123.123, var->GetValueAsNumber());
2732
//
2733
// ObjPtr var2 = jit->Run("123.123");
2734
// ASSERT_TRUE(var2);
2735
// ASSERT_EQ(ObjType::Float32, var2->getType());
2736
// ASSERT_DOUBLE_EQ(123.123, var2->GetValueAsNumber());
2737
//
2738
// var = jit->Run("-123.123");
2739
// ASSERT_TRUE(var);
2740
// ASSERT_EQ(ObjType::Float64, var->getType());
2741
// ASSERT_DOUBLE_EQ(-123.123, var->GetValueAsNumber());
2742
//
2743
// var2 = jit->Run("-123.123E+40");
2744
// ASSERT_TRUE(var2);
2745
// ASSERT_EQ(ObjType::Float64, var2->getType());
2746
// ASSERT_DOUBLE_EQ(-123.123E+40, var2->GetValueAsNumber());
2747
//}
2748
//
2749
//TEST(RunTest, CreateFromString) {
2750
//
2751
// JIT * jit = JIT::ReCreate();
2752
// ASSERT_TRUE(jit);
2753
//
2754
// ObjPtr var = jit->Run("\"123.123\"");
2755
// ASSERT_TRUE(var);
2756
// ASSERT_EQ(ObjType::StrWide, var->getType());
2757
// ASSERT_STREQ("123.123", var->GetValueAsString().c_str());
2758
//
2759
// ObjPtr var2 = jit->Run("\"123.123\"");
2760
// ASSERT_TRUE(var2);
2761
// ASSERT_EQ(ObjType::StrWide, var2->getType());
2762
// ASSERT_STREQ("123.123", var2->GetValueAsString().c_str());
2763
//
2764
// var = jit->Run("'строка'");
2765
// ASSERT_TRUE(var);
2766
// ASSERT_EQ(ObjType::StrChar, var->getType());
2767
// ASSERT_STREQ("строка", var->GetValueAsString().c_str());
2768
//
2769
// var2 = jit->Run("'строка'");
2770
// ASSERT_TRUE(var2);
2771
// ASSERT_EQ(ObjType::StrChar, var2->getType());
2772
// ASSERT_STREQ("строка", var2->GetValueAsString().c_str());
2773
//}
2774
//
2775
//TEST(RunTest, CreateFromRational) {
2776
//
2777
// JIT * jit = JIT::ReCreate();
2778
// ASSERT_TRUE(jit);
2779
//
2780
// ObjPtr var = jit->Run("123\\1");
2781
// ASSERT_TRUE(var);
2782
// ASSERT_EQ(ObjType::Rational, var->getType()) << toString(var->getType());
2783
// ASSERT_EQ(123, var->GetValueAsInteger());
2784
// ASSERT_DOUBLE_EQ(123.0, var->GetValueAsNumber());
2785
//
2786
// ObjPtr var2 = jit->Run("123\\1");
2787
// ASSERT_TRUE(var2);
2788
// ASSERT_EQ(ObjType::Rational, var2->getType()) << toString(var2->getType());
2789
// ASSERT_EQ(123, var2->GetValueAsInteger());
2790
// ASSERT_DOUBLE_EQ(123, var2->GetValueAsNumber());
2791
//
2792
// var = jit->Run("-123\\1");
2793
// ASSERT_TRUE(var);
2794
// ASSERT_EQ(ObjType::Rational, var->getType()) << toString(var->getType());
2795
// ASSERT_EQ(-123, var->GetValueAsInteger());
2796
// ASSERT_DOUBLE_EQ(-123.0, var->GetValueAsNumber());
2797
//
2798
// var2 = jit->Run("-123\\1");
2799
// ASSERT_TRUE(var2);
2800
// ASSERT_EQ(ObjType::Rational, var2->getType()) << toString(var2->getType());
2801
// ASSERT_EQ(-123, var2->GetValueAsInteger());
2802
// ASSERT_DOUBLE_EQ(-123, var2->GetValueAsNumber());
2803
//}
2804
//
2981
//
2982
//TEST(RunTest, Tensor) {
2983
//
2984
// std::string from_str = "русские буквы для ПРОВЕРКИ КОНВЕРТАЦИИ символов";
2985
// std::wstring to_str = utf8_decode(from_str);
2986
// std::string conv_str = utf8_encode(to_str);
2987
//
2988
// ASSERT_STREQ(from_str.c_str(), conv_str.c_str());
2989
//
2990
// // Байтовые строки
2991
// ObjPtr str = Obj::CreateString("test");
2992
//
2993
// ASSERT_STREQ("test", str->m_value.c_str());
2994
//
2995
// torch::Tensor tstr_t;
2996
//
2997
// ConvertStringToTensor(str->m_value, tstr_t, ObjType::Int8);
2998
//
2999
// ASSERT_TRUE(tstr_t.defined());
3000
// ASSERT_EQ(tstr_t.index({0}).item<int>(), 't');
3001
// ASSERT_EQ(tstr_t.index({1}).item<int>(), 'e');
3002
// ASSERT_EQ(tstr_t.index({2}).item<int>(), 's');
3003
// ASSERT_EQ(tstr_t.index({3}).item<int>(), 't');
3004
//
3005
//
3006
// torch::Tensor tensot_temp = *str->toType(ObjType::Tensor)->m_tensor;
3007
// ASSERT_TRUE(tensot_temp.defined());
3008
// ASSERT_EQ(tensot_temp.index({0}).item<int>(), 't');
3009
// ASSERT_EQ(tensot_temp.index({1}).item<int>(), 'e');
3010
// ASSERT_EQ(tensot_temp.index({2}).item<int>(), 's');
3011
// ASSERT_EQ(tensot_temp.index({3}).item<int>(), 't');
3012
//
3013
// ObjPtr t_str = CreateTensor(tensot_temp);
3014
// ASSERT_EQ(t_str->m_var_type_current, ObjType::Int8) << toString(t_str->m_var_type_current);
3015
// ASSERT_EQ(4, t_str->size());
3016
// ASSERT_TRUE(t_str->m_tensor->defined());
3017
//
3018
// ASSERT_EQ(t_str->m_tensor->index({0}).item<int>(), 't');
3019
// ASSERT_EQ(t_str->m_tensor->index({1}).item<int>(), 'e');
3020
// ASSERT_EQ(t_str->m_tensor->index({2}).item<int>(), 's');
3021
// ASSERT_EQ(t_str->m_tensor->index({3}).item<int>(), 't');
3022
//
3023
// ASSERT_EQ(t_str->index_get({0})->GetValueAsInteger(), 't');
3024
// ASSERT_EQ(t_str->index_get({1})->GetValueAsInteger(), 'e');
3025
// ASSERT_EQ(t_str->index_get({2})->GetValueAsInteger(), 's');
3026
// ASSERT_EQ(t_str->index_get({3})->GetValueAsInteger(), 't');
3027
//
3028
// ASSERT_STREQ(t_str->toType(ObjType::StrWide)->GetValueAsString().c_str(), "test") << t_str->toType(ObjType::StrWide)->GetValueAsString();
3029
//
3030
// t_str->index_set_({1}, Obj::CreateString("E"));
3031
// t_str->index_set_({2}, Obj::CreateString("S"));
3032
//
3033
// EXPECT_STREQ(t_str->toType(ObjType::StrWide)->GetValueAsString().c_str(), "tESt") << t_str->toType(ObjType::StrWide)->GetValueAsString();
3034
//
3035
// // Символьные сторки
3036
// ObjPtr wstr = Obj::CreateString(L"ТЕСТ");
3037
// ObjPtr t_wstr = CreateTensor(*wstr->toType(ObjType::Tensor)->m_tensor);
3038
// if (sizeof (wchar_t) == 2) {
3039
// ASSERT_EQ(t_wstr->m_var_type_current, ObjType::Int16);
3040
// } else {
3041
// ASSERT_TRUE(sizeof (wchar_t) == 4);
3042
// ASSERT_EQ(t_wstr->m_var_type_current, ObjType::Int32);
3043
// }
3044
// ASSERT_EQ(4, t_wstr->size());
3045
//
3046
// ASSERT_EQ(t_wstr->index_get({0})->GetValueAsInteger(), L'Т');
3047
// ASSERT_EQ(t_wstr->index_get({1})->GetValueAsInteger(), L'Е');
3048
// ASSERT_EQ(t_wstr->index_get({2})->GetValueAsInteger(), L'С');
3049
// ASSERT_EQ(t_wstr->index_get({3})->GetValueAsInteger(), L'Т');
3050
//
3051
// std::wstring test_wide = t_wstr->toType(ObjType::StrWide)->GetValueAsStringWide();
3052
// EXPECT_STREQ(utf8_encode(test_wide).c_str(), "ТЕСТ");
3053
//
3054
// std::string test_str = t_wstr->toType(ObjType::StrWide)->GetValueAsString();
3055
// EXPECT_STREQ(test_str.c_str(), "ТЕСТ") << test_str;
3056
//
3057
// t_wstr->index_set_({1}, Obj::CreateString(L"е"));
3058
// t_wstr->index_set_({2}, Obj::CreateString(L"с"));
3059
//
3060
// test_str = t_wstr->toType(ObjType::StrWide)->GetValueAsString();
3061
// EXPECT_STREQ(test_str.c_str(), "ТесТ") << test_str;
3062
//
3063
//}
3064
//
3065
//TEST(RunTest, Iterator) {
3066
//
3067
// ObjPtr dict = Obj::CreateDict();
3068
//
3069
// dict->push_back(Obj::Arg(1, "1"));
3070
// dict->push_back(Obj::Arg(2, "22"));
3071
// dict->push_back(Obj::Arg(3, "333"));
3072
// dict->push_back(Obj::Arg(4));
3073
// dict->push_back(Obj::Arg(5, "555"));
3074
//
3075
// ASSERT_EQ(5, dict->size());
3076
//
3077
// auto all = std::regex("(.|\\n)*");
3078
// ASSERT_TRUE(std::regex_match("1", all));
3079
// ASSERT_TRUE(std::regex_match("22", all));
3080
// ASSERT_TRUE(std::regex_match("333", all));
3081
// ASSERT_TRUE(std::regex_match("", all));
3082
// ASSERT_TRUE(std::regex_match("\n", all));
3083
// ASSERT_TRUE(std::regex_match("\n\n\\n", all));
3084
//
3085
//
3086
// Iterator <Obj> iter(dict);
3087
//
3088
// ASSERT_TRUE(iter == iter.begin());
3089
// ASSERT_TRUE(iter != iter.end());
3090
//
3091
// ObjPtr copy = Obj::CreateDict();
3092
// for (auto &elem : iter) {
3093
//
3094
// copy->push_back(elem.second, elem.first);
3095
// }
3096
//
3097
// ASSERT_TRUE(iter == iter.begin());
3098
// ASSERT_TRUE(iter != iter.end());
3099
//
3100
// ASSERT_EQ(dict->size(), copy->size());
3101
//
3102
//
3103
// ASSERT_TRUE(iter == iter.begin());
3104
//
3105
// ObjPtr one = iter.read_and_next(0);
3106
// ASSERT_TRUE(one);
3107
// ASSERT_EQ(1, one->GetValueAsInteger());
3108
//
3109
// ASSERT_EQ(2, (*iter).second->GetValueAsInteger());
3110
// one = iter.read_and_next(0);
3111
// ASSERT_TRUE(one);
3112
// ASSERT_EQ(2, one->GetValueAsInteger());
3113
//
3114
// ASSERT_EQ(3, (*iter).second->GetValueAsInteger());
3115
// one = iter.read_and_next(0);
3116
// ASSERT_TRUE(one);
3117
// ASSERT_EQ(3, one->GetValueAsInteger());
3118
//
3119
// ASSERT_EQ(4, (*iter).second->GetValueAsInteger());
3120
// one = iter.read_and_next(0);
3121
// ASSERT_TRUE(one);
3122
// ASSERT_EQ(4, one->GetValueAsInteger());
3123
//
3124
// ASSERT_EQ(5, (*iter).second->GetValueAsInteger());
3125
// one = iter.read_and_next(0);
3126
// ASSERT_TRUE(one);
3127
// ASSERT_EQ(5, one->GetValueAsInteger());
3128
//
3129
// one = iter.read_and_next(0);
3130
// ASSERT_TRUE(one);
3131
// ASSERT_EQ(ObjType::IteratorEnd, one->getType()) << one << " " << toString(one->getType());
3132
//
3133
// one = iter.read_and_next(0);
3134
// ASSERT_TRUE(one);
3135
// ASSERT_EQ(ObjType::IteratorEnd, one->getType()) << one << " " << toString(one->getType());
3136
//
3137
//
3138
//
3139
//
3140
// ASSERT_TRUE(iter == iter.end());
3141
// iter.reset();
3142
// ASSERT_TRUE(iter == iter.begin());
3143
// ASSERT_TRUE(iter != iter.end());
3144
//
3145
// ObjPtr dict1 = iter.read_and_next(-3);
3146
// ASSERT_TRUE(dict1);
3147
// ASSERT_EQ(3, dict1->size());
3148
// ASSERT_EQ(1, dict1->at(0).second->GetValueAsInteger());
3149
// ASSERT_EQ(2, dict1->at(1).second->GetValueAsInteger());
3150
// ASSERT_EQ(3, dict1->at(2).second->GetValueAsInteger());
3151
//
3152
// ObjPtr dict2 = iter.read_and_next(-3);
3153
// ASSERT_TRUE(dict2);
3154
// ASSERT_EQ(3, dict2->size());
3155
// ASSERT_EQ(4, dict2->at(0).second->GetValueAsInteger());
3156
// ASSERT_EQ(5, dict2->at(1).second->GetValueAsInteger());
3157
// ASSERT_EQ(ObjType::IteratorEnd, dict2->at(2).second->getType());
3158
//
3159
// ObjPtr dict3 = iter.read_and_next(-3);
3160
// ASSERT_TRUE(dict3);
3161
// ASSERT_EQ(3, dict1->size());
3162
// ASSERT_EQ(ObjType::IteratorEnd, dict3->at(0).second->getType());
3163
// ASSERT_EQ(ObjType::IteratorEnd, dict3->at(1).second->getType());
3164
// ASSERT_EQ(ObjType::IteratorEnd, dict3->at(2).second->getType());
3165
//
3166
//
3167
//
3168
// ASSERT_TRUE(iter == iter.end());
3169
// iter.reset();
3170
// ASSERT_TRUE(iter == iter.begin());
3171
// ASSERT_TRUE(iter != iter.end());
3172
//
3173
// dict1 = iter.read_and_next(3);
3174
// ASSERT_TRUE(dict1);
3175
// ASSERT_EQ(3, dict1->size());
3176
// ASSERT_EQ(1, dict1->at(0).second->GetValueAsInteger());
3177
// ASSERT_EQ(2, dict1->at(1).second->GetValueAsInteger());
3178
// ASSERT_EQ(3, dict1->at(2).second->GetValueAsInteger());
3179
//
3180
// dict2 = iter.read_and_next(3);
3181
// ASSERT_TRUE(dict2);
3182
// ASSERT_EQ(2, dict2->size());
3183
// ASSERT_EQ(4, dict2->at(0).second->GetValueAsInteger());
3184
// ASSERT_EQ(5, dict2->at(1).second->GetValueAsInteger());
3185
//
3186
// dict3 = iter.read_and_next(3);
3187
// ASSERT_TRUE(dict3);
3188
// ASSERT_EQ(0, dict3->size());
3189
//
3190
//
3191
//
3192
//
3193
// Iterator <Obj> flt(dict, "");
3194
// ObjPtr flt_res = flt.read_and_next(100);
3195
// ASSERT_TRUE(flt_res);
3196
// ASSERT_EQ(1, flt_res->size());
3197
// ASSERT_EQ(4, flt_res->at(0).second->GetValueAsInteger());
3198
//
3199
//
3200
// Iterator <Obj> flt1(dict, ".");
3201
// ObjPtr flt1_res = flt1.read_and_next(100);
3202
// ASSERT_TRUE(flt1_res);
3203
// ASSERT_EQ(1, flt1_res->size());
3204
// ASSERT_EQ(1, flt1_res->at(0).second->GetValueAsInteger());
3205
//
3206
//
3207
// Iterator <Obj> flt2(dict, "..");
3208
// ObjPtr flt2_res = flt2.read_and_next(100);
3209
// ASSERT_TRUE(flt2_res);
3210
// ASSERT_EQ(1, flt2_res->size());
3211
// ASSERT_EQ(2, flt2_res->at(0).second->GetValueAsInteger());
3212
//
3213
// Iterator <Obj> flt3(dict, "...");
3214
// ObjPtr flt3_res = flt3.read_and_next(100);
3215
// ASSERT_TRUE(flt3_res);
3216
// ASSERT_EQ(2, flt3_res->size());
3217
// ASSERT_EQ(3, flt3_res->at(0).second->GetValueAsInteger());
3218
// ASSERT_EQ(5, flt3_res->at(1).second->GetValueAsInteger());
3219
//
3220
//
3221
//
3222
// // ObjPtr iter1 = dict->MakeIterator();
3223
//
3224
//}
3225
//
3226
//TEST(RunTest, System) {
3227
//
3228
// ASSERT_STREQ("name", ExtractName("name").c_str());
3229
// ASSERT_STREQ("name", ExtractName("::name").c_str());
3230
// ASSERT_STREQ("name", ExtractName("ns::name").c_str());
3231
// ASSERT_STREQ("", ExtractName("\\file").c_str());
3232
// ASSERT_STREQ("", ExtractName("\\\\dir.file").c_str());
3233
// ASSERT_STREQ("var", ExtractName("\\dir.file::var").c_str());
3234
// ASSERT_STREQ("var.field", ExtractName("\\\\dir.file::var.field").c_str());
3235
//
3236
//
3237
// ASSERT_STREQ("\\file", ExtractModuleName("\\file").c_str());
3238
// ASSERT_STREQ("\\\\dir.file", ExtractModuleName("\\\\dir.file").c_str());
3239
// ASSERT_STREQ("\\dir.file", ExtractModuleName("\\dir.file::var").c_str());
3240
// ASSERT_STREQ("\\\\dir.file", ExtractModuleName("\\\\dir.file::var.field").c_str());
3241
//
3242
//
3243
// ObjPtr none = Obj::CreateNone();
3244
//
3245
// ASSERT_TRUE(none->at("__error_field_name__").second);
3246
// ASSERT_STREQ("Internal field '__error_field_name__' not exist!", none->at("__error_field_name__").second->GetValueAsString().c_str());
3247
//
3248
// ASSERT_TRUE(none->at("__type__").second);
3249
// ASSERT_STREQ(":None", none->at("__type__").second->GetValueAsString().c_str());
3250
//
3251
// ASSERT_TRUE(none->at("__type_fixed__").second);
3252
// ASSERT_STREQ(":None", none->at("__type_fixed__").second->GetValueAsString().c_str());
3253
//
3254
// ASSERT_TRUE(none->at("__name__").second);
3255
// ASSERT_STREQ("", none->at("__name__").second->GetValueAsString().c_str());
3256
//
3257
// ASSERT_TRUE(none->at("__full_name__").second);
3258
// ASSERT_STREQ("", none->at("__full_name__").second->GetValueAsString().c_str());
3259
//
3260
// ASSERT_TRUE(none->at("__module__").second);
3261
// ASSERT_STREQ("", none->at("__module__").second->GetValueAsString().c_str());
3262
//
3263
// ASSERT_TRUE(none->at("__class__").second);
3264
// ASSERT_STREQ("", none->at("__class__").second->GetValueAsString().c_str());
3265
//
3266
// ASSERT_TRUE(none->at("__base__").second);
3267
// ASSERT_STREQ("(,)", none->at("__base__").second->GetValueAsString().c_str());
3268
//
3269
// // ASSERT_TRUE(none->at("__doc__").second);
3270
// // ASSERT_STREQ("Help system not implemented!!!!!", none->at("__doc__").second->GetValueAsString().c_str());
3271
//
3272
// ASSERT_TRUE(none->at("__str__").second);
3273
// ASSERT_STREQ("_", none->at("__str__").second->GetValueAsString().c_str());
3274
//
3275
// none->m_var_is_init = false;
3276
// ASSERT_TRUE(none->at("__error_field_name__").second);
3277
// ASSERT_STREQ(":Undefined", none->at("__error_field_name__").second->GetValueAsString().c_str());
3278
//
3279
//
3280
// ObjPtr str = Obj::CreateString("str");
3281
// str->m_var_name = "name";
3282
//
3283
// ASSERT_TRUE(str->at("__type__").second);
3284
// ASSERT_STREQ(":StrChar", str->at("__type__").second->GetValueAsString().c_str());
3285
//
3286
// ASSERT_TRUE(str->at("__type_fixed__").second);
3287
// ASSERT_STREQ(":String", str->at("__type_fixed__").second->GetValueAsString().c_str());
3288
//
3289
// ASSERT_TRUE(str->at("__name__").second);
3290
// ASSERT_STREQ("name", str->at("__name__").second->GetValueAsString().c_str());
3291
//
3292
// ASSERT_TRUE(str->at("__full_name__").second);
3293
// ASSERT_STREQ("name", str->at("__full_name__").second->GetValueAsString().c_str());
3294
//
3295
// ASSERT_TRUE(str->at("__module__").second);
3296
// ASSERT_STREQ("", str->at("__module__").second->GetValueAsString().c_str());
3297
//
3298
// ASSERT_TRUE(str->at("__class__").second);
3299
// ASSERT_STREQ("", str->at("__class__").second->GetValueAsString().c_str());
3300
//
3301
// ASSERT_TRUE(str->at("__base__").second);
3302
// ASSERT_STREQ("(,)", str->at("__base__").second->GetValueAsString().c_str());
3303
//
3304
// // ASSERT_TRUE(str->at("__doc__").second);
3305
// // ASSERT_STREQ("Help system not implemented!!!!!", str->at("__doc__").second->GetValueAsString().c_str());
3306
//
3307
// ASSERT_TRUE(str->at("__str__").second);
3308
// ASSERT_STREQ("name='str'", str->at("__str__").second->GetValueAsString().c_str());
3309
//
3310
//
3311
// ObjPtr cls = Obj::CreateClass("class");
3312
// cls->m_var_name = "::ns::name";
3313
// cls->push_back(Obj::CreateRange(0, 10, 3), "filed");
3314
//
3315
// ASSERT_TRUE(cls->at("__type__").second);
3316
// ASSERT_STREQ(":Class", cls->at("__type__").second->GetValueAsString().c_str());
3317
//
3318
// ASSERT_TRUE(cls->at("__type_fixed__").second);
3319
// ASSERT_STREQ(":None", cls->at("__type_fixed__").second->GetValueAsString().c_str());
3320
//
3321
// ASSERT_TRUE(cls->at("__name__").second);
3322
// ASSERT_STREQ("name", cls->at("__name__").second->GetValueAsString().c_str());
3323
//
3324
// ASSERT_TRUE(cls->at("__full_name__").second);
3325
// ASSERT_STREQ("::ns::name", cls->at("__full_name__").second->GetValueAsString().c_str());
3326
//
3327
// ASSERT_TRUE(cls->at("__module__").second);
3328
// ASSERT_STREQ("", cls->at("__module__").second->GetValueAsString().c_str());
3329
//
3330
// ASSERT_TRUE(cls->at("__class__").second);
3331
// ASSERT_STREQ("class", cls->at("__class__").second->GetValueAsString().c_str());
3332
//
3333
// ASSERT_TRUE(cls->at("__base__").second);
3334
// ASSERT_STREQ("(,)", cls->at("__base__").second->GetValueAsString().c_str());
3335
//
3336
// // ASSERT_TRUE(cls->at("__doc__").second);
3337
// // ASSERT_STREQ("Help system not implemented!!!!!", cls->at("__doc__").second->GetValueAsString().c_str());
3338
//
3339
// ASSERT_TRUE(cls->at("__str__").second);
3340
// ASSERT_STREQ("::ns::name=class(filed=0..10..3)", cls->at("__str__").second->GetValueAsString().c_str());
3341
//}
3342
//
3343
//
3344
//
3345
//#endif // UNITTEST
Generated by
1.11.0