public void TestInputIntegerArray() { Sensor <FileInfo> sensor = Sensor <FileInfo> .Create(FileSensor.Create, SensorParams.Create(SensorParams.Keys.Path, "", ResourceLocator.Path(typeof(Resources), "1_100.Csv"))); HTMSensor <FileInfo> htmSensor = (HTMSensor <FileInfo>)sensor; htmSensor.InitEncoder(GetArrayTestParams()); // Ensure that the HTMSensor's output stream can be retrieved more than once. FanOutStream <int[]> outputStream = (FanOutStream <int[]>)htmSensor.GetOutputStream(); Assert.AreEqual(884, ((int[])outputStream.First()).Length); }
public void TestCategoryEncoderCreation() { Sensor <FileInfo> sensor = Sensor <FileInfo> .Create( FileSensor.Create, SensorParams.Create( SensorParams.Keys.Path, "", ResourceLocator.Path(typeof(Resources), "rec-center-hourly-4period-cat.Csv"))); // Cast the ValueList to the more complex type (Header) HTMSensor <FileInfo> htmSensor = (HTMSensor <FileInfo>)sensor; Header meta = (Header)htmSensor.GetMetaInfo(); Assert.IsTrue(meta.GetFieldTypes().TrueForAll( l => l.Equals(FieldMetaType.DateTime) || l.Equals(FieldMetaType.Float) || l.Equals(FieldMetaType.List))); Assert.IsTrue(meta.GetFieldNames().TrueForAll( l => l.Equals("timestamp") || l.Equals("consumption") || l.Equals("type"))); Assert.IsTrue(meta.GetFlags().TrueForAll( l => l.Equals(SensorFlags.T) || l.Equals(SensorFlags.B) || l.Equals(SensorFlags.C))); // Set the parameters on the sensor. // This enables it to auto-configure itself; a step which will // be done at the Region level. Encoder <object> multiEncoder = htmSensor.GetEncoder(); Assert.IsNotNull(multiEncoder); Assert.IsTrue(multiEncoder is MultiEncoder); // Set the Local parameters on the Sensor htmSensor.InitEncoder(GetCategoryEncoderParams()); List <EncoderTuple> encoders = multiEncoder.GetEncoders(multiEncoder); Assert.AreEqual(3, encoders.Count); DateEncoder dateEnc = (DateEncoder)encoders[1].GetEncoder(); SDRCategoryEncoder catEnc = (SDRCategoryEncoder)encoders[2].GetEncoder(); Assert.AreEqual("[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0]", Arrays.ToString(catEnc.Encode("ES"))); // Now test the encoding of an input row Map <string, object> d = new Map <string, object>(); d.Add("timestamp", dateEnc.Parse("7/12/10 13:10")); d.Add("consumption", 35.3); d.Add("type", "ES"); int[] output = multiEncoder.Encode(d); int[] expected = { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0 }; Debug.WriteLine(Arrays.ToString(expected)); Debug.WriteLine(Arrays.ToString(output)); Assert.IsTrue(Arrays.AreEqual(expected, output)); }
public void TestSensorMultipleStreamCreation() { Sensor <FileInfo> sensor = Sensor <FileInfo> .Create( FileSensor.Create, SensorParams.Create( SensorParams.Keys.Path, "", ResourceLocator.Path(typeof(Resources), "rec-center-hourly-small.Csv"))); HTMSensor <FileInfo> htmSensor = (HTMSensor <FileInfo>)sensor; htmSensor.InitEncoder(GetTestEncoderParams()); // Ensure that the HTMSensor's output stream can be retrieved more than once. IStream <int[]> outputStream = htmSensor.GetOutputStream(); IStream <int[]> outputStream2 = htmSensor.GetOutputStream(); IStream <int[]> outputStream3 = htmSensor.GetOutputStream(); // Check to make sure above multiple retrieval doesn't flag the underlying stream as operated upon Assert.IsFalse(htmSensor.IsTerminal()); Assert.AreEqual(17, outputStream.Count()); //After the above we cannot request a new stream, so this will fail //however, the above streams that were already requested should be unaffected. Assert.IsTrue(htmSensor.IsTerminal(), "Terminal sensor stream expected"); try { //@SuppressWarnings("unused") IStream <int[]> outputStream4 = (Stream <int[]>)htmSensor.GetOutputStream(); Assert.Fail(); } catch (Exception e) { Assert.AreEqual("Stream is already \"terminal\" (operated upon or empty)", e.Message); } //These Streams were created before operating on a stream Assert.AreEqual(17, outputStream2.Count()); Assert.AreEqual(17, outputStream3.Count()); // Verify that different streams are retrieved. Assert.IsFalse(outputStream.GetHashCode() == outputStream2.GetHashCode()); Assert.IsFalse(outputStream2.GetHashCode() == outputStream3.GetHashCode()); }
public void TestHTMSensor_HotGym() { Object[] n = { "some name", ResourceLocator.Path("rec-center-hourly-small.csv") }; HTMSensor <FileInfo> sensor = (HTMSensor <FileInfo>) Sensor <FileInfo> .Create( FileSensor.Create, SensorParams.Create(SensorParams.Keys.Path, n)); sensor.InitEncoder(GetTestEncoderParams()); SerialConfig config = new SerialConfig("testHTMSensor_HotGym"); IPersistenceAPI api = Persistence.Get(config); byte[] bytes = api.Write(sensor); Assert.IsNotNull(bytes); Assert.IsTrue(bytes.Length > 0); HTMSensor <FileInfo> serializedSensor = api.Read <HTMSensor <FileInfo> >(bytes); bool b = serializedSensor.IsDeepEqual(sensor); DeepCompare(serializedSensor, sensor); Assert.IsTrue(b); }
public void TestBoolEncoderNotInitialized() { Publisher manual = Publisher.GetBuilder() .AddHeader("foo") .AddHeader("bool") .AddHeader("") .Build(); Sensor <FileInfo> sensor = Sensor <FileInfo> .Create(ObservableSensor <string[]> .Create, SensorParams.Create( SensorParams.Keys.Obs, "", manual)); Map <string, Map <string, object> > fieldEncodings = SetupMap(null, 0, // n 0, // w 0, 0, 0, 0, null, null, null, "timestamp", "datetime", "DateEncoder"); Parameters @params = Parameters.GetEncoderDefaultParameters(); @params.SetParameterByKey(Parameters.KEY.FIELD_ENCODING_MAP, fieldEncodings); HTMSensor <FileInfo> htmSensor = (HTMSensor <FileInfo>)sensor; htmSensor.InitEncoder(@params); }
public void TestDateEncoderNotInitialized() { Publisher manual = Publisher.GetBuilder() .AddHeader("foo") .AddHeader("datetime") .AddHeader("T") .Build(); Sensor <FileInfo> sensor = Sensor <FileInfo> .Create(ObservableSensor <string[]> .Create, SensorParams.Create( SensorParams.Keys.Obs, "", manual)); Map <string, Map <string, object> > fieldEncodings = SetupMap(null, 25, 3, 0, 0, 0, 0.1, null, null, null, "consumption", "float", "RandomDistributedScalarEncoder"); Parameters @params = Parameters.GetEncoderDefaultParameters(); @params.SetParameterByKey(Parameters.KEY.FIELD_ENCODING_MAP, fieldEncodings); HTMSensor <FileInfo> htmSensor = (HTMSensor <FileInfo>)sensor; htmSensor.InitEncoder(@params); }
public void TestHTMSensor_DaysOfWeek() { Object[] n = { "some name", ResourceLocator.Path("days-of-week.csv") }; HTMSensor <FileInfo> sensor = (HTMSensor <FileInfo>) Sensor <FileInfo> .Create( FileSensor.Create, SensorParams.Create(SensorParams.Keys.Path, n)); Parameters p = GetParameters(); p = p.Union(NetworkTestHarness.GetDayDemoTestEncoderParams()); sensor.InitEncoder(p); SerialConfig config = new SerialConfig("testHTMSensor_DaysOfWeek", SerialConfig.SERIAL_TEST_DIR); IPersistenceAPI api = Persistence.Get(config); byte[] bytes = api.Write(sensor); HTMSensor <FileInfo> serializedSensor = api.Read <HTMSensor <FileInfo> >(bytes); bool b = serializedSensor.IsDeepEqual(sensor); DeepCompare(serializedSensor, sensor); Assert.IsTrue(b); }
public void TestInternalEncoderCreation() { Sensor <FileInfo> sensor = Sensor <FileInfo> .Create( FileSensor.Create, SensorParams.Create( SensorParams.Keys.Path, "", ResourceLocator.Path(typeof(Resources), "rec-center-hourly.Csv"))); // Cast the ValueList to the more complex type (Header) HTMSensor <FileInfo> htmSensor = (HTMSensor <FileInfo>)sensor; Header meta = (Header)htmSensor.GetMetaInfo(); Assert.IsTrue(meta.GetFieldTypes().TrueForAll( l => l.Equals(FieldMetaType.DateTime) || l.Equals(FieldMetaType.Float))); Assert.IsTrue(meta.GetFieldNames().TrueForAll( l => l.Equals("timestamp") || l.Equals("consumption"))); Assert.IsTrue(meta.GetFlags().TrueForAll( l => l.Equals(SensorFlags.T) || l.Equals(SensorFlags.B))); // Set the parameters on the sensor. // This enables it to auto-configure itself; a step which will // be done at the Region level. Encoder <object> multiEncoder = htmSensor.GetEncoder(); Assert.IsNotNull(multiEncoder); Assert.IsTrue(multiEncoder is MultiEncoder); // Set the Local parameters on the Sensor htmSensor.InitEncoder(GetTestEncoderParams()); List <EncoderTuple> encoders = multiEncoder.GetEncoders(multiEncoder); Assert.AreEqual(2, encoders.Count); // Test date specific encoder configuration // // All encoders in the MultiEncoder are accessed in a particular // order (the alphabetical order their corresponding fields are in), // so alphabetically "consumption" proceeds "timestamp" // so we need to ensure that the proper order is preserved (i.E. exists at index 1) DateEncoder dateEnc = (DateEncoder)encoders[1].GetEncoder(); try { dateEnc.ParseEncode("7/12/10 13:10"); dateEnc.ParseEncode("7/12/2010 13:10"); // Should fail here due to conflict with configured format dateEnc.ParseEncode("--13:10 7-12-10"); Assert.Fail(); } catch (Exception e) { Assert.IsInstanceOfType(e, typeof(FormatException)); //Assert.AreEqual("Invalid format: \"13:10 7/12/10\" is malformed at \":10 7/12/10\"", e.Message); } RandomDistributedScalarEncoder rdse = (RandomDistributedScalarEncoder)encoders[0].GetEncoder(); int[] encoding = rdse.Encode(35.3); Console.WriteLine(Arrays.ToString(encoding)); // Now test the encoding of an input row Map <string, object> d = new Map <string, object>(); d.Add("timestamp", dateEnc.Parse("7/12/10 13:10")); d.Add("consumption", 35.3); int[] output = multiEncoder.Encode(d); int[] expected = { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; Console.WriteLine(Arrays.ToString(expected)); Console.WriteLine(Arrays.ToString(output)); Assert.IsTrue(Arrays.AreEqual(expected, output)); }