Skip to content

Commit

Permalink
Release 1.12.8
Browse files Browse the repository at this point in the history
  • Loading branch information
adrianstevens committed Jul 11, 2024
1 parent 69238fe commit 463a487
Show file tree
Hide file tree
Showing 12 changed files with 621 additions and 196 deletions.
5 changes: 3 additions & 2 deletions .github/workflows/develop-ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ name: Develop Build
on:
workflow_dispatch:
pull_request:
branches: [ develop ]
push:
branches: [ develop ]

Expand All @@ -16,12 +17,12 @@ jobs:
- name: Checkout Meadow.Units
uses: actions/checkout@v3
with:
ref: develop
path: Meadow.Units

- name: Setup .NET
uses: actions/setup-dotnet@v1
with:
dotnet-version: 7.0.x

- name: Build
run: dotnet build -c Release Source/Meadow.Units/Meadow.Units.sln
run: dotnet build -c Release Meadow.Units/Source/Meadow.Units/Meadow.Units.sln
5 changes: 3 additions & 2 deletions .github/workflows/main-ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ name: Main Build
on:
workflow_dispatch:
pull_request:
branches: [ main ]
push:
branches: [ main ]

Expand All @@ -16,12 +17,12 @@ jobs:
- name: Checkout Meadow.Units
uses: actions/checkout@v3
with:
ref: main
path: Meadow.Units

- name: Setup .NET
uses: actions/setup-dotnet@v1
with:
dotnet-version: 7.0.x

- name: Build
run: dotnet build -c Release Source/Meadow.Units/Meadow.Units.sln
run: dotnet build -c Release Meadow.Units/Source/Meadow.Units/Meadow.Units.sln
48 changes: 32 additions & 16 deletions Source/Meadow.Units.Tests/AngleTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -20,22 +20,22 @@ public void ConstructorTests()
}
}

[Fact]
public void ZeroCrossTests()
{
var a1 = new Angle(270);
var a2 = a1 + new Angle(180);
Assert.Equal(90d, a2.Degrees);

var a3 = new Angle(90);
var a4 = a3 - new Angle(180);
Assert.Equal(270d, a4.Degrees);

var a5 = a3 * 5;
Assert.Equal(90d, a5.Degrees);
}

[Fact]
[Fact]
public void ZeroCrossTests()
{
var a1 = new Angle(270);
var a2 = a1 + new Angle(180);
Assert.Equal(90d, a2.Degrees);

var a3 = new Angle(90);
var a4 = a3 - new Angle(180);
Assert.Equal(270d, a4.Degrees);

var a5 = a3 * 5;
Assert.Equal(90d, a5.Degrees);
}

[Fact]
public void MultiplicationTests()
{
var initial = _random.NextDouble() * 360;
Expand All @@ -56,5 +56,21 @@ public void DivisionTests()
a /= operand;
Assert.Equal(initial / operand, a.Degrees);
}

[Fact]
public void LtGtTests()
{
var minusTen = new Angle(-10);
var zero = Angle.Zero;
var plusTen = new Angle(10);

Assert.True(minusTen < zero);
Assert.True(minusTen < plusTen);
Assert.True(zero < plusTen);

Assert.True(zero > minusTen);
Assert.True(plusTen > zero);
Assert.True(plusTen > minusTen);
}
}
}
36 changes: 36 additions & 0 deletions Source/Meadow.Units.Tests/AzimuthTests.cs
Original file line number Diff line number Diff line change
@@ -1,9 +1,45 @@
using System;
using System.Collections.Generic;
using System.Linq;
using Xunit;

namespace Meadow.Units.Tests;

public class CompareToTests
{
[Fact]
public void CompareToObjectOfSameType()
{
// find all comparable structs in the assembly
var testTypes = typeof(Temperature)
.Assembly
.GetTypes()
.Where(t => t.IsValueType && typeof(IComparable).IsAssignableFrom(t))
.ToArray();

var failCount = 0;
var successCount = 0;

foreach (var t in testTypes)
{
var testItemA = Activator.CreateInstance(t);
var testItemB = Activator.CreateInstance(t);

try
{
var shouldbeZero = (testItemA as IComparable).CompareTo(testItemB);
Assert.Equal(0, shouldbeZero);
successCount++;
}
catch (Exception ex)
{
failCount++;
}
}

Assert.True(failCount == 0, $"{failCount} out of {failCount + successCount} failed CompareTo(object)");
}
}

public class AzimuthTests
{
Expand Down
179 changes: 88 additions & 91 deletions Source/Meadow.Units.Tests/LengthTests.cs
Original file line number Diff line number Diff line change
@@ -1,98 +1,95 @@
using Xunit;
using System;
using Meadow.Units;
using LU = Meadow.Units.Length.UnitType;

namespace Meadow.Units.Tests
namespace Meadow.Units.Tests;

public class LengthTests
{
public class LengthTests
[Fact()]
public void LengthCtors()
{
Length t = new Length(10, LU.Meters);
Assert.True(t.Meters == 10);

Length t2 = new Length(40);
Assert.True(t2.Meters == 40);
}

[Fact()]
public void LengthConversions()
{
Length t = new Length(10, LU.Meters);
Assert.True(t.Kilometers == 0.01);
Assert.True(t.Centimeters == 1000);
Assert.True(t.Decimeters == 100);
Assert.True(t.Millimeters == 10000);
Assert.True(t.Microns == 10000000);
Assert.True(t.Nanometers == 10000000000);
Assert.True(t.Miles.Equals4DigitPrecision(0.00621371));
Assert.True(t.NauticalMiles.Equals4DigitPrecision(0.00539957));
Assert.True(t.Yards.Equals4DigitPrecision(10.9361));
Assert.True(t.Feet.Equals4DigitPrecision(32.8084));
}

[Fact()]
public void LengthMathOps()
{
[Fact()]
public void LengthCtors()
{
Length t = new Length(10, LU.Meters);
Assert.True(t.Meters == 10);

Length t2 = new Length(40);
Assert.True(t2.Meters == 40);
}

[Fact()]
public void LengthConversions()
{
Length t = new Length(10, LU.Meters);
Assert.True(t.Kilometers == 0.01);
Assert.True(t.Centimeters == 1000);
Assert.True(t.Decimeters == 100);
Assert.True(t.Millimeters == 10000);
Assert.True(t.Microns == 10000000);
Assert.True(t.Nanometers == 10000000000);
Assert.True(t.Miles.Equals4DigitPrecision(0.00621371));
Assert.True(t.NauticalMiles.Equals4DigitPrecision(0.00539957));
Assert.True(t.Yards.Equals4DigitPrecision(10.9361));
Assert.True(t.Feet.Equals4DigitPrecision(32.8084));
}

[Fact()]
public void LengthMathOps()
{
Length t1 = new Length(1);
Length t2 = new Length(10);
Length t3 = new Length(-3);
Assert.True(t1 != t2);
Assert.True((t1 + t2) == new Length(11));
Assert.True((t2 - t1) == new Length(9));

Assert.True(t3.Abs() == new Length(3));
}

[Fact()]
public void LengthComparisons()
{
Length t1 = new Length(1);
Length t2 = new Length(10);
Length t3 = new Length(10);

Assert.True(t1 < t2);
Assert.True(t2 <= t3);
Assert.True(t2 > t1);
Assert.True(t3 >= t2);

Assert.True(t2 == t3);

Assert.True(t2 == new Length(10, LU.Meters));
Assert.True(t2 > new Length(5, LU.Meters));

Assert.True(t2.CompareTo(t3) == 0);
Assert.True(t2.CompareTo(t1) > 0);
Assert.True(t1.CompareTo(t2) < 0);

Assert.True(t2.Equals(t3));
Assert.True(!t2.Equals(t1));
}

[Fact()]
public void RandomTests()
{
// assignment
Length i1 = new Length(100, LU.Meters);
i1 = new Length(25);
Assert.True(i1 == new Length(25));

// more assignment
Length i2 = i1;
Assert.True(i2 == new Length(25, LU.Meters));

Length i3 = new Length(i2);
Assert.True(i3 == i2);
}

//[Fact()]
//public void LengthTypeConversions()
//{
// Length t1 = new Length(50, LU.Meters);

// Assert.True(t1.ToInt32(FormatProi) == 50);
//}
Length t1 = new Length(1);
Length t2 = new Length(10);
Length t3 = new Length(-3);
Assert.True(t1 != t2);
Assert.True((t1 + t2) == new Length(11));
Assert.True((t2 - t1) == new Length(9));

Assert.True(t3.Abs() == new Length(3));
}

[Fact()]
public void LengthComparisons()
{
Length t1 = new Length(1);
Length t2 = new Length(10);
Length t3 = new Length(10);

Assert.True(t1 < t2);
Assert.True(t2 <= t3);
Assert.True(t2 > t1);
Assert.True(t3 >= t2);

Assert.True(t2 == t3);

Assert.True(t2 == new Length(10, LU.Meters));
Assert.True(t2 > new Length(5, LU.Meters));

Assert.True(t2.CompareTo(t3) == 0);
Assert.True(t2.CompareTo(t1) > 0);
Assert.True(t1.CompareTo(t2) < 0);

Assert.True(t2.Equals(t3));
Assert.True(!t2.Equals(t1));
}

[Fact()]
public void RandomTests()
{
// assignment
Length i1 = new Length(100, LU.Meters);
i1 = new Length(25);
Assert.True(i1 == new Length(25));

// more assignment
Length i2 = i1;
Assert.True(i2 == new Length(25, LU.Meters));

Length i3 = new Length(i2);
Assert.True(i3 == i2);
}

//[Fact()]
//public void LengthTypeConversions()
//{
// Length t1 = new Length(50, LU.Meters);

// Assert.True(t1.ToInt32(FormatProi) == 50);
//}
}
16 changes: 16 additions & 0 deletions Source/Meadow.Units.Tests/TimePeriodTests.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
using Xunit;

namespace Meadow.Units.Tests
{
public class TimePeriodTests
{
[Fact()]
public void MicroSecondsCreationTests()
{
var p = TimePeriod.FromMicroseconds(1);
Assert.Equal(0.000001d, p.Seconds);
Assert.Equal(0.001d, p.Milliseconds);
Assert.Equal(1000, p.Nanoseconds);
}
}
}
25 changes: 25 additions & 0 deletions Source/Meadow.Units/Conversions/TimePeriodConversions.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
namespace Meadow.Units.Conversions;

internal static class TimePeriodConversions
{
public static double Convert(double value, TimePeriod.UnitType from, TimePeriod.UnitType to)
{
if (from == to)
{
return value;
}
return value * timeConversions[(int)to] / timeConversions[(int)from];
}

//must align to enum
private static readonly double[] timeConversions =
{
1_000_000_000,//ns
1_000_000,//us
1_000,//ms
1,//s
1/60d, //min
1/(60d * 60d), //hrs
1/(60d * 60d *24d), //days
};
}
Loading

0 comments on commit 463a487

Please sign in to comment.