/*
 * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
 *
 * This code is free software; you can redistribute it and/or modify it
 * under the terms of the GNU General Public License version 2 only, as
 * published by the Free Software Foundation.
 *
 * This code is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
 * version 2 for more details (a copy is included in the LICENSE file that
 * accompanied this code).
 *
 * You should have received a copy of the GNU General Public License version
 * 2 along with this work; if not, write to the Free Software Foundation,
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
 *
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
 * or visit www.oracle.com if you need additional information or have any
 * questions.
 *
 */

/**
 * @test
 * @bug 8004867
 * @summary VM crashing with assert "share/vm/opto/node.hpp:357 - assert(i < _max) failed: oob"
 *
 * @run main/othervm/timeout=300 -Xbatch -XX:+IgnoreUnrecognizedVMOptions -XX:-TieredCompilation -XX:-OptimizeFill TestIntAtomicOrdered
 * @run main/othervm/timeout=300 -Xbatch -XX:+IgnoreUnrecognizedVMOptions -XX:-TieredCompilation -XX:+OptimizeFill TestIntAtomicOrdered
 */

import java.util.concurrent.atomic.AtomicIntegerArray;

public class TestIntAtomicOrdered {
  private static final int ARRLEN = 97;
  private static final int ITERS  = 11000;
  private static final int OFFSET = 3;
  private static final int SCALE = 2;
  private static final int ALIGN_OFF = 8;
  private static final int UNALIGN_OFF = 5;

  public static void main(String args[]) {
    System.out.println("Testing Integer array atomic ordered operations");
    int errn = test(false);
    if (errn > 0) {
      System.err.println("FAILED: " + errn + " errors");
      System.exit(97);
    }
    System.out.println("PASSED");
  }

  static int test(boolean test_only) {
    AtomicIntegerArray a1 = new AtomicIntegerArray(ARRLEN);
    AtomicIntegerArray a2 = new AtomicIntegerArray(ARRLEN);
    // Initialize
    for (int i=0; i<ARRLEN; i++) {
      a1.lazySet(i, -1);
      a2.lazySet(i, -1);
    }
    System.out.println("Warmup");
    for (int i=0; i<ITERS; i++) {
      test_ci(a1);
      test_vi(a2, 123, -1);
      test_cp(a1, a2);
      test_2ci(a1, a2);
      test_2vi(a1, a2, 123, 103);
      test_ci_neg(a1, 123);
      test_vi_neg(a2, 123, 103);
      test_cp_neg(a1, a2);
      test_2ci_neg(a1, a2);
      test_2vi_neg(a1, a2, 123, 103);
      test_ci_oppos(a1, 123);
      test_vi_oppos(a2, 123, 103);
      test_cp_oppos(a1, a2);
      test_2ci_oppos(a1, a2);
      test_2vi_oppos(a1, a2, 123, 103);
      test_ci_off(a1, 123);
      test_vi_off(a2, 123, 103);
      test_cp_off(a1, a2);
      test_2ci_off(a1, a2);
      test_2vi_off(a1, a2, 123, 103);
      test_ci_inv(a1, OFFSET, 123);
      test_vi_inv(a2, 123, OFFSET, 103);
      test_cp_inv(a1, a2, OFFSET);
      test_2ci_inv(a1, a2, OFFSET);
      test_2vi_inv(a1, a2, 123, 103, OFFSET);
      test_ci_scl(a1, 123);
      test_vi_scl(a2, 123, 103);
      test_cp_scl(a1, a2);
      test_2ci_scl(a1, a2);
      test_2vi_scl(a1, a2, 123, 103);
      test_cp_alndst(a1, a2);
      test_cp_alnsrc(a1, a2);
      test_2ci_aln(a1, a2);
      test_2vi_aln(a1, a2, 123, 103);
      test_cp_unalndst(a1, a2);
      test_cp_unalnsrc(a1, a2);
      test_2ci_unaln(a1, a2);
      test_2vi_unaln(a1, a2, 123, 103);
    }
    // Initialize
    for (int i=0; i<ARRLEN; i++) {
      a1.lazySet(i, -1);
      a2.lazySet(i, -1);
    }
    // Test and verify results
    System.out.println("Verification");
    int errn = 0;
    {
      test_ci(a1);
      for (int i=0; i<ARRLEN; i++) {
        errn += verify("test_ci: a1", i, a1.get(i), -123);
      }
      test_vi(a2, 123, -1);
      for (int i=0; i<ARRLEN; i++) {
        errn += verify("test_vi: a2", i, a2.get(i), 123);
      }
      test_cp(a1, a2);
      for (int i=0; i<ARRLEN; i++) {
        errn += verify("test_cp: a1", i, a1.get(i), 123);
      }
      test_2ci(a1, a2);
      for (int i=0; i<ARRLEN; i++) {
        errn += verify("test_2ci: a1", i, a1.get(i), -123);
        errn += verify("test_2ci: a2", i, a2.get(i), -103);
      }
      test_2vi(a1, a2, 123, 103);
      for (int i=0; i<ARRLEN; i++) {
        errn += verify("test_2vi: a1", i, a1.get(i), 123);
        errn += verify("test_2vi: a2", i, a2.get(i), 103);
      }
      // Reset for negative stride
      for (int i=0; i<ARRLEN; i++) {
        a1.lazySet(i, -1);
        a2.lazySet(i, -1);
      }
      test_ci_neg(a1, -1);
      for (int i=0; i<ARRLEN; i++) {
        errn += verify("test_ci_neg: a1", i, a1.get(i), -123);
      }
      test_vi_neg(a2, 123, -1);
      for (int i=0; i<ARRLEN; i++) {
        errn += verify("test_vi_neg: a2", i, a2.get(i), 123);
      }
      test_cp_neg(a1, a2);
      for (int i=0; i<ARRLEN; i++) {
        errn += verify("test_cp_neg: a1", i, a1.get(i), 123);
      }
      test_2ci_neg(a1, a2);
      for (int i=0; i<ARRLEN; i++) {
        errn += verify("test_2ci_neg: a1", i, a1.get(i), -123);
        errn += verify("test_2ci_neg: a2", i, a2.get(i), -103);
      }
      test_2vi_neg(a1, a2, 123, 103);
      for (int i=0; i<ARRLEN; i++) {
        errn += verify("test_2vi_neg: a1", i, a1.get(i), 123);
        errn += verify("test_2vi_neg: a2", i, a2.get(i), 103);
      }
      // Reset for opposite stride
      for (int i=0; i<ARRLEN; i++) {
        a1.lazySet(i, -1);
        a2.lazySet(i, -1);
      }
      test_ci_oppos(a1, -1);
      for (int i=0; i<ARRLEN; i++) {
        errn += verify("test_ci_oppos: a1", i, a1.get(i), -123);
      }
      test_vi_oppos(a2, 123, -1);
      for (int i=0; i<ARRLEN; i++) {
        errn += verify("test_vi_oppos: a2", i, a2.get(i), 123);
      }
      test_cp_oppos(a1, a2);
      for (int i=0; i<ARRLEN; i++) {
        errn += verify("test_cp_oppos: a1", i, a1.get(i), 123);
      }
      test_2ci_oppos(a1, a2);
      for (int i=0; i<ARRLEN; i++) {
        errn += verify("test_2ci_oppos: a1", i, a1.get(i), -123);
        errn += verify("test_2ci_oppos: a2", i, a2.get(i), -103);
      }
      test_2vi_oppos(a1, a2, 123, 103);
      for (int i=0; i<ARRLEN; i++) {
        errn += verify("test_2vi_oppos: a1", i, a1.get(i), 123);
        errn += verify("test_2vi_oppos: a2", i, a2.get(i), 103);
      }
      // Reset for indexing with offset
      for (int i=0; i<ARRLEN; i++) {
        a1.lazySet(i, -1);
        a2.lazySet(i, -1);
      }
      test_ci_off(a1, -1);
      for (int i=OFFSET; i<ARRLEN; i++) {
        errn += verify("test_ci_off: a1", i, a1.get(i), -123);
      }
      test_vi_off(a2, 123, -1);
      for (int i=OFFSET; i<ARRLEN; i++) {
        errn += verify("test_vi_off: a2", i, a2.get(i), 123);
      }
      test_cp_off(a1, a2);
      for (int i=OFFSET; i<ARRLEN; i++) {
        errn += verify("test_cp_off: a1", i, a1.get(i), 123);
      }
      test_2ci_off(a1, a2);
      for (int i=OFFSET; i<ARRLEN; i++) {
        errn += verify("test_2ci_off: a1", i, a1.get(i), -123);
        errn += verify("test_2ci_off: a2", i, a2.get(i), -103);
      }
      test_2vi_off(a1, a2, 123, 103);
      for (int i=OFFSET; i<ARRLEN; i++) {
        errn += verify("test_2vi_off: a1", i, a1.get(i), 123);
        errn += verify("test_2vi_off: a2", i, a2.get(i), 103);
      }
      for (int i=0; i<OFFSET; i++) {
        errn += verify("test_2vi_off: a1", i, a1.get(i), -1);
        errn += verify("test_2vi_off: a2", i, a2.get(i), -1);
      }
      // Reset for indexing with invariant offset
      for (int i=0; i<ARRLEN; i++) {
        a1.lazySet(i, -1);
        a2.lazySet(i, -1);
      }
      test_ci_inv(a1, OFFSET, -1);
      for (int i=OFFSET; i<ARRLEN; i++) {
        errn += verify("test_ci_inv: a1", i, a1.get(i), -123);
      }
      test_vi_inv(a2, 123, OFFSET, -1);
      for (int i=OFFSET; i<ARRLEN; i++) {
        errn += verify("test_vi_inv: a2", i, a2.get(i), 123);
      }
      test_cp_inv(a1, a2, OFFSET);
      for (int i=OFFSET; i<ARRLEN; i++) {
        errn += verify("test_cp_inv: a1", i, a1.get(i), 123);
      }
      test_2ci_inv(a1, a2, OFFSET);
      for (int i=OFFSET; i<ARRLEN; i++) {
        errn += verify("test_2ci_inv: a1", i, a1.get(i), -123);
        errn += verify("test_2ci_inv: a2", i, a2.get(i), -103);
      }
      test_2vi_inv(a1, a2, 123, 103, OFFSET);
      for (int i=OFFSET; i<ARRLEN; i++) {
        errn += verify("test_2vi_inv: a1", i, a1.get(i), 123);
        errn += verify("test_2vi_inv: a2", i, a2.get(i), 103);
      }
      for (int i=0; i<OFFSET; i++) {
        errn += verify("test_2vi_inv: a1", i, a1.get(i), -1);
        errn += verify("test_2vi_inv: a2", i, a2.get(i), -1);
      }
      // Reset for indexing with scale
      for (int i=0; i<ARRLEN; i++) {
        a1.lazySet(i, -1);
        a2.lazySet(i, -1);
      }
      test_ci_scl(a1, -1);
      for (int i=0; i<ARRLEN; i++) {
        int val = (i%SCALE != 0) ? -1 : -123;
        errn += verify("test_ci_scl: a1", i, a1.get(i), val);
      }
      test_vi_scl(a2, 123, -1);
      for (int i=0; i<ARRLEN; i++) {
        int val = (i%SCALE != 0) ? -1 : 123;
        errn += verify("test_vi_scl: a2", i, a2.get(i), val);
      }
      test_cp_scl(a1, a2);
      for (int i=0; i<ARRLEN; i++) {
        int val = (i%SCALE != 0) ? -1 : 123;
        errn += verify("test_cp_scl: a1", i, a1.get(i), val);
      }
      test_2ci_scl(a1, a2);
      for (int i=0; i<ARRLEN; i++) {
        if (i%SCALE != 0) {
          errn += verify("test_2ci_scl: a1", i, a1.get(i), -1);
        } else if (i*SCALE < ARRLEN) {
          errn += verify("test_2ci_scl: a1", i*SCALE, a1.get(i*SCALE), -123);
        }
        if (i%SCALE != 0) {
          errn += verify("test_2ci_scl: a2", i, a2.get(i), -1);
        } else if (i*SCALE < ARRLEN) {
          errn += verify("test_2ci_scl: a2", i*SCALE, a2.get(i*SCALE), -103);
        }
      }
      test_2vi_scl(a1, a2, 123, 103);
      for (int i=0; i<ARRLEN; i++) {
        if (i%SCALE != 0) {
          errn += verify("test_2vi_scl: a1", i, a1.get(i), -1);
        } else if (i*SCALE < ARRLEN) {
          errn += verify("test_2vi_scl: a1", i*SCALE, a1.get(i*SCALE), 123);
        }
        if (i%SCALE != 0) {
          errn += verify("test_2vi_scl: a2", i, a2.get(i), -1);
        } else if (i*SCALE < ARRLEN) {
          errn += verify("test_2vi_scl: a2", i*SCALE, a2.get(i*SCALE), 103);
        }
      }
      // Reset for 2 arrays with relative aligned offset
      for (int i=0; i<ARRLEN; i++) {
        a1.lazySet(i, -1);
        a2.lazySet(i, -1);
      }
      test_vi(a2, 123, -1);
      test_cp_alndst(a1, a2);
      for (int i=0; i<ALIGN_OFF; i++) {
        errn += verify("test_cp_alndst: a1", i, a1.get(i), -1);
      }
      for (int i=ALIGN_OFF; i<ARRLEN; i++) {
        errn += verify("test_cp_alndst: a1", i, a1.get(i), 123);
      }
      for (int i=0; i<ALIGN_OFF; i++) {
        a1.lazySet(i, 123);
      }
      test_vi(a2, -123, 123);
      test_cp_alnsrc(a1, a2);
      for (int i=0; i<ARRLEN-ALIGN_OFF; i++) {
        errn += verify("test_cp_alnsrc: a1", i, a1.get(i), -123);
      }
      for (int i=ARRLEN-ALIGN_OFF; i<ARRLEN; i++) {
        errn += verify("test_cp_alnsrc: a1", i, a1.get(i), 123);
      }
      for (int i=0; i<ARRLEN; i++) {
        a1.lazySet(i, -1);
        a2.lazySet(i, -1);
      }
      test_2ci_aln(a1, a2);
      for (int i=0; i<ALIGN_OFF; i++) {
        errn += verify("test_2ci_aln: a1", i, a1.get(i), -1);
      }
      for (int i=ALIGN_OFF; i<ARRLEN; i++) {
        errn += verify("test_2ci_aln: a1", i, a1.get(i), -123);
      }
      for (int i=0; i<ARRLEN-ALIGN_OFF; i++) {
        errn += verify("test_2ci_aln: a2", i, a2.get(i), -103);
      }
      for (int i=ARRLEN-ALIGN_OFF; i<ARRLEN; i++) {
        errn += verify("test_2ci_aln: a2", i, a2.get(i), -1);
      }
      for (int i=0; i<ARRLEN; i++) {
        a1.lazySet(i, -1);
        a2.lazySet(i, -1);
      }
      test_2vi_aln(a1, a2, 123, 103);
      for (int i=0; i<ARRLEN-ALIGN_OFF; i++) {
        errn += verify("test_2vi_aln: a1", i, a1.get(i), 123);
      }
      for (int i=ARRLEN-ALIGN_OFF; i<ARRLEN; i++) {
        errn += verify("test_2vi_aln: a1", i, a1.get(i), -1);
      }
      for (int i=0; i<ALIGN_OFF; i++) {
        errn += verify("test_2vi_aln: a2", i, a2.get(i), -1);
      }
      for (int i=ALIGN_OFF; i<ARRLEN; i++) {
        errn += verify("test_2vi_aln: a2", i, a2.get(i), 103);
      }

      // Reset for 2 arrays with relative unaligned offset
      for (int i=0; i<ARRLEN; i++) {
        a1.lazySet(i, -1);
        a2.lazySet(i, -1);
      }
      test_vi(a2, 123, -1);
      test_cp_unalndst(a1, a2);
      for (int i=0; i<UNALIGN_OFF; i++) {
        errn += verify("test_cp_unalndst: a1", i, a1.get(i), -1);
      }
      for (int i=UNALIGN_OFF; i<ARRLEN; i++) {
        errn += verify("test_cp_unalndst: a1", i, a1.get(i), 123);
      }
      test_vi(a2, -123, 123);
      test_cp_unalnsrc(a1, a2);
      for (int i=0; i<ARRLEN-UNALIGN_OFF; i++) {
        errn += verify("test_cp_unalnsrc: a1", i, a1.get(i), -123);
      }
      for (int i=ARRLEN-UNALIGN_OFF; i<ARRLEN; i++) {
        errn += verify("test_cp_unalnsrc: a1", i, a1.get(i), 123);
      }
      for (int i=0; i<ARRLEN; i++) {
        a1.lazySet(i, -1);
        a2.lazySet(i, -1);
      }
      test_2ci_unaln(a1, a2);
      for (int i=0; i<UNALIGN_OFF; i++) {
        errn += verify("test_2ci_unaln: a1", i, a1.get(i), -1);
      }
      for (int i=UNALIGN_OFF; i<ARRLEN; i++) {
        errn += verify("test_2ci_unaln: a1", i, a1.get(i), -123);
      }
      for (int i=0; i<ARRLEN-UNALIGN_OFF; i++) {
        errn += verify("test_2ci_unaln: a2", i, a2.get(i), -103);
      }
      for (int i=ARRLEN-UNALIGN_OFF; i<ARRLEN; i++) {
        errn += verify("test_2ci_unaln: a2", i, a2.get(i), -1);
      }
      for (int i=0; i<ARRLEN; i++) {
        a1.lazySet(i, -1);
        a2.lazySet(i, -1);
      }
      test_2vi_unaln(a1, a2, 123, 103);
      for (int i=0; i<ARRLEN-UNALIGN_OFF; i++) {
        errn += verify("test_2vi_unaln: a1", i, a1.get(i), 123);
      }
      for (int i=ARRLEN-UNALIGN_OFF; i<ARRLEN; i++) {
        errn += verify("test_2vi_unaln: a1", i, a1.get(i), -1);
      }
      for (int i=0; i<UNALIGN_OFF; i++) {
        errn += verify("test_2vi_unaln: a2", i, a2.get(i), -1);
      }
      for (int i=UNALIGN_OFF; i<ARRLEN; i++) {
        errn += verify("test_2vi_unaln: a2", i, a2.get(i), 103);
      }

      // Reset for aligned overlap initialization
      for (int i=0; i<ALIGN_OFF; i++) {
        a1.lazySet(i, i);
      }
      for (int i=ALIGN_OFF; i<ARRLEN; i++) {
        a1.lazySet(i, -1);
      }
      test_cp_alndst(a1, a1);
      for (int i=0; i<ARRLEN; i++) {
        int v = i%ALIGN_OFF;
        errn += verify("test_cp_alndst_overlap: a1", i, a1.get(i), v);
      }
      for (int i=0; i<ALIGN_OFF; i++) {
        a1.lazySet((i+ALIGN_OFF), -1);
      }
      test_cp_alnsrc(a1, a1);
      for (int i=0; i<ALIGN_OFF; i++) {
        errn += verify("test_cp_alnsrc_overlap: a1", i, a1.get(i), -1);
      }
      for (int i=ALIGN_OFF; i<ARRLEN; i++) {
        int v = i%ALIGN_OFF;
        errn += verify("test_cp_alnsrc_overlap: a1", i, a1.get(i), v);
      }
      for (int i=0; i<ARRLEN; i++) {
        a1.lazySet(i, -1);
      }
      test_2ci_aln(a1, a1);
      for (int i=0; i<ARRLEN-ALIGN_OFF; i++) {
        errn += verify("test_2ci_aln_overlap: a1", i, a1.get(i), -103);
      }
      for (int i=ARRLEN-ALIGN_OFF; i<ARRLEN; i++) {
        errn += verify("test_2ci_aln_overlap: a1", i, a1.get(i), -123);
      }
      for (int i=0; i<ARRLEN; i++) {
        a1.lazySet(i, -1);
      }
      test_2vi_aln(a1, a1, 123, 103);
      for (int i=0; i<ARRLEN-ALIGN_OFF; i++) {
        errn += verify("test_2vi_aln_overlap: a1", i, a1.get(i), 123);
      }
      for (int i=ARRLEN-ALIGN_OFF; i<ARRLEN; i++) {
        errn += verify("test_2vi_aln_overlap: a1", i, a1.get(i), 103);
      }

      // Reset for unaligned overlap initialization
      for (int i=0; i<UNALIGN_OFF; i++) {
        a1.lazySet(i, i);
      }
      for (int i=UNALIGN_OFF; i<ARRLEN; i++) {
        a1.lazySet(i, -1);
      }
      test_cp_unalndst(a1, a1);
      for (int i=0; i<ARRLEN; i++) {
        int v = i%UNALIGN_OFF;
        errn += verify("test_cp_unalndst_overlap: a1", i, a1.get(i), v);
      }
      for (int i=0; i<UNALIGN_OFF; i++) {
        a1.lazySet((i+UNALIGN_OFF), -1);
      }
      test_cp_unalnsrc(a1, a1);
      for (int i=0; i<UNALIGN_OFF; i++) {
        errn += verify("test_cp_unalnsrc_overlap: a1", i, a1.get(i), -1);
      }
      for (int i=UNALIGN_OFF; i<ARRLEN; i++) {
        int v = i%UNALIGN_OFF;
        errn += verify("test_cp_unalnsrc_overlap: a1", i, a1.get(i), v);
      }
      for (int i=0; i<ARRLEN; i++) {
        a1.lazySet(i, -1);
      }
      test_2ci_unaln(a1, a1);
      for (int i=0; i<ARRLEN-UNALIGN_OFF; i++) {
        errn += verify("test_2ci_unaln_overlap: a1", i, a1.get(i), -103);
      }
      for (int i=ARRLEN-UNALIGN_OFF; i<ARRLEN; i++) {
        errn += verify("test_2ci_unaln_overlap: a1", i, a1.get(i), -123);
      }
      for (int i=0; i<ARRLEN; i++) {
        a1.lazySet(i, -1);
      }
      test_2vi_unaln(a1, a1, 123, 103);
      for (int i=0; i<ARRLEN-UNALIGN_OFF; i++) {
        errn += verify("test_2vi_unaln_overlap: a1", i, a1.get(i), 123);
      }
      for (int i=ARRLEN-UNALIGN_OFF; i<ARRLEN; i++) {
        errn += verify("test_2vi_unaln_overlap: a1", i, a1.get(i), 103);
      }

    }

    if (errn > 0 || test_only)
      return errn;

    // Initialize
    for (int i=0; i<ARRLEN; i++) {
      a1.lazySet(i, -1);
      a2.lazySet(i, -1);
    }
    System.out.println("Time");
    long start, end;
    start = System.currentTimeMillis();
    for (int i=0; i<ITERS; i++) {
      test_ci(a1);
    }
    end = System.currentTimeMillis();
    System.out.println("test_ci: " + (end - start));
    start = System.currentTimeMillis();
    for (int i=0; i<ITERS; i++) {
      test_vi(a2, 123, -1);
    }
    end = System.currentTimeMillis();
    System.out.println("test_vi: " + (end - start));
    start = System.currentTimeMillis();
    for (int i=0; i<ITERS; i++) {
      test_cp(a1, a2);
    }
    end = System.currentTimeMillis();
    System.out.println("test_cp: " + (end - start));
    start = System.currentTimeMillis();
    for (int i=0; i<ITERS; i++) {
      test_2ci(a1, a2);
    }
    end = System.currentTimeMillis();
    System.out.println("test_2ci: " + (end - start));
    start = System.currentTimeMillis();
    for (int i=0; i<ITERS; i++) {
      test_2vi(a1, a2, 123, 103);
    }
    end = System.currentTimeMillis();
    System.out.println("test_2vi: " + (end - start));

    start = System.currentTimeMillis();
    for (int i=0; i<ITERS; i++) {
      test_ci_neg(a1, 123);
    }
    end = System.currentTimeMillis();
    System.out.println("test_ci_neg: " + (end - start));
    start = System.currentTimeMillis();
    for (int i=0; i<ITERS; i++) {
      test_vi_neg(a2, 123, 103);
    }
    end = System.currentTimeMillis();
    System.out.println("test_vi_neg: " + (end - start));
    start = System.currentTimeMillis();
    for (int i=0; i<ITERS; i++) {
      test_cp_neg(a1, a2);
    }
    end = System.currentTimeMillis();
    System.out.println("test_cp_neg: " + (end - start));
    start = System.currentTimeMillis();
    for (int i=0; i<ITERS; i++) {
      test_2ci_neg(a1, a2);
    }
    end = System.currentTimeMillis();
    System.out.println("test_2ci_neg: " + (end - start));
    start = System.currentTimeMillis();
    for (int i=0; i<ITERS; i++) {
      test_2vi_neg(a1, a2, 123, 103);
    }
    end = System.currentTimeMillis();
    System.out.println("test_2vi_neg: " + (end - start));

    start = System.currentTimeMillis();
    for (int i=0; i<ITERS; i++) {
      test_ci_oppos(a1, 123);
    }
    end = System.currentTimeMillis();
    System.out.println("test_ci_oppos: " + (end - start));
    start = System.currentTimeMillis();
    for (int i=0; i<ITERS; i++) {
      test_vi_oppos(a2, 123, 103);
    }
    end = System.currentTimeMillis();
    System.out.println("test_vi_oppos: " + (end - start));
    start = System.currentTimeMillis();
    for (int i=0; i<ITERS; i++) {
      test_cp_oppos(a1, a2);
    }
    end = System.currentTimeMillis();
    System.out.println("test_cp_oppos: " + (end - start));
    start = System.currentTimeMillis();
    for (int i=0; i<ITERS; i++) {
      test_2ci_oppos(a1, a2);
    }
    end = System.currentTimeMillis();
    System.out.println("test_2ci_oppos: " + (end - start));
    start = System.currentTimeMillis();
    for (int i=0; i<ITERS; i++) {
      test_2vi_oppos(a1, a2, 123, 103);
    }
    end = System.currentTimeMillis();
    System.out.println("test_2vi_oppos: " + (end - start));

    start = System.currentTimeMillis();
    for (int i=0; i<ITERS; i++) {
      test_ci_off(a1, 123);
    }
    end = System.currentTimeMillis();
    System.out.println("test_ci_off: " + (end - start));
    start = System.currentTimeMillis();
    for (int i=0; i<ITERS; i++) {
      test_vi_off(a2, 123, 103);
    }
    end = System.currentTimeMillis();
    System.out.println("test_vi_off: " + (end - start));
    start = System.currentTimeMillis();
    for (int i=0; i<ITERS; i++) {
      test_cp_off(a1, a2);
    }
    end = System.currentTimeMillis();
    System.out.println("test_cp_off: " + (end - start));
    start = System.currentTimeMillis();
    for (int i=0; i<ITERS; i++) {
      test_2ci_off(a1, a2);
    }
    end = System.currentTimeMillis();
    System.out.println("test_2ci_off: " + (end - start));
    start = System.currentTimeMillis();
    for (int i=0; i<ITERS; i++) {
      test_2vi_off(a1, a2, 123, 103);
    }
    end = System.currentTimeMillis();
    System.out.println("test_2vi_off: " + (end - start));

    start = System.currentTimeMillis();
    for (int i=0; i<ITERS; i++) {
      test_ci_inv(a1, OFFSET, 123);
    }
    end = System.currentTimeMillis();
    System.out.println("test_ci_inv: " + (end - start));
    start = System.currentTimeMillis();
    for (int i=0; i<ITERS; i++) {
      test_vi_inv(a2, 123, OFFSET, 103);
    }
    end = System.currentTimeMillis();
    System.out.println("test_vi_inv: " + (end - start));
    start = System.currentTimeMillis();
    for (int i=0; i<ITERS; i++) {
      test_cp_inv(a1, a2, OFFSET);
    }
    end = System.currentTimeMillis();
    System.out.println("test_cp_inv: " + (end - start));
    start = System.currentTimeMillis();
    for (int i=0; i<ITERS; i++) {
      test_2ci_inv(a1, a2, OFFSET);
    }
    end = System.currentTimeMillis();
    System.out.println("test_2ci_inv: " + (end - start));
    start = System.currentTimeMillis();
    for (int i=0; i<ITERS; i++) {
      test_2vi_inv(a1, a2, 123, 103, OFFSET);
    }
    end = System.currentTimeMillis();
    System.out.println("test_2vi_inv: " + (end - start));

    start = System.currentTimeMillis();
    for (int i=0; i<ITERS; i++) {
      test_ci_scl(a1, 123);
    }
    end = System.currentTimeMillis();
    System.out.println("test_ci_scl: " + (end - start));
    start = System.currentTimeMillis();
    for (int i=0; i<ITERS; i++) {
      test_vi_scl(a2, 123, 103);
    }
    end = System.currentTimeMillis();
    System.out.println("test_vi_scl: " + (end - start));
    start = System.currentTimeMillis();
    for (int i=0; i<ITERS; i++) {
      test_cp_scl(a1, a2);
    }
    end = System.currentTimeMillis();
    System.out.println("test_cp_scl: " + (end - start));
    start = System.currentTimeMillis();
    for (int i=0; i<ITERS; i++) {
      test_2ci_scl(a1, a2);
    }
    end = System.currentTimeMillis();
    System.out.println("test_2ci_scl: " + (end - start));
    start = System.currentTimeMillis();
    for (int i=0; i<ITERS; i++) {
      test_2vi_scl(a1, a2, 123, 103);
    }
    end = System.currentTimeMillis();
    System.out.println("test_2vi_scl: " + (end - start));

    start = System.currentTimeMillis();
    for (int i=0; i<ITERS; i++) {
      test_cp_alndst(a1, a2);
    }
    end = System.currentTimeMillis();
    System.out.println("test_cp_alndst: " + (end - start));
    start = System.currentTimeMillis();
    for (int i=0; i<ITERS; i++) {
      test_cp_alnsrc(a1, a2);
    }
    end = System.currentTimeMillis();
    System.out.println("test_cp_alnsrc: " + (end - start));
    start = System.currentTimeMillis();
    for (int i=0; i<ITERS; i++) {
      test_2ci_aln(a1, a2);
    }
    end = System.currentTimeMillis();
    System.out.println("test_2ci_aln: " + (end - start));
    start = System.currentTimeMillis();
    for (int i=0; i<ITERS; i++) {
      test_2vi_aln(a1, a2, 123, 103);
    }
    end = System.currentTimeMillis();
    System.out.println("test_2vi_aln: " + (end - start));

    start = System.currentTimeMillis();
    for (int i=0; i<ITERS; i++) {
      test_cp_unalndst(a1, a2);
    }
    end = System.currentTimeMillis();
    System.out.println("test_cp_unalndst: " + (end - start));
    start = System.currentTimeMillis();
    for (int i=0; i<ITERS; i++) {
      test_cp_unalnsrc(a1, a2);
    }
    end = System.currentTimeMillis();
    System.out.println("test_cp_unalnsrc: " + (end - start));
    start = System.currentTimeMillis();
    for (int i=0; i<ITERS; i++) {
      test_2ci_unaln(a1, a2);
    }
    end = System.currentTimeMillis();
    System.out.println("test_2ci_unaln: " + (end - start));
    start = System.currentTimeMillis();
    for (int i=0; i<ITERS; i++) {
      test_2vi_unaln(a1, a2, 123, 103);
    }
    end = System.currentTimeMillis();
    System.out.println("test_2vi_unaln: " + (end - start));

    return errn;
  }

  static void test_ci(AtomicIntegerArray a) {
    for (int i = 0; i < ARRLEN; i+=1) {
      a.lazySet(i, -123);
    }
  }
  static void test_vi(AtomicIntegerArray a, int b, int old) {
    for (int i = 0; i < ARRLEN; i+=1) {
      a.lazySet(i, b);
    }
  }
  static void test_cp(AtomicIntegerArray a, AtomicIntegerArray b) {
    for (int i = 0; i < ARRLEN; i+=1) {
      a.lazySet(i, b.get(i));
    }
  }
  static void test_2ci(AtomicIntegerArray a, AtomicIntegerArray b) {
    for (int i = 0; i < ARRLEN; i+=1) {
      a.lazySet(i, -123);
      b.lazySet(i, -103);
    }
  }
  static void test_2vi(AtomicIntegerArray a, AtomicIntegerArray b, int c, int d) {
    for (int i = 0; i < ARRLEN; i+=1) {
      a.lazySet(i, c);
      b.lazySet(i, d);
    }
  }
  static void test_ci_neg(AtomicIntegerArray a, int old) {
    for (int i = ARRLEN-1; i >= 0; i-=1) {
      a.lazySet(i,-123);
    }
  }
  static void test_vi_neg(AtomicIntegerArray a, int b, int old) {
    for (int i = ARRLEN-1; i >= 0; i-=1) {
      a.lazySet(i, b);
    }
  }
  static void test_cp_neg(AtomicIntegerArray a, AtomicIntegerArray b) {
    for (int i = ARRLEN-1; i >= 0; i-=1) {
      a.lazySet(i, b.get(i));
    }
  }
  static void test_2ci_neg(AtomicIntegerArray a, AtomicIntegerArray b) {
    for (int i = ARRLEN-1; i >= 0; i-=1) {
      a.lazySet(i, -123);
      b.lazySet(i, -103);
    }
  }
  static void test_2vi_neg(AtomicIntegerArray a, AtomicIntegerArray b, int c, int d) {
    for (int i = ARRLEN-1; i >= 0; i-=1) {
      a.lazySet(i, c);
      b.lazySet(i, d);
    }
  }
  static void test_ci_oppos(AtomicIntegerArray a, int old) {
    int limit = ARRLEN-1;
    for (int i = 0; i < ARRLEN; i+=1) {
      a.lazySet((limit-i), -123);
    }
  }
  static void test_vi_oppos(AtomicIntegerArray a, int b, int old) {
    int limit = ARRLEN-1;
    for (int i = limit; i >= 0; i-=1) {
      a.lazySet((limit-i), b);
    }
  }
  static void test_cp_oppos(AtomicIntegerArray a, AtomicIntegerArray b) {
    int limit = ARRLEN-1;
    for (int i = 0; i < ARRLEN; i+=1) {
      a.lazySet(i, b.get(limit-i));
    }
  }
  static void test_2ci_oppos(AtomicIntegerArray a, AtomicIntegerArray b) {
    int limit = ARRLEN-1;
    for (int i = 0; i < ARRLEN; i+=1) {
      a.lazySet((limit-i), -123);
      b.lazySet(i, -103);
    }
  }
  static void test_2vi_oppos(AtomicIntegerArray a, AtomicIntegerArray b, int c, int d) {
    int limit = ARRLEN-1;
    for (int i = limit; i >= 0; i-=1) {
      a.lazySet(i, c);
      b.lazySet((limit-i), d);
    }
  }
  static void test_ci_off(AtomicIntegerArray a, int old) {
    for (int i = 0; i < ARRLEN-OFFSET; i+=1) {
      a.lazySet((i+OFFSET), -123);
    }
  }
  static void test_vi_off(AtomicIntegerArray a, int b, int old) {
    for (int i = 0; i < ARRLEN-OFFSET; i+=1) {
      a.lazySet((i+OFFSET), b);
    }
  }
  static void test_cp_off(AtomicIntegerArray a, AtomicIntegerArray b) {
    for (int i = 0; i < ARRLEN-OFFSET; i+=1) {
      a.lazySet((i+OFFSET), b.get(i+OFFSET));
    }
  }
  static void test_2ci_off(AtomicIntegerArray a, AtomicIntegerArray b) {
    for (int i = 0; i < ARRLEN-OFFSET; i+=1) {
      a.lazySet((i+OFFSET), -123);
      b.lazySet((i+OFFSET), -103);
    }
  }
  static void test_2vi_off(AtomicIntegerArray a, AtomicIntegerArray b, int c, int d) {
    for (int i = 0; i < ARRLEN-OFFSET; i+=1) {
      a.lazySet((i+OFFSET), c);
      b.lazySet((i+OFFSET), d);
    }
  }
  static void test_ci_inv(AtomicIntegerArray a, int k, int old) {
    for (int i = 0; i < ARRLEN-k; i+=1) {
      a.lazySet((i+k),-123);
    }
  }
  static void test_vi_inv(AtomicIntegerArray a, int b, int k, int old) {
    for (int i = 0; i < ARRLEN-k; i+=1) {
      a.lazySet((i+k), b);
    }
  }
  static void test_cp_inv(AtomicIntegerArray a, AtomicIntegerArray b, int k) {
    for (int i = 0; i < ARRLEN-k; i+=1) {
      a.lazySet((i+k), b.get(i+k));
    }
  }
  static void test_2ci_inv(AtomicIntegerArray a, AtomicIntegerArray b, int k) {
    for (int i = 0; i < ARRLEN-k; i+=1) {
      a.lazySet((i+k), -123);
      b.lazySet((i+k), -103);
    }
  }
  static void test_2vi_inv(AtomicIntegerArray a, AtomicIntegerArray b, int c, int d, int k) {
    for (int i = 0; i < ARRLEN-k; i+=1) {
      a.lazySet((i+k), c);
      b.lazySet((i+k), d);
    }
  }
  static void test_ci_scl(AtomicIntegerArray a, int old) {
    for (int i = 0; i*SCALE < ARRLEN; i+=1) {
      a.lazySet((i*SCALE), -123);
    }
  }
  static void test_vi_scl(AtomicIntegerArray a, int b, int old) {
    for (int i = 0; i*SCALE < ARRLEN; i+=1) {
      a.lazySet((i*SCALE), b);
    }
  }
  static void test_cp_scl(AtomicIntegerArray a, AtomicIntegerArray b) {
    for (int i = 0; i*SCALE < ARRLEN; i+=1) {
      a.lazySet((i*SCALE), b.get(i*SCALE));
    }
  }
  static void test_2ci_scl(AtomicIntegerArray a, AtomicIntegerArray b) {
    for (int i = 0; i*SCALE < ARRLEN; i+=1) {
      a.lazySet((i*SCALE), -123);
      b.lazySet((i*SCALE), -103);
    }
  }
  static void test_2vi_scl(AtomicIntegerArray a, AtomicIntegerArray b, int c, int d) {
    for (int i = 0; i*SCALE < ARRLEN; i+=1) {
      a.lazySet((i*SCALE), c);
      b.lazySet((i*SCALE), d);
    }
  }
  static void test_cp_alndst(AtomicIntegerArray a, AtomicIntegerArray b) {
    for (int i = 0; i < ARRLEN-ALIGN_OFF; i+=1) {
      a.lazySet((i+ALIGN_OFF), b.get(i));
    }
  }
  static void test_cp_alnsrc(AtomicIntegerArray a, AtomicIntegerArray b) {
    for (int i = 0; i < ARRLEN-ALIGN_OFF; i+=1) {
      a.lazySet(i, b.get(i+ALIGN_OFF));
    }
  }
  static void test_2ci_aln(AtomicIntegerArray a, AtomicIntegerArray b) {
    for (int i = 0; i < ARRLEN-ALIGN_OFF; i+=1) {
      a.lazySet((i+ALIGN_OFF), -123);
      b.lazySet(i, -103);
    }
  }
  static void test_2vi_aln(AtomicIntegerArray a, AtomicIntegerArray b, int c, int d) {
    for (int i = 0; i < ARRLEN-ALIGN_OFF; i+=1) {
      a.lazySet(i, c);
      b.lazySet((i+ALIGN_OFF), d);
    }
  }
  static void test_cp_unalndst(AtomicIntegerArray a, AtomicIntegerArray b) {
    for (int i = 0; i < ARRLEN-UNALIGN_OFF; i+=1) {
      a.lazySet((i+UNALIGN_OFF), b.get(i));
    }
  }
  static void test_cp_unalnsrc(AtomicIntegerArray a, AtomicIntegerArray b) {
    for (int i = 0; i < ARRLEN-UNALIGN_OFF; i+=1) {
      a.lazySet(i, b.get(i+UNALIGN_OFF));
    }
  }
  static void test_2ci_unaln(AtomicIntegerArray a, AtomicIntegerArray b) {
    for (int i = 0; i < ARRLEN-UNALIGN_OFF; i+=1) {
      a.lazySet((i+UNALIGN_OFF), -123);
      b.lazySet(i, -103);
    }
  }
  static void test_2vi_unaln(AtomicIntegerArray a, AtomicIntegerArray b, int c, int d) {
    for (int i = 0; i < ARRLEN-UNALIGN_OFF; i+=1) {
      a.lazySet(i, c);
      b.lazySet((i+UNALIGN_OFF), d);
    }
  }

  static int verify(String text, int i, int elem, int val) {
    if (elem != val) {
      System.err.println(text + "[" + i + "] = " + elem + " != " + val);
      return 1;
    }
    return 0;
  }
}
