Last active
October 2, 2017 15:33
-
-
Save croepha/3a19cdd833056cd013fcb4e83bb58a25 to your computer and use it in GitHub Desktop.
compile_time_tests.cpp
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* build.sh: | |
mkdir -p build/ | |
time clang++ --std=gnu++11 \ | |
-fsanitize=address -fsanitize=undefined \ | |
main.cpp -o build/main.bin | |
build/main.bin | |
echo building build/output.c | |
wc build/output.c | |
echo gcc | |
env time gcc -c build/output.c -o build/output.c.o | |
env time gcc -c build/output.c -o build/output.c.o | |
env time gcc -c build/output.c -o build/output.c.o | |
env time gcc -c build/output.c -o build/output.c.o | |
echo clang | |
env time clang -c build/output.c -o build/output.c.o | |
env time clang -c build/output.c -o build/output.c.o | |
env time clang -c build/output.c -o build/output.c.o | |
env time clang -c build/output.c -o build/output.c.o | |
env echo building build/output.cpp | |
wc build/output.cpp | |
echo g++ | |
env time g++ -c build/output.cpp -o build/output.cpp.o | |
env time g++ -c build/output.cpp -o build/output.cpp.o | |
env time g++ -c build/output.cpp -o build/output.cpp.o | |
env time g++ -c build/output.cpp -o build/output.cpp.o | |
echo clang++ | |
env time clang++ -c build/output.cpp -o build/output.cpp.o | |
env time clang++ -c build/output.cpp -o build/output.cpp.o | |
env time clang++ -c build/output.cpp -o build/output.cpp.o | |
env time clang++ -c build/output.cpp -o build/output.cpp.o | |
building build/output.c | |
54492 124503 1704453 build/output.c | |
gcc | |
2.94user 0.92system 0:03.98elapsed 96%CPU (0avgtext+0avgdata 183624maxresident)k | |
3368inputs+8424outputs (0major+61886minor)pagefaults 0swaps | |
2.92user 0.19system 0:03.27elapsed 95%CPU (0avgtext+0avgdata 183480maxresident)k | |
3368inputs+8424outputs (0major+61876minor)pagefaults 0swaps | |
3.24user 0.19system 0:03.90elapsed 88%CPU (0avgtext+0avgdata 183384maxresident)k | |
3368inputs+8424outputs (0major+61875minor)pagefaults 0swaps | |
2.68user 0.21system 0:03.04elapsed 95%CPU (0avgtext+0avgdata 183472maxresident)k | |
3368inputs+8424outputs (0major+61877minor)pagefaults 0swaps | |
clang | |
1.45user 0.07system 0:01.69elapsed 90%CPU (0avgtext+0avgdata 97296maxresident)k | |
3336inputs+0outputs (1major+19083minor)pagefaults 0swaps | |
1.33user 0.06system 0:01.53elapsed 90%CPU (0avgtext+0avgdata 97140maxresident)k | |
3336inputs+0outputs (1major+19043minor)pagefaults 0swaps | |
1.38user 0.07system 0:01.65elapsed 88%CPU (0avgtext+0avgdata 97212maxresident)k | |
3336inputs+0outputs (1major+19069minor)pagefaults 0swaps | |
1.48user 0.08system 0:01.86elapsed 83%CPU (0avgtext+0avgdata 97144maxresident)k | |
3336inputs+0outputs (1major+19089minor)pagefaults 0swaps | |
building build/output.cpp | |
54492 120319 1059772 build/output.cpp | |
g++ | |
2.97user 0.25system 0:03.36elapsed 95%CPU (0avgtext+0avgdata 222260maxresident)k | |
2104inputs+9464outputs (0major+77181minor)pagefaults 0swaps | |
3.02user 0.17system 0:03.41elapsed 93%CPU (0avgtext+0avgdata 223088maxresident)k | |
2104inputs+9464outputs (0major+76919minor)pagefaults 0swaps | |
2.98user 0.14system 0:03.32elapsed 93%CPU (0avgtext+0avgdata 223532maxresident)k | |
2104inputs+9464outputs (0major+76995minor)pagefaults 0swaps | |
2.97user 0.19system 0:03.31elapsed 95%CPU (0avgtext+0avgdata 222020maxresident)k | |
2104inputs+9464outputs (0major+77155minor)pagefaults 0swaps | |
clang++ | |
1.39user 0.09system 0:01.67elapsed 89%CPU (0avgtext+0avgdata 95416maxresident)k | |
2072inputs+0outputs (1major+18484minor)pagefaults 0swaps | |
1.47user 0.08system 0:01.69elapsed 91%CPU (0avgtext+0avgdata 95192maxresident)k | |
2072inputs+0outputs (1major+18485minor)pagefaults 0swaps | |
1.48user 0.05system 0:01.69elapsed 90%CPU (0avgtext+0avgdata 95192maxresident)k | |
2072inputs+0outputs (1major+18492minor)pagefaults 0swaps | |
1.43user 0.09system 0:01.69elapsed 90%CPU (0avgtext+0avgdata 95536maxresident)k | |
2072inputs+0outputs (1major+18496minor)pagefaults 0swaps | |
exited with code 0 | |
*/ | |
#include <stdio.h> | |
#include <time.h> | |
#include <stdlib.h> | |
#include <assert.h> | |
void build_c() { | |
srand(1506883738); | |
auto f = fopen("build/output.c", "w"); | |
assert(f); | |
int funkyno = 0; | |
int typeno = 0; | |
while (funkyno < 10000) { | |
bool has_constructor = rand()%2; | |
bool has_destructor = rand()%2; | |
auto type_member_count = rand()%16 + 1; | |
auto method_count = rand()%16 + 1; | |
fprintf(f, "typedef struct Type_%06d {\n", typeno); | |
for (int i=0;i<type_member_count; i++) { | |
fprintf(f, " int member_%02d;\n", i); | |
} | |
fprintf(f, "} Type_%06d;\n", typeno); | |
if (has_constructor) { | |
fprintf(f, "void Type_%06d_constructor(Type_%06d*instance);\n", typeno, typeno); | |
} | |
if (has_destructor) { | |
fprintf(f, "void Type_%06d_destructor(Type_%06d*instance);\n", typeno, typeno); | |
} | |
for (int i=0;i<method_count; i++) { | |
fprintf(f, "void Type_%06d_method_%06d(Type_%06d*instance);\n", typeno, i, typeno); | |
} | |
if (has_constructor) { | |
fprintf(f, "void Type_%06d_constructor(Type_%06d*instance) {\n", typeno, typeno); | |
for (int i=0;i<type_member_count; i++) { | |
if (rand()%2) fprintf(f, " instance->member_%02d = %d;\n", i, rand()%8192); | |
} | |
fprintf(f, "}\n"); | |
funkyno++; | |
} | |
if (has_destructor) { | |
fprintf(f, "void Type_%06d_destructor(Type_%06d*instance) {\n", typeno, typeno); | |
for (int i=0;i<type_member_count; i++) { | |
if (rand()%2) fprintf(f, " instance->member_%02d = %d;\n", i, rand()%8192); | |
} | |
fprintf(f, "}\n"); | |
funkyno++; | |
} | |
for (int i=0;i<method_count; i++) { | |
fprintf(f, "void Type_%06d_method_%06d(Type_%06d*instance) {\n", typeno, i, typeno); | |
fprintf(f, " instance->member_%02d = %d;\n", rand()%type_member_count, rand()%8192); | |
fprintf(f, "}\n"); | |
funkyno++; | |
} | |
typeno++; | |
fprintf(f, ""); | |
} | |
fclose(f); | |
} | |
void build_cpp() { | |
srand(1506883738); | |
auto f = fopen("build/output.cpp", "w"); | |
assert(f); | |
int funkyno = 0; | |
int typeno = 0; | |
while (funkyno < 10000) { | |
bool has_constructor = rand()%2; | |
bool has_destructor = rand()%2; | |
auto type_member_count = rand()%16 + 1; | |
auto method_count = rand()%16 + 1; | |
fprintf(f, "struct Type_%06d {\n", typeno); | |
for (int i=0;i<type_member_count; i++) { | |
fprintf(f, " int member_%02d;\n", i); | |
} | |
if (has_constructor) { | |
fprintf(f, " Type_%06d();\n", typeno); | |
funkyno++; | |
} | |
if (has_destructor) { | |
fprintf(f, " ~Type_%06d();\n", typeno); | |
funkyno++; | |
} | |
for (int i=0;i<method_count; i++) { | |
fprintf(f, " void method_%06d(); \n", i); | |
funkyno++; | |
} | |
fprintf(f, "};\n"); | |
if (has_constructor) { | |
fprintf(f, "Type_%06d::Type_%06d() {\n", typeno, typeno); | |
for (int i=0;i<type_member_count; i++) { | |
if (rand()%2) fprintf(f, " member_%02d = %d;\n", i, rand()%8192); | |
} | |
fprintf(f, "}\n"); | |
} | |
if (has_destructor) { | |
fprintf(f, "Type_%06d::~Type_%06d() {\n", typeno, typeno); | |
for (int i=0;i<type_member_count; i++) { | |
if (rand()%2) fprintf(f, " member_%02d = %d;\n", i, rand()%8192); | |
} | |
fprintf(f, "}\n"); | |
} | |
for (int i=0;i<method_count; i++) { | |
fprintf(f, "void Type_%06d::method_%06d() {\n", typeno, i); | |
fprintf(f, " member_%02d = %d;\n", rand()%type_member_count, rand()%8192); | |
fprintf(f, "}\n"); | |
} | |
typeno++; | |
} | |
fclose(f); | |
} | |
int main() { | |
build_c(); | |
build_cpp(); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment