statement unittest

Nicholas Wilson iamthewilsonator at hotmail.com
Fri Mar 29 11:53:52 UTC 2024


On Thursday, 21 March 2024 at 19:39:41 UTC, monkyyy wrote:
> I have this code:
>
> ```d
> auto reduce(alias F,R)(R r)=>r.acc!F.last.front;
> unittest{ assert(counter(10).reduce!((a,int b=0)=>a+b)==45);}
>
> auto all(alias F,R)(R r)=>r.map!F.filter!(a=>!a).empty;
> unittest{ assert([1,3,5,7,9].torange.all!(a=>a%2));}
>
> auto any(alias F,R)(R r)=> ! r.filter!F.empty;
> unittest{ assert([1,2,3,4,15].torange.any!(a=>a==15));}
>
> auto count(R)(R r)=>r.reduce!((a,int b=0)=>b+1);
> unittest{ assert(counter(10).filter!(a=>a%2).count==5);}
> ```
>
> "unittest{ assert(..);}" should be reduceable to `unittest(...)`
>
> i.e. `unittest(1==1)` would compile

there should be no DIP required here, `unittest`s are function 
declarations, and so they _should_ work as `unittest => 
assert(1==1);`. They don't currently though (purely a problem 
with the parser[1]), that seems like a bug, please file one.

[1]: 
https://github.com/dlang/dmd/blob/e00869b27e3d9cabed2b6e73503561997398759c/compiler/src/dmd/parse.d#L521
explicitly checks for { }
a similar problem exists for `parseUnitTest` that calls 
`parseStatement` that explicitly checks for `{}`


More information about the dip.ideas mailing list