package org.numenta.nupic;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import org.joda.time.DateTime;
import org.junit.Test;
import org.numenta.nupic.encoders.DateEncoder;
import org.numenta.nupic.util.Tuple;
public class FieldMetaTypeTest {
/**
* Test decoding of 9 out of 10 types of {@link FieldMetaType}s.
*/
@Test
public void testDecodeType() {
List<String> linput = new ArrayList<>();
linput.add("test");
String loutput = FieldMetaType.LIST.decodeType(linput.toString(), null);
assertEquals(linput.toString(), loutput);
String catinput = "TestString";
String output = FieldMetaType.STRING.decodeType(catinput, null);
assertEquals(catinput, output);
String binput = "true";
Double boutput = FieldMetaType.BOOLEAN.decodeType(binput, null);
assertEquals(new Double(1), boutput);
String ginput = "100;200;5";
Tuple texpected = new Tuple(100.0, 200.0, 5.0);
Tuple tupleOut = FieldMetaType.GEO.decodeType(ginput, null);
assertEquals(texpected, tupleOut);
String intinput = "1337";
double intoutput = FieldMetaType.INTEGER.decodeType(intinput, null);
assertEquals(1337.0d, intoutput, 0);
intoutput = FieldMetaType.FLOAT.decodeType(intinput, null);
assertEquals(1337.0d, intoutput, 0);
// DARR = Dense Array
int[] dainput = { 1, 0, 1, 0 };
int[] daoutput = FieldMetaType.DARR.decodeType(Arrays.toString(dainput), null);
assertTrue(Arrays.equals(dainput, daoutput));
// SARR = Sparse Array
int[] sainput = { 0, 2 };
int[] saoutput = FieldMetaType.SARR.decodeType(Arrays.toString(sainput), null);
assertTrue(Arrays.equals(sainput, saoutput));
DateTime comparison = new DateTime(2010, 11, 4, 13, 55, 01);
String compareString = "2010-11-04 13:55:01";
// 3 bits for season, 1 bit for day of week, 3 for weekend, 5 for time of day
// use of forced is not recommended, used here for readability.
DateEncoder.Builder builder = DateEncoder.builder();
builder.formatPattern("yyyy-MM-dd HH:mm:ss");
DateEncoder de = builder.season(3)
.dayOfWeek(1)
.weekend(3)
.timeOfDay(5).build();
DateTime dateOutput = FieldMetaType.DATETIME.decodeType(compareString, de);
assertEquals(comparison, dateOutput);
}
}