@@ -66,6 +66,36 @@ TEST_CASE("[Array] size(), clear(), and is_empty()") {
66
66
CHECK (arr.size () == 0 );
67
67
}
68
68
69
+ TEST_CASE (" [Array] fill()" ) {
70
+ Array arr;
71
+ arr.resize (5 );
72
+ arr.fill (7 );
73
+ Array expected = { 7 , 7 , 7 , 7 , 7 };
74
+ CHECK_EQ (arr, expected);
75
+
76
+ Array empty;
77
+ empty.fill (7 );
78
+ Array empty_expected;
79
+ CHECK_EQ (empty, empty_expected);
80
+ }
81
+
82
+ TEST_CASE (" [Array] reverse()" ) {
83
+ Array odd_sized = { 1 , 2 , 3 };
84
+ odd_sized.reverse ();
85
+ Array odd_sized_expected = { 3 , 2 , 1 };
86
+ CHECK_EQ (odd_sized, odd_sized_expected);
87
+
88
+ Array even_sized = { " a" , " b" , " c" , " d" };
89
+ even_sized.reverse ();
90
+ Array even_sized_expected = { " d" , " c" , " b" , " a" };
91
+ CHECK_EQ (even_sized, even_sized_expected);
92
+
93
+ Array empty;
94
+ empty.reverse ();
95
+ Array empty_expected;
96
+ CHECK_EQ (empty, empty_expected);
97
+ }
98
+
69
99
TEST_CASE (" [Array] Assignment and comparison operators" ) {
70
100
Array arr1;
71
101
Array arr2;
@@ -83,6 +113,16 @@ TEST_CASE("[Array] Assignment and comparison operators") {
83
113
CHECK (arr3 == arr2);
84
114
}
85
115
116
+ TEST_CASE (" [Array] append()" ) {
117
+ Array arr;
118
+ arr.append (1 );
119
+ arr.append (2 );
120
+ arr.append (3 );
121
+ arr.append (" test" );
122
+ Array expected = { 1 , 2 , 3 , " test" };
123
+ CHECK_EQ (arr, expected);
124
+ }
125
+
86
126
TEST_CASE (" [Array] append_array()" ) {
87
127
Array arr1;
88
128
Array arr2;
@@ -160,19 +200,85 @@ TEST_CASE("[Array] remove_at()") {
160
200
CHECK (arr.size () == 0 );
161
201
}
162
202
163
- TEST_CASE (" [Array] get()" ) {
164
- Array arr = { 1 };
165
- CHECK (int (arr.get (0 )) == 1 );
203
+ TEST_CASE (" [Array] get() and set()" ) {
204
+ Array arr = { 1 , 2 , 3 };
205
+ CHECK_EQ (int (arr.get (0 )), 1 );
206
+ CHECK_EQ (int (arr.get (1 )), 2 );
207
+ CHECK_EQ (int (arr.get (2 )), 3 );
208
+
209
+ arr.set (1 , 5 );
210
+ CHECK_EQ (int (arr.get (1 )), 5 );
166
211
}
167
212
168
- TEST_CASE (" [Array] sort()" ) {
213
+ TEST_CASE (" [Array] sort() and bsearch() " ) {
169
214
Array arr = { 3 , 4 , 2 , 1 };
170
215
arr.sort ();
171
- int val = 1 ;
172
- for (int i = 0 ; i < arr.size (); i++) {
173
- CHECK (int (arr[i]) == val);
174
- val++;
175
- }
216
+ Array expected = { 1 , 2 , 3 , 4 };
217
+ CHECK_EQ (arr, expected);
218
+
219
+ CHECK_EQ (arr.bsearch (1 ), 0 );
220
+ CHECK_EQ (arr.bsearch (3 ), 2 );
221
+ CHECK_EQ (arr.bsearch (-100 ), 0 );
222
+ CHECK_EQ (arr.bsearch (100 ), 4 );
223
+ }
224
+
225
+ static bool _order_descending (int p_a, int p_b) {
226
+ return p_b < p_a;
227
+ }
228
+
229
+ TEST_CASE (" [Array] sort_custom() and bsearch_custom()" ) {
230
+ Array arr = { 3 , 4 , 2 , 1 };
231
+ arr.sort_custom (callable_mp_static (_order_descending));
232
+ Array expected = { 4 , 3 , 2 , 1 };
233
+ CHECK_EQ (arr, expected);
234
+
235
+ CHECK_EQ (arr.bsearch_custom (1 , callable_mp_static (_order_descending)), 3 );
236
+ CHECK_EQ (arr.bsearch_custom (4 , callable_mp_static (_order_descending)), 0 );
237
+ CHECK_EQ (arr.bsearch_custom (100 , callable_mp_static (_order_descending)), 0 );
238
+ CHECK_EQ (arr.bsearch_custom (-100 , callable_mp_static (_order_descending)), 4 );
239
+ }
240
+
241
+ static bool _is_even (int p_num) {
242
+ return p_num % 2 == 0 ;
243
+ }
244
+
245
+ static bool _is_odd (int p_num) {
246
+ return p_num % 2 == 1 ;
247
+ }
248
+
249
+ TEST_CASE (" [Array] filter(), any(), all()" ) {
250
+ Array nums = { 1 , 2 , 3 , 4 , 5 , 6 , 7 };
251
+ CHECK (nums.any (callable_mp_static (_is_odd)));
252
+ CHECK (nums.any (callable_mp_static (_is_even)));
253
+ CHECK (!nums.all (callable_mp_static (_is_odd)));
254
+ CHECK (!nums.all (callable_mp_static (_is_even)));
255
+
256
+ Array odd = nums.filter (callable_mp_static (_is_odd));
257
+ Array odd_expected = { 1 , 3 , 5 , 7 };
258
+ CHECK_EQ (odd, odd_expected);
259
+
260
+ Array even = nums.filter (callable_mp_static (_is_even));
261
+ Array even_expected = { 2 , 4 , 6 };
262
+ CHECK_EQ (even, even_expected);
263
+
264
+ CHECK (odd.all (callable_mp_static (_is_odd)));
265
+ CHECK (odd.any (callable_mp_static (_is_odd)));
266
+ CHECK (!odd.all (callable_mp_static (_is_even)));
267
+ CHECK (!odd.any (callable_mp_static (_is_even)));
268
+ }
269
+
270
+ static int _add (int p_a, int p_b) {
271
+ return p_a + p_b;
272
+ }
273
+
274
+ TEST_CASE (" [Array] map() and reduce()" ) {
275
+ Array array = { 1 , 2 , 3 , 4 , 5 };
276
+ Array mapped = array.map (callable_mp_static (_add).bind (5 ));
277
+ Array mapped_expected = { 6 , 7 , 8 , 9 , 10 };
278
+ CHECK_EQ (mapped, mapped_expected);
279
+
280
+ Variant sum = 0 ;
281
+ CHECK_EQ (int (array.reduce (callable_mp_static (_add), sum)), 15 );
176
282
}
177
283
178
284
TEST_CASE (" [Array] push_front(), pop_front(), pop_back()" ) {
@@ -626,6 +732,17 @@ TEST_CASE("[Array] Typed copying") {
626
732
a6.clear ();
627
733
}
628
734
735
+ TEST_CASE (" [Array] find() and rfind()" ) {
736
+ Array array = { " a" , " b" , " c" , " a" , " b" , " c" };
737
+
738
+ CHECK_EQ (array.find (" a" ), 0 );
739
+ CHECK_EQ (array.find (" c" ), 2 );
740
+ CHECK_EQ (array.find (" a" , 1 ), 3 );
741
+
742
+ CHECK_EQ (array.rfind (" b" ), 4 );
743
+ CHECK_EQ (array.rfind (" c" , -2 ), 2 );
744
+ }
745
+
629
746
static bool _find_custom_callable (const Variant &p_val) {
630
747
return (int )p_val % 2 == 0 ;
631
748
}
@@ -644,4 +761,29 @@ TEST_CASE("[Array] Test rfind_custom") {
644
761
CHECK_EQ (index, 4 );
645
762
}
646
763
764
+ TEST_CASE (" [Array] Test typed arrays" ) {
765
+ Array arr1;
766
+ CHECK_FALSE (arr1.is_typed ());
767
+
768
+ arr1.set_typed (Variant::FLOAT, StringName (), Variant ());
769
+ CHECK (arr1.is_typed ());
770
+ CHECK_EQ (arr1.get_typed_builtin (), Variant::FLOAT);
771
+
772
+ arr1.push_back (1 );
773
+ CHECK_EQ (arr1.size (), 1 );
774
+
775
+ ERR_PRINT_OFF;
776
+ arr1.push_back (" test wrong type" );
777
+ CHECK_EQ (arr1.size (), 1 );
778
+ ERR_PRINT_ON;
779
+
780
+ Array arr2;
781
+ arr2.set_typed (Variant::INT, StringName (), Variant ());
782
+ CHECK_FALSE (arr1.is_same_typed (arr2));
783
+
784
+ Array arr3;
785
+ arr3.set_typed (Variant::OBJECT, " Node" , Variant ());
786
+ CHECK_EQ (arr3.get_typed_class_name (), " Node" );
787
+ }
788
+
647
789
} // namespace TestArray
0 commit comments