summaryrefslogtreecommitdiff
path: root/src/vec_tests.cpp
blob: d3a4b6f2974f5bd316aa72e0e891d8c55c31cf01 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
/* SPDX-License-Identifier: Unlicense
 */

#include "vec.h"
#include "doctest/doctest.h"

TEST_CASE("Push, access and pop trivial data") {
    Vec<int> v{};
    CHECK_EQ(v.Size(), 0);
    v.PushBack(10);
    v.PushBack(11);
    v.PushBack(12);
    CHECK_EQ(v.Size(), 3);
    CHECK_EQ(10, v[0]);
    CHECK_EQ(11, v[1]);
    CHECK_EQ(12, v[2]);
    CHECK_EQ(12, v.PopBack());
    CHECK_EQ(11, v.PopBack());
    CHECK_EQ(10, v.PopBack());
    CHECK_EQ(v.Size(), 0);
}

TEST_CASE("Copy constructor should copy") {
    Vec<int> v{};
    v.PushBack(10);
    Vec<int> v2(v);
    CHECK_EQ(v2.Size(), 1);
    CHECK_EQ(10, v[0]);
    CHECK_EQ(v.Size(), 1);
    CHECK_EQ(10, v[0]);
    CHECK_EQ(v, v2);
}

TEST_CASE("Push, access and pop vec of vecs") {
    Vec<int> vi{};
    vi.PushBack(10);
    Vec<Vec<int>> vv{};
    CHECK_EQ(vv.Size(), 0);
    vv.PushBack(vi);
    vv.PushBack(vi);
    CHECK_EQ(vv.Size(), 2);
    CHECK_EQ(vi, vv[1]);
    CHECK_EQ(vi, vv[0]);
    Vec<Vec<int>> vv2{vv};
    CHECK_EQ(vi.Size(), vv[0].Size());
    CHECK_EQ(vi, vv[0]);
    const auto popvi = vv.PopBack();
    CHECK_EQ(vi.Size(), popvi.Size());
    CHECK_EQ(vv2.Size(), 2);
}