blob: 67079a58c0e5ccc8fc3280d915da370c24a47293 [file] [log] [blame]
// Copyright (c) 2021, the R8 project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
package buffercovariantreturntype;
import java.nio.Buffer;
import java.nio.ByteBuffer;
import java.nio.CharBuffer;
import java.nio.DoubleBuffer;
import java.nio.FloatBuffer;
import java.nio.IntBuffer;
import java.nio.LongBuffer;
import java.nio.ShortBuffer;
public class BufferCovariantReturnTypeMain {
public static void main(String[] args) {
byteBufferTest();
charBufferTest();
shortBufferTest();
intBufferTest();
longBufferTest();
floatBufferTest();
doubleBufferTest();
}
static void byteBufferTest() {
byte[] data = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15};
byte putValue = 55;
ByteBuffer directBuffer = ByteBuffer.wrap(data);
Buffer indirectBuffer = ByteBuffer.wrap(data);
ByteBuffer castedIndirectBuffer = (ByteBuffer) indirectBuffer;
directBuffer = directBuffer.position(5);
System.out.println(directBuffer.position()); // 5
directBuffer = directBuffer.limit(7);
System.out.println(directBuffer.remaining()); // 2
directBuffer = directBuffer.mark().put(putValue).put(putValue).reset();
System.out.println(directBuffer.position()); // 5
directBuffer = directBuffer.clear();
System.out.println(directBuffer.position()); // 0
System.out.println(directBuffer.remaining()); // 16
directBuffer.put(putValue);
directBuffer.put(putValue);
directBuffer = directBuffer.rewind();
System.out.println(directBuffer.position()); // 0
directBuffer.put(putValue);
directBuffer.put(putValue);
directBuffer = directBuffer.flip();
System.out.println(directBuffer.position()); // 0
System.out.println(directBuffer.remaining()); // 2
indirectBuffer = indirectBuffer.position(5);
System.out.println(indirectBuffer.position()); // 5
indirectBuffer = indirectBuffer.limit(7);
System.out.println(indirectBuffer.remaining()); // 2
indirectBuffer = indirectBuffer.mark();
castedIndirectBuffer.put(putValue);
castedIndirectBuffer.put(putValue);
indirectBuffer = indirectBuffer.reset();
System.out.println(indirectBuffer.position()); // 5
indirectBuffer = indirectBuffer.clear();
System.out.println(indirectBuffer.position()); // 0
System.out.println(indirectBuffer.remaining()); // 16
castedIndirectBuffer.put(putValue);
castedIndirectBuffer.put(putValue);
indirectBuffer = indirectBuffer.rewind();
System.out.println(indirectBuffer.position()); // 0
castedIndirectBuffer.put(putValue);
castedIndirectBuffer.put(putValue);
indirectBuffer = indirectBuffer.flip();
System.out.println(indirectBuffer.position()); // 0
System.out.println(indirectBuffer.remaining()); // 2
}
static void charBufferTest() {
char[] data = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15};
char putValue = 55;
CharBuffer directBuffer = CharBuffer.wrap(data);
Buffer indirectBuffer = CharBuffer.wrap(data);
CharBuffer castedIndirectBuffer = (CharBuffer) indirectBuffer;
directBuffer = directBuffer.position(5);
System.out.println(directBuffer.position()); // 5
directBuffer = directBuffer.limit(7);
System.out.println(directBuffer.remaining()); // 2
directBuffer = directBuffer.mark().put(putValue).put(putValue).reset();
System.out.println(directBuffer.position()); // 5
directBuffer = directBuffer.clear();
System.out.println(directBuffer.position()); // 0
System.out.println(directBuffer.remaining()); // 16
directBuffer.put(putValue);
directBuffer.put(putValue);
directBuffer = directBuffer.rewind();
System.out.println(directBuffer.position()); // 0
directBuffer.put(putValue);
directBuffer.put(putValue);
directBuffer = directBuffer.flip();
System.out.println(directBuffer.position()); // 0
System.out.println(directBuffer.remaining()); // 2
indirectBuffer = indirectBuffer.position(5);
System.out.println(indirectBuffer.position()); // 5
indirectBuffer = indirectBuffer.limit(7);
System.out.println(indirectBuffer.remaining()); // 2
indirectBuffer = indirectBuffer.mark();
castedIndirectBuffer.put(putValue);
castedIndirectBuffer.put(putValue);
indirectBuffer = indirectBuffer.reset();
System.out.println(indirectBuffer.position()); // 5
indirectBuffer = indirectBuffer.clear();
System.out.println(indirectBuffer.position()); // 0
System.out.println(indirectBuffer.remaining()); // 16
castedIndirectBuffer.put(putValue);
castedIndirectBuffer.put(putValue);
indirectBuffer = indirectBuffer.rewind();
System.out.println(indirectBuffer.position()); // 0
castedIndirectBuffer.put(putValue);
castedIndirectBuffer.put(putValue);
indirectBuffer = indirectBuffer.flip();
System.out.println(indirectBuffer.position()); // 0
System.out.println(indirectBuffer.remaining()); // 2
}
static void shortBufferTest() {
short[] data = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15};
short putValue = 55;
ShortBuffer directBuffer = ShortBuffer.wrap(data);
Buffer indirectBuffer = ShortBuffer.wrap(data);
ShortBuffer castedIndirectBuffer = (ShortBuffer) indirectBuffer;
directBuffer = directBuffer.position(5);
System.out.println(directBuffer.position()); // 5
directBuffer = directBuffer.limit(7);
System.out.println(directBuffer.remaining()); // 2
directBuffer = directBuffer.mark().put(putValue).put(putValue).reset();
System.out.println(directBuffer.position()); // 5
directBuffer = directBuffer.clear();
System.out.println(directBuffer.position()); // 0
System.out.println(directBuffer.remaining()); // 16
directBuffer.put(putValue);
directBuffer.put(putValue);
directBuffer = directBuffer.rewind();
System.out.println(directBuffer.position()); // 0
directBuffer.put(putValue);
directBuffer.put(putValue);
directBuffer = directBuffer.flip();
System.out.println(directBuffer.position()); // 0
System.out.println(directBuffer.remaining()); // 2
indirectBuffer = indirectBuffer.position(5);
System.out.println(indirectBuffer.position()); // 5
indirectBuffer = indirectBuffer.limit(7);
System.out.println(indirectBuffer.remaining()); // 2
indirectBuffer = indirectBuffer.mark();
castedIndirectBuffer.put(putValue);
castedIndirectBuffer.put(putValue);
indirectBuffer = indirectBuffer.reset();
System.out.println(indirectBuffer.position()); // 5
indirectBuffer = indirectBuffer.clear();
System.out.println(indirectBuffer.position()); // 0
System.out.println(indirectBuffer.remaining()); // 16
castedIndirectBuffer.put(putValue);
castedIndirectBuffer.put(putValue);
indirectBuffer = indirectBuffer.rewind();
System.out.println(indirectBuffer.position()); // 0
castedIndirectBuffer.put(putValue);
castedIndirectBuffer.put(putValue);
indirectBuffer = indirectBuffer.flip();
System.out.println(indirectBuffer.position()); // 0
System.out.println(indirectBuffer.remaining()); // 2
}
static void intBufferTest() {
int[] data = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15};
int putValue = 55;
IntBuffer directBuffer = IntBuffer.wrap(data);
Buffer indirectBuffer = IntBuffer.wrap(data);
IntBuffer castedIndirectBuffer = (IntBuffer) indirectBuffer;
directBuffer = directBuffer.position(5);
System.out.println(directBuffer.position()); // 5
directBuffer = directBuffer.limit(7);
System.out.println(directBuffer.remaining()); // 2
directBuffer = directBuffer.mark().put(putValue).put(putValue).reset();
System.out.println(directBuffer.position()); // 5
directBuffer = directBuffer.clear();
System.out.println(directBuffer.position()); // 0
System.out.println(directBuffer.remaining()); // 16
directBuffer.put(putValue);
directBuffer.put(putValue);
directBuffer = directBuffer.rewind();
System.out.println(directBuffer.position()); // 0
directBuffer.put(putValue);
directBuffer.put(putValue);
directBuffer = directBuffer.flip();
System.out.println(directBuffer.position()); // 0
System.out.println(directBuffer.remaining()); // 2
indirectBuffer = indirectBuffer.position(5);
System.out.println(indirectBuffer.position()); // 5
indirectBuffer = indirectBuffer.limit(7);
System.out.println(indirectBuffer.remaining()); // 2
indirectBuffer = indirectBuffer.mark();
castedIndirectBuffer.put(putValue);
castedIndirectBuffer.put(putValue);
indirectBuffer = indirectBuffer.reset();
System.out.println(indirectBuffer.position()); // 5
indirectBuffer = indirectBuffer.clear();
System.out.println(indirectBuffer.position()); // 0
System.out.println(indirectBuffer.remaining()); // 16
castedIndirectBuffer.put(putValue);
castedIndirectBuffer.put(putValue);
indirectBuffer = indirectBuffer.rewind();
System.out.println(indirectBuffer.position()); // 0
castedIndirectBuffer.put(putValue);
castedIndirectBuffer.put(putValue);
indirectBuffer = indirectBuffer.flip();
System.out.println(indirectBuffer.position()); // 0
System.out.println(indirectBuffer.remaining()); // 2
}
static void longBufferTest() {
long[] data = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15};
long putValue = 55;
LongBuffer directBuffer = LongBuffer.wrap(data);
Buffer indirectBuffer = LongBuffer.wrap(data);
LongBuffer castedIndirectBuffer = (LongBuffer) indirectBuffer;
directBuffer = directBuffer.position(5);
System.out.println(directBuffer.position()); // 5
directBuffer = directBuffer.limit(7);
System.out.println(directBuffer.remaining()); // 2
directBuffer = directBuffer.mark().put(putValue).put(putValue).reset();
System.out.println(directBuffer.position()); // 5
directBuffer = directBuffer.clear();
System.out.println(directBuffer.position()); // 0
System.out.println(directBuffer.remaining()); // 16
directBuffer.put(putValue);
directBuffer.put(putValue);
directBuffer = directBuffer.rewind();
System.out.println(directBuffer.position()); // 0
directBuffer.put(putValue);
directBuffer.put(putValue);
directBuffer = directBuffer.flip();
System.out.println(directBuffer.position()); // 0
System.out.println(directBuffer.remaining()); // 2
indirectBuffer = indirectBuffer.position(5);
System.out.println(indirectBuffer.position()); // 5
indirectBuffer = indirectBuffer.limit(7);
System.out.println(indirectBuffer.remaining()); // 2
indirectBuffer = indirectBuffer.mark();
castedIndirectBuffer.put(putValue);
castedIndirectBuffer.put(putValue);
indirectBuffer = indirectBuffer.reset();
System.out.println(indirectBuffer.position()); // 5
indirectBuffer = indirectBuffer.clear();
System.out.println(indirectBuffer.position()); // 0
System.out.println(indirectBuffer.remaining()); // 16
castedIndirectBuffer.put(putValue);
castedIndirectBuffer.put(putValue);
indirectBuffer = indirectBuffer.rewind();
System.out.println(indirectBuffer.position()); // 0
castedIndirectBuffer.put(putValue);
castedIndirectBuffer.put(putValue);
indirectBuffer = indirectBuffer.flip();
System.out.println(indirectBuffer.position()); // 0
System.out.println(indirectBuffer.remaining()); // 2
}
static void floatBufferTest() {
float[] data = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15};
float putValue = 55;
FloatBuffer directBuffer = FloatBuffer.wrap(data);
Buffer indirectBuffer = FloatBuffer.wrap(data);
FloatBuffer castedIndirectBuffer = (FloatBuffer) indirectBuffer;
directBuffer = directBuffer.position(5);
System.out.println(directBuffer.position()); // 5
directBuffer = directBuffer.limit(7);
System.out.println(directBuffer.remaining()); // 2
directBuffer = directBuffer.mark().put(putValue).put(putValue).reset();
System.out.println(directBuffer.position()); // 5
directBuffer = directBuffer.clear();
System.out.println(directBuffer.position()); // 0
System.out.println(directBuffer.remaining()); // 16
directBuffer.put(putValue);
directBuffer.put(putValue);
directBuffer = directBuffer.rewind();
System.out.println(directBuffer.position()); // 0
directBuffer.put(putValue);
directBuffer.put(putValue);
directBuffer = directBuffer.flip();
System.out.println(directBuffer.position()); // 0
System.out.println(directBuffer.remaining()); // 2
indirectBuffer = indirectBuffer.position(5);
System.out.println(indirectBuffer.position()); // 5
indirectBuffer = indirectBuffer.limit(7);
System.out.println(indirectBuffer.remaining()); // 2
indirectBuffer = indirectBuffer.mark();
castedIndirectBuffer.put(putValue);
castedIndirectBuffer.put(putValue);
indirectBuffer = indirectBuffer.reset();
System.out.println(indirectBuffer.position()); // 5
indirectBuffer = indirectBuffer.clear();
System.out.println(indirectBuffer.position()); // 0
System.out.println(indirectBuffer.remaining()); // 16
castedIndirectBuffer.put(putValue);
castedIndirectBuffer.put(putValue);
indirectBuffer = indirectBuffer.rewind();
System.out.println(indirectBuffer.position()); // 0
castedIndirectBuffer.put(putValue);
castedIndirectBuffer.put(putValue);
indirectBuffer = indirectBuffer.flip();
System.out.println(indirectBuffer.position()); // 0
System.out.println(indirectBuffer.remaining()); // 2
}
static void doubleBufferTest() {
double[] data = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15};
double putValue = 55;
DoubleBuffer directBuffer = DoubleBuffer.wrap(data);
Buffer indirectBuffer = DoubleBuffer.wrap(data);
DoubleBuffer castedIndirectBuffer = (DoubleBuffer) indirectBuffer;
directBuffer = directBuffer.position(5);
System.out.println(directBuffer.position()); // 5
directBuffer = directBuffer.limit(7);
System.out.println(directBuffer.remaining()); // 2
directBuffer = directBuffer.mark().put(putValue).put(putValue).reset();
System.out.println(directBuffer.position()); // 5
directBuffer = directBuffer.clear();
System.out.println(directBuffer.position()); // 0
System.out.println(directBuffer.remaining()); // 16
directBuffer.put(putValue);
directBuffer.put(putValue);
directBuffer = directBuffer.rewind();
System.out.println(directBuffer.position()); // 0
directBuffer.put(putValue);
directBuffer.put(putValue);
directBuffer = directBuffer.flip();
System.out.println(directBuffer.position()); // 0
System.out.println(directBuffer.remaining()); // 2
indirectBuffer = indirectBuffer.position(5);
System.out.println(indirectBuffer.position()); // 5
indirectBuffer = indirectBuffer.limit(7);
System.out.println(indirectBuffer.remaining()); // 2
indirectBuffer = indirectBuffer.mark();
castedIndirectBuffer.put(putValue);
castedIndirectBuffer.put(putValue);
indirectBuffer = indirectBuffer.reset();
System.out.println(indirectBuffer.position()); // 5
indirectBuffer = indirectBuffer.clear();
System.out.println(indirectBuffer.position()); // 0
System.out.println(indirectBuffer.remaining()); // 16
castedIndirectBuffer.put(putValue);
castedIndirectBuffer.put(putValue);
indirectBuffer = indirectBuffer.rewind();
System.out.println(indirectBuffer.position()); // 0
castedIndirectBuffer.put(putValue);
castedIndirectBuffer.put(putValue);
indirectBuffer = indirectBuffer.flip();
System.out.println(indirectBuffer.position()); // 0
System.out.println(indirectBuffer.remaining()); // 2
}
}