public void Rmc() { var expected = new RMC("SN") { Status = Flag.Active, Position = new Position() { Latitude = 49.01432, LatitudeHemisphere = NorthSouth.North, Longitude = 123.07771, LongitudeHemisphere = EastWest.West, }, SOG = 0.111, TMG = 200.928, // missing Magnetic Variation // missing Magnetic Variation sign // missing date and time }; var actual = new RMC("SN", ",A,4900.8592,N,12304.6626,W,0.111,200.928,,0.000,".Split(',')); Assert.InRange(actual.Position.Latitude, expected.Position.Latitude - .00001, expected.Position.Latitude + .00001); Assert.Equal(expected.ToString(), actual.ToString()); actual = (RMC)MessageBase.Parse("$ECRMC,205351,A,4857.077,N,12303.894,W,4.389,182.020,030416,16.445,E*40"); Assert.InRange(actual.MagneticVariation, 16.444999, 16.445001); // A different real life example. Time has two or three decimals, magnetic variation fields are missing and this is NMEA 2.3, with an extra field D or A. actual = (RMC)MessageBase.Parse("$GPRMC,222248.00,A,4857.49084,N,12302.35656,W,3.018,114.14,090416,,,D*7A"); Assert.NotNull(actual); }