18
18
static void test_irange_list_union_merge (void * * state );
19
19
static void test_irange_list_union_lossy_cov (void * * state );
20
20
static void test_irange_list_union_complete_cov (void * * state );
21
+ static void test_irange_list_union_intersection (void * * state );
21
22
22
23
23
24
/* Entrypoint */
@@ -30,6 +31,7 @@ main(void)
30
31
cmocka_unit_test (test_irange_list_union_merge ),
31
32
cmocka_unit_test (test_irange_list_union_lossy_cov ),
32
33
cmocka_unit_test (test_irange_list_union_complete_cov ),
34
+ cmocka_unit_test (test_irange_list_union_intersection ),
33
35
};
34
36
35
37
/* Run series of tests */
@@ -46,14 +48,13 @@ main(void)
46
48
static void
47
49
test_irange_list_union_merge (void * * state )
48
50
{
49
- IndexRange a ;
51
+ IndexRange a , b ;
50
52
List * unmerged ,
51
53
* union_result ;
52
54
53
55
54
56
/* Subtest #0 */
55
57
a = make_irange (0 , 8 , IR_COMPLETE );
56
-
57
58
unmerged = NIL ;
58
59
unmerged = lappend_irange (unmerged , make_irange (9 , 10 , IR_COMPLETE ));
59
60
unmerged = lappend_irange (unmerged , make_irange (11 , 11 , IR_LOSSY ));
@@ -66,6 +67,31 @@ test_irange_list_union_merge(void **state)
66
67
67
68
assert_string_equal (rangeset_print (union_result ),
68
69
"[0-10]C, 11L, [12-24]C" );
70
+
71
+ union_result = irange_list_union (unmerged , unmerged );
72
+
73
+ assert_string_equal (rangeset_print (union_result ),
74
+ "[9-10]C, 11L, [12-24]C" );
75
+
76
+
77
+ /* Subtest #1 */
78
+ a = make_irange (0 , 10 , IR_COMPLETE );
79
+ b = make_irange (12 , 20 , IR_COMPLETE );
80
+ union_result = irange_list_union (list_make1_irange (a ),
81
+ list_make1_irange (b ));
82
+
83
+ assert_string_equal (rangeset_print (union_result ),
84
+ "[0-10]C, [12-20]C" );
85
+
86
+ /* Subtest #2 */
87
+ a = make_irange (0 , 10 , IR_LOSSY );
88
+ b = make_irange (11 , 20 , IR_LOSSY );
89
+ union_result = irange_list_union (list_make1_irange (a ),
90
+ list_make1_irange (b ));
91
+
92
+ assert_string_equal (rangeset_print (union_result ),
93
+ "[0-20]L" );
94
+
69
95
}
70
96
71
97
/* Lossy IndexRange covers complete IndexRange */
@@ -184,3 +210,70 @@ test_irange_list_union_complete_cov(void **state)
184
210
assert_string_equal (rangeset_print (union_result ),
185
211
"[0-100]C" );
186
212
}
213
+
214
+ static void
215
+ test_irange_list_union_intersection (void * * state )
216
+ {
217
+ IndexRange a , b ;
218
+ List * unmerged ,
219
+ * union_result ;
220
+
221
+
222
+ /* Subtest #0 */
223
+ a = make_irange (0 , 55 , IR_COMPLETE );
224
+ b = make_irange (55 , 100 , IR_COMPLETE );
225
+ union_result = irange_list_union (list_make1_irange (a ),
226
+ list_make1_irange (b ));
227
+
228
+ assert_string_equal (rangeset_print (union_result ),
229
+ "[0-100]C" );
230
+
231
+ /* Subtest #1 */
232
+ a = make_irange (0 , 55 , IR_COMPLETE );
233
+ b = make_irange (55 , 100 , IR_LOSSY );
234
+ union_result = irange_list_union (list_make1_irange (a ),
235
+ list_make1_irange (b ));
236
+
237
+ assert_string_equal (rangeset_print (union_result ),
238
+ "[0-55]C, [56-100]L" );
239
+
240
+ /* Subtest #2 */
241
+ unmerged = NIL ;
242
+ unmerged = lappend_irange (unmerged , make_irange (0 , 45 , IR_LOSSY ));
243
+ unmerged = lappend_irange (unmerged , make_irange (100 , 100 , IR_LOSSY ));
244
+ b = make_irange (40 , 65 , IR_COMPLETE );
245
+ union_result = irange_list_union (unmerged , list_make1_irange (b ));
246
+
247
+ assert_string_equal (rangeset_print (union_result ),
248
+ "[0-39]L, [40-65]C, 100L" );
249
+
250
+ /* Subtest #3 */
251
+ unmerged = NIL ;
252
+ unmerged = lappend_irange (unmerged , make_irange (0 , 45 , IR_LOSSY ));
253
+ unmerged = lappend_irange (unmerged , make_irange (64 , 100 , IR_LOSSY ));
254
+ b = make_irange (40 , 65 , IR_COMPLETE );
255
+ union_result = irange_list_union (unmerged , list_make1_irange (b ));
256
+
257
+ assert_string_equal (rangeset_print (union_result ),
258
+ "[0-39]L, [40-65]C, [66-100]L" );
259
+
260
+ /* Subtest #4 */
261
+ unmerged = NIL ;
262
+ unmerged = lappend_irange (unmerged , make_irange (0 , 45 , IR_COMPLETE ));
263
+ unmerged = lappend_irange (unmerged , make_irange (64 , 100 , IR_COMPLETE ));
264
+ b = make_irange (40 , 65 , IR_COMPLETE );
265
+ union_result = irange_list_union (unmerged , list_make1_irange (b ));
266
+
267
+ assert_string_equal (rangeset_print (union_result ),
268
+ "[0-100]C" );
269
+
270
+ /* Subtest #5 */
271
+ unmerged = NIL ;
272
+ unmerged = lappend_irange (unmerged , make_irange (0 , 45 , IR_COMPLETE ));
273
+ unmerged = lappend_irange (unmerged , make_irange (64 , 100 , IR_COMPLETE ));
274
+ b = make_irange (40 , 65 , IR_LOSSY );
275
+ union_result = irange_list_union (unmerged , list_make1_irange (b ));
276
+
277
+ assert_string_equal (rangeset_print (union_result ),
278
+ "[0-45]C, [46-63]L, [64-100]C" );
279
+ }
0 commit comments