1 module tests.vector;
2 
3 import bubel.ecs.simple_vector;
4 import bubel.ecs.vector;
5 
6 version(GNU)
7 {
8 	pragma(inline, true) T[n] staticArray(T, size_t n)(auto ref T[n] a)
9 	{
10 		return a;
11 	}
12 }
13 else import std.array : staticArray;
14 
15 @("simple-vector")
16 unittest
17 {
18     SimpleVector vector;
19     vector.add(cast(ubyte[]) "a");
20     vector.add(cast(ubyte[]) "bsdf");
21     assert(vector[0 .. 5] == cast(ubyte[]) "absdf");
22     assert(vector[4] == 'f');
23     assert(vector[] == cast(ubyte[]) "absdf");
24     assert(vector[$ - 1] == 'f');
25 
26     vector.clear();
27     assert(vector.length == 0);
28 
29     ubyte[1025] array;
30     foreach(i;0..cast(uint)array.length)array[i] = cast(ubyte)i;
31     vector.add(array);
32     assert(vector.length == 1025);
33     assert(vector[] == array[]);
34 
35     SimpleVector vector2;
36     vector2.clear();
37     vector2.add(array[0..1023]);
38     vector2.add('a');
39     vector2.add('b');
40     assert(vector2.length == 1025);
41     assert(vector2[0..1023] == array[0..1023]);
42     assert(vector2[1023] == 'a');
43     assert(vector2[1024] == 'b');
44 }
45 
46 @("Vector")
47 unittest
48 {
49     struct G
50     {
51         int a;
52     }
53 
54     Vector!G vector;
55     assert(vector.empty());
56     vector.add(G(1));
57     assert(!vector.empty());
58     vector.clear();
59     assert(vector.empty());
60     vector.add(G(1));
61     assert(!vector.empty());
62     vector.reset();
63     assert(vector.empty());
64 
65     vector.add(G(1));
66     vector.add([G(2),G(5)].staticArray);
67     assert(vector.length == 3);
68     assert(vector.capacity == 1);
69     
70     Vector!G vector2;
71     vector2.add([G(1),G(2),G(5)].staticArray);
72     assert(vector == vector2);
73     vector2.remove(1);
74     assert(vector != vector2);
75     assert(vector2.length == 2);
76     assert(vector2[1] == G(5));
77     vector2.add(G(2),1);
78     assert(vector == vector2);
79 }