// Pruebas de bench.h. No comprueban tiempos: cuentan llamadas y calculan medianas.
#include <string>
#include <vector>

#include "bench.h"
#include "check.h"

int main() {
    check(median_of({3.0}) == 3.0, "mediana de un valor");
    check(median_of({5.0, 1.0, 3.0}) == 3.0, "mediana con cantidad impar");
    check(median_of({4.0, 1.0, 3.0, 2.0}) == 2.5, "mediana con cantidad par");
    check(median_of({1.0, 1.0, 1.0, 1.0, 900.0}) == 1.0, "un valor atípico no mueve la mediana");

    int calls = 0;
    double seconds = median_seconds(7, [&] { calls++; });
    check(calls == 7, "median_seconds llama a fn exactamente reps veces");
    check(seconds >= 0, "un tiempo no es negativo");

    calls = 0;
    median_seconds(4, [&] { calls++; });
    check(calls == 4, "también con reps par");

    int number = 7;
    std::vector<int> values = {1, 2, 3};
    std::string text = "hola";
    keep(number);
    keep(values);
    keep(text);
    keep(number + 1);
    check(number == 7 && values.size() == 3 && text == "hola", "keep no cambia nada");

    std::printf("ok\n");
    return 0;
}
