2024-02-14 03:15:07 +00:00
|
|
|
|
using NathanMcRae;
|
2024-03-09 17:58:25 +00:00
|
|
|
|
using System.Reflection;
|
2024-02-14 03:15:07 +00:00
|
|
|
|
using System.Text;
|
2024-02-26 06:35:56 +00:00
|
|
|
|
internal class Program : SaneTsv
|
2024-02-14 22:30:36 +00:00
|
|
|
|
{
|
2024-03-11 05:43:11 +00:00
|
|
|
|
public class DateTest : SaneTsv.CommentedTsvRecord
|
2024-02-17 05:26:35 +00:00
|
|
|
|
{
|
2024-02-23 06:09:13 +00:00
|
|
|
|
[SaneTsv.TypedTsvColumn("column1:ty#pe")]
|
2024-02-20 22:30:01 +00:00
|
|
|
|
public bool Column1 { get; set; }
|
|
|
|
|
|
2024-02-23 06:09:13 +00:00
|
|
|
|
[SaneTsv.TypedTsvColumn]
|
2024-02-20 22:30:01 +00:00
|
|
|
|
public byte[] column2 { get; set; }
|
|
|
|
|
|
2024-02-23 06:09:13 +00:00
|
|
|
|
[SaneTsv.TypedTsvColumn("columnthree\nyep")]
|
2024-03-11 05:43:11 +00:00
|
|
|
|
public DateTime Column3 { get; set; }
|
2024-02-25 19:24:30 +00:00
|
|
|
|
}
|
|
|
|
|
|
2024-03-16 01:58:07 +00:00
|
|
|
|
public class UnitTest : SaneTsv.CommentedTsvRecord
|
|
|
|
|
{
|
|
|
|
|
[SaneTsv.TypedTsvColumn("id")]
|
|
|
|
|
public UInt32 Id { get; set; }
|
|
|
|
|
|
|
|
|
|
[SaneTsv.TypedTsvColumn("value", "m/s:ph-unit:float64")]
|
|
|
|
|
public UnitsNet.Speed Value { get; set; }
|
|
|
|
|
}
|
|
|
|
|
|
2024-02-20 22:30:01 +00:00
|
|
|
|
private static void Main(string[] args)
|
2024-02-18 04:44:33 +00:00
|
|
|
|
{
|
2024-02-20 22:30:01 +00:00
|
|
|
|
{
|
2024-03-11 05:43:11 +00:00
|
|
|
|
string testName = "Parse date";
|
|
|
|
|
string testString1 = "# ExtraTSV V0.0.1\n" +
|
|
|
|
|
"column1:ty\\#pe:boolean\tcolumn2:binary\tcolumnthree\\nyep:iso8601:string" +
|
|
|
|
|
"\nTRUE\tvalue\\\\t\0woo\t2024-02-15T18:03:30.0000" +
|
|
|
|
|
"\nFALSE\tnother\t2024-02-15T18:03:39.0001";
|
2024-02-20 22:30:01 +00:00
|
|
|
|
|
2024-03-11 05:43:11 +00:00
|
|
|
|
CommentedTsv<DateTest> parsed = SaneTsv.ParseExtraTsv<DateTest>(Encoding.UTF8.GetBytes(testString1));
|
2024-02-20 22:30:01 +00:00
|
|
|
|
if (parsed.Records[0].Column1)
|
|
|
|
|
{
|
|
|
|
|
Console.WriteLine($"Passed {testName}");
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
Console.WriteLine($"Failed {testName}");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2024-03-16 01:58:07 +00:00
|
|
|
|
{
|
|
|
|
|
string testName = "Bad date column name";
|
|
|
|
|
string testString1 = "# ExtraTSV V0.0.1\n" +
|
|
|
|
|
"column1:ty\\#pe:boolean\tcolumn2:binary\tiso8601:string" +
|
|
|
|
|
"\nTRUE\tvalue\\\\t\0woo\t2024-02-15T18:03:30.0000" +
|
|
|
|
|
"\nFALSE\tnother\t2024-02-15T18:03:39.0001";
|
|
|
|
|
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
CommentedTsv<DateTest> parsed = SaneTsv.ParseExtraTsv<DateTest>(Encoding.UTF8.GetBytes(testString1));
|
|
|
|
|
Console.WriteLine($"Failed {testName}");
|
|
|
|
|
}
|
|
|
|
|
catch (Exception e)
|
|
|
|
|
{
|
|
|
|
|
Console.WriteLine($"Passed {testName}");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2024-02-20 22:30:01 +00:00
|
|
|
|
{
|
2024-03-11 05:43:11 +00:00
|
|
|
|
string testName = "Serde date";
|
|
|
|
|
string testString1 = "# ExtraTSV V0.0.1\n" +
|
|
|
|
|
"column1:ty\\#pe:boolean\tcolumn2:binary\tcolumnthree\\nyep:iso8601:string" +
|
|
|
|
|
"\nTRUE\tvalue\\\\t\0woo\t2024-02-15T18:03:30.0000" +
|
|
|
|
|
"\nFALSE\tnother\t2024-02-15T18:03:39.0001";
|
2024-02-20 22:30:01 +00:00
|
|
|
|
|
2024-03-11 05:43:11 +00:00
|
|
|
|
CommentedTsv<DateTest> parsed = SaneTsv.ParseExtraTsv<DateTest>(Encoding.UTF8.GetBytes(testString1));
|
|
|
|
|
string serialized = Encoding.UTF8.GetString(SaneTsv.SerializeExtraTsv<DateTest>(parsed.Records));
|
|
|
|
|
if (serialized == testString1)
|
2024-02-20 22:30:01 +00:00
|
|
|
|
{
|
|
|
|
|
Console.WriteLine($"Passed {testName}");
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
Console.WriteLine($"Failed {testName}");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2024-03-16 01:58:07 +00:00
|
|
|
|
{
|
|
|
|
|
string testName = "Parse unit";
|
|
|
|
|
string testString1 = "# ExtraTSV V0.0.1\n" +
|
|
|
|
|
"id:uint32\tvalue:m/s:ph-unit:float64\n" +
|
|
|
|
|
"0\t1.5\n" +
|
|
|
|
|
"1\t5.4e3";
|
|
|
|
|
|
|
|
|
|
CommentedTsv<UnitTest> parsed = SaneTsv.ParseExtraTsv<UnitTest>(Encoding.UTF8.GetBytes(testString1));
|
|
|
|
|
if (parsed.Records[0].Value.Value == 1.5)
|
|
|
|
|
{
|
|
|
|
|
Console.WriteLine($"Passed {testName}");
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
Console.WriteLine($"Failed {testName}");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
{
|
|
|
|
|
string testName = "Serde unit";
|
|
|
|
|
|
2024-03-16 06:15:35 +00:00
|
|
|
|
UnitTest[] records = new UnitTest[]
|
|
|
|
|
{
|
|
|
|
|
new UnitTest
|
|
|
|
|
{
|
|
|
|
|
Id = 1,
|
|
|
|
|
Value = UnitsNet.Speed.FromMetersPerSecond(5.03),
|
|
|
|
|
},
|
|
|
|
|
new UnitTest
|
|
|
|
|
{
|
|
|
|
|
Id = 5,
|
|
|
|
|
Value = UnitsNet.Speed.FromMetersPerSecond(double.NaN),
|
|
|
|
|
},
|
|
|
|
|
new UnitTest
|
|
|
|
|
{
|
|
|
|
|
Id = 1000000,
|
|
|
|
|
Value = UnitsNet.Speed.FromMetersPerSecond(9859873.498),
|
|
|
|
|
},
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
string serialized = Encoding.UTF8.GetString(SaneTsv.SerializeExtraTsv<UnitTest>(records));
|
|
|
|
|
CommentedTsv<UnitTest> parsed = SaneTsv.ParseExtraTsv<UnitTest>(Encoding.UTF8.GetBytes(serialized));
|
|
|
|
|
|
|
|
|
|
bool match = true;
|
|
|
|
|
for (int i = 0; i < records.Length; i++)
|
|
|
|
|
{
|
|
|
|
|
match = match && records[i].Id == parsed.Records[i].Id &&
|
|
|
|
|
(records[i].Value.Equals(parsed.Records[i].Value, UnitsNet.Speed.FromMetersPerSecond(1E-1))
|
|
|
|
|
|| (double.IsNaN(records[i].Value.Value) && double.IsNaN(parsed.Records[i].Value.Value)));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (match)
|
2024-03-16 01:58:07 +00:00
|
|
|
|
{
|
|
|
|
|
Console.WriteLine($"Passed {testName}");
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
Console.WriteLine($"Failed {testName}");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2024-02-23 06:09:13 +00:00
|
|
|
|
Console.WriteLine("Done with tests");
|
2024-02-18 04:44:33 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
2024-02-23 06:09:13 +00:00
|
|
|
|
|
|
|
|
|
|