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

// UNSUPPORTED: c++03, c++11, c++14, c++17
// UNSUPPORTED: libcpp-has-no-incomplete-format

// XFAIL: availability-fp_to_chars-missing

// <format>

// [format.string.std]/8
// If { arg-idopt } is used in a width or precision, the value of the
// corresponding formatting argument is used in its place. If the
// corresponding formatting argument is not of standard signed or unsigned
// integer type, or its value is negative for precision or non-positive for
// width, an exception of type format_error is thrown.
//
// This test does the compile-time validation

#include <format>

#include "test_macros.h"

void test_char_width() {
  // expected-error-re@*:* {{call to consteval function {{.*}} is not a constant expression}}
  TEST_IGNORE_NODISCARD std::format("{:{}}", 42, true);
  // expected-error-re@*:* {{call to consteval function {{.*}} is not a constant expression}}
  TEST_IGNORE_NODISCARD std::format("{:{}}", 42, '0');
#ifndef TEST_HAS_NO_INT128
  // expected-error-re@*:* {{call to consteval function {{.*}} is not a constant expression}}
  TEST_IGNORE_NODISCARD std::format("{:{}}", 42, __int128_t(0));
  // expected-error-re@*:* {{call to consteval function {{.*}} is not a constant expression}}
  TEST_IGNORE_NODISCARD std::format("{:{}}", 42, __uint128_t(0));
#endif
  // expected-error-re@*:* {{call to consteval function {{.*}} is not a constant expression}}
  TEST_IGNORE_NODISCARD std::format("{:{}}", 42, 42.0f);
  // expected-error-re@*:* {{call to consteval function {{.*}} is not a constant expression}}
  TEST_IGNORE_NODISCARD std::format("{:{}}", 42, 42.0);
  // expected-error-re@*:* {{call to consteval function {{.*}} is not a constant expression}}
  TEST_IGNORE_NODISCARD std::format("{:{}}", 42, 42.0l);
}

void test_char_precision() {
  // expected-error-re@*:* {{call to consteval function {{.*}} is not a constant expression}}
  TEST_IGNORE_NODISCARD std::format("{:0.{}}", 42.0, true);
  // expected-error-re@*:* {{call to consteval function {{.*}} is not a constant expression}}
  TEST_IGNORE_NODISCARD std::format("{:0.{}}", 42.0, '0');
#ifndef TEST_HAS_NO_INT128
  // expected-error-re@*:* {{call to consteval function {{.*}} is not a constant expression}}
  TEST_IGNORE_NODISCARD std::format("{:0.{}}", 42.0, __int128_t(0));
  // expected-error-re@*:* {{call to consteval function {{.*}} is not a constant expression}}
  TEST_IGNORE_NODISCARD std::format("{:0.{}}", 42.0, __uint128_t(0));
#endif
  // expected-error-re@*:* {{call to consteval function {{.*}} is not a constant expression}}
  TEST_IGNORE_NODISCARD std::format("{:0.{}}", 42.0, 42.0f);
  // expected-error-re@*:* {{call to consteval function {{.*}} is not a constant expression}}
  TEST_IGNORE_NODISCARD std::format("{:0.{}}", 42.0, 42.0);
  // expected-error-re@*:* {{call to consteval function {{.*}} is not a constant expression}}
  TEST_IGNORE_NODISCARD std::format("{:0.{}}", 42.0, 42.0l);
}

#ifndef TEST_HAS_NO_WIDE_CHARACTERS
void test_wchar_t_width() {
  // expected-error-re@*:* {{call to consteval function {{.*}} is not a constant expression}}
  TEST_IGNORE_NODISCARD std::format(L"{:{}}", 42, true);
  // expected-error-re@*:* {{call to consteval function {{.*}} is not a constant expression}}
  TEST_IGNORE_NODISCARD std::format(L"{:{}}", 42, '0');
  // expected-error-re@*:* {{call to consteval function {{.*}} is not a constant expression}}
  TEST_IGNORE_NODISCARD std::format(L"{:{}}", 42, L'0');
#  ifndef TEST_HAS_NO_INT128
  // expected-error-re@*:* {{call to consteval function {{.*}} is not a constant expression}}
  TEST_IGNORE_NODISCARD std::format(L"{:{}}", 42, __int128_t(0));
  // expected-error-re@*:* {{call to consteval function {{.*}} is not a constant expression}}
  TEST_IGNORE_NODISCARD std::format(L"{:{}}", 42, __uint128_t(0));
#  endif
  // expected-error-re@*:* {{call to consteval function {{.*}} is not a constant expression}}
  TEST_IGNORE_NODISCARD std::format(L"{:{}}", 42, 42.0f);
  // expected-error-re@*:* {{call to consteval function {{.*}} is not a constant expression}}
  TEST_IGNORE_NODISCARD std::format(L"{:{}}", 42, 42.0);
  // expected-error-re@*:* {{call to consteval function {{.*}} is not a constant expression}}
  TEST_IGNORE_NODISCARD std::format(L"{:{}}", 42, 42.0l);
}

void test_wchar_t_precision() {
  // expected-error-re@*:* {{call to consteval function {{.*}} is not a constant expression}}
  TEST_IGNORE_NODISCARD std::format(L"{:0.{}}", 42.0, true);
  // expected-error-re@*:* {{call to consteval function {{.*}} is not a constant expression}}
  TEST_IGNORE_NODISCARD std::format(L"{:0.{}}", 42.0, '0');
  // expected-error-re@*:* {{call to consteval function {{.*}} is not a constant expression}}
  TEST_IGNORE_NODISCARD std::format(L"{:0.{}}", 42.0, L'0');
#  ifndef TEST_HAS_NO_INT128
  // expected-error-re@*:* {{call to consteval function {{.*}} is not a constant expression}}
  TEST_IGNORE_NODISCARD std::format(L"{:0.{}}", 42.0, __int128_t(0));
  // expected-error-re@*:* {{call to consteval function {{.*}} is not a constant expression}}
  TEST_IGNORE_NODISCARD std::format(L"{:0.{}}", 42.0, __uint128_t(0));
#  endif
  // expected-error-re@*:* {{call to consteval function {{.*}} is not a constant expression}}
  TEST_IGNORE_NODISCARD std::format(L"{:0.{}}", 42.0, 42.0f);
  // expected-error-re@*:* {{call to consteval function {{.*}} is not a constant expression}}
  TEST_IGNORE_NODISCARD std::format(L"{:0.{}}", 42.0, 42.0);
  // expected-error-re@*:* {{call to consteval function {{.*}} is not a constant expression}}
  TEST_IGNORE_NODISCARD std::format(L"{:0.{}}", 42.0, 42.0l);
}

#endif // TEST_HAS_NO_WIDE_CHARACTERS
