source: doc/generic_types/evaluation/c-bench.c @ a381b46

ADTaaron-thesisarm-ehast-experimentalcleanup-dtorsdeferred_resndemanglerenumforall-pointer-decayjacob/cs343-translationjenkins-sandboxnew-astnew-ast-unique-exprnew-envno_listpersistent-indexerpthread-emulationqualifiedEnumresolv-newwith_gc
Last change on this file since a381b46 was a381b46, checked in by Aaron Moss <a3moss@…>, 7 years ago

Minor cleanup, also filled in benchmark source appendix

  • Property mode set to 100644
File size: 2.5 KB
RevLine 
[0d10090]1#include <stdio.h>
[309be81]2#include <stdlib.h>
3#include "bench.h"
[87c5f40]4#include "c-pair.h"
[309be81]5#include "c-stack.h"
[0d10090]6#include "c-print.h"
[309be81]7
[87c5f40]8_Bool* new_bool( _Bool b ) {
[3fb7f5e]9        _Bool* q = malloc(sizeof(_Bool)); /***/
[87c5f40]10        *q = b;
11        return q;
12}
13
14char* new_char( char c ) {
[3fb7f5e]15        char* q = malloc(sizeof(char)); /***/
[87c5f40]16        *q = c;
17        return q;
18}
19
20int* new_int( int i ) {
[3fb7f5e]21        int* q = malloc(sizeof(int)); /***/
[87c5f40]22        *q = i;
[122aecd]23        return q;
24}
25
[3fb7f5e]26void* copy_bool( const void* p ) { return new_bool( *(const _Bool*)p ); } /***/
27void* copy_char( const void* p ) { return new_char( *(const char*)p ); } /***/
28void* copy_int( const void* p ) { return new_int( *(const int*)p ); } /***/
29void* copy_pair_bool_char( const void* p ) { return copy_pair( p, copy_bool, copy_char ); } /***/
30void free_pair_bool_char( void* p ) { free_pair( p, free, free ); } /***/
[87c5f40]31
[a381b46]32int cmp_bool( const void* a, const void* b ) { /***/
33        return *(const _Bool*)a == *(const _Bool*)b ? 0 : *(const _Bool*)a < *(const _Bool*)b ? -1 : 1; 
[87c5f40]34}
35
36int cmp_char( const void* a, const void* b ) {
[3fb7f5e]37        return *(const char*)a == *(const char*)b ? 0 : *(const char*)a < *(const char*)b ? -1 : 1; /***/
[87c5f40]38}
39
[309be81]40int main(int argc, char** argv) {
[3fb7f5e]41        FILE* out = fopen("c-out.txt", "w");
[87c5f40]42        int max = 0;
[a381b46]43        struct stack s = new_stack(), t;
44        REPEAT_TIMED( "push_int", push_stack(&s, new_int( _i )); )
45        TIMED( "copy_int",      copy_stack(&t, &s, copy_int); /***/ )
46        TIMED( "clear_int", clear_stack(&s, free); /***/ )
[122aecd]47        REPEAT_TIMED( "pop_int", 
[3fb7f5e]48                int* x = pop_stack(&t); /***/
[87c5f40]49                if ( *x > max ) { max = *x; }
[a381b46]50                free(x); )
51        REPEAT_N_TIMED( "print_int", N/2, print( out, "dsds", _i, ":", _i, "\n" ); /***/ )
[3fb7f5e]52
[a381b46]53        struct pair* max2 = new_pair( new_bool(0), new_char('\0') );
54        struct stack s2 = new_stack(), t2;
[87c5f40]55
56        REPEAT_TIMED( "push_bool_char", 
[a381b46]57                push_stack(&s2, new_pair( new_bool( _i & 0x1 ), new_char( _i & 0x7F ) )); )
58        TIMED( "copy_bool_char", copy_stack(&t2, &s2, copy_pair_bool_char); /***/ )
59        TIMED( "clear_bool_char", clear_stack(&s2, free_pair_bool_char); /***/ )
[87c5f40]60        REPEAT_TIMED( "pop_bool_char", 
[3fb7f5e]61                struct pair* x = pop_stack(&t2); /***/
62                if ( cmp_pair( x, max2, cmp_bool, cmp_char ) > 0 ) { /***/
63                        free_pair_bool_char( max2 ); /***/
[87c5f40]64                        max2 = x;
65                } else {
[3fb7f5e]66                        free_pair_bool_char( x ); /***/
[a381b46]67                } )
[3fb7f5e]68        REPEAT_N_TIMED( "print_pair", N/2, 
69                struct pair p1 = ((struct pair){ new_bool(rand() & 0x1), new_char(rand() & 0x7F) }); /***/
70                struct pair p2 = ((struct pair){ new_bool(rand() & 0x1), new_char(rand() & 0x7F) }); /***/
71                print( out, "pbcspbcs", p1, ":", p2, "\n" ); /***/
72                free(p1.first); free(p1.second); /***/
[a381b46]73                free(p2.first); free(p2.second); /***/ )
74        free_pair_bool_char( max2 ); /***/
[0d10090]75        fclose(out);
[309be81]76}
Note: See TracBrowser for help on using the repository browser.