public void TestMissingValues() { var contact = new Contact("Jim", "Does", "*****@*****.**", "Lollipops", "837773"); var dataSet = new Dataset(new Site(4, "New Site", "Tim Jones", contact, contact, new GPSCoords(0, 0, "argis"))); var sensor = new Sensor("Dummy Sensor", "Does stuff", 10, 0, "C", 5, dataSet); sensor.AddState(new SensorState(sensor, DateTime.Now)); sensor.CurrentState.Values.Add(new DateTime(1990, 5, 1, 4, 0, 0), 15); sensor.CurrentState.Values.Add(new DateTime(1990, 5, 1, 5, 0, 0), 15); sensor.CurrentState.Values.Add(new DateTime(1991, 8, 2, 0, 0, 0), 15); dataSet.AddSensor(sensor); dataSet.DataInterval = 60; dataSet.HighestYearLoaded = 1; Assert.AreEqual(60, dataSet.DataInterval); var missingValues = missingValuesDetector.GetDetectedValues(sensor); for (var i = new DateTime(1990, 5, 1, 6, 0, 0); i < new DateTime(1991, 8, 2, 0, 0, 0); i = i.AddHours(1)) { Assert.Contains(new ErroneousValue(i, missingValuesDetector, sensor), missingValues); } }
//[Test] Limit no longer applied as we don't save the undo/redo stack public void AddStateMaximumFiveEntries() { var s = new Sensor("Temperature", "C"); s.AddState(new SensorState(s, DateTime.Now)); s.AddState(new SensorState(s, DateTime.Now)); s.AddState(new SensorState(s, DateTime.Now)); s.AddState(new SensorState(s, DateTime.Now)); s.AddState(new SensorState(s, DateTime.Now)); s.AddState(new SensorState(s, DateTime.Now)); s.AddState(new SensorState(s, DateTime.Now)); Assert.AreEqual(5, s.UndoStates.Count); }
public void ExportAsCSVCorrectValueCount() { var dateTime = new DateTime(2011, 8, 4, 0, 0, 0); var givenDataSet = new Dataset(new Site(1, "Steven", "Kerry", Contact, Contact, new GPSCoords(0, 0, "arcGis"))); var sampleData = new Dictionary<DateTime, float> { { dateTime.AddMinutes(15), 100 }, { dateTime.AddMinutes(30), 100 }, { dateTime.AddMinutes(45), 100 }, { dateTime.AddMinutes(60), 100 } }; var s = new Sensor("Awesome Sensor", "Awesome"); var ss = new SensorState(s, DateTime.Now, sampleData, null); s.AddState(ss); givenDataSet.AddSensor(s); Assert.AreEqual(4, givenDataSet.ExpectedDataPointCount); dateTime = new DateTime(2011, 8, 4, 0, 0, 0); givenDataSet = new Dataset(new Site(1, "Steven", "Kerry", Contact, Contact, new GPSCoords(0, 0, "arcGis"))); sampleData = new Dictionary<DateTime, float> { { dateTime.AddMinutes(60), 100 }, { dateTime.AddMinutes(75), 100 }, { dateTime.AddMinutes(90), 100 }, { dateTime.AddMinutes(105), 100 } }; s = new Sensor("Awesome Sensor", "Awesome"); ss = new SensorState(s, DateTime.Now, sampleData, null); s.AddState(ss); givenDataSet.AddSensor(s); Assert.AreEqual(4, givenDataSet.ExpectedDataPointCount); }
public void ValidUndoStatesAfterRedo() { var redoSensor = new Sensor("Temperature", "C"); var correctStackItem = new SensorState(redoSensor, new DateTime(2011, 7, 5, 22, 47, 0), new Dictionary<DateTime, float> { { new DateTime(2010, 5, 5, 22, 00, 0), 22.5f }, { new DateTime(2010, 5, 5, 22, 15, 0), 21.4f }, { new DateTime(2010, 5, 5, 22, 30, 0), 22.0f } }, null); var correctStackItemTwo = new SensorState(redoSensor, new DateTime(2011, 7, 9, 22, 47, 0), new Dictionary<DateTime, float> { { new DateTime(2010, 5, 5, 22, 00, 0), 22.5f }, { new DateTime(2010, 5, 5, 22, 15, 0), 21.4f }, { new DateTime(2010, 5, 5, 22, 30, 0), 22.0f } }, null); redoSensor.AddState(correctStackItem); redoSensor.AddState(correctStackItemTwo); redoSensor.Undo(); Assert.AreEqual(correctStackItem, redoSensor.CurrentState); redoSensor.Redo(); Assert.AreEqual(1, redoSensor.UndoStates.Count); }
public void ValidUndoStatesAfterMultilevelRedo() { _undoSensor = new Sensor("Temperature", "C"); var correctStack = new Stack<SensorState>(); correctStack.Push(new SensorState(_undoSensor, new DateTime(2011, 8, 12), new Dictionary<DateTime, float> { { new DateTime(2011, 8, 12), 66.77f } }, null)); correctStack.Push(new SensorState(_undoSensor, new DateTime(2011, 8, 11), new Dictionary<DateTime, float> { { new DateTime(2011, 8, 12), 66.77f } }, null)); correctStack.Push(new SensorState(_undoSensor, new DateTime(2011, 8, 12), new Dictionary<DateTime, float> { { new DateTime(2011, 8, 12), 64.77f } }, null)); _undoSensor.AddState(new SensorState(_undoSensor, new DateTime(2011, 8, 11), new Dictionary<DateTime, float> { { new DateTime(2011, 8, 12), 66.77f } }, null)); _undoSensor.AddState(new SensorState(_undoSensor, new DateTime(2011, 8, 12), new Dictionary<DateTime, float> { { new DateTime(2011, 8, 12), 66.77f } }, null)); _undoSensor.AddState(new SensorState(_undoSensor, new DateTime(2011, 8, 12), new Dictionary<DateTime, float> { { new DateTime(2011, 8, 12), 64.77f } }, null)); _undoSensor.Undo(); _undoSensor.Undo(); Assert.AreEqual(2, _undoSensor.RedoStates.Count); Assert.AreEqual(0, _undoSensor.UndoStates.Count); _undoSensor.Redo(); _undoSensor.Redo(); Assert.AreEqual(0, _undoSensor.RedoStates.Count); Assert.AreEqual(2, _undoSensor.UndoStates.Count); }
public void UndoToParticularState() { var s = new Sensor("Temperature", "C"); var baseDate = new DateTime(2011, 7, 7, 12, 15, 0); s.AddState(new SensorState(s, baseDate)); s.AddState(new SensorState(s, baseDate.AddMinutes(15))); s.AddState(new SensorState(s, baseDate.AddMinutes(30))); s.AddState(new SensorState(s, baseDate.AddMinutes(45))); s.AddState(new SensorState(s, baseDate.AddMinutes(60))); s.AddState(new SensorState(s, baseDate.AddMinutes(75))); s.AddState(new SensorState(s, baseDate.AddMinutes(90))); s.AddState(new SensorState(s, baseDate.AddMinutes(105))); s.Undo(baseDate.AddMinutes(75)); Assert.AreEqual(2, s.RedoStates.Count); Assert.AreEqual(baseDate.AddMinutes(90), s.RedoStates[0].EditTimestamp); Assert.AreEqual(baseDate.AddMinutes(105), s.RedoStates[1].EditTimestamp); }
//[Test] Limit no longer applied as we don't save the undo/redo stack public void UndoStackPushesCorrectEntriesAndMaxFive() { var s = new Sensor("Temperature", "C"); var baseDate = new DateTime(2011, 7, 7, 12, 15, 0); s.AddState(new SensorState(s, baseDate)); Assert.AreEqual(baseDate, s.UndoStates[0].EditTimestamp); s.AddState(new SensorState(s, baseDate.AddMinutes(15))); Assert.AreEqual(baseDate.AddMinutes(15), s.UndoStates[0].EditTimestamp); s.AddState(new SensorState(s, baseDate.AddMinutes(30))); Assert.AreEqual(baseDate.AddMinutes(30), s.UndoStates[0].EditTimestamp); s.AddState(new SensorState(s, baseDate.AddMinutes(45))); Assert.AreEqual(baseDate.AddMinutes(45), s.UndoStates[0].EditTimestamp); s.AddState(new SensorState(s, baseDate.AddMinutes(60))); Assert.AreEqual(baseDate.AddMinutes(60), s.UndoStates[0].EditTimestamp); // Now, for the real test of the method... s.AddState(new SensorState(s, baseDate.AddMinutes(75))); Assert.AreEqual(baseDate.AddMinutes(75), s.UndoStates[0].EditTimestamp); Assert.AreEqual(baseDate.AddMinutes(15), s.UndoStates[4].EditTimestamp); s.AddState(new SensorState(s, baseDate.AddMinutes(90))); Assert.AreEqual(baseDate.AddMinutes(90), s.UndoStates[0].EditTimestamp); Assert.AreEqual(baseDate.AddMinutes(30), s.UndoStates[4].EditTimestamp); }
//[Test] Limit no longer applied as we don't save the undo/redo stack public void UndoRedoStackMaximumFiveEntries() { var s = new Sensor("Temperature", "C"); s.AddState(new SensorState(s, DateTime.Now)); s.AddState(new SensorState(s, DateTime.Now)); s.AddState(new SensorState(s, DateTime.Now)); s.AddState(new SensorState(s, DateTime.Now)); s.AddState(new SensorState(s, DateTime.Now)); s.AddState(new SensorState(s, DateTime.Now)); s.AddState(new SensorState(s, DateTime.Now)); Assert.AreEqual(5, s.UndoStates.Count); Assert.AreEqual(0, s.RedoStates.Count); s.Undo(); s.Undo(); s.Undo(); s.Undo(); // Since the top of the undo stack is the current state, we must have at least one item left on the undo stack... Assert.AreEqual(1, s.UndoStates.Count); // This is the real test Assert.AreEqual(4, s.RedoStates.Count); s.Redo(); s.Redo(); s.Redo(); s.Redo(); Assert.AreEqual(5, s.UndoStates.Count); // This is the real test Assert.AreEqual(0, s.RedoStates.Count); }
public void Setup() { _testUndoStates = new Stack<SensorState>(); var testState = new SensorState(null, new DateTime(2010, 5, 7, 18, 42, 0)); var secondaryTestState = new SensorState(null, new DateTime(2010, 12, 18, 5, 22, 0)); _testUndoStates.Push(testState); _testUndoStates.Push(secondaryTestState); _secondUndoStates = new Stack<SensorState>(); _secondUndoStates.Push(new SensorState(null, new DateTime(2005, 4, 3, 2, 1, 0))); _secondUndoStates.Push(new SensorState(null, new DateTime(2005, 4, 4, 2, 1, 0))); _tempSensor = new Sensor("Temperature", "C"); // Initialise sensors for undo testing _undoSensor = new Sensor("Temperature", "C"); _undoSensor.AddState(new SensorState(_undoSensor, new DateTime(2011, 8, 11), new Dictionary<DateTime, float> { { new DateTime(2011, 8, 12), 66.77f } }, null)); _undoSensor.AddState(new SensorState(_undoSensor, new DateTime(2011, 8, 12), new Dictionary<DateTime, float> { { new DateTime(2011, 8, 12), 66.77f } }, null)); _secondUndoSensor = new Sensor("Temperature", "C"); _secondUndoSensor.AddState(new SensorState(_secondUndoSensor, new DateTime(2011, 3, 11), new Dictionary<DateTime, float> { { new DateTime(2011, 8, 12), 66.77f } }, null)); _secondUndoSensor.AddState(new SensorState(_secondUndoSensor, new DateTime(2011, 3, 12), new Dictionary<DateTime, float> { { new DateTime(2011, 8, 12), 66.77f } }, null)); _sensorEmpty = new Sensor("Temperature", "C"); _ds = new Dataset(new Site(10, "Lake", "Bob Smith", contact, contact, new GPSCoords(50, 50, "argis"))); _ds2 = new Dataset(new Site(10, "Lake Awesome", "Andy Smith", contact, contact, new GPSCoords(70, 30, "argis"))); _sensor1 = new Sensor("Temperature", "Temperature at 10m", 100, 20, "°C", 0.003f, _ds); _sensor2 = new Sensor("DO", "Dissolved Oxygen in the water", 50, 0, "%", 5.6f, _ds2); }
public void SetUndoStates() { var testSensor = new Sensor(_testName, _testDescription, _testUpperLimit, _testLowerLimit, _testUnit, _testMaxRateOfChange, new Stack<SensorState>(), _blankStack, _blankCalibrationDates, _ds); var secondStates = _secondUndoStates.Reverse(); foreach (SensorState s in secondStates) testSensor.AddState(s); Assert.AreEqual(_secondUndoStates.SkipWhile((x, index) => index == 0).ToList(), testSensor.UndoStates); // Reset testSensor = new Sensor(_testName, _testDescription, _testUpperLimit, _testLowerLimit, _testUnit, _testMaxRateOfChange, _testUndoStates, _blankStack, _blankCalibrationDates, _ds); var testUndo = _testUndoStates.Reverse(); foreach (SensorState s in testUndo) testSensor.AddState(s); Assert.AreEqual(_testUndoStates, testSensor.UndoStates); }
public void RevertToRaw() { var s = new Sensor("Temperature", "C"); var baseDate = new DateTime(2011, 5, 5, 12, 15, 0); var original = new SensorState(s, new Dictionary<DateTime, float>() { { baseDate.AddMinutes(15), 20 }, { baseDate.AddMinutes(30), 40 }, { baseDate.AddMinutes(45), 60 }, { baseDate.AddMinutes(60), 80 } }, null); var newValues = new SensorState(s, new Dictionary<DateTime, float>() { { baseDate.AddMinutes(15), 20 }, { baseDate.AddMinutes(30), 40 }, { baseDate.AddMinutes(45), 60 }, { baseDate.AddMinutes(60), 1000 } }, null); foreach (KeyValuePair<DateTime, float> kv in original.Values) s.RawData.Values.Add(kv.Key, kv.Value); s.AddState(newValues); s.RevertToRaw(); Assert.AreEqual(s.CurrentState, original); }
public void SetUp() { _detector = new RunningMeanStandardDeviationDetector { SmoothingPeriod = 240, NumberOfStandardDeviations = 0.5f }; _sensor = new Sensor("Test Sensor", "Used in testing", 100, 10, "Unit", 5, new Dataset(null) { DataInterval = 60 }); _sensor.AddState(new SensorState(_sensor, DateTime.Now)); _sensor.CurrentState.Values.Add(DateTime.Now.AddHours(1), 5); _sensor.CurrentState.Values.Add(DateTime.Now.AddHours(2), 5); _sensor.CurrentState.Values.Add(DateTime.Now.AddHours(3), 5); _erroneousValue = new ErroneousValue(DateTime.Now.AddHours(4), 600, _sensor); _sensor.CurrentState.Values.Add(_erroneousValue.TimeStamp, _erroneousValue.Value); _sensor.CurrentState.Values.Add(DateTime.Now.AddHours(5), 5); _sensor.CurrentState.Values.Add(DateTime.Now.AddHours(6), 5); _sensor.CurrentState.Values.Add(DateTime.Now.AddHours(7), 5); }
public void SetUp() { var rawSensor = new Sensor("Temperature", "Temperature at 30m", 40, 20, "C", 20, null); rawSensor.AddState(new SensorState(rawSensor, DateTime.Now)); _baseDate = DateTime.Now; rawSensor.CurrentState.Values.Add(_baseDate, 15); rawSensor.CurrentState.Values.Add(_baseDate.AddMinutes(15), 20); rawSensor.CurrentState.Values.Add(_baseDate.AddMinutes(30), 25); _gSensor = new GraphableSensor(rawSensor); }
public void ExportCSVWithIndividualDateColumns() { var dateTime = new DateTime(2011, 8, 4, 0, 0, 0); var givenDataSet = new Dataset(new Site(1, "Steven", "Kerry", Contact, Contact, new GPSCoords(0, 0, "arcGis"))); var sampleData = new Dictionary<DateTime, float> { { dateTime.AddMinutes(15), 100 }, { dateTime.AddMinutes(30), 100 }, { dateTime.AddMinutes(45), 100 }, { dateTime.AddMinutes(60), 100 } }; var s = new Sensor("Awesome Sensor", "Awesome"); var ss = new SensorState(s, DateTime.Now, sampleData, null); s.AddState(ss); givenDataSet.AddSensor(s); DatasetExporter.Export(givenDataSet, _outputFilePath, ExportFormat.CSV, true, false, false, ExportedPoints.AllPoints, DateColumnFormat.OneDateColumn, loadInUnloadedValues: false); Assert.AreEqual(DatasetOutputWithIndividualColumns, File.ReadAllText(_outputFilePath)); }