/*
 * Copyright (c) 2019, 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 8235385
 * @summary Crash on aarch64 JDK due to long offset
 *
 * @modules jdk.unsupported/sun.misc
 * @run testng/othervm -Diters=20000 -XX:-TieredCompilation  compiler.unsafe.MisalignedAccesses
 */

package compiler.unsafe;

import org.testng.annotations.Test;

import java.lang.reflect.Field;

import static org.testng.Assert.*;

public class MisalignedAccesses {
    static final int ITERS = Integer.getInteger("iters", 1);

    static final sun.misc.Unsafe UNSAFE;

    static final long BYTE_ARRAY_OFFSET;

    static final byte[] byteArray = new byte[4096];

    static {
        try {
            Field f = sun.misc.Unsafe.class.getDeclaredField("theUnsafe");
            f.setAccessible(true);
            UNSAFE = (sun.misc.Unsafe) f.get(null);
        } catch (Exception e) {
            throw new RuntimeException("Unable to get Unsafe instance.", e);
        }
        BYTE_ARRAY_OFFSET = UNSAFE.arrayBaseOffset(byte[].class);
    }

    @Test
    static long testBytes() {
        long sum = 0;
        sum += UNSAFE.getByte(byteArray, 1 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getByte(byteArray, 38 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getByte(byteArray, 75 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getByte(byteArray, 112 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getByte(byteArray, 149 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getByte(byteArray, 186 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getByte(byteArray, 223 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getByte(byteArray, 260 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getByte(byteArray, 297 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getByte(byteArray, 334 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getByte(byteArray, 371 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getByte(byteArray, 408 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getByte(byteArray, 445 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getByte(byteArray, 482 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getByte(byteArray, 519 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getByte(byteArray, 556 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getByte(byteArray, 593 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getByte(byteArray, 630 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getByte(byteArray, 667 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getByte(byteArray, 704 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getByte(byteArray, 741 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getByte(byteArray, 778 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getByte(byteArray, 815 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getByte(byteArray, 852 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getByte(byteArray, 889 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getByte(byteArray, 926 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getByte(byteArray, 963 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getByte(byteArray, 1000 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getByte(byteArray, 1037 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getByte(byteArray, 1074 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getByte(byteArray, 1111 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getByte(byteArray, 1148 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getByte(byteArray, 1185 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getByte(byteArray, 1222 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getByte(byteArray, 1259 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getByte(byteArray, 1296 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getByte(byteArray, 1333 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getByte(byteArray, 1370 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getByte(byteArray, 1407 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getByte(byteArray, 1444 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getByte(byteArray, 1481 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getByte(byteArray, 1518 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getByte(byteArray, 1555 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getByte(byteArray, 1592 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getByte(byteArray, 1629 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getByte(byteArray, 1666 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getByte(byteArray, 1703 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getByte(byteArray, 1740 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getByte(byteArray, 1777 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getByte(byteArray, 1814 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getByte(byteArray, 1851 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getByte(byteArray, 1888 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getByte(byteArray, 1925 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getByte(byteArray, 1962 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getByte(byteArray, 1999 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getByte(byteArray, 2036 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getByte(byteArray, 2073 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getByte(byteArray, 2110 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getByte(byteArray, 2147 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getByte(byteArray, 2184 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getByte(byteArray, 2221 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getByte(byteArray, 2258 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getByte(byteArray, 2295 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getByte(byteArray, 2332 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getByte(byteArray, 2369 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getByte(byteArray, 2406 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getByte(byteArray, 2443 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getByte(byteArray, 2480 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getByte(byteArray, 2517 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getByte(byteArray, 2554 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getByte(byteArray, 2591 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getByte(byteArray, 2628 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getByte(byteArray, 2665 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getByte(byteArray, 2702 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getByte(byteArray, 2739 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getByte(byteArray, 2776 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getByte(byteArray, 2813 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getByte(byteArray, 2850 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getByte(byteArray, 2887 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getByte(byteArray, 2924 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getByte(byteArray, 2961 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getByte(byteArray, 2998 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getByte(byteArray, 3035 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getByte(byteArray, 3072 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getByte(byteArray, 3109 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getByte(byteArray, 3146 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getByte(byteArray, 3183 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getByte(byteArray, 3220 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getByte(byteArray, 3257 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getByte(byteArray, 3294 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getByte(byteArray, 3331 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getByte(byteArray, 3368 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getByte(byteArray, 3405 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getByte(byteArray, 3442 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getByte(byteArray, 3479 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getByte(byteArray, 3516 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getByte(byteArray, 3553 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getByte(byteArray, 3590 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getByte(byteArray, 3627 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getByte(byteArray, 3664 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getByte(byteArray, 3701 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getByte(byteArray, 3738 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getByte(byteArray, 3775 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getByte(byteArray, 3812 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getByte(byteArray, 3849 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getByte(byteArray, 3886 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getByte(byteArray, 3923 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getByte(byteArray, 3960 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getByte(byteArray, 3997 + BYTE_ARRAY_OFFSET);
        return sum;
    }

    @Test
    static long testShorts() {
        long sum = 0;
        sum += UNSAFE.getShort(byteArray, 1 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getShort(byteArray, 38 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getShort(byteArray, 75 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getShort(byteArray, 112 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getShort(byteArray, 149 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getShort(byteArray, 186 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getShort(byteArray, 223 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getShort(byteArray, 260 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getShort(byteArray, 297 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getShort(byteArray, 334 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getShort(byteArray, 371 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getShort(byteArray, 408 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getShort(byteArray, 445 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getShort(byteArray, 482 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getShort(byteArray, 519 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getShort(byteArray, 556 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getShort(byteArray, 593 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getShort(byteArray, 630 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getShort(byteArray, 667 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getShort(byteArray, 704 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getShort(byteArray, 741 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getShort(byteArray, 778 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getShort(byteArray, 815 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getShort(byteArray, 852 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getShort(byteArray, 889 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getShort(byteArray, 926 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getShort(byteArray, 963 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getShort(byteArray, 1000 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getShort(byteArray, 1037 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getShort(byteArray, 1074 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getShort(byteArray, 1111 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getShort(byteArray, 1148 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getShort(byteArray, 1185 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getShort(byteArray, 1222 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getShort(byteArray, 1259 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getShort(byteArray, 1296 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getShort(byteArray, 1333 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getShort(byteArray, 1370 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getShort(byteArray, 1407 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getShort(byteArray, 1444 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getShort(byteArray, 1481 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getShort(byteArray, 1518 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getShort(byteArray, 1555 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getShort(byteArray, 1592 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getShort(byteArray, 1629 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getShort(byteArray, 1666 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getShort(byteArray, 1703 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getShort(byteArray, 1740 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getShort(byteArray, 1777 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getShort(byteArray, 1814 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getShort(byteArray, 1851 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getShort(byteArray, 1888 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getShort(byteArray, 1925 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getShort(byteArray, 1962 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getShort(byteArray, 1999 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getShort(byteArray, 2036 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getShort(byteArray, 2073 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getShort(byteArray, 2110 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getShort(byteArray, 2147 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getShort(byteArray, 2184 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getShort(byteArray, 2221 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getShort(byteArray, 2258 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getShort(byteArray, 2295 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getShort(byteArray, 2332 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getShort(byteArray, 2369 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getShort(byteArray, 2406 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getShort(byteArray, 2443 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getShort(byteArray, 2480 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getShort(byteArray, 2517 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getShort(byteArray, 2554 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getShort(byteArray, 2591 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getShort(byteArray, 2628 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getShort(byteArray, 2665 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getShort(byteArray, 2702 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getShort(byteArray, 2739 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getShort(byteArray, 2776 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getShort(byteArray, 2813 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getShort(byteArray, 2850 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getShort(byteArray, 2887 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getShort(byteArray, 2924 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getShort(byteArray, 2961 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getShort(byteArray, 2998 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getShort(byteArray, 3035 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getShort(byteArray, 3072 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getShort(byteArray, 3109 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getShort(byteArray, 3146 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getShort(byteArray, 3183 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getShort(byteArray, 3220 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getShort(byteArray, 3257 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getShort(byteArray, 3294 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getShort(byteArray, 3331 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getShort(byteArray, 3368 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getShort(byteArray, 3405 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getShort(byteArray, 3442 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getShort(byteArray, 3479 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getShort(byteArray, 3516 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getShort(byteArray, 3553 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getShort(byteArray, 3590 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getShort(byteArray, 3627 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getShort(byteArray, 3664 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getShort(byteArray, 3701 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getShort(byteArray, 3738 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getShort(byteArray, 3775 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getShort(byteArray, 3812 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getShort(byteArray, 3849 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getShort(byteArray, 3886 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getShort(byteArray, 3923 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getShort(byteArray, 3960 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getShort(byteArray, 3997 + BYTE_ARRAY_OFFSET);
        return sum;
    }

    @Test
    static long testInts() {
        long sum = 0;
        sum += UNSAFE.getInt(byteArray, 1 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getInt(byteArray, 38 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getInt(byteArray, 75 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getInt(byteArray, 112 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getInt(byteArray, 149 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getInt(byteArray, 186 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getInt(byteArray, 223 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getInt(byteArray, 260 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getInt(byteArray, 297 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getInt(byteArray, 334 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getInt(byteArray, 371 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getInt(byteArray, 408 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getInt(byteArray, 445 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getInt(byteArray, 482 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getInt(byteArray, 519 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getInt(byteArray, 556 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getInt(byteArray, 593 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getInt(byteArray, 630 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getInt(byteArray, 667 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getInt(byteArray, 704 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getInt(byteArray, 741 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getInt(byteArray, 778 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getInt(byteArray, 815 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getInt(byteArray, 852 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getInt(byteArray, 889 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getInt(byteArray, 926 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getInt(byteArray, 963 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getInt(byteArray, 1000 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getInt(byteArray, 1037 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getInt(byteArray, 1074 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getInt(byteArray, 1111 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getInt(byteArray, 1148 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getInt(byteArray, 1185 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getInt(byteArray, 1222 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getInt(byteArray, 1259 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getInt(byteArray, 1296 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getInt(byteArray, 1333 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getInt(byteArray, 1370 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getInt(byteArray, 1407 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getInt(byteArray, 1444 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getInt(byteArray, 1481 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getInt(byteArray, 1518 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getInt(byteArray, 1555 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getInt(byteArray, 1592 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getInt(byteArray, 1629 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getInt(byteArray, 1666 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getInt(byteArray, 1703 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getInt(byteArray, 1740 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getInt(byteArray, 1777 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getInt(byteArray, 1814 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getInt(byteArray, 1851 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getInt(byteArray, 1888 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getInt(byteArray, 1925 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getInt(byteArray, 1962 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getInt(byteArray, 1999 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getInt(byteArray, 2036 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getInt(byteArray, 2073 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getInt(byteArray, 2110 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getInt(byteArray, 2147 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getInt(byteArray, 2184 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getInt(byteArray, 2221 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getInt(byteArray, 2258 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getInt(byteArray, 2295 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getInt(byteArray, 2332 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getInt(byteArray, 2369 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getInt(byteArray, 2406 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getInt(byteArray, 2443 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getInt(byteArray, 2480 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getInt(byteArray, 2517 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getInt(byteArray, 2554 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getInt(byteArray, 2591 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getInt(byteArray, 2628 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getInt(byteArray, 2665 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getInt(byteArray, 2702 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getInt(byteArray, 2739 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getInt(byteArray, 2776 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getInt(byteArray, 2813 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getInt(byteArray, 2850 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getInt(byteArray, 2887 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getInt(byteArray, 2924 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getInt(byteArray, 2961 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getInt(byteArray, 2998 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getInt(byteArray, 3035 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getInt(byteArray, 3072 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getInt(byteArray, 3109 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getInt(byteArray, 3146 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getInt(byteArray, 3183 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getInt(byteArray, 3220 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getInt(byteArray, 3257 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getInt(byteArray, 3294 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getInt(byteArray, 3331 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getInt(byteArray, 3368 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getInt(byteArray, 3405 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getInt(byteArray, 3442 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getInt(byteArray, 3479 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getInt(byteArray, 3516 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getInt(byteArray, 3553 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getInt(byteArray, 3590 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getInt(byteArray, 3627 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getInt(byteArray, 3664 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getInt(byteArray, 3701 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getInt(byteArray, 3738 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getInt(byteArray, 3775 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getInt(byteArray, 3812 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getInt(byteArray, 3849 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getInt(byteArray, 3886 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getInt(byteArray, 3923 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getInt(byteArray, 3960 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getInt(byteArray, 3997 + BYTE_ARRAY_OFFSET);
        return sum;
    }

    @Test
    static long testLongs() {
        long sum = 0;
        sum += UNSAFE.getLong(byteArray, 1 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getLong(byteArray, 38 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getLong(byteArray, 75 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getLong(byteArray, 112 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getLong(byteArray, 149 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getLong(byteArray, 186 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getLong(byteArray, 223 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getLong(byteArray, 260 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getLong(byteArray, 297 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getLong(byteArray, 334 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getLong(byteArray, 371 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getLong(byteArray, 408 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getLong(byteArray, 445 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getLong(byteArray, 482 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getLong(byteArray, 519 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getLong(byteArray, 556 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getLong(byteArray, 593 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getLong(byteArray, 630 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getLong(byteArray, 667 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getLong(byteArray, 704 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getLong(byteArray, 741 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getLong(byteArray, 778 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getLong(byteArray, 815 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getLong(byteArray, 852 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getLong(byteArray, 889 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getLong(byteArray, 926 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getLong(byteArray, 963 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getLong(byteArray, 1000 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getLong(byteArray, 1037 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getLong(byteArray, 1074 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getLong(byteArray, 1111 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getLong(byteArray, 1148 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getLong(byteArray, 1185 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getLong(byteArray, 1222 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getLong(byteArray, 1259 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getLong(byteArray, 1296 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getLong(byteArray, 1333 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getLong(byteArray, 1370 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getLong(byteArray, 1407 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getLong(byteArray, 1444 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getLong(byteArray, 1481 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getLong(byteArray, 1518 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getLong(byteArray, 1555 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getLong(byteArray, 1592 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getLong(byteArray, 1629 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getLong(byteArray, 1666 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getLong(byteArray, 1703 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getLong(byteArray, 1740 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getLong(byteArray, 1777 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getLong(byteArray, 1814 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getLong(byteArray, 1851 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getLong(byteArray, 1888 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getLong(byteArray, 1925 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getLong(byteArray, 1962 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getLong(byteArray, 1999 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getLong(byteArray, 2036 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getLong(byteArray, 2073 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getLong(byteArray, 2110 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getLong(byteArray, 2147 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getLong(byteArray, 2184 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getLong(byteArray, 2221 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getLong(byteArray, 2258 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getLong(byteArray, 2295 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getLong(byteArray, 2332 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getLong(byteArray, 2369 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getLong(byteArray, 2406 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getLong(byteArray, 2443 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getLong(byteArray, 2480 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getLong(byteArray, 2517 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getLong(byteArray, 2554 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getLong(byteArray, 2591 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getLong(byteArray, 2628 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getLong(byteArray, 2665 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getLong(byteArray, 2702 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getLong(byteArray, 2739 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getLong(byteArray, 2776 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getLong(byteArray, 2813 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getLong(byteArray, 2850 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getLong(byteArray, 2887 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getLong(byteArray, 2924 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getLong(byteArray, 2961 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getLong(byteArray, 2998 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getLong(byteArray, 3035 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getLong(byteArray, 3072 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getLong(byteArray, 3109 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getLong(byteArray, 3146 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getLong(byteArray, 3183 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getLong(byteArray, 3220 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getLong(byteArray, 3257 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getLong(byteArray, 3294 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getLong(byteArray, 3331 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getLong(byteArray, 3368 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getLong(byteArray, 3405 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getLong(byteArray, 3442 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getLong(byteArray, 3479 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getLong(byteArray, 3516 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getLong(byteArray, 3553 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getLong(byteArray, 3590 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getLong(byteArray, 3627 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getLong(byteArray, 3664 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getLong(byteArray, 3701 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getLong(byteArray, 3738 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getLong(byteArray, 3775 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getLong(byteArray, 3812 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getLong(byteArray, 3849 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getLong(byteArray, 3886 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getLong(byteArray, 3923 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getLong(byteArray, 3960 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getLong(byteArray, 3997 + BYTE_ARRAY_OFFSET);
        return sum;
    }

    @Test
    static long testFloats() {
        long sum = 0;
        sum += UNSAFE.getFloat(byteArray, 1 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getFloat(byteArray, 38 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getFloat(byteArray, 75 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getFloat(byteArray, 112 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getFloat(byteArray, 149 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getFloat(byteArray, 186 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getFloat(byteArray, 223 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getFloat(byteArray, 260 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getFloat(byteArray, 297 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getFloat(byteArray, 334 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getFloat(byteArray, 371 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getFloat(byteArray, 408 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getFloat(byteArray, 445 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getFloat(byteArray, 482 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getFloat(byteArray, 519 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getFloat(byteArray, 556 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getFloat(byteArray, 593 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getFloat(byteArray, 630 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getFloat(byteArray, 667 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getFloat(byteArray, 704 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getFloat(byteArray, 741 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getFloat(byteArray, 778 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getFloat(byteArray, 815 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getFloat(byteArray, 852 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getFloat(byteArray, 889 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getFloat(byteArray, 926 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getFloat(byteArray, 963 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getFloat(byteArray, 1000 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getFloat(byteArray, 1037 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getFloat(byteArray, 1074 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getFloat(byteArray, 1111 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getFloat(byteArray, 1148 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getFloat(byteArray, 1185 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getFloat(byteArray, 1222 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getFloat(byteArray, 1259 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getFloat(byteArray, 1296 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getFloat(byteArray, 1333 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getFloat(byteArray, 1370 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getFloat(byteArray, 1407 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getFloat(byteArray, 1444 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getFloat(byteArray, 1481 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getFloat(byteArray, 1518 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getFloat(byteArray, 1555 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getFloat(byteArray, 1592 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getFloat(byteArray, 1629 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getFloat(byteArray, 1666 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getFloat(byteArray, 1703 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getFloat(byteArray, 1740 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getFloat(byteArray, 1777 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getFloat(byteArray, 1814 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getFloat(byteArray, 1851 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getFloat(byteArray, 1888 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getFloat(byteArray, 1925 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getFloat(byteArray, 1962 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getFloat(byteArray, 1999 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getFloat(byteArray, 2036 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getFloat(byteArray, 2073 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getFloat(byteArray, 2110 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getFloat(byteArray, 2147 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getFloat(byteArray, 2184 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getFloat(byteArray, 2221 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getFloat(byteArray, 2258 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getFloat(byteArray, 2295 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getFloat(byteArray, 2332 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getFloat(byteArray, 2369 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getFloat(byteArray, 2406 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getFloat(byteArray, 2443 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getFloat(byteArray, 2480 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getFloat(byteArray, 2517 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getFloat(byteArray, 2554 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getFloat(byteArray, 2591 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getFloat(byteArray, 2628 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getFloat(byteArray, 2665 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getFloat(byteArray, 2702 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getFloat(byteArray, 2739 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getFloat(byteArray, 2776 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getFloat(byteArray, 2813 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getFloat(byteArray, 2850 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getFloat(byteArray, 2887 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getFloat(byteArray, 2924 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getFloat(byteArray, 2961 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getFloat(byteArray, 2998 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getFloat(byteArray, 3035 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getFloat(byteArray, 3072 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getFloat(byteArray, 3109 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getFloat(byteArray, 3146 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getFloat(byteArray, 3183 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getFloat(byteArray, 3220 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getFloat(byteArray, 3257 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getFloat(byteArray, 3294 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getFloat(byteArray, 3331 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getFloat(byteArray, 3368 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getFloat(byteArray, 3405 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getFloat(byteArray, 3442 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getFloat(byteArray, 3479 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getFloat(byteArray, 3516 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getFloat(byteArray, 3553 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getFloat(byteArray, 3590 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getFloat(byteArray, 3627 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getFloat(byteArray, 3664 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getFloat(byteArray, 3701 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getFloat(byteArray, 3738 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getFloat(byteArray, 3775 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getFloat(byteArray, 3812 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getFloat(byteArray, 3849 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getFloat(byteArray, 3886 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getFloat(byteArray, 3923 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getFloat(byteArray, 3960 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getFloat(byteArray, 3997 + BYTE_ARRAY_OFFSET);
        return sum;
    }

    @Test
    static long testDoubles() {
        long sum = 0;
        sum += UNSAFE.getDouble(byteArray, 1 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getDouble(byteArray, 38 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getDouble(byteArray, 75 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getDouble(byteArray, 112 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getDouble(byteArray, 149 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getDouble(byteArray, 186 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getDouble(byteArray, 223 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getDouble(byteArray, 260 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getDouble(byteArray, 297 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getDouble(byteArray, 334 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getDouble(byteArray, 371 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getDouble(byteArray, 408 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getDouble(byteArray, 445 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getDouble(byteArray, 482 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getDouble(byteArray, 519 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getDouble(byteArray, 556 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getDouble(byteArray, 593 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getDouble(byteArray, 630 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getDouble(byteArray, 667 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getDouble(byteArray, 704 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getDouble(byteArray, 741 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getDouble(byteArray, 778 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getDouble(byteArray, 815 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getDouble(byteArray, 852 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getDouble(byteArray, 889 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getDouble(byteArray, 926 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getDouble(byteArray, 963 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getDouble(byteArray, 1000 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getDouble(byteArray, 1037 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getDouble(byteArray, 1074 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getDouble(byteArray, 1111 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getDouble(byteArray, 1148 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getDouble(byteArray, 1185 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getDouble(byteArray, 1222 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getDouble(byteArray, 1259 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getDouble(byteArray, 1296 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getDouble(byteArray, 1333 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getDouble(byteArray, 1370 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getDouble(byteArray, 1407 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getDouble(byteArray, 1444 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getDouble(byteArray, 1481 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getDouble(byteArray, 1518 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getDouble(byteArray, 1555 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getDouble(byteArray, 1592 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getDouble(byteArray, 1629 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getDouble(byteArray, 1666 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getDouble(byteArray, 1703 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getDouble(byteArray, 1740 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getDouble(byteArray, 1777 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getDouble(byteArray, 1814 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getDouble(byteArray, 1851 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getDouble(byteArray, 1888 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getDouble(byteArray, 1925 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getDouble(byteArray, 1962 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getDouble(byteArray, 1999 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getDouble(byteArray, 2036 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getDouble(byteArray, 2073 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getDouble(byteArray, 2110 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getDouble(byteArray, 2147 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getDouble(byteArray, 2184 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getDouble(byteArray, 2221 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getDouble(byteArray, 2258 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getDouble(byteArray, 2295 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getDouble(byteArray, 2332 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getDouble(byteArray, 2369 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getDouble(byteArray, 2406 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getDouble(byteArray, 2443 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getDouble(byteArray, 2480 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getDouble(byteArray, 2517 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getDouble(byteArray, 2554 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getDouble(byteArray, 2591 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getDouble(byteArray, 2628 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getDouble(byteArray, 2665 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getDouble(byteArray, 2702 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getDouble(byteArray, 2739 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getDouble(byteArray, 2776 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getDouble(byteArray, 2813 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getDouble(byteArray, 2850 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getDouble(byteArray, 2887 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getDouble(byteArray, 2924 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getDouble(byteArray, 2961 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getDouble(byteArray, 2998 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getDouble(byteArray, 3035 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getDouble(byteArray, 3072 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getDouble(byteArray, 3109 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getDouble(byteArray, 3146 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getDouble(byteArray, 3183 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getDouble(byteArray, 3220 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getDouble(byteArray, 3257 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getDouble(byteArray, 3294 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getDouble(byteArray, 3331 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getDouble(byteArray, 3368 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getDouble(byteArray, 3405 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getDouble(byteArray, 3442 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getDouble(byteArray, 3479 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getDouble(byteArray, 3516 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getDouble(byteArray, 3553 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getDouble(byteArray, 3590 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getDouble(byteArray, 3627 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getDouble(byteArray, 3664 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getDouble(byteArray, 3701 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getDouble(byteArray, 3738 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getDouble(byteArray, 3775 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getDouble(byteArray, 3812 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getDouble(byteArray, 3849 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getDouble(byteArray, 3886 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getDouble(byteArray, 3923 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getDouble(byteArray, 3960 + BYTE_ARRAY_OFFSET);
        sum += UNSAFE.getDouble(byteArray, 3997 + BYTE_ARRAY_OFFSET);
        return sum;
    }


    static volatile long result;

    public static void main(String[] args) {
        for (int i = 0; i < ITERS; i++) {
            result += testBytes();
            result += testShorts();
            result += testInts();
            result += testLongs();
            result += testFloats();
            result += testDoubles();
        }
    }
}