public void testSubtractElements() { Int64Array array = AssertArrays.makeInt64ArrayEmpty(); array.subtractElements(0, AssertArrays.makeInt64Array12321(), -1, 0); AssertArrays.assertEquals(AssertArrays.makeInt64ArrayEmpty(), array); array = AssertArrays.makeInt64Array1(); array.subtractElements(0, Int64Array.make(new long[] {9}), -1, 0); AssertArrays.assertEquals(Int64Array.make(new long[] {-8}), array); array = Int64Array.make(5); array.subtractElements(0, AssertArrays.makeInt64Array12321(), -1, 0); AssertArrays.assertEquals(Int64Array.make(new long[] {-1, -2, -3, -2, -1}), array); array = AssertArrays.makeInt64Array12345(); array.subtractElements(0, AssertArrays.makeInt64Array12321(), -1, 0); AssertArrays.assertEquals(Int64Array.make(new long[] {0, 0, 0, 2, 4}), array); array = AssertArrays.makeInt64Array12345(); array.subtractElements(2, AssertArrays.makeInt64Array12321(), -1, 0); AssertArrays.assertEquals(Int64Array.make(new long[] {1, 2, 2, 2, 2}), array); array = AssertArrays.makeInt64Array12345(); array.subtractElements(2, AssertArrays.makeInt64Array12321(), -1); AssertArrays.assertEquals(Int64Array.make(new long[] {1, 2, 2, 2, 2}), array); array = AssertArrays.makeInt64Array12345(); array.subtractElements(2, AssertArrays.makeInt64Array12321()); AssertArrays.assertEquals(Int64Array.make(new long[] {1, 2, 2, 2, 2}), array); array = AssertArrays.makeInt64Array12345(); array.subtractElements(2, AssertArrays.makeInt64Array12321(), 2, 1); AssertArrays.assertEquals(Int64Array.make(new long[] {1, 2, 1, 1, 5}), array); // element arithmetic overflows final long large = 0x6000000000000000L; array = Int64Array.make(new long[] {large, large, -large}); array.subtractElements(0, Int64Array.make(new long[] {-large, large, large})); final long result = 4611686018427387904L; assertEquals(Int64Array.make(new long[] {-result, 0, result}), array); // compatible array types array = AssertArrays.makeInt64Array12345(); array.subtractElements(0, AssertArrays.makeInt8Array12321(), -1, 0); AssertArrays.assertEquals(Int64Array.make(new long[] {0, 0, 0, 2, 4}), array); // extend count beyond end of array array = AssertArrays.makeInt64Array12345(); try { array.subtractElements(2, AssertArrays.makeInt64Array12321(), 4, 1); fail(); } catch (IndexOutOfBoundsException e) { // expected } // incompatible arrays array = AssertArrays.makeInt64ArrayEmpty(); try { array.subtractElements(0, AssertArrays.makeIEEE32Array12321(), -1, 0); fail("ieee"); } catch (UnsupportedOperationException e) { // expected } }