public void VectorVelocity_Recalculates_When_Properties_Change()
 {
     var velocity = new VectorVelocity();
     DoCheckCalculationAfterPropertyChange(velocity, v => { v.EastWestVelocity = 0; v.NorthSouthVelocity = 0; }, 0, null);
     DoCheckCalculationAfterPropertyChange(velocity, v => v.EastWestVelocity = 1, 1, 90);
     DoCheckCalculationAfterPropertyChange(velocity, v => v.IsWesterlyVelocity = true, 1, 270);
     DoCheckCalculationAfterPropertyChange(velocity, v => { v.EastWestVelocity = 0; v.NorthSouthVelocity = 1; }, 1, 0);
     DoCheckCalculationAfterPropertyChange(velocity, v => v.IsSoutherlyVelocity = true, 1, 180);
     DoCheckCalculationAfterPropertyChange(velocity, v => { v.EastWestVelocity = 0; v.NorthSouthVelocity = 0; }, 0, null);
 }
        public void VectorVelocity_Initialises_To_Known_State_And_Properties_Work()
        {
            var velocity = new VectorVelocity();
            Assert.IsNull(velocity.Bearing);
            Assert.IsNull(velocity.Speed);

            TestUtilities.TestProperty(velocity, r => r.EastWestExceeded, false);
            TestUtilities.TestProperty(velocity, r => r.EastWestVelocity, null, (short)1234);
            TestUtilities.TestProperty(velocity, r => r.IsSoutherlyVelocity, false);
            TestUtilities.TestProperty(velocity, r => r.IsWesterlyVelocity, false);
            TestUtilities.TestProperty(velocity, r => r.NorthSouthExceeded, false);
            TestUtilities.TestProperty(velocity, r => r.NorthSouthVelocity, null, (short)1234);
        }
        public void VectorVelocity_Calculates_Velocity_And_Bearing_Correctly()
        {
            var worksheet = new ExcelWorksheetData(TestContext);

            var velocity = new VectorVelocity() {
                IsWesterlyVelocity = worksheet.Bool("IsWesterlyVelocity"),
                IsSoutherlyVelocity = worksheet.Bool("IsSoutherlyVelocity"),
                EastWestVelocity = worksheet.NShort("EastWestVelocity"),
                EastWestExceeded = worksheet.Bool("EastWestExceeded"),
                NorthSouthVelocity = worksheet.NShort("NorthSouthVelocity"),
                NorthSouthExceeded = worksheet.Bool("NorthSouthExceeded"),
            };

            if(worksheet.String("Speed") == null) Assert.IsNull(velocity.Speed);
            else Assert.AreEqual(worksheet.Double("Speed"), velocity.Speed.Value, 0.000001);

            if(worksheet.String("Bearing") == null) Assert.IsNull(velocity.Bearing);
            else Assert.AreEqual(worksheet.Double("Bearing"), velocity.Bearing.Value, 0.000001);
        }
 private void DoCheckCalculationAfterPropertyChange(VectorVelocity velocity, Action<VectorVelocity> changeVelocity, double? expectedVelocity, double? expectedBearing)
 {
     changeVelocity(velocity);
     Assert.AreEqual(expectedVelocity, velocity.Speed);
     Assert.AreEqual(expectedBearing, velocity.Bearing);
 }