1f0051698d4275162504611cd7c33df0eee45cdfemaslovalex/** 2f0051698d4275162504611cd7c33df0eee45cdfemaslovalex * Copyright (c) 2008, http://www.snakeyaml.org 3f0051698d4275162504611cd7c33df0eee45cdfemaslovalex * 4f0051698d4275162504611cd7c33df0eee45cdfemaslovalex * Licensed under the Apache License, Version 2.0 (the "License"); 5f0051698d4275162504611cd7c33df0eee45cdfemaslovalex * you may not use this file except in compliance with the License. 6f0051698d4275162504611cd7c33df0eee45cdfemaslovalex * You may obtain a copy of the License at 7f0051698d4275162504611cd7c33df0eee45cdfemaslovalex * 8f0051698d4275162504611cd7c33df0eee45cdfemaslovalex * http://www.apache.org/licenses/LICENSE-2.0 9f0051698d4275162504611cd7c33df0eee45cdfemaslovalex * 10f0051698d4275162504611cd7c33df0eee45cdfemaslovalex * Unless required by applicable law or agreed to in writing, software 11f0051698d4275162504611cd7c33df0eee45cdfemaslovalex * distributed under the License is distributed on an "AS IS" BASIS, 12f0051698d4275162504611cd7c33df0eee45cdfemaslovalex * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13f0051698d4275162504611cd7c33df0eee45cdfemaslovalex * See the License for the specific language governing permissions and 14f0051698d4275162504611cd7c33df0eee45cdfemaslovalex * limitations under the License. 15f0051698d4275162504611cd7c33df0eee45cdfemaslovalex */ 16f0051698d4275162504611cd7c33df0eee45cdfemaslovalexpackage org.yaml.snakeyaml.array; 17f0051698d4275162504611cd7c33df0eee45cdfemaslovalex 18f0051698d4275162504611cd7c33df0eee45cdfemaslovaleximport java.util.Arrays; 19f0051698d4275162504611cd7c33df0eee45cdfemaslovaleximport java.util.List; 20f0051698d4275162504611cd7c33df0eee45cdfemaslovalex 21f0051698d4275162504611cd7c33df0eee45cdfemaslovaleximport junit.framework.TestCase; 22f0051698d4275162504611cd7c33df0eee45cdfemaslovalex 23f0051698d4275162504611cd7c33df0eee45cdfemaslovaleximport org.junit.Assert; 24f0051698d4275162504611cd7c33df0eee45cdfemaslovaleximport org.yaml.snakeyaml.Yaml; 25f0051698d4275162504611cd7c33df0eee45cdfemaslovaleximport org.yaml.snakeyaml.constructor.ConstructorException; 26f0051698d4275162504611cd7c33df0eee45cdfemaslovaleximport org.yaml.snakeyaml.error.YAMLException; 27f0051698d4275162504611cd7c33df0eee45cdfemaslovalex 28f0051698d4275162504611cd7c33df0eee45cdfemaslovalexpublic class PrimitiveArrayTest extends TestCase { 29f0051698d4275162504611cd7c33df0eee45cdfemaslovalex 30f0051698d4275162504611cd7c33df0eee45cdfemaslovalex private final String pkg = "!!org.yaml.snakeyaml.array"; 31f0051698d4275162504611cd7c33df0eee45cdfemaslovalex 32f0051698d4275162504611cd7c33df0eee45cdfemaslovalex private final byte[] bytes = new byte[] { 1, 2, 3 }; 33f0051698d4275162504611cd7c33df0eee45cdfemaslovalex private final short[] shorts = new short[] { 300, 301, 302 }; 34f0051698d4275162504611cd7c33df0eee45cdfemaslovalex private final int[] ints = new int[] { 40000, 40001, 40002 }; 35f0051698d4275162504611cd7c33df0eee45cdfemaslovalex private final long[] longs = new long[] { 5000000000L, 5000000001L }; 36f0051698d4275162504611cd7c33df0eee45cdfemaslovalex private final float[] floats = new float[] { 0.1f, 3.1415f }; 37f0051698d4275162504611cd7c33df0eee45cdfemaslovalex private final double[] doubles = new double[] { 50.0001, 2150.0002 }; 38f0051698d4275162504611cd7c33df0eee45cdfemaslovalex private final char[] chars = new char[] { 'a', 'b', 'c', 'd', 'e' }; 39f0051698d4275162504611cd7c33df0eee45cdfemaslovalex private final boolean[] bools = new boolean[] { true, false }; 40f0051698d4275162504611cd7c33df0eee45cdfemaslovalex 41f0051698d4275162504611cd7c33df0eee45cdfemaslovalex public void testValidConstructor() { 42f0051698d4275162504611cd7c33df0eee45cdfemaslovalex String testInput = "- " + pkg + ".ByteArr [ " + Arrays.toString(bytes) + " ]\n" + "- " 43f0051698d4275162504611cd7c33df0eee45cdfemaslovalex + pkg + ".ShortArr [ " + Arrays.toString(shorts) + " ]\n" + "- " + pkg 44f0051698d4275162504611cd7c33df0eee45cdfemaslovalex + ".IntArr [ " + Arrays.toString(ints) + " ]\n" + "- " + pkg + ".LongArr [ " 45f0051698d4275162504611cd7c33df0eee45cdfemaslovalex + Arrays.toString(longs) + " ]\n" + "- " + pkg + ".FloatArr [ " 46f0051698d4275162504611cd7c33df0eee45cdfemaslovalex + Arrays.toString(floats) + " ]\n" + "- " + pkg + ".DoubleArr [ " 47f0051698d4275162504611cd7c33df0eee45cdfemaslovalex + Arrays.toString(doubles) + " ]\n" + "- " + pkg + ".CharArr [ " 48f0051698d4275162504611cd7c33df0eee45cdfemaslovalex + Arrays.toString(chars) + " ]\n" + "- " + pkg + ".BooleanArr [ " 49f0051698d4275162504611cd7c33df0eee45cdfemaslovalex + Arrays.toString(bools) + " ]\n"; 50f0051698d4275162504611cd7c33df0eee45cdfemaslovalex 51f0051698d4275162504611cd7c33df0eee45cdfemaslovalex Yaml yaml = new Yaml(); 52f0051698d4275162504611cd7c33df0eee45cdfemaslovalex List<Object> wrappers = (List<Object>) yaml.load(testInput); 53f0051698d4275162504611cd7c33df0eee45cdfemaslovalex 54f0051698d4275162504611cd7c33df0eee45cdfemaslovalex Assert.assertArrayEquals(bytes, ((ByteArr) wrappers.get(0)).getBytes()); 55f0051698d4275162504611cd7c33df0eee45cdfemaslovalex Assert.assertArrayEquals(shorts, ((ShortArr) wrappers.get(1)).getShorts()); 56f0051698d4275162504611cd7c33df0eee45cdfemaslovalex Assert.assertArrayEquals(ints, ((IntArr) wrappers.get(2)).getInts()); 57f0051698d4275162504611cd7c33df0eee45cdfemaslovalex Assert.assertArrayEquals(longs, ((LongArr) wrappers.get(3)).getLongs()); 58f0051698d4275162504611cd7c33df0eee45cdfemaslovalex Assert.assertArrayEquals(floats, ((FloatArr) wrappers.get(4)).getFloats(), 0.001f); 59f0051698d4275162504611cd7c33df0eee45cdfemaslovalex Assert.assertArrayEquals(doubles, ((DoubleArr) wrappers.get(5)).getDoubles(), 0.001); 60f0051698d4275162504611cd7c33df0eee45cdfemaslovalex Assert.assertArrayEquals(chars, ((CharArr) wrappers.get(6)).getChars()); 61f0051698d4275162504611cd7c33df0eee45cdfemaslovalex assertArrayEquals(bools, ((BooleanArr) wrappers.get(7)).getBools()); 62f0051698d4275162504611cd7c33df0eee45cdfemaslovalex } 63f0051698d4275162504611cd7c33df0eee45cdfemaslovalex 64f0051698d4275162504611cd7c33df0eee45cdfemaslovalex /* 65f0051698d4275162504611cd7c33df0eee45cdfemaslovalex * For some reason, every other assertArrayEquals specialization is provided 66f0051698d4275162504611cd7c33df0eee45cdfemaslovalex * by org.junit.Assert, but not this one. 67f0051698d4275162504611cd7c33df0eee45cdfemaslovalex */ 68f0051698d4275162504611cd7c33df0eee45cdfemaslovalex private void assertArrayEquals(boolean[] expected, boolean[] actuals) { 69f0051698d4275162504611cd7c33df0eee45cdfemaslovalex assertEquals("Arrays differ in length", expected.length, actuals.length); 70f0051698d4275162504611cd7c33df0eee45cdfemaslovalex for (int i = 0; i < expected.length; ++i) { 71f0051698d4275162504611cd7c33df0eee45cdfemaslovalex if (expected[i] != actuals[i]) { 72f0051698d4275162504611cd7c33df0eee45cdfemaslovalex fail("Arrays first differ at " + i + "; expected " + expected[i] + " but got " 73f0051698d4275162504611cd7c33df0eee45cdfemaslovalex + actuals[i]); 74f0051698d4275162504611cd7c33df0eee45cdfemaslovalex } 75f0051698d4275162504611cd7c33df0eee45cdfemaslovalex } 76f0051698d4275162504611cd7c33df0eee45cdfemaslovalex } 77f0051698d4275162504611cd7c33df0eee45cdfemaslovalex 78f0051698d4275162504611cd7c33df0eee45cdfemaslovalex private void tryInvalid(String t, Class<?> expectedException) { 79f0051698d4275162504611cd7c33df0eee45cdfemaslovalex Yaml yaml = new Yaml(); 80f0051698d4275162504611cd7c33df0eee45cdfemaslovalex try { 81f0051698d4275162504611cd7c33df0eee45cdfemaslovalex Object loaded = yaml.load(t); 82f0051698d4275162504611cd7c33df0eee45cdfemaslovalex fail("Expected " + expectedException.getCanonicalName() + " but loaded = \"" + loaded 83f0051698d4275162504611cd7c33df0eee45cdfemaslovalex + "\""); 84f0051698d4275162504611cd7c33df0eee45cdfemaslovalex } catch (YAMLException e) { 85f0051698d4275162504611cd7c33df0eee45cdfemaslovalex assertEquals(expectedException, e.getCause().getClass()); 86f0051698d4275162504611cd7c33df0eee45cdfemaslovalex } 87f0051698d4275162504611cd7c33df0eee45cdfemaslovalex } 88f0051698d4275162504611cd7c33df0eee45cdfemaslovalex 89f0051698d4275162504611cd7c33df0eee45cdfemaslovalex public void testInvalidConstructors() { 90f0051698d4275162504611cd7c33df0eee45cdfemaslovalex // Loading a character as any primitive other than 'char' is a 91f0051698d4275162504611cd7c33df0eee45cdfemaslovalex // NumberFormatException 92f0051698d4275162504611cd7c33df0eee45cdfemaslovalex tryInvalid(pkg + ".ByteArr [ [ 'a' ] ]", NumberFormatException.class); 93f0051698d4275162504611cd7c33df0eee45cdfemaslovalex tryInvalid(pkg + ".ShortArr [ [ 'a' ] ]", NumberFormatException.class); 94f0051698d4275162504611cd7c33df0eee45cdfemaslovalex tryInvalid(pkg + ".IntArr [ [ 'a' ] ]", NumberFormatException.class); 95f0051698d4275162504611cd7c33df0eee45cdfemaslovalex tryInvalid(pkg + ".LongArr [ [ 'a' ] ]", NumberFormatException.class); 96f0051698d4275162504611cd7c33df0eee45cdfemaslovalex tryInvalid(pkg + ".FloatArr [ [ 'a' ] ]", NumberFormatException.class); 97f0051698d4275162504611cd7c33df0eee45cdfemaslovalex tryInvalid(pkg + ".DoubleArr [ [ 'a' ] ]", NumberFormatException.class); 98f0051698d4275162504611cd7c33df0eee45cdfemaslovalex 99f0051698d4275162504611cd7c33df0eee45cdfemaslovalex // Exception: because of how boolean construction works, constructing a 100f0051698d4275162504611cd7c33df0eee45cdfemaslovalex // boolean from 'a' 101f0051698d4275162504611cd7c33df0eee45cdfemaslovalex // results in null. 102f0051698d4275162504611cd7c33df0eee45cdfemaslovalex tryInvalid(pkg + ".BooleanArr [ [ 'a' ] ]", NullPointerException.class); 103f0051698d4275162504611cd7c33df0eee45cdfemaslovalex 104f0051698d4275162504611cd7c33df0eee45cdfemaslovalex // Loading a floating-point number as a character is a YAMLException 105f0051698d4275162504611cd7c33df0eee45cdfemaslovalex tryInvalid(pkg + ".CharArr [ [ 1.2 ] ]", YAMLException.class); 106f0051698d4275162504611cd7c33df0eee45cdfemaslovalex 107f0051698d4275162504611cd7c33df0eee45cdfemaslovalex // Loading a String as a Character is a YAMLException 108f0051698d4275162504611cd7c33df0eee45cdfemaslovalex tryInvalid(pkg + ".CharArr [ [ 'abcd' ] ]", YAMLException.class); 109f0051698d4275162504611cd7c33df0eee45cdfemaslovalex 110f0051698d4275162504611cd7c33df0eee45cdfemaslovalex } 111f0051698d4275162504611cd7c33df0eee45cdfemaslovalex 112f0051698d4275162504611cd7c33df0eee45cdfemaslovalex public void testTruncation() { 113f0051698d4275162504611cd7c33df0eee45cdfemaslovalex // Loading floating-point numbers as integer types is disallowed, 114f0051698d4275162504611cd7c33df0eee45cdfemaslovalex // because that's a number-format problem. 115f0051698d4275162504611cd7c33df0eee45cdfemaslovalex tryInvalid(pkg + ".ByteArr [ [ 3.14 ] ]", NumberFormatException.class); 116f0051698d4275162504611cd7c33df0eee45cdfemaslovalex tryInvalid(pkg + ".ShortArr [ [ 3.14 ] ]", NumberFormatException.class); 117f0051698d4275162504611cd7c33df0eee45cdfemaslovalex tryInvalid(pkg + ".IntArr [ [ 3.14 ] ]", NumberFormatException.class); 118f0051698d4275162504611cd7c33df0eee45cdfemaslovalex tryInvalid(pkg + ".LongArr [ [ 3.14 ] ]", NumberFormatException.class); 119f0051698d4275162504611cd7c33df0eee45cdfemaslovalex } 120f0051698d4275162504611cd7c33df0eee45cdfemaslovalex 121f0051698d4275162504611cd7c33df0eee45cdfemaslovalex public void testPromotion() { 122f0051698d4275162504611cd7c33df0eee45cdfemaslovalex Yaml yaml = new Yaml(); 123f0051698d4275162504611cd7c33df0eee45cdfemaslovalex 124f0051698d4275162504611cd7c33df0eee45cdfemaslovalex // Loading integer numbers as floating-point types is allowed... 125f0051698d4275162504611cd7c33df0eee45cdfemaslovalex Assert.assertArrayEquals(new float[] { 3, 5 }, 126f0051698d4275162504611cd7c33df0eee45cdfemaslovalex ((FloatArr) yaml.load(pkg + ".FloatArr [ [ 3, 5 ] ] ")).getFloats(), 0.001f); 127f0051698d4275162504611cd7c33df0eee45cdfemaslovalex 128f0051698d4275162504611cd7c33df0eee45cdfemaslovalex Assert.assertArrayEquals(new double[] { 3, 5 }, 129f0051698d4275162504611cd7c33df0eee45cdfemaslovalex ((DoubleArr) yaml.load(pkg + ".DoubleArr [ [ 3, 5 ] ] ")).getDoubles(), 0.001f); 130f0051698d4275162504611cd7c33df0eee45cdfemaslovalex } 131f0051698d4275162504611cd7c33df0eee45cdfemaslovalex 132f0051698d4275162504611cd7c33df0eee45cdfemaslovalex public void testStringCharArray() { 133f0051698d4275162504611cd7c33df0eee45cdfemaslovalex Yaml yaml = new Yaml(); 134f0051698d4275162504611cd7c33df0eee45cdfemaslovalex 135f0051698d4275162504611cd7c33df0eee45cdfemaslovalex try { 136f0051698d4275162504611cd7c33df0eee45cdfemaslovalex yaml.load(pkg + ".CharArr [ [ abcd ] ]"); 137f0051698d4275162504611cd7c33df0eee45cdfemaslovalex fail("Expected exception."); 138f0051698d4275162504611cd7c33df0eee45cdfemaslovalex } catch (Exception e) { 139f0051698d4275162504611cd7c33df0eee45cdfemaslovalex assertEquals(ConstructorException.class, e.getClass()); 140f0051698d4275162504611cd7c33df0eee45cdfemaslovalex assertEquals("Invalid node Character: 'abcd'; length: 4", e.getCause().getMessage()); 141f0051698d4275162504611cd7c33df0eee45cdfemaslovalex } 142f0051698d4275162504611cd7c33df0eee45cdfemaslovalex } 143f0051698d4275162504611cd7c33df0eee45cdfemaslovalex 144f0051698d4275162504611cd7c33df0eee45cdfemaslovalex private static Object cycle(Object in) { 145f0051698d4275162504611cd7c33df0eee45cdfemaslovalex Yaml yaml = new Yaml(); 146f0051698d4275162504611cd7c33df0eee45cdfemaslovalex String dumped = yaml.dump(in); 147f0051698d4275162504611cd7c33df0eee45cdfemaslovalex // System.out.println ( dumped ); 148f0051698d4275162504611cd7c33df0eee45cdfemaslovalex return yaml.load(dumped); 149f0051698d4275162504611cd7c33df0eee45cdfemaslovalex } 150f0051698d4275162504611cd7c33df0eee45cdfemaslovalex 151f0051698d4275162504611cd7c33df0eee45cdfemaslovalex /** 152f0051698d4275162504611cd7c33df0eee45cdfemaslovalex * All kinds of primitive arrays should be able to cycle from (Java array) 153f0051698d4275162504611cd7c33df0eee45cdfemaslovalex * to (YAML string) to (Java array) again, and they should be exactly the 154f0051698d4275162504611cd7c33df0eee45cdfemaslovalex * same before and after. 155f0051698d4275162504611cd7c33df0eee45cdfemaslovalex */ 156f0051698d4275162504611cd7c33df0eee45cdfemaslovalex public void testCycle() { 157f0051698d4275162504611cd7c33df0eee45cdfemaslovalex ByteArr byteArr = new ByteArr(bytes); 158f0051698d4275162504611cd7c33df0eee45cdfemaslovalex Assert.assertArrayEquals(byteArr.getBytes(), ((ByteArr) cycle(byteArr)).getBytes()); 159f0051698d4275162504611cd7c33df0eee45cdfemaslovalex 160f0051698d4275162504611cd7c33df0eee45cdfemaslovalex ShortArr shortArr = new ShortArr(shorts); 161f0051698d4275162504611cd7c33df0eee45cdfemaslovalex Assert.assertArrayEquals(shortArr.getShorts(), ((ShortArr) cycle(shortArr)).getShorts()); 162f0051698d4275162504611cd7c33df0eee45cdfemaslovalex 163f0051698d4275162504611cd7c33df0eee45cdfemaslovalex IntArr intArr = new IntArr(ints); 164f0051698d4275162504611cd7c33df0eee45cdfemaslovalex Assert.assertArrayEquals(intArr.getInts(), ((IntArr) cycle(intArr)).getInts()); 165f0051698d4275162504611cd7c33df0eee45cdfemaslovalex 166f0051698d4275162504611cd7c33df0eee45cdfemaslovalex LongArr longArr = new LongArr(longs); 167f0051698d4275162504611cd7c33df0eee45cdfemaslovalex Assert.assertArrayEquals(longArr.getLongs(), ((LongArr) cycle(longArr)).getLongs()); 168f0051698d4275162504611cd7c33df0eee45cdfemaslovalex 169f0051698d4275162504611cd7c33df0eee45cdfemaslovalex FloatArr floatArr = new FloatArr(floats); 170f0051698d4275162504611cd7c33df0eee45cdfemaslovalex Assert.assertArrayEquals(floatArr.getFloats(), ((FloatArr) cycle(floatArr)).getFloats(), 171f0051698d4275162504611cd7c33df0eee45cdfemaslovalex 0.001f); 172f0051698d4275162504611cd7c33df0eee45cdfemaslovalex 173f0051698d4275162504611cd7c33df0eee45cdfemaslovalex DoubleArr doubleArr = new DoubleArr(doubles); 174f0051698d4275162504611cd7c33df0eee45cdfemaslovalex Assert.assertArrayEquals(doubleArr.getDoubles(), 175f0051698d4275162504611cd7c33df0eee45cdfemaslovalex ((DoubleArr) cycle(doubleArr)).getDoubles(), 0.001); 176f0051698d4275162504611cd7c33df0eee45cdfemaslovalex 177f0051698d4275162504611cd7c33df0eee45cdfemaslovalex CharArr charArr = new CharArr(chars); 178f0051698d4275162504611cd7c33df0eee45cdfemaslovalex Assert.assertArrayEquals(charArr.getChars(), ((CharArr) cycle(charArr)).getChars()); 179f0051698d4275162504611cd7c33df0eee45cdfemaslovalex 180f0051698d4275162504611cd7c33df0eee45cdfemaslovalex BooleanArr boolArr = new BooleanArr(bools); 181f0051698d4275162504611cd7c33df0eee45cdfemaslovalex assertArrayEquals(boolArr.getBools(), ((BooleanArr) cycle(boolArr)).getBools()); 182f0051698d4275162504611cd7c33df0eee45cdfemaslovalex } 183f0051698d4275162504611cd7c33df0eee45cdfemaslovalex 184f0051698d4275162504611cd7c33df0eee45cdfemaslovalex public void testMultiDimensional() { 185f0051698d4275162504611cd7c33df0eee45cdfemaslovalex Array2D two = new Array2D(); 186f0051698d4275162504611cd7c33df0eee45cdfemaslovalex two.setLongs(new long[][] { { 1, 2, 3 }, { 4, 5, 6 } }); 187f0051698d4275162504611cd7c33df0eee45cdfemaslovalex assertTrue(Arrays.deepEquals(two.getLongs(), ((Array2D) cycle(two)).getLongs())); 188f0051698d4275162504611cd7c33df0eee45cdfemaslovalex 189f0051698d4275162504611cd7c33df0eee45cdfemaslovalex Array3D three = new Array3D(); 190f0051698d4275162504611cd7c33df0eee45cdfemaslovalex three.setLongs(new long[][][] { { { 1, 2, 3, 4 }, { 5, 6, 7, 8 } }, 191f0051698d4275162504611cd7c33df0eee45cdfemaslovalex { { 9, 10, 11, 12 }, { 13, 14, 15, 16 } } }); 192f0051698d4275162504611cd7c33df0eee45cdfemaslovalex assertTrue(Arrays.deepEquals(three.getLongs(), ((Array3D) cycle(three)).getLongs())); 193f0051698d4275162504611cd7c33df0eee45cdfemaslovalex 194f0051698d4275162504611cd7c33df0eee45cdfemaslovalex // Object with an array of Objects which each have an array of 195f0051698d4275162504611cd7c33df0eee45cdfemaslovalex // primitives. 196f0051698d4275162504611cd7c33df0eee45cdfemaslovalex ArrayLongArr four = new ArrayLongArr(); 197f0051698d4275162504611cd7c33df0eee45cdfemaslovalex four.setContents(new LongArr[] { new LongArr(new long[] { 1, 2, 3, 4 }), 198f0051698d4275162504611cd7c33df0eee45cdfemaslovalex new LongArr(new long[] { 5, 6, 7, 8 }) }); 199f0051698d4275162504611cd7c33df0eee45cdfemaslovalex Object result = cycle(four); 200f0051698d4275162504611cd7c33df0eee45cdfemaslovalex assertEquals(four, (ArrayLongArr) result); 201f0051698d4275162504611cd7c33df0eee45cdfemaslovalex } 202f0051698d4275162504611cd7c33df0eee45cdfemaslovalex 203f0051698d4275162504611cd7c33df0eee45cdfemaslovalex public static class Array2D { 204f0051698d4275162504611cd7c33df0eee45cdfemaslovalex private long[][] longs; 205f0051698d4275162504611cd7c33df0eee45cdfemaslovalex 206f0051698d4275162504611cd7c33df0eee45cdfemaslovalex public long[][] getLongs() { 207f0051698d4275162504611cd7c33df0eee45cdfemaslovalex return longs; 208f0051698d4275162504611cd7c33df0eee45cdfemaslovalex } 209f0051698d4275162504611cd7c33df0eee45cdfemaslovalex 210f0051698d4275162504611cd7c33df0eee45cdfemaslovalex public void setLongs(long[][] longs) { 211f0051698d4275162504611cd7c33df0eee45cdfemaslovalex this.longs = longs; 212f0051698d4275162504611cd7c33df0eee45cdfemaslovalex } 213f0051698d4275162504611cd7c33df0eee45cdfemaslovalex } 214f0051698d4275162504611cd7c33df0eee45cdfemaslovalex 215f0051698d4275162504611cd7c33df0eee45cdfemaslovalex public static class Array3D { 216f0051698d4275162504611cd7c33df0eee45cdfemaslovalex private long[][][] longs; 217f0051698d4275162504611cd7c33df0eee45cdfemaslovalex 218f0051698d4275162504611cd7c33df0eee45cdfemaslovalex public long[][][] getLongs() { 219f0051698d4275162504611cd7c33df0eee45cdfemaslovalex return longs; 220f0051698d4275162504611cd7c33df0eee45cdfemaslovalex } 221f0051698d4275162504611cd7c33df0eee45cdfemaslovalex 222f0051698d4275162504611cd7c33df0eee45cdfemaslovalex public void setLongs(long[][][] longs) { 223f0051698d4275162504611cd7c33df0eee45cdfemaslovalex this.longs = longs; 224f0051698d4275162504611cd7c33df0eee45cdfemaslovalex } 225f0051698d4275162504611cd7c33df0eee45cdfemaslovalex } 226f0051698d4275162504611cd7c33df0eee45cdfemaslovalex 227f0051698d4275162504611cd7c33df0eee45cdfemaslovalex public static class ArrayLongArr { 228f0051698d4275162504611cd7c33df0eee45cdfemaslovalex private LongArr[] contents; 229f0051698d4275162504611cd7c33df0eee45cdfemaslovalex 230f0051698d4275162504611cd7c33df0eee45cdfemaslovalex public LongArr[] getContents() { 231f0051698d4275162504611cd7c33df0eee45cdfemaslovalex return contents; 232f0051698d4275162504611cd7c33df0eee45cdfemaslovalex } 233f0051698d4275162504611cd7c33df0eee45cdfemaslovalex 234f0051698d4275162504611cd7c33df0eee45cdfemaslovalex public void setContents(LongArr[] contents) { 235f0051698d4275162504611cd7c33df0eee45cdfemaslovalex this.contents = contents; 236f0051698d4275162504611cd7c33df0eee45cdfemaslovalex } 237f0051698d4275162504611cd7c33df0eee45cdfemaslovalex 238f0051698d4275162504611cd7c33df0eee45cdfemaslovalex @Override 239f0051698d4275162504611cd7c33df0eee45cdfemaslovalex public boolean equals(Object obj) { 240f0051698d4275162504611cd7c33df0eee45cdfemaslovalex if (!(obj instanceof ArrayLongArr)) 241f0051698d4275162504611cd7c33df0eee45cdfemaslovalex return false; 242f0051698d4275162504611cd7c33df0eee45cdfemaslovalex 243f0051698d4275162504611cd7c33df0eee45cdfemaslovalex ArrayLongArr other = ((ArrayLongArr) obj); 244f0051698d4275162504611cd7c33df0eee45cdfemaslovalex if (contents.length != other.getContents().length) 245f0051698d4275162504611cd7c33df0eee45cdfemaslovalex return false; 246f0051698d4275162504611cd7c33df0eee45cdfemaslovalex for (int i = 0; i < contents.length; ++i) { 247f0051698d4275162504611cd7c33df0eee45cdfemaslovalex if (!Arrays.equals(contents[i].getLongs(), other.getContents()[i].getLongs())) { 248f0051698d4275162504611cd7c33df0eee45cdfemaslovalex return false; 249f0051698d4275162504611cd7c33df0eee45cdfemaslovalex } 250f0051698d4275162504611cd7c33df0eee45cdfemaslovalex } 251f0051698d4275162504611cd7c33df0eee45cdfemaslovalex 252f0051698d4275162504611cd7c33df0eee45cdfemaslovalex return true; 253f0051698d4275162504611cd7c33df0eee45cdfemaslovalex } 254f0051698d4275162504611cd7c33df0eee45cdfemaslovalex } 255f0051698d4275162504611cd7c33df0eee45cdfemaslovalex} 256