source: trunk/test/unit/array.cpp @ 2435

Last change on this file since 2435 was 2435, checked in by sam, 7 years ago

base: add Array::Swap() method and the corresponding unit test.

  • Property svn:keywords set to Id
File size: 4.0 KB
RevLine 
[1294]1//
2// Lol Engine
3//
[2216]4// Copyright: (c) 2010-2013 Sam Hocevar <sam@hocevar.net>
[1294]5//   This program is free software; you can redistribute it and/or
6//   modify it under the terms of the Do What The Fuck You Want To
7//   Public License, Version 2, as published by Sam Hocevar. See
[2183]8//   http://www.wtfpl.net/ for more details.
[1294]9//
10
11#if defined HAVE_CONFIG_H
12#   include "config.h"
13#endif
14
15#include "core.h"
16#include "lol/unit.h"
17
18namespace lol
19{
20
[2230]21struct TrackedObj
22{
23    static int m_ctor, m_dtor;
24
25    TrackedObj() { m_ctor++; }
26    TrackedObj(TrackedObj const &) { m_ctor++; }
27    ~TrackedObj() { m_dtor++; }
28};
29
30int TrackedObj::m_ctor = 0;
31int TrackedObj::m_dtor = 0;
32
[1294]33LOLUNIT_FIXTURE(ArrayTest)
34{
35    void SetUp() {}
36
37    void TearDown() {}
38
[1345]39    LOLUNIT_TEST(ArrayPush)
[1294]40    {
41        Array<int> a;
[1326]42        a.Push(0);
43        a.Push(1);
44        a.Push(2);
45        a.Push(3);
[1294]46
47        LOLUNIT_ASSERT_EQUAL(a[0], 0);
48        LOLUNIT_ASSERT_EQUAL(a[1], 1);
49        LOLUNIT_ASSERT_EQUAL(a[2], 2);
50        LOLUNIT_ASSERT_EQUAL(a[3], 3);
51    }
52
[1345]53    LOLUNIT_TEST(ArrayPushWithShift)
54    {
55        Array<int> a;
56        a << 0 << 1 << 2 << 3;
57
58        LOLUNIT_ASSERT_EQUAL(a[0], 0);
59        LOLUNIT_ASSERT_EQUAL(a[1], 1);
60        LOLUNIT_ASSERT_EQUAL(a[2], 2);
61        LOLUNIT_ASSERT_EQUAL(a[3], 3);
62    }
63
[1294]64    LOLUNIT_TEST(ArrayCopy)
65    {
66        Array<int> a;
[1345]67        a << 0 << 1 << 2 << 3;
[1294]68
69        Array<int> b = a;
70
71        LOLUNIT_ASSERT_EQUAL(b[0], 0);
72        LOLUNIT_ASSERT_EQUAL(b[1], 1);
73        LOLUNIT_ASSERT_EQUAL(b[2], 2);
74        LOLUNIT_ASSERT_EQUAL(b[3], 3);
75    }
76
[1328]77    LOLUNIT_TEST(ArrayRemove)
78    {
79        Array<int> a;
[1345]80        a << 0 << 1 << 2 << 3;
[1328]81        a.Remove(1);
82
83        LOLUNIT_ASSERT_EQUAL(a[0], 0);
84        LOLUNIT_ASSERT_EQUAL(a[1], 2);
85        LOLUNIT_ASSERT_EQUAL(a[2], 3);
86    }
87
[1294]88    LOLUNIT_TEST(EightElements)
89    {
90        Array<int, long, float, double, unsigned, char, bool, void *> a;
[1326]91        a.Push(1, 2, 3.f, 4.0, 5, 'a', true, 0);
[1294]92
93        LOLUNIT_ASSERT_EQUAL(a[0].m1, 1);
94        LOLUNIT_ASSERT_EQUAL(a[0].m2, 2);
95        LOLUNIT_ASSERT_EQUAL(a[0].m3, 3.f);
96        LOLUNIT_ASSERT_EQUAL(a[0].m4, 4.0);
97        LOLUNIT_ASSERT_EQUAL(a[0].m5, 5);
98        LOLUNIT_ASSERT_EQUAL(a[0].m6, 'a');
99        LOLUNIT_ASSERT_EQUAL(a[0].m7, true);
100        LOLUNIT_ASSERT_EQUAL(a[0].m8, 0);
101    }
[1345]102
[2435]103    LOLUNIT_TEST(ArraySwap)
104    {
105        Array<int, int> a;
106        a.Push(10, 20);
107        a.Push(30, 40);
108        a.Swap(0, 1);
109
110        LOLUNIT_ASSERT_EQUAL(30, a[0].m1);
111        LOLUNIT_ASSERT_EQUAL(40, a[0].m2);
112        LOLUNIT_ASSERT_EQUAL(10, a[1].m1);
113        LOLUNIT_ASSERT_EQUAL(20, a[1].m2);
114    }
115
[1345]116    LOLUNIT_TEST(ArrayConcat)
117    {
118        Array<int> a, b;
119        a << 0 << 1;
120        b << 2 << 3;
121
122        Array<int> c = a + b;
123        LOLUNIT_ASSERT_EQUAL(c[0], 0);
124        LOLUNIT_ASSERT_EQUAL(c[1], 1);
125        LOLUNIT_ASSERT_EQUAL(c[2], 2);
126        LOLUNIT_ASSERT_EQUAL(c[3], 3);
127    }
128
129    LOLUNIT_TEST(ArrayAppend)
130    {
131        Array<int> a, b;
132        a << 0 << 1;
133        b << 2 << 3;
134
135        a += b;
136        LOLUNIT_ASSERT_EQUAL(a[0], 0);
137        LOLUNIT_ASSERT_EQUAL(a[1], 1);
138        LOLUNIT_ASSERT_EQUAL(a[2], 2);
139        LOLUNIT_ASSERT_EQUAL(a[3], 3);
140
141        b += b;
142        LOLUNIT_ASSERT_EQUAL(b[0], 2);
143        LOLUNIT_ASSERT_EQUAL(b[1], 3);
144        LOLUNIT_ASSERT_EQUAL(b[2], 2);
145        LOLUNIT_ASSERT_EQUAL(b[3], 3);
146    }
[2230]147
148    LOLUNIT_TEST(ElementCtorDtor)
149    {
150        /* Ensure array elements get created and destroyed the proper
151         * number of times. */
152        TrackedObj::m_ctor = 0;
153        TrackedObj::m_dtor = 0;
154        {
155            Array<TrackedObj> a;
156
157            a.Push(TrackedObj());
158        }
159        LOLUNIT_ASSERT_EQUAL(TrackedObj::m_ctor, TrackedObj::m_dtor);
160
161        TrackedObj::m_ctor = 0;
162        TrackedObj::m_dtor = 0;
163        {
164            Array<TrackedObj> a;
165
166            a.Resize(2);
167            a.Resize(4);
168            a.Resize(1);
169        }
170        LOLUNIT_ASSERT_EQUAL(TrackedObj::m_ctor, TrackedObj::m_dtor);
171    }
[1294]172};
173
174} /* namespace lol */
175
Note: See TracBrowser for help on using the repository browser.