15
15
* -----------------------
16
16
*/
17
17
18
+ static void test_irange_basic (void * * state );
19
+
18
20
static void test_irange_list_union_merge (void * * state );
19
21
static void test_irange_list_union_lossy_cov (void * * state );
20
22
static void test_irange_list_union_complete_cov (void * * state );
@@ -30,6 +32,7 @@ main(void)
30
32
/* Array of test functions */
31
33
const struct CMUnitTest tests [] =
32
34
{
35
+ cmocka_unit_test (test_irange_basic ),
33
36
cmocka_unit_test (test_irange_list_union_merge ),
34
37
cmocka_unit_test (test_irange_list_union_lossy_cov ),
35
38
cmocka_unit_test (test_irange_list_union_complete_cov ),
@@ -47,6 +50,38 @@ main(void)
47
50
* ----------------------
48
51
*/
49
52
53
+ /* Basic behavior tests */
54
+ static void
55
+ test_irange_basic (void * * state )
56
+ {
57
+ IndexRange irange ;
58
+ List * irange_list ;
59
+
60
+ /* test irb_pred() */
61
+ assert_int_equal (99 , irb_pred (100 ));
62
+ assert_int_equal (0 , irb_pred (1 ));
63
+ assert_int_equal (0 , irb_pred (0 ));
64
+
65
+ /* test irb_succ() */
66
+ assert_int_equal (100 , irb_succ (99 ));
67
+ assert_int_equal (IRANGE_BONDARY_MASK , irb_succ (IRANGE_BONDARY_MASK ));
68
+ assert_int_equal (IRANGE_BONDARY_MASK , irb_succ (IRANGE_BONDARY_MASK + 1 ));
69
+
70
+ /* test convenience macros */
71
+ irange = make_irange (0 , IRANGE_BONDARY_MASK , IR_LOSSY );
72
+ assert_int_equal (irange_lower (irange ), 0 );
73
+ assert_int_equal (irange_upper (irange ), IRANGE_BONDARY_MASK );
74
+ assert_true (is_irange_lossy (irange ));
75
+ assert_true (is_irange_valid (irange ));
76
+
77
+ /* test allocation */
78
+ irange_list = NIL ;
79
+ irange_list = lappend_irange (irange_list , irange );
80
+ assert_memory_equal (& irange , & linitial_irange (irange_list ), sizeof (IndexRange ));
81
+ assert_memory_equal (& irange , & llast_irange (irange_list ), sizeof (IndexRange ));
82
+ }
83
+
84
+
50
85
/* Test merges of adjoint IndexRanges */
51
86
static void
52
87
test_irange_list_union_merge (void * * state )
@@ -288,7 +323,9 @@ static void
288
323
test_irange_list_intersection (void * * state )
289
324
{
290
325
IndexRange a , b ;
291
- List * intersection_result ;
326
+ List * intersection_result ,
327
+ * left_list ,
328
+ * right_list ;
292
329
293
330
294
331
/* Subtest #0 */
@@ -340,4 +377,91 @@ test_irange_list_intersection(void **state)
340
377
341
378
assert_string_equal (rangeset_print (intersection_result ),
342
379
"[15-20]C" );
380
+
381
+ /* Subtest #5 */
382
+ left_list = NIL ;
383
+ left_list = lappend_irange (left_list , make_irange (0 , 11 , IR_LOSSY ));
384
+ left_list = lappend_irange (left_list , make_irange (12 , 20 , IR_COMPLETE ));
385
+ right_list = NIL ;
386
+ right_list = lappend_irange (right_list , make_irange (1 , 15 , IR_COMPLETE ));
387
+ right_list = lappend_irange (right_list , make_irange (16 , 20 , IR_LOSSY ));
388
+
389
+ intersection_result = irange_list_intersection (left_list , right_list );
390
+
391
+ assert_string_equal (rangeset_print (intersection_result ),
392
+ "[1-11]L, [12-15]C, [16-20]L" );
393
+
394
+ /* Subtest #6 */
395
+ left_list = NIL ;
396
+ left_list = lappend_irange (left_list , make_irange (0 , 11 , IR_LOSSY ));
397
+ left_list = lappend_irange (left_list , make_irange (12 , 20 , IR_COMPLETE ));
398
+ right_list = NIL ;
399
+ right_list = lappend_irange (right_list , make_irange (1 , 15 , IR_COMPLETE ));
400
+ right_list = lappend_irange (right_list , make_irange (16 , 20 , IR_COMPLETE ));
401
+
402
+ intersection_result = irange_list_intersection (left_list , right_list );
403
+
404
+ assert_string_equal (rangeset_print (intersection_result ),
405
+ "[1-11]L, [12-20]C" );
406
+
407
+ /* Subtest #7 */
408
+ a = make_irange (0 , 10 , IR_COMPLETE );
409
+ b = make_irange (20 , 20 , IR_COMPLETE );
410
+
411
+ intersection_result = irange_list_intersection (list_make1_irange (a ),
412
+ list_make1_irange (b ));
413
+
414
+ assert_string_equal (rangeset_print (intersection_result ),
415
+ "" ); /* empty set */
416
+
417
+ /* Subtest #8 */
418
+ a = make_irange (0 , 10 , IR_LOSSY );
419
+ right_list = NIL ;
420
+ right_list = lappend_irange (right_list , make_irange (10 , 10 , IR_COMPLETE ));
421
+ right_list = lappend_irange (right_list , make_irange (16 , 20 , IR_LOSSY ));
422
+
423
+ intersection_result = irange_list_intersection (list_make1_irange (a ),
424
+ right_list );
425
+
426
+ assert_string_equal (rangeset_print (intersection_result ),
427
+ "10L" );
428
+
429
+ /* Subtest #9 */
430
+ left_list = NIL ;
431
+ left_list = lappend_irange (left_list , make_irange (15 , 15 , IR_LOSSY ));
432
+ left_list = lappend_irange (left_list , make_irange (25 , 25 , IR_COMPLETE ));
433
+ right_list = NIL ;
434
+ right_list = lappend_irange (right_list , make_irange (0 , 20 , IR_COMPLETE ));
435
+ right_list = lappend_irange (right_list , make_irange (21 , 40 , IR_LOSSY ));
436
+
437
+ intersection_result = irange_list_intersection (left_list , right_list );
438
+
439
+ assert_string_equal (rangeset_print (intersection_result ),
440
+ "15L, 25L" );
441
+
442
+ /* Subtest #10 */
443
+ left_list = NIL ;
444
+ left_list = lappend_irange (left_list , make_irange (21 , 21 , IR_LOSSY ));
445
+ left_list = lappend_irange (left_list , make_irange (22 , 22 , IR_COMPLETE ));
446
+ right_list = NIL ;
447
+ right_list = lappend_irange (right_list , make_irange (0 , 21 , IR_COMPLETE ));
448
+ right_list = lappend_irange (right_list , make_irange (22 , 40 , IR_LOSSY ));
449
+
450
+ intersection_result = irange_list_intersection (left_list , right_list );
451
+
452
+ assert_string_equal (rangeset_print (intersection_result ),
453
+ "[21-22]L" );
454
+
455
+ /* Subtest #11 */
456
+ left_list = NIL ;
457
+ left_list = lappend_irange (left_list , make_irange (21 , 21 , IR_LOSSY ));
458
+ left_list = lappend_irange (left_list , make_irange (22 , 25 , IR_COMPLETE ));
459
+ right_list = NIL ;
460
+ right_list = lappend_irange (right_list , make_irange (0 , 21 , IR_COMPLETE ));
461
+ right_list = lappend_irange (right_list , make_irange (22 , 40 , IR_COMPLETE ));
462
+
463
+ intersection_result = irange_list_intersection (left_list , right_list );
464
+
465
+ assert_string_equal (rangeset_print (intersection_result ),
466
+ "21L, [22-25]C" );
343
467
}
0 commit comments