Implement DurationAdapter
This commit is contained in:
parent
78f1033836
commit
8fa9d12470
@ -434,6 +434,21 @@ namespace MatFileHandler.Tests
|
||||
Assert.That(str[3], Is.EqualTo("æøå"));
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Test duration objects.
|
||||
/// </summary>
|
||||
[Test]
|
||||
public void TestDuration()
|
||||
{
|
||||
var matFile = GetTests("good")["duration"];
|
||||
var d = matFile["d"].Value as IMatObject;
|
||||
var duration = new DurationAdapter(d);
|
||||
Assert.That(duration.Dimensions, Is.EquivalentTo(new[] { 1, 3 }));
|
||||
Assert.That(duration[0], Is.EqualTo(TimeSpan.FromTicks(12345678L)));
|
||||
Assert.That(duration[1], Is.EqualTo(new TimeSpan(0, 2, 4)));
|
||||
Assert.That(duration[2], Is.EqualTo(new TimeSpan(1, 3, 5)));
|
||||
}
|
||||
|
||||
private static AbstractTestDataFactory<IMatFile> GetTests(string factoryName) =>
|
||||
new MatTestDataFactory(Path.Combine(TestDirectory, factoryName));
|
||||
|
||||
|
BIN
MatFileHandler.Tests/test-data/good/duration.mat
Normal file
BIN
MatFileHandler.Tests/test-data/good/duration.mat
Normal file
Binary file not shown.
44
MatFileHandler/DurationAdapter.cs
Normal file
44
MatFileHandler/DurationAdapter.cs
Normal file
@ -0,0 +1,44 @@
|
||||
// Copyright 2017-2018 Alexander Luzgarev
|
||||
|
||||
using System;
|
||||
|
||||
namespace MatFileHandler
|
||||
{
|
||||
/// <summary>
|
||||
/// A better interface for using duration objects.
|
||||
/// </summary>
|
||||
public class DurationAdapter
|
||||
{
|
||||
private readonly int[] dimensions;
|
||||
private readonly double[] data;
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="DurationAdapter"/> class.
|
||||
/// </summary>
|
||||
/// <param name="array">Source duration object.</param>
|
||||
public DurationAdapter(IArray array)
|
||||
{
|
||||
var matObject = array as IMatObject;
|
||||
if (matObject?.ClassName != "duration")
|
||||
{
|
||||
throw new ArgumentException("The object provided is not a duration.");
|
||||
}
|
||||
|
||||
var dataObject = matObject["millis", 0];
|
||||
data = dataObject.ConvertToDoubleArray();
|
||||
dimensions = dataObject.Dimensions;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets duration array dimensions.
|
||||
/// </summary>
|
||||
public int[] Dimensions => dimensions;
|
||||
|
||||
/// <summary>
|
||||
/// Gets duration object at given position.
|
||||
/// </summary>
|
||||
/// <param name="list">Indices.</param>
|
||||
/// <returns>Value.</returns>
|
||||
public TimeSpan this[params int[] list] => TimeSpan.FromTicks((long)(10000.0 * data[Dimensions.DimFlatten(list)]));
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user