I can reproduce the slower-with-threads issue without using my library. I've included the source file below and would like to know if other people see the same thing.

The Phobos modules are all called "ustd" because I couldn't/didn't know how to get this to work otherwise. So I copied the std/*.d files to a directory called ustd and changed their module declarations. Silly but it works. I'd love to know how to do this properly.

With this file, I consistenly get faster times with "-s" (for single-threaded) than without (multi-threaded):


import std.parallelism;
import std.getopt;


import ustd.array;
import ustd.ascii;
import ustd.base64;
import ustd.bigint;
import ustd.bitmanip;
import ustd.concurrency;
import ustd.container;
import ustd.cstream;


alias TestFunction = void function();

auto getTests(Modules...)() {
    TestFunction[] tests;
    foreach(mod; Modules) {
        foreach(test; __traits(getUnitTests, mod)) {
            tests ~= &test;
        }
    }
    return tests;
}



void main(string[] args) {
    bool single;
    getopt(args,
           "single|s", &single
        );

    enum tests = getTests!(
        ustd.array,
        ustd.ascii,
        ustd.base64,
        ustd.bigint,
        ustd.bitmanip,
        ustd.concurrency,
        ustd.container,
        ustd.cstream,
        );

    if(single) {
        foreach(test; tests) {
            test();
        }
    } else {
        foreach(test; tests.parallel) {
            test();
        }
    }
}

Reply via email to