public void PositionForCompetitor_StepForwardGivesExpectedLocations()
        {
            var config = new MatchConfig
            {
                InitialRange                 = 100,
                StepForwardProportion        = 0.5f,
                MaximumLocationRandomisation = 0,
                MinimumLocationRandomisation = 0
            };

            var steps = Enumerable.Range(-3, 3);

            var results = steps.Select(p => config.PositionForCompetitor(1, 1, p));

            var expectedXLocations = new float[]
            {
                config.InitialRange * 8,
                config.InitialRange * 4,
                config.InitialRange * 2,
                config.InitialRange,
                config.InitialRange / 2,
                config.InitialRange / 4,
                config.InitialRange / 8
            };

            var i = 0;

            foreach (var position in results)
            {
                Assert.AreEqual(expectedXLocations[i], position.magnitude);

                i++;
            }
        }
        public void PositionForCompetitor_GiviesGoesAroundArc()
        {
            var config = new MatchConfig
            {
                InitialRange                 = 100,
                StepForwardProportion        = 0.5f,
                MaximumLocationRandomisation = 0,
                MinimumLocationRandomisation = 0
            };

            var numberOfShips = 10;
            var positions     = Enumerable.Range(0, numberOfShips * 2);

            var results = positions.Select(p => config.PositionForCompetitor(p, numberOfShips, 0));

            var expectedAngles = new float[]
            {
                0,
                36,
                72,
                108,
                144,
                180,
                216,
                252,
                288,
                324,
                0,
                36,
                72,
                108,
                144,
                180,
                216,
                252,
                288,
                324
            };
            var tollerance = 0.001f;

            var i = 0;

            foreach (var position in results)
            {
                Assert.LessOrEqual(config.InitialRange - tollerance, position.magnitude);
                Assert.GreaterOrEqual(config.InitialRange + tollerance, position.magnitude);

                var expectedAngleRad = Mathf.Deg2Rad * expectedAngles[i];
                var expectedX        = Mathf.Cos(expectedAngleRad) * config.InitialRange;
                var expectedZ        = Mathf.Sin(expectedAngleRad) * config.InitialRange;

                var expected = new Vector3(expectedX, expectedZ);
                Debug.Log($"actual: {position}, expected: {expected}");

                Assert.LessOrEqual(expectedX - tollerance, position.x);
                Assert.GreaterOrEqual(expectedX + tollerance, position.x);

                Assert.LessOrEqual(expectedZ - tollerance, position.z);
                Assert.GreaterOrEqual(expectedZ + tollerance, position.z);

                i++;
            }
        }