#include #include "Test.h" #include "vla.h" using namespace pymol::test; using pymol::vla; TEST_CASE("VLA Default", "[VLA]") { vla myVLA; REQUIRE(isNullptr(myVLA.data())); } TEST_CASE("VLA Alloc And Size", "[VLA]") { vla myVLA(5); REQUIRE(myVLA.size() == 5); REQUIRE(isArrayZero(myVLA.data(), myVLA.size())); } TEST_CASE("VLA size=0", "[VLA]") { vla myVLA(0); REQUIRE(myVLA.size() == 0); REQUIRE(!isNullptr(myVLA.data())); } TEST_CASE("VLA Initializer List", "[VLA]") { vla myVLA{1, 2, 3, 4, 5}; const std::array myArr{1, 2, 3, 4, 5}; REQUIRE(isArrayEqual(myVLA.data(), myArr.data(), myVLA.size())); } TEST_CASE("VLA empty Initializer List", "[VLA]") { vla myVLA{}; REQUIRE(isNullptr(myVLA.data())); } TEST_CASE("VLA single zero-int Initializer List", "[VLA]") { vla myVLA{0}; REQUIRE(myVLA.size() == 1); REQUIRE(!isNullptr(myVLA.data())); REQUIRE(myVLA[0] == 0); } TEST_CASE("VLA single non-zero-int Initializer List", "[VLA]") { vla myVLA{5}; REQUIRE(myVLA.size() == 1); REQUIRE(!isNullptr(myVLA.data())); REQUIRE(myVLA[0] == 5); } TEST_CASE("VLA NULL Assign", "[VLA]") { vla myVLA{1, 2, 3, 4, 5}; myVLA = NULL; REQUIRE(isNullptr(myVLA.data())); } TEST_CASE("VLA nullptr Assign", "[VLA]") { vla myVLA{1, 2, 3, 4, 5}; myVLA = nullptr; REQUIRE(isNullptr(myVLA.data())); } TEST_CASE("VLA Special Member Functions", "[VLA]") { REQUIRE(isRegular>()); } TEST_CASE("VLA Copy Construct", "[VLA]") { vla myVLA{1, 2, 3, 4, 5}; auto copyVLA = myVLA; REQUIRE(myVLA.size() == copyVLA.size()); REQUIRE(isArrayEqual(myVLA.data(), copyVLA.data(), myVLA.size())); } TEST_CASE("VLA Copy Assign", "[VLA]") { vla myVLA{1, 2, 3, 4, 5}; vla copyVLA(1); REQUIRE(myVLA.size() != copyVLA.size()); copyVLA = myVLA; REQUIRE(myVLA.size() == copyVLA.size()); REQUIRE(isArrayEqual(myVLA.data(), copyVLA.data(), myVLA.size())); } TEST_CASE("VLA Move Construct", "[VLA]") { vla myVLA{1, 2, 3, 4, 5}; auto copyVLA = std::move(myVLA); REQUIRE(copyVLA.size() == 5); const std::array myArr{1, 2, 3, 4, 5}; REQUIRE(isArrayEqual(copyVLA.data(), myArr.data(), copyVLA.size())); } TEST_CASE("VLA Move Assign", "[VLA]") { vla myVLA{1, 2, 3, 4, 5}; vla copyVLA(3); copyVLA = std::move(myVLA); REQUIRE(copyVLA.size() == 5); const std::array myArr{1, 2, 3, 4, 5}; REQUIRE(isArrayEqual(copyVLA.data(), myArr.data(), copyVLA.size())); } TEST_CASE("Vector_Resize", "[VLA]") { vla myVLA(5); REQUIRE(myVLA.size() == 5); myVLA.resize(3); REQUIRE(myVLA.size() == 3); vla myVLA2; myVLA2.resize(3); REQUIRE(myVLA2.size() == 3); myVLA2[0] = 123; myVLA2[2] = 456; myVLA2.resize(30); REQUIRE(myVLA2.size() == 30); REQUIRE(myVLA2[0] == 123); REQUIRE(myVLA2[1] == 0); REQUIRE(myVLA2[2] == 456); REQUIRE(isArrayZero(myVLA2.data() + 3, myVLA2.size() - 3)); } TEST_CASE("FreeP", "[VLA]") { vla myVLA(10); REQUIRE(myVLA.size() == 10); myVLA.freeP(); REQUIRE(myVLA.size() == 0); REQUIRE(isNullptr(myVLA.data())); } TEST_CASE("Bool Cast", "[VLA]") { vla myVLA; REQUIRE(myVLA == nullptr); vla myVLA2(2); REQUIRE(myVLA2 != nullptr); myVLA2.freeP(); REQUIRE(myVLA2 == nullptr); } TEST_CASE("Index", "[VLA]") { vla myVLA{1, 2, 3, 4, 5}; REQUIRE(myVLA[2] == 3); } TEST_CASE("Range Based For", "[VLA]") { vla myVLA{0, 1, 9, 3, 4}; std::size_t i{0u}; for (auto& m : myVLA) { REQUIRE(myVLA[i] == m); i++; } i = 0; for (const auto& m : myVLA) { REQUIRE(myVLA[i] == m); i++; } } TEST_CASE("From_VLACalloc", "[VLA]") { auto myVLA = pymol::vla_take_ownership(VLACalloc(int, 5)); REQUIRE(myVLA.size() == 5); REQUIRE(isArrayZero(myVLA.data(), 5)); } TEST_CASE("Classic_Copy", "[VLA]") { vla myVLA(5); std::fill(myVLA.begin(), myVLA.end(), 10); auto myVLACopy = VLACopy2(myVLA); REQUIRE(isArrayEqual(myVLA.data(), myVLACopy.data(), myVLA.size())); myVLACopy[1] = 100; REQUIRE(myVLA[1] != myVLACopy[1]); } TEST_CASE("Classic_Check2", "[VLA]") { vla myVLA(5); VLACheck2(myVLA, 10); REQUIRE(myVLA.size() >= 11); } TEST_CASE("Classic_Size2", "[VLA]") { vla myVLA(5); VLASize2(myVLA, 10); REQUIRE(myVLA.size() == 10); } TEST_CASE("Classic_Free", "[VLA]") { vla myVLA(5); VLAFreeP(myVLA); REQUIRE(isNullptr(myVLA.data())); } // vi:sw=2:expandtab