1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package org.apache.commons.lang3;
19
20 import static org.junit.jupiter.api.Assertions.assertEquals;
21
22 import java.util.stream.Stream;
23
24 import org.junit.jupiter.api.Test;
25 import org.junit.jupiter.params.ParameterizedTest;
26 import org.junit.jupiter.params.provider.Arguments;
27 import org.junit.jupiter.params.provider.MethodSource;
28
29 class ArrayUtilsGetDimensions {
30
31
32 static class Node {
33
34 String name;
35
36 Node next;
37
38 Node(final String name) {
39 this.name = name;
40 }
41 }
42
43 private static Stream<Arguments> provideArraysWithExpectedDimensions() {
44 return Stream.of(Arguments.of(new int[] { 1, 2, 3 }, 1), Arguments.of(new int[][] { { 1, 2 }, { 3, 4 } }, 2),
45 Arguments.of(new int[][][] { { { 1 } } }, 3), Arguments.of(new String[] { "a", "b" }, 1), Arguments.of(new String[][] { { "a" }, { "b" } }, 2),
46 Arguments.of(new Object[5], 1), Arguments.of(new boolean[2][3], 2), Arguments.of(new char[1][2][3][4], 4));
47 }
48
49 @Test
50 void testArraysOfArrays() {
51 final Object[] arrayOfArrays = { new int[] { 1, 2 }, new String[] { "a", "b" } };
52 assertEquals(1, ArrayUtils.getDimensions(arrayOfArrays));
53 }
54
55 @Test
56 void testArraysWithCyclicObjects() {
57 final Node node1 = new Node("A");
58 final Node node2 = new Node("B");
59 node1.next = node2;
60 node2.next = node1;
61 final Node[] arr = { node1, node2 };
62 assertEquals(1, ArrayUtils.getDimensions(arr));
63 final Node[][] arr2D = { { node1, node2 }, { node2, node1 } };
64 assertEquals(2, ArrayUtils.getDimensions(arr2D));
65 }
66
67 @Test
68 void testArraysWithNullElements() {
69 final String[] arrWithNull = { null, "test", null };
70 assertEquals(1, ArrayUtils.getDimensions(arrWithNull));
71 final String[][] arr2DWithNull = { { null, "a" }, null, { "b" } };
72 assertEquals(2, ArrayUtils.getDimensions(arr2DWithNull));
73 }
74
75 @Test
76 void testEmptyOneDimensionalArrays() {
77 assertEquals(1, ArrayUtils.getDimensions(new int[0]));
78 assertEquals(1, ArrayUtils.getDimensions(new String[0]));
79 }
80
81 @Test
82 void testHighDimensionalArrays() {
83 assertEquals(4, ArrayUtils.getDimensions(new int[1][2][3][4]));
84 assertEquals(5, ArrayUtils.getDimensions(new byte[1][1][1][1][1]));
85 assertEquals(6, ArrayUtils.getDimensions(new String[2][2][2][2][2][2]));
86 }
87
88 @Test
89 void testInitializedArrays() {
90 final int[] arr1D = { 1, 2, 3, 4, 5 };
91 assertEquals(1, ArrayUtils.getDimensions(arr1D));
92 final int[][] arr2D = { { 1, 2, 3 }, { 4, 5, 6 } };
93 assertEquals(2, ArrayUtils.getDimensions(arr2D));
94 final int[][][] arr3D = { { { 1, 2 }, { 3, 4 } }, { { 5, 6 }, { 7, 8 } } };
95 assertEquals(3, ArrayUtils.getDimensions(arr3D));
96 }
97
98 @Test
99 void testJaggedArrays() {
100 final int[][] jagged = { { 1, 2 }, { 3, 4, 5 }, { 6 } };
101 assertEquals(2, ArrayUtils.getDimensions(jagged));
102 final String[][] jaggedStrings = { { "a" }, { "b", "c", "d" } };
103 assertEquals(2, ArrayUtils.getDimensions(jaggedStrings));
104 }
105
106 @Test
107 void testNonArrayObject() {
108 assertEquals(0, ArrayUtils.getDimensions("Not an array"));
109 assertEquals(0, ArrayUtils.getDimensions(42));
110 assertEquals(0, ArrayUtils.getDimensions(new Object()));
111 assertEquals(0, ArrayUtils.getDimensions(3.14));
112 }
113
114 @Test
115 void testNullArray() {
116 assertEquals(0, ArrayUtils.getDimensions(null));
117 }
118
119 @Test
120 void testOneDimensionalObjectArrays() {
121 assertEquals(1, ArrayUtils.getDimensions(new String[5]));
122 assertEquals(1, ArrayUtils.getDimensions(new Object[10]));
123 assertEquals(1, ArrayUtils.getDimensions(new Integer[3]));
124 }
125
126 @Test
127 void testOneDimensionalPrimitiveArrays() {
128 assertEquals(1, ArrayUtils.getDimensions(new int[5]));
129 assertEquals(1, ArrayUtils.getDimensions(new byte[10]));
130 assertEquals(1, ArrayUtils.getDimensions(new short[3]));
131 assertEquals(1, ArrayUtils.getDimensions(new long[7]));
132 assertEquals(1, ArrayUtils.getDimensions(new float[4]));
133 assertEquals(1, ArrayUtils.getDimensions(new double[6]));
134 assertEquals(1, ArrayUtils.getDimensions(new boolean[2]));
135 assertEquals(1, ArrayUtils.getDimensions(new char[8]));
136 }
137
138 @Test
139 void testThreeDimensionalArrays() {
140 assertEquals(3, ArrayUtils.getDimensions(new int[2][3][4]));
141 assertEquals(3, ArrayUtils.getDimensions(new String[1][2][3]));
142 assertEquals(3, ArrayUtils.getDimensions(new Object[5][5][5]));
143 }
144
145 @Test
146 void testTwoDimensionalArrays() {
147 assertEquals(2, ArrayUtils.getDimensions(new int[3][4]));
148 assertEquals(2, ArrayUtils.getDimensions(new String[2][5]));
149 assertEquals(2, ArrayUtils.getDimensions(new double[1][1]));
150 }
151
152 @ParameterizedTest
153 @MethodSource("provideArraysWithExpectedDimensions")
154 void testVariousArrayTypes(final Object array, final int expectedDimensions) {
155 assertEquals(expectedDimensions, ArrayUtils.getDimensions(array));
156 }
157 }