On Thursday, 22 March 2018 at 16:30:37 UTC, H. S. Teoh wrote:
On Thu, Mar 22, 2018 at 10:59:56AM +0000, Atila Neves via Digitalmars-d-announce wrote:
Blog post:

https://atilanevesoncode.wordpress.com/
[...]

I realize this is your opinion, but I disagree with them because:

Disagreeing is more than fine. :)

1) I've found that having unittests built into the language is a big win, *especially* because I can write tests next to the code being tested.

I'm confused. I don't know what I wrote that made you think I believe otherwise. I wrote "fantastically successful for the language" and that "Let me start by saying that some tests should go along with the production code".

being tested, was a big slowdown for me. I have to stop to think about which subdirectory under test/ I should put the relevant file(s), or if there's already a test there I have to stop to think about which filename I saved it under, etc.. It's just yet another mental hurdle to jump over while my already-busy brain is thinking about the code itself.

Then I'd recommend:

1) To write the tests inline when the mental burden is high
2) Move them afterwards when one's brain can think of where to place them.

I think that mirroring the production source tree is probably the way to go most of the time, i.e. test/foo/bar/baz.d for src/foo/bar/baz.d.

2) Compilation times: perhaps if your unittests are too heavy, compilation times could become a problem,

Maybe I wasn't clear in what I wrote: I'm not saying that I notice the increase in compilation times of the tests themselves. I probably haven't but I'd have to measure to know for sure. I'm saying that if you change anything in a D module, it must be assumed that any other module that imports the module you just edited, even if transitively, must be recompiled. So if I edit a test in D, under normal circumstances, I _have_ to recompile several files. It's not the unittest itself that is heavy, it's recompiling everyone who depends on the module that said unittest happens to find itself in.

but IME, they haven't been.

IME most other people find it bizarre I get angry at 2s incremental rebuild times. Anything over 100ms is an eternity.

Plus, my opinion is that when you're compiling the code, you *should* be running unittests anyway (otherwise regressions inevitably slip in),

Yes.

so you're going to have to pay for the time taken to compile them regardless.

Yes.

In that sense, it's actually better to have them in the same file so that the compiler doesn't have to open up another file and allocate resources for handling another module.

Noooooooooo.

As for the dub-specific problems introduced by version(unittest): IMO that's a flaw in dub.

It's not dub-specific at all. It's same problem that you reference in:

I remember that in Phobos we used to merge PRs containing code
that compiles fine with -unittest, but in real-world code doesn't compile because it has stuff outside unittests that depend on imports/declarations inside version(unittest).

I used dub as an example. Anyone else would have the same problems if they hand-wrote Makefiles using git submodules as dependencies.

Atila

Reply via email to