1
PRINT 'Testing records';
3
/* Fill in a first record with several lines */
4
DECLARE @r1 { @a, @b, @c, @d };
5
ASSERT columns(@r1) = 4 AND lines(@r1) = 0;
12
WHILE @l >= 0 AND @l < 10
14
SET @r1[@l][@a] = @l * 1;
15
SET @r1[@l][@b] = @l * 2;
16
SET @r1[@l][@c] = @l * 3;
17
SET @r1[@l][@d] = @l * 4;
19
ASSERT @r1[@l][@a] = @l * 1;
20
ASSERT -@r1[@l][@b] = @l * -2;
21
ASSERT @r1[@l][@d] = @l * 4;
22
ASSERT -(-@r1[@l][@c]) = @l * 3;
26
ASSERT columns(@r1) = 4 AND lines(@r1) = 10;
27
ASSERT (@r1 AND NOT NOT @r1) = 1;
29
ASSERT @r1 AND NOT NOT @r1 AND NOT (NOT @r1);
31
/* Prepare a second record with no columns */
32
DECLARE @r2 { @a, @b, @c };
33
ASSERT columns(@r2) = 3 AND columns(@r1) <> columns(@r2);
35
ASSERT @r1 <> @r2 AND NOT (@r1 = @r2); -- AND NOT (@r2 ~= @r3); @r3 does not exist
36
ASSERT NOT (@r1 < @r2) AND NOT (@r1 > @r2);
37
ASSERT NOT (@r1 <= @r2) AND NOT (@r1 >= @r2);
39
/* Third record equal with the second one */
40
DECLARE @r3 { @d, @e, @f }; -- Column names do not matter
41
ASSERT columns(@r3) = 3 AND columns(@r2) = columns(@r3);
43
ASSERT @r2 = @r3 AND NOT (@r2 <> @r3) AND @r2 ~= @r3;
44
ASSERT NOT (@r2 < @r3) AND NOT (@r2 > @r3);
45
ASSERT @r2 <= @r3 AND @r2 >= @r3;
47
/* Add something to the third record */
51
ASSERT @r2 <> @r3 AND NOT (@r2 = @r3);
52
ASSERT @r2 < @r3 AND NOT (@r2 > @r3);
53
ASSERT @r2 <= @r3 AND NOT (@r2 >= @r3);
55
/* Add the same thing to the second but with different case */
58
ASSERT @r2 <> @r3 AND NOT (@r2 = @r3) AND @r2 ~= @r3;
59
ASSERT NOT (@r2 < @r3) AND NOT (@r2 > @r3);
60
ASSERT NOT (@r2 <= @r3) AND NOT (@r2 >= @r3);
62
/* Verify if spaces are relevant */
63
SET @r2[0][1] = ' b ';
64
ASSERT @r2 <> @r3 AND NOT (@r2 = @r3) AND NOT (@r2 ~= @r3);
65
ASSERT NOT (@r2 < @r3) AND NOT (@r2 > @r3);
66
ASSERT NOT (@r2 <= @r3) AND NOT (@r2 >= @r3);
69
/* Delete an irrelevant line in the second record */
72
/* Fourth record to compare to the first one */
73
DECLARE @r4 { @a, @b, @c, @d };
74
ASSERT columns(@r1) = columns(@r4) AND lines(@r4) = 0;
80
ASSERT @r4 <> @r1 AND NOT (@r4 = @r1) AND NOT (@r4 ~= @r1);
81
ASSERT @r4 < @r1 AND NOT (@r4 > @r1);
82
ASSERT @r4 <= @r1 AND NOT (@r4 >= @r1);
84
/* The first lines are equal */
85
DECLARE @r4 { @a, @b, @c, @d };
87
WHILE (@l >= 0 AND @l < 2)
89
SET @r4[@l][@a] = @l * 1;
90
SET @r4[@l][@b] = @l * 2;
91
SET @r4[@l][@c] = @l * 3;
92
SET @r4[@l][@d] = @l * 4;
96
ASSERT @r4 <> @r1 AND NOT (@r4 = @r1) AND NOT (@r4 ~= @r1);
97
ASSERT @r4 < @r1 AND NOT (@r4 > @r1);
98
ASSERT @r4 <= @r1 AND NOT (@r4 >= @r1);
100
/* Only some lines are equal but the first lines are empty */
101
DECLARE @r4 { @a, @b, @c, @d };
103
WHILE (((@l >= 0) AND (@l < 7)))
105
SET @r4[@l][@a] = @l * 1;
106
SET @r4[@l][@b] = @l * 2;
107
SET @r4[@l][@c] = @l * 3;
108
SET @r4[@l][@d] = @l * 4;
112
ASSERT @r4 <> @r1 AND NOT (@r4 = @r1) AND NOT (@r4 ~= @r1);
113
ASSERT NOT (@r4 < @r1) AND NOT (@r4 > @r1);
114
ASSERT NOT (@r4 <= @r1) AND NOT (@r4 >= @r1);
116
/* Some lines are equal */
117
DECLARE @r4 { @a, @b, @c, @d };
120
WHILE @l >= 0 AND @l < 8
122
SET @r4[@i][@a] = @l * 1;
123
SET @r4[@i][@b] = @l * 2;
124
SET @r4[@i][@c] = @l * 3;
125
SET @r4[@i][@d] = @l * 4;
130
ASSERT @r4 <> @r1 AND NOT (@r4 = @r1) AND NOT (@r4 ~= @r1);
131
ASSERT @r4 < @r1 AND NOT (@r4 > @r1);
132
ASSERT @r4 <= @r1 AND NOT (@r4 >= @r1);
134
/* Some lines are equal and the order is random */
135
DECLARE @r4 { @a, @b, @c, @d };
136
SET @i = 0; SET @l = 3;
137
SET @r4[@i][@a] = @l * 1;
138
SET @r4[@i][@b] = @l * 2;
139
SET @r4[@i][@c] = @l * 3;
140
SET @r4[@i][@d] = @l * 4;
141
SET @i = @i + 1; SET @l = 6;
142
SET @r4[@i][@a] = @l * 1;
143
SET @r4[@i][@b] = @l * 2;
144
SET @r4[@i][@c] = @l * 3;
145
SET @r4[@i][@d] = @l * 4;
146
SET @i = @i + 1; SET @l = 2;
147
SET @r4[@i][@a] = @l * 1;
148
SET @r4[@i][@b] = @l * 2;
149
SET @r4[@i][@c] = @l * 3;
150
SET @r4[@i][@d] = @l * 4;
151
ASSERT @r4 <> @r1 AND NOT (@r4 = @r1) AND NOT (@r4 ~= @r1);
152
ASSERT @r4 < @r1 AND NOT (@r4 > @r1);
153
ASSERT @r4 <= @r1 AND NOT (@r4 >= @r1);
155
/* Everything is equal */
156
DECLARE @r4 { @a, @b, @c, @d };
158
WHILE @l >= 0 AND @l < 10
160
SET @r4[@l][@a] = @l * 1;
161
SET @r4[@l][@b] = @l * 2;
162
SET @r4[@l][@c] = @l * 3;
163
SET @r4[@l][@d] = @l * 4;
167
ASSERT @r4 = @r1 AND @r4 ~= @r1 AND NOT (@r4 <> @r1);
168
ASSERT NOT (@r4 < @r1) AND NOT (@r4 > @r1);
169
ASSERT @r4 <= @r1 AND @r4 >= @r1;
171
/* Modify a field from a number to a string */
173
ASSERT @r4 = @r1 AND @r4 ~= @r1 AND NOT (@r4 <> @r1);
174
ASSERT NOT (@r4 < @r1) AND NOT (@r4 > @r1);
175
ASSERT @r4 <= @r1 AND @r4 >= @r1;
178
SET @r4[0][0] = '@x';
179
ASSERT @r4 <> @r1 AND NOT (@r4 = @r1) AND NOT (@r4 ~= @r1);
180
ASSERT NOT (@r4 < @r1) AND NOT (@r4 > @r1);
181
ASSERT NOT (@r4 <= @r1) AND NOT (@r4 >= @r1);
183
/* Make a case insensitive comparison */
184
SET @r1 [0] [0] = '@X';
185
ASSERT @r4 <> @r1 AND NOT (@r4 = @r1) AND @r4 ~= @r1;
186
ASSERT NOT (@r4 < @r1) AND NOT (@r4 > @r1);
187
ASSERT NOT (@r4 <= @r1) AND NOT (@r4 >= @r1);
188
SET @r1[0][0] = '@x';
190
/* Delete a line in the middle */
192
ASSERT @r4 AND lines(@r4) = 9;
193
ASSERT @r4 <> @r1 AND NOT (@r4 = @r1) AND NOT (@r4 ~= @r1);
194
ASSERT @r4 < @r1 AND NOT (@r4 > @r1);
195
ASSERT @r4 <= @r1 AND NOT (@r4 >= @r1);
197
/* Delete the first line */
199
ASSERT @r4 AND lines(@r4) = 8;
200
ASSERT @r4 <> @r1 AND NOT (@r4 = @r1) AND NOT (@r4 ~= @r1);
201
ASSERT @r4 < @r1 AND NOT (@r4 > @r1);
202
ASSERT @r4 <= @r1 AND NOT (@r4 >= @r1);
204
/* Delete the last line */
205
RMLINE(@r4[lines(@r4) - 1]);
206
ASSERT @r4 AND lines(@r4) = 7;
207
ASSERT @r4 <> @r1 AND NOT (@r4 = @r1) AND NOT (@r4 ~= @r1);
208
ASSERT @r4 < @r1 AND NOT (@r4 > @r1);
209
ASSERT @r4 <= @r1 AND NOT (@r4 >= @r1);
211
/* Delete everything */
215
ASSERT @r4 <> @r1 AND NOT (@r4 = @r1) AND NOT (@r4 ~= @r1);
216
ASSERT @r4 < @r1 AND NOT (@r4 > @r1);
217
ASSERT @r4 <= @r1 AND NOT (@r4 >= @r1);
220
/* Test a record that does not exist */
221
/* SET @r5[0][0] = 1; */
223
/* Take a line the first record */
225
ASSERT @r4 <> @r1 AND NOT (@r4 = @r1) AND NOT (@r4 ~= @r1);
226
ASSERT @r4 < @r1 AND NOT (@r4 > @r1);
227
ASSERT @r4 <= @r1 AND NOT (@r4 >= @r1);
229
/* Take a line the first record */
231
ASSERT @r4 <> @r1 AND NOT (@r4 = @r1) AND NOT (@r4 ~= @r1);
232
ASSERT @r4 < @r1 AND NOT (@r4 > @r1);
233
ASSERT @r4 <= @r1 AND NOT (@r4 >= @r1);