Mercurial > projects > ldc
view tests/mini/floatcmp.d @ 1418:f5f8c21ce6ef
Make "`aa[key]`" use the same runtime call as "`key in aa`". The runtime calls
these were using were different, but with equivalent definitions.
With `ldc -O3`, the following functions now all compile to the exact same code:
{{{
int[int] y;
void foo(int x) {
if (x in y) {
auto z = x in y;
sink(*z);
}
}
void bar(int x) {
if (x in y) {
sink(y[x]);
}
}
void baz(int x) {
if (auto p = x in y) {
sink(*p);
}
}
}}}
author | Frits van Bommel <fvbommel wxs.nl> |
---|---|
date | Mon, 25 May 2009 12:50:40 +0200 |
parents | 1bb99290e03a |
children |
line wrap: on
line source
module floatcmp; extern(C) int printf(char*, ...); void eq() { float _3 = 3; assert(!(_3 == 4)); assert(!(_3 == 2)); assert(_3 == 3); assert(!(_3 == float.nan)); } void neq() { float _3 = 3; assert(_3 != 4); assert(_3 != 2); assert(!(_3 != 3)); assert(_3 != float.nan); } void gt() { float _3 = 3; assert(_3 > 2); assert(!(_3 > 4)); assert(!(_3 > 3)); assert(!(_3 > float.nan)); } void ge() { float _3 = 3; assert(_3 >= 2); assert(!(_3 >= 4)); assert(_3 >= 3); assert(!(_3 >= float.nan)); } void lt() { float _3 = 3; assert(_3 < 4); assert(!(_3 < 2)); assert(!(_3 < 3)); assert(!(_3 < float.nan)); } void le() { float _3 = 3; assert(_3 <= 4); assert(!(_3 <= 2)); assert(_3 <= 3); assert(!(_3 <= float.nan)); } void uno() { float _3 = 3; assert(!(_3 !<>= 2)); assert(!(_3 !<>= 3)); assert(!(_3 !<>= 4)); assert(_3 !<>= float.nan); } void lg() { float _3 = 3; assert(_3 <> 4); assert(_3 <> 2); assert(!(_3 <> 3)); assert(!(_3 <> float.nan)); } void lge() { float _3 = 3; assert(_3 <>= 4); assert(_3 <>= 2); assert(_3 <>= 3); assert(!(_3 <>= float.nan)); } void ugt() { float _3 = 3; assert(_3 !<= 2); assert(!(_3 !<= 4)); assert(!(_3 !<= 3)); assert(_3 !<= float.nan); } void uge() { float _3 = 3; assert(_3 !< 2); assert(!(_3 !< 4)); assert(_3 !< 3); assert(_3 !< float.nan); } void ult() { float _3 = 3; assert(_3 !>= 4); assert(!(_3 !>= 2)); assert(!(_3 !>= 3)); assert(_3 !>= float.nan); } void ule() { float _3 = 3; assert(_3 !> 4); assert(!(_3 !> 2)); assert(_3 !> 3); assert(_3 !> float.nan); } void ueq() { float _3 = 3; assert(!(_3 !<> 2)); assert(!(_3 !<> 4)); assert(_3 !<> 3); assert(_3 !<> float.nan); } void main() { printf("floating point comparison test\n"); eq(); neq(); gt(); ge(); lt(); le(); uno(); lg(); lge(); ugt(); uge(); ult(); ule(); ueq(); printf(" SUCCESS\n"); } /+ void gt() { float _3 = 3; assert(); assert(); assert(); assert(); } +/