// RUN: %clang_builtins %s %librt -o %t && %run %t
//===--------------- extendhfsf2_test.c - Test __extendhfsf2 --------------===//
//
// 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 __extendhfsf2 for the compiler_rt library.
//
//===----------------------------------------------------------------------===//

#include <stdio.h>

#include "fp_test.h"

float __extendhfsf2(uint16_t a);

int test__extendhfsf2(uint16_t a, float expected)
{
    float x = __extendhfsf2(a);
    int ret = compareResultH(x, expected);

    if (ret){
        printf("error in test__extendhfsf2(%#.4x) = %f, "
               "expected %f\n", a, x, expected);
    }
    return ret;
}

char assumption_1[sizeof(__fp16) * CHAR_BIT == 16] = {0};

int main()
{
    // qNaN
    if (test__extendhfsf2(UINT16_C(0x7e00),
                          makeQNaN32()))
        return 1;
    // NaN
    if (test__extendhfsf2(UINT16_C(0x7e00),
                          makeNaN32(UINT32_C(0x8000))))
        return 1;
    // inf
    if (test__extendhfsf2(UINT16_C(0x7c00),
                          makeInf32()))
        return 1;
    if (test__extendhfsf2(UINT16_C(0xfc00),
                          -makeInf32()))
        return 1;
    // zero
    if (test__extendhfsf2(UINT16_C(0x0),
                          0.0f))
        return 1;
    if (test__extendhfsf2(UINT16_C(0x8000),
                          -0.0f))
        return 1;

    if (test__extendhfsf2(UINT16_C(0x4248),
                          3.1415926535f))
        return 1;
    if (test__extendhfsf2(UINT16_C(0xc248),
                          -3.1415926535f))
        return 1;
    if (test__extendhfsf2(UINT16_C(0x7c00),
                          0x1.987124876876324p+100f))
        return 1;
    if (test__extendhfsf2(UINT16_C(0x6e62),
                          0x1.988p+12f))
        return 1;
    if (test__extendhfsf2(UINT16_C(0x3c00),
                          0x1.0p+0f))
        return 1;
    if (test__extendhfsf2(UINT16_C(0x0400),
                          0x1.0p-14f))
        return 1;
    // denormal
    if (test__extendhfsf2(UINT16_C(0x0010),
                          0x1.0p-20f))
        return 1;
    if (test__extendhfsf2(UINT16_C(0x0001),
                          0x1.0p-24f))
        return 1;
    if (test__extendhfsf2(UINT16_C(0x8001),
                          -0x1.0p-24f))
        return 1;
    if (test__extendhfsf2(UINT16_C(0x0001),
                          0x1.5p-25f))
        return 1;
    // and back to zero
    if (test__extendhfsf2(UINT16_C(0x0000),
                          0x1.0p-25f))
        return 1;
    if (test__extendhfsf2(UINT16_C(0x8000),
                          -0x1.0p-25f))
        return 1;
    // max (precise)
    if (test__extendhfsf2(UINT16_C(0x7bff),
                          65504.0f))
        return 1;
    // max (rounded)
    if (test__extendhfsf2(UINT16_C(0x7bff),
                          65504.0f))
        return 1;
    // max (to +inf)
    if (test__extendhfsf2(UINT16_C(0x7c00),
                          makeInf32()))
        return 1;
    if (test__extendhfsf2(UINT16_C(0xfc00),
                          -makeInf32()))
        return 1;
    return 0;
}
