Thread overview
Statement Unittest [DRAFT]
Oct 15
monkyyy
5 days ago
Quirin Schroll
October 15

A module-level unittest statement( uses () instead of {}) for single asserts
, with an optional string message

unittest(1==1);
unittest(1==1,"math broke");

https://gist.github.com/crazymonkyyy/2afa7ae1402cd246fb98bdb86dd19605

October 15

On Tuesday, 15 October 2024 at 14:37:24 UTC, monkyyy wrote:

>

https://gist.github.com/crazymonkyyy/2afa7ae1402cd246fb98bdb86dd19605

For "Prior Work", I'd say the most obvious thing to cite is the shortened syntax for in, out, and invariant contracts:

// Short versions
in (n > 0);
out (ret; ret !is null);
invariant (start <= end);

// Long versions
in { assert(n > 0); }
out (ret) { assert(ret !is null); }
invariant { assert( start <= end); }

Spec links:

October 17

On Tuesday, 15 October 2024 at 14:37:24 UTC, monkyyy wrote:

>

A module-level unittest statement( uses () instead of {}) for single asserts
, with an optional string message

unittest(1==1);
unittest(1==1,"math broke");

https://gist.github.com/crazymonkyyy/2afa7ae1402cd246fb98bdb86dd19605

This is a pretty cool idea.
unittest being one of the big win of D, why not have more of it.

5 days ago

On Tuesday, 15 October 2024 at 14:37:24 UTC, monkyyy wrote:

>

A module-level unittest statement( uses () instead of {}) for single asserts
, with an optional string message

unittest(1==1);
unittest(1==1,"math broke");

https://gist.github.com/crazymonkyyy/2afa7ae1402cd246fb98bdb86dd19605

"Shortened function syntax." isn’t really an example of prior work.

"Shortened contract syntax." is.

"On-going debate if it effects future unittest syntax" Does not apply in the Breaking Changes and Deprecations section.

Here’s the description and grammar changes for your DIP:

## Description

The following grammar changes are needed:

```diff
    UnitTest:
        unittest BlockStatement
+       unittest ( AssertArguments ) ;
```

Statement unittests are equivalent to a unittest with a *`BlockStatement`* that contains a single statement that is an *`AssertExpression`* with the *`AssertArguments`* as given.
In fact, implementations are encouraged to implement statement unittests as a lowering,
essentially making <code>unittest(*AssertArguments*);</code> a shorthand for <code>unittest{ assert(*AssertArguments*); }</code>.

I’m not sure this even requires a DIP.

Maybe I’ll implement this next week.