1
+ #include < boost/test/unit_test.hpp>
2
+ #include < kllvm/ast/AST.h>
3
+
4
+ using namespace kllvm ;
5
+
6
+ BOOST_AUTO_TEST_SUITE (SubsortMapTest)
7
+
8
+ BOOST_AUTO_TEST_CASE(insert_contains) {
9
+ SortSet sortSet;
10
+ SymbolSet symbolSet;
11
+ auto subsortMap = SubsortMap{};
12
+
13
+ auto sort = kore_composite_sort::create (" Sort" );
14
+ auto subsort1 = kore_composite_sort::create (" Subsort" );
15
+ auto subsort2 = kore_composite_sort::create (" Subsort" );
16
+
17
+ subsortMap[sort.get ()].insert (subsort1.get ());
18
+ subsortMap[sort.get ()].insert (subsort2.get ());
19
+
20
+ BOOST_CHECK (subsortMap[sort.get ()].contains (subsort1.get ()));
21
+ BOOST_CHECK (subsortMap[sort.get ()].contains (subsort2.get ()));
22
+ BOOST_CHECK (subsortMap[sort.get ()].size () == 1 ); // subsort1 == subsort2
23
+ BOOST_CHECK (subsortMap.size () == 1 );
24
+ BOOST_CHECK (!subsortMap[sort.get ()].contains (sort.get ()));
25
+ BOOST_CHECK (!subsortMap[sort.get ()].empty ());
26
+ }
27
+
28
+ BOOST_AUTO_TEST_CASE (subsorts_supersorts) {
29
+ auto subsort1 = kore_composite_sort::create (" bar" );
30
+ auto subsort2 = kore_composite_sort::create (" baz" );
31
+
32
+ auto pat
33
+ = sptr<kore_composite_pattern>(kore_composite_pattern::create (" subsort" ));
34
+ pat->get_constructor ()->add_formal_argument (subsort1);
35
+ pat->get_constructor ()->add_formal_argument (subsort2);
36
+
37
+ sptr<kore_axiom_declaration> decl = kore_axiom_declaration::create ();
38
+ decl->attributes ().add (pat);
39
+
40
+ auto mod = sptr<kore_module>(kore_module::create (" FooModule" ));
41
+ mod->add_declaration (decl);
42
+
43
+ auto def = kore_definition::create ();
44
+ def->add_module (mod);
45
+
46
+ auto subsorts_ = def->get_subsorts ();
47
+ auto supersorts_ = def->get_supersorts ();
48
+
49
+ // Check bar <: baz
50
+ // Check bar !<: bar
51
+ // Check baz !<: baz
52
+ // Check baz !<: bar
53
+ BOOST_CHECK (subsorts_[subsort1.get ()].contains (subsort2.get ()));
54
+ BOOST_CHECK (!subsorts_[subsort1.get ()].contains (subsort1.get ()));
55
+ BOOST_CHECK (!subsorts_[subsort2.get ()].contains (subsort2.get ()));
56
+ BOOST_CHECK (!subsorts_[subsort2.get ()].contains (subsort1.get ()));
57
+
58
+ // Check baz :> bar
59
+ // Check bar !:> baz
60
+ // Check bar !:> bar
61
+ // Check baz !:> baz
62
+ BOOST_CHECK (supersorts_[subsort2.get ()].contains (subsort1.get ()));
63
+ BOOST_CHECK (!supersorts_[subsort1.get ()].contains (subsort2.get ()));
64
+ BOOST_CHECK (!supersorts_[subsort1.get ()].contains (subsort1.get ()));
65
+ BOOST_CHECK (!supersorts_[subsort2.get ()].contains (subsort2.get ()));
66
+ }
67
+
68
+ BOOST_AUTO_TEST_CASE (transitive_subsorts_supersorts) {
69
+ auto subsort1 = kore_composite_sort::create (" foo" );
70
+ auto subsort2 = kore_composite_sort::create (" bar" );
71
+ auto subsort3 = kore_composite_sort::create (" baz" );
72
+
73
+ auto pat1
74
+ = sptr<kore_composite_pattern>(kore_composite_pattern::create (" subsort" ));
75
+ pat1->get_constructor ()->add_formal_argument (subsort1);
76
+ pat1->get_constructor ()->add_formal_argument (subsort2);
77
+
78
+ auto pat2
79
+ = sptr<kore_composite_pattern>(kore_composite_pattern::create (" subsort" ));
80
+ pat2->get_constructor ()->add_formal_argument (subsort2);
81
+ pat2->get_constructor ()->add_formal_argument (subsort3);
82
+
83
+ sptr<kore_axiom_declaration> decl1 = kore_axiom_declaration::create ();
84
+ decl1->attributes ().add (pat1);
85
+
86
+ sptr<kore_axiom_declaration> decl2 = kore_axiom_declaration::create ();
87
+ decl2->attributes ().add (pat2);
88
+
89
+ auto mod = sptr<kore_module>(kore_module::create (" FooModule" ));
90
+ mod->add_declaration (decl1);
91
+ mod->add_declaration (decl2);
92
+
93
+ auto def = kore_definition::create ();
94
+ def->add_module (mod);
95
+
96
+ auto subsorts_ = def->get_subsorts ();
97
+ auto supersorts_ = def->get_supersorts ();
98
+
99
+ // Check foo <: bar
100
+ // Check bar <: baz
101
+ // Check foo <: baz
102
+ BOOST_CHECK (subsorts_[subsort1.get ()].contains (subsort2.get ()));
103
+ BOOST_CHECK (subsorts_[subsort2.get ()].contains (subsort3.get ()));
104
+ BOOST_CHECK (subsorts_[subsort1.get ()].contains (subsort3.get ()));
105
+
106
+ // Check baz :> bar
107
+ // Check bar :> foo
108
+ // Check baz :> foo
109
+ BOOST_CHECK (supersorts_[subsort2.get ()].contains (subsort1.get ()));
110
+ BOOST_CHECK (supersorts_[subsort3.get ()].contains (subsort2.get ()));
111
+ BOOST_CHECK (supersorts_[subsort3.get ()].contains (subsort1.get ()));
112
+ }
113
+
114
+ BOOST_AUTO_TEST_SUITE_END ()
0 commit comments