test/jdk/java/nio/Buffer/EqualsCompareTest.java
author psandoz
Wed, 20 Dec 2017 09:14:52 -0800
changeset 48356 29e165bdf669
child 49282 271ef464fb3a
permissions -rw-r--r--
8193085: Vectorize the nio Buffer equals and compareTo implementations Reviewed-by: alanb
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
48356
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
     1
/*
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
     2
 * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
     3
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
     4
 *
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
     5
 * This code is free software; you can redistribute it and/or modify it
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
     6
 * under the terms of the GNU General Public License version 2 only, as
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
     7
 * published by the Free Software Foundation.
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
     8
 *
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
     9
 * This code is distributed in the hope that it will be useful, but WITHOUT
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
    10
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
    11
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
    12
 * version 2 for more details (a copy is included in the LICENSE file that
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
    13
 * accompanied this code).
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
    14
 *
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
    15
 * You should have received a copy of the GNU General Public License version
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
    16
 * 2 along with this work; if not, write to the Free Software Foundation,
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
    17
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
    18
 *
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
    19
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
    20
 * or visit www.oracle.com if you need additional information or have any
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
    21
 * questions.
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
    22
 */
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
    23
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
    24
import org.testng.Assert;
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
    25
import org.testng.annotations.DataProvider;
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
    26
import org.testng.annotations.Test;
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
    27
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
    28
import java.lang.invoke.MethodHandle;
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
    29
import java.lang.invoke.MethodHandles;
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
    30
import java.lang.invoke.MethodType;
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
    31
import java.nio.Buffer;
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
    32
import java.nio.ByteBuffer;
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
    33
import java.nio.ByteOrder;
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
    34
import java.nio.CharBuffer;
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
    35
import java.nio.DoubleBuffer;
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
    36
import java.nio.FloatBuffer;
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
    37
import java.nio.IntBuffer;
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
    38
import java.nio.LongBuffer;
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
    39
import java.nio.ShortBuffer;
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
    40
import java.util.HashMap;
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
    41
import java.util.Map;
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
    42
import java.util.function.BiFunction;
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
    43
import java.util.function.LongFunction;
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
    44
import java.util.stream.IntStream;
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
    45
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
    46
/*
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
    47
 * @test
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
    48
 * @bug 8193085
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
    49
 * @summary tests for buffer equals and compare
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
    50
 * @run testng EqualsCompareTest
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
    51
 */
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
    52
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
    53
public class EqualsCompareTest {
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
    54
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
    55
    // Maximum width in bits
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
    56
    static final int MAX_WIDTH = 512;
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
    57
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
    58
    static final Map<Class, Integer> typeToWidth;
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
    59
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
    60
    static {
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
    61
        typeToWidth = new HashMap<>();
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
    62
        typeToWidth.put(byte.class, Byte.SIZE);
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
    63
        typeToWidth.put(short.class, Short.SIZE);
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
    64
        typeToWidth.put(char.class, Character.SIZE);
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
    65
        typeToWidth.put(int.class, Integer.SIZE);
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
    66
        typeToWidth.put(long.class, Long.SIZE);
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
    67
        typeToWidth.put(float.class, Float.SIZE);
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
    68
        typeToWidth.put(double.class, Double.SIZE);
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
    69
    }
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
    70
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
    71
    static int arraySizeFor(Class<?> type) {
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
    72
        assert type.isPrimitive();
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
    73
        return 4 * MAX_WIDTH / typeToWidth.get(type);
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
    74
    }
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
    75
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
    76
    enum BufferKind {
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
    77
        HEAP,
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
    78
        HEAP_VIEW,
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
    79
        DIRECT;
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
    80
    }
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
    81
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
    82
    static abstract class BufferType<T extends Buffer, E> {
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
    83
        final BufferKind k;
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
    84
        final Class<?> bufferType;
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
    85
        final Class<?> elementType;
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
    86
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
    87
        final MethodHandle eq;
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
    88
        final MethodHandle cmp;
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
    89
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
    90
        final MethodHandle getter;
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
    91
        final MethodHandle setter;
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
    92
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
    93
        BufferType(BufferKind k, Class<T> bufferType, Class<?> elementType) {
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
    94
            this.k = k;
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
    95
            this.bufferType = bufferType;
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
    96
            this.elementType = elementType;
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
    97
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
    98
            var lookup = MethodHandles.lookup();
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
    99
            try {
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   100
                eq = lookup.findVirtual(bufferType, "equals", MethodType.methodType(boolean.class, Object.class));
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   101
                cmp = lookup.findVirtual(bufferType, "compareTo", MethodType.methodType(int.class, bufferType));
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   102
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   103
                getter = lookup.findVirtual(bufferType, "get", MethodType.methodType(elementType, int.class));
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   104
                setter = lookup.findVirtual(bufferType, "put", MethodType.methodType(bufferType, int.class, elementType));
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   105
            }
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   106
            catch (Exception e) {
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   107
                throw new AssertionError(e);
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   108
            }
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   109
        }
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   110
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   111
        @Override
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   112
        public String toString() {
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   113
            return bufferType.getName() + " " + k;
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   114
        }
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   115
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   116
        T construct(int length) {
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   117
            return construct(length, ByteOrder.BIG_ENDIAN);
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   118
        }
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   119
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   120
        abstract T construct(int length, ByteOrder bo);
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   121
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   122
        @SuppressWarnings("unchecked")
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   123
        T slice(T a, int from, int to) {
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   124
            return (T) a.position(from).limit(to).slice();
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   125
        }
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   126
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   127
        @SuppressWarnings("unchecked")
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   128
        E get(T a, int i) {
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   129
            try {
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   130
                return (E) getter.invoke(a, i);
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   131
            }
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   132
            catch (RuntimeException | Error e) {
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   133
                throw e;
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   134
            }
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   135
            catch (Throwable t) {
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   136
                throw new Error(t);
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   137
            }
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   138
        }
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   139
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   140
        void set(T a, int i, Object v) {
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   141
            try {
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   142
                setter.invoke(a, i, convert(v));
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   143
            }
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   144
            catch (RuntimeException | Error e) {
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   145
                throw e;
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   146
            }
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   147
            catch (Throwable t) {
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   148
                throw new Error(t);
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   149
            }
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   150
        }
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   151
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   152
        abstract Object convert(Object o);
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   153
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   154
        boolean equals(T a, T b) {
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   155
            try {
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   156
                return (boolean) eq.invoke(a, b);
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   157
            }
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   158
            catch (RuntimeException | Error e) {
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   159
                throw e;
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   160
            }
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   161
            catch (Throwable t) {
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   162
                throw new Error(t);
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   163
            }
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   164
        }
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   165
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   166
        int compare(T a, T b) {
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   167
            try {
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   168
                return (int) cmp.invoke(a, b);
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   169
            }
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   170
            catch (RuntimeException | Error e) {
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   171
                throw e;
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   172
            }
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   173
            catch (Throwable t) {
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   174
                throw new Error(t);
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   175
            }
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   176
        }
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   177
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   178
        boolean pairWiseEquals(T a, T b) {
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   179
            if (a.remaining() != b.remaining())
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   180
                return false;
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   181
            int p = a.position();
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   182
            for (int i = a.limit() - 1, j = b.limit() - 1; i >= p; i--, j--)
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   183
                if (!get(a, i).equals(get(b, j)))
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   184
                    return false;
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   185
            return true;
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   186
        }
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   187
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   188
        static class Bytes extends BufferType<ByteBuffer, Byte> {
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   189
            Bytes(BufferKind k) {
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   190
                super(k, ByteBuffer.class, byte.class);
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   191
            }
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   192
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   193
            @Override
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   194
            ByteBuffer construct(int length, ByteOrder bo) {
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   195
                switch (k) {
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   196
                    case DIRECT:
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   197
                        return ByteBuffer.allocateDirect(length).order(bo);
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   198
                    default:
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   199
                    case HEAP_VIEW:
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   200
                    case HEAP:
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   201
                        return ByteBuffer.allocate(length).order(bo);
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   202
                }
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   203
            }
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   204
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   205
            @Override
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   206
            Object convert(Object o) {
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   207
                return o instanceof Integer
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   208
                       ? ((Integer) o).byteValue()
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   209
                       : o;
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   210
            }
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   211
        }
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   212
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   213
        static class Chars extends BufferType<CharBuffer, Character> {
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   214
            Chars(BufferKind k) {
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   215
                super(k, CharBuffer.class, char.class);
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   216
            }
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   217
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   218
            @Override
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   219
            CharBuffer construct(int length, ByteOrder bo) {
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   220
                switch (k) {
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   221
                    case DIRECT:
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   222
                        return ByteBuffer.allocateDirect(length * Character.BYTES).
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   223
                                order(bo).
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   224
                                asCharBuffer();
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   225
                    case HEAP_VIEW:
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   226
                        return ByteBuffer.allocate(length * Character.BYTES).
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   227
                                order(bo).
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   228
                                asCharBuffer();
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   229
                    default:
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   230
                    case HEAP:
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   231
                        return CharBuffer.allocate(length);
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   232
                }
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   233
            }
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   234
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   235
            @Override
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   236
            Object convert(Object o) {
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   237
                return o instanceof Integer
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   238
                       ? (char) ((Integer) o).intValue()
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   239
                       : o;
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   240
            }
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   241
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   242
            CharBuffer transformToStringBuffer(CharBuffer c) {
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   243
                char[] chars = new char[c.remaining()];
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   244
                c.get(chars);
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   245
                return CharBuffer.wrap(new String(chars));
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   246
            }
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   247
        }
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   248
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   249
        static class Shorts extends BufferType<ShortBuffer, Short> {
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   250
            Shorts(BufferKind k) {
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   251
                super(k, ShortBuffer.class, short.class);
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   252
            }
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   253
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   254
            @Override
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   255
            ShortBuffer construct(int length, ByteOrder bo) {
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   256
                switch (k) {
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   257
                    case DIRECT:
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   258
                        return ByteBuffer.allocateDirect(length * Short.BYTES).
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   259
                                order(bo).
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   260
                                asShortBuffer();
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   261
                    case HEAP_VIEW:
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   262
                        return ByteBuffer.allocate(length * Short.BYTES).
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   263
                                order(bo).
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   264
                                asShortBuffer();
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   265
                    default:
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   266
                    case HEAP:
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   267
                        return ShortBuffer.allocate(length);
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   268
                }
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   269
            }
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   270
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   271
            @Override
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   272
            Object convert(Object o) {
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   273
                return o instanceof Integer
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   274
                       ? ((Integer) o).shortValue()
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   275
                       : o;
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   276
            }
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   277
        }
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   278
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   279
        static class Ints extends BufferType<IntBuffer, Integer> {
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   280
            Ints(BufferKind k) {
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   281
                super(k, IntBuffer.class, int.class);
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   282
            }
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   283
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   284
            @Override
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   285
            IntBuffer construct(int length, ByteOrder bo) {
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   286
                switch (k) {
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   287
                    case DIRECT:
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   288
                        return ByteBuffer.allocateDirect(length * Integer.BYTES).
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   289
                                order(bo).
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   290
                                asIntBuffer();
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   291
                    case HEAP_VIEW:
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   292
                        return ByteBuffer.allocate(length * Integer.BYTES).
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   293
                                order(bo).
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   294
                                asIntBuffer();
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   295
                    default:
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   296
                    case HEAP:
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   297
                        return IntBuffer.allocate(length);
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   298
                }
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   299
            }
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   300
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   301
            Object convert(Object o) {
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   302
                return o;
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   303
            }
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   304
        }
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   305
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   306
        static class Floats extends BufferType<FloatBuffer, Float> {
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   307
            Floats(BufferKind k) {
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   308
                super(k, FloatBuffer.class, float.class);
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   309
            }
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   310
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   311
            @Override
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   312
            FloatBuffer construct(int length, ByteOrder bo) {
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   313
                switch (k) {
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   314
                    case DIRECT:
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   315
                        return ByteBuffer.allocateDirect(length * Float.BYTES).
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   316
                                order(bo).
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   317
                                asFloatBuffer();
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   318
                    case HEAP_VIEW:
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   319
                        return ByteBuffer.allocate(length * Float.BYTES).
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   320
                                order(bo).
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   321
                                asFloatBuffer();
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   322
                    default:
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   323
                    case HEAP:
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   324
                        return FloatBuffer.allocate(length);
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   325
                }
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   326
            }
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   327
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   328
            @Override
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   329
            Object convert(Object o) {
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   330
                return o instanceof Integer
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   331
                       ? ((Integer) o).floatValue()
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   332
                       : o;
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   333
            }
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   334
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   335
            @Override
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   336
            boolean pairWiseEquals(FloatBuffer a, FloatBuffer b) {
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   337
                if (a.remaining() != b.remaining())
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   338
                    return false;
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   339
                int p = a.position();
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   340
                for (int i = a.limit() - 1, j = b.limit() - 1; i >= p; i--, j--) {
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   341
                    float av = a.get(i);
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   342
                    float bv = b.get(j);
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   343
                    if (av != bv && (!Float.isNaN(av) || !Float.isNaN(bv)))
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   344
                        return false;
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   345
                }
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   346
                return true;
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   347
            }
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   348
        }
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   349
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   350
        static class Longs extends BufferType<LongBuffer, Long> {
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   351
            Longs(BufferKind k) {
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   352
                super(k, LongBuffer.class, long.class);
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   353
            }
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   354
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   355
            @Override
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   356
            LongBuffer construct(int length, ByteOrder bo) {
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   357
                switch (k) {
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   358
                    case DIRECT:
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   359
                        return ByteBuffer.allocateDirect(length * Long.BYTES).
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   360
                                order(bo).
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   361
                                asLongBuffer();
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   362
                    case HEAP_VIEW:
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   363
                        return ByteBuffer.allocate(length * Long.BYTES).
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   364
                                order(bo).
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   365
                                asLongBuffer();
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   366
                    default:
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   367
                    case HEAP:
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   368
                        return LongBuffer.allocate(length);
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   369
                }
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   370
            }
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   371
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   372
            @Override
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   373
            Object convert(Object o) {
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   374
                return o instanceof Integer
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   375
                       ? ((Integer) o).longValue()
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   376
                       : o;
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   377
            }
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   378
        }
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   379
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   380
        static class Doubles extends BufferType<DoubleBuffer, Double> {
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   381
            Doubles(BufferKind k) {
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   382
                super(k, DoubleBuffer.class, double.class);
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   383
            }
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   384
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   385
            @Override
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   386
            DoubleBuffer construct(int length, ByteOrder bo) {
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   387
                switch (k) {
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   388
                    case DIRECT:
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   389
                        return ByteBuffer.allocateDirect(length * Double.BYTES).
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   390
                                order(bo).
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   391
                                asDoubleBuffer();
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   392
                    case HEAP_VIEW:
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   393
                        return ByteBuffer.allocate(length * Double.BYTES).
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   394
                                order(bo).
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   395
                                asDoubleBuffer();
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   396
                    default:
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   397
                    case HEAP:
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   398
                        return DoubleBuffer.allocate(length);
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   399
                }
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   400
            }
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   401
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   402
            @Override
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   403
            Object convert(Object o) {
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   404
                return o instanceof Integer
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   405
                       ? ((Integer) o).doubleValue()
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   406
                       : o;
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   407
            }
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   408
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   409
            @Override
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   410
            boolean pairWiseEquals(DoubleBuffer a, DoubleBuffer b) {
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   411
                if (a.remaining() != b.remaining())
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   412
                    return false;
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   413
                int p = a.position();
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   414
                for (int i = a.limit() - 1, j = b.limit() - 1; i >= p; i--, j--) {
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   415
                    double av = a.get(i);
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   416
                    double bv = b.get(j);
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   417
                    if (av != bv && (!Double.isNaN(av) || !Double.isNaN(bv)))
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   418
                        return false;
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   419
                }
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   420
                return true;
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   421
            }
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   422
        }
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   423
    }
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   424
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   425
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   426
    static Object[][] bufferTypes;
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   427
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   428
    @DataProvider
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   429
    public static Object[][] bufferTypesProvider() {
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   430
        if (bufferTypes == null) {
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   431
            bufferTypes = new Object[][]{
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   432
                    {new BufferType.Bytes(BufferKind.HEAP)},
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   433
                    {new BufferType.Bytes(BufferKind.DIRECT)},
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   434
                    {new BufferType.Chars(BufferKind.HEAP)},
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   435
                    {new BufferType.Chars(BufferKind.HEAP_VIEW)},
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   436
                    {new BufferType.Chars(BufferKind.DIRECT)},
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   437
                    {new BufferType.Shorts(BufferKind.HEAP)},
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   438
                    {new BufferType.Shorts(BufferKind.HEAP_VIEW)},
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   439
                    {new BufferType.Shorts(BufferKind.DIRECT)},
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   440
                    {new BufferType.Ints(BufferKind.HEAP)},
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   441
                    {new BufferType.Ints(BufferKind.HEAP_VIEW)},
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   442
                    {new BufferType.Ints(BufferKind.DIRECT)},
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   443
                    {new BufferType.Floats(BufferKind.HEAP)},
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   444
                    {new BufferType.Floats(BufferKind.HEAP_VIEW)},
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   445
                    {new BufferType.Floats(BufferKind.DIRECT)},
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   446
                    {new BufferType.Longs(BufferKind.HEAP)},
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   447
                    {new BufferType.Longs(BufferKind.HEAP_VIEW)},
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   448
                    {new BufferType.Longs(BufferKind.DIRECT)},
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   449
                    {new BufferType.Doubles(BufferKind.HEAP)},
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   450
                    {new BufferType.Doubles(BufferKind.HEAP_VIEW)},
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   451
                    {new BufferType.Doubles(BufferKind.DIRECT)},
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   452
            };
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   453
        }
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   454
        return bufferTypes;
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   455
    }
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   456
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   457
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   458
    static Object[][] floatbufferTypes;
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   459
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   460
    @DataProvider
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   461
    public static Object[][] floatBufferTypesProvider() {
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   462
        if (floatbufferTypes == null) {
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   463
            LongFunction<Object> bTof = rb -> Float.intBitsToFloat((int) rb);
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   464
            LongFunction<Object> bToD = Double::longBitsToDouble;
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   465
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   466
            floatbufferTypes = new Object[][]{
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   467
                    // canonical and non-canonical NaNs
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   468
                    // If conversion is a signalling NaN it may be subject to conversion to a
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   469
                    // quiet NaN on some processors, even if a copy is performed
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   470
                    // The tests assume that if conversion occurs it does not convert to the
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   471
                    // canonical NaN
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   472
                    new Object[]{new BufferType.Floats(BufferKind.HEAP), 0x7fc00000L, 0x7f800001L, bTof},
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   473
                    new Object[]{new BufferType.Floats(BufferKind.HEAP_VIEW), 0x7fc00000L, 0x7f800001L, bTof},
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   474
                    new Object[]{new BufferType.Floats(BufferKind.DIRECT), 0x7fc00000L, 0x7f800001L, bTof},
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   475
                    new Object[]{new BufferType.Doubles(BufferKind.HEAP), 0x7ff8000000000000L, 0x7ff0000000000001L, bToD},
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   476
                    new Object[]{new BufferType.Doubles(BufferKind.HEAP_VIEW), 0x7ff8000000000000L, 0x7ff0000000000001L, bToD},
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   477
                    new Object[]{new BufferType.Doubles(BufferKind.DIRECT), 0x7ff8000000000000L, 0x7ff0000000000001L, bToD},
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   478
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   479
                    // +0.0 and -0.0
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   480
                    new Object[]{new BufferType.Floats(BufferKind.HEAP), 0x0L, 0x80000000L, bTof},
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   481
                    new Object[]{new BufferType.Floats(BufferKind.HEAP_VIEW), 0x0L, 0x80000000L, bTof},
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   482
                    new Object[]{new BufferType.Floats(BufferKind.DIRECT), 0x0L, 0x80000000L, bTof},
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   483
                    new Object[]{new BufferType.Doubles(BufferKind.HEAP), 0x0L, 0x8000000000000000L, bToD},
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   484
                    new Object[]{new BufferType.Doubles(BufferKind.HEAP_VIEW), 0x0L, 0x8000000000000000L, bToD},
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   485
                    new Object[]{new BufferType.Doubles(BufferKind.DIRECT), 0x0L, 0x8000000000000000L, bToD},
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   486
            };
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   487
        }
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   488
        return floatbufferTypes;
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   489
    }
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   490
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   491
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   492
    static Object[][] charBufferTypes;
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   493
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   494
    @DataProvider
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   495
    public static Object[][] charBufferTypesProvider() {
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   496
        if (charBufferTypes == null) {
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   497
            charBufferTypes = new Object[][]{
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   498
                    {new BufferType.Chars(BufferKind.HEAP)},
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   499
                    {new BufferType.Chars(BufferKind.HEAP_VIEW)},
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   500
                    {new BufferType.Chars(BufferKind.DIRECT)},
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   501
            };
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   502
        }
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   503
        return charBufferTypes;
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   504
    }
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   505
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   506
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   507
    // Tests all primitive buffers
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   508
    @Test(dataProvider = "bufferTypesProvider")
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   509
    <E>
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   510
    void testBuffers(BufferType<Buffer, E> bufferType) {
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   511
        // Test with buffers of the same byte order (BE)
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   512
        BiFunction<BufferType<Buffer, E>, Integer, Buffer> constructor = (at, s) -> {
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   513
            Buffer a = at.construct(s);
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   514
            for (int x = 0; x < s; x++) {
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   515
                at.set(a, x, x % 8);
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   516
            }
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   517
            return a;
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   518
        };
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   519
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   520
        testBufferType(bufferType, constructor, constructor);
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   521
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   522
        // Test with buffers of different byte order
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   523
        if (bufferType.elementType != byte.class &&
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   524
            (bufferType.k == BufferKind.HEAP_VIEW ||
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   525
             bufferType.k == BufferKind.DIRECT)) {
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   526
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   527
            BiFunction<BufferType<Buffer, E>, Integer, Buffer> leConstructor = (at, s) -> {
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   528
                Buffer a = at.construct(s, ByteOrder.LITTLE_ENDIAN);
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   529
                for (int x = 0; x < s; x++) {
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   530
                    at.set(a, x, x % 8);
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   531
                }
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   532
                return a;
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   533
            };
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   534
            testBufferType(bufferType, constructor, leConstructor);
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   535
        }
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   536
    }
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   537
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   538
    // Tests float and double buffers with edge-case values (NaN, -0.0, +0.0)
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   539
    @Test(dataProvider = "floatBufferTypesProvider")
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   540
    public void testFloatBuffers(
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   541
            BufferType<Buffer, Float> bufferType,
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   542
            long rawBitsA, long rawBitsB,
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   543
            LongFunction<Object> bitsToFloat) {
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   544
        Object av = bitsToFloat.apply(rawBitsA);
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   545
        Object bv = bitsToFloat.apply(rawBitsB);
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   546
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   547
        BiFunction<BufferType<Buffer, Float>, Integer, Buffer> allAs = (at, s) -> {
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   548
            Buffer b = at.construct(s);
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   549
            for (int x = 0; x < s; x++) {
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   550
                at.set(b, x, av);
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   551
            }
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   552
            return b;
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   553
        };
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   554
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   555
        BiFunction<BufferType<Buffer, Float>, Integer, Buffer> allBs = (at, s) -> {
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   556
            Buffer b = at.construct(s);
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   557
            for (int x = 0; x < s; x++) {
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   558
                at.set(b, x, bv);
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   559
            }
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   560
            return b;
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   561
        };
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   562
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   563
        BiFunction<BufferType<Buffer, Float>, Integer, Buffer> halfBs = (at, s) -> {
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   564
            Buffer b = at.construct(s);
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   565
            for (int x = 0; x < s / 2; x++) {
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   566
                at.set(b, x, bv);
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   567
            }
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   568
            for (int x = s / 2; x < s; x++) {
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   569
                at.set(b, x, 1);
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   570
            }
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   571
            return b;
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   572
        };
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   573
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   574
        // Sanity check
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   575
        int size = arraySizeFor(bufferType.elementType);
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   576
        Assert.assertTrue(bufferType.pairWiseEquals(allAs.apply(bufferType, size),
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   577
                                                    allBs.apply(bufferType, size)));
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   578
        Assert.assertTrue(bufferType.equals(allAs.apply(bufferType, size),
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   579
                                            allBs.apply(bufferType, size)));
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   580
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   581
        testBufferType(bufferType, allAs, allBs);
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   582
        testBufferType(bufferType, allAs, halfBs);
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   583
    }
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   584
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   585
    // Tests CharBuffer for region sources and CharSequence sources
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   586
    @Test(dataProvider = "charBufferTypesProvider")
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   587
    public void testCharBuffers(BufferType.Chars charBufferType) {
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   588
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   589
        BiFunction<BufferType.Chars, Integer, CharBuffer> constructor = (at, s) -> {
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   590
            CharBuffer a = at.construct(s);
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   591
            for (int x = 0; x < s; x++) {
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   592
                at.set(a, x, x % 8);
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   593
            }
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   594
            return a;
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   595
        };
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   596
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   597
        BiFunction<BufferType.Chars, Integer, CharBuffer> constructorX = constructor.
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   598
                andThen(charBufferType::transformToStringBuffer);
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   599
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   600
        testBufferType(charBufferType, constructor, constructorX);
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   601
    }
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   602
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   603
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   604
    <B extends Buffer, E, BT extends BufferType<B, E>>
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   605
    void testBufferType(BT bt,
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   606
                        BiFunction<BT, Integer, B> aConstructor,
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   607
                        BiFunction<BT, Integer, B> bConstructor) {
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   608
        int n = arraySizeFor(bt.elementType);
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   609
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   610
        for (int s : ranges(0, n)) {
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   611
            B a = aConstructor.apply(bt, s);
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   612
            B b = bConstructor.apply(bt, s);
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   613
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   614
            for (int aFrom : ranges(0, s)) {
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   615
                for (int aTo : ranges(aFrom, s)) {
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   616
                    int aLength = aTo - aFrom;
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   617
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   618
                    B as = aLength != s
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   619
                           ? bt.slice(a, aFrom, aTo)
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   620
                           : a;
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   621
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   622
                    for (int bFrom : ranges(0, s)) {
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   623
                        for (int bTo : ranges(bFrom, s)) {
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   624
                            int bLength = bTo - bFrom;
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   625
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   626
                            B bs = bLength != s
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   627
                                   ? bt.slice(b, bFrom, bTo)
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   628
                                   : b;
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   629
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   630
                            boolean eq = bt.pairWiseEquals(as, bs);
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   631
                            Assert.assertEquals(bt.equals(as, bs), eq);
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   632
                            Assert.assertEquals(bt.equals(bs, as), eq);
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   633
                            if (eq) {
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   634
                                Assert.assertEquals(bt.compare(as, bs), 0);
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   635
                                Assert.assertEquals(bt.compare(bs, as), 0);
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   636
                            }
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   637
                            else {
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   638
                                int aCb = bt.compare(as, bs);
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   639
                                int bCa = bt.compare(bs, as);
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   640
                                int v = Integer.signum(aCb) * Integer.signum(bCa);
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   641
                                Assert.assertTrue(v == -1);
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   642
                            }
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   643
                        }
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   644
                    }
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   645
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   646
                    if (aLength > 0 && !a.isReadOnly()) {
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   647
                        for (int i = aFrom; i < aTo; i++) {
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   648
                            B c = aConstructor.apply(bt, a.capacity());
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   649
                            B cs = aLength != s
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   650
                                   ? bt.slice(c, aFrom, aTo)
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   651
                                   : c;
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   652
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   653
                            // Create common prefix with a length of i - aFrom
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   654
                            bt.set(c, i, -1);
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   655
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   656
                            Assert.assertFalse(bt.equals(c, a));
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   657
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   658
                            int cCa = bt.compare(cs, as);
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   659
                            int aCc = bt.compare(as, cs);
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   660
                            int v = Integer.signum(cCa) * Integer.signum(aCc);
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   661
                            Assert.assertTrue(v == -1);
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   662
                        }
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   663
                    }
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   664
                }
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   665
            }
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   666
        }
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   667
    }
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   668
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   669
    static int[] ranges(int from, int to) {
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   670
        int width = to - from;
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   671
        switch (width) {
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   672
            case 0:
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   673
                return new int[]{};
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   674
            case 1:
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   675
                return new int[]{from, to};
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   676
            case 2:
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   677
                return new int[]{from, from + 1, to};
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   678
            case 3:
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   679
                return new int[]{from, from + 1, from + 2, to};
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   680
            default:
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   681
                return IntStream.of(from, from + 1, from + 2, to / 2 - 1, to / 2, to / 2 + 1, to - 2, to - 1, to)
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   682
                        .filter(i -> i >= from && i <= to)
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   683
                        .distinct().toArray();
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   684
        }
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   685
    }
29e165bdf669 8193085: Vectorize the nio Buffer equals and compareTo implementations
psandoz
parents:
diff changeset
   686
}