示例#1
0
  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
    }
  }