On Fri, Feb 09, 2018 at 01:39:22PM -0800, Walter Bright via Digitalmars-d wrote:
> On 2/9/2018 6:01 AM, Atila Neves wrote:
> > Unit tests are a great idea, right? Try convincing a group of 10
> > programmers who have never written one and don't know anyone else
> > who has. I have; I failed.
> Unit tests are one of the great success stories of D. I believe it was
> a success because it was so simple to add unit tests to the code, and
> to run those tests.

Yeah, it is so simple you feel ashamed for not writing them.  Which in
turn generates a positive feedback loop where your unittests uncovers
bugs early (rather than 2 months later when your customer's box blows
up), so you feel motivated to write more tests, and your code quality
continues improving.

> D's unit testing system didn't even need to be very good. It just had
> to be *easy*. And that changed everything.

Speaking of unittests... currently we have a problem:

        import std.regex;
        void main() {}

Compiling with -unittest:

        real    0m1.137s
        user    0m0.994s
        sys     0m0.141s

Compiling without -unittest:

        real    0m0.528s
        user    0m0.458s
        sys     0m0.069s

The problem: compiling with -unittest causes Phobos unittests to be
instantiated, even if the user isn't compiling Phobos directly.

Proposal: unittests should only be compiled if the module it's found in
is being compiled (i.e., among the modules listed on the command-line),
even with -unittest.

This won't break anything, because as long as user projects compile all
of their modules explicitly, -unittest will still work as before. I'd
guess practically all user projects will do this. (There may be a few
exceptions, e.g., if a module contains only templates, but IIRC even
then you still have to list the module on the command-line, otherwise
some templates won't instantiate correctly.)

It will improve compilation times and reduce executable bloat --
unittests from external libraries that are only linked, not compiled,
won't be included.  It also makes more sense -- if I'm using a 3rd
party library, why should I care to run *their* unittests?  I'm only
interested in testing my own code.

What do you think?


People demand freedom of speech to make up for the freedom of thought which 
they avoid. -- Soren Aabye Kierkegaard (1813-1855)

Reply via email to