]> granicus.if.org Git - icinga2/blob - test/base-array.cpp
33e54e8f142526ac9089652fb47529840d5b5707
[icinga2] / test / base-array.cpp
1 /* Icinga 2 | (c) 2012 Icinga GmbH | GPLv2+ */
2
3 #include "base/array.hpp"
4 #include "base/objectlock.hpp"
5 #include "base/json.hpp"
6 #include <BoostTestTargetConfig.h>
7
8 using namespace icinga;
9
10 BOOST_AUTO_TEST_SUITE(base_array)
11
12 BOOST_AUTO_TEST_CASE(construct)
13 {
14         Array::Ptr array = new Array();
15         BOOST_CHECK(array);
16         BOOST_CHECK(array->GetLength() == 0);
17 }
18
19 BOOST_AUTO_TEST_CASE(getset)
20 {
21         Array::Ptr array = new Array();
22         array->Add(7);
23         array->Add(2);
24         array->Add(5);
25         BOOST_CHECK(array->GetLength() == 3);
26         BOOST_CHECK(array->Get(0) == 7);
27         BOOST_CHECK(array->Get(1) == 2);
28         BOOST_CHECK(array->Get(2) == 5);
29
30         array->Set(1, 9);
31         BOOST_CHECK(array->Get(1) == 9);
32
33         array->Remove(1);
34         BOOST_CHECK(array->GetLength() == 2);
35         BOOST_CHECK(array->Get(1) == 5);
36 }
37
38 BOOST_AUTO_TEST_CASE(resize)
39 {
40         Array::Ptr array = new Array();
41         array->Resize(2);
42         BOOST_CHECK(array->GetLength() == 2);
43         BOOST_CHECK(array->Get(0) == Empty);
44         BOOST_CHECK(array->Get(1) == Empty);
45 }
46
47 BOOST_AUTO_TEST_CASE(insert)
48 {
49         Array::Ptr array = new Array();
50
51         array->Insert(0, 11);
52         array->Insert(1, 22);
53         BOOST_CHECK(array->GetLength() == 2);
54         BOOST_CHECK(array->Get(1) == 22);
55
56         array->Insert(0, 33);
57         BOOST_CHECK(array->GetLength() == 3);
58         BOOST_CHECK(array->Get(0) == 33);
59         BOOST_CHECK(array->Get(1) == 11);
60
61         array->Insert(1, 44);
62         BOOST_CHECK(array->GetLength() == 4);
63         BOOST_CHECK(array->Get(0) == 33);
64         BOOST_CHECK(array->Get(1) == 44);
65         BOOST_CHECK(array->Get(2) == 11);
66 }
67
68 BOOST_AUTO_TEST_CASE(remove)
69 {
70         Array::Ptr array = new Array();
71         array->Add(7);
72         array->Add(2);
73         array->Add(5);
74
75         {
76                 ObjectLock olock(array);
77                 auto it = array->Begin();
78                 array->Remove(it);
79         }
80
81         BOOST_CHECK(array->GetLength() == 2);
82         BOOST_CHECK(array->Get(0) == 2);
83
84         array->Clear();
85         BOOST_CHECK(array->GetLength() == 0);
86 }
87
88 BOOST_AUTO_TEST_CASE(unique)
89 {
90         Array::Ptr array = new Array();
91         array->Add("group1");
92         array->Add("group2");
93         array->Add("group1");
94         array->Add("group2");
95
96         Array::Ptr result;
97
98         {
99                 ObjectLock olock(array);
100                 result = array->Unique();
101         }
102
103         BOOST_CHECK(result->GetLength() == 2);
104         result->Sort();
105
106         BOOST_CHECK(result->Get(0) == "group1");
107         BOOST_CHECK(result->Get(1) == "group2");
108 }
109 BOOST_AUTO_TEST_CASE(foreach)
110 {
111         Array::Ptr array = new Array();
112         array->Add(7);
113         array->Add(2);
114         array->Add(5);
115
116         ObjectLock olock(array);
117
118         int n = 0;
119
120         for (const Value& item : array) {
121                 BOOST_CHECK(n != 0 || item == 7);
122                 BOOST_CHECK(n != 1 || item == 2);
123                 BOOST_CHECK(n != 2 || item == 5);
124
125                 n++;
126         }
127 }
128
129 BOOST_AUTO_TEST_CASE(clone)
130 {
131         Array::Ptr array = new Array();
132         array->Add(7);
133         array->Add(2);
134         array->Add(5);
135
136         Array::Ptr clone = array->ShallowClone();
137
138         BOOST_CHECK(clone->GetLength() == 3);
139         BOOST_CHECK(clone->Get(0) == 7);
140         BOOST_CHECK(clone->Get(1) == 2);
141         BOOST_CHECK(clone->Get(2) == 5);
142 }
143
144 BOOST_AUTO_TEST_CASE(json)
145 {
146         Array::Ptr array = new Array();
147         array->Add(7);
148         array->Add(2);
149         array->Add(5);
150
151         String json = JsonEncode(array);
152         BOOST_CHECK(json.GetLength() > 0);
153
154         Array::Ptr deserialized = JsonDecode(json);
155         BOOST_CHECK(deserialized);
156         BOOST_CHECK(deserialized->GetLength() == 3);
157         BOOST_CHECK(deserialized->Get(0) == 7);
158         BOOST_CHECK(deserialized->Get(1) == 2);
159         BOOST_CHECK(deserialized->Get(2) == 5);
160 }
161
162 BOOST_AUTO_TEST_SUITE_END()