Innovenergy_trunk/csharp/lib/S3.Tests/UnitTest1.cs

225 lines
6.6 KiB
C#

using InnovEnergy.S3.Drivers;
using InnovEnergy.S3.Metadata;
using InnovEnergy.S3.Records;
using InnovEnergy.S3.Records.Fields;
using InnovEnergy.S3.Records.Specialized;
using InnovEnergy.Time.Unix;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using static InnovEnergy.Time.Unix.UnixTimeSpan;
namespace S3.Tests;
using Memory = Dictionary<String, TimeStampedRecord>;
[TestClass]
public class UnitTest1
{
public IReadOnlyList<AggregationLevel> Levels { get; set; }
[TestInitialize]
public void Init()
{
Levels = new []
{
new AggregationLevel( 2.Seconds(), 54.Weeks()),
new AggregationLevel(10.Seconds(), 54.Weeks()),
new AggregationLevel( 1.Minutes(), 54.Weeks()),
new AggregationLevel( 5.Minutes(), 540.Weeks()),
new AggregationLevel(15.Minutes(), 540.Weeks()),
new AggregationLevel( 1.Hours() , 540.Weeks()),
new AggregationLevel( 6.Hours() , 540.Weeks()),
new AggregationLevel( 1.Days() , 540.Weeks()),
new AggregationLevel( 1.Weeks() , Forever)
};
}
[TestMethod]
public void Test1()
{
var retentionPeriod = 4.Seconds();
var samplePeriod = 2.Seconds();
var level0 = new AggregationLevel(samplePeriod, retentionPeriod);
var levels = new[] {level0};
var records = level0
.RangeExclusive(UnixTime.Epoch, UnixTime.Epoch + 4 * level0.SamplePeriod)
.Select(TimeStampedRecord.Empty);
var memory = new Memory();
using (var d = new MemoryDriver(levels, UnixTime.Epoch, memory))
foreach (var record in records)
d.WriteRecord(record);
Assert.AreEqual(memory.Count, (Int32) (retentionPeriod/samplePeriod));
}
[TestMethod]
public void Test2()
{
var l0 = new AggregationLevel(2.Seconds(), Forever);
var l1 = new AggregationLevel(10.Seconds(), Forever);
var levels = new[] {l0, l1};
var l1Key = l1.SamplePeriod.ToString();
var l0Key = l0.SamplePeriod.ToString();
var records = l0
.RangeExclusive(UnixTime.Epoch, UnixTime.Epoch + l1.SamplePeriod)
.Select(TimeStampedRecord.Empty);
var memory = new Memory();
using (var d = new MemoryDriver(levels, UnixTime.Epoch, memory))
foreach (var record in records)
d.WriteRecord(record);
var n0 = memory.Count(kv => kv.Key.StartsWith(l0Key));
var n1 = memory.Count(kv => kv.Key.StartsWith(l1Key));
Assert.AreEqual(5, n0);
Assert.AreEqual(1, n1);
}
[TestMethod]
public void Test3()
{
var l0 = new AggregationLevel(2.Seconds(), Forever);
var l1 = new AggregationLevel(10.Seconds(), Forever);
var levels = new[] {l0, l1};
var l1Key = l1.SamplePeriod.ToString();
var l0Key = l0.SamplePeriod.ToString();
var records = l0
.RangeExclusive(UnixTime.Epoch, UnixTime.Epoch + l1.SamplePeriod + l0.SamplePeriod)
.Select(TimeStampedRecord.Empty);
var memory = new Memory();
using (var d = new MemoryDriver(levels, UnixTime.Epoch, memory))
foreach (var record in records)
d.WriteRecord(record);
var n0 = memory.Count(kv => kv.Key.StartsWith(l0Key));
var n1 = memory.Count(kv => kv.Key.StartsWith(l1Key));
Assert.AreEqual(6, n0);
Assert.AreEqual(2, n1);
}
[TestMethod]
public void Test4()
{
var l0 = new AggregationLevel(2.Seconds(), Forever);
var l1 = new AggregationLevel(10.Seconds(), Forever);
var levels = new[] {l0, l1};
var l1Key = l1.SamplePeriod.ToString();
var l0Key = l0.SamplePeriod.ToString();
var startTime = UnixTime.Epoch + l0.SamplePeriod;
var endTime = UnixTime.Epoch + l1.SamplePeriod + l0.SamplePeriod;
var records = l0
.RangeExclusive(startTime, endTime)
.Select(TimeStampedRecord.Empty);
var memory = new Memory();
using (var d = new MemoryDriver(levels, startTime, memory))
foreach (var record in records)
d.WriteRecord(record);
var n0 = memory.Count(kv => kv.Key.StartsWith(l0Key));
var n1 = memory.Count(kv => kv.Key.StartsWith(l1Key));
Assert.AreEqual(5, n0);
Assert.AreEqual(2, n1);
}
[TestMethod]
public void Test5()
{
var l0 = new AggregationLevel(2.Seconds(), Forever);
var l1 = new AggregationLevel(10.Seconds(), Forever);
var levels = new[] {l0, l1};
var l1Key = l1.SamplePeriod.ToString();
var startTime = UnixTime.Epoch;
var endTime = UnixTime.Epoch + l1.SamplePeriod;
Record CreateRecord(Int32 n) => Record.ParseDict(new () {["Number"] = n});
var records = l0
.RangeExclusive(startTime, endTime)
.Select((t, i) => CreateRecord(i).TimeStamped(t));
var memory = new Memory();
using (var d = new MemoryDriver(levels, startTime, memory))
foreach (var record in records)
d.WriteRecord(record);
var f1 = memory
.Single(kv => kv.Key.StartsWith(l1Key))
.Value
.Record
.GetField<NumberField>("Number");
Assert.AreEqual(Enumerable.Range(0, (Int32) (l1.SamplePeriod / l0.SamplePeriod)).Average(), f1.Value);
}
[TestMethod]
public void Test6()
{
var l0 = new AggregationLevel(2.Seconds(), Forever);
var l1 = new AggregationLevel(10.Seconds(), Forever);
var levels = new[] {l0, l1};
var l1Key = l1.SamplePeriod.ToString();
var startTime = UnixTime.Epoch;
var endTime = UnixTime.Epoch + l1.SamplePeriod;
Record CreateRecord(Int32 n)
{
var subRec = Record.ParseDict(new() {["Number"] = n});
return Record.ParseDict(new (){["Sub"] = subRec});
// return new Record(new Record(new NumberField("Number", n)));
}
var records = l0
.RangeExclusive(startTime, endTime)
.Select((t, i) => CreateRecord(i).TimeStamped(t));
var memory = new Memory();
using (var d = new MemoryDriver(levels, startTime, memory))
foreach (var record in records)
d.WriteRecord(record);
var f1 = memory
.Single(kv => kv.Key.StartsWith(l1Key))
.Value
.Record
.GetField<Record>("Sub")
.GetField<NumberField>("Number");
Assert.AreEqual(Enumerable.Range(0, (Int32) (l1.SamplePeriod / l0.SamplePeriod)).Average(), f1.Value);
}
}