コード例 #1
0
ファイル: SantaTests.cs プロジェクト: tofalck/HackShackPublic
        public void Brian_VerticaSquare_ShouldSucceed()
        {
            var endPosition = new CanePosition()
            {
                Latitude  = 55.6760968,
                Longitude = 12.568337100000008,
            }.Dump("Start")
            .CalculateCurrentPosition(new[] {
                new SantaMovement()
                {
                    Direction = SantaMovementDirection.Down,
                    Unit      = SantaMovementUnit.Meter,
                    Value     = 10000
                }
            }).Dump("Move down 10 km")
            .CalculateCurrentPosition(new[]
            {
                new SantaMovement()
                {
                    Direction = SantaMovementDirection.Right,
                    Unit      = SantaMovementUnit.Meter,
                    Value     = 10000
                }
            }).Dump("Move right 10 km")
            .CalculateCurrentPosition(new[]
            {
                new SantaMovement()
                {
                    Direction = SantaMovementDirection.Up,
                    Unit      = SantaMovementUnit.Meter,
                    Value     = 10000
                }
            }).Dump("Move up 10 km")
            .CalculateCurrentPosition(new[]
            {
                new SantaMovement()
                {
                    Direction = SantaMovementDirection.Left,
                    Unit      = SantaMovementUnit.Meter,
                    Value     = 10000
                }
            }).Dump("Move left 10 km");

            endPosition.Latitude.Should().Be(55.67609680);
            endPosition.Longitude.Should().Be(12.567972299220262);
        }
コード例 #2
0
ファイル: SantaTests.cs プロジェクト: tofalck/HackShackPublic
        public void Hatch2_KnownMovementAndPos_ShouldSucceed()
        {
            var sut = new CanePosition()
            {
                Latitude  = 71.639566053691,
                Longitude = -51.1902823595313
            }.CalculateCurrentPosition(new[] {
                new SantaMovement()
                {
                    Direction = SantaMovementDirection.Right,
                    Unit      = SantaMovementUnit.Meter,
                    Value     = 10000
                },
                new SantaMovement()
                {
                    Direction = SantaMovementDirection.Down,
                    Unit      = SantaMovementUnit.Meter,
                    Value     = 7500
                },
            });

            Math.Abs(sut.Latitude - 71.572192407382).Should().BeLessThan(0.0000000000001, sut.Latitude.ToJson());
            Math.Abs(sut.Longitude - -50.9050972077072).Should().BeLessThan(0.0000000000001, sut.Longitude.ToJson());
        }
コード例 #3
0
        public GeoPoint CalculateSantaPosition(bool flipXAndY = false)
        {
            double x = 0d;
            double y = 0d;

            foreach (Movement movement in SantaMovements)
            {
                double meters = movement.Unit.ToMeters(movement.Value);

                switch (movement.Direction)
                {
                case Direction.Up:
                    y += meters;
                    break;

                case Direction.Right:
                    x += meters;
                    break;

                case Direction.Down:
                    y -= meters;
                    break;

                case Direction.Left:
                    x -= meters;
                    break;

                default:
                    throw new ArgumentOutOfRangeException();
                }
            }

            return(flipXAndY
                ? CanePosition.MoveTo(y, x)
                : CanePosition.MoveTo(x, y));
        }
コード例 #4
0
 public override string ToString()
 {
     return($"Id: {Id}, CanePosition: {CanePosition.ToString()}" + Environment.NewLine +
            $"Movements:" + Environment.NewLine + string.Join(",", SantaMovements));
 }