public void TargetVelocityDegreesPerSecond_InterpretsOpposedTargetVelocity()
        {
            var opposed = Mock.Of <IMyMotorStator>(m => m.TargetVelocityRPM == -1);

            var pair = new FacingRotorPair(null, opposed);

            Assert.That(pair.TargetVelocityDegreesPerSecond, Is.EqualTo(6));
        }
        public void TargetVelocityDegreesPerSecond_UsesGovernerTargetVelocity()
        {
            var governer = Mock.Of <IMyMotorStator>(m => m.TargetVelocityRPM == 1);

            var pair = new FacingRotorPair(governer, AnyValidMotorStator);

            Assert.That(pair.TargetVelocityDegreesPerSecond, Is.EqualTo(6));
        }
        public void CurrentAngleDegrees_InterpretsOpposedAngle()
        {
            var angle   = 300;
            var opposed = Mock.Of <IMyMotorStator>(m => m.Angle == MathHelper.ToRadians(angle));

            var pair = new FacingRotorPair(null, opposed);

            Assert.That(pair.CurrentAngleDegrees, Is.EqualTo(60).Within(0.0001f));
        }
        public void CurrentAngleDegrees_UsesGovernerAngle()
        {
            var angle    = 60;
            var governer = Mock.Of <IMyMotorStator>(m => m.Angle == MathHelper.ToRadians(angle));

            var pair = new FacingRotorPair(governer, AnyValidMotorStator);

            Assert.That(pair.CurrentAngleDegrees, Is.EqualTo(angle).Within(0.0001f));
        }
        public void OpposedOutsideLimits_AddsSafetyConcern()
        {
            var opposed = MakeOperational(MakeAttached(SameGrid,
                                                       Mock.Of <IMyMotorStator>(m =>
                                                                                m.Angle == MathHelper.ToRadians(60) &&
                                                                                m.UpperLimitDeg == 100 &&
                                                                                m.LowerLimitDeg == 80)));

            var pair   = new FacingRotorPair(AnyValidMotorStator, opposed);
            var errors = new Errors();

            pair.CheckState(errors, "Test");
            Assert.That(errors.SafetyConcerns, Is.Not.Empty);
        }
        public void BothInsideLimits_DoesNotAddSafetyConcern()
        {
            var governer = MakeOperational(MakeAttached(SameGrid,
                                                        Mock.Of <IMyMotorStator>(m =>
                                                                                 m.Angle == MathHelper.ToRadians(60) &&
                                                                                 m.UpperLimitDeg == 100 &&
                                                                                 m.LowerLimitDeg == 20)));
            var opposed = MakeOperational(MakeAttached(SameGrid,
                                                       Mock.Of <IMyMotorStator>(m =>
                                                                                m.Angle == MathHelper.ToRadians(300) &&
                                                                                m.UpperLimitDeg == 340 &&
                                                                                m.LowerLimitDeg == 260)));

            var pair   = new FacingRotorPair(governer, opposed);
            var errors = new Errors();

            pair.CheckState(errors, "Test");
            Assert.That(errors.SafetyConcerns, Is.Empty);
        }
        public void MismatchedAngles_AddsSanityCheck()
        {
            var governer = MakeOperational(MakeAttached(SameGrid,
                                                        Mock.Of <IMyMotorStator>(m =>
                                                                                 m.Angle == MathHelper.ToRadians(60) &&
                                                                                 m.UpperLimitDeg == 100 &&
                                                                                 m.LowerLimitDeg == 20)));
            var opposed = MakeOperational(MakeAttached(SameGrid,
                                                       Mock.Of <IMyMotorStator>(m =>
                                                                                m.Angle == MathHelper.ToRadians(298) &&
                                                                                m.UpperLimitDeg == 340 &&
                                                                                m.LowerLimitDeg == 260)));

            var pair   = new FacingRotorPair(governer, opposed);
            var errors = new Errors();

            pair.CheckState(errors, "Test");
            Assert.That(errors.SanityChecks, Is.Not.Empty);
        }