layerCTest/Test_VLA.cpp (156 lines of code) (raw):
#include <array>
#include "Test.h"
#include "vla.h"
using namespace pymol::test;
using pymol::vla;
TEST_CASE("VLA Default", "[VLA]")
{
vla<int> myVLA;
REQUIRE(isNullptr(myVLA.data()));
}
TEST_CASE("VLA Alloc And Size", "[VLA]")
{
vla<int> myVLA(5);
REQUIRE(myVLA.size() == 5);
}
TEST_CASE("VLA Default Val", "[VLA]")
{
vla<int> myVLA(5, 0);
REQUIRE(myVLA.size() == 5);
REQUIRE(isArrayZero(myVLA.data(), myVLA.size()));
}
TEST_CASE("VLA Initializer List", "[VLA]")
{
vla<int> myVLA{1, 2, 3, 4, 5};
const std::array<int, 5> myArr{1, 2, 3, 4, 5};
REQUIRE(isArrayEqual(myVLA.data(), myArr.data(), myVLA.size()));
}
TEST_CASE("VLA Special Member Functions", "[VLA]")
{
REQUIRE(hasAllSpecialMemberFunctions<vla<int>>());
}
TEST_CASE("VLA Copy Construct", "[VLA]")
{
vla<int> 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<int> myVLA{1, 2, 3, 4, 5};
vla<int> 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<int> myVLA{1, 2, 3, 4, 5};
auto copyVLA = std::move(myVLA);
REQUIRE(copyVLA.size() == 5);
const std::array<int, 5> myArr{1, 2, 3, 4, 5};
REQUIRE(isArrayEqual(copyVLA.data(), myArr.data(), copyVLA.size()));
}
TEST_CASE("VLA Move Assign", "[VLA]")
{
vla<int> myVLA{1, 2, 3, 4, 5};
vla<int> copyVLA(3);
copyVLA = std::move(myVLA);
REQUIRE(copyVLA.size() == 5);
const std::array<int, 5> myArr{1, 2, 3, 4, 5};
REQUIRE(isArrayEqual(copyVLA.data(), myArr.data(), copyVLA.size()));
}
TEST_CASE("Vector_Resize", "[VLA]")
{
vla<int> myVLA(5);
REQUIRE(myVLA.size() == 5);
myVLA.resize(3);
REQUIRE(myVLA.size() == 3);
vla<int> myVLA2;
myVLA2.resize(3);
REQUIRE(myVLA2.size() == 3);
}
TEST_CASE("FreeP", "[VLA]")
{
vla<int> myVLA(10);
REQUIRE(myVLA.size() == 10);
myVLA.freeP();
REQUIRE(myVLA.size() == 0);
REQUIRE(isNullptr(myVLA.data()));
}
TEST_CASE("Bool Cast", "[VLA]")
{
vla<int> myVLA;
REQUIRE(myVLA == nullptr);
vla<int> myVLA2(2);
REQUIRE(myVLA2 != nullptr);
myVLA2.freeP();
REQUIRE(myVLA2 == nullptr);
}
TEST_CASE("Index", "[VLA]")
{
vla<int> myVLA{1, 2, 3, 4, 5};
REQUIRE(myVLA[2] == 3);
}
TEST_CASE("Range Based For", "[VLA]")
{
vla<int> myVLA{0, 1, 2, 3, 4};
std::size_t i{0u};
for (auto& m : myVLA) {
REQUIRE(myVLA[i] == i);
i++;
}
i = 0;
for (const auto& m : myVLA) {
REQUIRE(myVLA[i] == i);
i++;
}
}
TEST_CASE("To_StdVector", "[VLA]")
{
vla<int> myVLA{1, 2, 3, 4, 5};
auto myStdVec = myVLA.toStdVector();
REQUIRE(myStdVec.size() == myVLA.size());
REQUIRE(isArrayEqual(myStdVec.data(), myVLA.data(), myStdVec.size()));
}
TEST_CASE("From_StdVector", "[VLA]")
{
std::vector<int> myStdVec{1, 2, 3, 4, 5};
vla<int> myVLA(myStdVec);
REQUIRE(myStdVec.size() == myVLA.size());
REQUIRE(isArrayEqual(myStdVec.data(), myVLA.data(), myStdVec.size()));
}
TEST_CASE("From_VLACalloc", "[VLA]")
{
vla<int> myVLA(VLACalloc(int, 5));
REQUIRE(myVLA.size() == 5);
REQUIRE(isArrayZero(myVLA.data(), 5));
}
TEST_CASE("Classic_Copy", "[VLA]")
{
vla<int> myVLA(5, 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<int> myVLA(5);
VLACheck2(myVLA, 10);
REQUIRE(myVLA.size() >= 11);
}
TEST_CASE("Classic_Size2", "[VLA]")
{
vla<int> myVLA(5);
VLASize2(myVLA, 10);
REQUIRE(myVLA.size() == 10);
}
TEST_CASE("Classic_Free", "[VLA]")
{
vla<int> myVLA(5);
VLAFreeP(myVLA);
REQUIRE(isNullptr(myVLA.data()));
}
// vi:sw=2:expandtab