git repos / blockattack-game

blame: source/misc/embedded_libs/fmt-11.0.2/test/util.h

normal view · raw

f8deb5b9 Poul Sander 2022-01-15 13:55 1
// Formatting library for C++ - test utilities
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 <cstdarg>
f8deb5b9 Poul Sander 2022-01-15 13:55 9
#include <cstdio>
f8deb5b9 Poul Sander 2022-01-15 13:55 10
#include <locale>
f8deb5b9 Poul Sander 2022-01-15 13:55 11
#include <string>
f8deb5b9 Poul Sander 2022-01-15 13:55 12
47fd5c32 Poul Sander 2024-10-05 08:44 13
#include "fmt/os.h"
f8deb5b9 Poul Sander 2022-01-15 13:55 14
f8deb5b9 Poul Sander 2022-01-15 13:55 15
#ifdef _MSC_VER
f8deb5b9 Poul Sander 2022-01-15 13:55 16
#  define FMT_VSNPRINTF vsprintf_s
f8deb5b9 Poul Sander 2022-01-15 13:55 17
#else
f8deb5b9 Poul Sander 2022-01-15 13:55 18
#  define FMT_VSNPRINTF vsnprintf
f8deb5b9 Poul Sander 2022-01-15 13:55 19
#endif
f8deb5b9 Poul Sander 2022-01-15 13:55 20
f8deb5b9 Poul Sander 2022-01-15 13:55 21
template <size_t SIZE>
f8deb5b9 Poul Sander 2022-01-15 13:55 22
void safe_sprintf(char (&buffer)[SIZE], const char* format, ...) {
f8deb5b9 Poul Sander 2022-01-15 13:55 23
  std::va_list args;
f8deb5b9 Poul Sander 2022-01-15 13:55 24
  va_start(args, format);
f8deb5b9 Poul Sander 2022-01-15 13:55 25
  FMT_VSNPRINTF(buffer, SIZE, format, args);
f8deb5b9 Poul Sander 2022-01-15 13:55 26
  va_end(args);
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
extern const char* const file_content;
f8deb5b9 Poul Sander 2022-01-15 13:55 30
f8deb5b9 Poul Sander 2022-01-15 13:55 31
// Opens a buffered file for reading.
47fd5c32 Poul Sander 2024-10-05 08:44 32
auto open_buffered_file(FILE** fp = nullptr) -> fmt::buffered_file;
f8deb5b9 Poul Sander 2022-01-15 13:55 33
47fd5c32 Poul Sander 2024-10-05 08:44 34
inline auto safe_fopen(const char* filename, const char* mode) -> FILE* {
f8deb5b9 Poul Sander 2022-01-15 13:55 35
#if defined(_WIN32) && !defined(__MINGW32__)
f8deb5b9 Poul Sander 2022-01-15 13:55 36
  // Fix MSVC warning about "unsafe" fopen.
f8deb5b9 Poul Sander 2022-01-15 13:55 37
  FILE* f = nullptr;
f8deb5b9 Poul Sander 2022-01-15 13:55 38
  errno = fopen_s(&f, filename, mode);
f8deb5b9 Poul Sander 2022-01-15 13:55 39
  return f;
f8deb5b9 Poul Sander 2022-01-15 13:55 40
#else
f8deb5b9 Poul Sander 2022-01-15 13:55 41
  return std::fopen(filename, mode);
f8deb5b9 Poul Sander 2022-01-15 13:55 42
#endif
f8deb5b9 Poul Sander 2022-01-15 13:55 43
}
f8deb5b9 Poul Sander 2022-01-15 13:55 44
f8deb5b9 Poul Sander 2022-01-15 13:55 45
template <typename Char> class basic_test_string {
f8deb5b9 Poul Sander 2022-01-15 13:55 46
 private:
f8deb5b9 Poul Sander 2022-01-15 13:55 47
  std::basic_string<Char> value_;
f8deb5b9 Poul Sander 2022-01-15 13:55 48
f8deb5b9 Poul Sander 2022-01-15 13:55 49
  static const Char empty[];
f8deb5b9 Poul Sander 2022-01-15 13:55 50
f8deb5b9 Poul Sander 2022-01-15 13:55 51
 public:
f8deb5b9 Poul Sander 2022-01-15 13:55 52
  explicit basic_test_string(const Char* value = empty) : value_(value) {}
f8deb5b9 Poul Sander 2022-01-15 13:55 53
47fd5c32 Poul Sander 2024-10-05 08:44 54
  auto value() const -> const std::basic_string<Char>& { return value_; }
f8deb5b9 Poul Sander 2022-01-15 13:55 55
};
f8deb5b9 Poul Sander 2022-01-15 13:55 56
f8deb5b9 Poul Sander 2022-01-15 13:55 57
template <typename Char> const Char basic_test_string<Char>::empty[] = {0};
f8deb5b9 Poul Sander 2022-01-15 13:55 58
47fd5c32 Poul Sander 2024-10-05 08:44 59
using test_string = basic_test_string<char>;
47fd5c32 Poul Sander 2024-10-05 08:44 60
using test_wstring = basic_test_string<wchar_t>;
f8deb5b9 Poul Sander 2022-01-15 13:55 61
f8deb5b9 Poul Sander 2022-01-15 13:55 62
template <typename Char>
47fd5c32 Poul Sander 2024-10-05 08:44 63
auto operator<<(std::basic_ostream<Char>& os, const basic_test_string<Char>& s)
47fd5c32 Poul Sander 2024-10-05 08:44 64
    -> std::basic_ostream<Char>& {
f8deb5b9 Poul Sander 2022-01-15 13:55 65
  os << s.value();
f8deb5b9 Poul Sander 2022-01-15 13:55 66
  return os;
f8deb5b9 Poul Sander 2022-01-15 13:55 67
}
f8deb5b9 Poul Sander 2022-01-15 13:55 68
f8deb5b9 Poul Sander 2022-01-15 13:55 69
class date {
f8deb5b9 Poul Sander 2022-01-15 13:55 70
  int year_, month_, day_;
f8deb5b9 Poul Sander 2022-01-15 13:55 71
f8deb5b9 Poul Sander 2022-01-15 13:55 72
 public:
f8deb5b9 Poul Sander 2022-01-15 13:55 73
  date(int year, int month, int day) : year_(year), month_(month), day_(day) {}
f8deb5b9 Poul Sander 2022-01-15 13:55 74
47fd5c32 Poul Sander 2024-10-05 08:44 75
  auto year() const -> int { return year_; }
47fd5c32 Poul Sander 2024-10-05 08:44 76
  auto month() const -> int { return month_; }
47fd5c32 Poul Sander 2024-10-05 08:44 77
  auto day() const -> int { return day_; }
f8deb5b9 Poul Sander 2022-01-15 13:55 78
};
f8deb5b9 Poul Sander 2022-01-15 13:55 79
47fd5c32 Poul Sander 2024-10-05 08:44 80
// Returns a locale with the given name if available or classic locale
47fd5c32 Poul Sander 2024-10-05 08:44 81
// otherwise.
47fd5c32 Poul Sander 2024-10-05 08:44 82
auto get_locale(const char* name, const char* alt_name = nullptr)
47fd5c32 Poul Sander 2024-10-05 08:44 83
    -> std::locale;
1970-01-01 00:00 84