using NathanMcRae; using System.Reflection; using System.Text; internal class Program : SaneTsv { public class DateTest : SaneTsv.CommentedTsvRecord { [SaneTsv.TypedTsvColumn("column1:ty#pe")] public bool Column1 { get; set; } [SaneTsv.TypedTsvColumn] public byte[] column2 { get; set; } [SaneTsv.TypedTsvColumn("columnthree\nyep")] public DateTime Column3 { get; set; } } 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; } } private static void Main(string[] args) { { 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"; CommentedTsv parsed = SaneTsv.ParseExtraTsv(Encoding.UTF8.GetBytes(testString1)); if (parsed.Records[0].Column1) { Console.WriteLine($"Passed {testName}"); } else { Console.WriteLine($"Failed {testName}"); } } { 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 parsed = SaneTsv.ParseExtraTsv(Encoding.UTF8.GetBytes(testString1)); Console.WriteLine($"Failed {testName}"); } catch (Exception e) { Console.WriteLine($"Passed {testName}"); } } { 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"; CommentedTsv parsed = SaneTsv.ParseExtraTsv(Encoding.UTF8.GetBytes(testString1)); string serialized = Encoding.UTF8.GetString(SaneTsv.SerializeExtraTsv(parsed.Records)); if (serialized == testString1) { Console.WriteLine($"Passed {testName}"); } else { Console.WriteLine($"Failed {testName}"); } } { 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 parsed = SaneTsv.ParseExtraTsv(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"; 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(records)); CommentedTsv parsed = SaneTsv.ParseExtraTsv(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) { Console.WriteLine($"Passed {testName}"); } else { Console.WriteLine($"Failed {testName}"); } } Console.WriteLine("Done with tests"); } }