blob: 2068758249ddcf7d88629e76fe5923c1a470864b [file] [log] [blame]
module threads_runme;
import tango.core.Thread;
import tango.io.Console;
import Integer = tango.text.convert.Integer;
import threads.Kerfuffle;
// Spawn 8 threads.
const uint NUM_THREADS = 8;
// Run test for a few seconds on a 1GHz machine.
const uint WORKER_LOOP_PASSES = 30000;
void main() {
auto kerf = new Kerfuffle();
TestThread[] threads;
// Invoke the threads.
for (uint i = 0; i < NUM_THREADS; i++) {
auto thread = new TestThread(kerf);
threads ~= thread;
thread.name = Integer.toString(i);
thread.start();
}
// Wait for the threads to finish.
foreach(thread; threads) {
thread.join();
}
// Check if any thread has failed.
foreach(thread; threads) {
if (thread.failed) throw new Exception("Test failed.");
}
}
class TestThread : Thread {
public:
this(Kerfuffle kerf) {
super(&run);
m_kerf = kerf;
}
void run() {
failed = false;
try {
for (uint i = 0; i < WORKER_LOOP_PASSES; i++) {
char[] given = "This is the test char[] that should come back. A number: " ~ Integer.toString(i);
char[] received = m_kerf.StdString(given);
if (received != given) {
throw new Exception("StdString char[] does not match. Received: '" ~ received ~ "'. Expected: '" ~ given ~ "'.");
}
}
for (uint i = 0; i < WORKER_LOOP_PASSES; i++) {
char[] given = "This is the test char[] that should come back. A number: " ~ Integer.toString(i);
char[] received = m_kerf.CharString(given);
if (received != given) {
throw new Exception("StdString char[] does not match. Received: '" ~ received ~ "'. Expected: '" ~ given ~ "'.");
}
}
} catch (Exception e) {
Cerr("Test failed (thread " ~ name() ~ "): " ~ e.msg).newline;
failed = true;
}
}
bool failed;
private:
Kerfuffle m_kerf;
}