OILS / frontend / arg_types_test.cc View on Github | oilshell.org

68 lines, 40 significant
1#include "_gen/frontend/arg_types.h"
2#include "_gen/core/value.asdl.h"
3#include "vendor/greatest.h"
4
5using value_asdl::value;
6
7TEST opaque_test() {
8 // struct for command -v is HeapTag::Opaque
9
10 auto attrs = Alloc<Dict<BigStr*, value_asdl::value_t*>>();
11 StackRoots _r({&attrs});
12
13 auto t = Alloc<value::Bool>(true);
14 auto f = Alloc<value::Bool>(false);
15 attrs->set(StrFromC("v"), t);
16 attrs->set(StrFromC("V"), f);
17 attrs->set(StrFromC("p"), f);
18
19 for (int i = 0; i < 10; ++i) {
20 auto m = Alloc<arg_types::command>(attrs);
21 StackRoots _r2({&m});
22
23 mylib::MaybeCollect();
24
25 ASSERT_EQ(true, m->v);
26 ASSERT_EQ(false, m->V);
27 ASSERT_EQ(false, m->p);
28 }
29
30 PASS();
31}
32
33TEST pointer_test() {
34 // struct for printf -v is has BigStr*
35
36 auto attrs = Alloc<Dict<BigStr*, value_asdl::value_t*>>();
37 StackRoots _r({&attrs});
38
39 auto s = Alloc<value::Str>(StrFromC("hi %s"));
40 attrs->set(StrFromC("v"), s);
41
42 for (int i = 0; i < 10; ++i) {
43 auto m = Alloc<arg_types::printf>(attrs);
44 StackRoots _r2({&m});
45
46 mylib::MaybeCollect();
47
48 ASSERT(str_equals(StrFromC("hi %s"), m->v));
49 }
50
51 PASS();
52}
53
54GREATEST_MAIN_DEFS();
55
56int main(int argc, char** argv) {
57 gHeap.Init();
58
59 GREATEST_MAIN_BEGIN();
60
61 RUN_TEST(opaque_test);
62 RUN_TEST(pointer_test);
63
64 gHeap.CleanProcessExit();
65
66 GREATEST_MAIN_END();
67 return 0;
68}