1616 */
1717
1818static void test_irange_basic (void * * state );
19+ static void test_irange_change_lossiness (void * * state );
1920
2021static void test_irange_list_union_merge (void * * state );
2122static void test_irange_list_union_lossy_cov (void * * state );
@@ -33,6 +34,7 @@ main(void)
3334const struct CMUnitTest tests []=
3435{
3536cmocka_unit_test (test_irange_basic ),
37+ cmocka_unit_test (test_irange_change_lossiness ),
3638cmocka_unit_test (test_irange_list_union_merge ),
3739cmocka_unit_test (test_irange_list_union_lossy_cov ),
3840cmocka_unit_test (test_irange_list_union_complete_cov ),
@@ -75,10 +77,76 @@ test_irange_basic(void **state)
7577assert_true (is_irange_valid (irange ));
7678
7779/* test allocation */
78- irange_list = NIL ;
79- irange_list = lappend_irange (irange_list ,irange );
80+ irange = make_irange ( 100 , 200 , IR_LOSSY ) ;
81+ irange_list = lappend_irange (NIL ,irange );
8082assert_memory_equal (& irange ,& linitial_irange (irange_list ),sizeof (IndexRange ));
8183assert_memory_equal (& irange ,& llast_irange (irange_list ),sizeof (IndexRange ));
84+
85+ /* test length */
86+ irange_list = NIL ;
87+ assert_int_equal (irange_list_length (irange_list ),0 );
88+ irange_list = lappend_irange (irange_list ,make_irange (10 ,20 ,IR_LOSSY ));
89+ assert_int_equal (irange_list_length (irange_list ),11 );
90+ irange_list = lappend_irange (irange_list ,make_irange (21 ,30 ,IR_LOSSY ));
91+ assert_int_equal (irange_list_length (irange_list ),21 );
92+ }
93+
94+
95+ /* Test lossiness switcher */
96+ static void
97+ test_irange_change_lossiness (void * * state )
98+ {
99+ List * irange_list ;
100+
101+ /* test lossiness change (NIL) */
102+ irange_list = irange_list_set_lossiness (NIL ,IR_LOSSY );
103+ assert_ptr_equal (irange_list ,NIL );
104+ irange_list = irange_list_set_lossiness (NIL ,IR_COMPLETE );
105+ assert_ptr_equal (irange_list ,NIL );
106+
107+ /* test lossiness change (no-op) #1 */
108+ irange_list = list_make1_irange (make_irange (10 ,20 ,IR_LOSSY ));
109+ irange_list = irange_list_set_lossiness (irange_list ,IR_LOSSY );
110+ assert_string_equal (rangeset_print (irange_list ),"[10-20]L" );
111+
112+ /* test lossiness change (no-op) #2 */
113+ irange_list = list_make1_irange (make_irange (30 ,40 ,IR_COMPLETE ));
114+ irange_list = irange_list_set_lossiness (irange_list ,IR_COMPLETE );
115+ assert_string_equal (rangeset_print (irange_list ),"[30-40]C" );
116+
117+ /* test lossiness change (single element) #1 */
118+ irange_list = list_make1_irange (make_irange (10 ,20 ,IR_LOSSY ));
119+ irange_list = irange_list_set_lossiness (irange_list ,IR_COMPLETE );
120+ assert_string_equal (rangeset_print (irange_list ),"[10-20]C" );
121+
122+ /* test lossiness change (single element) #2 */
123+ irange_list = list_make1_irange (make_irange (30 ,40 ,IR_COMPLETE ));
124+ irange_list = irange_list_set_lossiness (irange_list ,IR_LOSSY );
125+ assert_string_equal (rangeset_print (irange_list ),"[30-40]L" );
126+
127+ /* test lossiness change (multiple elements, adjacent) #1 */
128+ irange_list = list_make1_irange (make_irange (10 ,20 ,IR_LOSSY ));
129+ irange_list = lappend_irange (irange_list ,make_irange (21 ,40 ,IR_COMPLETE ));
130+ irange_list = irange_list_set_lossiness (irange_list ,IR_COMPLETE );
131+ assert_string_equal (rangeset_print (irange_list ),"[10-40]C" );
132+
133+ /* test lossiness change (multiple elements, adjacent) #2 */
134+ irange_list = list_make1_irange (make_irange (10 ,20 ,IR_COMPLETE ));
135+ irange_list = lappend_irange (irange_list ,make_irange (21 ,40 ,IR_LOSSY ));
136+ irange_list = irange_list_set_lossiness (irange_list ,IR_LOSSY );
137+ assert_string_equal (rangeset_print (irange_list ),"[10-40]L" );
138+
139+ /* test lossiness change (multiple elements, non-adjacent) #1 */
140+ irange_list = list_make1_irange (make_irange (10 ,15 ,IR_COMPLETE ));
141+ irange_list = lappend_irange (irange_list ,make_irange (21 ,40 ,IR_LOSSY ));
142+ irange_list = irange_list_set_lossiness (irange_list ,IR_COMPLETE );
143+ assert_string_equal (rangeset_print (irange_list ),"[10-15]C, [21-40]C" );
144+
145+ /* test lossiness change (multiple elements, non-adjacent) #2 */
146+ irange_list = list_make1_irange (make_irange (10 ,15 ,IR_LOSSY ));
147+ irange_list = lappend_irange (irange_list ,make_irange (21 ,40 ,IR_COMPLETE ));
148+ irange_list = irange_list_set_lossiness (irange_list ,IR_LOSSY );
149+ assert_string_equal (rangeset_print (irange_list ),"[10-15]L, [21-40]L" );
82150}
83151
84152