[Java] Implement optional scalars (#6212)

Java implementation of optional scalars, following issue #6014.
This commit is contained in:
Paulo Pinheiro
2020-10-27 01:46:50 +01:00
committed by GitHub
parent c7586e85aa
commit f9a18ea635
7 changed files with 394 additions and 19 deletions

View File

@@ -2,6 +2,8 @@
import static com.google.flatbuffers.Constants.*;
import MyGame.Example.*;
import optional_scalars.ScalarStuff;
import optional_scalars.OptionalByte;
import MyGame.MonsterExtra;
import NamespaceA.*;
import NamespaceA.NamespaceB.*;
@@ -105,6 +107,8 @@ class JavaTest {
TestSharedStringPool();
TestScalarOptional();
System.out.println("FlatBuffers test: completed successfully");
}
@@ -1032,14 +1036,7 @@ class JavaTest {
TestEq(someString, FlexBuffers.getRoot(b).asString());
FlexBuffersBuilder failBuilder = new FlexBuffersBuilder(ByteBuffer.allocate(1));
try {
failBuilder.putString(someString);
// This should never be reached, it should throw an exception
// since ByteBuffers do not grow
assert(false);
} catch (java.lang.ArrayIndexOutOfBoundsException exception) {
// It should throw exception
}
failBuilder.putString(someString);
}
public static void testFlexBuffersUtf8Map() {
@@ -1229,8 +1226,162 @@ class JavaTest {
}
}
static void TestScalarOptional() {
FlatBufferBuilder fbb = new FlatBufferBuilder(1);
ScalarStuff.startScalarStuff(fbb);
int pos = ScalarStuff.endScalarStuff(fbb);
fbb.finish(pos);
ScalarStuff scalarStuff = ScalarStuff.getRootAsScalarStuff(fbb.dataBuffer());
TestEq(scalarStuff.justI8(), (byte)0);
TestEq(scalarStuff.maybeI8(), (byte)0);
TestEq(scalarStuff.defaultI8(), (byte)42);
TestEq(scalarStuff.justU8(), 0);
TestEq(scalarStuff.maybeU8(), 0);
TestEq(scalarStuff.defaultU8(), 42);
TestEq(scalarStuff.justI16(), (short)0);
TestEq(scalarStuff.maybeI16(), (short)0);
TestEq(scalarStuff.defaultI16(), (short)42);
TestEq(scalarStuff.justU16(), 0);
TestEq(scalarStuff.maybeU16(), 0);
TestEq(scalarStuff.defaultU16(), 42);
TestEq(scalarStuff.justI32(), 0);
TestEq(scalarStuff.maybeI32(), 0);
TestEq(scalarStuff.defaultI32(), 42);
TestEq(scalarStuff.justU32(), 0L);
TestEq(scalarStuff.maybeU32(), 0L);
TestEq(scalarStuff.defaultU32(), 42L);
TestEq(scalarStuff.justI64(), 0L);
TestEq(scalarStuff.maybeI64(), 0L);
TestEq(scalarStuff.defaultI64(), 42L);
TestEq(scalarStuff.justU64(), 0L);
TestEq(scalarStuff.maybeU64(), 0L);
TestEq(scalarStuff.defaultU64(), 42L);
TestEq(scalarStuff.justF32(), 0.0f);
TestEq(scalarStuff.maybeF32(), 0f);
TestEq(scalarStuff.defaultF32(), 42.0f);
TestEq(scalarStuff.justF64(), 0.0);
TestEq(scalarStuff.maybeF64(), 0.0);
TestEq(scalarStuff.defaultF64(), 42.0);
TestEq(scalarStuff.justBool(), false);
TestEq(scalarStuff.maybeBool(), false);
TestEq(scalarStuff.defaultBool(), true);
TestEq(scalarStuff.justEnum(), OptionalByte.None);
TestEq(scalarStuff.maybeEnum(), OptionalByte.None);
TestEq(scalarStuff.defaultEnum(), OptionalByte.One);
TestEq(scalarStuff.hasMaybeI8(), false);
TestEq(scalarStuff.hasMaybeI16(), false);
TestEq(scalarStuff.hasMaybeI32(), false);
TestEq(scalarStuff.hasMaybeI64(), false);
TestEq(scalarStuff.hasMaybeU8(), false);
TestEq(scalarStuff.hasMaybeU16(), false);
TestEq(scalarStuff.hasMaybeU32(), false);
TestEq(scalarStuff.hasMaybeU64(), false);
TestEq(scalarStuff.hasMaybeF32(), false);
TestEq(scalarStuff.hasMaybeF64(), false);
TestEq(scalarStuff.hasMaybeBool(), false);
TestEq(scalarStuff.hasMaybeEnum(), false);
fbb.clear();
ScalarStuff.startScalarStuff(fbb);
ScalarStuff.addJustI8(fbb, (byte)5);
ScalarStuff.addMaybeI8(fbb, (byte)5);
ScalarStuff.addDefaultI8(fbb, (byte)5);
ScalarStuff.addJustU8(fbb, 6);
ScalarStuff.addMaybeU8(fbb, 6);
ScalarStuff.addDefaultU8(fbb, 6);
ScalarStuff.addJustI16(fbb, (short)7);
ScalarStuff.addMaybeI16(fbb, (short)7);
ScalarStuff.addDefaultI16(fbb, (short)7);
ScalarStuff.addJustU16(fbb, 8);
ScalarStuff.addMaybeU16(fbb, 8);
ScalarStuff.addDefaultU16(fbb, 8);
ScalarStuff.addJustI32(fbb, 9);
ScalarStuff.addMaybeI32(fbb, 9);
ScalarStuff.addDefaultI32(fbb, 9);
ScalarStuff.addJustU32(fbb, (long)10);
ScalarStuff.addMaybeU32(fbb, (long)10);
ScalarStuff.addDefaultU32(fbb, (long)10);
ScalarStuff.addJustI64(fbb, 11L);
ScalarStuff.addMaybeI64(fbb, 11L);
ScalarStuff.addDefaultI64(fbb, 11L);
ScalarStuff.addJustU64(fbb, 12L);
ScalarStuff.addMaybeU64(fbb, 12L);
ScalarStuff.addDefaultU64(fbb, 12L);
ScalarStuff.addJustF32(fbb, 13.0f);
ScalarStuff.addMaybeF32(fbb, 13.0f);
ScalarStuff.addDefaultF32(fbb, 13.0f);
ScalarStuff.addJustF64(fbb, 14.0);
ScalarStuff.addMaybeF64(fbb, 14.0);
ScalarStuff.addDefaultF64(fbb, 14.0);
ScalarStuff.addJustBool(fbb, true);
ScalarStuff.addMaybeBool(fbb, true);
ScalarStuff.addDefaultBool(fbb, true);
ScalarStuff.addJustEnum(fbb, OptionalByte.Two);
ScalarStuff.addMaybeEnum(fbb, OptionalByte.Two);
ScalarStuff.addDefaultEnum(fbb, OptionalByte.Two);
pos = ScalarStuff.endScalarStuff(fbb);
fbb.finish(pos);
scalarStuff = ScalarStuff.getRootAsScalarStuff(fbb.dataBuffer());
TestEq(scalarStuff.justI8(), (byte)5);
TestEq(scalarStuff.maybeI8(), (byte)5);
TestEq(scalarStuff.defaultI8(), (byte)5);
TestEq(scalarStuff.justU8(), 6);
TestEq(scalarStuff.maybeU8(), 6);
TestEq(scalarStuff.defaultU8(), 6);
TestEq(scalarStuff.justI16(), (short)7);
TestEq(scalarStuff.maybeI16(), (short)7);
TestEq(scalarStuff.defaultI16(), (short)7);
TestEq(scalarStuff.justU16(), 8);
TestEq(scalarStuff.maybeU16(), 8);
TestEq(scalarStuff.defaultU16(), 8);
TestEq(scalarStuff.justI32(), 9);
TestEq(scalarStuff.maybeI32(), 9);
TestEq(scalarStuff.defaultI32(), 9);
TestEq(scalarStuff.justU32(), 10L);
TestEq(scalarStuff.maybeU32(), 10L);
TestEq(scalarStuff.defaultU32(), 10L);
TestEq(scalarStuff.justI64(), 11L);
TestEq(scalarStuff.maybeI64(), 11L);
TestEq(scalarStuff.defaultI64(), 11L);
TestEq(scalarStuff.justU64(), 12L);
TestEq(scalarStuff.maybeU64(), 12L);
TestEq(scalarStuff.defaultU64(), 12L);
TestEq(scalarStuff.justF32(), 13.0f);
TestEq(scalarStuff.maybeF32(), 13.0f);
TestEq(scalarStuff.defaultF32(), 13.0f);
TestEq(scalarStuff.justF64(), 14.0);
TestEq(scalarStuff.maybeF64(), 14.0);
TestEq(scalarStuff.defaultF64(), 14.0);
TestEq(scalarStuff.justBool(), true);
TestEq(scalarStuff.maybeBool(), true);
TestEq(scalarStuff.defaultBool(), true);
TestEq(scalarStuff.justEnum(), OptionalByte.Two);
TestEq(scalarStuff.maybeEnum(), OptionalByte.Two);
TestEq(scalarStuff.defaultEnum(), OptionalByte.Two);
TestEq(scalarStuff.hasMaybeI8(), true);
TestEq(scalarStuff.hasMaybeI16(), true);
TestEq(scalarStuff.hasMaybeI32(), true);
TestEq(scalarStuff.hasMaybeI64(), true);
TestEq(scalarStuff.hasMaybeU8(), true);
TestEq(scalarStuff.hasMaybeU16(), true);
TestEq(scalarStuff.hasMaybeU32(), true);
TestEq(scalarStuff.hasMaybeU64(), true);
TestEq(scalarStuff.hasMaybeF32(), true);
TestEq(scalarStuff.hasMaybeF64(), true);
TestEq(scalarStuff.hasMaybeBool(), true);
TestEq(scalarStuff.hasMaybeEnum(), true);
}
static <T> void TestEq(T a, T b) {
if (!a.equals(b)) {
if ((a == null && a != b) || (a != null && !a.equals(b))) {
System.out.println("" + a.getClass().getName() + " " + b.getClass().getName());
System.out.println("FlatBuffers test FAILED: \'" + a + "\' != \'" + b + "\'");
new Throwable().printStackTrace();