//===-- floatuntisf.c - Test __floatuntisf --------------------------------===//
//
//                     The LLVM Compiler Infrastructure
//
// This file is dual licensed under the MIT and the University of Illinois Open
// Source Licenses. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
//
// This file tests __floatuntisf for the compiler_rt library.
//
//===----------------------------------------------------------------------===//

#if __x86_64

#include "int_lib.h"
#include <float.h>
#include <stdio.h>

// Returns: convert a to a float, rounding toward even.

// Assumption: float is a IEEE 32 bit floating point type 
//             tu_int is a 128 bit integral type

// seee eeee emmm mmmm mmmm mmmm mmmm mmmm

float __floatuntisf(tu_int a);

int test__floatuntisf(tu_int a, float expected)
{
    float x = __floatuntisf(a);
    if (x != expected)
    {
        utwords at;
        at.all = a;
        printf("error in __floatuntisf(0x%.16llX%.16llX) = %a, expected %a\n",
               at.s.high, at.s.low, x, expected);
    }
    return x != expected;
}

char assumption_1[sizeof(tu_int) == 2*sizeof(du_int)] = {0};
char assumption_2[sizeof(tu_int)*CHAR_BIT == 128] = {0};
char assumption_3[sizeof(float)*CHAR_BIT == 32] = {0};

#endif

int main()
{
#if __x86_64
    if (test__floatuntisf(0, 0.0F))
        return 1;

    if (test__floatuntisf(1, 1.0F))
        return 1;
    if (test__floatuntisf(2, 2.0F))
        return 1;
    if (test__floatuntisf(20, 20.0F))
        return 1;

    if (test__floatuntisf(0x7FFFFF8000000000LL, 0x1.FFFFFEp+62F))
        return 1;
    if (test__floatuntisf(0x7FFFFF0000000000LL, 0x1.FFFFFCp+62F))
        return 1;

    if (test__floatuntisf(make_ti(0x8000008000000000LL, 0), 0x1.000001p+127F))
        return 1;
    if (test__floatuntisf(make_ti(0x8000000000000800LL, 0), 0x1.0p+127F))
        return 1;
    if (test__floatuntisf(make_ti(0x8000010000000000LL, 0), 0x1.000002p+127F))
        return 1;

    if (test__floatuntisf(make_ti(0x8000000000000000LL, 0), 0x1.000000p+127F))
        return 1;

    if (test__floatuntisf(0x0007FB72E8000000LL, 0x1.FEDCBAp+50F))
        return 1;

    if (test__floatuntisf(0x0007FB72EA000000LL, 0x1.FEDCBA8p+50F))
        return 1;
    if (test__floatuntisf(0x0007FB72EB000000LL, 0x1.FEDCBACp+50F))
        return 1;

    if (test__floatuntisf(0x0007FB72EC000000LL, 0x1.FEDCBBp+50F))
        return 1;

    if (test__floatuntisf(0x0007FB72E6000000LL, 0x1.FEDCB98p+50F))
        return 1;
    if (test__floatuntisf(0x0007FB72E7000000LL, 0x1.FEDCB9Cp+50F))
        return 1;
    if (test__floatuntisf(0x0007FB72E4000000LL, 0x1.FEDCB9p+50F))
        return 1;

    if (test__floatuntisf(0xFFFFFFFFFFFFFFFELL, 0x1p+64F))
        return 1;
    if (test__floatuntisf(0xFFFFFFFFFFFFFFFFLL, 0x1p+64F))
        return 1;

    if (test__floatuntisf(0x0007FB72E8000000LL, 0x1.FEDCBAp+50F))
        return 1;

    if (test__floatuntisf(0x0007FB72EA000000LL, 0x1.FEDCBAp+50F))
        return 1;
    if (test__floatuntisf(0x0007FB72EB000000LL, 0x1.FEDCBAp+50F))
        return 1;
    if (test__floatuntisf(0x0007FB72EBFFFFFFLL, 0x1.FEDCBAp+50F))
        return 1;
    if (test__floatuntisf(0x0007FB72EC000000LL, 0x1.FEDCBCp+50F))
        return 1;
    if (test__floatuntisf(0x0007FB72E8000001LL, 0x1.FEDCBAp+50F))
        return 1;

    if (test__floatuntisf(0x0007FB72E6000000LL, 0x1.FEDCBAp+50F))
        return 1;
    if (test__floatuntisf(0x0007FB72E7000000LL, 0x1.FEDCBAp+50F))
        return 1;
    if (test__floatuntisf(0x0007FB72E7FFFFFFLL, 0x1.FEDCBAp+50F))
        return 1;
    if (test__floatuntisf(0x0007FB72E4000001LL, 0x1.FEDCBAp+50F))
        return 1;
    if (test__floatuntisf(0x0007FB72E4000000LL, 0x1.FEDCB8p+50F))
        return 1;

    if (test__floatuntisf(make_ti(0x0000000000001FEDLL, 0xCB90000000000001LL),
                          0x1.FEDCBAp+76F))
        return 1;
    if (test__floatuntisf(make_ti(0x0000000000001FEDLL, 0xCBA0000000000000LL),
                          0x1.FEDCBAp+76F))
        return 1;
    if (test__floatuntisf(make_ti(0x0000000000001FEDLL, 0xCBAFFFFFFFFFFFFFLL),
                          0x1.FEDCBAp+76F))
        return 1;
    if (test__floatuntisf(make_ti(0x0000000000001FEDLL, 0xCBB0000000000000LL),
                          0x1.FEDCBCp+76F))
        return 1;
    if (test__floatuntisf(make_ti(0x0000000000001FEDLL, 0xCBB0000000000001LL),
                          0x1.FEDCBCp+76F))
        return 1;
    if (test__floatuntisf(make_ti(0x0000000000001FEDLL, 0xCBBFFFFFFFFFFFFFLL),
                          0x1.FEDCBCp+76F))
        return 1;
    if (test__floatuntisf(make_ti(0x0000000000001FEDLL, 0xCBC0000000000000LL),
                          0x1.FEDCBCp+76F))
        return 1;
    if (test__floatuntisf(make_ti(0x0000000000001FEDLL, 0xCBC0000000000001LL),
                          0x1.FEDCBCp+76F))
        return 1;
    if (test__floatuntisf(make_ti(0x0000000000001FEDLL, 0xCBD0000000000000LL),
                          0x1.FEDCBCp+76F))
        return 1;
    if (test__floatuntisf(make_ti(0x0000000000001FEDLL, 0xCBD0000000000001LL),
                          0x1.FEDCBEp+76F))
        return 1;
    if (test__floatuntisf(make_ti(0x0000000000001FEDLL, 0xCBDFFFFFFFFFFFFFLL),
                          0x1.FEDCBEp+76F))
        return 1;
    if (test__floatuntisf(make_ti(0x0000000000001FEDLL, 0xCBE0000000000000LL),
                          0x1.FEDCBEp+76F))
        return 1;

#else
    printf("skipped\n");
#endif
   return 0;
}
