// RUN: %clang_builtins %s %librt -o %t && %run %t
//===-- fixsfdi_test.c - Test __fixsfdi -----------------------------------===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
//
// This file tests __fixsfdi for the compiler_rt library.
//
//===----------------------------------------------------------------------===//

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

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

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

// seee eeee emmm mmmm mmmm mmmm mmmm mmmm

COMPILER_RT_ABI di_int __fixsfdi(float a);

int test__fixsfdi(float a, di_int expected)
{
    di_int x = __fixsfdi(a);
    if (x != expected)
        printf("error in __fixsfdi(%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(float)*CHAR_BIT == 32] = {0};

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

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

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

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

   return 0;
}
