sisoputnfrba / so-commons-library

TADs de uso comun en aplicaciones desarrolladas en C
http://sisoputnfrba.github.io/so-commons-library/
GNU General Public License v3.0
106 stars 174 forks source link

Agregar una API simple para manejo de timestamps #156

Closed RaniAgus closed 2 years ago

RaniAgus commented 2 years ago

Podría ser algo simple que permita comparar dos timestamps:

t_temporal *t1 = temporal_create();

// pasa un ratito...

t_temporal *t2 = temporal_create();

int64_t ms = temporal_diff(t2, t1);

temporal_destroy(t1);
temporal_destroy(t2);

O algo más complejo, parecido a un StopWatch de Apache Commons.

julian-salinas commented 2 years ago

Hola! Cómo va? Ví tu issue y se me ocurrio una forma de implementar esto que mencionás y desarrollé una solución en un fork, si te parece, fijate si es en lo que estabas pensando :)

Mi idea fue crear una variable de tipo t_temporal que maneje milisegundos, sobre esa variable es posible obtener el tiempo desde que fué inicializada, calcular la diferencia con una variable del mismo tipo, poder pausarla y reanudarla cuando uno quiera.

saludos!

RaniAgus commented 2 years ago

¡Buenas @julian-salinas!

Genioo 🎉, mandanos un Pull Request y cuando tenga un ratito te hago code review 😉

También si podés subir un par de tests a tests/integration-tests con casos de uso simulados con sleeps a modo de ejemplo sería un golazo, se me ocurre algo tipo:

void test_temporal_gettime() {
    t_temporal *temporal = temporal_create();
    sleep(2);

    printf("test_temporal_gettime: %ldms (expected: ~2000ms)\n", temporal_gettime(temporal));

    temporal_destroy(temporal);
}

void test_temporal_stop() {
    t_temporal *temporal = temporal_create();
    sleep(1);
    temporal_stop(temporal);
    sleep(2);

    printf("test_temporal_stop: %ldms (expected: ~1000ms)\n", temporal_gettime(temporal));

    temporal_destroy(temporal);
}

void test_temporal_resume() {
    // detendría y reiniciaría el temporal un par de veces
}

void test_temporal_diff() {
    // crearía 2 temporal, los detendría en distintos momentos y los compararía
}

// algún otro caso de uso?

int main() {
   test_temporal_gettime();
   test_temporal_stop();
   test_temporal_resume();
   test_temporal_diff();
   ...
}

No los pondría en tests/unit-tests porque entiendo que es difícil hacerlo determinísitico, y si incluimos sleeps las pruebas tardarían bastante como para ser unitarias.

Abrazo

julian-salinas commented 2 years ago

Genial! Gracias Agus!