Skip to content

Commit

Permalink
basic types
Browse files Browse the repository at this point in the history
  • Loading branch information
KSemenenko committed Sep 19, 2022
1 parent 5c18340 commit 9af80e5
Show file tree
Hide file tree
Showing 14 changed files with 151 additions and 32 deletions.
4 changes: 2 additions & 2 deletions Directory.Build.props
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,8 @@
<PackageLicenseExpression>MIT</PackageLicenseExpression>
<PackageReadmeFile>README.md</PackageReadmeFile>
<Product>Managed Code - TimeSeries</Product>
<Version>0.0.1</Version>
<PackageVersion>0.0.1</PackageVersion>
<Version>0.0.2</Version>
<PackageVersion>0.0.2</PackageVersion>
</PropertyGroup>
<PropertyGroup Condition="'$(GITHUB_ACTIONS)' == 'true'">
<ContinuousIntegrationBuild>true</ContinuousIntegrationBuild>
Expand Down
13 changes: 0 additions & 13 deletions ManagedCode.TimeSeries.Sample/ManagedCode.TimeSeries.Sample.csproj

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,6 @@
</ItemGroup>

<ItemGroup>
<ProjectReference Include="..\ManagedCode.TimeSeries.Sample\ManagedCode.TimeSeries.Sample.csproj" />
<ProjectReference Include="..\ManagedCode.TimeSeries\ManagedCode.TimeSeries.csproj" />
</ItemGroup>

Expand Down
77 changes: 76 additions & 1 deletion ManagedCode.TimeSeries.Tests/Usings.cs
Original file line number Diff line number Diff line change
@@ -1 +1,76 @@
global using Xunit;
global using Xunit;
using FluentAssertions;
using ManagedCode.TimeSeries.Sample;
using Newtonsoft.Json;

public class TimeSeriesTests
{
[Fact]
public async Task Accumulator()
{
var series = new IntTimeSeriesAccumulator(TimeSpan.FromSeconds(0.1));
for (int i = 0; i < 1000; i++)
{
await Task.Delay(new Random().Next(1, 5));
series.AddNewData(i);
}

series.DataCount.Should().Be(1000);

int step = 0;
foreach (var queue in series.Samples)
{
foreach (var item in queue.Value)
{
item.Should().Be(step);
step++;
}
}
}

[Fact]
public async Task AccumulatorLimit()
{
var series = new IntTimeSeriesAccumulator(TimeSpan.FromSeconds(0.1), 10);
for (int i = 0; i < 1000; i++)
{
await Task.Delay(new Random().Next(1, 5));
series.AddNewData(i);
}

series.SamplesCount.Should().Be(10);
}

[Fact]
public void IntTimeSeriesSummerIncrementDecrement()
{
var series = new IntTimeSeriesSummer(TimeSpan.FromMinutes(1), 10);
for (int i = 0; i < 100; i++)
{
series.Increment();
}

for (int i = 0; i < 50; i++)
{
series.Decrement();
}

series.DataCount.Should().Be(150);
series.Samples.First().Value.Should().Be(50);
}

[Fact]
public async Task Summer()
{
var series = new IntTimeSeriesSummer(TimeSpan.FromSeconds(0.1));
int count = 0;
for (int i = 0; i < 100; i++)
{
await Task.Delay(new Random().Next(10, 50));
series.AddNewData(i);
count++;
}

series.DataCount.Should().Be((ulong)count);
}
}
6 changes: 0 additions & 6 deletions ManagedCode.TimeSeries.sln
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,6 @@
Microsoft Visual Studio Solution File, Format Version 12.00
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ManagedCode.TimeSeries", "ManagedCode.TimeSeries\ManagedCode.TimeSeries.csproj", "{76A0D190-83D9-41EE-8086-B01502CE9AAC}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ManagedCode.TimeSeries.Sample", "ManagedCode.TimeSeries.Sample\ManagedCode.TimeSeries.Sample.csproj", "{C62F7335-3703-4020-8EA4-800BD6D5A88F}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ManagedCode.TimeSeries.Tests", "ManagedCode.TimeSeries.Tests\ManagedCode.TimeSeries.Tests.csproj", "{710C92DC-0803-4AE0-AA4E-09380903E2A8}"
EndProject
Global
Expand All @@ -16,10 +14,6 @@ Global
{76A0D190-83D9-41EE-8086-B01502CE9AAC}.Debug|Any CPU.Build.0 = Debug|Any CPU
{76A0D190-83D9-41EE-8086-B01502CE9AAC}.Release|Any CPU.ActiveCfg = Release|Any CPU
{76A0D190-83D9-41EE-8086-B01502CE9AAC}.Release|Any CPU.Build.0 = Release|Any CPU
{C62F7335-3703-4020-8EA4-800BD6D5A88F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{C62F7335-3703-4020-8EA4-800BD6D5A88F}.Debug|Any CPU.Build.0 = Debug|Any CPU
{C62F7335-3703-4020-8EA4-800BD6D5A88F}.Release|Any CPU.ActiveCfg = Release|Any CPU
{C62F7335-3703-4020-8EA4-800BD6D5A88F}.Release|Any CPU.Build.0 = Release|Any CPU
{710C92DC-0803-4AE0-AA4E-09380903E2A8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{710C92DC-0803-4AE0-AA4E-09380903E2A8}.Debug|Any CPU.Build.0 = Debug|Any CPU
{710C92DC-0803-4AE0-AA4E-09380903E2A8}.Release|Any CPU.ActiveCfg = Release|Any CPU
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
namespace ManagedCode.TimeSeries.Accumulators;

public class DoubleTimeSeriesAccumulator : BaseTimeSeriesAccumulator<double>
{
public DoubleTimeSeriesAccumulator(TimeSpan sampleInterval, int samplesCount = 0) : base(sampleInterval, samplesCount)
{
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
namespace ManagedCode.TimeSeries.Accumulators;

public class FloatTimeSeriesAccumulator : BaseTimeSeriesAccumulator<float>
{
public FloatTimeSeriesAccumulator(TimeSpan sampleInterval, int samplesCount = 0) : base(sampleInterval, samplesCount)
{
}
}
9 changes: 4 additions & 5 deletions ManagedCode.TimeSeries/BaseTimeSeries.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@ namespace ManagedCode.TimeSeries;

public abstract class BaseTimeSeries<T, TSample>
{
protected readonly int _samplesCount;
protected const int _defaultSampleCount = 100;
protected readonly int _samplesCount;

protected BaseTimeSeries(TimeSpan sampleInterval, int samplesCount)
{
Expand Down Expand Up @@ -47,7 +47,6 @@ public void AddNewData(T data)
CheckSamplesSize();
}


public void AddNewData(DateTimeOffset dateTimeOffset, T data)
{
DataCount += 1;
Expand Down Expand Up @@ -84,7 +83,7 @@ public void MarkupAllSamples(MarkupDirection direction = MarkupDirection.Past)
{
if (typeof(TSample).IsClass)
{
Samples.Add(now, (TSample) Activator.CreateInstance(typeof(TSample)));
Samples.Add(now, (TSample)Activator.CreateInstance(typeof(TSample)));
}
else
{
Expand All @@ -109,7 +108,7 @@ public void MarkupAllSamples(MarkupDirection direction = MarkupDirection.Past)
{
if (typeof(TSample).IsClass)
{
Samples.Add(nowForFeature, (TSample) Activator.CreateInstance(typeof(TSample)));
Samples.Add(nowForFeature, (TSample)Activator.CreateInstance(typeof(TSample)));
}
else
{
Expand All @@ -121,7 +120,7 @@ public void MarkupAllSamples(MarkupDirection direction = MarkupDirection.Past)
{
if (typeof(TSample).IsClass)
{
Samples.Add(nowForPast, (TSample) Activator.CreateInstance(typeof(TSample)));
Samples.Add(nowForPast, (TSample)Activator.CreateInstance(typeof(TSample)));
}
else
{
Expand Down
5 changes: 4 additions & 1 deletion ManagedCode.TimeSeries/BaseTimeSeriesAccumulator.cs
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,9 @@ public BaseTimeSeriesAccumulator<T> TrimStart()
foreach (var item in Samples.ToArray())
{
if (item.Value.Count > 0)
{
break;
}

Samples.Remove(item.Key);
}
Expand All @@ -46,15 +48,16 @@ public BaseTimeSeriesAccumulator<T> TrimEnd()
foreach (var item in Samples.Reverse().ToArray())
{
if (item.Value.Count > 0)
{
break;
}

Samples.Remove(item.Key);
}

return this;
}


public BaseTimeSeriesAccumulator<T> Merge(BaseTimeSeriesAccumulator<T> accumulator)
{
DataCount += accumulator.DataCount;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ public static class RoundDateTimeAndTimeSpanExtensions
{
public static TimeSpan Round(this TimeSpan time, TimeSpan roundingInterval, MidpointRounding roundingType)
{
return new TimeSpan(Convert.ToInt64(Math.Round(time.Ticks / (decimal) roundingInterval.Ticks, roundingType)) * roundingInterval.Ticks);
return new TimeSpan(Convert.ToInt64(Math.Round(time.Ticks / (decimal)roundingInterval.Ticks, roundingType)) * roundingInterval.Ticks);
}

public static TimeSpan Round(this TimeSpan time, TimeSpan roundingInterval)
Expand Down
23 changes: 23 additions & 0 deletions ManagedCode.TimeSeries/Summers/DoubleTimeSeriesSummer.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
namespace ManagedCode.TimeSeries.Summers;

public class DoubleTimeSeriesSummer : BaseTimeSeriesSummer<double>
{
public DoubleTimeSeriesSummer(TimeSpan sampleInterval, int samplesCount = 0) : base(sampleInterval, samplesCount)
{
}

protected override double Plus(double left, double right)
{
return left + right;
}

public virtual void Increment()
{
AddNewData(1);
}

public virtual void Decrement()
{
AddNewData(-1);
}
}
23 changes: 23 additions & 0 deletions ManagedCode.TimeSeries/Summers/FloatTimeSeriesSummer.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
namespace ManagedCode.TimeSeries.Summers;

public class FloatTimeSeriesSummer : BaseTimeSeriesSummer<float>
{
public FloatTimeSeriesSummer(TimeSpan sampleInterval, int samplesCount = 0) : base(sampleInterval, samplesCount)
{
}

protected override float Plus(float left, float right)
{
return left + right;
}

public virtual void Increment()
{
AddNewData(1);
}

public virtual void Decrement()
{
AddNewData(-1);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -11,12 +11,12 @@ protected override int Plus(int left, int right)
return left + right;
}

public void Increment()
public virtual void Increment()
{
AddNewData(1);
}

public void Decrement()
public virtual void Decrement()
{
AddNewData(-1);
}
Expand Down

0 comments on commit 9af80e5

Please sign in to comment.