//===----------------------------------------------------------------------===//
//
// 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
//
//===----------------------------------------------------------------------===//

// test numeric_limits

// float_round_style

#include <limits>

#include "test_macros.h"

typedef char one;
struct two {one _[2];};

one test(std::float_round_style);
two test(int);

int main(int, char**)
{
    static_assert(std::round_indeterminate == -1,
                 "std::round_indeterminate == -1");
    static_assert(std::round_toward_zero == 0,
                 "std::round_toward_zero == 0");
    static_assert(std::round_to_nearest == 1,
                 "std::round_to_nearest == 1");
    static_assert(std::round_toward_infinity == 2,
                 "std::round_toward_infinity == 2");
    static_assert(std::round_toward_neg_infinity == 3,
                 "std::round_toward_neg_infinity == 3");
    static_assert(sizeof(test(std::round_to_nearest)) == 1,
                 "sizeof(test(std::round_to_nearest)) == 1");
    static_assert(sizeof(test(1)) == 2,
                 "sizeof(test(1)) == 2");

  return 0;
}
