#include "utilities/IndexPairSelection.h" #include "unittest/TestSuite.h" #include static void testInit(void) { IndexPairSelection * selection = IndexPairSelection_create(); TestCase_assertUIntEqual(selection->pairCount, 0); TestCase_assertPointerNULL(selection->pairs); IndexPairSelection_dispose(selection); } static void testBasicOperations(void) { IndexPairSelection * selection = IndexPairSelection_create(); unsigned int selectionIndex = UINT_MAX; TestCase_assertBoolFalse(IndexPairSelection_isPairSelected(selection, 0, 1, &selectionIndex)); TestCase_assertBoolTrue(IndexPairSelection_selectIndexPair(selection, 0, 1, true)); TestCase_assertBoolTrue(IndexPairSelection_isPairSelected(selection, 0, 1, &selectionIndex)); TestCase_assertUIntEqual(selectionIndex, 0); TestCase_assertBoolFalse(IndexPairSelection_selectIndexPair(selection, 0, 1, false)); TestCase_assertBoolFalse(IndexPairSelection_isPairSelected(selection, 1, 2, &selectionIndex)); TestCase_assertBoolTrue(IndexPairSelection_selectIndexPair(selection, 1, 2, true)); TestCase_assertBoolTrue(IndexPairSelection_isPairSelected(selection, 1, 2, &selectionIndex)); TestCase_assertUIntEqual(selectionIndex, 1); TestCase_assertBoolFalse(IndexPairSelection_deselectIndexPair(selection, 2, 3, false)); IndexPairSelection_selectIndexPair(selection, 2, 3, true); TestCase_assertBoolTrue(IndexPairSelection_deselectIndexPair(selection, 2, 3, false)); TestCase_assertBoolFalse(IndexPairSelection_isPairSelected(selection, 2, 3, NULL)); TestCase_assertBoolFalse(IndexPairSelection_toggleIndexPair(selection, 0, 1, false)); TestCase_assertBoolFalse(IndexPairSelection_isPairSelected(selection, 0, 1, NULL)); TestCase_assertBoolTrue(IndexPairSelection_toggleIndexPair(selection, 2, 4, false)); TestCase_assertBoolTrue(IndexPairSelection_isPairSelected(selection, 2, 4, NULL)); IndexPairSelection_deselectItemAtIndex(selection, 0, false); TestCase_assertBoolFalse(IndexPairSelection_isPairSelected(selection, 1, 2, NULL)); TestCase_assertBoolTrue(IndexPairSelection_selectIndexPair(selection, 1, 2, true)); TestCase_assertBoolTrue(IndexPairSelection_truncateSelectionToMaxIndexCount(selection, 3)); TestCase_assertUIntEqual(selection->pairCount, 1); TestCase_assertBoolTrue(IndexPairSelection_isPairSelected(selection, 1, 2, &selectionIndex)); TestCase_assertUIntEqual(selectionIndex, 0); TestCase_assertBoolFalse(IndexPairSelection_isPairSelected(selection, 2, 4, &selectionIndex)); TestCase_assertBoolTrue(IndexPairSelection_deselectAll(selection)); TestCase_assertBoolFalse(IndexPairSelection_isPairSelected(selection, 1, 2, NULL)); TestCase_assertUIntEqual(selection->pairCount, 0); TestCase_assertBoolFalse(IndexPairSelection_deselectAll(selection)); IndexPairSelection_dispose(selection); } static void testCopy(void) { IndexPairSelection * selection = IndexPairSelection_create(); IndexPairSelection * copy = IndexPairSelection_copy(selection); IndexPairSelection_dispose(selection); TestCase_assertUIntEqual(copy->pairCount, 0); TestCase_assertPointerNULL(copy->pairs); IndexPairSelection_dispose(copy); selection = IndexPairSelection_create(); IndexPairSelection_selectIndexPair(selection, 1, 2, true); IndexPairSelection_selectIndexPair(selection, 3, 5, true); copy = IndexPairSelection_copy(selection); IndexPairSelection_dispose(selection); TestCase_assertUIntEqual(copy->pairCount, 2); TestCase_assertPointerNonNULL(copy->pairs); TestCase_assertUIntEqual(copy->pairs[0].index0, 1); TestCase_assertUIntEqual(copy->pairs[0].index1, 2); TestCase_assertUIntEqual(copy->pairs[1].index0, 3); TestCase_assertUIntEqual(copy->pairs[1].index1, 5); TestCase_assertBoolFalse(IndexPairSelection_isPairSelected(copy, 0, 1, NULL)); TestCase_assertBoolTrue(IndexPairSelection_isPairSelected(copy, 1, 2, NULL)); TestCase_assertBoolFalse(IndexPairSelection_isPairSelected(copy, 2, 3, NULL)); TestCase_assertBoolTrue(IndexPairSelection_isPairSelected(copy, 3, 5, NULL)); TestCase_assertBoolFalse(IndexPairSelection_isPairSelected(copy, 4, 5, NULL)); IndexPairSelection * copy2 = IndexPairSelection_create(); IndexPairSelection_copySelectionFrom(copy2, copy); IndexPairSelection_dispose(copy); TestCase_assertUIntEqual(copy2->pairCount, 2); TestCase_assertPointerNonNULL(copy2->pairs); TestCase_assertUIntEqual(copy2->pairs[0].index0, 1); TestCase_assertUIntEqual(copy2->pairs[0].index1, 2); TestCase_assertUIntEqual(copy2->pairs[1].index0, 3); TestCase_assertUIntEqual(copy2->pairs[1].index1, 5); TestCase_assertBoolTrue(IndexPairSelection_isPairSelected(copy2, 1, 2, NULL)); TestCase_assertBoolTrue(IndexPairSelection_isPairSelected(copy2, 3, 5, NULL)); IndexPairSelection_dispose(copy2); } static void testAdjustIndexes(void) { IndexPairSelection * selection = IndexPairSelection_create(); IndexPairSelection_selectIndexPair(selection, 0, 1, true); IndexPairSelection_selectIndexPair(selection, 2, 7, true); IndexPairSelection_selectIndexPair(selection, 5, 6, true); IndexPairSelection_selectIndexPair(selection, 9, 10, true); IndexPairSelection_adjustIndexes(selection, 3, 1); TestCase_assertUIntEqual(selection->pairCount, 4); TestCase_assertUIntEqual(selection->pairs[0].index0, 0); TestCase_assertUIntEqual(selection->pairs[0].index1, 1); TestCase_assertUIntEqual(selection->pairs[1].index0, 2); TestCase_assertUIntEqual(selection->pairs[1].index1, 8); TestCase_assertUIntEqual(selection->pairs[2].index0, 6); TestCase_assertUIntEqual(selection->pairs[2].index1, 7); TestCase_assertUIntEqual(selection->pairs[3].index0, 10); TestCase_assertUIntEqual(selection->pairs[3].index1, 11); IndexPairSelection_adjustIndexes(selection, 2, -7); TestCase_assertUIntEqual(selection->pairCount, 2); TestCase_assertUIntEqual(selection->pairs[0].index0, 0); TestCase_assertUIntEqual(selection->pairs[0].index1, 1); TestCase_assertUIntEqual(selection->pairs[1].index0, 3); TestCase_assertUIntEqual(selection->pairs[1].index1, 4); IndexPairSelection_dispose(selection); } static void testRemoveDuplicates(void) { IndexPairSelection * selection = IndexPairSelection_create(); unsigned int result = IndexPairSelection_removeDuplicates(selection); TestCase_assertUIntEqual(result, 0); IndexPairSelection_selectIndexPair(selection, 0, 1, true); IndexPairSelection_selectIndexPair(selection, 1, 2, true); result = IndexPairSelection_removeDuplicates(selection); TestCase_assertUIntEqual(result, 0); TestCase_assertUIntEqual(selection->pairCount, 2); IndexPairSelection_selectIndexPair(selection, 0, 1, true); result = IndexPairSelection_removeDuplicates(selection); TestCase_assertUIntEqual(result, 1); TestCase_assertUIntEqual(selection->pairCount, 2); TestCase_assertUIntEqual(selection->pairs[0].index0, 0); TestCase_assertUIntEqual(selection->pairs[0].index1, 1); TestCase_assertUIntEqual(selection->pairs[1].index0, 1); TestCase_assertUIntEqual(selection->pairs[1].index1, 2); IndexPairSelection_selectIndexPair(selection, 3, 4, true); IndexPairSelection_selectIndexPair(selection, 4, 5, true); IndexPairSelection_selectIndexPair(selection, 3, 4, true); IndexPairSelection_selectIndexPair(selection, 1, 2, true); result = IndexPairSelection_removeDuplicates(selection); TestCase_assertUIntEqual(result, 2); TestCase_assertUIntEqual(selection->pairCount, 4); TestCase_assertUIntEqual(selection->pairs[0].index0, 0); TestCase_assertUIntEqual(selection->pairs[0].index1, 1); TestCase_assertUIntEqual(selection->pairs[1].index0, 1); TestCase_assertUIntEqual(selection->pairs[1].index1, 2); TestCase_assertUIntEqual(selection->pairs[2].index0, 3); TestCase_assertUIntEqual(selection->pairs[2].index1, 4); TestCase_assertUIntEqual(selection->pairs[3].index0, 4); TestCase_assertUIntEqual(selection->pairs[3].index1, 5); IndexPairSelection_dispose(selection); } static void testSetLastSelectedPair(void) { IndexPairSelection * selection = IndexPairSelection_create(); bool result = IndexPairSelection_setLastSelectedPair(selection, 0, 1); TestCase_assertBoolFalse(result); IndexPairSelection_selectIndexPair(selection, 0, 1, true); IndexPairSelection_selectIndexPair(selection, 1, 2, true); IndexPairSelection_selectIndexPair(selection, 2, 3, true); result = IndexPairSelection_setLastSelectedPair(selection, 0, 1); TestCase_assertBoolTrue(result); TestCase_assertUIntEqual(selection->pairs[0].index0, 1); TestCase_assertUIntEqual(selection->pairs[0].index1, 2); TestCase_assertUIntEqual(selection->pairs[1].index0, 2); TestCase_assertUIntEqual(selection->pairs[1].index1, 3); TestCase_assertUIntEqual(selection->pairs[2].index0, 0); TestCase_assertUIntEqual(selection->pairs[2].index1, 1); result = IndexPairSelection_setLastSelectedPair(selection, 2, 3); TestCase_assertBoolTrue(result); TestCase_assertUIntEqual(selection->pairs[0].index0, 1); TestCase_assertUIntEqual(selection->pairs[0].index1, 2); TestCase_assertUIntEqual(selection->pairs[1].index0, 0); TestCase_assertUIntEqual(selection->pairs[1].index1, 1); TestCase_assertUIntEqual(selection->pairs[2].index0, 2); TestCase_assertUIntEqual(selection->pairs[2].index1, 3); result = IndexPairSelection_setLastSelectedPair(selection, 2, 3); TestCase_assertBoolFalse(result); IndexPairSelection_dispose(selection); } static void testScribble(void) { IndexPairSelection * selection = IndexPairSelection_create(); IndexPairSelection_selectIndexPair(selection, 1, 2, true); IndexPairSelection_selectIndexPair(selection, 3, 0, true); IndexPairSelection_selectIndexPair(selection, 7, 9, true); IndexPairSelection_selectIndexPair(selection, 20, 21, true); IndexPairSelection_selectIndexPair(selection, 22, 3, true); IndexPairSelection_selectIndexPair(selection, 26, 3, true); TestCase_assertUIntEqual(selection->pairs[1].index0, 0); TestCase_assertUIntEqual(selection->pairs[1].index1, 3); TestCase_assertBoolTrue(IndexPairSelection_isPairSelected(selection, 3, 0, NULL)); bool result = IndexPairSelection_deselectIndexPair(selection, 3, 0, true); TestCase_assertBoolTrue(result); TestCase_assertUIntEqual(selection->pairs[1].index0, UINT_MAX); TestCase_assertUIntEqual(selection->pairs[1].index1, UINT_MAX); TestCase_assertBoolFalse(IndexPairSelection_isPairSelected(selection, 3, 0, NULL)); result = IndexPairSelection_deselectIndexPair(selection, 3, 0, true); TestCase_assertBoolFalse(result); result = IndexPairSelection_deselectIndexPair(selection, 90, 91, true); TestCase_assertBoolFalse(result); TestCase_assertUIntEqual(selection->pairs[2].index0, 7); TestCase_assertUIntEqual(selection->pairs[2].index1, 9); TestCase_assertBoolTrue(IndexPairSelection_isPairSelected(selection, 7, 9, NULL)); IndexPairSelection_deselectItemAtIndex(selection, 2, true); TestCase_assertUIntEqual(selection->pairs[2].index0, UINT_MAX); TestCase_assertUIntEqual(selection->pairs[2].index1, UINT_MAX); TestCase_assertBoolFalse(IndexPairSelection_isPairSelected(selection, 7, 9, NULL)); TestCase_assertUIntEqual(selection->pairs[4].index0, 3); TestCase_assertUIntEqual(selection->pairs[4].index1, 22); TestCase_assertBoolTrue(IndexPairSelection_isPairSelected(selection, 22, 3, NULL)); result = IndexPairSelection_toggleIndexPair(selection, 22, 3, true); TestCase_assertBoolFalse(result); TestCase_assertUIntEqual(selection->pairs[4].index0, UINT_MAX); TestCase_assertUIntEqual(selection->pairs[4].index1, UINT_MAX); TestCase_assertBoolFalse(IndexPairSelection_isPairSelected(selection, 22, 3, NULL)); TestCase_assertUIntEqual(selection->pairCount, 6); result = IndexPairSelection_toggleIndexPair(selection, 22, 3, true); TestCase_assertBoolTrue(result); TestCase_assertUIntEqual(selection->pairCount, 7); TestCase_assertUIntEqual(selection->pairs[6].index0, 3); TestCase_assertUIntEqual(selection->pairs[6].index1, 22); TestCase_assertBoolTrue(IndexPairSelection_isPairSelected(selection, 22, 3, NULL)); IndexPairSelection_removeScribbles(selection); TestCase_assertUIntEqual(selection->pairCount, 4); TestCase_assertUIntEqual(selection->pairs[0].index0, 1); TestCase_assertUIntEqual(selection->pairs[0].index1, 2); TestCase_assertUIntEqual(selection->pairs[1].index0, 20); TestCase_assertUIntEqual(selection->pairs[1].index1, 21); TestCase_assertUIntEqual(selection->pairs[2].index0, 3); TestCase_assertUIntEqual(selection->pairs[2].index1, 26); TestCase_assertUIntEqual(selection->pairs[3].index0, 3); TestCase_assertUIntEqual(selection->pairs[3].index1, 22); IndexPairSelection_dispose(selection); } TEST_SUITE(IndexPairSelectionTest, testInit, testBasicOperations, testCopy, testAdjustIndexes, testRemoveDuplicates, testSetLastSelectedPair, testScribble)