Example #1
0
        public void DragIsZeroAtZeroVelocity()
        {
            var forceCalculator = new VehicleForces(constants.Object);
            var vel             = Vector2.Zero;

            var force = forceCalculator.GetDragForce(vel);

            Assert.True(force.Length() < float.Epsilon);
        }
Example #2
0
        public void DragIsProportionalToSpeed(Vector2 vel0, Vector2 vel1)
        {
            var forceCalculator = new VehicleForces(constants.Object);

            var force0 = forceCalculator.GetDragForce(vel0);
            var force1 = forceCalculator.GetDragForce(vel1);

            Assert.True(force0.Length() < force1.Length());
        }
Example #3
0
        public void GetTractiveForceThrowsWhenGearIndexIsLessThanZero()
        {
            var forceCalculator = new VehicleForces(constants.Object);
            var wheelDirection  = new Vector2(0, 1);
            var gasPedal        = 1.0f;
            var gearIdx         = -1;

            Assert.Throws <ArgumentException>(
                () => forceCalculator.GetTractiveForce(gasPedal, wheelDirection, gearIdx)
                );
        }
Example #4
0
        public void GetTractiveForceThrowsWhenGearIndexIsOutOfBounds()
        {
            var forceCalculator = new VehicleForces(constants.Object);
            var wheelDirection  = new Vector2(0, 1);
            var gasPedal        = 1.0f;
            var gearIdx         = constants.Object.NumberOfGears;

            Assert.Throws <ArgumentException>(
                () => forceCalculator.GetTractiveForce(gasPedal, wheelDirection, gearIdx)
                );
        }
Example #5
0
        public void BrakingForceIsProportionalToVelocity(Vector2 velocity0, Vector2 velocity1)
        {
            var forceCalculator = new VehicleForces(constants.Object);
            var brakePedal      = 1.0f;

            var force0 = forceCalculator.GetBrakingForce(brakePedal, velocity0);
            var force1 = forceCalculator.GetBrakingForce(brakePedal, velocity1);

            var ratio = force1.Length() / force0.Length();

            Assert.True(ratio >= 1);
        }
Example #6
0
        public void TractiveForceIsProportionalToCurrentGear(int gearIdx0, int gearIdx1)
        {
            var forceCalculator = new VehicleForces(constants.Object);
            var wheelDirection  = new Vector2(0, 1);
            var gasPedal        = 1.0f;

            var force0 = forceCalculator.GetTractiveForce(gasPedal, wheelDirection, gearIdx0);
            var force1 = forceCalculator.GetTractiveForce(gasPedal, wheelDirection, gearIdx1);

            var ratio = force1.Length() / force0.Length();

            Assert.True(ratio >= 1);
        }
Example #7
0
        public void DragPointsInTheOppositeDirectionOfTheVelocityVector()
        {
            var forceCalculator = new VehicleForces(constants.Object);
            var vel             = new Vector2(0, 28);

            var force = forceCalculator.GetDragForce(vel);

            // NOTE(danielm): dot product of two units vectors is -1 if the
            // angle between them is 180deg.
            var dot  = Vector2.Dot(Vector2.Normalize(force), Vector2.Normalize(vel));
            var diff = Math.Abs(-1 - dot);

            Assert.True(diff < float.Epsilon);
        }
Example #8
0
        public void TractiveForcePointsInTheReverseDirectionInReverseGear()
        {
            var forceCalculator = new VehicleForces(constants.Object);
            var wheelDirection  = new Vector2(0, 1);
            var gasPedal        = 1.0f;

            var force = forceCalculator.GetTractiveForceInReverse(gasPedal, wheelDirection);

            // NOTE(danielm): dot product of two units vectors is -1 if the
            // angle between them is 180deg.
            var dot  = Vector2.Dot(Vector2.Normalize(force), Vector2.Normalize(wheelDirection));
            var diff = Math.Abs(-1 - dot);

            Assert.True(diff < float.Epsilon);
        }
Example #9
0
        public void TractiveForcePointsInTheDirectionOfTheWheels()
        {
            var forceCalculator = new VehicleForces(constants.Object);
            var gear            = 1;
            var wheelDirection  = new Vector2(0, 1);
            var gasPedal        = 1.0f;

            var force = forceCalculator.GetTractiveForce(gasPedal, wheelDirection, gear);

            // NOTE(danielm): dot product of two unit vectors is 1 if the
            // angle between them is 0 degrees.
            var dot  = Vector2.Dot(Vector2.Normalize(force), wheelDirection);
            var diff = Math.Abs(1 - dot);

            Assert.True(diff < float.Epsilon);
        }
Example #10
0
        public void BrakingForceIsProportionalToBrakePedal(float brakePedal0, float brakePedal1)
        {
            var forceCalculator = new VehicleForces(constants.Object);
            var velocity        = new Vector2(0, 28);

            var force0 = forceCalculator.GetBrakingForce(brakePedal0, velocity);
            var force1 = forceCalculator.GetBrakingForce(brakePedal1, velocity);

            var ratio = force1.Length() / force0.Length();
            var ratioIsGreaterThanOne = ratio > 1;

            var ratioEqualsOne           = Math.Abs(1 - ratio) < float.Epsilon;
            var brakePedalRatiosAreEqual = Math.Abs(brakePedal1 - brakePedal0) < float.Epsilon;

            // The ratio is either greater than one OR the ratio is one if and
            // only if the brake pedal ratios are equal.
            Assert.True(ratioIsGreaterThanOne || ((ratioEqualsOne && brakePedalRatiosAreEqual) || (!ratioEqualsOne && !brakePedalRatiosAreEqual)));
        }