Skip to content

Commit

Permalink
Fixed DataPointIndexedIterator BuildCollection + more tests (#58)
Browse files Browse the repository at this point in the history
  • Loading branch information
gfoidl committed Jan 15, 2021
1 parent b742427 commit d2faa38
Show file tree
Hide file tree
Showing 11 changed files with 322 additions and 47 deletions.
8 changes: 4 additions & 4 deletions source/gfoidl.DataCompression/DataPointIndexedIterator.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
// (c) gfoidl, all rights reserved
// (c) gfoidl, all rights reserved

using System.Collections.Generic;
using System.Diagnostics;
Expand Down Expand Up @@ -205,18 +205,18 @@ private void BuildCollection<TBuilder>(TList source, ref TBuilder builder)
continue;
}

if (!archive.MaxDelta && (uint)snapShotIndex < (uint)source.Count)
if (!archive.MaxDelta && _lastArchivedIndex != snapShotIndex && (uint)snapShotIndex < (uint)source.Count)
{
DataPoint snapShot = source[snapShotIndex];
_lastArchived = snapShot;
builder.Add(snapShot);
_lastArchived = snapShot;
}

incomingIndex = this.HandleSkipMinDeltaX(source, incomingIndex, snapShotIndex);

incoming = source[incomingIndex];
builder.Add(incoming);
_lastArchived = incoming;
builder.Add(incoming);
this.Init(incomingIndex, incoming, ref snapShotIndex);

incomingIndex++;
Expand Down
54 changes: 50 additions & 4 deletions tests/gfoidl.DataCompression.Tests/Compression/Base.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
// (c) gfoidl, all rights reserved
// (c) gfoidl, all rights reserved

using System.Collections.Generic;
using NUnit.Framework;
Expand All @@ -18,10 +18,52 @@ protected static IEnumerable<DataPoint> Empty()
}
//---------------------------------------------------------------------
protected static IEnumerable<DataPoint> KnownSequence()
{
yield return (0, 1);
yield return (1, 2);
yield return (2, 2);
yield return (3, -1);
yield return (4, 3);
}
//---------------------------------------------------------------------
protected static IEnumerable<DataPoint> KnownSequenceExpected(bool swingingDoor = true)
{
yield return (0, 1);
yield return (1, 2);
yield return (2, -1);

if (!swingingDoor)
{
yield return (1, 2);
}

yield return (2, 2);
yield return (3, -1);
yield return (4, 3);
}
//---------------------------------------------------------------------
protected static IEnumerable<DataPoint> KnownSequenceWithConstantPart()
{
yield return (0, 0);
yield return (1, 1);
yield return (2, 1);
yield return (3, 1);
yield return (4, 1);
yield return (5, 1);
yield return (6, -1);
yield return (7, 4);
}
//---------------------------------------------------------------------
protected static IEnumerable<DataPoint> KnownSequenceWithConstantPartExpected(bool swingingDoor = true)
{
yield return (0, 0);

if (!swingingDoor)
{
yield return (1, 1);
}

yield return (5, 1);
yield return (6, -1);
yield return (7, 4);
}
//---------------------------------------------------------------------
#if NETCOREAPP
Expand All @@ -38,7 +80,11 @@ protected static async IAsyncEnumerable<DataPoint> KnownSequenceAsync()
await Task.Yield();
yield return (1, 2);
await Task.Yield();
yield return (2, -1);
yield return (2, 2);
await Task.Yield();
yield return (3, -1);
await Task.Yield();
yield return (4, 3);
}
#endif
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
// (c) gfoidl, all rights reserved
// (c) gfoidl, all rights reserved

using System.Linq;
using NUnit.Framework;
Expand All @@ -12,7 +12,7 @@ public void Cloning_iterates_over_fresh_set()
{
var sut = new DeadBandCompression(0.1);
var data = KnownSequence().ToArray().Select(dp => dp);
var expected = KnownSequence().ToArray();
var expected = KnownSequenceExpected(swingingDoor: false).ToArray();
var filter = sut.Process(data);

var iterator = filter.GetEnumerator();
Expand All @@ -32,6 +32,12 @@ public void Cloning_iterates_over_fresh_set()
Assert.IsTrue(iterator.MoveNext(), $"MoveNext step: {step}");
Assert.AreEqual(expected[step], iterator.Current, $"Equal step: {step}");
step++;
Assert.IsTrue(iterator.MoveNext(), $"MoveNext step: {step}");
Assert.AreEqual(expected[step], iterator.Current, $"Equal step: {step}");
step++;
Assert.IsTrue(iterator.MoveNext(), $"MoveNext step: {step}");
Assert.AreEqual(expected[step], iterator.Current, $"Equal step: {step}");
step++;
Assert.IsFalse(iterator.MoveNext(), $"MoveNext step: {step++}");
});
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
// (c) gfoidl, all rights reserved
// (c) gfoidl, all rights reserved

using System;
using System.Collections.Generic;
Expand Down Expand Up @@ -60,7 +60,7 @@ public void Empty_IEnumerable_foreach___empty_result()
public void Empty_Array___empty_result()
{
var sut = new DeadBandCompression(0.1);
var data = new DataPoint[0];
var data = Array.Empty<DataPoint>();
var iterator = sut.Process(data).GetEnumerator();

Assert.IsFalse(iterator.MoveNext());
Expand All @@ -72,7 +72,7 @@ public void Known_sequence___correct_result()
var sut = new DeadBandCompression(0.1);
var data = KnownSequence();
var iterator = sut.Process(data).GetEnumerator();
var expected = KnownSequence().ToArray();
var expected = KnownSequenceExpected(swingingDoor: false).ToArray();

Assert.Multiple(() =>
{
Expand All @@ -86,6 +86,12 @@ public void Known_sequence___correct_result()
Assert.IsTrue(iterator.MoveNext(), $"MoveNext step: {step}");
Assert.AreEqual(expected[step], iterator.Current, $"Equal step: {step}");
step++;
Assert.IsTrue(iterator.MoveNext(), $"MoveNext step: {step}");
Assert.AreEqual(expected[step], iterator.Current, $"Equal step: {step}");
step++;
Assert.IsTrue(iterator.MoveNext(), $"MoveNext step: {step}");
Assert.AreEqual(expected[step], iterator.Current, $"Equal step: {step}");
step++;
Assert.IsFalse(iterator.MoveNext(), $"MoveNext step: {step++}");
});
}
Expand All @@ -96,7 +102,7 @@ public void Known_sequence_as_array___correct_result()
var sut = new DeadBandCompression(0.1);
var data = KnownSequence().ToArray();
var iterator = sut.Process(data).GetEnumerator();
var expected = KnownSequence().ToArray();
var expected = KnownSequenceExpected(swingingDoor: false).ToArray();

Assert.Multiple(() =>
{
Expand All @@ -110,6 +116,12 @@ public void Known_sequence_as_array___correct_result()
Assert.IsTrue(iterator.MoveNext(), $"MoveNext step: {step}");
Assert.AreEqual(expected[step], iterator.Current, $"Equal step: {step}");
step++;
Assert.IsTrue(iterator.MoveNext(), $"MoveNext step: {step}");
Assert.AreEqual(expected[step], iterator.Current, $"Equal step: {step}");
step++;
Assert.IsTrue(iterator.MoveNext(), $"MoveNext step: {step}");
Assert.AreEqual(expected[step], iterator.Current, $"Equal step: {step}");
step++;
Assert.IsFalse(iterator.MoveNext(), $"MoveNext step: {step++}");
});
}
Expand All @@ -120,7 +132,7 @@ public void Known_sequence_foreach___correct_result()
var sut = new DeadBandCompression(0.1);
var data = KnownSequence();
var result = sut.Process(data);
var expected = KnownSequence().ToList();
var expected = KnownSequenceExpected(swingingDoor: false).ToArray();
var actual = new List<DataPoint>();

foreach (DataPoint dp in result)
Expand All @@ -135,6 +147,88 @@ public void Known_sequence_as_array_foreach___correct_result()
var sut = new DeadBandCompression(0.1);
var data = KnownSequence().ToArray();
var result = sut.Process(data);
var expected = KnownSequenceExpected(swingingDoor: false).ToArray();
var actual = new List<DataPoint>();

foreach (DataPoint dp in result)
actual.Add(dp);

CollectionAssert.AreEqual(expected, actual);
}
//---------------------------------------------------------------------
[Test]
public void Known_sequence_ToArray___correct_result()
{
var sut = new DeadBandCompression(0.1);
var data = KnownSequence();
var result = sut.Process(data);
var expected = KnownSequenceExpected(swingingDoor: false).ToArray();

var actual = result.ToArray();

CollectionAssert.AreEqual(expected, actual);
}
//---------------------------------------------------------------------
[Test]
public void Known_sequence_with_constant_part_foreach____correct_result()
{
var sut = new DeadBandCompression(0.1);
var data = KnownSequenceWithConstantPart();
var result = sut.Process(data);
var expected = KnownSequenceWithConstantPartExpected(swingingDoor: false).ToArray();
var actual = new List<DataPoint>();

foreach (DataPoint dp in result)
actual.Add(dp);

CollectionAssert.AreEqual(expected, actual);
}
//---------------------------------------------------------------------
[Test]
public void Known_sequence_with_constant_part_ToArray____correct_result()
{
var sut = new DeadBandCompression(0.1);
var data = KnownSequenceWithConstantPart();
var result = sut.Process(data);
var expected = KnownSequenceWithConstantPartExpected(swingingDoor: false).ToArray();

var actual = result.ToArray();

CollectionAssert.AreEqual(expected, actual);
}
//---------------------------------------------------------------------
[Test]
public void InstrumentPrecision_0___input_echoed()
{
var sut = new DeadBandCompression(0);
var data = KnownSequence();
var result = sut.Process(data);
var expected = KnownSequence().ToArray();

var actual = result.ToArray();

CollectionAssert.AreEqual(expected, actual);
}
//---------------------------------------------------------------------
[Test]
public void InstrumentPrecision_0_as_array___input_echoed()
{
var sut = new DeadBandCompression(0);
var data = KnownSequence().ToArray();
var result = sut.Process(data);
var expected = KnownSequence().ToArray();

var actual = result.ToArray();

CollectionAssert.AreEqual(expected, actual);
}
//---------------------------------------------------------------------
[Test]
public void InstrumentPrecision_0_as_array_foreach___input_echoed()
{
var sut = new DeadBandCompression(0);
var data = KnownSequence().ToArray();
var result = sut.Process(data);
var expected = KnownSequence().ToArray();
var actual = new List<DataPoint>();

Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
// (c) gfoidl, all rights reserved
// (c) gfoidl, all rights reserved

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using NUnit.Framework;

Expand Down Expand Up @@ -35,15 +35,12 @@ await foreach (DataPoint db in sut.ProcessAsync(data))
}
//---------------------------------------------------------------------
[Test]
public async Task Known_sequence___correct_result()
public void Known_sequence___correct_result()
{
var sut = new DeadBandCompression(0.1);
var data = KnownSequenceAsync();
var iterator = sut.ProcessAsync(data).GetAsyncEnumerator();
var expected = new List<DataPoint>();

await foreach (DataPoint dp in KnownSequenceAsync())
expected.Add(dp);
var expected = KnownSequenceExpected(swingingDoor: false).ToArray();

Assert.Multiple(async () =>
{
Expand All @@ -53,6 +50,8 @@ await foreach (DataPoint dp in KnownSequenceAsync())
Assert.AreEqual(expected[1], iterator.Current);
await iterator.MoveNextAsync();
Assert.AreEqual(expected[2], iterator.Current);
await iterator.MoveNextAsync();
Assert.AreEqual(expected[3], iterator.Current);
});
}
//---------------------------------------------------------------------
Expand All @@ -62,11 +61,23 @@ public async Task Known_sequence_foreach___correct_result()
var sut = new DeadBandCompression(0.1);
var data = KnownSequenceAsync();
var result = sut.ProcessAsync(data);
var expected = new List<DataPoint>();
var expected = KnownSequenceExpected(swingingDoor: false).ToArray();
var actual = new List<DataPoint>();

await foreach (DataPoint dp in KnownSequenceAsync())
expected.Add(dp);
await foreach (DataPoint dp in result)
actual.Add(dp);

CollectionAssert.AreEqual(expected, actual);
}
//---------------------------------------------------------------------
[Test]
public async Task InstrumentPrecision_0___input_echoed()
{
var sut = new DeadBandCompression(0);
var data = KnownSequenceAsync();
var result = sut.ProcessAsync(data);
var expected = KnownSequence().ToArray();
var actual = new List<DataPoint>();

await foreach (DataPoint dp in result)
actual.Add(dp);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
// (c) gfoidl, all rights reserved
// (c) gfoidl, all rights reserved

using System.Linq;
using NUnit.Framework;
Expand Down Expand Up @@ -32,6 +32,12 @@ public void Cloning_iterates_over_fresh_set()
Assert.IsTrue(iterator.MoveNext(), $"MoveNext step: {step}");
Assert.AreEqual(expected[step], iterator.Current, $"Equal step: {step}");
step++;
Assert.IsTrue(iterator.MoveNext(), $"MoveNext step: {step}");
Assert.AreEqual(expected[step], iterator.Current, $"Equal step: {step}");
step++;
Assert.IsTrue(iterator.MoveNext(), $"MoveNext step: {step}");
Assert.AreEqual(expected[step], iterator.Current, $"Equal step: {step}");
step++;
Assert.IsFalse(iterator.MoveNext(), $"MoveNext step: {step++}");
});
}
Expand Down

0 comments on commit d2faa38

Please sign in to comment.