git repos / blockattack-game

blame: source/misc/embedded_libs/fmt-8.1.1/test/compile-fp-test.cc

normal view · raw

f8deb5b9 Poul Sander 2022-01-15 13:55 1
// Formatting library for C++ - formatting library tests
f8deb5b9 Poul Sander 2022-01-15 13:55 2
//
f8deb5b9 Poul Sander 2022-01-15 13:55 3
// Copyright (c) 2012 - present, Victor Zverovich
f8deb5b9 Poul Sander 2022-01-15 13:55 4
// All rights reserved.
f8deb5b9 Poul Sander 2022-01-15 13:55 5
//
f8deb5b9 Poul Sander 2022-01-15 13:55 6
// For the license information refer to format.h.
f8deb5b9 Poul Sander 2022-01-15 13:55 7
f8deb5b9 Poul Sander 2022-01-15 13:55 8
#include "fmt/compile.h"
f8deb5b9 Poul Sander 2022-01-15 13:55 9
#include "gmock/gmock.h"
f8deb5b9 Poul Sander 2022-01-15 13:55 10
f8deb5b9 Poul Sander 2022-01-15 13:55 11
#if defined(__cpp_lib_bit_cast) && __cpp_lib_bit_cast >= 201806 && \
f8deb5b9 Poul Sander 2022-01-15 13:55 12
    defined(__cpp_constexpr) && __cpp_constexpr >= 201907 &&       \
f8deb5b9 Poul Sander 2022-01-15 13:55 13
    defined(__cpp_constexpr_dynamic_alloc) &&                      \
f8deb5b9 Poul Sander 2022-01-15 13:55 14
    __cpp_constexpr_dynamic_alloc >= 201907 && __cplusplus >= 202002L
f8deb5b9 Poul Sander 2022-01-15 13:55 15
template <size_t max_string_length, typename Char = char> struct test_string {
f8deb5b9 Poul Sander 2022-01-15 13:55 16
  template <typename T> constexpr bool operator==(const T& rhs) const noexcept {
f8deb5b9 Poul Sander 2022-01-15 13:55 17
    return fmt::basic_string_view<Char>(rhs).compare(buffer) == 0;
f8deb5b9 Poul Sander 2022-01-15 13:55 18
  }
f8deb5b9 Poul Sander 2022-01-15 13:55 19
  Char buffer[max_string_length]{};
f8deb5b9 Poul Sander 2022-01-15 13:55 20
};
f8deb5b9 Poul Sander 2022-01-15 13:55 21
f8deb5b9 Poul Sander 2022-01-15 13:55 22
template <size_t max_string_length, typename Char = char, typename... Args>
f8deb5b9 Poul Sander 2022-01-15 13:55 23
consteval auto test_format(auto format, const Args&... args) {
f8deb5b9 Poul Sander 2022-01-15 13:55 24
  test_string<max_string_length, Char> string{};
f8deb5b9 Poul Sander 2022-01-15 13:55 25
  fmt::format_to(string.buffer, format, args...);
f8deb5b9 Poul Sander 2022-01-15 13:55 26
  return string;
f8deb5b9 Poul Sander 2022-01-15 13:55 27
}
f8deb5b9 Poul Sander 2022-01-15 13:55 28
f8deb5b9 Poul Sander 2022-01-15 13:55 29
TEST(compile_time_formatting_test, floating_point) {
f8deb5b9 Poul Sander 2022-01-15 13:55 30
  EXPECT_EQ("0", test_format<2>(FMT_COMPILE("{}"), 0.0f));
f8deb5b9 Poul Sander 2022-01-15 13:55 31
  EXPECT_EQ("392.500000", test_format<11>(FMT_COMPILE("{0:f}"), 392.5f));
f8deb5b9 Poul Sander 2022-01-15 13:55 32
f8deb5b9 Poul Sander 2022-01-15 13:55 33
  EXPECT_EQ("0", test_format<2>(FMT_COMPILE("{:}"), 0.0));
f8deb5b9 Poul Sander 2022-01-15 13:55 34
  EXPECT_EQ("0.000000", test_format<9>(FMT_COMPILE("{:f}"), 0.0));
f8deb5b9 Poul Sander 2022-01-15 13:55 35
  EXPECT_EQ("0", test_format<2>(FMT_COMPILE("{:g}"), 0.0));
f8deb5b9 Poul Sander 2022-01-15 13:55 36
  EXPECT_EQ("392.65", test_format<7>(FMT_COMPILE("{:}"), 392.65));
f8deb5b9 Poul Sander 2022-01-15 13:55 37
  EXPECT_EQ("392.65", test_format<7>(FMT_COMPILE("{:g}"), 392.65));
f8deb5b9 Poul Sander 2022-01-15 13:55 38
  EXPECT_EQ("392.65", test_format<7>(FMT_COMPILE("{:G}"), 392.65));
f8deb5b9 Poul Sander 2022-01-15 13:55 39
  EXPECT_EQ("4.9014e+06", test_format<11>(FMT_COMPILE("{:g}"), 4.9014e6));
f8deb5b9 Poul Sander 2022-01-15 13:55 40
  EXPECT_EQ("-392.650000", test_format<12>(FMT_COMPILE("{:f}"), -392.65));
f8deb5b9 Poul Sander 2022-01-15 13:55 41
  EXPECT_EQ("-392.650000", test_format<12>(FMT_COMPILE("{:F}"), -392.65));
f8deb5b9 Poul Sander 2022-01-15 13:55 42
f8deb5b9 Poul Sander 2022-01-15 13:55 43
  EXPECT_EQ("3.926500e+02", test_format<13>(FMT_COMPILE("{0:e}"), 392.65));
f8deb5b9 Poul Sander 2022-01-15 13:55 44
  EXPECT_EQ("3.926500E+02", test_format<13>(FMT_COMPILE("{0:E}"), 392.65));
f8deb5b9 Poul Sander 2022-01-15 13:55 45
  EXPECT_EQ("+0000392.6", test_format<11>(FMT_COMPILE("{0:+010.4g}"), 392.65));
f8deb5b9 Poul Sander 2022-01-15 13:55 46
  EXPECT_EQ("9223372036854775808.000000",
f8deb5b9 Poul Sander 2022-01-15 13:55 47
            test_format<27>(FMT_COMPILE("{:f}"), 9223372036854775807.0));
f8deb5b9 Poul Sander 2022-01-15 13:55 48
f8deb5b9 Poul Sander 2022-01-15 13:55 49
  constexpr double nan = std::numeric_limits<double>::quiet_NaN();
f8deb5b9 Poul Sander 2022-01-15 13:55 50
  EXPECT_EQ("nan", test_format<4>(FMT_COMPILE("{}"), nan));
f8deb5b9 Poul Sander 2022-01-15 13:55 51
  EXPECT_EQ("+nan", test_format<5>(FMT_COMPILE("{:+}"), nan));
f8deb5b9 Poul Sander 2022-01-15 13:55 52
  if (std::signbit(-nan))
f8deb5b9 Poul Sander 2022-01-15 13:55 53
    EXPECT_EQ("-nan", test_format<5>(FMT_COMPILE("{}"), -nan));
f8deb5b9 Poul Sander 2022-01-15 13:55 54
  else
f8deb5b9 Poul Sander 2022-01-15 13:55 55
    fmt::print("Warning: compiler doesn't handle negative NaN correctly");
f8deb5b9 Poul Sander 2022-01-15 13:55 56
f8deb5b9 Poul Sander 2022-01-15 13:55 57
  constexpr double inf = std::numeric_limits<double>::infinity();
f8deb5b9 Poul Sander 2022-01-15 13:55 58
  EXPECT_EQ("inf", test_format<4>(FMT_COMPILE("{}"), inf));
f8deb5b9 Poul Sander 2022-01-15 13:55 59
  EXPECT_EQ("+inf", test_format<5>(FMT_COMPILE("{:+}"), inf));
f8deb5b9 Poul Sander 2022-01-15 13:55 60
  EXPECT_EQ("-inf", test_format<5>(FMT_COMPILE("{}"), -inf));
f8deb5b9 Poul Sander 2022-01-15 13:55 61
}
f8deb5b9 Poul Sander 2022-01-15 13:55 62
#endif
1970-01-01 00:00 63