#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); TestCase_assertPointerNonNULL(selection->reverseLookup); TestCase_assertUIntEqual(selection->selectionDirtyValue, 0); TestCase_assertUIntEqual(selection->reverseLookupDirtyValue, 0); 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_assertBoolFalse(IndexPairSelection_isIndexSelected(selection, 0, &selectionIndex)); TestCase_assertBoolFalse(IndexPairSelection_isIndexSelected(selection, 1, &selectionIndex)); TestCase_assertBoolTrue(IndexPairSelection_selectIndexPair(selection, 0, 1, true)); TestCase_assertBoolTrue(IndexPairSelection_isPairSelected(selection, 0, 1, &selectionIndex)); TestCase_assertUIntEqual(selectionIndex, 0); TestCase_assertBoolTrue(IndexPairSelection_isIndexSelected(selection, 0, &selectionIndex)); TestCase_assertUIntEqual(selectionIndex, 0); TestCase_assertBoolTrue(IndexPairSelection_isIndexSelected(selection, 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_assertBoolTrue(IndexPairSelection_isIndexSelected(selection, 1, &selectionIndex)); TestCase_assertUIntEqual(selectionIndex, 0); TestCase_assertBoolTrue(IndexPairSelection_isIndexSelected(selection, 2, &selectionIndex)); TestCase_assertUIntEqual(selectionIndex, 1); TestCase_assertBoolFalse(IndexPairSelection_deselectIndexPair(selection, 2, 3)); IndexPairSelection_selectIndexPair(selection, 2, 3, true); TestCase_assertBoolTrue(IndexPairSelection_deselectIndexPair(selection, 2, 3)); TestCase_assertBoolFalse(IndexPairSelection_isPairSelected(selection, 2, 3, NULL)); TestCase_assertBoolTrue(IndexPairSelection_isIndexSelected(selection, 2, &selectionIndex)); TestCase_assertUIntEqual(selectionIndex, 1); TestCase_assertBoolFalse(IndexPairSelection_isIndexSelected(selection, 3, &selectionIndex)); TestCase_assertBoolFalse(IndexPairSelection_toggleIndexPair(selection, 0, 1)); TestCase_assertBoolFalse(IndexPairSelection_isPairSelected(selection, 0, 1, NULL)); TestCase_assertBoolTrue(IndexPairSelection_toggleIndexPair(selection, 2, 4)); TestCase_assertBoolTrue(IndexPairSelection_isPairSelected(selection, 2, 4, NULL)); IndexPairSelection_deselectItemAtIndex(selection, 0); 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_selectIndexPair(selection, 6, 7, true); IndexPairSelection_selectIndexPair(selection, 8, 7, true); IndexPairSelection_selectIndexPair(selection, 7, 9, true); IndexPairSelection_selectIndexPair(selection, 8, 9, true); TestCase_assertUIntEqual(selection->pairCount, 4); TestCase_assertBoolTrue(IndexPairSelection_deselectAllPairsWithIndex(selection, 7)); TestCase_assertUIntEqual(selection->pairCount, 1); TestCase_assertUIntEqual(selection->pairs[0].index0, 8); TestCase_assertUIntEqual(selection->pairs[0].index1, 9); TestCase_assertBoolFalse(IndexPairSelection_deselectAllPairsWithIndex(selection, 7)); 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); TestCase_assertPointerNonNULL(copy->reverseLookup); TestCase_assertUIntEqual(copy->selectionDirtyValue, 0); TestCase_assertUIntEqual(copy->reverseLookupDirtyValue, 0); 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); } TEST_SUITE(IndexPairSelectionTest, testInit, testBasicOperations, testCopy, testAdjustIndexes, testRemoveDuplicates)