#include "ink.h" #include #include int main(int argc, char** argv) { char read_buffer[2048]; struct timespec start_time, end_time; clock_t begin, end; double time_spent; double s_total = 0; struct context* ctx; char** end_argv; ctx = ink_make_default_context(); end_argv = argv + argc; for(argv+=1; argv != end_argv; argv++) { FILE* file; size_t cnt; file = fopen(*argv, "r"); cnt = fread(read_buffer, 1, 2047, file); if(cnt == 0) { fprintf(stderr, "Can't read file !! -> %s\n", *argv); } read_buffer[cnt] = 0; ink_compile(ctx, read_buffer); if(ctx->panic) { fprintf(stderr, "Panicked !! -> %d\n", ctx->panic); } fclose(file); } int increment = 1 << 16; int counter = increment; int c; begin = clock(); clock_gettime(CLOCK_MONOTONIC, &start_time); while(ink_can_run(ctx)) { for(c = 0; c < 64; ++c) ink_step_everyone(ctx); if(ctx->steps < counter) { ink_gc(ctx); counter += increment; } } clock_gettime(CLOCK_MONOTONIC, &end_time); end = clock(); time_spent = ctx->steps/(double)((end - begin) / CLOCKS_PER_SEC); s_total += (end_time.tv_sec - start_time.tv_sec) + (end_time.tv_nsec - start_time.tv_nsec) / 1.0e9; s_total = ctx->steps / s_total; printf("\nExecuted in %u steps\nCollected %u times\nExecution freq: %lfHz\n", ctx->steps, ctx->collections, s_total); return ctx->panic; }