// Pruebas de trips.c, con assert.
#define main trips_main
#include "trips.c"
#undef main

#include <assert.h>

// Una ruta nueva empieza con un viaje; una que ya existe acumula.
void test_add_trip(void) {
    struct route routes[MAX_ROUTES];
    int n = 0;
    n = add_trip(routes, n, "Ate", 9);
    assert(n == 1);
    assert(routes[0].trips == 1);
    assert(routes[0].passengers == 9);
    n = add_trip(routes, n, "Ate", 14);
    assert(n == 1);
    assert(routes[0].trips == 2);
    assert(routes[0].passengers == 23);
    n = add_trip(routes, n, "Callao", 25);
    assert(n == 2);
}

// Si la ruta no está, la respuesta es -1, no 0: 0 es una posición válida.
void test_find_route(void) {
    struct route routes[MAX_ROUTES];
    int n = add_trip(routes, 0, "Ate", 9);
    assert(find_route(routes, n, "Ate") == 0);
    assert(find_route(routes, n, "Callao") == -1);
}

void test_busiest_route(void) {
    struct route routes[MAX_ROUTES];
    int n = add_trip(routes, 0, "Ate", 9);
    n = add_trip(routes, n, "Callao", 25);
    assert(busiest_route(routes, n) == 1);
    assert(busiest_route(routes, 0) == -1);
}

// Una ruta con muchos viajes cortos puede ganarle a una con pocos viajes largos.
void test_busiest_counts_all_trips(void) {
    struct route routes[MAX_ROUTES];
    int n = add_trip(routes, 0, "Callao", 25);
    n = add_trip(routes, n, "Ate", 10);
    n = add_trip(routes, n, "Ate", 10);
    n = add_trip(routes, n, "Ate", 10);
    assert(busiest_route(routes, n) == 1);
}

int main(void) {
    test_add_trip();
    test_find_route();
    test_busiest_route();
    test_busiest_counts_all_trips();
    printf("Todas las pruebas pasan\n");
    return 0;
}
