| module threads_runme; |
| |
| import core.thread; |
| import std.conv; |
| import std.exception; |
| import std.range; |
| import std.stdio; |
| import threads.Kerfuffle; |
| |
| // Spawn 8 threads. |
| enum THREADS = iota(0, 9); |
| |
| // Run test for a few seconds on a 1GHz machine. |
| enum WORK_RANGE = iota(0, 30000); |
| |
| void main() { |
| auto kerf = new Kerfuffle(); |
| TestThread[] threads; |
| |
| // Invoke the threads. |
| foreach (i; THREADS) { |
| auto thread = new TestThread(kerf); |
| threads ~= thread; |
| thread.name = to!string(i); |
| thread.start(); |
| } |
| |
| // Wait for the threads to finish. |
| foreach (i, thread; threads) { |
| thread.join(true); |
| } |
| } |
| |
| class TestThread : Thread { |
| this(Kerfuffle kerf) { |
| super(&run); |
| m_kerf = kerf; |
| } |
| |
| void run() { |
| foreach (i; WORK_RANGE) { |
| string given = "This is the test string that should come back. A number: " ~ to!string(i); |
| string received = m_kerf.StdString(given); |
| enforce(received == given, "StdString string does not match. Received: '" ~ received ~ "'. Expected: '" ~ given ~ "'."); |
| } |
| foreach (i; WORK_RANGE) { |
| string given = "This is the test string that should come back. A number: " ~ to!string(i); |
| string received = m_kerf.CharString(given); |
| enforce(received == given, "CharString string does not match. Received: '" ~ received ~ "'. Expected: '" ~ given ~ "'."); |
| } |
| } |
| |
| private: |
| Kerfuffle m_kerf; |
| } |