package com.sun.jna;
import junit.framework.TestCase;
public class IntegerTypeTest extends TestCase {
public static class Sized extends IntegerType {
public Sized() { this(4, 0); }
public Sized(int size, long value) { super(size, value); }
}
public void testWriteNull() {
class NTStruct extends Structure {
public Sized field;
}
NTStruct s = new NTStruct();
assertNotNull("Field not initialized", s.field);
}
public void testReadNull() {
class NTStruct extends Structure {
public Sized field;
}
NTStruct s = new NTStruct();
s.read();
assertNotNull("Integer type field should be initialized on read", s.field);
}
public void testCheckArgumentSize() {
for (int i=1;i <= 8;i*=2) {
long value = -1L << (i*8-1);
new Sized(i, value);
new Sized(i, -1);
new Sized(i, 0);
new Sized(i, 1);
value = 1L << (i*8-1);
new Sized(i, value);
value = -1L & ~(-1L << (i*8));
new Sized(i, value);
if (i < 8) {
try {
value = 1L << (i*8);
new Sized(i, value);
fail("Value exceeding size (" + i + ") should fail");
}
catch(IllegalArgumentException e) {
}
}
if (i < 8) {
try {
value = -1L << (i*8);
new Sized(i, value);
fail("Negative value (" + value + ") exceeding size (" + i + ") should fail");
}
catch(IllegalArgumentException e) {
}
}
}
}
public void testInitialValue() {
long VALUE = 20;
NativeLong nl = new NativeLong(VALUE);
assertEquals("Wrong initial value", VALUE, nl.longValue());
}
public static void main(String[] args) {
junit.textui.TestRunner.run(IntegerTypeTest.class);
}
}