source: doc/generic_types/evaluation/c-bench.c @ 3fb7f5e

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

Update benchmarks, cleanup edits to the evaluation section

  • Property mode set to 100644
File size: 2.7 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#include "c-print.h"
7
8_Bool* new_bool( _Bool b ) {
9        _Bool* q = malloc(sizeof(_Bool)); /***/
10        *q = b;
11        return q;
12}
13
14char* new_char( char c ) {
15        char* q = malloc(sizeof(char)); /***/
16        *q = c;
17        return q;
18}
19
20int* new_int( int i ) {
21        int* q = malloc(sizeof(int)); /***/
22        *q = i;
23        return q;
24}
25
26void* copy_bool( const void* p ) { return new_bool( *(const _Bool*)p ); } /***/
27
28void* copy_char( const void* p ) { return new_char( *(const char*)p ); } /***/
29
30void* copy_int( const void* p ) { return new_int( *(const int*)p ); } /***/
31
32void* copy_pair_bool_char( const void* p ) { return copy_pair( p, copy_bool, copy_char ); } /***/
33
34void free_pair_bool_char( void* p ) { free_pair( p, free, free ); } /***/
35
36int cmp_bool( const void* a, const void* b ) {
37        return *(const _Bool*)a == *(const _Bool*)b ? 0 : *(const _Bool*)a < *(const _Bool*)b ? -1 : 1; /***/
38}
39
40int cmp_char( const void* a, const void* b ) {
41        return *(const char*)a == *(const char*)b ? 0 : *(const char*)a < *(const char*)b ? -1 : 1; /***/
42}
43
44int main(int argc, char** argv) {
45        FILE* out = fopen("c-out.txt", "w");
46        srand(20171025);
47
48        struct stack s = new_stack();
49        REPEAT_TIMED( "push_int",
50                push_stack(&s, new_int( rand() ));
51        )
52
53        struct stack t;
54        TIMED( "copy_int",
55                copy_stack(&t, &s, copy_int); /***/
56        )
57
58        TIMED( "clear_int",
59                clear_stack(&s, free); /***/
60        )
61
62        int max = 0;
63        REPEAT_TIMED( "pop_int", 
64                int* x = pop_stack(&t); /***/
65                if ( *x > max ) { max = *x; }
66                free(x);
67        )
68        print( out, "d", max, "\n" ); /***/
69
70        REPEAT_N_TIMED( "print_int", N/2, 
71                print( out, "dsds", rand(), ":", rand(), "\n" ); /***/
72        )
73
74        struct stack s2 = new_stack();
75        REPEAT_TIMED( "push_bool_char", 
76                push_stack(&s2, new_pair( new_bool( rand() & 0x1 ), new_char( rand() & 0x7F ) ));
77        )
78
79        struct stack t2;
80        TIMED( "copy_bool_char", 
81                copy_stack(&t2, &s2, copy_pair_bool_char); /***/
82        )
83
84        TIMED( "clear_bool_char", 
85                clear_stack(&s2, free_pair_bool_char); /***/
86        )
87
88        struct pair* max2 = new_pair( new_bool(0), new_char('\0') );
89        REPEAT_TIMED( "pop_bool_char", 
90                struct pair* x = pop_stack(&t2); /***/
91                if ( cmp_pair( x, max2, cmp_bool, cmp_char ) > 0 ) { /***/
92                        free_pair_bool_char( max2 ); /***/
93                        max2 = x;
94                } else {
95                        free_pair_bool_char( x ); /***/
96                }
97        )
98        print( out, "pbc", *max2, "\n" ); /***/
99        free_pair_bool_char( max2 ); /***/
100
101        REPEAT_N_TIMED( "print_pair", N/2, 
102                struct pair p1 = ((struct pair){ new_bool(rand() & 0x1), new_char(rand() & 0x7F) }); /***/
103                struct pair p2 = ((struct pair){ new_bool(rand() & 0x1), new_char(rand() & 0x7F) }); /***/
104                print( out, "pbcspbcs", p1, ":", p2, "\n" ); /***/
105                free(p1.first); free(p1.second); /***/
106                free(p2.first); free(p2.second); /***/
107        )
108       
109        fclose(out);
110}
Note: See TracBrowser for help on using the repository browser.