Пример #1
0
        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);
        }
Пример #2
0
        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));
        }
Пример #3
0
        public void TestSensorTerminalOperationDetection()
        {
            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;

            // We haven't done anything with the stream yet, so it should not be terminal
            Assert.IsFalse(htmSensor.IsTerminal());
            ((BatchedCsvStream <string[]>)htmSensor.GetInputStream()).ForEach(l => Console.WriteLine(Arrays.ToString((string[])l)));
            // Should now be terminal after operating on the stream
            Assert.IsTrue(htmSensor.IsTerminal());
        }
Пример #4
0
        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());
        }
Пример #5
0
        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);
        }
Пример #6
0
        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);
        }
Пример #7
0
        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);
        }
Пример #8
0
        public void TestPadTo()
        {
            List <string[]> l = new List <string[]>();

            l.Add(new string[] { "0", "My" });
            l.Add(new string[] { "3", "list" });
            l.Add(new string[] { "4", "can " });
            l.Add(new string[] { "1", "really" });
            l.Add(new string[] { "6", "frustrate." });
            l.Add(new string[] { "2", "unordered" });
            l.Add(new string[] { "5", "also" });

            List <string> @out = new List <string>();

            foreach (string[] sa in l)
            {
                int idx = int.Parse(sa[0]);
                @out[HTMSensor <string> .PadTo(idx, @out)] = sa[1];
            }

            Assert.AreEqual("[My, really, unordered, list, can , also, frustrate.]", Arrays.ToString(@out.ToArray()));
        }
Пример #9
0
        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);
        }
Пример #10
0
        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));
        }