using GeoVLog.Core.Parsers; using System; using System.Text; using Xunit; namespace GeoVLog.Tests.Parsers; public class VlfParserTests { [Fact] [Trait("Category", "Core")] public void ParsesValidLine() { var msg = Encoding.ASCII.GetBytes("011019.4,19.6,011.67,-069.2,-004.7,086,122,016,19.0,007.05,-023.6,000.4,041,077,016,01.2,-00.1,-71.8,018,27.6,3282,31"); var ts = new DateTime(2025, 5, 23, 1, 10, 19, DateTimeKind.Utc); bool ok = VlfParser.TryParse(msg, ts, out var readings); Assert.True(ok); Assert.Equal(2, readings.Length); var r1 = readings[0]; Assert.Equal(0, r1.Channel); Assert.Equal(19.6, r1.FrequencyKHz!.Value, 1); Assert.Equal(11.67, r1.TotalField_pT!.Value, 2); Assert.Equal(-69.2, r1.InPhase_pct!.Value, 1); Assert.Equal(-4.7, r1.QuadPhase_pct!.Value, 1); Assert.Equal(86, r1.H1); Assert.Equal(122, r1.H2); Assert.Equal(16, r1.Gain); Assert.Equal(1.2, r1.PitchDeg!.Value, 1); Assert.Equal(-0.1, r1.RollDeg!.Value, 1); Assert.Equal(27.6, r1.VmainVolt!.Value, 1); Assert.Equal(3282, r1.VdigMilliV); Assert.Equal(31, r1.TempDegC!.Value, 0); var r2 = readings[1]; Assert.Equal(1, r2.Channel); Assert.Equal(19.0, r2.FrequencyKHz!.Value, 1); Assert.Equal(7.05, r2.TotalField_pT!.Value, 2); Assert.Equal(-23.6, r2.InPhase_pct!.Value, 1); Assert.Equal(0.4, r2.QuadPhase_pct!.Value, 1); Assert.Equal(41, r2.H1); Assert.Equal(77, r2.H2); Assert.Equal(16, r2.Gain); } [Fact] [Trait("Category", "Core")] public void RejectsMalformedLine() { var msg = Encoding.ASCII.GetBytes("011019.4,19.6,011.67"); Assert.False(VlfParser.TryParse(msg, DateTime.UtcNow, out _)); } }