Added some tests involving phobos.
This commit is contained in:
parent
5d96b5e3ca
commit
ed4e619228
6 changed files with 102 additions and 1 deletions
|
@ -47,7 +47,7 @@ SET(CMAKE_DL_LIBS "dl")
|
||||||
SET(CMAKE_FIND_LIBRARY_PREFIXES "lib")
|
SET(CMAKE_FIND_LIBRARY_PREFIXES "lib")
|
||||||
SET(CMAKE_FIND_LIBRARY_SUFFIXES ".so" ".a")
|
SET(CMAKE_FIND_LIBRARY_SUFFIXES ".so" ".a")
|
||||||
|
|
||||||
SET(CMAKE_D_STDLIBS "-L-lphobos2 -L-lpthread -L-lm" )
|
#SET(CMAKE_D_STDLIBS "-L-lphobos2 -L-lpthread -L-lm" )
|
||||||
|
|
||||||
#SET (CMAKE_D_FLAGS_INIT "-version=${CMAKE_BUILD_TYPE}Build ${DSTDLIB_FLAGS} ${DSTDLIB_TYPE} -I$ENV{D_PATH}/include -I$ENV{D_PATH}/import -I${CMAKE_PROJECT_SOURCE_DIR}")
|
#SET (CMAKE_D_FLAGS_INIT "-version=${CMAKE_BUILD_TYPE}Build ${DSTDLIB_FLAGS} ${DSTDLIB_TYPE} -I$ENV{D_PATH}/include -I$ENV{D_PATH}/import -I${CMAKE_PROJECT_SOURCE_DIR}")
|
||||||
SET (CMAKE_D_FLAGS_INIT "")
|
SET (CMAKE_D_FLAGS_INIT "")
|
||||||
|
|
|
@ -27,3 +27,5 @@ ADD_SUBDIRECTORY (app_2)
|
||||||
ADD_SUBDIRECTORY (app_3)
|
ADD_SUBDIRECTORY (app_3)
|
||||||
ADD_SUBDIRECTORY (app_5)
|
ADD_SUBDIRECTORY (app_5)
|
||||||
ADD_SUBDIRECTORY (app_4)
|
ADD_SUBDIRECTORY (app_4)
|
||||||
|
ADD_SUBDIRECTORY (app_6)
|
||||||
|
ADD_SUBDIRECTORY (app_7)
|
||||||
|
|
2
tests/app_6/CMakeLists.txt
Normal file
2
tests/app_6/CMakeLists.txt
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
ADD_EXECUTABLE( app_6 app_6.d )
|
||||||
|
ADD_TEST( app_6 app_6 )
|
9
tests/app_6/app_6.d
Normal file
9
tests/app_6/app_6.d
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
/*
|
||||||
|
Barebones app, but uses phobos
|
||||||
|
*/
|
||||||
|
import std.stdio;
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
writeln( "Hello, world!" );
|
||||||
|
return 0;
|
||||||
|
}
|
3
tests/app_7/CMakeLists.txt
Normal file
3
tests/app_7/CMakeLists.txt
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
# A more complex library test.
|
||||||
|
ADD_EXECUTABLE( app_7 app_7.d )
|
||||||
|
ADD_TEST( app_7 app_7 )
|
85
tests/app_7/app_7.d
Normal file
85
tests/app_7/app_7.d
Normal file
|
@ -0,0 +1,85 @@
|
||||||
|
import std.stdio;
|
||||||
|
import core.thread;
|
||||||
|
import std.perf;
|
||||||
|
|
||||||
|
// Yield count should be larger for a
|
||||||
|
// more accurate measurment, but this
|
||||||
|
// is just a unit tests, so don't spin
|
||||||
|
// for long
|
||||||
|
immutable uint yield_count = 1000;
|
||||||
|
immutable uint worker_count = 10;
|
||||||
|
|
||||||
|
uint stack_check()
|
||||||
|
{
|
||||||
|
uint x;
|
||||||
|
asm
|
||||||
|
{
|
||||||
|
mov x,ESP;
|
||||||
|
}
|
||||||
|
return x;
|
||||||
|
}
|
||||||
|
|
||||||
|
void fiber_func()
|
||||||
|
{
|
||||||
|
uint i = yield_count;
|
||||||
|
while( --i ) Fiber.yield();
|
||||||
|
}
|
||||||
|
|
||||||
|
void thread_func()
|
||||||
|
{
|
||||||
|
uint i = yield_count;
|
||||||
|
while( --i ) Thread.yield();
|
||||||
|
}
|
||||||
|
|
||||||
|
void fiber_test()
|
||||||
|
{
|
||||||
|
Fiber[worker_count] fib_array;
|
||||||
|
|
||||||
|
foreach( ref f; fib_array )
|
||||||
|
f = new Fiber( &fiber_func );
|
||||||
|
|
||||||
|
auto timer = new PerformanceCounter;
|
||||||
|
|
||||||
|
uint i = yield_count;
|
||||||
|
|
||||||
|
// fibers are cooperative and need a driver loop
|
||||||
|
timer.start();
|
||||||
|
bool done;
|
||||||
|
do
|
||||||
|
{
|
||||||
|
done = true;
|
||||||
|
foreach( f; fib_array )
|
||||||
|
{
|
||||||
|
f.call();
|
||||||
|
if( f.state() != f.State.TERM )
|
||||||
|
done = false;
|
||||||
|
}
|
||||||
|
} while( !done );
|
||||||
|
timer.stop();
|
||||||
|
|
||||||
|
writeln( "Elapsed time for ", worker_count, " workers times ", yield_count, " yield() calls with fibers = ",
|
||||||
|
timer.milliseconds, "ms" );
|
||||||
|
}
|
||||||
|
|
||||||
|
void thread_test()
|
||||||
|
{
|
||||||
|
Thread[worker_count] thread_array;
|
||||||
|
|
||||||
|
foreach( ref t; thread_array )
|
||||||
|
t = new Thread( &thread_func );
|
||||||
|
|
||||||
|
auto timer = new PerformanceCounter;
|
||||||
|
timer.start();
|
||||||
|
foreach( t; thread_array )
|
||||||
|
t.start();
|
||||||
|
thread_joinAll();
|
||||||
|
timer.stop();
|
||||||
|
writeln( "Elapsed time for ", worker_count, " workers times ", yield_count, " yield() calls with threads = ",
|
||||||
|
timer.milliseconds, "ms" );
|
||||||
|
}
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
fiber_test();
|
||||||
|
thread_test();
|
||||||
|
return 0;
|
||||||
|
}
|
Loading…
Reference in a new issue