// Path: genetic-car-server/src/test/java/fr/genetic/server/DataFactory.java
// public class DataFactory {
// 
//     public static CarView carView() {
//         CarView carView = new CarView();
// 
//         carView.chassis = new CarView.Chassis();
//         carView.chassis.densite = 30F;
//         carView.chassis.vecteurs.add(0.1F);
//         carView.chassis.vecteurs.add(0F);
//         carView.chassis.vecteurs.add(0.8F);
//         carView.chassis.vecteurs.add(0.3F);
//         carView.chassis.vecteurs.add(0F);
//         carView.chassis.vecteurs.add(0.5F);
//         carView.chassis.vecteurs.add(-1F);
//         carView.chassis.vecteurs.add(1.05F);
//         carView.chassis.vecteurs.add(-0.4F);
//         carView.chassis.vecteurs.add(0F);
//         carView.chassis.vecteurs.add(-0.1F);
//         carView.chassis.vecteurs.add(-0.7F);
//         carView.chassis.vecteurs.add(0F);
//         carView.chassis.vecteurs.add(-0.6F);
//         carView.chassis.vecteurs.add(1.09F);
//         carView.chassis.vecteurs.add(-1F);
// 
//         carView.wheel1 = new CarDefinition.WheelDefinition();
//         carView.wheel1.radius = 0.2F;
//         carView.wheel1.density = 50F;
//         carView.wheel1.vertex = 0;
// 
//         carView.wheel2 = new CarDefinition.WheelDefinition();
//         carView.wheel2.radius = 0.5F;
//         carView.wheel2.density = 100F;
//         carView.wheel2.vertex = 5;
// 
//         return carView;
//     }
// }
// 
// Path: genetic-car-server/src/main/java/fr/genetic/server/game/Team.java
// public enum Team {
// 
//     RED, YELLOW, BLUE, GREEN, ORANGE, PURPLE
// 
// }
// 
// Path: genetic-car-server/src/main/java/fr/genetic/server/web/view/CarView.java
// public class CarView {
// 
//     public Chassis chassis;
//     public CarDefinition.WheelDefinition wheel1;
//     public CarDefinition.WheelDefinition wheel2;
// 
//     public static CarView create(Car car) {
//         CarView carView = new CarView();
//         carView.chassis = Chassis.createFromDefinition(car.carDefinition);
//         carView.wheel1 = car.carDefinition.wheelDefinition1;
//         carView.wheel2 = car.carDefinition.wheelDefinition2;
//         return carView;
//     }
// 
//     public CarDefinition toCarDefintion() {
//         CarDefinition carDefinition = new CarDefinition();
//         carDefinition.wheelDefinition1 = wheel1;
//         carDefinition.wheelDefinition2 = wheel2;
//         carDefinition.chassisDensity = chassis.densite;
//         carDefinition.vertexList = chassis.toVecteurs();
//         return carDefinition;
//     }
// 
//     public static class Chassis {
//         public List<Float> vecteurs = new ArrayList<>();
//         public float densite;
// 
//         public static Chassis createFromDefinition(CarDefinition defintion) {
//             Chassis chassis = new Chassis();
//             defintion.vertexList.stream().forEach(chassis::addVecteur);
//             chassis.densite = defintion.chassisDensity;
//             return chassis;
//         }
// 
//         public Chassis addVecteur(Vec2 vec) {
//             vecteurs.add(vec.x);
//             vecteurs.add(vec.y);
//             return this;
//         }
// 
//         public List<Vec2> toVecteurs() {
//             List<Vec2> vec2liste = new ArrayList<>(vecteurs.size()/2);
// 
//             int loop = 0;
//             boolean isAbscisse = true;
//             for (Float coord : vecteurs) {
//                 if (isAbscisse) {
//                     Vec2 vec2 = new Vec2();
//                     vec2.x = coord;
//                     vec2liste.add(vec2);
//                     isAbscisse = false;
//                 } else {
//                     vec2liste.get(loop).y = coord;
//                     loop++;
//                     isAbscisse = true;
//                 }
//             }
//             return vec2liste;
//         }
//     }
// 
// }


import fr.genetic.server.DataFactory;
import fr.genetic.server.game.Team;
import fr.genetic.server.web.view.CarView;
import org.junit.Test;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
package fr.genetic.server.web.validator;



public class CarViewListValidatorTest {

    @Test
    public void should_validate_cars() {
        CarView carView = DataFactory.carView();

        CarViewListValidator validator = new CarViewListValidator();
        validator.validate(Arrays.asList(carView), Team.BLUE);
    }

    @Test(expected = IllegalArgumentException.class)
    public void should_throw_exception_when_list_too_big() {
        List<CarView> cars = IntStream.range(0, 21)
                .mapToObj(i -> new CarView())
                .collect(Collectors.toList());

        CarViewListValidator validator = new CarViewListValidator();
        validator.validate(cars, Team.BLUE);
    }

    @Test(expected = IllegalArgumentException.class)
    public void should_throw_exception_when_list_contains_bad_cars() {
        CarView carView = DataFactory.carView();
        carView.chassis.vecteurs.set(5, 5.2F);

        List<CarView> cars = IntStream.range(0, 2)
                .mapToObj(i -> DataFactory.carView())
                .collect(Collectors.toList());

        cars.add(carView);

        CarViewListValidator validator = new CarViewListValidator();
// Path: genetic-car-server/src/test/java/fr/genetic/server/DataFactory.java
// public class DataFactory {
// 
//     public static CarView carView() {
//         CarView carView = new CarView();
// 
//         carView.chassis = new CarView.Chassis();
//         carView.chassis.densite = 30F;
//         carView.chassis.vecteurs.add(0.1F);
//         carView.chassis.vecteurs.add(0F);
//         carView.chassis.vecteurs.add(0.8F);
//         carView.chassis.vecteurs.add(0.3F);
//         carView.chassis.vecteurs.add(0F);
//         carView.chassis.vecteurs.add(0.5F);
//         carView.chassis.vecteurs.add(-1F);
//         carView.chassis.vecteurs.add(1.05F);
//         carView.chassis.vecteurs.add(-0.4F);
//         carView.chassis.vecteurs.add(0F);
//         carView.chassis.vecteurs.add(-0.1F);
//         carView.chassis.vecteurs.add(-0.7F);
//         carView.chassis.vecteurs.add(0F);
//         carView.chassis.vecteurs.add(-0.6F);
//         carView.chassis.vecteurs.add(1.09F);
//         carView.chassis.vecteurs.add(-1F);
// 
//         carView.wheel1 = new CarDefinition.WheelDefinition();
//         carView.wheel1.radius = 0.2F;
//         carView.wheel1.density = 50F;
//         carView.wheel1.vertex = 0;
// 
//         carView.wheel2 = new CarDefinition.WheelDefinition();
//         carView.wheel2.radius = 0.5F;
//         carView.wheel2.density = 100F;
//         carView.wheel2.vertex = 5;
// 
//         return carView;
//     }
// }
// 
// Path: genetic-car-server/src/main/java/fr/genetic/server/game/Team.java
// public enum Team {
// 
//     RED, YELLOW, BLUE, GREEN, ORANGE, PURPLE
// 
// }
// 
// Path: genetic-car-server/src/main/java/fr/genetic/server/web/view/CarView.java
// public class CarView {
// 
//     public Chassis chassis;
//     public CarDefinition.WheelDefinition wheel1;
//     public CarDefinition.WheelDefinition wheel2;
// 
//     public static CarView create(Car car) {
//         CarView carView = new CarView();
//         carView.chassis = Chassis.createFromDefinition(car.carDefinition);
//         carView.wheel1 = car.carDefinition.wheelDefinition1;
//         carView.wheel2 = car.carDefinition.wheelDefinition2;
//         return carView;
//     }
// 
//     public CarDefinition toCarDefintion() {
//         CarDefinition carDefinition = new CarDefinition();
//         carDefinition.wheelDefinition1 = wheel1;
//         carDefinition.wheelDefinition2 = wheel2;
//         carDefinition.chassisDensity = chassis.densite;
//         carDefinition.vertexList = chassis.toVecteurs();
//         return carDefinition;
//     }
// 
//     public static class Chassis {
//         public List<Float> vecteurs = new ArrayList<>();
//         public float densite;
// 
//         public static Chassis createFromDefinition(CarDefinition defintion) {
//             Chassis chassis = new Chassis();
//             defintion.vertexList.stream().forEach(chassis::addVecteur);
//             chassis.densite = defintion.chassisDensity;
//             return chassis;
//         }
// 
//         public Chassis addVecteur(Vec2 vec) {
//             vecteurs.add(vec.x);
//             vecteurs.add(vec.y);
//             return this;
//         }
// 
//         public List<Vec2> toVecteurs() {
//             List<Vec2> vec2liste = new ArrayList<>(vecteurs.size()/2);
// 
//             int loop = 0;
//             boolean isAbscisse = true;
//             for (Float coord : vecteurs) {
//                 if (isAbscisse) {
//                     Vec2 vec2 = new Vec2();
//                     vec2.x = coord;
//                     vec2liste.add(vec2);
//                     isAbscisse = false;
//                 } else {
//                     vec2liste.get(loop).y = coord;
//                     loop++;
//                     isAbscisse = true;
//                 }
//             }
//             return vec2liste;
//         }
//     }
// 
// }


// Path: genetic-car-server/src/test/java/fr/genetic/server/web/validator/CarViewListValidatorTest.java
import fr.genetic.server.DataFactory;
import fr.genetic.server.game.Team;
import fr.genetic.server.web.view.CarView;
import org.junit.Test;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.IntStream;

package fr.genetic.server.web.validator;



public class CarViewListValidatorTest {

    @Test
    public void should_validate_cars() {
        CarView carView = DataFactory.carView();

        CarViewListValidator validator = new CarViewListValidator();
        validator.validate(Arrays.asList(carView), Team.BLUE);
    }

    @Test(expected = IllegalArgumentException.class)
    public void should_throw_exception_when_list_too_big() {
        List<CarView> cars = IntStream.range(0, 21)
                .mapToObj(i -> new CarView())
                .collect(Collectors.toList());

        CarViewListValidator validator = new CarViewListValidator();
        validator.validate(cars, Team.BLUE);
    }

    @Test(expected = IllegalArgumentException.class)
    public void should_throw_exception_when_list_contains_bad_cars() {
        CarView carView = DataFactory.carView();
        carView.chassis.vecteurs.set(5, 5.2F);

        List<CarView> cars = IntStream.range(0, 2)
                .mapToObj(i -> DataFactory.carView())
                .collect(Collectors.toList());

        cars.add(carView);

        CarViewListValidator validator = new CarViewListValidator();
        validator.validate(cars, Team.BLUE);