Thread overview
statement unittest v2
Apr 28, 2024
monkyyy
Apr 29, 2024
Timon Gehr
April 28, 2024

unittest => 1==1;
unittest math_still_works => 1==1;//generates ddoc

I see roughly 3 criticisms to my last suggestion

  1. unittest without docs are bad
  2. this is a bug; that should already work (???)
  3. we may want agrumented unittests in the future

so handling the arguments out of order

2.

what? whatever i'll simplify the syntax

3.

by not using ()'s I assume it will leave open the door for whatever this theory is

1. docs

I dont care about this in the slightest but... whatever

unittest [name] => code;

if optional name exists generate a header and code in ddoc

name will replace'_'s with spaces, put it in a header followed by a code block of the code

so given this code

/**
* a very important function
*/

auto foo=>[1,2,3,4,5];
unittest foo_returns_an_array=>foo==[1,2,3,4,5];

will generate the docs

# foo
## int[] foo()

a very important function

## foo returns an array

```d
foo==[1,2,3,4,5];

April 29, 2024
On 4/28/24 15:47, monkyyy wrote:
> `unittest => 1==1;`
> `unittest math_still_works => 1==1;//generates ddoc`
> 
> I see roughly 3 criticisms to my last suggestion
> 
> 1. unittest without docs are bad
> 2. this is a bug; that should already work (???)
> 3. we may want agrumented unittests in the future
> 
> so handling the arguments out of order...
> 
> ```
> 

The previous proposal with `unittest(expression);` was better.

#1. unittest(1==1,"math broke"); /// test whether math still works

#2. It is not true and I do not think anyone claimed this.

#3. I don't understand a) what that would mean and b) `foreach` and shorthand `out` syntax already show how to do it.

So I think all of those objections should be dismissed and you got it right the first time.

OTOH `unittest => expression;` is weird because everywhere else `...=>r` just means `...{ return r; }`
March 15
On 4/28/2024 5:12 PM, Timon Gehr wrote:
> The previous proposal with `unittest(expression);` was better.

Which could be written as:

```
unittest { assert(expression); }
```
which seems a rather minor improvement. But there is a risk there, if in the future we want to do something like:
```
unittest (parameters) { assert(expression); }
```
where `parameters` would be an extension.

April 14

On Sunday, 16 March 2025 at 06:40:46 UTC, Walter Bright wrote:

>

On 4/28/2024 5:12 PM, Timon Gehr wrote:

>

The previous proposal with unittest(expression); was better.

Which could be written as:

unittest { assert(expression); }

which seems a rather minor improvement. But there is a risk there, if in the future we want to do something like:

unittest (parameters) { assert(expression); }

where parameters would be an extension.

It’s the same case as in and out and invariant contracts, the fact that the concise version exists makes programmers more likely to actually write them.

For the cases you point out, the parser can look ahead and see if the closing parenthesis is followed up by a semicolon or an opening brace.

April 21

On Monday, 14 April 2025 at 18:16:08 UTC, Quirin Schroll wrote:

>

On Sunday, 16 March 2025 at 06:40:46 UTC, Walter Bright wrote:

>

On 4/28/2024 5:12 PM, Timon Gehr wrote:

>

The previous proposal with unittest(expression); was better.

Which could be written as:

unittest { assert(expression); }

which seems a rather minor improvement. But there is a risk there, if in the future we want to do something like:

unittest (parameters) { assert(expression); }

where parameters would be an extension.

It’s the same case as in and out and invariant contracts, the fact that the concise version exists makes programmers more likely to actually write them.

I think they're quite different; unit tests are extremely unlikely to be one liners, whereas contracts are very likely to be exactly that.