source: doc/papers/general/evaluation/c-bench.c @ 79d4186

aaron-thesisarm-ehcleanup-dtorsdeferred_resndemanglerjacob/cs343-translationjenkins-sandboxnew-astnew-ast-unique-exprnew-envno_listpersistent-indexerresolv-newwith_gc
Last change on this file since 79d4186 was 79d4186, checked in by Aaron Moss <a3moss@…>, 4 years ago

Update evaluation code for paper

  • Property mode set to 100644
File size: 2.1 KB
Line 
1#include <stdio.h>
2#include <stdlib.h>
3#include "bench.h"
4#include "c-pair.h"
5#include "c-stack.h"
6
7_Bool* new_bool( _Bool b ) {
8        _Bool* q = malloc(sizeof(_Bool)); /***/
9        *q = b;
10        return q;
11}
12
13char* new_char( char c ) {
14        char* q = malloc(sizeof(char)); /***/
15        *q = c;
16        return q;
17}
18
19int* new_int( int i ) {
20        int* q = malloc(sizeof(int)); /***/
21        *q = i;
22        return q;
23}
24
25void* copy_bool( const void* p ) { return new_bool( *(const _Bool*)p ); } /***/
26void* copy_char( const void* p ) { return new_char( *(const char*)p ); } /***/
27void* copy_int( const void* p ) { return new_int( *(const int*)p ); } /***/
28void* copy_pair_bool_char( const void* p ) { return copy_pair( p, copy_bool, copy_char ); } /***/
29void free_pair_bool_char( void* p ) { free_pair( p, free, free ); } /***/
30
31int cmp_bool( const void* a, const void* b ) { /***/
32        return *(const _Bool*)a == *(const _Bool*)b ? 0 : *(const _Bool*)a < *(const _Bool*)b ? -1 : 1; 
33}
34
35int cmp_char( const void* a, const void* b ) { /***/
36        return *(const char*)a == *(const char*)b ? 0 : *(const char*)a < *(const char*)b ? -1 : 1;
37}
38
39int main(int argc, char** argv) {
40        int maxi = 0, vali = 42;
41        struct stack si = new_stack(), ti;
42
43        REPEAT_TIMED( "push_int", N, push_stack( &si, new_int( vali ) ); )
44        TIMED( "copy_int",      copy_stack( &ti, &si, copy_int ); /***/ )
45        TIMED( "clear_int", clear_stack( &si, free ); /***/ )
46        REPEAT_TIMED( "pop_int", N, 
47                int* xi = pop_stack( &ti );
48                if ( *xi > maxi ) { maxi = *xi; }
49                free(xi); )
50
51        struct pair * maxp = new_pair( new_bool(0), new_char('\0') ),
52                * valp = new_pair( new_bool(1), new_char('a') );
53        struct stack sp = new_stack(), tp;
54
55        REPEAT_TIMED( "push_pair", N, push_stack( &sp, copy_pair_bool_char( valp ) ); )
56        TIMED( "copy_pair", copy_stack( &tp, &sp, copy_pair_bool_char ); /***/ )
57        TIMED( "clear_pair", clear_stack( &sp, free_pair_bool_char ); /***/ )
58        REPEAT_TIMED( "pop_pair", N, 
59                struct pair * xp = pop_stack( &tp );
60                if ( cmp_pair( xp, maxp, cmp_bool, cmp_char /***/ ) > 0 ) {
61                        free_pair_bool_char( maxp ); /***/
62                        maxp = xp;
63                } else {
64                        free_pair_bool_char( xp ); /***/
65                } )
66        free_pair_bool_char( maxp ); /***/
67        free_pair_bool_char( valp ); /***/
68}
Note: See TracBrowser for help on using the repository browser.