@@ -66,6 +66,36 @@ TEST_CASE("[Array] size(), clear(), and is_empty()") {
6666 CHECK (arr.size () == 0 );
6767}
6868
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+
6999TEST_CASE (" [Array] Assignment and comparison operators" ) {
70100 Array arr1;
71101 Array arr2;
@@ -83,6 +113,16 @@ TEST_CASE("[Array] Assignment and comparison operators") {
83113 CHECK (arr3 == arr2);
84114}
85115
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+
86126TEST_CASE (" [Array] append_array()" ) {
87127 Array arr1;
88128 Array arr2;
@@ -160,19 +200,85 @@ TEST_CASE("[Array] remove_at()") {
160200 CHECK (arr.size () == 0 );
161201}
162202
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 );
166211}
167212
168- TEST_CASE (" [Array] sort()" ) {
213+ TEST_CASE (" [Array] sort() and bsearch() " ) {
169214 Array arr = { 3 , 4 , 2 , 1 };
170215 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 );
176282}
177283
178284TEST_CASE (" [Array] push_front(), pop_front(), pop_back()" ) {
@@ -626,6 +732,17 @@ TEST_CASE("[Array] Typed copying") {
626732 a6.clear ();
627733}
628734
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+
629746static bool _find_custom_callable (const Variant &p_val) {
630747 return (int )p_val % 2 == 0 ;
631748}
@@ -644,4 +761,29 @@ TEST_CASE("[Array] Test rfind_custom") {
644761 CHECK_EQ (index, 4 );
645762}
646763
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+
647789} // namespace TestArray
0 commit comments