/* Copyright (c) 2007 Wayne Meissner, All Rights Reserved
*
* The contents of this file is dual-licensed under 2
* alternative Open Source/Free licenses: LGPL 2.1 or later and
* Apache License 2.0. (starting with JNA version 4.0.0).
*
* You can freely decide which license you want to apply to
* the project.
*
* You may obtain a copy of the LGPL License at:
*
* http://www.gnu.org/licenses/licenses.html
*
* A copy is also included in the downloadable source code package
* containing JNA, in file "LGPL2.1".
*
* You may obtain a copy of the Apache License at:
*
* http://www.apache.org/licenses/
*
* A copy is also included in the downloadable source code package
* containing JNA, in file "AL2.0".
*/
package com.sun.jna;
import java.nio.ByteBuffer;
import java.nio.ByteOrder;
import java.nio.DoubleBuffer;
import java.nio.FloatBuffer;
import java.nio.IntBuffer;
import java.nio.LongBuffer;
import junit.framework.TestCase;
public class PointerBufferTest extends TestCase {
private static final String UNICODE = "[\u0444]";
public void testByteBufferPutString() throws Exception {
final String MAGIC = "magic" + UNICODE;
final String ENCODING = "utf8";
Memory m = new Memory(1024);
ByteBuffer buf = m.getByteBuffer(0, m.size()).order(ByteOrder.nativeOrder());
buf.put(MAGIC.getBytes(ENCODING)).put((byte) 0).flip();
assertEquals("String not written to memory", MAGIC,
m.getString(0, ENCODING));
}
public void testByteBufferPutByte() {
final byte MAGIC = (byte)0xED;
Memory m = new Memory(8);
ByteBuffer buf = m.getByteBuffer(0, m.size()).order(ByteOrder.nativeOrder());
buf.put(MAGIC).flip();
assertEquals("Byte not written to memory", MAGIC,
m.getByte(0));
}
public void testByteBufferPutInt() {
final int MAGIC = 0xABEDCF23;
Memory m = new Memory(8);
ByteBuffer buf = m.getByteBuffer(0, m.size()).order(ByteOrder.nativeOrder());
buf.putInt(MAGIC).flip();
assertEquals("Int not written to memory", MAGIC,
m.getInt(0));
}
public void testByteBufferPutLong() {
final long MAGIC = 0x1234567887654321L;
Memory m = new Memory(8);
ByteBuffer buf = m.getByteBuffer(0, m.size()).order(ByteOrder.nativeOrder());
buf.putLong(MAGIC).flip();
assertEquals("Long not written to memory", MAGIC,
m.getLong(0));
}
public void testByteBufferGetByte() {
final byte MAGIC = (byte)0xED;
Memory m = new Memory(8);
ByteBuffer buf = m.getByteBuffer(0, m.size()).order(ByteOrder.nativeOrder());
m.setByte(0, MAGIC);
assertEquals("Byte not read from memory", MAGIC,
buf.get(0));
}
public void testByteBufferGetInt() {
final int MAGIC = 0xABEDCF23;
Memory m = new Memory(8);
ByteBuffer buf = m.getByteBuffer(0, m.size()).order(ByteOrder.nativeOrder());
m.setInt(0, MAGIC);
assertEquals("Int not read from memory", MAGIC,
buf.getInt(0));
}
public void testByteBufferGetLong() {
final long MAGIC = 0x1234567887654321L;
Memory m = new Memory(8);
ByteBuffer buf = m.getByteBuffer(0, m.size()).order(ByteOrder.nativeOrder());
m.setLong(0, MAGIC);
assertEquals("Long not read from memory", MAGIC,
buf.getLong(0));
}
public void testIntBufferPut() {
final int MAGIC = 0xABEDCF23;
Memory m = new Memory(8);
ByteBuffer buf = m.getByteBuffer(0, m.size()).order(ByteOrder.nativeOrder());
IntBuffer ib = buf.asIntBuffer();
ib.put(MAGIC).flip();
assertEquals("Int not written to memory", MAGIC,
m.getInt(0));
}
public void testLongBufferPut() {
final long MAGIC = 0x1234567887654321L;
Memory m = new Memory(8);
ByteBuffer buf = m.getByteBuffer(0, m.size()).order(ByteOrder.nativeOrder());
LongBuffer lb = buf.asLongBuffer();
lb.put(MAGIC).flip();
assertEquals("Long not written to memory", MAGIC,
m.getLong(0));
}
public void testFloatBufferPut() {
final float MAGIC = 1234.5678f;
Memory m = new Memory(8);
ByteBuffer buf = m.getByteBuffer(0, m.size()).order(ByteOrder.nativeOrder());
FloatBuffer fb = buf.asFloatBuffer();
fb.put(MAGIC).flip();
assertEquals("Int not written to memory", MAGIC, m.getFloat(0), 0f);
}
public void testDoubleBufferPut() {
final double MAGIC = 1234.5678;
Memory m = new Memory(8);
ByteBuffer buf = m.getByteBuffer(0, m.size()).order(ByteOrder.nativeOrder());
DoubleBuffer db = buf.asDoubleBuffer();
db.put(MAGIC).flip();
assertEquals("Int not written to memory", MAGIC, m.getDouble(0), 0d);
}
public void testIntBufferGet() {
final int MAGIC = 0xABEDCF23;
Memory m = new Memory(8);
ByteBuffer buf = m.getByteBuffer(0, m.size()).order(ByteOrder.nativeOrder());
IntBuffer ib = buf.asIntBuffer();
m.setInt(0, MAGIC);
assertEquals("Int not read from memory", MAGIC,
ib.get(0));
}
public void testLongBufferGet() {
final long MAGIC = 0x1234567887654321L;
Memory m = new Memory(8);
ByteBuffer buf = m.getByteBuffer(0, m.size()).order(ByteOrder.nativeOrder());
LongBuffer lb = buf.asLongBuffer();
m.setLong(0, MAGIC);
assertEquals("Long not read from memory", MAGIC,
lb.get(0));
}
public void testFloatBufferGet() {
final float MAGIC = 1234.5678f;
Memory m = new Memory(8);
ByteBuffer buf = m.getByteBuffer(0, m.size()).order(ByteOrder.nativeOrder());
FloatBuffer fb = buf.asFloatBuffer();
m.setFloat(0, MAGIC);
assertEquals("Float not read from memory", MAGIC, fb.get(0), 0f);
}
public void testDoubleBufferGet() {
final double MAGIC = 1234.5678;
Memory m = new Memory(8);
ByteBuffer buf = m.getByteBuffer(0, m.size()).order(ByteOrder.nativeOrder());
DoubleBuffer db = buf.asDoubleBuffer();
m.setDouble(0, MAGIC);
assertEquals("Double not read from memory", MAGIC, db.get(0), 0d);
}
public void testDirectBufferPointer() throws Exception {
Pointer p = new Memory(1024);
ByteBuffer b = p.getByteBuffer(0, 1024);
assertEquals("ByteBuffer Pointer does not match",
p, Native.getDirectBufferPointer(b));
assertEquals("ShortBuffer Pointer does not match",
p, Native.getDirectBufferPointer(b.asShortBuffer()));
assertEquals("IntBuffer Pointer does not match",
p, Native.getDirectBufferPointer(b.asIntBuffer()));
assertEquals("LongBuffer Pointer does not match",
p, Native.getDirectBufferPointer(b.asLongBuffer()));
assertEquals("FloatBuffer Pointer does not match",
p, Native.getDirectBufferPointer(b.asFloatBuffer()));
assertEquals("DoubleBuffer Pointer does not match",
p, Native.getDirectBufferPointer(b.asDoubleBuffer()));
assertEquals("Wrong direct buffer address",
p, Native.getDirectBufferPointer(b));
}
public static void main(String[] args) {
junit.textui.TestRunner.run(PointerBufferTest.class);
}
}