diff --git a/src/main/java/io/tiledb/java/api/Datatype.java b/src/main/java/io/tiledb/java/api/Datatype.java index e7bb3b0b..fa7b982d 100644 --- a/src/main/java/io/tiledb/java/api/Datatype.java +++ b/src/main/java/io/tiledb/java/api/Datatype.java @@ -23,10 +23,55 @@ public enum Datatype { TILEDB_STRING_UCS4, TILEDB_ANY; + /** @return Returns the TileDB Datatype size in Bytes * */ public int getNativeSize() throws TileDBError { return tiledb.tiledb_datatype_size(this.toSwigEnum()).intValue(); } + /** @return True if the TileDB Datatype is a scalar, false otherwise (ex. String) * */ + public boolean isStringType() { + switch (this) { + case TILEDB_STRING_ASCII: + case TILEDB_STRING_UTF8: + case TILEDB_STRING_UTF16: + case TILEDB_STRING_UTF32: + case TILEDB_STRING_UCS2: + case TILEDB_STRING_UCS4: + return true; + default: + return false; + } + } + + /** @return True if the TileDB Datatype is an integer, false otherwise * */ + public boolean isIntegerType() { + switch (this) { + case TILEDB_CHAR: + case TILEDB_INT8: + case TILEDB_UINT8: + case TILEDB_INT16: + case TILEDB_UINT16: + case TILEDB_INT32: + case TILEDB_UINT32: + case TILEDB_INT64: + case TILEDB_UINT64: + return true; + default: + return false; + } + } + + /** @return True if the TileDB Datatype is a float or double, false otherwise * */ + public boolean isRealType() { + switch (this) { + case TILEDB_FLOAT32: + case TILEDB_FLOAT64: + return true; + default: + return false; + } + } + protected tiledb_datatype_t toSwigEnum() throws TileDBError { switch (this) { case TILEDB_INT32: diff --git a/src/test/java/io/tiledb/java/api/DatatypeTest.java b/src/test/java/io/tiledb/java/api/DatatypeTest.java index 12ab7101..e4ac1cae 100644 --- a/src/test/java/io/tiledb/java/api/DatatypeTest.java +++ b/src/test/java/io/tiledb/java/api/DatatypeTest.java @@ -1,14 +1,30 @@ package io.tiledb.java.api; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; import org.junit.Assert; import org.junit.Test; public class DatatypeTest { - private final Datatype[] dtypes = { - Datatype.TILEDB_ANY, - Datatype.TILEDB_FLOAT32, - Datatype.TILEDB_FLOAT64, + private final Datatype[] stringDtypes = { + Datatype.TILEDB_STRING_ASCII, + Datatype.TILEDB_STRING_UTF8, + Datatype.TILEDB_STRING_UTF16, + Datatype.TILEDB_STRING_UTF32, + Datatype.TILEDB_STRING_UCS2, + Datatype.TILEDB_STRING_UCS4 + }; + + private final Datatype[] realDtypes = { + Datatype.TILEDB_FLOAT32, Datatype.TILEDB_FLOAT64, + }; + + private final Datatype[] integerDtypes = { + Datatype.TILEDB_CHAR, + Datatype.TILEDB_INT8, Datatype.TILEDB_INT8, Datatype.TILEDB_UINT8, Datatype.TILEDB_INT16, @@ -17,19 +33,64 @@ public class DatatypeTest { Datatype.TILEDB_UINT32, Datatype.TILEDB_INT64, Datatype.TILEDB_UINT64, - Datatype.TILEDB_STRING_ASCII, - Datatype.TILEDB_STRING_UTF8, - Datatype.TILEDB_STRING_UTF16, - Datatype.TILEDB_STRING_UTF32, - Datatype.TILEDB_STRING_UCS2, - Datatype.TILEDB_STRING_UCS4 }; + private final Datatype[] otherDtypes = { + Datatype.TILEDB_ANY, + }; + + private List allDatatypes() { + ArrayList dtypes = new ArrayList<>(); + Collections.addAll(dtypes, stringDtypes); + Collections.addAll(dtypes, integerDtypes); + Collections.addAll(dtypes, realDtypes); + Collections.addAll(dtypes, otherDtypes); + return dtypes; + } + @Test public void testDatatypeJNIConversion() throws Exception { // roundtrip to and from swig enum representation - for (Datatype dtype : dtypes) { + for (Datatype dtype : allDatatypes()) { Assert.assertEquals(dtype, Datatype.fromSwigEnum(dtype.toSwigEnum())); } } + + private void checkIfType(Datatype[] trueDtypes) {} + + @Test + public void testIsStringDtypes() { + List stringDtypesList = Arrays.asList(stringDtypes); + for (Datatype dtype : allDatatypes()) { + if (stringDtypesList.contains(dtype)) { + Assert.assertTrue(dtype.isStringType()); + } else { + Assert.assertFalse(dtype.isStringType()); + } + } + } + + @Test + public void testIsIntegerDtypes() { + List integerDtypesList = Arrays.asList(integerDtypes); + for (Datatype dtype : allDatatypes()) { + if (integerDtypesList.contains(dtype)) { + Assert.assertTrue(dtype.isIntegerType()); + } else { + Assert.assertFalse(dtype.isIntegerType()); + } + } + } + + @Test + public void testIsRealDtypes() { + List realDtypesList = Arrays.asList(realDtypes); + for (Datatype dtype : allDatatypes()) { + if (realDtypesList.contains(dtype)) { + Assert.assertTrue(dtype.isRealType()); + } else { + Assert.assertFalse(dtype.isRealType()); + } + } + } }