On Saturday, 24 September 2016 at 08:03:15 UTC, Martin Nowak wrote:
On Friday, 23 September 2016 at 20:57:49 UTC, Nick Sabalausky wrote:
were rejected because it was deemed both easy enough and preferable to get these features by modifying DMD to add behind-the-scenes AST magic to "assert".

So...umm...yea...whatever happened to that beefed-up "assert" feature?

assertPred!"=="(a, b);
assertPred!"!"(a);
assertPred!(std.range.equal)(a, b);

assertPred!"==" looks like it asserts not equal, which is the 1st problem with this, assertPred!"!=" looks even worse. I considered going down this route but... ugh.


Seems to do most of what DIP83 does w/ expensive feature design, and compiler implementation work. Also http://code.dlang.org/packages/unit-threaded comes with a couple of test comparators, though it follows ruby rspec's bad idea of giving every comparator a name (which has to be learnt and documented).

I didn't want to give every comparator a name, this was the least bad option from my point of view. I'd rather `assert` be magical. Or, be able to have AST macros to get around the limitations of how operator overloading works in D. Don't get me wrong, the reason why it works the way it does is awesome in general, but limiting in this case in particular. I ended up implementing this:

foo.should == bar

But unfortunately it only works for equality. This is also possible:

foo.should.not == bar

But I can't do the same with any of the other operators AFAICR so I went with consistency even though the equality check is the most common.


Atila






Reply via email to