Fix memory leaks in newly added unit test
There is no need to allocate neither RowRanges nor HeightCache on the heap, just create them on the stack -- if nothing else, this ensures we don't leak memory, unlike before.
This commit is contained in:
@@ -27,48 +27,48 @@
|
|||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
TEST_CASE("RowHeightCacheTestCase::TestRowRangesSimple", "[dataview][heightcache]")
|
TEST_CASE("RowHeightCacheTestCase::TestRowRangesSimple", "[dataview][heightcache]")
|
||||||
{
|
{
|
||||||
RowRanges *rr = new RowRanges();
|
RowRanges rr;
|
||||||
|
|
||||||
CHECK(rr->CountAll() == 0);
|
CHECK(rr.CountAll() == 0);
|
||||||
|
|
||||||
for (unsigned int i = 0; i <= 10; i++)
|
for (unsigned int i = 0; i <= 10; i++)
|
||||||
{
|
{
|
||||||
CHECK(rr->Has(i) == false);
|
CHECK(rr.Has(i) == false);
|
||||||
|
|
||||||
rr->Add(i);
|
rr.Add(i);
|
||||||
|
|
||||||
CHECK(rr->CountAll() == i+1);
|
CHECK(rr.CountAll() == i+1);
|
||||||
CHECK(rr->CountTo(i) == i);
|
CHECK(rr.CountTo(i) == i);
|
||||||
CHECK(rr->Has(i) == true);
|
CHECK(rr.Has(i) == true);
|
||||||
}
|
}
|
||||||
|
|
||||||
CHECK(rr->GetSize() == 1); // every row is sorted in the same range, so count == 1
|
CHECK(rr.GetSize() == 1); // every row is sorted in the same range, so count == 1
|
||||||
CHECK(rr->CountAll() == 11); // 11 rows collected
|
CHECK(rr.CountAll() == 11); // 11 rows collected
|
||||||
CHECK(rr->CountTo(10) == 10);
|
CHECK(rr.CountTo(10) == 10);
|
||||||
|
|
||||||
rr->Add(5); // row 5 already contained -> does nothing
|
rr.Add(5); // row 5 already contained -> does nothing
|
||||||
|
|
||||||
CHECK(rr->GetSize() == 1); // every row is sorted in the same range, so count == 1
|
CHECK(rr.GetSize() == 1); // every row is sorted in the same range, so count == 1
|
||||||
CHECK(rr->CountAll() == 11); // 11 rows collected
|
CHECK(rr.CountAll() == 11); // 11 rows collected
|
||||||
CHECK(rr->CountTo(10) == 10);
|
CHECK(rr.CountTo(10) == 10);
|
||||||
|
|
||||||
for (int i = 10; i >= 0; i--)
|
for (int i = 10; i >= 0; i--)
|
||||||
{
|
{
|
||||||
CHECK(rr->CountAll() == (unsigned)i+1);
|
CHECK(rr.CountAll() == (unsigned)i+1);
|
||||||
CHECK(rr->CountTo((unsigned)i) == (unsigned)i);
|
CHECK(rr.CountTo((unsigned)i) == (unsigned)i);
|
||||||
|
|
||||||
rr->Remove(i);
|
rr.Remove(i);
|
||||||
|
|
||||||
CHECK(rr->CountAll() == (unsigned)i);
|
CHECK(rr.CountAll() == (unsigned)i);
|
||||||
CHECK(rr->CountTo((unsigned)i) == (unsigned)i);
|
CHECK(rr.CountTo((unsigned)i) == (unsigned)i);
|
||||||
}
|
}
|
||||||
|
|
||||||
CHECK(rr->CountAll() == 0); // everything removed, no row range is left behind
|
CHECK(rr.CountAll() == 0); // everything removed, no row range is left behind
|
||||||
for (int i = 10; i > 0; i--)
|
for (int i = 10; i > 0; i--)
|
||||||
{
|
{
|
||||||
CHECK(rr->CountTo(i) == 0);
|
CHECK(rr.CountTo(i) == 0);
|
||||||
}
|
}
|
||||||
CHECK(rr->GetSize() == 0);
|
CHECK(rr.GetSize() == 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
@@ -76,58 +76,58 @@ TEST_CASE("RowHeightCacheTestCase::TestRowRangesSimple", "[dataview][heightcache
|
|||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
TEST_CASE("RowHeightCacheTestCase::TestRowRangesGapsMod2", "[dataview][heightcache]")
|
TEST_CASE("RowHeightCacheTestCase::TestRowRangesGapsMod2", "[dataview][heightcache]")
|
||||||
{
|
{
|
||||||
RowRanges *rr = new RowRanges();
|
RowRanges rr;
|
||||||
for (int i = 0; i < 100; i++)
|
for (int i = 0; i < 100; i++)
|
||||||
{
|
{
|
||||||
CHECK(rr->Has(i) == false);
|
CHECK(rr.Has(i) == false);
|
||||||
|
|
||||||
if (i % 2 == 0)
|
if (i % 2 == 0)
|
||||||
{
|
{
|
||||||
rr->Add(i);
|
rr.Add(i);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
CHECK(rr->CountAll() == 50);
|
CHECK(rr.CountAll() == 50);
|
||||||
CHECK(rr->CountTo(100) == 50);
|
CHECK(rr.CountTo(100) == 50);
|
||||||
|
|
||||||
for (unsigned int i = 99; i > 0; i--)
|
for (unsigned int i = 99; i > 0; i--)
|
||||||
{
|
{
|
||||||
if (i % 2 == 0)
|
if (i % 2 == 0)
|
||||||
{
|
{
|
||||||
CHECK(rr->Has(i) == true);
|
CHECK(rr.Has(i) == true);
|
||||||
rr->Remove(i);
|
rr.Remove(i);
|
||||||
CHECK(rr->Has(i) == false);
|
CHECK(rr.Has(i) == false);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
CHECK(rr->Has(i) == false);
|
CHECK(rr.Has(i) == false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// only row 0 is in the RowRanges, so remove 1 does nothing
|
// only row 0 is in the RowRanges, so remove 1 does nothing
|
||||||
rr->Remove(1);
|
rr.Remove(1);
|
||||||
|
|
||||||
CHECK(rr->CountAll() == 1);
|
CHECK(rr.CountAll() == 1);
|
||||||
CHECK(rr->CountTo(0) == 0);
|
CHECK(rr.CountTo(0) == 0);
|
||||||
CHECK(rr->CountTo(1) == 1);
|
CHECK(rr.CountTo(1) == 1);
|
||||||
CHECK(rr->CountTo(100) == 1);
|
CHECK(rr.CountTo(100) == 1);
|
||||||
CHECK(rr->GetSize() == 1);
|
CHECK(rr.GetSize() == 1);
|
||||||
|
|
||||||
rr->Remove(0); // last row is beeing removed
|
rr.Remove(0); // last row is beeing removed
|
||||||
|
|
||||||
CHECK(rr->CountAll() == 0);
|
CHECK(rr.CountAll() == 0);
|
||||||
CHECK(rr->CountTo(0) == 0);
|
CHECK(rr.CountTo(0) == 0);
|
||||||
CHECK(rr->CountTo(1) == 0);
|
CHECK(rr.CountTo(1) == 0);
|
||||||
CHECK(rr->CountTo(100) == 0);
|
CHECK(rr.CountTo(100) == 0);
|
||||||
CHECK(rr->GetSize() == 0);
|
CHECK(rr.GetSize() == 0);
|
||||||
|
|
||||||
rr->Add(10);
|
rr.Add(10);
|
||||||
CHECK(rr->GetSize() == 1);
|
CHECK(rr.GetSize() == 1);
|
||||||
CHECK(rr->CountTo(1) == 0); // tests CountTo first break
|
CHECK(rr.CountTo(1) == 0); // tests CountTo first break
|
||||||
rr->Add(5); // inserts a range at the beginning
|
rr.Add(5); // inserts a range at the beginning
|
||||||
CHECK(rr->GetSize() == 2);
|
CHECK(rr.GetSize() == 2);
|
||||||
rr->Remove(10);
|
rr.Remove(10);
|
||||||
rr->Remove(5);
|
rr.Remove(5);
|
||||||
CHECK(rr->GetSize() == 0);
|
CHECK(rr.GetSize() == 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
@@ -135,31 +135,31 @@ TEST_CASE("RowHeightCacheTestCase::TestRowRangesGapsMod2", "[dataview][heightcac
|
|||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
TEST_CASE("RowHeightCacheTestCase::TestRowRangesCleanUp1", "[dataview][heightcache]")
|
TEST_CASE("RowHeightCacheTestCase::TestRowRangesCleanUp1", "[dataview][heightcache]")
|
||||||
{
|
{
|
||||||
RowRanges *rr = new RowRanges();
|
RowRanges rr;
|
||||||
for (unsigned int i = 0; i < 100; i++)
|
for (unsigned int i = 0; i < 100; i++)
|
||||||
{
|
{
|
||||||
CHECK(rr->Has(i) == false);
|
CHECK(rr.Has(i) == false);
|
||||||
|
|
||||||
if (i % 2 == 0)
|
if (i % 2 == 0)
|
||||||
{
|
{
|
||||||
rr->Add(i);
|
rr.Add(i);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
CHECK(rr->GetSize() == 50); // adding 50 rows (only even) results in 50 range objects
|
CHECK(rr.GetSize() == 50); // adding 50 rows (only even) results in 50 range objects
|
||||||
CHECK(rr->CountAll() == 50);
|
CHECK(rr.CountAll() == 50);
|
||||||
CHECK(rr->CountTo(100) == 50);
|
CHECK(rr.CountTo(100) == 50);
|
||||||
|
|
||||||
for (unsigned int i = 0; i < 100; i++)
|
for (unsigned int i = 0; i < 100; i++)
|
||||||
{
|
{
|
||||||
if (i % 2 == 1)
|
if (i % 2 == 1)
|
||||||
{
|
{
|
||||||
rr->Add(i);
|
rr.Add(i);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
CHECK(rr->GetSize() == 1); // adding 50 rows (only odd) should combined to 1 range object
|
CHECK(rr.GetSize() == 1); // adding 50 rows (only odd) should combined to 1 range object
|
||||||
CHECK(rr->CountAll() == 100);
|
CHECK(rr.CountAll() == 100);
|
||||||
CHECK(rr->CountTo(100) == 100);
|
CHECK(rr.CountTo(100) == 100);
|
||||||
}
|
}
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
@@ -167,25 +167,25 @@ TEST_CASE("RowHeightCacheTestCase::TestRowRangesCleanUp1", "[dataview][heightcac
|
|||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
TEST_CASE("RowHeightCacheTestCase::TestRowRangesCleanUp2", "[dataview][heightcache]")
|
TEST_CASE("RowHeightCacheTestCase::TestRowRangesCleanUp2", "[dataview][heightcache]")
|
||||||
{
|
{
|
||||||
RowRanges *rr = new RowRanges();
|
RowRanges rr;
|
||||||
for (unsigned int i = 0; i < 10; i++)
|
for (unsigned int i = 0; i < 10; i++)
|
||||||
{
|
{
|
||||||
rr->Add(i);
|
rr.Add(i);
|
||||||
}
|
}
|
||||||
CHECK(rr->GetSize() == 1); // adding 10 sequent rows results in 1 range objects
|
CHECK(rr.GetSize() == 1); // adding 10 sequent rows results in 1 range objects
|
||||||
CHECK(rr->CountAll() == 10);
|
CHECK(rr.CountAll() == 10);
|
||||||
CHECK(rr->CountTo(100) == 10);
|
CHECK(rr.CountTo(100) == 10);
|
||||||
|
|
||||||
for (unsigned int i = 12; i < 20; i++)
|
for (unsigned int i = 12; i < 20; i++)
|
||||||
{
|
{
|
||||||
rr->Add(i);
|
rr.Add(i);
|
||||||
}
|
}
|
||||||
|
|
||||||
CHECK(rr->GetSize() == 2);
|
CHECK(rr.GetSize() == 2);
|
||||||
rr->Add(11); // tests extending a range at the beginning (to the left)
|
rr.Add(11); // tests extending a range at the beginning (to the left)
|
||||||
CHECK(rr->GetSize() == 2);
|
CHECK(rr.GetSize() == 2);
|
||||||
rr->Add(10); // extends a range and reduces them
|
rr.Add(10); // extends a range and reduces them
|
||||||
CHECK(rr->GetSize() == 1);
|
CHECK(rr.GetSize() == 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
@@ -193,83 +193,83 @@ TEST_CASE("RowHeightCacheTestCase::TestRowRangesCleanUp2", "[dataview][heightcac
|
|||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
TEST_CASE("RowHeightCacheTestCase::TestHeightCache", "[dataview][heightcache]")
|
TEST_CASE("RowHeightCacheTestCase::TestHeightCache", "[dataview][heightcache]")
|
||||||
{
|
{
|
||||||
HeightCache *hc = new HeightCache();
|
HeightCache hc;
|
||||||
|
|
||||||
for (unsigned int i = 0; i <= 10; i++)
|
for (unsigned int i = 0; i <= 10; i++)
|
||||||
{
|
{
|
||||||
hc->Put(i, 22);
|
hc.Put(i, 22);
|
||||||
}
|
}
|
||||||
for (unsigned int i = 15; i <= 17; i++)
|
for (unsigned int i = 15; i <= 17; i++)
|
||||||
{
|
{
|
||||||
hc->Put(i, 22);
|
hc.Put(i, 22);
|
||||||
}
|
}
|
||||||
for (unsigned int i = 20; i <= 2000; i++)
|
for (unsigned int i = 20; i <= 2000; i++)
|
||||||
{
|
{
|
||||||
hc->Put(i, 22);
|
hc.Put(i, 22);
|
||||||
}
|
}
|
||||||
|
|
||||||
hc->Put(11, 42);
|
hc.Put(11, 42);
|
||||||
hc->Put(12, 42);
|
hc.Put(12, 42);
|
||||||
hc->Put(18, 42);
|
hc.Put(18, 42);
|
||||||
|
|
||||||
hc->Put(13, 62);
|
hc.Put(13, 62);
|
||||||
hc->Put(14, 62);
|
hc.Put(14, 62);
|
||||||
hc->Put(19, 62);
|
hc.Put(19, 62);
|
||||||
|
|
||||||
int start = 0;
|
int start = 0;
|
||||||
int height = 0;
|
int height = 0;
|
||||||
unsigned int row = 666;
|
unsigned int row = 666;
|
||||||
|
|
||||||
CHECK(hc->GetLineStart(1000, start) == true);
|
CHECK(hc.GetLineStart(1000, start) == true);
|
||||||
CHECK(start == 22180);
|
CHECK(start == 22180);
|
||||||
|
|
||||||
CHECK(hc->GetLineHeight(1000, height) == true);
|
CHECK(hc.GetLineHeight(1000, height) == true);
|
||||||
CHECK(height == 22);
|
CHECK(height == 22);
|
||||||
|
|
||||||
CHECK(hc->GetLineHeight(5000, start) == false);
|
CHECK(hc.GetLineHeight(5000, start) == false);
|
||||||
|
|
||||||
// test invalid y
|
// test invalid y
|
||||||
CHECK(hc->GetLineAt(-1, row) == false);
|
CHECK(hc.GetLineAt(-1, row) == false);
|
||||||
CHECK(row == 666);
|
CHECK(row == 666);
|
||||||
|
|
||||||
// test start of first row
|
// test start of first row
|
||||||
CHECK(hc->GetLineAt(0, row) == true);
|
CHECK(hc.GetLineAt(0, row) == true);
|
||||||
CHECK(row == 0);
|
CHECK(row == 0);
|
||||||
|
|
||||||
// test end of first row
|
// test end of first row
|
||||||
CHECK(hc->GetLineAt(21, row) == true);
|
CHECK(hc.GetLineAt(21, row) == true);
|
||||||
CHECK(row == 0);
|
CHECK(row == 0);
|
||||||
|
|
||||||
// test start of second row
|
// test start of second row
|
||||||
CHECK(hc->GetLineAt(22, row) == true);
|
CHECK(hc.GetLineAt(22, row) == true);
|
||||||
CHECK(row == 1);
|
CHECK(row == 1);
|
||||||
|
|
||||||
hc->Remove(1000); // Delete row 1000 and everything behind
|
hc.Remove(1000); // Delete row 1000 and everything behind
|
||||||
|
|
||||||
CHECK(hc->GetLineAt(22179, row) == true);
|
CHECK(hc.GetLineAt(22179, row) == true);
|
||||||
CHECK(row == 999);
|
CHECK(row == 999);
|
||||||
CHECK(hc->GetLineHeight(999, height) == true);
|
CHECK(hc.GetLineHeight(999, height) == true);
|
||||||
CHECK(height == 22);
|
CHECK(height == 22);
|
||||||
|
|
||||||
row = 666;
|
row = 666;
|
||||||
height = 666;
|
height = 666;
|
||||||
CHECK(hc->GetLineAt(22180, row) == false);
|
CHECK(hc.GetLineAt(22180, row) == false);
|
||||||
CHECK(row == 666);
|
CHECK(row == 666);
|
||||||
CHECK(hc->GetLineHeight(1000, height) == false);
|
CHECK(hc.GetLineHeight(1000, height) == false);
|
||||||
CHECK(height == 666);
|
CHECK(height == 666);
|
||||||
|
|
||||||
hc->Clear(); // Clear all items
|
hc.Clear(); // Clear all items
|
||||||
for (int i = 20; i <= 2000; i++)
|
for (int i = 20; i <= 2000; i++)
|
||||||
{
|
{
|
||||||
height = 666;
|
height = 666;
|
||||||
CHECK(hc->GetLineHeight(i, height) == false);
|
CHECK(hc.GetLineHeight(i, height) == false);
|
||||||
CHECK(height == 666);
|
CHECK(height == 666);
|
||||||
}
|
}
|
||||||
|
|
||||||
hc->Clear(); // Clear twice should not crash
|
hc.Clear(); // Clear twice should not crash
|
||||||
|
|
||||||
row = 666;
|
row = 666;
|
||||||
height = 666;
|
height = 666;
|
||||||
CHECK(hc->GetLineAt(22180, row) == false);
|
CHECK(hc.GetLineAt(22180, row) == false);
|
||||||
CHECK(row == 666);
|
CHECK(row == 666);
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user