Exemplo n.º 1
0
        public void Should_Simulate_A_Car_Driving_Down_A_Simple_Road()
        {
            // Arrange
            var road            = new Road();
            var initialPosition = new Position(0);
            var expected        = new Position(road.Length);
            var car             = new Car(road, initialPosition, expected, speed: 88);
            var simulation      = new Simulator();

            simulation.AddCar(car);

            const int runningTime = 60;             // seconds

            // Act
            simulation.RunSimulation(runningTime);

            var actual = car.Position;

            // Assert
            Assert.Equal(expected, actual);
        }
Exemplo n.º 2
0
        public void Should_Change_Road_At_Intersection()
        {
            // Arrange
            var road         = new Road();
            var intersection = new Road();
            var destination  = new Position(18, Lane.Left, isIntersection: true);

            road.AddIntersection(destination, intersection);

            var car = new Car(road, new Position(11, Lane.Left), destination);

            car.Accelerate();

            var expected = intersection.RoadId.Value;

            // Act
            car.Drive();

            var actual = car.CurrentRoad.RoadId.Value;

            // Assert
            Assert.Equal(expected, actual);
        }
Exemplo n.º 3
0
        public void Road_GetCaсtusPlaces_Test()
        {
            // Исходные даные для теста:
            // - ширина визуальной части, м
            double width = 101;
            // - скорость человека, мм/мсек
            double runspeed = PWM.MIN_RUN_SPEED;
            // - время одного прыжка человека, мсек
            double jumptime = PWM.JUMP_TIME;
            // - время одного прыжка человека, сек
            double jumptimeSeconds = jumptime / 1000;

            // Дополнительные данные:
            // - ширина человека, мм
            double manWidth = PWM.MAN_WIDTH;
            // - ширина человека, м
            double manWidthMeters = manWidth / 1000;

            // Расчет:
            // 1. Время, за которое человек пробежит видимый участок дороги
            double runningSeconds = width / runspeed;
            // 2. Cколько раз может прыгнуть
            double jumpCount = runningSeconds / jumptimeSeconds;
            // 3. Количество сегментов:
            // - jumpCount - 1 - целые сегменты одинаковой длины
            // - последний сегмент возможно неполный
            int segmentCount = (int)Math.Ceiling(jumpCount);
            // 4. Длина целого сегмента, м
            double segmentLength = width / jumpCount - manWidthMeters;

            // 5. Формирование сегментов
            Segment[] expected = new Segment[segmentCount];

            // непосредственный расчет сегментов:
            // - все целые сегменты:
            //  смещение
            double offset = manWidthMeters;

            for (int i = 0; i < expected.Length - 1; i++)
            {
                //offset = i * (segmentLength + manWidthMeters) + manWidthMeters;
                //offset = i * segmentLength + i * manWidthMeters + manWidthMeters;
                //offset = i * segmentLength + (i + 1) * manWidthMeters;
                // создание объекта с помощью инициализатора
                expected[i] = new Segment {
                    Offset = offset, Length = segmentLength
                };
                // создание объекта с помощью конструктора
                //expected[i] = new Segment(offset, segmentLength);
                offset += segmentLength + manWidthMeters;
                //offset = (i + 1) * (segmentLength + manWidthMeters) + manWidthMeters;
            }
            // - последний сегмент
            //int index = expected.Length - 1;
            //offset = index * segmentLength + (index + 1) * manWidthMeters;
            expected[expected.Length - 1] = new Segment {
                Offset = offset, Length = width - offset
            };
            // конец расчета сегментов

            Segment[] actual = Road.GetCaсtusPlaces(width, runspeed, jumptime, manWidth);

            CollectionAssert.AreEqual(expected, actual, new SegmentComparer());
        }