view tests/mini/floatcmp.d @ 920:545f54041d91

Implemented proper support for naked asm using llvm module level asm. Still not 100% complete, but already 1000 times better that what we had before. Don's BignumX86 implementation from Tango (when turned into a standalone unittest) seems to fully work with no changes, and great performance :) Fixed align N; in asm blocks. Fixed inreg parameter passing on x86 for ref/out params. Removed support for lazy initialization of function local static variables, I have no idea why I ever implemented this, it's not in the D spec, and DMD doesn't support it :P Some of the global variable related changes might cause minor regressions, but they should be easily fixable.
author Tomas Lindquist Olsen <tomas.l.olsen@gmail.com>
date Tue, 03 Feb 2009 08:54:57 +0100
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();
}
+/