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); }
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); }
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()); }