static int find = 2500;
static int sideEffect = 0;
bool function1()
{
sideEffect *= find;
bool found = false;
for (int bar =0; !found && bar < 100; ++bar)
for(int foo = 0; !found && foo < 100; ++foo)
if (foo * bar == find)
found = true;
return found;
}
bool function2()
{
sideEffect *= find;
for (int bar =0; bar < 100; ++bar)
for(int foo = 0; foo < 100; ++foo)
if (foo * bar == find)
return 1;
return 0;
}
bool function3()
{
sideEffect *= find;
bool result = false;
for (int bar =0; bar < 100; ++bar)
for(int foo = 0; foo < 100; ++foo)
if ( (result=(foo * bar == find)) )
goto end;
end:
return result;
}
bool function4()
{
try
{
sideEffect *= find;
for (int bar =0; bar < 100; ++bar)
for(int foo = 0; foo < 100; ++foo)
if (foo * bar == find)
throw true;
}
catch(bool b) { return b; }
return 0;
}
void Test()
{
scanf("%d", &find);
u8 stackMem[1024];
StackAlloc stack( stackMem, 1024 );
Scope scope( stack, "main" );
Timer& timer = *eiNew(scope, Timer)();
int r = 0;
double b, e;
b = timer.Elapsed();
for( int i=0; i!=10000; ++i )
r += (int)function2();
e = timer.Elapsed();
double t1 = e-b;
b = timer.Elapsed();
//for( int j=0; j!=10000; ++j )
for( int i=0; i!=100000; ++i )
r += (int)function2();
e = timer.Elapsed();
t1 = e-b;
b = timer.Elapsed();
//for( int j=0; j!=10000; ++j )
for( int i=0; i!=100000; ++i )
r += (int)function1();
e = timer.Elapsed();
double t2 = e-b;
b = timer.Elapsed();
//for( int j=0; j!=10000; ++j )
for( int i=0; i!=100000; ++i )
r += (int)function3();
e = timer.Elapsed();
double t3 = e-b;
b = timer.Elapsed();
//for( int j=0; j!=10000; ++j )
for( int i=0; i!=100000; ++i )
r += (int)function4();
e = timer.Elapsed();
double t4 = e-b;
printf( "%f, %f, %f, %f\n %d\n", t1, t2, t3, t4, r+sideEffect );
}