On Saturday, 25 May 2013 at 01:03:53 UTC, Namal wrote:
255 - 129 is less than 128 so the result is T.max, which is
255, which is not equal to 0.
I dont understand this at all 255 - 129 should be 126 in ubyte
or not?
I checked, and operation between two ubyte is an int. When you
cast that int to ubyte, it gets its least significant byte
represented as ubyte.
import std.stdio;
void main() {
ubyte x = 128;
ubyte y = 129;
writeln(cast(ubyte)(x - y)); //prints 255
writeln(x - y); //prints -1
writeln(typeof(x - y).stringof); //prints 'int' !!!!
}
Also, I tried the code you pasted, and the reason it fails the
asserts is that there's something wrong in the if conditions in
opBinary (and also, that 'rhs.max - rhs._value' didn't compile).
The following makes your asserts pass:
...
static if (op == "-") {
if(_value < rhs._value)
return rhs.min;
}
static if (op == "+") {
if(_value > max._value - rhs._value)
return rhs.max;
}
...
--jm