//===-- fixdfdi_test.c - Test __fixdfdi -----------------------------------===//
//
//                     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 __fixdfdi for the compiler_rt library.
//
//===----------------------------------------------------------------------===//

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

// Returns: convert a to a signed long long, rounding toward zero.

// Assumption: double is a IEEE 64 bit floating point type 
//             su_int is a 32 bit integral type
//             value in double is representable in di_int (no range checking performed)

// seee eeee eeee mmmm mmmm mmmm mmmm mmmm | mmmm mmmm mmmm mmmm mmmm mmmm mmmm mmmm

di_int __fixdfdi(double a);

int test__fixdfdi(double a, di_int expected)
{
    di_int x = __fixdfdi(a);
    if (x != expected)
        printf("error in __fixdfdi(%A) = %llX, expected %llX\n", a, x, expected);
    return x != expected;
}

char assumption_1[sizeof(di_int) == 2*sizeof(si_int)] = {0};
char assumption_2[sizeof(su_int)*CHAR_BIT == 32] = {0};
char assumption_3[sizeof(double)*CHAR_BIT == 64] = {0};

int main()
{
    if (test__fixdfdi(0.0, 0))
        return 1;

    if (test__fixdfdi(0.5, 0))
        return 1;
    if (test__fixdfdi(0.99, 0))
        return 1;
    if (test__fixdfdi(1.0, 1))
        return 1;
    if (test__fixdfdi(1.5, 1))
        return 1;
    if (test__fixdfdi(1.99, 1))
        return 1;
    if (test__fixdfdi(2.0, 2))
        return 1;
    if (test__fixdfdi(2.01, 2))
        return 1;
    if (test__fixdfdi(-0.5, 0))
        return 1;
    if (test__fixdfdi(-0.99, 0))
        return 1;
    if (test__fixdfdi(-1.0, -1))
        return 1;
    if (test__fixdfdi(-1.5, -1))
        return 1;
    if (test__fixdfdi(-1.99, -1))
        return 1;
    if (test__fixdfdi(-2.0, -2))
        return 1;
    if (test__fixdfdi(-2.01, -2))
        return 1;

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

    if (test__fixdfdi(-0x1.FFFFFEp+62, 0x8000008000000000LL))
        return 1;
    if (test__fixdfdi(-0x1.FFFFFCp+62, 0x8000010000000000LL))
        return 1;

    if (test__fixdfdi(0x1.FFFFFFFFFFFFFp+62, 0x7FFFFFFFFFFFFC00LL))
        return 1;
    if (test__fixdfdi(0x1.FFFFFFFFFFFFEp+62, 0x7FFFFFFFFFFFF800LL))
        return 1;

    if (test__fixdfdi(-0x1.FFFFFFFFFFFFFp+62, 0x8000000000000400LL))
        return 1;
    if (test__fixdfdi(-0x1.FFFFFFFFFFFFEp+62, 0x8000000000000800LL))
        return 1;

   return 0;
}
