@Test
  public void testFilterByCity() throws IOException {
    List<Person> people = PeopleData.read("people.csv");
    List<Person> selected = PersonFilter.search(people, person -> person.getCity().equals("Zug"));

    for (int i = 0; i < selected.size() - 1; i++) {
      if (!selected.get(i).getCity().equals("Zug")) fail("Filter by city : index " + i);
    }
    System.out.println("Total people from Zug: " + selected.size() + "/" + people.size());
    PeopleData.write("output/filteredByCity.csv", selected);
  }
  @Test
  public void testFilterByMale() throws IOException {
    List<Person> people = PeopleData.read("people.csv");
    List<Person> selected = PersonFilter.search(people, this::isMale);

    for (int i = 0; i < selected.size() - 1; i++) {
      if (selected.get(i).getGender() != Gender.MALE) fail("Filter male people : index " + i);
    }
    System.out.println("Total male people: " + selected.size() + "/" + people.size());
    PeopleData.write("output/filteredByGenderMale.csv", selected);
  }
  @Test
  public void testFilterByAge18And65() throws IOException {
    List<Person> people = PeopleData.read("people.csv");
    List<Person> selected =
        PersonFilter.search(people, person -> person.getAge() > 18 && person.getAge() < 65);

    for (int i = 0; i < selected.size() - 1; i++) {
      if (selected.get(i).getAge() <= 18 || selected.get(i).getAge() >= 65)
        fail("Filter by age between 18 and 65 : index " + i);
    }
    System.out.println("Total people between 18 and 65: " + selected.size() + "/" + people.size());
  }
  @Test
  public void testFilterByMaleZurich() throws IOException {
    List<Person> people = PeopleData.read("people.csv");
    List<Person> selected =
        PersonFilter.search(
            people,
            person -> person.getGender() == Gender.MALE && person.getCity().equals("Zürich"));

    for (int i = 0; i < selected.size() - 1; i++) {
      if (selected.get(i).getGender() != Gender.MALE && selected.get(i).getCity().equals("Zürich"))
        fail("Filter male people from zurich: index " + i);
    }
    System.out.println("Total male people from zurich: " + selected.size() + "/" + people.size());
    PeopleData.write("output/filteredByMaleZH.csv", selected);
  }