better assertions and __FILE__ (compile time functions)
Bruce Adams
tortoise_74 at yahoo.no.spamno.menot.co.uk
Mon Aug 20 17:30:24 PDT 2007
Right, thanks. I'm nearly there.
Here's where I'm at:
// for example only
void assertWrapper(char[] file_, uint line_) {
_d_assert(file_,line_);
}
// the run-time assert part
void assertEqual(Type)(Type actual_, Type expected_,
char[] file_,
uint line_) {
if (actual_ != expected_) {
writefln("Equality assertion failed");
writefln("actual: '", actual_, "'");
writefln("expected: '", expected_, "'");
}
assertWrapper(file_,line_);
}
const char[] assertEqual4(const char[] actualVar_, const char[] expectedVar_) {
return "assertEqual!(int)("[]
~actualVar_
~","[]
~expectedVar_
~",cast(char[])(__FILE__),__LINE__);"[];
}
const char[] assertEqual5(T)(const char[] actualVar_, const char[] expectedVar_) {
return "assertEqual!("
~typeof(T).stringof
~")("[]
~actualVar_
~","[]
~expectedVar_
~",cast(char[])(__FILE__),__LINE__);"[];
}
unittest {
// declare at run-time
const int var3 = 1;
const int var4 = 2;
int var5 = 1;
int var6 = 2;
// okay - but must give name of variables
writefln(assertEqual4("var5"[],"var6"[]));
mixin(assertEqual4("var5"[],"var6"[]));
// must provide name and type
mixin(assertEqual5!(int)("var5"[],"var6"[]));
// must provide name and type
mixin(assertEqual5!(typeof(var5))(var5.stringof,var6.stringof));
}
I reckon "mixin(assertEqual(var5,var6));" should be possible but I haven't quite figured it out yet.
Regards,
Bruce.
Lutger Wrote:
[Some helpful stuff]
More information about the Digitalmars-d-learn
mailing list