From dc92cbdeb3a9fc92775d93c2acd749f9a90d733e Mon Sep 17 00:00:00 2001 From: Juha Reunanen Date: Fri, 17 Jan 2025 07:57:09 +0200 Subject: [PATCH 1/2] Add some test criteria that currently fail --- dcmdata/tests/tsequen.cc | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/dcmdata/tests/tsequen.cc b/dcmdata/tests/tsequen.cc index 3a6959ba96..5dabc83898 100644 --- a/dcmdata/tests/tsequen.cc +++ b/dcmdata/tests/tsequen.cc @@ -40,19 +40,31 @@ OFTEST(dcmdata_sequenceInsert) DcmSequenceOfItems sequence(DCM_OtherPatientIDsSequence); /* add a large number of items to the sequence */ unsigned long counter = 0; + DcmItem* initiallyInsertedItems[NUMBER_OF_ITEMS]; for (unsigned long i = 0; i < NUMBER_OF_ITEMS; ++i) { - if (sequence.insert(new DcmItem()).good()) + DcmItem* item = new DcmItem(); + initiallyInsertedItems[i] = item; + if (sequence.insert(item).good()) ++counter; } /* check whether that worked (for-loop shouldn't take too long) */ OFCHECK_EQUAL(counter, NUMBER_OF_ITEMS); /* access specific items (performance should be no issue) */ - OFCHECK(sequence.getItem(0) != NULL); - OFCHECK(sequence.getItem(2) != NULL); + OFCHECK(sequence.getItem(0) == initiallyInsertedItems[0]); + OFCHECK(sequence.getItem(2) == initiallyInsertedItems[2]); OFCHECK(sequence.getItem(NUMBER_OF_ITEMS) == NULL); - OFCHECK(sequence.getItem(NUMBER_OF_ITEMS - 1) != NULL); - OFCHECK(sequence.getItem(NUMBER_OF_ITEMS - 2) != NULL); + OFCHECK(sequence.getItem(NUMBER_OF_ITEMS - 1) == initiallyInsertedItems[NUMBER_OF_ITEMS - 1]); + OFCHECK(sequence.getItem(NUMBER_OF_ITEMS - 2) == initiallyInsertedItems[NUMBER_OF_ITEMS - 2]); + /* insert a single item before the current item */ + DcmItem* item = new DcmItem(); + OFBool before = true; + OFCHECK(sequence.insertAtCurrentPos(item, before).good()); + OFCHECK(sequence.getItem(NUMBER_OF_ITEMS - 2) == item); + /* the items after the new item should have been shifted by one */ + OFCHECK(sequence.getItem(NUMBER_OF_ITEMS - 1) == initiallyInsertedItems[NUMBER_OF_ITEMS - 2]); + OFCHECK(sequence.getItem(NUMBER_OF_ITEMS) == initiallyInsertedItems[NUMBER_OF_ITEMS - 1]); + OFCHECK(sequence.getItem(NUMBER_OF_ITEMS + 1) == NULL); } From 469ac42dba537d410027bca6a60c83540dcbf857 Mon Sep 17 00:00:00 2001 From: Juha Reunanen Date: Fri, 17 Jan 2025 08:00:31 +0200 Subject: [PATCH 2/2] Fix inserting before the current list item --- dcmdata/libsrc/dclist.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dcmdata/libsrc/dclist.cc b/dcmdata/libsrc/dclist.cc index 897718aed7..0ed315c685 100644 --- a/dcmdata/libsrc/dclist.cc +++ b/dcmdata/libsrc/dclist.cc @@ -171,7 +171,7 @@ DcmObject *DcmList::insert( DcmObject *obj, E_ListPos pos ) node->nextNode = currentNode; currentNode->prevNode = node; currentNode = node; - currentAbsolutePosition++; + // NB: no need to update currentAbsolutePosition cardinality++; } else //( pos==ELP_next || pos==ELP_atpos )