On Monday, 9 September 2024 at 17:56:04 UTC, monkyyy wrote:
auto parse(char[] s)=>s[9..$-2];
void show(T,string file= __FILE__,int line=__LINE__)(T t){
writeln(File(file).byLine.drop(line-1).front.parse," ==
",t);
}
void main(){
int i=3;
show(i++ + ++i * i);
show(i);
}
This solution is really successful. I didn't think there could be
any other solution than mixin(); this is utterly ingenious!
There is a working version of the code below and different tests.
My only concern is why i == 5 in the line below when i == 28?
```d
import std;
auto parse(char[] s) => s[9..$ - 2];
void show(string file = __FILE__, int line = __LINE__, T)(T t)
{
File(file).byLine
.drop(line-1)
.front
.parse
.writeln(" == ", t);
}
template f(ulong n) {
static if(n < 2) const f = 1;
else const f = n * f!(n - 1);
}
void main()
{
int i = 3;
show(i++ + ++i * i);
show(i);
T factorial(T)(T n)=>n<2?1:n*factorial(--n);
show(factorial(10));
show(f!10);
}
/* Prints:
i++ + ++i * i == 28
i == 5
factorial(10) == 3628800
f!10 == 3628800
*/
```
SDB@79