From 2eaa9f2ceb557b61f9bb177dc3a9cafc58e9ca69 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vladim=C3=ADr=20Vondru=C5=A1?= Date: Mon, 30 Dec 2019 16:25:19 +0100 Subject: [PATCH] Add explicit tests for Resource constructors. --- src/Magnum/Test/ResourceManagerTest.cpp | 78 ++++++++++++++++++++++++- 1 file changed, 77 insertions(+), 1 deletion(-) diff --git a/src/Magnum/Test/ResourceManagerTest.cpp b/src/Magnum/Test/ResourceManagerTest.cpp index 1ee6424a6..48ab4f439 100644 --- a/src/Magnum/Test/ResourceManagerTest.cpp +++ b/src/Magnum/Test/ResourceManagerTest.cpp @@ -35,6 +35,11 @@ namespace Magnum { namespace Test { namespace { struct ResourceManagerTest: TestSuite::Tester { explicit ResourceManagerTest(); + void constructResource(); + void constructResourceEmpty(); + void constructResourceCopy(); + void constructResourceMove(); + void compare(); void state(); void stateFallback(); @@ -65,7 +70,12 @@ typedef Magnum::ResourceManager ResourceManager; size_t Data::count = 0; ResourceManagerTest::ResourceManagerTest() { - addTests({&ResourceManagerTest::compare, + addTests({&ResourceManagerTest::constructResource, + &ResourceManagerTest::constructResourceEmpty, + &ResourceManagerTest::constructResourceCopy, + &ResourceManagerTest::constructResourceMove, + + &ResourceManagerTest::compare, &ResourceManagerTest::state, &ResourceManagerTest::stateFallback, &ResourceManagerTest::stateDisallowed, @@ -83,6 +93,72 @@ ResourceManagerTest::ResourceManagerTest() { &ResourceManagerTest::debugResourceState}); } +void ResourceManagerTest::constructResource() { + ResourceManager rm; + rm.set("thing", 6432); + + Resource a = rm.get("thing"); + CORRADE_COMPARE(a.key(), ResourceKey("thing")); + CORRADE_COMPARE(a.state(), ResourceState::Final); + CORRADE_COMPARE(*a, 6432); + CORRADE_COMPARE(rm.referenceCount("thing"), 1); +} + +void ResourceManagerTest::constructResourceEmpty() { + Resource a; + CORRADE_COMPARE(a.key(), ResourceKey{}); + CORRADE_COMPARE(a.state(), ResourceState::Final); + CORRADE_VERIFY(!a); +} + +void ResourceManagerTest::constructResourceCopy() { + ResourceManager rm; + rm.set("thing", 6432); + + Resource a = rm.get("thing"); + CORRADE_COMPARE(rm.referenceCount("thing"), 1); + + Resource b = a; + CORRADE_COMPARE(a.key(), ResourceKey("thing")); + CORRADE_COMPARE(b.key(), ResourceKey("thing")); + CORRADE_COMPARE(a.state(), ResourceState::Final); + CORRADE_COMPARE(b.state(), ResourceState::Final); + CORRADE_COMPARE(*a, 6432); + CORRADE_COMPARE(*b, 6432); + CORRADE_COMPARE(rm.referenceCount("thing"), 2); + + Resource c; + c = b; + CORRADE_COMPARE(b.key(), ResourceKey("thing")); + CORRADE_COMPARE(c.key(), ResourceKey("thing")); + CORRADE_COMPARE(b.state(), ResourceState::Final); + CORRADE_COMPARE(c.state(), ResourceState::Final); + CORRADE_COMPARE(*b, 6432); + CORRADE_COMPARE(*c, 6432); + CORRADE_COMPARE(rm.referenceCount("thing"), 3); +} + +void ResourceManagerTest::constructResourceMove() { + ResourceManager rm; + rm.set("thing", 6432); + + Resource a = rm.get("thing"); + CORRADE_COMPARE(rm.referenceCount("thing"), 1); + + Resource b = std::move(a); + CORRADE_COMPARE(b.key(), ResourceKey("thing")); + CORRADE_COMPARE(b.state(), ResourceState::Final); + CORRADE_COMPARE(*b, 6432); + CORRADE_COMPARE(rm.referenceCount("thing"), 1); + + Resource c; + c = std::move(b); + CORRADE_COMPARE(c.key(), ResourceKey("thing")); + CORRADE_COMPARE(c.state(), ResourceState::Final); + CORRADE_COMPARE(*c, 6432); + CORRADE_COMPARE(rm.referenceCount("thing"), 1); +} + void ResourceManagerTest::compare() { ResourceManager rm1;