1 # frozen_string_literal: true
2
3 require "test_helper"
4
5
6 module Umu
7
8 module Test
9
10 module Library
11
12 module Class
13
14 module Union
15
16 class DatumTest < Minitest::Test
17 def setup
18 @interp = Api.setup_interpreter
19 end
20
21
22 def test_cmeth_make
23 value_1 = Api.eval_expr @interp, <<-EOS
24 &Datum.make @Fruits (@Apple, "Aomori")
25 EOS
26 assert_instance_of VCU::Datum, value_1
27 assert_instance_of ::Symbol, value_1.tag_sym
28 assert_equal :Fruits, value_1.tag_sym
29 assert_instance_of VCP::Tuple, value_1.contents
30
31 value_2 = Api.eval_expr @interp, <<-EOS
32 &Datum.(tag:@Fruits contents:(@Apple, "Aomori"))
33 EOS
34 assert_instance_of VCU::Datum, value_2
35 assert_instance_of ::Symbol, value_2.tag_sym
36 assert_equal :Fruits, value_2.tag_sym
37 assert_instance_of VCP::Tuple, value_2.contents
38 end
39
40
41 def test_imeth_show
42 value = Api.eval_expr @interp, <<-EOS
43 &Datum.make @Fruits (@Apple, "Aomori").show
44 EOS
45 assert_instance_of VCA::String, value
46 assert_equal 'Fruits (@Apple, "Aomori")', value.val
47 end
48
49
50 def test_imeth_to_s
51 value = Api.eval_expr @interp, <<-EOS
52 &Datum.make @Fruits (@Apple, "Aomori").to-s
53 EOS
54 assert_instance_of VCA::String, value
55 assert_equal 'Fruits (Apple, Aomori)', value.val
56 end
57
58
59 def test_imess_equal
60 interp_1 = Api.eval_decls @interp, <<-EOS
61 val d1 = &Datum.make @Fruits (@Apple, 300)
62 val d2 = &Datum.make @Fruits (@Apple, 300)
63 EOS
64
65 value = Api.eval_expr interp_1, "d1.== d2"
66 assert_instance_of VCA::Bool, value
67 assert_equal true, value.val
68
69 value = Api.eval_expr interp_1, "d1.== 4"
70 assert_instance_of VCA::Bool, value
71 assert_equal false, value.val
72
73 value = Api.eval_expr interp_1, <<-EOS
74 d1.== (&Datum.make @Vegetables (@Apple, 300))
75 EOS
76 assert_instance_of VCA::Bool, value
77 assert_equal false, value.val
78
79 value = Api.eval_expr interp_1, <<-EOS
80 d1.== (&Datum.make @Fruits (@Apple, 500))
81 EOS
82 assert_instance_of VCA::Bool, value
83 assert_equal false, value.val
84 end
85
86
87 def test_imess_less_than
88 interp_1 = Api.eval_decls @interp, <<-EOS
89 val d = &Datum.make @Fruits (@Apple, 300)
90 EOS
91
92 value = Api.eval_expr interp_1, "d.< d"
93 assert_instance_of VCA::Bool, value
94 assert_equal false, value.val
95
96 value = Api.eval_expr interp_1, <<-EOS
97 d.< (&Datum.make @Alpha (@Apple, 300))
98 EOS
99 assert_instance_of VCA::Bool, value
100 assert_equal false, value.val
101
102 value = Api.eval_expr interp_1, <<-EOS
103 d.< (&Datum.make @Gamma (@Apple, 300))
104 EOS
105 assert_instance_of VCA::Bool, value
106 assert_equal true, value.val
107
108 value = Api.eval_expr interp_1, <<-EOS
109 d.< (&Datum.make @Fruits (@Apple, 500))
110 EOS
111 assert_instance_of VCA::Bool, value
112 assert_equal true, value.val
113
114 value = Api.eval_expr interp_1, <<-EOS
115 d.< (&Datum.make @Fruits (@Apple, 100))
116 EOS
117 assert_instance_of VCA::Bool, value
118 assert_equal false, value.val
119 end
120 end
121
122 end # Umu::Test::Library::Class::Union
123
124 end # Umu::Test::Library::Class
125
126 end # Umu::Test::Library
127
128 end # Umu::Test
129
130 end # Umu