Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commitfcccced

Browse files
committed
fix irb_succ(), more tests, add rule 'check' to Makefile
1 parent949840f commitfcccced

File tree

3 files changed

+131
-4
lines changed

3 files changed

+131
-4
lines changed

‎src/rangeset.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ typedef struct {
4747
#definelfirst_irange(lc)( *(IndexRange *) lfirst(lc) )
4848
#definelappend_irange(list,irange)( lappend((list), alloc_irange(irange)) )
4949
#definelcons_irange(irange,list)( lcons(alloc_irange(irange), (list)) )
50-
#definelist_make1_irange(irange)(lcons(alloc_irange(irange), NIL) )
50+
#definelist_make1_irange(irange)(lcons_irange(irange, NIL) )
5151
#definellast_irange(list)( lfirst_irange(list_tail(list)) )
5252
#definelinitial_irange(list)( lfirst_irange(list_head(list)) )
5353

@@ -90,12 +90,12 @@ irb_pred(uint32 boundary)
9090
return0;
9191
}
9292

93-
/* Returnpredecessor or IRANGE_BONDARY_MASK */
93+
/* Returnsuccessor or IRANGE_BONDARY_MASK */
9494
inlinestaticuint32
9595
irb_succ(uint32boundary)
9696
{
9797
if (boundary >=IRANGE_BONDARY_MASK)
98-
returnboundary;
98+
returnIRANGE_BONDARY_MASK;
9999

100100
returnboundary+1;
101101
}

‎tests/cmocka/Makefile

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,3 +26,6 @@ build_extension:
2626

2727
clean:
2828
rm -f$(OBJ)$(TEST_BIN)
29+
30+
check: all
31+
./$(TEST_BIN)

‎tests/cmocka/rangeset_tests.c

Lines changed: 125 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@
1515
* -----------------------
1616
*/
1717

18+
staticvoidtest_irange_basic(void**state);
19+
1820
staticvoidtest_irange_list_union_merge(void**state);
1921
staticvoidtest_irange_list_union_lossy_cov(void**state);
2022
staticvoidtest_irange_list_union_complete_cov(void**state);
@@ -30,6 +32,7 @@ main(void)
3032
/* Array of test functions */
3133
conststructCMUnitTesttests[]=
3234
{
35+
cmocka_unit_test(test_irange_basic),
3336
cmocka_unit_test(test_irange_list_union_merge),
3437
cmocka_unit_test(test_irange_list_union_lossy_cov),
3538
cmocka_unit_test(test_irange_list_union_complete_cov),
@@ -47,6 +50,38 @@ main(void)
4750
* ----------------------
4851
*/
4952

53+
/* Basic behavior tests */
54+
staticvoid
55+
test_irange_basic(void**state)
56+
{
57+
IndexRangeirange;
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+
5085
/* Test merges of adjoint IndexRanges */
5186
staticvoid
5287
test_irange_list_union_merge(void**state)
@@ -288,7 +323,9 @@ static void
288323
test_irange_list_intersection(void**state)
289324
{
290325
IndexRangea,b;
291-
List*intersection_result;
326+
List*intersection_result,
327+
*left_list,
328+
*right_list;
292329

293330

294331
/* Subtest #0 */
@@ -340,4 +377,91 @@ test_irange_list_intersection(void **state)
340377

341378
assert_string_equal(rangeset_print(intersection_result),
342379
"[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");
343467
}

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp