summaryrefslogtreecommitdiffstats
path: root/mozglue/tests
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 17:32:43 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 17:32:43 +0000
commit6bf0a5cb5034a7e684dcc3500e841785237ce2dd (patch)
treea68f146d7fa01f0134297619fbe7e33db084e0aa /mozglue/tests
parentInitial commit. (diff)
downloadthunderbird-6bf0a5cb5034a7e684dcc3500e841785237ce2dd.tar.xz
thunderbird-6bf0a5cb5034a7e684dcc3500e841785237ce2dd.zip
Adding upstream version 1:115.7.0.upstream/1%115.7.0upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'mozglue/tests')
-rw-r--r--mozglue/tests/ShowSSEConfig.cpp125
-rw-r--r--mozglue/tests/TestBaseProfiler.cpp5732
-rw-r--r--mozglue/tests/TestIntegerPrintfMacros.cpp1128
-rw-r--r--mozglue/tests/TestNativeNt.cpp606
-rw-r--r--mozglue/tests/TestPEExportSection.cpp706
-rw-r--r--mozglue/tests/TestPrintf.cpp264
-rw-r--r--mozglue/tests/TestStackCookie.cpp89
-rw-r--r--mozglue/tests/TestTimeStampWin.cpp96
-rw-r--r--mozglue/tests/glibc_printf_tests/COPYING339
-rw-r--r--mozglue/tests/glibc_printf_tests/COPYING.LIB502
-rw-r--r--mozglue/tests/glibc_printf_tests/README.MOZILLA2
-rw-r--r--mozglue/tests/glibc_printf_tests/tfformat.c4164
-rw-r--r--mozglue/tests/glibc_printf_tests/tiformat.c5070
-rw-r--r--mozglue/tests/glibc_printf_tests/tllformat.c59
-rw-r--r--mozglue/tests/gtest/TestNativeNtGTest.cpp63
-rw-r--r--mozglue/tests/gtest/TestStackWalk.cpp279
-rw-r--r--mozglue/tests/gtest/moz.build20
-rw-r--r--mozglue/tests/moz.build53
18 files changed, 19297 insertions, 0 deletions
diff --git a/mozglue/tests/ShowSSEConfig.cpp b/mozglue/tests/ShowSSEConfig.cpp
new file mode 100644
index 0000000000..a19b30198c
--- /dev/null
+++ b/mozglue/tests/ShowSSEConfig.cpp
@@ -0,0 +1,125 @@
+/* vim: set shiftwidth=2 tabstop=8 autoindent cindent expandtab: */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+#include "mozilla/SSE.h"
+#include <stdio.h>
+
+#if defined(XP_WIN)
+int wmain()
+#else
+int main()
+#endif // defined(XP_WIN)
+{
+ printf("CPUID detection present: %s\n",
+#ifdef MOZILLA_SSE_HAVE_CPUID_DETECTION
+ "yes"
+#else
+ "no"
+#endif
+ );
+
+#ifdef MOZILLA_COMPILE_WITH_MMX
+# define COMPILE_MMX_STRING "Y"
+#else
+# define COMPILE_MMX_STRING "-"
+#endif
+#ifdef MOZILLA_PRESUME_MMX
+# define PRESUME_MMX_STRING "Y"
+#else
+# define PRESUME_MMX_STRING "-"
+#endif
+
+#ifdef MOZILLA_COMPILE_WITH_SSE
+# define COMPILE_SSE_STRING "Y"
+#else
+# define COMPILE_SSE_STRING "-"
+#endif
+#ifdef MOZILLA_PRESUME_SSE
+# define PRESUME_SSE_STRING "Y"
+#else
+# define PRESUME_SSE_STRING "-"
+#endif
+
+#ifdef MOZILLA_COMPILE_WITH_SSE2
+# define COMPILE_SSE2_STRING "Y"
+#else
+# define COMPILE_SSE2_STRING "-"
+#endif
+#ifdef MOZILLA_PRESUME_SSE2
+# define PRESUME_SSE2_STRING "Y"
+#else
+# define PRESUME_SSE2_STRING "-"
+#endif
+
+#ifdef MOZILLA_COMPILE_WITH_SSE3
+# define COMPILE_SSE3_STRING "Y"
+#else
+# define COMPILE_SSE3_STRING "-"
+#endif
+#ifdef MOZILLA_PRESUME_SSE3
+# define PRESUME_SSE3_STRING "Y"
+#else
+# define PRESUME_SSE3_STRING "-"
+#endif
+
+#ifdef MOZILLA_COMPILE_WITH_SSSE3
+# define COMPILE_SSSE3_STRING "Y"
+#else
+# define COMPILE_SSSE3_STRING "-"
+#endif
+#ifdef MOZILLA_PRESUME_SSSE3
+# define PRESUME_SSSE3_STRING "Y"
+#else
+# define PRESUME_SSSE3_STRING "-"
+#endif
+
+#ifdef MOZILLA_COMPILE_WITH_SSE4A
+# define COMPILE_SSE4A_STRING "Y"
+#else
+# define COMPILE_SSE4A_STRING "-"
+#endif
+#ifdef MOZILLA_PRESUME_SSE4A
+# define PRESUME_SSE4A_STRING "Y"
+#else
+# define PRESUME_SSE4A_STRING "-"
+#endif
+
+#ifdef MOZILLA_COMPILE_WITH_SSE4_1
+# define COMPILE_SSE4_1_STRING "Y"
+#else
+# define COMPILE_SSE4_1_STRING "-"
+#endif
+#ifdef MOZILLA_PRESUME_SSE4_1
+# define PRESUME_SSE4_1_STRING "Y"
+#else
+# define PRESUME_SSE4_1_STRING "-"
+#endif
+
+#ifdef MOZILLA_COMPILE_WITH_SSE4_2
+# define COMPILE_SSE4_2_STRING "Y"
+#else
+# define COMPILE_SSE4_2_STRING "-"
+#endif
+#ifdef MOZILLA_PRESUME_SSE4_2
+# define PRESUME_SSE4_2_STRING "Y"
+#else
+# define PRESUME_SSE4_2_STRING "-"
+#endif
+
+ printf("Feature Presume Compile Support Use\n");
+#define SHOW_INFO(featurelc_, featureuc_) \
+ printf("%7s %1s %1s %1s\n", #featurelc_, \
+ PRESUME_##featureuc_##_STRING, COMPILE_##featureuc_##_STRING, \
+ (mozilla::supports_##featurelc_() ? "Y" : "-"));
+ SHOW_INFO(mmx, MMX)
+ SHOW_INFO(sse, SSE)
+ SHOW_INFO(sse2, SSE2)
+ SHOW_INFO(sse3, SSE3)
+ SHOW_INFO(ssse3, SSSE3)
+ SHOW_INFO(sse4a, SSE4A)
+ SHOW_INFO(sse4_1, SSE4_1)
+ SHOW_INFO(sse4_2, SSE4_2)
+ return 0;
+}
diff --git a/mozglue/tests/TestBaseProfiler.cpp b/mozglue/tests/TestBaseProfiler.cpp
new file mode 100644
index 0000000000..03b2076ebc
--- /dev/null
+++ b/mozglue/tests/TestBaseProfiler.cpp
@@ -0,0 +1,5732 @@
+/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* vim: set ts=8 sts=2 et sw=2 tw=80: */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this file,
+ * You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+#include "BaseProfiler.h"
+
+#include "mozilla/Attributes.h"
+#include "mozilla/BaseAndGeckoProfilerDetail.h"
+#include "mozilla/BaseProfileJSONWriter.h"
+#include "mozilla/BaseProfilerDetail.h"
+#include "mozilla/FailureLatch.h"
+#include "mozilla/FloatingPoint.h"
+#include "mozilla/NotNull.h"
+#include "mozilla/ProgressLogger.h"
+#include "mozilla/ProportionValue.h"
+
+#ifdef MOZ_GECKO_PROFILER
+# include "mozilla/BaseProfilerMarkerTypes.h"
+# include "mozilla/BlocksRingBuffer.h"
+# include "mozilla/leb128iterator.h"
+# include "mozilla/ModuloBuffer.h"
+# include "mozilla/mozalloc.h"
+# include "mozilla/PowerOfTwo.h"
+# include "mozilla/ProfileBufferChunk.h"
+# include "mozilla/ProfileBufferChunkManagerSingle.h"
+# include "mozilla/ProfileBufferChunkManagerWithLocalLimit.h"
+# include "mozilla/ProfileBufferControlledChunkManager.h"
+# include "mozilla/ProfileChunkedBuffer.h"
+# include "mozilla/Vector.h"
+#endif // MOZ_GECKO_PROFILER
+
+#if defined(_MSC_VER) || defined(__MINGW32__)
+# include <windows.h>
+# include <mmsystem.h>
+# include <process.h>
+#else
+# include <errno.h>
+# include <time.h>
+#endif
+
+#include <algorithm>
+#include <atomic>
+#include <iostream>
+#include <random>
+#include <thread>
+#include <type_traits>
+#include <utility>
+
+void TestFailureLatch() {
+ printf("TestFailureLatch...\n");
+
+ // Test infallible latch.
+ {
+ mozilla::FailureLatchInfallibleSource& infallibleLatch =
+ mozilla::FailureLatchInfallibleSource::Singleton();
+
+ MOZ_RELEASE_ASSERT(!infallibleLatch.Fallible());
+ MOZ_RELEASE_ASSERT(!infallibleLatch.Failed());
+ MOZ_RELEASE_ASSERT(!infallibleLatch.GetFailure());
+ MOZ_RELEASE_ASSERT(&infallibleLatch.SourceFailureLatch() ==
+ &mozilla::FailureLatchInfallibleSource::Singleton());
+ MOZ_RELEASE_ASSERT(&std::as_const(infallibleLatch).SourceFailureLatch() ==
+ &mozilla::FailureLatchInfallibleSource::Singleton());
+ }
+
+ // Test failure latch basic functions.
+ {
+ mozilla::FailureLatchSource failureLatch;
+
+ MOZ_RELEASE_ASSERT(failureLatch.Fallible());
+ MOZ_RELEASE_ASSERT(!failureLatch.Failed());
+ MOZ_RELEASE_ASSERT(!failureLatch.GetFailure());
+ MOZ_RELEASE_ASSERT(&failureLatch.SourceFailureLatch() == &failureLatch);
+ MOZ_RELEASE_ASSERT(&std::as_const(failureLatch).SourceFailureLatch() ==
+ &failureLatch);
+
+ failureLatch.SetFailure("error");
+
+ MOZ_RELEASE_ASSERT(failureLatch.Fallible());
+ MOZ_RELEASE_ASSERT(failureLatch.Failed());
+ MOZ_RELEASE_ASSERT(failureLatch.GetFailure());
+ MOZ_RELEASE_ASSERT(strcmp(failureLatch.GetFailure(), "error") == 0);
+
+ failureLatch.SetFailure("later error");
+
+ MOZ_RELEASE_ASSERT(failureLatch.Fallible());
+ MOZ_RELEASE_ASSERT(failureLatch.Failed());
+ MOZ_RELEASE_ASSERT(failureLatch.GetFailure());
+ MOZ_RELEASE_ASSERT(strcmp(failureLatch.GetFailure(), "error") == 0);
+ }
+
+ // Test SetFailureFrom.
+ {
+ mozilla::FailureLatchSource failureLatch;
+
+ MOZ_RELEASE_ASSERT(!failureLatch.Failed());
+ failureLatch.SetFailureFrom(failureLatch);
+ MOZ_RELEASE_ASSERT(!failureLatch.Failed());
+ MOZ_RELEASE_ASSERT(!failureLatch.GetFailure());
+
+ // SetFailureFrom with no error.
+ {
+ mozilla::FailureLatchSource failureLatchInnerOk;
+ MOZ_RELEASE_ASSERT(!failureLatchInnerOk.Failed());
+ MOZ_RELEASE_ASSERT(!failureLatchInnerOk.GetFailure());
+
+ MOZ_RELEASE_ASSERT(!failureLatch.Failed());
+ failureLatch.SetFailureFrom(failureLatchInnerOk);
+ MOZ_RELEASE_ASSERT(!failureLatch.Failed());
+
+ MOZ_RELEASE_ASSERT(!failureLatchInnerOk.Failed());
+ MOZ_RELEASE_ASSERT(!failureLatchInnerOk.GetFailure());
+ }
+ MOZ_RELEASE_ASSERT(!failureLatch.Failed());
+ MOZ_RELEASE_ASSERT(!failureLatch.GetFailure());
+
+ // SetFailureFrom with error.
+ {
+ mozilla::FailureLatchSource failureLatchInnerError;
+ MOZ_RELEASE_ASSERT(!failureLatchInnerError.Failed());
+ MOZ_RELEASE_ASSERT(!failureLatchInnerError.GetFailure());
+
+ failureLatchInnerError.SetFailure("inner error");
+ MOZ_RELEASE_ASSERT(failureLatchInnerError.Failed());
+ MOZ_RELEASE_ASSERT(
+ strcmp(failureLatchInnerError.GetFailure(), "inner error") == 0);
+
+ MOZ_RELEASE_ASSERT(!failureLatch.Failed());
+ failureLatch.SetFailureFrom(failureLatchInnerError);
+ MOZ_RELEASE_ASSERT(failureLatch.Failed());
+
+ MOZ_RELEASE_ASSERT(failureLatchInnerError.Failed());
+ MOZ_RELEASE_ASSERT(
+ strcmp(failureLatchInnerError.GetFailure(), "inner error") == 0);
+ }
+ MOZ_RELEASE_ASSERT(failureLatch.Failed());
+ MOZ_RELEASE_ASSERT(strcmp(failureLatch.GetFailure(), "inner error") == 0);
+
+ failureLatch.SetFailureFrom(failureLatch);
+ MOZ_RELEASE_ASSERT(failureLatch.Failed());
+ MOZ_RELEASE_ASSERT(strcmp(failureLatch.GetFailure(), "inner error") == 0);
+
+ // SetFailureFrom with error again, ignored.
+ {
+ mozilla::FailureLatchSource failureLatchInnerError;
+ failureLatchInnerError.SetFailure("later inner error");
+ MOZ_RELEASE_ASSERT(failureLatchInnerError.Failed());
+ MOZ_RELEASE_ASSERT(strcmp(failureLatchInnerError.GetFailure(),
+ "later inner error") == 0);
+
+ MOZ_RELEASE_ASSERT(failureLatch.Failed());
+ failureLatch.SetFailureFrom(failureLatchInnerError);
+ MOZ_RELEASE_ASSERT(failureLatch.Failed());
+
+ MOZ_RELEASE_ASSERT(failureLatchInnerError.Failed());
+ MOZ_RELEASE_ASSERT(strcmp(failureLatchInnerError.GetFailure(),
+ "later inner error") == 0);
+ }
+ MOZ_RELEASE_ASSERT(failureLatch.Failed());
+ MOZ_RELEASE_ASSERT(strcmp(failureLatch.GetFailure(), "inner error") == 0);
+ }
+
+ // Test FAILURELATCH_IMPL_PROXY
+ {
+ class Proxy final : public mozilla::FailureLatch {
+ public:
+ explicit Proxy(mozilla::FailureLatch& aFailureLatch)
+ : mFailureLatch(WrapNotNull(&aFailureLatch)) {}
+
+ void Set(mozilla::FailureLatch& aFailureLatch) {
+ mFailureLatch = WrapNotNull(&aFailureLatch);
+ }
+
+ FAILURELATCH_IMPL_PROXY(*mFailureLatch)
+
+ private:
+ mozilla::NotNull<mozilla::FailureLatch*> mFailureLatch;
+ };
+
+ Proxy proxy{mozilla::FailureLatchInfallibleSource::Singleton()};
+
+ MOZ_RELEASE_ASSERT(!proxy.Fallible());
+ MOZ_RELEASE_ASSERT(!proxy.Failed());
+ MOZ_RELEASE_ASSERT(!proxy.GetFailure());
+ MOZ_RELEASE_ASSERT(&proxy.SourceFailureLatch() ==
+ &mozilla::FailureLatchInfallibleSource::Singleton());
+ MOZ_RELEASE_ASSERT(&std::as_const(proxy).SourceFailureLatch() ==
+ &mozilla::FailureLatchInfallibleSource::Singleton());
+
+ // Error from proxy.
+ {
+ mozilla::FailureLatchSource failureLatch;
+ proxy.Set(failureLatch);
+ MOZ_RELEASE_ASSERT(proxy.Fallible());
+ MOZ_RELEASE_ASSERT(!proxy.Failed());
+ MOZ_RELEASE_ASSERT(!proxy.GetFailure());
+ MOZ_RELEASE_ASSERT(&proxy.SourceFailureLatch() == &failureLatch);
+ MOZ_RELEASE_ASSERT(&std::as_const(proxy).SourceFailureLatch() ==
+ &failureLatch);
+
+ proxy.SetFailure("error");
+ MOZ_RELEASE_ASSERT(proxy.Failed());
+ MOZ_RELEASE_ASSERT(strcmp(proxy.GetFailure(), "error") == 0);
+ MOZ_RELEASE_ASSERT(failureLatch.Failed());
+ MOZ_RELEASE_ASSERT(strcmp(failureLatch.GetFailure(), "error") == 0);
+
+ // Don't forget to stop pointing at soon-to-be-destroyed object.
+ proxy.Set(mozilla::FailureLatchInfallibleSource::Singleton());
+ }
+
+ // Error from proxy's origin.
+ {
+ mozilla::FailureLatchSource failureLatch;
+ proxy.Set(failureLatch);
+ MOZ_RELEASE_ASSERT(proxy.Fallible());
+ MOZ_RELEASE_ASSERT(!proxy.Failed());
+ MOZ_RELEASE_ASSERT(!proxy.GetFailure());
+ MOZ_RELEASE_ASSERT(&proxy.SourceFailureLatch() == &failureLatch);
+ MOZ_RELEASE_ASSERT(&std::as_const(proxy).SourceFailureLatch() ==
+ &failureLatch);
+
+ failureLatch.SetFailure("error");
+ MOZ_RELEASE_ASSERT(proxy.Failed());
+ MOZ_RELEASE_ASSERT(strcmp(proxy.GetFailure(), "error") == 0);
+ MOZ_RELEASE_ASSERT(failureLatch.Failed());
+ MOZ_RELEASE_ASSERT(strcmp(failureLatch.GetFailure(), "error") == 0);
+
+ // Don't forget to stop pointing at soon-to-be-destroyed object.
+ proxy.Set(mozilla::FailureLatchInfallibleSource::Singleton());
+ }
+
+ MOZ_RELEASE_ASSERT(!proxy.Fallible());
+ MOZ_RELEASE_ASSERT(!proxy.Failed());
+ MOZ_RELEASE_ASSERT(!proxy.GetFailure());
+ MOZ_RELEASE_ASSERT(&proxy.SourceFailureLatch() ==
+ &mozilla::FailureLatchInfallibleSource::Singleton());
+ MOZ_RELEASE_ASSERT(&std::as_const(proxy).SourceFailureLatch() ==
+ &mozilla::FailureLatchInfallibleSource::Singleton());
+ }
+
+ // Test FAILURELATCH_IMPL_PROXY_OR_INFALLIBLE
+ {
+ class ProxyOrNull final : public mozilla::FailureLatch {
+ public:
+ ProxyOrNull() = default;
+
+ void Set(mozilla::FailureLatch* aFailureLatchOrNull) {
+ mFailureLatchOrNull = aFailureLatchOrNull;
+ }
+
+ FAILURELATCH_IMPL_PROXY_OR_INFALLIBLE(mFailureLatchOrNull, ProxyOrNull)
+
+ private:
+ mozilla::FailureLatch* mFailureLatchOrNull = nullptr;
+ };
+
+ ProxyOrNull proxy;
+
+ MOZ_RELEASE_ASSERT(!proxy.Fallible());
+ MOZ_RELEASE_ASSERT(!proxy.Failed());
+ MOZ_RELEASE_ASSERT(!proxy.GetFailure());
+ MOZ_RELEASE_ASSERT(&proxy.SourceFailureLatch() ==
+ &mozilla::FailureLatchInfallibleSource::Singleton());
+ MOZ_RELEASE_ASSERT(&std::as_const(proxy).SourceFailureLatch() ==
+ &mozilla::FailureLatchInfallibleSource::Singleton());
+
+ // Error from proxy.
+ {
+ mozilla::FailureLatchSource failureLatch;
+ proxy.Set(&failureLatch);
+ MOZ_RELEASE_ASSERT(proxy.Fallible());
+ MOZ_RELEASE_ASSERT(!proxy.Failed());
+ MOZ_RELEASE_ASSERT(!proxy.GetFailure());
+ MOZ_RELEASE_ASSERT(&proxy.SourceFailureLatch() == &failureLatch);
+ MOZ_RELEASE_ASSERT(&std::as_const(proxy).SourceFailureLatch() ==
+ &failureLatch);
+
+ proxy.SetFailure("error");
+ MOZ_RELEASE_ASSERT(proxy.Failed());
+ MOZ_RELEASE_ASSERT(strcmp(proxy.GetFailure(), "error") == 0);
+ MOZ_RELEASE_ASSERT(failureLatch.Failed());
+ MOZ_RELEASE_ASSERT(strcmp(failureLatch.GetFailure(), "error") == 0);
+
+ // Don't forget to stop pointing at soon-to-be-destroyed object.
+ proxy.Set(nullptr);
+ }
+
+ // Error from proxy's origin.
+ {
+ mozilla::FailureLatchSource failureLatch;
+ proxy.Set(&failureLatch);
+ MOZ_RELEASE_ASSERT(proxy.Fallible());
+ MOZ_RELEASE_ASSERT(!proxy.Failed());
+ MOZ_RELEASE_ASSERT(!proxy.GetFailure());
+ MOZ_RELEASE_ASSERT(&proxy.SourceFailureLatch() == &failureLatch);
+ MOZ_RELEASE_ASSERT(&std::as_const(proxy).SourceFailureLatch() ==
+ &failureLatch);
+
+ failureLatch.SetFailure("error");
+ MOZ_RELEASE_ASSERT(proxy.Failed());
+ MOZ_RELEASE_ASSERT(strcmp(proxy.GetFailure(), "error") == 0);
+ MOZ_RELEASE_ASSERT(failureLatch.Failed());
+ MOZ_RELEASE_ASSERT(strcmp(failureLatch.GetFailure(), "error") == 0);
+
+ // Don't forget to stop pointing at soon-to-be-destroyed object.
+ proxy.Set(nullptr);
+ }
+
+ MOZ_RELEASE_ASSERT(!proxy.Fallible());
+ MOZ_RELEASE_ASSERT(!proxy.Failed());
+ MOZ_RELEASE_ASSERT(!proxy.GetFailure());
+ MOZ_RELEASE_ASSERT(&proxy.SourceFailureLatch() ==
+ &mozilla::FailureLatchInfallibleSource::Singleton());
+ MOZ_RELEASE_ASSERT(&std::as_const(proxy).SourceFailureLatch() ==
+ &mozilla::FailureLatchInfallibleSource::Singleton());
+ }
+
+ printf("TestFailureLatch done\n");
+}
+
+void TestProfilerUtils() {
+ printf("TestProfilerUtils...\n");
+
+ {
+ using mozilla::baseprofiler::BaseProfilerProcessId;
+ using Number = BaseProfilerProcessId::NumberType;
+ static constexpr Number scMaxNumber = std::numeric_limits<Number>::max();
+
+ static_assert(
+ BaseProfilerProcessId{}.ToNumber() == 0,
+ "These tests assume that the unspecified process id number is 0; "
+ "if this fails, please update these tests accordingly");
+
+ static_assert(!BaseProfilerProcessId{}.IsSpecified());
+ static_assert(!BaseProfilerProcessId::FromNumber(0).IsSpecified());
+ static_assert(BaseProfilerProcessId::FromNumber(1).IsSpecified());
+ static_assert(BaseProfilerProcessId::FromNumber(123).IsSpecified());
+ static_assert(BaseProfilerProcessId::FromNumber(scMaxNumber).IsSpecified());
+
+ static_assert(BaseProfilerProcessId::FromNumber(Number(1)).ToNumber() ==
+ Number(1));
+ static_assert(BaseProfilerProcessId::FromNumber(Number(123)).ToNumber() ==
+ Number(123));
+ static_assert(BaseProfilerProcessId::FromNumber(scMaxNumber).ToNumber() ==
+ scMaxNumber);
+
+ static_assert(BaseProfilerProcessId{} == BaseProfilerProcessId{});
+ static_assert(BaseProfilerProcessId::FromNumber(Number(123)) ==
+ BaseProfilerProcessId::FromNumber(Number(123)));
+ static_assert(BaseProfilerProcessId{} !=
+ BaseProfilerProcessId::FromNumber(Number(123)));
+ static_assert(BaseProfilerProcessId::FromNumber(Number(123)) !=
+ BaseProfilerProcessId{});
+ static_assert(BaseProfilerProcessId::FromNumber(Number(123)) !=
+ BaseProfilerProcessId::FromNumber(scMaxNumber));
+ static_assert(BaseProfilerProcessId::FromNumber(scMaxNumber) !=
+ BaseProfilerProcessId::FromNumber(Number(123)));
+
+ // Verify trivial-copyability by memcpy'ing to&from same-size storage.
+ static_assert(std::is_trivially_copyable_v<BaseProfilerProcessId>);
+ BaseProfilerProcessId pid;
+ MOZ_RELEASE_ASSERT(!pid.IsSpecified());
+ Number pidStorage;
+ static_assert(sizeof(pidStorage) == sizeof(pid));
+ // Copy from BaseProfilerProcessId to storage. Note: We cannot assume that
+ // this is equal to what ToNumber() gives us. All we can do is verify that
+ // copying from storage back to BaseProfilerProcessId works as expected.
+ std::memcpy(&pidStorage, &pid, sizeof(pidStorage));
+ BaseProfilerProcessId pid2 = BaseProfilerProcessId::FromNumber(2);
+ MOZ_RELEASE_ASSERT(pid2.IsSpecified());
+ std::memcpy(&pid2, &pidStorage, sizeof(pid));
+ MOZ_RELEASE_ASSERT(!pid2.IsSpecified());
+
+ pid = BaseProfilerProcessId::FromNumber(123);
+ std::memcpy(&pidStorage, &pid, sizeof(pidStorage));
+ pid2 = BaseProfilerProcessId{};
+ MOZ_RELEASE_ASSERT(!pid2.IsSpecified());
+ std::memcpy(&pid2, &pidStorage, sizeof(pid));
+ MOZ_RELEASE_ASSERT(pid2.IsSpecified());
+ MOZ_RELEASE_ASSERT(pid2.ToNumber() == 123);
+
+ // No conversions to/from numbers.
+ static_assert(!std::is_constructible_v<BaseProfilerProcessId, Number>);
+ static_assert(!std::is_assignable_v<BaseProfilerProcessId, Number>);
+ static_assert(!std::is_constructible_v<Number, BaseProfilerProcessId>);
+ static_assert(!std::is_assignable_v<Number, BaseProfilerProcessId>);
+
+ static_assert(
+ std::is_same_v<
+ decltype(mozilla::baseprofiler::profiler_current_process_id()),
+ BaseProfilerProcessId>);
+ MOZ_RELEASE_ASSERT(
+ mozilla::baseprofiler::profiler_current_process_id().IsSpecified());
+ }
+
+ {
+ mozilla::baseprofiler::profiler_init_main_thread_id();
+
+ using mozilla::baseprofiler::BaseProfilerThreadId;
+ using Number = BaseProfilerThreadId::NumberType;
+ static constexpr Number scMaxNumber = std::numeric_limits<Number>::max();
+
+ static_assert(
+ BaseProfilerThreadId{}.ToNumber() == 0,
+ "These tests assume that the unspecified thread id number is 0; "
+ "if this fails, please update these tests accordingly");
+
+ static_assert(!BaseProfilerThreadId{}.IsSpecified());
+ static_assert(!BaseProfilerThreadId::FromNumber(0).IsSpecified());
+ static_assert(BaseProfilerThreadId::FromNumber(1).IsSpecified());
+ static_assert(BaseProfilerThreadId::FromNumber(123).IsSpecified());
+ static_assert(BaseProfilerThreadId::FromNumber(scMaxNumber).IsSpecified());
+
+ static_assert(BaseProfilerThreadId::FromNumber(Number(1)).ToNumber() ==
+ Number(1));
+ static_assert(BaseProfilerThreadId::FromNumber(Number(123)).ToNumber() ==
+ Number(123));
+ static_assert(BaseProfilerThreadId::FromNumber(scMaxNumber).ToNumber() ==
+ scMaxNumber);
+
+ static_assert(BaseProfilerThreadId{} == BaseProfilerThreadId{});
+ static_assert(BaseProfilerThreadId::FromNumber(Number(123)) ==
+ BaseProfilerThreadId::FromNumber(Number(123)));
+ static_assert(BaseProfilerThreadId{} !=
+ BaseProfilerThreadId::FromNumber(Number(123)));
+ static_assert(BaseProfilerThreadId::FromNumber(Number(123)) !=
+ BaseProfilerThreadId{});
+ static_assert(BaseProfilerThreadId::FromNumber(Number(123)) !=
+ BaseProfilerThreadId::FromNumber(scMaxNumber));
+ static_assert(BaseProfilerThreadId::FromNumber(scMaxNumber) !=
+ BaseProfilerThreadId::FromNumber(Number(123)));
+
+ // Verify trivial-copyability by memcpy'ing to&from same-size storage.
+ static_assert(std::is_trivially_copyable_v<BaseProfilerThreadId>);
+ BaseProfilerThreadId tid;
+ MOZ_RELEASE_ASSERT(!tid.IsSpecified());
+ Number tidStorage;
+ static_assert(sizeof(tidStorage) == sizeof(tid));
+ // Copy from BaseProfilerThreadId to storage. Note: We cannot assume that
+ // this is equal to what ToNumber() gives us. All we can do is verify that
+ // copying from storage back to BaseProfilerThreadId works as expected.
+ std::memcpy(&tidStorage, &tid, sizeof(tidStorage));
+ BaseProfilerThreadId tid2 = BaseProfilerThreadId::FromNumber(2);
+ MOZ_RELEASE_ASSERT(tid2.IsSpecified());
+ std::memcpy(&tid2, &tidStorage, sizeof(tid));
+ MOZ_RELEASE_ASSERT(!tid2.IsSpecified());
+
+ tid = BaseProfilerThreadId::FromNumber(Number(123));
+ std::memcpy(&tidStorage, &tid, sizeof(tidStorage));
+ tid2 = BaseProfilerThreadId{};
+ MOZ_RELEASE_ASSERT(!tid2.IsSpecified());
+ std::memcpy(&tid2, &tidStorage, sizeof(tid));
+ MOZ_RELEASE_ASSERT(tid2.IsSpecified());
+ MOZ_RELEASE_ASSERT(tid2.ToNumber() == Number(123));
+
+ // No conversions to/from numbers.
+ static_assert(!std::is_constructible_v<BaseProfilerThreadId, Number>);
+ static_assert(!std::is_assignable_v<BaseProfilerThreadId, Number>);
+ static_assert(!std::is_constructible_v<Number, BaseProfilerThreadId>);
+ static_assert(!std::is_assignable_v<Number, BaseProfilerThreadId>);
+
+ static_assert(std::is_same_v<
+ decltype(mozilla::baseprofiler::profiler_current_thread_id()),
+ BaseProfilerThreadId>);
+ BaseProfilerThreadId mainTestThreadId =
+ mozilla::baseprofiler::profiler_current_thread_id();
+ MOZ_RELEASE_ASSERT(mainTestThreadId.IsSpecified());
+
+ BaseProfilerThreadId mainThreadId =
+ mozilla::baseprofiler::profiler_main_thread_id();
+ MOZ_RELEASE_ASSERT(mainThreadId.IsSpecified());
+
+ MOZ_RELEASE_ASSERT(mainThreadId == mainTestThreadId,
+ "Test should run on the main thread");
+ MOZ_RELEASE_ASSERT(mozilla::baseprofiler::profiler_is_main_thread());
+
+ std::thread testThread([&]() {
+ const BaseProfilerThreadId testThreadId =
+ mozilla::baseprofiler::profiler_current_thread_id();
+ MOZ_RELEASE_ASSERT(testThreadId.IsSpecified());
+ MOZ_RELEASE_ASSERT(testThreadId != mainThreadId);
+ MOZ_RELEASE_ASSERT(!mozilla::baseprofiler::profiler_is_main_thread());
+ });
+ testThread.join();
+ }
+
+ // No conversions between processes and threads.
+ static_assert(
+ !std::is_constructible_v<mozilla::baseprofiler::BaseProfilerThreadId,
+ mozilla::baseprofiler::BaseProfilerProcessId>);
+ static_assert(
+ !std::is_assignable_v<mozilla::baseprofiler::BaseProfilerThreadId,
+ mozilla::baseprofiler::BaseProfilerProcessId>);
+ static_assert(
+ !std::is_constructible_v<mozilla::baseprofiler::BaseProfilerProcessId,
+ mozilla::baseprofiler::BaseProfilerThreadId>);
+ static_assert(
+ !std::is_assignable_v<mozilla::baseprofiler::BaseProfilerProcessId,
+ mozilla::baseprofiler::BaseProfilerThreadId>);
+
+ printf("TestProfilerUtils done\n");
+}
+
+void TestBaseAndProfilerDetail() {
+ printf("TestBaseAndProfilerDetail...\n");
+
+ {
+ using mozilla::profiler::detail::FilterHasPid;
+
+ const auto pid123 =
+ mozilla::baseprofiler::BaseProfilerProcessId::FromNumber(123);
+ MOZ_RELEASE_ASSERT(FilterHasPid("pid:123", pid123));
+ MOZ_RELEASE_ASSERT(!FilterHasPid("", pid123));
+ MOZ_RELEASE_ASSERT(!FilterHasPid(" ", pid123));
+ MOZ_RELEASE_ASSERT(!FilterHasPid("123", pid123));
+ MOZ_RELEASE_ASSERT(!FilterHasPid("pid", pid123));
+ MOZ_RELEASE_ASSERT(!FilterHasPid("pid:", pid123));
+ MOZ_RELEASE_ASSERT(!FilterHasPid("pid=123", pid123));
+ MOZ_RELEASE_ASSERT(!FilterHasPid("pid:123 ", pid123));
+ MOZ_RELEASE_ASSERT(!FilterHasPid("pid: 123", pid123));
+ MOZ_RELEASE_ASSERT(!FilterHasPid("pid:0123", pid123));
+ MOZ_RELEASE_ASSERT(!FilterHasPid("pid:0000000000000000000000123", pid123));
+ MOZ_RELEASE_ASSERT(!FilterHasPid("pid:12", pid123));
+ MOZ_RELEASE_ASSERT(!FilterHasPid("pid:1234", pid123));
+ MOZ_RELEASE_ASSERT(!FilterHasPid("pid:0", pid123));
+
+ using PidNumber = mozilla::baseprofiler::BaseProfilerProcessId::NumberType;
+ const PidNumber maxNumber = std::numeric_limits<PidNumber>::max();
+ const auto maxPid =
+ mozilla::baseprofiler::BaseProfilerProcessId::FromNumber(maxNumber);
+ const std::string maxPidString = "pid:" + std::to_string(maxNumber);
+ MOZ_RELEASE_ASSERT(FilterHasPid(maxPidString.c_str(), maxPid));
+
+ const std::string tooBigPidString = maxPidString + "0";
+ MOZ_RELEASE_ASSERT(!FilterHasPid(tooBigPidString.c_str(), maxPid));
+ }
+
+ {
+ using mozilla::profiler::detail::FiltersExcludePid;
+ const auto pid123 =
+ mozilla::baseprofiler::BaseProfilerProcessId::FromNumber(123);
+
+ MOZ_RELEASE_ASSERT(
+ !FiltersExcludePid(mozilla::Span<const char*>{}, pid123));
+
+ {
+ const char* const filters[] = {"main"};
+ MOZ_RELEASE_ASSERT(!FiltersExcludePid(filters, pid123));
+ }
+
+ {
+ const char* const filters[] = {"main", "pid:123"};
+ MOZ_RELEASE_ASSERT(!FiltersExcludePid(filters, pid123));
+ }
+
+ {
+ const char* const filters[] = {"main", "pid:456"};
+ MOZ_RELEASE_ASSERT(!FiltersExcludePid(filters, pid123));
+ }
+
+ {
+ const char* const filters[] = {"pid:123"};
+ MOZ_RELEASE_ASSERT(!FiltersExcludePid(filters, pid123));
+ }
+
+ {
+ const char* const filters[] = {"pid:123", "pid:456"};
+ MOZ_RELEASE_ASSERT(!FiltersExcludePid(filters, pid123));
+ }
+
+ {
+ const char* const filters[] = {"pid:456", "pid:123"};
+ MOZ_RELEASE_ASSERT(!FiltersExcludePid(filters, pid123));
+ }
+
+ {
+ const char* const filters[] = {"pid:456"};
+ MOZ_RELEASE_ASSERT(FiltersExcludePid(filters, pid123));
+ }
+
+ {
+ const char* const filters[] = {"pid:456", "pid:789"};
+ MOZ_RELEASE_ASSERT(FiltersExcludePid(filters, pid123));
+ }
+ }
+
+ printf("TestBaseAndProfilerDetail done\n");
+}
+
+void TestSharedMutex() {
+ printf("TestSharedMutex...\n");
+
+ mozilla::baseprofiler::detail::BaseProfilerSharedMutex sm;
+
+ // First round of minimal tests in this thread.
+
+ MOZ_RELEASE_ASSERT(!sm.IsLockedExclusiveOnCurrentThread());
+
+ sm.LockExclusive();
+ MOZ_RELEASE_ASSERT(sm.IsLockedExclusiveOnCurrentThread());
+ sm.UnlockExclusive();
+ MOZ_RELEASE_ASSERT(!sm.IsLockedExclusiveOnCurrentThread());
+
+ sm.LockShared();
+ MOZ_RELEASE_ASSERT(!sm.IsLockedExclusiveOnCurrentThread());
+ sm.UnlockShared();
+ MOZ_RELEASE_ASSERT(!sm.IsLockedExclusiveOnCurrentThread());
+
+ {
+ mozilla::baseprofiler::detail::BaseProfilerAutoLockExclusive exclusiveLock{
+ sm};
+ MOZ_RELEASE_ASSERT(sm.IsLockedExclusiveOnCurrentThread());
+ }
+ MOZ_RELEASE_ASSERT(!sm.IsLockedExclusiveOnCurrentThread());
+
+ {
+ mozilla::baseprofiler::detail::BaseProfilerAutoLockShared sharedLock{sm};
+ MOZ_RELEASE_ASSERT(!sm.IsLockedExclusiveOnCurrentThread());
+ }
+ MOZ_RELEASE_ASSERT(!sm.IsLockedExclusiveOnCurrentThread());
+
+ // The following will run actions between two threads, to verify that
+ // exclusive and shared locks work as expected.
+
+ // These actions will happen from top to bottom.
+ // This will test all possible lock interactions.
+ enum NextAction { // State of the lock:
+ t1Starting, // (x=exclusive, s=shared, ?=blocked)
+ t2Starting, // t1 t2
+ t1LockExclusive, // x
+ t2LockExclusiveAndBlock, // x x? - Can't have two exclusives.
+ t1UnlockExclusive, // x
+ t2UnblockedAfterT1Unlock, // x
+ t1LockSharedAndBlock, // s? x - Can't have shared during excl
+ t2UnlockExclusive, // s
+ t1UnblockedAfterT2Unlock, // s
+ t2LockShared, // s s - Can have multiple shared locks
+ t1UnlockShared, // s
+ t2StillLockedShared, // s
+ t1LockExclusiveAndBlock, // x? s - Can't have excl during shared
+ t2UnlockShared, // x
+ t1UnblockedAfterT2UnlockShared, // x
+ t2CheckAfterT1Lock, // x
+ t1LastUnlockExclusive, // (unlocked)
+ done
+ };
+
+ // Each thread will repeatedly read this `nextAction`, and run actions that
+ // target it...
+ std::atomic<NextAction> nextAction{static_cast<NextAction>(0)};
+ // ... and advance to the next available action (which should usually be for
+ // the other thread).
+ auto AdvanceAction = [&nextAction]() {
+ MOZ_RELEASE_ASSERT(nextAction <= done);
+ nextAction = static_cast<NextAction>(static_cast<int>(nextAction) + 1);
+ };
+
+ std::thread t1{[&]() {
+ for (;;) {
+ switch (nextAction) {
+ case t1Starting:
+ AdvanceAction();
+ break;
+ case t1LockExclusive:
+ MOZ_RELEASE_ASSERT(!sm.IsLockedExclusiveOnCurrentThread());
+ sm.LockExclusive();
+ MOZ_RELEASE_ASSERT(sm.IsLockedExclusiveOnCurrentThread());
+ AdvanceAction();
+ break;
+ case t1UnlockExclusive:
+ MOZ_RELEASE_ASSERT(sm.IsLockedExclusiveOnCurrentThread());
+ // Advance first, before unlocking, so that t2 sees the new state.
+ AdvanceAction();
+ sm.UnlockExclusive();
+ MOZ_RELEASE_ASSERT(!sm.IsLockedExclusiveOnCurrentThread());
+ break;
+ case t1LockSharedAndBlock:
+ // Advance action before attempting to lock after t2's exclusive lock.
+ AdvanceAction();
+ sm.LockShared();
+ // We will only acquire the lock after t1 unlocks.
+ MOZ_RELEASE_ASSERT(nextAction == t1UnblockedAfterT2Unlock);
+ MOZ_RELEASE_ASSERT(!sm.IsLockedExclusiveOnCurrentThread());
+ AdvanceAction();
+ break;
+ case t1UnlockShared:
+ MOZ_RELEASE_ASSERT(!sm.IsLockedExclusiveOnCurrentThread());
+ // Advance first, before unlocking, so that t2 sees the new state.
+ AdvanceAction();
+ sm.UnlockShared();
+ MOZ_RELEASE_ASSERT(!sm.IsLockedExclusiveOnCurrentThread());
+ break;
+ case t1LockExclusiveAndBlock:
+ MOZ_RELEASE_ASSERT(!sm.IsLockedExclusiveOnCurrentThread());
+ // Advance action before attempting to lock after t2's shared lock.
+ AdvanceAction();
+ sm.LockExclusive();
+ // We will only acquire the lock after t2 unlocks.
+ MOZ_RELEASE_ASSERT(nextAction == t1UnblockedAfterT2UnlockShared);
+ MOZ_RELEASE_ASSERT(sm.IsLockedExclusiveOnCurrentThread());
+ AdvanceAction();
+ break;
+ case t1LastUnlockExclusive:
+ MOZ_RELEASE_ASSERT(sm.IsLockedExclusiveOnCurrentThread());
+ // Advance first, before unlocking, so that t2 sees the new state.
+ AdvanceAction();
+ sm.UnlockExclusive();
+ MOZ_RELEASE_ASSERT(!sm.IsLockedExclusiveOnCurrentThread());
+ break;
+ case done:
+ return;
+ default:
+ // Ignore other actions intended for t2.
+ break;
+ }
+ }
+ }};
+
+ std::thread t2{[&]() {
+ for (;;) {
+ switch (nextAction) {
+ case t2Starting:
+ AdvanceAction();
+ break;
+ case t2LockExclusiveAndBlock:
+ MOZ_RELEASE_ASSERT(!sm.IsLockedExclusiveOnCurrentThread());
+ // Advance action before attempting to lock after t1's exclusive lock.
+ AdvanceAction();
+ sm.LockExclusive();
+ // We will only acquire the lock after t1 unlocks.
+ MOZ_RELEASE_ASSERT(nextAction == t2UnblockedAfterT1Unlock);
+ MOZ_RELEASE_ASSERT(sm.IsLockedExclusiveOnCurrentThread());
+ AdvanceAction();
+ break;
+ case t2UnlockExclusive:
+ MOZ_RELEASE_ASSERT(sm.IsLockedExclusiveOnCurrentThread());
+ // Advance first, before unlocking, so that t1 sees the new state.
+ AdvanceAction();
+ sm.UnlockExclusive();
+ MOZ_RELEASE_ASSERT(!sm.IsLockedExclusiveOnCurrentThread());
+ break;
+ case t2LockShared:
+ sm.LockShared();
+ MOZ_RELEASE_ASSERT(!sm.IsLockedExclusiveOnCurrentThread());
+ AdvanceAction();
+ break;
+ case t2StillLockedShared:
+ AdvanceAction();
+ break;
+ case t2UnlockShared:
+ MOZ_RELEASE_ASSERT(!sm.IsLockedExclusiveOnCurrentThread());
+ // Advance first, before unlocking, so that t1 sees the new state.
+ AdvanceAction();
+ sm.UnlockShared();
+ MOZ_RELEASE_ASSERT(!sm.IsLockedExclusiveOnCurrentThread());
+ break;
+ case t2CheckAfterT1Lock:
+ MOZ_RELEASE_ASSERT(!sm.IsLockedExclusiveOnCurrentThread());
+ AdvanceAction();
+ break;
+ case done:
+ return;
+ default:
+ // Ignore other actions intended for t1.
+ break;
+ }
+ }
+ }};
+
+ t1.join();
+ t2.join();
+
+ printf("TestSharedMutex done\n");
+}
+
+void TestProportionValue() {
+ printf("TestProportionValue...\n");
+
+ using mozilla::ProportionValue;
+
+#define STATIC_ASSERT_EQ(a, b) \
+ static_assert((a) == (b)); \
+ MOZ_RELEASE_ASSERT((a) == (b));
+
+#define STATIC_ASSERT(e) STATIC_ASSERT_EQ(e, true)
+
+ // Conversion from&to double.
+ STATIC_ASSERT_EQ(ProportionValue().ToDouble(), 0.0);
+ STATIC_ASSERT_EQ(ProportionValue(0.0).ToDouble(), 0.0);
+ STATIC_ASSERT_EQ(ProportionValue(0.5).ToDouble(), 0.5);
+ STATIC_ASSERT_EQ(ProportionValue(1.0).ToDouble(), 1.0);
+
+ // Clamping.
+ STATIC_ASSERT_EQ(
+ ProportionValue(std::numeric_limits<double>::min()).ToDouble(), 0.0);
+ STATIC_ASSERT_EQ(
+ ProportionValue(std::numeric_limits<long double>::min()).ToDouble(), 0.0);
+ STATIC_ASSERT_EQ(ProportionValue(-1.0).ToDouble(), 0.0);
+ STATIC_ASSERT_EQ(ProportionValue(-0.01).ToDouble(), 0.0);
+ STATIC_ASSERT_EQ(ProportionValue(-0.0).ToDouble(), 0.0);
+ STATIC_ASSERT_EQ(ProportionValue(1.01).ToDouble(), 1.0);
+ STATIC_ASSERT_EQ(
+ ProportionValue(std::numeric_limits<double>::max()).ToDouble(), 1.0);
+
+ // User-defined literal.
+ {
+ using namespace mozilla::literals::ProportionValue_literals;
+ STATIC_ASSERT_EQ(0_pc, ProportionValue(0.0));
+ STATIC_ASSERT_EQ(0._pc, ProportionValue(0.0));
+ STATIC_ASSERT_EQ(50_pc, ProportionValue(0.5));
+ STATIC_ASSERT_EQ(50._pc, ProportionValue(0.5));
+ STATIC_ASSERT_EQ(100_pc, ProportionValue(1.0));
+ STATIC_ASSERT_EQ(100._pc, ProportionValue(1.0));
+ STATIC_ASSERT_EQ(101_pc, ProportionValue(1.0));
+ STATIC_ASSERT_EQ(100.01_pc, ProportionValue(1.0));
+ STATIC_ASSERT_EQ(1000_pc, ProportionValue(1.0));
+ STATIC_ASSERT_EQ(1000._pc, ProportionValue(1.0));
+ }
+ {
+ // ProportionValue_literals is an inline namespace of mozilla::literals, so
+ // it's optional.
+ using namespace mozilla::literals;
+ STATIC_ASSERT_EQ(0_pc, ProportionValue(0.0));
+ STATIC_ASSERT_EQ(0._pc, ProportionValue(0.0));
+ STATIC_ASSERT_EQ(50_pc, ProportionValue(0.5));
+ STATIC_ASSERT_EQ(50._pc, ProportionValue(0.5));
+ STATIC_ASSERT_EQ(100_pc, ProportionValue(1.0));
+ STATIC_ASSERT_EQ(100._pc, ProportionValue(1.0));
+ STATIC_ASSERT_EQ(101_pc, ProportionValue(1.0));
+ STATIC_ASSERT_EQ(100.01_pc, ProportionValue(1.0));
+ STATIC_ASSERT_EQ(1000_pc, ProportionValue(1.0));
+ STATIC_ASSERT_EQ(1000._pc, ProportionValue(1.0));
+ }
+
+ // Invalid construction, conversion to double NaN.
+ MOZ_RELEASE_ASSERT(std::isnan(ProportionValue::MakeInvalid().ToDouble()));
+
+ using namespace mozilla::literals::ProportionValue_literals;
+
+ // Conversion to&from underlying integral number.
+ STATIC_ASSERT_EQ(
+ ProportionValue::FromUnderlyingType((0_pc).ToUnderlyingType()).ToDouble(),
+ 0.0);
+ STATIC_ASSERT_EQ(
+ ProportionValue::FromUnderlyingType((50_pc).ToUnderlyingType())
+ .ToDouble(),
+ 0.5);
+ STATIC_ASSERT_EQ(
+ ProportionValue::FromUnderlyingType((100_pc).ToUnderlyingType())
+ .ToDouble(),
+ 1.0);
+ STATIC_ASSERT(ProportionValue::FromUnderlyingType(
+ ProportionValue::MakeInvalid().ToUnderlyingType())
+ .IsInvalid());
+
+ // IsExactlyZero.
+ STATIC_ASSERT(ProportionValue().IsExactlyZero());
+ STATIC_ASSERT((0_pc).IsExactlyZero());
+ STATIC_ASSERT(!(50_pc).IsExactlyZero());
+ STATIC_ASSERT(!(100_pc).IsExactlyZero());
+ STATIC_ASSERT(!ProportionValue::MakeInvalid().IsExactlyZero());
+
+ // IsExactlyOne.
+ STATIC_ASSERT(!ProportionValue().IsExactlyOne());
+ STATIC_ASSERT(!(0_pc).IsExactlyOne());
+ STATIC_ASSERT(!(50_pc).IsExactlyOne());
+ STATIC_ASSERT((100_pc).IsExactlyOne());
+ STATIC_ASSERT(!ProportionValue::MakeInvalid().IsExactlyOne());
+
+ // IsValid.
+ STATIC_ASSERT(ProportionValue().IsValid());
+ STATIC_ASSERT((0_pc).IsValid());
+ STATIC_ASSERT((50_pc).IsValid());
+ STATIC_ASSERT((100_pc).IsValid());
+ STATIC_ASSERT(!ProportionValue::MakeInvalid().IsValid());
+
+ // IsInvalid.
+ STATIC_ASSERT(!ProportionValue().IsInvalid());
+ STATIC_ASSERT(!(0_pc).IsInvalid());
+ STATIC_ASSERT(!(50_pc).IsInvalid());
+ STATIC_ASSERT(!(100_pc).IsInvalid());
+ STATIC_ASSERT(ProportionValue::MakeInvalid().IsInvalid());
+
+ // Addition.
+ STATIC_ASSERT_EQ((0_pc + 0_pc).ToDouble(), 0.0);
+ STATIC_ASSERT_EQ((0_pc + 100_pc).ToDouble(), 1.0);
+ STATIC_ASSERT_EQ((100_pc + 0_pc).ToDouble(), 1.0);
+ STATIC_ASSERT_EQ((100_pc + 100_pc).ToDouble(), 1.0);
+ STATIC_ASSERT((ProportionValue::MakeInvalid() + 50_pc).IsInvalid());
+ STATIC_ASSERT((50_pc + ProportionValue::MakeInvalid()).IsInvalid());
+
+ // Subtraction.
+ STATIC_ASSERT_EQ((0_pc - 0_pc).ToDouble(), 0.0);
+ STATIC_ASSERT_EQ((0_pc - 100_pc).ToDouble(), 0.0);
+ STATIC_ASSERT_EQ((100_pc - 0_pc).ToDouble(), 1.0);
+ STATIC_ASSERT_EQ((100_pc - 100_pc).ToDouble(), 0.0);
+ STATIC_ASSERT((ProportionValue::MakeInvalid() - 50_pc).IsInvalid());
+ STATIC_ASSERT((50_pc - ProportionValue::MakeInvalid()).IsInvalid());
+
+ // Multiplication.
+ STATIC_ASSERT_EQ((0_pc * 0_pc).ToDouble(), 0.0);
+ STATIC_ASSERT_EQ((0_pc * 100_pc).ToDouble(), 0.0);
+ STATIC_ASSERT_EQ((50_pc * 50_pc).ToDouble(), 0.25);
+ STATIC_ASSERT_EQ((50_pc * 100_pc).ToDouble(), 0.5);
+ STATIC_ASSERT_EQ((100_pc * 50_pc).ToDouble(), 0.5);
+ STATIC_ASSERT_EQ((100_pc * 0_pc).ToDouble(), 0.0);
+ STATIC_ASSERT_EQ((100_pc * 100_pc).ToDouble(), 1.0);
+ STATIC_ASSERT((ProportionValue::MakeInvalid() * 50_pc).IsInvalid());
+ STATIC_ASSERT((50_pc * ProportionValue::MakeInvalid()).IsInvalid());
+
+ // Division by a positive integer value.
+ STATIC_ASSERT_EQ((100_pc / 1u).ToDouble(), 1.0);
+ STATIC_ASSERT_EQ((100_pc / 2u).ToDouble(), 0.5);
+ STATIC_ASSERT_EQ(
+ (ProportionValue::FromUnderlyingType(6u) / 2u).ToUnderlyingType(), 3u);
+ STATIC_ASSERT_EQ(
+ (ProportionValue::FromUnderlyingType(5u) / 2u).ToUnderlyingType(), 2u);
+ STATIC_ASSERT_EQ(
+ (ProportionValue::FromUnderlyingType(1u) / 2u).ToUnderlyingType(), 0u);
+ STATIC_ASSERT_EQ(
+ (ProportionValue::FromUnderlyingType(0u) / 2u).ToUnderlyingType(), 0u);
+ STATIC_ASSERT((100_pc / 0u).IsInvalid());
+ STATIC_ASSERT((ProportionValue::MakeInvalid() / 2u).IsInvalid());
+
+ // Multiplication by a positive integer value.
+ STATIC_ASSERT_EQ((100_pc * 1u).ToDouble(), 1.0);
+ STATIC_ASSERT_EQ((50_pc * 1u).ToDouble(), 0.5);
+ STATIC_ASSERT_EQ((50_pc * 2u).ToDouble(), 1.0);
+ STATIC_ASSERT_EQ((50_pc * 3u).ToDouble(), 1.0); // Clamped.
+ STATIC_ASSERT_EQ(
+ (ProportionValue::FromUnderlyingType(1u) * 2u).ToUnderlyingType(), 2u);
+ STATIC_ASSERT((ProportionValue::MakeInvalid() * 2u).IsInvalid());
+
+ // Verifying PV - u < (PV / u) * u <= PV, with n=3, PV between 6 and 9 :
+ STATIC_ASSERT_EQ(
+ (ProportionValue::FromUnderlyingType(6u) / 3u).ToUnderlyingType(), 2u);
+ STATIC_ASSERT_EQ(
+ (ProportionValue::FromUnderlyingType(7u) / 3u).ToUnderlyingType(), 2u);
+ STATIC_ASSERT_EQ(
+ (ProportionValue::FromUnderlyingType(8u) / 3u).ToUnderlyingType(), 2u);
+ STATIC_ASSERT_EQ(
+ (ProportionValue::FromUnderlyingType(9u) / 3u).ToUnderlyingType(), 3u);
+
+ // Direct comparisons.
+ STATIC_ASSERT_EQ(0_pc, 0_pc);
+ STATIC_ASSERT(0_pc == 0_pc);
+ STATIC_ASSERT(!(0_pc == 100_pc));
+ STATIC_ASSERT(0_pc != 100_pc);
+ STATIC_ASSERT(!(0_pc != 0_pc));
+ STATIC_ASSERT(0_pc < 100_pc);
+ STATIC_ASSERT(!(0_pc < 0_pc));
+ STATIC_ASSERT(0_pc <= 0_pc);
+ STATIC_ASSERT(0_pc <= 100_pc);
+ STATIC_ASSERT(!(100_pc <= 0_pc));
+ STATIC_ASSERT(100_pc > 0_pc);
+ STATIC_ASSERT(!(100_pc > 100_pc));
+ STATIC_ASSERT(100_pc >= 0_pc);
+ STATIC_ASSERT(100_pc >= 100_pc);
+ STATIC_ASSERT(!(0_pc >= 100_pc));
+ // 0.5 is binary-friendly, so we can double it and compare it exactly.
+ STATIC_ASSERT_EQ(50_pc + 50_pc, 100_pc);
+
+#undef STATIC_ASSERT_EQ
+
+ printf("TestProportionValue done\n");
+}
+
+template <typename Arg0, typename... Args>
+bool AreAllEqual(Arg0&& aArg0, Args&&... aArgs) {
+ return ((aArg0 == aArgs) && ...);
+}
+
+void TestProgressLogger() {
+ printf("TestProgressLogger...\n");
+
+ using mozilla::ProgressLogger;
+ using mozilla::ProportionValue;
+ using namespace mozilla::literals::ProportionValue_literals;
+
+ auto progressRefPtr = mozilla::MakeRefPtr<ProgressLogger::SharedProgress>();
+ MOZ_RELEASE_ASSERT(progressRefPtr);
+ MOZ_RELEASE_ASSERT(progressRefPtr->Progress().IsExactlyZero());
+
+ {
+ ProgressLogger pl(progressRefPtr, "Started", "All done");
+ MOZ_RELEASE_ASSERT(progressRefPtr->Progress().IsExactlyZero());
+ MOZ_RELEASE_ASSERT(pl.GetGlobalProgress().IsExactlyZero());
+ MOZ_RELEASE_ASSERT(AreAllEqual(progressRefPtr->LastLocation(),
+ pl.GetLastGlobalLocation(), "Started"));
+
+ // At this top level, the scale is 1:1.
+ pl.SetLocalProgress(10_pc, "Top 10%");
+ MOZ_RELEASE_ASSERT(
+ AreAllEqual(progressRefPtr->Progress(), pl.GetGlobalProgress(), 10_pc));
+ MOZ_RELEASE_ASSERT(AreAllEqual(progressRefPtr->LastLocation(),
+ pl.GetLastGlobalLocation(), "Top 10%"));
+
+ pl.SetLocalProgress(0_pc, "Restarted");
+ MOZ_RELEASE_ASSERT(
+ AreAllEqual(progressRefPtr->Progress(), pl.GetGlobalProgress(), 0_pc));
+ MOZ_RELEASE_ASSERT(AreAllEqual(progressRefPtr->LastLocation(),
+ pl.GetLastGlobalLocation(), "Restarted"));
+
+ {
+ // Create a sub-logger for the whole global range. Notice that this is
+ // moving the current progress back to 0.
+ ProgressLogger plSub1 =
+ pl.CreateSubLoggerFromTo(0_pc, "Sub1 started", 100_pc, "Sub1 ended");
+ MOZ_RELEASE_ASSERT(progressRefPtr->Progress().IsExactlyZero());
+ MOZ_RELEASE_ASSERT(pl.GetGlobalProgress().IsExactlyZero());
+ MOZ_RELEASE_ASSERT(plSub1.GetGlobalProgress().IsExactlyZero());
+ MOZ_RELEASE_ASSERT(AreAllEqual(
+ progressRefPtr->LastLocation(), pl.GetLastGlobalLocation(),
+ plSub1.GetLastGlobalLocation(), "Sub1 started"));
+
+ // At this level, the scale is still 1:1.
+ plSub1.SetLocalProgress(10_pc, "Sub1 10%");
+ MOZ_RELEASE_ASSERT(AreAllEqual(progressRefPtr->Progress(),
+ pl.GetGlobalProgress(),
+ plSub1.GetGlobalProgress(), 10_pc));
+ MOZ_RELEASE_ASSERT(AreAllEqual(
+ progressRefPtr->LastLocation(), pl.GetLastGlobalLocation(),
+ plSub1.GetLastGlobalLocation(), "Sub1 10%"));
+
+ {
+ // Create a sub-logger half the global range.
+ // 0 0.25 0.375 0.5 0.625 0.75 1
+ // |---------------|-------|-------|-------|-------|---------------|
+ // plSub2: 0 0.25 0.5 0.75 1
+ ProgressLogger plSub2 = plSub1.CreateSubLoggerFromTo(
+ 25_pc, "Sub2 started", 75_pc, "Sub2 ended");
+ MOZ_RELEASE_ASSERT(AreAllEqual(
+ progressRefPtr->Progress(), pl.GetGlobalProgress(),
+ plSub1.GetGlobalProgress(), plSub2.GetGlobalProgress(), 25_pc));
+ MOZ_RELEASE_ASSERT(AreAllEqual(
+ progressRefPtr->LastLocation(), pl.GetLastGlobalLocation(),
+ plSub1.GetLastGlobalLocation(), plSub2.GetLastGlobalLocation(),
+ "Sub2 started"));
+
+ plSub2.SetLocalProgress(25_pc, "Sub2 25%");
+ MOZ_RELEASE_ASSERT(AreAllEqual(
+ progressRefPtr->Progress(), pl.GetGlobalProgress(),
+ plSub1.GetGlobalProgress(), plSub2.GetGlobalProgress(), 37.5_pc));
+ MOZ_RELEASE_ASSERT(AreAllEqual(
+ progressRefPtr->LastLocation(), pl.GetLastGlobalLocation(),
+ plSub1.GetLastGlobalLocation(), plSub2.GetLastGlobalLocation(),
+ "Sub2 25%"));
+
+ plSub2.SetLocalProgress(50_pc, "Sub2 50%");
+ MOZ_RELEASE_ASSERT(AreAllEqual(
+ progressRefPtr->Progress(), pl.GetGlobalProgress(),
+ plSub1.GetGlobalProgress(), plSub2.GetGlobalProgress(), 50_pc));
+ MOZ_RELEASE_ASSERT(AreAllEqual(
+ progressRefPtr->LastLocation(), pl.GetLastGlobalLocation(),
+ plSub1.GetLastGlobalLocation(), plSub2.GetLastGlobalLocation(),
+ "Sub2 50%"));
+
+ {
+ // Create a sub-logger half the parent range.
+ // 0 0.25 0.375 0.5 0.625 0.75 1
+ // |---------------|-------|-------|-------|-------|---------------|
+ // plSub2: 0 0.25 0.5 0.75 1
+ // plSub3: 0 0.5 1
+ ProgressLogger plSub3 = plSub2.CreateSubLoggerTo(
+ "Sub3 started", 100_pc, ProgressLogger::NO_LOCATION_UPDATE);
+ MOZ_RELEASE_ASSERT(AreAllEqual(
+ progressRefPtr->Progress(), pl.GetGlobalProgress(),
+ plSub1.GetGlobalProgress(), plSub2.GetGlobalProgress(),
+ plSub3.GetGlobalProgress(), 50_pc));
+ MOZ_RELEASE_ASSERT(AreAllEqual(
+ progressRefPtr->LastLocation(), pl.GetLastGlobalLocation(),
+ plSub1.GetLastGlobalLocation(), plSub2.GetLastGlobalLocation(),
+ plSub3.GetLastGlobalLocation(), "Sub3 started"));
+
+ plSub3.SetLocalProgress(50_pc, "Sub3 50%");
+ MOZ_RELEASE_ASSERT(AreAllEqual(
+ progressRefPtr->Progress(), pl.GetGlobalProgress(),
+ plSub1.GetGlobalProgress(), plSub2.GetGlobalProgress(),
+ plSub3.GetGlobalProgress(), 62.5_pc));
+ MOZ_RELEASE_ASSERT(AreAllEqual(
+ progressRefPtr->LastLocation(), pl.GetLastGlobalLocation(),
+ plSub1.GetLastGlobalLocation(), plSub2.GetLastGlobalLocation(),
+ plSub3.GetLastGlobalLocation(), "Sub3 50%"));
+ } // End of plSub3
+
+ // When plSub3 ends, progress moves to its 100%, which is also plSub2's
+ // 100%, which is plSub1's and the global progress of 75%
+ MOZ_RELEASE_ASSERT(AreAllEqual(
+ progressRefPtr->Progress(), pl.GetGlobalProgress(),
+ plSub1.GetGlobalProgress(), plSub2.GetGlobalProgress(), 75_pc));
+ // But location is still at the last explicit update.
+ MOZ_RELEASE_ASSERT(AreAllEqual(
+ progressRefPtr->LastLocation(), pl.GetLastGlobalLocation(),
+ plSub1.GetLastGlobalLocation(), plSub2.GetLastGlobalLocation(),
+ "Sub3 50%"));
+ } // End of plSub2
+
+ MOZ_RELEASE_ASSERT(AreAllEqual(progressRefPtr->Progress(),
+ pl.GetGlobalProgress(),
+ plSub1.GetGlobalProgress(), 75_pc));
+ MOZ_RELEASE_ASSERT(AreAllEqual(
+ progressRefPtr->LastLocation(), pl.GetLastGlobalLocation(),
+ plSub1.GetLastGlobalLocation(), "Sub2 ended"));
+ } // End of plSub1
+
+ MOZ_RELEASE_ASSERT(progressRefPtr->Progress().IsExactlyOne());
+ MOZ_RELEASE_ASSERT(pl.GetGlobalProgress().IsExactlyOne());
+ MOZ_RELEASE_ASSERT(AreAllEqual(progressRefPtr->LastLocation(),
+ pl.GetLastGlobalLocation(), "Sub1 ended"));
+
+ const auto loopStart = 75_pc;
+ const auto loopEnd = 87.5_pc;
+ const uint32_t loopCount = 8;
+ uint32_t expectedIndex = 0u;
+ auto expectedIterationStart = loopStart;
+ const auto iterationIncrement = (loopEnd - loopStart) / loopCount;
+ for (auto&& [index, loopPL] : pl.CreateLoopSubLoggersFromTo(
+ loopStart, loopEnd, loopCount, "looping...")) {
+ MOZ_RELEASE_ASSERT(index == expectedIndex);
+ ++expectedIndex;
+ MOZ_RELEASE_ASSERT(
+ AreAllEqual(progressRefPtr->Progress(), pl.GetGlobalProgress(),
+ loopPL.GetGlobalProgress(), expectedIterationStart));
+ MOZ_RELEASE_ASSERT(AreAllEqual(
+ progressRefPtr->LastLocation(), pl.GetLastGlobalLocation(),
+ loopPL.GetLastGlobalLocation(), "looping..."));
+
+ loopPL.SetLocalProgress(50_pc, "half");
+ MOZ_RELEASE_ASSERT(loopPL.GetGlobalProgress() ==
+ expectedIterationStart + iterationIncrement / 2u);
+ MOZ_RELEASE_ASSERT(
+ AreAllEqual(progressRefPtr->Progress(), pl.GetGlobalProgress(),
+ loopPL.GetGlobalProgress(),
+ expectedIterationStart + iterationIncrement / 2u));
+ MOZ_RELEASE_ASSERT(AreAllEqual(progressRefPtr->LastLocation(),
+ pl.GetLastGlobalLocation(),
+ loopPL.GetLastGlobalLocation(), "half"));
+
+ expectedIterationStart = expectedIterationStart + iterationIncrement;
+ }
+ MOZ_RELEASE_ASSERT(AreAllEqual(progressRefPtr->Progress(),
+ pl.GetGlobalProgress(),
+ expectedIterationStart));
+ MOZ_RELEASE_ASSERT(AreAllEqual(progressRefPtr->LastLocation(),
+ pl.GetLastGlobalLocation(), "looping..."));
+ } // End of pl
+ MOZ_RELEASE_ASSERT(progressRefPtr->Progress().IsExactlyOne());
+ MOZ_RELEASE_ASSERT(AreAllEqual(progressRefPtr->LastLocation(), "All done"));
+
+ printf("TestProgressLogger done\n");
+}
+
+#ifdef MOZ_GECKO_PROFILER
+
+MOZ_MAYBE_UNUSED static void SleepMilli(unsigned aMilliseconds) {
+# if defined(_MSC_VER) || defined(__MINGW32__)
+ Sleep(aMilliseconds);
+# else
+ struct timespec ts = {/* .tv_sec */ static_cast<time_t>(aMilliseconds / 1000),
+ /* ts.tv_nsec */ long(aMilliseconds % 1000) * 1000000};
+ struct timespec tr = {0, 0};
+ while (nanosleep(&ts, &tr)) {
+ if (errno == EINTR) {
+ ts = tr;
+ } else {
+ printf("nanosleep() -> %s\n", strerror(errno));
+ exit(1);
+ }
+ }
+# endif
+}
+
+MOZ_MAYBE_UNUSED static void WaitUntilTimeStampChanges(
+ const mozilla::TimeStamp& aTimeStampToCompare = mozilla::TimeStamp::Now()) {
+ while (aTimeStampToCompare == mozilla::TimeStamp::Now()) {
+ SleepMilli(1);
+ }
+}
+
+using namespace mozilla;
+
+void TestPowerOfTwoMask() {
+ printf("TestPowerOfTwoMask...\n");
+
+ static_assert(MakePowerOfTwoMask<uint32_t, 0>().MaskValue() == 0);
+ constexpr PowerOfTwoMask<uint32_t> c0 = MakePowerOfTwoMask<uint32_t, 0>();
+ MOZ_RELEASE_ASSERT(c0.MaskValue() == 0);
+
+ static_assert(MakePowerOfTwoMask<uint32_t, 0xFFu>().MaskValue() == 0xFFu);
+ constexpr PowerOfTwoMask<uint32_t> cFF =
+ MakePowerOfTwoMask<uint32_t, 0xFFu>();
+ MOZ_RELEASE_ASSERT(cFF.MaskValue() == 0xFFu);
+
+ static_assert(MakePowerOfTwoMask<uint32_t, 0xFFFFFFFFu>().MaskValue() ==
+ 0xFFFFFFFFu);
+ constexpr PowerOfTwoMask<uint32_t> cFFFFFFFF =
+ MakePowerOfTwoMask<uint32_t, 0xFFFFFFFFu>();
+ MOZ_RELEASE_ASSERT(cFFFFFFFF.MaskValue() == 0xFFFFFFFFu);
+
+ struct TestDataU32 {
+ uint32_t mInput;
+ uint32_t mMask;
+ };
+ // clang-format off
+ TestDataU32 tests[] = {
+ { 0, 0 },
+ { 1, 1 },
+ { 2, 3 },
+ { 3, 3 },
+ { 4, 7 },
+ { 5, 7 },
+ { (1u << 31) - 1, (1u << 31) - 1 },
+ { (1u << 31), uint32_t(-1) },
+ { (1u << 31) + 1, uint32_t(-1) },
+ { uint32_t(-1), uint32_t(-1) }
+ };
+ // clang-format on
+ for (const TestDataU32& test : tests) {
+ PowerOfTwoMask<uint32_t> p2m(test.mInput);
+ MOZ_RELEASE_ASSERT(p2m.MaskValue() == test.mMask);
+ for (const TestDataU32& inner : tests) {
+ if (p2m.MaskValue() != uint32_t(-1)) {
+ MOZ_RELEASE_ASSERT((inner.mInput % p2m) ==
+ (inner.mInput % (p2m.MaskValue() + 1)));
+ }
+ MOZ_RELEASE_ASSERT((inner.mInput & p2m) == (inner.mInput % p2m));
+ MOZ_RELEASE_ASSERT((p2m & inner.mInput) == (inner.mInput & p2m));
+ }
+ }
+
+ printf("TestPowerOfTwoMask done\n");
+}
+
+void TestPowerOfTwo() {
+ printf("TestPowerOfTwo...\n");
+
+ static_assert(MakePowerOfTwo<uint32_t, 1>().Value() == 1);
+ constexpr PowerOfTwo<uint32_t> c1 = MakePowerOfTwo<uint32_t, 1>();
+ MOZ_RELEASE_ASSERT(c1.Value() == 1);
+ static_assert(MakePowerOfTwo<uint32_t, 1>().Mask().MaskValue() == 0);
+
+ static_assert(MakePowerOfTwo<uint32_t, 128>().Value() == 128);
+ constexpr PowerOfTwo<uint32_t> c128 = MakePowerOfTwo<uint32_t, 128>();
+ MOZ_RELEASE_ASSERT(c128.Value() == 128);
+ static_assert(MakePowerOfTwo<uint32_t, 128>().Mask().MaskValue() == 127);
+
+ static_assert(MakePowerOfTwo<uint32_t, 0x80000000u>().Value() == 0x80000000u);
+ constexpr PowerOfTwo<uint32_t> cMax = MakePowerOfTwo<uint32_t, 0x80000000u>();
+ MOZ_RELEASE_ASSERT(cMax.Value() == 0x80000000u);
+ static_assert(MakePowerOfTwo<uint32_t, 0x80000000u>().Mask().MaskValue() ==
+ 0x7FFFFFFFu);
+
+ struct TestDataU32 {
+ uint32_t mInput;
+ uint32_t mValue;
+ uint32_t mMask;
+ };
+ // clang-format off
+ TestDataU32 tests[] = {
+ { 0, 1, 0 },
+ { 1, 1, 0 },
+ { 2, 2, 1 },
+ { 3, 4, 3 },
+ { 4, 4, 3 },
+ { 5, 8, 7 },
+ { (1u << 31) - 1, (1u << 31), (1u << 31) - 1 },
+ { (1u << 31), (1u << 31), (1u << 31) - 1 },
+ { (1u << 31) + 1, (1u << 31), (1u << 31) - 1 },
+ { uint32_t(-1), (1u << 31), (1u << 31) - 1 }
+ };
+ // clang-format on
+ for (const TestDataU32& test : tests) {
+ PowerOfTwo<uint32_t> p2(test.mInput);
+ MOZ_RELEASE_ASSERT(p2.Value() == test.mValue);
+ MOZ_RELEASE_ASSERT(p2.MaskValue() == test.mMask);
+ PowerOfTwoMask<uint32_t> p2m = p2.Mask();
+ MOZ_RELEASE_ASSERT(p2m.MaskValue() == test.mMask);
+ for (const TestDataU32& inner : tests) {
+ MOZ_RELEASE_ASSERT((inner.mInput % p2) == (inner.mInput % p2.Value()));
+ }
+ }
+
+ printf("TestPowerOfTwo done\n");
+}
+
+void TestLEB128() {
+ printf("TestLEB128...\n");
+
+ MOZ_RELEASE_ASSERT(ULEB128MaxSize<uint8_t>() == 2);
+ MOZ_RELEASE_ASSERT(ULEB128MaxSize<uint16_t>() == 3);
+ MOZ_RELEASE_ASSERT(ULEB128MaxSize<uint32_t>() == 5);
+ MOZ_RELEASE_ASSERT(ULEB128MaxSize<uint64_t>() == 10);
+
+ struct TestDataU64 {
+ uint64_t mValue;
+ unsigned mSize;
+ const char* mBytes;
+ };
+ // clang-format off
+ TestDataU64 tests[] = {
+ // Small numbers should keep their normal byte representation.
+ { 0u, 1, "\0" },
+ { 1u, 1, "\x01" },
+
+ // 0111 1111 (127, or 0x7F) is the highest number that fits into a single
+ // LEB128 byte. It gets encoded as 0111 1111, note the most significant bit
+ // is off.
+ { 0x7Fu, 1, "\x7F" },
+
+ // Next number: 128, or 0x80.
+ // Original data representation: 1000 0000
+ // Broken up into groups of 7: 1 0000000
+ // Padded with 0 (msB) or 1 (lsB): 00000001 10000000
+ // Byte representation: 0x01 0x80
+ // Little endian order: -> 0x80 0x01
+ { 0x80u, 2, "\x80\x01" },
+
+ // Next: 129, or 0x81 (showing that we don't lose low bits.)
+ // Original data representation: 1000 0001
+ // Broken up into groups of 7: 1 0000001
+ // Padded with 0 (msB) or 1 (lsB): 00000001 10000001
+ // Byte representation: 0x01 0x81
+ // Little endian order: -> 0x81 0x01
+ { 0x81u, 2, "\x81\x01" },
+
+ // Highest 8-bit number: 255, or 0xFF.
+ // Original data representation: 1111 1111
+ // Broken up into groups of 7: 1 1111111
+ // Padded with 0 (msB) or 1 (lsB): 00000001 11111111
+ // Byte representation: 0x01 0xFF
+ // Little endian order: -> 0xFF 0x01
+ { 0xFFu, 2, "\xFF\x01" },
+
+ // Next: 256, or 0x100.
+ // Original data representation: 1 0000 0000
+ // Broken up into groups of 7: 10 0000000
+ // Padded with 0 (msB) or 1 (lsB): 00000010 10000000
+ // Byte representation: 0x10 0x80
+ // Little endian order: -> 0x80 0x02
+ { 0x100u, 2, "\x80\x02" },
+
+ // Highest 32-bit number: 0xFFFFFFFF (8 bytes, all bits set).
+ // Original: 1111 1111 1111 1111 1111 1111 1111 1111
+ // Groups: 1111 1111111 1111111 1111111 1111111
+ // Padded: 00001111 11111111 11111111 11111111 11111111
+ // Bytes: 0x0F 0xFF 0xFF 0xFF 0xFF
+ // Little Endian: -> 0xFF 0xFF 0xFF 0xFF 0x0F
+ { 0xFFFFFFFFu, 5, "\xFF\xFF\xFF\xFF\x0F" },
+
+ // Highest 64-bit number: 0xFFFFFFFFFFFFFFFF (16 bytes, all bits set).
+ // 64 bits, that's 9 groups of 7 bits, plus 1 (most significant) bit.
+ { 0xFFFFFFFFFFFFFFFFu, 10, "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x01" }
+ };
+ // clang-format on
+
+ for (const TestDataU64& test : tests) {
+ MOZ_RELEASE_ASSERT(ULEB128Size(test.mValue) == test.mSize);
+ // Prepare a buffer that can accomodate the largest-possible LEB128.
+ uint8_t buffer[ULEB128MaxSize<uint64_t>()];
+ // Use a pointer into the buffer as iterator.
+ uint8_t* p = buffer;
+ // And write the LEB128.
+ WriteULEB128(test.mValue, p);
+ // Pointer (iterator) should have advanced just past the expected LEB128
+ // size.
+ MOZ_RELEASE_ASSERT(p == buffer + test.mSize);
+ // Check expected bytes.
+ for (unsigned i = 0; i < test.mSize; ++i) {
+ MOZ_RELEASE_ASSERT(buffer[i] == uint8_t(test.mBytes[i]));
+ }
+
+ // Move pointer (iterator) back to start of buffer.
+ p = buffer;
+ // And read the LEB128 we wrote above.
+ uint64_t read = ReadULEB128<uint64_t>(p);
+ // Pointer (iterator) should have also advanced just past the expected
+ // LEB128 size.
+ MOZ_RELEASE_ASSERT(p == buffer + test.mSize);
+ // And check the read value.
+ MOZ_RELEASE_ASSERT(read == test.mValue);
+
+ // Testing ULEB128 reader.
+ ULEB128Reader<uint64_t> reader;
+ MOZ_RELEASE_ASSERT(!reader.IsComplete());
+ // Move pointer back to start of buffer.
+ p = buffer;
+ for (;;) {
+ // Read a byte and feed it to the reader.
+ if (reader.FeedByteIsComplete(*p++)) {
+ break;
+ }
+ // Not complete yet, we shouldn't have reached the end pointer.
+ MOZ_RELEASE_ASSERT(!reader.IsComplete());
+ MOZ_RELEASE_ASSERT(p < buffer + test.mSize);
+ }
+ MOZ_RELEASE_ASSERT(reader.IsComplete());
+ // Pointer should have advanced just past the expected LEB128 size.
+ MOZ_RELEASE_ASSERT(p == buffer + test.mSize);
+ // And check the read value.
+ MOZ_RELEASE_ASSERT(reader.Value() == test.mValue);
+
+ // And again after a Reset.
+ reader.Reset();
+ MOZ_RELEASE_ASSERT(!reader.IsComplete());
+ p = buffer;
+ for (;;) {
+ if (reader.FeedByteIsComplete(*p++)) {
+ break;
+ }
+ MOZ_RELEASE_ASSERT(!reader.IsComplete());
+ MOZ_RELEASE_ASSERT(p < buffer + test.mSize);
+ }
+ MOZ_RELEASE_ASSERT(reader.IsComplete());
+ MOZ_RELEASE_ASSERT(p == buffer + test.mSize);
+ MOZ_RELEASE_ASSERT(reader.Value() == test.mValue);
+ }
+
+ printf("TestLEB128 done\n");
+}
+
+struct StringWriteFunc final : public JSONWriteFunc {
+ std::string mString;
+
+ void Write(const mozilla::Span<const char>& aStr) final {
+ mString.append(aStr.data(), aStr.size());
+ }
+};
+
+void CheckJSON(mozilla::baseprofiler::SpliceableJSONWriter& aWriter,
+ const char* aExpected, int aLine) {
+ const std::string& actual =
+ static_cast<StringWriteFunc&>(aWriter.WriteFunc()).mString;
+ if (strcmp(aExpected, actual.c_str()) != 0) {
+ fprintf(stderr,
+ "---- EXPECTED ---- (line %d)\n<<<%s>>>\n"
+ "---- ACTUAL ----\n<<<%s>>>\n",
+ aLine, aExpected, actual.c_str());
+ MOZ_RELEASE_ASSERT(false, "expected and actual output don't match");
+ }
+}
+
+void TestJSONTimeOutput() {
+ printf("TestJSONTimeOutput...\n");
+
+# define TEST(in, out) \
+ do { \
+ mozilla::baseprofiler::SpliceableJSONWriter writer( \
+ mozilla::MakeUnique<StringWriteFunc>(), \
+ FailureLatchInfallibleSource::Singleton()); \
+ writer.Start(); \
+ writer.TimeDoubleMsProperty("time_ms", (in)); \
+ writer.End(); \
+ CheckJSON(writer, "{\"time_ms\":" out "}", __LINE__); \
+ } while (false);
+
+ TEST(0, "0");
+
+ TEST(0.000'000'1, "0");
+ TEST(0.000'000'4, "0");
+ TEST(0.000'000'499, "0");
+ TEST(0.000'000'5, "0.000001");
+ TEST(0.000'001, "0.000001");
+ TEST(0.000'01, "0.00001");
+ TEST(0.000'1, "0.0001");
+ TEST(0.001, "0.001");
+ TEST(0.01, "0.01");
+ TEST(0.1, "0.1");
+ TEST(1, "1");
+ TEST(2, "2");
+ TEST(10, "10");
+ TEST(100, "100");
+ TEST(1'000, "1000");
+ TEST(10'000, "10000");
+ TEST(100'000, "100000");
+ TEST(1'000'000, "1000000");
+ // 2^53-2 ns in ms. 2^53-1 is the highest integer value representable in
+ // double, -1 again because we're adding 0.5 before truncating.
+ // That's 104 days, after which the nanosecond precision would decrease.
+ TEST(9'007'199'254.740'990, "9007199254.74099");
+
+ TEST(-0.000'000'1, "0");
+ TEST(-0.000'000'4, "0");
+ TEST(-0.000'000'499, "0");
+ TEST(-0.000'000'5, "-0.000001");
+ TEST(-0.000'001, "-0.000001");
+ TEST(-0.000'01, "-0.00001");
+ TEST(-0.000'1, "-0.0001");
+ TEST(-0.001, "-0.001");
+ TEST(-0.01, "-0.01");
+ TEST(-0.1, "-0.1");
+ TEST(-1, "-1");
+ TEST(-2, "-2");
+ TEST(-10, "-10");
+ TEST(-100, "-100");
+ TEST(-1'000, "-1000");
+ TEST(-10'000, "-10000");
+ TEST(-100'000, "-100000");
+ TEST(-1'000'000, "-1000000");
+ TEST(-9'007'199'254.740'990, "-9007199254.74099");
+
+# undef TEST
+
+ printf("TestJSONTimeOutput done\n");
+}
+
+template <uint8_t byte, uint8_t... tail>
+constexpr bool TestConstexprULEB128Reader(ULEB128Reader<uint64_t>& aReader) {
+ if (aReader.IsComplete()) {
+ return false;
+ }
+ const bool isComplete = aReader.FeedByteIsComplete(byte);
+ if (aReader.IsComplete() != isComplete) {
+ return false;
+ }
+ if constexpr (sizeof...(tail) == 0) {
+ return isComplete;
+ } else {
+ if (isComplete) {
+ return false;
+ }
+ return TestConstexprULEB128Reader<tail...>(aReader);
+ }
+}
+
+template <uint64_t expected, uint8_t... bytes>
+constexpr bool TestConstexprULEB128Reader() {
+ ULEB128Reader<uint64_t> reader;
+ if (!TestConstexprULEB128Reader<bytes...>(reader)) {
+ return false;
+ }
+ if (!reader.IsComplete()) {
+ return false;
+ }
+ if (reader.Value() != expected) {
+ return false;
+ }
+
+ reader.Reset();
+ if (!TestConstexprULEB128Reader<bytes...>(reader)) {
+ return false;
+ }
+ if (!reader.IsComplete()) {
+ return false;
+ }
+ if (reader.Value() != expected) {
+ return false;
+ }
+
+ return true;
+}
+
+static_assert(TestConstexprULEB128Reader<0x0u, 0x0u>());
+static_assert(!TestConstexprULEB128Reader<0x0u, 0x0u, 0x0u>());
+static_assert(TestConstexprULEB128Reader<0x1u, 0x1u>());
+static_assert(TestConstexprULEB128Reader<0x7Fu, 0x7Fu>());
+static_assert(TestConstexprULEB128Reader<0x80u, 0x80u, 0x01u>());
+static_assert(!TestConstexprULEB128Reader<0x80u, 0x80u>());
+static_assert(!TestConstexprULEB128Reader<0x80u, 0x01u>());
+static_assert(TestConstexprULEB128Reader<0x81u, 0x81u, 0x01u>());
+static_assert(TestConstexprULEB128Reader<0xFFu, 0xFFu, 0x01u>());
+static_assert(TestConstexprULEB128Reader<0x100u, 0x80u, 0x02u>());
+static_assert(TestConstexprULEB128Reader<0xFFFFFFFFu, 0xFFu, 0xFFu, 0xFFu,
+ 0xFFu, 0x0Fu>());
+static_assert(
+ !TestConstexprULEB128Reader<0xFFFFFFFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu>());
+static_assert(!TestConstexprULEB128Reader<0xFFFFFFFFu, 0xFFu, 0xFFu, 0xFFu,
+ 0xFFu, 0xFFu, 0x0Fu>());
+static_assert(
+ TestConstexprULEB128Reader<0xFFFFFFFFFFFFFFFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu,
+ 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0x01u>());
+static_assert(
+ !TestConstexprULEB128Reader<0xFFFFFFFFFFFFFFFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu,
+ 0xFFu, 0xFFu, 0xFFu, 0xFFu, 0xFFu>());
+
+static void TestChunk() {
+ printf("TestChunk...\n");
+
+ static_assert(!std::is_default_constructible_v<ProfileBufferChunk>,
+ "ProfileBufferChunk should not be default-constructible");
+ static_assert(
+ !std::is_constructible_v<ProfileBufferChunk, ProfileBufferChunk::Length>,
+ "ProfileBufferChunk should not be constructible from Length");
+
+ static_assert(
+ sizeof(ProfileBufferChunk::Header) ==
+ sizeof(ProfileBufferChunk::Header::mOffsetFirstBlock) +
+ sizeof(ProfileBufferChunk::Header::mOffsetPastLastBlock) +
+ sizeof(ProfileBufferChunk::Header::mStartTimeStamp) +
+ sizeof(ProfileBufferChunk::Header::mDoneTimeStamp) +
+ sizeof(ProfileBufferChunk::Header::mBufferBytes) +
+ sizeof(ProfileBufferChunk::Header::mBlockCount) +
+ sizeof(ProfileBufferChunk::Header::mRangeStart) +
+ sizeof(ProfileBufferChunk::Header::mProcessId) +
+ sizeof(ProfileBufferChunk::Header::mPADDING),
+ "ProfileBufferChunk::Header may have unwanted padding, please review");
+ // Note: The above static_assert is an attempt at keeping
+ // ProfileBufferChunk::Header tightly packed, but some changes could make this
+ // impossible to achieve (most probably due to alignment) -- Just do your
+ // best!
+
+ constexpr ProfileBufferChunk::Length TestLen = 1000;
+
+ // Basic allocations of different sizes.
+ for (ProfileBufferChunk::Length len = 0; len <= TestLen; ++len) {
+ auto chunk = ProfileBufferChunk::Create(len);
+ static_assert(
+ std::is_same_v<decltype(chunk), UniquePtr<ProfileBufferChunk>>,
+ "ProfileBufferChunk::Create() should return a "
+ "UniquePtr<ProfileBufferChunk>");
+ MOZ_RELEASE_ASSERT(!!chunk, "OOM!?");
+ MOZ_RELEASE_ASSERT(chunk->BufferBytes() >= len);
+ MOZ_RELEASE_ASSERT(chunk->ChunkBytes() >=
+ len + ProfileBufferChunk::SizeofChunkMetadata());
+ MOZ_RELEASE_ASSERT(chunk->RemainingBytes() == chunk->BufferBytes());
+ MOZ_RELEASE_ASSERT(chunk->OffsetFirstBlock() == 0);
+ MOZ_RELEASE_ASSERT(chunk->OffsetPastLastBlock() == 0);
+ MOZ_RELEASE_ASSERT(chunk->BlockCount() == 0);
+ MOZ_RELEASE_ASSERT(chunk->ProcessId() == 0);
+ MOZ_RELEASE_ASSERT(chunk->RangeStart() == 0);
+ MOZ_RELEASE_ASSERT(chunk->BufferSpan().LengthBytes() ==
+ chunk->BufferBytes());
+ MOZ_RELEASE_ASSERT(!chunk->GetNext());
+ MOZ_RELEASE_ASSERT(!chunk->ReleaseNext());
+ MOZ_RELEASE_ASSERT(chunk->Last() == chunk.get());
+ }
+
+ // Allocate the main test Chunk.
+ auto chunkA = ProfileBufferChunk::Create(TestLen);
+ MOZ_RELEASE_ASSERT(!!chunkA, "OOM!?");
+ MOZ_RELEASE_ASSERT(chunkA->BufferBytes() >= TestLen);
+ MOZ_RELEASE_ASSERT(chunkA->ChunkBytes() >=
+ TestLen + ProfileBufferChunk::SizeofChunkMetadata());
+ MOZ_RELEASE_ASSERT(!chunkA->GetNext());
+ MOZ_RELEASE_ASSERT(!chunkA->ReleaseNext());
+
+ constexpr ProfileBufferIndex chunkARangeStart = 12345;
+ chunkA->SetRangeStart(chunkARangeStart);
+ MOZ_RELEASE_ASSERT(chunkA->RangeStart() == chunkARangeStart);
+
+ // Get a read-only span over its buffer.
+ auto bufferA = chunkA->BufferSpan();
+ static_assert(
+ std::is_same_v<decltype(bufferA), Span<const ProfileBufferChunk::Byte>>,
+ "BufferSpan() should return a Span<const Byte>");
+ MOZ_RELEASE_ASSERT(bufferA.LengthBytes() == chunkA->BufferBytes());
+
+ // Add the initial tail block.
+ constexpr ProfileBufferChunk::Length initTailLen = 10;
+ auto initTail = chunkA->ReserveInitialBlockAsTail(initTailLen);
+ static_assert(
+ std::is_same_v<decltype(initTail), Span<ProfileBufferChunk::Byte>>,
+ "ReserveInitialBlockAsTail() should return a Span<Byte>");
+ MOZ_RELEASE_ASSERT(initTail.LengthBytes() == initTailLen);
+ MOZ_RELEASE_ASSERT(initTail.Elements() == bufferA.Elements());
+ MOZ_RELEASE_ASSERT(chunkA->OffsetFirstBlock() == initTailLen);
+ MOZ_RELEASE_ASSERT(chunkA->OffsetPastLastBlock() == initTailLen);
+
+ // Add the first complete block.
+ constexpr ProfileBufferChunk::Length block1Len = 20;
+ auto block1 = chunkA->ReserveBlock(block1Len);
+ static_assert(
+ std::is_same_v<decltype(block1), ProfileBufferChunk::ReserveReturn>,
+ "ReserveBlock() should return a ReserveReturn");
+ MOZ_RELEASE_ASSERT(block1.mBlockRangeIndex.ConvertToProfileBufferIndex() ==
+ chunkARangeStart + initTailLen);
+ MOZ_RELEASE_ASSERT(block1.mSpan.LengthBytes() == block1Len);
+ MOZ_RELEASE_ASSERT(block1.mSpan.Elements() ==
+ bufferA.Elements() + initTailLen);
+ MOZ_RELEASE_ASSERT(chunkA->OffsetFirstBlock() == initTailLen);
+ MOZ_RELEASE_ASSERT(chunkA->OffsetPastLastBlock() == initTailLen + block1Len);
+ MOZ_RELEASE_ASSERT(chunkA->RemainingBytes() != 0);
+
+ // Add another block to over-fill the ProfileBufferChunk.
+ const ProfileBufferChunk::Length remaining =
+ chunkA->BufferBytes() - (initTailLen + block1Len);
+ constexpr ProfileBufferChunk::Length overfill = 30;
+ const ProfileBufferChunk::Length block2Len = remaining + overfill;
+ ProfileBufferChunk::ReserveReturn block2 = chunkA->ReserveBlock(block2Len);
+ MOZ_RELEASE_ASSERT(block2.mBlockRangeIndex.ConvertToProfileBufferIndex() ==
+ chunkARangeStart + initTailLen + block1Len);
+ MOZ_RELEASE_ASSERT(block2.mSpan.LengthBytes() == remaining);
+ MOZ_RELEASE_ASSERT(block2.mSpan.Elements() ==
+ bufferA.Elements() + initTailLen + block1Len);
+ MOZ_RELEASE_ASSERT(chunkA->OffsetFirstBlock() == initTailLen);
+ MOZ_RELEASE_ASSERT(chunkA->OffsetPastLastBlock() == chunkA->BufferBytes());
+ MOZ_RELEASE_ASSERT(chunkA->RemainingBytes() == 0);
+
+ // Block must be marked "done" before it can be recycled.
+ chunkA->MarkDone();
+
+ // It must be marked "recycled" before data can be added to it again.
+ chunkA->MarkRecycled();
+
+ // Add an empty initial tail block.
+ Span<ProfileBufferChunk::Byte> initTail2 =
+ chunkA->ReserveInitialBlockAsTail(0);
+ MOZ_RELEASE_ASSERT(initTail2.LengthBytes() == 0);
+ MOZ_RELEASE_ASSERT(initTail2.Elements() == bufferA.Elements());
+ MOZ_RELEASE_ASSERT(chunkA->OffsetFirstBlock() == 0);
+ MOZ_RELEASE_ASSERT(chunkA->OffsetPastLastBlock() == 0);
+
+ // Block must be marked "done" before it can be destroyed.
+ chunkA->MarkDone();
+
+ chunkA->SetProcessId(123);
+ MOZ_RELEASE_ASSERT(chunkA->ProcessId() == 123);
+
+ printf("TestChunk done\n");
+}
+
+static void TestChunkManagerSingle() {
+ printf("TestChunkManagerSingle...\n");
+
+ // Construct a ProfileBufferChunkManagerSingle for one chunk of size >=1000.
+ constexpr ProfileBufferChunk::Length ChunkMinBufferBytes = 1000;
+ ProfileBufferChunkManagerSingle cms{ChunkMinBufferBytes};
+
+ // Reference to base class, to exercize virtual methods.
+ ProfileBufferChunkManager& cm = cms;
+
+# ifdef DEBUG
+ const char* chunkManagerRegisterer = "TestChunkManagerSingle";
+ cm.RegisteredWith(chunkManagerRegisterer);
+# endif // DEBUG
+
+ const auto maxTotalSize = cm.MaxTotalSize();
+ MOZ_RELEASE_ASSERT(maxTotalSize >= ChunkMinBufferBytes);
+
+ cm.SetChunkDestroyedCallback([](const ProfileBufferChunk&) {
+ MOZ_RELEASE_ASSERT(
+ false,
+ "ProfileBufferChunkManagerSingle should never destroy its one chunk");
+ });
+
+ UniquePtr<ProfileBufferChunk> extantReleasedChunks =
+ cm.GetExtantReleasedChunks();
+ MOZ_RELEASE_ASSERT(!extantReleasedChunks, "Unexpected released chunk(s)");
+
+ // First request.
+ UniquePtr<ProfileBufferChunk> chunk = cm.GetChunk();
+ MOZ_RELEASE_ASSERT(!!chunk, "First chunk request should always work");
+ MOZ_RELEASE_ASSERT(chunk->BufferBytes() >= ChunkMinBufferBytes,
+ "Unexpected chunk size");
+ MOZ_RELEASE_ASSERT(!chunk->GetNext(), "There should only be one chunk");
+
+ // Keep address, for later checks.
+ const uintptr_t chunkAddress = reinterpret_cast<uintptr_t>(chunk.get());
+
+ extantReleasedChunks = cm.GetExtantReleasedChunks();
+ MOZ_RELEASE_ASSERT(!extantReleasedChunks, "Unexpected released chunk(s)");
+
+ // Second request.
+ MOZ_RELEASE_ASSERT(!cm.GetChunk(), "Second chunk request should always fail");
+
+ extantReleasedChunks = cm.GetExtantReleasedChunks();
+ MOZ_RELEASE_ASSERT(!extantReleasedChunks, "Unexpected released chunk(s)");
+
+ // Add some data to the chunk (to verify recycling later on).
+ MOZ_RELEASE_ASSERT(chunk->ChunkHeader().mOffsetFirstBlock == 0);
+ MOZ_RELEASE_ASSERT(chunk->ChunkHeader().mOffsetPastLastBlock == 0);
+ MOZ_RELEASE_ASSERT(chunk->RangeStart() == 0);
+ chunk->SetRangeStart(100);
+ MOZ_RELEASE_ASSERT(chunk->RangeStart() == 100);
+ Unused << chunk->ReserveInitialBlockAsTail(1);
+ Unused << chunk->ReserveBlock(2);
+ MOZ_RELEASE_ASSERT(chunk->ChunkHeader().mOffsetFirstBlock == 1);
+ MOZ_RELEASE_ASSERT(chunk->ChunkHeader().mOffsetPastLastBlock == 1 + 2);
+
+ // Release the first chunk.
+ chunk->MarkDone();
+ cm.ReleaseChunk(std::move(chunk));
+ MOZ_RELEASE_ASSERT(!chunk, "chunk UniquePtr should have been moved-from");
+
+ // Request after release.
+ MOZ_RELEASE_ASSERT(!cm.GetChunk(),
+ "Chunk request after release should also fail");
+
+ // Check released chunk.
+ extantReleasedChunks = cm.GetExtantReleasedChunks();
+ MOZ_RELEASE_ASSERT(!!extantReleasedChunks,
+ "Could not retrieve released chunk");
+ MOZ_RELEASE_ASSERT(!extantReleasedChunks->GetNext(),
+ "There should only be one released chunk");
+ MOZ_RELEASE_ASSERT(
+ reinterpret_cast<uintptr_t>(extantReleasedChunks.get()) == chunkAddress,
+ "Released chunk should be first requested one");
+
+ MOZ_RELEASE_ASSERT(!cm.GetExtantReleasedChunks(),
+ "Unexpected extra released chunk(s)");
+
+ // Another request after release.
+ MOZ_RELEASE_ASSERT(!cm.GetChunk(),
+ "Chunk request after release should also fail");
+
+ MOZ_RELEASE_ASSERT(
+ cm.MaxTotalSize() == maxTotalSize,
+ "MaxTotalSize() should not change after requests&releases");
+
+ // Reset the chunk manager. (Single-only non-virtual function.)
+ cms.Reset(std::move(extantReleasedChunks));
+ MOZ_RELEASE_ASSERT(!extantReleasedChunks,
+ "Released chunk UniquePtr should have been moved-from");
+
+ MOZ_RELEASE_ASSERT(
+ cm.MaxTotalSize() == maxTotalSize,
+ "MaxTotalSize() should not change when resetting with the same chunk");
+
+ // 2nd round, first request. Theoretically async, but this implementation just
+ // immediately runs the callback.
+ bool ran = false;
+ cm.RequestChunk([&](UniquePtr<ProfileBufferChunk> aChunk) {
+ ran = true;
+ MOZ_RELEASE_ASSERT(!!aChunk);
+ chunk = std::move(aChunk);
+ });
+ MOZ_RELEASE_ASSERT(ran, "RequestChunk callback not called immediately");
+ ran = false;
+ cm.FulfillChunkRequests();
+ MOZ_RELEASE_ASSERT(!ran, "FulfillChunkRequests should not have any effects");
+ MOZ_RELEASE_ASSERT(!!chunk, "First chunk request should always work");
+ MOZ_RELEASE_ASSERT(chunk->BufferBytes() >= ChunkMinBufferBytes,
+ "Unexpected chunk size");
+ MOZ_RELEASE_ASSERT(!chunk->GetNext(), "There should only be one chunk");
+ MOZ_RELEASE_ASSERT(reinterpret_cast<uintptr_t>(chunk.get()) == chunkAddress,
+ "Requested chunk should be first requested one");
+ // Verify that chunk is empty and usable.
+ MOZ_RELEASE_ASSERT(chunk->ChunkHeader().mOffsetFirstBlock == 0);
+ MOZ_RELEASE_ASSERT(chunk->ChunkHeader().mOffsetPastLastBlock == 0);
+ MOZ_RELEASE_ASSERT(chunk->RangeStart() == 0);
+ chunk->SetRangeStart(200);
+ MOZ_RELEASE_ASSERT(chunk->RangeStart() == 200);
+ Unused << chunk->ReserveInitialBlockAsTail(3);
+ Unused << chunk->ReserveBlock(4);
+ MOZ_RELEASE_ASSERT(chunk->ChunkHeader().mOffsetFirstBlock == 3);
+ MOZ_RELEASE_ASSERT(chunk->ChunkHeader().mOffsetPastLastBlock == 3 + 4);
+
+ // Second request.
+ ran = false;
+ cm.RequestChunk([&](UniquePtr<ProfileBufferChunk> aChunk) {
+ ran = true;
+ MOZ_RELEASE_ASSERT(!aChunk, "Second chunk request should always fail");
+ });
+ MOZ_RELEASE_ASSERT(ran, "RequestChunk callback not called");
+
+ // This one does nothing.
+ cm.ForgetUnreleasedChunks();
+
+ // Don't forget to mark chunk "Done" before letting it die.
+ chunk->MarkDone();
+ chunk = nullptr;
+
+ // Create a tiny chunk and reset the chunk manager with it.
+ chunk = ProfileBufferChunk::Create(1);
+ MOZ_RELEASE_ASSERT(!!chunk);
+ auto tinyChunkSize = chunk->BufferBytes();
+ MOZ_RELEASE_ASSERT(tinyChunkSize >= 1);
+ MOZ_RELEASE_ASSERT(tinyChunkSize < ChunkMinBufferBytes);
+ MOZ_RELEASE_ASSERT(chunk->RangeStart() == 0);
+ chunk->SetRangeStart(300);
+ MOZ_RELEASE_ASSERT(chunk->RangeStart() == 300);
+ cms.Reset(std::move(chunk));
+ MOZ_RELEASE_ASSERT(!chunk, "chunk UniquePtr should have been moved-from");
+ MOZ_RELEASE_ASSERT(cm.MaxTotalSize() == tinyChunkSize,
+ "MaxTotalSize() should match the new chunk size");
+ chunk = cm.GetChunk();
+ MOZ_RELEASE_ASSERT(chunk->RangeStart() == 0, "Got non-recycled chunk");
+
+ // Enough testing! Clean-up.
+ Unused << chunk->ReserveInitialBlockAsTail(0);
+ chunk->MarkDone();
+ cm.ForgetUnreleasedChunks();
+
+# ifdef DEBUG
+ cm.DeregisteredFrom(chunkManagerRegisterer);
+# endif // DEBUG
+
+ printf("TestChunkManagerSingle done\n");
+}
+
+static void TestChunkManagerWithLocalLimit() {
+ printf("TestChunkManagerWithLocalLimit...\n");
+
+ // Construct a ProfileBufferChunkManagerWithLocalLimit with chunk of minimum
+ // size >=100, up to 1000 bytes.
+ constexpr ProfileBufferChunk::Length MaxTotalBytes = 1000;
+ constexpr ProfileBufferChunk::Length ChunkMinBufferBytes = 100;
+ ProfileBufferChunkManagerWithLocalLimit cmll{MaxTotalBytes,
+ ChunkMinBufferBytes};
+
+ // Reference to base class, to exercize virtual methods.
+ ProfileBufferChunkManager& cm = cmll;
+
+# ifdef DEBUG
+ const char* chunkManagerRegisterer = "TestChunkManagerWithLocalLimit";
+ cm.RegisteredWith(chunkManagerRegisterer);
+# endif // DEBUG
+
+ MOZ_RELEASE_ASSERT(cm.MaxTotalSize() == MaxTotalBytes,
+ "Max total size should be exactly as given");
+
+ unsigned destroyedChunks = 0;
+ unsigned destroyedBytes = 0;
+ cm.SetChunkDestroyedCallback([&](const ProfileBufferChunk& aChunks) {
+ for (const ProfileBufferChunk* chunk = &aChunks; chunk;
+ chunk = chunk->GetNext()) {
+ destroyedChunks += 1;
+ destroyedBytes += chunk->BufferBytes();
+ }
+ });
+
+ UniquePtr<ProfileBufferChunk> extantReleasedChunks =
+ cm.GetExtantReleasedChunks();
+ MOZ_RELEASE_ASSERT(!extantReleasedChunks, "Unexpected released chunk(s)");
+
+ // First request.
+ UniquePtr<ProfileBufferChunk> chunk = cm.GetChunk();
+ MOZ_RELEASE_ASSERT(!!chunk,
+ "First chunk immediate request should always work");
+ const auto chunkActualBufferBytes = chunk->BufferBytes();
+ MOZ_RELEASE_ASSERT(chunkActualBufferBytes >= ChunkMinBufferBytes,
+ "Unexpected chunk size");
+ MOZ_RELEASE_ASSERT(!chunk->GetNext(), "There should only be one chunk");
+
+ // Keep address, for later checks.
+ const uintptr_t chunk1Address = reinterpret_cast<uintptr_t>(chunk.get());
+
+ extantReleasedChunks = cm.GetExtantReleasedChunks();
+ MOZ_RELEASE_ASSERT(!extantReleasedChunks, "Unexpected released chunk(s)");
+
+ // Verify that ReleaseChunk accepts zero chunks.
+ cm.ReleaseChunk(nullptr);
+ MOZ_RELEASE_ASSERT(!extantReleasedChunks, "Unexpected released chunk(s)");
+
+ // For this test, we need to be able to get at least 2 chunks without hitting
+ // the limit. (If this failed, it wouldn't necessary be a problem with
+ // ProfileBufferChunkManagerWithLocalLimit, fiddle with constants at the top
+ // of this test.)
+ MOZ_RELEASE_ASSERT(chunkActualBufferBytes < 2 * MaxTotalBytes);
+
+ unsigned chunk1ReuseCount = 0;
+
+ // We will do enough loops to go through the maximum size a number of times.
+ const unsigned Rollovers = 3;
+ const unsigned Loops = Rollovers * MaxTotalBytes / chunkActualBufferBytes;
+ for (unsigned i = 0; i < Loops; ++i) {
+ // Add some data to the chunk.
+ MOZ_RELEASE_ASSERT(chunk->ChunkHeader().mOffsetFirstBlock == 0);
+ MOZ_RELEASE_ASSERT(chunk->ChunkHeader().mOffsetPastLastBlock == 0);
+ MOZ_RELEASE_ASSERT(chunk->RangeStart() == 0);
+ const ProfileBufferIndex index = 1 + i * chunkActualBufferBytes;
+ chunk->SetRangeStart(index);
+ MOZ_RELEASE_ASSERT(chunk->RangeStart() == index);
+ Unused << chunk->ReserveInitialBlockAsTail(1);
+ Unused << chunk->ReserveBlock(2);
+ MOZ_RELEASE_ASSERT(chunk->ChunkHeader().mOffsetFirstBlock == 1);
+ MOZ_RELEASE_ASSERT(chunk->ChunkHeader().mOffsetPastLastBlock == 1 + 2);
+
+ // Request a new chunk.
+ bool ran = false;
+ UniquePtr<ProfileBufferChunk> newChunk;
+ cm.RequestChunk([&](UniquePtr<ProfileBufferChunk> aChunk) {
+ ran = true;
+ newChunk = std::move(aChunk);
+ });
+ MOZ_RELEASE_ASSERT(
+ !ran, "RequestChunk should not immediately fulfill the request");
+ cm.FulfillChunkRequests();
+ MOZ_RELEASE_ASSERT(ran, "FulfillChunkRequests should invoke the callback");
+ MOZ_RELEASE_ASSERT(!!newChunk, "Chunk request should always work");
+ MOZ_RELEASE_ASSERT(newChunk->BufferBytes() == chunkActualBufferBytes,
+ "Unexpected chunk size");
+ MOZ_RELEASE_ASSERT(!newChunk->GetNext(), "There should only be one chunk");
+
+ // Mark previous chunk done and release it.
+ WaitUntilTimeStampChanges(); // Force "done" timestamp to change.
+ chunk->MarkDone();
+ cm.ReleaseChunk(std::move(chunk));
+
+ // And cycle to the new chunk.
+ chunk = std::move(newChunk);
+
+ if (reinterpret_cast<uintptr_t>(chunk.get()) == chunk1Address) {
+ ++chunk1ReuseCount;
+ }
+ }
+
+ // Expect all rollovers except 1 to destroy chunks.
+ MOZ_RELEASE_ASSERT(destroyedChunks >= (Rollovers - 1) * MaxTotalBytes /
+ chunkActualBufferBytes,
+ "Not enough destroyed chunks");
+ MOZ_RELEASE_ASSERT(destroyedBytes == destroyedChunks * chunkActualBufferBytes,
+ "Mismatched destroyed chunks and bytes");
+ MOZ_RELEASE_ASSERT(chunk1ReuseCount >= (Rollovers - 1),
+ "Not enough reuse of the first chunks");
+
+ // Check that chunk manager is reentrant from request callback.
+ bool ran = false;
+ bool ranInner = false;
+ UniquePtr<ProfileBufferChunk> newChunk;
+ cm.RequestChunk([&](UniquePtr<ProfileBufferChunk> aChunk) {
+ ran = true;
+ MOZ_RELEASE_ASSERT(!!aChunk, "Chunk request should always work");
+ Unused << aChunk->ReserveInitialBlockAsTail(0);
+ WaitUntilTimeStampChanges(); // Force "done" timestamp to change.
+ aChunk->MarkDone();
+ UniquePtr<ProfileBufferChunk> anotherChunk = cm.GetChunk();
+ MOZ_RELEASE_ASSERT(!!anotherChunk);
+ Unused << anotherChunk->ReserveInitialBlockAsTail(0);
+ WaitUntilTimeStampChanges(); // Force "done" timestamp to change.
+ anotherChunk->MarkDone();
+ cm.RequestChunk([&](UniquePtr<ProfileBufferChunk> aChunk) {
+ ranInner = true;
+ MOZ_RELEASE_ASSERT(!!aChunk, "Chunk request should always work");
+ Unused << aChunk->ReserveInitialBlockAsTail(0);
+ WaitUntilTimeStampChanges(); // Force "done" timestamp to change.
+ aChunk->MarkDone();
+ });
+ MOZ_RELEASE_ASSERT(
+ !ranInner, "RequestChunk should not immediately fulfill the request");
+ });
+ MOZ_RELEASE_ASSERT(!ran,
+ "RequestChunk should not immediately fulfill the request");
+ MOZ_RELEASE_ASSERT(
+ !ranInner,
+ "RequestChunk should not immediately fulfill the inner request");
+ cm.FulfillChunkRequests();
+ MOZ_RELEASE_ASSERT(ran, "FulfillChunkRequests should invoke the callback");
+ MOZ_RELEASE_ASSERT(!ranInner,
+ "FulfillChunkRequests should not immediately fulfill "
+ "the inner request");
+ cm.FulfillChunkRequests();
+ MOZ_RELEASE_ASSERT(
+ ran, "2nd FulfillChunkRequests should invoke the inner request callback");
+
+ // Enough testing! Clean-up.
+ Unused << chunk->ReserveInitialBlockAsTail(0);
+ WaitUntilTimeStampChanges(); // Force "done" timestamp to change.
+ chunk->MarkDone();
+ cm.ForgetUnreleasedChunks();
+
+ // Special testing of the release algorithm, to make sure released chunks get
+ // sorted.
+ constexpr unsigned RandomReleaseChunkLoop = 100;
+ // Build a vector of chunks, and mark them "done", ready to be released.
+ Vector<UniquePtr<ProfileBufferChunk>> chunksToRelease;
+ MOZ_RELEASE_ASSERT(chunksToRelease.reserve(RandomReleaseChunkLoop));
+ Vector<TimeStamp> chunksTimeStamps;
+ MOZ_RELEASE_ASSERT(chunksTimeStamps.reserve(RandomReleaseChunkLoop));
+ for (unsigned i = 0; i < RandomReleaseChunkLoop; ++i) {
+ UniquePtr<ProfileBufferChunk> chunk = cm.GetChunk();
+ MOZ_RELEASE_ASSERT(chunk);
+ Unused << chunk->ReserveInitialBlockAsTail(0);
+ chunk->MarkDone();
+ MOZ_RELEASE_ASSERT(!chunk->ChunkHeader().mDoneTimeStamp.IsNull());
+ chunksTimeStamps.infallibleEmplaceBack(chunk->ChunkHeader().mDoneTimeStamp);
+ chunksToRelease.infallibleEmplaceBack(std::move(chunk));
+ if (i % 10 == 0) {
+ // "Done" timestamps should *usually* increase, let's make extra sure some
+ // timestamps are actually different.
+ WaitUntilTimeStampChanges();
+ }
+ }
+ // Shuffle the list.
+ std::random_device randomDevice;
+ std::mt19937 generator(randomDevice());
+ std::shuffle(chunksToRelease.begin(), chunksToRelease.end(), generator);
+ // And release chunks one by one, checking that the list of released chunks
+ // is always sorted.
+ printf("TestChunkManagerWithLocalLimit - Shuffle test timestamps:");
+ for (unsigned i = 0; i < RandomReleaseChunkLoop; ++i) {
+ printf(" %f", (chunksToRelease[i]->ChunkHeader().mDoneTimeStamp -
+ TimeStamp::ProcessCreation())
+ .ToMicroseconds());
+ cm.ReleaseChunk(std::move(chunksToRelease[i]));
+ cm.PeekExtantReleasedChunks([i](const ProfileBufferChunk* releasedChunks) {
+ MOZ_RELEASE_ASSERT(releasedChunks);
+ unsigned releasedChunkCount = 1;
+ for (;;) {
+ const ProfileBufferChunk* nextChunk = releasedChunks->GetNext();
+ if (!nextChunk) {
+ break;
+ }
+ ++releasedChunkCount;
+ MOZ_RELEASE_ASSERT(releasedChunks->ChunkHeader().mDoneTimeStamp <=
+ nextChunk->ChunkHeader().mDoneTimeStamp);
+ releasedChunks = nextChunk;
+ }
+ MOZ_RELEASE_ASSERT(releasedChunkCount == i + 1);
+ });
+ }
+ printf("\n");
+ // Finally, the whole list of released chunks should have the exact same
+ // timestamps as the initial list of "done" chunks.
+ extantReleasedChunks = cm.GetExtantReleasedChunks();
+ for (unsigned i = 0; i < RandomReleaseChunkLoop; ++i) {
+ MOZ_RELEASE_ASSERT(extantReleasedChunks, "Not enough released chunks");
+ MOZ_RELEASE_ASSERT(extantReleasedChunks->ChunkHeader().mDoneTimeStamp ==
+ chunksTimeStamps[i]);
+ Unused << std::exchange(extantReleasedChunks,
+ extantReleasedChunks->ReleaseNext());
+ }
+ MOZ_RELEASE_ASSERT(!extantReleasedChunks, "Too many released chunks");
+
+# ifdef DEBUG
+ cm.DeregisteredFrom(chunkManagerRegisterer);
+# endif // DEBUG
+
+ printf("TestChunkManagerWithLocalLimit done\n");
+}
+
+static bool IsSameMetadata(
+ const ProfileBufferControlledChunkManager::ChunkMetadata& a1,
+ const ProfileBufferControlledChunkManager::ChunkMetadata& a2) {
+ return a1.mDoneTimeStamp == a2.mDoneTimeStamp &&
+ a1.mBufferBytes == a2.mBufferBytes;
+};
+
+static bool IsSameUpdate(
+ const ProfileBufferControlledChunkManager::Update& a1,
+ const ProfileBufferControlledChunkManager::Update& a2) {
+ // Final and not-an-update don't carry other data, so we can test these two
+ // states first.
+ if (a1.IsFinal() || a2.IsFinal()) {
+ return a1.IsFinal() && a2.IsFinal();
+ }
+ if (a1.IsNotUpdate() || a2.IsNotUpdate()) {
+ return a1.IsNotUpdate() && a2.IsNotUpdate();
+ }
+
+ // Here, both are "normal" udpates, check member variables:
+
+ if (a1.UnreleasedBytes() != a2.UnreleasedBytes()) {
+ return false;
+ }
+ if (a1.ReleasedBytes() != a2.ReleasedBytes()) {
+ return false;
+ }
+ if (a1.OldestDoneTimeStamp() != a2.OldestDoneTimeStamp()) {
+ return false;
+ }
+ if (a1.NewlyReleasedChunksRef().size() !=
+ a2.NewlyReleasedChunksRef().size()) {
+ return false;
+ }
+ for (unsigned i = 0; i < a1.NewlyReleasedChunksRef().size(); ++i) {
+ if (!IsSameMetadata(a1.NewlyReleasedChunksRef()[i],
+ a2.NewlyReleasedChunksRef()[i])) {
+ return false;
+ }
+ }
+ return true;
+}
+
+static void TestControlledChunkManagerUpdate() {
+ printf("TestControlledChunkManagerUpdate...\n");
+
+ using Update = ProfileBufferControlledChunkManager::Update;
+
+ // Default construction.
+ Update update1;
+ MOZ_RELEASE_ASSERT(update1.IsNotUpdate());
+ MOZ_RELEASE_ASSERT(!update1.IsFinal());
+
+ // Clear an already-cleared update.
+ update1.Clear();
+ MOZ_RELEASE_ASSERT(update1.IsNotUpdate());
+ MOZ_RELEASE_ASSERT(!update1.IsFinal());
+
+ // Final construction with nullptr.
+ const Update final(nullptr);
+ MOZ_RELEASE_ASSERT(final.IsFinal());
+ MOZ_RELEASE_ASSERT(!final.IsNotUpdate());
+
+ // Copy final to cleared.
+ update1 = final;
+ MOZ_RELEASE_ASSERT(update1.IsFinal());
+ MOZ_RELEASE_ASSERT(!update1.IsNotUpdate());
+
+ // Copy final to final.
+ update1 = final;
+ MOZ_RELEASE_ASSERT(update1.IsFinal());
+ MOZ_RELEASE_ASSERT(!update1.IsNotUpdate());
+
+ // Clear a final update.
+ update1.Clear();
+ MOZ_RELEASE_ASSERT(update1.IsNotUpdate());
+ MOZ_RELEASE_ASSERT(!update1.IsFinal());
+
+ // Move final to cleared.
+ update1 = Update(nullptr);
+ MOZ_RELEASE_ASSERT(update1.IsFinal());
+ MOZ_RELEASE_ASSERT(!update1.IsNotUpdate());
+
+ // Move final to final.
+ update1 = Update(nullptr);
+ MOZ_RELEASE_ASSERT(update1.IsFinal());
+ MOZ_RELEASE_ASSERT(!update1.IsNotUpdate());
+
+ // Move from not-an-update (effectively same as Clear).
+ update1 = Update();
+ MOZ_RELEASE_ASSERT(update1.IsNotUpdate());
+ MOZ_RELEASE_ASSERT(!update1.IsFinal());
+
+ auto CreateBiggerChunkAfter = [](const ProfileBufferChunk& aChunkToBeat) {
+ while (TimeStamp::Now() <= aChunkToBeat.ChunkHeader().mDoneTimeStamp) {
+ ::SleepMilli(1);
+ }
+ auto chunk = ProfileBufferChunk::Create(aChunkToBeat.BufferBytes() * 2);
+ MOZ_RELEASE_ASSERT(!!chunk);
+ MOZ_RELEASE_ASSERT(chunk->BufferBytes() >= aChunkToBeat.BufferBytes() * 2);
+ Unused << chunk->ReserveInitialBlockAsTail(0);
+ chunk->MarkDone();
+ MOZ_RELEASE_ASSERT(chunk->ChunkHeader().mDoneTimeStamp >
+ aChunkToBeat.ChunkHeader().mDoneTimeStamp);
+ return chunk;
+ };
+
+ update1 = Update(1, 2, nullptr, nullptr);
+
+ // Create initial update with 2 released chunks and 1 unreleased chunk.
+ auto released = ProfileBufferChunk::Create(10);
+ ProfileBufferChunk* c1 = released.get();
+ Unused << c1->ReserveInitialBlockAsTail(0);
+ c1->MarkDone();
+
+ released->SetLast(CreateBiggerChunkAfter(*c1));
+ ProfileBufferChunk* c2 = c1->GetNext();
+
+ auto unreleased = CreateBiggerChunkAfter(*c2);
+ ProfileBufferChunk* c3 = unreleased.get();
+
+ Update update2(c3->BufferBytes(), c1->BufferBytes() + c2->BufferBytes(), c1,
+ c1);
+ MOZ_RELEASE_ASSERT(IsSameUpdate(
+ update2,
+ Update(c3->BufferBytes(), c1->BufferBytes() + c2->BufferBytes(),
+ c1->ChunkHeader().mDoneTimeStamp,
+ {{c1->ChunkHeader().mDoneTimeStamp, c1->BufferBytes()},
+ {c2->ChunkHeader().mDoneTimeStamp, c2->BufferBytes()}})));
+ // Check every field, this time only, after that we'll trust that the
+ // `SameUpdate` test will be enough.
+ MOZ_RELEASE_ASSERT(!update2.IsNotUpdate());
+ MOZ_RELEASE_ASSERT(!update2.IsFinal());
+ MOZ_RELEASE_ASSERT(update2.UnreleasedBytes() == c3->BufferBytes());
+ MOZ_RELEASE_ASSERT(update2.ReleasedBytes() ==
+ c1->BufferBytes() + c2->BufferBytes());
+ MOZ_RELEASE_ASSERT(update2.OldestDoneTimeStamp() ==
+ c1->ChunkHeader().mDoneTimeStamp);
+ MOZ_RELEASE_ASSERT(update2.NewlyReleasedChunksRef().size() == 2);
+ MOZ_RELEASE_ASSERT(
+ IsSameMetadata(update2.NewlyReleasedChunksRef()[0],
+ {c1->ChunkHeader().mDoneTimeStamp, c1->BufferBytes()}));
+ MOZ_RELEASE_ASSERT(
+ IsSameMetadata(update2.NewlyReleasedChunksRef()[1],
+ {c2->ChunkHeader().mDoneTimeStamp, c2->BufferBytes()}));
+
+ // Fold into not-an-update.
+ update1.Fold(std::move(update2));
+ MOZ_RELEASE_ASSERT(IsSameUpdate(
+ update1,
+ Update(c3->BufferBytes(), c1->BufferBytes() + c2->BufferBytes(),
+ c1->ChunkHeader().mDoneTimeStamp,
+ {{c1->ChunkHeader().mDoneTimeStamp, c1->BufferBytes()},
+ {c2->ChunkHeader().mDoneTimeStamp, c2->BufferBytes()}})));
+
+ // Pretend nothing happened.
+ update2 = Update(c3->BufferBytes(), c1->BufferBytes() + c2->BufferBytes(), c1,
+ nullptr);
+ MOZ_RELEASE_ASSERT(IsSameUpdate(
+ update2, Update(c3->BufferBytes(), c1->BufferBytes() + c2->BufferBytes(),
+ c1->ChunkHeader().mDoneTimeStamp, {})));
+ update1.Fold(std::move(update2));
+ MOZ_RELEASE_ASSERT(IsSameUpdate(
+ update1,
+ Update(c3->BufferBytes(), c1->BufferBytes() + c2->BufferBytes(),
+ c1->ChunkHeader().mDoneTimeStamp,
+ {{c1->ChunkHeader().mDoneTimeStamp, c1->BufferBytes()},
+ {c2->ChunkHeader().mDoneTimeStamp, c2->BufferBytes()}})));
+
+ // Pretend there's a new unreleased chunk.
+ c3->SetLast(CreateBiggerChunkAfter(*c3));
+ ProfileBufferChunk* c4 = c3->GetNext();
+ update2 = Update(c3->BufferBytes() + c4->BufferBytes(),
+ c1->BufferBytes() + c2->BufferBytes(), c1, nullptr);
+ MOZ_RELEASE_ASSERT(
+ IsSameUpdate(update2, Update(c3->BufferBytes() + c4->BufferBytes(),
+ c1->BufferBytes() + c2->BufferBytes(),
+ c1->ChunkHeader().mDoneTimeStamp, {})));
+ update1.Fold(std::move(update2));
+ MOZ_RELEASE_ASSERT(IsSameUpdate(
+ update1,
+ Update(c3->BufferBytes() + c4->BufferBytes(),
+ c1->BufferBytes() + c2->BufferBytes(),
+ c1->ChunkHeader().mDoneTimeStamp,
+ {{c1->ChunkHeader().mDoneTimeStamp, c1->BufferBytes()},
+ {c2->ChunkHeader().mDoneTimeStamp, c2->BufferBytes()}})));
+
+ // Pretend the first unreleased chunk c3 has been released.
+ released->SetLast(std::exchange(unreleased, unreleased->ReleaseNext()));
+ update2 =
+ Update(c4->BufferBytes(),
+ c1->BufferBytes() + c2->BufferBytes() + c3->BufferBytes(), c1, c3);
+ MOZ_RELEASE_ASSERT(IsSameUpdate(
+ update2,
+ Update(c4->BufferBytes(),
+ c1->BufferBytes() + c2->BufferBytes() + c3->BufferBytes(),
+ c1->ChunkHeader().mDoneTimeStamp,
+ {{c3->ChunkHeader().mDoneTimeStamp, c3->BufferBytes()}})));
+ update1.Fold(std::move(update2));
+ MOZ_RELEASE_ASSERT(IsSameUpdate(
+ update1,
+ Update(c4->BufferBytes(),
+ c1->BufferBytes() + c2->BufferBytes() + c3->BufferBytes(),
+ c1->ChunkHeader().mDoneTimeStamp,
+ {{c1->ChunkHeader().mDoneTimeStamp, c1->BufferBytes()},
+ {c2->ChunkHeader().mDoneTimeStamp, c2->BufferBytes()},
+ {c3->ChunkHeader().mDoneTimeStamp, c3->BufferBytes()}})));
+
+ // Pretend c1 has been destroyed, so the oldest timestamp is now at c2.
+ released = released->ReleaseNext();
+ c1 = nullptr;
+ update2 = Update(c4->BufferBytes(), c2->BufferBytes() + c3->BufferBytes(), c2,
+ nullptr);
+ MOZ_RELEASE_ASSERT(IsSameUpdate(
+ update2, Update(c4->BufferBytes(), c2->BufferBytes() + c3->BufferBytes(),
+ c2->ChunkHeader().mDoneTimeStamp, {})));
+ update1.Fold(std::move(update2));
+ MOZ_RELEASE_ASSERT(IsSameUpdate(
+ update1,
+ Update(c4->BufferBytes(), c2->BufferBytes() + c3->BufferBytes(),
+ c2->ChunkHeader().mDoneTimeStamp,
+ {{c2->ChunkHeader().mDoneTimeStamp, c2->BufferBytes()},
+ {c3->ChunkHeader().mDoneTimeStamp, c3->BufferBytes()}})));
+
+ // Pretend c2 has been recycled to make unreleased c5, and c4 has been
+ // released.
+ auto recycled = std::exchange(released, released->ReleaseNext());
+ recycled->MarkRecycled();
+ Unused << recycled->ReserveInitialBlockAsTail(0);
+ recycled->MarkDone();
+ released->SetLast(std::move(unreleased));
+ unreleased = std::move(recycled);
+ ProfileBufferChunk* c5 = c2;
+ c2 = nullptr;
+ update2 =
+ Update(c5->BufferBytes(), c3->BufferBytes() + c4->BufferBytes(), c3, c4);
+ MOZ_RELEASE_ASSERT(IsSameUpdate(
+ update2,
+ Update(c5->BufferBytes(), c3->BufferBytes() + c4->BufferBytes(),
+ c3->ChunkHeader().mDoneTimeStamp,
+ {{c4->ChunkHeader().mDoneTimeStamp, c4->BufferBytes()}})));
+ update1.Fold(std::move(update2));
+ MOZ_RELEASE_ASSERT(IsSameUpdate(
+ update1,
+ Update(c5->BufferBytes(), c3->BufferBytes() + c4->BufferBytes(),
+ c3->ChunkHeader().mDoneTimeStamp,
+ {{c3->ChunkHeader().mDoneTimeStamp, c3->BufferBytes()},
+ {c4->ChunkHeader().mDoneTimeStamp, c4->BufferBytes()}})));
+
+ // And send a final update.
+ update1.Fold(Update(nullptr));
+ MOZ_RELEASE_ASSERT(update1.IsFinal());
+ MOZ_RELEASE_ASSERT(!update1.IsNotUpdate());
+
+ printf("TestControlledChunkManagerUpdate done\n");
+}
+
+static void TestControlledChunkManagerWithLocalLimit() {
+ printf("TestControlledChunkManagerWithLocalLimit...\n");
+
+ // Construct a ProfileBufferChunkManagerWithLocalLimit with chunk of minimum
+ // size >=100, up to 1000 bytes.
+ constexpr ProfileBufferChunk::Length MaxTotalBytes = 1000;
+ constexpr ProfileBufferChunk::Length ChunkMinBufferBytes = 100;
+ ProfileBufferChunkManagerWithLocalLimit cmll{MaxTotalBytes,
+ ChunkMinBufferBytes};
+
+ // Reference to chunk manager base class.
+ ProfileBufferChunkManager& cm = cmll;
+
+ // Reference to controlled chunk manager base class.
+ ProfileBufferControlledChunkManager& ccm = cmll;
+
+# ifdef DEBUG
+ const char* chunkManagerRegisterer =
+ "TestControlledChunkManagerWithLocalLimit";
+ cm.RegisteredWith(chunkManagerRegisterer);
+# endif // DEBUG
+
+ MOZ_RELEASE_ASSERT(cm.MaxTotalSize() == MaxTotalBytes,
+ "Max total size should be exactly as given");
+
+ unsigned destroyedChunks = 0;
+ unsigned destroyedBytes = 0;
+ cm.SetChunkDestroyedCallback([&](const ProfileBufferChunk& aChunks) {
+ for (const ProfileBufferChunk* chunk = &aChunks; chunk;
+ chunk = chunk->GetNext()) {
+ destroyedChunks += 1;
+ destroyedBytes += chunk->BufferBytes();
+ }
+ });
+
+ using Update = ProfileBufferControlledChunkManager::Update;
+ unsigned updateCount = 0;
+ ProfileBufferControlledChunkManager::Update update;
+ MOZ_RELEASE_ASSERT(update.IsNotUpdate());
+ auto updateCallback = [&](Update&& aUpdate) {
+ ++updateCount;
+ update.Fold(std::move(aUpdate));
+ };
+ ccm.SetUpdateCallback(updateCallback);
+ MOZ_RELEASE_ASSERT(updateCount == 1,
+ "SetUpdateCallback should have triggered an update");
+ MOZ_RELEASE_ASSERT(IsSameUpdate(update, Update(0, 0, TimeStamp{}, {})));
+ updateCount = 0;
+ update.Clear();
+
+ UniquePtr<ProfileBufferChunk> extantReleasedChunks =
+ cm.GetExtantReleasedChunks();
+ MOZ_RELEASE_ASSERT(!extantReleasedChunks, "Unexpected released chunk(s)");
+ MOZ_RELEASE_ASSERT(updateCount == 1,
+ "GetExtantReleasedChunks should have triggered an update");
+ MOZ_RELEASE_ASSERT(IsSameUpdate(update, Update(0, 0, TimeStamp{}, {})));
+ updateCount = 0;
+ update.Clear();
+
+ // First request.
+ UniquePtr<ProfileBufferChunk> chunk = cm.GetChunk();
+ MOZ_RELEASE_ASSERT(!!chunk,
+ "First chunk immediate request should always work");
+ const auto chunkActualBufferBytes = chunk->BufferBytes();
+ MOZ_RELEASE_ASSERT(updateCount == 1,
+ "GetChunk should have triggered an update");
+ MOZ_RELEASE_ASSERT(
+ IsSameUpdate(update, Update(chunk->BufferBytes(), 0, TimeStamp{}, {})));
+ updateCount = 0;
+ update.Clear();
+
+ extantReleasedChunks = cm.GetExtantReleasedChunks();
+ MOZ_RELEASE_ASSERT(!extantReleasedChunks, "Unexpected released chunk(s)");
+ MOZ_RELEASE_ASSERT(updateCount == 1,
+ "GetExtantReleasedChunks should have triggered an update");
+ MOZ_RELEASE_ASSERT(
+ IsSameUpdate(update, Update(chunk->BufferBytes(), 0, TimeStamp{}, {})));
+ updateCount = 0;
+ update.Clear();
+
+ // For this test, we need to be able to get at least 2 chunks without hitting
+ // the limit. (If this failed, it wouldn't necessary be a problem with
+ // ProfileBufferChunkManagerWithLocalLimit, fiddle with constants at the top
+ // of this test.)
+ MOZ_RELEASE_ASSERT(chunkActualBufferBytes < 2 * MaxTotalBytes);
+
+ ProfileBufferChunk::Length previousUnreleasedBytes = chunk->BufferBytes();
+ ProfileBufferChunk::Length previousReleasedBytes = 0;
+ TimeStamp previousOldestDoneTimeStamp;
+
+ // We will do enough loops to go through the maximum size a number of times.
+ const unsigned Rollovers = 3;
+ const unsigned Loops = Rollovers * MaxTotalBytes / chunkActualBufferBytes;
+ for (unsigned i = 0; i < Loops; ++i) {
+ // Add some data to the chunk.
+ const ProfileBufferIndex index =
+ ProfileBufferIndex(chunkActualBufferBytes) * i + 1;
+ chunk->SetRangeStart(index);
+ Unused << chunk->ReserveInitialBlockAsTail(1);
+ Unused << chunk->ReserveBlock(2);
+
+ // Request a new chunk.
+ UniquePtr<ProfileBufferChunk> newChunk;
+ cm.RequestChunk([&](UniquePtr<ProfileBufferChunk> aChunk) {
+ newChunk = std::move(aChunk);
+ });
+ MOZ_RELEASE_ASSERT(updateCount == 0,
+ "RequestChunk() shouldn't have triggered an update");
+ cm.FulfillChunkRequests();
+ MOZ_RELEASE_ASSERT(!!newChunk, "Chunk request should always work");
+ MOZ_RELEASE_ASSERT(newChunk->BufferBytes() == chunkActualBufferBytes,
+ "Unexpected chunk size");
+ MOZ_RELEASE_ASSERT(!newChunk->GetNext(), "There should only be one chunk");
+
+ MOZ_RELEASE_ASSERT(updateCount == 1,
+ "FulfillChunkRequests() after a request should have "
+ "triggered an update");
+ MOZ_RELEASE_ASSERT(!update.IsFinal());
+ MOZ_RELEASE_ASSERT(!update.IsNotUpdate());
+ MOZ_RELEASE_ASSERT(update.UnreleasedBytes() ==
+ previousUnreleasedBytes + newChunk->BufferBytes());
+ previousUnreleasedBytes = update.UnreleasedBytes();
+ MOZ_RELEASE_ASSERT(update.ReleasedBytes() <= previousReleasedBytes);
+ previousReleasedBytes = update.ReleasedBytes();
+ MOZ_RELEASE_ASSERT(previousOldestDoneTimeStamp.IsNull() ||
+ update.OldestDoneTimeStamp() >=
+ previousOldestDoneTimeStamp);
+ previousOldestDoneTimeStamp = update.OldestDoneTimeStamp();
+ MOZ_RELEASE_ASSERT(update.NewlyReleasedChunksRef().empty());
+ updateCount = 0;
+ update.Clear();
+
+ // Make sure the "Done" timestamp below cannot be the same as from the
+ // previous loop.
+ const TimeStamp now = TimeStamp::Now();
+ while (TimeStamp::Now() == now) {
+ ::SleepMilli(1);
+ }
+
+ // Mark previous chunk done and release it.
+ WaitUntilTimeStampChanges(); // Force "done" timestamp to change.
+ chunk->MarkDone();
+ const auto doneTimeStamp = chunk->ChunkHeader().mDoneTimeStamp;
+ const auto bufferBytes = chunk->BufferBytes();
+ cm.ReleaseChunk(std::move(chunk));
+
+ MOZ_RELEASE_ASSERT(updateCount == 1,
+ "ReleaseChunk() should have triggered an update");
+ MOZ_RELEASE_ASSERT(!update.IsFinal());
+ MOZ_RELEASE_ASSERT(!update.IsNotUpdate());
+ MOZ_RELEASE_ASSERT(update.UnreleasedBytes() ==
+ previousUnreleasedBytes - bufferBytes);
+ previousUnreleasedBytes = update.UnreleasedBytes();
+ MOZ_RELEASE_ASSERT(update.ReleasedBytes() ==
+ previousReleasedBytes + bufferBytes);
+ previousReleasedBytes = update.ReleasedBytes();
+ MOZ_RELEASE_ASSERT(previousOldestDoneTimeStamp.IsNull() ||
+ update.OldestDoneTimeStamp() >=
+ previousOldestDoneTimeStamp);
+ previousOldestDoneTimeStamp = update.OldestDoneTimeStamp();
+ MOZ_RELEASE_ASSERT(update.OldestDoneTimeStamp() <= doneTimeStamp);
+ MOZ_RELEASE_ASSERT(update.NewlyReleasedChunksRef().size() == 1);
+ MOZ_RELEASE_ASSERT(update.NewlyReleasedChunksRef()[0].mDoneTimeStamp ==
+ doneTimeStamp);
+ MOZ_RELEASE_ASSERT(update.NewlyReleasedChunksRef()[0].mBufferBytes ==
+ bufferBytes);
+ updateCount = 0;
+ update.Clear();
+
+ // And cycle to the new chunk.
+ chunk = std::move(newChunk);
+ }
+
+ // Enough testing! Clean-up.
+ Unused << chunk->ReserveInitialBlockAsTail(0);
+ chunk->MarkDone();
+ cm.ForgetUnreleasedChunks();
+ MOZ_RELEASE_ASSERT(
+ updateCount == 1,
+ "ForgetUnreleasedChunks() should have triggered an update");
+ MOZ_RELEASE_ASSERT(!update.IsFinal());
+ MOZ_RELEASE_ASSERT(!update.IsNotUpdate());
+ MOZ_RELEASE_ASSERT(update.UnreleasedBytes() == 0);
+ MOZ_RELEASE_ASSERT(update.ReleasedBytes() == previousReleasedBytes);
+ MOZ_RELEASE_ASSERT(update.NewlyReleasedChunksRef().empty() == 1);
+ updateCount = 0;
+ update.Clear();
+
+ ccm.SetUpdateCallback({});
+ MOZ_RELEASE_ASSERT(updateCount == 1,
+ "SetUpdateCallback({}) should have triggered an update");
+ MOZ_RELEASE_ASSERT(update.IsFinal());
+
+# ifdef DEBUG
+ cm.DeregisteredFrom(chunkManagerRegisterer);
+# endif // DEBUG
+
+ printf("TestControlledChunkManagerWithLocalLimit done\n");
+}
+
+# define VERIFY_PCB_START_END_PUSHED_CLEARED_FAILED( \
+ aProfileChunkedBuffer, aStart, aEnd, aPushed, aCleared, aFailed) \
+ { \
+ ProfileChunkedBuffer::State state = (aProfileChunkedBuffer).GetState(); \
+ MOZ_RELEASE_ASSERT(state.mRangeStart == (aStart)); \
+ MOZ_RELEASE_ASSERT(state.mRangeEnd == (aEnd)); \
+ MOZ_RELEASE_ASSERT(state.mPushedBlockCount == (aPushed)); \
+ MOZ_RELEASE_ASSERT(state.mClearedBlockCount == (aCleared)); \
+ MOZ_RELEASE_ASSERT(state.mFailedPutBytes == (aFailed)); \
+ }
+
+static void TestChunkedBuffer() {
+ printf("TestChunkedBuffer...\n");
+
+ ProfileBufferBlockIndex blockIndex;
+ MOZ_RELEASE_ASSERT(!blockIndex);
+ MOZ_RELEASE_ASSERT(blockIndex == nullptr);
+
+ // Create an out-of-session ProfileChunkedBuffer.
+ ProfileChunkedBuffer cb(ProfileChunkedBuffer::ThreadSafety::WithMutex);
+
+ MOZ_RELEASE_ASSERT(cb.BufferLength().isNothing());
+
+ VERIFY_PCB_START_END_PUSHED_CLEARED_FAILED(cb, 1, 1, 0, 0, 0);
+
+ int result = 0;
+ result = cb.ReserveAndPut(
+ []() {
+ MOZ_RELEASE_ASSERT(false);
+ return 1;
+ },
+ [](Maybe<ProfileBufferEntryWriter>& aEW) { return aEW ? 2 : 3; });
+ MOZ_RELEASE_ASSERT(result == 3);
+ VERIFY_PCB_START_END_PUSHED_CLEARED_FAILED(cb, 1, 1, 0, 0, 0);
+
+ result = 0;
+ result = cb.Put(
+ 1, [](Maybe<ProfileBufferEntryWriter>& aEW) { return aEW ? 1 : 2; });
+ MOZ_RELEASE_ASSERT(result == 2);
+ VERIFY_PCB_START_END_PUSHED_CLEARED_FAILED(cb, 1, 1, 0, 0, 0);
+
+ blockIndex = cb.PutFrom(&result, 1);
+ MOZ_RELEASE_ASSERT(!blockIndex);
+ VERIFY_PCB_START_END_PUSHED_CLEARED_FAILED(cb, 1, 1, 0, 0, 0);
+
+ blockIndex = cb.PutObjects(123, result, "hello");
+ MOZ_RELEASE_ASSERT(!blockIndex);
+ VERIFY_PCB_START_END_PUSHED_CLEARED_FAILED(cb, 1, 1, 0, 0, 0);
+
+ blockIndex = cb.PutObject(123);
+ MOZ_RELEASE_ASSERT(!blockIndex);
+ VERIFY_PCB_START_END_PUSHED_CLEARED_FAILED(cb, 1, 1, 0, 0, 0);
+
+ auto chunks = cb.GetAllChunks();
+ static_assert(std::is_same_v<decltype(chunks), UniquePtr<ProfileBufferChunk>>,
+ "ProfileChunkedBuffer::GetAllChunks() should return a "
+ "UniquePtr<ProfileBufferChunk>");
+ MOZ_RELEASE_ASSERT(!chunks, "Expected no chunks when out-of-session");
+
+ bool ran = false;
+ result = 0;
+ result = cb.Read([&](ProfileChunkedBuffer::Reader* aReader) {
+ ran = true;
+ MOZ_RELEASE_ASSERT(!aReader);
+ return 3;
+ });
+ MOZ_RELEASE_ASSERT(ran);
+ MOZ_RELEASE_ASSERT(result == 3);
+
+ cb.ReadEach([](ProfileBufferEntryReader&) { MOZ_RELEASE_ASSERT(false); });
+
+ result = 0;
+ result = cb.ReadAt(nullptr, [](Maybe<ProfileBufferEntryReader>&& er) {
+ MOZ_RELEASE_ASSERT(er.isNothing());
+ return 4;
+ });
+ MOZ_RELEASE_ASSERT(result == 4);
+
+ // Use ProfileBufferChunkManagerWithLocalLimit, which will give away
+ // ProfileBufferChunks that can contain 128 bytes, using up to 1KB of memory
+ // (including usable 128 bytes and headers).
+ constexpr size_t bufferMaxSize = 1024;
+ constexpr ProfileChunkedBuffer::Length chunkMinSize = 128;
+ ProfileBufferChunkManagerWithLocalLimit cm(bufferMaxSize, chunkMinSize);
+ cb.SetChunkManager(cm);
+ VERIFY_PCB_START_END_PUSHED_CLEARED_FAILED(cb, 1, 1, 0, 0, 0);
+
+ // Let the chunk manager fulfill the initial request for an extra chunk.
+ cm.FulfillChunkRequests();
+
+ MOZ_RELEASE_ASSERT(cm.MaxTotalSize() == bufferMaxSize);
+ MOZ_RELEASE_ASSERT(cb.BufferLength().isSome());
+ MOZ_RELEASE_ASSERT(*cb.BufferLength() == bufferMaxSize);
+ VERIFY_PCB_START_END_PUSHED_CLEARED_FAILED(cb, 1, 1, 0, 0, 0);
+
+ // Write an int with the main `ReserveAndPut` function.
+ const int test = 123;
+ ran = false;
+ blockIndex = nullptr;
+ bool success = cb.ReserveAndPut(
+ []() { return sizeof(test); },
+ [&](Maybe<ProfileBufferEntryWriter>& aEW) {
+ ran = true;
+ if (!aEW) {
+ return false;
+ }
+ blockIndex = aEW->CurrentBlockIndex();
+ MOZ_RELEASE_ASSERT(aEW->RemainingBytes() == sizeof(test));
+ aEW->WriteObject(test);
+ MOZ_RELEASE_ASSERT(aEW->RemainingBytes() == 0);
+ return true;
+ });
+ MOZ_RELEASE_ASSERT(ran);
+ MOZ_RELEASE_ASSERT(success);
+ MOZ_RELEASE_ASSERT(blockIndex.ConvertToProfileBufferIndex() == 1);
+ VERIFY_PCB_START_END_PUSHED_CLEARED_FAILED(
+ cb, 1, 1 + ULEB128Size(sizeof(test)) + sizeof(test), 1, 0, 0);
+
+ ran = false;
+ result = 0;
+ result = cb.Read([&](ProfileChunkedBuffer::Reader* aReader) {
+ ran = true;
+ MOZ_RELEASE_ASSERT(!!aReader);
+ // begin() and end() should be at the range edges (verified above).
+ MOZ_RELEASE_ASSERT(
+ aReader->begin().CurrentBlockIndex().ConvertToProfileBufferIndex() ==
+ 1);
+ MOZ_RELEASE_ASSERT(
+ aReader->end().CurrentBlockIndex().ConvertToProfileBufferIndex() == 0);
+ // Null ProfileBufferBlockIndex clamped to the beginning.
+ MOZ_RELEASE_ASSERT(aReader->At(nullptr) == aReader->begin());
+ MOZ_RELEASE_ASSERT(aReader->At(blockIndex) == aReader->begin());
+ // At(begin) same as begin().
+ MOZ_RELEASE_ASSERT(aReader->At(aReader->begin().CurrentBlockIndex()) ==
+ aReader->begin());
+ // At(past block) same as end().
+ MOZ_RELEASE_ASSERT(
+ aReader->At(ProfileBufferBlockIndex::CreateFromProfileBufferIndex(
+ 1 + 1 + sizeof(test))) == aReader->end());
+
+ size_t read = 0;
+ aReader->ForEach([&](ProfileBufferEntryReader& er) {
+ ++read;
+ MOZ_RELEASE_ASSERT(er.RemainingBytes() == sizeof(test));
+ const auto value = er.ReadObject<decltype(test)>();
+ MOZ_RELEASE_ASSERT(value == test);
+ MOZ_RELEASE_ASSERT(er.RemainingBytes() == 0);
+ });
+ MOZ_RELEASE_ASSERT(read == 1);
+
+ read = 0;
+ for (auto er : *aReader) {
+ static_assert(std::is_same_v<decltype(er), ProfileBufferEntryReader>,
+ "ProfileChunkedBuffer::Reader range-for should produce "
+ "ProfileBufferEntryReader objects");
+ ++read;
+ MOZ_RELEASE_ASSERT(er.RemainingBytes() == sizeof(test));
+ const auto value = er.ReadObject<decltype(test)>();
+ MOZ_RELEASE_ASSERT(value == test);
+ MOZ_RELEASE_ASSERT(er.RemainingBytes() == 0);
+ };
+ MOZ_RELEASE_ASSERT(read == 1);
+ return 5;
+ });
+ MOZ_RELEASE_ASSERT(ran);
+ MOZ_RELEASE_ASSERT(result == 5);
+
+ // Read the int directly from the ProfileChunkedBuffer, without block index.
+ size_t read = 0;
+ cb.ReadEach([&](ProfileBufferEntryReader& er) {
+ ++read;
+ MOZ_RELEASE_ASSERT(er.RemainingBytes() == sizeof(test));
+ const auto value = er.ReadObject<decltype(test)>();
+ MOZ_RELEASE_ASSERT(value == test);
+ MOZ_RELEASE_ASSERT(er.RemainingBytes() == 0);
+ });
+ MOZ_RELEASE_ASSERT(read == 1);
+
+ // Read the int directly from the ProfileChunkedBuffer, with block index.
+ read = 0;
+ blockIndex = nullptr;
+ cb.ReadEach(
+ [&](ProfileBufferEntryReader& er, ProfileBufferBlockIndex aBlockIndex) {
+ ++read;
+ MOZ_RELEASE_ASSERT(!!aBlockIndex);
+ MOZ_RELEASE_ASSERT(!blockIndex);
+ blockIndex = aBlockIndex;
+ MOZ_RELEASE_ASSERT(er.RemainingBytes() == sizeof(test));
+ const auto value = er.ReadObject<decltype(test)>();
+ MOZ_RELEASE_ASSERT(value == test);
+ MOZ_RELEASE_ASSERT(er.RemainingBytes() == 0);
+ });
+ MOZ_RELEASE_ASSERT(read == 1);
+ MOZ_RELEASE_ASSERT(!!blockIndex);
+ MOZ_RELEASE_ASSERT(blockIndex != nullptr);
+
+ // Read the int from its block index.
+ read = 0;
+ result = 0;
+ result = cb.ReadAt(blockIndex, [&](Maybe<ProfileBufferEntryReader>&& er) {
+ ++read;
+ MOZ_RELEASE_ASSERT(er.isSome());
+ MOZ_RELEASE_ASSERT(er->CurrentBlockIndex() == blockIndex);
+ MOZ_RELEASE_ASSERT(!er->NextBlockIndex());
+ MOZ_RELEASE_ASSERT(er->RemainingBytes() == sizeof(test));
+ const auto value = er->ReadObject<decltype(test)>();
+ MOZ_RELEASE_ASSERT(value == test);
+ MOZ_RELEASE_ASSERT(er->RemainingBytes() == 0);
+ return 6;
+ });
+ MOZ_RELEASE_ASSERT(result == 6);
+ MOZ_RELEASE_ASSERT(read == 1);
+
+ MOZ_RELEASE_ASSERT(!cb.IsIndexInCurrentChunk(ProfileBufferIndex{}));
+ MOZ_RELEASE_ASSERT(
+ cb.IsIndexInCurrentChunk(blockIndex.ConvertToProfileBufferIndex()));
+ MOZ_RELEASE_ASSERT(cb.IsIndexInCurrentChunk(cb.GetState().mRangeEnd - 1));
+ MOZ_RELEASE_ASSERT(!cb.IsIndexInCurrentChunk(cb.GetState().mRangeEnd));
+
+ // No changes after reads.
+ VERIFY_PCB_START_END_PUSHED_CLEARED_FAILED(
+ cb, 1, 1 + ULEB128Size(sizeof(test)) + sizeof(test), 1, 0, 0);
+
+ // Steal the underlying ProfileBufferChunks from the ProfileChunkedBuffer.
+ chunks = cb.GetAllChunks();
+ MOZ_RELEASE_ASSERT(!!chunks, "Expected at least one chunk");
+ MOZ_RELEASE_ASSERT(!!chunks->GetNext(), "Expected two chunks");
+ MOZ_RELEASE_ASSERT(!chunks->GetNext()->GetNext(), "Expected only two chunks");
+ const ProfileChunkedBuffer::Length chunkActualSize = chunks->BufferBytes();
+ MOZ_RELEASE_ASSERT(chunkActualSize >= chunkMinSize);
+ MOZ_RELEASE_ASSERT(chunks->RangeStart() == 1);
+ MOZ_RELEASE_ASSERT(chunks->OffsetFirstBlock() == 0);
+ MOZ_RELEASE_ASSERT(chunks->OffsetPastLastBlock() == 1 + sizeof(test));
+
+ // GetAllChunks() should have advanced the index one full chunk forward.
+ VERIFY_PCB_START_END_PUSHED_CLEARED_FAILED(cb, 1 + chunkActualSize,
+ 1 + chunkActualSize, 1, 0, 0);
+
+ // Nothing more to read from the now-empty ProfileChunkedBuffer.
+ cb.ReadEach([](ProfileBufferEntryReader&) { MOZ_RELEASE_ASSERT(false); });
+ cb.ReadEach([](ProfileBufferEntryReader&, ProfileBufferBlockIndex) {
+ MOZ_RELEASE_ASSERT(false);
+ });
+ result = 0;
+ result = cb.ReadAt(nullptr, [](Maybe<ProfileBufferEntryReader>&& er) {
+ MOZ_RELEASE_ASSERT(er.isNothing());
+ return 7;
+ });
+ MOZ_RELEASE_ASSERT(result == 7);
+
+ // Read the int from the stolen chunks.
+ read = 0;
+ ProfileChunkedBuffer::ReadEach(
+ chunks.get(), nullptr,
+ [&](ProfileBufferEntryReader& er, ProfileBufferBlockIndex aBlockIndex) {
+ ++read;
+ MOZ_RELEASE_ASSERT(aBlockIndex == blockIndex);
+ MOZ_RELEASE_ASSERT(er.RemainingBytes() == sizeof(test));
+ const auto value = er.ReadObject<decltype(test)>();
+ MOZ_RELEASE_ASSERT(value == test);
+ MOZ_RELEASE_ASSERT(er.RemainingBytes() == 0);
+ });
+ MOZ_RELEASE_ASSERT(read == 1);
+
+ // No changes after reads.
+ VERIFY_PCB_START_END_PUSHED_CLEARED_FAILED(cb, 1 + chunkActualSize,
+ 1 + chunkActualSize, 1, 0, 0);
+
+ // Write lots of numbers (by memcpy), which should trigger Chunk destructions.
+ ProfileBufferBlockIndex firstBlockIndex;
+ MOZ_RELEASE_ASSERT(!firstBlockIndex);
+ ProfileBufferBlockIndex lastBlockIndex;
+ MOZ_RELEASE_ASSERT(!lastBlockIndex);
+ const size_t lots = 2 * bufferMaxSize / (1 + sizeof(int));
+ for (size_t i = 1; i < lots; ++i) {
+ ProfileBufferBlockIndex blockIndex = cb.PutFrom(&i, sizeof(i));
+ MOZ_RELEASE_ASSERT(!!blockIndex);
+ MOZ_RELEASE_ASSERT(blockIndex > firstBlockIndex);
+ if (!firstBlockIndex) {
+ firstBlockIndex = blockIndex;
+ }
+ MOZ_RELEASE_ASSERT(blockIndex > lastBlockIndex);
+ lastBlockIndex = blockIndex;
+ }
+
+ ProfileChunkedBuffer::State stateAfterPuts = cb.GetState();
+ ProfileBufferIndex startAfterPuts = stateAfterPuts.mRangeStart;
+ MOZ_RELEASE_ASSERT(startAfterPuts > 1 + chunkActualSize);
+ ProfileBufferIndex endAfterPuts = stateAfterPuts.mRangeEnd;
+ MOZ_RELEASE_ASSERT(endAfterPuts > startAfterPuts);
+ uint64_t pushedAfterPuts = stateAfterPuts.mPushedBlockCount;
+ MOZ_RELEASE_ASSERT(pushedAfterPuts > 0);
+ uint64_t clearedAfterPuts = stateAfterPuts.mClearedBlockCount;
+ MOZ_RELEASE_ASSERT(clearedAfterPuts > 0);
+ MOZ_RELEASE_ASSERT(stateAfterPuts.mFailedPutBytes == 0);
+ MOZ_RELEASE_ASSERT(!cb.IsIndexInCurrentChunk(ProfileBufferIndex{}));
+ MOZ_RELEASE_ASSERT(
+ !cb.IsIndexInCurrentChunk(blockIndex.ConvertToProfileBufferIndex()));
+ MOZ_RELEASE_ASSERT(
+ !cb.IsIndexInCurrentChunk(firstBlockIndex.ConvertToProfileBufferIndex()));
+
+ // Read extant numbers, which should at least follow each other.
+ read = 0;
+ size_t i = 0;
+ cb.ReadEach(
+ [&](ProfileBufferEntryReader& er, ProfileBufferBlockIndex aBlockIndex) {
+ ++read;
+ MOZ_RELEASE_ASSERT(!!aBlockIndex);
+ MOZ_RELEASE_ASSERT(aBlockIndex > firstBlockIndex);
+ MOZ_RELEASE_ASSERT(aBlockIndex <= lastBlockIndex);
+ MOZ_RELEASE_ASSERT(er.RemainingBytes() == sizeof(size_t));
+ const auto value = er.ReadObject<size_t>();
+ if (i == 0) {
+ i = value;
+ } else {
+ MOZ_RELEASE_ASSERT(value == ++i);
+ }
+ MOZ_RELEASE_ASSERT(er.RemainingBytes() == 0);
+ });
+ MOZ_RELEASE_ASSERT(read != 0);
+ MOZ_RELEASE_ASSERT(read < lots);
+
+ // Read first extant number.
+ read = 0;
+ i = 0;
+ blockIndex = nullptr;
+ success =
+ cb.ReadAt(firstBlockIndex, [&](Maybe<ProfileBufferEntryReader>&& er) {
+ MOZ_ASSERT(er.isSome());
+ ++read;
+ MOZ_RELEASE_ASSERT(er->CurrentBlockIndex() > firstBlockIndex);
+ MOZ_RELEASE_ASSERT(!!er->NextBlockIndex());
+ MOZ_RELEASE_ASSERT(er->NextBlockIndex() > firstBlockIndex);
+ MOZ_RELEASE_ASSERT(er->NextBlockIndex() < lastBlockIndex);
+ blockIndex = er->NextBlockIndex();
+ MOZ_RELEASE_ASSERT(er->RemainingBytes() == sizeof(size_t));
+ const auto value = er->ReadObject<size_t>();
+ MOZ_RELEASE_ASSERT(i == 0);
+ i = value;
+ MOZ_RELEASE_ASSERT(er->RemainingBytes() == 0);
+ return 7;
+ });
+ MOZ_RELEASE_ASSERT(success);
+ MOZ_RELEASE_ASSERT(read == 1);
+ // Read other extant numbers one by one.
+ do {
+ bool success =
+ cb.ReadAt(blockIndex, [&](Maybe<ProfileBufferEntryReader>&& er) {
+ MOZ_ASSERT(er.isSome());
+ ++read;
+ MOZ_RELEASE_ASSERT(er->CurrentBlockIndex() == blockIndex);
+ MOZ_RELEASE_ASSERT(!er->NextBlockIndex() ||
+ er->NextBlockIndex() > blockIndex);
+ MOZ_RELEASE_ASSERT(!er->NextBlockIndex() ||
+ er->NextBlockIndex() > firstBlockIndex);
+ MOZ_RELEASE_ASSERT(!er->NextBlockIndex() ||
+ er->NextBlockIndex() <= lastBlockIndex);
+ MOZ_RELEASE_ASSERT(er->NextBlockIndex()
+ ? blockIndex < lastBlockIndex
+ : blockIndex == lastBlockIndex,
+ "er->NextBlockIndex() should only be null when "
+ "blockIndex is at the last block");
+ blockIndex = er->NextBlockIndex();
+ MOZ_RELEASE_ASSERT(er->RemainingBytes() == sizeof(size_t));
+ const auto value = er->ReadObject<size_t>();
+ MOZ_RELEASE_ASSERT(value == ++i);
+ MOZ_RELEASE_ASSERT(er->RemainingBytes() == 0);
+ return true;
+ });
+ MOZ_RELEASE_ASSERT(success);
+ } while (blockIndex);
+ MOZ_RELEASE_ASSERT(read > 1);
+
+ // No changes after reads.
+ VERIFY_PCB_START_END_PUSHED_CLEARED_FAILED(
+ cb, startAfterPuts, endAfterPuts, pushedAfterPuts, clearedAfterPuts, 0);
+
+# ifdef DEBUG
+ // cb.Dump();
+# endif
+
+ cb.Clear();
+
+# ifdef DEBUG
+ // cb.Dump();
+# endif
+
+ ProfileChunkedBuffer::State stateAfterClear = cb.GetState();
+ ProfileBufferIndex startAfterClear = stateAfterClear.mRangeStart;
+ MOZ_RELEASE_ASSERT(startAfterClear > startAfterPuts);
+ ProfileBufferIndex endAfterClear = stateAfterClear.mRangeEnd;
+ MOZ_RELEASE_ASSERT(endAfterClear == startAfterClear);
+ MOZ_RELEASE_ASSERT(stateAfterClear.mPushedBlockCount == 0);
+ MOZ_RELEASE_ASSERT(stateAfterClear.mClearedBlockCount == 0);
+ MOZ_RELEASE_ASSERT(stateAfterClear.mFailedPutBytes == 0);
+ MOZ_RELEASE_ASSERT(!cb.IsIndexInCurrentChunk(ProfileBufferIndex{}));
+ MOZ_RELEASE_ASSERT(
+ !cb.IsIndexInCurrentChunk(blockIndex.ConvertToProfileBufferIndex()));
+ MOZ_RELEASE_ASSERT(!cb.IsIndexInCurrentChunk(stateAfterClear.mRangeEnd - 1));
+ MOZ_RELEASE_ASSERT(!cb.IsIndexInCurrentChunk(stateAfterClear.mRangeEnd));
+
+ // Start writer threads.
+ constexpr int ThreadCount = 32;
+ std::thread threads[ThreadCount];
+ for (int threadNo = 0; threadNo < ThreadCount; ++threadNo) {
+ threads[threadNo] = std::thread(
+ [&](int aThreadNo) {
+ ::SleepMilli(1);
+ constexpr int pushCount = 1024;
+ for (int push = 0; push < pushCount; ++push) {
+ // Reserve as many bytes as the thread number (but at least enough
+ // to store an int), and write an increasing int.
+ const bool success =
+ cb.Put(std::max(aThreadNo, int(sizeof(push))),
+ [&](Maybe<ProfileBufferEntryWriter>& aEW) {
+ if (!aEW) {
+ return false;
+ }
+ aEW->WriteObject(aThreadNo * 1000000 + push);
+ // Advance writer to the end.
+ for (size_t r = aEW->RemainingBytes(); r != 0; --r) {
+ aEW->WriteObject<char>('_');
+ }
+ return true;
+ });
+ MOZ_RELEASE_ASSERT(success);
+ }
+ },
+ threadNo);
+ }
+
+ // Wait for all writer threads to die.
+ for (auto&& thread : threads) {
+ thread.join();
+ }
+
+# ifdef DEBUG
+ // cb.Dump();
+# endif
+
+ ProfileChunkedBuffer::State stateAfterMTPuts = cb.GetState();
+ ProfileBufferIndex startAfterMTPuts = stateAfterMTPuts.mRangeStart;
+ MOZ_RELEASE_ASSERT(startAfterMTPuts > startAfterClear);
+ ProfileBufferIndex endAfterMTPuts = stateAfterMTPuts.mRangeEnd;
+ MOZ_RELEASE_ASSERT(endAfterMTPuts > startAfterMTPuts);
+ MOZ_RELEASE_ASSERT(stateAfterMTPuts.mPushedBlockCount > 0);
+ MOZ_RELEASE_ASSERT(stateAfterMTPuts.mClearedBlockCount > 0);
+ MOZ_RELEASE_ASSERT(stateAfterMTPuts.mFailedPutBytes == 0);
+
+ // Reset to out-of-session.
+ cb.ResetChunkManager();
+
+ ProfileChunkedBuffer::State stateAfterReset = cb.GetState();
+ ProfileBufferIndex startAfterReset = stateAfterReset.mRangeStart;
+ MOZ_RELEASE_ASSERT(startAfterReset == endAfterMTPuts);
+ ProfileBufferIndex endAfterReset = stateAfterReset.mRangeEnd;
+ MOZ_RELEASE_ASSERT(endAfterReset == startAfterReset);
+ MOZ_RELEASE_ASSERT(stateAfterReset.mPushedBlockCount == 0);
+ MOZ_RELEASE_ASSERT(stateAfterReset.mClearedBlockCount == 0);
+ MOZ_RELEASE_ASSERT(stateAfterReset.mFailedPutBytes == 0);
+
+ success = cb.ReserveAndPut(
+ []() {
+ MOZ_RELEASE_ASSERT(false);
+ return 1;
+ },
+ [](Maybe<ProfileBufferEntryWriter>& aEW) { return !!aEW; });
+ MOZ_RELEASE_ASSERT(!success);
+ VERIFY_PCB_START_END_PUSHED_CLEARED_FAILED(cb, startAfterReset, endAfterReset,
+ 0, 0, 0);
+
+ success =
+ cb.Put(1, [](Maybe<ProfileBufferEntryWriter>& aEW) { return !!aEW; });
+ MOZ_RELEASE_ASSERT(!success);
+ VERIFY_PCB_START_END_PUSHED_CLEARED_FAILED(cb, startAfterReset, endAfterReset,
+ 0, 0, 0);
+
+ blockIndex = cb.PutFrom(&success, 1);
+ MOZ_RELEASE_ASSERT(!blockIndex);
+ VERIFY_PCB_START_END_PUSHED_CLEARED_FAILED(cb, startAfterReset, endAfterReset,
+ 0, 0, 0);
+
+ blockIndex = cb.PutObjects(123, success, "hello");
+ MOZ_RELEASE_ASSERT(!blockIndex);
+ VERIFY_PCB_START_END_PUSHED_CLEARED_FAILED(cb, startAfterReset, endAfterReset,
+ 0, 0, 0);
+
+ blockIndex = cb.PutObject(123);
+ MOZ_RELEASE_ASSERT(!blockIndex);
+ VERIFY_PCB_START_END_PUSHED_CLEARED_FAILED(cb, startAfterReset, endAfterReset,
+ 0, 0, 0);
+
+ chunks = cb.GetAllChunks();
+ MOZ_RELEASE_ASSERT(!chunks, "Expected no chunks when out-of-session");
+ VERIFY_PCB_START_END_PUSHED_CLEARED_FAILED(cb, startAfterReset, endAfterReset,
+ 0, 0, 0);
+
+ cb.ReadEach([](ProfileBufferEntryReader&) { MOZ_RELEASE_ASSERT(false); });
+ VERIFY_PCB_START_END_PUSHED_CLEARED_FAILED(cb, startAfterReset, endAfterReset,
+ 0, 0, 0);
+
+ success = cb.ReadAt(nullptr, [](Maybe<ProfileBufferEntryReader>&& er) {
+ MOZ_RELEASE_ASSERT(er.isNothing());
+ return true;
+ });
+ MOZ_RELEASE_ASSERT(success);
+ VERIFY_PCB_START_END_PUSHED_CLEARED_FAILED(cb, startAfterReset, endAfterReset,
+ 0, 0, 0);
+
+ printf("TestChunkedBuffer done\n");
+}
+
+static void TestChunkedBufferSingle() {
+ printf("TestChunkedBufferSingle...\n");
+
+ constexpr ProfileChunkedBuffer::Length chunkMinSize = 128;
+
+ // Create a ProfileChunkedBuffer that will own&use a
+ // ProfileBufferChunkManagerSingle, which will give away one
+ // ProfileBufferChunk that can contain 128 bytes.
+ ProfileChunkedBuffer cbSingle(
+ ProfileChunkedBuffer::ThreadSafety::WithoutMutex,
+ MakeUnique<ProfileBufferChunkManagerSingle>(chunkMinSize));
+
+ MOZ_RELEASE_ASSERT(cbSingle.BufferLength().isSome());
+ const ProfileChunkedBuffer::Length bufferBytes = *cbSingle.BufferLength();
+ MOZ_RELEASE_ASSERT(bufferBytes >= chunkMinSize);
+
+ VERIFY_PCB_START_END_PUSHED_CLEARED_FAILED(cbSingle, 1, 1, 0, 0, 0);
+
+ // We will write this many blocks to fill the chunk.
+ constexpr size_t testBlocks = 4;
+ const ProfileChunkedBuffer::Length blockBytes = bufferBytes / testBlocks;
+ MOZ_RELEASE_ASSERT(ULEB128Size(blockBytes) == 1,
+ "This test assumes block sizes are small enough so that "
+ "their ULEB128-encoded size is 1 byte");
+ const ProfileChunkedBuffer::Length entryBytes =
+ blockBytes - ULEB128Size(blockBytes);
+
+ // First buffer-filling test: Try to write a too-big entry at the end of the
+ // chunk.
+
+ // Write all but one block.
+ for (size_t i = 0; i < testBlocks - 1; ++i) {
+ cbSingle.Put(entryBytes, [&](Maybe<ProfileBufferEntryWriter>& aEW) {
+ MOZ_RELEASE_ASSERT(aEW.isSome());
+ while (aEW->RemainingBytes() > 0) {
+ **aEW = '0' + i;
+ ++(*aEW);
+ }
+ });
+ VERIFY_PCB_START_END_PUSHED_CLEARED_FAILED(
+ cbSingle, 1, 1 + blockBytes * (i + 1), i + 1, 0, 0);
+ }
+
+ // Write the last block so that it's too big (by 1 byte) to fit in the chunk,
+ // this should fail.
+ const ProfileChunkedBuffer::Length remainingBytesForLastBlock =
+ bufferBytes - blockBytes * (testBlocks - 1);
+ MOZ_RELEASE_ASSERT(ULEB128Size(remainingBytesForLastBlock) == 1,
+ "This test assumes block sizes are small enough so that "
+ "their ULEB128-encoded size is 1 byte");
+ const ProfileChunkedBuffer::Length entryToFitRemainingBytes =
+ remainingBytesForLastBlock - ULEB128Size(remainingBytesForLastBlock);
+ cbSingle.Put(entryToFitRemainingBytes + 1,
+ [&](Maybe<ProfileBufferEntryWriter>& aEW) {
+ MOZ_RELEASE_ASSERT(aEW.isNothing());
+ });
+ // The buffer state should not have changed, apart from the failed bytes.
+ VERIFY_PCB_START_END_PUSHED_CLEARED_FAILED(
+ cbSingle, 1, 1 + blockBytes * (testBlocks - 1), testBlocks - 1, 0,
+ remainingBytesForLastBlock + 1);
+
+ size_t read = 0;
+ cbSingle.ReadEach([&](ProfileBufferEntryReader& aER) {
+ MOZ_RELEASE_ASSERT(aER.RemainingBytes() == entryBytes);
+ while (aER.RemainingBytes() > 0) {
+ MOZ_RELEASE_ASSERT(*aER == '0' + read);
+ ++aER;
+ }
+ ++read;
+ });
+ MOZ_RELEASE_ASSERT(read == testBlocks - 1);
+
+ // ~Interlude~ Test AppendContent:
+ // Create another ProfileChunkedBuffer that will use a
+ // ProfileBufferChunkManagerWithLocalLimit, which will give away
+ // ProfileBufferChunks that can contain 128 bytes, using up to 1KB of memory
+ // (including usable 128 bytes and headers).
+ constexpr size_t bufferMaxSize = 1024;
+ ProfileBufferChunkManagerWithLocalLimit cmTarget(bufferMaxSize, chunkMinSize);
+ ProfileChunkedBuffer cbTarget(ProfileChunkedBuffer::ThreadSafety::WithMutex,
+ cmTarget);
+
+ // It should start empty.
+ cbTarget.ReadEach(
+ [](ProfileBufferEntryReader&) { MOZ_RELEASE_ASSERT(false); });
+ VERIFY_PCB_START_END_PUSHED_CLEARED_FAILED(cbTarget, 1, 1, 0, 0, 0);
+
+ // Copy the contents from cbSingle to cbTarget.
+ cbTarget.AppendContents(cbSingle);
+
+ // And verify that we now have the same contents in cbTarget.
+ read = 0;
+ cbTarget.ReadEach([&](ProfileBufferEntryReader& aER) {
+ MOZ_RELEASE_ASSERT(aER.RemainingBytes() == entryBytes);
+ while (aER.RemainingBytes() > 0) {
+ MOZ_RELEASE_ASSERT(*aER == '0' + read);
+ ++aER;
+ }
+ ++read;
+ });
+ MOZ_RELEASE_ASSERT(read == testBlocks - 1);
+ // The state should be the same as the source.
+ VERIFY_PCB_START_END_PUSHED_CLEARED_FAILED(
+ cbTarget, 1, 1 + blockBytes * (testBlocks - 1), testBlocks - 1, 0, 0);
+
+# ifdef DEBUG
+ // cbSingle.Dump();
+ // cbTarget.Dump();
+# endif
+
+ // Because we failed to write a too-big chunk above, the chunk was marked
+ // full, so that entries should be consistently rejected from now on.
+ cbSingle.Put(1, [&](Maybe<ProfileBufferEntryWriter>& aEW) {
+ MOZ_RELEASE_ASSERT(aEW.isNothing());
+ });
+ VERIFY_PCB_START_END_PUSHED_CLEARED_FAILED(
+ cbSingle, 1, 1 + blockBytes * ((testBlocks - 1)), testBlocks - 1, 0,
+ remainingBytesForLastBlock + 1 + ULEB128Size(1u) + 1);
+
+ // Clear the buffer before the next test.
+
+ cbSingle.Clear();
+ // Clear() should move the index to the next chunk range -- even if it's
+ // really reusing the same chunk.
+ VERIFY_PCB_START_END_PUSHED_CLEARED_FAILED(cbSingle, 1 + bufferBytes,
+ 1 + bufferBytes, 0, 0, 0);
+ cbSingle.ReadEach(
+ [&](ProfileBufferEntryReader& aER) { MOZ_RELEASE_ASSERT(false); });
+
+ // Second buffer-filling test: Try to write a final entry that just fits at
+ // the end of the chunk.
+
+ // Write all but one block.
+ for (size_t i = 0; i < testBlocks - 1; ++i) {
+ cbSingle.Put(entryBytes, [&](Maybe<ProfileBufferEntryWriter>& aEW) {
+ MOZ_RELEASE_ASSERT(aEW.isSome());
+ while (aEW->RemainingBytes() > 0) {
+ **aEW = 'a' + i;
+ ++(*aEW);
+ }
+ });
+ VERIFY_PCB_START_END_PUSHED_CLEARED_FAILED(
+ cbSingle, 1 + bufferBytes, 1 + bufferBytes + blockBytes * (i + 1),
+ i + 1, 0, 0);
+ }
+
+ read = 0;
+ cbSingle.ReadEach([&](ProfileBufferEntryReader& aER) {
+ MOZ_RELEASE_ASSERT(aER.RemainingBytes() == entryBytes);
+ while (aER.RemainingBytes() > 0) {
+ MOZ_RELEASE_ASSERT(*aER == 'a' + read);
+ ++aER;
+ }
+ ++read;
+ });
+ MOZ_RELEASE_ASSERT(read == testBlocks - 1);
+
+ // Write the last block so that it fits exactly in the chunk.
+ cbSingle.Put(entryToFitRemainingBytes,
+ [&](Maybe<ProfileBufferEntryWriter>& aEW) {
+ MOZ_RELEASE_ASSERT(aEW.isSome());
+ while (aEW->RemainingBytes() > 0) {
+ **aEW = 'a' + (testBlocks - 1);
+ ++(*aEW);
+ }
+ });
+ VERIFY_PCB_START_END_PUSHED_CLEARED_FAILED(
+ cbSingle, 1 + bufferBytes, 1 + bufferBytes + blockBytes * testBlocks,
+ testBlocks, 0, 0);
+
+ read = 0;
+ cbSingle.ReadEach([&](ProfileBufferEntryReader& aER) {
+ MOZ_RELEASE_ASSERT(
+ aER.RemainingBytes() ==
+ ((read < testBlocks) ? entryBytes : entryToFitRemainingBytes));
+ while (aER.RemainingBytes() > 0) {
+ MOZ_RELEASE_ASSERT(*aER == 'a' + read);
+ ++aER;
+ }
+ ++read;
+ });
+ MOZ_RELEASE_ASSERT(read == testBlocks);
+
+ // Because the single chunk has been filled, it shouldn't be possible to write
+ // more entries.
+ cbSingle.Put(1, [&](Maybe<ProfileBufferEntryWriter>& aEW) {
+ MOZ_RELEASE_ASSERT(aEW.isNothing());
+ });
+ VERIFY_PCB_START_END_PUSHED_CLEARED_FAILED(
+ cbSingle, 1 + bufferBytes, 1 + bufferBytes + blockBytes * testBlocks,
+ testBlocks, 0, ULEB128Size(1u) + 1);
+
+ cbSingle.Clear();
+ // Clear() should move the index to the next chunk range -- even if it's
+ // really reusing the same chunk.
+ VERIFY_PCB_START_END_PUSHED_CLEARED_FAILED(cbSingle, 1 + bufferBytes * 2,
+ 1 + bufferBytes * 2, 0, 0, 0);
+ cbSingle.ReadEach(
+ [&](ProfileBufferEntryReader& aER) { MOZ_RELEASE_ASSERT(false); });
+
+ // Clear() recycles the released chunk, so we should be able to record new
+ // entries.
+ cbSingle.Put(entryBytes, [&](Maybe<ProfileBufferEntryWriter>& aEW) {
+ MOZ_RELEASE_ASSERT(aEW.isSome());
+ while (aEW->RemainingBytes() > 0) {
+ **aEW = 'x';
+ ++(*aEW);
+ }
+ });
+ VERIFY_PCB_START_END_PUSHED_CLEARED_FAILED(
+ cbSingle, 1 + bufferBytes * 2,
+ 1 + bufferBytes * 2 + ULEB128Size(entryBytes) + entryBytes, 1, 0, 0);
+ read = 0;
+ cbSingle.ReadEach([&](ProfileBufferEntryReader& aER) {
+ MOZ_RELEASE_ASSERT(read == 0);
+ MOZ_RELEASE_ASSERT(aER.RemainingBytes() == entryBytes);
+ while (aER.RemainingBytes() > 0) {
+ MOZ_RELEASE_ASSERT(*aER == 'x');
+ ++aER;
+ }
+ ++read;
+ });
+ MOZ_RELEASE_ASSERT(read == 1);
+
+ printf("TestChunkedBufferSingle done\n");
+}
+
+static void TestModuloBuffer(ModuloBuffer<>& mb, uint32_t MBSize) {
+ using MB = ModuloBuffer<>;
+
+ MOZ_RELEASE_ASSERT(mb.BufferLength().Value() == MBSize);
+
+ // Iterator comparisons.
+ MOZ_RELEASE_ASSERT(mb.ReaderAt(2) == mb.ReaderAt(2));
+ MOZ_RELEASE_ASSERT(mb.ReaderAt(2) != mb.ReaderAt(3));
+ MOZ_RELEASE_ASSERT(mb.ReaderAt(2) < mb.ReaderAt(3));
+ MOZ_RELEASE_ASSERT(mb.ReaderAt(2) <= mb.ReaderAt(2));
+ MOZ_RELEASE_ASSERT(mb.ReaderAt(2) <= mb.ReaderAt(3));
+ MOZ_RELEASE_ASSERT(mb.ReaderAt(3) > mb.ReaderAt(2));
+ MOZ_RELEASE_ASSERT(mb.ReaderAt(2) >= mb.ReaderAt(2));
+ MOZ_RELEASE_ASSERT(mb.ReaderAt(3) >= mb.ReaderAt(2));
+
+ // Iterators indices don't wrap around (even though they may be pointing at
+ // the same location).
+ MOZ_RELEASE_ASSERT(mb.ReaderAt(2) != mb.ReaderAt(MBSize + 2));
+ MOZ_RELEASE_ASSERT(mb.ReaderAt(MBSize + 2) != mb.ReaderAt(2));
+
+ // Dereference.
+ static_assert(std::is_same<decltype(*mb.ReaderAt(0)), const MB::Byte&>::value,
+ "Dereferencing from a reader should return const Byte*");
+ static_assert(std::is_same<decltype(*mb.WriterAt(0)), MB::Byte&>::value,
+ "Dereferencing from a writer should return Byte*");
+ // Contiguous between 0 and MBSize-1.
+ MOZ_RELEASE_ASSERT(&*mb.ReaderAt(MBSize - 1) ==
+ &*mb.ReaderAt(0) + (MBSize - 1));
+ // Wraps around.
+ MOZ_RELEASE_ASSERT(&*mb.ReaderAt(MBSize) == &*mb.ReaderAt(0));
+ MOZ_RELEASE_ASSERT(&*mb.ReaderAt(MBSize + MBSize - 1) ==
+ &*mb.ReaderAt(MBSize - 1));
+ MOZ_RELEASE_ASSERT(&*mb.ReaderAt(MBSize + MBSize) == &*mb.ReaderAt(0));
+ // Power of 2 modulo wrapping.
+ MOZ_RELEASE_ASSERT(&*mb.ReaderAt(uint32_t(-1)) == &*mb.ReaderAt(MBSize - 1));
+ MOZ_RELEASE_ASSERT(&*mb.ReaderAt(static_cast<MB::Index>(-1)) ==
+ &*mb.ReaderAt(MBSize - 1));
+
+ // Arithmetic.
+ MB::Reader arit = mb.ReaderAt(0);
+ MOZ_RELEASE_ASSERT(++arit == mb.ReaderAt(1));
+ MOZ_RELEASE_ASSERT(arit == mb.ReaderAt(1));
+
+ MOZ_RELEASE_ASSERT(--arit == mb.ReaderAt(0));
+ MOZ_RELEASE_ASSERT(arit == mb.ReaderAt(0));
+
+ MOZ_RELEASE_ASSERT(arit++ == mb.ReaderAt(0));
+ MOZ_RELEASE_ASSERT(arit == mb.ReaderAt(1));
+
+ MOZ_RELEASE_ASSERT(arit-- == mb.ReaderAt(1));
+ MOZ_RELEASE_ASSERT(arit == mb.ReaderAt(0));
+
+ MOZ_RELEASE_ASSERT(arit + 3 == mb.ReaderAt(3));
+ MOZ_RELEASE_ASSERT(arit == mb.ReaderAt(0));
+
+ MOZ_RELEASE_ASSERT(4 + arit == mb.ReaderAt(4));
+ MOZ_RELEASE_ASSERT(arit == mb.ReaderAt(0));
+
+ // (Can't have assignments inside asserts, hence the split.)
+ const bool checkPlusEq = ((arit += 3) == mb.ReaderAt(3));
+ MOZ_RELEASE_ASSERT(checkPlusEq);
+ MOZ_RELEASE_ASSERT(arit == mb.ReaderAt(3));
+
+ MOZ_RELEASE_ASSERT((arit - 2) == mb.ReaderAt(1));
+ MOZ_RELEASE_ASSERT(arit == mb.ReaderAt(3));
+
+ const bool checkMinusEq = ((arit -= 2) == mb.ReaderAt(1));
+ MOZ_RELEASE_ASSERT(checkMinusEq);
+ MOZ_RELEASE_ASSERT(arit == mb.ReaderAt(1));
+
+ // Random access.
+ MOZ_RELEASE_ASSERT(&arit[3] == &*(arit + 3));
+ MOZ_RELEASE_ASSERT(arit == mb.ReaderAt(1));
+
+ // Iterator difference.
+ MOZ_RELEASE_ASSERT(mb.ReaderAt(3) - mb.ReaderAt(1) == 2);
+ MOZ_RELEASE_ASSERT(mb.ReaderAt(1) - mb.ReaderAt(3) == MB::Index(-2));
+
+ // Only testing Writer, as Reader is just a subset with no code differences.
+ MB::Writer it = mb.WriterAt(0);
+ MOZ_RELEASE_ASSERT(it.CurrentIndex() == 0);
+
+ // Write two characters at the start.
+ it.WriteObject('x');
+ it.WriteObject('y');
+
+ // Backtrack to read them.
+ it -= 2;
+ // PeekObject should read without moving.
+ MOZ_RELEASE_ASSERT(it.PeekObject<char>() == 'x');
+ MOZ_RELEASE_ASSERT(it.CurrentIndex() == 0);
+ // ReadObject should read and move past the character.
+ MOZ_RELEASE_ASSERT(it.ReadObject<char>() == 'x');
+ MOZ_RELEASE_ASSERT(it.CurrentIndex() == 1);
+ MOZ_RELEASE_ASSERT(it.PeekObject<char>() == 'y');
+ MOZ_RELEASE_ASSERT(it.CurrentIndex() == 1);
+ MOZ_RELEASE_ASSERT(it.ReadObject<char>() == 'y');
+ MOZ_RELEASE_ASSERT(it.CurrentIndex() == 2);
+
+ // Checking that a reader can be created from a writer.
+ MB::Reader it2(it);
+ MOZ_RELEASE_ASSERT(it2.CurrentIndex() == 2);
+ // Or assigned.
+ it2 = it;
+ MOZ_RELEASE_ASSERT(it2.CurrentIndex() == 2);
+
+ // Iterator traits.
+ static_assert(std::is_same<std::iterator_traits<MB::Reader>::difference_type,
+ MB::Index>::value,
+ "ModuloBuffer::Reader::difference_type should be Index");
+ static_assert(std::is_same<std::iterator_traits<MB::Reader>::value_type,
+ MB::Byte>::value,
+ "ModuloBuffer::Reader::value_type should be Byte");
+ static_assert(std::is_same<std::iterator_traits<MB::Reader>::pointer,
+ const MB::Byte*>::value,
+ "ModuloBuffer::Reader::pointer should be const Byte*");
+ static_assert(std::is_same<std::iterator_traits<MB::Reader>::reference,
+ const MB::Byte&>::value,
+ "ModuloBuffer::Reader::reference should be const Byte&");
+ static_assert(std::is_base_of<
+ std::input_iterator_tag,
+ std::iterator_traits<MB::Reader>::iterator_category>::value,
+ "ModuloBuffer::Reader::iterator_category should be derived "
+ "from input_iterator_tag");
+ static_assert(std::is_base_of<
+ std::forward_iterator_tag,
+ std::iterator_traits<MB::Reader>::iterator_category>::value,
+ "ModuloBuffer::Reader::iterator_category should be derived "
+ "from forward_iterator_tag");
+ static_assert(std::is_base_of<
+ std::bidirectional_iterator_tag,
+ std::iterator_traits<MB::Reader>::iterator_category>::value,
+ "ModuloBuffer::Reader::iterator_category should be derived "
+ "from bidirectional_iterator_tag");
+ static_assert(
+ std::is_same<std::iterator_traits<MB::Reader>::iterator_category,
+ std::random_access_iterator_tag>::value,
+ "ModuloBuffer::Reader::iterator_category should be "
+ "random_access_iterator_tag");
+
+ // Use as input iterator by std::string constructor (which is only considered
+ // with proper input iterators.)
+ std::string s(mb.ReaderAt(0), mb.ReaderAt(2));
+ MOZ_RELEASE_ASSERT(s == "xy");
+
+ // Write 4-byte number at index 2.
+ it.WriteObject(int32_t(123));
+ MOZ_RELEASE_ASSERT(it.CurrentIndex() == 6);
+ // And another, which should now wrap around (but index continues on.)
+ it.WriteObject(int32_t(456));
+ MOZ_RELEASE_ASSERT(it.CurrentIndex() == MBSize + 2);
+ // Even though index==MBSize+2, we can read the object we wrote at 2.
+ MOZ_RELEASE_ASSERT(it.ReadObject<int32_t>() == 123);
+ MOZ_RELEASE_ASSERT(it.CurrentIndex() == MBSize + 6);
+ // And similarly, index MBSize+6 points at the same location as index 6.
+ MOZ_RELEASE_ASSERT(it.ReadObject<int32_t>() == 456);
+ MOZ_RELEASE_ASSERT(it.CurrentIndex() == MBSize + MBSize + 2);
+}
+
+void TestModuloBuffer() {
+ printf("TestModuloBuffer...\n");
+
+ // Testing ModuloBuffer with default template arguments.
+ using MB = ModuloBuffer<>;
+
+ // Only 8-byte buffers, to easily test wrap-around.
+ constexpr uint32_t MBSize = 8;
+
+ // MB with self-allocated heap buffer.
+ MB mbByLength(MakePowerOfTwo32<MBSize>());
+ TestModuloBuffer(mbByLength, MBSize);
+
+ // MB taking ownership of a provided UniquePtr to a buffer.
+ auto uniqueBuffer = MakeUnique<uint8_t[]>(MBSize);
+ MB mbByUniquePtr(MakeUnique<uint8_t[]>(MBSize), MakePowerOfTwo32<MBSize>());
+ TestModuloBuffer(mbByUniquePtr, MBSize);
+
+ // MB using part of a buffer on the stack. The buffer is three times the
+ // required size: The middle third is where ModuloBuffer will work, the first
+ // and last thirds are only used to later verify that ModuloBuffer didn't go
+ // out of its bounds.
+ uint8_t buffer[MBSize * 3];
+ // Pre-fill the buffer with a known pattern, so we can later see what changed.
+ for (size_t i = 0; i < MBSize * 3; ++i) {
+ buffer[i] = uint8_t('A' + i);
+ }
+ MB mbByBuffer(&buffer[MBSize], MakePowerOfTwo32<MBSize>());
+ TestModuloBuffer(mbByBuffer, MBSize);
+
+ // Check that only the provided stack-based sub-buffer was modified.
+ uint32_t changed = 0;
+ for (size_t i = MBSize; i < MBSize * 2; ++i) {
+ changed += (buffer[i] == uint8_t('A' + i)) ? 0 : 1;
+ }
+ // Expect at least 75% changes.
+ MOZ_RELEASE_ASSERT(changed >= MBSize * 6 / 8);
+
+ // Everything around the sub-buffer should be unchanged.
+ for (size_t i = 0; i < MBSize; ++i) {
+ MOZ_RELEASE_ASSERT(buffer[i] == uint8_t('A' + i));
+ }
+ for (size_t i = MBSize * 2; i < MBSize * 3; ++i) {
+ MOZ_RELEASE_ASSERT(buffer[i] == uint8_t('A' + i));
+ }
+
+ // Check that move-construction is allowed. This verifies that we do not
+ // crash from a double free, when `mbByBuffer` and `mbByStolenBuffer` are both
+ // destroyed at the end of this function.
+ MB mbByStolenBuffer = std::move(mbByBuffer);
+ TestModuloBuffer(mbByStolenBuffer, MBSize);
+
+ // Check that only the provided stack-based sub-buffer was modified.
+ changed = 0;
+ for (size_t i = MBSize; i < MBSize * 2; ++i) {
+ changed += (buffer[i] == uint8_t('A' + i)) ? 0 : 1;
+ }
+ // Expect at least 75% changes.
+ MOZ_RELEASE_ASSERT(changed >= MBSize * 6 / 8);
+
+ // Everything around the sub-buffer should be unchanged.
+ for (size_t i = 0; i < MBSize; ++i) {
+ MOZ_RELEASE_ASSERT(buffer[i] == uint8_t('A' + i));
+ }
+ for (size_t i = MBSize * 2; i < MBSize * 3; ++i) {
+ MOZ_RELEASE_ASSERT(buffer[i] == uint8_t('A' + i));
+ }
+
+ // This test function does a `ReadInto` as directed, and checks that the
+ // result is the same as if the copy had been done manually byte-by-byte.
+ // `TestReadInto(3, 7, 2)` copies from index 3 to index 7, 2 bytes long.
+ // Return the output string (from `ReadInto`) for external checks.
+ auto TestReadInto = [](MB::Index aReadFrom, MB::Index aWriteTo,
+ MB::Length aBytes) {
+ constexpr uint32_t TRISize = 16;
+
+ // Prepare an input buffer, all different elements.
+ uint8_t input[TRISize + 1] = "ABCDEFGHIJKLMNOP";
+ const MB mbInput(input, MakePowerOfTwo32<TRISize>());
+
+ // Prepare an output buffer, different from input.
+ uint8_t output[TRISize + 1] = "abcdefghijklmnop";
+ MB mbOutput(output, MakePowerOfTwo32<TRISize>());
+
+ // Run ReadInto.
+ auto writer = mbOutput.WriterAt(aWriteTo);
+ mbInput.ReaderAt(aReadFrom).ReadInto(writer, aBytes);
+
+ // Do the same operation manually.
+ uint8_t outputCheck[TRISize + 1] = "abcdefghijklmnop";
+ MB mbOutputCheck(outputCheck, MakePowerOfTwo32<TRISize>());
+ auto readerCheck = mbInput.ReaderAt(aReadFrom);
+ auto writerCheck = mbOutputCheck.WriterAt(aWriteTo);
+ for (MB::Length i = 0; i < aBytes; ++i) {
+ *writerCheck++ = *readerCheck++;
+ }
+
+ // Compare the two outputs.
+ for (uint32_t i = 0; i < TRISize; ++i) {
+# ifdef TEST_MODULOBUFFER_FAILURE_DEBUG
+ // Only used when debugging failures.
+ if (output[i] != outputCheck[i]) {
+ printf(
+ "*** from=%u to=%u bytes=%u i=%u\ninput: '%s'\noutput: "
+ "'%s'\ncheck: '%s'\n",
+ unsigned(aReadFrom), unsigned(aWriteTo), unsigned(aBytes),
+ unsigned(i), input, output, outputCheck);
+ }
+# endif
+ MOZ_RELEASE_ASSERT(output[i] == outputCheck[i]);
+ }
+
+# ifdef TEST_MODULOBUFFER_HELPER
+ // Only used when adding more tests.
+ printf("*** from=%u to=%u bytes=%u output: %s\n", unsigned(aReadFrom),
+ unsigned(aWriteTo), unsigned(aBytes), output);
+# endif
+
+ return std::string(reinterpret_cast<const char*>(output));
+ };
+
+ // A few manual checks:
+ constexpr uint32_t TRISize = 16;
+ MOZ_RELEASE_ASSERT(TestReadInto(0, 0, 0) == "abcdefghijklmnop");
+ MOZ_RELEASE_ASSERT(TestReadInto(0, 0, TRISize) == "ABCDEFGHIJKLMNOP");
+ MOZ_RELEASE_ASSERT(TestReadInto(0, 5, TRISize) == "LMNOPABCDEFGHIJK");
+ MOZ_RELEASE_ASSERT(TestReadInto(5, 0, TRISize) == "FGHIJKLMNOPABCDE");
+
+ // Test everything! (16^3 = 4096, not too much.)
+ for (MB::Index r = 0; r < TRISize; ++r) {
+ for (MB::Index w = 0; w < TRISize; ++w) {
+ for (MB::Length len = 0; len < TRISize; ++len) {
+ TestReadInto(r, w, len);
+ }
+ }
+ }
+
+ printf("TestModuloBuffer done\n");
+}
+
+void TestBlocksRingBufferAPI() {
+ printf("TestBlocksRingBufferAPI...\n");
+
+ // Create a 16-byte buffer, enough to store up to 3 entries (1 byte size + 4
+ // bytes uint64_t).
+ constexpr uint32_t MBSize = 16;
+ uint8_t buffer[MBSize * 3];
+ for (size_t i = 0; i < MBSize * 3; ++i) {
+ buffer[i] = uint8_t('A' + i);
+ }
+
+ // Start a temporary block to constrain buffer lifetime.
+ {
+ BlocksRingBuffer rb(BlocksRingBuffer::ThreadSafety::WithMutex,
+ &buffer[MBSize], MakePowerOfTwo32<MBSize>());
+
+# define VERIFY_START_END_PUSHED_CLEARED(aStart, aEnd, aPushed, aCleared) \
+ { \
+ BlocksRingBuffer::State state = rb.GetState(); \
+ MOZ_RELEASE_ASSERT(state.mRangeStart.ConvertToProfileBufferIndex() == \
+ (aStart)); \
+ MOZ_RELEASE_ASSERT(state.mRangeEnd.ConvertToProfileBufferIndex() == \
+ (aEnd)); \
+ MOZ_RELEASE_ASSERT(state.mPushedBlockCount == (aPushed)); \
+ MOZ_RELEASE_ASSERT(state.mClearedBlockCount == (aCleared)); \
+ }
+
+ // All entries will contain one 32-bit number. The resulting blocks will
+ // have the following structure:
+ // - 1 byte for the LEB128 size of 4
+ // - 4 bytes for the number.
+ // E.g., if we have entries with `123` and `456`:
+ // .-- Index 0 reserved for empty ProfileBufferBlockIndex, nothing there.
+ // | .-- first readable block at index 1
+ // | |.-- first block at index 1
+ // | ||.-- 1 byte for the entry size, which is `4` (32 bits)
+ // | ||| .-- entry starts at index 2, contains 32-bit int
+ // | ||| | .-- entry and block finish *after* index 5 (so 6)
+ // | ||| | | .-- second block starts at index 6
+ // | ||| | | | etc.
+ // | ||| | | | .-- End readable blocks: 11
+ // v vvv v v V v
+ // 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
+ // - S[4 | int(123) ] [4 | int(456) ]E
+
+ // Empty buffer to start with.
+ // Start&end indices still at 1 (0 is reserved for the default
+ // ProfileBufferBlockIndex{} that cannot point at a valid entry), nothing
+ // cleared.
+ VERIFY_START_END_PUSHED_CLEARED(1, 1, 0, 0);
+
+ // Default ProfileBufferBlockIndex.
+ ProfileBufferBlockIndex bi0;
+ if (bi0) {
+ MOZ_RELEASE_ASSERT(false,
+ "if (ProfileBufferBlockIndex{}) should fail test");
+ }
+ if (!bi0) {
+ } else {
+ MOZ_RELEASE_ASSERT(false,
+ "if (!ProfileBufferBlockIndex{}) should succeed test");
+ }
+ MOZ_RELEASE_ASSERT(!bi0);
+ MOZ_RELEASE_ASSERT(bi0 == bi0);
+ MOZ_RELEASE_ASSERT(bi0 <= bi0);
+ MOZ_RELEASE_ASSERT(bi0 >= bi0);
+ MOZ_RELEASE_ASSERT(!(bi0 != bi0));
+ MOZ_RELEASE_ASSERT(!(bi0 < bi0));
+ MOZ_RELEASE_ASSERT(!(bi0 > bi0));
+
+ // Default ProfileBufferBlockIndex can be used, but returns no valid entry.
+ rb.ReadAt(bi0, [](Maybe<ProfileBufferEntryReader>&& aMaybeReader) {
+ MOZ_RELEASE_ASSERT(aMaybeReader.isNothing());
+ });
+
+ // Push `1` directly.
+ MOZ_RELEASE_ASSERT(
+ rb.PutObject(uint32_t(1)).ConvertToProfileBufferIndex() == 1);
+ // 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
+ // - S[4 | int(1) ]E
+ VERIFY_START_END_PUSHED_CLEARED(1, 6, 1, 0);
+
+ // Push `2` through ReserveAndPut, check output ProfileBufferBlockIndex.
+ auto bi2 = rb.ReserveAndPut([]() { return sizeof(uint32_t); },
+ [](Maybe<ProfileBufferEntryWriter>& aEW) {
+ MOZ_RELEASE_ASSERT(aEW.isSome());
+ aEW->WriteObject(uint32_t(2));
+ return aEW->CurrentBlockIndex();
+ });
+ static_assert(std::is_same<decltype(bi2), ProfileBufferBlockIndex>::value,
+ "All index-returning functions should return a "
+ "ProfileBufferBlockIndex");
+ MOZ_RELEASE_ASSERT(bi2.ConvertToProfileBufferIndex() == 6);
+ // 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
+ // - S[4 | int(1) ] [4 | int(2) ]E
+ VERIFY_START_END_PUSHED_CLEARED(1, 11, 2, 0);
+
+ // Check single entry at bi2, store next block index.
+ auto i2Next =
+ rb.ReadAt(bi2, [bi2](Maybe<ProfileBufferEntryReader>&& aMaybeReader) {
+ MOZ_RELEASE_ASSERT(aMaybeReader.isSome());
+ MOZ_RELEASE_ASSERT(aMaybeReader->CurrentBlockIndex() == bi2);
+ MOZ_RELEASE_ASSERT(aMaybeReader->NextBlockIndex() == nullptr);
+ size_t entrySize = aMaybeReader->RemainingBytes();
+ MOZ_RELEASE_ASSERT(aMaybeReader->ReadObject<uint32_t>() == 2);
+ // The next block index is after this block, which is made of the
+ // entry size (coded as ULEB128) followed by the entry itself.
+ return bi2.ConvertToProfileBufferIndex() + ULEB128Size(entrySize) +
+ entrySize;
+ });
+ auto bi2Next = rb.GetState().mRangeEnd;
+ MOZ_RELEASE_ASSERT(bi2Next.ConvertToProfileBufferIndex() == i2Next);
+ // bi2Next is at the end, nothing to read.
+ rb.ReadAt(bi2Next, [](Maybe<ProfileBufferEntryReader>&& aMaybeReader) {
+ MOZ_RELEASE_ASSERT(aMaybeReader.isNothing());
+ });
+
+ // ProfileBufferBlockIndex tests.
+ if (bi2) {
+ } else {
+ MOZ_RELEASE_ASSERT(
+ false,
+ "if (non-default-ProfileBufferBlockIndex) should succeed test");
+ }
+ if (!bi2) {
+ MOZ_RELEASE_ASSERT(
+ false, "if (!non-default-ProfileBufferBlockIndex) should fail test");
+ }
+
+ MOZ_RELEASE_ASSERT(!!bi2);
+ MOZ_RELEASE_ASSERT(bi2 == bi2);
+ MOZ_RELEASE_ASSERT(bi2 <= bi2);
+ MOZ_RELEASE_ASSERT(bi2 >= bi2);
+ MOZ_RELEASE_ASSERT(!(bi2 != bi2));
+ MOZ_RELEASE_ASSERT(!(bi2 < bi2));
+ MOZ_RELEASE_ASSERT(!(bi2 > bi2));
+
+ MOZ_RELEASE_ASSERT(bi0 != bi2);
+ MOZ_RELEASE_ASSERT(bi0 < bi2);
+ MOZ_RELEASE_ASSERT(bi0 <= bi2);
+ MOZ_RELEASE_ASSERT(!(bi0 == bi2));
+ MOZ_RELEASE_ASSERT(!(bi0 > bi2));
+ MOZ_RELEASE_ASSERT(!(bi0 >= bi2));
+
+ MOZ_RELEASE_ASSERT(bi2 != bi0);
+ MOZ_RELEASE_ASSERT(bi2 > bi0);
+ MOZ_RELEASE_ASSERT(bi2 >= bi0);
+ MOZ_RELEASE_ASSERT(!(bi2 == bi0));
+ MOZ_RELEASE_ASSERT(!(bi2 < bi0));
+ MOZ_RELEASE_ASSERT(!(bi2 <= bi0));
+
+ MOZ_RELEASE_ASSERT(bi2 != bi2Next);
+ MOZ_RELEASE_ASSERT(bi2 < bi2Next);
+ MOZ_RELEASE_ASSERT(bi2 <= bi2Next);
+ MOZ_RELEASE_ASSERT(!(bi2 == bi2Next));
+ MOZ_RELEASE_ASSERT(!(bi2 > bi2Next));
+ MOZ_RELEASE_ASSERT(!(bi2 >= bi2Next));
+
+ MOZ_RELEASE_ASSERT(bi2Next != bi2);
+ MOZ_RELEASE_ASSERT(bi2Next > bi2);
+ MOZ_RELEASE_ASSERT(bi2Next >= bi2);
+ MOZ_RELEASE_ASSERT(!(bi2Next == bi2));
+ MOZ_RELEASE_ASSERT(!(bi2Next < bi2));
+ MOZ_RELEASE_ASSERT(!(bi2Next <= bi2));
+
+ // Push `3` through Put, check writer output
+ // is returned to the initial caller.
+ auto put3 =
+ rb.Put(sizeof(uint32_t), [&](Maybe<ProfileBufferEntryWriter>& aEW) {
+ MOZ_RELEASE_ASSERT(aEW.isSome());
+ aEW->WriteObject(uint32_t(3));
+ MOZ_RELEASE_ASSERT(aEW->CurrentBlockIndex() == bi2Next);
+ return float(aEW->CurrentBlockIndex().ConvertToProfileBufferIndex());
+ });
+ static_assert(std::is_same<decltype(put3), float>::value,
+ "Expect float as returned by callback.");
+ MOZ_RELEASE_ASSERT(put3 == 11.0);
+ // 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 (16)
+ // - S[4 | int(1) ] [4 | int(2) ] [4 | int(3) ]E
+ VERIFY_START_END_PUSHED_CLEARED(1, 16, 3, 0);
+
+ // Re-Read single entry at bi2, it should now have a next entry.
+ rb.ReadAt(bi2, [&](Maybe<ProfileBufferEntryReader>&& aMaybeReader) {
+ MOZ_RELEASE_ASSERT(aMaybeReader.isSome());
+ MOZ_RELEASE_ASSERT(aMaybeReader->CurrentBlockIndex() == bi2);
+ MOZ_RELEASE_ASSERT(aMaybeReader->ReadObject<uint32_t>() == 2);
+ MOZ_RELEASE_ASSERT(aMaybeReader->NextBlockIndex() == bi2Next);
+ });
+
+ // Check that we have `1` to `3`.
+ uint32_t count = 0;
+ rb.ReadEach([&](ProfileBufferEntryReader& aReader) {
+ MOZ_RELEASE_ASSERT(aReader.ReadObject<uint32_t>() == ++count);
+ });
+ MOZ_RELEASE_ASSERT(count == 3);
+
+ // Push `4`, store its ProfileBufferBlockIndex for later.
+ // This will wrap around, and clear the first entry.
+ ProfileBufferBlockIndex bi4 = rb.PutObject(uint32_t(4));
+ // Before:
+ // 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 (16)
+ // - S[4 | int(1) ] [4 | int(2) ] [4 | int(3) ]E
+ // 1. First entry cleared:
+ // 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 (16)
+ // - ? ? ? ? ? S[4 | int(2) ] [4 | int(3) ]E
+ // 2. New entry starts at 15 and wraps around: (shown on separate line)
+ // 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 (16)
+ // - ? ? ? ? ? S[4 | int(2) ] [4 | int(3) ]
+ // 16 17 18 19 20 21 ...
+ // [4 | int(4) ]E
+ // (collapsed)
+ // 16 17 18 19 20 21 6 7 8 9 10 11 12 13 14 15 (16)
+ // [4 | int(4) ]E ? S[4 | int(2) ] [4 | int(3) ]
+ VERIFY_START_END_PUSHED_CLEARED(6, 21, 4, 1);
+
+ // Check that we have `2` to `4`.
+ count = 1;
+ rb.ReadEach([&](ProfileBufferEntryReader& aReader) {
+ MOZ_RELEASE_ASSERT(aReader.ReadObject<uint32_t>() == ++count);
+ });
+ MOZ_RELEASE_ASSERT(count == 4);
+
+ // Push 5 through Put, no returns.
+ // This will clear the second entry.
+ // Check that the EntryWriter can access bi4 but not bi2.
+ auto bi5 =
+ rb.Put(sizeof(uint32_t), [&](Maybe<ProfileBufferEntryWriter>& aEW) {
+ MOZ_RELEASE_ASSERT(aEW.isSome());
+ aEW->WriteObject(uint32_t(5));
+ return aEW->CurrentBlockIndex();
+ });
+ auto bi6 = rb.GetState().mRangeEnd;
+ // 16 17 18 19 20 21 22 23 24 25 26 11 12 13 14 15 (16)
+ // [4 | int(4) ] [4 | int(5) ]E ? S[4 | int(3) ]
+ VERIFY_START_END_PUSHED_CLEARED(11, 26, 5, 2);
+
+ // Read single entry at bi2, should now gracefully fail.
+ rb.ReadAt(bi2, [](Maybe<ProfileBufferEntryReader>&& aMaybeReader) {
+ MOZ_RELEASE_ASSERT(aMaybeReader.isNothing());
+ });
+
+ // Read single entry at bi5.
+ rb.ReadAt(bi5, [](Maybe<ProfileBufferEntryReader>&& aMaybeReader) {
+ MOZ_RELEASE_ASSERT(aMaybeReader.isSome());
+ MOZ_RELEASE_ASSERT(aMaybeReader->ReadObject<uint32_t>() == 5);
+ });
+
+ rb.Read([&](BlocksRingBuffer::Reader* aReader) {
+ MOZ_RELEASE_ASSERT(!!aReader);
+ // begin() and end() should be at the range edges (verified above).
+ MOZ_RELEASE_ASSERT(
+ aReader->begin().CurrentBlockIndex().ConvertToProfileBufferIndex() ==
+ 11);
+ MOZ_RELEASE_ASSERT(
+ aReader->end().CurrentBlockIndex().ConvertToProfileBufferIndex() ==
+ 26);
+ // Null ProfileBufferBlockIndex clamped to the beginning.
+ MOZ_RELEASE_ASSERT(aReader->At(bi0) == aReader->begin());
+ // Cleared block index clamped to the beginning.
+ MOZ_RELEASE_ASSERT(aReader->At(bi2) == aReader->begin());
+ // At(begin) same as begin().
+ MOZ_RELEASE_ASSERT(aReader->At(aReader->begin().CurrentBlockIndex()) ==
+ aReader->begin());
+ // bi5 at expected position.
+ MOZ_RELEASE_ASSERT(
+ aReader->At(bi5).CurrentBlockIndex().ConvertToProfileBufferIndex() ==
+ 21);
+ // bi6 at expected position at the end.
+ MOZ_RELEASE_ASSERT(aReader->At(bi6) == aReader->end());
+ // At(end) same as end().
+ MOZ_RELEASE_ASSERT(aReader->At(aReader->end().CurrentBlockIndex()) ==
+ aReader->end());
+ });
+
+ // Check that we have `3` to `5`.
+ count = 2;
+ rb.ReadEach([&](ProfileBufferEntryReader& aReader) {
+ MOZ_RELEASE_ASSERT(aReader.ReadObject<uint32_t>() == ++count);
+ });
+ MOZ_RELEASE_ASSERT(count == 5);
+
+ // Clear everything before `4`, this should clear `3`.
+ rb.ClearBefore(bi4);
+ // 16 17 18 19 20 21 22 23 24 25 26 11 12 13 14 15
+ // S[4 | int(4) ] [4 | int(5) ]E ? ? ? ? ? ?
+ VERIFY_START_END_PUSHED_CLEARED(16, 26, 5, 3);
+
+ // Check that we have `4` to `5`.
+ count = 3;
+ rb.ReadEach([&](ProfileBufferEntryReader& aReader) {
+ MOZ_RELEASE_ASSERT(aReader.ReadObject<uint32_t>() == ++count);
+ });
+ MOZ_RELEASE_ASSERT(count == 5);
+
+ // Clear everything before `4` again, nothing to clear.
+ rb.ClearBefore(bi4);
+ VERIFY_START_END_PUSHED_CLEARED(16, 26, 5, 3);
+
+ // Clear everything, this should clear `4` and `5`, and bring the start
+ // index where the end index currently is.
+ rb.ClearBefore(bi6);
+ // 16 17 18 19 20 21 22 23 24 25 26 11 12 13 14 15
+ // ? ? ? ? ? ? ? ? ? ? SE? ? ? ? ? ?
+ VERIFY_START_END_PUSHED_CLEARED(26, 26, 5, 5);
+
+ // Check that we have nothing to read.
+ rb.ReadEach([&](auto&&) { MOZ_RELEASE_ASSERT(false); });
+
+ // Read single entry at bi5, should now gracefully fail.
+ rb.ReadAt(bi5, [](Maybe<ProfileBufferEntryReader>&& aMaybeReader) {
+ MOZ_RELEASE_ASSERT(aMaybeReader.isNothing());
+ });
+
+ // Clear everything before now-cleared `4`, nothing to clear.
+ rb.ClearBefore(bi4);
+ VERIFY_START_END_PUSHED_CLEARED(26, 26, 5, 5);
+
+ // Push `6` directly.
+ MOZ_RELEASE_ASSERT(rb.PutObject(uint32_t(6)) == bi6);
+ // 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
+ // ? ? ? ? ? ? ? ? ? ? S[4 | int(6) ]E ?
+ VERIFY_START_END_PUSHED_CLEARED(26, 31, 6, 5);
+
+ {
+ // Create a 2nd buffer and fill it with `7` and `8`.
+ uint8_t buffer2[MBSize];
+ BlocksRingBuffer rb2(BlocksRingBuffer::ThreadSafety::WithoutMutex,
+ buffer2, MakePowerOfTwo32<MBSize>());
+ rb2.PutObject(uint32_t(7));
+ rb2.PutObject(uint32_t(8));
+ // Main buffer shouldn't have changed.
+ VERIFY_START_END_PUSHED_CLEARED(26, 31, 6, 5);
+
+ // Append contents of rb2 to rb, this should end up being the same as
+ // pushing the two numbers.
+ rb.AppendContents(rb2);
+ // 32 33 34 35 36 37 38 39 40 41 26 27 28 29 30 31
+ // int(7) ] [4 | int(8) ]E ? S[4 | int(6) ] [4 |
+ VERIFY_START_END_PUSHED_CLEARED(26, 41, 8, 5);
+
+ // Append contents of rb2 to rb again, to verify that rb2 was not modified
+ // above. This should clear `6` and the first `7`.
+ rb.AppendContents(rb2);
+ // 48 49 50 51 36 37 38 39 40 41 42 43 44 45 46 47
+ // int(8) ]E ? S[4 | int(8) ] [4 | int(7) ] [4 |
+ VERIFY_START_END_PUSHED_CLEARED(36, 51, 10, 7);
+
+ // End of block where rb2 lives, to verify that it is not needed anymore
+ // for its copied values to survive in rb.
+ }
+ VERIFY_START_END_PUSHED_CLEARED(36, 51, 10, 7);
+
+ // bi6 should now have been cleared.
+ rb.ReadAt(bi6, [](Maybe<ProfileBufferEntryReader>&& aMaybeReader) {
+ MOZ_RELEASE_ASSERT(aMaybeReader.isNothing());
+ });
+
+ // Check that we have `8`, `7`, `8`.
+ count = 0;
+ uint32_t expected[3] = {8, 7, 8};
+ rb.ReadEach([&](ProfileBufferEntryReader& aReader) {
+ MOZ_RELEASE_ASSERT(count < 3);
+ MOZ_RELEASE_ASSERT(aReader.ReadObject<uint32_t>() == expected[count++]);
+ });
+ MOZ_RELEASE_ASSERT(count == 3);
+
+ // End of block where rb lives, BlocksRingBuffer destructor should call
+ // entry destructor for remaining entries.
+ }
+
+ // Check that only the provided stack-based sub-buffer was modified.
+ uint32_t changed = 0;
+ for (size_t i = MBSize; i < MBSize * 2; ++i) {
+ changed += (buffer[i] == uint8_t('A' + i)) ? 0 : 1;
+ }
+ // Expect at least 75% changes.
+ MOZ_RELEASE_ASSERT(changed >= MBSize * 6 / 8);
+
+ // Everything around the sub-buffer should be unchanged.
+ for (size_t i = 0; i < MBSize; ++i) {
+ MOZ_RELEASE_ASSERT(buffer[i] == uint8_t('A' + i));
+ }
+ for (size_t i = MBSize * 2; i < MBSize * 3; ++i) {
+ MOZ_RELEASE_ASSERT(buffer[i] == uint8_t('A' + i));
+ }
+
+ printf("TestBlocksRingBufferAPI done\n");
+}
+
+void TestBlocksRingBufferUnderlyingBufferChanges() {
+ printf("TestBlocksRingBufferUnderlyingBufferChanges...\n");
+
+ // Out-of-session BlocksRingBuffer to start with.
+ BlocksRingBuffer rb(BlocksRingBuffer::ThreadSafety::WithMutex);
+
+ // Block index to read at. Initially "null", but may be changed below.
+ ProfileBufferBlockIndex bi;
+
+ // Test all rb APIs when rb is out-of-session and therefore doesn't have an
+ // underlying buffer.
+ auto testOutOfSession = [&]() {
+ MOZ_RELEASE_ASSERT(rb.BufferLength().isNothing());
+ BlocksRingBuffer::State state = rb.GetState();
+ // When out-of-session, range start and ends are the same, and there are no
+ // pushed&cleared blocks.
+ MOZ_RELEASE_ASSERT(state.mRangeStart == state.mRangeEnd);
+ MOZ_RELEASE_ASSERT(state.mPushedBlockCount == 0);
+ MOZ_RELEASE_ASSERT(state.mClearedBlockCount == 0);
+ // `Put()` functions run the callback with `Nothing`.
+ int32_t ran = 0;
+ rb.Put(1, [&](Maybe<ProfileBufferEntryWriter>& aMaybeEntryWriter) {
+ MOZ_RELEASE_ASSERT(aMaybeEntryWriter.isNothing());
+ ++ran;
+ });
+ MOZ_RELEASE_ASSERT(ran == 1);
+ // `PutFrom` won't do anything, and returns the null
+ // ProfileBufferBlockIndex.
+ MOZ_RELEASE_ASSERT(rb.PutFrom(&ran, sizeof(ran)) ==
+ ProfileBufferBlockIndex{});
+ MOZ_RELEASE_ASSERT(rb.PutObject(ran) == ProfileBufferBlockIndex{});
+ // `Read()` functions run the callback with `Nothing`.
+ ran = 0;
+ rb.Read([&](BlocksRingBuffer::Reader* aReader) {
+ MOZ_RELEASE_ASSERT(!aReader);
+ ++ran;
+ });
+ MOZ_RELEASE_ASSERT(ran == 1);
+ ran = 0;
+ rb.ReadAt(ProfileBufferBlockIndex{},
+ [&](Maybe<ProfileBufferEntryReader>&& aMaybeEntryReader) {
+ MOZ_RELEASE_ASSERT(aMaybeEntryReader.isNothing());
+ ++ran;
+ });
+ MOZ_RELEASE_ASSERT(ran == 1);
+ ran = 0;
+ rb.ReadAt(bi, [&](Maybe<ProfileBufferEntryReader>&& aMaybeEntryReader) {
+ MOZ_RELEASE_ASSERT(aMaybeEntryReader.isNothing());
+ ++ran;
+ });
+ MOZ_RELEASE_ASSERT(ran == 1);
+ // `ReadEach` shouldn't run the callback (nothing to read).
+ rb.ReadEach([](auto&&) { MOZ_RELEASE_ASSERT(false); });
+ };
+
+ // As `testOutOfSession()` attempts to modify the buffer, we run it twice to
+ // make sure one run doesn't influence the next one.
+ testOutOfSession();
+ testOutOfSession();
+
+ rb.ClearBefore(bi);
+ testOutOfSession();
+ testOutOfSession();
+
+ rb.Clear();
+ testOutOfSession();
+ testOutOfSession();
+
+ rb.Reset();
+ testOutOfSession();
+ testOutOfSession();
+
+ constexpr uint32_t MBSize = 32;
+
+ rb.Set(MakePowerOfTwo<BlocksRingBuffer::Length, MBSize>());
+
+ constexpr bool EMPTY = true;
+ constexpr bool NOT_EMPTY = false;
+ // Test all rb APIs when rb has an underlying buffer.
+ auto testInSession = [&](bool aExpectEmpty) {
+ MOZ_RELEASE_ASSERT(rb.BufferLength().isSome());
+ BlocksRingBuffer::State state = rb.GetState();
+ if (aExpectEmpty) {
+ MOZ_RELEASE_ASSERT(state.mRangeStart == state.mRangeEnd);
+ MOZ_RELEASE_ASSERT(state.mPushedBlockCount == 0);
+ MOZ_RELEASE_ASSERT(state.mClearedBlockCount == 0);
+ } else {
+ MOZ_RELEASE_ASSERT(state.mRangeStart < state.mRangeEnd);
+ MOZ_RELEASE_ASSERT(state.mPushedBlockCount > 0);
+ MOZ_RELEASE_ASSERT(state.mClearedBlockCount <= state.mPushedBlockCount);
+ }
+ int32_t ran = 0;
+ // The following three `Put...` will write three int32_t of value 1.
+ bi = rb.Put(sizeof(ran),
+ [&](Maybe<ProfileBufferEntryWriter>& aMaybeEntryWriter) {
+ MOZ_RELEASE_ASSERT(aMaybeEntryWriter.isSome());
+ ++ran;
+ aMaybeEntryWriter->WriteObject(ran);
+ return aMaybeEntryWriter->CurrentBlockIndex();
+ });
+ MOZ_RELEASE_ASSERT(ran == 1);
+ MOZ_RELEASE_ASSERT(rb.PutFrom(&ran, sizeof(ran)) !=
+ ProfileBufferBlockIndex{});
+ MOZ_RELEASE_ASSERT(rb.PutObject(ran) != ProfileBufferBlockIndex{});
+ ran = 0;
+ rb.Read([&](BlocksRingBuffer::Reader* aReader) {
+ MOZ_RELEASE_ASSERT(!!aReader);
+ ++ran;
+ });
+ MOZ_RELEASE_ASSERT(ran == 1);
+ ran = 0;
+ rb.ReadEach([&](ProfileBufferEntryReader& aEntryReader) {
+ MOZ_RELEASE_ASSERT(aEntryReader.RemainingBytes() == sizeof(ran));
+ MOZ_RELEASE_ASSERT(aEntryReader.ReadObject<decltype(ran)>() == 1);
+ ++ran;
+ });
+ MOZ_RELEASE_ASSERT(ran >= 3);
+ ran = 0;
+ rb.ReadAt(ProfileBufferBlockIndex{},
+ [&](Maybe<ProfileBufferEntryReader>&& aMaybeEntryReader) {
+ MOZ_RELEASE_ASSERT(aMaybeEntryReader.isNothing());
+ ++ran;
+ });
+ MOZ_RELEASE_ASSERT(ran == 1);
+ ran = 0;
+ rb.ReadAt(bi, [&](Maybe<ProfileBufferEntryReader>&& aMaybeEntryReader) {
+ MOZ_RELEASE_ASSERT(aMaybeEntryReader.isNothing() == !bi);
+ ++ran;
+ });
+ MOZ_RELEASE_ASSERT(ran == 1);
+ };
+
+ testInSession(EMPTY);
+ testInSession(NOT_EMPTY);
+
+ rb.Set(MakePowerOfTwo<BlocksRingBuffer::Length, 32>());
+ MOZ_RELEASE_ASSERT(rb.BufferLength().isSome());
+ rb.ReadEach([](auto&&) { MOZ_RELEASE_ASSERT(false); });
+
+ testInSession(EMPTY);
+ testInSession(NOT_EMPTY);
+
+ rb.Reset();
+ testOutOfSession();
+ testOutOfSession();
+
+ uint8_t buffer[MBSize * 3];
+ for (size_t i = 0; i < MBSize * 3; ++i) {
+ buffer[i] = uint8_t('A' + i);
+ }
+
+ rb.Set(&buffer[MBSize], MakePowerOfTwo<BlocksRingBuffer::Length, MBSize>());
+ MOZ_RELEASE_ASSERT(rb.BufferLength().isSome());
+ rb.ReadEach([](auto&&) { MOZ_RELEASE_ASSERT(false); });
+
+ testInSession(EMPTY);
+ testInSession(NOT_EMPTY);
+
+ rb.Reset();
+ testOutOfSession();
+ testOutOfSession();
+
+ rb.Set(&buffer[MBSize], MakePowerOfTwo<BlocksRingBuffer::Length, MBSize>());
+ MOZ_RELEASE_ASSERT(rb.BufferLength().isSome());
+ rb.ReadEach([](auto&&) { MOZ_RELEASE_ASSERT(false); });
+
+ testInSession(EMPTY);
+ testInSession(NOT_EMPTY);
+
+ // Remove the current underlying buffer, this should clear all entries.
+ rb.Reset();
+
+ // Check that only the provided stack-based sub-buffer was modified.
+ uint32_t changed = 0;
+ for (size_t i = MBSize; i < MBSize * 2; ++i) {
+ changed += (buffer[i] == uint8_t('A' + i)) ? 0 : 1;
+ }
+ // Expect at least 75% changes.
+ MOZ_RELEASE_ASSERT(changed >= MBSize * 6 / 8);
+
+ // Everything around the sub-buffer should be unchanged.
+ for (size_t i = 0; i < MBSize; ++i) {
+ MOZ_RELEASE_ASSERT(buffer[i] == uint8_t('A' + i));
+ }
+ for (size_t i = MBSize * 2; i < MBSize * 3; ++i) {
+ MOZ_RELEASE_ASSERT(buffer[i] == uint8_t('A' + i));
+ }
+
+ testOutOfSession();
+ testOutOfSession();
+
+ printf("TestBlocksRingBufferUnderlyingBufferChanges done\n");
+}
+
+void TestBlocksRingBufferThreading() {
+ printf("TestBlocksRingBufferThreading...\n");
+
+ constexpr uint32_t MBSize = 8192;
+ uint8_t buffer[MBSize * 3];
+ for (size_t i = 0; i < MBSize * 3; ++i) {
+ buffer[i] = uint8_t('A' + i);
+ }
+ BlocksRingBuffer rb(BlocksRingBuffer::ThreadSafety::WithMutex,
+ &buffer[MBSize], MakePowerOfTwo32<MBSize>());
+
+ // Start reader thread.
+ std::atomic<bool> stopReader{false};
+ std::thread reader([&]() {
+ for (;;) {
+ BlocksRingBuffer::State state = rb.GetState();
+ printf(
+ "Reader: range=%llu..%llu (%llu bytes) pushed=%llu cleared=%llu "
+ "(alive=%llu)\n",
+ static_cast<unsigned long long>(
+ state.mRangeStart.ConvertToProfileBufferIndex()),
+ static_cast<unsigned long long>(
+ state.mRangeEnd.ConvertToProfileBufferIndex()),
+ static_cast<unsigned long long>(
+ state.mRangeEnd.ConvertToProfileBufferIndex()) -
+ static_cast<unsigned long long>(
+ state.mRangeStart.ConvertToProfileBufferIndex()),
+ static_cast<unsigned long long>(state.mPushedBlockCount),
+ static_cast<unsigned long long>(state.mClearedBlockCount),
+ static_cast<unsigned long long>(state.mPushedBlockCount -
+ state.mClearedBlockCount));
+ if (stopReader) {
+ break;
+ }
+ ::SleepMilli(1);
+ }
+ });
+
+ // Start writer threads.
+ constexpr int ThreadCount = 32;
+ std::thread threads[ThreadCount];
+ for (int threadNo = 0; threadNo < ThreadCount; ++threadNo) {
+ threads[threadNo] = std::thread(
+ [&](int aThreadNo) {
+ ::SleepMilli(1);
+ constexpr int pushCount = 1024;
+ for (int push = 0; push < pushCount; ++push) {
+ // Reserve as many bytes as the thread number (but at least enough
+ // to store an int), and write an increasing int.
+ rb.Put(std::max(aThreadNo, int(sizeof(push))),
+ [&](Maybe<ProfileBufferEntryWriter>& aEW) {
+ MOZ_RELEASE_ASSERT(aEW.isSome());
+ aEW->WriteObject(aThreadNo * 1000000 + push);
+ *aEW += aEW->RemainingBytes();
+ });
+ }
+ },
+ threadNo);
+ }
+
+ // Wait for all writer threads to die.
+ for (auto&& thread : threads) {
+ thread.join();
+ }
+
+ // Stop reader thread.
+ stopReader = true;
+ reader.join();
+
+ // Check that only the provided stack-based sub-buffer was modified.
+ uint32_t changed = 0;
+ for (size_t i = MBSize; i < MBSize * 2; ++i) {
+ changed += (buffer[i] == uint8_t('A' + i)) ? 0 : 1;
+ }
+ // Expect at least 75% changes.
+ MOZ_RELEASE_ASSERT(changed >= MBSize * 6 / 8);
+
+ // Everything around the sub-buffer should be unchanged.
+ for (size_t i = 0; i < MBSize; ++i) {
+ MOZ_RELEASE_ASSERT(buffer[i] == uint8_t('A' + i));
+ }
+ for (size_t i = MBSize * 2; i < MBSize * 3; ++i) {
+ MOZ_RELEASE_ASSERT(buffer[i] == uint8_t('A' + i));
+ }
+
+ printf("TestBlocksRingBufferThreading done\n");
+}
+
+void TestBlocksRingBufferSerialization() {
+ printf("TestBlocksRingBufferSerialization...\n");
+
+ constexpr uint32_t MBSize = 64;
+ uint8_t buffer[MBSize * 3];
+ for (size_t i = 0; i < MBSize * 3; ++i) {
+ buffer[i] = uint8_t('A' + i);
+ }
+ BlocksRingBuffer rb(BlocksRingBuffer::ThreadSafety::WithMutex,
+ &buffer[MBSize], MakePowerOfTwo32<MBSize>());
+
+ // Will expect literal string to always have the same address.
+# define THE_ANSWER "The answer is "
+ const char* theAnswer = THE_ANSWER;
+
+ rb.PutObjects('0', WrapProfileBufferLiteralCStringPointer(THE_ANSWER), 42,
+ std::string(" but pi="), 3.14);
+ rb.ReadEach([&](ProfileBufferEntryReader& aER) {
+ char c0;
+ const char* answer;
+ int integer;
+ std::string str;
+ double pi;
+ aER.ReadIntoObjects(c0, answer, integer, str, pi);
+ MOZ_RELEASE_ASSERT(c0 == '0');
+ MOZ_RELEASE_ASSERT(answer == theAnswer);
+ MOZ_RELEASE_ASSERT(integer == 42);
+ MOZ_RELEASE_ASSERT(str == " but pi=");
+ MOZ_RELEASE_ASSERT(pi == 3.14);
+ });
+ rb.ReadEach([&](ProfileBufferEntryReader& aER) {
+ char c0 = aER.ReadObject<char>();
+ MOZ_RELEASE_ASSERT(c0 == '0');
+ const char* answer = aER.ReadObject<const char*>();
+ MOZ_RELEASE_ASSERT(answer == theAnswer);
+ int integer = aER.ReadObject<int>();
+ MOZ_RELEASE_ASSERT(integer == 42);
+ std::string str = aER.ReadObject<std::string>();
+ MOZ_RELEASE_ASSERT(str == " but pi=");
+ double pi = aER.ReadObject<double>();
+ MOZ_RELEASE_ASSERT(pi == 3.14);
+ });
+
+ rb.Clear();
+ // Write an int and store its ProfileBufferBlockIndex.
+ ProfileBufferBlockIndex blockIndex = rb.PutObject(123);
+ // It should be non-0.
+ MOZ_RELEASE_ASSERT(blockIndex != ProfileBufferBlockIndex{});
+ // Write that ProfileBufferBlockIndex.
+ rb.PutObject(blockIndex);
+ rb.Read([&](BlocksRingBuffer::Reader* aR) {
+ BlocksRingBuffer::BlockIterator it = aR->begin();
+ const BlocksRingBuffer::BlockIterator itEnd = aR->end();
+ MOZ_RELEASE_ASSERT(it != itEnd);
+ MOZ_RELEASE_ASSERT((*it).ReadObject<int>() == 123);
+ ++it;
+ MOZ_RELEASE_ASSERT(it != itEnd);
+ MOZ_RELEASE_ASSERT((*it).ReadObject<ProfileBufferBlockIndex>() ==
+ blockIndex);
+ ++it;
+ MOZ_RELEASE_ASSERT(it == itEnd);
+ });
+
+ rb.Clear();
+ rb.PutObjects(
+ std::make_tuple('0', WrapProfileBufferLiteralCStringPointer(THE_ANSWER),
+ 42, std::string(" but pi="), 3.14));
+ rb.ReadEach([&](ProfileBufferEntryReader& aER) {
+ MOZ_RELEASE_ASSERT(aER.ReadObject<char>() == '0');
+ MOZ_RELEASE_ASSERT(aER.ReadObject<const char*>() == theAnswer);
+ MOZ_RELEASE_ASSERT(aER.ReadObject<int>() == 42);
+ MOZ_RELEASE_ASSERT(aER.ReadObject<std::string>() == " but pi=");
+ MOZ_RELEASE_ASSERT(aER.ReadObject<double>() == 3.14);
+ });
+
+ rb.Clear();
+ rb.PutObjects(
+ std::make_tuple('0', WrapProfileBufferLiteralCStringPointer(THE_ANSWER),
+ 42, std::string(" but pi="), 3.14));
+ rb.ReadEach([&](ProfileBufferEntryReader& aER) {
+ MOZ_RELEASE_ASSERT(aER.ReadObject<char>() == '0');
+ MOZ_RELEASE_ASSERT(aER.ReadObject<const char*>() == theAnswer);
+ MOZ_RELEASE_ASSERT(aER.ReadObject<int>() == 42);
+ MOZ_RELEASE_ASSERT(aER.ReadObject<std::string>() == " but pi=");
+ MOZ_RELEASE_ASSERT(aER.ReadObject<double>() == 3.14);
+ });
+
+ rb.Clear();
+ {
+ UniqueFreePtr<char> ufps(strdup(THE_ANSWER));
+ rb.PutObjects(ufps);
+ }
+ rb.ReadEach([&](ProfileBufferEntryReader& aER) {
+ auto ufps = aER.ReadObject<UniqueFreePtr<char>>();
+ MOZ_RELEASE_ASSERT(!!ufps);
+ MOZ_RELEASE_ASSERT(std::string(THE_ANSWER) == ufps.get());
+ });
+
+ rb.Clear();
+ int intArray[] = {1, 2, 3, 4, 5};
+ rb.PutObjects(Span(intArray));
+ rb.ReadEach([&](ProfileBufferEntryReader& aER) {
+ int intArrayOut[sizeof(intArray) / sizeof(intArray[0])] = {0};
+ auto outSpan = Span(intArrayOut);
+ aER.ReadIntoObject(outSpan);
+ for (size_t i = 0; i < sizeof(intArray) / sizeof(intArray[0]); ++i) {
+ MOZ_RELEASE_ASSERT(intArrayOut[i] == intArray[i]);
+ }
+ });
+
+ rb.Clear();
+ rb.PutObjects(Maybe<int>(Nothing{}), Maybe<int>(Some(123)));
+ rb.ReadEach([&](ProfileBufferEntryReader& aER) {
+ Maybe<int> mi0, mi1;
+ aER.ReadIntoObjects(mi0, mi1);
+ MOZ_RELEASE_ASSERT(mi0.isNothing());
+ MOZ_RELEASE_ASSERT(mi1.isSome());
+ MOZ_RELEASE_ASSERT(*mi1 == 123);
+ });
+
+ rb.Clear();
+ using V = Variant<int, double, int>;
+ V v0(VariantIndex<0>{}, 123);
+ V v1(3.14);
+ V v2(VariantIndex<2>{}, 456);
+ rb.PutObjects(v0, v1, v2);
+ rb.ReadEach([&](ProfileBufferEntryReader& aER) {
+ MOZ_RELEASE_ASSERT(aER.ReadObject<V>() == v0);
+ MOZ_RELEASE_ASSERT(aER.ReadObject<V>() == v1);
+ MOZ_RELEASE_ASSERT(aER.ReadObject<V>() == v2);
+ });
+
+ // 2nd BlocksRingBuffer to contain the 1st one. It has be be more than twice
+ // the size.
+ constexpr uint32_t MBSize2 = MBSize * 4;
+ uint8_t buffer2[MBSize2 * 3];
+ for (size_t i = 0; i < MBSize2 * 3; ++i) {
+ buffer2[i] = uint8_t('B' + i);
+ }
+ BlocksRingBuffer rb2(BlocksRingBuffer::ThreadSafety::WithoutMutex,
+ &buffer2[MBSize2], MakePowerOfTwo32<MBSize2>());
+ rb2.PutObject(rb);
+
+ // 3rd BlocksRingBuffer deserialized from the 2nd one.
+ uint8_t buffer3[MBSize * 3];
+ for (size_t i = 0; i < MBSize * 3; ++i) {
+ buffer3[i] = uint8_t('C' + i);
+ }
+ BlocksRingBuffer rb3(BlocksRingBuffer::ThreadSafety::WithoutMutex,
+ &buffer3[MBSize], MakePowerOfTwo32<MBSize>());
+ rb2.ReadEach([&](ProfileBufferEntryReader& aER) { aER.ReadIntoObject(rb3); });
+
+ // And a 4th heap-allocated one.
+ UniquePtr<BlocksRingBuffer> rb4up;
+ rb2.ReadEach([&](ProfileBufferEntryReader& aER) {
+ rb4up = aER.ReadObject<UniquePtr<BlocksRingBuffer>>();
+ });
+ MOZ_RELEASE_ASSERT(!!rb4up);
+
+ // Clear 1st and 2nd BlocksRingBuffers, to ensure we have made a deep copy
+ // into the 3rd&4th ones.
+ rb.Clear();
+ rb2.Clear();
+
+ // And now the 3rd one should have the same contents as the 1st one had.
+ rb3.ReadEach([&](ProfileBufferEntryReader& aER) {
+ MOZ_RELEASE_ASSERT(aER.ReadObject<V>() == v0);
+ MOZ_RELEASE_ASSERT(aER.ReadObject<V>() == v1);
+ MOZ_RELEASE_ASSERT(aER.ReadObject<V>() == v2);
+ });
+
+ // And 4th.
+ rb4up->ReadEach([&](ProfileBufferEntryReader& aER) {
+ MOZ_RELEASE_ASSERT(aER.ReadObject<V>() == v0);
+ MOZ_RELEASE_ASSERT(aER.ReadObject<V>() == v1);
+ MOZ_RELEASE_ASSERT(aER.ReadObject<V>() == v2);
+ });
+
+ // In fact, the 3rd and 4th ones should have the same state, because they were
+ // created the same way.
+ MOZ_RELEASE_ASSERT(rb3.GetState().mRangeStart ==
+ rb4up->GetState().mRangeStart);
+ MOZ_RELEASE_ASSERT(rb3.GetState().mRangeEnd == rb4up->GetState().mRangeEnd);
+ MOZ_RELEASE_ASSERT(rb3.GetState().mPushedBlockCount ==
+ rb4up->GetState().mPushedBlockCount);
+ MOZ_RELEASE_ASSERT(rb3.GetState().mClearedBlockCount ==
+ rb4up->GetState().mClearedBlockCount);
+
+ // Check that only the provided stack-based sub-buffer was modified.
+ uint32_t changed = 0;
+ for (size_t i = MBSize; i < MBSize * 2; ++i) {
+ changed += (buffer[i] == uint8_t('A' + i)) ? 0 : 1;
+ }
+ // Expect at least 75% changes.
+ MOZ_RELEASE_ASSERT(changed >= MBSize * 6 / 8);
+
+ // Everything around the sub-buffers should be unchanged.
+ for (size_t i = 0; i < MBSize; ++i) {
+ MOZ_RELEASE_ASSERT(buffer[i] == uint8_t('A' + i));
+ }
+ for (size_t i = MBSize * 2; i < MBSize * 3; ++i) {
+ MOZ_RELEASE_ASSERT(buffer[i] == uint8_t('A' + i));
+ }
+
+ for (size_t i = 0; i < MBSize2; ++i) {
+ MOZ_RELEASE_ASSERT(buffer2[i] == uint8_t('B' + i));
+ }
+ for (size_t i = MBSize2 * 2; i < MBSize2 * 3; ++i) {
+ MOZ_RELEASE_ASSERT(buffer2[i] == uint8_t('B' + i));
+ }
+
+ for (size_t i = 0; i < MBSize; ++i) {
+ MOZ_RELEASE_ASSERT(buffer3[i] == uint8_t('C' + i));
+ }
+ for (size_t i = MBSize * 2; i < MBSize * 3; ++i) {
+ MOZ_RELEASE_ASSERT(buffer3[i] == uint8_t('C' + i));
+ }
+
+ printf("TestBlocksRingBufferSerialization done\n");
+}
+
+void TestLiteralEmptyStringView() {
+ printf("TestLiteralEmptyStringView...\n");
+
+ static_assert(mozilla::LiteralEmptyStringView<char>() ==
+ std::string_view(""));
+ static_assert(!!mozilla::LiteralEmptyStringView<char>().data());
+ static_assert(mozilla::LiteralEmptyStringView<char>().length() == 0);
+
+ static_assert(mozilla::LiteralEmptyStringView<char16_t>() ==
+ std::basic_string_view<char16_t>(u""));
+ static_assert(!!mozilla::LiteralEmptyStringView<char16_t>().data());
+ static_assert(mozilla::LiteralEmptyStringView<char16_t>().length() == 0);
+
+ printf("TestLiteralEmptyStringView done\n");
+}
+
+template <typename CHAR>
+void TestProfilerStringView() {
+ if constexpr (std::is_same_v<CHAR, char>) {
+ printf("TestProfilerStringView<char>...\n");
+ } else if constexpr (std::is_same_v<CHAR, char16_t>) {
+ printf("TestProfilerStringView<char16_t>...\n");
+ } else {
+ MOZ_RELEASE_ASSERT(false,
+ "TestProfilerStringView only handles char and char16_t");
+ }
+
+ // Used to verify implicit constructions, as this will normally be used in
+ // function parameters.
+ auto BSV = [](mozilla::ProfilerStringView<CHAR>&& aBSV) {
+ return std::move(aBSV);
+ };
+
+ // These look like string literals, as expected by some string constructors.
+ const CHAR empty[0 + 1] = {CHAR('\0')};
+ const CHAR hi[2 + 1] = {
+ CHAR('h'),
+ CHAR('i'),
+ CHAR('\0'),
+ };
+
+ // Literal empty string.
+ MOZ_RELEASE_ASSERT(BSV(empty).Length() == 0);
+ MOZ_RELEASE_ASSERT(BSV(empty).AsSpan().IsEmpty());
+ MOZ_RELEASE_ASSERT(BSV(empty).IsLiteral());
+ MOZ_RELEASE_ASSERT(!BSV(empty).IsReference());
+
+ // Literal non-empty string.
+ MOZ_RELEASE_ASSERT(BSV(hi).Length() == 2);
+ MOZ_RELEASE_ASSERT(BSV(hi).AsSpan().Elements());
+ MOZ_RELEASE_ASSERT(BSV(hi).AsSpan().Elements()[0] == CHAR('h'));
+ MOZ_RELEASE_ASSERT(BSV(hi).AsSpan().Elements()[1] == CHAR('i'));
+ MOZ_RELEASE_ASSERT(BSV(hi).IsLiteral());
+ MOZ_RELEASE_ASSERT(!BSV(hi).IsReference());
+
+ // std::string_view to a literal empty string.
+ MOZ_RELEASE_ASSERT(BSV(std::basic_string_view<CHAR>(empty)).Length() == 0);
+ MOZ_RELEASE_ASSERT(
+ BSV(std::basic_string_view<CHAR>(empty)).AsSpan().IsEmpty());
+ MOZ_RELEASE_ASSERT(!BSV(std::basic_string_view<CHAR>(empty)).IsLiteral());
+ MOZ_RELEASE_ASSERT(BSV(std::basic_string_view<CHAR>(empty)).IsReference());
+
+ // std::string_view to a literal non-empty string.
+ MOZ_RELEASE_ASSERT(BSV(std::basic_string_view<CHAR>(hi)).Length() == 2);
+ MOZ_RELEASE_ASSERT(BSV(std::basic_string_view<CHAR>(hi)).AsSpan().Elements());
+ MOZ_RELEASE_ASSERT(
+ BSV(std::basic_string_view<CHAR>(hi)).AsSpan().Elements()[0] ==
+ CHAR('h'));
+ MOZ_RELEASE_ASSERT(
+ BSV(std::basic_string_view<CHAR>(hi)).AsSpan().Elements()[1] ==
+ CHAR('i'));
+ MOZ_RELEASE_ASSERT(!BSV(std::basic_string_view<CHAR>(hi)).IsLiteral());
+ MOZ_RELEASE_ASSERT(BSV(std::basic_string_view<CHAR>(hi)).IsReference());
+
+ // Default std::string_view points at nullptr, ProfilerStringView converts it
+ // to the literal empty string.
+ MOZ_RELEASE_ASSERT(BSV(std::basic_string_view<CHAR>()).Length() == 0);
+ MOZ_RELEASE_ASSERT(!std::basic_string_view<CHAR>().data());
+ MOZ_RELEASE_ASSERT(BSV(std::basic_string_view<CHAR>()).AsSpan().IsEmpty());
+ MOZ_RELEASE_ASSERT(BSV(std::basic_string_view<CHAR>()).IsLiteral());
+ MOZ_RELEASE_ASSERT(!BSV(std::basic_string_view<CHAR>()).IsReference());
+
+ // std::string to a literal empty string.
+ MOZ_RELEASE_ASSERT(BSV(std::basic_string<CHAR>(empty)).Length() == 0);
+ MOZ_RELEASE_ASSERT(BSV(std::basic_string<CHAR>(empty)).AsSpan().IsEmpty());
+ MOZ_RELEASE_ASSERT(!BSV(std::basic_string<CHAR>(empty)).IsLiteral());
+ MOZ_RELEASE_ASSERT(BSV(std::basic_string<CHAR>(empty)).IsReference());
+
+ // std::string to a literal non-empty string.
+ MOZ_RELEASE_ASSERT(BSV(std::basic_string<CHAR>(hi)).Length() == 2);
+ MOZ_RELEASE_ASSERT(BSV(std::basic_string<CHAR>(hi)).AsSpan().Elements());
+ MOZ_RELEASE_ASSERT(BSV(std::basic_string<CHAR>(hi)).AsSpan().Elements()[0] ==
+ CHAR('h'));
+ MOZ_RELEASE_ASSERT(BSV(std::basic_string<CHAR>(hi)).AsSpan().Elements()[1] ==
+ CHAR('i'));
+ MOZ_RELEASE_ASSERT(!BSV(std::basic_string<CHAR>(hi)).IsLiteral());
+ MOZ_RELEASE_ASSERT(BSV(std::basic_string<CHAR>(hi)).IsReference());
+
+ // Default std::string contains an empty null-terminated string.
+ MOZ_RELEASE_ASSERT(BSV(std::basic_string<CHAR>()).Length() == 0);
+ MOZ_RELEASE_ASSERT(std::basic_string<CHAR>().data());
+ MOZ_RELEASE_ASSERT(BSV(std::basic_string<CHAR>()).AsSpan().IsEmpty());
+ MOZ_RELEASE_ASSERT(!BSV(std::basic_string<CHAR>()).IsLiteral());
+ MOZ_RELEASE_ASSERT(BSV(std::basic_string<CHAR>()).IsReference());
+
+ // Class that quacks like nsTString (with Data(), Length(), IsLiteral()), to
+ // check that ProfilerStringView can read from them.
+ class FakeNsTString {
+ public:
+ FakeNsTString(const CHAR* aData, size_t aLength, bool aIsLiteral)
+ : mData(aData), mLength(aLength), mIsLiteral(aIsLiteral) {}
+
+ const CHAR* Data() const { return mData; }
+ size_t Length() const { return mLength; }
+ bool IsLiteral() const { return mIsLiteral; }
+
+ private:
+ const CHAR* mData;
+ size_t mLength;
+ bool mIsLiteral;
+ };
+
+ // FakeNsTString to nullptr.
+ MOZ_RELEASE_ASSERT(BSV(FakeNsTString(nullptr, 0, true)).Length() == 0);
+ MOZ_RELEASE_ASSERT(BSV(FakeNsTString(nullptr, 0, true)).AsSpan().IsEmpty());
+ MOZ_RELEASE_ASSERT(BSV(FakeNsTString(nullptr, 0, true)).IsLiteral());
+ MOZ_RELEASE_ASSERT(!BSV(FakeNsTString(nullptr, 0, true)).IsReference());
+
+ // FakeNsTString to a literal empty string.
+ MOZ_RELEASE_ASSERT(BSV(FakeNsTString(empty, 0, true)).Length() == 0);
+ MOZ_RELEASE_ASSERT(BSV(FakeNsTString(empty, 0, true)).AsSpan().IsEmpty());
+ MOZ_RELEASE_ASSERT(BSV(FakeNsTString(empty, 0, true)).IsLiteral());
+ MOZ_RELEASE_ASSERT(!BSV(FakeNsTString(empty, 0, true)).IsReference());
+
+ // FakeNsTString to a literal non-empty string.
+ MOZ_RELEASE_ASSERT(BSV(FakeNsTString(hi, 2, true)).Length() == 2);
+ MOZ_RELEASE_ASSERT(BSV(FakeNsTString(hi, 2, true)).AsSpan().Elements());
+ MOZ_RELEASE_ASSERT(BSV(FakeNsTString(hi, 2, true)).AsSpan().Elements()[0] ==
+ CHAR('h'));
+ MOZ_RELEASE_ASSERT(BSV(FakeNsTString(hi, 2, true)).AsSpan().Elements()[1] ==
+ CHAR('i'));
+ MOZ_RELEASE_ASSERT(BSV(FakeNsTString(hi, 2, true)).IsLiteral());
+ MOZ_RELEASE_ASSERT(!BSV(FakeNsTString(hi, 2, true)).IsReference());
+
+ // FakeNsTString to a non-literal non-empty string.
+ MOZ_RELEASE_ASSERT(BSV(FakeNsTString(hi, 2, false)).Length() == 2);
+ MOZ_RELEASE_ASSERT(BSV(FakeNsTString(hi, 2, false)).AsSpan().Elements());
+ MOZ_RELEASE_ASSERT(BSV(FakeNsTString(hi, 2, false)).AsSpan().Elements()[0] ==
+ CHAR('h'));
+ MOZ_RELEASE_ASSERT(BSV(FakeNsTString(hi, 2, false)).AsSpan().Elements()[1] ==
+ CHAR('i'));
+ MOZ_RELEASE_ASSERT(!BSV(FakeNsTString(hi, 2, false)).IsLiteral());
+ MOZ_RELEASE_ASSERT(BSV(FakeNsTString(hi, 2, false)).IsReference());
+
+ // Serialization and deserialization (with ownership).
+ constexpr size_t bufferMaxSize = 1024;
+ constexpr ProfileChunkedBuffer::Length chunkMinSize = 128;
+ ProfileBufferChunkManagerWithLocalLimit cm(bufferMaxSize, chunkMinSize);
+ ProfileChunkedBuffer cb(ProfileChunkedBuffer::ThreadSafety::WithMutex, cm);
+
+ // Literal string, serialized as raw pointer.
+ MOZ_RELEASE_ASSERT(cb.PutObject(BSV(hi)));
+ {
+ unsigned read = 0;
+ ProfilerStringView<CHAR> outerBSV;
+ cb.ReadEach([&](ProfileBufferEntryReader& aER) {
+ ++read;
+ auto bsv = aER.ReadObject<ProfilerStringView<CHAR>>();
+ MOZ_RELEASE_ASSERT(bsv.Length() == 2);
+ MOZ_RELEASE_ASSERT(bsv.AsSpan().Elements());
+ MOZ_RELEASE_ASSERT(bsv.AsSpan().Elements()[0] == CHAR('h'));
+ MOZ_RELEASE_ASSERT(bsv.AsSpan().Elements()[1] == CHAR('i'));
+ MOZ_RELEASE_ASSERT(bsv.IsLiteral());
+ MOZ_RELEASE_ASSERT(!bsv.IsReference());
+ outerBSV = std::move(bsv);
+ });
+ MOZ_RELEASE_ASSERT(read == 1);
+ MOZ_RELEASE_ASSERT(outerBSV.Length() == 2);
+ MOZ_RELEASE_ASSERT(outerBSV.AsSpan().Elements());
+ MOZ_RELEASE_ASSERT(outerBSV.AsSpan().Elements()[0] == CHAR('h'));
+ MOZ_RELEASE_ASSERT(outerBSV.AsSpan().Elements()[1] == CHAR('i'));
+ MOZ_RELEASE_ASSERT(outerBSV.IsLiteral());
+ MOZ_RELEASE_ASSERT(!outerBSV.IsReference());
+ }
+
+ MOZ_RELEASE_ASSERT(cb.GetState().mRangeStart == 1u);
+
+ cb.Clear();
+
+ // Non-literal string, content is serialized.
+
+ // We'll try to write 4 strings, such that the 4th one will cross into the
+ // next chunk.
+ unsigned guessedChunkBytes = unsigned(cb.GetState().mRangeStart) - 1u;
+ static constexpr unsigned stringCount = 4u;
+ const unsigned stringSize =
+ guessedChunkBytes / stringCount / sizeof(CHAR) + 3u;
+
+ std::basic_string<CHAR> longString;
+ longString.reserve(stringSize);
+ for (unsigned i = 0; i < stringSize; ++i) {
+ longString += CHAR('0' + i);
+ }
+
+ for (unsigned i = 0; i < stringCount; ++i) {
+ MOZ_RELEASE_ASSERT(cb.PutObject(BSV(longString)));
+ }
+
+ {
+ unsigned read = 0;
+ ProfilerStringView<CHAR> outerBSV;
+ cb.ReadEach([&](ProfileBufferEntryReader& aER) {
+ ++read;
+ {
+ auto bsv = aER.ReadObject<ProfilerStringView<CHAR>>();
+ MOZ_RELEASE_ASSERT(bsv.Length() == stringSize);
+ MOZ_RELEASE_ASSERT(bsv.AsSpan().Elements());
+ for (unsigned i = 0; i < stringSize; ++i) {
+ MOZ_RELEASE_ASSERT(bsv.AsSpan().Elements()[i] == CHAR('0' + i));
+ longString += '0' + i;
+ }
+ MOZ_RELEASE_ASSERT(!bsv.IsLiteral());
+ // The first 3 should be references (because they fit in one chunk, so
+ // they can be referenced directly), which the 4th one have to be copied
+ // out of two chunks and stitched back together.
+ MOZ_RELEASE_ASSERT(bsv.IsReference() == (read != 4));
+
+ // Test move of ownership.
+ outerBSV = std::move(bsv);
+ // After a move, references stay complete, while a non-reference had a
+ // buffer that has been moved out.
+ // NOLINTNEXTLINE(bugprone-use-after-move,clang-analyzer-cplusplus.Move)
+ MOZ_RELEASE_ASSERT(bsv.Length() == ((read != 4) ? stringSize : 0));
+ }
+
+ MOZ_RELEASE_ASSERT(outerBSV.Length() == stringSize);
+ MOZ_RELEASE_ASSERT(outerBSV.AsSpan().Elements());
+ for (unsigned i = 0; i < stringSize; ++i) {
+ MOZ_RELEASE_ASSERT(outerBSV.AsSpan().Elements()[i] == CHAR('0' + i));
+ longString += '0' + i;
+ }
+ MOZ_RELEASE_ASSERT(!outerBSV.IsLiteral());
+ MOZ_RELEASE_ASSERT(outerBSV.IsReference() == (read != 4));
+ });
+ MOZ_RELEASE_ASSERT(read == 4);
+ }
+
+ if constexpr (std::is_same_v<CHAR, char>) {
+ printf("TestProfilerStringView<char> done\n");
+ } else if constexpr (std::is_same_v<CHAR, char16_t>) {
+ printf("TestProfilerStringView<char16_t> done\n");
+ }
+}
+
+void TestProfilerDependencies() {
+ TestPowerOfTwoMask();
+ TestPowerOfTwo();
+ TestLEB128();
+ TestJSONTimeOutput();
+ TestChunk();
+ TestChunkManagerSingle();
+ TestChunkManagerWithLocalLimit();
+ TestControlledChunkManagerUpdate();
+ TestControlledChunkManagerWithLocalLimit();
+ TestChunkedBuffer();
+ TestChunkedBufferSingle();
+ TestModuloBuffer();
+ TestBlocksRingBufferAPI();
+ TestBlocksRingBufferUnderlyingBufferChanges();
+ TestBlocksRingBufferThreading();
+ TestBlocksRingBufferSerialization();
+ TestLiteralEmptyStringView();
+ TestProfilerStringView<char>();
+ TestProfilerStringView<char16_t>();
+}
+
+// Increase the depth, to a maximum (to avoid too-deep recursion).
+static constexpr size_t NextDepth(size_t aDepth) {
+ constexpr size_t MAX_DEPTH = 128;
+ return (aDepth < MAX_DEPTH) ? (aDepth + 1) : aDepth;
+}
+
+Atomic<bool, Relaxed> sStopFibonacci;
+
+// Compute fibonacci the hard way (recursively: `f(n)=f(n-1)+f(n-2)`), and
+// prevent inlining.
+// The template parameter makes each depth be a separate function, to better
+// distinguish them in the profiler output.
+template <size_t DEPTH = 0>
+MOZ_NEVER_INLINE unsigned long long Fibonacci(unsigned long long n) {
+ AUTO_BASE_PROFILER_LABEL_DYNAMIC_STRING("fib", OTHER, std::to_string(DEPTH));
+ if (n == 0) {
+ return 0;
+ }
+ if (n == 1) {
+ return 1;
+ }
+ if (DEPTH < 5 && sStopFibonacci) {
+ return 1'000'000'000;
+ }
+ TimeStamp start = TimeStamp::Now();
+ static constexpr size_t MAX_MARKER_DEPTH = 10;
+ unsigned long long f2 = Fibonacci<NextDepth(DEPTH)>(n - 2);
+ if (DEPTH == 0) {
+ BASE_PROFILER_MARKER_UNTYPED("Half-way through Fibonacci", OTHER);
+ }
+ unsigned long long f1 = Fibonacci<NextDepth(DEPTH)>(n - 1);
+ if (DEPTH < MAX_MARKER_DEPTH) {
+ BASE_PROFILER_MARKER_TEXT("fib", OTHER,
+ MarkerTiming::IntervalUntilNowFrom(start),
+ std::to_string(DEPTH));
+ }
+ return f2 + f1;
+}
+
+void TestProfiler() {
+ printf("TestProfiler starting -- pid: %" PRIu64 ", tid: %" PRIu64 "\n",
+ uint64_t(baseprofiler::profiler_current_process_id().ToNumber()),
+ uint64_t(baseprofiler::profiler_current_thread_id().ToNumber()));
+ // ::SleepMilli(10000);
+
+ TestProfilerDependencies();
+
+ {
+ MOZ_RELEASE_ASSERT(!baseprofiler::profiler_is_active());
+ MOZ_RELEASE_ASSERT(!baseprofiler::profiler_thread_is_being_profiled());
+ MOZ_RELEASE_ASSERT(!baseprofiler::profiler_thread_is_sleeping());
+
+ const baseprofiler::BaseProfilerThreadId mainThreadId =
+ mozilla::baseprofiler::profiler_current_thread_id();
+
+ MOZ_RELEASE_ASSERT(mozilla::baseprofiler::profiler_main_thread_id() ==
+ mainThreadId);
+ MOZ_RELEASE_ASSERT(mozilla::baseprofiler::profiler_is_main_thread());
+
+ std::thread testThread([&]() {
+ const baseprofiler::BaseProfilerThreadId testThreadId =
+ mozilla::baseprofiler::profiler_current_thread_id();
+ MOZ_RELEASE_ASSERT(testThreadId != mainThreadId);
+
+ MOZ_RELEASE_ASSERT(mozilla::baseprofiler::profiler_main_thread_id() !=
+ testThreadId);
+ MOZ_RELEASE_ASSERT(!mozilla::baseprofiler::profiler_is_main_thread());
+ });
+ testThread.join();
+
+ printf("profiler_start()...\n");
+ Vector<const char*> filters;
+ // Profile all registered threads.
+ MOZ_RELEASE_ASSERT(filters.append(""));
+ const uint32_t features = baseprofiler::ProfilerFeature::StackWalk;
+ baseprofiler::profiler_start(baseprofiler::BASE_PROFILER_DEFAULT_ENTRIES,
+ BASE_PROFILER_DEFAULT_INTERVAL, features,
+ filters.begin(), filters.length());
+
+ MOZ_RELEASE_ASSERT(baseprofiler::profiler_is_active());
+ MOZ_RELEASE_ASSERT(baseprofiler::profiler_thread_is_being_profiled());
+ MOZ_RELEASE_ASSERT(!baseprofiler::profiler_thread_is_sleeping());
+
+ sStopFibonacci = false;
+
+ std::thread threadFib([]() {
+ AUTO_BASE_PROFILER_REGISTER_THREAD("fibonacci");
+ SleepMilli(5);
+ auto cause = baseprofiler::profiler_capture_backtrace();
+ AUTO_BASE_PROFILER_MARKER_TEXT(
+ "fibonacci", OTHER, MarkerStack::TakeBacktrace(std::move(cause)),
+ "First leaf call");
+ static const unsigned long long fibStart = 37;
+ printf("Fibonacci(%llu)...\n", fibStart);
+ AUTO_BASE_PROFILER_LABEL("Label around Fibonacci", OTHER);
+
+ unsigned long long f = Fibonacci(fibStart);
+ printf("Fibonacci(%llu) = %llu\n", fibStart, f);
+ });
+
+ std::thread threadCancelFib([]() {
+ AUTO_BASE_PROFILER_REGISTER_THREAD("fibonacci canceller");
+ SleepMilli(5);
+ AUTO_BASE_PROFILER_MARKER_TEXT("fibonacci", OTHER, {}, "Canceller");
+ static const int waitMaxSeconds = 10;
+ for (int i = 0; i < waitMaxSeconds; ++i) {
+ if (sStopFibonacci) {
+ AUTO_BASE_PROFILER_LABEL_DYNAMIC_STRING("fibCancel", OTHER,
+ std::to_string(i));
+ return;
+ }
+ AUTO_BASE_PROFILER_THREAD_SLEEP;
+ SleepMilli(1000);
+ }
+ AUTO_BASE_PROFILER_LABEL_DYNAMIC_STRING("fibCancel", OTHER,
+ "Cancelling!");
+ sStopFibonacci = true;
+ });
+
+ {
+ AUTO_BASE_PROFILER_MARKER_TEXT("main thread", OTHER, {},
+ "joining fibonacci thread");
+ AUTO_BASE_PROFILER_THREAD_SLEEP;
+ threadFib.join();
+ }
+
+ {
+ AUTO_BASE_PROFILER_MARKER_TEXT("main thread", OTHER, {},
+ "joining fibonacci-canceller thread");
+ sStopFibonacci = true;
+ AUTO_BASE_PROFILER_THREAD_SLEEP;
+ threadCancelFib.join();
+ }
+
+ // Just making sure all payloads know how to (de)serialize and stream.
+
+ MOZ_RELEASE_ASSERT(
+ baseprofiler::AddMarker("markers 2.0 without options (omitted)",
+ mozilla::baseprofiler::category::OTHER));
+
+ MOZ_RELEASE_ASSERT(baseprofiler::AddMarker(
+ "markers 2.0 without options (implicit brace-init)",
+ mozilla::baseprofiler::category::OTHER, {}));
+
+ MOZ_RELEASE_ASSERT(baseprofiler::AddMarker(
+ "markers 2.0 without options (explicit init)",
+ mozilla::baseprofiler::category::OTHER, MarkerOptions()));
+
+ MOZ_RELEASE_ASSERT(baseprofiler::AddMarker(
+ "markers 2.0 without options (explicit brace-init)",
+ mozilla::baseprofiler::category::OTHER, MarkerOptions{}));
+
+ MOZ_RELEASE_ASSERT(baseprofiler::AddMarker(
+ "markers 2.0 with one option (implicit)",
+ mozilla::baseprofiler::category::OTHER, MarkerInnerWindowId(123)));
+
+ MOZ_RELEASE_ASSERT(baseprofiler::AddMarker(
+ "markers 2.0 with one option (implicit brace-init)",
+ mozilla::baseprofiler::category::OTHER, {MarkerInnerWindowId(123)}));
+
+ MOZ_RELEASE_ASSERT(
+ baseprofiler::AddMarker("markers 2.0 with one option (explicit init)",
+ mozilla::baseprofiler::category::OTHER,
+ MarkerOptions(MarkerInnerWindowId(123))));
+
+ MOZ_RELEASE_ASSERT(baseprofiler::AddMarker(
+ "markers 2.0 with one option (explicit brace-init)",
+ mozilla::baseprofiler::category::OTHER,
+ MarkerOptions{MarkerInnerWindowId(123)}));
+
+ MOZ_RELEASE_ASSERT(baseprofiler::AddMarker(
+ "markers 2.0 with two options (implicit brace-init)",
+ mozilla::baseprofiler::category::OTHER,
+ {MarkerInnerWindowId(123), MarkerStack::Capture()}));
+
+ MOZ_RELEASE_ASSERT(baseprofiler::AddMarker(
+ "markers 2.0 with two options (explicit init)",
+ mozilla::baseprofiler::category::OTHER,
+ MarkerOptions(MarkerInnerWindowId(123), MarkerStack::Capture())));
+
+ MOZ_RELEASE_ASSERT(baseprofiler::AddMarker(
+ "markers 2.0 with two options (explicit brace-init)",
+ mozilla::baseprofiler::category::OTHER,
+ MarkerOptions{MarkerInnerWindowId(123), MarkerStack::Capture()}));
+
+ MOZ_RELEASE_ASSERT(
+ baseprofiler::AddMarker("default-templated markers 2.0 without options",
+ mozilla::baseprofiler::category::OTHER));
+
+ MOZ_RELEASE_ASSERT(baseprofiler::AddMarker(
+ "default-templated markers 2.0 with option",
+ mozilla::baseprofiler::category::OTHER, MarkerInnerWindowId(123)));
+
+ MOZ_RELEASE_ASSERT(baseprofiler::AddMarker(
+ "explicitly-default-templated markers 2.0 without options",
+ mozilla::baseprofiler::category::OTHER, {},
+ ::mozilla::baseprofiler::markers::NoPayload{}));
+
+ MOZ_RELEASE_ASSERT(baseprofiler::AddMarker(
+ "explicitly-default-templated markers 2.0 with option",
+ mozilla::baseprofiler::category::OTHER, MarkerInnerWindowId(123),
+ ::mozilla::baseprofiler::markers::NoPayload{}));
+
+ MOZ_RELEASE_ASSERT(baseprofiler::AddMarker(
+ "tracing", mozilla::baseprofiler::category::OTHER, {},
+ mozilla::baseprofiler::markers::Tracing{}, "category"));
+
+ MOZ_RELEASE_ASSERT(baseprofiler::AddMarker(
+ "text", mozilla::baseprofiler::category::OTHER, {},
+ mozilla::baseprofiler::markers::TextMarker{}, "text text"));
+
+ MOZ_RELEASE_ASSERT(baseprofiler::AddMarker(
+ "media sample", mozilla::baseprofiler::category::OTHER, {},
+ mozilla::baseprofiler::markers::MediaSampleMarker{}, 123, 456, 789));
+
+ MOZ_RELEASE_ASSERT(baseprofiler::AddMarker(
+ "video falling behind", mozilla::baseprofiler::category::OTHER, {},
+ mozilla::baseprofiler::markers::VideoFallingBehindMarker{}, 123, 456));
+
+ printf("Sleep 1s...\n");
+ {
+ AUTO_BASE_PROFILER_THREAD_SLEEP;
+ SleepMilli(1000);
+ }
+
+ printf("baseprofiler_pause()...\n");
+ baseprofiler::profiler_pause();
+
+ MOZ_RELEASE_ASSERT(!baseprofiler::profiler_thread_is_being_profiled());
+
+ Maybe<baseprofiler::ProfilerBufferInfo> info =
+ baseprofiler::profiler_get_buffer_info();
+ MOZ_RELEASE_ASSERT(info.isSome());
+ printf("Profiler buffer range: %llu .. %llu (%llu bytes)\n",
+ static_cast<unsigned long long>(info->mRangeStart),
+ static_cast<unsigned long long>(info->mRangeEnd),
+ // sizeof(ProfileBufferEntry) == 9
+ (static_cast<unsigned long long>(info->mRangeEnd) -
+ static_cast<unsigned long long>(info->mRangeStart)) *
+ 9);
+ printf("Stats: min(us) .. mean(us) .. max(us) [count]\n");
+ printf("- Intervals: %7.1f .. %7.1f .. %7.1f [%u]\n",
+ info->mIntervalsUs.min,
+ info->mIntervalsUs.sum / info->mIntervalsUs.n,
+ info->mIntervalsUs.max, info->mIntervalsUs.n);
+ printf("- Overheads: %7.1f .. %7.1f .. %7.1f [%u]\n",
+ info->mOverheadsUs.min,
+ info->mOverheadsUs.sum / info->mOverheadsUs.n,
+ info->mOverheadsUs.max, info->mOverheadsUs.n);
+ printf(" - Locking: %7.1f .. %7.1f .. %7.1f [%u]\n",
+ info->mLockingsUs.min, info->mLockingsUs.sum / info->mLockingsUs.n,
+ info->mLockingsUs.max, info->mLockingsUs.n);
+ printf(" - Clearning: %7.1f .. %7.1f .. %7.1f [%u]\n",
+ info->mCleaningsUs.min,
+ info->mCleaningsUs.sum / info->mCleaningsUs.n,
+ info->mCleaningsUs.max, info->mCleaningsUs.n);
+ printf(" - Counters: %7.1f .. %7.1f .. %7.1f [%u]\n",
+ info->mCountersUs.min, info->mCountersUs.sum / info->mCountersUs.n,
+ info->mCountersUs.max, info->mCountersUs.n);
+ printf(" - Threads: %7.1f .. %7.1f .. %7.1f [%u]\n",
+ info->mThreadsUs.min, info->mThreadsUs.sum / info->mThreadsUs.n,
+ info->mThreadsUs.max, info->mThreadsUs.n);
+
+ printf("baseprofiler_get_profile()...\n");
+ UniquePtr<char[]> profile = baseprofiler::profiler_get_profile();
+
+ // Use a string view over the profile contents, for easier testing.
+ std::string_view profileSV = profile.get();
+
+ constexpr const auto svnpos = std::string_view::npos;
+ // TODO: Properly parse profile and check fields.
+ // Check for some expected marker schema JSON output.
+ MOZ_RELEASE_ASSERT(profileSV.find("\"markerSchema\":[") != svnpos);
+ MOZ_RELEASE_ASSERT(profileSV.find("\"name\":\"Text\",") != svnpos);
+ MOZ_RELEASE_ASSERT(profileSV.find("\"name\":\"tracing\",") != svnpos);
+ MOZ_RELEASE_ASSERT(profileSV.find("\"name\":\"MediaSample\",") != svnpos);
+ MOZ_RELEASE_ASSERT(profileSV.find("\"display\":[") != svnpos);
+ MOZ_RELEASE_ASSERT(profileSV.find("\"marker-chart\"") != svnpos);
+ MOZ_RELEASE_ASSERT(profileSV.find("\"marker-table\"") != svnpos);
+ MOZ_RELEASE_ASSERT(profileSV.find("\"format\":\"string\"") != svnpos);
+ // TODO: Add more checks for what's expected in the profile. Some of them
+ // are done in gtest's.
+
+ printf("baseprofiler_save_profile_to_file()...\n");
+ baseprofiler::baseprofiler_save_profile_to_file(
+ "TestProfiler_profile.json");
+
+ printf("profiler_stop()...\n");
+ baseprofiler::profiler_stop();
+
+ MOZ_RELEASE_ASSERT(!baseprofiler::profiler_is_active());
+ MOZ_RELEASE_ASSERT(!baseprofiler::profiler_thread_is_being_profiled());
+ MOZ_RELEASE_ASSERT(!baseprofiler::profiler_thread_is_sleeping());
+
+ printf("profiler_shutdown()...\n");
+ }
+
+ printf("TestProfiler done\n");
+}
+
+// Minimal string escaping, similar to how C++ stringliterals should be entered,
+// to help update comparison strings in tests below.
+void printEscaped(std::string_view aString) {
+ for (const char c : aString) {
+ switch (c) {
+ case '\n':
+ fprintf(stderr, "\\n\n");
+ break;
+ case '"':
+ fprintf(stderr, "\\\"");
+ break;
+ case '\\':
+ fprintf(stderr, "\\\\");
+ break;
+ default:
+ if (c >= ' ' && c <= '~') {
+ fprintf(stderr, "%c", c);
+ } else {
+ fprintf(stderr, "\\x%02x", unsigned(c));
+ }
+ break;
+ }
+ }
+}
+
+// Run aF(SpliceableChunkedJSONWriter&, UniqueJSONStrings&) from inside a JSON
+// array, then output the string table, and compare the full output to
+// aExpected.
+template <typename F>
+static void VerifyUniqueStringContents(
+ F&& aF, std::string_view aExpectedData,
+ std::string_view aExpectedUniqueStrings,
+ mozilla::baseprofiler::UniqueJSONStrings* aUniqueStringsOrNull = nullptr) {
+ mozilla::baseprofiler::SpliceableChunkedJSONWriter writer{
+ FailureLatchInfallibleSource::Singleton()};
+
+ MOZ_RELEASE_ASSERT(!writer.ChunkedWriteFunc().Fallible());
+ MOZ_RELEASE_ASSERT(!writer.ChunkedWriteFunc().Failed());
+ MOZ_RELEASE_ASSERT(!writer.ChunkedWriteFunc().GetFailure());
+ MOZ_RELEASE_ASSERT(&writer.ChunkedWriteFunc().SourceFailureLatch() ==
+ &mozilla::FailureLatchInfallibleSource::Singleton());
+ MOZ_RELEASE_ASSERT(
+ &std::as_const(writer.ChunkedWriteFunc()).SourceFailureLatch() ==
+ &mozilla::FailureLatchInfallibleSource::Singleton());
+
+ MOZ_RELEASE_ASSERT(!writer.Fallible());
+ MOZ_RELEASE_ASSERT(!writer.Failed());
+ MOZ_RELEASE_ASSERT(!writer.GetFailure());
+ MOZ_RELEASE_ASSERT(&writer.SourceFailureLatch() ==
+ &mozilla::FailureLatchInfallibleSource::Singleton());
+ MOZ_RELEASE_ASSERT(&std::as_const(writer).SourceFailureLatch() ==
+ &mozilla::FailureLatchInfallibleSource::Singleton());
+
+ // By default use a local UniqueJSONStrings, otherwise use the one provided.
+ mozilla::baseprofiler::UniqueJSONStrings localUniqueStrings{
+ FailureLatchInfallibleSource::Singleton()};
+ MOZ_RELEASE_ASSERT(!localUniqueStrings.Fallible());
+ MOZ_RELEASE_ASSERT(!localUniqueStrings.Failed());
+ MOZ_RELEASE_ASSERT(!localUniqueStrings.GetFailure());
+ MOZ_RELEASE_ASSERT(&localUniqueStrings.SourceFailureLatch() ==
+ &mozilla::FailureLatchInfallibleSource::Singleton());
+ MOZ_RELEASE_ASSERT(&std::as_const(localUniqueStrings).SourceFailureLatch() ==
+ &mozilla::FailureLatchInfallibleSource::Singleton());
+
+ mozilla::baseprofiler::UniqueJSONStrings& uniqueStrings =
+ aUniqueStringsOrNull ? *aUniqueStringsOrNull : localUniqueStrings;
+ MOZ_RELEASE_ASSERT(!uniqueStrings.Failed());
+ MOZ_RELEASE_ASSERT(!uniqueStrings.GetFailure());
+
+ writer.Start();
+ {
+ writer.StartArrayProperty("data");
+ { std::forward<F>(aF)(writer, uniqueStrings); }
+ writer.EndArray();
+
+ writer.StartArrayProperty("stringTable");
+ { uniqueStrings.SpliceStringTableElements(writer); }
+ writer.EndArray();
+ }
+ writer.End();
+
+ MOZ_RELEASE_ASSERT(!uniqueStrings.Failed());
+ MOZ_RELEASE_ASSERT(!uniqueStrings.GetFailure());
+
+ MOZ_RELEASE_ASSERT(!writer.ChunkedWriteFunc().Failed());
+ MOZ_RELEASE_ASSERT(!writer.ChunkedWriteFunc().GetFailure());
+
+ MOZ_RELEASE_ASSERT(!writer.Failed());
+ MOZ_RELEASE_ASSERT(!writer.GetFailure());
+
+ UniquePtr<char[]> jsonString = writer.ChunkedWriteFunc().CopyData();
+ MOZ_RELEASE_ASSERT(jsonString);
+ std::string_view jsonStringView(jsonString.get());
+ const size_t length = writer.ChunkedWriteFunc().Length();
+ MOZ_RELEASE_ASSERT(length == jsonStringView.length());
+ std::string expected = "{\"data\":[";
+ expected += aExpectedData;
+ expected += "],\"stringTable\":[";
+ expected += aExpectedUniqueStrings;
+ expected += "]}";
+ if (jsonStringView != expected) {
+ fprintf(stderr,
+ "Expected:\n"
+ "------\n");
+ printEscaped(expected);
+ fprintf(stderr,
+ "\n"
+ "------\n"
+ "Actual:\n"
+ "------\n");
+ printEscaped(jsonStringView);
+ fprintf(stderr,
+ "\n"
+ "------\n");
+ }
+ MOZ_RELEASE_ASSERT(jsonStringView == expected);
+}
+
+void TestUniqueJSONStrings() {
+ printf("TestUniqueJSONStrings...\n");
+
+ using SCJW = mozilla::baseprofiler::SpliceableChunkedJSONWriter;
+ using UJS = mozilla::baseprofiler::UniqueJSONStrings;
+
+ // Empty everything.
+ VerifyUniqueStringContents([](SCJW& aWriter, UJS& aUniqueStrings) {}, "", "");
+
+ // Empty unique strings.
+ VerifyUniqueStringContents(
+ [](SCJW& aWriter, UJS& aUniqueStrings) {
+ aWriter.StringElement("string");
+ },
+ R"("string")", "");
+
+ // One unique string.
+ VerifyUniqueStringContents(
+ [](SCJW& aWriter, UJS& aUniqueStrings) {
+ aUniqueStrings.WriteElement(aWriter, "string");
+ },
+ "0", R"("string")");
+
+ // One unique string twice.
+ VerifyUniqueStringContents(
+ [](SCJW& aWriter, UJS& aUniqueStrings) {
+ aUniqueStrings.WriteElement(aWriter, "string");
+ aUniqueStrings.WriteElement(aWriter, "string");
+ },
+ "0,0", R"("string")");
+
+ // Two single unique strings.
+ VerifyUniqueStringContents(
+ [](SCJW& aWriter, UJS& aUniqueStrings) {
+ aUniqueStrings.WriteElement(aWriter, "string0");
+ aUniqueStrings.WriteElement(aWriter, "string1");
+ },
+ "0,1", R"("string0","string1")");
+
+ // Two unique strings with repetition.
+ VerifyUniqueStringContents(
+ [](SCJW& aWriter, UJS& aUniqueStrings) {
+ aUniqueStrings.WriteElement(aWriter, "string0");
+ aUniqueStrings.WriteElement(aWriter, "string1");
+ aUniqueStrings.WriteElement(aWriter, "string0");
+ },
+ "0,1,0", R"("string0","string1")");
+
+ // Mix some object properties, for coverage.
+ VerifyUniqueStringContents(
+ [](SCJW& aWriter, UJS& aUniqueStrings) {
+ aUniqueStrings.WriteElement(aWriter, "string0");
+ aWriter.StartObjectElement();
+ {
+ aUniqueStrings.WriteProperty(aWriter, "p0", "prop");
+ aUniqueStrings.WriteProperty(aWriter, "p1", "string0");
+ aUniqueStrings.WriteProperty(aWriter, "p2", "prop");
+ }
+ aWriter.EndObject();
+ aUniqueStrings.WriteElement(aWriter, "string1");
+ aUniqueStrings.WriteElement(aWriter, "string0");
+ aUniqueStrings.WriteElement(aWriter, "prop");
+ },
+ R"(0,{"p0":1,"p1":0,"p2":1},2,0,1)", R"("string0","prop","string1")");
+
+ // Unique string table with pre-existing data.
+ {
+ UJS ujs{FailureLatchInfallibleSource::Singleton()};
+ {
+ SCJW writer{FailureLatchInfallibleSource::Singleton()};
+ ujs.WriteElement(writer, "external0");
+ ujs.WriteElement(writer, "external1");
+ ujs.WriteElement(writer, "external0");
+ }
+ VerifyUniqueStringContents(
+ [](SCJW& aWriter, UJS& aUniqueStrings) {
+ aUniqueStrings.WriteElement(aWriter, "string0");
+ aUniqueStrings.WriteElement(aWriter, "string1");
+ aUniqueStrings.WriteElement(aWriter, "string0");
+ },
+ "2,3,2", R"("external0","external1","string0","string1")", &ujs);
+ }
+
+ // Unique string table with pre-existing data from another table.
+ {
+ UJS ujs{FailureLatchInfallibleSource::Singleton()};
+ {
+ SCJW writer{FailureLatchInfallibleSource::Singleton()};
+ ujs.WriteElement(writer, "external0");
+ ujs.WriteElement(writer, "external1");
+ ujs.WriteElement(writer, "external0");
+ }
+ UJS ujsCopy(FailureLatchInfallibleSource::Singleton(), ujs,
+ mozilla::ProgressLogger{});
+ VerifyUniqueStringContents(
+ [](SCJW& aWriter, UJS& aUniqueStrings) {
+ aUniqueStrings.WriteElement(aWriter, "string0");
+ aUniqueStrings.WriteElement(aWriter, "string1");
+ aUniqueStrings.WriteElement(aWriter, "string0");
+ },
+ "2,3,2", R"("external0","external1","string0","string1")", &ujs);
+ }
+
+ // Unique string table through SpliceableJSONWriter.
+ VerifyUniqueStringContents(
+ [](SCJW& aWriter, UJS& aUniqueStrings) {
+ aWriter.SetUniqueStrings(aUniqueStrings);
+ aWriter.UniqueStringElement("string0");
+ aWriter.StartObjectElement();
+ {
+ aWriter.UniqueStringProperty("p0", "prop");
+ aWriter.UniqueStringProperty("p1", "string0");
+ aWriter.UniqueStringProperty("p2", "prop");
+ }
+ aWriter.EndObject();
+ aWriter.UniqueStringElement("string1");
+ aWriter.UniqueStringElement("string0");
+ aWriter.UniqueStringElement("prop");
+ aWriter.ResetUniqueStrings();
+ },
+ R"(0,{"p0":1,"p1":0,"p2":1},2,0,1)", R"("string0","prop","string1")");
+
+ printf("TestUniqueJSONStrings done\n");
+}
+
+void StreamMarkers(const mozilla::ProfileChunkedBuffer& aBuffer,
+ mozilla::baseprofiler::SpliceableJSONWriter& aWriter) {
+ aWriter.StartArrayProperty("data");
+ {
+ aBuffer.ReadEach([&](mozilla::ProfileBufferEntryReader& aEntryReader) {
+ mozilla::ProfileBufferEntryKind entryKind =
+ aEntryReader.ReadObject<mozilla::ProfileBufferEntryKind>();
+ MOZ_RELEASE_ASSERT(entryKind == mozilla::ProfileBufferEntryKind::Marker);
+
+ mozilla::base_profiler_markers_detail::DeserializeAfterKindAndStream(
+ aEntryReader,
+ [&](const mozilla::baseprofiler::BaseProfilerThreadId&) {
+ return &aWriter;
+ },
+ [&](mozilla::ProfileChunkedBuffer&) {
+ aWriter.StringElement("Real backtrace would be here");
+ },
+ [&](mozilla::base_profiler_markers_detail::Streaming::
+ DeserializerTag) {});
+ });
+ }
+ aWriter.EndArray();
+}
+
+void PrintMarkers(const mozilla::ProfileChunkedBuffer& aBuffer) {
+ mozilla::baseprofiler::SpliceableJSONWriter writer(
+ mozilla::MakeUnique<mozilla::baseprofiler::OStreamJSONWriteFunc>(
+ std::cout),
+ FailureLatchInfallibleSource::Singleton());
+ mozilla::baseprofiler::UniqueJSONStrings uniqueStrings{
+ FailureLatchInfallibleSource::Singleton()};
+ writer.SetUniqueStrings(uniqueStrings);
+ writer.Start();
+ {
+ StreamMarkers(aBuffer, writer);
+
+ writer.StartArrayProperty("stringTable");
+ { uniqueStrings.SpliceStringTableElements(writer); }
+ writer.EndArray();
+ }
+ writer.End();
+ writer.ResetUniqueStrings();
+}
+
+static void SubTestMarkerCategory(
+ const mozilla::MarkerCategory& aMarkerCategory,
+ const mozilla::baseprofiler::ProfilingCategoryPair& aProfilingCategoryPair,
+ const mozilla::baseprofiler::ProfilingCategory& aProfilingCategory) {
+ MOZ_RELEASE_ASSERT(aMarkerCategory.CategoryPair() == aProfilingCategoryPair,
+ "Unexpected MarkerCategory::CategoryPair()");
+
+ MOZ_RELEASE_ASSERT(
+ mozilla::MarkerCategory(aProfilingCategoryPair).CategoryPair() ==
+ aProfilingCategoryPair,
+ "MarkerCategory(<name>).CategoryPair() should return <name>");
+
+ MOZ_RELEASE_ASSERT(aMarkerCategory.GetCategory() == aProfilingCategory,
+ "Unexpected MarkerCategory::GetCategory()");
+
+ mozilla::ProfileBufferChunkManagerSingle chunkManager(512);
+ mozilla::ProfileChunkedBuffer buffer(
+ mozilla::ProfileChunkedBuffer::ThreadSafety::WithoutMutex, chunkManager);
+ mozilla::ProfileBufferBlockIndex i = buffer.PutObject(aMarkerCategory);
+ MOZ_RELEASE_ASSERT(i != mozilla::ProfileBufferBlockIndex{},
+ "Failed serialization");
+ buffer.ReadEach([&](mozilla::ProfileBufferEntryReader& aER,
+ mozilla::ProfileBufferBlockIndex aIndex) {
+ MOZ_RELEASE_ASSERT(aIndex == i, "Unexpected deserialization index");
+ const auto readCategory = aER.ReadObject<mozilla::MarkerCategory>();
+ MOZ_RELEASE_ASSERT(aER.RemainingBytes() == 0,
+ "Unexpected extra serialized bytes");
+ MOZ_RELEASE_ASSERT(readCategory.CategoryPair() == aProfilingCategoryPair,
+ "Incorrect deserialization value");
+ });
+}
+
+void TestMarkerCategory() {
+ printf("TestMarkerCategory...\n");
+
+ mozilla::ProfileBufferChunkManagerSingle chunkManager(512);
+ mozilla::ProfileChunkedBuffer buffer(
+ mozilla::ProfileChunkedBuffer::ThreadSafety::WithoutMutex, chunkManager);
+
+# define CATEGORY_ENUM_BEGIN_CATEGORY(name, labelAsString, color)
+# define CATEGORY_ENUM_SUBCATEGORY(supercategory, name, labelAsString) \
+ static_assert( \
+ std::is_same_v<decltype(mozilla::baseprofiler::category::name), \
+ const mozilla::MarkerCategory>, \
+ "baseprofiler::category::<name> should be a const MarkerCategory"); \
+ \
+ SubTestMarkerCategory( \
+ mozilla::baseprofiler::category::name, \
+ mozilla::baseprofiler::ProfilingCategoryPair::name, \
+ mozilla::baseprofiler::ProfilingCategory::supercategory);
+# define CATEGORY_ENUM_END_CATEGORY
+ MOZ_PROFILING_CATEGORY_LIST(CATEGORY_ENUM_BEGIN_CATEGORY,
+ CATEGORY_ENUM_SUBCATEGORY,
+ CATEGORY_ENUM_END_CATEGORY)
+# undef CATEGORY_ENUM_BEGIN_CATEGORY
+# undef CATEGORY_ENUM_SUBCATEGORY
+# undef CATEGORY_ENUM_END_CATEGORY
+
+ printf("TestMarkerCategory done\n");
+}
+
+void TestMarkerThreadId() {
+ printf("TestMarkerThreadId...\n");
+
+ MOZ_RELEASE_ASSERT(MarkerThreadId{}.IsUnspecified());
+ MOZ_RELEASE_ASSERT(!MarkerThreadId::MainThread().IsUnspecified());
+ MOZ_RELEASE_ASSERT(!MarkerThreadId::CurrentThread().IsUnspecified());
+
+ MOZ_RELEASE_ASSERT(!MarkerThreadId{
+ mozilla::baseprofiler::BaseProfilerThreadId::FromNumber(42)}
+ .IsUnspecified());
+ MOZ_RELEASE_ASSERT(
+ MarkerThreadId{
+ mozilla::baseprofiler::BaseProfilerThreadId::FromNumber(42)}
+ .ThreadId()
+ .ToNumber() == 42);
+
+ // We'll assume that this test runs in the main thread (which should be true
+ // when called from the `main` function).
+ MOZ_RELEASE_ASSERT(MarkerThreadId::MainThread().ThreadId() ==
+ mozilla::baseprofiler::profiler_main_thread_id());
+
+ MOZ_RELEASE_ASSERT(MarkerThreadId::CurrentThread().ThreadId() ==
+ mozilla::baseprofiler::profiler_current_thread_id());
+
+ MOZ_RELEASE_ASSERT(MarkerThreadId::CurrentThread().ThreadId() ==
+ mozilla::baseprofiler::profiler_main_thread_id());
+
+ std::thread testThread([]() {
+ MOZ_RELEASE_ASSERT(!MarkerThreadId::MainThread().IsUnspecified());
+ MOZ_RELEASE_ASSERT(!MarkerThreadId::CurrentThread().IsUnspecified());
+
+ MOZ_RELEASE_ASSERT(MarkerThreadId::MainThread().ThreadId() ==
+ mozilla::baseprofiler::profiler_main_thread_id());
+
+ MOZ_RELEASE_ASSERT(MarkerThreadId::CurrentThread().ThreadId() ==
+ mozilla::baseprofiler::profiler_current_thread_id());
+
+ MOZ_RELEASE_ASSERT(MarkerThreadId::CurrentThread().ThreadId() !=
+ mozilla::baseprofiler::profiler_main_thread_id());
+ });
+ testThread.join();
+
+ printf("TestMarkerThreadId done\n");
+}
+
+void TestMarkerNoPayload() {
+ printf("TestMarkerNoPayload...\n");
+
+ mozilla::ProfileBufferChunkManagerSingle chunkManager(512);
+ mozilla::ProfileChunkedBuffer buffer(
+ mozilla::ProfileChunkedBuffer::ThreadSafety::WithoutMutex, chunkManager);
+
+ mozilla::ProfileBufferBlockIndex i0 =
+ mozilla::baseprofiler::AddMarkerToBuffer(
+ buffer, "literal", mozilla::baseprofiler::category::OTHER_Profiling);
+ MOZ_RELEASE_ASSERT(i0);
+
+ const std::string dynamic = "dynamic";
+ mozilla::ProfileBufferBlockIndex i1 =
+ mozilla::baseprofiler::AddMarkerToBuffer(
+ buffer, dynamic,
+ mozilla::baseprofiler::category::GRAPHICS_FlushingAsyncPaints, {});
+ MOZ_RELEASE_ASSERT(i1);
+ MOZ_RELEASE_ASSERT(i1 > i0);
+
+ mozilla::ProfileBufferBlockIndex i2 =
+ mozilla::baseprofiler::AddMarkerToBuffer(
+ buffer, std::string_view("string_view"),
+ mozilla::baseprofiler::category::GRAPHICS_FlushingAsyncPaints, {});
+ MOZ_RELEASE_ASSERT(i2);
+ MOZ_RELEASE_ASSERT(i2 > i1);
+
+# ifdef DEBUG
+ buffer.Dump();
+# endif
+
+ PrintMarkers(buffer);
+
+ printf("TestMarkerNoPayload done\n");
+}
+
+void TestUserMarker() {
+ printf("TestUserMarker...\n");
+
+ // User-defined marker type with text.
+ // It's fine to define it right in the function where it's used.
+ struct MarkerTypeTestMinimal {
+ static constexpr Span<const char> MarkerTypeName() {
+ return MakeStringSpan("test-minimal");
+ }
+ static void StreamJSONMarkerData(
+ mozilla::baseprofiler::SpliceableJSONWriter& aWriter,
+ const std::string& aText) {
+ aWriter.StringProperty("text", aText);
+ }
+ static mozilla::MarkerSchema MarkerTypeDisplay() {
+ using MS = mozilla::MarkerSchema;
+ MS schema{MS::Location::MarkerChart, MS::Location::MarkerTable};
+ schema.SetTooltipLabel("tooltip for test-minimal");
+ schema.AddKeyLabelFormatSearchable("text", "Text", MS::Format::String,
+ MS::Searchable::Searchable);
+ return schema;
+ }
+ };
+
+ mozilla::ProfileBufferChunkManagerSingle chunkManager(1024);
+ mozilla::ProfileChunkedBuffer buffer(
+ mozilla::ProfileChunkedBuffer::ThreadSafety::WithoutMutex, chunkManager);
+
+ MOZ_RELEASE_ASSERT(mozilla::baseprofiler::AddMarkerToBuffer(
+ buffer, "test2", mozilla::baseprofiler::category::OTHER_Profiling, {},
+ MarkerTypeTestMinimal{}, std::string("payload text")));
+
+ MOZ_RELEASE_ASSERT(mozilla::baseprofiler::AddMarkerToBuffer(
+ buffer, "test2", mozilla::baseprofiler::category::OTHER_Profiling,
+ mozilla::MarkerThreadId(
+ mozilla::baseprofiler::BaseProfilerThreadId::FromNumber(123)),
+ MarkerTypeTestMinimal{}, std::string("ThreadId(123)")));
+
+ auto start = mozilla::TimeStamp::Now();
+
+ MOZ_RELEASE_ASSERT(mozilla::baseprofiler::AddMarkerToBuffer(
+ buffer, "test2", mozilla::baseprofiler::category::OTHER_Profiling,
+ mozilla::MarkerTiming::InstantAt(start), MarkerTypeTestMinimal{},
+ std::string("InstantAt(start)")));
+
+ auto then = mozilla::TimeStamp::Now();
+
+ MOZ_RELEASE_ASSERT(mozilla::baseprofiler::AddMarkerToBuffer(
+ buffer, "test2", mozilla::baseprofiler::category::OTHER_Profiling,
+ mozilla::MarkerTiming::IntervalStart(start), MarkerTypeTestMinimal{},
+ std::string("IntervalStart(start)")));
+
+ MOZ_RELEASE_ASSERT(mozilla::baseprofiler::AddMarkerToBuffer(
+ buffer, "test2", mozilla::baseprofiler::category::OTHER_Profiling,
+ mozilla::MarkerTiming::IntervalEnd(then), MarkerTypeTestMinimal{},
+ std::string("IntervalEnd(then)")));
+
+ MOZ_RELEASE_ASSERT(mozilla::baseprofiler::AddMarkerToBuffer(
+ buffer, "test2", mozilla::baseprofiler::category::OTHER_Profiling,
+ mozilla::MarkerTiming::Interval(start, then), MarkerTypeTestMinimal{},
+ std::string("Interval(start, then)")));
+
+ MOZ_RELEASE_ASSERT(mozilla::baseprofiler::AddMarkerToBuffer(
+ buffer, "test2", mozilla::baseprofiler::category::OTHER_Profiling,
+ mozilla::MarkerTiming::IntervalUntilNowFrom(start),
+ MarkerTypeTestMinimal{}, std::string("IntervalUntilNowFrom(start)")));
+
+ MOZ_RELEASE_ASSERT(mozilla::baseprofiler::AddMarkerToBuffer(
+ buffer, "test2", mozilla::baseprofiler::category::OTHER_Profiling,
+ mozilla::MarkerStack::NoStack(), MarkerTypeTestMinimal{},
+ std::string("NoStack")));
+ // Note: We cannot test stack-capture here, because the profiler is not
+ // initialized.
+
+ MOZ_RELEASE_ASSERT(mozilla::baseprofiler::AddMarkerToBuffer(
+ buffer, "test2", mozilla::baseprofiler::category::OTHER_Profiling,
+ mozilla::MarkerInnerWindowId(123), MarkerTypeTestMinimal{},
+ std::string("InnerWindowId(123)")));
+
+# ifdef DEBUG
+ buffer.Dump();
+# endif
+
+ PrintMarkers(buffer);
+
+ printf("TestUserMarker done\n");
+}
+
+void TestPredefinedMarkers() {
+ printf("TestPredefinedMarkers...\n");
+
+ mozilla::ProfileBufferChunkManagerSingle chunkManager(1024);
+ mozilla::ProfileChunkedBuffer buffer(
+ mozilla::ProfileChunkedBuffer::ThreadSafety::WithoutMutex, chunkManager);
+
+ MOZ_RELEASE_ASSERT(mozilla::baseprofiler::AddMarkerToBuffer(
+ buffer, std::string_view("tracing"),
+ mozilla::baseprofiler::category::OTHER, {},
+ mozilla::baseprofiler::markers::Tracing{}, "category"));
+
+ MOZ_RELEASE_ASSERT(mozilla::baseprofiler::AddMarkerToBuffer(
+ buffer, std::string_view("text"), mozilla::baseprofiler::category::OTHER,
+ {}, mozilla::baseprofiler::markers::TextMarker{}, "text text"));
+
+ MOZ_RELEASE_ASSERT(mozilla::baseprofiler::AddMarkerToBuffer(
+ buffer, std::string_view("media"), mozilla::baseprofiler::category::OTHER,
+ {}, mozilla::baseprofiler::markers::MediaSampleMarker{}, 123, 456, 789));
+
+ MOZ_RELEASE_ASSERT(mozilla::baseprofiler::AddMarkerToBuffer(
+ buffer, std::string_view("media"), mozilla::baseprofiler::category::OTHER,
+ {}, mozilla::baseprofiler::markers::VideoFallingBehindMarker{}, 123,
+ 456));
+
+# ifdef DEBUG
+ buffer.Dump();
+# endif
+
+ PrintMarkers(buffer);
+
+ printf("TestPredefinedMarkers done\n");
+}
+
+void TestProfilerMarkers() {
+ printf(
+ "TestProfilerMarkers -- pid: %" PRIu64 ", tid: %" PRIu64 "\n",
+ uint64_t(mozilla::baseprofiler::profiler_current_process_id().ToNumber()),
+ uint64_t(mozilla::baseprofiler::profiler_current_thread_id().ToNumber()));
+ // ::SleepMilli(10000);
+
+ TestUniqueJSONStrings();
+ TestMarkerCategory();
+ TestMarkerThreadId();
+ TestMarkerNoPayload();
+ TestUserMarker();
+ TestPredefinedMarkers();
+
+ printf("TestProfilerMarkers done\n");
+}
+
+#else // MOZ_GECKO_PROFILER
+
+// Testing that macros are still #defined (but do nothing) when
+// MOZ_GECKO_PROFILER is disabled.
+void TestProfiler() {
+ // These don't need to make sense, we just want to know that they're defined
+ // and don't do anything.
+
+# ifndef AUTO_BASE_PROFILER_INIT
+# error AUTO_BASE_PROFILER_INIT not #defined
+# endif // AUTO_BASE_PROFILER_INIT
+ AUTO_BASE_PROFILER_INIT;
+
+# ifndef AUTO_BASE_PROFILER_MARKER_TEXT
+# error AUTO_BASE_PROFILER_MARKER_TEXT not #defined
+# endif // AUTO_BASE_PROFILER_MARKER_TEXT
+
+# ifndef AUTO_BASE_PROFILER_LABEL
+# error AUTO_BASE_PROFILER_LABEL not #defined
+# endif // AUTO_BASE_PROFILER_LABEL
+
+# ifndef AUTO_BASE_PROFILER_THREAD_SLEEP
+# error AUTO_BASE_PROFILER_THREAD_SLEEP not #defined
+# endif // AUTO_BASE_PROFILER_THREAD_SLEEP
+ AUTO_BASE_PROFILER_THREAD_SLEEP;
+
+# ifndef BASE_PROFILER_MARKER_UNTYPED
+# error BASE_PROFILER_MARKER_UNTYPED not #defined
+# endif // BASE_PROFILER_MARKER_UNTYPED
+
+# ifndef BASE_PROFILER_MARKER
+# error BASE_PROFILER_MARKER not #defined
+# endif // BASE_PROFILER_MARKER
+
+# ifndef BASE_PROFILER_MARKER_TEXT
+# error BASE_PROFILER_MARKER_TEXT not #defined
+# endif // BASE_PROFILER_MARKER_TEXT
+
+ MOZ_RELEASE_ASSERT(!mozilla::baseprofiler::profiler_get_backtrace(),
+ "profiler_get_backtrace should return nullptr");
+ mozilla::ProfileChunkedBuffer buffer(
+ mozilla::ProfileChunkedBuffer::ThreadSafety::WithoutMutex);
+ MOZ_RELEASE_ASSERT(!mozilla::baseprofiler::profiler_capture_backtrace_into(
+ buffer, mozilla::StackCaptureOptions::Full),
+ "profiler_capture_backtrace_into should return false");
+ MOZ_RELEASE_ASSERT(!mozilla::baseprofiler::profiler_capture_backtrace(),
+ "profiler_capture_backtrace should return nullptr");
+}
+
+// Testing that macros are still #defined (but do nothing) when
+// MOZ_GECKO_PROFILER is disabled.
+void TestProfilerMarkers() {
+ // These don't need to make sense, we just want to know that they're defined
+ // and don't do anything.
+}
+
+#endif // MOZ_GECKO_PROFILER else
+
+#if defined(XP_WIN)
+int wmain()
+#else
+int main()
+#endif // defined(XP_WIN)
+{
+#ifdef MOZ_GECKO_PROFILER
+ printf("BaseTestProfiler -- pid: %" PRIu64 ", tid: %" PRIu64 "\n",
+ uint64_t(baseprofiler::profiler_current_process_id().ToNumber()),
+ uint64_t(baseprofiler::profiler_current_thread_id().ToNumber()));
+ // ::SleepMilli(10000);
+#endif // MOZ_GECKO_PROFILER
+
+ TestFailureLatch();
+ TestProfilerUtils();
+ TestBaseAndProfilerDetail();
+ TestSharedMutex();
+ TestProportionValue();
+ TestProgressLogger();
+ // Note that there are two `TestProfiler{,Markers}` functions above, depending
+ // on whether MOZ_GECKO_PROFILER is #defined.
+ {
+ printf("profiler_init()...\n");
+ AUTO_BASE_PROFILER_INIT;
+
+ TestProfiler();
+ TestProfilerMarkers();
+ }
+
+ return 0;
+}
diff --git a/mozglue/tests/TestIntegerPrintfMacros.cpp b/mozglue/tests/TestIntegerPrintfMacros.cpp
new file mode 100644
index 0000000000..71fb26fc47
--- /dev/null
+++ b/mozglue/tests/TestIntegerPrintfMacros.cpp
@@ -0,0 +1,1128 @@
+/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* vim: set ts=8 sts=2 et sw=2 tw=80: */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this file,
+ * You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+#include "mozilla/Assertions.h"
+#include "mozilla/Sprintf.h"
+
+#include <string.h>
+#include <inttypes.h>
+
+/* Output array and poisoning method shared by all tests. */
+static char gOutput[32];
+
+static void PoisonOutput() { memset(gOutput, 0xDA, sizeof(gOutput)); }
+
+/*
+ * The fprintf macros for signed integers are:
+ *
+ * PRIdN PRIdLEASTN PRIdFASTN PRIdMAX PRIdPTR
+ * PRIiN PRIiLEASTN PRIiFASTN PRIiMAX PRIiPTR
+ *
+ * In these names N is the width of the type as described in C99 7.18.1.
+ */
+
+static void TestPrintSigned8() {
+ PoisonOutput();
+ SprintfLiteral(gOutput, "%" PRId8, int8_t(-17));
+ MOZ_RELEASE_ASSERT(!strcmp(gOutput, "-17"));
+
+ PoisonOutput();
+ SprintfLiteral(gOutput, "%" PRIi8, int8_t(42));
+ MOZ_RELEASE_ASSERT(!strcmp(gOutput, "42"));
+}
+
+static void TestPrintSigned16() {
+ PoisonOutput();
+ SprintfLiteral(gOutput, "%" PRId16, int16_t(-289));
+ MOZ_RELEASE_ASSERT(!strcmp(gOutput, "-289"));
+
+ PoisonOutput();
+ SprintfLiteral(gOutput, "%" PRIi16, int16_t(728));
+ MOZ_RELEASE_ASSERT(!strcmp(gOutput, "728"));
+}
+
+static void TestPrintSigned32() {
+ PoisonOutput();
+ SprintfLiteral(gOutput, "%" PRId32, int32_t(-342178));
+ MOZ_RELEASE_ASSERT(!strcmp(gOutput, "-342178"));
+
+ PoisonOutput();
+ SprintfLiteral(gOutput, "%" PRIi32, int32_t(5719283));
+ MOZ_RELEASE_ASSERT(!strcmp(gOutput, "5719283"));
+}
+
+static void TestPrintSigned64() {
+ PoisonOutput();
+ SprintfLiteral(gOutput, "%" PRId64, int64_t(-INT64_C(432157943248732)));
+ MOZ_RELEASE_ASSERT(!strcmp(gOutput, "-432157943248732"));
+
+ PoisonOutput();
+ SprintfLiteral(gOutput, "%" PRIi64, int64_t(INT64_C(325719232983)));
+ MOZ_RELEASE_ASSERT(!strcmp(gOutput, "325719232983"));
+}
+
+static void TestPrintSignedN() {
+ TestPrintSigned8();
+ TestPrintSigned16();
+ TestPrintSigned32();
+ TestPrintSigned64();
+}
+
+static void TestPrintSignedLeast8() {
+ PoisonOutput();
+ SprintfLiteral(gOutput, "%" PRIdLEAST8, int_least8_t(-17));
+ MOZ_RELEASE_ASSERT(!strcmp(gOutput, "-17"));
+
+ PoisonOutput();
+ SprintfLiteral(gOutput, "%" PRIiLEAST8, int_least8_t(42));
+ MOZ_RELEASE_ASSERT(!strcmp(gOutput, "42"));
+}
+
+static void TestPrintSignedLeast16() {
+ PoisonOutput();
+ SprintfLiteral(gOutput, "%" PRIdLEAST16, int_least16_t(-289));
+ MOZ_RELEASE_ASSERT(!strcmp(gOutput, "-289"));
+
+ PoisonOutput();
+ SprintfLiteral(gOutput, "%" PRIiLEAST16, int_least16_t(728));
+ MOZ_RELEASE_ASSERT(!strcmp(gOutput, "728"));
+}
+
+static void TestPrintSignedLeast32() {
+ PoisonOutput();
+ SprintfLiteral(gOutput, "%" PRIdLEAST32, int_least32_t(-342178));
+ MOZ_RELEASE_ASSERT(!strcmp(gOutput, "-342178"));
+
+ PoisonOutput();
+ SprintfLiteral(gOutput, "%" PRIiLEAST32, int_least32_t(5719283));
+ MOZ_RELEASE_ASSERT(!strcmp(gOutput, "5719283"));
+}
+
+static void TestPrintSignedLeast64() {
+ PoisonOutput();
+ SprintfLiteral(gOutput, "%" PRIdLEAST64,
+ int_least64_t(-INT64_C(432157943248732)));
+ MOZ_RELEASE_ASSERT(!strcmp(gOutput, "-432157943248732"));
+
+ PoisonOutput();
+ SprintfLiteral(gOutput, "%" PRIiLEAST64,
+ int_least64_t(INT64_C(325719232983)));
+ MOZ_RELEASE_ASSERT(!strcmp(gOutput, "325719232983"));
+}
+
+static void TestPrintSignedLeastN() {
+ TestPrintSignedLeast8();
+ TestPrintSignedLeast16();
+ TestPrintSignedLeast32();
+ TestPrintSignedLeast64();
+}
+
+static void TestPrintSignedFast8() {
+ PoisonOutput();
+ SprintfLiteral(gOutput, "%" PRIdFAST8, int_fast8_t(-17));
+ MOZ_RELEASE_ASSERT(!strcmp(gOutput, "-17"));
+
+ PoisonOutput();
+ SprintfLiteral(gOutput, "%" PRIiFAST8, int_fast8_t(42));
+ MOZ_RELEASE_ASSERT(!strcmp(gOutput, "42"));
+}
+
+static void TestPrintSignedFast16() {
+ PoisonOutput();
+ SprintfLiteral(gOutput, "%" PRIdFAST16, int_fast16_t(-289));
+ MOZ_RELEASE_ASSERT(!strcmp(gOutput, "-289"));
+
+ PoisonOutput();
+ SprintfLiteral(gOutput, "%" PRIiFAST16, int_fast16_t(728));
+ MOZ_RELEASE_ASSERT(!strcmp(gOutput, "728"));
+}
+
+static void TestPrintSignedFast32() {
+ PoisonOutput();
+ SprintfLiteral(gOutput, "%" PRIdFAST32, int_fast32_t(-342178));
+ MOZ_RELEASE_ASSERT(!strcmp(gOutput, "-342178"));
+
+ PoisonOutput();
+ SprintfLiteral(gOutput, "%" PRIiFAST32, int_fast32_t(5719283));
+ MOZ_RELEASE_ASSERT(!strcmp(gOutput, "5719283"));
+}
+
+static void TestPrintSignedFast64() {
+ PoisonOutput();
+ SprintfLiteral(gOutput, "%" PRIdFAST64,
+ int_fast64_t(-INT64_C(432157943248732)));
+ MOZ_RELEASE_ASSERT(!strcmp(gOutput, "-432157943248732"));
+
+ PoisonOutput();
+ SprintfLiteral(gOutput, "%" PRIiFAST64, int_fast64_t(INT64_C(325719232983)));
+ MOZ_RELEASE_ASSERT(!strcmp(gOutput, "325719232983"));
+}
+
+static void TestPrintSignedFastN() {
+ TestPrintSignedFast8();
+ TestPrintSignedFast16();
+ TestPrintSignedFast32();
+ TestPrintSignedFast64();
+}
+
+static void TestPrintSignedMax() {
+ PoisonOutput();
+ SprintfLiteral(gOutput, "%" PRIdMAX, intmax_t(-INTMAX_C(432157943248732)));
+ MOZ_RELEASE_ASSERT(!strcmp(gOutput, "-432157943248732"));
+
+ PoisonOutput();
+ SprintfLiteral(gOutput, "%" PRIiMAX, intmax_t(INTMAX_C(325719232983)));
+ MOZ_RELEASE_ASSERT(!strcmp(gOutput, "325719232983"));
+}
+
+static void TestPrintSignedPtr() {
+ PoisonOutput();
+ SprintfLiteral(gOutput, "%" PRIdPTR,
+ intptr_t(reinterpret_cast<void*>(12345678)));
+ MOZ_RELEASE_ASSERT(!strcmp(gOutput, "12345678"));
+
+ PoisonOutput();
+ SprintfLiteral(gOutput, "%" PRIiPTR,
+ intptr_t(reinterpret_cast<void*>(87654321)));
+ MOZ_RELEASE_ASSERT(!strcmp(gOutput, "87654321"));
+}
+
+static void TestPrintSigned() {
+ TestPrintSignedN();
+ TestPrintSignedLeastN();
+ TestPrintSignedFastN();
+ TestPrintSignedMax();
+ TestPrintSignedPtr();
+}
+
+/*
+ * The fprintf macros for unsigned integers are:
+ *
+ * PRIoN PRIoLEASTN PRIoFASTN PRIoMAX PRIoPTR
+ * PRIuN PRIuLEASTN PRIuFASTN PRIuMAX PRIuPTR
+ * PRIxN PRIxLEASTN PRIxFASTN PRIxMAX PRIxPTR
+ * PRIXN PRIXLEASTN PRIXFASTN PRIXMAX PRIXPTR
+ *
+ * In these names N is the width of the type as described in C99 7.18.1.
+ */
+
+static void TestPrintUnsigned8() {
+ PoisonOutput();
+ SprintfLiteral(gOutput, "%" PRIo8, uint8_t(042));
+ MOZ_RELEASE_ASSERT(!strcmp(gOutput, "42"));
+
+ PoisonOutput();
+ SprintfLiteral(gOutput, "%" PRIu8, uint8_t(17));
+ MOZ_RELEASE_ASSERT(!strcmp(gOutput, "17"));
+
+ PoisonOutput();
+ SprintfLiteral(gOutput, "%" PRIx8, uint8_t(0x2a));
+ MOZ_RELEASE_ASSERT(!strcmp(gOutput, "2a"));
+
+ PoisonOutput();
+ SprintfLiteral(gOutput, "%" PRIX8, uint8_t(0xCD));
+ MOZ_RELEASE_ASSERT(!strcmp(gOutput, "CD"));
+}
+
+static void TestPrintUnsigned16() {
+ PoisonOutput();
+ SprintfLiteral(gOutput, "%" PRIo16, uint16_t(04242));
+ MOZ_RELEASE_ASSERT(!strcmp(gOutput, "4242"));
+
+ PoisonOutput();
+ SprintfLiteral(gOutput, "%" PRIu16, uint16_t(1717));
+ MOZ_RELEASE_ASSERT(!strcmp(gOutput, "1717"));
+
+ PoisonOutput();
+ SprintfLiteral(gOutput, "%" PRIx16, uint16_t(0x2a2a));
+ MOZ_RELEASE_ASSERT(!strcmp(gOutput, "2a2a"));
+
+ PoisonOutput();
+ SprintfLiteral(gOutput, "%" PRIX16, uint16_t(0xCDCD));
+ MOZ_RELEASE_ASSERT(!strcmp(gOutput, "CDCD"));
+}
+
+static void TestPrintUnsigned32() {
+ PoisonOutput();
+ SprintfLiteral(gOutput, "%" PRIo32, uint32_t(0424242));
+ MOZ_RELEASE_ASSERT(!strcmp(gOutput, "424242"));
+
+ PoisonOutput();
+ SprintfLiteral(gOutput, "%" PRIu32, uint32_t(171717));
+ MOZ_RELEASE_ASSERT(!strcmp(gOutput, "171717"));
+
+ PoisonOutput();
+ SprintfLiteral(gOutput, "%" PRIx32, uint32_t(0x2a2a2a));
+ MOZ_RELEASE_ASSERT(!strcmp(gOutput, "2a2a2a"));
+
+ PoisonOutput();
+ SprintfLiteral(gOutput, "%" PRIX32, uint32_t(0xCDCDCD));
+ MOZ_RELEASE_ASSERT(!strcmp(gOutput, "CDCDCD"));
+}
+
+static void TestPrintUnsigned64() {
+ PoisonOutput();
+ SprintfLiteral(gOutput, "%" PRIo64, uint64_t(UINT64_C(0424242424242)));
+ MOZ_RELEASE_ASSERT(!strcmp(gOutput, "424242424242"));
+
+ PoisonOutput();
+ SprintfLiteral(gOutput, "%" PRIu64, uint64_t(UINT64_C(17171717171717171717)));
+ MOZ_RELEASE_ASSERT(!strcmp(gOutput, "17171717171717171717"));
+
+ PoisonOutput();
+ SprintfLiteral(gOutput, "%" PRIx64, uint64_t(UINT64_C(0x2a2a2a2a2a2a2a)));
+ MOZ_RELEASE_ASSERT(!strcmp(gOutput, "2a2a2a2a2a2a2a"));
+
+ PoisonOutput();
+ SprintfLiteral(gOutput, "%" PRIX64, uint64_t(UINT64_C(0xCDCDCDCDCDCD)));
+ MOZ_RELEASE_ASSERT(!strcmp(gOutput, "CDCDCDCDCDCD"));
+}
+
+static void TestPrintUnsignedN() {
+ TestPrintUnsigned8();
+ TestPrintUnsigned16();
+ TestPrintUnsigned32();
+ TestPrintUnsigned64();
+}
+
+static void TestPrintUnsignedLeast8() {
+ PoisonOutput();
+ SprintfLiteral(gOutput, "%" PRIoLEAST8, uint_least8_t(042));
+ MOZ_RELEASE_ASSERT(!strcmp(gOutput, "42"));
+
+ PoisonOutput();
+ SprintfLiteral(gOutput, "%" PRIuLEAST8, uint_least8_t(17));
+ MOZ_RELEASE_ASSERT(!strcmp(gOutput, "17"));
+
+ PoisonOutput();
+ SprintfLiteral(gOutput, "%" PRIxLEAST8, uint_least8_t(0x2a));
+ MOZ_RELEASE_ASSERT(!strcmp(gOutput, "2a"));
+
+ PoisonOutput();
+ SprintfLiteral(gOutput, "%" PRIXLEAST8, uint_least8_t(0xCD));
+ MOZ_RELEASE_ASSERT(!strcmp(gOutput, "CD"));
+}
+
+static void TestPrintUnsignedLeast16() {
+ PoisonOutput();
+ SprintfLiteral(gOutput, "%" PRIoLEAST16, uint_least16_t(04242));
+ MOZ_RELEASE_ASSERT(!strcmp(gOutput, "4242"));
+
+ PoisonOutput();
+ SprintfLiteral(gOutput, "%" PRIuLEAST16, uint_least16_t(1717));
+ MOZ_RELEASE_ASSERT(!strcmp(gOutput, "1717"));
+
+ PoisonOutput();
+ SprintfLiteral(gOutput, "%" PRIxLEAST16, uint_least16_t(0x2a2a));
+ MOZ_RELEASE_ASSERT(!strcmp(gOutput, "2a2a"));
+
+ PoisonOutput();
+ SprintfLiteral(gOutput, "%" PRIXLEAST16, uint_least16_t(0xCDCD));
+ MOZ_RELEASE_ASSERT(!strcmp(gOutput, "CDCD"));
+}
+
+static void TestPrintUnsignedLeast32() {
+ PoisonOutput();
+ SprintfLiteral(gOutput, "%" PRIoLEAST32, uint_least32_t(0424242));
+ MOZ_RELEASE_ASSERT(!strcmp(gOutput, "424242"));
+
+ PoisonOutput();
+ SprintfLiteral(gOutput, "%" PRIuLEAST32, uint_least32_t(171717));
+ MOZ_RELEASE_ASSERT(!strcmp(gOutput, "171717"));
+
+ PoisonOutput();
+ SprintfLiteral(gOutput, "%" PRIxLEAST32, uint_least32_t(0x2a2a2a));
+ MOZ_RELEASE_ASSERT(!strcmp(gOutput, "2a2a2a"));
+
+ PoisonOutput();
+ SprintfLiteral(gOutput, "%" PRIXLEAST32, uint_least32_t(0xCDCDCD));
+ MOZ_RELEASE_ASSERT(!strcmp(gOutput, "CDCDCD"));
+}
+
+static void TestPrintUnsignedLeast64() {
+ PoisonOutput();
+ SprintfLiteral(gOutput, "%" PRIoLEAST64,
+ uint_least64_t(UINT64_C(0424242424242)));
+ MOZ_RELEASE_ASSERT(!strcmp(gOutput, "424242424242"));
+
+ PoisonOutput();
+ SprintfLiteral(gOutput, "%" PRIuLEAST64,
+ uint_least64_t(UINT64_C(17171717171717171717)));
+ MOZ_RELEASE_ASSERT(!strcmp(gOutput, "17171717171717171717"));
+
+ PoisonOutput();
+ SprintfLiteral(gOutput, "%" PRIxLEAST64,
+ uint_least64_t(UINT64_C(0x2a2a2a2a2a2a2a)));
+ MOZ_RELEASE_ASSERT(!strcmp(gOutput, "2a2a2a2a2a2a2a"));
+
+ PoisonOutput();
+ SprintfLiteral(gOutput, "%" PRIXLEAST64,
+ uint_least64_t(UINT64_C(0xCDCDCDCDCDCD)));
+ MOZ_RELEASE_ASSERT(!strcmp(gOutput, "CDCDCDCDCDCD"));
+}
+
+static void TestPrintUnsignedLeastN() {
+ TestPrintUnsignedLeast8();
+ TestPrintUnsignedLeast16();
+ TestPrintUnsignedLeast32();
+ TestPrintUnsignedLeast64();
+}
+
+static void TestPrintUnsignedFast8() {
+ PoisonOutput();
+ SprintfLiteral(gOutput, "%" PRIoFAST8, uint_fast8_t(042));
+ MOZ_RELEASE_ASSERT(!strcmp(gOutput, "42"));
+
+ PoisonOutput();
+ SprintfLiteral(gOutput, "%" PRIuFAST8, uint_fast8_t(17));
+ MOZ_RELEASE_ASSERT(!strcmp(gOutput, "17"));
+
+ PoisonOutput();
+ SprintfLiteral(gOutput, "%" PRIxFAST8, uint_fast8_t(0x2a));
+ MOZ_RELEASE_ASSERT(!strcmp(gOutput, "2a"));
+
+ PoisonOutput();
+ SprintfLiteral(gOutput, "%" PRIXFAST8, uint_fast8_t(0xCD));
+ MOZ_RELEASE_ASSERT(!strcmp(gOutput, "CD"));
+}
+
+static void TestPrintUnsignedFast16() {
+ PoisonOutput();
+ SprintfLiteral(gOutput, "%" PRIoFAST16, uint_fast16_t(04242));
+ MOZ_RELEASE_ASSERT(!strcmp(gOutput, "4242"));
+
+ PoisonOutput();
+ SprintfLiteral(gOutput, "%" PRIuFAST16, uint_fast16_t(1717));
+ MOZ_RELEASE_ASSERT(!strcmp(gOutput, "1717"));
+
+ PoisonOutput();
+ SprintfLiteral(gOutput, "%" PRIxFAST16, uint_fast16_t(0x2a2a));
+ MOZ_RELEASE_ASSERT(!strcmp(gOutput, "2a2a"));
+
+ PoisonOutput();
+ SprintfLiteral(gOutput, "%" PRIXFAST16, uint_fast16_t(0xCDCD));
+ MOZ_RELEASE_ASSERT(!strcmp(gOutput, "CDCD"));
+}
+
+static void TestPrintUnsignedFast32() {
+ PoisonOutput();
+ SprintfLiteral(gOutput, "%" PRIoFAST32, uint_fast32_t(0424242));
+ MOZ_RELEASE_ASSERT(!strcmp(gOutput, "424242"));
+
+ PoisonOutput();
+ SprintfLiteral(gOutput, "%" PRIuFAST32, uint_fast32_t(171717));
+ MOZ_RELEASE_ASSERT(!strcmp(gOutput, "171717"));
+
+ PoisonOutput();
+ SprintfLiteral(gOutput, "%" PRIxFAST32, uint_fast32_t(0x2a2a2a));
+ MOZ_RELEASE_ASSERT(!strcmp(gOutput, "2a2a2a"));
+
+ PoisonOutput();
+ SprintfLiteral(gOutput, "%" PRIXFAST32, uint_fast32_t(0xCDCDCD));
+ MOZ_RELEASE_ASSERT(!strcmp(gOutput, "CDCDCD"));
+}
+
+static void TestPrintUnsignedFast64() {
+ PoisonOutput();
+ SprintfLiteral(gOutput, "%" PRIoFAST64,
+ uint_fast64_t(UINT64_C(0424242424242)));
+ MOZ_RELEASE_ASSERT(!strcmp(gOutput, "424242424242"));
+
+ PoisonOutput();
+ SprintfLiteral(gOutput, "%" PRIuFAST64,
+ uint_fast64_t(UINT64_C(17171717171717171717)));
+ MOZ_RELEASE_ASSERT(!strcmp(gOutput, "17171717171717171717"));
+
+ PoisonOutput();
+ SprintfLiteral(gOutput, "%" PRIxFAST64,
+ uint_fast64_t(UINT64_C(0x2a2a2a2a2a2a2a)));
+ MOZ_RELEASE_ASSERT(!strcmp(gOutput, "2a2a2a2a2a2a2a"));
+
+ PoisonOutput();
+ SprintfLiteral(gOutput, "%" PRIXFAST64,
+ uint_fast64_t(UINT64_C(0xCDCDCDCDCDCD)));
+ MOZ_RELEASE_ASSERT(!strcmp(gOutput, "CDCDCDCDCDCD"));
+}
+
+static void TestPrintUnsignedFastN() {
+ TestPrintUnsignedFast8();
+ TestPrintUnsignedFast16();
+ TestPrintUnsignedFast32();
+ TestPrintUnsignedFast64();
+}
+
+static void TestPrintUnsignedMax() {
+ PoisonOutput();
+ SprintfLiteral(gOutput, "%" PRIoMAX, uintmax_t(UINTMAX_C(432157943248732)));
+ MOZ_RELEASE_ASSERT(!strcmp(gOutput, "14220563454333534"));
+
+ PoisonOutput();
+ SprintfLiteral(gOutput, "%" PRIuMAX, uintmax_t(UINTMAX_C(325719232983)));
+ MOZ_RELEASE_ASSERT(!strcmp(gOutput, "325719232983"));
+
+ PoisonOutput();
+ SprintfLiteral(gOutput, "%" PRIxMAX, uintmax_t(UINTMAX_C(327281321873)));
+ MOZ_RELEASE_ASSERT(!strcmp(gOutput, "4c337ca791"));
+
+ PoisonOutput();
+ SprintfLiteral(gOutput, "%" PRIXMAX, uintmax_t(UINTMAX_C(912389523743523)));
+ MOZ_RELEASE_ASSERT(!strcmp(gOutput, "33DD03D75A323"));
+}
+
+static void TestPrintUnsignedPtr() {
+ PoisonOutput();
+ SprintfLiteral(gOutput, "%" PRIoPTR,
+ uintptr_t(reinterpret_cast<void*>(12345678)));
+ MOZ_RELEASE_ASSERT(!strcmp(gOutput, "57060516"));
+
+ PoisonOutput();
+ SprintfLiteral(gOutput, "%" PRIuPTR,
+ uintptr_t(reinterpret_cast<void*>(87654321)));
+ MOZ_RELEASE_ASSERT(!strcmp(gOutput, "87654321"));
+
+ PoisonOutput();
+ SprintfLiteral(gOutput, "%" PRIxPTR,
+ uintptr_t(reinterpret_cast<void*>(0x4c3a791)));
+ MOZ_RELEASE_ASSERT(!strcmp(gOutput, "4c3a791"));
+
+ PoisonOutput();
+ SprintfLiteral(gOutput, "%" PRIXPTR,
+ uintptr_t(reinterpret_cast<void*>(0xF328DB)));
+ MOZ_RELEASE_ASSERT(!strcmp(gOutput, "F328DB"));
+}
+
+static void TestPrintUnsigned() {
+ TestPrintUnsignedN();
+ TestPrintUnsignedLeastN();
+ TestPrintUnsignedFastN();
+ TestPrintUnsignedMax();
+ TestPrintUnsignedPtr();
+}
+
+static void TestPrint() {
+ TestPrintSigned();
+ TestPrintUnsigned();
+}
+
+/*
+ * The fscanf macros for signed integers are:
+ *
+ * SCNdN SCNdLEASTN SCNdFASTN SCNdMAX SCNdPTR
+ * SCNiN SCNiLEASTN SCNiFASTN SCNiMAX SCNiPTR
+ *
+ * In these names N is the width of the type as described in C99 7.18.1.
+ */
+
+/*
+ * MSVC's scanf is insufficiently powerful to implement all the SCN* macros.
+ * Rather than support some subset of them, we instead support none of them.
+ * See the comment at the top of IntegerPrintfMacros.h. But in case we ever do
+ * support them, the following tests should adequately test implementation
+ * correctness. (Indeed, these tests *revealed* MSVC's limitations.)
+ *
+ * That said, even if MSVC ever picks up complete support, we still probably
+ * don't want to support these, because of the undefined-behavior issue noted
+ * further down in the comment atop IntegerPrintfMacros.h.
+ */
+#define SHOULD_TEST_SCANF_MACROS 0
+
+#if SHOULD_TEST_SCANF_MACROS
+
+/*
+ * glibc header definitions for SCN{d,i,o,u,x}{,LEAST,FAST}8 use the "hh" length
+ * modifier, which is new in C99 (and C++11, by reference). We compile this
+ * file as C++11, so if "hh" is used in these macros, it's standard. But some
+ * versions of gcc wrongly think it isn't and warn about a "non-standard"
+ * modifier. And since these tests mostly exist to verify format-macro/type
+ * consistency (particularly through compiler warnings about incorrect formats),
+ * these warnings are unacceptable. So for now, compile tests for those macros
+ * only if we aren't compiling with gcc.
+ */
+# define SHOULD_TEST_8BIT_FORMAT_MACROS (!(MOZ_IS_GCC))
+
+template <typename T>
+union Input {
+ T mI;
+ unsigned char mPun[16];
+};
+
+template <typename T>
+static void PoisonInput(Input<T>& aInput) {
+ memset(aInput.mPun, 0xDA, sizeof(aInput.mPun));
+}
+
+template <typename T>
+static bool ExtraBitsUntouched(const Input<T>& aInput) {
+ for (size_t i = sizeof(aInput.mI); i < sizeof(aInput); i++) {
+ if (aInput.mPun[i] != 0xDA) {
+ return false;
+ }
+ }
+
+ return true;
+}
+
+static void TestScanSigned8() {
+# if SHOULD_TEST_8BIT_FORMAT_MACROS
+ Input<int8_t> u;
+
+ PoisonInput(u);
+ sscanf("-17", "%" SCNd8, &u.mI);
+ MOZ_RELEASE_ASSERT(u.mI == -17);
+ MOZ_RELEASE_ASSERT(ExtraBitsUntouched(u));
+
+ PoisonInput(u);
+ sscanf("042", "%" SCNi8, &u.mI);
+ MOZ_RELEASE_ASSERT(u.mI == 042);
+ MOZ_RELEASE_ASSERT(ExtraBitsUntouched(u));
+# endif
+}
+
+static void TestScanSigned16() {
+ Input<int16_t> u;
+
+ PoisonInput(u);
+ sscanf("-1742", "%" SCNd16, &u.mI);
+ MOZ_RELEASE_ASSERT(u.mI == -1742);
+ MOZ_RELEASE_ASSERT(ExtraBitsUntouched(u));
+
+ PoisonInput(u);
+ sscanf("04217", "%" SCNi16, &u.mI);
+ MOZ_RELEASE_ASSERT(u.mI == 04217);
+ MOZ_RELEASE_ASSERT(ExtraBitsUntouched(u));
+}
+
+static void TestScanSigned32() {
+ Input<int32_t> u;
+
+ PoisonInput(u);
+ sscanf("-174257", "%" SCNd32, &u.mI);
+ MOZ_RELEASE_ASSERT(u.mI == -174257);
+ MOZ_RELEASE_ASSERT(ExtraBitsUntouched(u));
+
+ PoisonInput(u);
+ sscanf("0423571", "%" SCNi32, &u.mI);
+ MOZ_RELEASE_ASSERT(u.mI == 0423571);
+ MOZ_RELEASE_ASSERT(ExtraBitsUntouched(u));
+}
+
+static void TestScanSigned64() {
+ Input<int64_t> u;
+
+ PoisonInput(u);
+ sscanf("-17425238927232", "%" SCNd64, &u.mI);
+ MOZ_RELEASE_ASSERT(u.mI == -INT64_C(17425238927232));
+ MOZ_RELEASE_ASSERT(ExtraBitsUntouched(u));
+
+ PoisonInput(u);
+ sscanf("042333576571", "%" SCNi64, &u.mI);
+ MOZ_RELEASE_ASSERT(u.mI == INT64_C(042333576571));
+ MOZ_RELEASE_ASSERT(ExtraBitsUntouched(u));
+}
+
+static void TestScanSignedN() {
+ TestScanSigned8();
+ TestScanSigned16();
+ TestScanSigned32();
+ TestScanSigned64();
+}
+
+static void TestScanSignedLeast8() {
+# if SHOULD_TEST_8BIT_FORMAT_MACROS
+ Input<int_least8_t> u;
+
+ PoisonInput(u);
+ sscanf("-17", "%" SCNdLEAST8, &u.mI);
+ MOZ_RELEASE_ASSERT(u.mI == -17);
+ MOZ_RELEASE_ASSERT(ExtraBitsUntouched(u));
+
+ PoisonInput(u);
+ sscanf("042", "%" SCNiLEAST8, &u.mI);
+ MOZ_RELEASE_ASSERT(u.mI == 042);
+ MOZ_RELEASE_ASSERT(ExtraBitsUntouched(u));
+# endif
+}
+
+static void TestScanSignedLeast16() {
+ Input<int_least16_t> u;
+
+ PoisonInput(u);
+ sscanf("-1742", "%" SCNdLEAST16, &u.mI);
+ MOZ_RELEASE_ASSERT(u.mI == -1742);
+ MOZ_RELEASE_ASSERT(ExtraBitsUntouched(u));
+
+ PoisonInput(u);
+ sscanf("04217", "%" SCNiLEAST16, &u.mI);
+ MOZ_RELEASE_ASSERT(u.mI == 04217);
+ MOZ_RELEASE_ASSERT(ExtraBitsUntouched(u));
+}
+
+static void TestScanSignedLeast32() {
+ Input<int_least32_t> u;
+
+ PoisonInput(u);
+ sscanf("-174257", "%" SCNdLEAST32, &u.mI);
+ MOZ_RELEASE_ASSERT(u.mI == -174257);
+ MOZ_RELEASE_ASSERT(ExtraBitsUntouched(u));
+
+ PoisonInput(u);
+ sscanf("0423571", "%" SCNiLEAST32, &u.mI);
+ MOZ_RELEASE_ASSERT(u.mI == 0423571);
+ MOZ_RELEASE_ASSERT(ExtraBitsUntouched(u));
+}
+
+static void TestScanSignedLeast64() {
+ Input<int_least64_t> u;
+
+ PoisonInput(u);
+ sscanf("-17425238927232", "%" SCNdLEAST64, &u.mI);
+ MOZ_RELEASE_ASSERT(u.mI == -INT64_C(17425238927232));
+ MOZ_RELEASE_ASSERT(ExtraBitsUntouched(u));
+
+ PoisonInput(u);
+ sscanf("042333576571", "%" SCNiLEAST64, &u.mI);
+ MOZ_RELEASE_ASSERT(u.mI == INT64_C(042333576571));
+ MOZ_RELEASE_ASSERT(ExtraBitsUntouched(u));
+}
+
+static void TestScanSignedLeastN() {
+ TestScanSignedLeast8();
+ TestScanSignedLeast16();
+ TestScanSignedLeast32();
+ TestScanSignedLeast64();
+}
+
+static void TestScanSignedFast8() {
+# if SHOULD_TEST_8BIT_FORMAT_MACROS
+ Input<int_fast8_t> u;
+
+ PoisonInput(u);
+ sscanf("-17", "%" SCNdFAST8, &u.mI);
+ MOZ_RELEASE_ASSERT(u.mI == -17);
+ MOZ_RELEASE_ASSERT(ExtraBitsUntouched(u));
+
+ PoisonInput(u);
+ sscanf("042", "%" SCNiFAST8, &u.mI);
+ MOZ_RELEASE_ASSERT(u.mI == 042);
+ MOZ_RELEASE_ASSERT(ExtraBitsUntouched(u));
+# endif
+}
+
+static void TestScanSignedFast16() {
+ Input<int_fast16_t> u;
+
+ PoisonInput(u);
+ sscanf("-1742", "%" SCNdFAST16, &u.mI);
+ MOZ_RELEASE_ASSERT(u.mI == -1742);
+ MOZ_RELEASE_ASSERT(ExtraBitsUntouched(u));
+
+ PoisonInput(u);
+ sscanf("04217", "%" SCNiFAST16, &u.mI);
+ MOZ_RELEASE_ASSERT(u.mI == 04217);
+ MOZ_RELEASE_ASSERT(ExtraBitsUntouched(u));
+}
+
+static void TestScanSignedFast32() {
+ Input<int_fast32_t> u;
+
+ PoisonInput(u);
+ sscanf("-174257", "%" SCNdFAST32, &u.mI);
+ MOZ_RELEASE_ASSERT(u.mI == -174257);
+ MOZ_RELEASE_ASSERT(ExtraBitsUntouched(u));
+
+ PoisonInput(u);
+ sscanf("0423571", "%" SCNiFAST32, &u.mI);
+ MOZ_RELEASE_ASSERT(u.mI == 0423571);
+ MOZ_RELEASE_ASSERT(ExtraBitsUntouched(u));
+}
+
+static void TestScanSignedFast64() {
+ Input<int_fast64_t> u;
+
+ PoisonInput(u);
+ sscanf("-17425238927232", "%" SCNdFAST64, &u.mI);
+ MOZ_RELEASE_ASSERT(u.mI == -INT64_C(17425238927232));
+ MOZ_RELEASE_ASSERT(ExtraBitsUntouched(u));
+
+ PoisonInput(u);
+ sscanf("042333576571", "%" SCNiFAST64, &u.mI);
+ MOZ_RELEASE_ASSERT(u.mI == INT64_C(042333576571));
+ MOZ_RELEASE_ASSERT(ExtraBitsUntouched(u));
+}
+
+static void TestScanSignedFastN() {
+ TestScanSignedFast8();
+ TestScanSignedFast16();
+ TestScanSignedFast32();
+ TestScanSignedFast64();
+}
+
+static void TestScanSignedMax() {
+ Input<intmax_t> u;
+
+ PoisonInput(u);
+ sscanf("-432157943248732", "%" SCNdMAX, &u.mI);
+ MOZ_RELEASE_ASSERT(u.mI == -INTMAX_C(432157943248732));
+ MOZ_RELEASE_ASSERT(ExtraBitsUntouched(u));
+
+ PoisonInput(u);
+ sscanf("04233357236571", "%" SCNiMAX, &u.mI);
+ MOZ_RELEASE_ASSERT(u.mI == INTMAX_C(04233357236571));
+ MOZ_RELEASE_ASSERT(ExtraBitsUntouched(u));
+}
+
+static void TestScanSignedPtr() {
+ Input<intptr_t> u;
+
+ PoisonInput(u);
+ sscanf("12345678", "%" SCNdPTR, &u.mI);
+ MOZ_RELEASE_ASSERT(u.mI == intptr_t(reinterpret_cast<void*>(12345678)));
+ MOZ_RELEASE_ASSERT(ExtraBitsUntouched(u));
+
+ PoisonInput(u);
+ sscanf("04233357236", "%" SCNiPTR, &u.mI);
+ MOZ_RELEASE_ASSERT(u.mI == intptr_t(reinterpret_cast<void*>(04233357236)));
+ MOZ_RELEASE_ASSERT(ExtraBitsUntouched(u));
+}
+
+static void TestScanSigned() {
+ TestScanSignedN();
+ TestScanSignedLeastN();
+ TestScanSignedFastN();
+ TestScanSignedMax();
+ TestScanSignedPtr();
+}
+
+/*
+ * The fscanf macros for unsigned integers are:
+ *
+ * SCNoN SCNoLEASTN SCNoFASTN SCNoMAX SCNoPTR
+ * SCNuN SCNuLEASTN SCNuFASTN SCNuMAX SCNuPTR
+ * SCNxN SCNxLEASTN SCNxFASTN SCNxMAX SCNxPTR
+ *
+ * In these names N is the width of the type as described in C99 7.18.1.
+ */
+
+static void TestScanUnsigned8() {
+# if SHOULD_TEST_8BIT_FORMAT_MACROS
+ Input<uint8_t> u;
+
+ PoisonInput(u);
+ sscanf("17", "%" SCNo8, &u.mI);
+ MOZ_RELEASE_ASSERT(u.mI == 017);
+ MOZ_RELEASE_ASSERT(ExtraBitsUntouched(u));
+
+ PoisonInput(u);
+ sscanf("42", "%" SCNu8, &u.mI);
+ MOZ_RELEASE_ASSERT(u.mI == 42);
+ MOZ_RELEASE_ASSERT(ExtraBitsUntouched(u));
+
+ PoisonInput(u);
+ sscanf("2A", "%" SCNx8, &u.mI);
+ MOZ_RELEASE_ASSERT(u.mI == 0x2A);
+ MOZ_RELEASE_ASSERT(ExtraBitsUntouched(u));
+# endif
+}
+
+static void TestScanUnsigned16() {
+ Input<uint16_t> u;
+
+ PoisonInput(u);
+ sscanf("1742", "%" SCNo16, &u.mI);
+ MOZ_RELEASE_ASSERT(u.mI == 01742);
+ MOZ_RELEASE_ASSERT(ExtraBitsUntouched(u));
+
+ PoisonInput(u);
+ sscanf("4217", "%" SCNu16, &u.mI);
+ MOZ_RELEASE_ASSERT(u.mI == 4217);
+ MOZ_RELEASE_ASSERT(ExtraBitsUntouched(u));
+
+ PoisonInput(u);
+ sscanf("2ABC", "%" SCNx16, &u.mI);
+ MOZ_RELEASE_ASSERT(u.mI == 0x2ABC);
+ MOZ_RELEASE_ASSERT(ExtraBitsUntouched(u));
+}
+
+static void TestScanUnsigned32() {
+ Input<uint32_t> u;
+
+ PoisonInput(u);
+ sscanf("17421742", "%" SCNo32, &u.mI);
+ MOZ_RELEASE_ASSERT(u.mI == 017421742);
+ MOZ_RELEASE_ASSERT(ExtraBitsUntouched(u));
+
+ PoisonInput(u);
+ sscanf("4217867", "%" SCNu32, &u.mI);
+ MOZ_RELEASE_ASSERT(u.mI == 4217867);
+ MOZ_RELEASE_ASSERT(ExtraBitsUntouched(u));
+
+ PoisonInput(u);
+ sscanf("2ABCBEEF", "%" SCNx32, &u.mI);
+ MOZ_RELEASE_ASSERT(u.mI == 0x2ABCBEEF);
+ MOZ_RELEASE_ASSERT(ExtraBitsUntouched(u));
+}
+
+static void TestScanUnsigned64() {
+ Input<uint64_t> u;
+
+ PoisonInput(u);
+ sscanf("17421742173", "%" SCNo64, &u.mI);
+ MOZ_RELEASE_ASSERT(u.mI == UINT64_C(017421742173));
+ MOZ_RELEASE_ASSERT(ExtraBitsUntouched(u));
+
+ PoisonInput(u);
+ sscanf("421786713579", "%" SCNu64, &u.mI);
+ MOZ_RELEASE_ASSERT(u.mI == UINT64_C(421786713579));
+ MOZ_RELEASE_ASSERT(ExtraBitsUntouched(u));
+
+ PoisonInput(u);
+ sscanf("DEADBEEF7457E", "%" SCNx64, &u.mI);
+ MOZ_RELEASE_ASSERT(u.mI == UINT64_C(0xDEADBEEF7457E));
+ MOZ_RELEASE_ASSERT(ExtraBitsUntouched(u));
+}
+
+static void TestScanUnsignedN() {
+ TestScanUnsigned8();
+ TestScanUnsigned16();
+ TestScanUnsigned32();
+ TestScanUnsigned64();
+}
+
+static void TestScanUnsignedLeast8() {
+# if SHOULD_TEST_8BIT_FORMAT_MACROS
+ Input<uint_least8_t> u;
+
+ PoisonInput(u);
+ sscanf("17", "%" SCNoLEAST8, &u.mI);
+ MOZ_RELEASE_ASSERT(u.mI == 017);
+ MOZ_RELEASE_ASSERT(ExtraBitsUntouched(u));
+
+ PoisonInput(u);
+ sscanf("42", "%" SCNuLEAST8, &u.mI);
+ MOZ_RELEASE_ASSERT(u.mI == 42);
+ MOZ_RELEASE_ASSERT(ExtraBitsUntouched(u));
+
+ PoisonInput(u);
+ sscanf("2A", "%" SCNxLEAST8, &u.mI);
+ MOZ_RELEASE_ASSERT(u.mI == 0x2A);
+ MOZ_RELEASE_ASSERT(ExtraBitsUntouched(u));
+# endif
+}
+
+static void TestScanUnsignedLeast16() {
+ Input<uint_least16_t> u;
+
+ PoisonInput(u);
+ sscanf("1742", "%" SCNoLEAST16, &u.mI);
+ MOZ_RELEASE_ASSERT(u.mI == 01742);
+ MOZ_RELEASE_ASSERT(ExtraBitsUntouched(u));
+
+ PoisonInput(u);
+ sscanf("4217", "%" SCNuLEAST16, &u.mI);
+ MOZ_RELEASE_ASSERT(u.mI == 4217);
+ MOZ_RELEASE_ASSERT(ExtraBitsUntouched(u));
+
+ PoisonInput(u);
+ sscanf("2ABC", "%" SCNxLEAST16, &u.mI);
+ MOZ_RELEASE_ASSERT(u.mI == 0x2ABC);
+ MOZ_RELEASE_ASSERT(ExtraBitsUntouched(u));
+}
+
+static void TestScanUnsignedLeast32() {
+ Input<uint_least32_t> u;
+
+ PoisonInput(u);
+ sscanf("17421742", "%" SCNoLEAST32, &u.mI);
+ MOZ_RELEASE_ASSERT(u.mI == 017421742);
+ MOZ_RELEASE_ASSERT(ExtraBitsUntouched(u));
+
+ PoisonInput(u);
+ sscanf("4217867", "%" SCNuLEAST32, &u.mI);
+ MOZ_RELEASE_ASSERT(u.mI == 4217867);
+ MOZ_RELEASE_ASSERT(ExtraBitsUntouched(u));
+
+ PoisonInput(u);
+ sscanf("2ABCBEEF", "%" SCNxLEAST32, &u.mI);
+ MOZ_RELEASE_ASSERT(u.mI == 0x2ABCBEEF);
+ MOZ_RELEASE_ASSERT(ExtraBitsUntouched(u));
+}
+
+static void TestScanUnsignedLeast64() {
+ Input<uint_least64_t> u;
+
+ PoisonInput(u);
+ sscanf("17421742173", "%" SCNoLEAST64, &u.mI);
+ MOZ_RELEASE_ASSERT(u.mI == UINT64_C(017421742173));
+ MOZ_RELEASE_ASSERT(ExtraBitsUntouched(u));
+
+ PoisonInput(u);
+ sscanf("421786713579", "%" SCNuLEAST64, &u.mI);
+ MOZ_RELEASE_ASSERT(u.mI == UINT64_C(421786713579));
+ MOZ_RELEASE_ASSERT(ExtraBitsUntouched(u));
+
+ PoisonInput(u);
+ sscanf("DEADBEEF7457E", "%" SCNxLEAST64, &u.mI);
+ MOZ_RELEASE_ASSERT(u.mI == UINT64_C(0xDEADBEEF7457E));
+ MOZ_RELEASE_ASSERT(ExtraBitsUntouched(u));
+}
+
+static void TestScanUnsignedLeastN() {
+ TestScanUnsignedLeast8();
+ TestScanUnsignedLeast16();
+ TestScanUnsignedLeast32();
+ TestScanUnsignedLeast64();
+}
+
+static void TestScanUnsignedFast8() {
+# if SHOULD_TEST_8BIT_FORMAT_MACROS
+ Input<uint_fast8_t> u;
+
+ PoisonInput(u);
+ sscanf("17", "%" SCNoFAST8, &u.mI);
+ MOZ_RELEASE_ASSERT(u.mI == 017);
+ MOZ_RELEASE_ASSERT(ExtraBitsUntouched(u));
+
+ PoisonInput(u);
+ sscanf("42", "%" SCNuFAST8, &u.mI);
+ MOZ_RELEASE_ASSERT(u.mI == 42);
+ MOZ_RELEASE_ASSERT(ExtraBitsUntouched(u));
+
+ PoisonInput(u);
+ sscanf("2A", "%" SCNxFAST8, &u.mI);
+ MOZ_RELEASE_ASSERT(u.mI == 0x2A);
+ MOZ_RELEASE_ASSERT(ExtraBitsUntouched(u));
+# endif
+}
+
+static void TestScanUnsignedFast16() {
+ Input<uint_fast16_t> u;
+
+ PoisonInput(u);
+ sscanf("1742", "%" SCNoFAST16, &u.mI);
+ MOZ_RELEASE_ASSERT(u.mI == 01742);
+ MOZ_RELEASE_ASSERT(ExtraBitsUntouched(u));
+
+ PoisonInput(u);
+ sscanf("4217", "%" SCNuFAST16, &u.mI);
+ MOZ_RELEASE_ASSERT(u.mI == 4217);
+ MOZ_RELEASE_ASSERT(ExtraBitsUntouched(u));
+
+ PoisonInput(u);
+ sscanf("2ABC", "%" SCNxFAST16, &u.mI);
+ MOZ_RELEASE_ASSERT(u.mI == 0x2ABC);
+ MOZ_RELEASE_ASSERT(ExtraBitsUntouched(u));
+}
+
+static void TestScanUnsignedFast32() {
+ Input<uint_fast32_t> u;
+
+ PoisonInput(u);
+ sscanf("17421742", "%" SCNoFAST32, &u.mI);
+ MOZ_RELEASE_ASSERT(u.mI == 017421742);
+ MOZ_RELEASE_ASSERT(ExtraBitsUntouched(u));
+
+ PoisonInput(u);
+ sscanf("4217867", "%" SCNuFAST32, &u.mI);
+ MOZ_RELEASE_ASSERT(u.mI == 4217867);
+ MOZ_RELEASE_ASSERT(ExtraBitsUntouched(u));
+
+ PoisonInput(u);
+ sscanf("2ABCBEEF", "%" SCNxFAST32, &u.mI);
+ MOZ_RELEASE_ASSERT(u.mI == 0x2ABCBEEF);
+ MOZ_RELEASE_ASSERT(ExtraBitsUntouched(u));
+}
+
+static void TestScanUnsignedFast64() {
+ Input<uint_fast64_t> u;
+
+ PoisonInput(u);
+ sscanf("17421742173", "%" SCNoFAST64, &u.mI);
+ MOZ_RELEASE_ASSERT(u.mI == UINT64_C(017421742173));
+ MOZ_RELEASE_ASSERT(ExtraBitsUntouched(u));
+
+ PoisonInput(u);
+ sscanf("421786713579", "%" SCNuFAST64, &u.mI);
+ MOZ_RELEASE_ASSERT(u.mI == UINT64_C(421786713579));
+ MOZ_RELEASE_ASSERT(ExtraBitsUntouched(u));
+
+ PoisonInput(u);
+ sscanf("DEADBEEF7457E", "%" SCNxFAST64, &u.mI);
+ MOZ_RELEASE_ASSERT(u.mI == UINT64_C(0xDEADBEEF7457E));
+ MOZ_RELEASE_ASSERT(ExtraBitsUntouched(u));
+}
+
+static void TestScanUnsignedFastN() {
+ TestScanUnsignedFast8();
+ TestScanUnsignedFast16();
+ TestScanUnsignedFast32();
+ TestScanUnsignedFast64();
+}
+
+static void TestScanUnsignedMax() {
+ Input<uintmax_t> u;
+
+ PoisonInput(u);
+ sscanf("14220563454333534", "%" SCNoMAX, &u.mI);
+ MOZ_RELEASE_ASSERT(u.mI == UINTMAX_C(432157943248732));
+ MOZ_RELEASE_ASSERT(ExtraBitsUntouched(u));
+
+ PoisonInput(u);
+ sscanf("432157943248732", "%" SCNuMAX, &u.mI);
+ MOZ_RELEASE_ASSERT(u.mI == UINTMAX_C(432157943248732));
+ MOZ_RELEASE_ASSERT(ExtraBitsUntouched(u));
+
+ PoisonInput(u);
+ sscanf("4c337ca791", "%" SCNxMAX, &u.mI);
+ MOZ_RELEASE_ASSERT(u.mI == UINTMAX_C(327281321873));
+ MOZ_RELEASE_ASSERT(ExtraBitsUntouched(u));
+}
+
+static void TestScanUnsignedPtr() {
+ Input<uintptr_t> u;
+
+ PoisonInput(u);
+ sscanf("57060516", "%" SCNoPTR, &u.mI);
+ MOZ_RELEASE_ASSERT(u.mI == uintptr_t(reinterpret_cast<void*>(12345678)));
+ MOZ_RELEASE_ASSERT(ExtraBitsUntouched(u));
+
+ PoisonInput(u);
+ sscanf("87654321", "%" SCNuPTR, &u.mI);
+ MOZ_RELEASE_ASSERT(u.mI == uintptr_t(reinterpret_cast<void*>(87654321)));
+ MOZ_RELEASE_ASSERT(ExtraBitsUntouched(u));
+
+ PoisonInput(u);
+ sscanf("4c3a791", "%" SCNxPTR, &u.mI);
+ MOZ_RELEASE_ASSERT(u.mI == uintptr_t(reinterpret_cast<void*>(0x4c3a791)));
+ MOZ_RELEASE_ASSERT(ExtraBitsUntouched(u));
+}
+
+static void TestScanUnsigned() {
+ TestScanUnsignedN();
+ TestScanUnsignedLeastN();
+ TestScanUnsignedFastN();
+ TestScanUnsignedMax();
+ TestScanUnsignedPtr();
+}
+
+static void TestScan() {
+ TestScanSigned();
+ TestScanUnsigned();
+}
+
+#endif /* SHOULD_TEST_SCANF_MACROS */
+
+#if defined(XP_WIN)
+int wmain()
+#else
+int main()
+#endif // defined(XP_WIN)
+{
+ TestPrint();
+#if SHOULD_TEST_SCANF_MACROS
+ TestScan();
+#endif
+ return 0;
+}
diff --git a/mozglue/tests/TestNativeNt.cpp b/mozglue/tests/TestNativeNt.cpp
new file mode 100644
index 0000000000..d4f671e33c
--- /dev/null
+++ b/mozglue/tests/TestNativeNt.cpp
@@ -0,0 +1,606 @@
+/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* vim: set ts=8 sts=2 et sw=2 tw=80: */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */
+
+#include "nscore.h"
+#include "mozilla/NativeNt.h"
+#include "mozilla/ThreadLocal.h"
+#include "mozilla/UniquePtr.h"
+#include "mozilla/WindowsEnumProcessModules.h"
+
+#include <stdio.h>
+#include <windows.h>
+#include <strsafe.h>
+
+const wchar_t kNormal[] = L"Foo.dll";
+const wchar_t kHex12[] = L"Foo.ABCDEF012345.dll";
+const wchar_t kHex15[] = L"ABCDEF012345678.dll";
+const wchar_t kHex16[] = L"ABCDEF0123456789.dll";
+const wchar_t kHex17[] = L"ABCDEF0123456789a.dll";
+const wchar_t kHex24[] = L"ABCDEF0123456789cdabef98.dll";
+const wchar_t kHex8[] = L"01234567.dll";
+const wchar_t kNonHex12[] = L"Foo.ABCDEFG12345.dll";
+const wchar_t kHex13[] = L"Foo.ABCDEF0123456.dll";
+const wchar_t kHex11[] = L"Foo.ABCDEF01234.dll";
+const wchar_t kPrefixedHex16[] = L"Pabcdef0123456789.dll";
+const uint32_t kTlsDataValue = 1234;
+static MOZ_THREAD_LOCAL(uint32_t) sTlsData;
+
+// Need non-inline functions to bypass compiler optimization that the thread
+// local storage pointer is cached in a register before accessing a thread-local
+// variable. See bug 1803322 for a motivating example.
+MOZ_NEVER_INLINE uint32_t getTlsData() { return sTlsData.get(); }
+MOZ_NEVER_INLINE void setTlsData(uint32_t x) { sTlsData.set(x); }
+
+const char kFailFmt[] =
+ "TEST-FAILED | NativeNt | %s(%s) should have returned %s but did not\n";
+
+#define RUN_TEST(fn, varName, expected) \
+ if (fn(varName) == !expected) { \
+ printf(kFailFmt, #fn, #varName, #expected); \
+ return 1; \
+ }
+
+#define EXPECT_FAIL(fn, varName) RUN_TEST(fn, varName, false)
+
+#define EXPECT_SUCCESS(fn, varName) RUN_TEST(fn, varName, true)
+
+using namespace mozilla;
+using namespace mozilla::nt;
+
+bool TestVirtualQuery(HANDLE aProcess, LPCVOID aAddress) {
+ MEMORY_BASIC_INFORMATION info1 = {}, info2 = {};
+ SIZE_T result1 = ::VirtualQueryEx(aProcess, aAddress, &info1, sizeof(info1)),
+ result2 = mozilla::nt::VirtualQueryEx(aProcess, aAddress, &info2,
+ sizeof(info2));
+ if (result1 != result2) {
+ printf("TEST-FAILED | NativeNt | The returned values mismatch\n");
+ return false;
+ }
+
+ if (!result1) {
+ // Both APIs failed.
+ return true;
+ }
+
+ if (memcmp(&info1, &info2, result1) != 0) {
+ printf("TEST-FAILED | NativeNt | The returned structures mismatch\n");
+ return false;
+ }
+
+ return true;
+}
+
+// This class copies the self executable file to the %temp%\<outer>\<inner>
+// folder. The length of its path is longer than MAX_PATH.
+class LongNameModule {
+ wchar_t mOuterDirBuffer[MAX_PATH];
+ wchar_t mInnerDirBuffer[MAX_PATH * 2];
+ wchar_t mTargetFileBuffer[MAX_PATH * 2];
+
+ const wchar_t* mOuterDir;
+ const wchar_t* mInnerDir;
+ const wchar_t* mTargetFile;
+
+ public:
+ explicit LongNameModule(const wchar_t* aNewLeafNameAfterCopy)
+ : mOuterDir(nullptr), mInnerDir(nullptr), mTargetFile(nullptr) {
+ const wchar_t kFolderName160Chars[] =
+ L"0123456789ABCDEF0123456789ABCDEF"
+ L"0123456789ABCDEF0123456789ABCDEF"
+ L"0123456789ABCDEF0123456789ABCDEF"
+ L"0123456789ABCDEF0123456789ABCDEF"
+ L"0123456789ABCDEF0123456789ABCDEF";
+ UniquePtr<wchar_t[]> thisExe = GetFullBinaryPath();
+ if (!thisExe) {
+ return;
+ }
+
+ // If the buffer is too small, GetTempPathW returns the required
+ // length including a null character, while on a successful case
+ // it returns the number of copied characters which does not include
+ // a null character. This means len == MAX_PATH should never happen
+ // and len > MAX_PATH means GetTempPathW failed.
+ wchar_t tempDir[MAX_PATH];
+ DWORD len = ::GetTempPathW(MAX_PATH, tempDir);
+ if (!len || len >= MAX_PATH) {
+ return;
+ }
+
+ if (FAILED(::StringCbPrintfW(mOuterDirBuffer, sizeof(mOuterDirBuffer),
+ L"\\\\?\\%s%s", tempDir,
+ kFolderName160Chars)) ||
+ !::CreateDirectoryW(mOuterDirBuffer, nullptr)) {
+ return;
+ }
+ mOuterDir = mOuterDirBuffer;
+
+ if (FAILED(::StringCbPrintfW(mInnerDirBuffer, sizeof(mInnerDirBuffer),
+ L"\\\\?\\%s%s\\%s", tempDir,
+ kFolderName160Chars, kFolderName160Chars)) ||
+ !::CreateDirectoryW(mInnerDirBuffer, nullptr)) {
+ return;
+ }
+ mInnerDir = mInnerDirBuffer;
+
+ if (FAILED(::StringCbPrintfW(mTargetFileBuffer, sizeof(mTargetFileBuffer),
+ L"\\\\?\\%s%s\\%s\\%s", tempDir,
+ kFolderName160Chars, kFolderName160Chars,
+ aNewLeafNameAfterCopy)) ||
+ !::CopyFileW(thisExe.get(), mTargetFileBuffer,
+ /*bFailIfExists*/ TRUE)) {
+ return;
+ }
+ mTargetFile = mTargetFileBuffer;
+ }
+
+ ~LongNameModule() {
+ if (mTargetFile) {
+ ::DeleteFileW(mTargetFile);
+ }
+ if (mInnerDir) {
+ ::RemoveDirectoryW(mInnerDir);
+ }
+ if (mOuterDir) {
+ ::RemoveDirectoryW(mOuterDir);
+ }
+ }
+
+ operator const wchar_t*() const { return mTargetFile; }
+};
+
+// Make sure module info retrieved from nt::PEHeaders is the same as one
+// retrieved from GetModuleInformation API.
+bool CompareModuleInfo(HMODULE aModuleForApi, HMODULE aModuleForPEHeader) {
+ MODULEINFO moduleInfo;
+ if (!::GetModuleInformation(::GetCurrentProcess(), aModuleForApi, &moduleInfo,
+ sizeof(moduleInfo))) {
+ printf("TEST-FAILED | NativeNt | GetModuleInformation failed - %08lx\n",
+ ::GetLastError());
+ return false;
+ }
+
+ PEHeaders headers(aModuleForPEHeader);
+ if (!headers) {
+ printf("TEST-FAILED | NativeNt | Failed to instantiate PEHeaders\n");
+ return false;
+ }
+
+ Maybe<Range<const uint8_t>> bounds = headers.GetBounds();
+ if (!bounds) {
+ printf("TEST-FAILED | NativeNt | PEHeaders::GetBounds failed\n");
+ return false;
+ }
+
+ if (bounds->length() != moduleInfo.SizeOfImage) {
+ printf("TEST-FAILED | NativeNt | SizeOfImage does not match\n");
+ return false;
+ }
+
+ // GetModuleInformation sets EntryPoint to 0 for executables
+ // except the running self.
+ static const HMODULE sSelf = ::GetModuleHandleW(nullptr);
+ if (aModuleForApi != sSelf &&
+ !(headers.GetFileCharacteristics() & IMAGE_FILE_DLL)) {
+ if (moduleInfo.EntryPoint) {
+ printf(
+ "TEST-FAIL | NativeNt | "
+ "GetModuleInformation returned a non-zero entrypoint "
+ "for an executable\n");
+ return false;
+ }
+
+ // Cannot verify PEHeaders::GetEntryPoint.
+ return true;
+ }
+
+ // For a module whose entrypoint is 0 (e.g. ntdll.dll or win32u.dll),
+ // MODULEINFO::EntryPoint is set to 0, while PEHeaders::GetEntryPoint
+ // returns the imagebase (RVA=0).
+ intptr_t rvaEntryPoint =
+ moduleInfo.EntryPoint
+ ? reinterpret_cast<uintptr_t>(moduleInfo.EntryPoint) -
+ reinterpret_cast<uintptr_t>(moduleInfo.lpBaseOfDll)
+ : 0;
+ if (rvaEntryPoint < 0) {
+ printf("TEST-FAILED | NativeNt | MODULEINFO is invalid\n");
+ return false;
+ }
+
+ if (headers.RVAToPtr<FARPROC>(rvaEntryPoint) != headers.GetEntryPoint()) {
+ printf("TEST-FAILED | NativeNt | Entrypoint does not match\n");
+ return false;
+ }
+
+ return true;
+}
+
+bool TestModuleInfo() {
+ UNICODE_STRING newLeafName;
+ ::RtlInitUnicodeString(&newLeafName,
+ L"\u672D\u5E4C\u5473\u564C.\u30E9\u30FC\u30E1\u30F3");
+
+ LongNameModule longNameModule(newLeafName.Buffer);
+ if (!longNameModule) {
+ printf(
+ "TEST-FAILED | NativeNt | "
+ "Failed to copy the executable to a long directory path\n");
+ return 1;
+ }
+
+ {
+ nsModuleHandle module(::LoadLibraryW(longNameModule));
+
+ bool detectedTarget = false;
+ bool passedAllModules = true;
+ auto moduleCallback = [&](const wchar_t* aModulePath, HMODULE aModule) {
+ UNICODE_STRING modulePath, moduleName;
+ ::RtlInitUnicodeString(&modulePath, aModulePath);
+ GetLeafName(&moduleName, &modulePath);
+ if (::RtlEqualUnicodeString(&moduleName, &newLeafName,
+ /*aCaseInsensitive*/ TRUE)) {
+ detectedTarget = true;
+ }
+
+ if (!CompareModuleInfo(aModule, aModule)) {
+ passedAllModules = false;
+ }
+ };
+
+ if (!mozilla::EnumerateProcessModules(moduleCallback)) {
+ printf("TEST-FAILED | NativeNt | EnumerateProcessModules failed\n");
+ return false;
+ }
+
+ if (!detectedTarget) {
+ printf(
+ "TEST-FAILED | NativeNt | "
+ "EnumerateProcessModules missed the target file\n");
+ return false;
+ }
+
+ if (!passedAllModules) {
+ return false;
+ }
+ }
+
+ return true;
+}
+
+// Make sure PEHeaders works for a module loaded with LOAD_LIBRARY_AS_DATAFILE
+// as well as a module loaded normally.
+bool TestModuleLoadedAsData() {
+ const wchar_t kNewLeafName[] = L"\u03BC\u0061\u9EBA.txt";
+
+ LongNameModule longNameModule(kNewLeafName);
+ if (!longNameModule) {
+ printf(
+ "TEST-FAILED | NativeNt | "
+ "Failed to copy the executable to a long directory path\n");
+ return 1;
+ }
+
+ const wchar_t* kManualLoadModules[] = {
+ L"mshtml.dll",
+ L"shell32.dll",
+ longNameModule,
+ };
+
+ for (const auto moduleName : kManualLoadModules) {
+ // Must load a module as data first,
+ nsModuleHandle moduleAsData(::LoadLibraryExW(
+ moduleName, nullptr,
+ LOAD_LIBRARY_AS_DATAFILE | LOAD_LIBRARY_AS_IMAGE_RESOURCE));
+
+ // then load a module normally to map it on a different address.
+ nsModuleHandle module(::LoadLibraryW(moduleName));
+
+ if (!CompareModuleInfo(module.get(), moduleAsData.get())) {
+ return false;
+ }
+
+ PEHeaders peAsData(moduleAsData.get());
+ PEHeaders pe(module.get());
+ if (!peAsData || !pe) {
+ printf("TEST-FAIL | NativeNt | Failed to load the module\n");
+ return false;
+ }
+
+ if (peAsData.RVAToPtr<HMODULE>(0) == pe.RVAToPtr<HMODULE>(0)) {
+ printf(
+ "TEST-FAIL | NativeNt | "
+ "The module should have been mapped onto two different places\n");
+ return false;
+ }
+
+ const auto* pdb1 = peAsData.GetPdbInfo();
+ const auto* pdb2 = pe.GetPdbInfo();
+ if (pdb1 && pdb2) {
+ if (pdb1->pdbSignature != pdb2->pdbSignature ||
+ pdb1->pdbAge != pdb2->pdbAge ||
+ strcmp(pdb1->pdbFileName, pdb2->pdbFileName)) {
+ printf(
+ "TEST-FAIL | NativeNt | "
+ "PDB info from the same module did not match.\n");
+ return false;
+ }
+ } else if (pdb1 || pdb2) {
+ printf(
+ "TEST-FAIL | NativeNt | Failed to get PDB info from the module.\n");
+ return false;
+ }
+
+ uint64_t version1, version2;
+ bool result1 = peAsData.GetVersionInfo(version1);
+ bool result2 = pe.GetVersionInfo(version2);
+ if (result1 && result2) {
+ if (version1 != version2) {
+ printf("TEST-FAIL | NativeNt | Version mismatch\n");
+ return false;
+ }
+ } else if (result1 || result2) {
+ printf(
+ "TEST-FAIL | NativeNt | Failed to get PDB info from the module.\n");
+ return false;
+ }
+ }
+
+ return true;
+}
+
+LauncherResult<HMODULE> GetModuleHandleFromLeafName(const wchar_t* aName) {
+ UNICODE_STRING name;
+ ::RtlInitUnicodeString(&name, aName);
+ return nt::GetModuleHandleFromLeafName(name);
+}
+
+// Need a non-inline function to bypass compiler optimization that the thread
+// local storage pointer is cached in a register before accessing a thread-local
+// variable.
+MOZ_NEVER_INLINE PVOID SwapThreadLocalStoragePointer(PVOID aNewValue) {
+ auto oldValue = RtlGetThreadLocalStoragePointer();
+ RtlSetThreadLocalStoragePointerForTestingOnly(aNewValue);
+ return oldValue;
+}
+
+int wmain(int argc, wchar_t* argv[]) {
+ UNICODE_STRING normal;
+ ::RtlInitUnicodeString(&normal, kNormal);
+
+ UNICODE_STRING hex12;
+ ::RtlInitUnicodeString(&hex12, kHex12);
+
+ UNICODE_STRING hex16;
+ ::RtlInitUnicodeString(&hex16, kHex16);
+
+ UNICODE_STRING hex24;
+ ::RtlInitUnicodeString(&hex24, kHex24);
+
+ UNICODE_STRING hex8;
+ ::RtlInitUnicodeString(&hex8, kHex8);
+
+ UNICODE_STRING nonHex12;
+ ::RtlInitUnicodeString(&nonHex12, kNonHex12);
+
+ UNICODE_STRING hex13;
+ ::RtlInitUnicodeString(&hex13, kHex13);
+
+ UNICODE_STRING hex11;
+ ::RtlInitUnicodeString(&hex11, kHex11);
+
+ UNICODE_STRING hex15;
+ ::RtlInitUnicodeString(&hex15, kHex15);
+
+ UNICODE_STRING hex17;
+ ::RtlInitUnicodeString(&hex17, kHex17);
+
+ UNICODE_STRING prefixedHex16;
+ ::RtlInitUnicodeString(&prefixedHex16, kPrefixedHex16);
+
+ EXPECT_FAIL(Contains12DigitHexString, normal);
+ EXPECT_SUCCESS(Contains12DigitHexString, hex12);
+ EXPECT_FAIL(Contains12DigitHexString, hex13);
+ EXPECT_FAIL(Contains12DigitHexString, hex11);
+ EXPECT_FAIL(Contains12DigitHexString, hex16);
+ EXPECT_FAIL(Contains12DigitHexString, nonHex12);
+
+ EXPECT_FAIL(IsFileNameAtLeast16HexDigits, normal);
+ EXPECT_FAIL(IsFileNameAtLeast16HexDigits, hex12);
+ EXPECT_SUCCESS(IsFileNameAtLeast16HexDigits, hex24);
+ EXPECT_SUCCESS(IsFileNameAtLeast16HexDigits, hex16);
+ EXPECT_SUCCESS(IsFileNameAtLeast16HexDigits, hex17);
+ EXPECT_FAIL(IsFileNameAtLeast16HexDigits, hex8);
+ EXPECT_FAIL(IsFileNameAtLeast16HexDigits, hex15);
+ EXPECT_FAIL(IsFileNameAtLeast16HexDigits, prefixedHex16);
+
+ if (RtlGetProcessHeap() != ::GetProcessHeap()) {
+ printf("TEST-FAILED | NativeNt | RtlGetProcessHeap() is broken\n");
+ return 1;
+ }
+
+#ifdef HAVE_SEH_EXCEPTIONS
+ PVOID origTlsHead = nullptr;
+ bool isExceptionThrown = false;
+ // Touch sTlsData.get() several times to prevent the call to sTlsData.set()
+ // from being optimized out in PGO build.
+ printf("sTlsData#1 = %08x\n", getTlsData());
+ MOZ_SEH_TRY {
+ // Need to call SwapThreadLocalStoragePointer inside __try to make sure
+ // accessing sTlsData is caught by SEH. This is due to clang's design.
+ // https://bugs.llvm.org/show_bug.cgi?id=44174.
+ origTlsHead = SwapThreadLocalStoragePointer(nullptr);
+ setTlsData(~kTlsDataValue);
+ }
+ MOZ_SEH_EXCEPT(GetExceptionCode() == EXCEPTION_ACCESS_VIOLATION
+ ? EXCEPTION_EXECUTE_HANDLER
+ : EXCEPTION_CONTINUE_SEARCH) {
+ isExceptionThrown = true;
+ }
+ SwapThreadLocalStoragePointer(origTlsHead);
+ printf("sTlsData#2 = %08x\n", getTlsData());
+ setTlsData(kTlsDataValue);
+ printf("sTlsData#3 = %08x\n", getTlsData());
+ if (!isExceptionThrown || getTlsData() != kTlsDataValue) {
+ printf(
+ "TEST-FAILED | NativeNt | RtlGetThreadLocalStoragePointer() is "
+ "broken\n");
+ return 1;
+ }
+#endif
+
+ if (RtlGetCurrentThreadId() != ::GetCurrentThreadId()) {
+ printf("TEST-FAILED | NativeNt | RtlGetCurrentThreadId() is broken\n");
+ return 1;
+ }
+
+ const wchar_t kKernel32[] = L"kernel32.dll";
+ DWORD verInfoSize = ::GetFileVersionInfoSizeW(kKernel32, nullptr);
+ if (!verInfoSize) {
+ printf(
+ "TEST-FAILED | NativeNt | Call to GetFileVersionInfoSizeW failed with "
+ "code %lu\n",
+ ::GetLastError());
+ return 1;
+ }
+
+ auto verInfoBuf = MakeUnique<char[]>(verInfoSize);
+
+ if (!::GetFileVersionInfoW(kKernel32, 0, verInfoSize, verInfoBuf.get())) {
+ printf(
+ "TEST-FAILED | NativeNt | Call to GetFileVersionInfoW failed with code "
+ "%lu\n",
+ ::GetLastError());
+ return 1;
+ }
+
+ UINT len;
+ VS_FIXEDFILEINFO* fixedFileInfo = nullptr;
+ if (!::VerQueryValueW(verInfoBuf.get(), L"\\", (LPVOID*)&fixedFileInfo,
+ &len)) {
+ printf(
+ "TEST-FAILED | NativeNt | Call to VerQueryValueW failed with code "
+ "%lu\n",
+ ::GetLastError());
+ return 1;
+ }
+
+ const uint64_t expectedVersion =
+ (static_cast<uint64_t>(fixedFileInfo->dwFileVersionMS) << 32) |
+ static_cast<uint64_t>(fixedFileInfo->dwFileVersionLS);
+
+ PEHeaders k32headers(::GetModuleHandleW(kKernel32));
+ if (!k32headers) {
+ printf(
+ "TEST-FAILED | NativeNt | Failed parsing kernel32.dll's PE headers\n");
+ return 1;
+ }
+
+ uint64_t version;
+ if (!k32headers.GetVersionInfo(version)) {
+ printf(
+ "TEST-FAILED | NativeNt | Unable to obtain version information from "
+ "kernel32.dll\n");
+ return 1;
+ }
+
+ if (version != expectedVersion) {
+ printf(
+ "TEST-FAILED | NativeNt | kernel32.dll's detected version "
+ "(0x%016llX) does not match expected version (0x%016llX)\n",
+ version, expectedVersion);
+ return 1;
+ }
+
+ Maybe<Span<IMAGE_THUNK_DATA>> iatThunks =
+ k32headers.GetIATThunksForModule("kernel32.dll");
+ if (iatThunks) {
+ printf(
+ "TEST-FAILED | NativeNt | Detected the IAT thunk for kernel32 "
+ "in kernel32.dll\n");
+ return 1;
+ }
+
+ const mozilla::nt::CodeViewRecord70* debugInfo = k32headers.GetPdbInfo();
+ if (!debugInfo) {
+ printf(
+ "TEST-FAILED | NativeNt | Unable to obtain debug information from "
+ "kernel32.dll\n");
+ return 1;
+ }
+
+#ifndef WIN32 // failure on windows10x32
+ if (stricmp(debugInfo->pdbFileName, "kernel32.pdb")) {
+ printf(
+ "TEST-FAILED | NativeNt | Unexpected PDB filename "
+ "in kernel32.dll: %s\n",
+ debugInfo->pdbFileName);
+ return 1;
+ }
+#endif
+
+ PEHeaders ntdllheaders(::GetModuleHandleW(L"ntdll.dll"));
+
+ auto ntdllBoundaries = ntdllheaders.GetBounds();
+ if (!ntdllBoundaries) {
+ printf(
+ "TEST-FAILED | NativeNt | "
+ "Unable to obtain the boundaries of ntdll.dll\n");
+ return 1;
+ }
+
+ iatThunks =
+ k32headers.GetIATThunksForModule("ntdll.dll", ntdllBoundaries.ptr());
+ if (!iatThunks) {
+ printf(
+ "TEST-FAILED | NativeNt | Unable to find the IAT thunk for "
+ "ntdll.dll in kernel32.dll\n");
+ return 1;
+ }
+
+ // To test the Ex version of API, we purposely get a real handle
+ // instead of a pseudo handle.
+ nsAutoHandle process(
+ ::OpenProcess(PROCESS_QUERY_INFORMATION, FALSE, GetCurrentProcessId()));
+ if (!process) {
+ printf("TEST-FAILED | NativeNt | OpenProcess() failed - %08lx\n",
+ ::GetLastError());
+ return 1;
+ }
+
+ // Test Null page, Heap, Mapped image, and Invalid handle
+ if (!TestVirtualQuery(process, nullptr) || !TestVirtualQuery(process, argv) ||
+ !TestVirtualQuery(process, kNormal) ||
+ !TestVirtualQuery(nullptr, kNormal)) {
+ return 1;
+ }
+
+ auto moduleResult = GetModuleHandleFromLeafName(kKernel32);
+ if (moduleResult.isErr() ||
+ moduleResult.inspect() != k32headers.template RVAToPtr<HMODULE>(0)) {
+ printf(
+ "TEST-FAILED | NativeNt | "
+ "GetModuleHandleFromLeafName returns a wrong value.\n");
+ return 1;
+ }
+
+ moduleResult = GetModuleHandleFromLeafName(L"invalid");
+ if (moduleResult.isOk()) {
+ printf(
+ "TEST-FAILED | NativeNt | "
+ "GetModuleHandleFromLeafName unexpectedly returns a value.\n");
+ return 1;
+ }
+
+ if (!TestModuleInfo()) {
+ return 1;
+ }
+
+ if (!TestModuleLoadedAsData()) {
+ return 1;
+ }
+
+ printf("TEST-PASS | NativeNt | All tests ran successfully\n");
+ return 0;
+}
diff --git a/mozglue/tests/TestPEExportSection.cpp b/mozglue/tests/TestPEExportSection.cpp
new file mode 100644
index 0000000000..cf160368d3
--- /dev/null
+++ b/mozglue/tests/TestPEExportSection.cpp
@@ -0,0 +1,706 @@
+/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* vim: set ts=8 sts=2 et sw=2 tw=80: */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */
+
+// This test makes sure mozilla::nt::PEExportSection can parse the export
+// section of a local process, and a remote process even though it's
+// modified by an external code.
+
+#include "mozilla/CmdLineAndEnvUtils.h"
+#include "mozilla/NativeNt.h"
+#include "nsWindowsDllInterceptor.h"
+
+#include <stdio.h>
+#include <windows.h>
+
+#define EXPORT_FUNCTION_EQ(name, func) \
+ (GetProcAddress(imageBase, name) == reinterpret_cast<void*>(func))
+
+#define VERIFY_EXPORT_FUNCTION(tables, name, expected, errorMessage) \
+ do { \
+ if (tables.GetProcAddress(name) != reinterpret_cast<void*>(expected)) { \
+ printf("TEST-FAILED | TestPEExportSection | %s", errorMessage); \
+ return kTestFail; \
+ } \
+ } while (0)
+
+using namespace mozilla::nt;
+using mozilla::interceptor::MMPolicyInProcess;
+using mozilla::interceptor::MMPolicyOutOfProcess;
+using LocalPEExportSection = PEExportSection<MMPolicyInProcess>;
+using RemotePEExportSection = PEExportSection<MMPolicyOutOfProcess>;
+
+constexpr DWORD kEventTimeoutinMs = 5000;
+const wchar_t kProcessControlEventName[] =
+ L"TestPEExportSection.Process.Control.Event";
+
+enum TestResult : int {
+ kTestSuccess = 0,
+ kTestFail,
+ kTestSkip,
+};
+
+// These strings start with the same keyword to make sure we don't do substring
+// match. Moreover, kSecretFunctionInvalid is purposely longer than the
+// combination of the other two strings and located in between the other two
+// strings to effectively test binary search.
+const char kSecretFunction[] = "Secret";
+const char kSecretFunctionInvalid[] = "Secret invalid long name";
+const char kSecretFunctionWithSuffix[] = "Secret2";
+
+const wchar_t* kNoModification = L"--NoModification";
+const wchar_t* kNoExport = L"--NoExport";
+const wchar_t* kModifyTableEntry = L"--ModifyTableEntry";
+const wchar_t* kModifyTable = L"--ModifyTable";
+const wchar_t* kModifyDirectoryEntry = L"--ModifyDirectoryEntry";
+const wchar_t* kExportByOrdinal = L"--ExportByOrdinal";
+
+// Use the global variable to pass the child process's error status to the
+// parent process. We don't use a process's exit code to keep the test simple.
+int gChildProcessStatus = 0;
+
+// These functions are exported by linker or export section tampering at
+// runtime. Each of function bodies needs to be different to avoid ICF.
+extern "C" __declspec(dllexport) int Export1() { return 0; }
+extern "C" __declspec(dllexport) int Export2() { return 1; }
+int SecretFunction1() { return 100; }
+int SecretFunction2() { return 101; }
+
+// This class allocates a writable region downstream of the mapped image
+// and prepares it as a valid export section.
+class ExportDirectoryPatcher final {
+ static constexpr int kRegionAllocationTryLimit = 100;
+ static constexpr int kNumOfTableEntries = 2;
+ // VirtualAlloc sometimes fails if a desired base address is too small.
+ // Define a minimum desired base to reduce the number of allocation tries.
+ static constexpr uintptr_t kMinimumAllocationPoint = 0x8000000;
+
+ struct ExportDirectory {
+ IMAGE_EXPORT_DIRECTORY mDirectoryHeader;
+ DWORD mExportAddressTable[kNumOfTableEntries];
+ DWORD mExportNameTable[kNumOfTableEntries];
+ WORD mExportOrdinalTable[kNumOfTableEntries];
+ char mNameBuffer1[sizeof(kSecretFunction)];
+ char mNameBuffer2[sizeof(kSecretFunctionWithSuffix)];
+
+ template <typename T>
+ static DWORD PtrToRVA(T aPtr, uintptr_t aBase) {
+ return reinterpret_cast<uintptr_t>(aPtr) - aBase;
+ }
+
+ explicit ExportDirectory(uintptr_t aImageBase) : mDirectoryHeader{} {
+ mDirectoryHeader.Base = 1;
+ mExportAddressTable[0] = PtrToRVA(SecretFunction1, aImageBase);
+ mExportAddressTable[1] = PtrToRVA(SecretFunction2, aImageBase);
+ mExportNameTable[0] = PtrToRVA(mNameBuffer1, aImageBase);
+ mExportNameTable[1] = PtrToRVA(mNameBuffer2, aImageBase);
+ mExportOrdinalTable[0] = 0;
+ mExportOrdinalTable[1] = 1;
+ strcpy(mNameBuffer1, kSecretFunction);
+ strcpy(mNameBuffer2, kSecretFunctionWithSuffix);
+ }
+ };
+
+ uintptr_t mImageBase;
+ ExportDirectory* mNewExportDirectory;
+
+ DWORD PtrToRVA(const void* aPtr) const {
+ return reinterpret_cast<uintptr_t>(aPtr) - mImageBase;
+ }
+
+ public:
+ explicit ExportDirectoryPatcher(HMODULE aModule)
+ : mImageBase(PEHeaders::HModuleToBaseAddr<uintptr_t>(aModule)),
+ mNewExportDirectory(nullptr) {
+ SYSTEM_INFO si = {};
+ ::GetSystemInfo(&si);
+
+ int numPagesRequired = ((sizeof(ExportDirectory) - 1) / si.dwPageSize) + 1;
+
+ uintptr_t desiredBase = mImageBase + si.dwAllocationGranularity;
+ desiredBase = std::max(desiredBase, kMinimumAllocationPoint);
+
+ for (int i = 0; i < kRegionAllocationTryLimit; ++i) {
+ void* allocated =
+ ::VirtualAlloc(reinterpret_cast<void*>(desiredBase),
+ numPagesRequired * si.dwPageSize,
+ MEM_COMMIT | MEM_RESERVE, PAGE_READWRITE);
+ if (allocated) {
+ // Use the end of a allocated page as ExportDirectory in order to test
+ // the boundary between a commit page and a non-commited page.
+ allocated = reinterpret_cast<uint8_t*>(allocated) +
+ (numPagesRequired * si.dwPageSize) -
+ sizeof(ExportDirectory);
+ mNewExportDirectory = new (allocated) ExportDirectory(mImageBase);
+ return;
+ }
+
+ desiredBase += si.dwAllocationGranularity;
+ }
+
+ gChildProcessStatus = kTestSkip;
+ printf(
+ "TEST-SKIP | TestPEExportSection | "
+ "Giving up finding an allocatable space following the mapped image.\n");
+ }
+
+ ~ExportDirectoryPatcher() {
+ // Intentionally leave mNewExportDirectory leaked to keep a patched data
+ // available until the process is terminated.
+ }
+
+ explicit operator bool() const { return !!mNewExportDirectory; }
+
+ void PopulateDirectory(IMAGE_EXPORT_DIRECTORY& aOutput) const {
+ aOutput.NumberOfFunctions = aOutput.NumberOfNames = kNumOfTableEntries;
+ aOutput.AddressOfFunctions =
+ PtrToRVA(mNewExportDirectory->mExportAddressTable);
+ aOutput.AddressOfNames = PtrToRVA(mNewExportDirectory->mExportNameTable);
+ aOutput.AddressOfNameOrdinals =
+ PtrToRVA(mNewExportDirectory->mExportOrdinalTable);
+ }
+
+ void PopulateDirectoryEntry(IMAGE_DATA_DIRECTORY& aOutput) const {
+ PopulateDirectory(mNewExportDirectory->mDirectoryHeader);
+ aOutput.VirtualAddress = PtrToRVA(&mNewExportDirectory->mDirectoryHeader);
+ aOutput.Size = sizeof(ExportDirectory);
+ }
+};
+
+// This exports SecretFunction1 as "Export1" by replacing an entry of the
+// export address table.
+void ModifyExportAddressTableEntry() {
+ MMPolicyInProcess policy;
+ HMODULE imageBase = ::GetModuleHandleW(nullptr);
+ auto ourExe = LocalPEExportSection::Get(imageBase, policy);
+
+ auto addressTableEntry =
+ const_cast<DWORD*>(ourExe.FindExportAddressTableEntry("Export1"));
+ if (!addressTableEntry) {
+ gChildProcessStatus = kTestFail;
+ return;
+ }
+
+ mozilla::AutoVirtualProtect protection(
+ addressTableEntry, sizeof(*addressTableEntry), PAGE_READWRITE);
+ if (!protection) {
+ gChildProcessStatus = kTestFail;
+ return;
+ }
+
+ *addressTableEntry = reinterpret_cast<uintptr_t>(SecretFunction1) -
+ PEHeaders::HModuleToBaseAddr<uintptr_t>(imageBase);
+
+ if (!EXPORT_FUNCTION_EQ("Export1", SecretFunction1) ||
+ !EXPORT_FUNCTION_EQ("Export2", Export2)) {
+ gChildProcessStatus = kTestFail;
+ }
+}
+
+// This switches the entire address table into one exporting SecretFunction1
+// and SecretFunction2.
+void ModifyExportAddressTable() {
+ MMPolicyInProcess policy;
+ HMODULE imageBase = ::GetModuleHandleW(nullptr);
+ auto ourExe = LocalPEExportSection::Get(imageBase, policy);
+
+ auto exportDirectory = ourExe.GetExportDirectory();
+ if (!exportDirectory) {
+ gChildProcessStatus = kTestFail;
+ return;
+ }
+
+ mozilla::AutoVirtualProtect protection(
+ exportDirectory, sizeof(*exportDirectory), PAGE_READWRITE);
+ if (!protection) {
+ gChildProcessStatus = kTestFail;
+ return;
+ }
+
+ ExportDirectoryPatcher patcher(imageBase);
+ if (!patcher) {
+ return;
+ }
+
+ patcher.PopulateDirectory(*exportDirectory);
+
+ if (GetProcAddress(imageBase, "Export1") ||
+ GetProcAddress(imageBase, "Export2") ||
+ !EXPORT_FUNCTION_EQ(kSecretFunction, SecretFunction1) ||
+ !EXPORT_FUNCTION_EQ(kSecretFunctionWithSuffix, SecretFunction2)) {
+ gChildProcessStatus = kTestFail;
+ }
+}
+
+// This hides all export functions by setting the table size to 0.
+void HideExportSection() {
+ HMODULE imageBase = ::GetModuleHandleW(nullptr);
+ PEHeaders ourExe(imageBase);
+
+ auto sectionTable =
+ ourExe.GetImageDirectoryEntryPtr(IMAGE_DIRECTORY_ENTRY_EXPORT);
+
+ mozilla::AutoVirtualProtect protection(sectionTable, sizeof(*sectionTable),
+ PAGE_READWRITE);
+ if (!protection) {
+ gChildProcessStatus = kTestFail;
+ return;
+ }
+
+ sectionTable->VirtualAddress = sectionTable->Size = 0;
+
+ if (GetProcAddress(imageBase, "Export1") ||
+ GetProcAddress(imageBase, "Export2")) {
+ gChildProcessStatus = kTestFail;
+ }
+}
+
+// This makes the export directory entry point to a new export section
+// which exports SecretFunction1 and SecretFunction2.
+void ModifyExportDirectoryEntry() {
+ HMODULE imageBase = ::GetModuleHandleW(nullptr);
+ PEHeaders ourExe(imageBase);
+
+ auto sectionTable =
+ ourExe.GetImageDirectoryEntryPtr(IMAGE_DIRECTORY_ENTRY_EXPORT);
+
+ mozilla::AutoVirtualProtect protection(sectionTable, sizeof(*sectionTable),
+ PAGE_READWRITE);
+ if (!protection) {
+ gChildProcessStatus = kTestFail;
+ return;
+ }
+
+ ExportDirectoryPatcher patcher(imageBase);
+ if (!patcher) {
+ return;
+ }
+
+ patcher.PopulateDirectoryEntry(*sectionTable);
+
+ if (GetProcAddress(imageBase, "Export1") ||
+ GetProcAddress(imageBase, "Export2") ||
+ !EXPORT_FUNCTION_EQ(kSecretFunction, SecretFunction1) ||
+ !EXPORT_FUNCTION_EQ(kSecretFunctionWithSuffix, SecretFunction2)) {
+ gChildProcessStatus = kTestFail;
+ }
+}
+
+// This exports functions only by Ordinal by hiding the export name table.
+void ExportByOrdinal() {
+ ModifyExportDirectoryEntry();
+ if (gChildProcessStatus != kTestSuccess) {
+ return;
+ }
+
+ MMPolicyInProcess policy;
+ HMODULE imageBase = ::GetModuleHandleW(nullptr);
+ auto ourExe = LocalPEExportSection::Get(imageBase, policy);
+
+ auto exportDirectory = ourExe.GetExportDirectory();
+ if (!exportDirectory) {
+ gChildProcessStatus = kTestFail;
+ return;
+ }
+
+ exportDirectory->NumberOfNames = 0;
+
+ if (GetProcAddress(imageBase, "Export1") ||
+ GetProcAddress(imageBase, "Export2") ||
+ GetProcAddress(imageBase, kSecretFunction) ||
+ GetProcAddress(imageBase, kSecretFunctionWithSuffix) ||
+ !EXPORT_FUNCTION_EQ(MAKEINTRESOURCE(1), SecretFunction1) ||
+ !EXPORT_FUNCTION_EQ(MAKEINTRESOURCE(2), SecretFunction2)) {
+ gChildProcessStatus = kTestFail;
+ }
+}
+
+class ChildProcess final {
+ nsAutoHandle mChildProcess;
+ nsAutoHandle mChildMainThread;
+
+ public:
+ static int Main(const nsAutoHandle& aEvent, const wchar_t* aOption) {
+ if (wcscmp(aOption, kNoModification) == 0) {
+ ;
+ } else if (wcscmp(aOption, kNoExport) == 0) {
+ HideExportSection();
+ } else if (wcscmp(aOption, kModifyTableEntry) == 0) {
+ ModifyExportAddressTableEntry();
+ } else if (wcscmp(aOption, kModifyTable) == 0) {
+ ModifyExportAddressTable();
+ } else if (wcscmp(aOption, kModifyDirectoryEntry) == 0) {
+ ModifyExportDirectoryEntry();
+ } else if (wcscmp(aOption, kExportByOrdinal) == 0) {
+ ExportByOrdinal();
+ }
+
+ // Letting the parent process know the child process is ready.
+ ::SetEvent(aEvent);
+
+ // The child process does not exit itself. It's force terminated by
+ // the parent process when all tests are done.
+ for (;;) {
+ ::Sleep(100);
+ }
+ }
+
+ ChildProcess(const wchar_t* aExecutable, const wchar_t* aOption,
+ const nsAutoHandle& aEvent, const nsAutoHandle& aJob) {
+ const wchar_t* childArgv[] = {aExecutable, aOption};
+ auto cmdLine(
+ mozilla::MakeCommandLine(mozilla::ArrayLength(childArgv), childArgv));
+
+ STARTUPINFOW si = {sizeof(si)};
+ PROCESS_INFORMATION pi;
+ BOOL ok = ::CreateProcessW(aExecutable, cmdLine.get(), nullptr, nullptr,
+ FALSE, 0, nullptr, nullptr, &si, &pi);
+ if (!ok) {
+ printf(
+ "TEST-FAILED | TestPEExportSection | "
+ "CreateProcessW falied - %08lx.\n",
+ GetLastError());
+ return;
+ }
+
+ if (aJob && !::AssignProcessToJobObject(aJob, pi.hProcess)) {
+ printf(
+ "TEST-FAILED | TestPEExportSection | "
+ "AssignProcessToJobObject falied - %08lx.\n",
+ GetLastError());
+ ::TerminateProcess(pi.hProcess, 1);
+ return;
+ }
+
+ // Wait until requested modification is done in the child process.
+ if (::WaitForSingleObject(aEvent, kEventTimeoutinMs) != WAIT_OBJECT_0) {
+ printf(
+ "TEST-FAILED | TestPEExportSection | "
+ "Child process was not ready in time.\n");
+ return;
+ }
+
+ mChildProcess.own(pi.hProcess);
+ mChildMainThread.own(pi.hThread);
+ }
+
+ ~ChildProcess() { ::TerminateProcess(mChildProcess, 0); }
+
+ operator HANDLE() const { return mChildProcess; }
+
+ TestResult GetStatus() const {
+ TestResult status = kTestSuccess;
+ if (!::ReadProcessMemory(mChildProcess, &gChildProcessStatus, &status,
+ sizeof(status), nullptr)) {
+ status = kTestFail;
+ printf(
+ "TEST-FAILED | TestPEExportSection | "
+ "ReadProcessMemory failed - %08lx\n",
+ GetLastError());
+ }
+ return status;
+ }
+};
+
+template <typename MMPolicy>
+TestResult BasicTest(const MMPolicy& aMMPolicy) {
+ const bool isAppHelpLoaded = ::GetModuleHandleW(L"apphelp.dll");
+
+ // Use ntdll.dll because it does not have any forwarder RVA.
+ HMODULE ntdllImageBase = ::GetModuleHandleW(L"ntdll.dll");
+ auto ntdllExports = PEExportSection<MMPolicy>::Get(ntdllImageBase, aMMPolicy);
+
+ auto exportDir = ntdllExports.GetExportDirectory();
+ auto tableOfNames =
+ ntdllExports.template RVAToPtr<const PDWORD>(exportDir->AddressOfNames);
+ for (DWORD i = 0; i < exportDir->NumberOfNames; ++i) {
+ const auto name =
+ ntdllExports.template RVAToPtr<const char*>(tableOfNames[i]);
+
+ if (isAppHelpLoaded && strcmp(name, "NtdllDefWindowProc_W") == 0) {
+ // In this case, GetProcAddress will return
+ // apphelp!DWM8AND16BitHook_DefWindowProcW.
+ continue;
+ }
+
+ auto funcEntry = ntdllExports.FindExportAddressTableEntry(name);
+ if (ntdllExports.template RVAToPtr<const void*>(*funcEntry) !=
+ ::GetProcAddress(ntdllImageBase, name)) {
+ printf(
+ "TEST-FAILED | TestPEExportSection | "
+ "FindExportAddressTableEntry did not resolve ntdll!%s.\n",
+ name);
+ return kTestFail;
+ }
+ }
+
+ for (DWORD i = 0; i < 0x10000; i += 0x10) {
+ if (ntdllExports.GetProcAddress(MAKEINTRESOURCE(i)) !=
+ ::GetProcAddress(ntdllImageBase, MAKEINTRESOURCE(i))) {
+ printf(
+ "TEST-FAILED | TestPEExportSection | "
+ "GetProcAddress did not resolve ntdll!Ordinal#%lu.\n",
+ i);
+ return kTestFail;
+ }
+ }
+
+ // Test a known forwarder RVA.
+ auto k32Exports = PEExportSection<MMPolicy>::Get(
+ ::GetModuleHandleW(L"kernel32.dll"), aMMPolicy);
+ if (k32Exports.FindExportAddressTableEntry("HeapAlloc")) {
+ printf(
+ "TEST-FAILED | TestPEExportSection | "
+ "kernel32!HeapAlloc should be forwarded to ntdll!RtlAllocateHeap.\n");
+ return kTestFail;
+ }
+
+ // Test invalid names.
+ if (k32Exports.FindExportAddressTableEntry("Invalid name") ||
+ k32Exports.FindExportAddressTableEntry("")) {
+ printf(
+ "TEST-FAILED | TestPEExportSection | "
+ "FindExportAddressTableEntry should return "
+ "nullptr for a non-existent name.\n");
+ return kTestFail;
+ }
+
+ return kTestSuccess;
+}
+
+TestResult RunChildProcessTest(
+ const wchar_t* aExecutable, const wchar_t* aOption,
+ const nsAutoHandle& aEvent, const nsAutoHandle& aJob,
+ TestResult (*aTestCallback)(const RemotePEExportSection&)) {
+ ChildProcess childProcess(aExecutable, aOption, aEvent, aJob);
+ if (!childProcess) {
+ return kTestFail;
+ }
+
+ auto result = childProcess.GetStatus();
+ if (result != kTestSuccess) {
+ return result;
+ }
+
+ MMPolicyOutOfProcess policy(childProcess);
+
+ // One time is enough to run BasicTest in the child process.
+ static TestResult oneTimeResult = BasicTest<MMPolicyOutOfProcess>(policy);
+ if (oneTimeResult != kTestSuccess) {
+ return oneTimeResult;
+ }
+
+ auto exportTableChild =
+ RemotePEExportSection::Get(::GetModuleHandleW(nullptr), policy);
+ return aTestCallback(exportTableChild);
+}
+
+mozilla::LauncherResult<nsReturnRef<HANDLE>> CreateJobToLimitProcessLifetime() {
+ uint64_t version;
+ PEHeaders ntdllHeaders(::GetModuleHandleW(L"ntdll.dll"));
+ if (!ntdllHeaders.GetVersionInfo(version)) {
+ printf(
+ "TEST-FAILED | TestPEExportSection | "
+ "Unable to obtain version information from ntdll.dll\n");
+ return LAUNCHER_ERROR_FROM_LAST();
+ }
+
+ constexpr uint64_t kWin8 = 0x60002ull << 32;
+ nsAutoHandle job;
+
+ if (version < kWin8) {
+ // Since a process can be associated only with a single job in Win7 or
+ // older and this test program is already assigned with a job by
+ // infrastructure, we cannot use a job.
+ return job.out();
+ }
+
+ job.own(::CreateJobObject(nullptr, nullptr));
+ if (!job) {
+ printf(
+ "TEST-FAILED | TestPEExportSection | "
+ "CreateJobObject falied - %08lx.\n",
+ GetLastError());
+ return LAUNCHER_ERROR_FROM_LAST();
+ }
+
+ JOBOBJECT_EXTENDED_LIMIT_INFORMATION jobInfo = {};
+ jobInfo.BasicLimitInformation.LimitFlags = JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE;
+
+ if (!::SetInformationJobObject(job, JobObjectExtendedLimitInformation,
+ &jobInfo, sizeof(jobInfo))) {
+ printf(
+ "TEST-FAILED | TestPEExportSection | "
+ "SetInformationJobObject falied - %08lx.\n",
+ GetLastError());
+ return LAUNCHER_ERROR_FROM_LAST();
+ }
+
+ return job.out();
+}
+
+extern "C" int wmain(int argc, wchar_t* argv[]) {
+ nsAutoHandle controlEvent(
+ ::CreateEventW(nullptr, FALSE, FALSE, kProcessControlEventName));
+
+ if (argc == 2) {
+ return ChildProcess::Main(controlEvent, argv[1]);
+ }
+
+ if (argc != 1) {
+ printf(
+ "TEST-FAILED | TestPEExportSection | "
+ "Invalid arguments.\n");
+ return kTestFail;
+ }
+
+ MMPolicyInProcess policy;
+ if (BasicTest<MMPolicyInProcess>(policy)) {
+ return kTestFail;
+ }
+
+ auto exportTableSelf =
+ LocalPEExportSection::Get(::GetModuleHandleW(nullptr), policy);
+ if (!exportTableSelf) {
+ printf(
+ "TEST-FAILED | TestPEExportSection | "
+ "LocalPEExportSection::Get failed.\n");
+ return kTestFail;
+ }
+
+ VERIFY_EXPORT_FUNCTION(exportTableSelf, "Export1", Export1,
+ "Local | Export1 was not exported.\n");
+ VERIFY_EXPORT_FUNCTION(exportTableSelf, "Export2", Export2,
+ "Local | Export2 was not exported.\n");
+ VERIFY_EXPORT_FUNCTION(
+ exportTableSelf, "Invalid name", 0,
+ "Local | GetProcAddress should return nullptr for an invalid name.\n");
+
+ // We'll add the child process to a job so that, in the event of a failure in
+ // this parent process, the child process will be automatically terminated.
+ auto probablyJob = CreateJobToLimitProcessLifetime();
+ if (probablyJob.isErr()) {
+ return kTestFail;
+ }
+
+ nsAutoHandle job(probablyJob.unwrap());
+
+ auto result = RunChildProcessTest(
+ argv[0], kNoModification, controlEvent, job,
+ [](const RemotePEExportSection& aTables) {
+ VERIFY_EXPORT_FUNCTION(aTables, "Export1", Export1,
+ "NoModification | Export1 was not exported.\n");
+ VERIFY_EXPORT_FUNCTION(aTables, "Export2", Export2,
+ "NoModification | Export2 was not exported.\n");
+ return kTestSuccess;
+ });
+ if (result == kTestFail) {
+ return result;
+ }
+
+ result = RunChildProcessTest(
+ argv[0], kNoExport, controlEvent, job,
+ [](const RemotePEExportSection& aTables) {
+ VERIFY_EXPORT_FUNCTION(aTables, "Export1", 0,
+ "NoExport | Export1 was exported.\n");
+ VERIFY_EXPORT_FUNCTION(aTables, "Export2", 0,
+ "NoExport | Export2 was exported.\n");
+ return kTestSuccess;
+ });
+ if (result == kTestFail) {
+ return result;
+ }
+
+ result = RunChildProcessTest(
+ argv[0], kModifyTableEntry, controlEvent, job,
+ [](const RemotePEExportSection& aTables) {
+ VERIFY_EXPORT_FUNCTION(
+ aTables, "Export1", SecretFunction1,
+ "ModifyTableEntry | SecretFunction1 was not exported.\n");
+ VERIFY_EXPORT_FUNCTION(
+ aTables, "Export2", Export2,
+ "ModifyTableEntry | Export2 was not exported.\n");
+ return kTestSuccess;
+ });
+ if (result == kTestFail) {
+ return result;
+ }
+
+ result = RunChildProcessTest(
+ argv[0], kModifyTable, controlEvent, job,
+ [](const RemotePEExportSection& aTables) {
+ VERIFY_EXPORT_FUNCTION(aTables, "Export1", 0,
+ "ModifyTable | Export1 was exported.\n");
+ VERIFY_EXPORT_FUNCTION(aTables, "Export2", 0,
+ "ModifyTable | Export2 was exported.\n");
+ VERIFY_EXPORT_FUNCTION(
+ aTables, kSecretFunction, SecretFunction1,
+ "ModifyTable | SecretFunction1 was not exported.\n");
+ VERIFY_EXPORT_FUNCTION(
+ aTables, kSecretFunctionWithSuffix, SecretFunction2,
+ "ModifyTable | SecretFunction2 was not exported.\n");
+ VERIFY_EXPORT_FUNCTION(
+ aTables, kSecretFunctionInvalid, 0,
+ "ModifyTable | kSecretFunctionInvalid was exported.\n");
+ return kTestSuccess;
+ });
+ if (result == kTestFail) {
+ return result;
+ }
+
+ result = RunChildProcessTest(
+ argv[0], kModifyDirectoryEntry, controlEvent, job,
+ [](const RemotePEExportSection& aTables) {
+ VERIFY_EXPORT_FUNCTION(
+ aTables, "Export1", 0,
+ "ModifyDirectoryEntry | Export1 was exported.\n");
+ VERIFY_EXPORT_FUNCTION(
+ aTables, "Export2", 0,
+ "ModifyDirectoryEntry | Export2 was exported.\n");
+ VERIFY_EXPORT_FUNCTION(
+ aTables, kSecretFunction, SecretFunction1,
+ "ModifyDirectoryEntry | SecretFunction1 was not exported.\n");
+ VERIFY_EXPORT_FUNCTION(
+ aTables, kSecretFunctionWithSuffix, SecretFunction2,
+ "ModifyDirectoryEntry | SecretFunction2 was not exported.\n");
+ VERIFY_EXPORT_FUNCTION(
+ aTables, kSecretFunctionInvalid, 0,
+ "ModifyDirectoryEntry | kSecretFunctionInvalid was exported.\n");
+ return kTestSuccess;
+ });
+ if (result == kTestFail) {
+ return result;
+ }
+
+ result = RunChildProcessTest(
+ argv[0], kExportByOrdinal, controlEvent, job,
+ [](const RemotePEExportSection& aTables) {
+ VERIFY_EXPORT_FUNCTION(aTables, "Export1", 0,
+ "ExportByOrdinal | Export1 was exported.\n");
+ VERIFY_EXPORT_FUNCTION(aTables, "Export2", 0,
+ "ExportByOrdinal | Export2 was exported.\n");
+ VERIFY_EXPORT_FUNCTION(
+ aTables, kSecretFunction, 0,
+ "ModifyDirectoryEntry | kSecretFunction was exported by name.\n");
+ VERIFY_EXPORT_FUNCTION(
+ aTables, kSecretFunctionWithSuffix, 0,
+ "ModifyDirectoryEntry | "
+ "kSecretFunctionWithSuffix was exported by name.\n");
+ VERIFY_EXPORT_FUNCTION(
+ aTables, MAKEINTRESOURCE(1), SecretFunction1,
+ "ModifyDirectoryEntry | "
+ "kSecretFunction was not exported by ordinal.\n");
+ VERIFY_EXPORT_FUNCTION(
+ aTables, MAKEINTRESOURCE(2), SecretFunction2,
+ "ModifyDirectoryEntry | "
+ "kSecretFunctionWithSuffix was not exported by ordinal.\n");
+ return kTestSuccess;
+ });
+ if (result == kTestFail) {
+ return result;
+ }
+
+ return kTestSuccess;
+}
diff --git a/mozglue/tests/TestPrintf.cpp b/mozglue/tests/TestPrintf.cpp
new file mode 100644
index 0000000000..5f6f9e2005
--- /dev/null
+++ b/mozglue/tests/TestPrintf.cpp
@@ -0,0 +1,264 @@
+/* vim: set shiftwidth=2 tabstop=8 autoindent cindent expandtab: */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+#include "mozilla/Printf.h"
+
+#include <cfloat>
+#include <cmath>
+#include <inttypes.h>
+#include <stdarg.h>
+#include <stddef.h>
+
+#if defined(__clang__)
+# pragma clang diagnostic push
+# pragma clang diagnostic ignored "-Wc++11-narrowing"
+#elif defined(__GNUC__)
+# pragma GCC diagnostic push
+# pragma GCC diagnostic ignored "-Wnarrowing"
+#endif
+namespace tiformat {
+#include "glibc_printf_tests/tiformat.c"
+}
+namespace tllformat {
+#include "glibc_printf_tests/tllformat.c"
+}
+#if defined(__clang__)
+# pragma clang diagnostic pop
+#elif defined(__GNUC__)
+# pragma GCC diagnostic pop
+#endif
+namespace tfformat {
+#include "glibc_printf_tests/tfformat.c"
+}
+
+// A simple implementation of PrintfTarget, just for testing
+// PrintfTarget::print.
+class TestPrintfTarget : public mozilla::PrintfTarget {
+ public:
+ static const char* test_string;
+
+ TestPrintfTarget() : mOut(0) { memset(mBuffer, '\0', sizeof(mBuffer)); }
+
+ ~TestPrintfTarget() {
+ MOZ_RELEASE_ASSERT(mOut == strlen(test_string));
+ MOZ_RELEASE_ASSERT(strncmp(mBuffer, test_string, strlen(test_string)) == 0);
+ }
+
+ bool append(const char* sp, size_t len) override {
+ if (mOut + len < sizeof(mBuffer)) {
+ memcpy(&mBuffer[mOut], sp, len);
+ }
+ mOut += len;
+ return true;
+ }
+
+ private:
+ char mBuffer[100];
+ size_t mOut;
+};
+
+const char* TestPrintfTarget::test_string = "test string";
+
+static void TestPrintfTargetPrint() {
+ TestPrintfTarget checker;
+ checker.print("test string");
+}
+
+// As of clang 14, __attribute__((printf)) doesn't allow %n on Android targets,
+// which is used in this test.
+static bool
+#ifndef __ANDROID__
+MOZ_FORMAT_PRINTF(5, 6)
+#endif
+ check_print(const char* file, int line,
+ bool (*cmp)(const char* a, const char* b), const char* expect,
+ const char* fmt, ...) {
+ va_list ap;
+
+ va_start(ap, fmt);
+ mozilla::SmprintfPointer output = mozilla::Vsmprintf(fmt, ap);
+ va_end(ap);
+
+ bool ret = output && cmp(output.get(), expect);
+ if (!ret && strcmp(expect, "ignore") != 0) {
+ fprintf(stderr, "(actual) \"%s\" != (expected) \"%s\" (%s:%d)\n",
+ output.get() ? output.get() : "null", expect, file, line);
+ }
+ return ret;
+}
+
+bool str_match(const char* a, const char* b) { return !strcmp(a, b); }
+
+bool approx_match(const char* a, const char* b) {
+ return tfformat::matches(const_cast<char*>(a), b);
+}
+
+#define print_one(...) check_print(__FILE__, __LINE__, str_match, __VA_ARGS__)
+
+static const char* zero() { return nullptr; }
+
+static void TestPrintfFormats() {
+ MOZ_RELEASE_ASSERT(print_one("0", "%d", 0));
+ MOZ_RELEASE_ASSERT(print_one("23", "%d", 23));
+ MOZ_RELEASE_ASSERT(print_one("+23", "%+d", 23));
+ MOZ_RELEASE_ASSERT(print_one("-23", "%+d", -23));
+ MOZ_RELEASE_ASSERT(print_one("0023", "%04d", 23));
+ MOZ_RELEASE_ASSERT(print_one("777777", "%04d", 777777));
+ MOZ_RELEASE_ASSERT(print_one(" 23", "% 4d", 23));
+ MOZ_RELEASE_ASSERT(print_one("23 ", "%-4d", 23));
+ MOZ_RELEASE_ASSERT(print_one(" 23", "%*d", 4, 23));
+ MOZ_RELEASE_ASSERT(print_one("-23 ", "%*d", -7, -23));
+ MOZ_RELEASE_ASSERT(print_one(" 077", "%5.3d", 77));
+ MOZ_RELEASE_ASSERT(print_one(" 077", "%5.*d", 3, 77));
+ MOZ_RELEASE_ASSERT(print_one(" 077", "%*.*d", 5, 3, 77));
+ MOZ_RELEASE_ASSERT(print_one("077 ", "%*.*d", -5, 3, 77));
+ MOZ_RELEASE_ASSERT(print_one("77 ", "%*.*d", -5, -3, 77));
+ MOZ_RELEASE_ASSERT(print_one("-1", "%d", -1));
+ MOZ_RELEASE_ASSERT(print_one("23", "%u", 23u));
+ MOZ_RELEASE_ASSERT(print_one("0x17", "0x%x", 23u));
+ MOZ_RELEASE_ASSERT(print_one("0xFF", "0x%X", 255u));
+ MOZ_RELEASE_ASSERT(print_one("027", "0%o", 23u));
+ MOZ_RELEASE_ASSERT(print_one("-1", "%hd", (short)-1));
+ // A funny special case.
+ MOZ_RELEASE_ASSERT(print_one("", "%.*d", 0, 0));
+ // This could be expanded if need be, it's just convenient to do
+ // it this way.
+ if (sizeof(short) == 2) {
+ MOZ_RELEASE_ASSERT(print_one("8000", "%hx", (unsigned short)0x8000));
+ }
+ MOZ_RELEASE_ASSERT(print_one("2305", "%ld", 2305l));
+ MOZ_RELEASE_ASSERT(print_one("-2305", "%ld", -2305l));
+ MOZ_RELEASE_ASSERT(print_one("0xf0f0", "0x%lx", 0xf0f0ul));
+ MOZ_RELEASE_ASSERT(print_one("0", "%lld", 0ll));
+ MOZ_RELEASE_ASSERT(print_one("2305", "%lld", 2305ll));
+ MOZ_RELEASE_ASSERT(print_one("-2305", "%lld", -2305ll));
+ // A funny special case.
+ MOZ_RELEASE_ASSERT(print_one("", "%.*lld", 0, 0ll));
+ MOZ_RELEASE_ASSERT(print_one("0xF0F0", "0x%llX", 0xf0f0ull));
+ MOZ_RELEASE_ASSERT(print_one("27270", "%zu", (size_t)27270));
+ MOZ_RELEASE_ASSERT(print_one("27270", "%tu", (ptrdiff_t)27270));
+ MOZ_RELEASE_ASSERT(print_one("27270", "%ju", (intmax_t)27270));
+ MOZ_RELEASE_ASSERT(print_one("hello", "he%so", "ll"));
+ MOZ_RELEASE_ASSERT(print_one("hello ", "%-8s", "hello"));
+ MOZ_RELEASE_ASSERT(print_one(" hello", "%8s", "hello"));
+ MOZ_RELEASE_ASSERT(print_one("hello ", "%*s", -8, "hello"));
+ MOZ_RELEASE_ASSERT(print_one("hello", "%.*s", 5, "hello there"));
+ MOZ_RELEASE_ASSERT(print_one("", "%.*s", 0, "hello there"));
+ MOZ_RELEASE_ASSERT(print_one("%%", "%%%%"));
+ MOZ_RELEASE_ASSERT(print_one("0", "%p", (char*)0));
+ MOZ_RELEASE_ASSERT(print_one("h", "%c", 'h'));
+ MOZ_RELEASE_ASSERT(print_one("1.500000", "%f", 1.5f));
+ MOZ_RELEASE_ASSERT(print_one("1.5", "%g", 1.5));
+ MOZ_RELEASE_ASSERT(print_one("1.50000", "%.5f", 1.5));
+
+ MOZ_RELEASE_ASSERT(print_one("z ", "%-7s", "z"));
+ MOZ_RELEASE_ASSERT(print_one("z ", "%*s", -7, "z"));
+ MOZ_RELEASE_ASSERT(print_one("hello", "%*s", -3, "hello"));
+
+ MOZ_RELEASE_ASSERT(print_one(" q", "%3c", 'q'));
+ MOZ_RELEASE_ASSERT(print_one("q ", "%-3c", 'q'));
+ MOZ_RELEASE_ASSERT(print_one(" q", "%*c", 3, 'q'));
+ MOZ_RELEASE_ASSERT(print_one("q ", "%*c", -3, 'q'));
+
+ // Regression test for bug#1350097. The bug was an assertion
+ // failure caused by printing a very long floating point value.
+ print_one("ignore", "%lf", DBL_MAX);
+
+ // Regression test for bug#1517433. The bug was an assertion
+ // failure caused by printing a floating point value with a large
+ // precision and/or width.
+ print_one("ignore", "%500.500lf", DBL_MAX);
+
+ MOZ_RELEASE_ASSERT(print_one("2727", "%" PRIu32, (uint32_t)2727));
+ MOZ_RELEASE_ASSERT(print_one("aa7", "%" PRIx32, (uint32_t)2727));
+ MOZ_RELEASE_ASSERT(print_one("2727", "%" PRIu64, (uint64_t)2727));
+ MOZ_RELEASE_ASSERT(print_one("aa7", "%" PRIx64, (uint64_t)2727));
+
+ int n1, n2;
+ MOZ_RELEASE_ASSERT(print_one(" hi ", "%n hi %n", &n1, &n2));
+ MOZ_RELEASE_ASSERT(n1 == 0);
+ MOZ_RELEASE_ASSERT(n2 == 4);
+
+ MOZ_RELEASE_ASSERT(print_one("23 % 24", "%2$ld %% %1$d", 24, 23l));
+ MOZ_RELEASE_ASSERT(
+ print_one("7 8 9 10", "%4$lld %3$ld %2$d %1$hd", (short)10, 9, 8l, 7ll));
+
+ MOZ_RELEASE_ASSERT(print_one("0 ", "%2$p %1$n", &n1, zero()));
+ MOZ_RELEASE_ASSERT(n1 == 2);
+
+ MOZ_RELEASE_ASSERT(print_one("23 % 024", "%2$-3ld%%%1$4.3d", 24, 23l));
+ MOZ_RELEASE_ASSERT(print_one("23 1.5", "%2$d %1$g", 1.5, 23));
+ MOZ_RELEASE_ASSERT(
+ print_one("ff number FF", "%3$llx %1$s %2$lX", "number", 255ul, 255ull));
+ MOZ_RELEASE_ASSERT(
+ print_one("7799 9977", "%2$zu %1$zu", (size_t)9977, (size_t)7799));
+}
+
+template <typename T, size_t N>
+static void TestGlibcPrintf(T (&test_cases)[N], const char* file,
+ bool (*cmp)(const char* a, const char* b)) {
+ bool ok = true;
+ char fmt2[40];
+ for (auto& line : test_cases) {
+ // mozilla::PrintfTarget doesn't support the `#` flag character or the
+ // `a` conversion specifier.
+ if (!line.line || strchr(line.format_string, '#') ||
+ strchr(line.format_string, 'a')) {
+ continue;
+ }
+
+ // Derive the format string in the test case to add "2$" in the specifier
+ // (transforming e.g. "%f" into "%2$f"), and append "%1$.0d".
+ // The former will make the format string take the `line.value` as the
+ // second argument, and the latter will make the first argument formatted
+ // with no precision. We'll pass 0 as the first argument, such that the
+ // formatted value for it is "", which means the expected result string
+ // is still the same.
+ MOZ_RELEASE_ASSERT(sizeof(fmt2) > strlen(line.format_string) + 8);
+ const char* percent = strchr(line.format_string, '%');
+ MOZ_RELEASE_ASSERT(percent);
+ size_t percent_off = percent - line.format_string;
+ memcpy(fmt2, line.format_string, percent_off + 1);
+ memcpy(fmt2 + percent_off + 1, "2$", 2);
+ strcpy(fmt2 + percent_off + 3, percent + 1);
+ strcat(fmt2, "%1$.0d");
+
+ int l = line.line;
+ const char* res = line.result;
+ const char* fmt = line.format_string;
+ if (strchr(line.format_string, 'I')) {
+ ok = check_print(file, l, cmp, res, fmt, (size_t)line.value) && ok;
+ ok = check_print(file, l, cmp, res, fmt2, 0, (size_t)line.value) && ok;
+ } else {
+ ok = check_print(file, l, cmp, res, fmt, line.value) && ok;
+ ok = check_print(file, l, cmp, res, fmt2, 0, line.value) && ok;
+ }
+ }
+ MOZ_RELEASE_ASSERT(ok);
+}
+
+#if defined(XP_WIN)
+int wmain()
+#else
+int main()
+#endif // defined(XP_WIN)
+{
+ TestPrintfFormats();
+ TestPrintfTargetPrint();
+ TestGlibcPrintf(tiformat::sprint_ints, "tiformat.c", str_match);
+ TestGlibcPrintf(tllformat::sprint_ints, "tllformat.c", str_match);
+ TestGlibcPrintf(tfformat::sprint_doubles, "tfformat.c", approx_match);
+
+ // %f is actually a not very useful formatting specifier, and if you give
+ // large numbers, it will print... large amounts of characters. Ensure
+ // that it does (which requires a patch to double-conversion).
+ mozilla::SmprintfPointer dbl_max = mozilla::Smprintf("%f", -DBL_MAX);
+ MOZ_RELEASE_ASSERT(dbl_max);
+ // Its length should be 309 digits before the dot, 6 after, plus the dot
+ // and the negative sign.
+ MOZ_RELEASE_ASSERT(strlen(dbl_max.get()) == 317);
+
+ return 0;
+}
diff --git a/mozglue/tests/TestStackCookie.cpp b/mozglue/tests/TestStackCookie.cpp
new file mode 100644
index 0000000000..6970fbc240
--- /dev/null
+++ b/mozglue/tests/TestStackCookie.cpp
@@ -0,0 +1,89 @@
+/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* vim: set ts=8 sts=2 et sw=2 tw=80: */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */
+
+#include <stdio.h>
+#include <windows.h>
+
+#include <array>
+#include <utility>
+
+#include "mozilla/WindowsStackCookie.h"
+
+#if defined(DEBUG) && defined(_M_X64) && !defined(__MINGW64__)
+
+uint64_t NoStackCookie(const uint64_t* aArray, size_t aSize) {
+ uint64_t result = 0;
+ for (size_t i = 0; i < aSize; ++i) {
+ result += aArray[i];
+ }
+ result /= aSize;
+ return result;
+}
+
+// We expect the following instructions to be generated:
+//
+// 48 8b 05 XX XX XX XX mov rax,qword ptr [__security_cookie]
+// 48 31 e0 xor rax,rsp 48
+// 89 44 24 38 mov qword ptr [rsp+38h],rax
+uint64_t StackCookieWithSmallStackSpace(const uint64_t* aArray, size_t aSize) {
+ uint64_t array[0x2]{};
+ for (size_t i = 0; i < aSize; ++i) {
+ array[aArray[i]] += aArray[i];
+ }
+ return array[0] + array[1];
+}
+
+// We expect the following instructions to be generated:
+//
+// 48 8b 05 XX XX XX XX mov rax,qword ptr [__security_cookie]
+// 48 31 e0 xor rax,rsp
+// 48 89 84 24 28 40 00 00 mov qword ptr [rsp+4028h],rax
+uint64_t StackCookieWithLargeStackSpace(const uint64_t* aArray, size_t aSize) {
+ uint64_t array[0x800]{};
+ for (size_t i = 0; i < aSize; ++i) {
+ array[aArray[i]] += aArray[i];
+ }
+ return array[0] + array[0x7FF];
+}
+
+bool TestStackCookieCheck() {
+ std::array<std::pair<uintptr_t, bool>, 3> testCases{
+ std::make_pair<uintptr_t, bool>(
+ reinterpret_cast<uintptr_t>(NoStackCookie), false),
+ std::make_pair<uintptr_t, bool>(
+ reinterpret_cast<uintptr_t>(StackCookieWithSmallStackSpace), true),
+ std::make_pair<uintptr_t, bool>(
+ reinterpret_cast<uintptr_t>(StackCookieWithLargeStackSpace), true),
+ };
+ for (auto [functionAddress, expectStackCookieCheck] : testCases) {
+ if (mozilla::HasStackCookieCheck(functionAddress) !=
+ expectStackCookieCheck) {
+ printf(
+ "TEST-FAILED | StackCookie | Wrong output from HasStackCookieCheck "
+ "for function at %p (expected %d).\n",
+ reinterpret_cast<void*>(functionAddress), expectStackCookieCheck);
+ return false;
+ }
+ printf(
+ "TEST-PASS | StackCookie | Correct output from HasStackCookieCheck for "
+ "function at %p (expected %d).\n",
+ reinterpret_cast<void*>(functionAddress), expectStackCookieCheck);
+ }
+ return true;
+}
+
+#endif // defined(DEBUG) && defined(_M_X64) && !defined(__MINGW64__)
+
+int wmain(int argc, wchar_t* argv[]) {
+#if defined(DEBUG) && defined(_M_X64) && !defined(__MINGW64__)
+ if (!TestStackCookieCheck()) {
+ return 1;
+ }
+#endif // defined(DEBUG) && defined(_M_X64) && !defined(__MINGW64__)
+
+ printf("TEST-PASS | StackCookie | All tests ran successfully\n");
+ return 0;
+}
diff --git a/mozglue/tests/TestTimeStampWin.cpp b/mozglue/tests/TestTimeStampWin.cpp
new file mode 100644
index 0000000000..a69e2be59f
--- /dev/null
+++ b/mozglue/tests/TestTimeStampWin.cpp
@@ -0,0 +1,96 @@
+/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* vim: set ts=8 sts=2 et sw=2 tw=80: */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */
+
+#include "mozilla/CmdLineAndEnvUtils.h"
+#include "mozilla/TimeStamp.h"
+
+#include "nsWindowsHelpers.h"
+
+#include <stdio.h>
+#include <windows.h>
+
+static wchar_t kChildArg[] = L"--child";
+
+static nsReturnRef<HANDLE> CreateProcessWrapper(const wchar_t* aPath) {
+ nsAutoHandle empty;
+
+ const wchar_t* childArgv[] = {aPath, kChildArg};
+ mozilla::UniquePtr<wchar_t[]> cmdLine(
+ mozilla::MakeCommandLine(mozilla::ArrayLength(childArgv), childArgv));
+
+ STARTUPINFOW si = {sizeof(si)};
+ PROCESS_INFORMATION pi;
+ BOOL ok = ::CreateProcessW(aPath, cmdLine.get(), nullptr, nullptr, FALSE, 0,
+ nullptr, nullptr, &si, &pi);
+ if (!ok) {
+ printf(
+ "TEST-FAILED | TimeStampWin | "
+ "CreateProcess failed - %08lx\n",
+ GetLastError());
+ return empty.out();
+ }
+
+ nsAutoHandle proc(pi.hProcess);
+ nsAutoHandle thd(pi.hThread);
+
+ return proc.out();
+}
+
+int ChildMain() {
+ // Make sure a process creation timestamp is always not bigger than
+ // the current timestamp.
+ auto t0 = mozilla::TimeStamp::ProcessCreation();
+ auto t1 = mozilla::TimeStamp::Now();
+ if (t0 > t1) {
+ printf(
+ "TEST-FAILED | TimeStampWin | "
+ "Process creation timestamp is bigger than the current "
+ "timestamp!\n");
+ return 1;
+ }
+ return 0;
+}
+
+int wmain(int argc, wchar_t* argv[]) {
+ if (argc == 2 && wcscmp(argv[1], kChildArg) == 0) {
+ return ChildMain();
+ }
+
+ if (argc != 1) {
+ printf(
+ "TEST-FAILED | TimeStampWin | "
+ "Unexpected argc\n");
+ return 1;
+ }
+
+ // Start a child process successively, checking any of them terminates with
+ // a non-zero value which means an error.
+ for (int i = 0; i < 20; ++i) {
+ nsAutoHandle childProc(CreateProcessWrapper(argv[0]));
+
+ if (::WaitForSingleObject(childProc, 60000) != WAIT_OBJECT_0) {
+ printf(
+ "TEST-FAILED | TimeStampWin | "
+ "Unexpected result from WaitForSingleObject\n");
+ return 1;
+ }
+
+ DWORD childExitCode;
+ if (!::GetExitCodeProcess(childProc.get(), &childExitCode)) {
+ printf(
+ "TEST-FAILED | TimeStampWin | "
+ "GetExitCodeProcess failed - %08lx\n",
+ GetLastError());
+ return 1;
+ }
+
+ if (childExitCode != 0) {
+ return childExitCode;
+ }
+ }
+
+ return 0;
+}
diff --git a/mozglue/tests/glibc_printf_tests/COPYING b/mozglue/tests/glibc_printf_tests/COPYING
new file mode 100644
index 0000000000..d159169d10
--- /dev/null
+++ b/mozglue/tests/glibc_printf_tests/COPYING
@@ -0,0 +1,339 @@
+ GNU GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users. This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it. (Some other Free Software Foundation software is covered by
+the GNU Lesser General Public License instead.) You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must show them these terms so they know their
+rights.
+
+ We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary. To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ GNU GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License. The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language. (Hereinafter, translation is included without limitation in
+the term "modification".) Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+ 1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+ 2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ b) You must cause any work that you distribute or publish, that in
+ whole or in part contains or is derived from the Program or any
+ part thereof, to be licensed as a whole at no charge to all third
+ parties under the terms of this License.
+
+ c) If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such
+ interactive use in the most ordinary way, to print or display an
+ announcement including an appropriate copyright notice and a
+ notice that there is no warranty (or else, saying that you provide
+ a warranty) and that users may redistribute the program under
+ these conditions, and telling the user how to view a copy of this
+ License. (Exception: if the Program itself is interactive but
+ does not normally print such an announcement, your work based on
+ the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+ a) Accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of Sections
+ 1 and 2 above on a medium customarily used for software interchange; or,
+
+ b) Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your
+ cost of physically performing source distribution, a complete
+ machine-readable copy of the corresponding source code, to be
+ distributed under the terms of Sections 1 and 2 above on a medium
+ customarily used for software interchange; or,
+
+ c) Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form with such
+ an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it. For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable. However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+ 5. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Program or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+ 6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+ 7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all. For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded. In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+ 9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation. If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+ 10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission. For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this. Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+ NO WARRANTY
+
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License along
+ with this program; if not, write to the Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+ Gnomovision version 69, Copyright (C) year name of author
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+ `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+ <signature of Ty Coon>, 1 April 1989
+ Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs. If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library. If this is what you want to do, use the GNU Lesser General
+Public License instead of this License.
diff --git a/mozglue/tests/glibc_printf_tests/COPYING.LIB b/mozglue/tests/glibc_printf_tests/COPYING.LIB
new file mode 100644
index 0000000000..4362b49151
--- /dev/null
+++ b/mozglue/tests/glibc_printf_tests/COPYING.LIB
@@ -0,0 +1,502 @@
+ GNU LESSER GENERAL PUBLIC LICENSE
+ Version 2.1, February 1999
+
+ Copyright (C) 1991, 1999 Free Software Foundation, Inc.
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+[This is the first released version of the Lesser GPL. It also counts
+ as the successor of the GNU Library Public License, version 2, hence
+ the version number 2.1.]
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+Licenses are intended to guarantee your freedom to share and change
+free software--to make sure the software is free for all its users.
+
+ This license, the Lesser General Public License, applies to some
+specially designated software packages--typically libraries--of the
+Free Software Foundation and other authors who decide to use it. You
+can use it too, but we suggest you first think carefully about whether
+this license or the ordinary General Public License is the better
+strategy to use in any particular case, based on the explanations below.
+
+ When we speak of free software, we are referring to freedom of use,
+not price. Our General Public Licenses are designed to make sure that
+you have the freedom to distribute copies of free software (and charge
+for this service if you wish); that you receive source code or can get
+it if you want it; that you can change the software and use pieces of
+it in new free programs; and that you are informed that you can do
+these things.
+
+ To protect your rights, we need to make restrictions that forbid
+distributors to deny you these rights or to ask you to surrender these
+rights. These restrictions translate to certain responsibilities for
+you if you distribute copies of the library or if you modify it.
+
+ For example, if you distribute copies of the library, whether gratis
+or for a fee, you must give the recipients all the rights that we gave
+you. You must make sure that they, too, receive or can get the source
+code. If you link other code with the library, you must provide
+complete object files to the recipients, so that they can relink them
+with the library after making changes to the library and recompiling
+it. And you must show them these terms so they know their rights.
+
+ We protect your rights with a two-step method: (1) we copyright the
+library, and (2) we offer you this license, which gives you legal
+permission to copy, distribute and/or modify the library.
+
+ To protect each distributor, we want to make it very clear that
+there is no warranty for the free library. Also, if the library is
+modified by someone else and passed on, the recipients should know
+that what they have is not the original version, so that the original
+author's reputation will not be affected by problems that might be
+introduced by others.
+
+ Finally, software patents pose a constant threat to the existence of
+any free program. We wish to make sure that a company cannot
+effectively restrict the users of a free program by obtaining a
+restrictive license from a patent holder. Therefore, we insist that
+any patent license obtained for a version of the library must be
+consistent with the full freedom of use specified in this license.
+
+ Most GNU software, including some libraries, is covered by the
+ordinary GNU General Public License. This license, the GNU Lesser
+General Public License, applies to certain designated libraries, and
+is quite different from the ordinary General Public License. We use
+this license for certain libraries in order to permit linking those
+libraries into non-free programs.
+
+ When a program is linked with a library, whether statically or using
+a shared library, the combination of the two is legally speaking a
+combined work, a derivative of the original library. The ordinary
+General Public License therefore permits such linking only if the
+entire combination fits its criteria of freedom. The Lesser General
+Public License permits more lax criteria for linking other code with
+the library.
+
+ We call this license the "Lesser" General Public License because it
+does Less to protect the user's freedom than the ordinary General
+Public License. It also provides other free software developers Less
+of an advantage over competing non-free programs. These disadvantages
+are the reason we use the ordinary General Public License for many
+libraries. However, the Lesser license provides advantages in certain
+special circumstances.
+
+ For example, on rare occasions, there may be a special need to
+encourage the widest possible use of a certain library, so that it becomes
+a de-facto standard. To achieve this, non-free programs must be
+allowed to use the library. A more frequent case is that a free
+library does the same job as widely used non-free libraries. In this
+case, there is little to gain by limiting the free library to free
+software only, so we use the Lesser General Public License.
+
+ In other cases, permission to use a particular library in non-free
+programs enables a greater number of people to use a large body of
+free software. For example, permission to use the GNU C Library in
+non-free programs enables many more people to use the whole GNU
+operating system, as well as its variant, the GNU/Linux operating
+system.
+
+ Although the Lesser General Public License is Less protective of the
+users' freedom, it does ensure that the user of a program that is
+linked with the Library has the freedom and the wherewithal to run
+that program using a modified version of the Library.
+
+ The precise terms and conditions for copying, distribution and
+modification follow. Pay close attention to the difference between a
+"work based on the library" and a "work that uses the library". The
+former contains code derived from the library, whereas the latter must
+be combined with the library in order to run.
+
+ GNU LESSER GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License Agreement applies to any software library or other
+program which contains a notice placed by the copyright holder or
+other authorized party saying it may be distributed under the terms of
+this Lesser General Public License (also called "this License").
+Each licensee is addressed as "you".
+
+ A "library" means a collection of software functions and/or data
+prepared so as to be conveniently linked with application programs
+(which use some of those functions and data) to form executables.
+
+ The "Library", below, refers to any such software library or work
+which has been distributed under these terms. A "work based on the
+Library" means either the Library or any derivative work under
+copyright law: that is to say, a work containing the Library or a
+portion of it, either verbatim or with modifications and/or translated
+straightforwardly into another language. (Hereinafter, translation is
+included without limitation in the term "modification".)
+
+ "Source code" for a work means the preferred form of the work for
+making modifications to it. For a library, complete source code means
+all the source code for all modules it contains, plus any associated
+interface definition files, plus the scripts used to control compilation
+and installation of the library.
+
+ Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running a program using the Library is not restricted, and output from
+such a program is covered only if its contents constitute a work based
+on the Library (independent of the use of the Library in a tool for
+writing it). Whether that is true depends on what the Library does
+and what the program that uses the Library does.
+
+ 1. You may copy and distribute verbatim copies of the Library's
+complete source code as you receive it, in any medium, provided that
+you conspicuously and appropriately publish on each copy an
+appropriate copyright notice and disclaimer of warranty; keep intact
+all the notices that refer to this License and to the absence of any
+warranty; and distribute a copy of this License along with the
+Library.
+
+ You may charge a fee for the physical act of transferring a copy,
+and you may at your option offer warranty protection in exchange for a
+fee.
+
+ 2. You may modify your copy or copies of the Library or any portion
+of it, thus forming a work based on the Library, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) The modified work must itself be a software library.
+
+ b) You must cause the files modified to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ c) You must cause the whole of the work to be licensed at no
+ charge to all third parties under the terms of this License.
+
+ d) If a facility in the modified Library refers to a function or a
+ table of data to be supplied by an application program that uses
+ the facility, other than as an argument passed when the facility
+ is invoked, then you must make a good faith effort to ensure that,
+ in the event an application does not supply such function or
+ table, the facility still operates, and performs whatever part of
+ its purpose remains meaningful.
+
+ (For example, a function in a library to compute square roots has
+ a purpose that is entirely well-defined independent of the
+ application. Therefore, Subsection 2d requires that any
+ application-supplied function or table used by this function must
+ be optional: if the application does not supply it, the square
+ root function must still compute square roots.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Library,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Library, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote
+it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Library.
+
+In addition, mere aggregation of another work not based on the Library
+with the Library (or with a work based on the Library) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may opt to apply the terms of the ordinary GNU General Public
+License instead of this License to a given copy of the Library. To do
+this, you must alter all the notices that refer to this License, so
+that they refer to the ordinary GNU General Public License, version 2,
+instead of to this License. (If a newer version than version 2 of the
+ordinary GNU General Public License has appeared, then you can specify
+that version instead if you wish.) Do not make any other change in
+these notices.
+
+ Once this change is made in a given copy, it is irreversible for
+that copy, so the ordinary GNU General Public License applies to all
+subsequent copies and derivative works made from that copy.
+
+ This option is useful when you wish to copy part of the code of
+the Library into a program that is not a library.
+
+ 4. You may copy and distribute the Library (or a portion or
+derivative of it, under Section 2) in object code or executable form
+under the terms of Sections 1 and 2 above provided that you accompany
+it with the complete corresponding machine-readable source code, which
+must be distributed under the terms of Sections 1 and 2 above on a
+medium customarily used for software interchange.
+
+ If distribution of object code is made by offering access to copy
+from a designated place, then offering equivalent access to copy the
+source code from the same place satisfies the requirement to
+distribute the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 5. A program that contains no derivative of any portion of the
+Library, but is designed to work with the Library by being compiled or
+linked with it, is called a "work that uses the Library". Such a
+work, in isolation, is not a derivative work of the Library, and
+therefore falls outside the scope of this License.
+
+ However, linking a "work that uses the Library" with the Library
+creates an executable that is a derivative of the Library (because it
+contains portions of the Library), rather than a "work that uses the
+library". The executable is therefore covered by this License.
+Section 6 states terms for distribution of such executables.
+
+ When a "work that uses the Library" uses material from a header file
+that is part of the Library, the object code for the work may be a
+derivative work of the Library even though the source code is not.
+Whether this is true is especially significant if the work can be
+linked without the Library, or if the work is itself a library. The
+threshold for this to be true is not precisely defined by law.
+
+ If such an object file uses only numerical parameters, data
+structure layouts and accessors, and small macros and small inline
+functions (ten lines or less in length), then the use of the object
+file is unrestricted, regardless of whether it is legally a derivative
+work. (Executables containing this object code plus portions of the
+Library will still fall under Section 6.)
+
+ Otherwise, if the work is a derivative of the Library, you may
+distribute the object code for the work under the terms of Section 6.
+Any executables containing that work also fall under Section 6,
+whether or not they are linked directly with the Library itself.
+
+ 6. As an exception to the Sections above, you may also combine or
+link a "work that uses the Library" with the Library to produce a
+work containing portions of the Library, and distribute that work
+under terms of your choice, provided that the terms permit
+modification of the work for the customer's own use and reverse
+engineering for debugging such modifications.
+
+ You must give prominent notice with each copy of the work that the
+Library is used in it and that the Library and its use are covered by
+this License. You must supply a copy of this License. If the work
+during execution displays copyright notices, you must include the
+copyright notice for the Library among them, as well as a reference
+directing the user to the copy of this License. Also, you must do one
+of these things:
+
+ a) Accompany the work with the complete corresponding
+ machine-readable source code for the Library including whatever
+ changes were used in the work (which must be distributed under
+ Sections 1 and 2 above); and, if the work is an executable linked
+ with the Library, with the complete machine-readable "work that
+ uses the Library", as object code and/or source code, so that the
+ user can modify the Library and then relink to produce a modified
+ executable containing the modified Library. (It is understood
+ that the user who changes the contents of definitions files in the
+ Library will not necessarily be able to recompile the application
+ to use the modified definitions.)
+
+ b) Use a suitable shared library mechanism for linking with the
+ Library. A suitable mechanism is one that (1) uses at run time a
+ copy of the library already present on the user's computer system,
+ rather than copying library functions into the executable, and (2)
+ will operate properly with a modified version of the library, if
+ the user installs one, as long as the modified version is
+ interface-compatible with the version that the work was made with.
+
+ c) Accompany the work with a written offer, valid for at
+ least three years, to give the same user the materials
+ specified in Subsection 6a, above, for a charge no more
+ than the cost of performing this distribution.
+
+ d) If distribution of the work is made by offering access to copy
+ from a designated place, offer equivalent access to copy the above
+ specified materials from the same place.
+
+ e) Verify that the user has already received a copy of these
+ materials or that you have already sent this user a copy.
+
+ For an executable, the required form of the "work that uses the
+Library" must include any data and utility programs needed for
+reproducing the executable from it. However, as a special exception,
+the materials to be distributed need not include anything that is
+normally distributed (in either source or binary form) with the major
+components (compiler, kernel, and so on) of the operating system on
+which the executable runs, unless that component itself accompanies
+the executable.
+
+ It may happen that this requirement contradicts the license
+restrictions of other proprietary libraries that do not normally
+accompany the operating system. Such a contradiction means you cannot
+use both them and the Library together in an executable that you
+distribute.
+
+ 7. You may place library facilities that are a work based on the
+Library side-by-side in a single library together with other library
+facilities not covered by this License, and distribute such a combined
+library, provided that the separate distribution of the work based on
+the Library and of the other library facilities is otherwise
+permitted, and provided that you do these two things:
+
+ a) Accompany the combined library with a copy of the same work
+ based on the Library, uncombined with any other library
+ facilities. This must be distributed under the terms of the
+ Sections above.
+
+ b) Give prominent notice with the combined library of the fact
+ that part of it is a work based on the Library, and explaining
+ where to find the accompanying uncombined form of the same work.
+
+ 8. You may not copy, modify, sublicense, link with, or distribute
+the Library except as expressly provided under this License. Any
+attempt otherwise to copy, modify, sublicense, link with, or
+distribute the Library is void, and will automatically terminate your
+rights under this License. However, parties who have received copies,
+or rights, from you under this License will not have their licenses
+terminated so long as such parties remain in full compliance.
+
+ 9. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Library or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Library (or any work based on the
+Library), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Library or works based on it.
+
+ 10. Each time you redistribute the Library (or any work based on the
+Library), the recipient automatically receives a license from the
+original licensor to copy, distribute, link with or modify the Library
+subject to these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties with
+this License.
+
+ 11. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Library at all. For example, if a patent
+license would not permit royalty-free redistribution of the Library by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Library.
+
+If any portion of this section is held invalid or unenforceable under any
+particular circumstance, the balance of the section is intended to apply,
+and the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 12. If the distribution and/or use of the Library is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Library under this License may add
+an explicit geographical distribution limitation excluding those countries,
+so that distribution is permitted only in or among countries not thus
+excluded. In such case, this License incorporates the limitation as if
+written in the body of this License.
+
+ 13. The Free Software Foundation may publish revised and/or new
+versions of the Lesser General Public License from time to time.
+Such new versions will be similar in spirit to the present version,
+but may differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Library
+specifies a version number of this License which applies to it and
+"any later version", you have the option of following the terms and
+conditions either of that version or of any later version published by
+the Free Software Foundation. If the Library does not specify a
+license version number, you may choose any version ever published by
+the Free Software Foundation.
+
+ 14. If you wish to incorporate parts of the Library into other free
+programs whose distribution conditions are incompatible with these,
+write to the author to ask for permission. For software which is
+copyrighted by the Free Software Foundation, write to the Free
+Software Foundation; we sometimes make exceptions for this. Our
+decision will be guided by the two goals of preserving the free status
+of all derivatives of our free software and of promoting the sharing
+and reuse of software generally.
+
+ NO WARRANTY
+
+ 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
+WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
+OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
+KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
+LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+ 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
+AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
+FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
+LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
+FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Libraries
+
+ If you develop a new library, and you want it to be of the greatest
+possible use to the public, we recommend making it free software that
+everyone can redistribute and change. You can do so by permitting
+redistribution under these terms (or, alternatively, under the terms of the
+ordinary General Public License).
+
+ To apply these terms, attach the following notices to the library. It is
+safest to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least the
+"copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the library's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+Also add information on how to contact you by electronic and paper mail.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the library, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the
+ library `Frob' (a library for tweaking knobs) written by James Random Hacker.
+
+ <signature of Ty Coon>, 1 April 1990
+ Ty Coon, President of Vice
+
+That's all there is to it!
diff --git a/mozglue/tests/glibc_printf_tests/README.MOZILLA b/mozglue/tests/glibc_printf_tests/README.MOZILLA
new file mode 100644
index 0000000000..0016c66f70
--- /dev/null
+++ b/mozglue/tests/glibc_printf_tests/README.MOZILLA
@@ -0,0 +1,2 @@
+The files in this directory were copied from the stdio-common subdirectory
+in glibc (https://sourceware.org/git/glibc.git).
diff --git a/mozglue/tests/glibc_printf_tests/tfformat.c b/mozglue/tests/glibc_printf_tests/tfformat.c
new file mode 100644
index 0000000000..97151cb876
--- /dev/null
+++ b/mozglue/tests/glibc_printf_tests/tfformat.c
@@ -0,0 +1,4164 @@
+#include <math.h>
+#include <stdio.h>
+
+/* Tests taken from Cygnus C library. */
+
+typedef struct
+{
+ int line;
+ double value;
+ const char *result;
+ const char *format_string;
+} sprint_double_type;
+
+sprint_double_type sprint_doubles[] =
+{
+ {__LINE__, 30.3, "< +30.3>", "<%+15.10g>"},
+ {__LINE__, 10.0, "<10.00>", "<%5.2f>"},
+
+ {__LINE__, 1.002121970718271e+05, "100212.19707 ", "%0-15.5f"},
+ {__LINE__, -1.002121970718271e+05, "-100212.19707 ", "%0-15.5f"},
+ {__LINE__, 1.002121970718271e+05, "000100212.19707", "%015.5f"},
+ {__LINE__, -1.002121970718271e+05, "-00100212.19707", "%015.5f"},
+ {__LINE__, 1.002121970718271e+05, "+00100212.19707", "%+015.5f"},
+ {__LINE__, -1.002121970718271e+05, "-00100212.19707", "%+015.5f"},
+ {__LINE__, 1.002121970718271e+05, " 00100212.19707", "% 015.5f"},
+ {__LINE__, -1.002121970718271e+05, "-00100212.19707", "% 015.5f"},
+ {__LINE__, 1.002121970718271e+05, "+100212.19707 ", "%+-15.5f"},
+ {__LINE__, -1.002121970718271e+05, "-100212.19707 ", "%+-15.5f"},
+
+ {__LINE__, -1.002121970718271e+29, "-1.0E+29", "%.1E"},
+ {__LINE__, -1.002126048612756e-02, "-1.002126E-02", "%+#E"},
+ {__LINE__, -1.002653755271637e+00, "-1.00265", "%G"},
+ {__LINE__, -1.003238744365917e-23, "-0.00", "%4.2f"},
+ {__LINE__, -1.005084840877781e-29, " -0", "%4.f"},
+ {__LINE__, -1.005362549674427e+01, "-10.0536", "%#g"},
+ {__LINE__, -1.005915042991691e-17, "-1.00592E-17", "%G"},
+ {__LINE__, -1.007829874228503e-18, "-1.00783e-18", "%.7g"},
+ {__LINE__, -1.007829874228503e-18, "-1.007830e-18", "%#.7g"},
+ {__LINE__, -1.009390937771849e+15, "-1009390937771848.628657", "%+f"},
+ {__LINE__, -1.010679382726182e-29, "-0.0000000", "%.7f"},
+ {__LINE__, -1.010691853346650e+13, "-10106918533466.497934", "%+f"},
+ {__LINE__, -1.013412912122286e-22, "-1.01E-22", "%.2E"},
+ {__LINE__, -1.019269582113858e-25, " -0", "%4.0f"},
+ {__LINE__, -1.019886033368556e+24, "-1.019886E+24", "%+.7G"},
+ {__LINE__, -1.021037413548719e+02, "-102.103741", "%f"},
+ {__LINE__, -1.023833576089065e+26, "-1.023834E+26", "%+E"},
+ {__LINE__, -1.024736652408627e+10, "-10247366524.086265", "%+f"},
+ {__LINE__, -1.025439198495476e+09, "-1.02544e+09", "%+g"},
+ {__LINE__, -1.027080247585776e-04, "-0.0001027", "%6.7f"},
+ {__LINE__, -1.028096307262016e+18, "-1.0281E+18", "%3G"},
+ {__LINE__, -1.029604290697901e-02, "-0.010296", "%g"},
+ {__LINE__, -1.034347730570491e+16, "-10343477305704908.975059", "%+f"},
+ {__LINE__, -1.034663325049286e+22, "-1.0E+22", "%#.1E"},
+ {__LINE__, -1.034843152721857e-14, " -0", "%6.f"},
+ {__LINE__, -1.036082122299529e-29, "-1.04e-29", "%4.3g"},
+ {__LINE__, -1.037213662365954e-09, "-1e-09", "%3.e"},
+ {__LINE__, -1.038563976775690e-12, "-0.000000", "%f"},
+ {__LINE__, -1.040910158681323e-02, "-0.0104091", "%+G"},
+ {__LINE__, -1.044680094714482e-20, "-1.04468E-20", "%G"},
+ {__LINE__, -1.044990054091126e+24, "-1.044990E+24", "%+E"},
+ {__LINE__, -1.045693871096982e+11, "-1.045694e+11", "%+e"},
+ {__LINE__, -1.045714133591312e-04, "-0.000104571", "%+#3g"},
+ {__LINE__, -1.046215079103016e-15, "-1.04622e-15", "%g"},
+ {__LINE__, -1.046285293993789e-18, "-1.04629E-18", "%+4G"},
+ {__LINE__, -1.046306092899333e-06, "-0.00", "%0.2f"},
+ {__LINE__, -1.047308973649206e-22, "-1.05E-22", "%+1.3G"},
+ {__LINE__, -1.047369032507755e+01, "-1.047369E+01", "%E"},
+ {__LINE__, -1.048986365562919e-21, "-1.05E-21", "%+.2E"},
+ {__LINE__, -1.049530193156793e-17, "-1.04953E-17", "%+G"},
+ {__LINE__, -1.050073419263768e+25, "-1.05007e+25", "%g"},
+ {__LINE__, -1.051739652002504e-28, "-0.000000", "%+f"},
+ {__LINE__, -1.054493420082636e+21, "-1.0545e+21", "%#5.4e"},
+ {__LINE__, -1.055867291029098e+18, "-1.05587e+18", "%g"},
+ {__LINE__, -1.056514389757866e-16, "-1.05651E-16", "%5.6G"},
+ {__LINE__, -1.057180924868704e+15, "-1057180924868704", "%4.f"},
+ {__LINE__, -1.058455468395683e-23, "-1.05846e-23", "%g"},
+ {__LINE__, -1.062560982393212e+08, "-1.06256e+08", "%g"},
+ {__LINE__, -1.063365829241138e-10, "-1.063366e-10", "%+e"},
+ {__LINE__, -1.063568908667280e-19, "-1.06357E-19", "%+G"},
+ {__LINE__, -1.063734263253492e-13, "-0.000000", "%0f"},
+ {__LINE__, -1.064472689765495e-13, "-1E-13", "%4.0G"},
+ {__LINE__, -1.067192610000129e-25, "-1.06719E-25", "%G"},
+ {__LINE__, -1.068401334996592e-12, "-0.0000000", "%+.7f"},
+ {__LINE__, -1.069012628653724e-13, "-1.069013E-13", "%+.7G"},
+ {__LINE__, -1.069451976810790e+16, "-10694519768107904.056365", "%f"},
+ {__LINE__, -1.069568935323556e+17, "-1.06957e+17", "%g"},
+ {__LINE__, -1.071351044854107e-29, "-1.07135e-29", "%g"},
+ {__LINE__, -1.072274197526185e-21, "-1E-21", "%1.G"},
+ {__LINE__, -1.073875921752995e+23, "-1E+23", "%5.E"},
+ {__LINE__, -1.074835151152265e-12, "-1.0748e-12", "%1.5g"},
+ {__LINE__, -1.075171047088241e-19, "-1.07517E-19", "%#G"},
+ {__LINE__, -1.076258826412760e+22, "-1.076259e+22", "%+e"},
+ {__LINE__, -1.076365103160401e+06, "-1.07637E+06", "%+4.6G"},
+ {__LINE__, -1.076817750454633e+08, "-1e+08", "%4.g"},
+ {__LINE__, -1.078615405755685e-30, "-1e-30", "%4.g"},
+ {__LINE__, -1.078629622917468e-25, "-1.078630e-25", "%e"},
+ {__LINE__, -1.079352432833170e+11, "-107935243283", "%+2.f"},
+ {__LINE__, -1.081431147440215e+16, "-10814311474402147.439378", "%+f"},
+ {__LINE__, -1.083042116905339e-16, "-1.083e-16", "%.5g"},
+ {__LINE__, -1.085351710708553e-10, "-1.085e-10", "%1.4g"},
+ {__LINE__, -1.085796045618276e+07, "-1.085796e+07", "%e"},
+ {__LINE__, -1.087398259981007e+22, "-1.0874e+22", "%g"},
+ {__LINE__, -1.087986044402224e-11, "-1.087986e-11", "%e"},
+ {__LINE__, -1.090451848762709e-02, "-1.090452e-02", "%e"},
+ {__LINE__, -1.091463236899737e+11, "-1.091463E+11", "%#E"},
+ {__LINE__, -1.091617921737384e-29, "-1.09162e-29", "%3g"},
+ {__LINE__, -1.092049328579047e-17, "-1.092049E-17", "%E"},
+ {__LINE__, -1.093647615472090e+06, "-1093647.61547", "%6.5f"},
+ {__LINE__, -1.094133175602384e-08, "-1.1E-08", "%0.1E"},
+ {__LINE__, -1.095397916728214e-23, "-1e-23", "%6.e"},
+ {__LINE__, -1.098958790437321e+02, "-109.895879", "%+#f"},
+ {__LINE__, -1.100194638181594e-20, "-1.100195e-20", "%e"},
+ {__LINE__, -1.102174253534260e+05, "-1.1e+05", "%2.3g"},
+ {__LINE__, -1.102890180316350e-12, "-1.10289e-12", "%+g"},
+ {__LINE__, -1.105582337418378e+00, "-1.11", "%3.3g"},
+ {__LINE__, -1.110515122647056e+04, "-1.E+04", "%#0.G"},
+ {__LINE__, -1.111365895262625e-18, "-1e-18", "%0.g"},
+ {__LINE__, -1.112010622677495e+04, "-11120.1", "%g"},
+ {__LINE__, -1.112580043156699e-23, "-1.11258e-23", "%1g"},
+ {__LINE__, -1.112829057091303e+08, "-1.11283e+08", "%+2g"},
+ {__LINE__, -1.115019046200472e+18, "-1.1150190e+18", "%+#.7e"},
+ {__LINE__, -1.118078332268016e-13, "-1.12E-13", "%1.3G"},
+ {__LINE__, -1.119113571963886e+08, "-1.119114e+08", "%e"},
+ {__LINE__, -1.120102397563448e-15, "-1.12e-15", "%.4g"},
+ {__LINE__, -1.120707480791434e-19, "-1.12071e-19", "%g"},
+ {__LINE__, -1.124243676139007e-07, "-0.000000", "%f"},
+ {__LINE__, -1.125025214608798e+15, "-1.12503E+15", "%0G"},
+ {__LINE__, -1.126074395136447e+06, "-1E+06", "%+.0G"},
+ {__LINE__, -1.127203019940870e-06, "-0.000001", "%+#7f"},
+ {__LINE__, -1.130577648480677e+01, "-1.130578e+01", "%e"},
+ {__LINE__, -1.131469694425240e-11, "-1.13147e-11", "%#0.6g"},
+ {__LINE__, -1.132225023239752e+02, "-113.223", "%G"},
+ {__LINE__, -1.133702113050128e+20, "-1E+20", "%+3.E"},
+ {__LINE__, -1.135529466224404e-13, "-1.13553e-13", "%#g"},
+ {__LINE__, -1.137587210063004e+21, "-1e+21", "%.1g"},
+ {__LINE__, -1.140765637106361e-21, "-1.1e-21", "%+.1e"},
+ {__LINE__, -1.141182595083699e-18, "-0.000000", "%f"},
+ {__LINE__, -1.141695709120972e+00, "-1.1417", "%3G"},
+ {__LINE__, -1.143199141708028e+18, "-1143199141708027833", "%2.f"},
+ {__LINE__, -1.146712902056139e+21, "-1146712902056139071760.298975", "%f"},
+ {__LINE__, -1.146837903839073e-02, " -0.0", "%+5.1f"},
+ {__LINE__, -1.147363016107446e+10, "-1.14736e+10", "%+7g"},
+ {__LINE__, -1.149575523465052e+20, "-114957552346505220697.28140", "%+.5f"},
+ {__LINE__, -1.152748955392589e+13, "-1.15275E+13", "%G"},
+ {__LINE__, -1.152751106015483e-17, "-1E-17", "%+3.E"},
+ {__LINE__, -1.155539139258226e-18, "-1.2e-18", "%+.2g"},
+ {__LINE__, -1.157089280563492e+20, "-1.15709e+20", "%g"},
+ {__LINE__, -1.161217745859779e+19, "-1.161218E+19", "%E"},
+ {__LINE__, -1.162293536734798e+10, "-11622935367.347980", "%f"},
+ {__LINE__, -1.162629909468603e+20, "-1.16E+20", "%.3G"},
+ {__LINE__, -1.164979155838631e+24, "-1.16498E+24", "%G"},
+ {__LINE__, -1.165103052644816e-20, " -1e-20", "%+7.g"},
+ {__LINE__, -1.166448459023264e-08, "-0.000000", "%f"},
+ {__LINE__, -1.167694506705309e+28, "-1e+28", "%.1g"},
+ {__LINE__, -1.169901754818745e-28, "-0.000000", "%+f"},
+ {__LINE__, -1.170330336216446e+08, " -1e+08", "%7.g"},
+ {__LINE__, -1.170946623214213e-17, "-1.17095E-17", "%G"},
+ {__LINE__, -1.174581596799302e+27, "-1.174582e+27", "%+e"},
+ {__LINE__, -1.174763473995155e-28, "-1E-28", "%.1G"},
+ {__LINE__, -1.175885640508038e-23, "-1E-23", "%+.0E"},
+ {__LINE__, -1.177268411775439e-05, "-0.000012", "%#2.6f"},
+ {__LINE__, -1.177739669428001e-30, "-1.17774E-30", "%G"},
+ {__LINE__, -1.178059639880544e-02, "-0.0117806", "%+.7G"},
+ {__LINE__, -1.178793300854446e-13, "-1.2E-13", "%+#0.2G"},
+ {__LINE__, -1.179629345138058e-04, "-0.000118", "%0.3g"},
+ {__LINE__, -1.180730292213358e-25, "-1.18073e-25", "%g"},
+ {__LINE__, -1.180766261654697e+02, "-118.077", "%3g"},
+ {__LINE__, -1.181880261069391e-29, "-1.181880e-29", "%+#e"},
+ {__LINE__, -1.183752810063514e-09, "-1.18375e-09", "%#g"},
+ {__LINE__, -1.184191742443406e-21, "-1.184192e-21", "%e"},
+ {__LINE__, -1.184859760488406e-26, "-1.18486E-26", "%G"},
+ {__LINE__, -1.187276828720072e-29, "-1.18728E-29", "%G"},
+ {__LINE__, -1.187992907205195e-04, "-1.187993E-04", "%E"},
+ {__LINE__, -1.190586192763405e-28, "-1.E-28", "%#1.E"},
+ {__LINE__, -1.192104053032086e+02, "-119.21", "%G"},
+ {__LINE__, -1.192917884333569e+26, "-1.192918E+26", "%E"},
+ {__LINE__, -1.195900753509801e+22, "-1.1959e+22", "%g"},
+ {__LINE__, -1.196559413116537e-28, "-0.000000", "%6.6f"},
+ {__LINE__, -1.197534588732952e+12, "-1.19753e+12", "%#g"},
+ {__LINE__, -1.200279514790649e-25, "-0.0000", "%0.4f"},
+ {__LINE__, -1.203806667944635e+10, "-1.2038067E+10", "%5.7E"},
+ {__LINE__, -1.204344885974736e+07, "-1.204E+07", "%#2.4G"},
+ {__LINE__, -1.205668007693083e+00, "-1.20567", "%g"},
+ {__LINE__, -1.205898515218947e-11, "-1.2059e-11", "%+g"},
+ {__LINE__, -1.206787414909373e-05, "-1.2e-05", "%2.2g"},
+ {__LINE__, -1.207905830366447e+15, "-1.207906e+15", "%6.7g"},
+ {__LINE__, -1.208067010597729e-17, "-1.208067e-17", "%5e"},
+ {__LINE__, -1.210189135822574e+01, "-12", "%+2.0f"},
+ {__LINE__, -1.211560695948122e+10, "-1.21156e+10", "%+g"},
+ {__LINE__, -1.214003025273234e-18, "-1.214e-18", "%+g"},
+ {__LINE__, -1.214096815259005e+17, "-121409681525900459.142520", "%f"},
+ {__LINE__, -1.214699041716797e-14, "-1.2147E-14", "%G"},
+ {__LINE__, -1.215061611919443e+14, "-121506161191944.306310", "%+#f"},
+ {__LINE__, -1.217491221065185e+27, "-1.21749e+27", "%g"},
+ {__LINE__, -1.218538401534388e-11, "-1.218538e-11", "%#e"},
+ {__LINE__, -1.218810085883466e+16, "-1e+16", "%+.1g"},
+ {__LINE__, -1.219422688169801e+08, "-1.219423e+08", "%e"},
+ {__LINE__, -1.220473194407651e-14, "-1.2205E-14", "%1.5G"},
+ {__LINE__, -1.220824440193375e-02, "-0.012208", "%4f"},
+ {__LINE__, -1.221520240637007e+13, "-1.221520E+13", "%1E"},
+ {__LINE__, -1.221894719843486e+29, "-1.22189E+29", "%G"},
+ {__LINE__, -1.223020108610281e+25, "-1.22302E+25", "%G"},
+ {__LINE__, -1.223203206227728e-02, "-0.012232", "%G"},
+ {__LINE__, -1.225661737076919e-15, "-1.22566E-15", "%G"},
+ {__LINE__, -1.228147221003795e-08, "-1.22815E-08", "%G"},
+ {__LINE__, -1.228298534591771e+20, "-1.22830E+20", "%#G"},
+ {__LINE__, -1.228469080229780e-02, "-0.012285", "%0f"},
+ {__LINE__, -1.229161950699222e-09, "-1e-09", "%0.e"},
+ {__LINE__, -1.231294820136559e-17, "-1.231295E-17", "%1.7G"},
+ {__LINE__, -1.232588663406698e-21, "-1E-21", "%+0.G"},
+ {__LINE__, -1.233381256982191e-26, "-0.000000", "%f"},
+ {__LINE__, -1.233435864835578e+14, "-1.23344e+14", "%#g"},
+ {__LINE__, -1.237409567806099e-25, "-1.23741E-25", "%#G"},
+ {__LINE__, -1.238244697758558e-02, "-1.238245e-02", "%7e"},
+ {__LINE__, -1.239393163123284e+26, "-1.23939e+26", "%+g"},
+ {__LINE__, -1.240484781756132e-18, "-1E-18", "%4.E"},
+ {__LINE__, -1.241420286838750e+23, "-1E+23", "%2.E"},
+ {__LINE__, -1.243781122052343e-18, "-1.243781e-18", "%+e"},
+ {__LINE__, -1.244421506844779e+07, "-1.244422E+07", "%+6E"},
+ {__LINE__, -1.245754054764741e-21, "-1e-21", "%5.0g"},
+ {__LINE__, -1.245992228426733e-24, "-0.000000", "%f"},
+ {__LINE__, -1.246498277739883e-12, "-0.0000000", "%5.7f"},
+ {__LINE__, -1.247130891343776e-18, "-1.24713E-18", "%G"},
+ {__LINE__, -1.247309461703025e-03, "-0.0012473", "%#5.5G"},
+ {__LINE__, -1.248139162966407e-29, "-1.e-29", "%+#6.g"},
+ {__LINE__, -1.249756153623776e+08, "-1.249756e+08", "%e"},
+ {__LINE__, -1.250899983565585e-10, "-1.2509e-10", "%5g"},
+ {__LINE__, -1.250957368798327e+19, "-1.25096E+19", "%0G"},
+ {__LINE__, -1.252630814464822e-02, "-0.012526", "%+f"},
+ {__LINE__, -1.253076368257011e-28, "-0.000000", "%f"},
+ {__LINE__, -1.254243507039370e+01, "-1.254244e+01", "%e"},
+ {__LINE__, -1.257605614492298e-12, "-1.257606E-12", "%6.7G"},
+ {__LINE__, -1.258041911573120e+06, "-1258041.911573", "%+f"},
+ {__LINE__, -1.261670983426507e-25, "-0.00", "%.2f"},
+ {__LINE__, -1.263216883336562e-14, "-1.26322e-14", "%g"},
+ {__LINE__, -1.266846944498751e-15, "-1e-15", "%0.g"},
+ {__LINE__, -1.266977908502326e+06, "-1266978", "%+1.f"},
+ {__LINE__, -1.267006162870084e-23, "-1.267006e-23", "%e"},
+ {__LINE__, -1.269144609375931e+01, "-1.269145e+01", "%+e"},
+ {__LINE__, -1.269458714257904e+25, "-1.26946E+25", "%G"},
+ {__LINE__, -1.276697325772662e-02, "-0.0128", "%7.3G"},
+ {__LINE__, -1.278855081807602e+15, "-1278855081807601.87891", "%#0.5f"},
+ {__LINE__, -1.278966821639612e+20, "-1.278967E+20", "%3E"},
+ {__LINE__, -1.281942705258106e+03, "-1281.94", "%+G"},
+ {__LINE__, -1.282331291499203e+14, "-128233129149920.266343", "%+f"},
+ {__LINE__, -1.285125739341808e-28, "-1.28513e-28", "%g"},
+ {__LINE__, -1.285700693704978e+11, "-1.285701E+11", "%E"},
+ {__LINE__, -1.286574096459251e+28, "-1.287E+28", "%6.4G"},
+ {__LINE__, -1.287967889247240e+03, "-1287.97", "%G"},
+ {__LINE__, -1.288913808801319e-27, "-1.3e-27", "%7.1e"},
+ {__LINE__, -1.289147517760377e-18, "-1.289148E-18", "%E"},
+ {__LINE__, -1.289355006600107e+23, "-1.28936E+23", "%+G"},
+ {__LINE__, -1.291232014623979e+01, "-1.29123E+01", "%+.5E"},
+ {__LINE__, -1.293658562875966e-18, "-1.29366e-18", "%+g"},
+ {__LINE__, -1.294982911983638e-19, "-1.29498E-19", "%#G"},
+ {__LINE__, -1.296123363481695e-13, "-1.296123E-13", "%E"},
+ {__LINE__, -1.296632862070602e-20, "-1.29663e-20", "%+g"},
+ {__LINE__, -1.297801639022777e+23, "-129780163902277735132884.11777", "%#0.5f"},
+ {__LINE__, -1.297886574534611e+16, "-1.297887e+16", "%+e"},
+ {__LINE__, -1.300588216308401e+11, "-1.30e+11", "%.2e"},
+ {__LINE__, -1.301296100909062e-10, "-1.3013e-10", "%+g"},
+ {__LINE__, -1.303144244306468e-07, "-1.303144E-07", "%E"},
+ {__LINE__, -1.304096315024042e-20, "-1.3041E-20", "%+G"},
+ {__LINE__, -1.304817970675085e+16, "-1.304818E+16", "%+E"},
+ {__LINE__, -1.304870304632683e-15, " -1e-15", "%7.g"},
+ {__LINE__, -1.305213586757638e-18, "-1.30521e-18", "%g"},
+ {__LINE__, -1.306880734910465e-22, "-1.306881E-22", "%E"},
+ {__LINE__, -1.308964092631446e-23, "-1.30896e-23", "%g"},
+ {__LINE__, -1.312070555198201e+26, "-131207055519820126043839537", "%+7.f"},
+ {__LINE__, -1.312511609151056e-30, "-1.312512E-30", "%#E"},
+ {__LINE__, -1.313087359008389e-23, "-0.000000", "%+f"},
+ {__LINE__, -1.316948423042059e-02, "-1.316948E-02", "%+E"},
+ {__LINE__, -1.317080882577385e+29, "-1.317E+29", "%+.4G"},
+ {__LINE__, -1.317514598984346e+24, "-1.317515e+24", "%e"},
+ {__LINE__, -1.317817551125923e-21, "-1.31782E-21", "%+G"},
+ {__LINE__, -1.319603985988120e+29, "-131960398598811989856471882376.354188", "%f"},
+ {__LINE__, -1.328850458671907e+06, "-1e+06", "%.0e"},
+ {__LINE__, -1.328945346449817e-23, "-1.328945e-23", "%+e"},
+ {__LINE__, -1.330146584094221e-08, "-1e-08", "%+5.g"},
+ {__LINE__, -1.332609617892115e+00, "-1.33261", "%2.7G"},
+#ifndef __PCCNECV70__
+ {__LINE__, -1.332751724965715e+22, "-13327517249657150344432.920974", "%f"},
+ {__LINE__, -1.333194379353273e-19, "-0.000000", "%f"},
+ {__LINE__, -1.334304387932777e-06, "-1.334304e-06", "%e"},
+ {__LINE__, -1.334306581172082e-05, "-1.3e-05", "%+1.2g"},
+ {__LINE__, -1.335283510893438e-05, " -1E-05", "%7.G"},
+ {__LINE__, -1.337939692108373e+11, "-1.33794e+11", "%+4g"},
+ {__LINE__, -1.339117288874809e-03, "-0.001", "%1.3f"},
+ {__LINE__, -1.340100588141492e+27, "-1.340101E+27", "%E"},
+ {__LINE__, -1.341953272572953e-19, "-0.000000", "%+f"},
+ {__LINE__, -1.343058354301620e-02, "-1.343058e-02", "%e"},
+ {__LINE__, -1.346662720871543e+22, "-1.34666E+22", "%#G"},
+ {__LINE__, -1.354010578652210e-02, "-0.0135401", "%#g"},
+ {__LINE__, -1.354066549307666e-12, " -0", "%+6.f"},
+ {__LINE__, -1.355284719365947e+21, "-1.35528e+21", "%g"},
+ {__LINE__, -1.356326532145087e+29, "-1E+29", "%4.G"},
+ {__LINE__, -1.357278618897291e+19, "-13572786188972911780.581398", "%f"},
+ {__LINE__, -1.357537331348202e-10, "-0.000", "%+.3f"},
+ {__LINE__, -1.360011287595868e-10, "-0.000000", "%f"},
+ {__LINE__, -1.360506902899232e+16, "-13605069028992320.", "%#5.f"},
+ {__LINE__, -1.361102570277000e+10, "-1.3611E+10", "%G"},
+ {__LINE__, -1.362601255900219e+07, "-1.363E+07", "%.4G"},
+ {__LINE__, -1.366078182354771e+10, "-1.36608E+10", "%0G"},
+ {__LINE__, -1.366667926615127e+08, "-136666792.661513", "%f"},
+ {__LINE__, -1.367162823743231e-12, "-0.000000", "%#f"},
+ {__LINE__, -1.371523037550709e+09, "-1.37152e+09", "%+g"},
+ {__LINE__, -1.374328925986197e-17, "-1.37e-17", "%.2e"},
+ {__LINE__, -1.374995603898421e-26, "-1.375e-26", "%+g"},
+ {__LINE__, -1.376726539375688e+09, "-1.376727E+09", "%+E"},
+ {__LINE__, -1.378351117694958e-13, "-0.000000", "%f"},
+ {__LINE__, -1.378514699313619e-14, "-1.378515e-14", "%e"},
+ {__LINE__, -1.379347588942324e-23, "-1.4e-23", "%+.1e"},
+ {__LINE__, -1.380380583822272e-17, "-0.000000", "%+f"},
+ {__LINE__, -1.381658659947406e+19, "-1.38166e+19", "%g"},
+ {__LINE__, -1.382775316390237e+29, "-138277531639023653298181670834.3104", "%+#7.4f"},
+ {__LINE__, -1.383541138922400e+00, "-1.383541E+00", "%E"},
+ {__LINE__, -1.384625301445090e+01, "-13.8", "%+.3g"},
+ {__LINE__, -1.386844086284027e-13, "-1.38684E-13", "%+G"},
+ {__LINE__, -1.386930516448650e-28, "-1.386931E-28", "%E"},
+ {__LINE__, -1.387444896054260e-07, "-1.38744E-07", "%G"},
+ {__LINE__, -1.389685107980798e+22, "-1.38969E+22", "%G"},
+ {__LINE__, -1.390880300369347e+03, "-1390.880300", "%f"},
+ {__LINE__, -1.391423370198150e-17, "-1E-17", "%+2.G"},
+ {__LINE__, -1.394441767471218e-09, "-1.394442e-09", "%e"},
+ {__LINE__, -1.396275525062527e-20, "-1.39628E-20", "%G"},
+ {__LINE__, -1.397045957455157e+24, "-1E+24", "%.0E"},
+ {__LINE__, -1.397458546930799e+21, "-1397458546930798526375.383517", "%f"},
+ {__LINE__, -1.397584578988941e-14, "-1.39758e-14", "%5g"},
+ {__LINE__, -1.397789397300823e+09, "-1.398e+09", "%.4g"},
+ {__LINE__, -1.398167472294874e+21, "-1.398167E+21", "%+7E"},
+ {__LINE__, -1.398809636136688e-16, "-0.000000", "%+f"},
+ {__LINE__, -1.399545335304119e+26, "-139954533530411872277454676.805064", "%#5f"},
+ {__LINE__, -1.400102603335755e+20, "-140010260333575509150.705329", "%2f"},
+ {__LINE__, -1.401212746235235e+04, "-1.401213e+04", "%e"},
+ {__LINE__, -1.404409427681801e+07, "-1E+07", "%4.E"},
+ {__LINE__, -1.406018114263948e-25, "-1e-25", "%3.e"},
+ {__LINE__, -1.406245608096877e-06, "-1.4e-06", "%+.1e"},
+ {__LINE__, -1.410697254683835e-10, "-1.410697e-10", "%e"},
+ {__LINE__, -1.410739097553846e+25, "-1.410739E+25", "%+E"},
+ {__LINE__, -1.410850631189577e+04, "-14108.5", "%.6g"},
+ {__LINE__, -1.411680434455781e+28, "-14116804344557807304738616949.180141", "%f"},
+ {__LINE__, -1.413309465660099e-27, "-1.413309E-27", "%+#E"},
+ {__LINE__, -1.418468741386300e+09, "-1418468741.386300", "%f"},
+ {__LINE__, -1.420277110892909e+06, "-1.42028e+06", "%1g"},
+ {__LINE__, -1.420417889565590e-17, "-1.42E-17", "%.2E"},
+ {__LINE__, -1.421098212056305e+08, "-1.421098e+08", "%4e"},
+ {__LINE__, -1.421792812798986e-20, " -1E-20", "%7.G"},
+ {__LINE__, -1.423675488122461e+18, "-1423675488122461363.360571", "%f"},
+ {__LINE__, -1.423810545840653e+15, "-1E+15", "%3.E"},
+ {__LINE__, -1.424242673476368e-15, "-1.424243e-15", "%e"},
+ {__LINE__, -1.427847435688733e-01, "-1.427847E-01", "%E"},
+ {__LINE__, -1.433897734612555e-04, "-0.0001", "%3.g"},
+ {__LINE__, -1.434537754075696e-24, "-1.435E-24", "%+0.3E"},
+ {__LINE__, -1.434774864809324e-24, "-1E-24", "%2.E"},
+ {__LINE__, -1.435583851565142e-11, "-1E-11", "%.0E"},
+ {__LINE__, -1.438791024010112e+11, "-1.43879e+11", "%#.6g"},
+ {__LINE__, -1.439267565343777e+27, "-1.4e+27", "%2.1e"},
+ {__LINE__, -1.439440602670449e+02, "-143.944", "%G"},
+ {__LINE__, -1.439494412124925e+13, "-14394944121249.251268", "%f"},
+ {__LINE__, -1.440032823245152e+10, "-14400328232.451516", "%f"},
+ {__LINE__, -1.440174494009562e-08, "-0.000000", "%7f"},
+ {__LINE__, -1.440827804010568e+07, "-1.E+07", "%#6.1G"},
+ {__LINE__, -1.442760907195336e+09, "-1.44276E+09", "%+5G"},
+ {__LINE__, -1.444655304181403e+10, "-14446553041.814035", "%7f"},
+ {__LINE__, -1.444995766787036e+04, "-14450", "%5G"},
+ {__LINE__, -1.445078682874535e-13, "-1E-13", "%3.E"},
+ {__LINE__, -1.446781469662328e+01, "-14.4678", "%G"},
+ {__LINE__, -1.447795251395321e-04, "-0.000145", "%+f"},
+ {__LINE__, -1.448193079247108e-02, "-0.014", "%4.2G"},
+ {__LINE__, -1.449552967961345e+14, "-1E+14", "%1.E"},
+ {__LINE__, -1.451269763513571e+10, "-14512697635.135705", "%6f"},
+ {__LINE__, -1.451843176990292e+12, "-1e+12", "%1.g"},
+ {__LINE__, -1.452631405935931e+06, "-1.452631e+06", "%e"},
+ {__LINE__, -1.452753650285897e+21, "-1452753650285897091265.496783", "%5f"},
+ {__LINE__, -1.453811512433860e-05, "-1e-05", "%+6.g"},
+ {__LINE__, -1.454071430557372e+13, "-1.4541E+13", "%.4E"},
+ {__LINE__, -1.455956079562999e+03, "-1455.96", "%G"},
+ {__LINE__, -1.459712196146602e-17, "-1.45971e-17", "%g"},
+ {__LINE__, -1.461857733495947e-02, "-1.4619E-02", "%.4E"},
+ {__LINE__, -1.465257069090911e-11, "-1.465257E-11", "%+E"},
+ {__LINE__, -1.465306607257042e+05, "-146531", "%g"},
+ {__LINE__, -1.465857076315921e+20, "-1.46586E+20", "%+G"},
+ {__LINE__, -1.467919792051489e+16, "-1.46792e+16", "%2g"},
+ {__LINE__, -1.469271519834567e+20, "-146927151983456720785", "%+.0f"},
+ {__LINE__, -1.472961447442697e-28, "-1.47296e-28", "%#g"},
+ {__LINE__, -1.473385695190456e-12, "-1.473386E-12", "%E"},
+ {__LINE__, -1.485003089033267e-10, "-1.485E-10", "%2G"},
+ {__LINE__, -1.490541379072390e-18, "-1.490541E-18", "%4E"},
+ {__LINE__, -1.490683434793125e+22, "-14906834347931249951102.472551", "%#f"},
+ {__LINE__, -1.498356837215425e+20, "-1.49836E+20", "%#G"},
+ {__LINE__, -1.498677007818122e+14, "-1.49868E+14", "%+4G"},
+ {__LINE__, -1.502143197677119e+23, "-150214319767711934616727.", "%#7.f"},
+ {__LINE__, -1.503563770470753e-24, "-1.50356e-24", "%.6g"},
+ {__LINE__, -1.504643092793197e-18, "-1.504643e-18", "%+4e"},
+ {__LINE__, -1.507017706254022e-13, "-1.50702e-13", "%+g"},
+ {__LINE__, -1.507054033750081e-22, "-0.000000", "%f"},
+ {__LINE__, -1.508662346022339e+16, "-1.508662E+16", "%#E"},
+ {__LINE__, -1.509366882438902e+08, "-2e+08", "%4.g"},
+ {__LINE__, -1.511086567087967e+20, "-1.51109e+20", "%g"},
+ {__LINE__, -1.514959134622707e-18, "-0.000000", "%+f"},
+ {__LINE__, -1.515730120364204e+06, "-2E+06", "%0.G"},
+ {__LINE__, -1.516372763118606e-09, "-1.51637e-09", "%g"},
+ {__LINE__, -1.520610443546204e+27, "-1.52061e+27", "%g"},
+ {__LINE__, -1.522040655642012e+11, "-1.52204E+11", "%+2G"},
+ {__LINE__, -1.523772495014966e-24, "-2E-24", "%2.G"},
+ {__LINE__, -1.523980825983892e-05, "-0.000", "%2.3f"},
+ {__LINE__, -1.526696214603152e-03, "-0.0015267", "%+6.5G"},
+ {__LINE__, -1.528680540769583e+00, "-1.5287", "%0.5G"},
+ {__LINE__, -1.529951830525433e+08, "-1.529952e+08", "%+e"},
+ {__LINE__, -1.533052896559935e+05, "-153305", "%4.0f"},
+ {__LINE__, -1.533829640475152e-03, "-0.00153383", "%+#g"},
+ {__LINE__, -1.535617804643105e-30, "-1.535618e-30", "%e"},
+ {__LINE__, -1.537623698361821e+16, "-15376236983618207.7875719", "%4.7f"},
+ {__LINE__, -1.544994895330616e+24, "-1.54499e+24", "%g"},
+ {__LINE__, -1.545083356728403e+17, "-1.545083e+17", "%e"},
+ {__LINE__, -1.545684535393879e+12, "-1.55E+12", "%3.3G"},
+ {__LINE__, -1.545878334099427e+13, "-15458783340994.268762", "%1f"},
+ {__LINE__, -1.547697185980564e-18, "-1.5477e-18", "%.6g"},
+ {__LINE__, -1.548576527172579e-29, "-1.5E-29", "%2.2G"},
+ {__LINE__, -1.549712227835891e+08, "-1.549712e+08", "%#6.7g"},
+ {__LINE__, -1.550010819435335e-21, "-1.55001E-21", "%G"},
+ {__LINE__, -1.551412476164257e+14, "-1.551412E+14", "%E"},
+ {__LINE__, -1.553156638090030e+01, " -2E+01", "%7.G"},
+ {__LINE__, -1.553733233064355e-01, "-0.2", "%3.g"},
+ {__LINE__, -1.558391111609365e+00, "-1.558391", "%+f"},
+ {__LINE__, -1.562004019284766e+15, "-1.562E+15", "%6.5G"},
+ {__LINE__, -1.562195733239758e-16, "-0.000000", "%f"},
+ {__LINE__, -1.563953339012525e-14, "-1.56395E-14", "%1G"},
+ {__LINE__, -1.568317638534983e+18, "-1.56832E+18", "%1G"},
+ {__LINE__, -1.568546851135348e+04, "-15685.5", "%+#G"},
+ {__LINE__, -1.574297872228857e+18, "-1.574298e+18", "%e"},
+ {__LINE__, -1.575696460196291e-21, "-1.5757E-21", "%G"},
+ {__LINE__, -1.576324848379791e+25, "-1.57632E+25", "%+G"},
+ {__LINE__, -1.577524395140843e+06, "-1.5775E+06", "%.5G"},
+ {__LINE__, -1.585122856675091e+12, "-1585122856675.091452", "%f"},
+ {__LINE__, -1.586734674395556e-02, "-1.586735E-02", "%E"},
+ {__LINE__, -1.592602264315192e+22, "-1.5926E+22", "%G"},
+ {__LINE__, -1.594121556700562e+05, "-2E+05", "%+.0G"},
+ {__LINE__, -1.598538116193430e+22, "-1.59854e+22", "%+g"},
+ {__LINE__, -1.605647463222382e+18, "-1.6056E+18", "%.5G"},
+ {__LINE__, -1.610891449201191e+06, "-1.6109E+06", "%#6.4E"},
+ {__LINE__, -1.614593168166818e-05, "-1.61459E-05", "%G"},
+ {__LINE__, -1.615597722557325e-03, "-0.001616", "%f"},
+ {__LINE__, -1.616038022182124e-29, "-1.61604E-29", "%1G"},
+ {__LINE__, -1.618380771451625e-28, "-2e-28", "%+1.g"},
+ {__LINE__, -1.620287456872150e+10, "-1.620e+10", "%#7.3e"},
+ {__LINE__, -1.620469955611903e-29, "-0.000000", "%f"},
+ {__LINE__, -1.622580720690927e+20, "-1.622581E+20", "%+#E"},
+ {__LINE__, -1.622752500991079e-12, "-1.622753E-12", "%E"},
+ {__LINE__, -1.622771933776459e+08, "-1.6228E+08", "%+4.4E"},
+ {__LINE__, -1.623894567037391e+09, "-1.623895e+09", "%#e"},
+ {__LINE__, -1.624021408185354e-25, "-1.624E-25", "%.5G"},
+ {__LINE__, -1.624405320939366e-06, "-1.62441e-06", "%+#g"},
+ {__LINE__, -1.631236208958857e-25, "-1.631236e-25", "%#e"},
+ {__LINE__, -1.632165969536046e+20, "-1.63217E+20", "%G"},
+ {__LINE__, -1.632859596256475e+06, "-1.63286E+06", "%G"},
+ {__LINE__, -1.634371961703112e+06, "-1.634372E+06", "%+E"},
+ {__LINE__, -1.637230383641845e+24, "-1.63723e+24", "%#g"},
+ {__LINE__, -1.638081480475853e+17, "-1.63808e+17", "%+g"},
+ {__LINE__, -1.638279690467673e+14, "-163827969046767.325523", "%#f"},
+ {__LINE__, -1.640360249548215e-29, "-1.64036e-29", "%+6.6g"},
+ {__LINE__, -1.645691728060833e-30, "-1.64569e-30", "%g"},
+ {__LINE__, -1.648548965852592e-03, " -0", "%5.f"},
+ {__LINE__, -1.650100957771182e+21, "-1650100957771182308420.065965", "%+f"},
+ {__LINE__, -1.650957176011913e-02, "-0.016510", "%#4.5G"},
+ {__LINE__, -1.651165108095301e+29, "-165116510809530137038336761179.380119", "%f"},
+ {__LINE__, -1.657132845094847e-06, "-0.000002", "%f"},
+ {__LINE__, -1.657152146172541e+12, "-1.657152E+12", "%.7G"},
+ {__LINE__, -1.658377345516132e-06, "-0.00", "%.2f"},
+ {__LINE__, -1.658850468902324e+20, "-1.659e+20", "%.4g"},
+ {__LINE__, -1.661723557149830e+18, "-1.66172E+18", "%G"},
+ {__LINE__, -1.663570885140273e+14, "-166357088514027", "%2.f"},
+ {__LINE__, -1.665186944896906e+25, "-1.66519E+25", "%G"},
+ {__LINE__, -1.675910137717036e+22, "-2e+22", "%5.g"},
+ {__LINE__, -1.677447987675587e-15, "-1.67745E-15", "%G"},
+ {__LINE__, -1.677510590697220e+06, "-1677510.590697", "%5f"},
+ {__LINE__, -1.677658141289510e-18, "-2E-18", "%+5.G"},
+ {__LINE__, -1.678316848066192e-03, "-1.678317E-03", "%E"},
+ {__LINE__, -1.681506404024821e+24, "-1.68151E+24", "%G"},
+ {__LINE__, -1.688584243722160e+12, "-1.68858E+12", "%+#G"},
+ {__LINE__, -1.689468295411408e+28, "-1.68947E+28", "%+G"},
+ {__LINE__, -1.690746767470207e-11, "-1.69075E-11", "%G"},
+ {__LINE__, -1.692773960755248e-14, "-2E-14", "%4.E"},
+ {__LINE__, -1.693349092740995e-18, "-1.69335e-18", "%g"},
+ {__LINE__, -1.693642321808920e-26, "-1.69364E-26", "%G"},
+ {__LINE__, -1.694579128700042e-12, "-0.000000", "%f"},
+ {__LINE__, -1.695454897264717e-08, "-1.7E-08", "%+4.3G"},
+ {__LINE__, -1.695733278397589e+19, "-1.695733e+19", "%4e"},
+ {__LINE__, -1.699522534409388e-05, "-1.69952E-05", "%G"},
+ {__LINE__, -1.701752039544919e+00, "-2", "%.0f"},
+ {__LINE__, -1.702304998615036e+16, "-1.7023E+16", "%1G"},
+ {__LINE__, -1.703113580904556e-25, "-1.703114e-25", "%+e"},
+ {__LINE__, -1.705165515454546e+29, "-1.705166e+29", "%+e"},
+ {__LINE__, -1.707392568277288e-05, "-1.70739E-05", "%G"},
+ {__LINE__, -1.707477319256742e+09, "-1707477319.26", "%7.2f"},
+ {__LINE__, -1.709669107513969e-03, " -0.002", "%7.g"},
+ {__LINE__, -1.713284011412432e-24, "-1.713e-24", "%3.3e"},
+ {__LINE__, -1.715512203951086e-28, "-1.715512E-28", "%E"},
+ {__LINE__, -1.716880832248879e+13, "-1.71688e+13", "%+g"},
+ {__LINE__, -1.720722835740680e-15, "-1.7E-15", "%.1E"},
+ {__LINE__, -1.721855769574895e+07, "-17218557.695749", "%3f"},
+ {__LINE__, -1.722449437415368e+01, "-1.722449e+01", "%e"},
+ {__LINE__, -1.723218805116591e-29, "-2e-29", "%.0g"},
+ {__LINE__, -1.726129004920195e-05, "-1.72613E-05", "%0G"},
+ {__LINE__, -1.727400228037571e-28, "-0.0000000", "%2.7f"},
+ {__LINE__, -1.730008745782339e-23, "-1.73e-23", "%.4g"},
+ {__LINE__, -1.731875670201859e+09, "-1.73188E+09", "%G"},
+ {__LINE__, -1.732142976428085e+10, "-2E+10", "%+6.0E"},
+ {__LINE__, -1.732699651229194e-02, "-0.017327", "%5g"},
+ {__LINE__, -1.734772870736446e-12, "-0.000000", "%+f"},
+ {__LINE__, -1.738576887938331e+09, "-1.73858e+09", "%g"},
+ {__LINE__, -1.738759937912438e-08, "-1.73876e-08", "%+2g"},
+ {__LINE__, -1.739320154069143e-18, "-0.0000", "%1.4f"},
+ {__LINE__, -1.739870415800800e+16, "-1.73987e+16", "%g"},
+ {__LINE__, -1.741290506928618e+04, "-17412.9", "%G"},
+ {__LINE__, -1.742520800031913e+29, "-1.742521e+29", "%7e"},
+ {__LINE__, -1.747620095195231e+01, "-2e+01", "%+2.g"},
+ {__LINE__, -1.749860675924882e-21, "-1.74986E-21", "%G"},
+ {__LINE__, -1.752675363661431e-06, "-1.7527E-06", "%.5G"},
+ {__LINE__, -1.752871508059699e-06, " -0", "%7.f"},
+ {__LINE__, -1.755178530989839e+25, "-1.7551785e+25", "%1.7e"},
+ {__LINE__, -1.755566213249512e-07, "-1.755566e-07", "%.6e"},
+ {__LINE__, -1.756193485005071e-24, "-1.75619E-24", "%+2.6G"},
+ {__LINE__, -1.758501410496218e+03, "-1758.501", "%.7G"},
+ {__LINE__, -1.758795617219102e+20, "-1.75880E+20", "%#6G"},
+ {__LINE__, -1.760538679276709e+03, "-2e+03", "%+1.e"},
+ {__LINE__, -1.762660914833003e+27, "-1.76266E+27", "%G"},
+ {__LINE__, -1.765122691141907e+19, "-17651226911419071186.1", "%5.1f"},
+ {__LINE__, -1.765313277389086e-18, "-2E-18", "%+1.E"},
+ {__LINE__, -1.765821717148734e+19, "-1.76582E+19", "%G"},
+ {__LINE__, -1.767048687863149e-17, "-1.77E-17", "%+.3G"},
+ {__LINE__, -1.768661645451962e+18, "-1.77E+18", "%+.3G"},
+ {__LINE__, -1.769753257452233e+01, "-17.6975", "%G"},
+ {__LINE__, -1.770945665065531e+28, "-1.770946E+28", "%0.7G"},
+ {__LINE__, -1.776713865753894e-09, "-2e-09", "%1.g"},
+ {__LINE__, -1.778424845787448e+03, "-1.7784E+03", "%.4E"},
+ {__LINE__, -1.779060610701250e+06, "-1.779061E+06", "%E"},
+ {__LINE__, -1.781447182110762e-27, "-1.781447E-27", "%E"},
+ {__LINE__, -1.782655842123784e-13, "-2.E-13", "%#2.1G"},
+ {__LINE__, -1.783071018169166e+16, "-17830710181691664.217851", "%+f"},
+ {__LINE__, -1.784665985294415e+25, "-2E+25", "%3.G"},
+ {__LINE__, -1.787297600658096e+25, "-2E+25", "%+5.E"},
+ {__LINE__, -1.788200250255718e+12, "-1.7882E+12", "%2.4E"},
+ {__LINE__, -1.792860730579114e-09, "-1.79286E-09", "%G"},
+ {__LINE__, -1.793122797100936e+24, "-1.793123e+24", "%e"},
+ {__LINE__, -1.793761706915029e-25, "-0.000000", "%f"},
+ {__LINE__, -1.793947567431932e+22, "-1.79395e+22", "%g"},
+ {__LINE__, -1.796428035404303e-18, "-1.79643e-18", "%g"},
+ {__LINE__, -1.797113144273918e-16, "-1.79711E-16", "%.6G"},
+ {__LINE__, -1.798796767828424e-29, "-1.7988E-29", "%G"},
+ {__LINE__, -1.805004010633763e-11, "-1.805e-11", "%2.5g"},
+ {__LINE__, -1.806936269752338e-26, "-1.80694e-26", "%g"},
+ {__LINE__, -1.807122541760172e-10, "-1.80712e-10", "%g"},
+ {__LINE__, -1.808295407815630e-06, "-1.8083E-06", "%+G"},
+ {__LINE__, -1.813893236685959e+15, "-1813893236685959", "%0.f"},
+ {__LINE__, -1.816201530145367e+06, "-1816202", "%+2.f"},
+ {__LINE__, -1.822811219123512e+13, "-1.82281e+13", "%g"},
+ {__LINE__, -1.826276499170243e-25, "-2E-25", "%+3.G"},
+ {__LINE__, -1.832399287433839e-26, "-1.832399E-26", "%#4E"},
+ {__LINE__, -1.833597815584463e-18, "-0.000000", "%+3f"},
+ {__LINE__, -1.834165532712233e+28, "-1.834166E+28", "%.7G"},
+ {__LINE__, -1.837633147831083e+28, "-1.8376331e+28", "%.7e"},
+ {__LINE__, -1.839756716742518e-01, "-0.2", "%+0.G"},
+ {__LINE__, -1.840101206950368e-14, "-1.840101E-14", "%+E"},
+ {__LINE__, -1.842043645474877e+17, "-1.84204e+17", "%+g"},
+ {__LINE__, -1.842155892969934e+17, "-1.84216e+17", "%+g"},
+ {__LINE__, -1.843566073012842e-25, "-1.84357E-25", "%G"},
+ {__LINE__, -1.843976321320497e-02, "-0.02", "%+4.2f"},
+ {__LINE__, -1.845299931651554e+11, "-1.8453E+11", "%0.4E"},
+ {__LINE__, -1.846199038659889e-06, "-1.8462e-06", "%0.5g"},
+ {__LINE__, -1.847062180184169e-30, "-1.847062E-30", "%5E"},
+ {__LINE__, -1.847962158722201e-16, "-0.000000", "%f"},
+ {__LINE__, -1.849446376756582e+15, "-1.8E+15", "%2.2G"},
+ {__LINE__, -1.853168465523878e-24, "-2E-24", "%1.E"},
+ {__LINE__, -1.853601367230139e+10, "-1.853601e+10", "%e"},
+ {__LINE__, -1.857367903775364e+18, "-1.86E+18", "%1.3G"},
+ {__LINE__, -1.858332820633906e-05, "-0.000019", "%7f"},
+ {__LINE__, -1.860243811657223e-23, "-1.860244e-23", "%e"},
+ {__LINE__, -1.860660612539794e+08, "-1.86066e+08", "%+6.5e"},
+ {__LINE__, -1.861160816251124e-09, "-2E-09", "%1.G"},
+ {__LINE__, -1.862380636974688e-25, "-1.9E-25", "%.2G"},
+ {__LINE__, -1.864168808453004e+15, "-1.86417E+15", "%G"},
+ {__LINE__, -1.864273144411246e+07, "-1.86427e+07", "%g"},
+ {__LINE__, -1.864929236615802e-02, "-2e-02", "%+3.e"},
+ {__LINE__, -1.865010503480847e+19, "-2E+19", "%4.G"},
+ {__LINE__, -1.866276374553144e+22, "-1.866276e+22", "%e"},
+ {__LINE__, -1.870809567910649e+09, "-1.870810e+09", "%e"},
+ {__LINE__, -1.872555495839008e-13, "-1.872555E-13", "%3E"},
+ {__LINE__, -1.874465717110388e-22, "-1.874466E-22", "%E"},
+ {__LINE__, -1.874916306627632e+21, "-1874916306627632422987.517202", "%f"},
+ {__LINE__, -1.875804322194491e-23, "-0.000000", "%+f"},
+ {__LINE__, -1.876662099198587e-04, "-0.000187666", "%G"},
+ {__LINE__, -1.876775504795760e-25, "-1.87678e-25", "%0g"},
+ {__LINE__, -1.879343051002554e-20, " -0.", "%#6.f"},
+ {__LINE__, -1.881535445774717e-15, "-1.881535e-15", "%e"},
+ {__LINE__, -1.887515901404300e+00, "-1.888", "%2.4G"},
+ {__LINE__, -1.887730637149009e+17, "-1.887731E+17", "%E"},
+ {__LINE__, -1.889920303480086e+17, "-1.889920e+17", "%+e"},
+ {__LINE__, -1.891903478784091e+04, "-1.891903e+04", "%e"},
+ {__LINE__, -1.893550084305833e+16, "-1.89355e+16", "%g"},
+ {__LINE__, -1.894675230197676e+05, "-1.894675e+05", "%#e"},
+ {__LINE__, -1.898389624953187e-27, "-1.898390e-27", "%+e"},
+ {__LINE__, -1.899250044644046e+21, "-1899250044644046120367.875119", "%+4.6f"},
+ {__LINE__, -1.904187609804679e-02, "-1.90419E-02", "%0.5E"},
+ {__LINE__, -1.904452538421193e-04, "-2e-04", "%4.0e"},
+ {__LINE__, -1.904615326969061e-16, "-1.904615e-16", "%1.7g"},
+ {__LINE__, -1.907761255064750e+02, "-190.776126", "%f"},
+ {__LINE__, -1.910727641826707e-10, " -2e-10", "%7.g"},
+ {__LINE__, -1.913149279262051e+15, "-1.913149e+15", "%.7g"},
+ {__LINE__, -1.913235739298009e+28, "-1.913236e+28", "%e"},
+ {__LINE__, -1.913526822735271e+18, "-1.914e+18", "%.4g"},
+ {__LINE__, -1.913780977515583e+17, "-191378097751558335.9150", "%5.4f"},
+ {__LINE__, -1.917095456962182e-10, "-2E-10", "%4.G"},
+ {__LINE__, -1.918803033972851e+23, "-191880303397285132405158.947222", "%f"},
+ {__LINE__, -1.926420984801848e+16, "-19264209848018483.128840", "%+f"},
+ {__LINE__, -1.931905465942639e-10, "-1.93191e-10", "%g"},
+ {__LINE__, -1.932907105840252e+06, "-1.932907e+06", "%+#e"},
+ {__LINE__, -1.933091601918916e+15, "-1.933092E+15", "%#E"},
+ {__LINE__, -1.934296184983361e+09, "-1.9343e+09", "%1.6g"},
+ {__LINE__, -1.934637311832448e+11, "-1.93464e+11", "%+g"},
+ {__LINE__, -1.936201483262186e+12, "-2e+12", "%+6.g"},
+ {__LINE__, -1.939114661603911e+19, "-1.93911E+19", "%G"},
+ {__LINE__, -1.940478182124347e-13, "-0.000000", "%f"},
+ {__LINE__, -1.943218220654923e+08, "-2E+08", "%+5.0G"},
+ {__LINE__, -1.943526872455779e-30, "-1.9E-30", "%.1E"},
+ {__LINE__, -1.949869164681357e+19, "-1.949869e+19", "%#3e"},
+ {__LINE__, -1.954181060535402e+23, "-1.954181e+23", "%e"},
+ {__LINE__, -1.961581555579142e+14, "-1.962E+14", "%.3E"},
+ {__LINE__, -1.964535562036915e+07, "-1.96454E+07", "%G"},
+ {__LINE__, -1.969749653575926e+04, "-19697.5", "%.6g"},
+ {__LINE__, -1.973475369169053e+15, "-1.97348e+15", "%g"},
+ {__LINE__, -1.975658532866600e-21, "-2e-21", "%+1.2g"},
+ {__LINE__, -1.984050343831260e+09, "-1.984050E+09", "%E"},
+ {__LINE__, -1.984422410018571e+12, "-1.984422e+12", "%+4.7g"},
+ {__LINE__, -1.984878687667223e-22, "-0.000000", "%f"},
+ {__LINE__, -1.986116930967811e-28, "-1.98612e-28", "%g"},
+ {__LINE__, -1.986774457812683e+02, "-1.986774e+02", "%e"},
+ {__LINE__, -1.987274814938726e-04, "-0.000198727", "%g"},
+ {__LINE__, -1.987319200580415e+10, "-1.987319E+10", "%E"},
+ {__LINE__, -1.987980768698114e-19, "-0.000000", "%3f"},
+ {__LINE__, -1.994698965044602e-29, "-2E-29", "%+4.0G"},
+ {__LINE__, -1.997833122667050e+26, "-1.99783E+26", "%G"},
+ {__LINE__, -1.999453681184129e-10, "-0.00000", "%.5f"},
+ {__LINE__, -1.999897345839745e-16, "-1.9999e-16", "%g"},
+ {__LINE__, -2.003703825123989e-22, "-0.000000", "%f"},
+ {__LINE__, -2.004569188274957e-23, "-2.00457E-23", "%G"},
+ {__LINE__, -2.005911883189058e+07, "-2.00591E+07", "%G"},
+ {__LINE__, -2.006438312005722e-25, "-2.006e-25", "%0.4g"},
+ {__LINE__, -2.017322171210280e+18, "-2.01732E+18", "%+0G"},
+ {__LINE__, -2.017718635819594e-06, "-2.01772e-06", "%5g"},
+ {__LINE__, -2.019187445568160e-12, "-0.00", "%.2f"},
+ {__LINE__, -2.021022665608503e+25, "-20210226656085028551501636.684", "%2.3f"},
+ {__LINE__, -2.022720393474145e+07, "-2.02272E+07", "%#G"},
+ {__LINE__, -2.024506694471065e+23, "-2.02451E+23", "%G"},
+ {__LINE__, -2.024884686553821e-15, " -2e-15", "%7.g"},
+ {__LINE__, -2.027484636128966e-23, "-2.0275E-23", "%.5G"},
+ {__LINE__, -2.028185530467237e+21, "-2028185530467237374097.067", "%+4.3f"},
+ {__LINE__, -2.028388905566873e-09, "-0.000000", "%f"},
+ {__LINE__, -2.029856507431584e-17, "-2.02986E-17", "%G"},
+ {__LINE__, -2.029891733449167e+27, "-2029891733449166846270372843.7190875", "%3.7f"},
+ {__LINE__, -2.031933616694469e+14, "-2.031934E+14", "%#E"},
+ {__LINE__, -2.034011738471413e-10, "-2.03401E-10", "%#G"},
+ {__LINE__, -2.036087355975756e+29, "-203608735597575574161055556032.806635", "%+f"},
+ {__LINE__, -2.036355025137273e+09, "-2.036355E+09", "%#.7G"},
+ {__LINE__, -2.038423730536878e+12, "-2E+12", "%4.G"},
+ {__LINE__, -2.045209202278810e+23, "-2.045209e+23", "%+#e"},
+ {__LINE__, -2.046794083517423e-06, "-2.04679e-06", "%g"},
+ {__LINE__, -2.048042459678599e-19, "-0.000000", "%f"},
+ {__LINE__, -2.050526462096153e+18, "-2.05053e+18", "%+g"},
+ {__LINE__, -2.053583900249402e+13, "-2.053584e+13", "%0.7g"},
+ {__LINE__, -2.054342100957522e-23, "-2.05434E-23", "%#G"},
+ {__LINE__, -2.054793400141025e+11, "-205479340014.1", "%+2.1f"},
+ {__LINE__, -2.059200689196498e-11, "-0.000000", "%#f"},
+ {__LINE__, -2.060960692728114e-16, "-0.000000", "%+f"},
+ {__LINE__, -2.061417528654300e-30, "-2.06E-30", "%.3G"},
+ {__LINE__, -2.061513401198340e-29, "-2.06151e-29", "%7g"},
+ {__LINE__, -2.061846698845984e+27, "-2.061847E+27", "%E"},
+ {__LINE__, -2.063922242876789e-19, "-2.06392e-19", "%#g"},
+ {__LINE__, -2.065359431805529e+03, "-2065.359432", "%f"},
+ {__LINE__, -2.065529069992156e-04, "-0.000206553", "%+G"},
+ {__LINE__, -2.066082546490980e-25, "-2.06608e-25", "%5g"},
+ {__LINE__, -2.068394312095200e+17, "-2.068394e+17", "%e"},
+ {__LINE__, -2.071024178556425e-10, "-2.07102E-10", "%G"},
+ {__LINE__, -2.074401605950382e-22, "-2.07e-22", "%1.3g"},
+ {__LINE__, -2.074731895144874e-26, "-2.07473E-26", "%G"},
+ {__LINE__, -2.074895800882730e+18, "-2074895800882730068.082083", "%+f"},
+ {__LINE__, -2.077336220500764e-30, "-0", "%2.f"},
+ {__LINE__, -2.078067878561077e+09, "-2.0781e+09", "%0.5g"},
+ {__LINE__, -2.080497889634533e+15, "-2.080498E+15", "%4E"},
+ {__LINE__, -2.084717279367594e-21, "-2.08472e-21", "%+g"},
+ {__LINE__, -2.087827915301948e+29, "-2E+29", "%6.1G"},
+ {__LINE__, -2.090268686389680e+05, "-2.090269e+05", "%1e"},
+ {__LINE__, -2.092036176589720e+24, "-2.09204e+24", "%+g"},
+ {__LINE__, -2.093546373938615e-21, "-2.093546e-21", "%#e"},
+ {__LINE__, -2.101302069316682e+18, "-2.1013e+18", "%+7g"},
+ {__LINE__, -2.103463622286002e-13, "-2.103464E-13", "%E"},
+ {__LINE__, -2.105622845016732e+06, "-2105622.845017", "%1f"},
+ {__LINE__, -2.109999123037767e+28, "-2.11E+28", "%.2E"},
+ {__LINE__, -2.110317013992166e+04, "-21103.2", "%+g"},
+ {__LINE__, -2.112226142154618e+21, "-2112226142154617569702.", "%#6.f"},
+ {__LINE__, -2.112519484486528e+06, "-2.11252E+06", "%G"},
+ {__LINE__, -2.113439260812000e+23, "-2E+23", "%1.G"},
+ {__LINE__, -2.113465893194608e-15, "-2.1135E-15", "%.5G"},
+ {__LINE__, -2.113547784669409e+20, "-2.1135e+20", "%2.5g"},
+ {__LINE__, -2.114146001321822e+28, "-2.114146e+28", "%e"},
+ {__LINE__, -2.114509425574444e-30, " -0", "%4.f"},
+ {__LINE__, -2.114887421659561e-21, "-0.000000", "%+f"},
+ {__LINE__, -2.121120215127601e+21, "-2121120215127601404958.5683097", "%.7f"},
+ {__LINE__, -2.122555390665796e+06, "-2E+06", "%0.G"},
+ {__LINE__, -2.123468430242052e-27, "-0.000000", "%+f"},
+ {__LINE__, -2.123473598890635e+28, "-2.12347e+28", "%+g"},
+ {__LINE__, -2.124328049748190e-04, "-2.124328E-04", "%E"},
+ {__LINE__, -2.125633890999010e+28, "-2E+28", "%+5.G"},
+ {__LINE__, -2.125697963566045e+21, "-2.1257E+21", "%0G"},
+ {__LINE__, -2.127638109230109e+06, "-2.12764e+06", "%+6g"},
+ {__LINE__, -2.128456114617786e+07, "-2.128456E+07", "%E"},
+ {__LINE__, -2.128732742932824e-04, "-2.128733E-04", "%#E"},
+ {__LINE__, -2.129654381588404e+27, "-2129654381588404365999167566.7697564", "%+.7f"},
+ {__LINE__, -2.129792795009985e+20, "-2.12979e+20", "%g"},
+ {__LINE__, -2.131026925664619e-20, "-2e-20", "%.0e"},
+ {__LINE__, -2.132860730144188e-04, "-0.0002", "%5.g"},
+ {__LINE__, -2.133620979309562e+06, "-2e+06", "%3.e"},
+ {__LINE__, -2.133821423139120e-27, "-2.13382E-27", "%.6G"},
+ {__LINE__, -2.134253401425940e-07, "-0.000000", "%f"},
+ {__LINE__, -2.135469568156964e-29, "-2.135470E-29", "%+7E"},
+ {__LINE__, -2.135723595288365e-25, "-0.0", "%.1f"},
+ {__LINE__, -2.137642458920094e-09, "-2.13764e-09", "%g"},
+ {__LINE__, -2.143412361116583e+12, "-2.14341e+12", "%+g"},
+ {__LINE__, -2.144467087741129e-17, "-2.14447e-17", "%+g"},
+ {__LINE__, -2.145726966596964e-11, "-0.000000", "%2f"},
+ {__LINE__, -2.148318753042597e+08, "-2.14832E+08", "%5G"},
+ {__LINE__, -2.149932310549644e-19, "-2.14993e-19", "%g"},
+ {__LINE__, -2.150050917377646e-21, " -0", "%3.f"},
+ {__LINE__, -2.150854313643430e-16, "-0.000000", "%.6f"},
+ {__LINE__, -2.151071797121845e+00, "-2.15107", "%+g"},
+ {__LINE__, -2.158728406865981e+14, "-215872840686598.088666", "%7f"},
+ {__LINE__, -2.166062878011641e-23, "-2.166063e-23", "%e"},
+ {__LINE__, -2.167045002060684e+12, "-2.167045E+12", "%E"},
+ {__LINE__, -2.173752581051530e+20, "-217375258105153035259.604621", "%f"},
+ {__LINE__, -2.175599129057555e+24, "-2.175599E+24", "%E"},
+ {__LINE__, -2.176564454093042e-02, "-0.0217656", "%+G"},
+ {__LINE__, -2.181270774327071e-12, "-0.000000", "%#1f"},
+ {__LINE__, -2.184404769844158e-09, "-2.2E-09", "%+.2G"},
+ {__LINE__, -2.184881476334310e-07, "-2.18488e-07", "%g"},
+ {__LINE__, -2.189197211449684e-11, "-2E-11", "%.0G"},
+ {__LINE__, -2.189451286805190e+20, "-218945128680519029984", "%3.f"},
+ {__LINE__, -2.190642494146884e-27, " -0.", "%#4.f"},
+ {__LINE__, -2.194727956725854e+06, "-2.19E+06", "%.3G"},
+ {__LINE__, -2.196145868303877e+11, "-219614586830.387726", "%+5f"},
+ {__LINE__, -2.196397972262690e-16, "-0.000000", "%3f"},
+ {__LINE__, -2.202692843474668e-01, "-2.203e-01", "%.3e"},
+ {__LINE__, -2.204528684782451e-21, "-2.20453E-21", "%G"},
+ {__LINE__, -2.214926838821340e-16, "-2e-16", "%+2.g"},
+ {__LINE__, -2.215558986352773e+18, "-2215558986352773374", "%0.f"},
+ {__LINE__, -2.216976693056186e+27, "-2216976693056186498154147557.215765", "%f"},
+ {__LINE__, -2.217348422793322e+13, "-2.21735E+13", "%6G"},
+ {__LINE__, -2.217732695583920e-07, "-0", "%.0f"},
+ {__LINE__, -2.221185494767834e-14, "-2.22119e-14", "%g"},
+ {__LINE__, -2.224557193699609e-16, "-2.224557E-16", "%E"},
+ {__LINE__, -2.227417758704028e-18, "-0.000000", "%0f"},
+ {__LINE__, -2.231261655673006e-30, "-2.231262E-30", "%E"},
+ {__LINE__, -2.233081938836160e+21, "-2233081938836160240668.960", "%+6.3f"},
+ {__LINE__, -2.233158918439853e+05, "-223316", "%2G"},
+ {__LINE__, -2.233802298007898e-30, "-2.2338E-30", "%2G"},
+ {__LINE__, -2.233864858404732e+17, "-223386485840473181.241350", "%f"},
+ {__LINE__, -2.241242805107749e+14, "-2.24124E+14", "%G"},
+ {__LINE__, -2.244555498855249e+25, "-2.24456E+25", "%#G"},
+ {__LINE__, -2.248170665127481e-07, "-2.248171E-07", "%E"},
+ {__LINE__, -2.252558275567388e-13, "-2.25256e-13", "%g"},
+ {__LINE__, -2.256190083496001e+13, "-22561900834960.0136398", "%7.7f"},
+ {__LINE__, -2.259851596715945e+27, "-2.259852e+27", "%e"},
+ {__LINE__, -2.260461480001174e-21, "-0.000000", "%f"},
+ {__LINE__, -2.264128628428577e+22, "-2.26413e+22", "%1g"},
+ {__LINE__, -2.265914518399595e-04, "-0.000226591", "%G"},
+ {__LINE__, -2.266251557092826e+23, "-2.26625e+23", "%g"},
+ {__LINE__, -2.268592252572450e+19, "-2.268592e+19", "%2.6e"},
+ {__LINE__, -2.268597523847349e+11, "-2.2686e+11", "%g"},
+ {__LINE__, -2.268963106935546e+05, "-226896", "%+g"},
+ {__LINE__, -2.272527876808919e-24, "-0.000000", "%#f"},
+ {__LINE__, -2.273366440479073e+02, "-227.337", "%g"},
+ {__LINE__, -2.277858038556191e+25, "-2.28E+25", "%0.3G"},
+ {__LINE__, -2.282019915623415e+25, "-2E+25", "%5.E"},
+ {__LINE__, -2.283333247435650e-27, " -0", "%4.f"},
+ {__LINE__, -2.285230610829355e+23, "-2E+23", "%2.G"},
+ {__LINE__, -2.290900253402985e+23, "-2.2909E+23", "%G"},
+ {__LINE__, -2.293266953268186e+08, "-2.29327e+08", "%g"},
+ {__LINE__, -2.293489603164786e+23, "-229348960316478578391752.3076525", "%4.7f"},
+ {__LINE__, -2.294434667605481e+15, "-2.2944E+15", "%.5G"},
+ {__LINE__, -2.296607768466765e+21, "-2.29661E+21", "%G"},
+ {__LINE__, -2.297449967994012e+14, "-229744996799401.23542", "%+.5f"},
+ {__LINE__, -2.301162556466583e-01, "-0.230116", "%+#2g"},
+ {__LINE__, -2.301676246374004e+05, "-230168.", "%#g"},
+ {__LINE__, -2.301976724487835e-01, "-0.230198", "%5G"},
+ {__LINE__, -2.303269770571222e-15, "-2.303270e-15", "%.6e"},
+ {__LINE__, -2.306451480495636e+23, "-2.30645E+23", "%G"},
+ {__LINE__, -2.307659351219690e-17, "-0.000000", "%+3f"},
+ {__LINE__, -2.309009762339430e+16, "-2.30901E+16", "%G"},
+ {__LINE__, -2.309261751862100e+06, "-2309261.751862", "%+f"},
+ {__LINE__, -2.309504876918634e-26, " -2E-26", "%7.E"},
+ {__LINE__, -2.310910348147804e-26, "-2e-26", "%5.g"},
+ {__LINE__, -2.317173552252235e+05, "-231717.4", "%.7g"},
+ {__LINE__, -2.319517289618469e-23, "-2.31952E-23", "%+G"},
+ {__LINE__, -2.320103195142527e+08, "-2.320103E+08", "%+E"},
+ {__LINE__, -2.323523032125633e+24, "-2323523032125633491773442.07419", "%.5f"},
+ {__LINE__, -2.326279126614399e-16, "-0.000000", "%f"},
+ {__LINE__, -2.331393688620925e-09, "-2.33139e-09", "%#g"},
+ {__LINE__, -2.334233527512469e+01, " -23", "%6.0f"},
+ {__LINE__, -2.337418834112767e+24, " -2E+24", "%7.E"},
+ {__LINE__, -2.339455293612118e+12, "-2339455293612.1", "%+.1f"},
+ {__LINE__, -2.341930318143367e-18, "-2.E-18", "%#4.E"},
+ {__LINE__, -2.346107614950921e-17, "-0.00000", "%+2.5f"},
+ {__LINE__, -2.348356578807972e+23, "-2.34836e+23", "%g"},
+ {__LINE__, -2.351485855138244e+19, "-2.351486e+19", "%+e"},
+ {__LINE__, -2.362101647639198e-15, "-2.36210e-15", "%#g"},
+ {__LINE__, -2.369743873030115e+08, "-2e+08", "%.1g"},
+ {__LINE__, -2.371658164739356e+25, "-23716581647393559784120498.079574", "%f"},
+ {__LINE__, -2.372427847607163e+28, "-2.37243E+28", "%G"},
+ {__LINE__, -2.375465465294647e+11, "-2.375465e+11", "%e"},
+ {__LINE__, -2.377128971572195e-18, "-0.0", "%1.1f"},
+ {__LINE__, -2.380322448568089e-13, "-2.38032E-13", "%+#0G"},
+ {__LINE__, -2.385960728264882e+26, "-2E+26", "%.0E"},
+ {__LINE__, -2.387345744004747e+00, "-2.38735", "%G"},
+ {__LINE__, -2.390480023300201e+25, "-2.39048e+25", "%g"},
+ {__LINE__, -2.395420431930886e+23, "-2E+23", "%2.E"},
+ {__LINE__, -2.401144663870969e-10, "-2.e-10", "%#6.g"},
+ {__LINE__, -2.402787441215039e-08, "-2.40279e-08", "%g"},
+ {__LINE__, -2.402990830425278e+08, "-2.40299E+08", "%G"},
+ {__LINE__, -2.404213682932215e+08, "-2.40421e+08", "%2g"},
+ {__LINE__, -2.409385592298822e+21, "-2409385592298821876511.283335", "%7f"},
+ {__LINE__, -2.410798267658614e+13, "-2.4108e+13", "%+g"},
+ {__LINE__, -2.413180068271811e-24, "-0.000000", "%+f"},
+ {__LINE__, -2.413268457113495e+26, "-2.41327E+26", "%3.6G"},
+ {__LINE__, -2.415341832206007e-13, "-0.000000", "%+f"},
+ {__LINE__, -2.422519577068670e-08, "-0.0000000", "%.7f"},
+ {__LINE__, -2.422533651282808e+20, "-2.42253E+20", "%#G"},
+ {__LINE__, -2.422795006880671e+17, "-2.4228e+17", "%g"},
+ {__LINE__, -2.423483330202008e+20, "-2.42348e+20", "%g"},
+ {__LINE__, -2.431756009640369e-04, "-0.000243176", "%+#3g"},
+ {__LINE__, -2.431878622534173e-05, "-0.000024", "%f"},
+ {__LINE__, -2.432012113077180e+24, "-2.43201e+24", "%g"},
+ {__LINE__, -2.433843704470487e+07, "-24338437", "%4.f"},
+ {__LINE__, -2.435475755031956e+11, "-2.435476E+11", "%1E"},
+ {__LINE__, -2.438081888695437e-13, "-0.000000", "%f"},
+ {__LINE__, -2.438334590462860e+10, "-2.4E+10", "%5.2G"},
+ {__LINE__, -2.440223135334059e+17, "-2.44022e+17", "%g"},
+ {__LINE__, -2.444107281115317e-21, "-2.44411e-21", "%+g"},
+ {__LINE__, -2.444582273206171e-02, " -0.02", "%7.G"},
+ {__LINE__, -2.445234676352794e+23, "-2.44523e+23", "%#g"},
+ {__LINE__, -2.449185020984714e+08, "-2.E+08", "%#2.G"},
+ {__LINE__, -2.450646640466020e+22, "-2.45065E+22", "%5G"},
+ {__LINE__, -2.456840850262473e+13, "-24568408502625", "%0.f"},
+ {__LINE__, -2.464466865714499e-10, "-2e-10", "%6.g"},
+ {__LINE__, -2.466022088999151e+27, "-2.46602E+27", "%G"},
+ {__LINE__, -2.484398113119779e-04, "-2.484398E-04", "%E"},
+ {__LINE__, -2.484591850456328e+23, "-248459185045632846566832.085955", "%+f"},
+ {__LINE__, -2.488166252162446e-11, "-2.5E-11", "%4.2G"},
+ {__LINE__, -2.493507313049390e+24, "-2.49E+24", "%4.3G"},
+ {__LINE__, -2.500280281988428e+28, "-2.5E+28", "%.4G"},
+ {__LINE__, -2.500373956445372e-07, "-2.50037e-07", "%g"},
+ {__LINE__, -2.505566434769299e-12, "-2.5E-12", "%+#0.2G"},
+ {__LINE__, -2.508215917020758e+05, "-2.508216e+05", "%5e"},
+ {__LINE__, -2.519368094680315e-29, "-2.51937e-29", "%#0g"},
+ {__LINE__, -2.522266530587753e-11, "-2.52227e-11", "%+g"},
+ {__LINE__, -2.534492886372514e-06, "-2.53449E-06", "%0G"},
+ {__LINE__, -2.534617610955074e-02, "-0.03", "%0.2f"},
+ {__LINE__, -2.540551642835634e+26, "-3E+26", "%4.G"},
+ {__LINE__, -2.548210731830516e-26, "-0.000", "%2.3f"},
+ {__LINE__, -2.558868082397931e-11, "-3E-11", "%2.E"},
+ {__LINE__, -2.560062512991052e+11, "-2.56006E+11", "%+G"},
+ {__LINE__, -2.561274682814428e-05, "-0.000026", "%f"},
+ {__LINE__, -2.563424949397357e-02, " -0", "%6.f"},
+ {__LINE__, -2.577010939931465e+17, "-2.57701E+17", "%G"},
+ {__LINE__, -2.578224879294822e+10, "-3E+10", "%+4.1G"},
+ {__LINE__, -2.585655636750244e+13, "-2.585656e+13", "%+0.7g"},
+ {__LINE__, -2.585657986834408e+14, "-2.5857e+14", "%3.5g"},
+ {__LINE__, -2.586728929368101e+02, "-258.673", "%+g"},
+ {__LINE__, -2.591293023229468e+06, "-2591293.0232295", "%2.7f"},
+ {__LINE__, -2.592454222603538e-06, "-2.59245E-06", "%G"},
+ {__LINE__, -2.599399905869649e+02, "-259.939991", "%f"},
+ {__LINE__, -2.605382860307596e+12, "-2.60538E+12", "%2G"},
+ {__LINE__, -2.607507689402762e-01, "-0.260751", "%#.6g"},
+ {__LINE__, -2.612933252582967e+15, "-2.61293e+15", "%g"},
+ {__LINE__, -2.614337505491483e-14, "-2.61434E-14", "%.6G"},
+ {__LINE__, -2.618302263333671e+14, "-2.62e+14", "%3.3g"},
+ {__LINE__, -2.622998533972296e+00, "-3.", "%#0.g"},
+ {__LINE__, -2.623348319869643e-15, "-2.62335E-15", "%#G"},
+ {__LINE__, -2.626703132693163e+23, "-3E+23", "%+6.E"},
+ {__LINE__, -2.629610853765779e+25, "-2.62961E+25", "%+#G"},
+ {__LINE__, -2.632993880472784e+26, "-2.63299E+26", "%G"},
+ {__LINE__, -2.635651112327873e-20, "-2.63565E-20", "%1G"},
+ {__LINE__, -2.636003980473492e-23, "-2.636E-23", "%G"},
+ {__LINE__, -2.639316453244009e+10, "-26393164532.440094", "%#f"},
+ {__LINE__, -2.640517223417942e-28, "-2.641e-28", "%.3e"},
+ {__LINE__, -2.640625797147664e-22, "-2.640626E-22", "%E"},
+ {__LINE__, -2.644401262524378e-12, " -0.000", "%7.3f"},
+ {__LINE__, -2.651033203243637e-14, "-2.651033e-14", "%+e"},
+ {__LINE__, -2.652386470126594e-24, "-2.652386E-24", "%E"},
+ {__LINE__, -2.654281018623631e-12, "-0.00000", "%6.5f"},
+ {__LINE__, -2.655529742118827e+02, "-265.552974", "%f"},
+ {__LINE__, -2.658550833241620e+22, "-26585508332416196708436.473273", "%+f"},
+ {__LINE__, -2.660515890519100e+08, "-2.660516E+08", "%E"},
+ {__LINE__, -2.665025749266086e-24, "-2.66503E-24", "%G"},
+ {__LINE__, -2.666117105643095e-20, "-2.66612e-20", "%g"},
+ {__LINE__, -2.667051347741259e+11, "-3e+11", "%6.g"},
+ {__LINE__, -2.667207607243375e+04, "-26672.076072", "%+#f"},
+ {__LINE__, -2.667631877167590e+26, "-2.667632E+26", "%E"},
+ {__LINE__, -2.673817942962878e+13, "-2.673818e+13", "%+2.6e"},
+ {__LINE__, -2.674972907853507e+20, "-2.674973E+20", "%E"},
+ {__LINE__, -2.675830887404867e+14, "-2.675831E+14", "%E"},
+ {__LINE__, -2.682749918168908e+26, "-2.682750E+26", "%E"},
+ {__LINE__, -2.689222801942679e-03, "-0.0027", "%7.2G"},
+ {__LINE__, -2.692245629411156e+25, "-2.69225e+25", "%g"},
+ {__LINE__, -2.692606702464273e+11, "-2.69261e+11", "%g"},
+ {__LINE__, -2.693070822061136e-27, "-2.69307e-27", "%+g"},
+ {__LINE__, -2.694415515655336e-30, "-3E-30", "%+3.0E"},
+ {__LINE__, -2.694770057384739e+15, "-2.69477e+15", "%g"},
+ {__LINE__, -2.699998392329361e+01, "-27", "%+.2g"},
+ {__LINE__, -2.700151952281511e+23, "-270015195228151050343968.", "%+#5.f"},
+ {__LINE__, -2.707398527302841e-08, "-2.70740e-08", "%+#3g"},
+ {__LINE__, -2.711404950850030e-21, "-2.71E-21", "%.2E"},
+ {__LINE__, -2.714057739024281e-10, "-2.714e-10", "%.4g"},
+ {__LINE__, -2.717657632815414e-10, "-2.71766e-10", "%g"},
+ {__LINE__, -2.720875786430592e-09, "-2.7E-09", "%6.2G"},
+ {__LINE__, -2.725886730997891e+19, "-2.72589e+19", "%g"},
+ {__LINE__, -2.726089169748676e-09, "-2.72609E-09", "%+G"},
+ {__LINE__, -2.732907572038661e-30, "-2.73291E-30", "%G"},
+ {__LINE__, -2.737918050958789e+11, "-3e+11", "%1.g"},
+ {__LINE__, -2.739024251198484e-18, "-2.73902e-18", "%+g"},
+ {__LINE__, -2.742646144452305e+13, "-2.74265e+13", "%g"},
+ {__LINE__, -2.742911865386719e+06, "-3E+06", "%+5.G"},
+ {__LINE__, -2.759159275123811e-30, "-0.000000", "%+f"},
+ {__LINE__, -2.759794813930001e-21, "-2.75979e-21", "%+g"},
+ {__LINE__, -2.763243077558348e+20, "-2.7632E+20", "%+0.4E"},
+ {__LINE__, -2.770348477810209e-14, "-0.000000", "%2f"},
+ {__LINE__, -2.776074766292453e+05, "-277607", "%g"},
+ {__LINE__, -2.776610811432007e-07, "-2.77661E-07", "%6G"},
+ {__LINE__, -2.778673793270678e+23, "-3E+23", "%+4.E"},
+ {__LINE__, -2.782405168708350e+08, "-278240516.87084", "%.5f"},
+ {__LINE__, -2.783316149365198e-09, "-3E-09", "%5.0G"},
+ {__LINE__, -2.785436703085409e-27, "-2.78544E-27", "%#G"},
+ {__LINE__, -2.787479051660640e+21, "-2.78748e+21", "%g"},
+ {__LINE__, -2.789445406042450e-03, "-0.002789", "%+f"},
+ {__LINE__, -2.791104581836077e+05, "-279110.4581836", "%+7.7f"},
+ {__LINE__, -2.802078617775784e+04, "-28020.786", "%0.3f"},
+ {__LINE__, -2.804954315579055e+20, "-2.80495E+20", "%G"},
+ {__LINE__, -2.806575341862696e-05, "-2.80658E-05", "%G"},
+ {__LINE__, -2.807769556900402e-06, "-0.000003", "%+#f"},
+ {__LINE__, -2.808882056357941e-12, "-0.0", "%.1f"},
+ {__LINE__, -2.809386677339924e+10, "-2.8094E+10", "%6.5G"},
+ {__LINE__, -2.818404311437694e+19, "-3E+19", "%6.G"},
+ {__LINE__, -2.819463285551660e+01, "-28.1946", "%+G"},
+ {__LINE__, -2.821428853207724e-16, "-3e-16", "%6.g"},
+ {__LINE__, -2.824452750788444e+07, "-3e+07", "%+2.g"},
+ {__LINE__, -2.825430381094971e+28, "-3e+28", "%+.0e"},
+ {__LINE__, -2.830010928384944e-17, "-0", "%.0f"},
+ {__LINE__, -2.832505114479680e-09, "-0.000000", "%f"},
+ {__LINE__, -2.833246604950796e+13, "-2.83325E+13", "%G"},
+ {__LINE__, -2.833274073265017e+13, "-28332740732650.174564", "%f"},
+ {__LINE__, -2.835842581787797e+07, "-2.83584E+07", "%2G"},
+ {__LINE__, -2.839758384681983e-07, "-2.83976E-07", "%.6G"},
+ {__LINE__, -2.841077022753766e-09, "-3E-09", "%0.1G"},
+ {__LINE__, -2.845307294930682e+00, "-2.845307e+00", "%+1e"},
+ {__LINE__, -2.847420163874243e+19, "-2.8e+19", "%1.2g"},
+ {__LINE__, -2.848133715109881e-25, "-2.848134E-25", "%E"},
+ {__LINE__, -2.850208101288058e-06, "-2.8502E-06", "%+5.4E"},
+ {__LINE__, -2.853666525870413e+04, "-28536.665259", "%f"},
+ {__LINE__, -2.855661543202034e+21, "-2.85566e+21", "%g"},
+ {__LINE__, -2.859528889324159e-08, "-2.859529e-08", "%3e"},
+ {__LINE__, -2.860545310690251e+29, "-3e+29", "%.1g"},
+ {__LINE__, -2.863576633666884e-14, "-2.863577e-14", "%+5e"},
+ {__LINE__, -2.864115740396321e-14, "-2.86412e-14", "%g"},
+ {__LINE__, -2.864481979037153e+20, "-2.86E+20", "%3.3G"},
+ {__LINE__, -2.867582970177984e-18, "-0.000000", "%f"},
+ {__LINE__, -2.868237707901564e+25, "-3E+25", "%6.E"},
+ {__LINE__, -2.871741071402520e+13, "-3e+13", "%.1g"},
+ {__LINE__, -2.873724610073364e+18, "-2873724610073364438.278531", "%+#f"},
+ {__LINE__, -2.876433859770866e-25, "-2.87643e-25", "%g"},
+ {__LINE__, -2.877458587075737e-08, "-2.877E-08", "%+.4G"},
+ {__LINE__, -2.883349842927101e+24, "-2.883350E+24", "%2E"},
+ {__LINE__, -2.883749925642885e+09, "-2.883750e+09", "%e"},
+ {__LINE__, -2.883773835633003e-17, "-0.000000", "%+f"},
+ {__LINE__, -2.890389090491409e+24, "-2890389090491409262995148.310438", "%#1f"},
+ {__LINE__, -2.900848552225810e-11, "-0.000000", "%+f"},
+ {__LINE__, -2.911942123176400e+25, "-29119421231764004431852300", "%0.f"},
+ {__LINE__, -2.912904462180751e-18, "-2.9129E-18", "%6G"},
+ {__LINE__, -2.917717875075651e+26, "-3e+26", "%0.e"},
+ {__LINE__, -2.922293201084093e-26, "-2.922293E-26", "%E"},
+ {__LINE__, -2.925070319932451e-30, "-0.000000", "%f"},
+ {__LINE__, -2.926558572870874e+15, "-2.926559E+15", "%E"},
+ {__LINE__, -2.928781435877896e+26, "-2.928781e+26", "%+e"},
+ {__LINE__, -2.930178318110376e+28, "-2.930178E+28", "%E"},
+ {__LINE__, -2.930984661925819e+05, "-293098.5", "%.7G"},
+ {__LINE__, -2.932762424932762e-08, "-0.000000", "%#f"},
+ {__LINE__, -2.933415597492494e+10, "-29334155974.924943", "%+#2f"},
+ {__LINE__, -2.933564314850986e+29, "-2.93356E+29", "%7G"},
+ {__LINE__, -2.943224907893795e+10, "-2.943225E+10", "%+7E"},
+ {__LINE__, -2.945311540471221e+19, "-2.94531E+19", "%#G"},
+ {__LINE__, -2.945812356522847e+15, "-2.94581e+15", "%+g"},
+ {__LINE__, -2.945836999630957e+00, "-2.945837E+00", "%E"},
+ {__LINE__, -2.947798782726622e-01, "-0.29478", "%+g"},
+ {__LINE__, -2.948958405827917e+18, "-2.94896e+18", "%g"},
+ {__LINE__, -2.949790871798059e-11, "-2.94979E-11", "%G"},
+ {__LINE__, -2.950347806125225e-12, "-2.95035e-12", "%g"},
+ {__LINE__, -2.952781884599368e-29, "-2.952782E-29", "%+E"},
+ {__LINE__, -2.956801341442716e+06, "-2.9568E+06", "%G"},
+ {__LINE__, -2.957469310356540e-07, "-0.000", "%1.3f"},
+ {__LINE__, -2.960464869534870e-23, "-2.96046E-23", "%G"},
+ {__LINE__, -2.962339381825446e-07, "-0", "%1.f"},
+ {__LINE__, -2.971013180028710e+22, "-2.971e+22", "%3.5g"},
+ {__LINE__, -2.975167862441254e+07, "-2.97517e+07", "%g"},
+ {__LINE__, -2.976018424339993e+16, "-2.976018e+16", "%3e"},
+ {__LINE__, -2.979173094835454e+29, "-2.97917E+29", "%G"},
+ {__LINE__, -2.983135249987541e-03, "-0.00298314", "%+G"},
+ {__LINE__, -2.985142444917919e-24, "-2.985142E-24", "%+#7E"},
+ {__LINE__, -2.988680953635159e-14, "-0.0000000", "%2.7f"},
+ {__LINE__, -2.989629778079379e+04, "-29896.297781", "%f"},
+ {__LINE__, -2.991274275137276e+19, "-29912742751372762839.423558", "%+4f"},
+ {__LINE__, -2.991286396006024e-06, "-2.99129e-06", "%4g"},
+ {__LINE__, -2.993310397844811e+04, "-2.993310E+04", "%3.6E"},
+ {__LINE__, -2.994669852410861e-29, "-2.99467E-29", "%G"},
+ {__LINE__, -2.996082093034831e+27, "-2.996082e+27", "%1e"},
+ {__LINE__, -2.999783904575110e+16, "-2.999784E+16", "%#E"},
+ {__LINE__, -3.012019221956988e+25, "-3.012019E+25", "%E"},
+ {__LINE__, -3.014211917706622e-25, "-0.000000", "%+f"},
+ {__LINE__, -3.015149723683428e-19, "-3.01515E-19", "%G"},
+ {__LINE__, -3.022158478004638e-19, "-3.02216e-19", "%6g"},
+ {__LINE__, -3.022825518373900e-12, "-3.0228E-12", "%+.4E"},
+ {__LINE__, -3.025108924057340e-19, "-0.000000", "%f"},
+ {__LINE__, -3.026316824631967e+24, "-3026316824631966717618070.106255", "%1f"},
+ {__LINE__, -3.033074643529623e-13, "-3.03307e-13", "%g"},
+ {__LINE__, -3.035292960731141e+24, "-3035292960731141409524980.190326", "%f"},
+ {__LINE__, -3.043291272956732e-13, "-3.04329e-13", "%#g"},
+ {__LINE__, -3.045216723973715e-23, "-3.045e-23", "%.4g"},
+ {__LINE__, -3.047140976048835e+09, "-3.04714E+09", "%3.5E"},
+ {__LINE__, -3.047680278470886e+09, "-3.047680E+09", "%#E"},
+ {__LINE__, -3.048465807963461e+05, "-304847", "%g"},
+ {__LINE__, -3.050904753556756e+22, "-3.0509E+22", "%G"},
+ {__LINE__, -3.052845748999047e-13, "-3.05285e-13", "%g"},
+ {__LINE__, -3.053395231883620e-06, "-3E-06", "%2.G"},
+ {__LINE__, -3.054894203375445e-28, "-3e-28", "%2.g"},
+ {__LINE__, -3.055080347760755e-13, "-0", "%2.f"},
+ {__LINE__, -3.055513037393624e-29, "-3e-29", "%3.g"},
+ {__LINE__, -3.056198778208295e-06, "-3.0562e-06", "%g"},
+ {__LINE__, -3.057813660266980e-21, "-3E-21", "%1.G"},
+ {__LINE__, -3.059687036330998e-11, "-3.1E-11", "%#2.2G"},
+ {__LINE__, -3.061450385559094e-10, "-3.06145E-10", "%G"},
+ {__LINE__, -3.066605713361383e-27, "-0.000000", "%f"},
+ {__LINE__, -3.071590110813156e+22, "-3.07159E+22", "%G"},
+ {__LINE__, -3.073253864426931e+26, "-3.0733E+26", "%.5G"},
+ {__LINE__, -3.078998328596940e+07, "-3.079e+07", "%5.4g"},
+ {__LINE__, -3.082733887951920e+06, "-3.082734e+06", "%+6e"},
+ {__LINE__, -3.084365358064710e+24, "-3.084365E+24", "%#E"},
+ {__LINE__, -3.086948022123716e+25, "-30869480221237162176350921.072299", "%+f"},
+ {__LINE__, -3.088200214218024e-10, "-0", "%0.f"},
+ {__LINE__, -3.093442983942874e+08, "-309344298.394287", "%f"},
+ {__LINE__, -3.103573455403534e-09, "-3.103573E-09", "%#E"},
+ {__LINE__, -3.109178443120997e+07, "-31091784.431210", "%f"},
+ {__LINE__, -3.111494549914917e+28, "-3e+28", "%0.g"},
+ {__LINE__, -3.113384020517480e-17, " -0", "%+6.f"},
+ {__LINE__, -3.121622779718055e+14, "-312162277971805.491", "%+.3f"},
+ {__LINE__, -3.122780443843900e-01, "-0.312278", "%#g"},
+ {__LINE__, -3.122952438335638e-25, "-3.122952E-25", "%E"},
+ {__LINE__, -3.128970339463168e-18, "-3e-18", "%3.g"},
+ {__LINE__, -3.130862507719335e+10, "-3.130863e+10", "%3e"},
+ {__LINE__, -3.145960838955379e+03, "-3145.96", "%g"},
+ {__LINE__, -3.149362645138929e+21, "-3.14936e+21", "%g"},
+ {__LINE__, -3.150697168664913e+26, "-315069716866491322804222363.629378", "%+f"},
+ {__LINE__, -3.157946785041287e+05, "-3.1579e+05", "%.4e"},
+ {__LINE__, -3.158347006986809e-02, "-3.E-02", "%#.0E"},
+ {__LINE__, -3.159542871923388e+07, "-31595429", "%2.f"},
+ {__LINE__, -3.169997512351985e+15, "-3.169998E+15", "%6.7G"},
+ {__LINE__, -3.170971776544746e+07, "-31709717.765447", "%f"},
+ {__LINE__, -3.173246079104466e+19, "-3.173246E+19", "%1E"},
+ {__LINE__, -3.173581228658553e-02, "-0.03", "%+0.G"},
+ {__LINE__, -3.187598864929850e-07, "-3.18760E-07", "%#G"},
+ {__LINE__, -3.190525302270244e+08, "-3.190525e+08", "%+0.7g"},
+ {__LINE__, -3.191879884186422e+19, "-3.19E+19", "%.2E"},
+ {__LINE__, -3.197292604744926e+02, "-3.197293e+02", "%+e"},
+ {__LINE__, -3.203713337688838e-12, "-3.20371E-12", "%6G"},
+ {__LINE__, -3.204416889544914e-18, "-0.000000", "%+f"},
+ {__LINE__, -3.204494471917096e+09, "-3.20449e+09", "%g"},
+ {__LINE__, -3.211933195516720e+11, "-3.21193E+11", "%G"},
+ {__LINE__, -3.214544021431917e-24, "-0.000000", "%1f"},
+ {__LINE__, -3.215501229487004e-07, "-3e-07", "%3.e"},
+ {__LINE__, -3.232157492322707e-13, "-3.E-13", "%+#5.G"},
+ {__LINE__, -3.239074974455177e-05, "-3.239e-05", "%2.4g"},
+ {__LINE__, -3.243083730801156e-24, "-3.243084e-24", "%#e"},
+ {__LINE__, -3.243128583394124e+07, "-32431285.8339", "%6.4f"},
+ {__LINE__, -3.247997999770571e-08, "-3e-08", "%5.e"},
+ {__LINE__, -3.258251054563991e-15, "-3.2583E-15", "%.5G"},
+ {__LINE__, -3.259499053187446e+07, "-3.2595E+07", "%5.6G"},
+ {__LINE__, -3.261907782031174e+20, "-3.3e+20", "%.2g"},
+ {__LINE__, -3.263979380855122e+29, "-3.26398E+29", "%G"},
+ {__LINE__, -3.264166546402073e+06, "-3.26417E+06", "%5G"},
+ {__LINE__, -3.269357648926951e+01, "-3.E+01", "%#5.G"},
+ {__LINE__, -3.273523287028019e-30, "-3.27352e-30", "%g"},
+ {__LINE__, -3.274464331526264e-14, "-3e-14", "%.0g"},
+ {__LINE__, -3.276647049958546e+05, "-327664.7", "%+.1f"},
+ {__LINE__, -3.276853612008326e-04, "-3.276854e-04", "%e"},
+ {__LINE__, -3.288077788905925e+17, "-3.28808e+17", "%g"},
+ {__LINE__, -3.292054327509010e+21, "-3.29205e+21", "%+g"},
+ {__LINE__, -3.292086868337041e-16, " -0", "%7.f"},
+ {__LINE__, -3.299368070005327e-17, "-3E-17", "%5.G"},
+ {__LINE__, -3.307165537474566e-30, "-3e-30", "%+2.g"},
+ {__LINE__, -3.310556325973673e-17, "-3.31056E-17", "%G"},
+ {__LINE__, -3.315407318453138e-09, "-3.315407e-09", "%+#.6e"},
+ {__LINE__, -3.318402800998018e-09, "-3.3184E-09", "%+G"},
+ {__LINE__, -3.324277622889107e-04, "-0.000332428", "%G"},
+ {__LINE__, -3.326372457131185e+14, "-3.326372e+14", "%0e"},
+ {__LINE__, -3.333300611287597e+18, "-3.3E+18", "%4.2G"},
+ {__LINE__, -3.333608976277018e-25, "-3.33361e-25", "%g"},
+ {__LINE__, -3.333613056182724e-24, "-3.33361e-24", "%.5e"},
+ {__LINE__, -3.338505874378410e-26, "-0.00000", "%.5f"},
+ {__LINE__, -3.339838772519661e+24, "-3.3398E+24", "%0.5G"},
+ {__LINE__, -3.354802735583258e-27, "-3.3548E-27", "%G"},
+ {__LINE__, -3.356542080644329e+15, "-3356542080644329.129058", "%#f"},
+ {__LINE__, -3.360027692463026e-29, "-3.36003e-29", "%+g"},
+ {__LINE__, -3.361845657814323e+06, "-3361845.657814", "%f"},
+ {__LINE__, -3.363135493765816e-12, " -0", "%5.f"},
+ {__LINE__, -3.367383112102258e+19, "-33673831121022579360.158034", "%f"},
+ {__LINE__, -3.376798505037497e+03, "-3376.8", "%+3G"},
+ {__LINE__, -3.388170639372559e+09, "-3.388171e+09", "%+e"},
+ {__LINE__, -3.397304185715499e-12, "-3.397304e-12", "%+e"},
+ {__LINE__, -3.401559374016378e-13, "-3.40156e-13", "%g"},
+ {__LINE__, -3.402651870178825e+21, "-3.40265e+21", "%+g"},
+ {__LINE__, -3.410491213537530e+12, "-3.41049E+12", "%G"},
+ {__LINE__, -3.411695570460075e-01, "-3.411696e-01", "%e"},
+ {__LINE__, -3.417311435719220e+29, "-3.4E+29", "%3.1E"},
+ {__LINE__, -3.417581063208165e-23, " -0", "%+4.f"},
+ {__LINE__, -3.424005615113663e-28, "-0.000000", "%f"},
+ {__LINE__, -3.424793585094130e-12, "-0.000000", "%f"},
+ {__LINE__, -3.434733077762304e-05, "-3.43473e-05", "%g"},
+ {__LINE__, -3.436384988494743e+08, "-3.43638E+08", "%G"},
+ {__LINE__, -3.441082995163884e-21, "-0.000000", "%f"},
+ {__LINE__, -3.442868661576827e-23, "-3.442869e-23", "%#.7g"},
+ {__LINE__, -3.444337521046186e+13, "-3.44434E+13", "%#G"},
+ {__LINE__, -3.448230173418967e-28, "-3.44823E-28", "%#G"},
+ {__LINE__, -3.448523828225326e-21, "-3.4485e-21", "%.4e"},
+ {__LINE__, -3.449876796754720e-07, "-3.44988e-07", "%g"},
+ {__LINE__, -3.450163790411588e+25, "-34501637904115876054333966.749255", "%2f"},
+ {__LINE__, -3.450224454406567e-26, "-3.450224E-26", "%#1E"},
+ {__LINE__, -3.459930768422874e-28, "-3.46E-28", "%2.3G"},
+ {__LINE__, -3.460730505022601e-28, "-3.46073e-28", "%#g"},
+ {__LINE__, -3.462894265593946e-10, "-3.46289e-10", "%+#g"},
+ {__LINE__, -3.464808359229496e+05, "-346481", "%6.6G"},
+ {__LINE__, -3.467272303652620e-03, "-0.00346727", "%g"},
+ {__LINE__, -3.468252706910251e+10, "-3.5E+10", "%#7.2G"},
+ {__LINE__, -3.473623965680253e+27, "-3.47362e+27", "%g"},
+ {__LINE__, -3.474527926009729e+11, "-3.475E+11", "%.4G"},
+ {__LINE__, -3.476489048299929e+15, "-3.47649e+15", "%g"},
+ {__LINE__, -3.477809698895344e-09, "-0.000", "%+.3f"},
+ {__LINE__, -3.493008398637667e-28, " -0", "%+4.f"},
+ {__LINE__, -3.497441286691613e+07, "-3.49744e+07", "%g"},
+ {__LINE__, -3.500904660533358e+00, "-3.500905E+00", "%+1E"},
+ {__LINE__, -3.504996054364915e+25, "-3.505e+25", "%+g"},
+ {__LINE__, -3.507738629125434e-24, "-0.00", "%+4.2f"},
+ {__LINE__, -3.508557770253211e-04, "-3.508558e-04", "%#6e"},
+ {__LINE__, -3.516056824437550e+20, "-3.516057e+20", "%#e"},
+ {__LINE__, -3.521102917733367e+02, "-352.11", "%g"},
+ {__LINE__, -3.523948985825251e+10, "-3.52395e+10", "%+g"},
+ {__LINE__, -3.525281835697895e-15, "-3.525282e-15", "%e"},
+ {__LINE__, -3.534088845494570e-26, "-0.000000", "%2f"},
+ {__LINE__, -3.541002442741569e+01, "-35.410", "%3.3f"},
+ {__LINE__, -3.541126630345017e-19, "-3.541127e-19", "%e"},
+ {__LINE__, -3.545277845967514e-17, "-0.000000", "%f"},
+ {__LINE__, -3.560935430637329e-12, "-3.56094E-12", "%G"},
+ {__LINE__, -3.564234584447659e-23, "-3.56423E-23", "%G"},
+ {__LINE__, -3.576040378379921e-11, "-0.000000", "%+6f"},
+ {__LINE__, -3.578133580350674e-05, "-3.578134e-05", "%#e"},
+ {__LINE__, -3.584484015191491e-28, "-0.0", "%+2.1f"},
+ {__LINE__, -3.591961845146752e+27, "-3.59196E+27", "%G"},
+ {__LINE__, -3.602508380305001e+26, "-3.60251e+26", "%g"},
+ {__LINE__, -3.603113449808132e+04, "-36031.134498", "%+3.6f"},
+ {__LINE__, -3.605569849504628e+25, "-4E+25", "%6.G"},
+ {__LINE__, -3.611297754851416e+05, "-361129.775485", "%+f"},
+ {__LINE__, -3.613177909959201e-28, "-0.000000", "%f"},
+ {__LINE__, -3.616261225230595e-01, "-0.361626", "%3g"},
+ {__LINE__, -3.619203521536307e+09, "-3.6192E+09", "%G"},
+ {__LINE__, -3.619316709131723e-27, "-0.0000000", "%.7f"},
+ {__LINE__, -3.623100583082346e+28, "-3.6231E+28", "%+G"},
+ {__LINE__, -3.626582653589919e+21, "-3626582653589918603387.332041", "%f"},
+ {__LINE__, -3.626667540343067e-30, "-4.E-30", "%#.0G"},
+ {__LINE__, -3.633539220625861e-30, "-3.634E-30", "%+.3E"},
+ {__LINE__, -3.641655782149502e-11, "-3.64166E-11", "%G"},
+ {__LINE__, -3.644523594046571e+25, "-3.64452e+25", "%5g"},
+ {__LINE__, -3.645977605394108e+25, "-3.646e+25", "%+0.3e"},
+ {__LINE__, -3.647864582248812e+13, "-4E+13", "%4.G"},
+ {__LINE__, -3.655241667633056e-25, "-3.655242E-25", "%E"},
+ {__LINE__, -3.662603655433297e+23, "-3.662604e+23", "%e"},
+ {__LINE__, -3.668995445134158e+22, " -4E+22", "%7.G"},
+ {__LINE__, -3.670006666569412e-11, "-3.670007e-11", "%e"},
+ {__LINE__, -3.670510381138509e-24, "-3.670510e-24", "%e"},
+ {__LINE__, -3.671283003268254e-20, "-3.67128E-20", "%G"},
+ {__LINE__, -3.687760201176777e-13, "-3.68776E-13", "%G"},
+ {__LINE__, -3.687983982100676e-14, "-0.00", "%.2f"},
+ {__LINE__, -3.694808382827435e-12, "-3.694808E-12", "%#E"},
+ {__LINE__, -3.696158520838821e+28, "-3.69616E+28", "%3G"},
+ {__LINE__, -3.700911860811323e+18, "-3.70091e+18", "%+g"},
+ {__LINE__, -3.701328314738669e+24, "-3.70133e+24", "%g"},
+ {__LINE__, -3.707068461822151e-19, "-3.707068E-19", "%E"},
+ {__LINE__, -3.710679411506914e+25, "-3.71068e+25", "%g"},
+ {__LINE__, -3.713003840923896e-23, "-3.713e-23", "%7g"},
+ {__LINE__, -3.717028397747828e-28, "-3.71703e-28", "%g"},
+ {__LINE__, -3.728159642236442e+14, "-3.72816E+14", "%G"},
+ {__LINE__, -3.731956233637010e+21, "-3.73196E+21", "%G"},
+ {__LINE__, -3.742336623322610e+07, "-3.74234e+07", "%g"},
+ {__LINE__, -3.748328269630045e+04, "-37483.3", "%G"},
+ {__LINE__, -3.750803081283569e-27, "-3.7508E-27", "%+7G"},
+ {__LINE__, -3.752021500826652e-04, "-0.0004", "%.1G"},
+ {__LINE__, -3.755942257004103e-12, "-3.75594E-12", "%G"},
+ {__LINE__, -3.765921235889045e+03, " -4e+03", "%+7.g"},
+ {__LINE__, -3.772453135667801e-28, "-3.77245E-28", "%G"},
+ {__LINE__, -3.776384200230367e+27, "-3.776e+27", "%1.4g"},
+ {__LINE__, -3.787035870684945e-25, "-4E-25", "%+3.G"},
+ {__LINE__, -3.798616350818839e-29, "-3.7986164e-29", "%.7e"},
+ {__LINE__, -3.807178315238428e-15, "-0.000000", "%+#6f"},
+ {__LINE__, -3.822059837967635e+18, "-3822059837967634621.236357", "%6.6f"},
+ {__LINE__, -3.823553096022006e+12, "-3.82355e+12", "%g"},
+ {__LINE__, -3.839198115259428e-23, "-0.000000", "%f"},
+ {__LINE__, -3.846953640321746e+02, "-3.846954E+02", "%E"},
+ {__LINE__, -3.852230696542361e+08, "-3.8522e+08", "%#.5g"},
+ {__LINE__, -3.861139362195314e-25, "-3.86114E-25", "%2G"},
+ {__LINE__, -3.873388618099769e+09, "-3873388618", "%0.0f"},
+ {__LINE__, -3.874161550543817e+15, "-3.874162e+15", "%+e"},
+ {__LINE__, -3.874527935469425e+20, "-3.87E+20", "%3.3G"},
+ {__LINE__, -3.878069577893697e-30, "-3.878070E-30", "%#E"},
+ {__LINE__, -3.878852490397702e-20, "-3.87885e-20", "%g"},
+ {__LINE__, -3.879688342272101e-10, "-0.00", "%#4.2f"},
+ {__LINE__, -3.879797428399897e+03, "-3880", "%1.4g"},
+ {__LINE__, -3.881588804766756e+00, "-3.9", "%+4.2G"},
+ {__LINE__, -3.889377318111182e+01, "-38.8938", "%+.4f"},
+ {__LINE__, -3.893444523430385e-03, "-0.004", "%+2.g"},
+ {__LINE__, -3.894912141515856e+03, "-3894.91", "%+g"},
+ {__LINE__, -3.905279115773667e+04, "-39052.791158", "%f"},
+ {__LINE__, -3.905333955484919e-20, "-3.90533E-20", "%G"},
+ {__LINE__, -3.906559442060730e+27, "-3906559442060730447110472596.250474", "%f"},
+ {__LINE__, -3.909396469655334e-26, "-3.91E-26", "%.3G"},
+ {__LINE__, -3.920132491092364e+11, "-3.92013e+11", "%g"},
+ {__LINE__, -3.935651497471973e+27, "-3935651497471972604103029880", "%5.f"},
+ {__LINE__, -3.939742577853889e-03, "-0.004", "%5.G"},
+ {__LINE__, -3.943284017088198e+19, "-39432840170881981123.3", "%.1f"},
+ {__LINE__, -3.947452186327660e+09, "-3947452186.33", "%0.2f"},
+ {__LINE__, -3.951967237553488e+18, "-3951967237553488132.562052", "%f"},
+ {__LINE__, -3.953673427359789e-28, "-3.954E-28", "%3.4G"},
+ {__LINE__, -3.956044867371602e+23, "-4e+23", "%+6.1g"},
+ {__LINE__, -3.965038994251913e-20, "-3.96504e-20", "%g"},
+ {__LINE__, -3.970527677577937e+05, "-4.e+05", "%#0.1g"},
+ {__LINE__, -3.970717822164395e-20, "-3.970718e-20", "%6e"},
+ {__LINE__, -3.978063834438912e-19, "-3.97806E-19", "%G"},
+ {__LINE__, -3.982705395472599e+27, "-3.9827e+27", "%#.5g"},
+ {__LINE__, -3.983486821352571e-28, "-3.98349e-28", "%g"},
+ {__LINE__, -3.985470630230926e-14, "-4e-14", "%.2g"},
+ {__LINE__, -3.993095662863953e-16, "-3.993096e-16", "%e"},
+ {__LINE__, -4.006984141314271e-22, " -4e-22", "%7.2g"},
+ {__LINE__, -4.006984141314271e-22, "-4.0e-22", "%#7.2g"},
+ {__LINE__, -4.013226099863981e+06, "-4.013226E+06", "%+E"},
+ {__LINE__, -4.013702226581167e+00, "-4.0137022", "%+#3.7f"},
+ {__LINE__, -4.017598274642537e+11, "-4E+11", "%5.G"},
+ {__LINE__, -4.021385792825529e-09, " -4e-09", "%7.2g"},
+ {__LINE__, -4.024099064819937e-20, "-4.0241E-20", "%+G"},
+ {__LINE__, -4.026952473441366e+22, "-4.026952e+22", "%6.7g"},
+ {__LINE__, -4.027636677087866e+12, "-4.02764E+12", "%G"},
+ {__LINE__, -4.036506013049443e+17, "-4.03651e+17", "%0.6g"},
+ {__LINE__, -4.063191953523012e-06, " -0.0", "%6.1f"},
+ {__LINE__, -4.070953223475192e-23, "-4.07095E-23", "%G"},
+ {__LINE__, -4.072425833070524e+09, "-4.072426E+09", "%E"},
+ {__LINE__, -4.086025576759603e+12, "-4.086026e+12", "%e"},
+ {__LINE__, -4.086627783296081e-24, "-4.087E-24", "%.3E"},
+ {__LINE__, -4.086683676772144e+10, "-40866836767.721439", "%f"},
+ {__LINE__, -4.087336043219081e-10, "-0.", "%+#0.f"},
+ {__LINE__, -4.125162973336809e-26, "-4.125163E-26", "%.7G"},
+ {__LINE__, -4.150753797717075e-10, "-4.2e-10", "%.2g"},
+ {__LINE__, -4.152126152181912e+23, "-4.15213e+23", "%g"},
+ {__LINE__, -4.164458223079432e-07, "-4.164458E-07", "%E"},
+ {__LINE__, -4.170624866130099e+03, "-4170.624866", "%4.6f"},
+ {__LINE__, -4.171137277374942e-01, " -4E-01", "%+7.E"},
+ {__LINE__, -4.176067421901769e-25, "-4.17607E-25", "%G"},
+ {__LINE__, -4.179514418604771e+24, "-4.1795e+24", "%3.5g"},
+ {__LINE__, -4.196285183415621e+23, "-4.19629E+23", "%5G"},
+ {__LINE__, -4.198600486581023e+23, "-4E+23", "%+4.G"},
+ {__LINE__, -4.199020494598538e-16, "-0.000000", "%+f"},
+ {__LINE__, -4.207824153501688e-01, "-0.420782", "%G"},
+ {__LINE__, -4.219086441294006e-13, " -0", "%+4.f"},
+ {__LINE__, -4.223689582765525e+12, "-4.22369e+12", "%g"},
+ {__LINE__, -4.230213377391093e+04, "-42302.1", "%+2.6G"},
+ {__LINE__, -4.232495358100605e-02, "-0.042325", "%+f"},
+ {__LINE__, -4.235459662515940e-29, "-0.000000", "%f"},
+ {__LINE__, -4.240807508057296e-07, "-4e-07", "%0.g"},
+ {__LINE__, -4.248376819122346e-13, "-4.248377e-13", "%7e"},
+ {__LINE__, -4.251361939638334e-23, "-4.251362E-23", "%E"},
+ {__LINE__, -4.253044333568077e+24, "-4.253044e+24", "%4e"},
+ {__LINE__, -4.255728039119772e-30, "-4.25573E-30", "%2G"},
+ {__LINE__, -4.256502531648988e+02, "-425.65", "%G"},
+ {__LINE__, -4.260731632612400e-04, "-0", "%2.f"},
+ {__LINE__, -4.262037138254753e-25, "-4e-25", "%5.g"},
+ {__LINE__, -4.270910126379393e+00, "-4.2709", "%#7.4f"},
+ {__LINE__, -4.273844276097008e-09, " -0.", "%#4.f"},
+ {__LINE__, -4.280424136111831e+21, "-4.280E+21", "%.3E"},
+ {__LINE__, -4.284351940366486e-23, "-0.000000", "%+f"},
+ {__LINE__, -4.291747881693517e-29, "-4.3e-29", "%+#.2g"},
+ {__LINE__, -4.298346825232928e+04, "-42983.5", "%G"},
+ {__LINE__, -4.298879924365432e+28, "-42988799243654316484253286034.800112", "%f"},
+ {__LINE__, -4.302192665689887e-25, "-0.000000", "%f"},
+ {__LINE__, -4.303899568112784e+06, "-4E+06", "%1.G"},
+ {__LINE__, -4.307399960278190e-30, "-4.31e-30", "%.3g"},
+ {__LINE__, -4.341161949359232e+01, "-43.411619", "%+f"},
+ {__LINE__, -4.353334435604675e+17, " -4e+17", "%+7.g"},
+ {__LINE__, -4.354760231068195e+08, "-4e+08", "%2.e"},
+ {__LINE__, -4.363535913318519e+08, "-4.363536E+08", "%+7E"},
+ {__LINE__, -4.365389605557404e-29, "-4.365390e-29", "%e"},
+ {__LINE__, -4.369278570829168e-22, "-4.369279E-22", "%5E"},
+ {__LINE__, -4.372187639240662e-11, "-4.37219e-11", "%+g"},
+ {__LINE__, -4.374221079233858e-15, "-4.37422E-15", "%4.6G"},
+ {__LINE__, -4.374840292001664e-13, "-0.000000", "%+f"},
+ {__LINE__, -4.376554800103945e+16, "-43765548001039453.751559", "%f"},
+ {__LINE__, -4.376659235899513e+07, "-4.4E+07", "%0.2G"},
+ {__LINE__, -4.377316129868239e-06, "-4.37732E-06", "%+5G"},
+ {__LINE__, -4.380028480226885e+21, "-4e+21", "%1.0e"},
+ {__LINE__, -4.380434965450223e+16, "-43804349654502230.393405", "%f"},
+ {__LINE__, -4.392477080355168e-15, "-4E-15", "%+2.G"},
+ {__LINE__, -4.396120020536161e+17, "-439612002053616102.159594", "%#f"},
+ {__LINE__, -4.400993154571784e+13, "-44009931545717.844159", "%f"},
+ {__LINE__, -4.402873692051930e-26, "-4.4e-26", "%5.3g"},
+ {__LINE__, -4.405330274903779e+24, "-4405330274903779042006135.568954", "%+5f"},
+ {__LINE__, -4.406272291312090e+06, "-4.40627e+06", "%+g"},
+ {__LINE__, -4.407065949816988e-13, "-0.000000", "%f"},
+ {__LINE__, -4.408295597674563e-10, "-4.4083e-10", "%g"},
+ {__LINE__, -4.417553815178214e-30, "-4.41755E-30", "%G"},
+ {__LINE__, -4.428894120469459e+16, "-4.42889e+16", "%g"},
+ {__LINE__, -4.433747825142046e+04, "-4.433748e+04", "%#e"},
+ {__LINE__, -4.435051082856639e+11, "-4.43505E+11", "%G"},
+ {__LINE__, -4.445045573007259e-27, "-4.445e-27", "%.5g"},
+ {__LINE__, -4.447791368960968e-25, " -4e-25", "%+7.g"},
+ {__LINE__, -4.449691386526521e-11, "-4.44969e-11", "%g"},
+ {__LINE__, -4.451399093849402e+06, "-4.e+06", "%#0.e"},
+ {__LINE__, -4.453753130320864e-22, "-4E-22", "%6.E"},
+ {__LINE__, -4.455910780463539e+00, "-4", "%2.g"},
+ {__LINE__, -4.464935674747308e+25, "-4.46494e+25", "%g"},
+ {__LINE__, -4.469759565657550e-29, "-4.46976e-29", "%g"},
+ {__LINE__, -4.473254139442931e+14, "-4E+14", "%3.1G"},
+ {__LINE__, -4.480844704930373e-04, "-0.000448", "%5.6f"},
+ {__LINE__, -4.484177356024563e+19, "-4.484177E+19", "%E"},
+ {__LINE__, -4.488115678357666e-13, "-4.48812e-13", "%g"},
+ {__LINE__, -4.491545112281561e+12, "-4.491545E+12", "%E"},
+ {__LINE__, -4.492547433553077e-23, "-4.49255e-23", "%g"},
+ {__LINE__, -4.492701755830813e-05, "-0.000045", "%f"},
+ {__LINE__, -4.497405935096372e-02, "-4.497406e-02", "%e"},
+ {__LINE__, -4.502764260212887e+21, "-4.50276E+21", "%G"},
+ {__LINE__, -4.511984199938207e+29, "-451198419993820731832556703011.505306", "%f"},
+ {__LINE__, -4.514517861504637e-13, "-4.51452e-13", "%g"},
+ {__LINE__, -4.525577218881990e+24, "-4.5e+24", "%2.2g"},
+ {__LINE__, -4.549244580903896e-26, "-5E-26", "%2.G"},
+ {__LINE__, -4.569192488002113e-29, "-5E-29", "%3.G"},
+ {__LINE__, -4.572011438847734e+17, "-4.57e+17", "%#.3g"},
+ {__LINE__, -4.573010973514519e-08, "-4.57301e-08", "%+7g"},
+ {__LINE__, -4.584534976177852e-04, "-0.000458453", "%7g"},
+ {__LINE__, -4.584729895132228e-21, "-0.000000", "%4f"},
+ {__LINE__, -4.585259328217483e-30, "-4.58526E-30", "%+#4.6G"},
+ {__LINE__, -4.589603063610410e-04, "-4.589603E-04", "%+E"},
+ {__LINE__, -4.592428795671033e+22, " -5e+22", "%7.g"},
+ {__LINE__, -4.595683678223830e-20, " -0", "%5.f"},
+ {__LINE__, -4.602585606100101e+05, "-4.602586E+05", "%E"},
+ {__LINE__, -4.603375306660027e-08, "-5E-08", "%+6.G"},
+ {__LINE__, -4.611341343728034e-18, "-4.611341e-18", "%5e"},
+ {__LINE__, -4.613608487855863e+05, "-461361", "%6g"},
+ {__LINE__, -4.615997775774194e-24, "-4.61600e-24", "%#g"},
+ {__LINE__, -4.620310950564759e+23, "-462031095056475926696749", "%1.0f"},
+ {__LINE__, -4.620645693595563e-10, "-4.6206457e-10", "%.7e"},
+ {__LINE__, -4.621527706233292e-09, "-4.621528e-09", "%#e"},
+ {__LINE__, -4.625215210297273e-13, "-4.62522E-13", "%G"},
+ {__LINE__, -4.636755152220100e-29, "-0.000000", "%#f"},
+ {__LINE__, -4.641203877508087e+23, "-4.6412e+23", "%0g"},
+ {__LINE__, -4.648627249239175e+23, "-4.65E+23", "%+0.3G"},
+ {__LINE__, -4.662546890623409e-10, "-4.663E-10", "%.3E"},
+ {__LINE__, -4.664488650292317e-27, "-4.66449e-27", "%#g"},
+ {__LINE__, -4.668715685060282e+08, "-466871568.50603", "%.5f"},
+ {__LINE__, -4.673332851657081e-18, "-4.7e-18", "%#5.2g"},
+ {__LINE__, -4.683361436174074e+24, "-4.68e+24", "%#.2e"},
+ {__LINE__, -4.693748680461066e-01, "-0.469375", "%G"},
+ {__LINE__, -4.697110010549124e+23, "-4.69711E+23", "%G"},
+ {__LINE__, -4.710442739966989e+06, "-4.710443e+06", "%2e"},
+ {__LINE__, -4.713427678642280e-09, "-4.71343e-09", "%g"},
+ {__LINE__, -4.721999055940316e-04, "-4.721999e-04", "%#1e"},
+ {__LINE__, -4.724262200578540e+17, "-472426220057853996.081576", "%+f"},
+ {__LINE__, -4.733267644288093e+01, "-4.733268e+01", "%7e"},
+ {__LINE__, -4.742854711396110e-11, "-0.000000", "%f"},
+ {__LINE__, -4.757456106385936e+23, "-4.75746e+23", "%g"},
+ {__LINE__, -4.770895495642298e+27, "-4770895495642298200777986494.358629", "%2f"},
+ {__LINE__, -4.775073456318149e+29, "-4.775073E+29", "%#E"},
+ {__LINE__, -4.779997387204258e+17, "-4.78e+17", "%g"},
+ {__LINE__, -4.799264315770707e-23, "-4.799264E-23", "%+.7G"},
+ {__LINE__, -4.814277930599660e+10, "-5e+10", "%2.1g"},
+ {__LINE__, -4.818413387018612e+05, "-5e+05", "%.0g"},
+ {__LINE__, -4.818827195107612e-16, "-4.818827e-16", "%e"},
+ {__LINE__, -4.841524514024803e+21, "-4.84152E+21", "%G"},
+ {__LINE__, -4.860585077313477e+10, "-4.86059E+10", "%+G"},
+ {__LINE__, -4.870037451948589e+28, "-48700374519485887248038125107.996166", "%f"},
+ {__LINE__, -4.888835952705153e-28, "-4.888836E-28", "%+E"},
+ {__LINE__, -4.893523355754114e-19, "-4.893523e-19", "%.6e"},
+ {__LINE__, -4.906070260482585e+17, "-490607026048258454", "%+.0f"},
+ {__LINE__, -4.907734144101900e+25, "-5E+25", "%+.1G"},
+ {__LINE__, -4.917899547741841e-25, "-4.917900e-25", "%e"},
+ {__LINE__, -4.923348512538722e+25, "-49233485125387215219916470.232420", "%+.6f"},
+ {__LINE__, -4.926052630078460e-26, "-4.926053e-26", "%e"},
+ {__LINE__, -4.926751662051156e+14, "-4.927E+14", "%+5.3E"},
+ {__LINE__, -4.928017952199046e-12, "-0.000000", "%f"},
+ {__LINE__, -4.944296782981195e-21, "-4.9443E-21", "%1.5G"},
+ {__LINE__, -4.947320427183599e-19, "-4.947320e-19", "%.6e"},
+ {__LINE__, -4.968188938972135e+17, "-4.96819E+17", "%G"},
+ {__LINE__, -4.968756725758674e+05, "-496876", "%G"},
+ {__LINE__, -4.968788759793340e-26, "-4.97E-26", "%.3G"},
+ {__LINE__, -4.983904999913364e-24, "-5E-24", "%0.G"},
+ {__LINE__, -4.985209496522767e+23, "-4.985209e+23", "%e"},
+ {__LINE__, -4.987363880732866e+08, "-4.98736E+08", "%G"},
+ {__LINE__, -4.989754940144973e+05, "-498975.494014", "%f"},
+ {__LINE__, -4.998203870733718e-25, "-4.9982e-25", "%g"},
+ {__LINE__, -4.999153445016792e-27, "-5e-27", "%+1.e"},
+ {__LINE__, -5.002693488258108e+06, " -5e+06", "%+7.g"},
+ {__LINE__, -5.017958458603783e+05, "-5.0179585E+05", "%+.7E"},
+ {__LINE__, -5.028902178573363e-12, "-5.0289e-12", "%0g"},
+ {__LINE__, -5.032337536971444e+07, "-50323375.369714", "%f"},
+ {__LINE__, -5.036525516370473e-24, "-5.0365e-24", "%4.5g"},
+ {__LINE__, -5.038642321515756e+18, "-5038642321515755639.893541", "%f"},
+ {__LINE__, -5.051003516976770e-14, "-5.051E-14", "%+G"},
+ {__LINE__, -5.051196143816789e+27, "-5.0512e+27", "%g"},
+ {__LINE__, -5.057372886713786e+28, "-5.057373e+28", "%#e"},
+ {__LINE__, -5.057475029459727e+12, "-5.05748e+12", "%+g"},
+ {__LINE__, -5.068286816124670e-17, "-5.068E-17", "%5.3E"},
+ {__LINE__, -5.070475165759468e-12, "-0.000000", "%4.6f"},
+ {__LINE__, -5.081352543220476e+20, "-5.081E+20", "%.3E"},
+ {__LINE__, -5.084398319179363e+11, "-508439831917.936313", "%#f"},
+ {__LINE__, -5.085781220648484e+05, "-5.E+05", "%+#7.G"},
+ {__LINE__, -5.094941054632498e-24, "-5.09494E-24", "%+G"},
+ {__LINE__, -5.100059596310871e-10, "-5.10006e-10", "%3.6g"},
+ {__LINE__, -5.103072553594136e-01, "-0.5", "%+1.g"},
+ {__LINE__, -5.106319890388412e+08, "-5.106320e+08", "%4e"},
+ {__LINE__, -5.107120687977690e+09, "-5107120687.977690", "%f"},
+ {__LINE__, -5.119910716893161e-13, "-5.11991E-13", "%6G"},
+ {__LINE__, -5.127594569425709e-29, "-5.12759e-29", "%#g"},
+ {__LINE__, -5.130365585632797e+29, "-5.13037e+29", "%#g"},
+ {__LINE__, -5.131415638022112e+08, "-513141563.802211", "%0f"},
+ {__LINE__, -5.144703216335916e-23, "-5.1447e-23", "%g"},
+ {__LINE__, -5.152511923201882e-05, "-5.15251E-05", "%+G"},
+ {__LINE__, -5.165484448280190e-12, " -0.0", "%5.1f"},
+ {__LINE__, -5.179220760465737e-20, "-5e-20", "%+5.g"},
+ {__LINE__, -5.183005119662180e-10, "-5.183005E-10", "%+E"},
+ {__LINE__, -5.199587953258117e+13, "-5.19959e+13", "%6g"},
+ {__LINE__, -5.202041951844580e-25, "-0.000000", "%f"},
+ {__LINE__, -5.202836038621740e+00, "-5.20284", "%G"},
+ {__LINE__, -5.212204099528552e-11, "-5.2122e-11", "%.6g"},
+ {__LINE__, -5.225617726710534e+17, "-522561772671053414.995868", "%+f"},
+ {__LINE__, -5.230162003281426e+25, "-52301620032814257754694153.84578", "%+6.5f"},
+ {__LINE__, -5.251849429321286e-11, "-5.25185e-11", "%g"},
+ {__LINE__, -5.265174939930368e+23, "-5.265175E+23", "%1.6E"},
+ {__LINE__, -5.271218134351422e+21, "-5.27122e+21", "%+1g"},
+ {__LINE__, -5.273823357545750e+17, "-527382335754575048.980541", "%f"},
+ {__LINE__, -5.279848797214957e+11, "-527984879721.495659", "%0f"},
+ {__LINE__, -5.281551888625290e+11, "-5e+11", "%4.g"},
+ {__LINE__, -5.281780377142961e-24, "-5.28178e-24", "%g"},
+ {__LINE__, -5.292125782379512e+03, "-5292.125782", "%f"},
+ {__LINE__, -5.292401691410388e+15, "-5292401691410387.520875", "%f"},
+ {__LINE__, -5.305120752102265e-25, "-5.30512e-25", "%+#.5e"},
+ {__LINE__, -5.317975791704413e+16, "-5.31798e+16", "%+g"},
+ {__LINE__, -5.336522843607233e+27, "-5.33652e+27", "%#6g"},
+ {__LINE__, -5.342016438000917e-05, " -5e-05", "%+7.e"},
+ {__LINE__, -5.351122291549103e+06, "-5351122.291549", "%+0f"},
+ {__LINE__, -5.352043956303597e+00, "-5.35204", "%g"},
+ {__LINE__, -5.353582488767747e+09, "-5.354E+09", "%7.3E"},
+ {__LINE__, -5.383420177718380e+04, "-5e+04", "%1.e"},
+ {__LINE__, -5.384320189791882e-10, "-5.384320e-10", "%e"},
+ {__LINE__, -5.409487543257379e-12, "-5.40949E-12", "%G"},
+ {__LINE__, -5.418395794776773e+23, "-5.4184e+23", "%g"},
+ {__LINE__, -5.419918795921525e-09, "-0.000000", "%+f"},
+ {__LINE__, -5.422374157832442e+11, "-5.42237e+11", "%3g"},
+ {__LINE__, -5.426916951577001e-27, "-5.42692E-27", "%+G"},
+ {__LINE__, -5.430058833461779e+28, "-5.43006E+28", "%G"},
+ {__LINE__, -5.444433348653147e+23, "-5.444433E+23", "%E"},
+ {__LINE__, -5.446560186537024e+09, "-5.446560E+09", "%E"},
+ {__LINE__, -5.464243500152188e+27, "-5.46424E+27", "%G"},
+ {__LINE__, -5.464427517531742e+20, "-546442751753174249529.365625", "%f"},
+ {__LINE__, -5.465783705970954e+05, "-5E+05", "%1.E"},
+ {__LINE__, -5.475138077475789e-11, "-5e-11", "%.0e"},
+ {__LINE__, -5.475302250616576e+10, "-54753022506.1658", "%.4f"},
+ {__LINE__, -5.488964905442472e+09, "-5.48896e+09", "%g"},
+ {__LINE__, -5.492508526846316e-08, "-5.49251e-08", "%.6g"},
+ {__LINE__, -5.520533408804846e-15, "-5.520533e-15", "%e"},
+ {__LINE__, -5.532744688447266e+28, "-55327446884472664123677532188.594341", "%2.6f"},
+ {__LINE__, -5.535834653450131e-14, "-5.5e-14", "%0.1e"},
+ {__LINE__, -5.554344735392882e-02, "-5.554345E-02", "%+#E"},
+ {__LINE__, -5.555497334515501e-17, "-5.5555e-17", "%g"},
+ {__LINE__, -5.558304303221977e+14, "-555830430322197.699411", "%f"},
+ {__LINE__, -5.562210815777694e-05, "-5.562211E-05", "%#1E"},
+ {__LINE__, -5.564800722538402e-09, "-5.56480e-09", "%#.6g"},
+ {__LINE__, -5.567143271590439e-01, "-5.567143e-01", "%#e"},
+ {__LINE__, -5.568606044396186e+01, "-55.6861", "%4g"},
+ {__LINE__, -5.592027856401721e+12, "-5.592028e+12", "%.7g"},
+ {__LINE__, -5.592295342565443e+22, "-6.E+22", "%#3.G"},
+ {__LINE__, -5.600007421926053e+07, "-56000074.219261", "%1f"},
+ {__LINE__, -5.601444553155006e-12, "-5.60144E-12", "%G"},
+ {__LINE__, -5.605128912835080e-03, "-0.005605", "%+f"},
+ {__LINE__, -5.610950285679577e+19, "-5.61095E+19", "%G"},
+ {__LINE__, -5.622074657679467e+11, "-562207465767.946690", "%f"},
+ {__LINE__, -5.627358352391656e-01, "-0.6", "%1.g"},
+ {__LINE__, -5.627974317622488e-02, "-5.627974e-02", "%+e"},
+ {__LINE__, -5.629497696447229e+27, "-5.629E+27", "%+.4G"},
+ {__LINE__, -5.631383567258576e-29, "-5.63138e-29", "%0g"},
+ {__LINE__, -5.635241327177333e-18, "-5.63524E-18", "%G"},
+ {__LINE__, -5.644819783138381e+06, "-5.644820E+06", "%#E"},
+ {__LINE__, -5.648538459114833e+26, "-564853845911483265496144667.849876", "%+f"},
+ {__LINE__, -5.649004865848537e+00, "-5.649", "%g"},
+ {__LINE__, -5.653403316885170e+23, "-6E+23", "%2.0E"},
+ {__LINE__, -5.656109962244926e-18, "-0.000000", "%f"},
+ {__LINE__, -5.674988031695793e+22, "-5.674988E+22", "%+.7G"},
+ {__LINE__, -5.686380226400881e-22, "-0.000000", "%f"},
+ {__LINE__, -5.698840855829442e-14, "-5.69884E-14", "%G"},
+ {__LINE__, -5.707036642649580e+03, "-5707.036643", "%f"},
+ {__LINE__, -5.710344882278847e+11, "-5.71034E+11", "%+G"},
+ {__LINE__, -5.714852196401017e+19, "-5.71485E+19", "%+G"},
+ {__LINE__, -5.720153622156089e-22, "-5.72015E-22", "%G"},
+ {__LINE__, -5.722366011976922e+26, "-5.72237e+26", "%+g"},
+ {__LINE__, -5.722909928097404e+12, "-5.72291E+12", "%2G"},
+ {__LINE__, -5.725325961787777e-25, "-5.72533e-25", "%g"},
+ {__LINE__, -5.727138241052646e+19, "-5.72714e+19", "%+#g"},
+ {__LINE__, -5.734025840446336e+14, "-5.73403e+14", "%+g"},
+ {__LINE__, -5.736469106710259e-05, "-0.000057", "%.6f"},
+ {__LINE__, -5.755099153733116e-14, "-5.7551e-14", "%+g"},
+ {__LINE__, -5.758411844890947e-20, "-6E-20", "%+6.G"},
+ {__LINE__, -5.760350214122813e+03, "-5760.35", "%+g"},
+ {__LINE__, -5.768009192512392e-30, "-0", "%1.f"},
+ {__LINE__, -5.772343286693103e+07, "-5.77234E+07", "%G"},
+ {__LINE__, -5.776693265471852e-27, "-5.776693E-27", "%E"},
+ {__LINE__, -5.779682861172754e-28, "-5.779683e-28", "%e"},
+ {__LINE__, -5.789953490749936e+26, "-578995349074993637117358957.76656", "%5.5f"},
+ {__LINE__, -5.796771264754334e+04, "-57967.7", "%g"},
+ {__LINE__, -5.804788370597286e-02, "-5.80479E-02", "%+#1.5E"},
+ {__LINE__, -5.805343475329215e-13, "-5.80534e-13", "%g"},
+ {__LINE__, -5.809853913830122e+09, "-5809853914", "%+0.f"},
+ {__LINE__, -5.817313814570609e-30, " -0", "%7.0f"},
+ {__LINE__, -5.831708441750138e+00, "-5.83171", "%#g"},
+ {__LINE__, -5.846914550593652e+29, "-5.846915e+29", "%e"},
+ {__LINE__, -5.851455214762288e+04, "-58514.6", "%+G"},
+ {__LINE__, -5.855803663871393e-23, "-6E-23", "%5.E"},
+ {__LINE__, -5.858065129988470e+10, "-5.85807e+10", "%+g"},
+ {__LINE__, -5.863147168075411e-14, "-5.86315e-14", "%+g"},
+ {__LINE__, -5.878936740266680e-04, "-0.000587894", "%g"},
+ {__LINE__, -5.887654893386630e+25, "-58876548933866299506689756.526612", "%#f"},
+ {__LINE__, -5.889416409731902e-02, "-0.06", "%5.g"},
+ {__LINE__, -5.897630195029892e-18, "-5.897630E-18", "%#0.7G"},
+ {__LINE__, -5.898506808456422e-19, "-5.89851E-19", "%G"},
+ {__LINE__, -5.901768645393515e+29, "-5.90177E+29", "%+G"},
+ {__LINE__, -5.907529093570369e+10, "-59075290935.703695", "%f"},
+ {__LINE__, -5.910069365260240e+13, "-59100693652602.39849", "%+#5.5f"},
+ {__LINE__, -5.915678929676435e-07, "-0.000001", "%+f"},
+ {__LINE__, -5.922232380131716e-01, "-0.592223", "%+3f"},
+ {__LINE__, -5.923716473994306e+19, "-5.92372E+19", "%+#.6G"},
+ {__LINE__, -5.929950428920404e-15, "-5.929950e-15", "%+e"},
+ {__LINE__, -5.949552735665802e+26, "-5.94955e+26", "%#g"},
+ {__LINE__, -5.949977081310732e-02, "-0.059500", "%f"},
+ {__LINE__, -5.954520303889356e-07, "-5.954520E-07", "%5E"},
+ {__LINE__, -5.978861337429145e-13, "-6E-13", "%1.G"},
+ {__LINE__, -5.980539445081087e+15, "-5.98054E+15", "%.6G"},
+ {__LINE__, -5.981724990853490e-03, " -0.006", "%#7.g"},
+ {__LINE__, -5.989488907825821e+03, "-6E+03", "%.2G"},
+ {__LINE__, -5.998272294890842e+06, "-6.00E+06", "%4.2E"},
+ {__LINE__, -6.023775731455919e-29, "-6.023776e-29", "%e"},
+ {__LINE__, -6.028153126666870e-05, "-6.e-05", "%+#6.e"},
+ {__LINE__, -6.036200621484690e+25, "-6e+25", "%2.2g"},
+ {__LINE__, -6.036400640928137e-14, "-6.036401e-14", "%e"},
+ {__LINE__, -6.038198451098329e-20, "-6.038198e-20", "%1.7g"},
+ {__LINE__, -6.045778975641123e-15, "-6.04578E-15", "%G"},
+ {__LINE__, -6.046038904252073e+00, "-6.04604", "%g"},
+ {__LINE__, -6.082158462782175e-06, "-0.000006", "%+#f"},
+ {__LINE__, -6.106162726644904e+10, "-6.10616e+10", "%g"},
+ {__LINE__, -6.126345215489182e+10, "-6e+10", "%+1.g"},
+ {__LINE__, -6.131852309620571e+02, "-6e+02", "%4.e"},
+ {__LINE__, -6.134589313243809e-01, "-0.613459", "%+#f"},
+ {__LINE__, -6.142358153783462e-10, "-6.14236E-10", "%4G"},
+ {__LINE__, -6.151524334856263e+27, "-6151524334856262932191839354.345575", "%+6f"},
+ {__LINE__, -6.156818333724550e+04, "-6.e+04", "%#.1g"},
+ {__LINE__, -6.166172551433993e+24, "-6166172551433993120895138.4178", "%5.4f"},
+ {__LINE__, -6.169532428006014e-09, "-6.16953e-09", "%3g"},
+ {__LINE__, -6.172019382601770e-28, "-0.000000", "%+f"},
+ {__LINE__, -6.174496985807155e-09, "-6.1745E-09", "%G"},
+ {__LINE__, -6.186771845105751e+04, "-61867.7", "%G"},
+ {__LINE__, -6.200817973780066e+22, "-6.20082E+22", "%3G"},
+ {__LINE__, -6.218004335456301e-22, "-0.000000", "%+f"},
+ {__LINE__, -6.219009630546262e-18, "-6.22e-18", "%6.3g"},
+ {__LINE__, -6.242532875230618e-06, "-0.000006", "%7f"},
+ {__LINE__, -6.243612261280864e+14, "-6.24361e+14", "%.6g"},
+ {__LINE__, -6.243689597320126e+10, "-6e+10", "%.0e"},
+ {__LINE__, -6.244620667090527e+04, "-6e+04", "%6.e"},
+ {__LINE__, -6.250789625572054e-09, "-0.000000", "%+f"},
+ {__LINE__, -6.253537566219164e+01, "-63.", "%#1.f"},
+ {__LINE__, -6.284420289484166e+21, "-6.2844203e+21", "%7.7e"},
+ {__LINE__, -6.285939888202846e+27, "-6e+27", "%+.0g"},
+ {__LINE__, -6.290025777678105e+13, "-6E+13", "%2.E"},
+ {__LINE__, -6.291364254323924e+10, "-6.3E+10", "%3.2G"},
+ {__LINE__, -6.292428812164449e+15, "-6292428812164448.714839", "%.6f"},
+ {__LINE__, -6.292600606358002e+29, "-6.29260E+29", "%#G"},
+ {__LINE__, -6.292739629144148e-15, "-6.292740E-15", "%E"},
+ {__LINE__, -6.296471626465745e+28, "-6.29647E+28", "%G"},
+ {__LINE__, -6.299575066640315e+27, "-6.300E+27", "%.3E"},
+ {__LINE__, -6.315234679394876e-24, "-6E-24", "%2.G"},
+ {__LINE__, -6.320883246383228e-01, "-0.632088", "%2g"},
+ {__LINE__, -6.324938413548937e-11, "-6e-11", "%.1g"},
+ {__LINE__, -6.336312983176250e+04, "-6.336313e+04", "%e"},
+ {__LINE__, -6.341786787214541e+06, "-6.341787E+06", "%+7.6E"},
+ {__LINE__, -6.360189291106185e-15, "-0.0000000", "%#.7f"},
+ {__LINE__, -6.364818355457748e-15, "-0.0000000", "%1.7f"},
+ {__LINE__, -6.366291103431814e+04, "-63662.9", "%#G"},
+ {__LINE__, -6.366334042923153e-05, "-6.37e-05", "%5.3g"},
+ {__LINE__, -6.370477455143194e-12, "-0.000000", "%f"},
+ {__LINE__, -6.372829256546279e+23, "-6.37283E+23", "%G"},
+ {__LINE__, -6.375208490193110e-23, "-6.37521e-23", "%4.5e"},
+ {__LINE__, -6.382595100891736e-24, "-6.3826E-24", "%5G"},
+ {__LINE__, -6.396882421146790e-22, "-6.39688e-22", "%+g"},
+ {__LINE__, -6.407190354039938e+08, "-6.40719e+08", "%+g"},
+ {__LINE__, -6.408581541430886e-10, "-6.E-10", "%#0.0G"},
+ {__LINE__, -6.409206904981703e-03, "-0.006", "%+.0G"},
+ {__LINE__, -6.416106714707772e+26, "-641610671470777216285341637.558304", "%f"},
+ {__LINE__, -6.417436981761998e-04, "-0.000642", "%+#f"},
+ {__LINE__, -6.429997249673124e+11, "-642999724967.312414", "%#f"},
+ {__LINE__, -6.440827429825250e+16, "-6.44083E+16", "%G"},
+ {__LINE__, -6.444869858444955e+02, "-6e+02", "%6.g"},
+ {__LINE__, -6.471701890976228e-25, " -6e-25", "%7.1g"},
+ {__LINE__, -6.485393161670371e-12, "-6.485393e-12", "%.6e"},
+ {__LINE__, -6.487710907063584e+23, "-6.E+23", "%#3.E"},
+ {__LINE__, -6.492942931343439e-08, "-0.", "%+#2.0f"},
+ {__LINE__, -6.496010652113223e+18, "-6.49601e+18", "%g"},
+ {__LINE__, -6.502856921840228e+22, "-6.50286e+22", "%4g"},
+ {__LINE__, -6.523559906055000e-10, "-6.52356E-10", "%.6G"},
+ {__LINE__, -6.525899074126662e+04, "-6.5e+04", "%+.1e"},
+ {__LINE__, -6.532216801155521e-09, "-6.53222E-09", "%G"},
+ {__LINE__, -6.544601787025684e-27, "-0", "%+.0f"},
+ {__LINE__, -6.558968312132168e-01, " -1", "%+6.f"},
+ {__LINE__, -6.559654261655786e+08, "-6.559654e+08", "%e"},
+ {__LINE__, -6.566562622196495e-21, "-6.56656E-21", "%.6G"},
+ {__LINE__, -6.573486832071960e+04, "-65734.9", "%G"},
+ {__LINE__, -6.573806290918275e+13, "-6.57381E+13", "%G"},
+ {__LINE__, -6.578113771674787e+17, "-6.57811E+17", "%+#G"},
+ {__LINE__, -6.584106931007506e+15, "-6.584107E+15", "%E"},
+ {__LINE__, -6.590538844308877e+07, "-65905388.443089", "%f"},
+ {__LINE__, -6.593708834068371e-07, "-0.000001", "%f"},
+ {__LINE__, -6.597116446195875e+08, "-6.5971164e+08", "%#1.7e"},
+ {__LINE__, -6.605813542127091e-04, "-0.0007", "%+0.g"},
+ {__LINE__, -6.607491403866429e+07, "-7e+07", "%3.g"},
+ {__LINE__, -6.616499847522278e+09, "-6.61650E+09", "%+#G"},
+ {__LINE__, -6.618619768691332e+20, "-7E+20", "%2.G"},
+ {__LINE__, -6.626748168962331e-22, "-7.E-22", "%+#3.E"},
+ {__LINE__, -6.639335450348280e+12, "-6.63934e+12", "%g"},
+ {__LINE__, -6.643910144912576e-03, "-0.006644", "%f"},
+ {__LINE__, -6.650293872031870e-18, "-6.65029e-18", "%+#g"},
+ {__LINE__, -6.654903858656310e-21, "-0.000000", "%f"},
+ {__LINE__, -6.665834666726511e-12, "-6.665835E-12", "%E"},
+ {__LINE__, -6.666428729917570e-19, "-0.000000", "%+#f"},
+ {__LINE__, -6.668415789681128e+27, "-6.66842E+27", "%+G"},
+ {__LINE__, -6.675214676269601e-28, "-6.67521e-28", "%#g"},
+ {__LINE__, -6.679560072732262e+01, "-66.7956", "%#g"},
+ {__LINE__, -6.692325075457020e-19, "-0.000000", "%1f"},
+ {__LINE__, -6.697096655164652e+00, "-6.70", "%#.3g"},
+ {__LINE__, -6.712436135928394e-28, "-7e-28", "%0.g"},
+ {__LINE__, -6.720769486122685e-16, "-7e-16", "%0.e"},
+ {__LINE__, -6.727196898490600e+26, "-672719689849060031860972230.8", "%.1f"},
+ {__LINE__, -6.744132627576416e+02, "-674.413", "%6G"},
+ {__LINE__, -6.757705576425288e+28, "-6.7577056e+28", "%.7e"},
+ {__LINE__, -6.760554929237173e-02, "-0.067606", "%+f"},
+ {__LINE__, -6.763538810629361e+10, "-6.7635E+10", "%.4E"},
+ {__LINE__, -6.764712008860796e-29, "-6.76471E-29", "%+G"},
+ {__LINE__, -6.767299719678443e+04, "-67672.997197", "%f"},
+ {__LINE__, -6.768326491352134e+20, "-676832649135213415547.70", "%+.2f"},
+ {__LINE__, -6.771116968952891e+03, "-7E+03", "%3.1G"},
+ {__LINE__, -6.775218099238350e-30, "-7.e-30", "%+#6.g"},
+ {__LINE__, -6.782142689928918e-18, "-0.00", "%4.2f"},
+ {__LINE__, -6.795409770512149e+08, "-7E+08", "%+5.0G"},
+ {__LINE__, -6.820966157097271e+14, "-6.820966e+14", "%e"},
+ {__LINE__, -6.824972990592273e-22, "-0.00", "%+#1.2f"},
+ {__LINE__, -6.830452914741750e+29, "-6.8E+29", "%+7.2G"},
+ {__LINE__, -6.835797187132348e+10, "-6.8358E+10", "%+5G"},
+ {__LINE__, -6.837040829636343e-03, "-0.00683704", "%+g"},
+ {__LINE__, -6.852956218658224e+23, "-6.85296e+23", "%3g"},
+ {__LINE__, -6.854102607287217e-26, "-7e-26", "%5.e"},
+ {__LINE__, -6.865065870249438e+16, "-6.86507E+16", "%#G"},
+ {__LINE__, -6.884819522625523e-13, "-6.88482E-13", "%5G"},
+ {__LINE__, -6.916316600148513e-12, "-0.000000", "%f"},
+ {__LINE__, -6.925312418761560e-05, "-6.92531E-05", "%#G"},
+ {__LINE__, -6.929518694178331e+09, "-6929518694.178", "%#.3f"},
+ {__LINE__, -6.936008056682024e+02, "-6.936008E+02", "%E"},
+ {__LINE__, -6.944911117352400e+26, "-6.944911E+26", "%1.6E"},
+ {__LINE__, -6.945829492125162e+05, "-6.9e+05", "%+2.2g"},
+ {__LINE__, -6.946603162471856e-13, "-6.94660E-13", "%#G"},
+ {__LINE__, -6.947529440406653e+22, "-6.9475e+22", "%+6.5g"},
+ {__LINE__, -6.950167604854856e-30, "-0.000000", "%7f"},
+ {__LINE__, -6.958122319262799e-26, "-7E-26", "%+1.E"},
+ {__LINE__, -6.958978258390961e+16, "-6.95898E+16", "%+5.6G"},
+ {__LINE__, -6.963780466334008e-06, "-6.96378E-06", "%2G"},
+ {__LINE__, -6.965570896221966e+13, "-6.965571E+13", "%5E"},
+ {__LINE__, -6.967741871945064e-10, "-6.96774E-10", "%+#G"},
+ {__LINE__, -6.973815739524307e+19, "-69738157395243067782.076", "%6.3f"},
+ {__LINE__, -6.982714545008106e+13, "-6.98271e+13", "%g"},
+ {__LINE__, -6.985955885054476e+03, "-6985.96", "%6G"},
+ {__LINE__, -6.986415266835747e+18, "-6.98642e+18", "%#g"},
+ {__LINE__, -6.996461529596512e-08, "-7.0E-08", "%#.1E"},
+ {__LINE__, -7.000144914012241e-05, "-7.00014e-05", "%#g"},
+ {__LINE__, -7.001017894492730e-03, "-0.00700102", "%+#.6G"},
+ {__LINE__, -7.003690685875917e+20, "-7E+20", "%0.G"},
+ {__LINE__, -7.010454163965384e+00, "-7.010454e+00", "%+e"},
+ {__LINE__, -7.011493550018082e-26, " -0", "%7.f"},
+ {__LINE__, -7.018018443394008e+21, "-7.0E+21", "%+#1.1E"},
+ {__LINE__, -7.027253777387243e-05, "-7.02725E-05", "%+G"},
+ {__LINE__, -7.043679213677740e-17, "-0", "%1.f"},
+ {__LINE__, -7.051690489227881e-16, "-7.052e-16", "%0.4g"},
+ {__LINE__, -7.063422475274161e-16, "-7.063422E-16", "%E"},
+ {__LINE__, -7.065069592235558e-30, "-7.06507e-30", "%+#g"},
+ {__LINE__, -7.068265283935834e-29, "-7e-29", "%+5.e"},
+ {__LINE__, -7.068748224536295e-13, "-0.000000", "%f"},
+ {__LINE__, -7.069621910708177e-04, "-0.000707", "%1.3g"},
+ {__LINE__, -7.079725450964823e-12, "-0.000000", "%f"},
+ {__LINE__, -7.087255464668218e+17, "-7.1e+17", "%.1e"},
+ {__LINE__, -7.088715102009605e-09, "-7e-09", "%6.0g"},
+ {__LINE__, -7.090414916270137e-15, "-0.00000", "%.5f"},
+ {__LINE__, -7.091868311008428e-03, " -0.0", "%5.1f"},
+ {__LINE__, -7.094242165237718e+21, "-7.09424e+21", "%+g"},
+ {__LINE__, -7.094324305740325e-05, "-7E-05", "%+3.G"},
+ {__LINE__, -7.104544752289144e+04, "-71045.4", "%#g"},
+ {__LINE__, -7.105164644813694e-29, "-0.000000", "%+f"},
+ {__LINE__, -7.114513164219487e-12, "-7.11451e-12", "%+g"},
+ {__LINE__, -7.115778236604137e-12, "-7.11578E-12", "%G"},
+ {__LINE__, -7.126217683410162e-27, "-7.126218e-27", "%e"},
+ {__LINE__, -7.136214260967733e+28, "-71362142609677334803564008325.338364", "%f"},
+ {__LINE__, -7.143452595522573e+19, "-7.14345e+19", "%g"},
+ {__LINE__, -7.156042088843537e+27, "-7156042088843537207765166385.7977837", "%4.7f"},
+ {__LINE__, -7.173687683710490e+24, "-7.17369e+24", "%6g"},
+ {__LINE__, -7.190531162598206e+25, "-71905311625982060164119503", "%4.f"},
+ {__LINE__, -7.201301831373747e-09, "-7.2013e-09", "%g"},
+ {__LINE__, -7.209601436737306e+10, "-7.2096e+10", "%g"},
+ {__LINE__, -7.211058997356655e-06, "-7.211059E-06", "%E"},
+ {__LINE__, -7.226756177676272e-09, "-7.22676E-09", "%+G"},
+ {__LINE__, -7.230870817566419e+19, "-72308708175664193618.1040364", "%#.7f"},
+ {__LINE__, -7.231355992133345e-05, "-7.231356E-05", "%#E"},
+ {__LINE__, -7.245999575278407e-12, "-7.246e-12", "%g"},
+ {__LINE__, -7.247426403040390e-09, "-7.2474E-09", "%+4.5G"},
+ {__LINE__, -7.257348680308567e-12, "-7.3E-12", "%1.2G"},
+ {__LINE__, -7.258184256387366e-26, "-7.25818E-26", "%+2G"},
+ {__LINE__, -7.262633672900126e+10, "-7.26263e+10", "%#g"},
+ {__LINE__, -7.268887462426250e+03, "-7.268887e+03", "%+#e"},
+ {__LINE__, -7.275284494682963e+08, "-7.27528e+08", "%g"},
+ {__LINE__, -7.276335846256479e-07, " -0", "%4.f"},
+ {__LINE__, -7.312556378294452e+15, "-7.31256e+15", "%+6g"},
+ {__LINE__, -7.334763752442417e-15, "-0.0000", "%#.4f"},
+ {__LINE__, -7.354627097325888e-18, "-7E-18", "%0.E"},
+ {__LINE__, -7.360087573342401e-25, "-7.4E-25", "%6.2G"},
+ {__LINE__, -7.368533563361098e-29, "-7.4E-29", "%3.1E"},
+ {__LINE__, -7.379267723540596e-06, "-0.000007", "%f"},
+ {__LINE__, -7.384525781709565e-19, "-0.000000", "%+#f"},
+ {__LINE__, -7.388940868679677e-09, "-7.388941E-09", "%E"},
+ {__LINE__, -7.391602149099698e+00, "-7.391602E+00", "%E"},
+ {__LINE__, -7.393159340196723e+22, "-7.39316e+22", "%#2.6g"},
+ {__LINE__, -7.399783260198277e-16, "-7.39978E-16", "%G"},
+ {__LINE__, -7.405609590448331e-06, "-7.40561e-06", "%g"},
+ {__LINE__, -7.407396977847794e-11, "-7.40740E-11", "%#G"},
+ {__LINE__, -7.433716848698637e+20, "-7.43372e+20", "%+g"},
+ {__LINE__, -7.444176062769411e-01, "-0.744418", "%#g"},
+ {__LINE__, -7.448314697244012e+12, "-7448314697244.011739", "%f"},
+ {__LINE__, -7.449533988369018e+08, "-7.449534e+08", "%+#7e"},
+ {__LINE__, -7.465682839758801e-01, "-7E-01", "%4.E"},
+ {__LINE__, -7.466517843126368e-26, "-7.5E-26", "%.1E"},
+ {__LINE__, -7.471385785539900e+24, "-7471385785539899515583783.795591", "%f"},
+ {__LINE__, -7.478345583780341e+00, "-7.478346e+00", "%e"},
+ {__LINE__, -7.524759284626724e-06, "-7.52476e-06", "%2g"},
+ {__LINE__, -7.534831049342539e-19, "-7.53483E-19", "%G"},
+ {__LINE__, -7.540546673179273e+15, "-8e+15", "%.1g"},
+ {__LINE__, -7.543440436184003e-08, "-7.54344E-08", "%6G"},
+ {__LINE__, -7.558224240835564e-06, "-7.55822e-06", "%g"},
+ {__LINE__, -7.564132915154469e+23, "-756413291515446850610260.298708", "%+f"},
+ {__LINE__, -7.566590720355392e+15, "-7.566591e+15", "%1.6e"},
+ {__LINE__, -7.568565927479741e-01, "-7.568566e-01", "%#6e"},
+ {__LINE__, -7.615574141973305e-17, "-7.6156e-17", "%+.5g"},
+ {__LINE__, -7.641297631509318e-28, "-8e-28", "%+.1g"},
+ {__LINE__, -7.661227834163450e+09, "-7661227834.1634497", "%+#.7f"},
+ {__LINE__, -7.665934364070126e+11, "-766593436407.0", "%.1f"},
+ {__LINE__, -7.682500068463102e-27, "-0.000000", "%+#f"},
+ {__LINE__, -7.709363160273798e+15, "-7.70936e+15", "%g"},
+ {__LINE__, -7.712596019255238e+26, "-7.7e+26", "%.2g"},
+ {__LINE__, -7.730213358437991e+25, "-7.7e+25", "%6.2g"},
+ {__LINE__, -7.744420019068976e+05, "-7.74442E+05", "%.5E"},
+ {__LINE__, -7.745813181942296e+11, "-7.7458132e+11", "%+.7e"},
+ {__LINE__, -7.751004379716307e+16, "-7.751004e+16", "%e"},
+ {__LINE__, -7.759862226564527e-28, "-7.75986e-28", "%g"},
+ {__LINE__, -7.767838880221207e-27, "-7.76784e-27", "%g"},
+ {__LINE__, -7.776301142157532e-19, "-0", "%2.f"},
+ {__LINE__, -7.783944257077553e-14, "-8e-14", "%3.g"},
+ {__LINE__, -7.801587579382377e+28, "-8e+28", "%+0.g"},
+ {__LINE__, -7.806685979552780e+25, "-7.806686E+25", "%E"},
+ {__LINE__, -7.825968891331719e-05, "-7.82597E-05", "%G"},
+ {__LINE__, -7.826834158664018e+12, "-7.826834E+12", "%+#E"},
+ {__LINE__, -7.832536798726886e+24, "-7.83254E+24", "%#1G"},
+ {__LINE__, -7.840485340202362e-18, "-0.000000", "%.6f"},
+ {__LINE__, -7.843236212099233e+21, "-7.84324e+21", "%g"},
+ {__LINE__, -7.906644052019278e-13, "-7.906644E-13", "%E"},
+ {__LINE__, -7.908090440678874e-20, "-7.90809E-20", "%#G"},
+ {__LINE__, -7.917588593012283e+08, "-7.917589E+08", "%+E"},
+ {__LINE__, -7.929100086742454e+29, "-792910008674245414539427656563.930213", "%f"},
+ {__LINE__, -7.933235286034290e+26, "-7.933235E+26", "%E"},
+ {__LINE__, -7.943431966567875e-03, "-0.0079434", "%+.5g"},
+ {__LINE__, -7.950872643572970e-22, "-7.95087e-22", "%2g"},
+ {__LINE__, -7.971225555313069e-01, "-0.797123", "%f"},
+ {__LINE__, -7.978310272676090e-12, "-0.000000", "%#f"},
+ {__LINE__, -8.006805393896414e-29, "-8.00681E-29", "%G"},
+ {__LINE__, -8.006906303018830e+25, "-8.00691E+25", "%+G"},
+ {__LINE__, -8.008484654476057e+18, "-8.008485e+18", "%5.6e"},
+ {__LINE__, -8.008943512904249e+27, "-8008943512904249217854157905.0943", "%+.4f"},
+ {__LINE__, -8.016539743121665e+27, "-8.01654E+27", "%G"},
+ {__LINE__, -8.018247227006128e-05, " -8E-05", "%7.G"},
+ {__LINE__, -8.044391842561705e+21, "-8.04439e+21", "%g"},
+ {__LINE__, -8.081902305002036e-02, "-8.081902E-02", "%E"},
+ {__LINE__, -8.084193011936438e-03, "-0.0080842", "%+5.5g"},
+ {__LINE__, -8.105813534846529e-27, "-0.000000", "%f"},
+ {__LINE__, -8.128116892989251e+00, "-8.12812", "%G"},
+ {__LINE__, -8.136119035731877e+05, "-8e+05", "%+0.g"},
+ {__LINE__, -8.140584224052606e+14, "-8E+14", "%5.G"},
+ {__LINE__, -8.145928897003907e+13, "-8.15E+13", "%.3G"},
+ {__LINE__, -8.164495905907508e-02, "-0.081645", "%G"},
+ {__LINE__, -8.169602113313905e+20, "-8.16960e+20", "%#g"},
+ {__LINE__, -8.179181640418333e+24, "-8.E+24", "%#.1G"},
+ {__LINE__, -8.184324492264231e-18, "-8.18432E-18", "%G"},
+ {__LINE__, -8.186480473850516e-28, "-0.000000", "%+f"},
+ {__LINE__, -8.196858948158896e+07, "-8.1969E+07", "%.4E"},
+ {__LINE__, -8.213138534699043e-30, "-0.000000", "%f"},
+ {__LINE__, -8.221181368676532e-21, "-8.221181E-21", "%#1E"},
+ {__LINE__, -8.222605734191438e+16, "-8.22261E+16", "%+G"},
+ {__LINE__, -8.223925661091432e-14, "-8.223926e-14", "%0e"},
+ {__LINE__, -8.232281541044777e-01, "-0.823228", "%f"},
+ {__LINE__, -8.245536794508725e+22, "-8E+22", "%6.G"},
+ {__LINE__, -8.270687365305925e+25, "-82706873653059247430974210.146815", "%f"},
+ {__LINE__, -8.288978945738204e+11, "-8.28898e+11", "%5g"},
+ {__LINE__, -8.290628698333139e+02, "-829.063", "%+G"},
+ {__LINE__, -8.292416206056451e-16, "-8.29242e-16", "%+g"},
+ {__LINE__, -8.296322623746486e-13, "-8.29632E-13", "%0.6G"},
+ {__LINE__, -8.298321941376933e-16, "-0.000000", "%+f"},
+ {__LINE__, -8.302331258878365e+29, "-8.30233E+29", "%0G"},
+ {__LINE__, -8.309022429255061e+06, "-8309022.429255", "%+f"},
+ {__LINE__, -8.312786829254646e-23, "-8.312787e-23", "%e"},
+ {__LINE__, -8.313852965178063e-15, "-8.313853e-15", "%#7e"},
+ {__LINE__, -8.317529094827869e+16, "-8.31753E+16", "%2G"},
+ {__LINE__, -8.322847660882248e-17, "-0.000000", "%f"},
+ {__LINE__, -8.324060602752638e-30, "-8.32406e-30", "%#g"},
+ {__LINE__, -8.325043500735461e+27, "-8325043500735461066142306663.095951", "%#f"},
+ {__LINE__, -8.332432016286935e-02, "-0.0833243", "%g"},
+ {__LINE__, -8.334251670232117e-09, "-8.33425e-09", "%g"},
+ {__LINE__, -8.338076225141778e+02, "-833.808", "%g"},
+ {__LINE__, -8.338349587571534e-23, "-8.33835e-23", "%+2g"},
+ {__LINE__, -8.342420812231939e+23, "-834242081223193920891390.00745", "%+0.5f"},
+ {__LINE__, -8.347404637940894e+17, "-8.347405e+17", "%+e"},
+ {__LINE__, -8.367002601133880e-12, "-0.000000", "%#2.6f"},
+ {__LINE__, -8.368579538210858e-17, "-8.36858e-17", "%5g"},
+ {__LINE__, -8.392398522472401e-10, "-0.0000", "%.4f"},
+ {__LINE__, -8.393029677635258e-29, " -8E-29", "%7.G"},
+ {__LINE__, -8.393843230819225e-11, "-8.393843E-11", "%E"},
+ {__LINE__, -8.397239871789148e-11, "-8.39724e-11", "%g"},
+ {__LINE__, -8.402316358199041e-29, "-0.000", "%3.3f"},
+ {__LINE__, -8.402910159034304e-14, "-8.4e-14", "%+0.3g"},
+ {__LINE__, -8.414960962391726e+09, "-8414960962.391726", "%#f"},
+ {__LINE__, -8.417512471384889e-28, "-8.417512e-28", "%e"},
+ {__LINE__, -8.418719240222911e+21, "-8418719240222911182058.851409", "%f"},
+ {__LINE__, -8.421210956044195e-09, "-0.00000", "%.5f"},
+ {__LINE__, -8.422001733529095e+24, "-8E+24", "%0.G"},
+ {__LINE__, -8.443614453772469e+21, "-8.44361E+21", "%+G"},
+ {__LINE__, -8.445883044175737e-19, "-0", "%+1.f"},
+ {__LINE__, -8.460545304711022e-01, "-0.846055", "%G"},
+ {__LINE__, -8.470462532754567e+12, "-8.47E+12", "%6.3G"},
+ {__LINE__, -8.478488782426476e-07, "-8.478489E-07", "%E"},
+ {__LINE__, -8.478657582923923e+09, "-8.5e+09", "%.2g"},
+ {__LINE__, -8.482732098043366e+12, "-8482732098043", "%5.f"},
+ {__LINE__, -8.489112373854447e+07, "-8.489e+07", "%#3.3e"},
+ {__LINE__, -8.494153144629106e+02, "-849.415", "%+g"},
+ {__LINE__, -8.496331191616493e+28, "-8E+28", "%+6.G"},
+ {__LINE__, -8.503711894495339e+05, "-850371", "%g"},
+ {__LINE__, -8.505271893964268e+14, "-8.505272E+14", "%E"},
+ {__LINE__, -8.509873985358741e+15, "-9.e+15", "%#7.g"},
+ {__LINE__, -8.518336897898081e-20, "-8.51834E-20", "%G"},
+ {__LINE__, -8.529588044136128e+21, "-8.529588E+21", "%E"},
+ {__LINE__, -8.539706586811079e-23, "-8.53971E-23", "%G"},
+ {__LINE__, -8.545924619642008e+10, "-8.545925e+10", "%6e"},
+ {__LINE__, -8.572893681637353e+09, "-8.57289E+09", "%G"},
+ {__LINE__, -8.585483717692345e+29, "-8.58548E+29", "%+G"},
+ {__LINE__, -8.586092014292309e+27, "-8.59e+27", "%.2e"},
+ {__LINE__, -8.604716827086833e-26, "-8.60472e-26", "%g"},
+ {__LINE__, -8.621349224186615e-04, "-0.000862", "%f"},
+ {__LINE__, -8.626097065201103e-21, " -0", "%5.f"},
+ {__LINE__, -8.631700514212522e-16, "-8.631701E-16", "%+E"},
+ {__LINE__, -8.634703359975640e-09, "-0.000000", "%+5f"},
+ {__LINE__, -8.639393025443855e-17, "-8.63939e-17", "%g"},
+ {__LINE__, -8.640641942556812e-11, "-8.64064e-11", "%#g"},
+ {__LINE__, -8.646260250525495e-09, "-0.000", "%.3f"},
+ {__LINE__, -8.667322015806242e+09, "-8667322015.806242", "%+#f"},
+ {__LINE__, -8.690705655554451e+10, "-8.690706E+10", "%#E"},
+ {__LINE__, -8.714299893763934e-07, "-8.7143E-07", "%.5G"},
+ {__LINE__, -8.715729756264988e+27, "-8.71573E+27", "%+.6G"},
+ {__LINE__, -8.716518487180945e+16, "-9e+16", "%3.e"},
+ {__LINE__, -8.744404488756237e+25, "-87444044887562366596966967.335902", "%4f"},
+ {__LINE__, -8.754720498369242e+13, "-8.75472e+13", "%g"},
+ {__LINE__, -8.763198097931010e-19, "-8.76320e-19", "%#g"},
+ {__LINE__, -8.779007408852458e+28, "-8.77901E+28", "%G"},
+ {__LINE__, -8.794576202907937e+11, "-8.79458E+11", "%#2.6G"},
+ {__LINE__, -8.799091520612418e-11, "-8.799E-11", "%3.4G"},
+ {__LINE__, -8.799246265524921e+11, "-8.79925E+11", "%G"},
+ {__LINE__, -8.809010508550436e-04, "-8.8090E-04", "%.4E"},
+ {__LINE__, -8.817389999872653e-10, "-8.81739e-10", "%g"},
+ {__LINE__, -8.842022428985267e-28, "-8.842022E-28", "%E"},
+ {__LINE__, -8.851265987586864e-07, "-0.000001", "%f"},
+ {__LINE__, -8.861985131432196e+03, "-8861.985", "%+.7G"},
+ {__LINE__, -8.874449013455113e-29, "-8.874449e-29", "%e"},
+ {__LINE__, -8.878752609483453e+18, "-8.87875E+18", "%G"},
+ {__LINE__, -8.882501665315313e-04, "-0.00088825", "%+G"},
+ {__LINE__, -8.892056241505784e-14, "-8.89206E-14", "%G"},
+ {__LINE__, -8.895327674961603e-30, "-8.89533E-30", "%G"},
+ {__LINE__, -8.900059462213669e-30, "-8.900059E-30", "%+#E"},
+ {__LINE__, -8.957100548759815e+18, "-9e+18", "%3.0e"},
+ {__LINE__, -8.961352369869012e-30, "-8.961352e-30", "%+#2e"},
+ {__LINE__, -8.962296474587800e+02, "-896", "%4.f"},
+ {__LINE__, -8.962536469328530e-12, "-8.96254E-12", "%G"},
+ {__LINE__, -8.963299420391932e+21, "-8.9633e+21", "%g"},
+ {__LINE__, -8.967736672941522e-11, "-8.96774e-11", "%g"},
+ {__LINE__, -8.994077362462679e+11, "-8.9940774e+11", "%+#.7e"},
+ {__LINE__, -9.000452862345622e+15, "-9e+15", "%2.e"},
+ {__LINE__, -9.007489135361462e+07, "-9.0075E+07", "%+2.4E"},
+ {__LINE__, -9.036271805879910e+16, "-9.03627E+16", "%G"},
+ {__LINE__, -9.036319073700248e+22, "-9.03632e+22", "%1g"},
+ {__LINE__, -9.043207635989237e+11, "-9.043208e+11", "%#e"},
+ {__LINE__, -9.043856598625815e-26, "-9e-26", "%+1.g"},
+ {__LINE__, -9.052760561065698e+14, "-9.052761E+14", "%E"},
+ {__LINE__, -9.066480297957160e-06, "-9E-06", "%+1.G"},
+ {__LINE__, -9.070971376440752e-01, "-0.907097", "%g"},
+ {__LINE__, -9.073301831888273e+09, "-9.07330E+09", "%#G"},
+ {__LINE__, -9.091228662702147e+28, "-9E+28", "%4.G"},
+ {__LINE__, -9.093652024983832e+04, "-9.093652E+04", "%7.6E"},
+ {__LINE__, -9.098945831139295e-04, "-9.098946E-04", "%+1.6E"},
+ {__LINE__, -9.124981449916591e+05, "-912498", "%G"},
+ {__LINE__, -9.132038703003394e-02, "-0.0913204", "%#G"},
+ {__LINE__, -9.138271437433964e-04, "-0.000913827", "%5g"},
+ {__LINE__, -9.158186427463699e-04, "-0.000915819", "%g"},
+ {__LINE__, -9.160846358172526e+16, "-9.160846E+16", "%#E"},
+ {__LINE__, -9.160884330810163e+17, "-9E+17", "%+5.G"},
+ {__LINE__, -9.190271387375542e+21, "-9.19027e+21", "%+g"},
+ {__LINE__, -9.191651872412619e-04, "-9.191652E-04", "%E"},
+ {__LINE__, -9.196426161984341e-10, "-9E-10", "%4.G"},
+ {__LINE__, -9.201074139774962e+09, "-9E+09", "%4.G"},
+ {__LINE__, -9.223294284802762e+09, "-9.22329E+09", "%G"},
+ {__LINE__, -9.224740266754996e+02, "-9E+02", "%6.0G"},
+ {__LINE__, -9.231583780512302e-01, " -0.9", "%6.g"},
+ {__LINE__, -9.241998826543689e+07, "-92419988", "%1.f"},
+ {__LINE__, -9.243603351372128e+27, "-9.243603e+27", "%#e"},
+ {__LINE__, -9.255922697415071e+11, "-9.25592e+11", "%g"},
+ {__LINE__, -9.265734968114124e-02, "-0.092657", "%f"},
+ {__LINE__, -9.273132068521061e+11, "-9.27313E+11", "%G"},
+ {__LINE__, -9.276017912826685e+27, "-9.E+27", "%+#5.G"},
+ {__LINE__, -9.279781279788505e+17, "-9.27978E+17", "%7G"},
+ {__LINE__, -9.305057549822465e-19, "-9.30506E-19", "%5G"},
+ {__LINE__, -9.313182384508469e+18, "-9.31318E+18", "%G"},
+ {__LINE__, -9.313350925182641e-12, "-9.31E-12", "%.3G"},
+ {__LINE__, -9.362202657509130e+08, "-9e+08", "%.1g"},
+ {__LINE__, -9.367344757598381e+19, "-9.36734e+19", "%g"},
+ {__LINE__, -9.374222399774300e+26, "-9.37422e+26", "%4g"},
+ {__LINE__, -9.385734023305105e+02, "-9.385734e+02", "%+0e"},
+ {__LINE__, -9.392042570618909e+17, "-9.39204E+17", "%G"},
+ {__LINE__, -9.395742939311926e+20, "-939574293931192627837.8451", "%.4f"},
+ {__LINE__, -9.409066155962469e+09, "-9.40907E+09", "%#G"},
+ {__LINE__, -9.412851077799790e+23, "-9.412851E+23", "%E"},
+ {__LINE__, -9.431808019049818e+08, "-9.43181e+08", "%g"},
+ {__LINE__, -9.465236900519924e-27, "-9.46524e-27", "%g"},
+ {__LINE__, -9.478330386415852e+17, "-9.478330e+17", "%e"},
+ {__LINE__, -9.510393719697428e+15, "-9.51039E+15", "%+G"},
+ {__LINE__, -9.534229599909890e-09, "-0.000000", "%f"},
+ {__LINE__, -9.541731189284823e-17, "-1.E-16", "%+#7.G"},
+ {__LINE__, -9.548861908445902e+24, "-9548861908445902102471336.547751", "%f"},
+ {__LINE__, -9.578447281451794e+14, "-957844728145179", "%5.f"},
+ {__LINE__, -9.580512736933464e+11, "-9.58051E+11", "%G"},
+ {__LINE__, -9.596838169770637e-28, "-1E-27", "%+6.G"},
+ {__LINE__, -9.597528852877852e-22, "-1e-21", "%2.1g"},
+ {__LINE__, -9.599943658427051e+02, "-9.599944E+02", "%E"},
+ {__LINE__, -9.603227991185260e-14, "-1E-13", "%+0.E"},
+ {__LINE__, -9.606818733892343e+08, "-960681873.389", "%1.3f"},
+ {__LINE__, -9.617442692720937e+16, "-9.61744E+16", "%G"},
+ {__LINE__, -9.628685516961109e+29, "-9.62869e+29", "%3g"},
+ {__LINE__, -9.638354750455226e-11, "-0.000000", "%f"},
+ {__LINE__, -9.644266379029137e+16, "-96442663790291369.707575", "%f"},
+ {__LINE__, -9.645563533575482e+06, "-1E+07", "%1.G"},
+ {__LINE__, -9.645993536742941e-29, "-9.64599e-29", "%+g"},
+ {__LINE__, -9.647147223548563e+00, "-9.647147e+00", "%e"},
+ {__LINE__, -9.671225879906396e-11, "-0", "%0.f"},
+ {__LINE__, -9.675000471729906e-09, "-9.675000E-09", "%E"},
+ {__LINE__, -9.683992878297159e-26, "-9.68e-26", "%2.2e"},
+ {__LINE__, -9.695491325144765e+10, "-9.69549E+10", "%#G"},
+ {__LINE__, -9.695661526907136e-24, " -0.", "%#6.f"},
+ {__LINE__, -9.703124881970338e+07, "-9.703e+07", "%0.4g"},
+ {__LINE__, -9.707701257031864e+26, "-970770125703186437249314622.022212", "%f"},
+ {__LINE__, -9.709879792694702e+09, "-9.709880E+09", "%E"},
+ {__LINE__, -9.736052226907940e+26, "-9.73605e+26", "%+#g"},
+ {__LINE__, -9.745037157520795e+07, "-9.74504e+07", "%#5.6g"},
+ {__LINE__, -9.757293950670832e-29, "-9.757E-29", "%0.4G"},
+ {__LINE__, -9.762126832689880e+12, "-9.76213E+12", "%G"},
+ {__LINE__, -9.801328150341989e-01, " -1", "%7.G"},
+ {__LINE__, -9.837332964629669e-20, "-9.83733E-20", "%0G"},
+ {__LINE__, -9.837790327283010e+23, "-1E+24", "%.1G"},
+ {__LINE__, -9.839636176463729e+23, "-9.83964E+23", "%#6.5E"},
+ {__LINE__, -9.841454250618272e+11, "-9.84E+11", "%+2.3G"},
+ {__LINE__, -9.852920805249280e-12, "-9.852921e-12", "%.7g"},
+ {__LINE__, -9.854092850182351e+12, "-9.85409e+12", "%0g"},
+ {__LINE__, -9.866796026839712e+02, "-9.9E+02", "%#.1E"},
+ {__LINE__, -9.867413260289803e-21, "-1e-20", "%.1g"},
+ {__LINE__, -9.882136052131983e-08, "-9.88214e-08", "%g"},
+ {__LINE__, -9.882755697941866e+20, "-9.882756E+20", "%E"},
+ {__LINE__, -9.897275811087050e+20, "-9.9E+20", "%0.3G"},
+ {__LINE__, -9.899860651812364e-04, "-9.899861e-04", "%e"},
+ {__LINE__, -9.906754113555550e-11, "-9.90675e-11", "%3g"},
+ {__LINE__, -9.926067557389940e+11, "-9.92607E+11", "%G"},
+ {__LINE__, -9.929638609014063e+17, "-992963860901406292.214233", "%1f"},
+ {__LINE__, -9.941214552193284e-24, "-0.000000", "%+#f"},
+ {__LINE__, -9.942875240256573e+14, "-9.942875e+14", "%+1e"},
+ {__LINE__, -9.944492909695798e-01, "-9.944E-01", "%.3E"},
+ {__LINE__, -9.954710507359939e-27, "-1e-26", "%+0.2g"},
+ {__LINE__, -9.955410507742851e+03, "-9955.41", "%+G"},
+ {__LINE__, -9.974437672251590e+02, "-997.444", "%#G"},
+ {__LINE__, -9.975683165288929e-26, "-9.97568E-26", "%6G"},
+ {__LINE__, 1.003827370583415e+06, "1003827.370583", "%3f"},
+ {__LINE__, 1.004189065268560e-27, "1.004189E-27", "%.7G"},
+ {__LINE__, 1.005840059175462e-28, "+1.00584E-28", "%+G"},
+ {__LINE__, 1.006586790090557e-12, "0.000000", "%#f"},
+ {__LINE__, 1.007598594773359e+18, "1.0076E+18", "%G"},
+ {__LINE__, 1.007902307001894e+29, "1.0079e+29", "%g"},
+ {__LINE__, 1.008607405036580e-15, "1.00861E-15", "%6G"},
+ {__LINE__, 1.008769102466771e+16, "+1.00877E+16", "%+G"},
+ {__LINE__, 1.009545698372534e-08, "+1E-08", "%+0.0G"},
+ {__LINE__, 1.010173673945099e-12, "+1.01017e-12", "%+#0g"},
+ {__LINE__, 1.011375000606627e+09, "1011375000.606627", "%f"},
+ {__LINE__, 1.011944652221650e+15, "1011944652221649.98", "%3.2f"},
+ {__LINE__, 1.013057788090379e-21, "0.000000", "%#f"},
+ {__LINE__, 1.014525729953198e+15, "1.01453e+15", "%3g"},
+ {__LINE__, 1.016760538234615e-21, "+1.016761E-21", "%+3E"},
+ {__LINE__, 1.017052611781237e-29, "0.000000", "%f"},
+ {__LINE__, 1.018471223361229e+14, "1.01847E+14", "%G"},
+ {__LINE__, 1.021646959220873e+15, "1021646959220872.6", "%4.1f"},
+ {__LINE__, 1.022304833976590e+27, "1.0223e+27", "%g"},
+ {__LINE__, 1.022500312067325e-12, "1.0225e-12", "%6g"},
+ {__LINE__, 1.023019285462627e-20, "0.000000", "%f"},
+ {__LINE__, 1.024192579400824e+06, "1.02419e+06", "%g"},
+ {__LINE__, 1.024517953555766e-28, "1.02452E-28", "%G"},
+ {__LINE__, 1.026673589339585e+21, "1.02667E+21", "%G"},
+ {__LINE__, 1.027231090958880e-19, "1.E-19", "%#3.G"},
+ {__LINE__, 1.028249904956487e-27, "1E-27", "%5.G"},
+ {__LINE__, 1.028570144661448e-28, "+1.02857E-28", "%+G"},
+ {__LINE__, 1.028934898454705e-13, "+1.028935E-13", "%+E"},
+ {__LINE__, 1.029071053545906e-26, "1.029071E-26", "%E"},
+ {__LINE__, 1.032672895881148e-30, "+1.032673E-30", "%+E"},
+ {__LINE__, 1.033502358979511e+06, "1.0335E+06", "%.5G"},
+ {__LINE__, 1.036790427717847e+19, "1e+19", "%4.g"},
+ {__LINE__, 1.037022928821648e+03, "1037.02", "%5g"},
+ {__LINE__, 1.040551683941284e+14, "1.04055E+14", "%G"},
+ {__LINE__, 1.044499252101308e-17, "1.044499E-17", "%E"},
+ {__LINE__, 1.045791899570889e+15, "+1.04579e+15", "%+g"},
+ {__LINE__, 1.048730383198703e+28, "1.049e+28", "%.4g"},
+ {__LINE__, 1.050654419882509e-18, "0.000000", "%f"},
+ {__LINE__, 1.052600569262127e-27, "+0.000", "%+2.3f"},
+ {__LINE__, 1.053213014784149e+15, "1E+15", "%4.G"},
+ {__LINE__, 1.057553916225948e-15, "+0.000000", "%+4f"},
+ {__LINE__, 1.058191244482453e+19, "1.058e+19", "%.3e"},
+ {__LINE__, 1.058746269793972e-26, "+1.1E-26", "%+.2G"},
+ {__LINE__, 1.058793271960762e-01, "+1.058793E-01", "%+4E"},
+ {__LINE__, 1.058869592738370e-19, "1.05887e-19", "%3g"},
+ {__LINE__, 1.060402312803008e+15, "1060402312803008.229025", "%f"},
+ {__LINE__, 1.061106284763095e+00, "1.061106", "%0f"},
+ {__LINE__, 1.061180160987467e+09, "1e+09", "%2.g"},
+ {__LINE__, 1.061181537176067e-06, "+1.06118e-06", "%+g"},
+ {__LINE__, 1.065021381771174e+20, "1.06502e+20", "%g"},
+ {__LINE__, 1.065464040401130e-16, "1.065464e-16", "%e"},
+ {__LINE__, 1.065573419819459e-05, "0.00001", "%.5f"},
+ {__LINE__, 1.066107764306644e+13, "1.066108e+13", "%#e"},
+ {__LINE__, 1.071318759598956e+12, "1.071319e+12", "%e"},
+ {__LINE__, 1.071564727222321e+10, "1.072E+10", "%3.4G"},
+ {__LINE__, 1.074652481218139e+14, "1.0747E+14", "%.4E"},
+ {__LINE__, 1.078453684911309e-02, "0.0107845", "%g"},
+ {__LINE__, 1.078550811446675e-05, "1.07855e-05", "%g"},
+ {__LINE__, 1.078780494515273e-04, "0.000107878", "%4G"},
+ {__LINE__, 1.079467488876157e-16, "+1.079467E-16", "%+E"},
+ {__LINE__, 1.080529722917934e-20, "0.000000", "%f"},
+ {__LINE__, 1.082169127709439e+01, "10.8217", "%#5g"},
+ {__LINE__, 1.087241285590951e+22, "1E+22", "%4.G"},
+ {__LINE__, 1.091049208406195e-14, "0.0000", "%.4f"},
+ {__LINE__, 1.095316064213237e+16, "+1e+16", "%+0.g"},
+ {__LINE__, 1.095349083237975e-04, "1.095349e-04", "%5e"},
+ {__LINE__, 1.098002465452836e+12, "1098002465452.836205", "%f"},
+ {__LINE__, 1.098445764138997e+13, "1.09845E+13", "%G"},
+ {__LINE__, 1.099968047892474e-13, "1.1e-13", "%2.5g"},
+ {__LINE__, 1.101017598311363e-04, "0.000110102", "%G"},
+ {__LINE__, 1.102776332077817e+18, "1.103e+18", "%.3e"},
+ {__LINE__, 1.103734053887830e-01, "0.110373", "%f"},
+ {__LINE__, 1.105730106869006e-03, "0.00110573", "%g"},
+ {__LINE__, 1.106366781854058e-10, "1.10637e-10", "%g"},
+ {__LINE__, 1.107354763213839e+15, "1.107355e+15", "%6e"},
+ {__LINE__, 1.108151709609825e-10, "+1.10815E-10", "%+G"},
+ {__LINE__, 1.110054501993647e+21, "+1.11005E+21", "%+G"},
+ {__LINE__, 1.111574814737873e-17, "+1.112E-17", "%+1.4G"},
+ {__LINE__, 1.111865512360108e-15, "1E-15", "%.0G"},
+ {__LINE__, 1.112281568330498e-03, "1.112282e-03", "%.6e"},
+ {__LINE__, 1.112625415174238e+21, "+1.11263e+21", "%+g"},
+ {__LINE__, 1.112744974910395e-02, "0.011127", "%f"},
+ {__LINE__, 1.114726566979885e-10, "1.11473e-10", "%g"},
+ {__LINE__, 1.115395843055731e-20, "+0.000000", "%+6f"},
+ {__LINE__, 1.115983414693121e+15, "1.11598e+15", "%5.6g"},
+ {__LINE__, 1.116118842074266e+27, "1.116119e+27", "%e"},
+ {__LINE__, 1.118386983012328e+19, "11183869830123276400.968280", "%1f"},
+ {__LINE__, 1.119344607892718e-22, "1.119345e-22", "%e"},
+ {__LINE__, 1.120560837110279e-19, "0.000000", "%f"},
+ {__LINE__, 1.123620157906291e-02, "0.0112362", "%G"},
+ {__LINE__, 1.126804857639478e+29, "1.1268E+29", "%#0.5G"},
+ {__LINE__, 1.128962199461581e+11, "1.12896e+11", "%g"},
+ {__LINE__, 1.129878714246809e-16, "1E-16", "%0.0G"},
+ {__LINE__, 1.130331982972407e-06, "+0.", "%+#1.f"},
+ {__LINE__, 1.134167332070028e-16, "0", "%0.0f"},
+ {__LINE__, 1.134248080053598e-28, "0.000000", "%f"},
+ {__LINE__, 1.136023160708119e-10, "+0.000000", "%+1f"},
+ {__LINE__, 1.136167141059036e+23, "113616714105903593434732.101741", "%f"},
+ {__LINE__, 1.136439499920164e+10, "+1.13644E+10", "%+G"},
+ {__LINE__, 1.136859734932182e+24, "1.13686e+24", "%g"},
+ {__LINE__, 1.138985939448731e+09, "1.13899e+09", "%2g"},
+ {__LINE__, 1.139287324790407e-25, "1e-25", "%.1g"},
+ {__LINE__, 1.140559912153251e+06, "1.14056e+06", "%g"},
+ {__LINE__, 1.141318036027086e-26, "1.14132E-26", "%G"},
+ {__LINE__, 1.142586049368452e-20, "+1.14259E-20", "%+7.5E"},
+ {__LINE__, 1.143283863993333e-17, "1.143284E-17", "%3E"},
+ {__LINE__, 1.144637911632432e-28, "1.144638E-28", "%#3E"},
+ {__LINE__, 1.145791416532065e-10, "1.14579e-10", "%g"},
+ {__LINE__, 1.146958047315780e-17, "1.146958e-17", "%e"},
+ {__LINE__, 1.147898346886569e-08, "1E-08", "%3.0E"},
+ {__LINE__, 1.149724744965608e-14, "1.14972e-14", "%5g"},
+ {__LINE__, 1.155383721940441e-10, "1e-10", "%1.g"},
+ {__LINE__, 1.157066617729094e-02, "0", "%1.f"},
+ {__LINE__, 1.157893614537215e+05, "1.157894E+05", "%E"},
+ {__LINE__, 1.160476344451928e-19, "1.2e-19", "%.1e"},
+ {__LINE__, 1.161610499315966e-26, "1.161610E-26", "%E"},
+ {__LINE__, 1.162345042181490e+29, "116234504218148981813385489658.685401", "%5.6f"},
+ {__LINE__, 1.162376053722862e+23, "1.16238e+23", "%g"},
+ {__LINE__, 1.162996084782483e+18, "+1e+18", "%+0.g"},
+ {__LINE__, 1.163544861478966e+26, "1.16354E+26", "%G"},
+ {__LINE__, 1.167300137450931e+06, "1E+06", "%.0G"},
+ {__LINE__, 1.168693829096401e-30, "+1.16869e-30", "%+g"},
+ {__LINE__, 1.172791369381396e+15, "1.173E+15", "%.4G"},
+ {__LINE__, 1.174427110782028e-29, " 1E-29", "%7.G"},
+ {__LINE__, 1.179498322112450e+27, "1179498322112449759657692993.641831", "%f"},
+ {__LINE__, 1.179555606293547e+27, "1.17956e+27", "%3g"},
+ {__LINE__, 1.180815814881269e+06, "1.180816e+06", "%e"},
+ {__LINE__, 1.181494870072805e+20, "1.181495e+20", "%5e"},
+ {__LINE__, 1.181524119225619e+12, "+1181524119225.61917", "%+5.5f"},
+ {__LINE__, 1.182111212289243e-20, "1e-20", "%4.g"},
+ {__LINE__, 1.184503315019769e-27, "1.1845e-27", "%7g"},
+ {__LINE__, 1.186413646767670e+29, "1.18641e+29", "%g"},
+ {__LINE__, 1.186852938885004e-13, "1.18685e-13", "%4g"},
+ {__LINE__, 1.188837612473914e+05, "1e+05", "%.0g"},
+ {__LINE__, 1.190317482928293e-29, "1.190317e-29", "%e"},
+ {__LINE__, 1.190527491143987e+02, "1.190527E+02", "%E"},
+ {__LINE__, 1.191823062060233e-30, "1.2E-30", "%6.2G"},
+ {__LINE__, 1.191926974812428e-23, "1.2e-23", "%.2g"},
+ {__LINE__, 1.193549622366544e-25, "1E-25", "%4.1G"},
+ {__LINE__, 1.195517368629765e-21, "1.195517e-21", "%1.7g"},
+ {__LINE__, 1.195573061651289e-27, "1.19557e-27", "%#g"},
+ {__LINE__, 1.195806681188325e-03, "+0.00120", "%+#.3G"},
+ {__LINE__, 1.196842275192189e-28, "1.19684e-28", "%g"},
+ {__LINE__, 1.197307550969576e+04, "1.1973E+04", "%.4E"},
+ {__LINE__, 1.197608525847607e+15, "1197608525847606.8062805", "%4.7f"},
+ {__LINE__, 1.197801338159407e+04, "11978", "%5G"},
+ {__LINE__, 1.197813329735025e+27, "1.19781E+27", "%7G"},
+ {__LINE__, 1.199483904123253e-12, "1.19948e-12", "%g"},
+ {__LINE__, 1.199535292169766e-09, "1.199535e-09", "%e"},
+ {__LINE__, 1.201478067515135e+05, "120147.806752", "%f"},
+ {__LINE__, 1.202054662662158e+17, "1.20205E+17", "%#G"},
+ {__LINE__, 1.202111922368321e+07, "+1.202112E+07", "%+#E"},
+ {__LINE__, 1.202536892743791e-01, "0.120254", "%#g"},
+ {__LINE__, 1.205698674119882e-29, "1.2057E-29", "%G"},
+ {__LINE__, 1.208091664701942e-13, " 0.", "%#3.f"},
+ {__LINE__, 1.208942413954872e-17, "1.20894E-17", "%G"},
+ {__LINE__, 1.209704891496613e+10, "1.210e+10", "%2.3e"},
+ {__LINE__, 1.211355639334831e+29, "1E+29", "%.0G"},
+ {__LINE__, 1.211447553804203e+17, " 1E+17", "%7.E"},
+ {__LINE__, 1.212481583429790e-16, "1.212482e-16", "%e"},
+ {__LINE__, 1.212849001551862e+26, "121284900155186181613942153.4899157", "%6.7f"},
+ {__LINE__, 1.213057538677801e+06, "1213057.538678", "%#.6f"},
+ {__LINE__, 1.214609592911893e+25, "1.214610e+25", "%#e"},
+ {__LINE__, 1.216086266251665e+01, "1e+01", "%5.e"},
+ {__LINE__, 1.216468565931026e-22, "1.216469E-22", "%1E"},
+ {__LINE__, 1.216503126598765e+14, "+1E+14", "%+0.E"},
+ {__LINE__, 1.216641013695553e-14, "0.000000", "%f"},
+ {__LINE__, 1.223142246779504e-23, "0.000000", "%f"},
+ {__LINE__, 1.223884786443274e+08, "122388479", "%5.f"},
+ {__LINE__, 1.224012562770076e+29, "1.22401e+29", "%0g"},
+ {__LINE__, 1.225098157528297e+14, "1.22510e+14", "%#g"},
+ {__LINE__, 1.226306848505242e-22, "1.22631E-22", "%G"},
+ {__LINE__, 1.227487485547996e-08, "+1.22749e-08", "%+g"},
+ {__LINE__, 1.237206486909689e+02, "+123.721", "%+#.6g"},
+ {__LINE__, 1.240281126177077e-02, "+0.01", "%+3.g"},
+ {__LINE__, 1.241197211306994e-06, "1.241197E-06", "%E"},
+ {__LINE__, 1.241776311097410e+07, "1.241776E+07", "%E"},
+ {__LINE__, 1.245995986024999e-03, "0.001246", "%g"},
+ {__LINE__, 1.246082428199607e+03, "1246.082428", "%f"},
+ {__LINE__, 1.247021567954220e+05, " 1e+05", "%7.g"},
+ {__LINE__, 1.248140089618390e-30, "+1.24814E-30", "%+G"},
+ {__LINE__, 1.248403361652064e-30, "+0.000000", "%+f"},
+ {__LINE__, 1.251098538918842e-26, "+1.251099E-26", "%+E"},
+ {__LINE__, 1.251952633022061e+25, "1.25195e+25", "%g"},
+ {__LINE__, 1.253029705843461e-04, "+1.E-04", "%+#4.E"},
+ {__LINE__, 1.259562132729488e-09, "1e-09", "%1.e"},
+ {__LINE__, 1.261702205492260e-27, "0.000000", "%f"},
+ {__LINE__, 1.265910361926660e-19, "+1.265910e-19", "%+e"},
+ {__LINE__, 1.267411912651087e+12, "1.26741E+12", "%1G"},
+ {__LINE__, 1.267830718285980e-10, "1.26783e-10", "%g"},
+ {__LINE__, 1.268238378987517e-23, "1E-23", "%5.E"},
+ {__LINE__, 1.275543253354167e+10, "1.27554E+10", "%G"},
+ {__LINE__, 1.277255234454465e-10, "1.27726E-10", "%5G"},
+ {__LINE__, 1.280590949834150e-21, "1.280591E-21", "%E"},
+ {__LINE__, 1.285570453788242e-02, "1.285570E-02", "%E"},
+ {__LINE__, 1.287712130719031e+09, "1287712130.719031", "%#f"},
+ {__LINE__, 1.290142876187105e+29, "+1.290143E+29", "%+E"},
+ {__LINE__, 1.293129213191961e+21, "1.29313E+21", "%G"},
+ {__LINE__, 1.293317101334714e-23, "+0.000000", "%+f"},
+ {__LINE__, 1.294506813069071e-13, "0.0", "%3.1f"},
+ {__LINE__, 1.295576232685739e-22, "+0.000000", "%+f"},
+ {__LINE__, 1.296010470431800e-19, "+0.000000", "%+6f"},
+ {__LINE__, 1.298798231947674e+19, "1.2988E+19", "%2G"},
+ {__LINE__, 1.299521114379381e+09, "1.29952E+09", "%G"},
+ {__LINE__, 1.299847637892712e+24, "1.299848e+24", "%e"},
+ {__LINE__, 1.301269777843698e+29, "130126977784369834978406288428.232074", "%f"},
+ {__LINE__, 1.302911786437618e-15, " 0", "%6.f"},
+ {__LINE__, 1.303863159906719e+27, "1303863159906719415559450681", "%0.f"},
+ {__LINE__, 1.304396472326846e-12, "+1E-12", "%+1.0G"},
+ {__LINE__, 1.306180443528427e-30, "+1e-30", "%+.1g"},
+ {__LINE__, 1.308469138968514e+22, "1.30847E+22", "%0G"},
+ {__LINE__, 1.312700156826057e-11, "1.3127e-11", "%g"},
+ {__LINE__, 1.315364075120764e+21, "+1.31536E+21", "%+G"},
+ {__LINE__, 1.320376485288444e-09, "+1.3204E-09", "%+6.5G"},
+ {__LINE__, 1.321434154364635e-08, "1.32143e-08", "%1g"},
+ {__LINE__, 1.322777272579176e+19, "+1e+19", "%+3.e"},
+ {__LINE__, 1.322861663428564e+00, "1.322862E+00", "%#E"},
+ {__LINE__, 1.323566013489230e+14, "+1.323566E+14", "%+1E"},
+ {__LINE__, 1.327446904132973e-20, "+1.32745E-20", "%+4.6G"},
+ {__LINE__, 1.328226362528158e+19, "1e+19", "%2.g"},
+ {__LINE__, 1.329167460803610e+08, "1e+08", "%3.g"},
+ {__LINE__, 1.335371420823160e+14, "1.33537E+14", "%7G"},
+ {__LINE__, 1.336116185095935e-21, "0.000000", "%f"},
+ {__LINE__, 1.338766774704671e-22, "+1.33877e-22", "%+g"},
+ {__LINE__, 1.339199373014647e-12, "1E-12", "%1.E"},
+ {__LINE__, 1.344293357481519e+26, "134429335748151945750805680.290796", "%#2f"},
+ {__LINE__, 1.344328188122843e+29, "1.34433e+29", "%g"},
+ {__LINE__, 1.344382581316972e-05, "1E-05", "%5.0E"},
+ {__LINE__, 1.349835616116184e+11, "134983561611.6", "%2.1f"},
+ {__LINE__, 1.349955669989707e+20, "134995566998970728533.890906", "%7f"},
+ {__LINE__, 1.350230411093841e+20, "135023041109384145386.229648", "%f"},
+ {__LINE__, 1.353391369565576e+10, " 1E+10", "%7.1G"},
+ {__LINE__, 1.356889483699471e+22, "+1.35689E+22", "%+G"},
+ {__LINE__, 1.358141775798243e+24, "+1358141775798242578687791.137781", "%+f"},
+ {__LINE__, 1.358547541975523e-15, "1.35855e-15", "%g"},
+ {__LINE__, 1.363402539800791e+11, "1.3634E+11", "%G"},
+ {__LINE__, 1.363676837988798e+16, "+13636768379887982.4053", "%+2.4f"},
+ {__LINE__, 1.364592026494839e-24, "1.36459e-24", "%g"},
+ {__LINE__, 1.366664212399413e-09, "+1E-09", "%+6.G"},
+ {__LINE__, 1.367446193117463e-17, "1.3674e-17", "%2.4e"},
+ {__LINE__, 1.368681648785823e-18, "1.36868E-18", "%3G"},
+ {__LINE__, 1.370635189583606e+05, "1.370635E+05", "%E"},
+ {__LINE__, 1.371395540772186e-18, "+1.371396e-18", "%+e"},
+ {__LINE__, 1.371945318043159e+10, "1E+10", "%0.E"},
+ {__LINE__, 1.373780604772988e-21, "1e-21", "%3.g"},
+ {__LINE__, 1.374244970441862e-28, "0.000000", "%7.6f"},
+ {__LINE__, 1.375874695067149e-25, "1.37587E-25", "%#3G"},
+ {__LINE__, 1.377165614832621e+20, "1.37717E+20", "%#G"},
+ {__LINE__, 1.381541864946684e-09, "1.38154E-09", "%G"},
+ {__LINE__, 1.382901694835415e+00, "1.382902E+00", "%E"},
+ {__LINE__, 1.384250577530184e-21, "1.384e-21", "%.4g"},
+ {__LINE__, 1.385322753374640e-03, " 1E-03", "%6.E"},
+ {__LINE__, 1.387026156054724e+19, "1.387026E+19", "%E"},
+ {__LINE__, 1.388726735790498e-27, "+1.388727E-27", "%+E"},
+ {__LINE__, 1.388819105742044e+16, "1.38882e+16", "%g"},
+ {__LINE__, 1.389941086024951e-19, "0.000000", "%f"},
+ {__LINE__, 1.390101174785536e+25, "1.3901E+25", "%G"},
+ {__LINE__, 1.392210785638597e+24, "+1.39221E+24", "%+G"},
+ {__LINE__, 1.396148856283474e-26, "1.4e-26", "%7.3g"},
+ {__LINE__, 1.398153728631994e-21, "1.39815E-21", "%G"},
+ {__LINE__, 1.398332446762342e-14, "+1.39833E-14", "%+5G"},
+ {__LINE__, 1.400250919607987e+10, "1.40025E+10", "%G"},
+ {__LINE__, 1.400662469019739e+03, "1.E+03", "%#0.0E"},
+ {__LINE__, 1.401720273747805e-12, "0.000000", "%#f"},
+ {__LINE__, 1.402151358748719e+22, "1.402151e+22", "%e"},
+ {__LINE__, 1.402351913752357e-28, "1.40235E-28", "%#1.6G"},
+ {__LINE__, 1.403285877973810e+13, "+14032858779738.097255", "%+4f"},
+ {__LINE__, 1.404540981735861e+04, "14045.409817", "%4f"},
+ {__LINE__, 1.406420622355064e+19, "1.40642E+19", "%G"},
+ {__LINE__, 1.412552725962301e-29, "+1e-29", "%+1.e"},
+ {__LINE__, 1.413266982485044e+10, "1.41327e+10", "%g"},
+ {__LINE__, 1.413627189411456e+21, "1.41363E+21", "%0G"},
+ {__LINE__, 1.416647216002592e-25, "+0.000000", "%+#f"},
+ {__LINE__, 1.417107155080584e-10, "1e-10", "%1.e"},
+ {__LINE__, 1.418829895346648e+19, "14188298953466484952.912197", "%f"},
+ {__LINE__, 1.419404559267523e-11, "1.4194e-11", "%g"},
+ {__LINE__, 1.422421321425472e+15, "1.422421E+15", "%E"},
+ {__LINE__, 1.424858902008998e+18, "1.42486E+18", "%2.5E"},
+ {__LINE__, 1.428863051254205e+22, "1.428863e+22", "%e"},
+ {__LINE__, 1.429533727936725e-02, "0.0142953", "%g"},
+ {__LINE__, 1.430982219743369e-19, " 1E-19", "%6.G"},
+ {__LINE__, 1.431974118434703e+17, "1E+17", "%3.G"},
+ {__LINE__, 1.432418341970152e+16, "+1.432418e+16", "%+5e"},
+ {__LINE__, 1.433470281650523e+04, "14334.7", "%g"},
+ {__LINE__, 1.434446243424653e+24, " +1e+24", "%+7.g"},
+ {__LINE__, 1.435118019241039e+24, "+1e+24", "%+4.g"},
+ {__LINE__, 1.435691648420278e-01, "0.1435692", "%#4.7g"},
+ {__LINE__, 1.437569598098744e+27, "1.437570E+27", "%#E"},
+ {__LINE__, 1.437633484061726e-25, "+1.43763e-25", "%+7g"},
+ {__LINE__, 1.437866591230707e-13, "1.43787e-13", "%g"},
+ {__LINE__, 1.440593154445915e-01, "+0.144059", "%+1G"},
+ {__LINE__, 1.441368205977342e+16, "1.441368E+16", "%#E"},
+ {__LINE__, 1.441825266684367e+28, "1.44183e+28", "%g"},
+ {__LINE__, 1.442374183199456e+20, "1.442374E+20", "%E"},
+ {__LINE__, 1.445101893951061e-24, "0", "%0.f"},
+ {__LINE__, 1.446037835160094e-20, "+1.44604E-20", "%+2G"},
+ {__LINE__, 1.449245376093616e+04, "1.449245e+04", "%e"},
+ {__LINE__, 1.454126845620100e+09, "1.45413E+09", "%G"},
+ {__LINE__, 1.455764608801107e+09, "1.5e+09", "%6.1e"},
+ {__LINE__, 1.457176183149955e-12, "1.45718e-12", "%#g"},
+ {__LINE__, 1.458821535020046e-05, "1.45882e-05", "%#g"},
+ {__LINE__, 1.460179141161202e-19, "1.460179E-19", "%#E"},
+ {__LINE__, 1.461701055446198e-20, "1.461701e-20", "%#2.7g"},
+ {__LINE__, 1.462408181482172e+10, "1.4624082E+10", "%3.7E"},
+ {__LINE__, 1.463706296748154e+24, "1e+24", "%2.g"},
+ {__LINE__, 1.464891255780761e-19, "+1.46489e-19", "%+g"},
+ {__LINE__, 1.467903978945872e+25, "1.4679E+25", "%G"},
+ {__LINE__, 1.468585992857062e+22, "14685859928570619281629.205943", "%f"},
+ {__LINE__, 1.469803528668286e+29, "+1E+29", "%+6.G"},
+ {__LINE__, 1.469883002609266e-23, "1.E-23", "%#2.E"},
+ {__LINE__, 1.469941481858809e+08, "+146994148.185881", "%+f"},
+ {__LINE__, 1.470744493304611e+13, "1.47074e+13", "%g"},
+ {__LINE__, 1.471857261085004e+23, "1E+23", "%2.G"},
+ {__LINE__, 1.474419778873037e+06, "1474419.7789", "%#.4f"},
+ {__LINE__, 1.483134762223381e-03, "0", "%0.0f"},
+ {__LINE__, 1.483575501240724e-13, "1.48358e-13", "%g"},
+ {__LINE__, 1.486068112294452e+20, "1.486068e+20", "%e"},
+ {__LINE__, 1.488665528787761e-03, " +0", "%+4.f"},
+ {__LINE__, 1.492145267536713e+07, "14921452.675367", "%f"},
+ {__LINE__, 1.492589762884761e-01, "0.149259", "%f"},
+ {__LINE__, 1.494784286168215e+01, "1.494784E+01", "%E"},
+ {__LINE__, 1.495945331501655e+04, "1.5e+04", "%.2g"},
+ {__LINE__, 1.501383201904700e+14, "2e+14", "%1.g"},
+ {__LINE__, 1.501387105011959e-02, "0.0150139", "%g"},
+ {__LINE__, 1.505784488562271e+26, "1.50578e+26", "%5g"},
+ {__LINE__, 1.506367986495534e+10, "1.50637e+10", "%2g"},
+ {__LINE__, 1.507421710226296e+19, "1.507422E+19", "%#E"},
+ {__LINE__, 1.507960881206134e+16, "2e+16", "%.0g"},
+ {__LINE__, 1.508974301049424e+14, "+1.508974E+14", "%+E"},
+ {__LINE__, 1.509204025111090e-18, "1.509204E-18", "%E"},
+ {__LINE__, 1.511351799767759e+21, "1511351799767759462866.93397", "%.5f"},
+ {__LINE__, 1.511712197184520e-06, "+1.51171e-06", "%+1g"},
+ {__LINE__, 1.514703727491400e+02, "151.47", "%.5g"},
+ {__LINE__, 1.514855355408287e+04, "15148.6", "%g"},
+ {__LINE__, 1.516256896575301e+06, "1.516257e+06", "%.6e"},
+ {__LINE__, 1.517712083681069e+14, "1.51771e+14", "%0g"},
+ {__LINE__, 1.522102209167607e-18, "1.52210e-18", "%#g"},
+ {__LINE__, 1.526264862895663e-12, "0.000000", "%f"},
+ {__LINE__, 1.527165480858125e+10, "1.527e+10", "%.4g"},
+ {__LINE__, 1.528363280308369e+00, "+1.52836", "%+0G"},
+ {__LINE__, 1.529108490733420e-22, "1.529108E-22", "%E"},
+ {__LINE__, 1.529783364474522e+19, "15297833644745216119.531506", "%7f"},
+ {__LINE__, 1.530698363199346e-01, "0.1531", "%#.4f"},
+ {__LINE__, 1.531520796537450e+22, "1.53152E+22", "%G"},
+ {__LINE__, 1.533314559644813e+06, "+1533314.559645", "%+f"},
+ {__LINE__, 1.534682791112854e+01, "+15.3468", "%+0G"},
+ {__LINE__, 1.534714026386730e-11, "0.000000", "%f"},
+ {__LINE__, 1.537145729498115e+00, "1.537146E+00", "%E"},
+ {__LINE__, 1.538740040875751e-23, "1.538740E-23", "%E"},
+ {__LINE__, 1.546248240596482e-03, "0.001546", "%f"},
+ {__LINE__, 1.546808012239302e-09, "+1.54681E-09", "%+G"},
+ {__LINE__, 1.546903877359107e+06, "1.5e+06", "%.2g"},
+ {__LINE__, 1.550153973747718e-18, "2e-18", "%.0g"},
+ {__LINE__, 1.551703460384378e+00, "+1.5517", "%+.4f"},
+ {__LINE__, 1.553995673101369e+29, "1.554E+29", "%G"},
+ {__LINE__, 1.555477017531899e+28, "1.55548e+28", "%g"},
+ {__LINE__, 1.555548963448462e+12, "1555548963448.46227", "%6.5f"},
+ {__LINE__, 1.558702451007712e+16, "2e+16", "%5.1g"},
+ {__LINE__, 1.561641587723724e+29, "1.561642e+29", "%e"},
+ {__LINE__, 1.561868589559509e-05, "1.56187E-05", "%G"},
+ {__LINE__, 1.565229056438949e+13, "1.56523e+13", "%1.6g"},
+ {__LINE__, 1.570074406600442e+14, "+1.57007E+14", "%+4G"},
+ {__LINE__, 1.570951909913194e+13, "1.57095E+13", "%.6G"},
+ {__LINE__, 1.572186421520727e-30, "+1.57219e-30", "%+g"},
+ {__LINE__, 1.574374582066945e+12, "1.57e+12", "%5.2e"},
+ {__LINE__, 1.577789404823585e+12, "1.577789E+12", "%E"},
+ {__LINE__, 1.579641278389186e+04, "15796.413", "%7.3f"},
+ {__LINE__, 1.581602330975388e+17, "1.5816E+17", "%#.5G"},
+ {__LINE__, 1.587809692297490e-18, "+1.58781e-18", "%+2g"},
+ {__LINE__, 1.588672954832388e-05, "1.58867E-05", "%G"},
+ {__LINE__, 1.594548954259978e+25, "+1.595e+25", "%+.3e"},
+ {__LINE__, 1.596653742160718e+10, "15966537421.6072", "%.4f"},
+ {__LINE__, 1.597416186584641e+25, "1.59742e+25", "%g"},
+ {__LINE__, 1.597810706039500e-04, "0.000159781", "%g"},
+ {__LINE__, 1.601425691153542e+01, "16.0143", "%G"},
+ {__LINE__, 1.601491150913706e-15, "+1.60149e-15", "%+g"},
+ {__LINE__, 1.609357026469645e+02, "160.936", "%0g"},
+ {__LINE__, 1.611064881461188e+06, "+1.611065E+06", "%+E"},
+ {__LINE__, 1.611324319640770e-03, "0.00161132", "%G"},
+ {__LINE__, 1.613202907940803e+19, "1.6E+19", "%#.1E"},
+ {__LINE__, 1.613883500056636e-12, "0.000000", "%5f"},
+ {__LINE__, 1.618254213010772e+07, "16182542.130108", "%6f"},
+ {__LINE__, 1.620441271211248e-08, "1.62044E-08", "%0G"},
+ {__LINE__, 1.622548435024803e-01, "+0.162255", "%+5G"},
+ {__LINE__, 1.623740394555269e+19, "16237403945552689066.289531", "%3f"},
+ {__LINE__, 1.625774250389937e+18, "1.625774e+18", "%1e"},
+ {__LINE__, 1.626300864432426e-02, "0.016263", "%G"},
+ {__LINE__, 1.626351146877694e-11, "1.6263511e-11", "%2.7e"},
+ {__LINE__, 1.626568757587995e+25, "16265687575879949733348439.62220", "%6.5f"},
+ {__LINE__, 1.626717482094360e-28, "+1.626717e-28", "%+3e"},
+ {__LINE__, 1.630801585998995e-28, "1.6308e-28", "%0g"},
+ {__LINE__, 1.631827173682962e+03, "1632", "%1.4g"},
+ {__LINE__, 1.631907571243379e+18, "1631907571243378818.337533", "%f"},
+ {__LINE__, 1.632058420447239e-14, " +2E-14", "%+7.G"},
+ {__LINE__, 1.632847882621240e+18, "+1.63285E+18", "%+2G"},
+ {__LINE__, 1.637329146233172e-09, "+1.63733e-09", "%+g"},
+ {__LINE__, 1.638315287442427e-16, "+1.63832E-16", "%+G"},
+ {__LINE__, 1.641284849351445e+15, "1641284849351445.096488", "%f"},
+ {__LINE__, 1.644871927486929e+10, "2e+10", "%1.e"},
+ {__LINE__, 1.645917293047431e-19, "1.64592e-19", "%.6g"},
+ {__LINE__, 1.649201265647819e-07, "0.000000", "%f"},
+ {__LINE__, 1.650169065733559e+23, "165016906573355903731226.135278", "%3f"},
+ {__LINE__, 1.651217291298196e-30, "2E-30", "%4.G"},
+ {__LINE__, 1.652680660160331e+08, "2.e+08", "%#3.g"},
+ {__LINE__, 1.654171892948767e-15, "1.65417e-15", "%g"},
+ {__LINE__, 1.655435863725412e+17, "+1.655436e+17", "%+#e"},
+ {__LINE__, 1.656015606204101e+28, "+1.7E+28", "%+3.2G"},
+ {__LINE__, 1.656814723110478e-21, "+0.000000", "%+f"},
+ {__LINE__, 1.658632655199721e-19, "2.E-19", "%#4.G"},
+ {__LINE__, 1.659915061311444e+27, "1.66E+27", "%.3G"},
+ {__LINE__, 1.664258574522914e-29, "+1.664259E-29", "%+E"},
+ {__LINE__, 1.667662840654469e-28, "+2e-28", "%+0.g"},
+ {__LINE__, 1.673124993246863e-25, "+0.000000", "%+f"},
+ {__LINE__, 1.677788498058833e-20, "1.678e-20", "%.4g"},
+ {__LINE__, 1.681211731173386e-07, "1.68121e-07", "%0.6g"},
+ {__LINE__, 1.686341560076196e+02, "169", "%.0f"},
+ {__LINE__, 1.686507685287281e+08, "1.686508E+08", "%E"},
+ {__LINE__, 1.689500448795801e+03, "+1689.500449", "%+0f"},
+ {__LINE__, 1.690639426041009e-13, "2e-13", "%5.0g"},
+ {__LINE__, 1.691554939595928e+16, "+1.6916e+16", "%+.5g"},
+ {__LINE__, 1.698597126229626e-09, "1.699e-09", "%3.4g"},
+ {__LINE__, 1.700093083173516e+16, "17000930831735159", "%5.f"},
+ {__LINE__, 1.703653732982710e+13, "+1.70365e+13", "%+g"},
+ {__LINE__, 1.705353380573352e-16, "0.000000", "%f"},
+ {__LINE__, 1.705973328700179e-26, "1.70597e-26", "%5g"},
+ {__LINE__, 1.717797289369145e+22, "+1.717797E+22", "%+7E"},
+ {__LINE__, 1.722819196705361e-28, "1.722819E-28", "%1.7G"},
+ {__LINE__, 1.723775772891202e+01, "17.237758", "%f"},
+ {__LINE__, 1.723787102325353e-23, "0.000000", "%2f"},
+ {__LINE__, 1.724551301171870e-13, "0.000000", "%f"},
+ {__LINE__, 1.726098078655758e-20, "0.0000000", "%7.7f"},
+ {__LINE__, 1.726302822039762e+18, "+2E+18", "%+1.G"},
+ {__LINE__, 1.726659209108151e+18, "+1.72666E+18", "%+6G"},
+ {__LINE__, 1.728324925097269e-25, "1.728325e-25", "%7e"},
+ {__LINE__, 1.728357491215602e+02, "172.836", "%G"},
+ {__LINE__, 1.729612227517587e+22, "1.729612e+22", "%e"},
+ {__LINE__, 1.731753104740805e-06, "1.73175e-06", "%2g"},
+ {__LINE__, 1.736066279733589e+18, "+1.736066E+18", "%+3E"},
+ {__LINE__, 1.736626769480182e-19, "2e-19", "%.0g"},
+ {__LINE__, 1.737445267713118e-13, " 2e-13", "%7.g"},
+ {__LINE__, 1.739264683023077e+05, "173926.468302", "%f"},
+ {__LINE__, 1.739423702667596e-16, "+1.73942e-16", "%+g"},
+ {__LINE__, 1.741053616961658e-14, "1.74105E-14", "%G"},
+ {__LINE__, 1.741085952255057e+29, "1.7e+29", "%#.1e"},
+ {__LINE__, 1.743673705633426e+03, "2E+03", "%5.0G"},
+ {__LINE__, 1.750940899205665e+27, "1.75094e+27", "%g"},
+ {__LINE__, 1.753871003884151e-26, "0.", "%#.0f"},
+ {__LINE__, 1.755237470854478e-14, "1.755237e-14", "%4e"},
+ {__LINE__, 1.757491419837315e-03, "0.002", "%1.G"},
+ {__LINE__, 1.758657797688126e+26, "+1.75866E+26", "%+#G"},
+ {__LINE__, 1.760491452270889e+08, "1.76049E+08", "%G"},
+ {__LINE__, 1.760816275862939e-10, "2e-10", "%.1g"},
+ {__LINE__, 1.760905893493003e-22, "1.76e-22", "%.2e"},
+ {__LINE__, 1.762101125986743e-12, "2e-12", "%.0g"},
+ {__LINE__, 1.763855968659571e+27, "1.763856E+27", "%E"},
+ {__LINE__, 1.764595217341348e-13, "1.764595E-13", "%E"},
+ {__LINE__, 1.766737296048445e+08, "+1.77e+08", "%+.3g"},
+ {__LINE__, 1.769916386969961e-05, "+1.76992e-05", "%+g"},
+ {__LINE__, 1.773873506344176e-01, "1.773874e-01", "%e"},
+ {__LINE__, 1.775392554371421e+03, "+1775.39", "%+3.2f"},
+ {__LINE__, 1.776007623006870e+24, "1776007623006870161930237.372871", "%f"},
+ {__LINE__, 1.777418921678653e-27, " 0", "%6.f"},
+ {__LINE__, 1.780967607234234e-18, "1.780968E-18", "%E"},
+ {__LINE__, 1.782510583486435e+24, "+2e+24", "%+3.g"},
+ {__LINE__, 1.784002921603004e+14, "1.784E+14", "%G"},
+ {__LINE__, 1.784231151778382e+11, "1.7842E+11", "%.5G"},
+ {__LINE__, 1.785589091453195e+02, " 179.", "%#5.f"},
+ {__LINE__, 1.786402639400039e+19, "2e+19", "%0.g"},
+ {__LINE__, 1.786506485794647e-25, "2E-25", "%.1G"},
+ {__LINE__, 1.787513971482493e-04, "+0.000178751", "%+G"},
+ {__LINE__, 1.799765409320039e+23, "179976540932003885586710", "%6.0f"},
+ {__LINE__, 1.800451864218989e+08, "+1.80045e+08", "%+g"},
+ {__LINE__, 1.800743538258572e+04, " +18007", "%+7.f"},
+ {__LINE__, 1.801583764453362e+25, "1.8016e+25", "%0.5g"},
+ {__LINE__, 1.804502093739547e+14, "2e+14", "%2.g"},
+ {__LINE__, 1.805600104488678e-17, "1.805600E-17", "%E"},
+ {__LINE__, 1.811342448081048e+17, "1.811342e+17", "%.6e"},
+ {__LINE__, 1.812252160066930e+19, "2e+19", "%0.e"},
+ {__LINE__, 1.816287564395273e+02, "182", "%2.f"},
+ {__LINE__, 1.817097386762552e-13, "2E-13", "%3.1G"},
+ {__LINE__, 1.817881381387254e+06, "1.81788E+06", "%G"},
+ {__LINE__, 1.818416380830953e-30, "1.81842E-30", "%G"},
+ {__LINE__, 1.824788290177454e-23, "1.82479e-23", "%g"},
+ {__LINE__, 1.827832506678437e-18, "1.82783E-18", "%G"},
+ {__LINE__, 1.828048053242609e+01, "18.2805", "%g"},
+ {__LINE__, 1.828939681844203e-21, "1.82894E-21", "%.6G"},
+ {__LINE__, 1.829763900251753e+12, "1829763900251.752773", "%1f"},
+ {__LINE__, 1.833100407114602e-05, "0.000018", "%#f"},
+ {__LINE__, 1.833672780034284e-07, "1.833673e-07", "%e"},
+ {__LINE__, 1.834307692387540e+21, "2E+21", "%5.G"},
+ {__LINE__, 1.835119931666753e+14, "+1.835120e+14", "%+e"},
+ {__LINE__, 1.835956566920861e-26, "0.000000", "%#f"},
+ {__LINE__, 1.837784131899354e+22, "1.83778E+22", "%G"},
+ {__LINE__, 1.842867094224664e-09, "1.84287e-09", "%g"},
+ {__LINE__, 1.844234823805319e+28, "2E+28", "%1.G"},
+ {__LINE__, 1.844877682008962e+12, "1.84488e+12", "%g"},
+ {__LINE__, 1.846530424340488e-22, "1.846530e-22", "%#.7g"},
+ {__LINE__, 1.849111603036448e-08, "0.00", "%.2f"},
+ {__LINE__, 1.850158752678734e+04, "+18502", "%+.5G"},
+ {__LINE__, 1.851431391104701e-06, " +2e-06", "%+7.e"},
+ {__LINE__, 1.851487430609031e-04, "0.000185149", "%G"},
+ {__LINE__, 1.853171650128773e+03, "1853.17", "%G"},
+ {__LINE__, 1.854743263740068e-16, "1.854743E-16", "%6.6E"},
+ {__LINE__, 1.864399020932753e-11, "+0.000000", "%+f"},
+ {__LINE__, 1.865028568072397e-22, "1.86503E-22", "%.6G"},
+ {__LINE__, 1.868128423759223e+14, "1.86813E+14", "%4G"},
+ {__LINE__, 1.868453558435480e+21, "1.86845E+21", "%G"},
+ {__LINE__, 1.870663011627498e-06, "1.87E-06", "%.3G"},
+ {__LINE__, 1.873273487748907e+17, "+1.873273E+17", "%+E"},
+ {__LINE__, 1.878885220839805e-04, "0.000187889", "%G"},
+ {__LINE__, 1.879102515623569e+17, "1.8791e+17", "%g"},
+ {__LINE__, 1.889343972100858e-10, "2E-10", "%2.E"},
+ {__LINE__, 1.891833282879762e-24, "+2e-24", "%+.1g"},
+ {__LINE__, 1.895148778941240e-07, "0.000000", "%0f"},
+ {__LINE__, 1.896950834067578e-28, "+1.89695e-28", "%+#g"},
+ {__LINE__, 1.898464546986629e-05, "1.898465e-05", "%.7g"},
+ {__LINE__, 1.900851427578321e-19, "1.90085e-19", "%6g"},
+ {__LINE__, 1.901171344577750e+27, "1.901171e+27", "%7.7g"},
+ {__LINE__, 1.903563335316359e+02, "190.356", "%0g"},
+ {__LINE__, 1.903817306004701e-16, "+1.90e-16", "%+#6.2e"},
+ {__LINE__, 1.910606410246797e+21, "1.91061E+21", "%2.5E"},
+ {__LINE__, 1.912537759564710e+29, "1.91254E+29", "%G"},
+ {__LINE__, 1.913606675894566e+27, "1.91361E+27", "%7.6G"},
+ {__LINE__, 1.916473734025505e-05, " 2e-05", "%7.g"},
+ {__LINE__, 1.916507511720523e+23, "+2E+23", "%+.0E"},
+ {__LINE__, 1.917688262248837e-28, "1.918e-28", "%.4g"},
+ {__LINE__, 1.921375594217083e-12, "1.92138E-12", "%G"},
+ {__LINE__, 1.923916000932815e-25, "1.92392E-25", "%G"},
+ {__LINE__, 1.926303652776462e-01, "+0.2", "%+0.G"},
+ {__LINE__, 1.929411084211293e+21, "1.92941E+21", "%6G"},
+ {__LINE__, 1.929996820297491e-26, "1.93e-26", "%.6g"},
+ {__LINE__, 1.937301472034748e-29, "1.9373E-29", "%G"},
+ {__LINE__, 1.937301660220894e-11, "+1.9373E-11", "%+G"},
+ {__LINE__, 1.939038538587083e-02, "0.0193904", "%g"},
+ {__LINE__, 1.940575489112444e-09, "1.94058E-09", "%G"},
+ {__LINE__, 1.946550455606677e-26, "1.946550E-26", "%#1E"},
+ {__LINE__, 1.954250777559491e-14, "1.95425E-14", "%G"},
+ {__LINE__, 1.955646327688473e-16, "1.956E-16", "%#.3E"},
+ {__LINE__, 1.956999911995683e+20, "2E+20", "%2.G"},
+ {__LINE__, 1.959125254298784e-21, "1.95913E-21", "%#G"},
+ {__LINE__, 1.960330340481290e+26, "1.96033e+26", "%.6g"},
+ {__LINE__, 1.964156478075422e+01, "+19.6416", "%+g"},
+ {__LINE__, 1.964702507676036e+19, "2.0e+19", "%2.1e"},
+ {__LINE__, 1.965762191674409e-30, "2E-30", "%1.G"},
+ {__LINE__, 1.967492699686803e-29, "+1.967493E-29", "%+#E"},
+ {__LINE__, 1.970072604062236e-11, "+1.97007E-11", "%+G"},
+ {__LINE__, 1.975631055550387e+05, "197563.105555", "%.6f"},
+ {__LINE__, 1.975722425389177e+28, "+1.975722e+28", "%+5.6e"},
+ {__LINE__, 1.977938328895365e-05, " 2e-05", "%6.e"},
+ {__LINE__, 1.981950849019640e+13, "1.981951E+13", "%E"},
+ {__LINE__, 1.982543168856985e-26, "1.98254e-26", "%4g"},
+ {__LINE__, 1.984873317384181e-20, "1.98487E-20", "%4G"},
+ {__LINE__, 1.986146420877074e+02, "+1.986146e+02", "%+0e"},
+ {__LINE__, 1.986465942785167e-28, "1.98647e-28", "%g"},
+ {__LINE__, 1.988250323235468e-05, " +0", "%+7.f"},
+ {__LINE__, 1.989966623080645e-09, "1.989967e-09", "%e"},
+ {__LINE__, 1.991243122514519e+11, "199124312251", "%5.f"},
+ {__LINE__, 1.993287894645908e+25, "+1.993288E+25", "%+E"},
+ {__LINE__, 1.995172329888890e-30, "+1.99517e-30", "%+3g"},
+ {__LINE__, 1.997075127236432e+05, "1.997E+05", "%#.4G"},
+ {__LINE__, 2.000651599487290e+04, "2E+04", "%2.E"},
+ {__LINE__, 2.001429412876339e-28, "0.000000", "%6f"},
+ {__LINE__, 2.003535646264196e+03, " 2E+03", "%7.G"},
+ {__LINE__, 2.011751504116246e+06, "2E+06", "%2.G"},
+ {__LINE__, 2.016361237694652e-30, "2.01636e-30", "%4g"},
+ {__LINE__, 2.018266414065554e-08, "0.00", "%2.2f"},
+ {__LINE__, 2.020706780608565e+03, "2E+03", "%.0G"},
+ {__LINE__, 2.025098418552005e-16, "+2.025098E-16", "%+2E"},
+ {__LINE__, 2.026100592518976e-11, "2.026101e-11", "%6e"},
+ {__LINE__, 2.026167291572980e+11, "2.02617E+11", "%G"},
+ {__LINE__, 2.026782170272331e+07, "2.026782E+07", "%E"},
+ {__LINE__, 2.029133469449347e-06, " 2e-06", "%6.g"},
+ {__LINE__, 2.031191570768443e-20, "2.031192E-20", "%2.7G"},
+ {__LINE__, 2.031884221862863e-16, "2.031884e-16", "%e"},
+ {__LINE__, 2.032992924118323e+29, "203299292411832333016263874014.84", "%#0.2f"},
+ {__LINE__, 2.035799610097827e+28, "+20357996100978272835391180706.2104344", "%+3.7f"},
+ {__LINE__, 2.038008183612069e+25, "20380081836120691463065668", "%7.0f"},
+ {__LINE__, 2.041632205119365e-22, "+2.04163e-22", "%+g"},
+ {__LINE__, 2.042769811159352e-10, "2e-10", "%.1g"},
+ {__LINE__, 2.043034975847005e-08, "2.043035e-08", "%e"},
+ {__LINE__, 2.045930666285880e+26, "2.04593e+26", "%g"},
+ {__LINE__, 2.048377276651386e-21, "0.00000", "%2.5f"},
+ {__LINE__, 2.051785787301292e-23, "0.000000", "%f"},
+ {__LINE__, 2.055085792048183e-10, "0.000000", "%f"},
+ {__LINE__, 2.055783028451040e-21, "+0", "%+1.f"},
+ {__LINE__, 2.057641607509489e-17, "+2E-17", "%+2.G"},
+ {__LINE__, 2.058348703001600e-15, "2.05835E-15", "%#G"},
+ {__LINE__, 2.059594758787322e+24, "2.05959E+24", "%1G"},
+ {__LINE__, 2.062710740295018e+01, "20.6271", "%G"},
+ {__LINE__, 2.063240676447750e-11, "0.000000", "%f"},
+ {__LINE__, 2.063799238238917e-09, "+0.000000", "%+f"},
+ {__LINE__, 2.064564135160425e-17, "2.06456E-17", "%G"},
+ {__LINE__, 2.066363476927650e-05, "2.07E-05", "%.3G"},
+ {__LINE__, 2.066871450514214e-02, "+2.066871e-02", "%+e"},
+ {__LINE__, 2.067258256169148e+07, "2.06726e+07", "%g"},
+ {__LINE__, 2.068466590729350e-22, "0.0000", "%.4f"},
+ {__LINE__, 2.068779510112540e-26, "2.06878e-26", "%g"},
+ {__LINE__, 2.069258770387493e+19, "20692587703874929516.700831", "%3f"},
+ {__LINE__, 2.069547778447951e+26, "2.069548e+26", "%6e"},
+ {__LINE__, 2.070479507710941e-23, "2.07048E-23", "%G"},
+ {__LINE__, 2.071809640061785e+22, "2.071810E+22", "%E"},
+ {__LINE__, 2.073364463564950e-06, "2.07336e-06", "%g"},
+ {__LINE__, 2.073478953644888e-10, "+2.07E-10", "%+.3G"},
+ {__LINE__, 2.076039194312519e+12, "2.07604E+12", "%G"},
+ {__LINE__, 2.081490398946229e-07, "+2.08149e-07", "%+g"},
+ {__LINE__, 2.084941170287895e-07, "2.084941E-07", "%7E"},
+ {__LINE__, 2.087035885023382e-18, "+0.000000", "%+f"},
+ {__LINE__, 2.091025884363342e-09, "2.09103E-09", "%G"},
+ {__LINE__, 2.091830555397864e+08, "209183056", "%0.f"},
+ {__LINE__, 2.091998109232084e-22, "0.000000", "%#f"},
+ {__LINE__, 2.093406473464940e-17, "2.09341e-17", "%g"},
+ {__LINE__, 2.094646724039720e-26, "2.094647e-26", "%0.7g"},
+ {__LINE__, 2.095218667083208e-22, "2.09522e-22", "%.5e"},
+ {__LINE__, 2.096932364992728e-27, "2.1E-27", "%.2G"},
+ {__LINE__, 2.097012452732083e+17, "2.09701E+17", "%G"},
+ {__LINE__, 2.102022216908102e-07, "0.000000", "%f"},
+ {__LINE__, 2.104648382618938e-04, "0.00021", "%.3G"},
+ {__LINE__, 2.109159578853690e-19, "2.10916e-19", "%6g"},
+ {__LINE__, 2.111732624641178e-13, "+2.111733E-13", "%+7.7G"},
+ {__LINE__, 2.112676138351330e+21, " 2e+21", "%6.g"},
+ {__LINE__, 2.117332904051741e-09, "+0.000000", "%+f"},
+ {__LINE__, 2.118001353767757e-14, "2.118E-14", "%4.3E"},
+ {__LINE__, 2.119413720893955e+12, "2.119414E+12", "%.7G"},
+ {__LINE__, 2.119610992647014e+07, "+21196109.9265", "%+.4f"},
+ {__LINE__, 2.120504022069221e+25, "21205040220692210617414730.223", "%#.3f"},
+ {__LINE__, 2.120634617123718e-16, "2.120635e-16", "%#e"},
+ {__LINE__, 2.128702437175385e+12, "2128702437175.385", "%.3f"},
+ {__LINE__, 2.131148830213536e-12, "2.131149e-12", "%e"},
+ {__LINE__, 2.132682622145255e+04, "+21326.83", "%+#5.7G"},
+ {__LINE__, 2.133864841676473e-01, " +0.2", "%+6.g"},
+ {__LINE__, 2.133939058496273e+16, "2E+16", "%4.G"},
+ {__LINE__, 2.135087006806302e-24, "0.000000", "%f"},
+ {__LINE__, 2.138983961194584e-20, "+2.138984e-20", "%+7e"},
+ {__LINE__, 2.146534189669224e+17, "+2.147E+17", "%+.4G"},
+ {__LINE__, 2.147375595676503e+09, "2.147376e+09", "%e"},
+ {__LINE__, 2.152994986418075e+02, "2E+02", "%0.E"},
+ {__LINE__, 2.154127135896811e+06, "2.15E+06", "%2.3G"},
+ {__LINE__, 2.154613053892588e-29, "2.1546E-29", "%.4E"},
+ {__LINE__, 2.160830430730653e-12, "2.16083E-12", "%#G"},
+ {__LINE__, 2.161740591663027e+28, "2.161741e+28", "%e"},
+ {__LINE__, 2.167181665934011e-06, "2e-06", "%1.e"},
+ {__LINE__, 2.167348761729060e-04, "2.167349e-04", "%#e"},
+ {__LINE__, 2.170270852816708e-10, "2.17027E-10", "%0G"},
+ {__LINE__, 2.173048229189370e-06, "2.173e-06", "%.5g"},
+ {__LINE__, 2.175554537855024e+10, "2.17555E+10", "%G"},
+ {__LINE__, 2.177447372527968e-30, "+0.000000", "%+.6f"},
+ {__LINE__, 2.178591661569858e+05, "2.1786e+05", "%1.5g"},
+ {__LINE__, 2.184700207174818e-29, "0.000000", "%f"},
+ {__LINE__, 2.190817031437247e+03, "2.E+03", "%#3.0E"},
+ {__LINE__, 2.191396212145558e-01, "2.191E-01", "%6.3E"},
+ {__LINE__, 2.191786353372880e-23, "2.19179e-23", "%.5e"},
+ {__LINE__, 2.193471126151079e+19, "2.1935E+19", "%.4E"},
+ {__LINE__, 2.194750177630526e-15, "2.194750e-15", "%e"},
+ {__LINE__, 2.196145170358973e+05, "+219615", "%+g"},
+ {__LINE__, 2.199602360934320e-09, "2.19960E-09", "%#6.6G"},
+ {__LINE__, 2.202913988776998e+17, "+2.20291e+17", "%+g"},
+ {__LINE__, 2.207094560707703e-10, "2.207095e-10", "%e"},
+ {__LINE__, 2.207557214621658e-13, " 0", "%4.f"},
+ {__LINE__, 2.209428206272229e+13, "2.20943e+13", "%g"},
+ {__LINE__, 2.212662463615175e-11, " 0", "%4.0f"},
+ {__LINE__, 2.215732710968468e-30, "2E-30", "%.1G"},
+ {__LINE__, 2.218490841936778e-10, "2.21849e-10", "%2g"},
+ {__LINE__, 2.218850610567959e-01, "+0.221885", "%+G"},
+ {__LINE__, 2.220796939261542e-03, "0.002221", "%#f"},
+ {__LINE__, 2.221819894808024e+24, "2.2e+24", "%5.1e"},
+ {__LINE__, 2.223804993235507e+27, "2.223805e+27", "%1e"},
+ {__LINE__, 2.224715386046563e-17, "0.00000", "%#.5f"},
+ {__LINE__, 2.224864709983882e-16, "+2.224865e-16", "%+e"},
+ {__LINE__, 2.225764510969505e+16, "2.E+16", "%#4.G"},
+ {__LINE__, 2.233229189161284e-07, "+2.23323e-07", "%+6g"},
+ {__LINE__, 2.236522807209868e+17, "2.23652e+17", "%g"},
+ {__LINE__, 2.236641620849775e+20, "2E+20", "%0.G"},
+ {__LINE__, 2.237089952728626e-13, "2E-13", "%5.E"},
+ {__LINE__, 2.238531255563381e-11, " 2E-11", "%7.1G"},
+ {__LINE__, 2.242782296436871e+12, "2242782296436.871103", "%f"},
+ {__LINE__, 2.249177852069393e-02, "+2.249178E-02", "%+5E"},
+ {__LINE__, 2.250735782732076e+29, "+2.25074e+29", "%+g"},
+ {__LINE__, 2.257455203557544e-11, "+2e-11", "%+4.0g"},
+ {__LINE__, 2.258002527939529e+24, "2.258e+24", "%g"},
+ {__LINE__, 2.266955929448160e+20, "226695592944815960123.6056915", "%.7f"},
+ {__LINE__, 2.269019719123250e-23, "0.000000", "%f"},
+ {__LINE__, 2.269022332502809e+02, "+226.902233", "%+f"},
+ {__LINE__, 2.271165222038591e-03, "0.002", "%1.1g"},
+ {__LINE__, 2.273965946408021e+14, "+227396594640802.085507", "%+f"},
+ {__LINE__, 2.277221153386242e+22, "22772211533862418697538.032575", "%#f"},
+ {__LINE__, 2.280214920187521e-01, "0.2", "%2.G"},
+ {__LINE__, 2.280762993019740e+06, "2.28076E+06", "%G"},
+ {__LINE__, 2.283479263040833e-24, "+0.000000", "%+f"},
+ {__LINE__, 2.283686319235123e-07, "2.2837E-07", "%5.5G"},
+ {__LINE__, 2.285842617231066e-26, "0.000000", "%f"},
+ {__LINE__, 2.293145864755873e-02, "0.02", "%.0g"},
+ {__LINE__, 2.293439381531532e+03, "+2.293439E+03", "%+#1E"},
+ {__LINE__, 2.297972500660698e-22, "2.29797e-22", "%g"},
+ {__LINE__, 2.298725366073681e+23, "2.29873E+23", "%G"},
+ {__LINE__, 2.303151535483950e-29, "2.30315E-29", "%G"},
+ {__LINE__, 2.308565313657699e-25, " 0", "%4.f"},
+ {__LINE__, 2.309305373760733e-07, "2.309305E-07", "%E"},
+ {__LINE__, 2.309693761334710e-19, "2.30969e-19", "%g"},
+ {__LINE__, 2.312218220995774e-20, "+2.31222E-20", "%+.6G"},
+ {__LINE__, 2.313115729670525e+24, "2.31312E+24", "%G"},
+ {__LINE__, 2.315325159866773e-21, "2.315325E-21", "%E"},
+ {__LINE__, 2.316932917620091e-19, "0.000000", "%f"},
+ {__LINE__, 2.317548394633895e+13, "2.31755E+13", "%0G"},
+ {__LINE__, 2.318951465093612e+02, "+2.32e+02", "%+1.2e"},
+ {__LINE__, 2.319151794905482e-17, "+0.000000", "%+0f"},
+ {__LINE__, 2.319708617851078e-27, "0.000000", "%f"},
+ {__LINE__, 2.320019976591725e+20, "2e+20", "%.1g"},
+ {__LINE__, 2.322859962551666e+06, "2.32286e+06", "%g"},
+ {__LINE__, 2.326474568074649e-29, "2.326e-29", "%.4g"},
+ {__LINE__, 2.328400844172053e-07, "2.3284E-07", "%G"},
+ {__LINE__, 2.333695247698112e+16, "2.3337e+16", "%g"},
+ {__LINE__, 2.333717120257130e-19, "+0.000000", "%+f"},
+ {__LINE__, 2.334711793234782e-19, "2.33471E-19", "%5G"},
+ {__LINE__, 2.335524987281242e+02, "+233.55", "%+7.5g"},
+ {__LINE__, 2.335556767836369e-30, "2.34e-30", "%.3g"},
+ {__LINE__, 2.337696964360052e-10, "2.3377e-10", "%1g"},
+ {__LINE__, 2.337858249184500e-14, "2.337858E-14", "%5.6E"},
+ {__LINE__, 2.339984354781169e-14, "2.339984E-14", "%E"},
+ {__LINE__, 2.340849041430089e-04, "0.00023", "%0.2G"},
+ {__LINE__, 2.342388410373363e-24, "2.34239E-24", "%G"},
+ {__LINE__, 2.343933106737237e-22, "2.34393e-22", "%g"},
+ {__LINE__, 2.344870855713960e-08, "0.000000", "%.6f"},
+ {__LINE__, 2.347368965433808e+24, "2347368965433808352116785", "%4.f"},
+ {__LINE__, 2.349417462171421e-02, "+0.0234942", "%+G"},
+ {__LINE__, 2.351071111431207e+11, "235107111143.12", "%.2f"},
+ {__LINE__, 2.352756222810670e+19, "+2.e+19", "%+#4.g"},
+ {__LINE__, 2.355862529217003e-22, "2.355863e-22", "%#4e"},
+ {__LINE__, 2.356804045401445e-30, "2.3568E-30", "%G"},
+ {__LINE__, 2.362100710185559e-26, "2.3621e-26", "%g"},
+ {__LINE__, 2.368330779173562e-12, " 0", "%4.f"},
+ {__LINE__, 2.383329784369796e+22, "2.38333E+22", "%G"},
+ {__LINE__, 2.386845229536477e+01, "+23.868452", "%+#f"},
+ {__LINE__, 2.388207830036780e-05, "0.000024", "%f"},
+ {__LINE__, 2.391809468802907e+21, "+2.391809e+21", "%+e"},
+ {__LINE__, 2.395172908564692e-09, "+0.000000", "%+f"},
+ {__LINE__, 2.395447167030886e-29, "2.39545e-29", "%g"},
+ {__LINE__, 2.397292973389182e+16, "23972929733891823", "%6.f"},
+ {__LINE__, 2.401749832237687e-30, "2.401750E-30", "%E"},
+ {__LINE__, 2.403610502544347e-03, "0.00240361", "%4G"},
+ {__LINE__, 2.404676421776132e+17, "240467642177613206", "%6.f"},
+ {__LINE__, 2.406327689091479e+25, "2.406328e+25", "%e"},
+ {__LINE__, 2.407341999590511e-02, "0.024073", "%f"},
+ {__LINE__, 2.407352797581004e+05, "240735.", "%#g"},
+ {__LINE__, 2.407903467439017e+13, "2.4079E+13", "%G"},
+ {__LINE__, 2.407979635013539e+21, " +2E+21", "%+7.G"},
+ {__LINE__, 2.409513517930790e+29, "240951351793079027174826478585.600853", "%f"},
+ {__LINE__, 2.412530651221551e+10, "+2.41253E+10", "%+G"},
+ {__LINE__, 2.419943224673811e+00, "2.41994", "%#g"},
+ {__LINE__, 2.422474399040258e-15, "0.000000", "%f"},
+ {__LINE__, 2.426060206689458e+18, "2.42606E+18", "%1G"},
+ {__LINE__, 2.439982659679872e+14, "+2.439983E+14", "%+E"},
+ {__LINE__, 2.440528851375447e+13, "24405288513754.466173", "%f"},
+ {__LINE__, 2.441340473292679e+19, "2.44134E+19", "%G"},
+ {__LINE__, 2.443521636943916e+19, " 2.e+19", "%#7.g"},
+ {__LINE__, 2.445925211597624e-27, "2.445925E-27", "%E"},
+ {__LINE__, 2.446966179060722e+25, "2.446966e+25", "%5e"},
+ {__LINE__, 2.447714218717278e+11, "2e+11", "%1.e"},
+ {__LINE__, 2.448339744613286e+06, "2.4483e+06", "%3.5g"},
+ {__LINE__, 2.448772993496189e+03, "2448.77", "%G"},
+ {__LINE__, 2.448857654325229e+22, "+2.44886e+22", "%+g"},
+ {__LINE__, 2.450082452098890e-27, "2.4501E-27", "%#3.5G"},
+ {__LINE__, 2.451293602221637e+05, "245129.360222", "%f"},
+ {__LINE__, 2.454531490229426e+02, "245.453", "%G"},
+ {__LINE__, 2.458958369944980e+14, "2.5E+14", "%6.1E"},
+ {__LINE__, 2.463666680775038e+14, "+246366668077503.80", "%+#.2f"},
+ {__LINE__, 2.471582990960795e+05, "2.471583e+05", "%e"},
+ {__LINE__, 2.474107179274687e+22, "2.47411e+22", "%g"},
+ {__LINE__, 2.474332114849132e-08, "+2.47433e-08", "%+g"},
+ {__LINE__, 2.476956762431716e+18, "+2476956762431715919.348107", "%+#f"},
+ {__LINE__, 2.479091221850607e-22, "0.000000", "%f"},
+ {__LINE__, 2.479819586598431e-24, "2.47982e-24", "%g"},
+ {__LINE__, 2.480006174601455e-05, "2.48001E-05", "%G"},
+ {__LINE__, 2.482672677638334e-26, "+0.000000", "%+f"},
+ {__LINE__, 2.492816492208918e-14, " 0", "%7.f"},
+ {__LINE__, 2.492964173197140e-12, " 2e-12", "%7.g"},
+ {__LINE__, 2.494646635961173e+02, "249.465", "%g"},
+ {__LINE__, 2.494687818780545e+11, "249468781878.054546", "%#7f"},
+ {__LINE__, 2.510083560147301e-13, "+2.510084e-13", "%+#e"},
+ {__LINE__, 2.511186607989480e-30, "2.51E-30", "%.3G"},
+ {__LINE__, 2.514164516133643e-11, "2.51416e-11", "%g"},
+ {__LINE__, 2.517242520804735e+11, "2.517243e+11", "%e"},
+ {__LINE__, 2.518526126400833e-26, "2.51853e-26", "%g"},
+ {__LINE__, 2.520313416401176e+09, "2520313416.401176", "%5f"},
+ {__LINE__, 2.521653160738683e-29, "2.52165e-29", "%#g"},
+ {__LINE__, 2.521941342615338e-16, "2.52194e-16", "%g"},
+ {__LINE__, 2.523554774354461e-03, "+3E-03", "%+.0E"},
+ {__LINE__, 2.525434130825058e+06, "+2.525434E+06", "%+E"},
+ {__LINE__, 2.527616380113364e+02, "2.527616E+02", "%E"},
+ {__LINE__, 2.531871347913505e+09, "+2.53187E+09", "%+#G"},
+ {__LINE__, 2.532167428661069e+06, "2532167.428661", "%f"},
+ {__LINE__, 2.545585718405995e+14, "+2.54559E+14", "%+G"},
+ {__LINE__, 2.546305097286406e+10, "2.546305e+10", "%e"},
+ {__LINE__, 2.547467156069069e-30, "+0.00", "%+3.2f"},
+ {__LINE__, 2.548728793004506e-14, "2.54873E-14", "%G"},
+ {__LINE__, 2.560375602395090e+11, "256037560239.509032", "%0f"},
+ {__LINE__, 2.560555687476687e+03, "2561", "%.4g"},
+ {__LINE__, 2.561709077363443e-24, "+0.000000", "%+f"},
+ {__LINE__, 2.563763849675242e+10, "2.5637638E+10", "%.7E"},
+ {__LINE__, 2.567482414574355e+11, "+2.567482e+11", "%+e"},
+ {__LINE__, 2.571575046303674e-17, "3E-17", "%2.0E"},
+ {__LINE__, 2.572997971296986e+11, "257299797129.698593", "%f"},
+ {__LINE__, 2.578625935900331e+22, "25786259359003311786295.853381", "%f"},
+ {__LINE__, 2.579663282966370e+12, "2.579663e+12", "%e"},
+ {__LINE__, 2.593141782397610e-08, "0.000000", "%f"},
+ {__LINE__, 2.594386109584196e+04, "3.E+04", "%#6.0E"},
+ {__LINE__, 2.598069318007816e-22, "2.59807e-22", "%g"},
+ {__LINE__, 2.600910462290091e+09, "2.600910E+09", "%6E"},
+ {__LINE__, 2.602580183614458e-03, "2.602580e-03", "%e"},
+ {__LINE__, 2.606540360440264e+09, "+2606540360.4", "%+#0.1f"},
+ {__LINE__, 2.610016419698116e-21, "+3.e-21", "%+#3.g"},
+ {__LINE__, 2.612279323574882e-20, "2.61228E-20", "%G"},
+ {__LINE__, 2.614157324336453e-14, "2.61416e-14", "%g"},
+ {__LINE__, 2.614688721873993e-09, "2.61e-09", "%6.2e"},
+ {__LINE__, 2.616661104472416e-15, " 0", "%5.f"},
+ {__LINE__, 2.616742079283195e-09, " +3E-09", "%+7.E"},
+ {__LINE__, 2.618075304717427e+24, "2.618075e+24", "%e"},
+ {__LINE__, 2.624118573335769e+26, "262411857333576925555007619.550452", "%1f"},
+ {__LINE__, 2.625718894274227e+24, "+2625718894274227110940955.753904", "%+f"},
+ {__LINE__, 2.627081999477812e+03, "2627.081999", "%f"},
+ {__LINE__, 2.631061062224705e+14, "263106106222470.481626", "%f"},
+ {__LINE__, 2.631545877128814e+27, "+2.63155e+27", "%+g"},
+ {__LINE__, 2.632694395848818e-11, "2.63269e-11", "%g"},
+ {__LINE__, 2.636728891022008e-22, "+2.63673e-22", "%+#4g"},
+ {__LINE__, 2.638495675008130e-28, "+2.638496e-28", "%+e"},
+ {__LINE__, 2.639704195859799e-11, "0.", "%#.0f"},
+ {__LINE__, 2.641645264652665e-20, "0", "%0.f"},
+ {__LINE__, 2.642012075064497e-20, "3E-20", "%0.E"},
+ {__LINE__, 2.648725869006487e-29, " 3E-29", "%6.G"},
+ {__LINE__, 2.649060724417770e+12, "3E+12", "%3.G"},
+ {__LINE__, 2.651188545120166e-17, "0.000", "%.3f"},
+ {__LINE__, 2.652302152621621e+14, "2.7E+14", "%.2G"},
+ {__LINE__, 2.653309718412604e-28, "0.000000", "%f"},
+ {__LINE__, 2.658344750491858e-21, " 3e-21", "%6.g"},
+ {__LINE__, 2.664625074612594e+15, "3e+15", "%1.g"},
+ {__LINE__, 2.666953728270800e-15, "3e-15", "%0.e"},
+ {__LINE__, 2.674515419678877e-11, " 3E-11", "%6.E"},
+ {__LINE__, 2.680054917256578e+15, "2680054917256577.5", "%#2.1f"},
+ {__LINE__, 2.680495609883415e-11, "2.68E-11", "%#.3G"},
+ {__LINE__, 2.685757893641070e+23, "268575789364107020418259.70809", "%1.5f"},
+ {__LINE__, 2.695551226058178e+16, "26955512260581775.407786", "%f"},
+ {__LINE__, 2.696346377519671e+04, "+26963.5", "%+G"},
+ {__LINE__, 2.714262310601257e+17, "+2.714262E+17", "%+E"},
+ {__LINE__, 2.719227450016317e-01, "0.271923", "%G"},
+ {__LINE__, 2.724135433346056e-30, "+2.72414e-30", "%+g"},
+ {__LINE__, 2.725143224130276e+14, "272514322413027.576530", "%6f"},
+ {__LINE__, 2.729355189648310e-03, "+0.00273", "%+.5f"},
+ {__LINE__, 2.732872167724945e+11, "2.73287E+11", "%G"},
+ {__LINE__, 2.737709476435412e+17, "273770947643541218.141650", "%f"},
+ {__LINE__, 2.739299356074967e-15, "2.7E-15", "%.2G"},
+ {__LINE__, 2.740793612304798e-27, "2.740794E-27", "%.7G"},
+ {__LINE__, 2.742030156175960e+20, "2.74203e+20", "%2.6g"},
+ {__LINE__, 2.744455324096085e+11, "2.74446E+11", "%G"},
+ {__LINE__, 2.745179546531160e+07, "2.7452E+07", "%.5G"},
+ {__LINE__, 2.747470562525333e+04, "3E+04", "%2.E"},
+ {__LINE__, 2.750243314674629e+21, "2.75024E+21", "%#G"},
+ {__LINE__, 2.750250224436030e+20, "+2.750250e+20", "%+0.6e"},
+ {__LINE__, 2.752712858561084e-22, "2.752713e-22", "%e"},
+ {__LINE__, 2.756982987656667e-03, "0.002756983", "%#.7G"},
+ {__LINE__, 2.761841188479590e+13, "3e+13", "%1.g"},
+ {__LINE__, 2.769498440434419e+00, "+3e+00", "%+0.e"},
+ {__LINE__, 2.769993785786379e+10, "27699937857.863794", "%f"},
+ {__LINE__, 2.772900256376753e-06, "+2.7729E-06", "%+7.6G"},
+ {__LINE__, 2.774401482467457e-06, "2.8e-06", "%3.2g"},
+ {__LINE__, 2.777691370374757e-02, "+0.027777", "%+f"},
+ {__LINE__, 2.779836227365899e-09, "3e-09", "%5.0g"},
+ {__LINE__, 2.780481651765741e+01, "2.780482E+01", "%E"},
+ {__LINE__, 2.782228478714809e-26, "2.782228E-26", "%4.7G"},
+ {__LINE__, 2.790457781719376e+13, "+2.8e+13", "%+.2g"},
+ {__LINE__, 2.792026581166417e-30, " 3.e-30", "%#7.0g"},
+ {__LINE__, 2.792396278299615e-08, "0.00", "%#.2f"},
+ {__LINE__, 2.793658047689995e-10, "2.794e-10", "%#0.4g"},
+ {__LINE__, 2.795707358229888e-25, "0.000000", "%f"},
+ {__LINE__, 2.796253091758523e-06, "2.796E-06", "%.4G"},
+ {__LINE__, 2.796756564788716e-24, "2.796757e-24", "%e"},
+ {__LINE__, 2.798730444798773e-14, "2.79873e-14", "%g"},
+ {__LINE__, 2.799108397670447e-24, "3E-24", "%.0G"},
+ {__LINE__, 2.799389008872835e+06, "2799389.", "%#0.f"},
+ {__LINE__, 2.800413998518039e-14, "0.000000", "%f"},
+ {__LINE__, 2.803237602587100e+15, "+2803237602587100.418816", "%+5f"},
+ {__LINE__, 2.803474415574551e-04, "0.0002803", "%.7f"},
+ {__LINE__, 2.804957468647181e+25, "2.80496e+25", "%g"},
+ {__LINE__, 2.809345112788226e+09, "2809345112.788226", "%.6f"},
+ {__LINE__, 2.811518239408899e+10, "3e+10", "%1.g"},
+ {__LINE__, 2.813188439967416e-16, "0.0000000", "%5.7f"},
+ {__LINE__, 2.813497118051755e+08, "2.8135e+08", "%.5g"},
+ {__LINE__, 2.815748256510577e-29, "0.000000", "%2f"},
+ {__LINE__, 2.816076365485207e-01, "0.281608", "%0G"},
+ {__LINE__, 2.816083345772131e+24, "2.8161e+24", "%6.4e"},
+ {__LINE__, 2.818686957605178e+12, "2.8187E+12", "%.5G"},
+ {__LINE__, 2.821903538737691e+20, "2.8219E+20", "%G"},
+ {__LINE__, 2.823659589845680e+26, "2.82366e+26", "%2g"},
+ {__LINE__, 2.823685630865012e+22, "2.82369E+22", "%G"},
+ {__LINE__, 2.828826386007914e+21, "2.828826E+21", "%7E"},
+ {__LINE__, 2.830997901034349e+04, "+3e+04", "%+0.e"},
+ {__LINE__, 2.833886731091353e-26, "+2.833887e-26", "%+4e"},
+ {__LINE__, 2.839965144893913e+28, "28399651448939131626048038015.1421", "%.4f"},
+ {__LINE__, 2.840651452049947e-09, "2.841E-09", "%#.3E"},
+ {__LINE__, 2.843388001911757e-01, "0.284339", "%g"},
+ {__LINE__, 2.846122151080671e+14, "2.84612E+14", "%.5E"},
+ {__LINE__, 2.851257828837595e+05, "+285126", "%+5.f"},
+ {__LINE__, 2.853823884459520e+07, "+2.85382E+07", "%+G"},
+ {__LINE__, 2.853870068368765e-06, "2.854E-06", "%4.3E"},
+ {__LINE__, 2.856687358149867e+01, "+28.567", "%+6.5G"},
+ {__LINE__, 2.858946600073752e+06, "2.8589466e+06", "%3.7e"},
+ {__LINE__, 2.861525727138818e+24, "2.8615257e+24", "%2.7e"},
+ {__LINE__, 2.865104175886071e-24, "0.000000", "%f"},
+ {__LINE__, 2.870678920363198e-14, "2.87068E-14", "%G"},
+ {__LINE__, 2.873298537233691e+09, "+2.8733e+09", "%+g"},
+ {__LINE__, 2.877939609444375e-02, "0.028779", "%f"},
+ {__LINE__, 2.878253985341728e+13, "2.87825E+13", "%G"},
+ {__LINE__, 2.879299244903946e+29, "287929924490394597569320467301", "%0.f"},
+ {__LINE__, 2.885516225515485e-26, "0.000000", "%f"},
+ {__LINE__, 2.886013724129579e+20, "+3e+20", "%+4.g"},
+ {__LINE__, 2.887032786975506e-30, "0.000000", "%f"},
+ {__LINE__, 2.890415456531026e-29, "2.89042E-29", "%G"},
+ {__LINE__, 2.893177360548214e-13, "2.893E-13", "%#6.3E"},
+ {__LINE__, 2.895265536458195e+26, "2.89527e+26", "%5g"},
+ {__LINE__, 2.903844533810152e+23, "290384453381015195105874.23", "%.2f"},
+ {__LINE__, 2.909060558287504e+27, "2.90906e+27", "%g"},
+ {__LINE__, 2.911615480973172e-05, "2.91162E-05", "%3G"},
+ {__LINE__, 2.912692297221896e+09, "2912692297.221896", "%#f"},
+ {__LINE__, 2.913595662485813e-24, "2.9136E-24", "%G"},
+ {__LINE__, 2.915960840341896e-27, "0.000000", "%f"},
+ {__LINE__, 2.920451095973991e-16, "2.92e-16", "%2.2e"},
+ {__LINE__, 2.920528295810925e+06, "2.92053E+06", "%#G"},
+ {__LINE__, 2.921564671017147e+20, "2.921565E+20", "%#6E"},
+ {__LINE__, 2.921628350942189e+01, "2.921628E+01", "%E"},
+ {__LINE__, 2.921843377455232e+20, "2.921843E+20", "%#E"},
+ {__LINE__, 2.930156950319384e+29, "2.930E+29", "%1.3E"},
+ {__LINE__, 2.931229858895071e-30, "2.9e-30", "%4.2g"},
+ {__LINE__, 2.931753029689166e+20, "2.93175e+20", "%g"},
+ {__LINE__, 2.933023693079342e+15, "3.E+15", "%#.1G"},
+ {__LINE__, 2.933078733225520e+26, "2.93308E+26", "%G"},
+ {__LINE__, 2.933528170896643e-14, "+2.93353e-14", "%+g"},
+ {__LINE__, 2.938648437428148e+00, "2.938648e+00", "%e"},
+ {__LINE__, 2.940752238221344e+26, "+2.94075E+26", "%+G"},
+ {__LINE__, 2.942836470459675e+20, "2.9428e+20", "%6.4e"},
+ {__LINE__, 2.943218333254941e+29, "294321833325494086608387078740.634024", "%f"},
+ {__LINE__, 2.943690574007512e-27, "0.000000", "%f"},
+ {__LINE__, 2.945452907046501e+09, "+2.9455E+09", "%+.5G"},
+ {__LINE__, 2.946648725966953e+16, "29466487259669534.637396", "%4f"},
+ {__LINE__, 2.955119322417825e+29, "2.95512E+29", "%G"},
+ {__LINE__, 2.966481197538973e+24, "2.96648e+24", "%#g"},
+ {__LINE__, 2.969362862661362e+08, "+2.969363e+08", "%+7e"},
+ {__LINE__, 2.970062459990078e+21, "+2.97006E+21", "%+G"},
+ {__LINE__, 2.971059959019791e+10, " 3E+10", "%7.G"},
+ {__LINE__, 2.973020205606034e-29, "0.000000", "%f"},
+ {__LINE__, 2.977223210301426e+04, "2.977223e+04", "%#e"},
+ {__LINE__, 2.977467832772786e-26, "0.000000", "%f"},
+ {__LINE__, 2.981433606423384e+18, "2981433606423384397.032805", "%f"},
+ {__LINE__, 2.981615513287404e-17, "2.98162e-17", "%g"},
+ {__LINE__, 2.983880743847276e+19, " 3e+19", "%7.e"},
+ {__LINE__, 2.983927792297305e-28, "2.983928e-28", "%e"},
+ {__LINE__, 2.984807359492058e-17, " 0", "%2.f"},
+ {__LINE__, 2.985123412933032e+09, "+2.98512e+09", "%+g"},
+ {__LINE__, 2.991132955408629e-27, "+2.99113e-27", "%+4g"},
+ {__LINE__, 2.992345635923643e+19, "3E+19", "%4.G"},
+ {__LINE__, 2.993024238285395e-05, "2.99302e-05", "%2g"},
+ {__LINE__, 2.995303406756363e+16, "+2.995303E+16", "%+E"},
+ {__LINE__, 2.995492577854335e+19, "+29954925778543346481.797016", "%+f"},
+ {__LINE__, 2.996856271675341e-25, "+3e-25", "%+0.e"},
+ {__LINE__, 2.997813968112619e+12, "2.99781e+12", "%#5g"},
+ {__LINE__, 3.002097486457961e-17, "3.00210e-17", "%5.5e"},
+ {__LINE__, 3.006538123158692e+28, "+3.00654E+28", "%+#G"},
+ {__LINE__, 3.007293721729544e+04, "30072.937217", "%f"},
+ {__LINE__, 3.008301791944493e-07, "3.008e-07", "%.3e"},
+ {__LINE__, 3.011742184603817e-17, "3.011742E-17", "%#E"},
+ {__LINE__, 3.024641547299177e-30, "3.02464e-30", "%g"},
+ {__LINE__, 3.026525135110198e-28, "3e-28", "%.0e"},
+ {__LINE__, 3.026768160756558e+20, "3.02677E+20", "%G"},
+ {__LINE__, 3.031928829940975e+18, "3031928829940975234.1", "%0.1f"},
+ {__LINE__, 3.039787705138620e+24, "+3.E+24", "%+#5.G"},
+ {__LINE__, 3.039803824423916e-02, "0.030398", "%5f"},
+ {__LINE__, 3.041236293199133e-26, "3.04124e-26", "%g"},
+ {__LINE__, 3.045634954037886e+04, "30456.3", "%g"},
+ {__LINE__, 3.047528114241850e+25, "3e+25", "%0.e"},
+ {__LINE__, 3.047958193737501e-24, "3.04796E-24", "%#G"},
+ {__LINE__, 3.049537324414302e-16, "3.04954E-16", "%G"},
+ {__LINE__, 3.050500637681798e-30, "3.0505E-30", "%G"},
+ {__LINE__, 3.051769626625307e-01, "0.305177", "%f"},
+ {__LINE__, 3.057280201971847e+11, "+3.05728E+11", "%+.5E"},
+ {__LINE__, 3.060046173306881e-10, "+3.060046e-10", "%+e"},
+ {__LINE__, 3.069732667347204e+27, "+3069732667347204291274920251.453295", "%+f"},
+ {__LINE__, 3.075060836786916e-14, "0.000000", "%f"},
+ {__LINE__, 3.078175179670964e+13, "3.07818E+13", "%G"},
+ {__LINE__, 3.080305344303183e-21, "3.08031e-21", "%6g"},
+ {__LINE__, 3.088881497064043e+27, "+3.088881E+27", "%+3E"},
+ {__LINE__, 3.089196877931209e-20, "3.089197e-20", "%e"},
+ {__LINE__, 3.091400888880487e-08, "3e-08", "%2.e"},
+ {__LINE__, 3.093410684178904e+16, "3.09341e+16", "%g"},
+ {__LINE__, 3.104225344208216e-21, "0.000000", "%f"},
+ {__LINE__, 3.105843728248599e+13, "3.e+13", "%#.0g"},
+ {__LINE__, 3.106463071390893e-07, "0.0000", "%.4f"},
+ {__LINE__, 3.107784123569379e+02, "+310.778", "%+G"},
+ {__LINE__, 3.110605148983672e-20, "3.1106051E-20", "%.7E"},
+ {__LINE__, 3.111702418162670e-04, "0.00031117", "%.5G"},
+ {__LINE__, 3.117610675303153e-17, "3.11761e-17", "%g"},
+ {__LINE__, 3.123620125717981e+07, "3.1236e+07", "%2.5g"},
+ {__LINE__, 3.125648558809832e-24, "+3.125649E-24", "%+#0.6E"},
+ {__LINE__, 3.129025163659283e+10, "31290251636.592825", "%#f"},
+ {__LINE__, 3.130689119412709e-29, "+3.131E-29", "%+#.4G"},
+ {__LINE__, 3.135681222132527e+13, "3.13568E+13", "%G"},
+ {__LINE__, 3.138290485073330e-10, "3.13829E-10", "%G"},
+ {__LINE__, 3.141255250155306e-12, "3.14126E-12", "%G"},
+ {__LINE__, 3.143224520918429e+25, "3.14322E+25", "%#1G"},
+ {__LINE__, 3.144746921366173e-16, " 0", "%7.f"},
+ {__LINE__, 3.151336678241994e+19, "+3.15134E+19", "%+G"},
+ {__LINE__, 3.161752935716549e+24, "3.2E+24", "%2.1E"},
+ {__LINE__, 3.167106521258172e-10, "+3.167107e-10", "%+e"},
+ {__LINE__, 3.167266522824146e-04, "3E-04", "%3.E"},
+ {__LINE__, 3.169995217131489e+27, "3169995217131488907114089670.358226", "%f"},
+ {__LINE__, 3.172117220467692e-21, "3.1721E-21", "%.5G"},
+ {__LINE__, 3.173824170351611e+02, " 3e+02", "%6.e"},
+ {__LINE__, 3.186291452544739e-28, " 0", "%2.f"},
+ {__LINE__, 3.194750094186063e+03, "+3.194750E+03", "%+E"},
+ {__LINE__, 3.195001037118137e-20, "0", "%0.0f"},
+ {__LINE__, 3.199271564719560e+02, "319.927", "%g"},
+ {__LINE__, 3.212803450638544e+20, "3.2128e+20", "%.6g"},
+ {__LINE__, 3.214502877263883e+24, "3214502877263882840708220", "%2.f"},
+ {__LINE__, 3.214658414074286e-01, "+0.321466", "%+#g"},
+ {__LINE__, 3.217627975823673e+00, "3.217628", "%f"},
+ {__LINE__, 3.218257328710536e-07, "3.21826e-07", "%6.5e"},
+ {__LINE__, 3.221949479347008e+02, "322.194948", "%f"},
+ {__LINE__, 3.222862935507443e-14, "3.222863E-14", "%E"},
+ {__LINE__, 3.223750247261608e+19, "3.22375e+19", "%g"},
+ {__LINE__, 3.236030335782375e+05, "3.236030e+05", "%e"},
+ {__LINE__, 3.241078803072735e+19, "3.24108e+19", "%g"},
+ {__LINE__, 3.248069569167045e-06, "0.000003", "%#f"},
+ {__LINE__, 3.248148973717269e-15, "3.24815E-15", "%G"},
+ {__LINE__, 3.251150704311790e+25, "+3.25115e+25", "%+5g"},
+ {__LINE__, 3.254498593372140e+15, "+3.2545e+15", "%+g"},
+ {__LINE__, 3.254949399612861e-13, "+3.255E-13", "%+7.3E"},
+ {__LINE__, 3.255490928554106e-17, "3.255491e-17", "%e"},
+ {__LINE__, 3.262333894422112e+17, "326233389442211185.738074", "%0f"},
+ {__LINE__, 3.263923577545217e-24, "0.0000000", "%.7f"},
+ {__LINE__, 3.267125289609703e+23, "3.26713e+23", "%#.5e"},
+ {__LINE__, 3.267906049108331e+27, "3.267906E+27", "%6E"},
+ {__LINE__, 3.269885039157328e+14, "326988503915732.797722", "%f"},
+ {__LINE__, 3.296011393609953e-27, " 3E-27", "%7.E"},
+ {__LINE__, 3.296452164568996e+29, "3.296452E+29", "%E"},
+ {__LINE__, 3.296544736555325e+10, "+3.29654E+10", "%+.6G"},
+ {__LINE__, 3.301861835798572e+03, "3301.862", "%4.7g"},
+ {__LINE__, 3.311292283423002e+21, " 3E+21", "%6.G"},
+ {__LINE__, 3.314868440076262e-10, "3.3149E-10", "%.5G"},
+ {__LINE__, 3.318057982247451e-13, "3.3181e-13", "%0.5g"},
+ {__LINE__, 3.318139218410071e-22, "0.000000", "%f"},
+ {__LINE__, 3.326769904839351e-11, "+3.3268e-11", "%+0.4e"},
+ {__LINE__, 3.327483659787219e+27, "+3.32748e+27", "%+g"},
+ {__LINE__, 3.332666889640198e+17, "333266688964019763.830038", "%f"},
+ {__LINE__, 3.333807449377253e+10, "+3.33e+10", "%+.3g"},
+ {__LINE__, 3.334572302792625e-09, "3.334572E-09", "%E"},
+ {__LINE__, 3.337567126586765e-17, "0.0000000", "%#3.7f"},
+ {__LINE__, 3.340512607683786e-04, "+3E-04", "%+1.E"},
+ {__LINE__, 3.344911557516870e+04, "33449.1", "%G"},
+ {__LINE__, 3.346464302017296e+26, "+3.E+26", "%+#3.G"},
+ {__LINE__, 3.348503166628953e+00, "+3.348503e+00", "%+e"},
+ {__LINE__, 3.350025157778138e-19, "3.35003e-19", "%6g"},
+ {__LINE__, 3.352826233035342e+11, "335282623303.534200", "%7f"},
+ {__LINE__, 3.357174089765502e+10, "3.35717E+10", "%G"},
+ {__LINE__, 3.369253166475501e+03, "+3369.25", "%+G"},
+ {__LINE__, 3.371385975046735e+02, "337.", "%#.0f"},
+ {__LINE__, 3.372532650462104e-04, "+0.000", "%+.3f"},
+ {__LINE__, 3.376498162710442e-26, "3.376498e-26", "%e"},
+ {__LINE__, 3.383510307689135e-12, " 3e-12", "%7.0e"},
+ {__LINE__, 3.388427914080631e-04, "0.0003", "%2.4f"},
+ {__LINE__, 3.390757423408097e+29, "3.3908E+29", "%.4E"},
+ {__LINE__, 3.393963140962879e-11, "3.39396e-11", "%g"},
+ {__LINE__, 3.399245742994444e+24, "3.399246E+24", "%E"},
+ {__LINE__, 3.417690405546708e-26, "0.00000", "%4.5f"},
+ {__LINE__, 3.421159360472045e-30, "3.42116E-30", "%G"},
+ {__LINE__, 3.421973947898887e-06, "3.42197E-06", "%4G"},
+ {__LINE__, 3.425949002482817e-10, "+3.42595E-10", "%+G"},
+ {__LINE__, 3.428355150377972e+08, "3.42836E+08", "%G"},
+ {__LINE__, 3.445035158951526e+15, "3445035158951526.454985", "%f"},
+ {__LINE__, 3.447363996077534e+28, "+3e+28", "%+2.e"},
+ {__LINE__, 3.451571062654907e-03, "0.00345157", "%G"},
+ {__LINE__, 3.452787236877688e+09, "3.45279e+09", "%g"},
+ {__LINE__, 3.454114826574939e-22, "3.e-22", "%#3.e"},
+ {__LINE__, 3.455241965974631e-03, "0.003455", "%#f"},
+ {__LINE__, 3.456190496554365e-18, "3.E-18", "%#5.E"},
+ {__LINE__, 3.456804565717233e-19, "+0.000", "%+2.3f"},
+ {__LINE__, 3.457077651539715e-28, "3.457078E-28", "%E"},
+ {__LINE__, 3.472025705376229e+22, "3.472e+22", "%7.4g"},
+ {__LINE__, 3.473308270919079e+03, "3.473308e+03", "%e"},
+ {__LINE__, 3.474468013243007e-30, "3.47447e-30", "%g"},
+ {__LINE__, 3.477976957097698e+22, "3.47798e+22", "%g"},
+ {__LINE__, 3.501174631980057e-06, "4e-06", "%4.g"},
+ {__LINE__, 3.501808481702140e+20, "3.50181E+20", "%G"},
+ {__LINE__, 3.511760000705324e+14, "351176000070532.357000", "%f"},
+ {__LINE__, 3.511870226306087e+29, "3.51187e+29", "%.5e"},
+ {__LINE__, 3.518846859147841e+02, "+351.885", "%+G"},
+ {__LINE__, 3.521659149753418e+25, "35216591497534182053641416", "%5.f"},
+ {__LINE__, 3.521721228178747e+21, "4e+21", "%2.e"},
+ {__LINE__, 3.526696007281458e+22, "3.5267e+22", "%g"},
+ {__LINE__, 3.535631031379084e-11, "4e-11", "%5.0g"},
+ {__LINE__, 3.537219665456759e-01, "0.353722", "%f"},
+ {__LINE__, 3.537252728287785e-09, "3.537253E-09", "%E"},
+ {__LINE__, 3.542561277796815e-19, "3.542561E-19", "%E"},
+ {__LINE__, 3.548942336915745e+13, "3.54894E+13", "%.5E"},
+ {__LINE__, 3.574385715121768e-24, "3.57439E-24", "%#G"},
+ {__LINE__, 3.578068067760211e-13, "3.578068E-13", "%E"},
+ {__LINE__, 3.583296432862266e-13, "3.5833e-13", "%g"},
+ {__LINE__, 3.591567367115590e+19, "3.59157e+19", "%1g"},
+ {__LINE__, 3.594902312287635e-24, "3.5949E-24", "%G"},
+ {__LINE__, 3.602929486764515e+12, "3602929486764.514522", "%#f"},
+ {__LINE__, 3.606699462631472e-01, "+0.360670", "%+f"},
+ {__LINE__, 3.608605968319811e+17, "3.60861e+17", "%g"},
+ {__LINE__, 3.608780761567885e+24, "4e+24", "%0.e"},
+ {__LINE__, 3.623857274715022e-15, "3.62386E-15", "%1G"},
+ {__LINE__, 3.627346251764432e-22, "3.627e-22", "%.4g"},
+ {__LINE__, 3.652610391698086e-16, "0.000000", "%3f"},
+ {__LINE__, 3.657463146689917e-19, " 0", "%4.0f"},
+ {__LINE__, 3.658538858712938e-15, "4E-15", "%5.G"},
+ {__LINE__, 3.660337267266058e+16, "+36603372672660579.034698", "%+f"},
+ {__LINE__, 3.661588742065142e-01, "0.366159", "%g"},
+ {__LINE__, 3.662296387211376e-25, "0.000000", "%f"},
+ {__LINE__, 3.668511100303393e-29, "0.000000", "%7f"},
+ {__LINE__, 3.669499303661920e+06, "3.6695e+06", "%1.5g"},
+ {__LINE__, 3.676856420121343e-23, "3.6769e-23", "%0.4e"},
+ {__LINE__, 3.677197473476901e-19, "+3.6772e-19", "%+g"},
+ {__LINE__, 3.677281754506453e+12, "+3677281754506.452671", "%+f"},
+ {__LINE__, 3.678420802401506e-19, "3.67842E-19", "%G"},
+ {__LINE__, 3.679970245325769e+07, "3.67997e+07", "%g"},
+ {__LINE__, 3.682528947621349e+05, "4.e+05", "%#5.e"},
+ {__LINE__, 3.688257471304210e+22, "36882574713042104441740.320908", "%f"},
+ {__LINE__, 3.689129734472166e-01, "0.368913", "%0.6G"},
+ {__LINE__, 3.693483801463324e+12, "4E+12", "%3.E"},
+ {__LINE__, 3.694612396584729e-21, "+3.69461E-21", "%+G"},
+ {__LINE__, 3.706150073392112e-19, "0.000000", "%2f"},
+ {__LINE__, 3.706824819530577e+21, "3706824819530576853310.321894", "%f"},
+ {__LINE__, 3.709583789659276e+19, "+3.709584E+19", "%+#E"},
+ {__LINE__, 3.711137503697284e+22, "3.7111E+22", "%.5G"},
+ {__LINE__, 3.717307412969522e-22, "3.717307E-22", "%#E"},
+ {__LINE__, 3.717434999853808e+24, " 4E+24", "%6.G"},
+ {__LINE__, 3.720761662524312e+14, "+372076166252431.2285", "%+1.4f"},
+ {__LINE__, 3.721613815237707e-10, "3.72161e-10", "%g"},
+ {__LINE__, 3.725086467464346e+14, "3.72509E+14", "%G"},
+ {__LINE__, 3.727427083626536e-15, "+4E-15", "%+.0G"},
+ {__LINE__, 3.731138322599465e-13, "3.73114e-13", "%5g"},
+ {__LINE__, 3.732248129614146e-04, " 4E-04", "%7.E"},
+ {__LINE__, 3.744422223926118e-24, "3.744422E-24", "%E"},
+ {__LINE__, 3.745595428897916e+21, "+3745595428897916079336.027906", "%+f"},
+ {__LINE__, 3.751308304055989e-08, "+3.751308e-08", "%+e"},
+ {__LINE__, 3.755395417696132e-02, "0.037554", "%f"},
+ {__LINE__, 3.769103881505159e+09, "3.7691e+09", "%g"},
+ {__LINE__, 3.769535572757430e+00, "3.769536", "%6.7G"},
+ {__LINE__, 3.770823872348274e-28, "+0.000000", "%+f"},
+ {__LINE__, 3.771160653578178e+29, "3.77116e+29", "%g"},
+ {__LINE__, 3.776563752716444e-12, "4E-12", "%.0E"},
+ {__LINE__, 3.777953798674786e-28, "3.77795e-28", "%g"},
+ {__LINE__, 3.785994690686598e+28, "4E+28", "%5.G"},
+ {__LINE__, 3.787487488835162e+01, "+37.874875", "%+5f"},
+ {__LINE__, 3.788249311173359e-18, "3.788249E-18", "%E"},
+ {__LINE__, 3.798728360791314e-08, "3.798728E-08", "%2E"},
+ {__LINE__, 3.799038238867092e+05, "3.79904E+05", "%.5E"},
+ {__LINE__, 3.799822564549600e+06, "3.79982E+06", "%.5E"},
+ {__LINE__, 3.804862840499834e-16, "0", "%1.f"},
+ {__LINE__, 3.805375156822481e+12, "3805375156822.4814861", "%.7f"},
+ {__LINE__, 3.821612790153376e-17, "3.821613e-17", "%e"},
+ {__LINE__, 3.825193659558693e+14, "3.82519E+14", "%#G"},
+ {__LINE__, 3.834180638680996e+17, "+383418063868099565.638659", "%+f"},
+ {__LINE__, 3.834759760605814e-12, "3.83476E-12", "%G"},
+ {__LINE__, 3.839786235582770e+16, "+3.84e+16", "%+0.3g"},
+ {__LINE__, 3.843164462248778e+28, "3.84316e+28", "%#g"},
+ {__LINE__, 3.845599697858050e+22, "3.8456E+22", "%G"},
+ {__LINE__, 3.850147271017228e-21, "3.85e-21", "%.4g"},
+ {__LINE__, 3.850283557812101e+07, "3.85028E+07", "%G"},
+ {__LINE__, 3.854235609725703e+03, "3854.24", "%G"},
+ {__LINE__, 3.864901885489405e-15, "3.8649E-15", "%G"},
+ {__LINE__, 3.868630187629983e-24, "3.868630e-24", "%e"},
+ {__LINE__, 3.876764606134972e-03, "+3.8767646e-03", "%+#0.7e"},
+ {__LINE__, 3.884553592855422e+08, "+3.8845536e+08", "%+4.7e"},
+ {__LINE__, 3.887417494351062e+03, "3887.42", "%0g"},
+ {__LINE__, 3.887561018972304e+03, "3887.56", "%G"},
+ {__LINE__, 3.888554801724658e-24, "3.888555e-24", "%e"},
+ {__LINE__, 3.892806891909861e-01, "0.389281", "%f"},
+ {__LINE__, 3.914459791345755e+15, "+3.914460E+15", "%+E"},
+ {__LINE__, 3.918383209642759e+01, "39.1838", "%#G"},
+ {__LINE__, 3.923970658741865e-10, "3.92397E-10", "%G"},
+ {__LINE__, 3.928163650272335e+18, "3928163650272335161.162118", "%f"},
+ {__LINE__, 3.933053127721002e-20, "3.933053e-20", "%e"},
+ {__LINE__, 3.939306552155218e-29, "3.93931E-29", "%G"},
+ {__LINE__, 3.953007066379472e+07, "3.953007E+07", "%E"},
+ {__LINE__, 3.954924824986267e-01, "3.954925E-01", "%E"},
+ {__LINE__, 3.956156072067987e+15, "3.956E+15", "%0.4G"},
+ {__LINE__, 3.957756196797224e+22, "4.0E+22", "%4.1E"},
+ {__LINE__, 3.960011413261009e+27, "+3960011413261008783592842519.283295", "%+f"},
+ {__LINE__, 3.961789076323378e+20, "396178907632337828914.614875", "%f"},
+ {__LINE__, 3.961985468081708e-28, "3.96199E-28", "%1G"},
+ {__LINE__, 3.975007582283812e-27, "0.000000", "%0.6f"},
+ {__LINE__, 3.987586813142132e+15, "+3.98759e+15", "%+g"},
+ {__LINE__, 3.992250836957379e+21, "3.99225E+21", "%0G"},
+ {__LINE__, 3.992985048620057e+00, "3.9930", "%.4f"},
+ {__LINE__, 4.000000000000000e+02, "400.00", "%.2f"},
+ {__LINE__, 4.000145414240556e+14, "4.00015e+14", "%#6g"},
+ {__LINE__, 4.000774453529974e-25, "4E-25", "%.0E"},
+ {__LINE__, 4.002041494804383e+17, "4.002041E+17", "%E"},
+ {__LINE__, 4.005505415013214e+17, " 4E+17", "%6.2G"},
+ {__LINE__, 4.008960306876491e-28, "0.000", "%.3f"},
+ {__LINE__, 4.032337828117640e+16, "4.03234E+16", "%G"},
+ {__LINE__, 4.035414597530057e+26, "403541459753005682387083652.429283", "%f"},
+ {__LINE__, 4.037065874793069e-01, "0.403707", "%f"},
+ {__LINE__, 4.047856284449970e-14, "4.04786E-14", "%#G"},
+ {__LINE__, 4.049037221323070e-04, "4.049037e-04", "%e"},
+ {__LINE__, 4.053458853142009e-07, "4E-07", "%2.0E"},
+ {__LINE__, 4.056455443275955e-22, "4.056455e-22", "%e"},
+ {__LINE__, 4.058158020771355e-22, "4.05816e-22", "%#2g"},
+ {__LINE__, 4.067283508945137e+02, "+4.07e+02", "%+5.2e"},
+ {__LINE__, 4.072155715199509e+11, "4.072e+11", "%.4g"},
+ {__LINE__, 4.074643403755990e-22, "4e-22", "%0.g"},
+ {__LINE__, 4.077450352325251e+08, "4.1e+08", "%3.2g"},
+ {__LINE__, 4.081492619284916e-08, "4.081493E-08", "%E"},
+ {__LINE__, 4.083271801996951e-10, "4.083272E-10", "%#E"},
+ {__LINE__, 4.090188547940879e-15, "4.090189E-15", "%#E"},
+ {__LINE__, 4.091167728938537e-11, "4e-11", "%1.g"},
+ {__LINE__, 4.091916745541154e+15, "4091916745541153.588306", "%f"},
+ {__LINE__, 4.092366122921161e+23, "4E+23", "%0.E"},
+ {__LINE__, 4.094638368212577e-11, "4.09464E-11", "%#G"},
+ {__LINE__, 4.097148443124199e-16, "0.000000", "%f"},
+ {__LINE__, 4.101057893946401e+06, "4e+06", "%4.g"},
+ {__LINE__, 4.101209521231476e+28, "41012095212314756409455185348.633677", "%f"},
+ {__LINE__, 4.105683659045903e+05, "+4.E+05", "%+#1.G"},
+ {__LINE__, 4.111553717385758e-16, "4.11155e-16", "%g"},
+ {__LINE__, 4.112186409918593e+14, "+4.11219e+14", "%+g"},
+ {__LINE__, 4.117782144860865e+25, "4.117782E+25", "%5E"},
+ {__LINE__, 4.119420921722146e-27, "4.11942e-27", "%g"},
+ {__LINE__, 4.134953783635018e+14, "+4.1349538e+14", "%+.7e"},
+ {__LINE__, 4.136990822648468e+11, "4.136991E+11", "%E"},
+ {__LINE__, 4.140475788523046e+14, "+4E+14", "%+5.G"},
+ {__LINE__, 4.149589679915584e+24, "4.14959E+24", "%2G"},
+ {__LINE__, 4.151240342256744e-22, " 0", "%2.f"},
+ {__LINE__, 4.155533104307272e-04, "+0.000416", "%+f"},
+ {__LINE__, 4.155890511880097e+25, "4.155891e+25", "%e"},
+ {__LINE__, 4.159907901074450e-19, "4.159908E-19", "%7E"},
+ {__LINE__, 4.171899783464252e+18, "4E+18", "%.0E"},
+ {__LINE__, 4.177920266276382e-17, "+0.0000", "%+1.4f"},
+ {__LINE__, 4.181728014477237e-20, "4.18173e-20", "%.6g"},
+ {__LINE__, 4.203600495086497e-30, " 4E-30", "%6.G"},
+ {__LINE__, 4.211166112605717e-08, "4E-08", "%5.1G"},
+ {__LINE__, 4.219513437404614e+18, "+4E+18", "%+.0E"},
+ {__LINE__, 4.221426315236785e+08, "4.221426E+08", "%#E"},
+ {__LINE__, 4.226224756005934e-13, " 4.e-13", "%#7.g"},
+ {__LINE__, 4.226979046489921e-01, "4.226979e-01", "%#.6e"},
+ {__LINE__, 4.236283521629158e-08, "+4.23628E-08", "%+G"},
+ {__LINE__, 4.239850628514233e-07, "4.23985E-07", "%.6G"},
+ {__LINE__, 4.241177358638621e+04, "42411.773586", "%2f"},
+ {__LINE__, 4.245306724398964e-13, "0.000000", "%#f"},
+ {__LINE__, 4.246194290300334e+16, "42461942903003340.177293", "%2f"},
+ {__LINE__, 4.251238996137952e-05, "4.25124E-05", "%3G"},
+ {__LINE__, 4.262432542017438e+13, "42624325420174.375978", "%1f"},
+ {__LINE__, 4.266383084300715e+16, "4E+16", "%4.G"},
+ {__LINE__, 4.292963398931474e-11, "4.292963E-11", "%E"},
+ {__LINE__, 4.296530271399131e-29, "0.000000", "%6f"},
+ {__LINE__, 4.303753949741171e+19, "4.30375E+19", "%2G"},
+ {__LINE__, 4.303767633827431e-28, "4.30377e-28", "%g"},
+ {__LINE__, 4.316181911403991e-30, "4.3162e-30", "%#7.5g"},
+ {__LINE__, 4.318654697213126e-18, "4.31865e-18", "%g"},
+ {__LINE__, 4.320618603119499e+05, "432061.860312", "%3f"},
+ {__LINE__, 4.322443609118441e+21, "4.32244E+21", "%7.5E"},
+ {__LINE__, 4.322522446810708e-15, "4.32252e-15", "%.6g"},
+ {__LINE__, 4.334728493589115e-18, "0.000000", "%f"},
+ {__LINE__, 4.335342531476346e-19, "4.33534E-19", "%G"},
+ {__LINE__, 4.340579325084176e-30, "4.34058e-30", "%#0.6g"},
+ {__LINE__, 4.340775659883185e+04, "43407.756599", "%6f"},
+ {__LINE__, 4.361131891528634e-14, " 4E-14", "%6.G"},
+ {__LINE__, 4.366662624371249e-02, "+0.04", "%+4.g"},
+ {__LINE__, 4.369919308458348e+28, "+4.36992e+28", "%+2g"},
+ {__LINE__, 4.369930393192433e-24, "4.369930e-24", "%e"},
+ {__LINE__, 4.376283118322521e-01, "0.437628", "%g"},
+ {__LINE__, 4.386868840825930e+19, "4.3869E+19", "%.5G"},
+ {__LINE__, 4.389349113395235e+05, "+4.389349e+05", "%+e"},
+ {__LINE__, 4.392447466753053e-08, "+4.392E-08", "%+.4G"},
+ {__LINE__, 4.394068619246889e-13, "4.39407e-13", "%6g"},
+ {__LINE__, 4.404889573700147e-09, "4.404890E-09", "%E"},
+ {__LINE__, 4.410531039373014e+05, "+4.41e+05", "%+.2e"},
+ {__LINE__, 4.412466606726400e-08, " 0.0", "%6.1f"},
+ {__LINE__, 4.414693719279123e+17, "4.414694e+17", "%e"},
+ {__LINE__, 4.417050329080679e-01, "+0.441705", "%+g"},
+ {__LINE__, 4.419509841929196e-10, "4.4195098E-10", "%.7E"},
+ {__LINE__, 4.421012777695611e+07, "+4.42101E+07", "%+0.6G"},
+ {__LINE__, 4.426387732151208e+11, "4.42639e+11", "%g"},
+ {__LINE__, 4.439567017550398e+26, "4.439567E+26", "%E"},
+ {__LINE__, 4.446479816166258e-21, "4.446480e-21", "%0e"},
+ {__LINE__, 4.453486178424380e+05, "445348.617842", "%f"},
+ {__LINE__, 4.455733696043438e+06, "4.45573e+06", "%3g"},
+ {__LINE__, 4.455870606312063e+16, "4.45587e+16", "%g"},
+ {__LINE__, 4.458776435431700e+22, "4e+22", "%1.g"},
+ {__LINE__, 4.466448605584151e-30, "0.000000", "%f"},
+ {__LINE__, 4.471063097005706e+16, "4.47106E+16", "%G"},
+ {__LINE__, 4.482001890035190e-22, "+4.482E-22", "%+G"},
+ {__LINE__, 4.493246870093631e+05, "449325", "%1G"},
+ {__LINE__, 4.496089639281023e+17, "4.49609e+17", "%g"},
+ {__LINE__, 4.515066070117557e+15, "4.51507e+15", "%g"},
+ {__LINE__, 4.518296460916194e+24, "+4.5183E+24", "%+G"},
+ {__LINE__, 4.526548719445596e+02, "452.655", "%6.3f"},
+ {__LINE__, 4.532756455106440e-26, "4.53e-26", "%4.2e"},
+ {__LINE__, 4.534466782633055e-14, "4.53447E-14", "%G"},
+ {__LINE__, 4.541313061854649e-14, "4.54131E-14", "%G"},
+ {__LINE__, 4.541848265404338e+02, " 5E+02", "%7.G"},
+ {__LINE__, 4.546603085406363e-26, "5E-26", "%3.G"},
+ {__LINE__, 4.557349604829375e+28, "+45573496048293753446500886639.", "%+#1.f"},
+ {__LINE__, 4.560736449944898e-27, "4.56074e-27", "%g"},
+ {__LINE__, 4.563726230559341e-15, "+0.0", "%+2.1f"},
+ {__LINE__, 4.572650965532532e-26, "+5E-26", "%+4.G"},
+ {__LINE__, 4.574369572115099e-10, "+0.000000", "%+2.6f"},
+ {__LINE__, 4.576480601519729e+28, "+4.576481e+28", "%+e"},
+ {__LINE__, 4.587487640650499e+02, "+458.75", "%+3.2f"},
+ {__LINE__, 4.598365231538559e-27, "4.59837E-27", "%G"},
+ {__LINE__, 4.599348244725009e-28, "+4.5993482e-28", "%+#3.7e"},
+ {__LINE__, 4.599897524047587e+22, "45998975240475870052136.997401", "%#f"},
+ {__LINE__, 4.605415604725077e-25, "0.000000", "%f"},
+ {__LINE__, 4.613055015797716e+28, "4.613055E+28", "%E"},
+ {__LINE__, 4.618715275814238e-10, "4.618715E-10", "%E"},
+ {__LINE__, 4.619044579489540e-14, "0.00", "%.2f"},
+ {__LINE__, 4.633693310095410e-20, "+0.000000", "%+f"},
+ {__LINE__, 4.648505395281916e-28, "0.000000", "%f"},
+ {__LINE__, 4.651232770446398e+21, "4.65e+21", "%.2e"},
+ {__LINE__, 4.659743589975352e+28, "+4.65974e+28", "%+g"},
+ {__LINE__, 4.660181457075208e-13, "4.66018e-13", "%g"},
+ {__LINE__, 4.669787018529686e+20, "4.66979e+20", "%g"},
+ {__LINE__, 4.672649286126732e-21, "4.6726E-21", "%4.5G"},
+ {__LINE__, 4.675431901120643e-11, " 0", "%3.f"},
+ {__LINE__, 4.684404068169945e+26, "468440406816994503458317922.2", "%6.1f"},
+ {__LINE__, 4.685438834234642e+19, "5.E+19", "%#6.G"},
+ {__LINE__, 4.688915890732712e+00, "+5e+00", "%+2.e"},
+ {__LINE__, 4.692999432046297e+00, "4.692999E+00", "%E"},
+ {__LINE__, 4.708690772584701e+11, "4.70869e+11", "%g"},
+ {__LINE__, 4.711821455782105e-11, "+4.71182e-11", "%+1g"},
+ {__LINE__, 4.712413965116830e-01, "4.712414E-01", "%E"},
+ {__LINE__, 4.719504715401049e-08, "0.000000", "%f"},
+ {__LINE__, 4.719767896031655e+27, "4.71977e+27", "%#g"},
+ {__LINE__, 4.722493017411588e-05, "0.000047", "%4f"},
+ {__LINE__, 4.729482386761477e+08, "4.72948e+08", "%1g"},
+ {__LINE__, 4.730102169800602e-06, "0.000005", "%f"},
+ {__LINE__, 4.743951614209393e+24, "4.743952E+24", "%#E"},
+ {__LINE__, 4.746077075605921e-16, "4.746E-16", "%.3E"},
+ {__LINE__, 4.747802537919248e+24, "4747802537919247889419694", "%4.f"},
+ {__LINE__, 4.754727690703025e-26, "0", "%0.f"},
+ {__LINE__, 4.756952432926979e-29, " 0.", "%#3.f"},
+ {__LINE__, 4.758335147956709e+03, "4758.335148", "%f"},
+ {__LINE__, 4.760141880810268e-25, "4.760142e-25", "%e"},
+ {__LINE__, 4.767079423650815e-07, "5.E-07", "%#0.G"},
+ {__LINE__, 4.785662728343338e-28, "4.78566e-28", "%g"},
+ {__LINE__, 4.787146245774150e-13, "+4.78715E-13", "%+G"},
+ {__LINE__, 4.787415449888824e-17, "4.78742e-17", "%3g"},
+ {__LINE__, 4.794589807429657e-05, "4.79459E-05", "%6G"},
+ {__LINE__, 4.794948299666205e+08, "4.79495e+08", "%g"},
+ {__LINE__, 4.802292865915992e-04, "4.802293e-04", "%e"},
+ {__LINE__, 4.802513688198601e+07, "+4.8e+07", "%+2.3g"},
+ {__LINE__, 4.810456746192536e+06, "5E+06", "%0.0G"},
+ {__LINE__, 4.820631660081696e+20, "+4.82063E+20", "%+G"},
+ {__LINE__, 4.827865857270075e-20, "4.82787e-20", "%g"},
+ {__LINE__, 4.835054268490970e+21, "4835054268490970308391.752042", "%#f"},
+ {__LINE__, 4.838136770808465e-18, "4.83814E-18", "%G"},
+ {__LINE__, 4.839342397882353e-26, "4.839342E-26", "%E"},
+ {__LINE__, 4.845130210072029e-16, "0", "%1.f"},
+ {__LINE__, 4.845161043167169e-12, "+4.845e-12", "%+.4g"},
+ {__LINE__, 4.857425142494964e+01, "48.574251", "%f"},
+ {__LINE__, 4.858118337285513e-10, "+4.8581e-10", "%+.5g"},
+ {__LINE__, 4.867478343525339e-15, "+4.867478E-15", "%+E"},
+ {__LINE__, 4.886137001331278e-11, "0.000000", "%f"},
+ {__LINE__, 4.886835850687998e-20, " 0", "%6.0f"},
+ {__LINE__, 4.886880737482383e+26, "488688073748238327453918827.814050", "%4f"},
+ {__LINE__, 4.888812049144075e-22, "4.888812E-22", "%E"},
+ {__LINE__, 4.895869618002905e+02, "+489.587", "%+.7g"},
+ {__LINE__, 4.902046593298549e+09, " 5e+09", "%7.g"},
+ {__LINE__, 4.907918627564751e-05, "4.91e-05", "%.3g"},
+ {__LINE__, 4.916048355579009e+19, "49160483555790088772", "%2.f"},
+ {__LINE__, 4.917197806128638e+14, "+5e+14", "%+5.g"},
+ {__LINE__, 4.918303274189911e+13, "4.918303e+13", "%e"},
+ {__LINE__, 4.922687970321108e+26, "492268797032110771993984599.2485", "%0.4f"},
+ {__LINE__, 4.929263362431195e+14, "4.92926e+14", "%g"},
+ {__LINE__, 4.933385398543267e-17, "0.000000", "%#f"},
+ {__LINE__, 4.942367126455025e+00, " +5", "%+6.f"},
+ {__LINE__, 4.947687486717652e-04, "0.000495", "%.6f"},
+ {__LINE__, 4.960855200003128e-08, "+4.960855e-08", "%+e"},
+ {__LINE__, 4.968485435774085e-21, "0.0000", "%#2.4f"},
+ {__LINE__, 4.972088381506133e+01, "49.7", "%.1f"},
+ {__LINE__, 4.977561524480392e-15, "4.977562E-15", "%7E"},
+ {__LINE__, 4.984592111249502e-13, "5.0e-13", "%.1e"},
+ {__LINE__, 4.997502335602838e-14, "4.998e-14", "%6.4g"},
+ {__LINE__, 5.001731554335935e-09, "5.00173e-09", "%g"},
+ {__LINE__, 5.006231697107042e-17, "5.0062e-17", "%1.5g"},
+ {__LINE__, 5.008035801093423e+24, "5.008036E+24", "%#E"},
+ {__LINE__, 5.008756965733827e-28, "5.009E-28", "%.4G"},
+ {__LINE__, 5.009774027622812e+20, "+5.00977E+20", "%+G"},
+ {__LINE__, 5.010576312346293e+29, "5.01058E+29", "%G"},
+ {__LINE__, 5.012335250996786e+29, "5.012335e+29", "%.7g"},
+ {__LINE__, 5.012404365186907e+20, "5E+20", "%3.2G"},
+ {__LINE__, 5.024670103250229e-01, "+5.024670E-01", "%+E"},
+ {__LINE__, 5.025765369164560e+03, "5025.77", "%g"},
+ {__LINE__, 5.027173841003918e+11, "+5.02717E+11", "%+G"},
+ {__LINE__, 5.032093817639893e-26, "5e-26", "%3.e"},
+ {__LINE__, 5.039636818525848e-02, "0.050396", "%#f"},
+ {__LINE__, 5.040626671307691e+23, "5.040627E+23", "%E"},
+ {__LINE__, 5.040788233368296e-11, "+5.04079e-11", "%+g"},
+ {__LINE__, 5.040903321336150e-28, "5.0409E-28", "%G"},
+ {__LINE__, 5.042078512958994e+12, "5.04208E+12", "%G"},
+ {__LINE__, 5.045957900223303e+15, "5045957900223303", "%0.f"},
+ {__LINE__, 5.048298764352134e-14, "5.048299e-14", "%1e"},
+ {__LINE__, 5.048827326763192e+28, "50488273267631917917697137454.524636", "%f"},
+ {__LINE__, 5.049714558347361e-23, "5e-23", "%5.0g"},
+ {__LINE__, 5.051509904923853e+16, "50515099049238534", "%5.f"},
+ {__LINE__, 5.052789863743305e-10, "5.05279E-10", "%6G"},
+ {__LINE__, 5.057429728861999e-29, "0.000", "%#1.3f"},
+ {__LINE__, 5.075313093968501e-13, "+5.07531e-13", "%+g"},
+ {__LINE__, 5.075874503501582e+29, "5e+29", "%2.e"},
+ {__LINE__, 5.079468079020803e+01, "50.795", "%.5G"},
+ {__LINE__, 5.086214826494080e-28, " 0.0", "%4.1f"},
+ {__LINE__, 5.096054881114421e+13, "5.096e+13", "%.4g"},
+ {__LINE__, 5.099045274853458e-23, "5.09905E-23", "%0G"},
+ {__LINE__, 5.100248195124433e+00, "5.100248", "%f"},
+ {__LINE__, 5.101016114276598e-20, "5e-20", "%4.1g"},
+ {__LINE__, 5.103213528670269e+07, "51032135.286703", "%6f"},
+ {__LINE__, 5.108373625126768e+08, "+510837362.512677", "%+f"},
+ {__LINE__, 5.113097157183416e+07, "5.1131E+07", "%#.4E"},
+ {__LINE__, 5.114452611789777e+08, "+5.11445E+08", "%+G"},
+ {__LINE__, 5.117099184715288e-16, "5.1171E-16", "%G"},
+ {__LINE__, 5.119910534665511e-13, "+5.11991E-13", "%+G"},
+ {__LINE__, 5.121320931953720e+23, "+5.121321e+23", "%+#e"},
+ {__LINE__, 5.121900318443998e+06, "5.121900e+06", "%e"},
+ {__LINE__, 5.135698679084286e+00, "5.1357", "%2g"},
+ {__LINE__, 5.146355903104154e-10, "+5.14636E-10", "%+.6G"},
+ {__LINE__, 5.148754210958986e-24, "+5.148754e-24", "%+e"},
+ {__LINE__, 5.156238368448428e+26, "5e+26", "%5.g"},
+ {__LINE__, 5.159924520667922e-19, "+5E-19", "%+0.1G"},
+ {__LINE__, 5.159938266135425e-27, "0.000000", "%f"},
+ {__LINE__, 5.165915205175676e-01, "5.165915e-01", "%e"},
+ {__LINE__, 5.190205499401547e-11, "5e-11", "%2.1g"},
+ {__LINE__, 5.193260005542003e+26, "5.19326e+26", "%#g"},
+ {__LINE__, 5.194732077318269e+08, "519473207.731827", "%f"},
+ {__LINE__, 5.196394616633798e-19, "0", "%.0f"},
+ {__LINE__, 5.206753628035638e+19, "5.20675e+19", "%6.6g"},
+ {__LINE__, 5.207364136540851e-23, " 0.000", "%6.3f"},
+ {__LINE__, 5.210672737132108e-09, "5.21067E-09", "%G"},
+ {__LINE__, 5.211423933057123e-20, "+5.21142E-20", "%+G"},
+ {__LINE__, 5.219749528363367e-27, "5.219750e-27", "%e"},
+ {__LINE__, 5.228031587478653e-06, "+5.2E-06", "%+3.1E"},
+ {__LINE__, 5.229303095005359e-25, "+0.000000", "%+#f"},
+ {__LINE__, 5.234703511938320e-06, " 0", "%7.f"},
+ {__LINE__, 5.235655046937822e-20, "5.235655E-20", "%.6E"},
+ {__LINE__, 5.237924986002288e-01, "+0.52379", "%+.5f"},
+ {__LINE__, 5.249148093603826e+20, "5.24915E+20", "%0G"},
+ {__LINE__, 5.262680920244596e+16, "5.26268E+16", "%G"},
+ {__LINE__, 5.267944704715845e-06, "5.e-06", "%#3.g"},
+ {__LINE__, 5.268543533730505e-08, "5.26854E-08", "%G"},
+ {__LINE__, 5.275727269515247e-02, "0.0527573", "%.6g"},
+ {__LINE__, 5.279215316873723e+24, "5279215316873722585455652.733799", "%f"},
+ {__LINE__, 5.284326985680811e+16, "52843269856808108.286828", "%6f"},
+ {__LINE__, 5.286192957344040e-10, "5.3E-10", "%.1E"},
+ {__LINE__, 5.289451976001091e-23, "5.28945E-23", "%G"},
+ {__LINE__, 5.289512908209300e+09, "+5.289513e+09", "%+e"},
+ {__LINE__, 5.295696957972123e+11, "5.296E+11", "%#.3E"},
+ {__LINE__, 5.303584684011050e+16, "53035846840110503.208621", "%f"},
+ {__LINE__, 5.310315581980172e+23, "531031558198017172855998", "%4.f"},
+ {__LINE__, 5.317492728410062e-14, "5.31749e-14", "%7g"},
+ {__LINE__, 5.324506949499409e+18, "5.3245E+18", "%.5G"},
+ {__LINE__, 5.329238068668336e-20, "5e-20", "%4.g"},
+ {__LINE__, 5.336050125161774e+14, "5.33605e+14", "%g"},
+ {__LINE__, 5.349921315003169e-17, "5.34992E-17", "%.6G"},
+ {__LINE__, 5.355648481782587e-20, "5.355648e-20", "%e"},
+ {__LINE__, 5.358945557589489e-26, "+5e-26", "%+0.g"},
+ {__LINE__, 5.359638846465574e+21, "5.359639E+21", "%E"},
+ {__LINE__, 5.377048469393900e+14, "5.377E+14", "%.5G"},
+ {__LINE__, 5.387471194156434e+23, "5.387471E+23", "%.7G"},
+ {__LINE__, 5.401622578962497e-03, "+0.0054", "%+5.2g"},
+ {__LINE__, 5.406882732497444e-16, "5.406883E-16", "%E"},
+ {__LINE__, 5.421474560523198e-11, "+5.42147e-11", "%+g"},
+ {__LINE__, 5.440249323479418e-26, "5.44025E-26", "%7G"},
+ {__LINE__, 5.440922682921101e-05, "5e-05", "%.1g"},
+ {__LINE__, 5.444400103673185e-01, "0.54444", "%G"},
+ {__LINE__, 5.449339470916152e+09, "5449339470.9162", "%.4f"},
+ {__LINE__, 5.451583259558706e-15, "5.e-15", "%#4.e"},
+ {__LINE__, 5.460153018660573e+26, "+546015301866057267687892817.775719", "%+f"},
+ {__LINE__, 5.477591210511918e+08, "+5.47759E+08", "%+0.5E"},
+ {__LINE__, 5.481665401407188e-02, "5.481665e-02", "%e"},
+ {__LINE__, 5.482670784411319e-16, "5E-16", "%4.G"},
+ {__LINE__, 5.487494580636099e+12, "5.48749e+12", "%g"},
+ {__LINE__, 5.508630369473937e-10, "5.508630e-10", "%e"},
+ {__LINE__, 5.528898001438273e+20, "6e+20", "%4.g"},
+ {__LINE__, 5.530331734443152e-24, " 6e-24", "%6.g"},
+ {__LINE__, 5.531704398969656e-24, "0.000000", "%f"},
+ {__LINE__, 5.539906569043238e+05, "+553990.656904", "%+f"},
+ {__LINE__, 5.554571854756323e-08, "+0.00000", "%+4.5f"},
+ {__LINE__, 5.555155069925145e-28, "5.55516e-28", "%g"},
+ {__LINE__, 5.555302705075539e-08, "+5.5553e-08", "%+g"},
+ {__LINE__, 5.563805076159055e-05, "5.563805e-05", "%e"},
+ {__LINE__, 5.565063508995002e+07, "5.565E+07", "%.3E"},
+ {__LINE__, 5.566281664807526e-08, "5.56628E-08", "%G"},
+ {__LINE__, 5.575245679736338e-08, "5.575246e-08", "%e"},
+ {__LINE__, 5.578254777281501e-21, "0.", "%#.0f"},
+ {__LINE__, 5.582389275770848e-01, " 0.6", "%5.G"},
+ {__LINE__, 5.592215029176133e-04, "0.00056", "%.2g"},
+ {__LINE__, 5.593536789867047e-25, "5.59354e-25", "%g"},
+ {__LINE__, 5.605652054074862e-03, " 0.006", "%8.G"},
+ {__LINE__, 5.606982382643258e+20, "+5.60698E+20", "%+G"},
+ {__LINE__, 5.614646821116853e-18, "5.6E-18", "%.2G"},
+ {__LINE__, 5.625586848606565e-11, "+5.62559E-11", "%+G"},
+ {__LINE__, 5.626300428046732e+26, " 6e+26", "%7.g"},
+ {__LINE__, 5.638236626881086e-17, " 6E-17", "%6.G"},
+ {__LINE__, 5.645744817075691e+04, "5.645745E+04", "%E"},
+ {__LINE__, 5.651410004691736e+06, "6.E+06", "%#3.E"},
+ {__LINE__, 5.659582345929256e-11, "+0.000000", "%+f"},
+ {__LINE__, 5.670968861413510e+16, "+5.67097E+16", "%+G"},
+ {__LINE__, 5.672476851235796e+01, "+56.724769", "%+0f"},
+ {__LINE__, 5.674563779921248e+28, " 6E+28", "%6.0G"},
+ {__LINE__, 5.675558529939025e+19, "5.67556e+19", "%3g"},
+ {__LINE__, 5.676326888314589e-08, " 6e-08", "%7.g"},
+ {__LINE__, 5.677928507840897e-30, "5.67793e-30", "%0g"},
+ {__LINE__, 5.686622552402630e-15, "5.69E-15", "%1.3G"},
+ {__LINE__, 5.710441686922142e-14, "5.710442E-14", "%E"},
+ {__LINE__, 5.713234603280163e-21, "0.00000", "%0.5f"},
+ {__LINE__, 5.714968959046963e+12, "5.71497e+12", "%g"},
+ {__LINE__, 5.722025141555638e-23, "5.72e-23", "%.2e"},
+ {__LINE__, 5.725398571007033e-09, "5.7254E-09", "%.6G"},
+ {__LINE__, 5.751604813862738e+18, "6E+18", "%.1G"},
+ {__LINE__, 5.761025444751985e+20, "5.76103e+20", "%g"},
+ {__LINE__, 5.762315767948593e+15, "5.76232e+15", "%4g"},
+ {__LINE__, 5.764528858586032e-15, "5.764529E-15", "%6.7G"},
+ {__LINE__, 5.766408541535810e-07, " 6E-07", "%6.1G"},
+ {__LINE__, 5.771831571087174e-01, "0.577183", "%f"},
+ {__LINE__, 5.790102497364865e-15, "+5.790102e-15", "%+e"},
+ {__LINE__, 5.790222335547785e-08, "5.79022e-08", "%0.6g"},
+ {__LINE__, 5.794082127091130e+21, "5794082127091130018925.468903", "%f"},
+ {__LINE__, 5.804568463644165e+28, "5.80457e+28", "%g"},
+ {__LINE__, 5.827356651901066e+20, "582735665190106555400.006982", "%f"},
+ {__LINE__, 5.837553387436408e+18, "5.837553E+18", "%3E"},
+ {__LINE__, 5.844458110907209e+22, "5.84446e+22", "%g"},
+ {__LINE__, 5.851672125746866e-19, "5.85167e-19", "%g"},
+ {__LINE__, 5.868843476784172e-12, "5.868843e-12", "%1.7g"},
+ {__LINE__, 5.870854146748864e-04, "0.000587", "%2.3g"},
+ {__LINE__, 5.877787821470433e+01, "+58.77788", "%+#3.5f"},
+ {__LINE__, 5.881333514866498e+04, "5.881334E+04", "%E"},
+ {__LINE__, 5.908427816128965e+28, "+5.908428E+28", "%+E"},
+ {__LINE__, 5.918139800007388e+07, "59181398.000074", "%f"},
+ {__LINE__, 5.925587467475260e+21, "5925587467475259551008.548442", "%f"},
+ {__LINE__, 5.930403502679683e-22, "5.9304E-22", "%.6G"},
+ {__LINE__, 5.961572644847521e+02, "+596.157", "%+G"},
+ {__LINE__, 5.968917715225198e-21, "5.96892e-21", "%4g"},
+ {__LINE__, 5.982184454670110e-08, "0", "%0.f"},
+ {__LINE__, 5.988414319040855e+09, "6E+09", "%0.G"},
+ {__LINE__, 5.996263783103995e-10, "5.996264e-10", "%e"},
+ {__LINE__, 6.004634162276014e-18, "6.00463e-18", "%g"},
+ {__LINE__, 6.018734975519166e-08, "6.01873E-08", "%G"},
+ {__LINE__, 6.029071822986717e-14, "0.0000000", "%.7f"},
+ {__LINE__, 6.030392278117406e+23, "6.030392e+23", "%e"},
+ {__LINE__, 6.034553399237175e-27, "+6.03455e-27", "%+g"},
+ {__LINE__, 6.034938873443862e+24, "6034938873443861595546877.651941", "%f"},
+ {__LINE__, 6.038929148003457e-16, "6.03893e-16", "%g"},
+ {__LINE__, 6.039149626573702e-13, "6.0391E-13", "%3.5G"},
+ {__LINE__, 6.041247664739301e+29, "6.041248E+29", "%3E"},
+ {__LINE__, 6.044220746789781e+20, "+6.04422e+20", "%+g"},
+ {__LINE__, 6.045775647107433e+19, "6E+19", "%2.G"},
+ {__LINE__, 6.051917010461611e-05, "6.05192E-05", "%G"},
+ {__LINE__, 6.059773181566425e+17, "+605977318156642486", "%+5.f"},
+ {__LINE__, 6.082239575475813e+01, "+6E+01", "%+.1G"},
+ {__LINE__, 6.093984174629151e+18, "6.093984e+18", "%e"},
+ {__LINE__, 6.102368380479137e+22, "6.1E+22", "%.2G"},
+ {__LINE__, 6.103097446204007e+25, "61030974462040070704915706.301108", "%#0f"},
+ {__LINE__, 6.105244994410556e-24, "0.0000000", "%2.7f"},
+ {__LINE__, 6.110828906801633e-14, "+6.110829e-14", "%+3e"},
+ {__LINE__, 6.124439072468681e-30, "6.12444e-30", "%g"},
+ {__LINE__, 6.127714703273447e-15, "0", "%0.f"},
+ {__LINE__, 6.128539582408870e-15, "6.12854e-15", "%g"},
+ {__LINE__, 6.145470264744349e+24, "6145470264744348654062378.045637", "%f"},
+ {__LINE__, 6.159177701667455e+26, "615917770166745537352426254.074089", "%#f"},
+ {__LINE__, 6.159348213337442e+17, "6.15935e+17", "%g"},
+ {__LINE__, 6.161953891020492e-21, "0.000000", "%f"},
+ {__LINE__, 6.169474192777305e+29, "+6.169E+29", "%+.4G"},
+ {__LINE__, 6.198519761010651e-15, "+0", "%+1.f"},
+ {__LINE__, 6.201381824304919e-27, " 0", "%5.f"},
+ {__LINE__, 6.204387065736372e-18, "6.204387E-18", "%7E"},
+ {__LINE__, 6.209270088144063e-24, "0.000000", "%f"},
+ {__LINE__, 6.209871738353546e-20, "6.20987E-20", "%G"},
+ {__LINE__, 6.222733191871026e+14, "+6.22273e+14", "%+g"},
+ {__LINE__, 6.234670085354310e+04, "+62346.700854", "%+f"},
+ {__LINE__, 6.258389346602224e-09, "6E-09", "%.0G"},
+ {__LINE__, 6.263326582587503e+12, "6263326582588.", "%#5.f"},
+ {__LINE__, 6.272768026763922e+03, "+6272.77", "%+g"},
+ {__LINE__, 6.287747868625765e+00, "6E+00", "%.0E"},
+ {__LINE__, 6.297724027388795e-17, "+6E-17", "%+3.G"},
+ {__LINE__, 6.309940679156400e+27, "6.30994e+27", "%6.5e"},
+ {__LINE__, 6.312960327030170e+06, "+6.312960E+06", "%+E"},
+ {__LINE__, 6.317658179632976e+02, "+631.766", "%+g"},
+ {__LINE__, 6.321255960699571e-27, "0.000000", "%f"},
+ {__LINE__, 6.323069932833900e+03, "6323", "%.4G"},
+ {__LINE__, 6.337027835933034e+21, "6.33703e+21", "%#g"},
+ {__LINE__, 6.343583177899838e-03, "0.00634358", "%7G"},
+ {__LINE__, 6.347464241733904e-03, "6.e-03", "%#0.e"},
+ {__LINE__, 6.352038720353924e+07, "63520387.203539", "%f"},
+ {__LINE__, 6.355292378565109e+23, "+635529237856510942350496.407016", "%+f"},
+ {__LINE__, 6.377901944439164e-29, "0.000", "%2.3f"},
+ {__LINE__, 6.378660255554053e-04, "6.37866E-04", "%.5E"},
+ {__LINE__, 6.382838195255167e-18, "0.000000", "%f"},
+ {__LINE__, 6.391046303581911e+22, "6E+22", "%.0G"},
+ {__LINE__, 6.404812348309621e+22, "6.404812E+22", "%.7G"},
+ {__LINE__, 6.406154091357119e+16, "6.40615E+16", "%G"},
+ {__LINE__, 6.419414726557980e+21, "+6.41941e+21", "%+g"},
+ {__LINE__, 6.432166563008504e+10, " +6e+10", "%+7.g"},
+ {__LINE__, 6.438463704193190e+19, "6.438464e+19", "%e"},
+ {__LINE__, 6.445270237908565e+15, "+6.445270E+15", "%+E"},
+ {__LINE__, 6.445536770502964e+09, "6.446e+09", "%.3e"},
+ {__LINE__, 6.446614224811444e+28, "64466142248114444157636171439.662576", "%f"},
+ {__LINE__, 6.457046289718297e+18, "6457046289718297416.015957", "%4f"},
+ {__LINE__, 6.457682856890173e+01, "6.457683E+01", "%2E"},
+ {__LINE__, 6.471026352792729e-16, "+6.47103e-16", "%+g"},
+ {__LINE__, 6.474527749567342e+19, "6E+19", "%.1G"},
+ {__LINE__, 6.481178401781131e-24, "+6.48E-24", "%+6.3G"},
+ {__LINE__, 6.490736647261461e-15, "+6.49074e-15", "%+g"},
+ {__LINE__, 6.493196535069719e+23, "+6.4932E+23", "%+G"},
+ {__LINE__, 6.500296992935538e-20, "+0.0", "%+.1f"},
+ {__LINE__, 6.502867735895890e-19, "+0.000000", "%+6f"},
+ {__LINE__, 6.506627529164683e+14, "650662752916468", "%5.f"},
+ {__LINE__, 6.511909298966434e-15, "+6.51191E-15", "%+G"},
+ {__LINE__, 6.514463062693312e+01, "65.1446", "%G"},
+ {__LINE__, 6.520721469484543e+16, "6.52072E+16", "%G"},
+ {__LINE__, 6.528064508731680e-05, "6.528065E-05", "%7E"},
+ {__LINE__, 6.529007214194039e-24, "0.000000", "%f"},
+ {__LINE__, 6.537822760557410e-23, "0.000000", "%f"},
+ {__LINE__, 6.552222096390805e+29, "+6.55222E+29", "%+G"},
+ {__LINE__, 6.554569862717104e+12, "6.55457E+12", "%G"},
+ {__LINE__, 6.563440840359989e-30, "7E-30", "%4.G"},
+ {__LINE__, 6.586246985535526e+17, "6.58625E+17", "%#4G"},
+ {__LINE__, 6.593339522442827e+16, "6.6E+16", "%#4.1E"},
+ {__LINE__, 6.611179030024350e+02, "7E+02", "%4.E"},
+ {__LINE__, 6.617541638586767e-10, "6.617542E-10", "%E"},
+ {__LINE__, 6.619147920886991e-28, "7e-28", "%.1g"},
+ {__LINE__, 6.622304444772819e-21, "6.62230E-21", "%#4G"},
+ {__LINE__, 6.634766655157910e+12, "6634766655158", "%2.f"},
+ {__LINE__, 6.635639771921218e+25, "+6.63564E+25", "%+G"},
+ {__LINE__, 6.644575305929087e+17, "+6.64458e+17", "%+g"},
+ {__LINE__, 6.648697591328432e+04, "6.648698E+04", "%3E"},
+ {__LINE__, 6.665426012448100e+09, "6.66543E+09", "%G"},
+ {__LINE__, 6.675222780441723e-23, "6.67522e-23", "%1g"},
+ {__LINE__, 6.689765053880623e+00, "6.6898", "%.5g"},
+ {__LINE__, 6.693874943680238e+25, "7.e+25", "%#1.g"},
+ {__LINE__, 6.695033453546435e+19, "6.695033E+19", "%E"},
+ {__LINE__, 6.720131534244976e+03, "+6720.132", "%+.3f"},
+ {__LINE__, 6.725287004784564e+19, "+6.72529e+19", "%+g"},
+ {__LINE__, 6.743599626906313e-18, "0.0000000", "%7.7f"},
+ {__LINE__, 6.755534260704152e+29, "7.e+29", "%#5.e"},
+ {__LINE__, 6.761855244766418e-18, "6.8E-18", "%.2G"},
+ {__LINE__, 6.764974143681080e-02, "6.765E-02", "%2.3E"},
+ {__LINE__, 6.766924477711975e-17, "0.000000", "%4f"},
+ {__LINE__, 6.772195434106330e-19, "6.7722E-19", "%G"},
+ {__LINE__, 6.779433073319225e-23, "0.00", "%.2f"},
+ {__LINE__, 6.790317710068964e+05, "6.8e+05", "%.1e"},
+ {__LINE__, 6.791378160292960e+02, "679.137816", "%f"},
+ {__LINE__, 6.798381262104190e-27, "0.000000", "%f"},
+ {__LINE__, 6.804165939424860e-14, "7e-14", "%4.g"},
+ {__LINE__, 6.810668670623699e+11, "681066867062.369852", "%f"},
+ {__LINE__, 6.838942637635821e-17, "+6.84e-17", "%+.2e"},
+ {__LINE__, 6.868523988329111e-09, "+6.868524e-09", "%+e"},
+ {__LINE__, 6.873228061403223e-15, "6.873228E-15", "%3E"},
+ {__LINE__, 6.879370500093334e-12, "+0.000000", "%+f"},
+ {__LINE__, 6.891525498686674e-10, "7e-10", "%0.g"},
+ {__LINE__, 6.923027319286220e+21, "7.e+21", "%#1.g"},
+ {__LINE__, 6.923565533024560e-11, "+6.92357e-11", "%+g"},
+ {__LINE__, 6.931415640770737e-24, "+6.93142e-24", "%+g"},
+ {__LINE__, 6.936582619246057e+09, "6.936583e+09", "%7e"},
+ {__LINE__, 6.938661496670582e+05, "693866.1496671", "%2.7f"},
+ {__LINE__, 6.946115378286550e-25, "0.000000", "%f"},
+ {__LINE__, 6.955823211921219e-09, "6.95582e-09", "%g"},
+ {__LINE__, 6.962365243425770e+29, "696236524342577034474288666388.019919", "%7f"},
+ {__LINE__, 6.970432274812882e+05, "+7e+05", "%+1.0e"},
+ {__LINE__, 6.975784942897122e-13, "6.975785e-13", "%e"},
+ {__LINE__, 6.976786489904214e-07, "6.97679E-07", "%3G"},
+ {__LINE__, 6.985245976357042e-05, "0.00", "%.2f"},
+ {__LINE__, 6.993402879410720e-21, "6.9934e-21", "%g"},
+ {__LINE__, 7.012183985341519e+28, "+70121839853415188770213717362", "%+2.f"},
+ {__LINE__, 7.028670648856025e-15, "7.028671e-15", "%.7g"},
+ {__LINE__, 7.034042985683665e-03, " 0", "%2.f"},
+ {__LINE__, 7.044054273278726e+18, "7.044e+18", "%7.4g"},
+ {__LINE__, 7.049706744250734e-06, "7E-06", "%0.E"},
+ {__LINE__, 7.061982657056197e+13, "+7.061983e+13", "%+e"},
+ {__LINE__, 7.066873668945899e+21, "7.06687E+21", "%G"},
+ {__LINE__, 7.087941418633258e+26, "7.08794E+26", "%G"},
+ {__LINE__, 7.108268134631547e+22, "7.108268E+22", "%E"},
+ {__LINE__, 7.112095848565475e-19, "7.1121e-19", "%g"},
+ {__LINE__, 7.116326241291862e+16, "7.116326e+16", "%e"},
+ {__LINE__, 7.118854843597607e-22, "0.000000", "%f"},
+ {__LINE__, 7.121423043456375e-27, "0.000000", "%f"},
+ {__LINE__, 7.131415427096460e-03, "0.007131", "%3f"},
+ {__LINE__, 7.132023279679892e+22, "7.e+22", "%#3.e"},
+ {__LINE__, 7.146250280189992e-18, "0.000000", "%f"},
+ {__LINE__, 7.150059058390724e+03, "7150.06", "%g"},
+ {__LINE__, 7.161081578177381e-02, "+0.0716108", "%+G"},
+ {__LINE__, 7.164935125149336e-27, "7.2E-27", "%#6.2G"},
+ {__LINE__, 7.173125717489549e-10, "7.173126e-10", "%e"},
+ {__LINE__, 7.174199549624193e+00, "7.1741995", "%.7f"},
+ {__LINE__, 7.192493588077649e+27, "7.19249e+27", "%g"},
+ {__LINE__, 7.215209568601445e-06, "7.215210e-06", "%e"},
+ {__LINE__, 7.238322284100497e+03, "7238.3", "%.1f"},
+ {__LINE__, 7.239203871123613e+06, "7239204", "%4.f"},
+ {__LINE__, 7.245809072577019e-09, "+7.245809E-09", "%+E"},
+ {__LINE__, 7.256275686433336e+03, "7.256276e+03", "%e"},
+ {__LINE__, 7.265774291605193e+27, "+7.26577E+27", "%+G"},
+ {__LINE__, 7.287968172227119e-21, "+7.287968e-21", "%+e"},
+ {__LINE__, 7.306020169678527e+12, "7E+12", "%2.E"},
+ {__LINE__, 7.315587463572568e-04, "0.", "%#.0f"},
+ {__LINE__, 7.324627764547963e+09, "7.324628E+09", "%#E"},
+ {__LINE__, 7.331904966719081e-06, "+7.3319E-06", "%+G"},
+ {__LINE__, 7.334448152798243e-02, "0.07", "%0.g"},
+ {__LINE__, 7.334487195961240e-01, "+0.733449", "%+#g"},
+ {__LINE__, 7.381283575515707e+13, "7.381284E+13", "%E"},
+ {__LINE__, 7.394854567245476e-11, "0.000000", "%7f"},
+ {__LINE__, 7.401950211415377e-08, " 7e-08", "%6.e"},
+ {__LINE__, 7.409023867864680e+03, "7409.023868", "%#3f"},
+ {__LINE__, 7.411912956257733e-20, "7e-20", "%0.g"},
+ {__LINE__, 7.445275019272160e+11, "744527501927.2159511", "%.7f"},
+ {__LINE__, 7.450279765616891e-16, "7.45028e-16", "%.6g"},
+ {__LINE__, 7.467047411334495e+14, "7.46705E+14", "%G"},
+ {__LINE__, 7.485628870972725e+28, "7E+28", "%.0G"},
+ {__LINE__, 7.495391782588563e+11, "749539178258.856253", "%f"},
+ {__LINE__, 7.495824101611911e+06, "7.49582e+06", "%.6g"},
+ {__LINE__, 7.499759867592402e+20, "+749975986759240154100.3", "%+.1f"},
+ {__LINE__, 7.508983397140368e+04, "75089.8", "%g"},
+ {__LINE__, 7.512585199581016e-27, "7.512585E-27", "%.6E"},
+ {__LINE__, 7.516831372212545e-29, "+7.516831e-29", "%+e"},
+ {__LINE__, 7.525789465978582e+00, "7.52579", "%G"},
+ {__LINE__, 7.528655653725963e+06, "7.5287e+06", "%3.4e"},
+ {__LINE__, 7.533217421035612e+28, "75332174210356122046050586504.861712", "%f"},
+ {__LINE__, 7.534147071756384e+03, "7534.15", "%g"},
+ {__LINE__, 7.542648637430919e-25, "+0.000000", "%+#f"},
+ {__LINE__, 7.554380140947798e-15, " 8e-15", "%7.g"},
+ {__LINE__, 7.557366996007743e+25, " 8E+25", "%7.G"},
+ {__LINE__, 7.579228950138068e+08, "8e+08", "%3.e"},
+ {__LINE__, 7.579773904052487e-13, "0.000000", "%3f"},
+ {__LINE__, 7.580377544554059e+27, "7.58038e+27", "%#g"},
+ {__LINE__, 7.589615147875915e-15, "7.59E-15", "%.3G"},
+ {__LINE__, 7.593317194045158e-12, "+0.", "%+#1.f"},
+ {__LINE__, 7.605535657484387e-07, "7.60554E-07", "%G"},
+ {__LINE__, 7.609171121278006e-08, " 0", "%5.f"},
+ {__LINE__, 7.612033900317304e-14, "7.61203e-14", "%g"},
+ {__LINE__, 7.628040858080326e+23, "+7.62804e+23", "%+g"},
+ {__LINE__, 7.632109382948695e-01, "0.763211", "%#f"},
+ {__LINE__, 7.633415922627254e+28, "76334159226272539910951309138.908982", "%#f"},
+ {__LINE__, 7.636190400774419e+22, "+7.636190E+22", "%+E"},
+ {__LINE__, 7.636228368661314e-23, "0.000000", "%f"},
+ {__LINE__, 7.653292362739654e-17, "7.65329E-17", "%#G"},
+ {__LINE__, 7.664044705231460e+03, "7.664045E+03", "%5E"},
+ {__LINE__, 7.664257283149626e-05, "7.66426E-05", "%0G"},
+ {__LINE__, 7.668996632821614e-19, " 0.0", "%4.1f"},
+ {__LINE__, 7.674502669497263e-24, "7.6745e-24", "%g"},
+ {__LINE__, 7.681870119755193e+12, "+7.68187e+12", "%+#g"},
+ {__LINE__, 7.693453198401315e+02, "769.3453198", "%5.7f"},
+ {__LINE__, 7.705080073293603e-29, "7.705080E-29", "%1E"},
+ {__LINE__, 7.707244083934683e-07, "7.71E-07", "%2.3G"},
+ {__LINE__, 7.749445584970652e-17, "7.75E-17", "%6.3G"},
+ {__LINE__, 7.755369447889403e+09, "7.8e+09", "%#4.2g"},
+ {__LINE__, 7.760378169707072e-06, "7.76038e-06", "%g"},
+ {__LINE__, 7.763518882114968e-10, "0.000000", "%f"},
+ {__LINE__, 7.764720069569677e-18, "0.000000", "%0f"},
+ {__LINE__, 7.768821339438552e-03, "0.00776882", "%g"},
+ {__LINE__, 7.774767835990679e-29, "7.774768E-29", "%7E"},
+ {__LINE__, 7.805567188246987e-04, "0.000780557", "%2G"},
+ {__LINE__, 7.825157442935941e-26, "0.000000", "%f"},
+ {__LINE__, 7.833373563161910e+29, "+783337356316190991378789476584.643126", "%+f"},
+ {__LINE__, 7.875872661746674e-16, "7.875873E-16", "%E"},
+ {__LINE__, 7.880664458920439e-28, "7.881E-28", "%#0.3E"},
+ {__LINE__, 7.893084198630288e+18, "7893084198630288206", "%1.f"},
+ {__LINE__, 7.912222737877417e+04, "79122.2", "%G"},
+ {__LINE__, 7.913004582748724e-26, "0.000000", "%f"},
+ {__LINE__, 7.913749944463836e+17, "791374994446383617.230367", "%f"},
+ {__LINE__, 7.923881665760883e-24, "0.000000", "%f"},
+ {__LINE__, 7.926699779993694e-03, "0.007927", "%5.6f"},
+ {__LINE__, 7.941991860623354e-20, "7.941992e-20", "%e"},
+ {__LINE__, 7.942700358097138e+17, "794270035809713803.587329", "%2f"},
+ {__LINE__, 7.945451569935757e-16, "7.94545E-16", "%#4.6G"},
+ {__LINE__, 7.948277588625241e-04, "0", "%.0f"},
+ {__LINE__, 7.952265062569124e+21, "+7.95227e+21", "%+#g"},
+ {__LINE__, 7.959953534668040e+11, "8e+11", "%2.e"},
+ {__LINE__, 7.962059154424500e-22, "7.96206E-22", "%G"},
+ {__LINE__, 7.962856142535673e-26, "7.9629E-26", "%#.5G"},
+ {__LINE__, 7.966528574505771e+12, "7.96653e+12", "%g"},
+ {__LINE__, 8.006496880305429e-21, "8.0065E-21", "%G"},
+ {__LINE__, 8.023374861440542e+06, "+8023375", "%+6.f"},
+ {__LINE__, 8.041139717082990e-20, "8.04114e-20", "%g"},
+ {__LINE__, 8.044201752824126e+15, "8.04420E+15", "%.5E"},
+ {__LINE__, 8.044262927409321e-10, "+8E-10", "%+2.2G"},
+ {__LINE__, 8.058285708061202e+02, "+8.058286e+02", "%+e"},
+ {__LINE__, 8.104422320765144e+10, "8.10442e+10", "%#4g"},
+ {__LINE__, 8.104572628022330e-11, "0.000000", "%f"},
+ {__LINE__, 8.112156369917432e+15, "+8.11216E+15", "%+G"},
+ {__LINE__, 8.114566569709531e-18, "8.11457E-18", "%G"},
+ {__LINE__, 8.114795069552519e+13, "8.114795E+13", "%E"},
+ {__LINE__, 8.121382719830660e+03, "8121.382720", "%f"},
+ {__LINE__, 8.125179335533733e-12, "+8.125179e-12", "%+e"},
+ {__LINE__, 8.126383949107055e+19, "81263839491070548604.056967", "%f"},
+ {__LINE__, 8.129961701307842e-04, "+0.00081", "%+5.2g"},
+ {__LINE__, 8.143780077390936e+15, "8.14378E+15", "%G"},
+ {__LINE__, 8.149891507777399e+16, "+8E+16", "%+1.G"},
+ {__LINE__, 8.167395708830107e+03, "8167", "%3.f"},
+ {__LINE__, 8.167703619221975e+01, "81.677", "%G"},
+ {__LINE__, 8.178463030771759e+06, "+8.17846E+06", "%+G"},
+ {__LINE__, 8.188188531273697e+12, "8.18819E+12", "%G"},
+ {__LINE__, 8.189094866416537e+11, "+8E+11", "%+.1G"},
+ {__LINE__, 8.205086844365809e-18, "+8.205087E-18", "%+#E"},
+ {__LINE__, 8.205762333408320e-26, "0.000000", "%f"},
+ {__LINE__, 8.212370598174696e-10, "8.2124E-10", "%.5G"},
+ {__LINE__, 8.228054316085489e-14, "0.000000", "%3f"},
+ {__LINE__, 8.244313484402404e-16, "8.24431e-16", "%g"},
+ {__LINE__, 8.244472235472472e+19, "8.24447E+19", "%G"},
+ {__LINE__, 8.245421473302411e-09, "+8.2454e-09", "%+1.5g"},
+ {__LINE__, 8.252286626634840e-22, "8E-22", "%3.G"},
+ {__LINE__, 8.259969177912707e-19, "0.000000", "%f"},
+ {__LINE__, 8.265769991725211e+18, "8.26577e+18", "%.5e"},
+ {__LINE__, 8.293986939496488e+25, "8.3E+25", "%.1E"},
+ {__LINE__, 8.310348813512608e-23, "+8.31035e-23", "%+g"},
+ {__LINE__, 8.316951996533247e-20, "0.000000", "%f"},
+ {__LINE__, 8.318818016883803e+05, " 8e+05", "%6.1g"},
+ {__LINE__, 8.324896920131877e-13, "+8.324897e-13", "%+e"},
+ {__LINE__, 8.325228630004624e-03, "0.0083252", "%5.7f"},
+ {__LINE__, 8.332538660129034e+14, "8.3e+14", "%5.2g"},
+ {__LINE__, 8.343325212751775e+07, "8.34333e+07", "%#4g"},
+ {__LINE__, 8.363117398136236e+20, "+8.36e+20", "%+.3g"},
+ {__LINE__, 8.364181324448165e+27, "8.36418e+27", "%#g"},
+ {__LINE__, 8.372159259848738e+10, "8.37216e+10", "%4g"},
+ {__LINE__, 8.379252006152759e-26, "8.37925e-26", "%g"},
+ {__LINE__, 8.392670395720252e+09, "8392670395.720252", "%f"},
+ {__LINE__, 8.423360059147756e+05, "+842336.", "%+#G"},
+ {__LINE__, 8.425921213167943e+09, "8.425921e+09", "%1.7g"},
+ {__LINE__, 8.431664412515776e-16, "8.43166E-16", "%#G"},
+ {__LINE__, 8.448608859842500e+02, "844.861", "%1.3f"},
+ {__LINE__, 8.456292247478771e-14, "8.45629E-14", "%G"},
+ {__LINE__, 8.460077225296853e-04, "0.000846008", "%G"},
+ {__LINE__, 8.478635925746218e-10, "0.000000", "%f"},
+ {__LINE__, 8.492455774427448e+06, "8.49246e+06", "%g"},
+ {__LINE__, 8.494450528380746e-07, "8.494451e-07", "%e"},
+ {__LINE__, 8.516435842947605e-23, "+0.000000", "%+1f"},
+ {__LINE__, 8.519057789029134e-18, "0.000000", "%0f"},
+ {__LINE__, 8.522602111109066e+18, " 9.e+18", "%#7.g"},
+ {__LINE__, 8.529176788022152e-24, "8.529E-24", "%0.4G"},
+ {__LINE__, 8.534979605642793e-07, "0.000001", "%f"},
+ {__LINE__, 8.546859563634342e-07, "8.546860E-07", "%E"},
+ {__LINE__, 8.552370027054106e+12, "9e+12", "%.0g"},
+ {__LINE__, 8.561781328234041e+10, "8.56178e+10", "%4g"},
+ {__LINE__, 8.562688793145107e-20, "8.562689e-20", "%1.7g"},
+ {__LINE__, 8.573130147270046e-07, " 9E-07", "%7.G"},
+ {__LINE__, 8.584571984387802e-18, "8.5846e-18", "%.5g"},
+ {__LINE__, 8.596407996491291e+11, "8.596408E+11", "%#E"},
+ {__LINE__, 8.604843726850381e+10, " 9E+10", "%6.G"},
+ {__LINE__, 8.626884271938994e-23, "8.62688e-23", "%g"},
+ {__LINE__, 8.631140282429168e+24, "8631140282429168308908629.", "%#.0f"},
+ {__LINE__, 8.635194331917948e-16, "8.63519E-16", "%G"},
+ {__LINE__, 8.641417311588688e-24, "+0.000000", "%+f"},
+ {__LINE__, 8.649120264278466e+26, "8.65E+26", "%1.3G"},
+ {__LINE__, 8.649745523383894e+06, "8.649746e+06", "%e"},
+ {__LINE__, 8.654720740091021e+16, "8.65472e+16", "%g"},
+ {__LINE__, 8.655445556834509e-08, "9e-08", "%4.g"},
+ {__LINE__, 8.658954696751902e+06, "8.65895E+06", "%G"},
+ {__LINE__, 8.665712368800818e-10, "+8.66571E-10", "%+G"},
+ {__LINE__, 8.666937057116442e-10, "8.666937e-10", "%e"},
+ {__LINE__, 8.670981239765155e+05, "867098", "%G"},
+ {__LINE__, 8.679631934294932e-25, "+9.E-25", "%+#0.G"},
+ {__LINE__, 8.683595173050962e-21, "8.68360E-21", "%#G"},
+ {__LINE__, 8.684938704958039e+25, "8.684939E+25", "%E"},
+ {__LINE__, 8.686745463281227e-12, "8.686745E-12", "%5.7G"},
+ {__LINE__, 8.700227628706534e-12, "8.700228e-12", "%#e"},
+ {__LINE__, 8.705101179577200e+04, "87051.011796", "%#2f"},
+ {__LINE__, 8.707824829984700e-24, "9e-24", "%.1g"},
+ {__LINE__, 8.717654041009233e+21, "+9E+21", "%+6.0E"},
+ {__LINE__, 8.741736299906572e-11, "8.74174E-11", "%#0G"},
+ {__LINE__, 8.742228350419966e+18, "+8742228350419965821.060941", "%+f"},
+ {__LINE__, 8.743045146087558e-17, "+8.74305E-17", "%+2G"},
+ {__LINE__, 8.747820269457588e+18, "8.74782E+18", "%G"},
+ {__LINE__, 8.756274717008537e-28, "8.756275E-28", "%E"},
+ {__LINE__, 8.769782309254687e-24, "+8.769782E-24", "%+2.6E"},
+ {__LINE__, 8.788151659193398e-16, " 9E-16", "%6.E"},
+ {__LINE__, 8.789514812202340e-07, "9E-07", "%0.G"},
+ {__LINE__, 8.792657843164822e-07, "8.79266e-07", "%0g"},
+ {__LINE__, 8.810976223440985e+05, "881097.622344", "%f"},
+ {__LINE__, 8.822553973113614e+10, "8.82255E+10", "%G"},
+ {__LINE__, 8.839440421530611e-04, "0.000883944", "%G"},
+ {__LINE__, 8.842539073558434e-12, "0", "%1.f"},
+ {__LINE__, 8.882818021261782e-13, "+8.9e-13", "%+4.2g"},
+ {__LINE__, 8.899833909201039e+05, "8.8998E+05", "%.5G"},
+ {__LINE__, 8.903167498000181e-13, "9e-13", "%0.g"},
+ {__LINE__, 8.933727737932164e+09, "+8933727738", "%+4.f"},
+ {__LINE__, 8.946226267100711e+06, "8.946E+06", "%1.4G"},
+ {__LINE__, 8.953203780849794e-21, "8.9532E-21", "%G"},
+ {__LINE__, 8.959934262635649e+28, "+8.959934e+28", "%+e"},
+ {__LINE__, 8.969485341781558e-25, "0.000000", "%#f"},
+ {__LINE__, 8.970058187654221e+02, "897.005819", "%f"},
+ {__LINE__, 8.979846508565979e+02, "8.979847E+02", "%E"},
+ {__LINE__, 8.984561117901212e+01, "8.984561E+01", "%E"},
+ {__LINE__, 8.992157765875611e-12, "8.99216e-12", "%g"},
+ {__LINE__, 9.004487016708012e+01, "9.004487e+01", "%#e"},
+ {__LINE__, 9.007306978283218e-24, "9.007307e-24", "%e"},
+ {__LINE__, 9.014546375043562e+17, "901454637504356171.007203", "%#3f"},
+ {__LINE__, 9.028177786002161e-12, "9.02818E-12", "%G"},
+ {__LINE__, 9.029635986381795e-02, "0.09", "%.1g"},
+ {__LINE__, 9.032389962233431e-07, "+0.000001", "%+f"},
+ {__LINE__, 9.038466945070887e+10, "+9.038467E+10", "%+E"},
+ {__LINE__, 9.040166964322772e-27, "9.04017e-27", "%g"},
+ {__LINE__, 9.044627673694681e-11, "9.04463E-11", "%G"},
+ {__LINE__, 9.045906217628948e+17, "904590621762894819.823941", "%1f"},
+ {__LINE__, 9.051764975661710e+11, "9.05176e+11", "%#g"},
+ {__LINE__, 9.053142913711405e+29, "9.053143e+29", "%#e"},
+ {__LINE__, 9.073185209160657e-19, "+9.07319e-19", "%+g"},
+ {__LINE__, 9.074372574441451e+02, "907.437", "%g"},
+ {__LINE__, 9.084624602048136e+08, "9.084625E+08", "%E"},
+ {__LINE__, 9.088839346363631e+18, "9.09e+18", "%.2e"},
+ {__LINE__, 9.091945159170871e-15, "9.09195e-15", "%5g"},
+ {__LINE__, 9.115304318083716e+10, "9.115304e+10", "%e"},
+ {__LINE__, 9.115978352902710e+28, "9.11598E+28", "%G"},
+ {__LINE__, 9.121415008221017e-17, "9.E-17", "%#6.G"},
+ {__LINE__, 9.127270978060388e+18, "9.E+18", "%#5.G"},
+ {__LINE__, 9.143941729069086e+08, "9.143942E+08", "%#E"},
+ {__LINE__, 9.162740105978580e-19, " 9.E-19", "%#7.G"},
+ {__LINE__, 9.221509957559626e-18, "9.22151e-18", "%g"},
+ {__LINE__, 9.227419774250317e-28, " 0.", "%#3.f"},
+ {__LINE__, 9.230846660807540e-21, "0.000000", "%f"},
+ {__LINE__, 9.238091727277130e-06, "+0.00001", "%+.5f"},
+ {__LINE__, 9.244337357684406e+10, "9E+10", "%5.G"},
+ {__LINE__, 9.259179793993285e-19, " 9E-19", "%7.0G"},
+ {__LINE__, 9.274068541525759e-17, "9.274069e-17", "%e"},
+ {__LINE__, 9.283833535882367e+16, "9.28383e+16", "%#g"},
+ {__LINE__, 9.295693096364605e+11, "+9.295693E+11", "%+E"},
+ {__LINE__, 9.301820438602407e+05, "930182", "%G"},
+ {__LINE__, 9.322805251555376e-29, "9e-29", "%1.e"},
+ {__LINE__, 9.358443042421307e-27, "9.35844e-27", "%g"},
+ {__LINE__, 9.372658444745124e-23, "9.372658e-23", "%e"},
+ {__LINE__, 9.380302971355292e+05, "938030.3", "%.7g"},
+ {__LINE__, 9.381976354968076e-26, "+9.382E-26", "%+5.4G"},
+ {__LINE__, 9.391072061980585e-15, "9.391072E-15", "%E"},
+ {__LINE__, 9.403554117166546e-06, "0.000009", "%f"},
+ {__LINE__, 9.403712900426614e-28, "9.40371e-28", "%g"},
+ {__LINE__, 9.419046629820578e+03, "9419.046630", "%f"},
+ {__LINE__, 9.422344695378412e+22, "94223446953784115720509.362291", "%f"},
+ {__LINE__, 9.433327680467576e+01, "9.433328e+01", "%e"},
+ {__LINE__, 9.443975205260596e+20, "9.44398e+20", "%g"},
+ {__LINE__, 9.445134851965593e-04, "+9.445135E-04", "%+E"},
+ {__LINE__, 9.448403585149890e+24, "9e+24", "%0.g"},
+ {__LINE__, 9.463149430113036e+18, "9.46315e+18", "%g"},
+ {__LINE__, 9.465735160722534e+27, "+9465735160722534402566452627.070248", "%+f"},
+ {__LINE__, 9.495210794344892e-04, "0.000950", "%f"},
+ {__LINE__, 9.501916506373814e-25, "9.50192E-25", "%#G"},
+ {__LINE__, 9.514641335897739e+29, "9.51464E+29", "%G"},
+ {__LINE__, 9.524633436992819e-04, " 0.001", "%6.G"},
+ {__LINE__, 9.530925101873022e-18, "9.530925e-18", "%2e"},
+ {__LINE__, 9.557903833216979e-22, "9.557904E-22", "%E"},
+ {__LINE__, 9.587709102390903e-01, " 1", "%2.f"},
+ {__LINE__, 9.592723000828453e-02, "9.592723E-02", "%5E"},
+ {__LINE__, 9.603430008794172e+27, "9.60343e+27", "%g"},
+ {__LINE__, 9.622648414989433e-18, "9.622648e-18", "%1e"},
+ {__LINE__, 9.633326171289319e-23, "9.633326e-23", "%e"},
+ {__LINE__, 9.662064616152408e+19, "96620646161524081918.5146393", "%1.7f"},
+ {__LINE__, 9.668544846563163e-23, "9.668545e-23", "%e"},
+ {__LINE__, 9.691014191346685e+28, "9.69101E+28", "%G"},
+ {__LINE__, 9.693075414840598e+02, "+969.308", "%+G"},
+ {__LINE__, 9.695013453291907e-30, "9.695013e-30", "%5e"},
+ {__LINE__, 9.705983477801926e-24, "9.70598e-24", "%g"},
+ {__LINE__, 9.709022568030226e-17, "0.000000", "%f"},
+ {__LINE__, 9.715194901854826e+20, "9.715195e+20", "%e"},
+ {__LINE__, 9.721011821337717e+16, "1E+17", "%0.G"},
+ {__LINE__, 9.734895542899672e+14, "9.734896e+14", "%e"},
+ {__LINE__, 9.741486438769710e-29, " 1e-28", "%6.g"},
+ {__LINE__, 9.766657482315475e-24, "9.76666E-24", "%7G"},
+ {__LINE__, 9.767283293054552e-02, "0.09767", "%5.5f"},
+ {__LINE__, 9.769553159146005e-20, "9.76955E-20", "%G"},
+ {__LINE__, 9.777220880605434e-10, "0.00", "%4.2f"},
+ {__LINE__, 9.790290569034575e+20, "979029056903457473027.", "%#6.f"},
+ {__LINE__, 9.793128245822718e-01, "0.979313", "%G"},
+ {__LINE__, 9.804758536498200e+08, "980475853.650", "%.3f"},
+ {__LINE__, 9.816883664191066e-02, "0.1", "%.0g"},
+ {__LINE__, 9.836109821010300e+25, "9.83611e+25", "%g"},
+ {__LINE__, 9.846197559631225e+03, "1E+04", "%2.G"},
+ {__LINE__, 9.863289416819924e+12, "9.86329e+12", "%g"},
+ {__LINE__, 9.865893798657353e+12, "9.866e+12", "%0.4g"},
+ {__LINE__, 9.868248446640862e-15, "0.000000", "%#f"},
+ {__LINE__, 9.869973080775134e+04, "98699.7", "%G"},
+ {__LINE__, 9.899444006312953e+20, "1E+21", "%.1G"},
+ {__LINE__, 9.904083146074285e-08, "9.904083e-08", "%6e"},
+ {__LINE__, 9.909790408255471e+15, "9909790408255471.305665", "%f"},
+ {__LINE__, 9.930297455798394e-13, "+9.930297E-13", "%+5.6E"},
+ {__LINE__, 9.933314448709083e-15, "9.93331E-15", "%#.6G"},
+ {__LINE__, 9.938714530509870e+29, "9.938715e+29", "%e"},
+ {__LINE__, 9.953892603540162e+07, "9.95389E+07", "%G"},
+ {__LINE__, 9.962084643867200e+14, "+996208464386720.038419", "%+f"},
+ {__LINE__, 9.977706708809947e-09, "9.9777E-09", "%#.4E"},
+#endif
+ {__LINE__, 9.978034352999867e+15, "9.978034e+15", "%2.6e"},
+ {__LINE__, 9.998315286730175e-30, "9.998315e-30", "%6e"},
+// For ±(x + 0.25), we diverge from the glibc implementation in how the
+// rounding happens. Glibc uses "round to nearest, ties to even", which
+// rounds them to ±(x + 0.2), but we use double-conversion, which
+// implements the ECMAScript spec, which instead uses "round to nearest,
+// ties away from zero", which rounds them to ±(x + 0.3).
+// Both behaviors are valid.
+ {__LINE__, 1.25, "1.3", "%.1f"},
+ {__LINE__, 11.25, "11.3", "%.1f"},
+ {__LINE__, 1.75, "1.8", "%.1f"},
+ {__LINE__, 11.75, "11.8", "%.1f"},
+ {__LINE__, -1.25, "-1.3", "%.1f"},
+ {__LINE__, -11.25, "-11.3", "%.1f"},
+ {__LINE__, -1.75, "-1.8", "%.1f"},
+ {__LINE__, -11.75, "-11.8", "%.1f"},
+ {__LINE__, 16, "0x1.0p+4", "%.1a"},
+ {__LINE__, 16, "0x1.00000000000000000000p+4", "%.20a"},
+ {__LINE__, 4444.88888888, "4445", "%2.F"},
+ {__LINE__, 0.956, "1", "%.0g"},
+ {__LINE__, 1.0956, "1.", "%#.0g"},
+ {__LINE__, 0.956, "1.", "%#.0g"},
+ {__LINE__, 0.0956, "0.1", "%#.0g"},
+ {__LINE__, 0.00956, "0.01", "%#.0g"},
+ {__LINE__, 0.000956, "0.001", "%#.0g"},
+ {__LINE__, 0.000098, "0.0001", "%#.0g"},
+ {__LINE__, 0.0000996, "0.00010", "%#.2g"},
+ {__LINE__, 9.999999999999999e-05, "0.0001", "%g"},
+ {__LINE__, 1.0, "1.000000e+00", "%e"},
+ {__LINE__, .9999999999999999, "1.000000e+00", "%e"},
+
+ {__LINE__, 912.98, "913.0", "%#.4g"},
+ {__LINE__, 50.999999, "51.000", "%#.5g"},
+ {__LINE__, 0.956, "1", "%.1g"},
+ {__LINE__, 0.956, "1.", "%#.1g"},
+ {__LINE__, 0.996, "1", "%.2g"},
+ {__LINE__, 0.996, "1.0", "%#.2g"},
+ {__LINE__, 999.98, "1000", "%.4g"},
+ {__LINE__, 999.98, "1000.", "%#.4g"},
+ {__LINE__, 999.998, "1000", "%.5g"},
+ {__LINE__, 999.998, "1000.0", "%#.5g"},
+ {__LINE__, 999.9998, "1000", "%g"},
+ {__LINE__, 999.9998, "1000.00", "%#g"},
+ {__LINE__, 912.98, "913", "%.4g"},
+ {__LINE__, 50.999999, "51", "%.5g"},
+
+ {__LINE__, 0.0, "0000.00000", "%010.5f"},
+ {__LINE__, 0.0, " 000.00000", "% 010.5f"},
+ {__LINE__, -0.0, "-000.00000", "% 010.5f"},
+
+ {__LINE__, NAN, "nan", "%f"},
+ {__LINE__, NAN, "+nan", "%+f"},
+ {__LINE__, NAN, " nan", "%010.2f"},
+ {__LINE__, NAN, " +nan", "%+010.2f"},
+ {__LINE__, -NAN, "-nan", "%f"},
+ {__LINE__, -NAN, "-nan", "%+f"},
+ {__LINE__, -NAN, " -nan", "%010.2f"},
+ {__LINE__, -NAN, " -nan", "%+010.2f"},
+ {__LINE__, NAN, "NAN", "%F"},
+ {__LINE__, INFINITY, "inf", "%f"},
+ {__LINE__, INFINITY, "+inf", "%+f"},
+ {__LINE__, INFINITY, " inf", "%010.2f"},
+ {__LINE__, INFINITY, " +inf", "%+010.2f"},
+ {__LINE__, -INFINITY, "-inf", "%f"},
+ {__LINE__, -INFINITY, "-inf", "%+f"},
+ {__LINE__, -INFINITY, " -inf", "%010.2f"},
+ {__LINE__, -INFINITY, " -inf", "%+010.2f"},
+ {__LINE__, INFINITY, "INF", "%F"},
+
+ {0 }
+
+};
+
+/* matches(s1, s2) is true if s1 is "approximately" equal to s2.
+ Any digits after the first required_precision digits do not have to match.
+ */
+
+int required_precision = 13;
+
+static int
+matches (char *result, const char *desired)
+{
+ int digits_seen = 0;
+ for (;; result++, desired++) {
+ if (*result == *desired) {
+ if (*result == 0)
+ return 1;
+ else if (*result >= '0' && *result <= '9')
+ digits_seen++;
+ }
+ else if (digits_seen >= required_precision
+ && *result >= '0' && *result <= '9'
+ && *desired >= '0' && *desired <= '9')
+ continue;
+ else
+ return 0;
+ }
+}
+
+int main(int argc, char *argv[])
+{
+ int errcount = 0;
+ int testcount = 0;
+ double d;
+#define BSIZE 1024
+ char buffer[BSIZE];
+ sprint_double_type *dptr;
+ for (dptr = sprint_doubles; dptr->line; dptr++)
+ {
+ snprintf (buffer, sizeof(buffer), dptr->format_string, dptr->value);
+ if (!matches(buffer, dptr->result))
+ {
+ errcount++;
+ printf(
+ "Error in line %d using \"%s\". Result is \"%s\"; should be: \"%s\".\n",
+ dptr->line, dptr->format_string, buffer, dptr->result);
+ }
+
+ snprintf (buffer, sizeof(buffer), "%.999g", dptr->value);
+ sscanf (buffer, "%lg", &d);
+ if (dptr->value != d && !isnan(d))
+ {
+ errcount++;
+ printf ("Error in line %d. String is \"%s\", value is %g.\n",
+ dptr->line, buffer, d);
+ }
+ testcount++;
+ }
+
+ /* And one special test. */
+ {
+ static const char ref[] = "1.7763568394002504646778106689453125e-15";
+ int i;
+ d = 1.0;
+ for (i = 1; i < 50; ++i)
+ d /= 2;
+ snprintf (buffer, sizeof(buffer), "%.100g", d);
+ if (!matches (buffer, ref))
+ {
+ ++errcount;
+ printf (
+ "Error in line %d using \"%s\". Result is \"%s\"; should be: \"%s\".\n",
+ __LINE__, "%.100g", buffer, ref);
+ }
+ }
+
+ if (errcount == 0)
+ {
+ printf("Encountered no errors in %d tests.\n", testcount);
+ return 0;
+ }
+ else
+ {
+ printf("Encountered %d errors in %d tests.\n",
+ errcount, testcount);
+ return 1;
+ }
+}
diff --git a/mozglue/tests/glibc_printf_tests/tiformat.c b/mozglue/tests/glibc_printf_tests/tiformat.c
new file mode 100644
index 0000000000..82226be689
--- /dev/null
+++ b/mozglue/tests/glibc_printf_tests/tiformat.c
@@ -0,0 +1,5070 @@
+#include <stdio.h>
+#include <string.h>
+
+/* Tests taken from Cygnus C library. */
+typedef struct {
+ int line;
+ long value;
+ const char *result;
+ const char *format_string;
+} sprint_int_type;
+
+sprint_int_type sprint_ints[] =
+{
+ {__LINE__, 0x000838d2, "838d2", "%.4x"},
+ {__LINE__, 0x0063be46, "63BE46", "%-6X"},
+ {__LINE__, -0x1b236c0, "-28456640", "%#0.d"},
+ {__LINE__, -0x0000003, "-3", "% 0d"},
+ {__LINE__, 0x0000ed51, "ed51", "%2.x"},
+ {__LINE__, -0x00001f2, "-498", "%1ld"},
+ {__LINE__, 0x0ea3e927, "EA3E927", "%+X"},
+ {__LINE__, 0xffbef8da, "FFBEF8DA", "%5X"},
+ {__LINE__, 0x62ff9f56, "62ff9f56", "%0x"},
+ {__LINE__, 0x00000ad2, "AD2", "%.0X"},
+ {__LINE__, 0x00000000, " ", "% 6.ld"},
+ {__LINE__, 0xffffffff, "FFFFFFFF", "%1.4X"},
+ {__LINE__, 0x0000208c, " 208C", "%5X"},
+ {__LINE__, 0x0000003c, "3c", "%x"},
+ {__LINE__, 0xffff6177, "0xffff6177", "%+#x"},
+ {__LINE__, 0xffffdc8d, "ffffdc8d", "%+x"},
+ {__LINE__, 0x00000000, "0", "%X"},
+ {__LINE__, 0x00002434, "9268", "%0d"},
+ {__LINE__, 0xd2c72cdb, "d2c72cdb", "%-x"},
+ {__LINE__, 0xfe38012b, "0xfe38012b", "%+#7x"},
+ {__LINE__, 0x00000001, "0001", "%#.4d"},
+ {__LINE__, -0x008525a, "-0545370", "%06.7ld"},
+ {__LINE__, 0xffffffac, "ffffffac", "%3.7x"},
+ {__LINE__, 0x007424d2, "+7611602", "%+ld"},
+ {__LINE__, 0x00001a85, "1A85", "%.4X"},
+ {__LINE__, -0x0000019, "-25", "%3.d"},
+ {__LINE__, 0xfffffffe, "fffffffe", "%-x"},
+ {__LINE__, -0x34473b2, "-54817714", "% d"},
+ {__LINE__, 0x000000ea, "234", "%1.ld"},
+ {__LINE__, -0x0000004, "-4 ", "%-7.ld"},
+ {__LINE__, 0x00006c94, "27796", "%0d"},
+ {__LINE__, 0x00000001, "1", "%ld"},
+ {__LINE__, 0x00000619, "619", "%1x"},
+ {__LINE__, 0x0000209c, "8348", "%ld"},
+ {__LINE__, -0x327f8ff, "-52951295", "%-0ld"},
+ {__LINE__, 0xffffff0b, "FFFFFF0B", "%2.X"},
+ {__LINE__, 0xf199d6ae, "F199D6AE", "%X"},
+ {__LINE__, 0x3ca5602e, "1017471022", "%-1.ld"},
+ {__LINE__, -0xfb2080b, "-263325707", "%3.5d"},
+ {__LINE__, 0x00001cb8, "7352", "%d"},
+ {__LINE__, 0x00000000, "0000000", "%3.7d"},
+ {__LINE__, 0xffffff40, "FFFFFF40", "%+X"},
+ {__LINE__, 0x14664450, "0x14664450", "%#x"},
+ {__LINE__, 0x0000002e, "2e", "%1x"},
+ {__LINE__, 0xffffffff, "ffffffff", "%x"},
+ {__LINE__, 0xffff606a, "0XFFFF606A", "%#X"},
+ {__LINE__, 0xffffff33, "0XFFFFFF33", "%#X"},
+ {__LINE__, 0x00000000, "0", "%d"},
+ {__LINE__, -0x0000012, "-00018", "%-2.5d"},
+ {__LINE__, 0x0001fbe6, "130022", "%1.d"},
+ {__LINE__, 0xfff59dd9, "fff59dd9", "%+x"},
+ {__LINE__, 0x00000002, "2", "%0.0d"},
+ {__LINE__, 0x00000fe1, "fe1 ", "%-7.x"},
+ {__LINE__, 0x001f8f6a, "1F8F6A", "%1.X"},
+ {__LINE__, 0x0000001b, "000001B", "%04.7X"},
+ {__LINE__, 0x126a2609, " 308946441", "% 4d"},
+ {__LINE__, 0xffffffe3, "0XFFFFFFE3", "%+#.1X"},
+ {__LINE__, 0x1858f1c9, "1858f1c9", "%.3x"},
+ {__LINE__, 0x003fc672, "3fc672", "%1x"},
+ {__LINE__, 0x00c0bddc, "12631516", "%#d"},
+ {__LINE__, 0x000006d6, "1750", "%#d"},
+ {__LINE__, 0x000006a0, "6A0", "%X"},
+ {__LINE__, 0x000007be, "7BE", "%X"},
+ {__LINE__, -0x1c7cd1a, "-29871386", "%ld"},
+ {__LINE__, 0x000000cc, "204", "%ld"},
+ {__LINE__, 0x000002db, "731 ", "%-#5d"},
+ {__LINE__, 0xffff67ad, "FFFF67AD", "% X"},
+ {__LINE__, 0x00000008, "8", "%d"},
+ {__LINE__, 0xffe07007, "FFE07007", "%5X"},
+ {__LINE__, -0x0000001, " -1", "% 7d"},
+ {__LINE__, 0xfffffffe, "fffffffe", "%x"},
+ {__LINE__, 0x00027b68, "+162664", "%+ld"},
+ {__LINE__, 0x0a7c1997, "+175905175", "%+2ld"},
+ {__LINE__, 0xfe300896, "fe300896", "%.4x"},
+ {__LINE__, 0x00000537, "537", "%-0.x"},
+ {__LINE__, 0x3e981779, "3e981779", "%.6x"},
+ {__LINE__, 0xfffff05e, "FFFFF05E", "%1.0X"},
+ {__LINE__, -0x07bc0cf, "-8110287", "%-7d"},
+ {__LINE__, -0x01371bc, "-1274300", "%.7ld"},
+ {__LINE__, -0x0000013, "-19", "%.2ld"},
+ {__LINE__, 0x000000d1, "0xd1", "%#x"},
+ {__LINE__, -0x0000003, "-3", "%-ld"},
+ {__LINE__, 0xfffffffc, "FFFFFFFC", "%4.1X"},
+ {__LINE__, 0x00000000, "0", "%ld"},
+ {__LINE__, 0x0001c8af, "116911", "%d"},
+ {__LINE__, 0x000048c3, "48C3", "%X"},
+ {__LINE__, 0x00000079, "0x0000079", "%-#0.7x"},
+ {__LINE__, 0x0000615a, " 24922", "% d"},
+ {__LINE__, 0xfffffff5, "fffffff5", "%x"},
+ {__LINE__, 0x00000308, "0000308", "%+07.7x"},
+ {__LINE__, 0xfcadc983, "fcadc983", "%x"},
+ {__LINE__, 0x00000097, "151", "%#d"},
+ {__LINE__, 0x000001c5, "453", "%0.2ld"},
+ {__LINE__, 0x00000000, "00", "%-1.2x"},
+ {__LINE__, 0x00000001, "+1", "%+02.d"},
+ {__LINE__, 0x01eb4354, "1EB4354", "% X"},
+ {__LINE__, 0xffffa7d1, "ffffa7d1", "%5.x"},
+ {__LINE__, 0x0003170e, "0x3170e", "%#x"},
+ {__LINE__, 0x000001ce, "1CE", "% .2X"},
+ {__LINE__, 0x3a2991fb, "975802875", "%d"},
+ {__LINE__, -0xcdad8e2, "-215668962", "%-d"},
+ {__LINE__, 0xfe0261c3, "fe0261c3", "%x"},
+ {__LINE__, -0x0006ea7, "-28327", "% ld"},
+ {__LINE__, 0x032854a3, "0X32854A3", "% #6X"},
+ {__LINE__, 0x0000004b, "4b", "%x"},
+ {__LINE__, 0xffff6ca3, "FFFF6CA3", "%4.X"},
+ {__LINE__, 0x00000000, "0", "%X"},
+ {__LINE__, 0x00611f04, "611F04", "%.1X"},
+ {__LINE__, 0x00000000, " 0", "%#6d"},
+ {__LINE__, 0x0002c711, "2c711", "%-02.x"},
+ {__LINE__, -0x07a2fe4, "-8007652", "%d"},
+ {__LINE__, -0x0000547, "-1351", "%ld"},
+ {__LINE__, 0x00013954, "0x13954", "%#x"},
+ {__LINE__, -0x00523b7, "-336823", "%ld"},
+ {__LINE__, -0x00f6c6e, "-1010798", "%6.ld"},
+ {__LINE__, 0xffea6427, "FFEA6427", "%3X"},
+ {__LINE__, -0x0000005, "-5", "%d"},
+ {__LINE__, -0x04fe618, "-5236248", "% .7d"},
+ {__LINE__, 0xffa80a28, "ffa80a28", "%-0x"},
+ {__LINE__, 0x00000047, "71", "%ld"},
+ {__LINE__, 0x001dc6bb, "1951419", "%#4ld"},
+ {__LINE__, 0x00000868, " 2152", "%#6d"},
+ {__LINE__, 0x000002fb, "2fb", "%x"},
+ {__LINE__, 0x00607fa0, "6324128", "%4d"},
+ {__LINE__, 0xfffed161, "fffed161", "%x"},
+ {__LINE__, 0x0001c6e4, " 116452", "% 2.5d"},
+ {__LINE__, 0x0003dda8, "3DDA8", "%4X"},
+ {__LINE__, 0xfffffff8, "fffffff8", "%x"},
+ {__LINE__, 0xfacf664a, "facf664a", "%x"},
+ {__LINE__, 0x000000c1, "C1", "% 1X"},
+ {__LINE__, 0x0000839c, " 839C", "%6X"},
+ {__LINE__, 0xfffff69a, "FFFFF69A", "%X"},
+ {__LINE__, 0x000e5c2e, "+941102", "%+d"},
+ {__LINE__, -0x0000004, "-4", "%#d"},
+ {__LINE__, 0x00000000, "00000", "%#.5ld"},
+ {__LINE__, 0xfffffffe, "fffffffe", "%3.1x"},
+ {__LINE__, 0x0010ed68, "1109352", "%-ld"},
+ {__LINE__, 0xffffffe9, "ffffffe9", "%.6x"},
+ {__LINE__, 0x00000007, " 7", "% 4.ld"},
+ {__LINE__, 0x0000caba, "51898", "%ld"},
+ {__LINE__, -0x0000119, "-281", "% d"},
+ {__LINE__, 0x0c3012a9, "204477097", "%03.6ld"},
+ {__LINE__, -0x001c98f, "-117135", "%ld"},
+ {__LINE__, 0x000017b1, "+6065", "%+d"},
+ {__LINE__, 0x00000001, "1", "%ld"},
+ {__LINE__, -0x0000019, "-25", "% .2d"},
+ {__LINE__, 0x0009ae28, "9AE28", "%X"},
+ {__LINE__, 0xe861c4fe, "e861c4fe", "%7.x"},
+ {__LINE__, 0xffac88d3, "FFAC88D3", "%X"},
+ {__LINE__, -0x00005df, "-01503", "%-5.5ld"},
+ {__LINE__, 0x0000013e, "318", "%-0d"},
+ {__LINE__, 0x04b6f58f, "4b6f58f", "%x"},
+ {__LINE__, 0xfffe3978, "fffe3978", "%+0.6x"},
+ {__LINE__, 0x57ee5244, "57ee5244", "%+7.4x"},
+ {__LINE__, 0xfffb5610, "fffb5610", "% 6x"},
+ {__LINE__, 0x00000006, " 6", "%#7d"},
+ {__LINE__, 0x0000000c, "0x0000c", "%#.5x"},
+ {__LINE__, -0xec59362, "-247829346", "%1.7d"},
+ {__LINE__, -0x0000001, "-1", "%ld"},
+ {__LINE__, -0x0007e4b, "-32331", "% d"},
+ {__LINE__, 0x0ececa6f, "248433263", "%0d"},
+ {__LINE__, 0x00000578, " 578", "%+6.x"},
+ {__LINE__, -0x0000003, "-3", "%ld"},
+ {__LINE__, 0x000002bb, "2bb", "% 0x"},
+ {__LINE__, -0x0000006, "-6", "%-ld"},
+ {__LINE__, 0x000002f9, "761", "%d"},
+ {__LINE__, 0xffffd736, "ffffd736", "%3.4x"},
+ {__LINE__, 0x0010ba79, "1096313", "%7.4d"},
+ {__LINE__, -0x0001244, "-4676", "%#.1d"},
+ {__LINE__, 0x00000dbe, "DBE", "%1X"},
+ {__LINE__, -0x0000015, "-21", "%-0.d"},
+ {__LINE__, 0xffffffff, "0xffffffff", "%#x"},
+ {__LINE__, -0x6cdf4a3, "-114160803", "%ld"},
+ {__LINE__, 0x00008ac9, "8AC9", "%1X"},
+ {__LINE__, 0x00000000, "00", "%.2X"},
+ {__LINE__, -0x2263dba, "-36060602", "%5.5d"},
+ {__LINE__, 0x00007da9, "32169", "%0d"},
+ {__LINE__, 0xfffffff7, "FFFFFFF7", "% 4.X"},
+ {__LINE__, 0xfbf36cca, "FBF36CCA", "%.1X"},
+ {__LINE__, 0x00000040, "64", "%.0ld"},
+ {__LINE__, 0x0000001c, " 28", "% d"},
+ {__LINE__, 0xfffffadb, "0xfffffadb", "%#.5x"},
+ {__LINE__, 0x0eb95847, "247027783", "%d"},
+ {__LINE__, 0xfffd7030, "FFFD7030", "%+02X"},
+ {__LINE__, 0x00000005, "00005", "%.5x"},
+ {__LINE__, 0xfffffffd, "FFFFFFFD", "%X"},
+ {__LINE__, 0x98975b15, "98975B15", "%02X"},
+ {__LINE__, -0x0000034, " -52", "%6ld"},
+ {__LINE__, 0xffd7d0cc, "ffd7d0cc", "% 5.6x"},
+ {__LINE__, 0xffffffa6, "FFFFFFA6", "%X"},
+ {__LINE__, 0xfff27132, "fff27132", "%x"},
+ {__LINE__, -0x065b74d, "-6666061", "%+6ld"},
+ {__LINE__, 0xf6ac99d6, "0XF6AC99D6", "%#X"},
+ {__LINE__, 0xfffff4bd, "FFFFF4BD", "%X"},
+ {__LINE__, 0xfffffb62, "FFFFFB62", "%6X"},
+ {__LINE__, 0xf8434543, "f8434543", "%-0x"},
+ {__LINE__, 0x0002b374, "0x2b374", "%-#6x"},
+ {__LINE__, 0x00000000, "0", "%x"},
+ {__LINE__, 0xffb5751d, "ffb5751d", "%-3.x"},
+ {__LINE__, 0x34ea7347, "887780167", "%d"},
+ {__LINE__, -0x008f457, "-586839", "%0ld"},
+ {__LINE__, 0x00000001, " 1", "%#4d"},
+ {__LINE__, 0xc32d7ad4, "c32d7ad4", "%0x"},
+ {__LINE__, 0xfffffb80, "FFFFFB80", "%-.2X"},
+ {__LINE__, 0x00000756, "756 ", "%-6x"},
+ {__LINE__, 0xfffb020f, "FFFB020F", "%+.2X"},
+ {__LINE__, -0xe68619f, "-241721759", "%#1.6ld"},
+ {__LINE__, 0x180166cd, "402745037", "%3.7ld"},
+ {__LINE__, -0x0000001, "-1", "%+00d"},
+ {__LINE__, 0xfdbc3611, "fdbc3611", "%x"},
+ {__LINE__, -0x000005b, "-91", "%d"},
+ {__LINE__, 0xffffe77f, "ffffe77f", "%x"},
+ {__LINE__, -0x0000019, "-25", "%ld"},
+ {__LINE__, 0x00000016, "22", "%#d"},
+ {__LINE__, -0x0000025, "-37", "%ld"},
+ {__LINE__, 0xffffe43f, "ffffe43f", "%x"},
+ {__LINE__, 0x000050a5, "00050a5", "%.7x"},
+ {__LINE__, 0x0000000c, " 12", "% 5.ld"},
+ {__LINE__, -0x001faff, "-129791", "%4d"},
+ {__LINE__, 0x239d7cf2, "597523698", "%0.7ld"},
+ {__LINE__, 0x04092183, "4092183", "% 7X"},
+ {__LINE__, -0x0043498, "-275608", "%-ld"},
+ {__LINE__, -0x0018dbe, "-101822", "%d"},
+ {__LINE__, 0xff3e09c3, "FF3E09C3", "%X"},
+ {__LINE__, 0x00000000, "0", "%d"},
+ {__LINE__, -0x15d57558, "-366310744", "%+0.7ld"},
+ {__LINE__, 0x0004fb06, "326406", "%0.0d"},
+ {__LINE__, 0x00000119, "0X119", "%#X"},
+ {__LINE__, -0x14c53e19, "-348470809", "%d"},
+ {__LINE__, 0x00000019, "0000019", "% .7X"},
+ {__LINE__, -0x0000654, "-1620", "%0.4ld"},
+ {__LINE__, -0xde5899b, "-233146779", "%#.1d"},
+ {__LINE__, 0x0013c1f0, "1294832", "%4.ld"},
+ {__LINE__, 0x0a9fe761, "A9FE761", "%X"},
+ {__LINE__, -0x00000e5, "-229", "%1ld"},
+ {__LINE__, 0x00000161, "000353", "%.6ld"},
+ {__LINE__, 0x6b04e4bd, "0x6b04e4bd", "%#7.0x"},
+ {__LINE__, -0x0000ef0, "-3824 ", "%-6.ld"},
+ {__LINE__, -0x026306e, "-2502766", "%ld"},
+ {__LINE__, 0x00000000, "0", "%-X"},
+ {__LINE__, 0xfffffe1f, "fffffe1f", "%-x"},
+ {__LINE__, 0x0003aecf, " 241359", "% 2.1ld"},
+ {__LINE__, -0x0000014, "-20", "%d"},
+ {__LINE__, 0x00000002, "0002", "%-.4ld"},
+ {__LINE__, 0xfffff662, "0XFFFFF662", "% #.6X"},
+ {__LINE__, 0x00000006, "6", "%0x"},
+ {__LINE__, 0x0001f4c4, " 128196", "% 0d"},
+ {__LINE__, 0xffffffff, "FFFFFFFF", "%5X"},
+ {__LINE__, 0x05605e38, "90201656", "%ld"},
+ {__LINE__, 0xffffffde, "0XFFFFFFDE", "% #X"},
+ {__LINE__, 0x000001e0, " 1e0", "%7.x"},
+ {__LINE__, 0x00000007, "7", "%X"},
+ {__LINE__, 0x00000001, "+1", "%+d"},
+ {__LINE__, 0xffffffe0, "FFFFFFE0", "% X"},
+ {__LINE__, 0xffd7f77a, "FFD7F77A", "%+00.1X"},
+ {__LINE__, 0xfffffffe, "0xfffffffe", "%-#x"},
+ {__LINE__, 0x01b0a63b, "1b0a63b", "%x"},
+ {__LINE__, -0x06554b7, "-6640823", "%d"},
+ {__LINE__, 0xfffffff8, "fffffff8", "%x"},
+ {__LINE__, 0x00000b2d, "b2d", "%x"},
+ {__LINE__, -0x2664ba2, "-40258466", "%-d"},
+ {__LINE__, 0xfffffffe, "FFFFFFFE", "%X"},
+ {__LINE__, -0x0000552, " -1362", "%6.2ld"},
+ {__LINE__, 0x00000009, " 00009", "%6.5x"},
+ {__LINE__, 0x00035c72, "220274", "%05.ld"},
+ {__LINE__, -0x014d09d, "-1364125", "%d"},
+ {__LINE__, -0x0000002, " -2", "% 4d"},
+ {__LINE__, 0x00000001, "1", "%+X"},
+ {__LINE__, 0x00000028, "28", "%X"},
+ {__LINE__, 0xf25c9eb2, "F25C9EB2", "%7.X"},
+ {__LINE__, -0x7ae4b62, "-128863074", "%d"},
+ {__LINE__, 0x00630d87, "630D87", "%2X"},
+ {__LINE__, 0x000000f8, "F8", "%-X"},
+ {__LINE__, 0xfffffff9, "FFFFFFF9", "%X"},
+ {__LINE__, -0x0000007, "-7", "%0d"},
+ {__LINE__, -0x2518fcd, "-38899661", "% 3ld"},
+ {__LINE__, 0xfffff4b4, "FFFFF4B4", "%-5X"},
+ {__LINE__, 0x01cc36c8, "30160584", "%ld"},
+ {__LINE__, 0xffffffff, "ffffffff", "%-x"},
+ {__LINE__, 0x0000000b, " 11", "%6.ld"},
+ {__LINE__, 0x00010d55, " 68949", "% d"},
+ {__LINE__, -0x0c01306, "-12587782", "% 6.1ld"},
+ {__LINE__, 0x001719d7, "1513943", "%.1ld"},
+ {__LINE__, -0x0000002, " -2", "%+3.ld"},
+ {__LINE__, 0x0000018e, "398", "%d"},
+ {__LINE__, 0x000000a6, "0xa6", "%-#3x"},
+ {__LINE__, 0x00006f66, " 28518", "% #d"},
+ {__LINE__, 0x0000032a, "32A", "%X"},
+ {__LINE__, -0x0000145, "-325", "%0d"},
+ {__LINE__, 0xffffffff, "ffffffff", "%2.x"},
+ {__LINE__, 0x00287171, "2650481", "%ld"},
+ {__LINE__, 0x0000004b, "+75", "%+02.ld"},
+ {__LINE__, 0xfffffff8, "fffffff8", "%-0x"},
+ {__LINE__, 0x00000064, "64", "% X"},
+ {__LINE__, 0xfffffca2, "fffffca2", "%0x"},
+ {__LINE__, 0x000010b6, "10b6", "% .0x"},
+ {__LINE__, -0x003806f, "-229487", "%7d"},
+ {__LINE__, -0x00000b7, "-183", "%3ld"},
+ {__LINE__, 0xffffe5ba, "FFFFE5BA", "%0X"},
+ {__LINE__, 0x001f0da8, "1f0da8", "%+x"},
+ {__LINE__, 0x000ce185, "844165", "%0ld"},
+ {__LINE__, 0x00000c96, "3222", "%0d"},
+ {__LINE__, -0x0013099, "-77977", "%1.ld"},
+ {__LINE__, -0x5f3c47a, "-99861626", "%.6ld"},
+ {__LINE__, 0x00000cbf, " CBF", "%+5.X"},
+ {__LINE__, -0x0000001, "-1", "%+ld"},
+ {__LINE__, 0x0d793bc3, "d793bc3", "%6.x"},
+ {__LINE__, 0xfffffffd, "0xfffffffd", "%+#x"},
+ {__LINE__, -0x0000070, " -112", "%6.d"},
+ {__LINE__, 0xfffffb3f, "FFFFFB3F", "%.7X"},
+ {__LINE__, 0x037dfc78, "0X37DFC78", "%#X"},
+ {__LINE__, 0x00009ba5, "39845", "%3ld"},
+ {__LINE__, 0x0000004a, "4a", "%0x"},
+ {__LINE__, 0xffffff81, "ffffff81", "%5.5x"},
+ {__LINE__, -0x86ef222, "-141488674", "%ld"},
+ {__LINE__, -0xac5531e, "-180704030", "% 4ld"},
+ {__LINE__, 0x00002493, "2493", "%+X"},
+ {__LINE__, 0xffffffff, "FFFFFFFF", "%1.3X"},
+ {__LINE__, 0x0005c875, "378997", "%.0ld"},
+ {__LINE__, 0x0301d345, "50451269", "%d"},
+ {__LINE__, 0xfff6b589, "fff6b589", "%2.4x"},
+ {__LINE__, -0x00001db, "-475 ", "%-7.0d"},
+ {__LINE__, 0x0000d1e7, "0x000d1e7", "%#2.7x"},
+ {__LINE__, 0xf4c4d2bb, "f4c4d2bb", "%.6x"},
+ {__LINE__, 0x00c89f54, "13147988", "%ld"},
+ {__LINE__, -0x6599253c, "-1704535356", "%+ld"},
+ {__LINE__, 0xab7d61ea, "ab7d61ea", "% x"},
+ {__LINE__, 0x00000006, "6", "%1ld"},
+ {__LINE__, 0xffff5ab7, "ffff5ab7", "%0x"},
+ {__LINE__, -0x1cfeca5b, "-486459995", "%#ld"},
+ {__LINE__, 0x000000f3, " f3", "% 6.x"},
+ {__LINE__, -0x0000021, "-33", "%d"},
+ {__LINE__, 0xfe7246ac, "fe7246ac", "%-5.x"},
+ {__LINE__, 0x00000017, "00017", "%-.5X"},
+ {__LINE__, -0x0cc250a, "-13378826", "%0.0d"},
+ {__LINE__, -0x00010ae, "-04270", "%#.5ld"},
+ {__LINE__, -0x7952c8b, "-127216779", "% ld"},
+ {__LINE__, 0x0002a53e, "173374", "%4.0d"},
+ {__LINE__, 0x03801bbf, "3801BBF", "%0X"},
+ {__LINE__, 0x0368645f, "+57173087", "%+#0.6ld"},
+ {__LINE__, 0x0000002f, "47", "%d"},
+ {__LINE__, 0x00000003, "3", "%x"},
+ {__LINE__, 0x000005f7, "5F7", "%0X"},
+ {__LINE__, -0x06e5e76, "-7233142", "% 0.1ld"},
+ {__LINE__, 0x053da936, "53da936", "%1.4x"},
+ {__LINE__, -0x0df0c2f, "-14617647", "%.5ld"},
+ {__LINE__, 0xfffffffd, "FFFFFFFD", "%-0X"},
+ {__LINE__, 0x000104bf, "104BF", "%X"},
+ {__LINE__, 0x000353fc, "353FC", "%X"},
+ {__LINE__, 0x182a18dc, "+405412060", "%+ld"},
+ {__LINE__, 0x0000000e, " 14", "% 2d"},
+ {__LINE__, -0x0000091, "-145", "%+ld"},
+ {__LINE__, 0x0029a9d6, "2730454", "%d"},
+ {__LINE__, 0x00009d57, "009d57", "% .6x"},
+ {__LINE__, 0x4c4d4f79, "1280135033", "%5.ld"},
+ {__LINE__, -0x000075b, "-1883", "% 03d"},
+ {__LINE__, -0x001b718, "-112408", "%+d"},
+ {__LINE__, 0xfffaaf57, "FFFAAF57", "%+1X"},
+ {__LINE__, 0x00f44e52, "F44E52", "% 4X"},
+ {__LINE__, 0x00000002, "0X2", "%#X"},
+ {__LINE__, 0x000a85e9, "A85E9", "%+0X"},
+ {__LINE__, 0xffff70bb, "ffff70bb", "%6x"},
+ {__LINE__, 0x00004e15, "4e15", "%x"},
+ {__LINE__, 0x000eeb60, " 977760", "% ld"},
+ {__LINE__, 0xfffffff1, "fffffff1", "%0x"},
+ {__LINE__, -0x294d7e2, "-43309026", "% 02.d"},
+ {__LINE__, 0x0001aaeb, "0109291", "%02.7ld"},
+ {__LINE__, 0x000a01fc, "0xa01fc", "%-#.5x"},
+ {__LINE__, 0x002c3c30, "+2898992", "%+#d"},
+ {__LINE__, 0x015667ae, "+22439854", "%+5ld"},
+ {__LINE__, -0x05af42b, "-5960747", "%+d"},
+ {__LINE__, 0x0000be36, "be36", "%+2x"},
+ {__LINE__, 0x005e3f67, "5e3f67", "% x"},
+ {__LINE__, -0x0000020, "-32", "% ld"},
+ {__LINE__, -0x0003617, "-13847", "% d"},
+ {__LINE__, 0x00000014, "14 ", "%-4.X"},
+ {__LINE__, 0x00000001, "001", "%0.3d"},
+ {__LINE__, 0xfffffea9, "fffffea9", "%3.x"},
+ {__LINE__, 0xe447099e, "E447099E", "%0X"},
+ {__LINE__, 0x00049c71, "302193", "%d"},
+ {__LINE__, 0x76356ed3, "0x76356ed3", "%#4.1x"},
+ {__LINE__, 0x00000005, " 0X5", "%#5X"},
+ {__LINE__, 0x00004da2, "0x004da2", "%#1.6x"},
+ {__LINE__, 0xffdfb36c, "FFDFB36C", "%4X"},
+ {__LINE__, 0xffffe3c5, "FFFFE3C5", "%+4.X"},
+ {__LINE__, 0x00000006, "6", "%0x"},
+ {__LINE__, -0x914ff17, "-152370967", "% .5ld"},
+ {__LINE__, -0x0000002, "-2", "%0ld"},
+ {__LINE__, 0xffffff36, "FFFFFF36", "% 2X"},
+ {__LINE__, -0x0bb1598, "-12260760", "%-ld"},
+ {__LINE__, 0x00006db5, "28085", "%0.5ld"},
+ {__LINE__, 0xffffffff, "ffffffff", "%x"},
+ {__LINE__, -0x0000001, "-1", "%0ld"},
+ {__LINE__, 0x0fa37e79, "FA37E79", "%1.X"},
+ {__LINE__, -0x00000ac, "-172", "%.2d"},
+ {__LINE__, 0xffffffd8, "ffffffd8", "%.7x"},
+ {__LINE__, -0x000a513, "-42259", "%ld"},
+ {__LINE__, 0x00001294, "4756", "%2ld"},
+ {__LINE__, -0x56bae0b4, "-1455087796", "%.1ld"},
+ {__LINE__, 0x3b26d5fa, "3b26d5fa", "%x"},
+ {__LINE__, 0xff657013, "ff657013", "%x"},
+ {__LINE__, -0x00005f5, "-1525", "%0.0ld"},
+ {__LINE__, -0x0000001, " -1", "% 7d"},
+ {__LINE__, -0x02396b2, "-2332338", "%d"},
+ {__LINE__, -0x0000003, "-000003", "%+7.6d"},
+ {__LINE__, 0xfd3ec7c1, "fd3ec7c1", "% 3.4x"},
+ {__LINE__, -0x076e338, "-7791416", "%0.d"},
+ {__LINE__, -0x000015e, "-350", "%3ld"},
+ {__LINE__, 0x0a0f0b71, "a0f0b71", "%x"},
+ {__LINE__, 0xfffe00ba, "FFFE00BA", "%X"},
+ {__LINE__, 0x00036bd8, " 36bd8", "% 06.x"},
+ {__LINE__, 0xfffff2df, "0XFFFFF2DF", "%#2.6X"},
+ {__LINE__, 0x004687fb, "4622331", "%ld"},
+ {__LINE__, -0x0000331, " -817", "%+6.d"},
+ {__LINE__, 0xfcd5b090, "fcd5b090", "%+0x"},
+ {__LINE__, 0x0334f94c, "334F94C", "%.6X"},
+ {__LINE__, 0x00000bce, "3022", "%.3ld"},
+ {__LINE__, 0xf28d9ddd, "f28d9ddd", "%x"},
+ {__LINE__, 0x00003a79, " 14969", "% ld"},
+ {__LINE__, 0xfffffffe, "FFFFFFFE", "%.7X"},
+ {__LINE__, 0x0043d7fe, "43D7FE", "%X"},
+ {__LINE__, -0x0000b82, "-2946", "%-ld"},
+ {__LINE__, -0x00e29d8, "-928216", "%d"},
+ {__LINE__, 0xffffffec, "ffffffec", "%-x"},
+ {__LINE__, 0x0aeaf557, "0xaeaf557", "%-#x"},
+ {__LINE__, 0x00c07fe6, "C07FE6", "%X"},
+ {__LINE__, 0x307414d8, "307414d8", "% 0x"},
+ {__LINE__, -0x045ef67, "-4583271", "%d"},
+ {__LINE__, 0x0000024a, " 0000586", "% .7d"},
+ {__LINE__, 0xfffffc42, "fffffc42", "%x"},
+ {__LINE__, 0xfc38c249, "fc38c249", "%5.x"},
+ {__LINE__, -0x000d096, "-53398", "%-d"},
+ {__LINE__, -0x213a345, "-34841413", "%ld"},
+ {__LINE__, -0x0000130, "-304", "%ld"},
+ {__LINE__, -0x000efd1, "-61393", "%ld"},
+ {__LINE__, 0xfffff867, "FFFFF867", "%2X"},
+ {__LINE__, 0x00113ed0, "0x113ed0", "%-#7x"},
+ {__LINE__, 0x00000677, " 1655", "% 3.ld"},
+ {__LINE__, 0x0000002f, "2f", "%x"},
+ {__LINE__, 0xfffffd38, "fffffd38", "%-4x"},
+ {__LINE__, -0x000b3cc, "-46028", "%1.2d"},
+ {__LINE__, 0x45da719b, "45DA719B", "%+0X"},
+ {__LINE__, -0x000a454, " -42068", "%7.3ld"},
+ {__LINE__, 0x01cc7c30, " 30178352", "% d"},
+ {__LINE__, -0x05ae80e, "-5957646", "%#.4ld"},
+ {__LINE__, 0x000000b9, "185", "%d"},
+ {__LINE__, 0x003fcaf4, "4180724", "%1.ld"},
+ {__LINE__, 0x02da1b74, "2DA1B74", "%X"},
+ {__LINE__, 0xffffffd9, "FFFFFFD9", "%X"},
+ {__LINE__, 0x00064359, "64359 ", "%-6X"},
+ {__LINE__, 0x000000f0, "240", "%ld"},
+ {__LINE__, -0x01715e5, "-1512933", "%ld"},
+ {__LINE__, 0xc8f6e118, "0XC8F6E118", "%#X"},
+ {__LINE__, 0xfffffd8f, "FFFFFD8F", "%X"},
+ {__LINE__, 0x0000176d, "5997 ", "%-6d"},
+ {__LINE__, 0x00003cab, "0x3cab", "%#0.3x"},
+ {__LINE__, 0x00000001, " 1", "% d"},
+ {__LINE__, 0xfffff610, "0XFFFFF610", "%#X"},
+ {__LINE__, 0xfffffffe, "FFFFFFFE", "%5.7X"},
+ {__LINE__, 0x00000001, "1", "%0x"},
+ {__LINE__, 0x00000001, "00001", "%.5ld"},
+ {__LINE__, -0x0000d51, "-3409", "%d"},
+ {__LINE__, -0x08639ee, "-8796654", "%ld"},
+ {__LINE__, 0x00003121, "12577", "%#1.2ld"},
+ {__LINE__, 0x0000004e, "78", "%d"},
+ {__LINE__, 0xfffff64f, "fffff64f", "%-x"},
+ {__LINE__, 0x0000002a, "2a", "%0x"},
+ {__LINE__, 0x00000020, "20", "%x"},
+ {__LINE__, -0x00000b8, "-184", "%#ld"},
+ {__LINE__, 0x0000000a, "10", "%-#d"},
+ {__LINE__, 0x00000364, "868", "%.1ld"},
+ {__LINE__, 0x00d1f9b6, "D1F9B6", "%0.X"},
+ {__LINE__, 0x008cfda1, "8CFDA1", "% 6.X"},
+ {__LINE__, 0xffd58cce, "FFD58CCE", "%X"},
+ {__LINE__, 0x00000008, "0000008", "%6.7ld"},
+ {__LINE__, 0x00000318, " 318", "%4X"},
+ {__LINE__, 0x000172d8, "94936", "%2ld"},
+ {__LINE__, -0x056ccbf, "-5688511", "%ld"},
+ {__LINE__, 0x000000c7, "+000199", "%+0.6d"},
+ {__LINE__, 0x00000002, "0X2", "%-#X"},
+ {__LINE__, 0xfffff634, "FFFFF634", "%.1X"},
+ {__LINE__, -0x00001f3, "-499", "%-ld"},
+ {__LINE__, -0x000081b, "-2075", "%-d"},
+ {__LINE__, 0x000000b5, "181", "%0d"},
+ {__LINE__, 0xfe961ee8, "fe961ee8", "%0x"},
+ {__LINE__, 0x000028a2, "10402", "%d"},
+ {__LINE__, 0xffffffff, "FFFFFFFF", "%.4X"},
+ {__LINE__, -0x000058a, "-1418", "%.3ld"},
+ {__LINE__, 0x00001ceb, "1CEB", "%X"},
+ {__LINE__, 0x00000021, "21", "% X"},
+ {__LINE__, 0x00000002, "2", "%0d"},
+ {__LINE__, -0x2f9bbf5, "-49921013", "%.4ld"},
+ {__LINE__, 0x00000e91, "03729", "%#.5ld"},
+ {__LINE__, 0xf1116740, "f1116740", "%2x"},
+ {__LINE__, 0x00014f72, "14F72", "%X"},
+ {__LINE__, 0xfffffced, "FFFFFCED", "%X"},
+ {__LINE__, 0xffffffff, "ffffffff", "%.5x"},
+ {__LINE__, 0x0017cf0c, " 1560332", "% 0ld"},
+ {__LINE__, 0x0000000a, "A", "% X"},
+ {__LINE__, 0xff3a39d4, "ff3a39d4", "%x"},
+ {__LINE__, 0xfffef05f, "FFFEF05F", "%X"},
+ {__LINE__, 0xfedfe708, "fedfe708", "%03.0x"},
+ {__LINE__, 0x000345a0, "345A0", "% X"},
+ {__LINE__, -0x1ed5b6f7, "-517322487", "%d"},
+ {__LINE__, 0xd2d56c22, "D2D56C22", "%0.X"},
+ {__LINE__, 0x00002cbf, "2CBF", "%.2X"},
+ {__LINE__, 0x00000db4, "db4", "%3x"},
+ {__LINE__, -0x000b154, "-45396", "%d"},
+ {__LINE__, 0x002bf4c7, "2BF4C7", "%X"},
+ {__LINE__, 0x6954abf4, "+1767156724", "%+d"},
+ {__LINE__, 0xfffffffb, "fffffffb", "%x"},
+ {__LINE__, -0x29e0050e, "-702547214", "%-0ld"},
+ {__LINE__, -0x0014989, "-84361", "%-#0.3ld"},
+ {__LINE__, 0x001a557c, "+1725820", "%+6.5d"},
+ {__LINE__, -0x56689a81, "-1449695873", "%.2d"},
+ {__LINE__, 0x00000016, " 16", "%05.X"},
+ {__LINE__, 0x0001da1e, " 121374", "% d"},
+ {__LINE__, -0x04deac7, "-5106375", "%03.4d"},
+ {__LINE__, 0x000012b1, "4785", "%d"},
+ {__LINE__, 0x0009a116, "9a116", "%-x"},
+ {__LINE__, -0x0000003, "-000003", "%4.6ld"},
+ {__LINE__, 0x00000000, "", "%.0x"},
+ {__LINE__, 0x0000000a, " A", "% 3X"},
+ {__LINE__, 0xfffffff0, "0xfffffff0", "%-#0.1x"},
+ {__LINE__, 0x00000086, "86", "%0X"},
+ {__LINE__, 0x0000001f, "31", "%-d"},
+ {__LINE__, 0x0386f706, "59176710", "%3.6ld"},
+ {__LINE__, 0xffe437ae, "0XFFE437AE", "%#X"},
+ {__LINE__, 0x0e5405c6, "e5405c6", "%-x"},
+ {__LINE__, 0xfffdee46, "FFFDEE46", "%+X"},
+ {__LINE__, 0xff861e9d, "FF861E9D", "%5.X"},
+ {__LINE__, 0xfffff570, "FFFFF570", "%-X"},
+ {__LINE__, 0x045c90bd, "45c90bd", "%0x"},
+ {__LINE__, 0x000000aa, "AA", "%+X"},
+ {__LINE__, -0x747262e, "-122103342", "%0ld"},
+ {__LINE__, 0xffffad89, "FFFFAD89", "%X"},
+ {__LINE__, 0x00000018, "18", "%0.2X"},
+ {__LINE__, 0x00057a2d, " 358957", "% #7.d"},
+ {__LINE__, 0x73a0e21d, "1939923485", "%ld"},
+ {__LINE__, -0x00021e1, "-8673", "%0d"},
+ {__LINE__, 0x000000e9, " 233", "% 06.3ld"},
+ {__LINE__, 0xffffcc0d, "ffffcc0d", "%x"},
+ {__LINE__, 0x00000052, "52", "%x"},
+ {__LINE__, 0x01c155af, "1C155AF", "%.5X"},
+ {__LINE__, 0xffffffff, "ffffffff", "%0.x"},
+ {__LINE__, -0x00400a4, "-262308", "%-d"},
+ {__LINE__, -0x0000001, "-0000001", "%#.7ld"},
+ {__LINE__, 0x01fb9c99, "1fb9c99", "% 03.5x"},
+ {__LINE__, 0xffffffff, "ffffffff", "%6.x"},
+ {__LINE__, 0xff5e5eea, "FF5E5EEA", "%X"},
+ {__LINE__, 0x0000000f, "F", "%+0X"},
+ {__LINE__, 0xfffffe3a, "fffffe3a", "% x"},
+ {__LINE__, 0xfffffffe, "FFFFFFFE", "%-X"},
+ {__LINE__, -0x0000007, "-7", "%0ld"},
+ {__LINE__, -0x002f635, "-194101", "%d"},
+ {__LINE__, -0x0000005, "-5", "%ld"},
+ {__LINE__, -0x0000059, "-89", "%0ld"},
+ {__LINE__, -0x1ccda96, "-30202518", "%d"},
+ {__LINE__, -0x0000002, "-2", "%-d"},
+ {__LINE__, 0xffffffda, "0XFFFFFFDA", "%#X"},
+ {__LINE__, 0x00036cc5, "224453", "%#d"},
+ {__LINE__, 0x00000010, "+16", "%+ld"},
+ {__LINE__, 0x0b6039c7, "190855623", "%d"},
+ {__LINE__, -0x0000002, "-002", "%#.3d"},
+ {__LINE__, 0xfff3e746, "FFF3E746", "%-4X"},
+ {__LINE__, 0x0361b3de, "361B3DE", "% 04X"},
+ {__LINE__, 0xffffe6a2, "ffffe6a2", "%-x"},
+ {__LINE__, 0x00032790, "0x0032790", "%#7.7x"},
+ {__LINE__, 0xffe33b4e, "ffe33b4e", "%-0x"},
+ {__LINE__, -0x0094663, "-607843", "%.3ld"},
+ {__LINE__, -0x00a3efa, "-671482", "%4d"},
+ {__LINE__, 0x000000e6, " 00E6", "%7.4X"},
+ {__LINE__, 0x000125cb, "125CB", "%+X"},
+ {__LINE__, 0x0000b97e, "b97e", "%x"},
+ {__LINE__, -0x0000039, "-57", "%+ld"},
+ {__LINE__, 0xffffe39a, "ffffe39a", "%5.4x"},
+ {__LINE__, 0xffffffff, "ffffffff", "%6.1x"},
+ {__LINE__, -0xdee910c, "-233738508", "%-#2d"},
+ {__LINE__, -0x14044930, "-335825200", "%6.ld"},
+ {__LINE__, 0x00a81259, "a81259", "%x"},
+ {__LINE__, 0x020e74c6, "20E74C6", "%X"},
+ {__LINE__, -0x00000fb, "-251", "%01.d"},
+ {__LINE__, 0x034ceb45, "34CEB45", "%5.X"},
+ {__LINE__, 0xfeacb66a, "feacb66a", "% x"},
+ {__LINE__, 0x00003eb6, "3EB6", "% X"},
+ {__LINE__, 0x000009ef, "9ef", "% x"},
+ {__LINE__, 0xf9d9dd07, "F9D9DD07", "%0X"},
+#ifndef __PCCNECV70__
+
+ {__LINE__, 0x000154d7, "087255", "%.6ld"},
+ {__LINE__, -0x000036e, "-878", "%-ld"},
+ {__LINE__, -0x0007dcc, "-32204", "% d"},
+ {__LINE__, 0x000019dc, "6620", "%d"},
+ {__LINE__, 0xffffff6e, "FFFFFF6E", "%2X"},
+ {__LINE__, 0x00000016, "0x16", "%-#x"},
+ {__LINE__, 0xffdb3e96, "ffdb3e96", "%+.5x"},
+ {__LINE__, 0xffffffef, "FFFFFFEF", "% 04.X"},
+ {__LINE__, 0xffffffff, "FFFFFFFF", "%5X"},
+ {__LINE__, 0x000c08cd, "C08CD", "%-X"},
+ {__LINE__, 0x18de71ee, "18de71ee", "%x"},
+ {__LINE__, 0xffffffff, "ffffffff", "% x"},
+ {__LINE__, -0x00025bd, "-009661", "%#.6d"},
+ {__LINE__, 0x2f05de14, " 788913684", "% 6.4ld"},
+ {__LINE__, 0x0c99cf86, "211406726", "%.5d"},
+ {__LINE__, 0x09e6a21d, " 166109725", "% 0d"},
+ {__LINE__, -0x013da65, "-1301093", "%+ld"},
+ {__LINE__, 0x000003d0, " 976", "% 4.2d"},
+ {__LINE__, -0xef9e3cc, "-251257804", "%-7.0d"},
+ {__LINE__, 0x0000000c, "+12", "%+00ld"},
+ {__LINE__, 0xffffffe2, "ffffffe2", "%x"},
+ {__LINE__, 0x000000fe, "fe", "%-x"},
+ {__LINE__, 0xfffffc5f, "fffffc5f", "%x"},
+ {__LINE__, -0x0005c55, "-23637", "%d"},
+ {__LINE__, -0x0111ff2, "-1122290", "% 7.d"},
+ {__LINE__, -0x1a1746e5, "-437733093", "%.4ld"},
+ {__LINE__, 0x00001007, "004103", "%00.6d"},
+ {__LINE__, 0xffffffe1, "ffffffe1", "%x"},
+ {__LINE__, 0x0000d80f, "55311", "%d"},
+ {__LINE__, 0x00000004, "4", "%+X"},
+ {__LINE__, 0xfffffffd, "fffffffd", "%6x"},
+ {__LINE__, -0x2afbcc3c, "-721144892", "%4.6ld"},
+ {__LINE__, 0x00377f96, "377F96", "%6.X"},
+ {__LINE__, 0xffffffc8, "FFFFFFC8", "%0X"},
+ {__LINE__, 0x007ed9d1, "8313297", "%-3d"},
+ {__LINE__, 0x00000000, "0", "%-X"},
+ {__LINE__, 0x001e122d, "1970733", "%01.d"},
+ {__LINE__, -0x000029b, "-667", "%ld"},
+ {__LINE__, -0x002f563, "-193891", "% 2.5d"},
+ {__LINE__, 0xfffffffe, "fffffffe", "%+3.7x"},
+ {__LINE__, 0xfff7658c, "fff7658c", "%x"},
+ {__LINE__, -0x0006d08, "-0027912", "%7.7ld"},
+ {__LINE__, 0x00000080, "80", "%X"},
+ {__LINE__, 0x0000078f, " 1935", "% 6ld"},
+ {__LINE__, 0xfffffffb, "FFFFFFFB", "% X"},
+ {__LINE__, 0x000000ae, " AE", "%7.X"},
+ {__LINE__, -0x000d6aa, "-54954", "%-ld"},
+ {__LINE__, 0xfffffffe, "FFFFFFFE", "%6.X"},
+ {__LINE__, 0x000003bf, "+959", "%+d"},
+ {__LINE__, -0x7242d04b, "-1916981323", "% ld"},
+ {__LINE__, 0xf0e6546f, "F0E6546F", "% .7X"},
+ {__LINE__, 0x047e196a, "75372906", "%ld"},
+ {__LINE__, 0x0240174e, "240174E", "%+0X"},
+ {__LINE__, -0x0000006, "-006", "%.3ld"},
+ {__LINE__, 0x00068aac, "428716", "%#ld"},
+ {__LINE__, 0xffffffa1, "ffffffa1", "%0x"},
+ {__LINE__, 0x000adab3, "adab3", "%x"},
+ {__LINE__, -0x00000ae, "-0000174", "%7.7ld"},
+ {__LINE__, 0x0f0a8f4b, "f0a8f4b", "% x"},
+ {__LINE__, 0xfee229bc, "fee229bc", "%x"},
+ {__LINE__, -0x275b8455, "-660309077", "%.2ld"},
+ {__LINE__, -0xca4b2a5, "-212120229", "%d"},
+ {__LINE__, 0x000000b5, " 181", "%04.d"},
+ {__LINE__, 0xfff213f2, "FFF213F2", "%X"},
+ {__LINE__, 0x00000003, "3", "%-X"},
+ {__LINE__, 0x0ebb978b, "247175051", "%.6ld"},
+ {__LINE__, 0xffffffca, "FFFFFFCA", "%X"},
+ {__LINE__, -0x0000003, "-03", "%+0.2d"},
+ {__LINE__, -0x178ff86, "-24706950", "%+d"},
+ {__LINE__, 0x0000003c, " 60", "%7.ld"},
+ {__LINE__, -0x001012d, "-65837", "%.5d"},
+ {__LINE__, 0x03673fd2, "3673fd2", "%.5x"},
+ {__LINE__, -0x001fe74, "-130676", "%#0.6ld"},
+ {__LINE__, 0x004f6226, "4f6226", "%-0x"},
+ {__LINE__, 0xfffffa0f, "fffffa0f", "%7x"},
+ {__LINE__, 0xfffffff8, "fffffff8", "%-.6x"},
+ {__LINE__, -0x0000001, "-1", "%#d"},
+ {__LINE__, 0xffffe43d, "ffffe43d", "%7x"},
+ {__LINE__, 0x00009d47, "0040263", "%7.7ld"},
+ {__LINE__, 0xff0fc79f, "FF0FC79F", "%-4.X"},
+ {__LINE__, 0x2d610907, "2d610907", "%x"},
+ {__LINE__, -0x00002de, "-734", "%04d"},
+ {__LINE__, 0x0000036b, " 36B", "%7.1X"},
+ {__LINE__, 0x00000002, "2", "%.0x"},
+ {__LINE__, -0x1f577b3e, "-525826878", "%d"},
+ {__LINE__, 0x0000002d, "45", "%#ld"},
+ {__LINE__, 0xfffffffb, "fffffffb", "%x"},
+ {__LINE__, -0x0000004, "-4", "%-.0d"},
+ {__LINE__, 0x00016ba4, "16ba4", "%x"},
+ {__LINE__, -0x1ad853d5, "-450384853", "% 0ld"},
+ {__LINE__, 0x00366899, "366899", "%2.x"},
+ {__LINE__, 0x1659158b, "1659158B", "%X"},
+ {__LINE__, 0x000076c7, "76c7", "%x"},
+ {__LINE__, 0x00000674, "674", "%0x"},
+ {__LINE__, 0x016c9d8a, "+23895434", "%+ld"},
+ {__LINE__, 0xfffffc43, "FFFFFC43", "%0X"},
+ {__LINE__, 0xfff249d2, "fff249d2", "%-2.x"},
+ {__LINE__, 0xffffffdd, "ffffffdd", "%5x"},
+ {__LINE__, 0xffffa7ef, "FFFFA7EF", "%0.3X"},
+ {__LINE__, 0x030d4d06, "30d4d06", "%x"},
+ {__LINE__, -0x0e4694b, "-14969163", "%d"},
+ {__LINE__, 0x00000078, "120", "%.3ld"},
+ {__LINE__, -0x16c1273e, "-381757246", "%0d"},
+ {__LINE__, 0xffffd183, "FFFFD183", "% 0X"},
+ {__LINE__, -0x2dfdadd, "-48224989", "%ld"},
+ {__LINE__, -0x5767fe5c, "-1466433116", "%ld"},
+ {__LINE__, 0x01bea036, "29270070", "%#4.3d"},
+ {__LINE__, 0x00000027, "27", "%-x"},
+ {__LINE__, 0x0004d183, "4D183", "%X"},
+ {__LINE__, 0xffdaf9c8, "FFDAF9C8", "%.7X"},
+ {__LINE__, 0xfffffd95, "fffffd95", "%x"},
+ {__LINE__, -0x0059acb, "-367307", "%00.d"},
+ {__LINE__, 0x017d8db4, "17d8db4", "% 05.x"},
+ {__LINE__, 0x0001f084, "001F084", "%5.7X"},
+ {__LINE__, 0x00000006, " 6", "% ld"},
+ {__LINE__, 0x011b0802, "18548738", "%.3ld"},
+ {__LINE__, 0x00000006, " 6", "%#3.d"},
+ {__LINE__, 0xffffffff, "ffffffff", "%6x"},
+ {__LINE__, 0x00000001, "1", "% x"},
+ {__LINE__, 0x00000750, " 01872", "% .5d"},
+ {__LINE__, 0xfffffff9, "fffffff9", "%x"},
+ {__LINE__, -0x00f842c, "-1016876", "%+d"},
+ {__LINE__, -0x001dcf0, "-122096", "%-0d"},
+ {__LINE__, 0x000000c9, "0XC9", "% #3X"},
+ {__LINE__, 0x1e368e86, "1e368e86", "%7x"},
+ {__LINE__, -0x0001157, "-4439", "% 03.4d"},
+ {__LINE__, 0xfff91e87, "FFF91E87", "%3.5X"},
+ {__LINE__, 0x00000006, "6", "%x"},
+ {__LINE__, 0x00000bca, "3018", "%ld"},
+ {__LINE__, 0x00495ff6, "495ff6", "%01.0x"},
+ {__LINE__, -0x0267f7a, "-2523002", "% #5d"},
+ {__LINE__, 0x00000060, "96", "%-d"},
+ {__LINE__, 0x000850c6, "544966", "%#.1d"},
+ {__LINE__, 0x00231457, "231457", "%-6.4X"},
+ {__LINE__, 0x0000000b, "11", "%-d"},
+ {__LINE__, 0x000003bd, "957", "%#d"},
+ {__LINE__, 0xfd51d970, "FD51D970", "%+.7X"},
+ {__LINE__, 0x000007bf, "1983", "%-ld"},
+ {__LINE__, 0x000034b2, "34B2", "%0.X"},
+ {__LINE__, 0x0000c18d, "C18D", "%0.X"},
+ {__LINE__, 0xffffbb83, "ffffbb83", "% 3x"},
+ {__LINE__, 0x000001d0, "0x1d0", "%#x"},
+ {__LINE__, -0x003c784, "-247684", "%#ld"},
+ {__LINE__, 0x0210cffa, "210CFFA", "%X"},
+ {__LINE__, -0x33093a1, "-53515169", "% 0d"},
+ {__LINE__, 0x00000001, " 1", "% #ld"},
+ {__LINE__, 0xffffaa53, "ffffaa53", "%-4.5x"},
+ {__LINE__, 0x2935c056, "691388502", "%1.d"},
+ {__LINE__, -0x0000001, "-1", "%ld"},
+ {__LINE__, 0x000013d1, "0X013D1", "%+#2.5X"},
+ {__LINE__, -0x000035c, "-860", "%-.2d"},
+ {__LINE__, 0x00000000, " ", "%-4.X"},
+ {__LINE__, -0x0000147, "-327", "%d"},
+ {__LINE__, 0x0a317eb0, "171015856", "%.7d"},
+ {__LINE__, 0x00000003, "3", "%ld"},
+ {__LINE__, 0x000001d6, "1d6", "%-x"},
+ {__LINE__, 0x18185214, "404247060", "%-.2ld"},
+ {__LINE__, 0x00574140, "0574140", "%.7X"},
+ {__LINE__, 0x00002ea5, "02ea5", "%.5x"},
+ {__LINE__, 0x00000005, "5", "% x"},
+ {__LINE__, 0xffc47ed6, "ffc47ed6", "%-x"},
+ {__LINE__, 0x0001f5da, "0X1F5DA", "%#X"},
+ {__LINE__, 0xfffffcc9, "fffffcc9", "% x"},
+ {__LINE__, 0x02586c98, "2586C98", "%X"},
+ {__LINE__, -0x0000036, "-54", "% ld"},
+ {__LINE__, 0x00064b57, "412503", "%1.5d"},
+ {__LINE__, -0x0000007, "-7", "%#0.0ld"},
+ {__LINE__, 0x00023a03, "145923", "%ld"},
+ {__LINE__, -0x0000065, "-101", "%+#d"},
+ {__LINE__, 0x00000208, "208", "%X"},
+ {__LINE__, 0x00e97728, "15300392", "%-ld"},
+ {__LINE__, 0x0000030a, "+778", "%+d"},
+ {__LINE__, 0xf4d7deee, "F4D7DEEE", "%+X"},
+ {__LINE__, -0x000009a, "-154", "%+.3ld"},
+ {__LINE__, 0x000002c0, "+704", "%+ld"},
+ {__LINE__, 0x0067ec23, "67ec23", "%x"},
+ {__LINE__, 0x005ca7fc, "+6072316", "%+d"},
+ {__LINE__, 0xfffff5f1, "fffff5f1", "%x"},
+ {__LINE__, 0x00000601, " 0X601", "%#7.2X"},
+ {__LINE__, -0x0000057, "-87", "% ld"},
+ {__LINE__, -0x0000078, " -120", "%7.d"},
+ {__LINE__, -0x000001f, "-31 ", "%-6d"},
+ {__LINE__, 0x0160c000, "23117824", "%ld"},
+ {__LINE__, -0x0000007, "-7", "%0ld"},
+ {__LINE__, 0xfffffffe, "fffffffe", "%+x"},
+ {__LINE__, 0x5b6ef898, "5b6ef898", "%+0x"},
+ {__LINE__, 0x0009bfb6, "638902", "%d"},
+ {__LINE__, -0x0000145, " -325", "%#6.0d"},
+ {__LINE__, -0x508c048, "-84459592", "%-5.ld"},
+ {__LINE__, 0x00000002, " 0x2", "% #4x"},
+ {__LINE__, 0x0001486e, "84078", "%#d"},
+ {__LINE__, 0x006ac76a, "6997866", "%.6d"},
+ {__LINE__, 0xffffff98, "FFFFFF98", "%X"},
+ {__LINE__, 0xfffffe08, "fffffe08", "%6.x"},
+ {__LINE__, -0x24ef47e, "-38728830", "%1.6ld"},
+ {__LINE__, 0x39d1b2db, "39D1B2DB", "% X"},
+ {__LINE__, 0xfffc9ce2, "0xfffc9ce2", "%#x"},
+ {__LINE__, 0x59485e14, "1497914900", "%#4ld"},
+ {__LINE__, 0x000022eb, "22EB", "%3.X"},
+ {__LINE__, 0xfa410352, "FA410352", "%-X"},
+ {__LINE__, -0x4a342f0, "-77808368", "% ld"},
+ {__LINE__, 0xef5825a4, "EF5825A4", "%.6X"},
+ {__LINE__, 0x01b0185a, "0x1b0185a", "% #x"},
+ {__LINE__, -0x0004290, "-17040", "%.3d"},
+ {__LINE__, -0x10f88659, "-284722777", "%+6.2ld"},
+ {__LINE__, 0x00003216, "12822", "%-d"},
+ {__LINE__, 0x4a31a219, "1244766745", "%d"},
+ {__LINE__, 0xffffffb5, "FFFFFFB5", "%-X"},
+ {__LINE__, 0x0000d586, "D586", "%-2.X"},
+ {__LINE__, 0x00008496, "33942", "%1.d"},
+ {__LINE__, -0x0000011, "-17", "%1ld"},
+ {__LINE__, 0x0000003c, "3C", "%2.X"},
+ {__LINE__, 0xfffffffe, "FFFFFFFE", "%.3X"},
+ {__LINE__, 0x0000152a, "152A", "%X"},
+ {__LINE__, 0xfffe876e, "FFFE876E", "%X"},
+ {__LINE__, -0x0003874, "-14452", "%-ld"},
+ {__LINE__, -0x004918a, "-299402", "%#.6d"},
+ {__LINE__, -0x000000c, "-12", "%-d"},
+ {__LINE__, 0xffffd812, "FFFFD812", "%+X"},
+ {__LINE__, -0x000000c, "-12", "%0d"},
+ {__LINE__, -0x0000229, "-553", "%0d"},
+ {__LINE__, 0x00002ab8, "2AB8", "%4.X"},
+ {__LINE__, 0x0000004b, "+75", "%+ld"},
+ {__LINE__, 0x001c3178, " 1847672", "% ld"},
+ {__LINE__, -0x0000006, "-6", "%.0ld"},
+ {__LINE__, 0x0003be65, "245349", "%ld"},
+ {__LINE__, -0x0000001, "-1", "%#1ld"},
+ {__LINE__, 0x0000007f, "+127", "%+ld"},
+ {__LINE__, 0x0000020e, "526 ", "%-5ld"},
+ {__LINE__, 0x00000002, "2", "%d"},
+ {__LINE__, 0x03bd0873, "0X3BD0873", "%#X"},
+ {__LINE__, 0x00093a52, "604754", "%-2d"},
+ {__LINE__, -0x00823fc, "-0533500", "%+.7ld"},
+ {__LINE__, 0x00000000, " ", "%4.X"},
+ {__LINE__, -0x0000001, "-1", "%ld"},
+ {__LINE__, 0xfff09ede, "fff09ede", "%-x"},
+ {__LINE__, 0x01e28c24, "31624228", "%ld"},
+ {__LINE__, 0x00001dcc, "1DCC", "%X"},
+ {__LINE__, -0x0f0ea0d, "-15788557", "%-00.ld"},
+ {__LINE__, 0xffff73a1, "FFFF73A1", "%X"},
+ {__LINE__, -0x0004040, "-16448", "%+#d"},
+ {__LINE__, 0x0073b158, "0x73b158", "%#7x"},
+ {__LINE__, 0xfffff8ff, "FFFFF8FF", "% 5X"},
+ {__LINE__, -0x0000004, "-4", "%0d"},
+ {__LINE__, 0xffff56a3, "ffff56a3", "%1.6x"},
+ {__LINE__, -0x0000041, "-65", "%0d"},
+ {__LINE__, 0x00000009, "+0000009", "%+2.7d"},
+ {__LINE__, 0xffffe13d, "0XFFFFE13D", "%+#2.X"},
+ {__LINE__, -0x00002ce, "-00718", "%.5ld"},
+ {__LINE__, 0xffc53e28, "ffc53e28", "%03.4x"},
+ {__LINE__, 0x00000005, "0X5", "%#X"},
+ {__LINE__, 0x00000004, "4", "%x"},
+ {__LINE__, 0xe21b35eb, "e21b35eb", "%-x"},
+ {__LINE__, -0x0000098, "-152", "%-ld"},
+ {__LINE__, 0xffffff81, "FFFFFF81", "%2X"},
+ {__LINE__, 0x00000003, "00003", "%.5ld"},
+ {__LINE__, 0xfffffffc, "fffffffc", "%+x"},
+ {__LINE__, 0x000491f5, "299509", "%1.ld"},
+ {__LINE__, 0xf06bfd7d, "F06BFD7D", "%X"},
+ {__LINE__, -0x0000006, "-6", "%0d"},
+ {__LINE__, -0x0a4af7d, "-10792829", "%-0d"},
+ {__LINE__, -0x11a74ef, "-18511087", "%ld"},
+ {__LINE__, 0x2dc95e17, "768171543", "%-1.d"},
+ {__LINE__, -0x0000001, "-1", "%#ld"},
+ {__LINE__, 0x00000033, "51", "%-#d"},
+ {__LINE__, 0x002d0219, "2949657", "%ld"},
+ {__LINE__, 0xfffffffd, "FFFFFFFD", "%2.4X"},
+ {__LINE__, 0x00000f20, "+3872", "%+ld"},
+ {__LINE__, -0x0000047, "-071", "%4.3ld"},
+ {__LINE__, 0x00000010, " 16", "%6d"},
+ {__LINE__, 0x00000000, "0", "%0d"},
+ {__LINE__, 0xffffff57, "FFFFFF57", "%X"},
+ {__LINE__, -0x0000700, "-1792", "%-#d"},
+ {__LINE__, -0x0000064, "-100", "%-ld"},
+ {__LINE__, 0xff26d49a, "FF26D49A", "%-0X"},
+ {__LINE__, -0x0000006, "-6", "%.1ld"},
+ {__LINE__, 0x1391edc5, "1391edc5", "%.1x"},
+ {__LINE__, 0x0000014a, "330", "%-#ld"},
+ {__LINE__, 0x07ecd1e1, "7ecd1e1", "%6x"},
+ {__LINE__, -0xa2b8898, "-170625176", "%3.d"},
+ {__LINE__, 0x00035287, "0x35287", "%#.0x"},
+ {__LINE__, 0x00000000, "00000", "%0.5X"},
+ {__LINE__, -0x0000153, "-339", "%d"},
+ {__LINE__, 0x0000ad6e, " 44398", "% 0.d"},
+ {__LINE__, 0x00000001, "1", "%-X"},
+ {__LINE__, -0x000000d, "-13 ", "%-6.2d"},
+ {__LINE__, -0x01bff8a, "-1834890", "%d"},
+ {__LINE__, 0x000a0fa8, "+659368", "%+ld"},
+ {__LINE__, 0xac044dc0, "ac044dc0", "%.0x"},
+ {__LINE__, 0x0003a729, "239401", "%ld"},
+ {__LINE__, -0x00004f0, "-1264", "%+ld"},
+ {__LINE__, 0x00000000, "0", "%x"},
+ {__LINE__, 0x00000012, "12", "% x"},
+ {__LINE__, 0xffff770b, "ffff770b", "%7.1x"},
+ {__LINE__, 0xd7458572, "d7458572", "%x"},
+ {__LINE__, 0x01f1b4f9, "1f1b4f9", "% 0x"},
+ {__LINE__, 0xfffb2198, "0XFFFB2198", "% #1.X"},
+ {__LINE__, 0x00ef6189, " 15688073", "% ld"},
+ {__LINE__, -0x3f0ae63, "-66104931", "% #d"},
+ {__LINE__, -0x0006075, "-24693", "%ld"},
+ {__LINE__, 0x000000a1, "161", "%d"},
+ {__LINE__, 0xfffffffc, "fffffffc", "%3.2x"},
+ {__LINE__, 0xff6b4125, "FF6B4125", "%+5.X"},
+ {__LINE__, 0x00000001, " 1", "%6.d"},
+ {__LINE__, -0x0000001, "-1", "%+0d"},
+ {__LINE__, -0x000096c, "-2412", "%0.4d"},
+ {__LINE__, 0x00039c6f, "236655", "%.0d"},
+ {__LINE__, 0x3625286c, "908404844", "%.1d"},
+ {__LINE__, 0xfffffffa, "fffffffa", "%x"},
+ {__LINE__, 0x00000000, "0", "%X"},
+ {__LINE__, 0x00c34353, "12796755", "%#.4d"},
+ {__LINE__, 0x000002df, "735", "%ld"},
+ {__LINE__, 0xffff38fa, "FFFF38FA", "%5.1X"},
+ {__LINE__, -0x000002a, "-42", "%0.d"},
+ {__LINE__, 0x0000077e, "1918", "%ld"},
+ {__LINE__, 0x000001f7, "503", "%ld"},
+ {__LINE__, 0x00000004, "4", "%ld"},
+ {__LINE__, 0x0021fb02, "2226946", "%d"},
+ {__LINE__, 0x007c858d, "8160653", "%-0d"},
+ {__LINE__, -0x0000109, "-265", "%.0d"},
+ {__LINE__, 0xfffffffa, "fffffffa", "% x"},
+ {__LINE__, 0x0097932d, "97932d", "%+x"},
+ {__LINE__, 0xfffbbd03, "fffbbd03", "%-.5x"},
+ {__LINE__, -0x0000005, "-5", "%0d"},
+ {__LINE__, 0x03ee3a95, "65944213", "%ld"},
+ {__LINE__, -0x0000002, " -00002", "%7.5d"},
+ {__LINE__, 0xea1a4e54, "EA1A4E54", "%X"},
+ {__LINE__, -0x000a9d6, "-43478", "%+d"},
+ {__LINE__, -0x0fd8d65, "-16616805", "%5ld"},
+ {__LINE__, 0x00000001, "1", "%-d"},
+ {__LINE__, 0x00000072, "72", "%2.X"},
+ {__LINE__, 0xffffff94, "FFFFFF94", "%X"},
+ {__LINE__, 0x00000d2a, "D2A", "%+X"},
+ {__LINE__, 0xffff614f, "ffff614f", "%x"},
+ {__LINE__, -0x0000018, "-24", "%ld"},
+ {__LINE__, 0x0000003b, "059", "%2.3d"},
+ {__LINE__, 0x0000001a, "1A", "%0X"},
+ {__LINE__, -0x0000109, "-265", "%02ld"},
+ {__LINE__, 0x00000f9d, "3997", "%#1d"},
+ {__LINE__, 0x0000001b, "1b", "%x"},
+ {__LINE__, 0xffffff07, "ffffff07", "%x"},
+ {__LINE__, 0xfff1a425, "0xfff1a425", "%#x"},
+ {__LINE__, 0x00000005, "5", "%-1d"},
+ {__LINE__, -0x53a6efd, "-87715581", "%ld"},
+ {__LINE__, 0x042f37db, "42F37DB", "%6.X"},
+ {__LINE__, 0x00053bd5, "+342997", "%+5ld"},
+ {__LINE__, 0xffffffff, "ffffffff", "% x"},
+ {__LINE__, 0xffffffef, "FFFFFFEF", "%6.X"},
+ {__LINE__, -0x10ec29a, "-17744538", "%+2.d"},
+ {__LINE__, 0x01dcc901, "1dcc901", "%x"},
+ {__LINE__, 0x0007dc68, "515176", "%-3.d"},
+ {__LINE__, -0x0000062, "-0098", "%#2.4d"},
+ {__LINE__, 0x00000000, " ", "%3.0X"},
+ {__LINE__, -0x00000de, "-222", "%ld"},
+ {__LINE__, 0x000c1fb8, "C1FB8", "%0X"},
+ {__LINE__, 0x0005bf58, "5BF58", "%X"},
+ {__LINE__, -0x000dd1b, "-56603", "%-03.1d"},
+ {__LINE__, 0x00000b14, "B14", "%+3.X"},
+ {__LINE__, 0x00000799, "799", "%-x"},
+ {__LINE__, 0xfffffffa, "fffffffa", "%x"},
+ {__LINE__, 0x00000003, "0x00003", "% #7.5x"},
+ {__LINE__, -0x002b9f1, "-178673", "%+d"},
+ {__LINE__, -0x001b817, "-112663", "%0d"},
+ {__LINE__, 0xf6f98533, "f6f98533", "%.1x"},
+ {__LINE__, 0x00338ffc, "3379196", "%d"},
+ {__LINE__, 0x0409e9b5, "0X409E9B5", "%#X"},
+ {__LINE__, 0x00b8e98e, " 12118414", "% 0d"},
+ {__LINE__, -0x002a8f6, "-174326", "%ld"},
+ {__LINE__, 0x13bb9722, "331061026", "%0d"},
+ {__LINE__, 0x00063c71, "63c71", "%x"},
+ {__LINE__, 0xfffffe37, "FFFFFE37", "%.1X"},
+ {__LINE__, 0xffff7b3e, "ffff7b3e", "%+.1x"},
+ {__LINE__, 0x005eeab1, "5eeab1", "%+x"},
+ {__LINE__, 0xffc69e99, "ffc69e99", "%x"},
+ {__LINE__, -0x000005c, " -92", "%5ld"},
+ {__LINE__, 0x07d8fa8a, "7d8fa8a", "%x"},
+ {__LINE__, 0x00030e0a, "200202", "%-4.1d"},
+ {__LINE__, 0x00001dc1, "1DC1", "%.0X"},
+ {__LINE__, 0x00000008, "8", "%0ld"},
+ {__LINE__, -0x01b5397, "-1790871", "%3.d"},
+ {__LINE__, 0x27fbb4b5, "27fbb4b5", "%x"},
+ {__LINE__, -0xe3fdcfc, "-239066364", "%4ld"},
+ {__LINE__, 0x0008bcb1, "8bcb1", "%0x"},
+ {__LINE__, 0xffff039e, "ffff039e", "%.6x"},
+ {__LINE__, 0x000d0bd4, "d0bd4", "%-x"},
+ {__LINE__, 0x00000000, "+0", "%+d"},
+ {__LINE__, -0x2a49ea4, "-44342948", "%1d"},
+ {__LINE__, -0x0000055, "-85", "%0d"},
+ {__LINE__, -0x0000a05, "-2565", "%3.3ld"},
+ {__LINE__, -0x000000b, "-11 ", "%-4d"},
+ {__LINE__, 0xfff30444, "FFF30444", "%7.X"},
+ {__LINE__, 0x0000003f, "63", "%-0d"},
+ {__LINE__, 0x00046779, "46779", "%X"},
+ {__LINE__, 0x000028d7, " 0X28D7", "%#7.X"},
+ {__LINE__, 0x00000019, " 19", "%5x"},
+ {__LINE__, 0x0032291d, "3287325", "%2.ld"},
+ {__LINE__, 0x00057afa, "57AFA", "%X"},
+ {__LINE__, 0xfffe8c64, "fffe8c64", "%3.4x"},
+ {__LINE__, -0x624110d6, "-1648431318", "%+6d"},
+ {__LINE__, 0x0000001a, " 26", "% 5.d"},
+ {__LINE__, 0xfffffffd, "FFFFFFFD", "%6.X"},
+ {__LINE__, 0x00199490, "1676432", "%-1d"},
+ {__LINE__, -0xfff8265, "-268403301", "%-0ld"},
+ {__LINE__, 0x0000000e, "e", "%-x"},
+ {__LINE__, 0x00c38aec, "c38aec", "%x"},
+ {__LINE__, -0x00658f4, "-415988", "%#ld"},
+ {__LINE__, 0x0066ac4e, "6728782", "%0d"},
+ {__LINE__, 0xc4a808d5, "c4a808d5", "%x"},
+ {__LINE__, 0x00000000, " 0", "%6.1x"},
+ {__LINE__, 0x00066d24, "66d24", "%x"},
+ {__LINE__, 0x00002117, "2117", "%X"},
+ {__LINE__, 0xfe06fdf4, "FE06FDF4", "%0X"},
+ {__LINE__, 0xfffffff9, "fffffff9", "%x"},
+ {__LINE__, 0x1c6bb795, "+476821397", "%+d"},
+ {__LINE__, 0xfffffba4, "FFFFFBA4", "%X"},
+ {__LINE__, 0xfffd7d44, "fffd7d44", "%0x"},
+ {__LINE__, 0x0019dd17, "1694999", "%d"},
+ {__LINE__, 0x6475851e, "0x6475851e", "% #7.x"},
+ {__LINE__, -0x00330d5, "-209109", "%0ld"},
+ {__LINE__, 0x009f53f7, "09F53F7", "%+6.7X"},
+ {__LINE__, -0x00172f9, " -94969", "%7.5ld"},
+ {__LINE__, 0xffffffdc, "FFFFFFDC", "%X"},
+ {__LINE__, -0x013bdec, "-1293804", "%+#2ld"},
+ {__LINE__, 0xfff845c0, "fff845c0", "%+7.x"},
+ {__LINE__, -0x0fbe712, "-16508690", "%.7d"},
+ {__LINE__, 0xffffe13f, "ffffe13f", "%x"},
+ {__LINE__, 0xbbc19951, "BBC19951", "%-4X"},
+ {__LINE__, -0x28d6d1b, "-42822939", "%#d"},
+ {__LINE__, -0x93cda6b, "-154983019", "%-d"},
+ {__LINE__, 0xffc93342, "FFC93342", "%7.X"},
+ {__LINE__, 0x072ac8b3, " 120244403", "% ld"},
+ {__LINE__, 0xfff8d17b, "FFF8D17B", "% X"},
+ {__LINE__, 0x00000da5, "DA5", "%0.X"},
+ {__LINE__, 0x055ad3ac, "0x55ad3ac", "%#1x"},
+ {__LINE__, 0x00000e5a, " 3674", "% .4ld"},
+ {__LINE__, 0xffffff79, "FFFFFF79", "%+X"},
+ {__LINE__, 0xffffe167, "ffffe167", "%+5x"},
+ {__LINE__, 0x0000fa50, "0064080", "%.7ld"},
+ {__LINE__, 0x00000001, "1", "%-d"},
+ {__LINE__, 0xfffffffe, "fffffffe", "%x"},
+ {__LINE__, 0x000009ac, " 2476", "% #2.ld"},
+ {__LINE__, 0x00000e78, "0003704", "%.7ld"},
+ {__LINE__, -0x000dfc3, "-57283", "%6.d"},
+ {__LINE__, 0x00000ee0, "EE0", "%0X"},
+ {__LINE__, -0x293703b3, "-691471283", "%ld"},
+ {__LINE__, 0x000073e8, " 73e8", "%6x"},
+ {__LINE__, 0xffffdffd, "ffffdffd", "%5.5x"},
+ {__LINE__, 0x00000004, "4", "%+00.x"},
+ {__LINE__, 0x00000008, "0X8", "%#X"},
+ {__LINE__, 0x0003044c, "3044c", "%0x"},
+ {__LINE__, 0xffc2095e, "FFC2095E", "%0X"},
+ {__LINE__, 0x00000aac, "0002732", "%-.7ld"},
+ {__LINE__, 0xffffff79, "FFFFFF79", "%+1.X"},
+ {__LINE__, 0x53a0f94a, " 1403058506", "% 2.4ld"},
+ {__LINE__, 0x000e928d, "e928d", "%x"},
+ {__LINE__, 0x0024127a, "2364026", "%5.d"},
+ {__LINE__, 0x000f7c1c, " 1014812", "% 2.d"},
+ {__LINE__, -0x000003d, "-61 ", "%-#4ld"},
+ {__LINE__, -0x0000122, "-290", "%+ld"},
+ {__LINE__, 0x00000006, "+6", "%+0d"},
+ {__LINE__, 0x00000129, " 000129", "%7.6X"},
+ {__LINE__, 0x15d873e5, " 366506981", "% 5.7d"},
+ {__LINE__, 0x00000001, "1", "%d"},
+ {__LINE__, 0x038d6110, "+59597072", "%+d"},
+ {__LINE__, 0x0f46ccc3, "256298179", "%-1.4d"},
+ {__LINE__, 0xfe434d21, "fe434d21", "%x"},
+ {__LINE__, -0x179797d7, "-395810775", "%d"},
+ {__LINE__, 0xe35807bf, "e35807bf", "%x"},
+ {__LINE__, 0x00000003, " +3", "%+7d"},
+ {__LINE__, 0x017e699e, "25061790", "%#ld"},
+ {__LINE__, -0x0000029, "-41", "%d"},
+ {__LINE__, 0xffffff11, "ffffff11", "%1.x"},
+ {__LINE__, -0x0001bf6, "-7158", "%+0ld"},
+ {__LINE__, 0xffffff4b, "FFFFFF4B", "%4X"},
+ {__LINE__, -0x0000040, "-64", "%ld"},
+ {__LINE__, 0x000034d6, "+13526", "%+ld"},
+ {__LINE__, 0xffffffa7, "ffffffa7", "%x"},
+ {__LINE__, 0xfffffe8e, "fffffe8e", "%+.3x"},
+ {__LINE__, 0x00000000, "0", "%0.1d"},
+ {__LINE__, -0x007cdf1, "-511473", "%ld"},
+ {__LINE__, 0xfffffeef, "FFFFFEEF", "%-X"},
+ {__LINE__, 0x00002d91, "2d91", "%x"},
+ {__LINE__, -0x000025b, "-603", "%#ld"},
+ {__LINE__, -0x000001b, "-27", "%-ld"},
+ {__LINE__, 0x042b6752, "42B6752", "%+X"},
+ {__LINE__, -0x75afb0a6, "-1974448294", "% ld"},
+ {__LINE__, -0x0000001, "-1", "%ld"},
+ {__LINE__, 0x00000542, " 1346", "%6d"},
+ {__LINE__, -0x0000010, "-16", "%+0d"},
+ {__LINE__, 0xfffed8f7, "FFFED8F7", "%5.X"},
+ {__LINE__, 0x0541852e, "541852e", "% 2.x"},
+ {__LINE__, 0xff22aec3, "ff22aec3", "% .1x"},
+ {__LINE__, 0x5e34b745, "1580513093", "%ld"},
+ {__LINE__, 0xfffffff3, "fffffff3", "%x"},
+ {__LINE__, 0x0eda7b86, "+249199494", "%+.3d"},
+ {__LINE__, 0xffffe40f, "ffffe40f", "%+x"},
+ {__LINE__, -0x0003484, "-13444", "%-1.5ld"},
+ {__LINE__, 0x0000334b, " 13131", "%6.ld"},
+ {__LINE__, -0x0000149, "-329", "%ld"},
+ {__LINE__, 0x00000001, " 001", "% 5.3x"},
+ {__LINE__, 0xffeaa035, "ffeaa035", "%+3.5x"},
+ {__LINE__, 0x00211dff, "2170367", "%ld"},
+ {__LINE__, 0x007e91f4, "7e91f4", "%x"},
+ {__LINE__, 0xfffffffc, "0xfffffffc", "%+#5x"},
+ {__LINE__, 0xfffffffc, "FFFFFFFC", "%6.X"},
+ {__LINE__, 0x0156a9b5, "156a9b5", "%x"},
+ {__LINE__, 0xfffffe58, "fffffe58", "%+x"},
+ {__LINE__, 0xffff8c66, "FFFF8C66", "%.0X"},
+ {__LINE__, 0x00000000, "0", "%d"},
+ {__LINE__, 0x00000005, " 5", "%7.d"},
+ {__LINE__, -0x0000002, "-2", "%ld"},
+ {__LINE__, 0x000076b9, " 30393", "% ld"},
+ {__LINE__, 0x00003824, "3824", "%4X"},
+ {__LINE__, 0x00000cdf, " CDF", "% 7X"},
+ {__LINE__, 0x017c9e8f, "17C9E8F", "%-X"},
+ {__LINE__, -0x20f582d, "-34560045", "%-.5d"},
+ {__LINE__, 0x0000732e, " 29486", "% 7.ld"},
+ {__LINE__, 0xffffffff, "FFFFFFFF", "%+0X"},
+ {__LINE__, 0xf379a4a2, "F379A4A2", "% .7X"},
+ {__LINE__, -0x0000028, "-40", "%-d"},
+ {__LINE__, 0xe73cf79e, "e73cf79e", "%x"},
+ {__LINE__, 0x00000002, " 2", "%7ld"},
+ {__LINE__, -0x00029b1, "-10673", "%-#1.ld"},
+ {__LINE__, -0x0002a58, "-10840", "%3.d"},
+ {__LINE__, 0x00000002, "2", "%-X"},
+ {__LINE__, 0xfffffffc, "FFFFFFFC", "%X"},
+ {__LINE__, -0x000003a, " -58", "%5ld"},
+ {__LINE__, 0x0245ef3b, "245ef3b", "%.3x"},
+ {__LINE__, 0x00026cca, "158922", "%-06.3ld"},
+ {__LINE__, 0x01016fd3, "16871379", "%-d"},
+ {__LINE__, 0x000016fc, "5884", "%0ld"},
+ {__LINE__, -0x00007fb, " -2043", "%7.3d"},
+ {__LINE__, 0xfff73d3c, "fff73d3c", "%0x"},
+ {__LINE__, -0x0000110, "-272", "% 04.3d"},
+ {__LINE__, 0x0000000e, " 014", "% 04ld"},
+ {__LINE__, -0x0000039, "-57", "%.0ld"},
+ {__LINE__, 0x00000c95, "c95", "%0x"},
+ {__LINE__, 0xffff3b2e, "ffff3b2e", "%x"},
+ {__LINE__, 0xfffffffe, "FFFFFFFE", "%X"},
+ {__LINE__, 0x00000015, "21", "%.1d"},
+ {__LINE__, 0x0000000c, "+12", "%+ld"},
+ {__LINE__, 0x00000000, "0", "%+X"},
+ {__LINE__, 0xfffc9a14, "fffc9a14", "%-.5x"},
+ {__LINE__, 0x0000003c, "60", "%.2ld"},
+ {__LINE__, -0x0000023, " -35", "%6.d"},
+ {__LINE__, 0x00000740, "1856", "%ld"},
+ {__LINE__, 0x00000160, "160", "% 3.X"},
+ {__LINE__, 0x00000006, " 6", "%5.X"},
+ {__LINE__, -0x0000677, "-1655", "%.3ld"},
+ {__LINE__, 0x12709c7e, "12709C7E", "%.7X"},
+ {__LINE__, 0x0000090f, "+2319", "%+#d"},
+ {__LINE__, 0xffffffe0, "0xffffffe0", "%#4.1x"},
+ {__LINE__, 0x00132ce0, "1256672", "%ld"},
+ {__LINE__, 0x00000059, "59", "%+X"},
+ {__LINE__, -0x0000017, "-23", "%0d"},
+ {__LINE__, -0x01fade6, "-2076134", "%-4.3ld"},
+ {__LINE__, 0x000df3fa, "914426", "%.5ld"},
+ {__LINE__, 0xfffffd0f, "fffffd0f", "%7x"},
+ {__LINE__, -0x000c212, "-49682", "%0.1ld"},
+ {__LINE__, 0xffff8bcb, "FFFF8BCB", "%.3X"},
+ {__LINE__, 0x0000000a, "a", "% x"},
+ {__LINE__, 0x00000021, "21", "%x"},
+ {__LINE__, -0x0000040, "-64", "% 1ld"},
+ {__LINE__, 0x00000009, " 9", "%6.ld"},
+ {__LINE__, -0x0000d67, "-3431", "% 5.3d"},
+ {__LINE__, 0x03a85f1b, "61366043", "%ld"},
+ {__LINE__, 0x00000035, "000053", "%0.6d"},
+ {__LINE__, 0xfffda5cb, "fffda5cb", "%+x"},
+ {__LINE__, 0xffffff78, "FFFFFF78", "%-7.0X"},
+ {__LINE__, 0xfffffd6d, "fffffd6d", "%7.x"},
+ {__LINE__, 0xfffffc08, "fffffc08", "%7.3x"},
+ {__LINE__, 0x00003335, " 13109", "% #d"},
+ {__LINE__, -0x0000002, " -2", "%5.d"},
+ {__LINE__, -0x13767a48, "-326531656", "%+ld"},
+ {__LINE__, 0x00000be5, "3045", "%4.0ld"},
+ {__LINE__, 0xfffdb28c, "FFFDB28C", "%X"},
+ {__LINE__, 0x00127118, "1208600", "%ld"},
+ {__LINE__, 0x00000086, " 134", "% ld"},
+ {__LINE__, 0x0002214c, "2214c", "%+x"},
+ {__LINE__, 0x0000a0c2, " a0c2", "%5.0x"},
+ {__LINE__, -0x000007c, "-124", "%ld"},
+ {__LINE__, 0x0000012a, "00298", "%3.5d"},
+ {__LINE__, 0xfd4f1257, "FD4F1257", "%+2.X"},
+ {__LINE__, 0xffffd8aa, "ffffd8aa", "%5x"},
+ {__LINE__, -0x00000a7, "-167", "%+ld"},
+ {__LINE__, -0x0009c69, "-40041", "%0.0ld"},
+ {__LINE__, 0x02230418, "35849240", "%-0.6ld"},
+ {__LINE__, 0x00000000, " 0", "%6x"},
+ {__LINE__, 0xfffff184, "fffff184", "%02.5x"},
+ {__LINE__, -0x0ae967b, "-11441787", "%d"},
+ {__LINE__, 0x0015de3a, "1433146", "%-5.3d"},
+ {__LINE__, -0x0071e93, "-466579", "%1.ld"},
+ {__LINE__, 0xfffff8bd, "fffff8bd", "%+x"},
+ {__LINE__, -0x00000e4, "-228", "%+ld"},
+ {__LINE__, 0x000001d8, " 472", "% .3ld"},
+ {__LINE__, 0x00315faa, "315faa", "%-0x"},
+ {__LINE__, 0x00000e59, "e59", "%0x"},
+ {__LINE__, -0x0000005, "-5", "%ld"},
+ {__LINE__, 0x000018ec, "6380", "%ld"},
+ {__LINE__, 0xfffffff9, "fffffff9", "%5.2x"},
+ {__LINE__, -0xe7cfd39, "-243072313", "%-d"},
+ {__LINE__, 0x0002c30b, "2C30B", "%1.2X"},
+ {__LINE__, 0x0000007a, "7A", "%X"},
+ {__LINE__, 0xf604ecb2, "F604ECB2", "%2X"},
+ {__LINE__, -0x05f602c, "-6250540", "%d"},
+ {__LINE__, 0xffff9c86, "ffff9c86", "%2.x"},
+ {__LINE__, -0x00d7f55, "-884565", "%#d"},
+ {__LINE__, 0xd2a37824, "D2A37824", "%4X"},
+ {__LINE__, 0x00000000, "", "%-.0x"},
+ {__LINE__, 0x000d4b51, "0d4b51", "%3.6x"},
+ {__LINE__, 0x000ecd97, "ecd97", "% x"},
+ {__LINE__, -0x0000018, "-024", "%+04ld"},
+ {__LINE__, -0x009f292, "-651922", "%ld"},
+ {__LINE__, -0x0002da9, "-11689", "%-0ld"},
+ {__LINE__, -0x000a218, "-41496", "%4.5d"},
+ {__LINE__, 0xffff85ac, "FFFF85AC", "% 04.X"},
+ {__LINE__, -0x0d9ffbe, "-14286782", "%0d"},
+ {__LINE__, 0xfb18cc8e, "fb18cc8e", "%x"},
+ {__LINE__, 0xffffe5d3, "FFFFE5D3", "%-X"},
+ {__LINE__, 0x00000000, "0", "%x"},
+ {__LINE__, -0x0000006, "-6", "% d"},
+ {__LINE__, 0x0002fc62, "2fc62", "% 03.x"},
+ {__LINE__, 0x00000000, "00", "%.2d"},
+ {__LINE__, -0x00000fd, " -253", "%6ld"},
+ {__LINE__, -0x000000b, "-11", "%d"},
+ {__LINE__, -0x00042a3, "-17059", "% 6d"},
+ {__LINE__, 0x00000002, "2", "% X"},
+ {__LINE__, -0x61ead93e, "-1642780990", "%-0d"},
+ {__LINE__, 0xf2e61f6d, "f2e61f6d", "%-.4x"},
+ {__LINE__, 0xffd31b93, "ffd31b93", "%x"},
+ {__LINE__, -0x0000008, "-8", "%ld"},
+ {__LINE__, 0xffffffff, "ffffffff", "%00x"},
+ {__LINE__, 0x000000fb, "+000251", "%+2.6d"},
+ {__LINE__, 0x00000015, " 15", "%4.X"},
+ {__LINE__, 0x06ec6d96, "6EC6D96", "%+2.X"},
+ {__LINE__, 0xffff1df7, "0xffff1df7", "% #1x"},
+ {__LINE__, -0x000004b, "-75", "%-ld"},
+ {__LINE__, 0x00000008, "8", "%#.0d"},
+ {__LINE__, 0x00001355, "4949", "%3.4ld"},
+ {__LINE__, -0x00000f7, "-247", "%d"},
+ {__LINE__, 0x0000001f, "31", "%.2ld"},
+ {__LINE__, 0x0000d556, "D556", "%-X"},
+ {__LINE__, 0xffffd5a5, "ffffd5a5", "% x"},
+ {__LINE__, -0x0000e34, "-3636", "%#d"},
+ {__LINE__, -0x0000007, "-7", "%d"},
+ {__LINE__, 0x01ba10a4, "1ba10a4", "%x"},
+ {__LINE__, 0xfffff759, "FFFFF759", "% X"},
+ {__LINE__, -0x80d0adb, "-135072475", "%d"},
+ {__LINE__, 0x0002bf61, "2bf61", "%x"},
+ {__LINE__, 0xffff008b, "FFFF008B", "%-7X"},
+ {__LINE__, 0x00000e72, "E72", "%X"},
+ {__LINE__, -0x00000ea, "-234", "%0ld"},
+ {__LINE__, -0x0007b9d, "-0031645", "%0.7ld"},
+ {__LINE__, 0x0001baaa, "0X1BAAA", "%#4X"},
+ {__LINE__, 0x0000a57f, " a57f", "%6.x"},
+ {__LINE__, -0x21a73726, "-564606758", "%ld"},
+ {__LINE__, 0x06f45c9f, "0x6f45c9f", "%#.3x"},
+ {__LINE__, 0x00018e5d, "101981", "%-d"},
+ {__LINE__, 0x0001e69a, "124570", "%-d"},
+ {__LINE__, -0x0000d26, " -3366", "% 07.d"},
+ {__LINE__, 0x00000000, "+", "%+0.ld"},
+ {__LINE__, 0x00003916, "14614", "%ld"},
+ {__LINE__, 0xfffffd8f, "fffffd8f", "%-3.x"},
+ {__LINE__, 0x00000011, "11", "%x"},
+ {__LINE__, 0x000000e7, "E7", "%X"},
+ {__LINE__, 0xfdf9d89b, "FDF9D89B", "%X"},
+ {__LINE__, 0x00000a7c, "a7c", "%x"},
+ {__LINE__, 0x0000003f, "00003F", "%.6X"},
+ {__LINE__, 0xffffe729, "FFFFE729", "%X"},
+ {__LINE__, 0xfffffffe, "fffffffe", "% .6x"},
+ {__LINE__, -0x0000a4b, "-2635", "%+d"},
+ {__LINE__, 0xffffff50, "ffffff50", "%0.7x"},
+ {__LINE__, 0xfaf57e8b, "faf57e8b", "% 4.x"},
+ {__LINE__, -0x0000056, "-86", "%ld"},
+ {__LINE__, 0x08ed2a4d, "8ed2a4d", "%4x"},
+ {__LINE__, 0xff8d9081, "FF8D9081", "%+0.X"},
+ {__LINE__, 0x002730a1, "2568353", "%4d"},
+ {__LINE__, 0xffff9564, "ffff9564", "%x"},
+ {__LINE__, -0x0000006, " -6", "%4ld"},
+ {__LINE__, -0x19890310, "-428409616", "%0ld"},
+ {__LINE__, 0xd2ce636c, "d2ce636c", "%+x"},
+ {__LINE__, -0x00001fe, "-510", "%d"},
+ {__LINE__, 0x00000006, "0000006", "%+0.7x"},
+ {__LINE__, 0xffffffc2, "0XFFFFFFC2", "%-#.5X"},
+ {__LINE__, -0x00000fd, "-253", "%+d"},
+ {__LINE__, 0x000216aa, "0x216aa", "%#x"},
+ {__LINE__, 0xffe36c66, "ffe36c66", "%x"},
+ {__LINE__, 0x00000002, "2", "%x"},
+ {__LINE__, -0x0000025, "-37", "% d"},
+ {__LINE__, 0x0000007e, "126", "%d"},
+ {__LINE__, 0x0003c1f9, "+246265", "%+ld"},
+ {__LINE__, 0x00000001, "1", "%ld"},
+ {__LINE__, -0x0000001, "-1", "%ld"},
+ {__LINE__, -0x00539e7, "-342503", "%06.ld"},
+ {__LINE__, 0x00000d42, " 3394", "%#6.ld"},
+ {__LINE__, 0xf73b7c4e, "F73B7C4E", "%X"},
+ {__LINE__, 0x00000022, "22", "%.1x"},
+ {__LINE__, 0xffffa883, "FFFFA883", "%X"},
+ {__LINE__, 0x016ec247, "16ec247", "%x"},
+ {__LINE__, 0x00000019, "19", "%+X"},
+ {__LINE__, 0x0000665a, "665A", "% 2.X"},
+ {__LINE__, 0xfffffffc, "FFFFFFFC", "%-5.X"},
+ {__LINE__, 0x008e3fbc, "8E3FBC", "%X"},
+ {__LINE__, 0xfffffffa, "FFFFFFFA", "%X"},
+ {__LINE__, 0x1b806597, "461399447", "%.2d"},
+ {__LINE__, 0x00000366, "0000870", "%#1.7ld"},
+ {__LINE__, 0x0001d92e, "1d92e", "%x"},
+ {__LINE__, 0x000104ce, "104CE", "%-X"},
+ {__LINE__, 0xfffffe4c, "fffffe4c", "%x"},
+ {__LINE__, 0x000000e9, "E9", "%X"},
+ {__LINE__, 0x000a855c, " 689500", "% d"},
+ {__LINE__, 0x00000075, "75", "% X"},
+ {__LINE__, -0x0000026, "-38", "%ld"},
+ {__LINE__, 0xfffff169, "fffff169", "%-04.2x"},
+ {__LINE__, 0xffffff6f, "ffffff6f", "%x"},
+ {__LINE__, 0x00000003, "0x3", "%#x"},
+ {__LINE__, 0x00623bab, "6437803", "%.0d"},
+ {__LINE__, -0x2260224c, "-576725580", "%ld"},
+ {__LINE__, 0xe7e7a998, "E7E7A998", "%.1X"},
+ {__LINE__, 0x00000005, "5", "%X"},
+ {__LINE__, 0x0000b560, "0xb560", "%#x"},
+ {__LINE__, 0xfe11854d, "fe11854d", "%-.5x"},
+ {__LINE__, 0x00190014, "1638420", "%ld"},
+ {__LINE__, 0x0001d22a, "0X1D22A", "%-#X"},
+ {__LINE__, 0x00000c16, "c16", "%2x"},
+ {__LINE__, 0x00000d1a, "3354", "%#d"},
+ {__LINE__, 0x000165f6, "91638", "%d"},
+ {__LINE__, 0xfffff557, "0XFFFFF557", "%#X"},
+ {__LINE__, 0x00000588, " 588", "%07.X"},
+ {__LINE__, 0xf4a72708, "f4a72708", "%x"},
+ {__LINE__, 0xfff1cba9, "0xfff1cba9", "% #2.5x"},
+ {__LINE__, 0x000333a4, "209828", "%d"},
+ {__LINE__, 0x0000179b, "179B", "% 2.X"},
+ {__LINE__, 0x00000460, "1120", "%0ld"},
+ {__LINE__, 0xffffff89, "FFFFFF89", "%X"},
+ {__LINE__, -0x0000012, "-18", "%ld"},
+ {__LINE__, 0x00004fe0, "20448", "%0.d"},
+ {__LINE__, 0x00532e77, "532e77", "%00.x"},
+ {__LINE__, 0xf7b92efe, "f7b92efe", "%0x"},
+ {__LINE__, -0x0000243, "-579", "%+1.d"},
+ {__LINE__, 0x34894bb7, "+881413047", "%+d"},
+ {__LINE__, 0xfffaa189, "FFFAA189", "% 6X"},
+ {__LINE__, -0x0000579, "-1401", "%+ld"},
+ {__LINE__, 0x005acb12, "5acb12", "%5.0x"},
+ {__LINE__, 0xffff890a, "FFFF890A", "%X"},
+ {__LINE__, 0x010dff2f, "10DFF2F", "%.7X"},
+ {__LINE__, 0x00005a7f, "23167", "%#ld"},
+ {__LINE__, 0x000005e3, "1507", "%#3d"},
+ {__LINE__, -0xa815bcb, "-176249803", "%d"},
+ {__LINE__, 0xffffffff, "ffffffff", "%+x"},
+ {__LINE__, 0xfffe0ff7, "fffe0ff7", "%3x"},
+ {__LINE__, 0xffffffff, "0XFFFFFFFF", "%#2.1X"},
+ {__LINE__, -0x1cc5ea52, "-482732626", "%6.d"},
+ {__LINE__, 0x000425ed, "+0271853", "%+.7d"},
+ {__LINE__, 0x00000001, "1", "%+x"},
+ {__LINE__, -0x48f2a72, "-76491378", "%7.0d"},
+ {__LINE__, 0xfffffff7, "FFFFFFF7", "% 0X"},
+ {__LINE__, 0xfd8ffc0a, "fd8ffc0a", "%.1x"},
+ {__LINE__, 0x0001f56d, " 1F56D", "%+7.2X"},
+ {__LINE__, 0x000000db, " DB", "%6.X"},
+ {__LINE__, 0xffffffc2, "ffffffc2", "%x"},
+ {__LINE__, 0x00000001, "001", "%03ld"},
+ {__LINE__, 0xffd89f58, "ffd89f58", "% 0.x"},
+ {__LINE__, 0xfe1a72fc, "fe1a72fc", "%x"},
+ {__LINE__, 0xfffff9b6, "FFFFF9B6", "%X"},
+ {__LINE__, 0x00243633, "243633", "%X"},
+ {__LINE__, 0x00821bc7, "+8526791", "%+#0ld"},
+ {__LINE__, 0xfe63f348, "0XFE63F348", "%#3X"},
+ {__LINE__, 0xff729f19, "ff729f19", "%4x"},
+ {__LINE__, 0xffff570f, "FFFF570F", "%+X"},
+ {__LINE__, 0x00a57a42, "10844738", "%6.3d"},
+ {__LINE__, 0xfe4a3ed0, "FE4A3ED0", "%6.X"},
+ {__LINE__, 0x00000000, "0", "%d"},
+ {__LINE__, 0x000001bb, "01bb", "% .4x"},
+ {__LINE__, 0x02b4a1e9, "2b4a1e9", "%-7.x"},
+ {__LINE__, 0x31750683, "31750683", "%x"},
+ {__LINE__, 0x00001cd7, "7383", "%#ld"},
+ {__LINE__, 0x0000079d, "1949", "%d"},
+ {__LINE__, 0xffb8ff3b, "FFB8FF3B", "%X"},
+ {__LINE__, 0x00a768b6, "0A768B6", "%-6.7X"},
+ {__LINE__, 0x1c665b48, "0X1C665B48", "% #X"},
+ {__LINE__, -0x000037d, "-000893", "%3.6d"},
+ {__LINE__, 0x29890443, "29890443", "%+0x"},
+ {__LINE__, 0x000000e5, "e5 ", "%-4x"},
+ {__LINE__, 0xfff2b5fa, "FFF2B5FA", "%X"},
+ {__LINE__, -0x5d32c2b, "-97725483", "%05ld"},
+ {__LINE__, -0x00016c5, " -05829", "%+#7.5ld"},
+ {__LINE__, 0x00000644, "644", "%X"},
+ {__LINE__, -0x018c027, "-1622055", "%+.1d"},
+ {__LINE__, 0x0000013c, "0x13c", "%#x"},
+ {__LINE__, 0x00000009, "+9", "%+#ld"},
+ {__LINE__, 0x00000000, "0", "%ld"},
+ {__LINE__, -0x018eb19, "-1633049", "%4.3ld"},
+ {__LINE__, 0xfffff429, "FFFFF429", "% X"},
+ {__LINE__, 0x0032de67, "32DE67", "%X"},
+ {__LINE__, 0x0016bdfa, " 1490426", "% .2ld"},
+ {__LINE__, 0x00000065, "65", "%+.0X"},
+ {__LINE__, 0x00000072, " 72", "%+4.2X"},
+ {__LINE__, 0x00075119, "75119", "%2x"},
+ {__LINE__, 0x000000b8, "b8", "%x"},
+ {__LINE__, 0x000000d0, "d0", "%x"},
+ {__LINE__, 0x000000b9, "b9", "%x"},
+ {__LINE__, 0x003fda9d, " 4184733", "% #3.d"},
+ {__LINE__, 0x00029a24, "170532", "%4.d"},
+ {__LINE__, -0x132a337d, "-321532797", "% ld"},
+ {__LINE__, 0x0000047a, "0X47A", "%-#X"},
+ {__LINE__, 0x00000000, "0", "%-ld"},
+ {__LINE__, -0x0d9750b, "-14251275", "% ld"},
+ {__LINE__, 0x00029d6c, "29d6c", "%x"},
+ {__LINE__, 0xfb060cc0, "fb060cc0", "%x"},
+ {__LINE__, 0xffffd524, "0XFFFFD524", "%#X"},
+ {__LINE__, 0xffffff30, "ffffff30", "%-5x"},
+ {__LINE__, 0x00001650, "0005712", "%#0.7d"},
+ {__LINE__, 0x0000b702, "0B702", "%03.5X"},
+ {__LINE__, 0x000003c1, "3c1", "% .1x"},
+ {__LINE__, -0x0290412, "-2688018", "%d"},
+ {__LINE__, -0x00008bf, "-2239", "%#d"},
+ {__LINE__, -0x0000001, "-1", "%d"},
+ {__LINE__, 0x0001d750, "1D750", "%-X"},
+ {__LINE__, 0x006eee92, "6EEE92", "%-X"},
+ {__LINE__, 0xff812b02, "ff812b02", "%0x"},
+ {__LINE__, 0xfffffeac, "FFFFFEAC", "%+0X"},
+ {__LINE__, 0x000003a5, "3a5", "%x"},
+ {__LINE__, -0x15270cee, "-354880750", "%2.ld"},
+ {__LINE__, 0x06b686d2, "6b686d2", "%0x"},
+ {__LINE__, 0xffe9cdcc, "ffe9cdcc", "%x"},
+ {__LINE__, 0x0ecb168e, "ecb168e", "%x"},
+ {__LINE__, 0x00000051, "51", "%-X"},
+ {__LINE__, -0x0018860, "-100448", "%-0d"},
+ {__LINE__, 0x8f08b82b, "0x8f08b82b", "%-#.5x"},
+ {__LINE__, 0xffffffff, "ffffffff", "%x"},
+ {__LINE__, 0x0000000e, "e", "%+01x"},
+ {__LINE__, 0x04cf15bc, " 80680380", "% #ld"},
+ {__LINE__, 0x50006e8a, "50006e8a", "%x"},
+ {__LINE__, 0x0002f669, "194153", "%0d"},
+ {__LINE__, 0x000000a6, " 166", "% 5.ld"},
+ {__LINE__, -0x04036bb, "-4208315", "%7.5d"},
+ {__LINE__, 0x00070dea, "70DEA", "%+X"},
+ {__LINE__, 0x00000964, "0x964", "%#x"},
+ {__LINE__, 0x0000004d, "0x4d", "% #3.x"},
+ {__LINE__, -0x0000001, "-1", "%-0d"},
+ {__LINE__, 0x0000043e, "1086", "%ld"},
+ {__LINE__, -0x0000001, "-1", "%-d"},
+ {__LINE__, 0x00000000, "+0", "%+d"},
+ {__LINE__, 0xfffe68d9, "FFFE68D9", "%7.X"},
+ {__LINE__, -0x0169199, "-1479065", "%#.5ld"},
+ {__LINE__, -0x000003d, "-61", "%ld"},
+ {__LINE__, 0x00000001, "+1", "%+.1d"},
+ {__LINE__, 0x0001a65d, "1a65d", "%.5x"},
+ {__LINE__, 0x00000141, "+000321", "%+#5.6ld"},
+ {__LINE__, 0x00000000, " 0", "%4x"},
+ {__LINE__, 0x00000408, "1032", "%-2.3ld"},
+ {__LINE__, 0xffffffed, "FFFFFFED", "%-X"},
+ {__LINE__, 0xfe832351, "FE832351", "% .4X"},
+ {__LINE__, 0x003a421b, "3A421B", "%-X"},
+ {__LINE__, -0x53ed7f25, "-1408073509", "%ld"},
+ {__LINE__, -0x0000003, "-0003", "%-5.4ld"},
+ {__LINE__, 0x00000ad0, " 2768", "%7d"},
+ {__LINE__, 0xfffaf30b, "FFFAF30B", "%X"},
+ {__LINE__, 0x006349d3, " 6506963", "% 6.2ld"},
+ {__LINE__, 0x07f0146a, "7f0146a", "%+3.4x"},
+ {__LINE__, -0x0000002, " -2", "% 3.ld"},
+ {__LINE__, -0x26e94f3, "-40801523", "%-#ld"},
+ {__LINE__, -0x0000004, " -004", "%7.3d"},
+ {__LINE__, 0xfffe8cc9, "FFFE8CC9", "%0X"},
+ {__LINE__, 0x00000018, " 18", "%5.x"},
+ {__LINE__, -0x4941de83, "-1229053571", "% 0.5ld"},
+ {__LINE__, 0x00000000, " 0", "%6ld"},
+ {__LINE__, 0xfffffffe, "0XFFFFFFFE", "%-#X"},
+ {__LINE__, -0x0142ae1, "-1321697", "%4.ld"},
+ {__LINE__, -0x0319e7f, "-3251839", "%0ld"},
+ {__LINE__, 0x000004ff, " 4FF", "%7.2X"},
+ {__LINE__, -0x0001c3e, "-7230", "%#.2ld"},
+ {__LINE__, 0xffffe522, "ffffe522", "%x"},
+ {__LINE__, 0x0001d1cb, "+119243", "%+.3ld"},
+ {__LINE__, 0xfad19d52, "FAD19D52", "%+X"},
+ {__LINE__, 0x00002a7c, " 10876", "% 0.ld"},
+ {__LINE__, 0x00001449, "1449", "%X"},
+ {__LINE__, 0x000732b8, "471736", "%d"},
+ {__LINE__, -0x211a496e, "-555370862", "%ld"},
+ {__LINE__, -0x0000004, "-4", "%1.d"},
+ {__LINE__, 0x0295c03d, "43368509", "%5.ld"},
+ {__LINE__, 0x01fa5722, "33183522", "%0ld"},
+ {__LINE__, 0xfffbff62, "0xfffbff62", "%#x"},
+ {__LINE__, 0x000000f5, " 245", "% 2.d"},
+ {__LINE__, 0x000000a0, "160", "%-d"},
+ {__LINE__, 0x0000000f, "15", "%.2ld"},
+ {__LINE__, 0x0bf5f077, "+200667255", "%+ld"},
+ {__LINE__, -0x14d3e5a, "-21839450", "%#2.3d"},
+ {__LINE__, -0x21cbe656, "-567010902", "%ld"},
+ {__LINE__, 0x000002b9, "697", "%ld"},
+ {__LINE__, 0xfffff9b0, "FFFFF9B0", "%X"},
+ {__LINE__, 0x007fd9c7, "8378823", "%3.4d"},
+ {__LINE__, 0x00036d06, "36d06", "%x"},
+ {__LINE__, 0xffde8052, "FFDE8052", "%4.6X"},
+ {__LINE__, 0x0000000d, "13", "%#d"},
+ {__LINE__, 0x68157d93, "68157d93", "%x"},
+ {__LINE__, 0x00000005, "5", "%1x"},
+ {__LINE__, 0xfffffff4, "FFFFFFF4", "%X"},
+ {__LINE__, 0xf5bbf7e9, "f5bbf7e9", "%+.1x"},
+ {__LINE__, 0x0be98f98, "BE98F98", "%X"},
+ {__LINE__, 0x00000122, "00122", "%.5X"},
+ {__LINE__, -0x0000936, "-2358", "%+#3.0ld"},
+ {__LINE__, 0xfd230f09, "FD230F09", "%-7X"},
+ {__LINE__, 0x00000089, "137", "%ld"},
+ {__LINE__, 0x00000078, " 120", "%7d"},
+ {__LINE__, -0x68ef2b6b, "-1760504683", "%-ld"},
+ {__LINE__, 0xc24480bb, "C24480BB", "%+4X"},
+ {__LINE__, 0xfefe36a2, "FEFE36A2", "%0X"},
+ {__LINE__, -0x35344ba, "-55788730", "%7.d"},
+ {__LINE__, 0xffffffff, "FFFFFFFF", "%+.6X"},
+ {__LINE__, -0x0000f40, "-3904", "% ld"},
+ {__LINE__, 0xfffffffb, "FFFFFFFB", "%X"},
+ {__LINE__, 0x58b37c4b, "58b37c4b", "%2.2x"},
+ {__LINE__, 0x000000e2, "226", "%#ld"},
+ {__LINE__, 0xfff5ebde, "fff5ebde", "%-7.1x"},
+ {__LINE__, 0x0c6ea9be, "208579006", "%-ld"},
+ {__LINE__, 0xff708c74, "FF708C74", "% 4.X"},
+ {__LINE__, 0x00000000, " 0", "% 3X"},
+ {__LINE__, 0x00000004, " 4", "%03.d"},
+ {__LINE__, 0x0919be7c, "+152682108", "%+6.d"},
+ {__LINE__, 0x00d4fd1e, "13958430", "%0d"},
+ {__LINE__, 0xfe77a69e, "fe77a69e", "%-7.x"},
+ {__LINE__, 0x284ded44, "676195652", "%-#2ld"},
+ {__LINE__, -0x00006e6, "-1766", "% ld"},
+ {__LINE__, -0x7dac7ea, "-131778538", "%.0ld"},
+ {__LINE__, 0x0003c50f, "247055", "%#d"},
+ {__LINE__, 0xfffffffc, "fffffffc", "%-x"},
+ {__LINE__, 0xfe0f0d1f, "fe0f0d1f", "% 5.1x"},
+ {__LINE__, 0x00000009, "9", "%0ld"},
+ {__LINE__, -0x0175cc1, "-1531073", "%-04.d"},
+ {__LINE__, 0x000e4da2, " 937378", "% 4.ld"},
+ {__LINE__, 0x00000762, "762", "%-0.X"},
+ {__LINE__, 0x005211bf, "5211bf", "%-x"},
+ {__LINE__, 0xfffffffb, "fffffffb", "%+2.6x"},
+ {__LINE__, 0x00008862, "34914", "%ld"},
+ {__LINE__, 0xfffc9754, "fffc9754", "%+x"},
+ {__LINE__, 0x0000716e, "716E", "%X"},
+ {__LINE__, 0x000000a8, "a8", "%x"},
+ {__LINE__, 0xffff84f5, "ffff84f5", "%0x"},
+ {__LINE__, 0x00005032, "5032", "%x"},
+ {__LINE__, 0xffe242b4, "ffe242b4", "%6x"},
+ {__LINE__, 0x002df9bd, "3013053", "%ld"},
+ {__LINE__, 0xffffe267, "FFFFE267", "%.5X"},
+ {__LINE__, 0xffffffc7, "0xffffffc7", "%#x"},
+ {__LINE__, -0x1727c38, "-24280120", "%d"},
+ {__LINE__, 0x01308072, "1308072", "%x"},
+ {__LINE__, -0x5883c7c, "-92814460", "%+ld"},
+ {__LINE__, 0x000030ad, "30ad", "%x"},
+ {__LINE__, 0xffffffff, "FFFFFFFF", "%X"},
+ {__LINE__, -0x2090a708, "-546350856", "% d"},
+ {__LINE__, 0x0024e6b4, "2418356", "%#ld"},
+ {__LINE__, 0x02db71ac, "2DB71AC", "% 6.3X"},
+ {__LINE__, 0xfffffffc, "FFFFFFFC", "%2.7X"},
+ {__LINE__, -0x000074e, " -1870", "%7.ld"},
+ {__LINE__, -0x0011d84, "-73092", "%d"},
+ {__LINE__, 0x00160723, "160723", "%1.3x"},
+ {__LINE__, 0x00412929, "4270377", "%-d"},
+ {__LINE__, -0x0008fc6, "-36806", "% d"},
+ {__LINE__, 0x00000002, "2", "%d"},
+ {__LINE__, 0x0eb67ffa, "eb67ffa", "%.4x"},
+ {__LINE__, 0x05b86c3c, "95972412", "%4.4d"},
+ {__LINE__, 0xffffca9c, "FFFFCA9C", "% 4.X"},
+ {__LINE__, 0x0007d571, "7d571", "%-0x"},
+ {__LINE__, -0x000239b, "-09115", "%5.5d"},
+ {__LINE__, -0x0000155, " -341", "%5.3ld"},
+ {__LINE__, 0x00000034, "34", "%x"},
+ {__LINE__, -0x0000051, "-81", "%.1ld"},
+ {__LINE__, 0x309bbbe0, "309bbbe0", "%x"},
+ {__LINE__, 0x0075be1e, " 7716382", "% #ld"},
+ {__LINE__, 0x000002d5, "2d5", "%x"},
+ {__LINE__, 0x006b466d, "6B466D", "%-0X"},
+ {__LINE__, 0x01d6c30f, "1D6C30F", "%4.X"},
+ {__LINE__, 0x00000003, " 3", "%07.x"},
+ {__LINE__, 0xfffcc102, "FFFCC102", "%6.X"},
+ {__LINE__, 0xffffffff, "0XFFFFFFFF", "%#X"},
+ {__LINE__, 0xfffffffe, "fffffffe", "%+x"},
+ {__LINE__, 0x00000005, "5", "%ld"},
+ {__LINE__, 0xff060284, "ff060284", "%x"},
+ {__LINE__, 0x007a3325, "7A3325", "%-X"},
+ {__LINE__, 0xf5f595bd, "F5F595BD", "%0X"},
+ {__LINE__, 0xfffa3a10, "FFFA3A10", "%0X"},
+ {__LINE__, 0x00000000, "0", "%x"},
+ {__LINE__, -0x15078f9, "-22051065", "%7d"},
+ {__LINE__, -0x0000002, "-000002", "%.6d"},
+ {__LINE__, 0x00000036, "54", "%1.1ld"},
+ {__LINE__, -0xbbecf6a, "-197054314", "%ld"},
+ {__LINE__, 0x0000043d, "43D", "%X"},
+ {__LINE__, 0xfffffffa, "0xfffffffa", "% #6.x"},
+ {__LINE__, 0x016759f8, "23550456", "%0.ld"},
+ {__LINE__, 0x000052d2, "+21202", "%+6.2d"},
+ {__LINE__, -0x007d232, "-512562", "%ld"},
+ {__LINE__, 0x00240be0, "2362336", "%.1d"},
+ {__LINE__, -0x0000001, "-1", "%0d"},
+ {__LINE__, 0xfffffffa, "FFFFFFFA", "%X"},
+ {__LINE__, -0x0000e88, "-3720", "%ld"},
+ {__LINE__, 0xfffffa9b, "FFFFFA9B", "%.5X"},
+ {__LINE__, 0x09296eeb, "153710315", "%-1.0d"},
+ {__LINE__, 0x001f46fc, "0X1F46FC", "%#X"},
+ {__LINE__, 0x00000006, "6", "%X"},
+ {__LINE__, 0xffffff87, "0XFFFFFF87", "%+#X"},
+ {__LINE__, 0x00000469, "0469", "%04X"},
+ {__LINE__, -0x0000001, "-1", "%ld"},
+ {__LINE__, 0x00000000, "", "%.0ld"},
+ {__LINE__, -0x52bc137, "-86753591", "%-#3ld"},
+ {__LINE__, -0x2bddb08, "-45996808", "%-3.d"},
+ {__LINE__, 0x041367f7, "41367F7", "%+X"},
+ {__LINE__, -0x0018eb5, "-102069", "%+ld"},
+ {__LINE__, -0x0000537, "-1335", "%#ld"},
+ {__LINE__, -0x6f159ff4, "-1863688180", "%+1.d"},
+ {__LINE__, 0x00112ac8, "0X112AC8", "%#6.3X"},
+ {__LINE__, 0x00000000, " ", "%3.d"},
+ {__LINE__, 0x0008afe8, "08afe8", "%+3.6x"},
+ {__LINE__, 0x00000015, "21", "%ld"},
+ {__LINE__, -0x02b7130, "-2847024", "% #2.4d"},
+ {__LINE__, 0xffffffd0, "FFFFFFD0", "%X"},
+ {__LINE__, -0x6970fa1, "-110563233", "%+#.4ld"},
+ {__LINE__, 0x06387dcc, "0X6387DCC", "%-#X"},
+ {__LINE__, 0xffffd506, "ffffd506", "%+6x"},
+ {__LINE__, -0x00fe5cd, "-1041869", "%-#7d"},
+ {__LINE__, -0x0c35bf6, "-12803062", "%-03d"},
+ {__LINE__, -0x0020d89, "-134537", "%#d"},
+ {__LINE__, -0x0c7aed3, "-13086419", "%-ld"},
+ {__LINE__, -0x000362a, "-13866", "%#.4ld"},
+ {__LINE__, -0x02d05f0, "-2950640", "%#ld"},
+ {__LINE__, 0x02de1321, "0x2de1321", "%#7.x"},
+ {__LINE__, 0xffb56428, "0xffb56428", "%#x"},
+ {__LINE__, 0xfffffffe, "FFFFFFFE", "%X"},
+ {__LINE__, 0xf072292d, "F072292D", "%.5X"},
+ {__LINE__, -0x0f4b0f2, "-16036082", "%.5ld"},
+ {__LINE__, 0x01b81885, "28842117", "%5d"},
+ {__LINE__, -0x009cfa6, "-642982", "%d"},
+ {__LINE__, 0xfffffffd, "0XFFFFFFFD", "%-#.5X"},
+ {__LINE__, 0x0dc97a66, "DC97A66", "%2.X"},
+ {__LINE__, 0x000000be, "190", "%.0d"},
+ {__LINE__, 0xffffe1c7, "FFFFE1C7", "% X"},
+ {__LINE__, 0x01883b9a, "1883b9a", "%3x"},
+ {__LINE__, 0xffffdde1, "ffffdde1", "%+x"},
+ {__LINE__, 0x2f1b4e32, "+790318642", "%+ld"},
+ {__LINE__, 0x000129aa, "129aa", "%x"},
+ {__LINE__, -0x00092c2, "-37570", "%d"},
+ {__LINE__, 0x00070fbd, "70fbd", "%x"},
+ {__LINE__, -0x00000ea, "-234", "%+4ld"},
+ {__LINE__, 0xfffffffe, "fffffffe", "%x"},
+ {__LINE__, 0x0091c7f7, "91C7F7", "% .3X"},
+ {__LINE__, -0x0c14fe2, "-12668898", "%d"},
+ {__LINE__, -0x0017c15, "-97301", "%d"},
+ {__LINE__, -0x00005d0, "-0001488", "%5.7d"},
+ {__LINE__, 0x0114c36e, "18137966", "%0d"},
+ {__LINE__, 0xffffffff, "ffffffff", "%+x"},
+ {__LINE__, 0x0ac76e78, "180842104", "%d"},
+ {__LINE__, 0x001976cd, " 1668813", "% 4.ld"},
+ {__LINE__, -0x0642319, "-6562585", "% d"},
+ {__LINE__, 0xffffffff, "FFFFFFFF", "%X"},
+ {__LINE__, -0x035019d, "-3473821", "%.7d"},
+ {__LINE__, -0x0000061, "-97", "%#3.d"},
+ {__LINE__, 0x0000001f, " 31", "% 6.1ld"},
+ {__LINE__, -0x0000024, "-36", "%d"},
+ {__LINE__, 0x000b3785, "735109", "%ld"},
+ {__LINE__, 0xfffffda9, "fffffda9", "%-x"},
+ {__LINE__, 0x00254832, "2443314", "%-ld"},
+ {__LINE__, 0xfffffd40, "FFFFFD40", "%0X"},
+ {__LINE__, -0x0006105, "-24837", "%+#d"},
+ {__LINE__, 0x00000006, "+6", "%+d"},
+ {__LINE__, 0xffd40fd8, "ffd40fd8", "%3.x"},
+ {__LINE__, -0x000988e, "-39054", "%03d"},
+ {__LINE__, 0x0005ad8b, "5AD8B", "%0.0X"},
+ {__LINE__, 0x00000001, "1", "%d"},
+ {__LINE__, 0xfe1f59b7, "fe1f59b7", "%4.x"},
+ {__LINE__, -0x0000022, "-34", "%#d"},
+ {__LINE__, 0x0018e3e9, "18E3E9", "% X"},
+ {__LINE__, 0xffffff25, "FFFFFF25", "%2.X"},
+ {__LINE__, -0x00002c6, "-710", "%1.ld"},
+ {__LINE__, 0x00009765, "38757", "%5ld"},
+ {__LINE__, 0xfe197646, "FE197646", "%-X"},
+ {__LINE__, 0x00000001, " 1", "%+5.x"},
+ {__LINE__, -0x0000002, "-2", "%#ld"},
+ {__LINE__, 0x0072f6be, "72F6BE", "%1X"},
+ {__LINE__, -0x000f06d, "-61549", "%-d"},
+ {__LINE__, 0x00000001, " 1", "%5X"},
+ {__LINE__, 0x328cba28, " 848083496", "% 2.ld"},
+ {__LINE__, 0x0000cddc, "cddc", "%.1x"},
+ {__LINE__, 0xfffffff9, "fffffff9", "%7x"},
+ {__LINE__, 0x00baf511, "BAF511", "%-5.6X"},
+ {__LINE__, 0x00000001, " 1", "%4.ld"},
+ {__LINE__, 0x0001e4b0, "+124080", "%+ld"},
+ {__LINE__, -0x07548f3, "-7686387", "% 6.d"},
+ {__LINE__, -0x01b14ea, "-1774826", "% #0d"},
+ {__LINE__, -0x000005c, "-92 ", "%-04ld"},
+ {__LINE__, -0x00000ae, "-174", "%+.3ld"},
+ {__LINE__, 0x0000008c, "0X8C", "%+#X"},
+ {__LINE__, 0x14c02360, "14C02360", "%.6X"},
+ {__LINE__, 0xfffffff6, "FFFFFFF6", "%X"},
+ {__LINE__, 0x009f4ee5, "9f4ee5", "%x"},
+ {__LINE__, 0x00000035, "35", "%X"},
+ {__LINE__, -0x00000eb, "-235", "%ld"},
+ {__LINE__, 0x1552ced8, "1552CED8", "%04X"},
+ {__LINE__, 0x0000002a, " 2A", "%5X"},
+ {__LINE__, 0xffffffff, "ffffffff", "% x"},
+ {__LINE__, -0xdec0db2, "-233573810", "%d"},
+ {__LINE__, 0x001e2ef0, "1978096", "%2.d"},
+ {__LINE__, 0xffffef24, "ffffef24", "%.5x"},
+ {__LINE__, 0xfffe6a6c, "fffe6a6c", "%+x"},
+ {__LINE__, -0x0000004, "-4", "% ld"},
+ {__LINE__, 0xfe3c6743, "fe3c6743", "%.1x"},
+ {__LINE__, 0x0000033d, "829", "%0ld"},
+ {__LINE__, -0x00006a0, " -1696", "% 7.ld"},
+ {__LINE__, 0xffffffdb, "ffffffdb", "%0.0x"},
+ {__LINE__, 0xfffffffc, "FFFFFFFC", "%3.3X"},
+ {__LINE__, -0x0000004, "-4", "%#ld"},
+ {__LINE__, 0x00b32b56, "B32B56", "%X"},
+ {__LINE__, 0xffffffff, "0xffffffff", "%+#x"},
+ {__LINE__, 0x01cd1a48, "1cd1a48", "%+7x"},
+ {__LINE__, 0xffffffda, "ffffffda", "%x"},
+ {__LINE__, 0x1886509e, "1886509E", "% X"},
+ {__LINE__, 0x000000eb, "235", "%0d"},
+ {__LINE__, 0xfffffff4, "fffffff4", "%0x"},
+ {__LINE__, 0x00000547, "547", "% X"},
+ {__LINE__, 0x000017e6, "17e6", "%-2.x"},
+ {__LINE__, 0x00001dc4, "7620", "%d"},
+ {__LINE__, 0xffffffff, "FFFFFFFF", "%3.0X"},
+ {__LINE__, 0xffff93fa, "0XFFFF93FA", "%#X"},
+ {__LINE__, 0xfffffe1c, "FFFFFE1C", "%-X"},
+ {__LINE__, 0x00000000, "", "% .0x"},
+ {__LINE__, 0x000000a1, "A1", "%X"},
+ {__LINE__, 0xffffffff, "0xffffffff", "%#x"},
+ {__LINE__, -0x0001460, "-05216", "%+#.5d"},
+ {__LINE__, 0x00000001, "1 ", "%-6.x"},
+ {__LINE__, 0xfffd5324, "FFFD5324", "%+2.6X"},
+ {__LINE__, 0x00000007, " 07", "%06.2d"},
+ {__LINE__, 0x00000003, "3", "%-X"},
+ {__LINE__, 0xfffffdb7, "0XFFFFFDB7", "%+#X"},
+ {__LINE__, 0xfffff4cc, "fffff4cc", "%0x"},
+ {__LINE__, 0x00000000, "0 ", "%-5X"},
+ {__LINE__, 0x00758c96, "758C96", "%X"},
+ {__LINE__, -0x0000001, "-1", "%-ld"},
+ {__LINE__, 0x00000001, "1", "%ld"},
+ {__LINE__, 0x03f03caf, "66075823", "%.2ld"},
+ {__LINE__, 0x0000a87c, "a87c", "%1.x"},
+ {__LINE__, 0x00000034, "34", "%X"},
+ {__LINE__, 0x00000000, "0", "%x"},
+ {__LINE__, 0x00010167, "10167", "%x"},
+ {__LINE__, -0x00007ce, "-1998 ", "%-6ld"},
+ {__LINE__, 0x00000001, "1", "%.0d"},
+ {__LINE__, 0x00d94cee, "14241006", "%ld"},
+ {__LINE__, -0x0000008, "-8", "% d"},
+ {__LINE__, -0x71520839, "-1901201465", "%+0d"},
+ {__LINE__, 0x0000035a, "35a", "%-x"},
+ {__LINE__, 0xfffd2f68, "FFFD2F68", "%-X"},
+ {__LINE__, 0x0006ea53, "453203", "%1d"},
+ {__LINE__, 0x000000df, "DF", "% 1X"},
+ {__LINE__, 0xfffffffe, "fffffffe", "% 7x"},
+ {__LINE__, 0x00000156, "156", "% X"},
+ {__LINE__, 0x00037ac9, " 228041", "% ld"},
+ {__LINE__, 0xffffffde, "FFFFFFDE", "%0.5X"},
+ {__LINE__, 0x00000025, "37", "%-0.ld"},
+ {__LINE__, -0x4133686, "-68368006", "%2ld"},
+ {__LINE__, -0x000003b, "-59", "%.2ld"},
+ {__LINE__, 0xfffff910, "fffff910", "% 00.0x"},
+ {__LINE__, 0xff9ec802, "FF9EC802", "%2.6X"},
+ {__LINE__, 0x00000008, "0X8", "%#1X"},
+ {__LINE__, 0xfffffff7, "FFFFFFF7", "%-X"},
+ {__LINE__, 0x0029a4da, "2729178", "%04.ld"},
+ {__LINE__, 0x007d1588, "8197512", "%#d"},
+ {__LINE__, 0x0007e86d, "518253", "%0d"},
+ {__LINE__, 0xfffffff9, "fffffff9", "%x"},
+ {__LINE__, 0x00000002, "002", "%.3d"},
+ {__LINE__, 0x00006ec1, "6EC1", "%2X"},
+ {__LINE__, 0x0000300c, "12300", "%-d"},
+ {__LINE__, -0x0000002, "-2", "%+ld"},
+ {__LINE__, -0x0000002, "-2", "%ld"},
+ {__LINE__, -0x00015d5, "-005589", "%#.6ld"},
+ {__LINE__, 0x00000041, "65", "%d"},
+ {__LINE__, 0x00000229, "0000229", "% 0.7x"},
+ {__LINE__, 0xfffffffb, "fffffffb", "%03.x"},
+ {__LINE__, 0x00093262, "0602722", "%.7d"},
+ {__LINE__, -0x00037b4, "-14260", "%-0ld"},
+ {__LINE__, 0xfffffffc, "fffffffc", "%-x"},
+ {__LINE__, 0xf24cb3e6, "f24cb3e6", "%1x"},
+ {__LINE__, 0x00000000, "0", "%x"},
+ {__LINE__, 0xfffffffb, "FFFFFFFB", "%0X"},
+ {__LINE__, 0x00000031, "0000049", "%00.7ld"},
+ {__LINE__, 0x00000bb3, "BB3", "%.1X"},
+ {__LINE__, -0x0000001, "-0001", "%+#4.4ld"},
+ {__LINE__, -0x0000001, "-1", "% d"},
+ {__LINE__, 0x00022c0c, "22c0c", "%-x"},
+ {__LINE__, 0xffffffd4, "ffffffd4", "%x"},
+ {__LINE__, 0x000729c6, "469446", "%3.d"},
+ {__LINE__, 0xb180feae, "b180feae", "%3.x"},
+ {__LINE__, 0x124fac15, "307211285", "%-0ld"},
+ {__LINE__, -0x0000004, "-4", "%ld"},
+ {__LINE__, 0x0000006a, "106", "%#d"},
+ {__LINE__, 0x0000297f, "297F", "%+3X"},
+ {__LINE__, 0x0000000e, "14", "%0ld"},
+ {__LINE__, 0x00000027, "27", "%0.1X"},
+ {__LINE__, 0xffeb98eb, "ffeb98eb", "% 05.2x"},
+ {__LINE__, 0xfffff19b, "FFFFF19B", "%+X"},
+ {__LINE__, 0x00025992, "154002", "%6.6d"},
+ {__LINE__, 0x00000040, " 040", "%6.3X"},
+ {__LINE__, 0x00000a9e, " 0a9e", "%5.4x"},
+ {__LINE__, 0x00c7f2cc, "c7f2cc", "%x"},
+ {__LINE__, 0x000325e6, " 325E6", "%6.X"},
+ {__LINE__, -0x69faad3, "-111127251", "%d"},
+ {__LINE__, -0x059a307, "-5874439", "% ld"},
+ {__LINE__, 0xfffffff6, "0xfffffff6", "%#0.0x"},
+ {__LINE__, 0x0030fdf3, "30fdf3", "%x"},
+ {__LINE__, 0x00007343, "+29507", "%+#2d"},
+ {__LINE__, 0x0003cf4b, "0X3CF4B", "% #.2X"},
+ {__LINE__, 0x00000433, "+1075", "%+0ld"},
+ {__LINE__, 0xfffffffd, "fffffffd", "%+.3x"},
+ {__LINE__, 0x0ae30c4e, "ae30c4e", "%+00x"},
+ {__LINE__, 0x0002540f, "02540f", "%-.6x"},
+ {__LINE__, -0x0000001, " -01", "% #5.2ld"},
+ {__LINE__, 0xffffffe7, "0xffffffe7", "% #5.x"},
+ {__LINE__, 0x0000005b, "91", "%d"},
+ {__LINE__, 0x00001f9b, "8091", "%.4ld"},
+ {__LINE__, 0xfffff315, "fffff315", "%4.x"},
+ {__LINE__, -0x130eec41, "-319745089", "% ld"},
+ {__LINE__, 0xfff8fe13, "FFF8FE13", "%X"},
+ {__LINE__, -0x0000004, "-00004", "%5.5d"},
+ {__LINE__, 0x00000669, "669", "%0X"},
+ {__LINE__, -0x0000004, "-4", "%d"},
+ {__LINE__, 0xf5e81496, "F5E81496", "% 6X"},
+ {__LINE__, -0x0000001, "-1", "% 0d"},
+ {__LINE__, 0xfffffff7, "fffffff7", "%x"},
+ {__LINE__, 0x000001de, "478", "%d"},
+ {__LINE__, 0x0000623e, "25150", "%5.0d"},
+ {__LINE__, 0xffffffa8, "FFFFFFA8", "%+X"},
+ {__LINE__, -0x0000117, "-279", "% ld"},
+ {__LINE__, -0x0000517, "-1303", "%d"},
+ {__LINE__, 0xfffff9d5, "fffff9d5", "% x"},
+ {__LINE__, 0x000001cc, "1CC", "%-X"},
+ {__LINE__, 0x0000019a, "0000410", "%.7d"},
+ {__LINE__, 0x00000003, "3 ", "%-06X"},
+ {__LINE__, 0x00000009, "0x9", "%#0x"},
+ {__LINE__, 0xfd544610, "0XFD544610", "% #X"},
+ {__LINE__, 0xfffffffc, "fffffffc", "%+x"},
+ {__LINE__, 0x00009437, "37943", "%ld"},
+ {__LINE__, -0x00b5ea6, "-745126", "%d"},
+ {__LINE__, 0xffffffd8, "ffffffd8", "%6x"},
+ {__LINE__, 0x00002a2d, "10797", "%.3ld"},
+ {__LINE__, 0x00275238, "2576952", "%0ld"},
+ {__LINE__, 0xfff90a34, "FFF90A34", "%-7X"},
+ {__LINE__, 0xfffffffe, "FFFFFFFE", "% .7X"},
+ {__LINE__, -0xb3b673e, "-188442430", "% ld"},
+ {__LINE__, 0xfffff67a, "0xfffff67a", "%#0.x"},
+ {__LINE__, 0x0000dff6, " dff6", "%+7.x"},
+ {__LINE__, 0xffee46e3, "ffee46e3", "%x"},
+ {__LINE__, 0x00001a66, " 0006758", "% 7.7d"},
+ {__LINE__, 0x0002b475, "2B475", "%.4X"},
+ {__LINE__, 0x0002090d, "002090d", "%.7x"},
+ {__LINE__, -0x0057838, "-358456", "%#ld"},
+ {__LINE__, 0x00000004, "0x4", "%#x"},
+ {__LINE__, 0x0574cb62, "91540322", "%#7d"},
+ {__LINE__, -0x0054388, "-344968", "% #d"},
+ {__LINE__, 0x000421c2, "421C2", "% X"},
+ {__LINE__, 0x00000003, "3", "%0d"},
+ {__LINE__, 0xffffe2e2, "ffffe2e2", "% 5.x"},
+ {__LINE__, 0x00000021, "+33", "%+d"},
+ {__LINE__, -0x0020033, "-131123", "%ld"},
+ {__LINE__, -0x0000001, " -1", "%4.ld"},
+ {__LINE__, 0x000000fd, "000fd", "%3.5x"},
+ {__LINE__, 0x023e4337, "37634871", "%1d"},
+ {__LINE__, 0x6e823d96, "6E823D96", "% X"},
+ {__LINE__, 0xfff0e133, "fff0e133", "%x"},
+ {__LINE__, -0x000decc, "-57036", "%3d"},
+ {__LINE__, 0x004397b8, "4429752", "%0d"},
+ {__LINE__, -0x0000023, " -35", "%6d"},
+ {__LINE__, 0xffe701ca, "FFE701CA", "%3X"},
+ {__LINE__, 0x000c0319, "+787225", "%+.6d"},
+ {__LINE__, 0x00000000, "0", "%x"},
+ {__LINE__, 0xfffffe1d, "FFFFFE1D", "%X"},
+ {__LINE__, 0xfffffb33, "fffffb33", "%x"},
+ {__LINE__, 0x02b5e30a, "45474570", "%d"},
+ {__LINE__, 0x000074eb, "29931", "%03.ld"},
+ {__LINE__, -0x4e42e310, "-1313006352", "%-0.d"},
+ {__LINE__, -0x000007b, "-123", "%d"},
+ {__LINE__, 0x00000160, " 352", "% d"},
+ {__LINE__, -0x16af31ec, "-380580332", "%#ld"},
+ {__LINE__, -0x000006e, "-000110", "%07ld"},
+ {__LINE__, 0x232699a0, "232699a0", "%7.x"},
+ {__LINE__, 0x00f9b8e5, "+16365797", "%+0d"},
+ {__LINE__, 0x0000000c, "C", "%X"},
+ {__LINE__, 0xfffffd4f, "FFFFFD4F", "%X"},
+ {__LINE__, 0xffffe7bb, "FFFFE7BB", "%.7X"},
+ {__LINE__, -0x0000163, "-355", "%d"},
+ {__LINE__, 0x00070315, " 459541", "% #2.d"},
+ {__LINE__, -0x7d5c12a, "-131449130", "% 6.ld"},
+ {__LINE__, 0xffffffb2, "FFFFFFB2", "%X"},
+ {__LINE__, -0x0004aad, "-19117", "%+6.4ld"},
+ {__LINE__, 0x00115586, "1136006", "%0d"},
+ {__LINE__, -0x0000021, "-33", "%d"},
+ {__LINE__, 0x093ce01e, "93ce01e", "% 5x"},
+ {__LINE__, 0x00672135, "672135", "% x"},
+ {__LINE__, 0x05f4abd5, "0x5f4abd5", "%+#6.x"},
+ {__LINE__, -0x0448b03, "-4492035", "%-0.2ld"},
+ {__LINE__, 0x00000000, "0", "%#x"},
+ {__LINE__, 0x1987217e, "428286334", "%d"},
+ {__LINE__, 0x000010f6, "10f6", "%-x"},
+ {__LINE__, 0x0000177a, "177a", "%1x"},
+ {__LINE__, 0xfffffefd, "FFFFFEFD", "%7X"},
+ {__LINE__, -0x095cbf8, "-9817080", "%-5ld"},
+ {__LINE__, 0x0000008a, "138", "%2.0ld"},
+ {__LINE__, 0xfffe80ad, "fffe80ad", "%0x"},
+ {__LINE__, -0x1a4c8f7, "-27576567", "%d"},
+ {__LINE__, 0x00000000, "0", "%-x"},
+ {__LINE__, 0x0000a82b, "43051", "%-ld"},
+ {__LINE__, 0x000000eb, "235", "%2.3ld"},
+ {__LINE__, -0x0002747, "-10055", "%d"},
+ {__LINE__, 0x00000319, "0X319", "%#X"},
+ {__LINE__, 0xfffffcfe, "FFFFFCFE", "% X"},
+ {__LINE__, 0x00050f0e, "50f0e", "%-1x"},
+ {__LINE__, -0x398e09e, "-60350622", "%0.7ld"},
+ {__LINE__, 0x00000000, " ", "%2.ld"},
+ {__LINE__, 0x00000049, "00049", "% .5X"},
+ {__LINE__, -0x00000dd, " -221", "%+#5ld"},
+ {__LINE__, 0xf6db2fac, "f6db2fac", "%-07x"},
+ {__LINE__, 0x0000004f, "4F", "% .0X"},
+ {__LINE__, 0x00000000, "0", "%x"},
+ {__LINE__, 0xfd07f692, "fd07f692", "%x"},
+ {__LINE__, 0xdb98bde0, "db98bde0", "%x"},
+ {__LINE__, 0x00000271, "0271", "% 3.4x"},
+ {__LINE__, -0x000115a, "-4442", "%#1.ld"},
+ {__LINE__, 0x0002f5f2, "194034", "%ld"},
+ {__LINE__, -0x0000152, " -338", "%+7ld"},
+ {__LINE__, 0x00059336, "365366", "%d"},
+ {__LINE__, 0xfffffff6, "fffffff6", "%-7x"},
+ {__LINE__, 0xfb916c51, "fb916c51", "%-x"},
+ {__LINE__, 0xffff413d, "FFFF413D", "%-X"},
+ {__LINE__, 0xf2576910, "F2576910", "%-4.X"},
+ {__LINE__, 0xfffc7730, "fffc7730", "%5.x"},
+ {__LINE__, 0x000002e6, "+742", "%+1d"},
+ {__LINE__, -0x00001bf, "-447", "%3d"},
+ {__LINE__, 0x000002e1, "2E1", "%-X"},
+ {__LINE__, 0x00000096, "150", "%#0ld"},
+ {__LINE__, 0x000002bd, "701", "%d"},
+ {__LINE__, -0x0053386, "-340870", "%#d"},
+ {__LINE__, 0xfffdb076, "FFFDB076", "%X"},
+ {__LINE__, 0x00004dc5, " +19909", "%+07.ld"},
+ {__LINE__, 0x00000f7a, " F7A", "%4X"},
+ {__LINE__, 0x02405000, " 37769216", "% ld"},
+ {__LINE__, 0xfffce68d, "fffce68d", "%0x"},
+ {__LINE__, -0x35b3af2, "-56310514", "%-ld"},
+ {__LINE__, -0x0238631, "-2328113", "%.4d"},
+ {__LINE__, -0x000001e, "-030", "%.3ld"},
+ {__LINE__, 0xffffffdd, "FFFFFFDD", "%.4X"},
+ {__LINE__, 0x0013f6ac, "13f6ac", "%02.x"},
+ {__LINE__, 0xfffffffa, "fffffffa", "%+07.x"},
+ {__LINE__, -0x000192b, " -6443", "%6.d"},
+ {__LINE__, 0x0000058b, "+1419", "%+d"},
+ {__LINE__, 0x00001391, "5009", "%ld"},
+ {__LINE__, -0x0041a57, "-268887", "%1ld"},
+ {__LINE__, -0x0041a57, "-268887", "%1ld"},
+ {__LINE__, 0xfffff266, "0xfffff266", "%+#6.6x"},
+ {__LINE__, 0x0000018b, " 395", "%6.ld"},
+ {__LINE__, 0x009ae24d, "+10150477", "%+ld"},
+ {__LINE__, 0x0000007e, "7E", "%X"},
+ {__LINE__, 0xfffffd53, "FFFFFD53", "% 0X"},
+ {__LINE__, 0x000002fa, "2FA", "%-1.3X"},
+ {__LINE__, 0x000000a4, "164", "%0d"},
+ {__LINE__, 0x00001833, "6195", "%ld"},
+ {__LINE__, -0x0000001, "-1", "%d"},
+ {__LINE__, 0xf2fcbd9b, "F2FCBD9B", "%+0.2X"},
+ {__LINE__, 0x00004a8a, "4A8A", "%X"},
+ {__LINE__, -0x10695cda, "-275340506", "%d"},
+ {__LINE__, 0x00000037, "37", "%X"},
+ {__LINE__, 0x00082d5c, "82D5C", "%+0.5X"},
+ {__LINE__, 0xfffffe01, "fffffe01", "% 5.3x"},
+ {__LINE__, 0x000005ea, "05EA", "% 1.4X"},
+ {__LINE__, 0x0e0b8826, "e0b8826", "%2x"},
+ {__LINE__, -0x0000161, "-353", "%+d"},
+ {__LINE__, 0x19e3014a, "19E3014A", "%+5X"},
+ {__LINE__, 0x00000140, "140", "%x"},
+ {__LINE__, 0xffff84b9, "FFFF84B9", "%X"},
+ {__LINE__, -0x0005776, "-22390", "%+5ld"},
+ {__LINE__, 0x0162ad61, "162AD61", "% X"},
+ {__LINE__, 0x00002395, "2395", "%X"},
+ {__LINE__, 0x003702ec, "3605228", "%5.2d"},
+ {__LINE__, 0xffffffff, "FFFFFFFF", "%7X"},
+ {__LINE__, 0x00001778, "0x1778", "%#5.x"},
+ {__LINE__, 0xc52bef7f, "C52BEF7F", "%X"},
+ {__LINE__, 0xfffffec4, "FFFFFEC4", "%X"},
+ {__LINE__, 0x00000006, "6", "%X"},
+ {__LINE__, 0x00000000, "000", "%03.3x"},
+ {__LINE__, 0x00000000, "0", "%x"},
+ {__LINE__, 0xffff6c46, "FFFF6C46", "% 2.2X"},
+ {__LINE__, -0x1506098, "-22044824", "%01.d"},
+ {__LINE__, 0x03415caf, "3415caf", "%x"},
+ {__LINE__, -0x00007b4, "-1972", "%#4.4d"},
+ {__LINE__, -0x00158c9, "-88265", "%03.4d"},
+ {__LINE__, 0x6947c336, "1766310710", "%.6d"},
+ {__LINE__, 0x0000017c, "17C", "% 0X"},
+ {__LINE__, -0x00001b7, "-439", "% 0ld"},
+ {__LINE__, 0x06a7575a, "6A7575A", "%-.0X"},
+ {__LINE__, 0x000b3459, "734297", "%ld"},
+ {__LINE__, -0x395d8dd, "-60152029", "%ld"},
+ {__LINE__, 0x00036bb3, "224179", "%-6.d"},
+ {__LINE__, 0xffff14ff, "FFFF14FF", "%X"},
+ {__LINE__, -0x15910e4f, "-361827919", "%-0d"},
+ {__LINE__, -0x0000004, "-4", "%#d"},
+ {__LINE__, 0xf7f7adac, "F7F7ADAC", "% 3.X"},
+ {__LINE__, 0xffffff74, "FFFFFF74", "%0X"},
+ {__LINE__, 0x00000000, "0", "%d"},
+ {__LINE__, -0x000007b, "-123 ", "%-7.d"},
+ {__LINE__, -0x000002c, "-44", "%d"},
+ {__LINE__, -0x000002b, " -43", "%5d"},
+ {__LINE__, 0x0000ae5f, "44639", "%d"},
+ {__LINE__, 0x003cbc63, "3CBC63", "%X"},
+ {__LINE__, 0xfffffffc, "0XFFFFFFFC", "%#5.7X"},
+ {__LINE__, 0x0003e044, "3E044", "%X"},
+ {__LINE__, -0x0000c46, "-3142", "%.1d"},
+ {__LINE__, 0xff18f4bb, "FF18F4BB", "%0X"},
+ {__LINE__, 0xfffffffd, "FFFFFFFD", "%.1X"},
+ {__LINE__, -0x01c0f27, "-1838887", "%0d"},
+ {__LINE__, -0x1242901f, "-306352159", "%.4ld"},
+ {__LINE__, 0x1775c10a, "393593098", "%6.ld"},
+ {__LINE__, 0x00000001, " 1", "%03.d"},
+ {__LINE__, 0xfff1fd30, "0xfff1fd30", "%#x"},
+ {__LINE__, 0x00000191, "191", "%0.X"},
+ {__LINE__, 0x2e597178, "777613688", "%2.ld"},
+ {__LINE__, -0x4ef0cf3, "-82775283", "%+.6ld"},
+ {__LINE__, -0x0000085, " -133", "%6.d"},
+ {__LINE__, 0x0000014d, "333 ", "%-5ld"},
+ {__LINE__, -0xc03bd74, "-201571700", "%07.6ld"},
+ {__LINE__, -0x000000a, "-10", "%d"},
+ {__LINE__, 0x01f5e86e, "32893038", "%#2.ld"},
+ {__LINE__, 0x00000033, "0X33", "% #X"},
+ {__LINE__, 0x0087c797, " 8898455", "% 7.d"},
+ {__LINE__, -0x0001205, "-4613", "%5d"},
+ {__LINE__, 0x00000192, " 192", "%7.X"},
+ {__LINE__, 0x000e6c00, "945152", "%6.1ld"},
+ {__LINE__, 0x00018629, " 99881", "% d"},
+ {__LINE__, -0x04739c6, "-4667846", "%-01.3ld"},
+ {__LINE__, 0x00001f42, "8002", "%d"},
+ {__LINE__, 0x00000caf, "3247", "%d"},
+ {__LINE__, -0x4992e24, "-77147684", "%#.6d"},
+ {__LINE__, 0x0000001d, "1d", "%-0x"},
+ {__LINE__, 0x14d79f03, "349675267", "%0ld"},
+ {__LINE__, 0x00000dd4, " 03540", "%#6.5ld"},
+ {__LINE__, 0x0005f30e, "0X5F30E", "%#X"},
+ {__LINE__, 0x00000157, "157", "%X"},
+ {__LINE__, -0x9281698, "-153622168", "%d"},
+ {__LINE__, -0x000004a, "-74", "%d"},
+ {__LINE__, -0x0010c9e, "-68766", "%-0d"},
+ {__LINE__, 0x00000059, "00089", "%.5ld"},
+ {__LINE__, -0x06959e3, "-6904291", "% 4.d"},
+ {__LINE__, 0xfbea12b1, "0XFBEA12B1", "%+#X"},
+ {__LINE__, 0xffffdfb1, "FFFFDFB1", "%2.6X"},
+ {__LINE__, 0x0434faac, "434faac", "%.5x"},
+ {__LINE__, 0xffffffff, "ffffffff", "% x"},
+ {__LINE__, 0x00000b32, "B32", "%0X"},
+ {__LINE__, 0x00000047, "71", "%.1d"},
+ {__LINE__, 0x00070bef, " 0461807", "% .7d"},
+ {__LINE__, 0x00000038, "38", "% 0x"},
+ {__LINE__, 0x00000000, " 0", "%6X"},
+ {__LINE__, 0xfff9c011, "FFF9C011", "%2X"},
+ {__LINE__, 0xfffffffe, "fffffffe", "%7x"},
+ {__LINE__, 0xfffffff9, "FFFFFFF9", "%X"},
+ {__LINE__, -0x016a095, "-1482901", "%4.0ld"},
+ {__LINE__, -0x000001c, "-28", "% ld"},
+ {__LINE__, 0xfffd6133, "0xfffd6133", "%#x"},
+ {__LINE__, 0x000004a4, "0x4a4", "%#x"},
+ {__LINE__, 0x000003c2, "0962", "%.4d"},
+ {__LINE__, -0x000323b, "-12859", "%+#d"},
+ {__LINE__, 0x0f620237, "F620237", "%X"},
+ {__LINE__, 0x00007863, "007863", "%.6X"},
+ {__LINE__, 0x0000002c, " 44", "% #ld"},
+ {__LINE__, 0xfffffff0, "fffffff0", "%03.6x"},
+ {__LINE__, 0xffff6346, "FFFF6346", "%1.X"},
+ {__LINE__, 0x00063188, "63188", "% x"},
+ {__LINE__, 0xfffff91c, "fffff91c", "%-.3x"},
+ {__LINE__, 0x004cd0b4, "4CD0B4", "%-2.X"},
+ {__LINE__, 0x06b4d739, "112514873", "%0.1d"},
+ {__LINE__, -0x0009beb, "-39915", "%.2d"},
+ {__LINE__, 0x0000831b, "33563", "%d"},
+ {__LINE__, 0x00000001, "1", "%X"},
+ {__LINE__, -0x942d76b, "-155375467", "% #0ld"},
+ {__LINE__, 0xffff2a95, "FFFF2A95", "%2X"},
+ {__LINE__, 0x00548d5e, "5541214", "%.3ld"},
+ {__LINE__, 0x0b5e1a01, "B5E1A01", "% .7X"},
+ {__LINE__, 0xfffffc22, "fffffc22", "%6x"},
+ {__LINE__, -0x0000dd7, "-3543", "%-.3ld"},
+ {__LINE__, 0xfffff834, "FFFFF834", "%X"},
+ {__LINE__, 0x0365f762, "57014114", "%ld"},
+ {__LINE__, -0x0000003, "-3", "%d"},
+ {__LINE__, 0x3bd998a3, "1004116131", "%d"},
+ {__LINE__, 0xfffff6c9, "FFFFF6C9", "%+X"},
+ {__LINE__, 0xffffded9, "FFFFDED9", "%-.1X"},
+ {__LINE__, -0x00fbb5a, "-1031002", "% 1.0d"},
+ {__LINE__, 0xffffffb7, "ffffffb7", "%6.x"},
+ {__LINE__, 0xff1b8ac3, "FF1B8AC3", "%-X"},
+ {__LINE__, 0xfffffff2, "FFFFFFF2", "%00.X"},
+ {__LINE__, -0x000013d, " -317", "%05.d"},
+ {__LINE__, 0x0000f5e2, "+62946", "%+0.2ld"},
+ {__LINE__, 0x16ac6358, "16ac6358", "%x"},
+ {__LINE__, 0xffff8728, "FFFF8728", "%+X"},
+ {__LINE__, -0x0014a6d, "-084589", "%0.6ld"},
+ {__LINE__, 0xfc904514, "FC904514", "%+0X"},
+ {__LINE__, 0x00000004, "4", "%ld"},
+ {__LINE__, 0xffffffe0, "ffffffe0", "%+x"},
+ {__LINE__, -0x0a0ffdd, "-10551261", "%+02d"},
+ {__LINE__, -0x0000bbc, "-3004", "%+d"},
+ {__LINE__, 0x00000006, " +6", "%+7ld"},
+ {__LINE__, 0x17afa6e5, "397387493", "%ld"},
+ {__LINE__, 0xfffff6bf, "fffff6bf", "%+04.4x"},
+ {__LINE__, 0x000001dc, "01dc", "% 02.4x"},
+ {__LINE__, 0x0000000e, " 14", "% d"},
+ {__LINE__, 0xfffffff9, "0XFFFFFFF9", "%#4.X"},
+ {__LINE__, 0x0000005d, "93", "%0d"},
+ {__LINE__, -0x004fa05, "-0326149", "%.7d"},
+ {__LINE__, -0x0000018, "-24", "%ld"},
+ {__LINE__, 0xfffff7eb, "FFFFF7EB", "%X"},
+ {__LINE__, 0x0072b044, " 7516228", "% .7ld"},
+ {__LINE__, 0xffffffed, "0xffffffed", "%#x"},
+ {__LINE__, 0x0010364d, "10364D", "%X"},
+ {__LINE__, 0xfff90469, "0XFFF90469", "%#X"},
+ {__LINE__, 0x000001b4, " 436", "% 0d"},
+ {__LINE__, 0x00000000, "0", "% X"},
+ {__LINE__, 0xfffffff3, "fffffff3", "%x"},
+ {__LINE__, 0x19335d40, "19335d40", "%6x"},
+ {__LINE__, 0x00039c24, "236580", "%ld"},
+ {__LINE__, 0x000021f7, "8695", "%0.4ld"},
+ {__LINE__, -0x057b406, "-5747718", "%d"},
+ {__LINE__, -0x017b371, "-1553265", "%#ld"},
+ {__LINE__, 0x0003e405, "254981", "%2.d"},
+ {__LINE__, 0x00000001, "1", "%-.1x"},
+ {__LINE__, 0x000000ae, "AE", "%.1X"},
+ {__LINE__, 0xffd85825, "ffd85825", "%-7.x"},
+ {__LINE__, 0xfffad763, "fffad763", "%x"},
+ {__LINE__, 0x002431d4, "2372052", "%6.ld"},
+ {__LINE__, 0x00000003, "000003", "%-05.6d"},
+ {__LINE__, 0xffffffeb, "0xffffffeb", "%#x"},
+ {__LINE__, 0xff8cf3b0, "ff8cf3b0", "%x"},
+ {__LINE__, 0xfe88d2ff, "0xfe88d2ff", "%+#.2x"},
+ {__LINE__, 0xffffff6b, "ffffff6b", "%6.3x"},
+ {__LINE__, 0xfffffffe, "fffffffe", "%-x"},
+ {__LINE__, 0xe998945a, "e998945a", "%2.x"},
+ {__LINE__, 0x03b9c50f, "3B9C50F", "%+X"},
+ {__LINE__, 0xffffffff, "FFFFFFFF", "%3.7X"},
+ {__LINE__, 0x000024ef, "24ef", "%+x"},
+ {__LINE__, 0xfffffc04, "FFFFFC04", "%X"},
+ {__LINE__, 0x0d4bef7c, " 223080316", "% .1ld"},
+ {__LINE__, -0xc33f3bc, "-204731324", "%.5ld"},
+ {__LINE__, 0xffffffff, "0XFFFFFFFF", "%#2X"},
+ {__LINE__, 0x0000e493, "e493", "%x"},
+ {__LINE__, 0x000001b4, "1b4", "%x"},
+ {__LINE__, 0xffffffd6, "0xffffffd6", "% #1x"},
+ {__LINE__, 0x00000001, "1", "%d"},
+ {__LINE__, -0x0000f28, "-3880", "%ld"},
+ {__LINE__, 0x00000277, "631", "%-1ld"},
+ {__LINE__, 0x00000001, " 1", "%2x"},
+ {__LINE__, -0x0ff4d2c, "-16731436", "%#ld"},
+ {__LINE__, 0x0bb80344, "196608836", "%00ld"},
+ {__LINE__, 0xffffffdc, "FFFFFFDC", "%X"},
+ {__LINE__, 0x00000484, "1156", "%ld"},
+ {__LINE__, 0x00000341, "341", "%-.2x"},
+ {__LINE__, 0x0000ee62, "ee62", "%x"},
+ {__LINE__, 0xfffffe20, "fffffe20", "%+x"},
+ {__LINE__, -0x00076eb, "-30443", "%.2d"},
+ {__LINE__, 0x2c4a7407, "2c4a7407", "% x"},
+ {__LINE__, 0x00000000, " ", "%3.X"},
+ {__LINE__, 0xffffff60, "ffffff60", "% 4.x"},
+ {__LINE__, 0x000e4cf2, "+937202", "%+.5ld"},
+ {__LINE__, 0x00000008, " 00008", "%06.5X"},
+ {__LINE__, 0x0002f612, "194066", "%d"},
+ {__LINE__, 0xfffffc96, "fffffc96", "%-3.3x"},
+ {__LINE__, -0x0000001, "-1", "% ld"},
+ {__LINE__, 0x00000000, " ", "% 6.0X"},
+ {__LINE__, 0xfffffff5, "fffffff5", "%3.x"},
+ {__LINE__, 0x0bfd63a1, "201155489", "%d"},
+ {__LINE__, -0x1547c214, "-357024276", "%ld"},
+ {__LINE__, 0x00000004, "4", "%#0.d"},
+ {__LINE__, -0x000f2f3, "-62195", "%.2d"},
+ {__LINE__, 0xfff843dd, "FFF843DD", "%X"},
+ {__LINE__, 0x00966e36, "9858614", "%.0ld"},
+ {__LINE__, 0x0000782e, "0X782E", "% #X"},
+ {__LINE__, 0x00bd36c0, "12400320", "%ld"},
+ {__LINE__, 0x00000000, "00", "% .2X"},
+ {__LINE__, 0x00000000, "0", "%1X"},
+ {__LINE__, 0x0003f416, "3f416 ", "%-6.x"},
+ {__LINE__, -0x00b74bd, "-750781", "% ld"},
+ {__LINE__, 0x0000138a, "138a", "% x"},
+ {__LINE__, 0x024df7f0, "24DF7F0", "% 0.6X"},
+ {__LINE__, 0xfffffffc, "FFFFFFFC", "%X"},
+ {__LINE__, -0x0003284, "-12932 ", "%-07.ld"},
+ {__LINE__, 0x000094d3, "94d3", "%x"},
+ {__LINE__, 0x000000bf, "bf", "%.2x"},
+ {__LINE__, 0x00000000, "00000", "%-1.5X"},
+ {__LINE__, -0x04899b8, "-4757944", "%d"},
+ {__LINE__, 0x2b51bf20, "+726777632", "%+d"},
+ {__LINE__, -0x000000d, "-13", "%.2d"},
+ {__LINE__, 0x04f78fbd, "4F78FBD", "% 7.X"},
+ {__LINE__, 0x00011684, "71300", "%5.d"},
+ {__LINE__, 0x0000539d, "21405", "%0d"},
+ {__LINE__, 0x00000008, "000008", "%-3.6X"},
+ {__LINE__, 0xfc7a2cdc, "fc7a2cdc", "%2.3x"},
+ {__LINE__, 0xffc21da1, "ffc21da1", "%x"},
+ {__LINE__, 0x00000273, "273", "%x"},
+ {__LINE__, 0x00000000, "0", "%#X"},
+ {__LINE__, -0x31cd6b9, "-52221625", "% d"},
+ {__LINE__, 0xfffffff8, "FFFFFFF8", "%.0X"},
+ {__LINE__, 0x00000002, "2", "%#ld"},
+ {__LINE__, 0x00e8922c, "15241772", "%d"},
+ {__LINE__, 0xfeb19ea7, "FEB19EA7", "%0.1X"},
+ {__LINE__, 0x00003931, "014641", "%06ld"},
+ {__LINE__, 0x00000015, "0X00015", "%#.5X"},
+ {__LINE__, 0xfffffffe, "FFFFFFFE", "%1.X"},
+ {__LINE__, 0xfff17103, "0XFFF17103", "% #X"},
+ {__LINE__, 0xfffffffc, "FFFFFFFC", "%+X"},
+ {__LINE__, 0x00000002, "00002", "%.5x"},
+ {__LINE__, 0x00001617, " 5655", "% 7.d"},
+ {__LINE__, -0x0000010, "-000016", "%00.6d"},
+ {__LINE__, 0x000000b0, "B0", "% X"},
+ {__LINE__, 0xfc9362b2, "FC9362B2", "%-X"},
+ {__LINE__, 0xfc3d8276, "fc3d8276", "% 1x"},
+ {__LINE__, 0x00001405, "5125", "%#d"},
+ {__LINE__, 0x02250183, " 35979651", "% ld"},
+ {__LINE__, 0xffc9b007, "ffc9b007", "% 4.x"},
+ {__LINE__, 0x00000311, "785", "%0d"},
+ {__LINE__, 0x0004d273, " 316019", "% d"},
+ {__LINE__, 0x00000001, "1", "%1.x"},
+ {__LINE__, 0xffff240f, "FFFF240F", "%4.X"},
+ {__LINE__, 0x0049cfda, "+4837338", "%+ld"},
+ {__LINE__, 0x012f6dd5, "12F6DD5", "% 6.2X"},
+ {__LINE__, 0x00000002, "0x2", "%#2.0x"},
+ {__LINE__, 0xfffd834a, "FFFD834A", "%.6X"},
+ {__LINE__, 0xfe2a40f8, "0XFE2A40F8", "%#X"},
+ {__LINE__, 0xffffffeb, "ffffffeb", "%x"},
+ {__LINE__, -0x00ac5cb, "-705995", "%d"},
+ {__LINE__, -0x3021108c, "-807473292", "% .4d"},
+ {__LINE__, -0x0000035, "-53", "%-ld"},
+ {__LINE__, -0x1a36475, "-27485301", "% d"},
+ {__LINE__, -0x0000011, "-17", "%d"},
+ {__LINE__, 0x000001a3, "000419", "%.6ld"},
+ {__LINE__, 0x0030a0a8, "3186856", "%.5ld"},
+ {__LINE__, 0x00000019, "25", "%d"},
+ {__LINE__, 0xf32deac1, "F32DEAC1", "%06.2X"},
+ {__LINE__, -0x0000004, " -00004", "%7.5ld"},
+ {__LINE__, 0x00000000, "0", "%ld"},
+ {__LINE__, 0x0006bf19, "442137", "%#0.d"},
+ {__LINE__, 0x566f6c44, "1450142788", "%1.6d"},
+ {__LINE__, 0xfffffc10, "fffffc10", "%.2x"},
+ {__LINE__, -0x000e04d, "-57421", "%+0d"},
+ {__LINE__, 0x00000000, "0000000", "%+.7X"},
+ {__LINE__, 0x00b5c74d, " 11913037", "% ld"},
+ {__LINE__, -0x028dfe2, "-2678754", "%05.1d"},
+ {__LINE__, 0xfffffee0, "fffffee0", "%0x"},
+ {__LINE__, -0x030c077, "-3194999", "%-.6d"},
+ {__LINE__, 0x00055ca1, "055ca1", "%-.6x"},
+ {__LINE__, 0x00000000, " ", "%7.X"},
+ {__LINE__, 0xfffffe3b, "FFFFFE3B", "%X"},
+ {__LINE__, 0xffffffff, "FFFFFFFF", "% 3X"},
+ {__LINE__, 0x00000857, "2135", "%-#1.d"},
+ {__LINE__, -0x00546a2, "-345762", "%0.5d"},
+ {__LINE__, 0x0000000b, "0xb ", "%-#6x"},
+ {__LINE__, 0x00000d2b, "d2b ", "%-4.0x"},
+ {__LINE__, 0x0ae02b9e, "AE02B9E", "%X"},
+ {__LINE__, 0xfffffa7b, "fffffa7b", "%-2.x"},
+ {__LINE__, 0x00000001, "1", "%X"},
+ {__LINE__, 0x000006ad, "01709", "%05.5ld"},
+ {__LINE__, -0x0000102, "-258", "%-0.ld"},
+ {__LINE__, 0x00000000, "0", "%.1X"},
+ {__LINE__, -0x01daa95, "-1944213", "%-1ld"},
+ {__LINE__, 0x02b99040, "2B99040", "%2.X"},
+ {__LINE__, 0x1b3d5621, "1B3D5621", "%X"},
+ {__LINE__, 0x0312d16b, "51564907", "%-1.7ld"},
+ {__LINE__, 0x000aa76c, " 698220", "% 2d"},
+ {__LINE__, 0x00000000, "0", "%ld"},
+ {__LINE__, 0xfff8a4ec, "FFF8A4EC", "%-X"},
+ {__LINE__, 0xffffe06d, "ffffe06d", "%x"},
+ {__LINE__, 0x00000003, "3", "% x"},
+ {__LINE__, 0x00000000, "0", "%x"},
+ {__LINE__, 0xd3e244dd, "D3E244DD", "%+5X"},
+ {__LINE__, 0x000028b3, " 28b3", "% 5.x"},
+ {__LINE__, 0x0001aceb, "109803", "%6d"},
+ {__LINE__, 0xfffbc5ca, "0xfffbc5ca", "%-#5x"},
+ {__LINE__, 0x00000097, " 151", "% 7ld"},
+ {__LINE__, 0x00001fcc, "+8140", "%+d"},
+ {__LINE__, 0xffffffff, "ffffffff", "%0x"},
+ {__LINE__, -0x00052a9, "-21161", "%ld"},
+ {__LINE__, 0xfffffc76, "FFFFFC76", "%.1X"},
+ {__LINE__, -0x2acb012, "-44871698", "%0.1ld"},
+ {__LINE__, 0xffffff81, "ffffff81", "%x"},
+ {__LINE__, -0x0018394, "-99220", "%-ld"},
+ {__LINE__, 0x0000001b, "1B", "%X"},
+ {__LINE__, 0x00000033, "51", "%1d"},
+ {__LINE__, 0xffec37e5, "FFEC37E5", "%-1X"},
+ {__LINE__, -0x000000a, " -10", "%#5.d"},
+ {__LINE__, -0x0000412, "-1042", "%ld"},
+ {__LINE__, 0x000cd0b1, "cd0b1 ", "%-7.5x"},
+ {__LINE__, 0x0b445370, "B445370", "%+2.0X"},
+ {__LINE__, 0xfffffff3, "0XFFFFFFF3", "%-#X"},
+ {__LINE__, 0xffff9f33, "FFFF9F33", "%5.X"},
+ {__LINE__, 0x00010a1e, "10A1E", "%-2X"},
+ {__LINE__, -0xede156f, "-249435503", "% 7.1ld"},
+ {__LINE__, 0xfc6d63aa, "fc6d63aa", "% .6x"},
+ {__LINE__, 0x0000311c, " 12572", "% ld"},
+ {__LINE__, 0x00001f8a, "8074", "%00.d"},
+ {__LINE__, 0x00000199, "199", "%-X"},
+ {__LINE__, 0xfffffc60, "FFFFFC60", "%+3X"},
+ {__LINE__, -0x000022c, "-556", "%+0ld"},
+ {__LINE__, 0x021d8407, "35488775", "%-#.7ld"},
+ {__LINE__, 0x0000020f, "527", "%d"},
+ {__LINE__, -0x000064b, "-1611", "%#ld"},
+ {__LINE__, -0x0c15aef, "-12671727", "%d"},
+ {__LINE__, -0x1f1a6881, "-521824385", "%ld"},
+ {__LINE__, 0xffffc115, "ffffc115", "% x"},
+ {__LINE__, 0x00000017, " 23", "% #ld"},
+ {__LINE__, 0x00000dc1, "DC1 ", "%-4X"},
+ {__LINE__, 0x000002ca, "2CA", "%X"},
+ {__LINE__, 0x000f052c, " 984364", "%7.d"},
+ {__LINE__, 0x0000005a, "0090", "%0.4d"},
+ {__LINE__, -0x001e463, "-124003", "% 4.ld"},
+ {__LINE__, 0x00000001, "0000001", "%+.7X"},
+ {__LINE__, 0x00000bfb, "0000bfb", "%5.7x"},
+ {__LINE__, 0x0002484b, "149579", "%#1d"},
+ {__LINE__, 0x0043ba18, "4438552", "%-ld"},
+ {__LINE__, 0x000078f8, "0X78F8", "%#X"},
+ {__LINE__, 0x00000001, " 1", "%4d"},
+ {__LINE__, 0x0cedaeed, "CEDAEED", "%X"},
+ {__LINE__, 0x00000003, "+3", "%+ld"},
+ {__LINE__, 0xfffffffb, "FFFFFFFB", "%7.4X"},
+ {__LINE__, 0x00000169, "361", "%ld"},
+ {__LINE__, 0x00003c7a, "+15482", "%+ld"},
+ {__LINE__, -0x0159d93, "-1416595", "% 0.0d"},
+ {__LINE__, 0x0000775c, "+30556", "%+3.d"},
+ {__LINE__, 0x10284768, "+271075176", "%+0.0ld"},
+ {__LINE__, -0xf8b610e, "-260792590", "%0d"},
+ {__LINE__, 0xfdd8d369, "fdd8d369", "%-.3x"},
+ {__LINE__, 0x000c9495, "+824469", "%+ld"},
+ {__LINE__, -0x000003f, " -063", "%7.3d"},
+ {__LINE__, -0x000073b, "-1851", "%+03.ld"},
+ {__LINE__, 0xfffe4e23, "0xfffe4e23", "%#.5x"},
+ {__LINE__, 0x0081788c, "81788c", "%5x"},
+ {__LINE__, -0x015f888, "-1439880", "%+1d"},
+ {__LINE__, -0x31d64b4, "-52257972", "%0.2d"},
+ {__LINE__, 0xffffffff, "FFFFFFFF", "%6.5X"},
+ {__LINE__, -0x0000072, "-114", "%+.1d"},
+ {__LINE__, -0x00000e1, "-225", "%ld"},
+ {__LINE__, 0x000006a8, "0x6a8", "%+#x"},
+ {__LINE__, 0xfffe673a, "fffe673a", "%01.x"},
+ {__LINE__, 0xfff2ee0d, "FFF2EE0D", "%-X"},
+ {__LINE__, 0x0290320a, "43004426", "%0ld"},
+ {__LINE__, -0xeb7a832, "-246917170", "% ld"},
+ {__LINE__, 0x02ae9265, "2ae9265", "%1.x"},
+ {__LINE__, 0xffffffd2, "ffffffd2", "%+2.x"},
+ {__LINE__, 0x00e6e858, "0xe6e858", "%#0.x"},
+ {__LINE__, 0x00000c4a, "+3146", "%+3.1d"},
+ {__LINE__, -0x6943c1a, "-110378010", "% 0ld"},
+ {__LINE__, 0x0167b119, "167b119", "%0x"},
+ {__LINE__, 0xfffffffe, "fffffffe", "%+x"},
+ {__LINE__, 0xfffffffe, "FFFFFFFE", "%X"},
+ {__LINE__, 0x000b861e, "755230", "%ld"},
+ {__LINE__, 0x0000015b, "347", "%-#ld"},
+ {__LINE__, 0xfffffffa, "0XFFFFFFFA", "%#X"},
+ {__LINE__, 0x000de9e5, "911845", "%d"},
+ {__LINE__, 0x00000001, "01", "%.2d"},
+ {__LINE__, 0x000007a5, "1957", "%0d"},
+ {__LINE__, 0x0000000f, "f", "%x"},
+ {__LINE__, 0x00c38cbf, " 12815551", "% .2d"},
+ {__LINE__, -0x7bd1b6e, "-129833838", "% d"},
+ {__LINE__, -0x000013c, "-316", "%0d"},
+ {__LINE__, 0x00001aad, "1AAD", "%-0X"},
+ {__LINE__, 0x0034f903, "3471619", "%00d"},
+ {__LINE__, 0xff925717, "ff925717", "%4x"},
+ {__LINE__, 0x00000002, "02", "%.2d"},
+ {__LINE__, 0x00000f34, "F34", "%+X"},
+ {__LINE__, 0xffffeefe, "FFFFEEFE", "%X"},
+ {__LINE__, 0xfffeecb4, "FFFEECB4", "% 2.X"},
+ {__LINE__, 0x00034421, "214049", "%0ld"},
+ {__LINE__, 0x00000000, " 0", "%+6X"},
+ {__LINE__, -0x0000062, "-98", "%-#2d"},
+ {__LINE__, -0x0000557, "-1367", "%-4.4d"},
+ {__LINE__, 0xffffe17c, "FFFFE17C", "%X"},
+ {__LINE__, 0x00000097, "00097", "%.5X"},
+ {__LINE__, 0xfffcb278, "FFFCB278", "%0.7X"},
+ {__LINE__, -0x0000001, "-0001 ", "%-7.4d"},
+ {__LINE__, -0x0000001, "-1", "%ld"},
+ {__LINE__, 0x000002c4, "708", "%d"},
+ {__LINE__, 0x04946f45, "4946F45", "%-2.X"},
+ {__LINE__, 0x000000ff, "00ff", "% 2.4x"},
+ {__LINE__, 0x00073307, "471815", "%3ld"},
+ {__LINE__, 0x0085b7b6, "+8763318", "%+ld"},
+ {__LINE__, -0x0000002, "-2", "%1ld"},
+ {__LINE__, -0x0000001, "-1", "%-2d"},
+ {__LINE__, -0x00000b5, " -181", "%7ld"},
+ {__LINE__, -0x0412486, "-4269190", "%+2.1ld"},
+ {__LINE__, 0xffffffff, "ffffffff", "%0x"},
+ {__LINE__, 0x0000006d, "6d", "%x"},
+ {__LINE__, 0x000000da, "218", "%-.3ld"},
+ {__LINE__, 0xfffffcfe, "fffffcfe", "%x"},
+ {__LINE__, 0x652e60c7, "652E60C7", "%7.7X"},
+ {__LINE__, 0x00000035, " 53", "% #2d"},
+ {__LINE__, 0x000000fc, "FC", "%-X"},
+ {__LINE__, 0x00000019, " 25", "% ld"},
+ {__LINE__, 0xfffffcf4, "fffffcf4", "%6x"},
+ {__LINE__, 0xffffff41, "ffffff41", "%x"},
+ {__LINE__, 0x00000034, " 52", "%3.ld"},
+ {__LINE__, 0xffffffb2, "ffffffb2", "%-x"},
+ {__LINE__, -0x6dc43e7c, "-1841577596", "% .2ld"},
+ {__LINE__, 0x00000004, "4", "%d"},
+ {__LINE__, -0x000023b, "-571", "%ld"},
+ {__LINE__, -0x000004d, "-77", "%ld"},
+ {__LINE__, 0x0000e3ba, "58298", "%.0ld"},
+ {__LINE__, 0xfffffff2, "fffffff2", "%0.0x"},
+ {__LINE__, -0x0000020, "-32", "%ld"},
+ {__LINE__, 0xffffb33e, "0XFFFFB33E", "%-#X"},
+ {__LINE__, 0x00000000, " ", "% 4.x"},
+ {__LINE__, 0xffd96f92, "FFD96F92", "%X"},
+ {__LINE__, 0x0000002e, " 46", "% 0ld"},
+ {__LINE__, 0xffffffff, "ffffffff", "%x"},
+ {__LINE__, -0x5008ba3, "-83921827", "%+d"},
+ {__LINE__, 0xfdc1df3d, "FDC1DF3D", "%0X"},
+ {__LINE__, 0xfc7410e5, "fc7410e5", "%7x"},
+ {__LINE__, 0xfffffffa, "FFFFFFFA", "% 6.X"},
+ {__LINE__, 0x00000000, "0", "%X"},
+ {__LINE__, -0x040fd4e, "-4259150", "% 05.d"},
+ {__LINE__, 0x0000003b, " 59", "%3.2d"},
+ {__LINE__, 0xff776dd8, "ff776dd8", "%x"},
+ {__LINE__, 0x0000055b, "+1371", "%+#2d"},
+ {__LINE__, 0x00004841, "4841", "%.1x"},
+ {__LINE__, 0x0229d710, "36296464", "%-.2ld"},
+ {__LINE__, 0x00000000, "0", "%x"},
+ {__LINE__, 0xfffe8376, "fffe8376", "%0x"},
+ {__LINE__, 0x000a7b83, "a7b83", "%x"},
+ {__LINE__, 0x0000000d, " 013", "%#7.3d"},
+ {__LINE__, 0xffffffff, "FFFFFFFF", "%5.0X"},
+ {__LINE__, 0x00000704, " 0x704", "%#7.0x"},
+ {__LINE__, 0xfff970b9, "FFF970B9", "%.1X"},
+ {__LINE__, -0x000b60a, "-46602", "%+d"},
+ {__LINE__, 0x00000000, " 00000", "%6.5x"},
+ {__LINE__, 0x00000003, "3", "%X"},
+ {__LINE__, 0x0000c14b, "c14b", "%0x"},
+ {__LINE__, 0x066d7860, "107837536", "%-d"},
+ {__LINE__, 0x00000013, " 13", "%4.x"},
+ {__LINE__, 0xfff96f18, "FFF96F18", "%4X"},
+ {__LINE__, 0xffffff30, "FFFFFF30", "%X"},
+ {__LINE__, 0xffffffff, "FFFFFFFF", "% .7X"},
+ {__LINE__, -0x72a9e985, "-1923737989", "%2.d"},
+ {__LINE__, 0x00000002, "0x2", "%#x"},
+ {__LINE__, 0x0000050e, "50e", "%2.3x"},
+ {__LINE__, 0x0000605c, "24668", "%4.1d"},
+ {__LINE__, 0xffffff3e, "ffffff3e", "%x"},
+ {__LINE__, -0x0000010, "-16", "%-2d"},
+ {__LINE__, 0x000061aa, "61AA", "%X"},
+ {__LINE__, 0x000c2ec3, "C2EC3", "%0X"},
+ {__LINE__, -0x0000001, "-1", "%-0d"},
+ {__LINE__, 0x00130e17, "+1248791", "%+.6ld"},
+ {__LINE__, 0x000000ef, "EF", "%-X"},
+ {__LINE__, -0x0000001, " -1", "%+5ld"},
+ {__LINE__, 0x0000989d, "39069", "%d"},
+ {__LINE__, 0x00000000, "0", "%-x"},
+ {__LINE__, 0x00000417, "417", "%X"},
+ {__LINE__, 0x00005e86, "5E86", "%+X"},
+ {__LINE__, -0x0007c08, "-31752", "%ld"},
+ {__LINE__, 0x00da8e0f, "DA8E0F", "%2.2X"},
+ {__LINE__, -0x3ee095ec, "-1054905836", "% 0d"},
+ {__LINE__, 0xfffdb5a3, "fffdb5a3", "%x"},
+ {__LINE__, 0xffffff83, "FFFFFF83", "%X"},
+ {__LINE__, 0xfff8efd7, "0xfff8efd7", "%#x"},
+ {__LINE__, 0x00000020, " 32", "% d"},
+ {__LINE__, 0xfff7c002, "fff7c002", "%.7x"},
+ {__LINE__, -0x0000001, "-1", "%ld"},
+ {__LINE__, 0x00000000, " 000", "%05.3X"},
+ {__LINE__, 0xfff190ee, "FFF190EE", "%X"},
+ {__LINE__, 0x00000a6c, " 2668", "%#6.ld"},
+ {__LINE__, 0x00037024, "37024", "%x"},
+ {__LINE__, 0xfffec37f, "FFFEC37F", "%X"},
+ {__LINE__, 0x007ee9bb, "8317371", "%#0.ld"},
+ {__LINE__, 0x00000122, "290", "%ld"},
+ {__LINE__, -0x0013b5f, "-80735", "%ld"},
+ {__LINE__, 0xfffffff6, "FFFFFFF6", "%X"},
+ {__LINE__, -0x0000c16, "-0003094", "%-00.7d"},
+ {__LINE__, -0x00010ed, "-4333", "%ld"},
+ {__LINE__, 0x00000007, " 0X007", "%#6.3X"},
+ {__LINE__, 0x0053781e, " 5470238", "% 2d"},
+ {__LINE__, 0xffff03e9, "0XFFFF03E9", "%+#7.3X"},
+ {__LINE__, 0xfffffdc2, "0xfffffdc2", "% #4.x"},
+ {__LINE__, -0x00018e1, "-6369", "%d"},
+ {__LINE__, 0xf3a4abc6, "F3A4ABC6", "%-.2X"},
+ {__LINE__, 0xfff64a27, "FFF64A27", "%7.7X"},
+ {__LINE__, 0x00195ae5, "195AE5", "%+03.X"},
+ {__LINE__, 0xfff8849a, "fff8849a", "%.1x"},
+ {__LINE__, -0x001b045, "-110661", "%+ld"},
+ {__LINE__, 0x01e8a106, "32022790", "%7.ld"},
+ {__LINE__, 0x0008ee94, "8EE94", "%X"},
+ {__LINE__, 0xfffcdabc, "FFFCDABC", "%X"},
+ {__LINE__, 0xfda75cd2, "fda75cd2", "%x"},
+ {__LINE__, 0x00fd505a, "fd505a", "%x"},
+ {__LINE__, 0x00003748, "3748", "%+x"},
+ {__LINE__, 0xffffffe5, "ffffffe5", "% 3.6x"},
+ {__LINE__, -0x1d1c4045, "-488390725", "%d"},
+ {__LINE__, 0xfffffff9, "0xfffffff9", "%#x"},
+ {__LINE__, -0x0000001, "-1", "%-#ld"},
+ {__LINE__, 0x00000191, "191", "%X"},
+ {__LINE__, 0xfffffffe, "FFFFFFFE", "%-X"},
+ {__LINE__, -0x0000006, "-6", "%ld"},
+ {__LINE__, 0x00000033, " 33", "% 4x"},
+ {__LINE__, -0x0159a14, "-1415700", "% ld"},
+ {__LINE__, 0x000001c3, "00001c3", "%07x"},
+ {__LINE__, 0xffffe9e2, "ffffe9e2", "%-x"},
+ {__LINE__, 0x5b19abd9, "0x5b19abd9", "%-#x"},
+ {__LINE__, 0xffff1bae, "0xffff1bae", "%#x"},
+ {__LINE__, 0x00000001, "+1", "%+d"},
+ {__LINE__, 0x006a23c7, "6A23C7", "%2.X"},
+ {__LINE__, 0x000008a4, " 8a4", "% 4.1x"},
+ {__LINE__, 0xfffffcd9, "fffffcd9", "%.1x"},
+ {__LINE__, 0x0000121b, "121B", "%X"},
+ {__LINE__, 0x001231aa, "1192362", "%7.d"},
+ {__LINE__, -0x008026d, "-524909", "%4.2d"},
+ {__LINE__, 0x192ea594, "422487444", "%ld"},
+ {__LINE__, 0x0001a800, "108544", "%0d"},
+ {__LINE__, 0x000062f1, "62f1", "%.4x"},
+ {__LINE__, 0xff8b39b0, "ff8b39b0", "% x"},
+ {__LINE__, 0x00000001, "0x1", "%+#x"},
+ {__LINE__, 0x0000144a, "5194", "%ld"},
+ {__LINE__, 0x00002599, "9625", "%d"},
+ {__LINE__, 0xffa0a2ef, "ffa0a2ef", "%0x"},
+ {__LINE__, 0xff6712e1, "FF6712E1", "%0X"},
+ {__LINE__, 0x0007ebb3, "519091", "%1ld"},
+ {__LINE__, 0x0000000f, "15 ", "%-4.ld"},
+ {__LINE__, -0x0000096, "-150", "%2.ld"},
+ {__LINE__, 0x0000004f, "4F", "%.2X"},
+ {__LINE__, 0xfffffc29, "fffffc29", "%-4.x"},
+ {__LINE__, 0x00000019, "19", "%x"},
+ {__LINE__, 0x00000c4e, "c4e", "%x"},
+ {__LINE__, 0x0000006b, " 0006B", "%6.5X"},
+ {__LINE__, 0x00c8d2c6, "c8d2c6", "%.0x"},
+ {__LINE__, -0x256fb8de, "-628078814", "%ld"},
+ {__LINE__, 0x4f51fcf4, "4F51FCF4", "%+X"},
+ {__LINE__, 0x000f000e, "983054", "%1.ld"},
+ {__LINE__, 0xfffff03f, "fffff03f", "%x"},
+ {__LINE__, 0x0000001d, " 1D", "%05.X"},
+ {__LINE__, 0x0072ea14, "72ea14", "%x"},
+ {__LINE__, -0xc6098b9, "-207657145", "%-7d"},
+ {__LINE__, 0x00000a76, "2678", "%3ld"},
+ {__LINE__, 0xfff84db3, "FFF84DB3", "%X"},
+ {__LINE__, 0x0fb52870, "fb52870", "%+x"},
+ {__LINE__, 0x08bc170a, "0x8bc170a", "%#x"},
+ {__LINE__, 0xfffeeb00, "fffeeb00", "%0.5x"},
+ {__LINE__, 0x000ece95, "970389", "%d"},
+ {__LINE__, 0x00000000, "0", "%0X"},
+ {__LINE__, 0x07f98e8a, "7f98e8a", "% x"},
+ {__LINE__, 0x000499eb, " 499eb", "% 6.x"},
+ {__LINE__, 0xffffffff, "FFFFFFFF", "%-X"},
+ {__LINE__, 0x0aa45e86, "178544262", "%#.2d"},
+ {__LINE__, 0xff73387d, "FF73387D", "%03.X"},
+ {__LINE__, 0xfffffb51, "FFFFFB51", "%.3X"},
+ {__LINE__, 0xffffffdc, "ffffffdc", "%6.x"},
+ {__LINE__, 0xffffffed, "FFFFFFED", "%-X"},
+ {__LINE__, 0x0001c4c2, "1c4c2", "%0.3x"},
+ {__LINE__, -0x0000001, "-0000001", "%-#.7d"},
+ {__LINE__, 0x00000007, "7", "%0.x"},
+ {__LINE__, 0x00000001, "1", "%ld"},
+ {__LINE__, 0xffffd000, "ffffd000", "%4.3x"},
+ {__LINE__, 0x00000030, "48", "%2.d"},
+ {__LINE__, -0x6c121ce, "-113320398", "%.5ld"},
+ {__LINE__, 0x000001ed, "1ED", "% 3.X"},
+ {__LINE__, 0xfffff0f3, "FFFFF0F3", "%+.6X"},
+ {__LINE__, 0xffffffec, "ffffffec", "%x"},
+ {__LINE__, 0x002d5ab8, "0x2d5ab8", "%-#x"},
+ {__LINE__, 0x0026acff, "2534655", "%0ld"},
+ {__LINE__, 0x01d90cd7, "+31001815", "%+.2ld"},
+ {__LINE__, -0x1f7abc0, "-33008576", "%7.6d"},
+ {__LINE__, 0xfc5babcc, "fc5babcc", "%x"},
+ {__LINE__, -0x9b74892, "-163006610", "% .6d"},
+ {__LINE__, 0x03931d84, "59972996", "%0.d"},
+ {__LINE__, 0x07d261ce, "131228110", "%#ld"},
+ {__LINE__, 0x00000000, "0", "%x"},
+ {__LINE__, 0x00000002, "2", "%+X"},
+ {__LINE__, -0x0000604, "-1540", "%+d"},
+ {__LINE__, 0x00000000, " ", "%7.x"},
+ {__LINE__, 0x00000001, "1", "%.0X"},
+ {__LINE__, -0x0005a8e, "-23182", "% d"},
+ {__LINE__, 0x03fb2730, "3fb2730", "%7.x"},
+ {__LINE__, 0xffffff03, "ffffff03", "%x"},
+ {__LINE__, 0x00000000, " ", "%-#3.d"},
+ {__LINE__, 0x04025a4b, "0X4025A4B", "%+#X"},
+ {__LINE__, -0x0000001, " -1", "%4.d"},
+ {__LINE__, 0xfffe00a3, "FFFE00A3", "%+X"},
+ {__LINE__, -0x1b26e3c8, "-455533512", "% ld"},
+ {__LINE__, 0x000017e5, "6117", "%d"},
+ {__LINE__, -0x0e4f3b6, "-15004598", "%0ld"},
+ {__LINE__, 0x00000034, "52", "%ld"},
+ {__LINE__, 0x0000024c, " 24C", "%4X"},
+ {__LINE__, 0xfffedf65, "FFFEDF65", "%-0X"},
+ {__LINE__, -0x000ff1f, "-65311", "%+#d"},
+ {__LINE__, 0x00000007, " 7", "%7.x"},
+ {__LINE__, 0x018656ae, "18656ae", "%3.7x"},
+ {__LINE__, -0x0000004, "-4", "%d"},
+ {__LINE__, 0x7081292d, "1887512877", "%d"},
+ {__LINE__, 0x87d3e48c, "87d3e48c", "%-x"},
+ {__LINE__, 0xf99c516e, "0xf99c516e", "% #7.4x"},
+ {__LINE__, 0xfffffffa, "FFFFFFFA", "%-1X"},
+ {__LINE__, -0x000001d, "-29", "%#ld"},
+ {__LINE__, -0x0000001, "-1", "%+ld"},
+ {__LINE__, 0x28ab3350, " 682308432", "% 1d"},
+ {__LINE__, -0x0000006, "-6", "%ld"},
+ {__LINE__, 0xfffffffb, "FFFFFFFB", "%.5X"},
+ {__LINE__, -0x0000007, "-7", "%#d"},
+ {__LINE__, -0x0000328, " -808", "%6.ld"},
+ {__LINE__, -0x29386f00, "-691564288", "%.3d"},
+ {__LINE__, -0x059f38a, "-5895050", "%.4ld"},
+ {__LINE__, 0xfffff888, "FFFFF888", "%3X"},
+ {__LINE__, 0xffffffdf, "ffffffdf", "%0.0x"},
+ {__LINE__, -0xb4fc354, "-189776724", "%2d"},
+ {__LINE__, 0x00058c07, "363527", "%1.d"},
+ {__LINE__, 0x0a256162, "a256162", "%x"},
+ {__LINE__, -0x05c87b0, "-6064048", "%0ld"},
+ {__LINE__, 0xfffffda1, "fffffda1", "%x"},
+ {__LINE__, 0x000034b7, "13495", "%d"},
+ {__LINE__, -0x6d1a8918, "-1830455576", "%.1d"},
+ {__LINE__, 0x00022290, "139920", "%05ld"},
+ {__LINE__, 0x00000000, "0", "%-x"},
+ {__LINE__, -0x1f8eafce, "-529444814", "%4.d"},
+ {__LINE__, -0x7bf32808, "-2079533064", "% ld"},
+ {__LINE__, 0x0000023c, "23c", "% x"},
+ {__LINE__, 0x00000039, "39", "%X"},
+ {__LINE__, -0x000556d, "-21869", "%ld"},
+ {__LINE__, -0x00000ca, "-202", "%ld"},
+ {__LINE__, 0x00002e28, "11816", "%-d"},
+ {__LINE__, 0x00000011, "17", "%-ld"},
+ {__LINE__, 0xfffffffb, "FFFFFFFB", "%-X"},
+ {__LINE__, 0xfffdd67f, "0XFFFDD67F", "%#X"},
+ {__LINE__, -0x000003d, "-61", "%d"},
+ {__LINE__, 0x0000bfce, "0XBFCE", "%-#5.2X"},
+ {__LINE__, 0xfffffffc, "fffffffc", "%x"},
+ {__LINE__, -0x00aea17, "-715287", "%.5d"},
+ {__LINE__, -0x02fce89, "-3133065", "%0d"},
+ {__LINE__, 0x007f6ed1, "7F6ED1", "%6X"},
+ {__LINE__, 0xffffffff, "FFFFFFFF", "%X"},
+ {__LINE__, -0x0002761, "-10081", "%#6.2d"},
+ {__LINE__, 0x003be8d8, "3BE8D8", "%-X"},
+ {__LINE__, 0x00000901, " 2305", "%6.d"},
+ {__LINE__, 0x00049916, "0301334", "%3.7ld"},
+ {__LINE__, 0x0678ffea, "0X678FFEA", "%#4X"},
+ {__LINE__, 0xffffffff, "ffffffff", "%+.0x"},
+ {__LINE__, -0x31d2ec61, "-835906657", "%.0d"},
+ {__LINE__, 0xfffffffc, "FFFFFFFC", "%0X"},
+ {__LINE__, -0x0015588, "-87432", "%d"},
+ {__LINE__, 0xffffff3e, "ffffff3e", "%.4x"},
+ {__LINE__, 0x0000000a, "10", "%d"},
+ {__LINE__, -0x0000003, "-3", "%2.1ld"},
+ {__LINE__, -0x000d29a, "-53914", "%ld"},
+ {__LINE__, -0x04ccbe0, "-5032928", "%2.2ld"},
+ {__LINE__, 0x0357c2a5, "357c2a5", "% 7.x"},
+ {__LINE__, 0x00000009, " 9", "% 1.ld"},
+ {__LINE__, -0x005908d, "-364685", "%0d"},
+ {__LINE__, -0x0000de6, "-3558", "%0ld"},
+ {__LINE__, 0x2d395e6b, "+758734443", "%+6d"},
+ {__LINE__, 0x001aba58, "1ABA58", "% X"},
+ {__LINE__, 0x0ceba5ab, "0XCEBA5AB", "%#.1X"},
+ {__LINE__, -0x01a8575, "-1738101", "% 2ld"},
+ {__LINE__, 0x0000000d, "13", "%#ld"},
+ {__LINE__, 0x00000000, "0", "%d"},
+ {__LINE__, 0x4b856407, "4b856407", "%5x"},
+ {__LINE__, 0x006f333c, "6F333C", "%-X"},
+ {__LINE__, 0x000000d0, "d0", "%x"},
+ {__LINE__, 0x2ecf0d4e, "2ecf0d4e", "%0x"},
+ {__LINE__, -0x0000188, "-0000392", "%#1.7ld"},
+ {__LINE__, -0x0000037, "-55", "%d"},
+ {__LINE__, 0xfffffff1, "FFFFFFF1", "% .1X"},
+ {__LINE__, 0x00000001, "0x1", "%#3x"},
+ {__LINE__, 0x000005ed, "5ED", "%3X"},
+ {__LINE__, 0x031183a3, "31183A3", "%X"},
+ {__LINE__, 0xffffffff, "ffffffff", "%x"},
+ {__LINE__, -0x0018695, "-99989", "%-0.5ld"},
+ {__LINE__, -0x0000001, "-01", "%0.2ld"},
+ {__LINE__, 0x00007822, "7822", "%+x"},
+ {__LINE__, 0x00000000, "0", "% x"},
+ {__LINE__, 0xfda2461a, "FDA2461A", "%X"},
+ {__LINE__, 0x065c50ef, "106713327", "%2.ld"},
+ {__LINE__, 0x00000a81, "a81", "% 0x"},
+ {__LINE__, -0x000022e, "-558", "%.0ld"},
+ {__LINE__, 0x00013d2f, "81199", "%.2ld"},
+ {__LINE__, 0xfffffffe, "FFFFFFFE", "%+X"},
+ {__LINE__, 0x000015f9, "5625", "%04.ld"},
+ {__LINE__, 0x0ab575a2, "179664290", "%0d"},
+ {__LINE__, 0x0024d07f, "0X24D07F", "%#X"},
+ {__LINE__, 0x07ee35e1, "7EE35E1", "%+X"},
+ {__LINE__, -0x00c114c, "-790860", "%#ld"},
+ {__LINE__, 0x00003be3, " 15331", "%07.d"},
+ {__LINE__, 0xfff87570, "FFF87570", "%4.0X"},
+ {__LINE__, -0x14eab419, "-350925849", "%-ld"},
+ {__LINE__, -0x000001b, "-27", "%ld"},
+ {__LINE__, 0x167ce2ea, "0x167ce2ea", "%#0.x"},
+ {__LINE__, -0x00009bc, "-002492", "% 3.6d"},
+ {__LINE__, 0xfffffdb9, "0XFFFFFDB9", "%#7.X"},
+ {__LINE__, 0x008b2b9d, "8B2B9D", "% X"},
+ {__LINE__, 0x000cfec3, "CFEC3", "% 05X"},
+ {__LINE__, 0x05970be6, "5970be6", "%x"},
+ {__LINE__, 0x00002780, "010112", "%2.6d"},
+ {__LINE__, 0x00000005, "+5", "%+d"},
+ {__LINE__, 0xfffffffb, "0xfffffffb", "%#3.x"},
+ {__LINE__, 0x00000001, "1 ", "%-#5.ld"},
+ {__LINE__, -0x0000017, "-23", "%ld"},
+ {__LINE__, -0x023b943, "-2341187", "%d"},
+ {__LINE__, 0x0000000d, "13", "%ld"},
+ {__LINE__, 0x00025a03, "25a03", "% .5x"},
+ {__LINE__, 0x3e1ebe24, "3e1ebe24", "% x"},
+ {__LINE__, 0x0000013a, "0x13a", "%#5.0x"},
+ {__LINE__, 0xfff6f5b3, "FFF6F5B3", "%4.X"},
+ {__LINE__, -0x0000a8a, "-2698", "%.3d"},
+ {__LINE__, 0x0009dd5f, "9dd5f", "%x"},
+ {__LINE__, 0x000003c7, " 3C7", "%04.2X"},
+ {__LINE__, 0x1bcfa2f2, "1bcfa2f2", "%+1.x"},
+ {__LINE__, 0x0001b4f4, "1b4f4", "%+1.x"},
+ {__LINE__, 0x1bc19a90, "465672848", "%#d"},
+ {__LINE__, 0xffffffff, "ffffffff", "%+06x"},
+ {__LINE__, -0x0000a88, "-2696", "%3.d"},
+ {__LINE__, 0x00084a19, "84A19", "%-X"},
+ {__LINE__, 0xffe1fc8f, "FFE1FC8F", "%0.1X"},
+ {__LINE__, -0x0000a3a, "-2618", "%5d"},
+ {__LINE__, -0x0000001, "-1", "%ld"},
+ {__LINE__, -0x5c6183d, "-96868413", "%+ld"},
+ {__LINE__, -0x0000001, "-1", "%-d"},
+ {__LINE__, 0x0000faa8, "64168", "%05.d"},
+ {__LINE__, 0x003913ef, "3740655", "%ld"},
+ {__LINE__, 0x0dde330a, "232665866", "%#ld"},
+ {__LINE__, 0xfcfb1a7b, "FCFB1A7B", "%+X"},
+ {__LINE__, 0x07b1a81f, " 129083423", "% 0d"},
+ {__LINE__, 0x00000001, "1", "%d"},
+ {__LINE__, 0x00000070, " 112", "%5ld"},
+ {__LINE__, 0xffff74d9, "ffff74d9", "%x"},
+ {__LINE__, -0x001ab93, "-109459", "%03.d"},
+ {__LINE__, 0x0eb6b497, "EB6B497", "%+X"},
+ {__LINE__, 0x07adbac2, "128826050", "%#0.4d"},
+ {__LINE__, 0xff747068, "FF747068", "%6.X"},
+ {__LINE__, -0x190ce98f, "-420276623", "%06.6ld"},
+ {__LINE__, -0x0000007, "-7", "%.0d"},
+ {__LINE__, 0x0001240f, "1240f", "% 3x"},
+ {__LINE__, 0x267ae4a0, "645588128", "%-#ld"},
+ {__LINE__, -0x0000001, "-1", "% ld"},
+ {__LINE__, -0x0000066, "-00102", "%.5ld"},
+ {__LINE__, 0x868fa035, "868fa035", "%x"},
+ {__LINE__, 0x00000000, " ", "%-4.ld"},
+ {__LINE__, 0xfffffe72, "FFFFFE72", "%4.4X"},
+ {__LINE__, 0x00a6b4f4, "10925300", "%#ld"},
+ {__LINE__, -0x0000002, "-2", "%00.1d"},
+ {__LINE__, -0x00000a3, "-163", "%ld"},
+ {__LINE__, 0xfffffffe, "fffffffe", "% 3.x"},
+ {__LINE__, 0xffe25941, "ffe25941", "% x"},
+ {__LINE__, 0x0000a20f, "41487", "%ld"},
+ {__LINE__, -0x000009b, "-155", "%#.3ld"},
+ {__LINE__, 0x000c5dc1, "810433", "%4.ld"},
+ {__LINE__, 0x00003ec4, "16068", "%ld"},
+ {__LINE__, 0x000002f3, "0755", "%04ld"},
+ {__LINE__, 0xffffff28, "FFFFFF28", "%.5X"},
+ {__LINE__, -0x08450ff, "-8671487", "%-3.0ld"},
+ {__LINE__, 0x00000092, "92", "%x"},
+ {__LINE__, -0x0000317, "-791", "%d"},
+ {__LINE__, 0x0000000d, "d", "%x"},
+ {__LINE__, 0x00000036, "36", "%x"},
+ {__LINE__, -0x112693f, "-17983807", "%ld"},
+ {__LINE__, 0x00004226, "16934", "%0.d"},
+ {__LINE__, 0x000001ba, " 442", "% ld"},
+ {__LINE__, 0xfffffffc, "0XFFFFFFFC", "%#4X"},
+ {__LINE__, 0xffdb3d23, "0xffdb3d23", "% #x"},
+ {__LINE__, 0x039eb84d, "39EB84D", "%+.6X"},
+ {__LINE__, 0xffffc7da, "ffffc7da", "%0x"},
+ {__LINE__, 0xfffffdb6, "FFFFFDB6", "%6X"},
+ {__LINE__, 0x001b75b0, "1799600", "%ld"},
+ {__LINE__, 0xfffffca2, "FFFFFCA2", "%-X"},
+ {__LINE__, 0xffffffba, "ffffffba", "%7.4x"},
+ {__LINE__, -0x000124e, "-4686", "%3.ld"},
+ {__LINE__, -0x000bec0, "-48832", "% 0d"},
+ {__LINE__, 0xfffffca0, "fffffca0", "%2.x"},
+ {__LINE__, 0x00b2a462, "11707490", "%ld"},
+ {__LINE__, 0x0745a647, "745a647", "%+4.x"},
+ {__LINE__, 0xfffffbac, "0XFFFFFBAC", "%#3.X"},
+ {__LINE__, -0x0000002, "-2", "%-0.1d"},
+ {__LINE__, 0x0006cfdb, "446427", "%#5.d"},
+ {__LINE__, -0x0000001, "-1", "%d"},
+ {__LINE__, 0x043b134e, "43B134E", "%X"},
+ {__LINE__, -0x0000015, "-21", "%ld"},
+ {__LINE__, -0x0000114, "-276", "%0d"},
+ {__LINE__, -0x0004d4a, "-19786", "%-d"},
+ {__LINE__, -0x000001c, "-28", "%ld"},
+ {__LINE__, -0x0cb89fc, "-13339132", "%ld"},
+ {__LINE__, 0xffffffcf, "ffffffcf", "%x"},
+ {__LINE__, 0xf6d2387a, "f6d2387a", "%-x"},
+ {__LINE__, -0x00000cd, "-205", "%#ld"},
+ {__LINE__, 0x00000000, "0", "%#x"},
+ {__LINE__, 0xfffffc81, "fffffc81", "%x"},
+ {__LINE__, 0x00000000, " 0", "% ld"},
+ {__LINE__, 0x00024fb5, "24fb5", "%x"},
+ {__LINE__, 0x000012fa, "12FA", "%X"},
+ {__LINE__, 0x0318ce7c, "51957372", "%0d"},
+ {__LINE__, 0x02280a99, "2280a99", "%-x"},
+ {__LINE__, 0xffffff5c, "FFFFFF5C", "%2.X"},
+ {__LINE__, -0x000002e, " -46", "%7ld"},
+ {__LINE__, -0x04a73e8, "-4879336", "%4ld"},
+ {__LINE__, 0x000007f3, "7f3", "% 1.3x"},
+ {__LINE__, 0x00000114, "0x114", "%#x"},
+ {__LINE__, 0x0000030c, "30c", "%-x"},
+ {__LINE__, 0x001dd0dd, "0x1dd0dd", "%+#5.5x"},
+ {__LINE__, 0xfff23de3, "fff23de3", "%-x"},
+ {__LINE__, -0x0178f9c, "-1544092", "%d"},
+ {__LINE__, 0x02ded8da, "2DED8DA", "%X"},
+ {__LINE__, -0x0991672, "-10032754", "%3.d"},
+ {__LINE__, 0x6943c150, "6943c150", "%x"},
+ {__LINE__, 0xffffc25d, "FFFFC25D", "%4X"},
+ {__LINE__, 0x00000c9c, " 0003228", "% .7d"},
+ {__LINE__, 0xffffffdf, "FFFFFFDF", "% 6.X"},
+ {__LINE__, 0x0001a145, " 1a145", "%6.0x"},
+ {__LINE__, 0xffdc832f, "0xffdc832f", "%#.1x"},
+ {__LINE__, 0x00699f7b, "699f7b", "%x"},
+ {__LINE__, 0xf9575268, "F9575268", "%+0X"},
+ {__LINE__, 0x04eb4783, "82528131", "%-ld"},
+ {__LINE__, -0x0000023, "-35", "%0ld"},
+ {__LINE__, -0x012b08a, "-1224842", "%0d"},
+ {__LINE__, 0xffffb587, "FFFFB587", "%X"},
+ {__LINE__, 0xffffffe9, "ffffffe9", "%x"},
+ {__LINE__, 0x006b5596, " 7034262", "% 0d"},
+ {__LINE__, 0x004d0d2a, "+5049642", "%+ld"},
+ {__LINE__, -0x002a099, "-172185", "%d"},
+ {__LINE__, 0x00000224, "548", "%ld"},
+ {__LINE__, 0x03e0cca8, "65064104", "%d"},
+ {__LINE__, -0x7bb389d, "-129710237", "%.3ld"},
+ {__LINE__, 0xffc630f5, "ffc630f5", "%-07.0x"},
+ {__LINE__, 0xfffffff8, "FFFFFFF8", "%X"},
+ {__LINE__, 0x0030225b, "3154523", "%#d"},
+ {__LINE__, 0xff7f4e28, "ff7f4e28", "%+4.x"},
+ {__LINE__, 0x14ee154d, "+351147341", "%+ld"},
+ {__LINE__, 0x00000003, "03", "%.2d"},
+ {__LINE__, 0xfe0359d6, "fe0359d6", "%x"},
+ {__LINE__, 0x002b71c3, "2847171", "%d"},
+ {__LINE__, 0x055c4d4a, "55C4D4A", "%-X"},
+ {__LINE__, 0xfffb17d2, "fffb17d2", "% .0x"},
+ {__LINE__, 0x00000002, "2", "%x"},
+ {__LINE__, 0x000018e1, "18E1", "%1.1X"},
+ {__LINE__, 0x00000331, "817", "%0d"},
+ {__LINE__, -0x0000982, "-2434 ", "%-06.ld"},
+ {__LINE__, -0x0000168, "-0000360", "%.7ld"},
+ {__LINE__, 0xffffffe9, "FFFFFFE9", "%-0.4X"},
+ {__LINE__, 0xe42084ef, "E42084EF", "%X"},
+ {__LINE__, 0x000000aa, "aa", "%x"},
+ {__LINE__, -0xe8b98b5, "-244029621", "%+d"},
+ {__LINE__, -0x00000d9, "-217", "%+2.d"},
+ {__LINE__, 0x0000027b, "27B", "%+.0X"},
+ {__LINE__, 0x002e52db, "3035867", "%-ld"},
+ {__LINE__, -0x00e2ba8, "-928680", "%0.2ld"},
+ {__LINE__, 0x003b74d8, "3B74D8", "%X"},
+ {__LINE__, -0x000006f, "-111", "%+ld"},
+ {__LINE__, 0xf8507e22, "0XF8507E22", "%-#X"},
+ {__LINE__, 0x0629f4c0, "103412928", "%-ld"},
+ {__LINE__, -0x000002d, "-45", "%0d"},
+ {__LINE__, -0x0001db0, "-7600", "%d"},
+ {__LINE__, -0x00001bb, " -443", "%5.ld"},
+ {__LINE__, 0xffffd2b9, "ffffd2b9", "%+x"},
+ {__LINE__, 0xffffe685, "0XFFFFE685", "%#0.7X"},
+ {__LINE__, 0x0000a4ce, "A4CE", "% X"},
+ {__LINE__, 0xffffffff, "FFFFFFFF", "%X"},
+ {__LINE__, 0x0000000c, "C", "% X"},
+ {__LINE__, 0xfff59369, "FFF59369", "%7X"},
+ {__LINE__, 0x00000156, " 156", "%5.X"},
+ {__LINE__, 0x02833aa9, "+42154665", "%+2d"},
+ {__LINE__, 0x0004a8f3, "+305395", "%+d"},
+ {__LINE__, 0x01a09267, "1A09267", "%0.3X"},
+ {__LINE__, 0x000004f1, "4f1", "%x"},
+ {__LINE__, 0x00000005, "5", "%x"},
+ {__LINE__, 0x00000119, " 0281", "% #2.4ld"},
+ {__LINE__, -0x0001a2a, "-6698", "%ld"},
+ {__LINE__, 0xa3633a57, "A3633A57", "%7X"},
+ {__LINE__, -0x10bd2970, "-280832368", "%-d"},
+ {__LINE__, 0xffff9c38, "ffff9c38", "%x"},
+ {__LINE__, 0xffdbe81e, "ffdbe81e", "%+6.7x"},
+ {__LINE__, 0xffffffe7, "FFFFFFE7", "%-3.0X"},
+ {__LINE__, 0x0002f6d6, "2f6d6", "%5.x"},
+ {__LINE__, 0xffffffff, "ffffffff", "% x"},
+ {__LINE__, 0xffc2c07a, "ffc2c07a", "%0.x"},
+ {__LINE__, 0xfcc0e13a, "FCC0E13A", "%X"},
+ {__LINE__, 0x0000000d, "d", "% x"},
+ {__LINE__, 0x0016cac8, "16CAC8", "%-0.3X"},
+ {__LINE__, 0x00945dc1, "9723329", "%2d"},
+ {__LINE__, 0xf19a1cd1, "F19A1CD1", "%-X"},
+ {__LINE__, 0x00000003, "+3", "%+ld"},
+ {__LINE__, 0x00000773, "1907", "%ld"},
+ {__LINE__, 0x000263e6, "263e6", "%-x"},
+ {__LINE__, -0x0238b55, "-2329429", "%d"},
+ {__LINE__, 0x00006c56, "6C56", "%X"},
+ {__LINE__, 0x0000f34b, "62283", "%#.0ld"},
+ {__LINE__, -0x1620e21, "-23203361", "%0ld"},
+ {__LINE__, 0xf9257d6a, "f9257d6a", "%2x"},
+ {__LINE__, -0x00ed463, "-971875", "%03.d"},
+ {__LINE__, 0x02bb94c6, "45847750", "%d"},
+ {__LINE__, 0xffffd20c, "0XFFFFD20C", "%#X"},
+ {__LINE__, 0x000087d8, "34776", "%.0d"},
+ {__LINE__, 0xfffffffc, "FFFFFFFC", "%+7.X"},
+ {__LINE__, -0x0009cd5, "-40149", "%-ld"},
+ {__LINE__, 0xfffff85e, "FFFFF85E", "% 0.7X"},
+ {__LINE__, -0x0000006, " -6", "%+#6.ld"},
+ {__LINE__, 0x007ff453, "0x7ff453", "%-#1.x"},
+ {__LINE__, 0xffffffe6, "FFFFFFE6", "%2X"},
+ {__LINE__, 0x0000001f, "0X1F", "%#4X"},
+ {__LINE__, -0x001c157, "-115031", "%.3ld"},
+ {__LINE__, 0x00096e06, "617990", "%3.1ld"},
+ {__LINE__, 0x0f77271d, "259467037", "%d"},
+ {__LINE__, -0x0001403, "-5123", "%d"},
+ {__LINE__, 0xffffff8a, "ffffff8a", "%x"},
+ {__LINE__, -0x000010f, "-271", "%1.ld"},
+ {__LINE__, 0xe573cc4a, "E573CC4A", "%0X"},
+ {__LINE__, -0x0000d88, "-3464", "%-d"},
+ {__LINE__, 0x0000000e, "14", "%#ld"},
+ {__LINE__, -0x000345b, "-13403", "%#d"},
+ {__LINE__, 0x00000602, "602", "%+x"},
+ {__LINE__, 0x00000011, "17", "%#d"},
+ {__LINE__, -0x0000002, "-2", "%+d"},
+ {__LINE__, 0x030fe6e6, "51373798", "%d"},
+ {__LINE__, 0x00000007, "007", "%.3X"},
+ {__LINE__, 0x0001abe0, "0X1ABE0", "%+#.4X"},
+ {__LINE__, 0xfffffdb7, "fffffdb7", "%-6x"},
+ {__LINE__, 0xffffff8d, "FFFFFF8D", "% 02.2X"},
+ {__LINE__, 0xfff12126, "FFF12126", "%X"},
+ {__LINE__, 0x0208e32d, "34136877", "%.2d"},
+ {__LINE__, 0x11c04b55, "297814869", "%ld"},
+ {__LINE__, 0xff1e5ca3, "0xff1e5ca3", "%#x"},
+ {__LINE__, 0xf9643f09, "f9643f09", "%x"},
+ {__LINE__, -0x003c6da, "-247514", "%4d"},
+ {__LINE__, 0xff69d0e7, "FF69D0E7", "%-X"},
+ {__LINE__, 0x00006ae9, "0x6ae9", "%#x"},
+ {__LINE__, -0x005aefe, "-372478", "%d"},
+ {__LINE__, 0x0000000d, "00013", "%3.5ld"},
+ {__LINE__, 0x00cc185c, "CC185C", "%X"},
+ {__LINE__, 0x3dd14d9f, "3DD14D9F", "%1.4X"},
+ {__LINE__, -0x4cc2ad3, "-80489171", "%1.d"},
+ {__LINE__, 0xfffff79e, "fffff79e", "%x"},
+ {__LINE__, 0xfffeeb03, "fffeeb03", "%-1x"},
+ {__LINE__, -0x0b1b15c, "-11645276", "%0ld"},
+ {__LINE__, -0x06b558d, "-7034253", "%ld"},
+ {__LINE__, 0xfffffe61, "fffffe61", "%x"},
+ {__LINE__, -0x0000002, "-2", "%d"},
+ {__LINE__, -0x0000162, "-000354", "%-5.6d"},
+ {__LINE__, 0x01a23780, "27408256", "%d"},
+ {__LINE__, 0xffff3a9b, "ffff3a9b", "% x"},
+ {__LINE__, 0xfffffdc7, "0xfffffdc7", "%#4.5x"},
+ {__LINE__, 0x00000000, "00", "%.2X"},
+ {__LINE__, -0x0000006, "-6", "%0ld"},
+ {__LINE__, -0x16072c6, "-23098054", "%#5ld"},
+ {__LINE__, -0x07152b8, "-7426744", "%01ld"},
+ {__LINE__, 0x0000d6c6, "0x0d6c6", "%#1.5x"},
+ {__LINE__, 0x00000f7c, "000f7c", "%+04.6x"},
+ {__LINE__, 0x00000bd0, "3024", "%4ld"},
+ {__LINE__, 0x0000295e, "0x295e", "%#x"},
+ {__LINE__, 0x00002e38, "11832", "%.5d"},
+ {__LINE__, -0xa2f5de4, "-170876388", "%#d"},
+ {__LINE__, -0x001aa36, "-109110", "%-#d"},
+ {__LINE__, 0x03012091, "3012091", "%+2.5X"},
+ {__LINE__, -0x00009ed, "-002541", "%-0.6ld"},
+ {__LINE__, 0x0000001d, "1d", "%x"},
+ {__LINE__, 0xffffe315, "FFFFE315", "%+4X"},
+ {__LINE__, 0x0000716b, "716B", "%X"},
+ {__LINE__, 0xfffb8315, "0xfffb8315", "%+#x"},
+ {__LINE__, 0x00000132, "132 ", "%-7.3x"},
+ {__LINE__, 0x00000000, "+0000000", "%+1.7d"},
+ {__LINE__, 0xe16d27ab, "E16D27AB", "%X"},
+ {__LINE__, 0xffffffe5, "ffffffe5", "%+x"},
+ {__LINE__, -0x000ab9d, "-43933", "%ld"},
+ {__LINE__, 0xffd042d6, "ffd042d6", "%2x"},
+ {__LINE__, 0xffffff9b, "ffffff9b", "%x"},
+ {__LINE__, 0x000000fb, "0xfb", "% #1.x"},
+ {__LINE__, 0x0000000f, " 15", "%#3ld"},
+ {__LINE__, 0xfffba2d8, "0XFFFBA2D8", "%-#0.X"},
+ {__LINE__, 0xfffffff8, "0XFFFFFFF8", "% #X"},
+ {__LINE__, 0x00000000, " ", "%4.ld"},
+ {__LINE__, 0x00000002, "2", "%+x"},
+ {__LINE__, 0xfffff314, "FFFFF314", "%-X"},
+ {__LINE__, 0x00000000, " 0", "% ld"},
+ {__LINE__, -0x0000007, "-07", "%3.2ld"},
+ {__LINE__, 0xffffdd80, "FFFFDD80", "%.6X"},
+ {__LINE__, -0x000001b, "-27", "%-ld"},
+ {__LINE__, -0x0000258, "-600", "%-0d"},
+ {__LINE__, 0x00016377, "16377", "%3X"},
+ {__LINE__, 0x00000001, "1", "%X"},
+ {__LINE__, -0xac5d314, "-180736788", "%d"},
+ {__LINE__, -0x000036e, "-878", "% ld"},
+ {__LINE__, 0xfe346af4, "fe346af4", "%.5x"},
+ {__LINE__, 0xffffffe1, "ffffffe1", "%-7.6x"},
+ {__LINE__, -0x0a1df07, "-10608391", "%#.5d"},
+ {__LINE__, 0x000000c9, " 0XC9", "%+#5.X"},
+ {__LINE__, 0xfffffffe, "fffffffe", "%x"},
+ {__LINE__, 0xfffffff8, "fffffff8", "%+x"},
+ {__LINE__, -0x4517255, "-72446549", "%.6ld"},
+ {__LINE__, 0xfffa3670, "FFFA3670", "%-6X"},
+ {__LINE__, 0xffffffe0, "ffffffe0", "%2.x"},
+ {__LINE__, 0xffffffff, "ffffffff", "%0x"},
+ {__LINE__, 0x0000230d, "8973", "%#.1d"},
+ {__LINE__, 0x00000238, "238", "%0X"},
+ {__LINE__, 0xfffce5ab, "FFFCE5AB", "%-X"},
+ {__LINE__, 0x0000002c, "2C", "%X"},
+ {__LINE__, 0x00000001, " 1", "%4.ld"},
+ {__LINE__, 0xffffff8d, "FFFFFF8D", "%-X"},
+ {__LINE__, 0x00069c69, "433257", "%06d"},
+ {__LINE__, 0xfffffb8d, "0xfffffb8d", "%#x"},
+ {__LINE__, 0x000d6a2d, "879149", "%5.5d"},
+ {__LINE__, -0x0001fcb, " -8139", "%7.ld"},
+ {__LINE__, 0xfff86937, "fff86937", "%-0x"},
+ {__LINE__, 0x00059cf9, "367865", "%#.0ld"},
+ {__LINE__, 0x02c5d87a, "46520442", "%3.ld"},
+ {__LINE__, 0x00000571, "1393", "%ld"},
+ {__LINE__, 0x0003c73f, "+247615", "%+4ld"},
+ {__LINE__, 0x0000004f, "4f", "% 0x"},
+ {__LINE__, 0x00000000, "0", "%-ld"},
+ {__LINE__, -0x0e5850f, "-15041807", "% ld"},
+ {__LINE__, -0x0000002, " -0002", "%7.4d"},
+ {__LINE__, 0xfffffd1b, "fffffd1b", "%05x"},
+ {__LINE__, 0x0000041c, " 1052", "% #0.ld"},
+ {__LINE__, -0x0000030, "-48", "%d"},
+ {__LINE__, -0x0013593, "-79251", "% #d"},
+ {__LINE__, 0x00000001, "1", "%+X"},
+ {__LINE__, 0x0000056b, " 56b", "%4.x"},
+ {__LINE__, -0x0000004, "-4 ", "%-3d"},
+ {__LINE__, -0x0000003, "-3", "% ld"},
+ {__LINE__, 0xffff7c14, "0XFFFF7C14", "%#X"},
+ {__LINE__, 0x02f63dd8, "49692120", "%.7ld"},
+ {__LINE__, -0x03c51c9, "-3953097", "%+d"},
+ {__LINE__, 0x00ded685, "14603909", "%5.ld"},
+ {__LINE__, 0xffffffba, "ffffffba", "%x"},
+ {__LINE__, 0x000370e8, "225512", "%#ld"},
+ {__LINE__, 0x00000003, "3", "%X"},
+ {__LINE__, -0x0024a64, "-150116", "%7.d"},
+ {__LINE__, 0xff486ca1, "ff486ca1", "%x"},
+ {__LINE__, 0x000001cf, "1CF", "% X"},
+ {__LINE__, -0x0002d7e, "-11646", "%-0d"},
+ {__LINE__, 0x0a594c65, "a594c65", "%.4x"},
+ {__LINE__, -0x0000002, "-0002", "%-5.4ld"},
+ {__LINE__, 0x00000000, "", "%00.ld"},
+ {__LINE__, 0x00058bc4, "58BC4", "%3X"},
+ {__LINE__, 0x0002cf8e, " 184206", "% 0ld"},
+ {__LINE__, 0x000009c7, "+2503", "%+4.ld"},
+ {__LINE__, 0xed0c984d, "ED0C984D", "%X"},
+ {__LINE__, -0x0000058, "-088", "%#.3ld"},
+ {__LINE__, 0x0076083d, "0X76083D", "%#6X"},
+ {__LINE__, -0x0000001, "-1", "%#d"},
+ {__LINE__, -0x6bf1777, "-113186679", "%#ld"},
+ {__LINE__, -0x000011f, "-287", "%ld"},
+ {__LINE__, 0x001b0e7d, "1B0E7D", "%-4X"},
+ {__LINE__, 0x000007ac, " 1964", "%5.ld"},
+ {__LINE__, 0x00000005, "5", "%0.d"},
+ {__LINE__, -0x00003ba, "-954", "%4.0ld"},
+ {__LINE__, 0xfffffffe, "FFFFFFFE", "%X"},
+ {__LINE__, 0x00000019, "19", "%x"},
+ {__LINE__, 0xffffffe0, "ffffffe0", "%-.6x"},
+ {__LINE__, 0x0000012a, " 298", "% d"},
+ {__LINE__, 0x00002c74, "2c74", "% 4.3x"},
+ {__LINE__, 0x000002d5, "725", "%d"},
+ {__LINE__, 0x0001c9a9, "1c9a9", "%-02x"},
+ {__LINE__, 0xffc928c8, "ffc928c8", "%x"},
+ {__LINE__, -0x03ae51f, "-3859743", "% #ld"},
+ {__LINE__, 0x0000526d, "526d", "%x"},
+ {__LINE__, -0x00028f0, "-10480", "%5ld"},
+ {__LINE__, -0x49b4262, "-77283938", "%+02.0d"},
+ {__LINE__, 0x028d37f0, "0x28d37f0", "%+#x"},
+ {__LINE__, 0xd66e0af9, "D66E0AF9", "%03.X"},
+ {__LINE__, -0x00c7707, "-816903", "%0d"},
+ {__LINE__, -0x00000d0, "-208", "%-.1ld"},
+ {__LINE__, 0x0000c328, "49960", "%d"},
+ {__LINE__, 0x34cb86f1, "34CB86F1", "%X"},
+ {__LINE__, 0x000000f6, "F6", "%+X"},
+ {__LINE__, 0x0a3407ec, "0xa3407ec", "%-#x"},
+ {__LINE__, 0x00007ebc, "32444", "%#3.d"},
+ {__LINE__, 0xfffd3d65, "fffd3d65", "%x"},
+ {__LINE__, 0x0007bc82, "0507010", "%0.7d"},
+ {__LINE__, 0x0005bb93, "375699", "%ld"},
+ {__LINE__, 0x0ec11cc8, "0XEC11CC8", "%+#6.2X"},
+ {__LINE__, 0xfffff9c6, "fffff9c6", "%.5x"},
+ {__LINE__, 0xff05ab70, "0XFF05AB70", "%-#.3X"},
+ {__LINE__, 0x2328b716, "589870870", "%d"},
+ {__LINE__, 0x00001a79, "6777", "%.1d"},
+ {__LINE__, 0xfffee573, "fffee573", "%0.1x"},
+ {__LINE__, -0x0000929, " -2345", "%7.d"},
+ {__LINE__, 0xffffff9a, "FFFFFF9A", "%2.X"},
+ {__LINE__, 0xfffffe60, "fffffe60", "%.5x"},
+ {__LINE__, 0xfffffcd2, "fffffcd2", "%.7x"},
+ {__LINE__, 0x00000001, " 001", "%6.3X"},
+ {__LINE__, 0x00011e9c, "+73372", "%+0ld"},
+ {__LINE__, 0x0000002a, "2a", "% x"},
+ {__LINE__, 0xffffffff, "ffffffff", "%.7x"},
+ {__LINE__, -0x0008ee8, "-36584", "%ld"},
+ {__LINE__, 0x0000001c, "28", "%-d"},
+ {__LINE__, 0x000abeda, "704218", "%d"},
+ {__LINE__, 0x001347f7, "1347f7", "%3.0x"},
+ {__LINE__, 0x0000023e, "574", "%3.3ld"},
+ {__LINE__, 0x00000000, "0", "%-ld"},
+ {__LINE__, -0x0016de0, "-93664", "%0ld"},
+ {__LINE__, 0xffffff45, "FFFFFF45", "% X"},
+ {__LINE__, 0x02dfb08c, "48214156", "%#ld"},
+ {__LINE__, 0x003d73a2, "3d73a2", "%6.x"},
+ {__LINE__, 0x00147da7, "1342887", "%#d"},
+ {__LINE__, -0x5ff0f1e, "-100601630", "%-01ld"},
+ {__LINE__, -0x000000b, "-11", "%ld"},
+ {__LINE__, 0x00000168, " 168", "%+6.x"},
+ {__LINE__, 0xffffc28e, "ffffc28e", "%0x"},
+ {__LINE__, -0x00003a2, "-930", "%ld"},
+ {__LINE__, 0x0002e56f, " 189807", "% 1.ld"},
+ {__LINE__, 0x51abf44f, "0x51abf44f", "%#.7x"},
+ {__LINE__, 0x00000000, "0", "%d"},
+ {__LINE__, 0x9581268f, "9581268F", "%+X"},
+ {__LINE__, 0xffffff3b, "FFFFFF3B", "%X"},
+ {__LINE__, 0x000083d4, " 33748", "% #d"},
+ {__LINE__, 0x00000001, "1", "%x"},
+ {__LINE__, -0x000e51f, "-58655", "%.0ld"},
+ {__LINE__, 0x0003eacb, "256715", "%6ld"},
+ {__LINE__, 0x02be09db, " 46008795", "% 0.ld"},
+ {__LINE__, 0xfffffffb, "FFFFFFFB", "% X"},
+ {__LINE__, 0x000084f5, " 34037", "%6ld"},
+ {__LINE__, -0x1127f99, "-17989529", "%#d"},
+ {__LINE__, 0x5f6512de, "5f6512de", "%.7x"},
+ {__LINE__, 0x00000001, "1", "%x"},
+ {__LINE__, 0xfff74ab5, "fff74ab5", "%x"},
+ {__LINE__, 0x0eebeb94, "250342292", "%4.ld"},
+ {__LINE__, 0x0001b846, "0x1b846", "%#1x"},
+ {__LINE__, 0x001e8c32, "1E8C32", "%2X"},
+ {__LINE__, -0x0dae932, "-14346546", "%5.1d"},
+ {__LINE__, 0x00000001, "1", "%ld"},
+ {__LINE__, -0x0000042, "-66", "%ld"},
+ {__LINE__, 0xffffff51, "FFFFFF51", "%0.1X"},
+ {__LINE__, 0x00000043, "43", "%x"},
+ {__LINE__, 0x04c21f39, " 79830841", "% 0ld"},
+ {__LINE__, 0x0000061e, "1566", "%03.3d"},
+ {__LINE__, -0x0000003, "-3", "%+d"},
+ {__LINE__, 0x015b32db, " 22754011", "% .4d"},
+ {__LINE__, 0xfffff181, "FFFFF181", "%-X"},
+ {__LINE__, 0x000017ec, "0X17EC", "%#X"},
+ {__LINE__, 0x000d703e, "880702", "%#ld"},
+ {__LINE__, -0x6d7533a0, "-1836397472", "%ld"},
+ {__LINE__, 0x0000008a, " 138", "% d"},
+ {__LINE__, -0x7368794b, "-1936226635", "%+#d"},
+ {__LINE__, 0x0000000d, "0XD", "%#X"},
+ {__LINE__, 0x0000030d, "30D", "% X"},
+ {__LINE__, 0xfffff9fe, "FFFFF9FE", "%5X"},
+ {__LINE__, 0x00001bb2, "7090", "%d"},
+ {__LINE__, 0x041d2a0c, "41D2A0C", "%0X"},
+ {__LINE__, 0x00012aee, " 76526", "% d"},
+ {__LINE__, 0x0000055f, "55f", "%.1x"},
+ {__LINE__, 0xffffffff, "0XFFFFFFFF", "%#1X"},
+ {__LINE__, 0x07b0a971, "+129018225", "%+.2ld"},
+ {__LINE__, 0xfffffff8, "FFFFFFF8", "%4X"},
+ {__LINE__, 0x00000001, "1", "%d"},
+ {__LINE__, 0x00000038, "+56", "%+2ld"},
+ {__LINE__, 0xfffffc2f, "fffffc2f", "%+7.x"},
+ {__LINE__, 0x00004477, "0x4477", "% #x"},
+ {__LINE__, 0x0000000d, "0XD", "%+#3X"},
+ {__LINE__, 0xf5bf37b1, "F5BF37B1", "%1.X"},
+ {__LINE__, 0x1a96f431, "446100529", "%d"},
+ {__LINE__, 0x0037edf3, "+3665395", "%+#4.5ld"},
+ {__LINE__, 0x0007f2aa, "520874", "%0ld"},
+ {__LINE__, -0x00051a3, "-20899", "%+#1.ld"},
+ {__LINE__, 0x0000037f, "37F", "%0X"},
+ {__LINE__, 0xffffffb4, "ffffffb4", "%x"},
+ {__LINE__, -0xd984c00, "-228084736", "%+06ld"},
+ {__LINE__, 0xffffe1be, "FFFFE1BE", "%X"},
+ {__LINE__, 0xfff20d48, "FFF20D48", "%+6.0X"},
+ {__LINE__, 0x000028b7, "0x028b7", "%-#7.5x"},
+ {__LINE__, -0x0000001, "-1", "%ld"},
+ {__LINE__, 0x03f37945, "66287941", "%d"},
+ {__LINE__, 0xffffffed, "0XFFFFFFED", "%+#6.4X"},
+ {__LINE__, 0x0000f046, "f046", "%x"},
+ {__LINE__, 0xe9772b51, "E9772B51", "%-1.X"},
+ {__LINE__, 0xfffffffe, "fffffffe", "% x"},
+ {__LINE__, 0xfffffffa, "0xfffffffa", "%#x"},
+ {__LINE__, 0x00000015, "15", "%-X"},
+ {__LINE__, 0x0000003c, "60", "%#ld"},
+ {__LINE__, 0x3103952d, "822318381", "%0.ld"},
+ {__LINE__, 0x17ba68bb, "398092475", "%2d"},
+ {__LINE__, 0x000006c4, "+1732", "%+.2d"},
+ {__LINE__, 0x00000043, "67", "%#d"},
+ {__LINE__, 0x0043fb55, "4455253", "%.1ld"},
+ {__LINE__, 0x00004b76, "4b76", "% 0x"},
+ {__LINE__, 0xfff4c56b, "FFF4C56B", "%7X"},
+ {__LINE__, 0x00766055, "766055", "%+5x"},
+ {__LINE__, -0x000009f, "-159", "%+d"},
+ {__LINE__, 0xffff063f, "ffff063f", "%-2x"},
+ {__LINE__, 0x00808fc8, "808fc8", "%x"},
+ {__LINE__, 0xffffffff, "ffffffff", "%x"},
+ {__LINE__, 0x000000f1, "00000f1", "%+02.7x"},
+ {__LINE__, 0x00000002, "2", "%X"},
+ {__LINE__, 0x00000000, "000", "%03d"},
+ {__LINE__, 0xe63f73b2, "E63F73B2", "% 1X"},
+ {__LINE__, 0xfffffffe, "FFFFFFFE", "%5.1X"},
+ {__LINE__, 0x0d3fa38b, "222274443", "%1d"},
+ {__LINE__, 0x00000000, "0", "% X"},
+ {__LINE__, 0x00000001, " 1", "%04.ld"},
+ {__LINE__, 0x00000046, "46", "%0X"},
+ {__LINE__, 0x0000761f, " 30239", "% ld"},
+ {__LINE__, -0x0002517, "-9495", "%+d"},
+ {__LINE__, 0x00000156, "156", "% 0x"},
+ {__LINE__, 0x1c55eba2, "1c55eba2", "%.6x"},
+ {__LINE__, 0x005af80d, "5af80d", "%.6x"},
+ {__LINE__, 0x0000002e, "46", "%d"},
+ {__LINE__, -0x0007c0f, "-31759", "%ld"},
+ {__LINE__, 0xffffe924, "FFFFE924", "%7X"},
+ {__LINE__, 0x00000174, "372", "%ld"},
+ {__LINE__, 0xffffffc9, "0xffffffc9", "%-#x"},
+ {__LINE__, 0x00000020, "+000032", "%+07d"},
+ {__LINE__, 0xffffe5d9, "FFFFE5D9", "%4.5X"},
+ {__LINE__, 0xffffffa3, "FFFFFFA3", "%+.3X"},
+ {__LINE__, 0x00000a03, "+2563", "%+2d"},
+ {__LINE__, 0x001b58ca, "+1792202", "%+4d"},
+ {__LINE__, 0xffffffc9, "0xffffffc9", "%+#5x"},
+ {__LINE__, -0x0000003, "-3", "% d"},
+ {__LINE__, 0xfffffffc, "fffffffc", "%+0x"},
+ {__LINE__, -0x0000002, "-02", "%.2d"},
+ {__LINE__, 0x000243fb, "148475", "%-ld"},
+ {__LINE__, 0x00000001, "1", "%0d"},
+ {__LINE__, -0x0000672, "-1650", "%ld"},
+ {__LINE__, -0x0005413, "-0021523", "% 7.7d"},
+ {__LINE__, 0x00000017, "0X17", "%#X"},
+ {__LINE__, 0x00000e48, "3656", "%0d"},
+ {__LINE__, 0xffe79b38, "ffe79b38", "%-x"},
+ {__LINE__, 0xffffff15, "FFFFFF15", "%+6.1X"},
+ {__LINE__, 0xfff0272c, "fff0272c", "%-.5x"},
+ {__LINE__, -0x00b706f, "-749679", "%1.ld"},
+ {__LINE__, 0x0176aeec, "176AEEC", "%.1X"},
+ {__LINE__, -0x00005a1, "-1441", "% 0ld"},
+ {__LINE__, -0x0000002, "-00002", "%.5d"},
+ {__LINE__, -0xd2e6f5d, "-221146973", "%1ld"},
+ {__LINE__, -0x0000001, " -001", "%5.3ld"},
+ {__LINE__, 0x00000001, " 1", "%05.ld"},
+ {__LINE__, 0x0000749e, "+29854", "%+#d"},
+ {__LINE__, 0x00000005, "5", "%d"},
+ {__LINE__, 0xfa7128b0, "fa7128b0", "%1.x"},
+ {__LINE__, 0xffffbbb4, "0XFFFFBBB4", "%#.1X"},
+ {__LINE__, 0x0006862f, "427567", "%d"},
+ {__LINE__, 0x00000002, "2", "%X"},
+ {__LINE__, 0x000005d4, "5d4", "% x"},
+ {__LINE__, 0x001387e1, "1279969", "%-05.0ld"},
+ {__LINE__, -0x0035a56, "-219734", "%ld"},
+ {__LINE__, -0x4064ecc6, "-1080356038", "%ld"},
+ {__LINE__, 0x0000360d, "13837", "%0ld"},
+ {__LINE__, -0xea1a85b, "-245475419", "%-.2ld"},
+ {__LINE__, 0xffffff2d, "FFFFFF2D", "%X"},
+ {__LINE__, 0x00000004, " 0004", "%7.4x"},
+ {__LINE__, 0x00f72ffd, "F72FFD", "%-X"},
+ {__LINE__, 0x00000fa2, "fa2 ", "%-5x"},
+ {__LINE__, 0x05ae1f9a, "95297434", "%#ld"},
+ {__LINE__, 0x0000bf2e, "48942", "%3.d"},
+ {__LINE__, 0x00000000, " ", "%1.X"},
+ {__LINE__, 0x01bcb097, "29143191", "%ld"},
+ {__LINE__, 0x0000009c, "156 ", "%-4.0d"},
+ {__LINE__, 0xfffffffe, "fffffffe", "% x"},
+ {__LINE__, 0x00000001, "1 ", "%-6.d"},
+ {__LINE__, 0xffffffef, "ffffffef", "%7.x"},
+ {__LINE__, 0xfffffec1, "fffffec1", "%.5x"},
+ {__LINE__, -0x000000f, "-15", "%-1d"},
+ {__LINE__, -0x0008426, "-33830", "%0ld"},
+ {__LINE__, 0x005be0ae, "5BE0AE", "% X"},
+ {__LINE__, 0x00000009, " 9", "%+7X"},
+ {__LINE__, -0x0007e18, "-32280", "%+0.d"},
+ {__LINE__, 0x01697ba1, " 23690145", "% 5.ld"},
+ {__LINE__, -0x0012042, "-073794", "%7.6d"},
+ {__LINE__, 0x04e9bd0d, "4e9bd0d", "%-2x"},
+ {__LINE__, 0xffffffd9, "FFFFFFD9", "%.2X"},
+ {__LINE__, -0x01b9632, "-1807922", "%.6ld"},
+ {__LINE__, 0x000000cd, "205", "%1.ld"},
+ {__LINE__, 0x00000000, " ", "% .0d"},
+ {__LINE__, 0xff17bbb1, "ff17bbb1", "%x"},
+ {__LINE__, -0x00146d7, "-83671", "%+1.ld"},
+ {__LINE__, 0xfffff144, "fffff144", "%x"},
+ {__LINE__, 0x000f8dbe, "F8DBE", "%3.X"},
+ {__LINE__, -0x000381c, "-14364", "%d"},
+ {__LINE__, 0x0000001e, " 30", "%4.1d"},
+ {__LINE__, 0x00000016, "22", "%-0d"},
+ {__LINE__, 0x00000002, "+02", "%+1.2ld"},
+ {__LINE__, 0x0000e803, "59395", "%d"},
+ {__LINE__, 0xb4c2448d, "b4c2448d", "%-7x"},
+ {__LINE__, 0x000e697d, "944509", "%ld"},
+ {__LINE__, 0xfffe6e32, "0XFFFE6E32", "%#X"},
+ {__LINE__, 0x00000190, " 190", "%+5.X"},
+ {__LINE__, -0x03a2219, "-3809817", "%#6.ld"},
+ {__LINE__, -0x000003c, "-60 ", "%-#4.ld"},
+ {__LINE__, 0x00000000, " ", "% 03.ld"},
+ {__LINE__, -0x074f922, "-7665954", "%ld"},
+ {__LINE__, -0x00000f0, "-240", "%-ld"},
+ {__LINE__, 0xfffe42d2, "0XFFFE42D2", "%#X"},
+ {__LINE__, 0x000000dd, "DD", "%X"},
+ {__LINE__, 0x00359abe, "359ABE", "%.1X"},
+ {__LINE__, 0xffec7bdf, "FFEC7BDF", "%0.1X"},
+ {__LINE__, 0x0ecddcba, "248372410", "%-#3.d"},
+ {__LINE__, 0x00ad0dbc, "11341244", "%ld"},
+ {__LINE__, -0x0000001, "-1", "%-d"},
+ {__LINE__, 0x00050841, "50841", "% .5x"},
+ {__LINE__, 0x01d359e7, "1d359e7", "%1.x"},
+ {__LINE__, 0xff9efaa3, "FF9EFAA3", "%X"},
+ {__LINE__, 0x0007ea10, "+518672", "%+ld"},
+ {__LINE__, -0x000671c, "-26396", "%1d"},
+ {__LINE__, 0xffffff91, "0xffffff91", "%#4.4x"},
+ {__LINE__, 0x00000000, "+", "%+0.0ld"},
+ {__LINE__, -0x002c53e, "-181566", "%3.d"},
+ {__LINE__, 0xffffff56, "ffffff56", "%x"},
+ {__LINE__, 0xfffff589, "FFFFF589", "%+X"},
+ {__LINE__, 0x00024d13, "24D13", "%-5.2X"},
+ {__LINE__, 0x00000000, " 0", "%6.1d"},
+ {__LINE__, 0x00a64f33, "A64F33", "%4.4X"},
+ {__LINE__, 0xffebb57a, "FFEBB57A", "%5.4X"},
+ {__LINE__, 0xfff3b4a0, "fff3b4a0", "%2.x"},
+ {__LINE__, 0xffffffd9, "FFFFFFD9", "%.2X"},
+ {__LINE__, 0x00d37b84, "13859716", "%d"},
+ {__LINE__, 0x00001e85, "0001E85", "%0.7X"},
+ {__LINE__, -0x756148f, "-123081871", "% 7.d"},
+ {__LINE__, -0x0319339, "-3248953", "%+#.4d"},
+ {__LINE__, -0x00798b8, "-497848", "%#5ld"},
+ {__LINE__, -0x0000039, "-57", "%0d"},
+ {__LINE__, -0x000b1d7, "-45527", "%+0.ld"},
+ {__LINE__, 0xff811fba, "FF811FBA", "%+X"},
+ {__LINE__, 0x00000042, " 66", "% ld"},
+ {__LINE__, 0xfffffe31, "0XFFFFFE31", "%#X"},
+ {__LINE__, 0x00000073, "115", "%ld"},
+ {__LINE__, 0x45091a39, "0x45091a39", "%+#3.x"},
+ {__LINE__, 0x001270f5, "1270f5", "%-5.6x"},
+ {__LINE__, 0xfffd91fd, "fffd91fd", "%x"},
+ {__LINE__, -0x0817bad, "-8485805", "%#ld"},
+ {__LINE__, -0x32ad55f, "-53138783", "%0d"},
+ {__LINE__, 0x00003e57, "15959", "%0ld"},
+ {__LINE__, -0x0048756, "-296790", "%2.6d"},
+ {__LINE__, 0xff90f45f, "FF90F45F", "% X"},
+ {__LINE__, 0x0000e454, "0e454", "% .5x"},
+ {__LINE__, 0xfffffffc, "fffffffc", "%x"},
+ {__LINE__, 0xfffffff7, "FFFFFFF7", "%-2X"},
+ {__LINE__, 0xffdabf0e, "FFDABF0E", "%+X"},
+ {__LINE__, 0xffffffff, "0XFFFFFFFF", "%#1X"},
+ {__LINE__, 0x01516650, "1516650", "% x"},
+ {__LINE__, 0xffffff51, "FFFFFF51", "%X"},
+ {__LINE__, 0x000000ea, "234", "%00.d"},
+ {__LINE__, 0x06db60ca, "115040458", "%5.d"},
+ {__LINE__, 0x00000f01, " 3841", "% d"},
+ {__LINE__, 0x00000009, "9", "%x"},
+ {__LINE__, 0x299b3ba0, "299b3ba0", "%6.7x"},
+ {__LINE__, 0x0067f298, "67f298", "%-2.6x"},
+ {__LINE__, 0xfffffff5, "FFFFFFF5", "% 2X"},
+ {__LINE__, 0x00102ff9, "102FF9", "%-.0X"},
+ {__LINE__, 0xffc22393, "0xffc22393", "% #6x"},
+ {__LINE__, 0x00007db5, "32181", "%-2ld"},
+ {__LINE__, 0x0000b0a3, "0xb0a3", "%#0x"},
+ {__LINE__, 0x001ceebb, "1CEEBB", "%-3.4X"},
+ {__LINE__, 0x00025101, "0x25101", "%#x"},
+ {__LINE__, -0x0000001, "-1", "%0ld"},
+ {__LINE__, 0xffffd846, "FFFFD846", "%+2.3X"},
+ {__LINE__, 0x00001d79, " 7545", "% 0.1ld"},
+ {__LINE__, -0x0000002, " -2", "%5d"},
+ {__LINE__, 0xf93b9fdc, "f93b9fdc", "%5x"},
+ {__LINE__, 0xffff0021, "FFFF0021", "%6X"},
+ {__LINE__, 0x00007cf9, "7cf9", "%3.1x"},
+ {__LINE__, -0x0000002, "-2", "%d"},
+ {__LINE__, 0x00001d84, "1d84", "%0x"},
+ {__LINE__, -0x033201e, "-3350558", "%-2.0d"},
+ {__LINE__, 0xfff8a6fb, "FFF8A6FB", "%+.7X"},
+ {__LINE__, 0x00006fff, " 28671", "% ld"},
+ {__LINE__, -0x02a274a, "-2762570", "%d"},
+ {__LINE__, -0x0006628, "-26152", "%00ld"},
+ {__LINE__, 0x00000011, "11", "%-x"},
+ {__LINE__, -0x0000ed9, "-3801", "%0.ld"},
+ {__LINE__, 0xfc5b725d, "FC5B725D", "%X"},
+ {__LINE__, 0x3530bd4e, "892386638", "%7.d"},
+ {__LINE__, 0x03bb4ff7, "62607351", "%#4.7ld"},
+ {__LINE__, 0x00009f86, "9f86", "%x"},
+ {__LINE__, 0x0000e727, "59175", "%1d"},
+ {__LINE__, 0xfffffdf2, "0XFFFFFDF2", "%#X"},
+ {__LINE__, 0x00e60dbf, "0XE60DBF", "% #1.X"},
+ {__LINE__, 0xffffffff, "FFFFFFFF", "%+X"},
+ {__LINE__, 0x0a16f44e, "0XA16F44E", "%#.0X"},
+ {__LINE__, 0x0001f97c, "1f97c", "% x"},
+ {__LINE__, 0x0000000d, "13", "%#0ld"},
+ {__LINE__, 0x0000002a, "42", "%0ld"},
+ {__LINE__, 0x00000007, " +7", "%+5ld"},
+ {__LINE__, 0xffffff7f, "FFFFFF7F", "%-X"},
+ {__LINE__, 0x000006a6, "1702", "%ld"},
+ {__LINE__, 0xfaff2fb1, "faff2fb1", "% x"},
+ {__LINE__, 0xffff94ab, "ffff94ab", "%x"},
+ {__LINE__, 0x011d611b, "0X11D611B", "%#2.3X"},
+ {__LINE__, 0x00000000, " +000", "%+#5.3ld"},
+ {__LINE__, -0x87fcc37, "-142593079", "%+d"},
+ {__LINE__, -0x0417424, "-4289572", "%+d"},
+ {__LINE__, 0x03fabc0c, "3fabc0c", "%x"},
+ {__LINE__, 0xfffff880, "fffff880", "%-x"},
+ {__LINE__, 0x000002d7, "2d7", "%-02.x"},
+ {__LINE__, 0x00003e82, "16002", "%#d"},
+ {__LINE__, -0x0003713, "-14099", "% 5d"},
+ {__LINE__, -0x0000027, "-39", "%ld"},
+ {__LINE__, 0x00013098, "0077976", "%01.7d"},
+ {__LINE__, -0x000000c, "-12", "%ld"},
+ {__LINE__, -0x00000c0, "-192", "% ld"},
+ {__LINE__, 0xffbe9285, "FFBE9285", "%3.X"},
+ {__LINE__, 0x00000046, "46", "%x"},
+ {__LINE__, 0x00000000, " ", "%+4.x"},
+ {__LINE__, 0x00011e72, "73330", "%2.3d"},
+ {__LINE__, -0x5276dd7, "-86470103", "%d"},
+ {__LINE__, 0x00000013, "19", "%-02.ld"},
+ {__LINE__, 0x384118a7, "0X384118A7", "%-#X"},
+ {__LINE__, 0x00000000, "0", "% #X"},
+ {__LINE__, 0x00000009, "9", "%#ld"},
+ {__LINE__, 0x00021145, "135493", "%-ld"},
+ {__LINE__, 0xff188a0c, "FF188A0C", "%1.X"},
+ {__LINE__, 0xffffffd5, "ffffffd5", "%0x"},
+ {__LINE__, 0xfffffffe, "FFFFFFFE", "% 0X"},
+ {__LINE__, 0xffff74a3, "ffff74a3", "%x"},
+ {__LINE__, 0x01d5a2f8, "1d5a2f8", "%-0.x"},
+ {__LINE__, 0xfffffef6, "fffffef6", "%+06.x"},
+ {__LINE__, 0x00000001, "1", "%ld"},
+ {__LINE__, 0x00000000, "+0", "%+ld"},
+ {__LINE__, 0xfffffffc, "fffffffc", "%4.x"},
+ {__LINE__, -0x0000344, "-0836", "% .4d"},
+ {__LINE__, 0xfffffffd, "FFFFFFFD", "%0X"},
+ {__LINE__, 0x000a3121, "667937", "%#4.4ld"},
+ {__LINE__, 0x0001e211, "0X1E211", "%#X"},
+ {__LINE__, 0x00000c8b, "00C8B", "%05X"},
+ {__LINE__, 0xfffffffe, "fffffffe", "%+0x"},
+ {__LINE__, 0x001a53ce, "1725390", "%d"},
+ {__LINE__, 0x0000057f, "57f ", "%-7.x"},
+ {__LINE__, -0x0073e4d, "-474701", "%#ld"},
+ {__LINE__, -0x0000002, " -2", "% 3.d"},
+ {__LINE__, 0x482dc404, "482DC404", "%X"},
+ {__LINE__, 0x0000011c, "11c", "%-.1x"},
+ {__LINE__, 0x00000c12, " 3090", "%5.3ld"},
+ {__LINE__, 0xfffe1068, "FFFE1068", "%-.4X"},
+ {__LINE__, -0x0055e88, "-351880", "%ld"},
+ {__LINE__, 0x000c9cef, "+826607", "%+d"},
+ {__LINE__, 0xffffffe3, "ffffffe3", "%0x"},
+ {__LINE__, -0x0000ee9, "-3817", "%#ld"},
+ {__LINE__, 0xff1f6daa, "FF1F6DAA", "%X"},
+ {__LINE__, 0xfffffc4e, "FFFFFC4E", "%5.2X"},
+ {__LINE__, -0x000040a, "-1034", "%d"},
+ {__LINE__, -0x0000085, "-00133", "% 01.5d"},
+ {__LINE__, -0x126c797c, "-309098876", "%5.ld"},
+ {__LINE__, 0x00000039, " 57", "% d"},
+ {__LINE__, 0xfffffff6, "0xfffffff6", "%#5.x"},
+ {__LINE__, 0xfffffff4, "fffffff4", "%7.6x"},
+ {__LINE__, 0x00000003, "3", "%ld"},
+ {__LINE__, 0x0000f8ae, "f8ae", "%.0x"},
+ {__LINE__, 0x003ca1cf, "3973583", "%#3.7d"},
+ {__LINE__, 0x14687009, "0x14687009", "%+#3x"},
+ {__LINE__, 0xfffff1f7, "0xfffff1f7", "%#4.5x"},
+ {__LINE__, 0xfffff17a, "fffff17a", "%3.x"},
+ {__LINE__, 0x0011ea18, "1174040", "%ld"},
+ {__LINE__, -0x0000019, "-25", "%03.d"},
+ {__LINE__, 0x00015d72, "0X15D72", "%-#X"},
+ {__LINE__, 0xffde4a41, "ffde4a41", "%x"},
+ {__LINE__, 0x00006f1f, "28447", "%d"},
+ {__LINE__, 0xffffffbd, "0xffffffbd", "%#.1x"},
+ {__LINE__, 0x000013b9, "13B9", "%0X"},
+ {__LINE__, -0x00001b9, "-00441", "%1.5d"},
+ {__LINE__, 0x00000001, "000001", "%-.6d"},
+ {__LINE__, 0x7b602d8f, "+2069900687", "%+0ld"},
+ {__LINE__, 0x0005e323, "+385827", "%+ld"},
+ {__LINE__, 0x00002fce, "2FCE", "%+0X"},
+ {__LINE__, 0x0000000e, "0014", "%.4d"},
+ {__LINE__, 0xffffffd6, "0XFFFFFFD6", "%#4.X"},
+ {__LINE__, 0x037bf361, "58454881", "%5.ld"},
+ {__LINE__, 0xffffffff, "FFFFFFFF", "%-7.5X"},
+ {__LINE__, -0x016d4dc, "-1496284", "%6ld"},
+ {__LINE__, 0x0005be9a, "0x5be9a", "%-#.5x"},
+ {__LINE__, 0xffffffff, "ffffffff", "%1x"},
+ {__LINE__, 0x00000055, " 85", "% 7.d"},
+ {__LINE__, 0xffffffff, "ffffffff", "%x"},
+ {__LINE__, -0x0135392, "-1266578", "% ld"},
+ {__LINE__, 0x00850f26, "8720166", "%d"},
+ {__LINE__, 0xffffee39, "ffffee39", "%0x"},
+ {__LINE__, 0x000000dd, "221", "%ld"},
+ {__LINE__, 0x00000000, " ", "%6.d"},
+ {__LINE__, 0x000000d8, "d8", "%x"},
+ {__LINE__, 0x000007ec, "002028", "%4.6ld"},
+ {__LINE__, 0x0dab4e67, "0XDAB4E67", "%#X"},
+ {__LINE__, 0xfffd7c95, "FFFD7C95", "% 4X"},
+ {__LINE__, 0x0009302d, "9302D", "%3.1X"},
+ {__LINE__, 0x00000003, " 3", "% d"},
+ {__LINE__, 0x0000082f, "82f", "%-x"},
+ {__LINE__, 0x0652517f, "652517F", "%-.2X"},
+ {__LINE__, -0x1fd8f4e3, "-534312163", "%d"},
+ {__LINE__, 0x00000176, "176", "%-x"},
+ {__LINE__, 0x00000001, "1", "%ld"},
+ {__LINE__, 0x0000001a, "1A", "%X"},
+ {__LINE__, -0x0005740, "-22336", "% 0ld"},
+ {__LINE__, 0xffffffff, "ffffffff", "%6x"},
+ {__LINE__, 0x1b273b80, "0x1b273b80", "%#x"},
+ {__LINE__, 0x00000065, "65", "%X"},
+ {__LINE__, 0x6a62138a, "1784812426", "%2ld"},
+ {__LINE__, 0x000001a2, "1A2", "%X"},
+ {__LINE__, -0x002aafd, "-174845", "%02.ld"},
+ {__LINE__, 0x00000014, "20", "%d"},
+ {__LINE__, -0x00000c7, " -199", "%7.0ld"},
+ {__LINE__, 0xff545bfd, "ff545bfd", "%-x"},
+ {__LINE__, -0x002beb9, "-179897", "%02.2ld"},
+ {__LINE__, -0x00000df, "-223", "% 02.d"},
+ {__LINE__, -0x000d569, "-54633", "%1.ld"},
+ {__LINE__, 0x0000000e, "14", "%d"},
+ {__LINE__, -0x0077407, "-488455", "% ld"},
+ {__LINE__, 0x0001be09, "114185", "%ld"},
+ {__LINE__, -0x0000514, "-01300", "%+05.5d"},
+ {__LINE__, 0xf1fb397f, "f1fb397f", "%+x"},
+ {__LINE__, 0xfdb6707c, "FDB6707C", "%X"},
+ {__LINE__, 0x03cad111, "3cad111", "%5.x"},
+ {__LINE__, -0x022e72f, "-2287407", "%d"},
+ {__LINE__, -0xda35f48, "-228810568", "%d"},
+ {__LINE__, -0x02d1fd4, "-2957268", "%1.3d"},
+ {__LINE__, 0x0000005f, "+95", "%+2d"},
+ {__LINE__, 0xfffbf8a1, "FFFBF8A1", "%4.2X"},
+ {__LINE__, 0x0000071e, " 71e", "%6.x"},
+ {__LINE__, 0x000cc8a5, "+837797", "%+03ld"},
+ {__LINE__, 0x000eebe9, " EEBE9", "%6.X"},
+ {__LINE__, -0x2896b204, "-680964612", "%d"},
+ {__LINE__, -0x09553f8, "-9786360", "%d"},
+ {__LINE__, 0x000015d3, "5587", "%0d"},
+ {__LINE__, 0x0000056d, " 56d", "%+4.x"},
+ {__LINE__, -0x00624ad, "-402605", "% ld"},
+ {__LINE__, 0xfea64ba5, "0xfea64ba5", "%#1x"},
+ {__LINE__, 0x004f35c6, "5191110", "%-ld"},
+ {__LINE__, -0x1441fe4, "-21241828", "%d"},
+ {__LINE__, 0xffffff95, "FFFFFF95", "%X"},
+ {__LINE__, 0xfffecf81, "FFFECF81", "%-2.X"},
+ {__LINE__, -0x00002bb, "-699", "%-d"},
+ {__LINE__, -0x0000c29, "-3113", "% 02ld"},
+ {__LINE__, 0x000026a3, " 9891", "% .4d"},
+ {__LINE__, 0x00000003, "3", "%-x"},
+ {__LINE__, 0x000007db, "+02011", "%+.5ld"},
+ {__LINE__, 0xfff99558, "FFF99558", "%.1X"},
+ {__LINE__, 0x0000fce6, "64742", "%4.0d"},
+ {__LINE__, 0x000b7ea2, "753314", "%ld"},
+ {__LINE__, 0x13e5df30, "0X13E5DF30", "%#2.X"},
+ {__LINE__, 0x006761c4, "06761C4", "%6.7X"},
+ {__LINE__, 0xffffff78, "FFFFFF78", "%0.X"},
+ {__LINE__, 0xfffff1c0, "0xfffff1c0", "% #x"},
+ {__LINE__, -0x034af1c, "-3452700", "% 06.1d"},
+ {__LINE__, 0x000000de, "0000222", "%2.7ld"},
+ {__LINE__, 0x000003d8, "0x3d8", "%#4.x"},
+ {__LINE__, -0x001a1d1, "-106961", "%3.1d"},
+ {__LINE__, -0x0000002, "-2", "% d"},
+ {__LINE__, 0x00001de6, "+7654", "%+0ld"},
+ {__LINE__, 0x00000001, "001", "%#.3d"},
+ {__LINE__, -0x53dacf9f, "-1406848927", "%ld"},
+ {__LINE__, 0xfffffffc, "fffffffc", "%3.3x"},
+ {__LINE__, -0x00950e8, "-610536", "%3.6ld"},
+ {__LINE__, 0xff14ade9, "FF14ADE9", "%6X"},
+ {__LINE__, 0x012f5284, "0X12F5284", "% #5X"},
+ {__LINE__, 0x00005a21, " 5a21", "%5x"},
+ {__LINE__, 0x00000638, "1592", "%2.4ld"},
+ {__LINE__, -0x063017b, "-6488443", "%ld"},
+ {__LINE__, 0x00000000, "0", "% X"},
+ {__LINE__, 0xfffe8ef2, "FFFE8EF2", "%+0X"},
+ {__LINE__, -0x0001c96, "-7318", "%.3d"},
+ {__LINE__, 0x0000ca7d, "51837", "%ld"},
+ {__LINE__, 0x00000001, "1", "%+1x"},
+ {__LINE__, 0xfffff7bc, "FFFFF7BC", "%X"},
+ {__LINE__, -0x03d15e2, "-4003298", "%ld"},
+ {__LINE__, 0xfffffffe, "fffffffe", "% x"},
+ {__LINE__, 0x00066183, "+418179", "%+7.1ld"},
+ {__LINE__, 0xffffef2e, "ffffef2e", "%-2.x"},
+ {__LINE__, 0x00000000, " 000", "%04.3x"},
+ {__LINE__, -0x000000f, "-15", "% d"},
+ {__LINE__, -0x00001f5, "-501", "%d"},
+ {__LINE__, 0x0c67f159, "c67f159", "%6.2x"},
+ {__LINE__, -0x0000006, "-6", "%.1d"},
+ {__LINE__, 0x00000005, "0X5", "%+#1X"},
+ {__LINE__, -0x0000002, " -2", "%6.ld"},
+ {__LINE__, 0xeb2183ec, "eb2183ec", "% x"},
+ {__LINE__, -0x5e12a322, "-1578279714", "%d"},
+ {__LINE__, 0x00000001, "0x1", "%#x"},
+ {__LINE__, -0x0001ea4, "-7844", "%0d"},
+ {__LINE__, -0x19955a3, "-26826147", "%d"},
+ {__LINE__, 0x000002a6, "2A6", "%2.X"},
+ {__LINE__, 0x00000002, "2", "%X"},
+ {__LINE__, 0xfffffeec, "fffffeec", "%0.4x"},
+ {__LINE__, 0xfffffffc, "fffffffc", "%0x"},
+ {__LINE__, 0xffdfe740, "FFDFE740", "% X"},
+ {__LINE__, -0x0b0b3e7, "-11580391", "%.1d"},
+ {__LINE__, 0x8e01077c, "8E01077C", "%5.7X"},
+ {__LINE__, 0x3b6b6d55, "996896085", "%1.1d"},
+ {__LINE__, 0x000016af, "5807", "%ld"},
+ {__LINE__, -0x0004900, "-18688", "%d"},
+ {__LINE__, 0xfffd77bc, "FFFD77BC", "%X"},
+ {__LINE__, 0x004cbd74, "5029236", "%0d"},
+ {__LINE__, 0x00000003, " 00003", "%6.5d"},
+ {__LINE__, 0x0004720f, "4720f", "% x"},
+ {__LINE__, 0x0e44535d, "e44535d", "%4x"},
+ {__LINE__, 0xfffffff9, "FFFFFFF9", "%3.3X"},
+ {__LINE__, -0x0000005, "-5", "%-d"},
+ {__LINE__, 0x000001a6, "00001A6", "%1.7X"},
+ {__LINE__, 0x0000004a, "4A", "%-2.X"},
+ {__LINE__, 0xfffff249, "FFFFF249", "%X"},
+ {__LINE__, 0x00004345, "4345", "%x"},
+ {__LINE__, 0x0197041d, "197041d", "%+0x"},
+ {__LINE__, 0x0000019a, " 19a", "% 6.x"},
+ {__LINE__, 0xfff98376, "FFF98376", "%X"},
+ {__LINE__, 0xfc536c41, "FC536C41", "%X"},
+ {__LINE__, -0x0008d91, "-36241", "% d"},
+ {__LINE__, 0xf058d69d, "f058d69d", "%4.x"},
+ {__LINE__, -0x00013ef, "-5103", "%d"},
+ {__LINE__, -0x0000003, "-3", "%00ld"},
+ {__LINE__, -0x09e80f0, "-10387696", "%+07ld"},
+ {__LINE__, -0x0222c15, "-2239509", "%#0.4ld"},
+ {__LINE__, 0x00000004, "4", "%0ld"},
+ {__LINE__, -0x02c6b0d, "-2910989", "% 0ld"},
+ {__LINE__, 0xfffffffe, "FFFFFFFE", "%-4X"},
+ {__LINE__, 0xffffff3d, "FFFFFF3D", "%-.0X"},
+ {__LINE__, -0x0000015, "-21", "%0d"},
+ {__LINE__, 0x131dfc90, "+320732304", "%+d"},
+ {__LINE__, 0xffffffff, "ffffffff", "%+x"},
+ {__LINE__, 0x000035c8, "13768", "%0ld"},
+ {__LINE__, 0x00000033, "0x0033", "%#.4x"},
+ {__LINE__, 0x0ce7e8c1, "0xce7e8c1", "%#.7x"},
+ {__LINE__, 0xfc18b5d2, "FC18B5D2", "%+.3X"},
+ {__LINE__, 0x00000015, "21", "%d"},
+ {__LINE__, 0x001a5e7c, "1a5e7c", "%05x"},
+ {__LINE__, -0x000fbf0, "-64496", "%ld"},
+ {__LINE__, -0x000a4f7, "-042231", "%+2.6d"},
+ {__LINE__, -0x0000002, "-002", "%3.3ld"},
+ {__LINE__, 0x00728878, "728878", "%0X"},
+ {__LINE__, -0x0000002, "-2", "%#.1ld"},
+ {__LINE__, -0x00002ef, "-751", "%-0ld"},
+ {__LINE__, 0xfffffff7, "fffffff7", "%.3x"},
+ {__LINE__, 0x00491867, "0491867", "%.7X"},
+ {__LINE__, 0x00000d4d, "3405", "%-ld"},
+ {__LINE__, 0x00234e86, "234E86", "%0X"},
+ {__LINE__, -0x000001b, "-27", "%ld"},
+ {__LINE__, 0x00275255, "2576981", "%.5ld"},
+ {__LINE__, 0xfeacc214, "0XFEACC214", "%-#3.X"},
+ {__LINE__, -0x0001ce5, "-7397", "%+#2.2ld"},
+ {__LINE__, 0x089ddb6a, "144563050", "%d"},
+ {__LINE__, 0x003d5a95, "3D5A95", "%1X"},
+ {__LINE__, 0x002f0b6d, "3083117", "%d"},
+ {__LINE__, 0x1e79e228, "511304232", "%ld"},
+ {__LINE__, 0xfffffe6b, "FFFFFE6B", "%+0X"},
+ {__LINE__, -0x5104ff3, "-84955123", "%.4ld"},
+ {__LINE__, 0xfffff1de, "FFFFF1DE", "%X"},
+ {__LINE__, 0x000000cf, "+207", "%+.1ld"},
+ {__LINE__, -0x16ad0164, "-380436836", "%+5.d"},
+ {__LINE__, 0x001fefa6, "2092966", "%ld"},
+ {__LINE__, 0x00000000, "00", "%-.2d"},
+ {__LINE__, 0x00195f45, "195f45", "%+0x"},
+ {__LINE__, 0x00000001, " 1", "%3.ld"},
+ {__LINE__, -0x00001c9, "-457", "% ld"},
+ {__LINE__, 0x0002479e, "149406", "%#ld"},
+ {__LINE__, 0x001ab18b, "1749387", "%04d"},
+ {__LINE__, 0x00000045, "69", "%ld"},
+ {__LINE__, 0xfbb13f7d, "fbb13f7d", "%.2x"},
+ {__LINE__, 0x03ddc208, "3ddc208", "%x"},
+ {__LINE__, 0x00000007, "000007", "%#.6d"},
+ {__LINE__, 0x00000000, "0", "%01X"},
+ {__LINE__, -0x0023110, "-143632", "%+0.3d"},
+ {__LINE__, 0x00000006, "06", "%#.2d"},
+ {__LINE__, 0xffff9ec9, "ffff9ec9", "%7x"},
+ {__LINE__, -0x08afb12, "-9108242", "% #0.ld"},
+ {__LINE__, 0x00000004, "4", "%X"},
+ {__LINE__, 0x00059684, "59684", "%x"},
+ {__LINE__, 0xfff8d8f5, "FFF8D8F5", "%X"},
+ {__LINE__, 0x00b7027d, "+11993725", "%+0.7ld"},
+ {__LINE__, 0x0000d814, "55316", "%0ld"},
+ {__LINE__, 0x03c95a08, "3c95a08", "%3x"},
+ {__LINE__, -0x0b65f9a, "-11952026", "%d"},
+ {__LINE__, 0xfd956021, "fd956021", "%0x"},
+ {__LINE__, 0x000000ed, "ed", "%0x"},
+ {__LINE__, -0x006a80c, "-436236", "%.6ld"},
+ {__LINE__, 0xfedb109d, "fedb109d", "%x"},
+ {__LINE__, 0x00000001, "1", "%X"},
+ {__LINE__, 0x00b3eb71, " 11791217", "% d"},
+ {__LINE__, 0x00000016, "16", "%0X"},
+ {__LINE__, 0x000001db, " 475", "% ld"},
+ {__LINE__, 0x00465eaf, "4611759", "%0d"},
+ {__LINE__, 0x0001b423, "1B423", "%0X"},
+ {__LINE__, 0x05df95ea, "5df95ea", "%+.5x"},
+ {__LINE__, 0x0000000e, " 14", "%7ld"},
+ {__LINE__, 0xffffb89e, "ffffb89e", "%+x"},
+ {__LINE__, 0x01259918, " 19241240", "% d"},
+ {__LINE__, -0x0000f8d, "-003981", "%+#.6d"},
+ {__LINE__, 0x00054ae0, "54AE0", "%X"},
+ {__LINE__, -0x4589ed4, "-72916692", "% ld"},
+ {__LINE__, 0x01017516, "1017516", "%6X"},
+ {__LINE__, 0xfffb9f15, "FFFB9F15", "%.2X"},
+ {__LINE__, 0x005f8394, "5F8394", "%.2X"},
+ {__LINE__, 0xffffffff, "ffffffff", "%x"},
+ {__LINE__, -0x0000001, " -1", "%7.1ld"},
+ {__LINE__, 0x004367af, "4417455", "%4.ld"},
+ {__LINE__, 0xffffff86, "ffffff86", "%4.5x"},
+ {__LINE__, -0x0000d17, "-3351", "%2.0ld"},
+ {__LINE__, 0xffffff31, "ffffff31", "%.6x"},
+ {__LINE__, -0x0000001, "-1", "%ld"},
+ {__LINE__, -0x3d785fab, "-1031298987", "%d"},
+ {__LINE__, -0x0000002, "-2", "%-0ld"},
+ {__LINE__, 0x0000019c, "412", "%d"},
+ {__LINE__, -0x0006f54, "-28500", "%d"},
+ {__LINE__, 0xfffe3524, "FFFE3524", "% 6.2X"},
+ {__LINE__, -0x128d3c00, "-311245824", "%2d"},
+ {__LINE__, -0x3be71293, "-1004999315", "%d"},
+ {__LINE__, 0x0000659d, "26013", "%d"},
+ {__LINE__, 0x2d947538, "+764704056", "%+5d"},
+ {__LINE__, 0xffa2a420, "FFA2A420", "%0X"},
+ {__LINE__, 0x00000001, "1", "%d"},
+ {__LINE__, 0x04477c14, "4477c14", "%.6x"},
+ {__LINE__, -0x06e145b, "-7214171", "%d"},
+ {__LINE__, 0x00009c01, "39937", "%-.1d"},
+ {__LINE__, 0xffde174b, "ffde174b", "% 0x"},
+ {__LINE__, 0x0001fbae, "1FBAE", "%01.X"},
+ {__LINE__, -0x06b8406, "-7046150", "%d"},
+ {__LINE__, 0x000005b8, "005b8", "%05x"},
+ {__LINE__, -0x02d780b, "-2979851", "%1d"},
+ {__LINE__, 0x00209e26, "2137638", "%2d"},
+ {__LINE__, 0x0000041a, "41A", "%0X"},
+ {__LINE__, 0x2a77f42c, "2A77F42C", "%02X"},
+ {__LINE__, 0x13b6ee14, "+330755604", "%+0d"},
+ {__LINE__, -0x0000002, "-2 ", "%-6.d"},
+ {__LINE__, -0x0001eee, "-7918", "% #2.ld"},
+ {__LINE__, 0xffffffff, "FFFFFFFF", "% .5X"},
+ {__LINE__, 0x20d11927, "20d11927", "% 0.x"},
+ {__LINE__, -0x0018690, "-99984", "% ld"},
+ {__LINE__, 0x000002a0, "2A0", "%-0X"},
+ {__LINE__, -0x0000511, "-1297", "%+d"},
+ {__LINE__, 0x0e782f31, "242757425", "%-0.ld"},
+ {__LINE__, 0x2ce06da0, "752905632", "%#0ld"},
+ {__LINE__, 0x00000062, "62 ", "%-07x"},
+ {__LINE__, -0x015d9d8, "-1432024", "% 7d"},
+ {__LINE__, 0xc9125ea8, "c9125ea8", "%x"},
+ {__LINE__, 0x00000006, "6", "%.0ld"},
+ {__LINE__, 0x0000019c, "19c", "%x"},
+ {__LINE__, 0x00000000, " ", "%6.d"},
+ {__LINE__, 0x00043e89, "278153", "%0ld"},
+ {__LINE__, 0x3e422abd, "1044523709", "%ld"},
+ {__LINE__, 0x0220a75d, "35694429", "%#7.6d"},
+ {__LINE__, 0x0000c21c, "C21C", "% X"},
+ {__LINE__, 0x000074ab, "29867", "%d"},
+ {__LINE__, 0x056b22aa, "56B22AA", "%+0.X"},
+ {__LINE__, 0xfffffff9, "FFFFFFF9", "%X"},
+ {__LINE__, 0x00000000, "0", "%X"},
+ {__LINE__, 0xf094a4f4, "f094a4f4", "%+4.x"},
+ {__LINE__, -0x1dad0244, "-497877572", "%d"},
+ {__LINE__, 0xffffffff, "FFFFFFFF", "%.1X"},
+ {__LINE__, 0xfffffe2d, "fffffe2d", "%7.x"},
+ {__LINE__, 0x0000042b, "0x42b", "%#x"},
+ {__LINE__, -0x0000001, "-1", "% d"},
+ {__LINE__, 0x00e77ef5, " 15171317", "% 7.ld"},
+ {__LINE__, 0x00006210, " 25104", "% 06d"},
+ {__LINE__, 0x0011187a, "1120378", "%-ld"},
+ {__LINE__, -0x000000b, "-11", "% #ld"},
+ {__LINE__, 0x14cfaff0, "14cfaff0", "%-2.3x"},
+ {__LINE__, 0xffff74ea, "FFFF74EA", "%3.X"},
+ {__LINE__, 0x000bfb9d, "bfb9d", "%x"},
+ {__LINE__, 0xfffffffe, "FFFFFFFE", "%X"},
+ {__LINE__, 0x00014500, "0X14500", "%#4.X"},
+ {__LINE__, -0x0000001, "-1", "%#1d"},
+ {__LINE__, -0x0000024, "-36", "%-0d"},
+ {__LINE__, -0x6528828, "-106072104", "%d"},
+ {__LINE__, 0x00000075, " 117", "% #d"},
+ {__LINE__, 0xff027d67, "ff027d67", "%0x"},
+ {__LINE__, 0x0012b8b3, "12b8b3", "%0.1x"},
+ {__LINE__, 0x1070147b, "275780731", "%.6ld"},
+ {__LINE__, 0xffffe88e, "FFFFE88E", "%1.3X"},
+ {__LINE__, 0xfffffc0d, "fffffc0d", "%00.6x"},
+ {__LINE__, 0xffd889f5, "ffd889f5", "%x"},
+ {__LINE__, 0x00000470, "1136", "%0ld"},
+ {__LINE__, 0x000297f8, "169976", "%ld"},
+ {__LINE__, 0xfffffffe, "fffffffe", "%+1x"},
+ {__LINE__, 0x0000064a, "64a", "%x"},
+ {__LINE__, -0x3d71e43b, "-1030874171", "%1.d"},
+ {__LINE__, -0x0000004, "-4 ", "%-3.d"},
+ {__LINE__, 0xfffff132, "FFFFF132", "%0.0X"},
+ {__LINE__, 0x37b6356f, "37b6356f", "%-x"},
+ {__LINE__, 0xffffff7a, "FFFFFF7A", "%.0X"},
+ {__LINE__, 0x00023553, "23553", "%x"},
+ {__LINE__, 0x39a4c29f, "39a4c29f", "%+5.x"},
+ {__LINE__, 0xffffffcc, "ffffffcc", "%x"},
+ {__LINE__, 0x0003a83b, "239675", "%#6ld"},
+ {__LINE__, 0x00000002, "2", "%0x"},
+ {__LINE__, -0x09b4e8c, "-10178188", "%+03.ld"},
+ {__LINE__, 0x00000002, "0000002", "%-#.7ld"},
+ {__LINE__, 0x00000b5e, "2910", "%-04ld"},
+ {__LINE__, -0x0000254, "-596", "%+0d"},
+ {__LINE__, 0x00000001, "1", "%+1.x"},
+ {__LINE__, 0xf8290d3e, "0XF8290D3E", "% #X"},
+ {__LINE__, 0x00000035, "035", "%3.3X"},
+ {__LINE__, 0x00131d7d, "131D7D ", "%-7.6X"},
+ {__LINE__, 0xffdbb36a, "0xffdbb36a", "%#.6x"},
+ {__LINE__, 0xc7275816, "c7275816", "%04.x"},
+ {__LINE__, 0x00bae994, "12249492", "%0ld"},
+ {__LINE__, 0x00000002, "+2", "%+0.0ld"},
+ {__LINE__, 0xffffffff, "ffffffff", "%0x"},
+ {__LINE__, 0xffffffe0, "ffffffe0", "%x"},
+ {__LINE__, 0x00000036, "36", "%.0X"},
+ {__LINE__, 0xfffffffd, "FFFFFFFD", "%1X"},
+ {__LINE__, 0xffffffc8, "ffffffc8", "%+x"},
+ {__LINE__, 0xe71c3689, "e71c3689", "%x"},
+ {__LINE__, 0x00000007, "7 ", "%-3.ld"},
+ {__LINE__, 0xffffffff, "ffffffff", "%x"},
+ {__LINE__, 0x00030400, "030400", "%-4.6x"},
+ {__LINE__, 0xbd8c6fa7, "BD8C6FA7", "%-6X"},
+ {__LINE__, 0x00000233, "0000563", "%.7ld"},
+ {__LINE__, 0xfef92e35, "fef92e35", "%x"},
+ {__LINE__, 0xffff2172, "ffff2172", "%3x"},
+ {__LINE__, 0x00001233, "1233", "% X"},
+ {__LINE__, -0x000d2e1, "-53985", "%-0d"},
+ {__LINE__, -0x3ba8cb5b, "-1000917851", "%0d"},
+ {__LINE__, -0x4fefb9a, "-83819418", "%5.ld"},
+ {__LINE__, 0xffffe9eb, "FFFFE9EB", "%X"},
+ {__LINE__, 0x1e472dc3, "507981251", "%ld"},
+ {__LINE__, -0x0077046, "-487494", "%0d"},
+ {__LINE__, 0x0002c4c9, "+181449", "%+7.d"},
+ {__LINE__, 0xfffffe63, "fffffe63", "%x"},
+ {__LINE__, 0xfff5a6db, "FFF5A6DB", "%X"},
+ {__LINE__, 0x00174442, "174442", "%-5.0X"},
+ {__LINE__, 0x017891d9, "17891D9", "%+5.X"},
+ {__LINE__, 0x0261966b, "261966B", "%-X"},
+ {__LINE__, -0x3e58614d, "-1045979469", "%ld"},
+ {__LINE__, 0x002c4c41, "+2903105", "%+01ld"},
+ {__LINE__, 0x0000000c, "012", "%#.3d"},
+ {__LINE__, 0x0380f73a, "58783546", "%ld"},
+ {__LINE__, 0x000002c7, "0000711", "%2.7ld"},
+ {__LINE__, 0x00000002, " 002", "% 04ld"},
+ {__LINE__, 0x00687ca0, "687CA0", "%X"},
+ {__LINE__, 0x0000058a, "1418", "%0ld"},
+ {__LINE__, -0x0000642, "-1602", "% ld"},
+ {__LINE__, 0x0001f4f1, "1F4F1", "%X"},
+ {__LINE__, 0x0026d6fc, "+2545404", "%+4.ld"},
+ {__LINE__, 0x05dd423c, "+98386492", "%+#ld"},
+ {__LINE__, 0x0000782c, "0782C", "%3.5X"},
+ {__LINE__, 0xf67d91f8, "f67d91f8", "%-x"},
+ {__LINE__, 0xffffcf2d, "ffffcf2d", "%+0x"},
+ {__LINE__, -0x00af8a6, "-719014", "%0ld"},
+ {__LINE__, -0xe606ef9, "-241200889", "%ld"},
+ {__LINE__, 0xfe9d87f7, "fe9d87f7", "%+x"},
+ {__LINE__, 0x00000d44, "d44", "% 1.x"},
+ {__LINE__, 0x008716f5, "8716f5", "%2x"},
+ {__LINE__, 0x000027d4, "27D4", "% X"},
+ {__LINE__, 0xfdfd92ea, "FDFD92EA", "%-.4X"},
+ {__LINE__, 0xfffe764f, "FFFE764F", "%X"},
+ {__LINE__, 0xff699032, "ff699032", "%3.x"},
+ {__LINE__, 0xffffffff, "FFFFFFFF", "%-3X"},
+ {__LINE__, -0x368ba995, "-915122581", "%+#.6ld"},
+ {__LINE__, 0xffffffff, "ffffffff", "%0x"},
+ {__LINE__, 0x0000035e, " 862", "% 1d"},
+ {__LINE__, 0xfe703e67, "fe703e67", "%07.0x"},
+ {__LINE__, 0xfffffffe, "fffffffe", "%4.x"},
+ {__LINE__, 0x000e20cf, "e20cf", "%0x"},
+ {__LINE__, 0x000063b5, "0X63B5", "%-#X"},
+ {__LINE__, 0xfffffffa, "fffffffa", "%+2.x"},
+ {__LINE__, 0xffffffff, "FFFFFFFF", "%2.X"},
+ {__LINE__, 0xfdfd69da, "FDFD69DA", "%.0X"},
+ {__LINE__, 0x00002f61, "0x2f61", "%#3.x"},
+ {__LINE__, 0x00000009, "9", "%x"},
+ {__LINE__, 0xffffff86, "ffffff86", "%6x"},
+ {__LINE__, 0xffffffe4, "ffffffe4", "%0x"},
+ {__LINE__, 0x0062e73b, "+6481723", "%+0ld"},
+ {__LINE__, -0x2b059130, "-721785136", "%+d"},
+ {__LINE__, -0x0000073, "-115", "%d"},
+ {__LINE__, 0xf596efcf, "f596efcf", "%x"},
+ {__LINE__, 0x0002f1cb, "2F1CB", "%0X"},
+ {__LINE__, -0x0000635, "-01589", "%.5ld"},
+ {__LINE__, 0xfffa011a, "FFFA011A", "%0X"},
+ {__LINE__, 0x00000047, " 47", "%4X"},
+ {__LINE__, 0xfffffbc0, "FFFFFBC0", "%5.2X"},
+ {__LINE__, 0x00000015, "15", "% X"},
+ {__LINE__, 0x002a87a6, "2a87a6", "%.1x"},
+ {__LINE__, -0x000069c, "-1692", "%+ld"},
+ {__LINE__, 0xfffffffd, "fffffffd", "%+x"},
+ {__LINE__, 0xfeda51f5, "FEDA51F5", "%0X"},
+ {__LINE__, 0x001781a4, "1781a4", "%-0x"},
+ {__LINE__, 0xe77358d4, "e77358d4", "%+0x"},
+ {__LINE__, 0x00000084, " 84", "%3.x"},
+ {__LINE__, 0xffff0cb2, "FFFF0CB2", "%+5.X"},
+ {__LINE__, 0x0009fa17, "653847", "%0.0ld"},
+ {__LINE__, -0x0000c92, "-3218", "%d"},
+ {__LINE__, 0x0004ebbb, "4ebbb", "%x"},
+ {__LINE__, 0x2e72568c, "+779245196", "%+#ld"},
+ {__LINE__, 0xffae86a7, "ffae86a7", "%.7x"},
+ {__LINE__, 0xffdf3f04, "ffdf3f04", "%x"},
+ {__LINE__, 0x000000c7, "199", "%2.d"},
+ {__LINE__, -0x0004a55, "-19029", "%ld"},
+ {__LINE__, 0x00564ef9, "5656313", "%.6ld"},
+ {__LINE__, 0xffffc205, "ffffc205", "%+.0x"},
+ {__LINE__, -0x135085d0, "-324044240", "%#.5d"},
+ {__LINE__, 0xfffffffe, "fffffffe", "%-7x"},
+ {__LINE__, -0x0000003, "-3", "%.1ld"},
+ {__LINE__, 0xffda9e0b, "ffda9e0b", "%+0x"},
+ {__LINE__, 0x00000001, "1", "%d"},
+ {__LINE__, 0xffffffda, "ffffffda", "%.6x"},
+ {__LINE__, 0x5efdb3d1, "+1593684945", "%+0d"},
+ {__LINE__, -0x00000ca, "-202", "% 4.d"},
+ {__LINE__, -0x0014433, "-82995", "%.3d"},
+ {__LINE__, -0x0000002, "-000002", "% .6ld"},
+ {__LINE__, 0x24aac879, "615172217", "%.7d"},
+ {__LINE__, -0x1db3c1d, "-31144989", "%+#4ld"},
+ {__LINE__, 0x000945ad, "0x945ad", "%#1x"},
+ {__LINE__, 0x0000000a, "10", "%#.1ld"},
+ {__LINE__, -0x002a2e5, "-172773", "%d"},
+ {__LINE__, 0xfffffff3, "FFFFFFF3", "%5X"},
+ {__LINE__, 0x0000000e, "e", "%+x"},
+ {__LINE__, 0x335333dc, "861090780", "%6.d"},
+ {__LINE__, 0xfffa16f4, "FFFA16F4", "%6X"},
+ {__LINE__, 0xffffc727, "ffffc727", "%+2.x"},
+ {__LINE__, 0x00000273, "273", "%x"},
+ {__LINE__, -0x000000f, "-15", "%-0d"},
+ {__LINE__, 0x00065fbd, "417725", "%5.1d"},
+ {__LINE__, 0x00000ed5, "3797", "%d"},
+ {__LINE__, 0x30a40024, "30A40024", "%3.7X"},
+ {__LINE__, 0x00000054, "84", "%ld"},
+ {__LINE__, 0x00000515, "01301", "%.5ld"},
+ {__LINE__, 0x00000897, "+02199", "%+.5d"},
+ {__LINE__, -0x0001bcc, "-7116", "% ld"},
+ {__LINE__, 0xfffffffe, "FFFFFFFE", "%7X"},
+ {__LINE__, 0x00000013, "0X13", "%#X"},
+ {__LINE__, 0xffffffff, "0xffffffff", "% #x"},
+ {__LINE__, 0x00000006, "6", "%ld"},
+ {__LINE__, -0x00000c3, "-195", "%1.ld"},
+ {__LINE__, -0x005291e, "-338206", "%+d"},
+ {__LINE__, 0xffb437a7, "FFB437A7", "%-0X"},
+ {__LINE__, 0xff8335cb, "ff8335cb", "%x"},
+ {__LINE__, 0x0000006a, "6A", "%2X"},
+ {__LINE__, -0x004f629, "-325161", "% .4d"},
+ {__LINE__, 0x003698ef, "3578095", "%0ld"},
+ {__LINE__, 0x6b5cdf3a, "6b5cdf3a", "%-x"},
+ {__LINE__, 0xe9bc5c21, "e9bc5c21", "%+x"},
+ {__LINE__, -0x0000001, " -1", "%+6.ld"},
+ {__LINE__, 0xfffeffc8, "FFFEFFC8", "%6.X"},
+ {__LINE__, 0xff070a73, "ff070a73", "%+.7x"},
+ {__LINE__, 0x0023f8ae, "2357422", "%07.4ld"},
+ {__LINE__, 0x00000000, "0", "%X"},
+ {__LINE__, 0x00000016, "16", "%0X"},
+ {__LINE__, -0x000005a, " -90", "%4d"},
+ {__LINE__, 0x00000116, "116", "% .3x"},
+ {__LINE__, 0xfffed024, "fffed024", "%-x"},
+ {__LINE__, 0xfb907950, "fb907950", "%.0x"},
+ {__LINE__, 0x0101a1e5, "101a1e5", "%x"},
+ {__LINE__, -0x09e7684, "-10385028", "%-#ld"},
+ {__LINE__, 0xffffffff, "ffffffff", "%1x"},
+ {__LINE__, 0xfffffff6, "fffffff6", "%x"},
+ {__LINE__, 0x00000078, "78", "%x"},
+ {__LINE__, 0xe6bca9c9, "0XE6BCA9C9", "%#.5X"},
+ {__LINE__, -0x0000010, "-16", "%d"},
+ {__LINE__, -0x1348f685, "-323548805", "%d"},
+ {__LINE__, 0x4dd85797, "1306023831", "%ld"},
+ {__LINE__, -0x0000080, "-128", "%.2d"},
+ {__LINE__, -0xaed13a7, "-183309223", "%+ld"},
+ {__LINE__, -0x000002f, "-47", "% d"},
+ {__LINE__, -0x679911f, "-108630303", "%ld"},
+ {__LINE__, 0xfffff221, "FFFFF221", "% .7X"},
+ {__LINE__, 0x0007476c, "7476c", "%x"},
+ {__LINE__, 0xffffe02a, "0xffffe02a", "%#7x"},
+ {__LINE__, 0x00000ebb, "0XEBB", "%#X"},
+ {__LINE__, 0xffffffff, "0XFFFFFFFF", "%-#X"},
+ {__LINE__, 0x00281896, "281896", "%+1.x"},
+ {__LINE__, 0x0000085d, " 0X85D", "%#6.3X"},
+ {__LINE__, 0x000112bf, "112BF", "%X"},
+ {__LINE__, 0xf5518fbf, "F5518FBF", "% X"},
+ {__LINE__, -0x00c945b, "-824411", "%ld"},
+ {__LINE__, 0x00001b43, "0x1b43", "%-#x"},
+ {__LINE__, -0x5872a246, "-1483907654", "%#7.7ld"},
+ {__LINE__, 0x00001f96, "8086", "%#d"},
+ {__LINE__, 0xfffffff9, "FFFFFFF9", "%X"},
+ {__LINE__, -0x006e244, "-451140", "% .3d"},
+ {__LINE__, -0x0382188, "-3678600", "%0.2ld"},
+ {__LINE__, 0x00000006, "6", "%-x"},
+ {__LINE__, 0x00000036, "54 ", "%-5.d"},
+ {__LINE__, -0x0000439, " -1081", "%#6.3ld"},
+ {__LINE__, 0xfff911c6, "FFF911C6", "%X"},
+ {__LINE__, -0x03454dc, "-3429596", "%d"},
+ {__LINE__, -0x0363e8d, "-3554957", "%-.2ld"},
+ {__LINE__, 0x00000000, "000", "%.3X"},
+ {__LINE__, -0x59bb030f, "-1505428239", "%0ld"},
+ {__LINE__, 0x073c94d8, "121410776", "%-d"},
+ {__LINE__, -0x001ef94, "-126868", "%5.1ld"},
+ {__LINE__, 0xfff65fc5, "FFF65FC5", "%0X"},
+ {__LINE__, 0xfffffff4, "fffffff4", "%-x"},
+ {__LINE__, 0x00001d83, "07555", "%5.5d"},
+ {__LINE__, 0x0012b40a, "1225738", "%ld"},
+ {__LINE__, -0x0000006, "-6", "%0ld"},
+ {__LINE__, 0xfffffffc, "fffffffc", "%06.0x"},
+ {__LINE__, -0x0000002, "-00002", "%#.5ld"},
+ {__LINE__, 0xf9932c1d, "f9932c1d", "%-x"},
+ {__LINE__, -0x46a31d9, "-74068441", "%.3ld"},
+ {__LINE__, 0x000987e9, "987E9", "%1X"},
+ {__LINE__, 0x0000000f, "15", "%-ld"},
+ {__LINE__, -0x0001c4d, "-7245", "%ld"},
+ {__LINE__, -0x007deee, "-515822", "%2.6d"},
+ {__LINE__, 0xffffffa2, "FFFFFFA2", "%.6X"},
+ {__LINE__, 0x00000001, "1", "%-ld"},
+ {__LINE__, 0xfc106bde, "fc106bde", "%.4x"},
+ {__LINE__, 0x0002f1f8, "0x2f1f8", "%#7.x"},
+ {__LINE__, -0x06a290b, "-6957323", "%-ld"},
+ {__LINE__, -0x0000037, " -55", "%4ld"},
+ {__LINE__, 0x0000152e, "5422", "%2.d"},
+ {__LINE__, 0xfffffcb2, "0XFFFFFCB2", "%#3.X"},
+ {__LINE__, 0x1b7ca086, "1b7ca086", "%+x"},
+ {__LINE__, 0x00000001, "1", "%ld"},
+ {__LINE__, 0x006775fc, "6775fc", "%3.2x"},
+ {__LINE__, 0x0000000e, "0XE", "%#3.X"},
+ {__LINE__, 0xffffffff, "0xffffffff", "%+#4.x"},
+ {__LINE__, 0x00001246, "1246", "%X"},
+ {__LINE__, 0xffffaed6, "ffffaed6", "%2x"},
+ {__LINE__, -0x3a2dec78, "-976088184", "% 0ld"},
+ {__LINE__, 0x0001423b, "1423b", "%01x"},
+ {__LINE__, 0x00000007, " 0X7", "%#4.X"},
+ {__LINE__, 0x01a7ff5a, "27787098", "%.4ld"},
+ {__LINE__, -0x0020d05, "-134405", "%-d"},
+ {__LINE__, 0xffffff9a, "ffffff9a", "%-.1x"},
+ {__LINE__, 0xffff3557, "ffff3557", "%x"},
+ {__LINE__, 0x08828e35, "8828e35", "%+.1x"},
+ {__LINE__, 0x000006b2, "001714", "%04.6ld"},
+ {__LINE__, 0x00000013, "19", "%.0ld"},
+ {__LINE__, -0x00341a5, "-213413", "%#d"},
+ {__LINE__, -0x0000043, "-67", "%d"},
+ {__LINE__, -0x074dce3, "-7658723", "%.1d"},
+ {__LINE__, -0x16de2df3, "-383659507", "% ld"},
+ {__LINE__, 0x00000000, "0", "%x"},
+ {__LINE__, 0x00000ce7, "ce7", "% 2.1x"},
+ {__LINE__, 0xffecd377, "ffecd377", "% 0x"},
+ {__LINE__, 0xa4e8465c, "a4e8465c", "% x"},
+ {__LINE__, 0x000005e8, "1512", "%d"},
+ {__LINE__, 0x00000513, "1299", "%d"},
+ {__LINE__, 0xffffffb8, "FFFFFFB8", "%X"},
+ {__LINE__, 0x00000003, "00003", "%3.5x"},
+ {__LINE__, -0x0000003, "-3 ", "%-3.ld"},
+ {__LINE__, 0xad53f01d, "ad53f01d", "%0x"},
+ {__LINE__, 0x0f1c1dae, "253500846", "%-#.0d"},
+ {__LINE__, 0xff1753c0, "0xff1753c0", "%#3.x"},
+ {__LINE__, -0x00389c5, "-231877", "%d"},
+ {__LINE__, 0x0000016e, "00016E", "%.6X"},
+ {__LINE__, -0x54d3310f, "-1423126799", "%-d"},
+ {__LINE__, 0x00000005, "0X5", "%#.1X"},
+ {__LINE__, 0xfffffffd, "0XFFFFFFFD", "%#5.3X"},
+ {__LINE__, 0xfffffe0e, "fffffe0e", "%-x"},
+ {__LINE__, 0xa3c02157, "a3c02157", "%.5x"},
+ {__LINE__, 0x00005765, "22373", "%d"},
+ {__LINE__, -0x12668cd, "-19294413", "%+ld"},
+ {__LINE__, -0x66544da, "-107300058", "%2d"},
+ {__LINE__, 0x8646c605, "0X8646C605", "% #X"},
+ {__LINE__, 0x000001f5, "1F5", "%X"},
+ {__LINE__, 0x01b33ae4, "28523236", "%5ld"},
+ {__LINE__, 0x000007ce, "7ce", "%3.x"},
+ {__LINE__, 0x00000355, "355", "%X"},
+ {__LINE__, 0x000001ce, "1CE", "% X"},
+ {__LINE__, 0xfffffccd, "fffffccd", "%7.0x"},
+ {__LINE__, -0x0000001, "-1", "%0ld"},
+ {__LINE__, 0x000640b6, "640b6", "%5.x"},
+ {__LINE__, 0x0038c4ec, "3720428", "%5.4d"},
+ {__LINE__, -0x0f10b5e, "-15797086", "%2ld"},
+ {__LINE__, 0x256c815f, "256c815f", "%4.x"},
+ {__LINE__, 0x00000682, " 1666", "%6ld"},
+ {__LINE__, -0x00000ab, "-171", "%2ld"},
+ {__LINE__, 0x00000003, "3", "%0d"},
+ {__LINE__, 0x063f5075, "63F5075", "%X"},
+ {__LINE__, 0xff83b5d0, "FF83B5D0", "%7.X"},
+ {__LINE__, 0xffffffec, "ffffffec", "%x"},
+ {__LINE__, 0xffb551c4, "0XFFB551C4", "% #4.X"},
+ {__LINE__, -0x071f057, "-7467095", "%3.7d"},
+ {__LINE__, 0x00634879, "6506617", "%#ld"},
+ {__LINE__, 0x000001d7, "471", "%d"},
+ {__LINE__, 0x00a7da92, "A7DA92", "% .4X"},
+ {__LINE__, 0x00000003, "3 ", "%-2.ld"},
+ {__LINE__, -0x0000004, "-0004", "%.4d"},
+ {__LINE__, -0x01dea32, "-1960498", "% #7.d"},
+ {__LINE__, 0x53c4159f, "53C4159F", "%1.7X"},
+ {__LINE__, -0x1ad7904, "-28145924", "%#d"},
+ {__LINE__, -0x0000a85, "-2693", "%ld"},
+ {__LINE__, -0x0000c7d, "-3197", "%d"},
+ {__LINE__, 0xfffffffc, "FFFFFFFC", "%+0X"},
+ {__LINE__, 0x00000004, "00004", "%1.5d"},
+ {__LINE__, 0x0000b761, "46945", "%5ld"},
+ {__LINE__, -0x0ee3b2c, "-15612716", "%.6d"},
+ {__LINE__, 0x0677a73d, "677a73d", "% x"},
+ {__LINE__, -0x5f96020, "-100229152", "% d"},
+ {__LINE__, 0x00000000, " 0", "%#7X"},
+ {__LINE__, -0x5d1cb5b, "-97635163", "% ld"},
+ {__LINE__, -0x00a8d8b, "-691595", "%-0ld"},
+ {__LINE__, 0xffffffa2, "FFFFFFA2", "%X"},
+ {__LINE__, 0xffffffc9, "FFFFFFC9", "%X"},
+ {__LINE__, 0x0b180d35, "B180D35", "%X"},
+ {__LINE__, 0xfc0b94ce, "fc0b94ce", "%.1x"},
+ {__LINE__, 0x0012cd7b, "12CD7B", "% X"},
+ {__LINE__, -0x02f1da8, "-3087784", "%ld"},
+ {__LINE__, -0x000a6f9, "-42745", "%-ld"},
+ {__LINE__, -0x000006d, "-109 ", "%-6d"},
+ {__LINE__, 0x00000001, "+1", "%+0d"},
+ {__LINE__, 0x00000001, "1", "%1d"},
+ {__LINE__, 0xfffffff8, "fffffff8", "%5.x"},
+ {__LINE__, -0x00fc4d7, "-1033431", "%+0.5ld"},
+ {__LINE__, 0xffff41b4, "0xffff41b4", "%#x"},
+ {__LINE__, -0x0000d37, "-3383", "%ld"},
+ {__LINE__, 0xffc4e405, "ffc4e405", "%7x"},
+ {__LINE__, 0xffffffb0, "FFFFFFB0", "%04X"},
+ {__LINE__, -0x0054477, "-345207", "%01.ld"},
+ {__LINE__, 0x00512778, "0x512778", "%#3.0x"},
+ {__LINE__, 0x00000007, " 7", "%7.d"},
+ {__LINE__, 0x00000008, " 00008", "% .5ld"},
+ {__LINE__, 0x000053fd, "21501", "%.4ld"},
+ {__LINE__, 0x0000370c, "370c", "%2x"},
+ {__LINE__, -0x44670a7, "-71725223", "%3d"},
+ {__LINE__, 0x00000064, " 64", "%+5x"},
+ {__LINE__, 0xfffffffc, "FFFFFFFC", "%X"},
+ {__LINE__, 0xf7bbf094, "f7bbf094", "%3x"},
+ {__LINE__, 0xfffeb268, "FFFEB268", "%X"},
+ {__LINE__, 0x00001ef0, "1ef0", "%4.x"},
+ {__LINE__, 0x05ad9aa4, " 95263396", "% 0.ld"},
+ {__LINE__, 0xf294dca7, "F294DCA7", "% 4.X"},
+ {__LINE__, -0x0000003, "-000003", "%.6d"},
+ {__LINE__, 0xfff57471, "fff57471", "% x"},
+ {__LINE__, 0x0a848cfd, "176459005", "%d"},
+ {__LINE__, -0x000002e, "-46", "%.0d"},
+ {__LINE__, 0x00000051, " +81", "%+5d"},
+ {__LINE__, -0x000072b, "-0001835", "%06.7d"},
+ {__LINE__, -0x0000002, " -2", "%+#6ld"},
+ {__LINE__, 0x00000003, "3", "%x"},
+ {__LINE__, 0xfffd1799, "FFFD1799", "%6.X"},
+ {__LINE__, 0x00000005, "5", "%ld"},
+ {__LINE__, 0x0052138b, "5378955", "%#7.7ld"},
+ {__LINE__, 0x000000c0, " 192", "% 7ld"},
+ {__LINE__, 0x005b26cd, "5B26CD", "%X"},
+ {__LINE__, -0x008df17, "-581399", "%.4ld"},
+ {__LINE__, 0xfffffad8, "fffffad8", "%-x"},
+ {__LINE__, 0x000006a9, "6a9", "%.0x"},
+ {__LINE__, -0x003b7f9, "-243705", "%+0ld"},
+ {__LINE__, 0x005d7ea4, "6127268", "%ld"},
+ {__LINE__, -0x003ccea, "-249066", "%+.0ld"},
+ {__LINE__, 0x0000846f, "846F", "%X"},
+ {__LINE__, 0x00004f79, "4F79", "%4.X"},
+ {__LINE__, 0xe3e1409c, "E3E1409C", "%-X"},
+ {__LINE__, 0x07cce2f4, "7CCE2F4", "%2.X"},
+ {__LINE__, 0x004bcc8b, "4967563", "%-.5ld"},
+ {__LINE__, 0x7d49665e, "2101962334", "%ld"},
+ {__LINE__, 0xfffffffc, "FFFFFFFC", "%.5X"},
+ {__LINE__, 0x0000019e, "+000414", "%+.6d"},
+ {__LINE__, 0x000027ef, "10223", "%d"},
+ {__LINE__, -0x0000261, "-609", "%3ld"},
+ {__LINE__, -0x000000e, "-14", "% 2.ld"},
+ {__LINE__, 0xff3ba3c7, "ff3ba3c7", "%+5.7x"},
+ {__LINE__, 0xffffffc4, "FFFFFFC4", "%-1.X"},
+ {__LINE__, 0xfffc5a70, "0xfffc5a70", "%#4.4x"},
+ {__LINE__, 0x0000d156, " 53590", "% d"},
+ {__LINE__, -0x0486258, "-4743768", "%0ld"},
+ {__LINE__, 0x00000000, " ", "% 2.d"},
+ {__LINE__, 0x04a0ef9f, "77655967", "%0.6ld"},
+ {__LINE__, 0xffffffff, "FFFFFFFF", "%X"},
+ {__LINE__, 0x00000019, "0000019", "%.7x"},
+ {__LINE__, -0x0058d3a, "-363834", "%ld"},
+ {__LINE__, 0xfffff6b3, "fffff6b3", "%x"},
+ {__LINE__, 0xfffffff5, "FFFFFFF5", "%.0X"},
+ {__LINE__, 0x005e1fcb, "5E1FCB", "%+6X"},
+ {__LINE__, 0xffc3c866, "0xffc3c866", "%-#.4x"},
+ {__LINE__, 0x00000003, "3", "%X"},
+ {__LINE__, 0xffa2e961, "FFA2E961", "%7.4X"},
+ {__LINE__, 0x00000029, "41", "%d"},
+ {__LINE__, -0x0000035, "-53", "%d"},
+ {__LINE__, 0x0001b033, "110643", "%ld"},
+ {__LINE__, 0x004dd51b, "5100827", "%-2ld"},
+ {__LINE__, -0x000252d, "-9517", "% d"},
+ {__LINE__, 0xffffdeb2, "ffffdeb2", "%4.x"},
+ {__LINE__, 0xffe94eab, "0xffe94eab", "%#x"},
+ {__LINE__, 0xf921edf6, "f921edf6", "%4.2x"},
+ {__LINE__, 0x0007df97, "515991", "%4.ld"},
+ {__LINE__, 0x00709bc5, "709BC5", "%0X"},
+ {__LINE__, -0x0000001, "-1", "%d"},
+ {__LINE__, 0xfffffffb, "FFFFFFFB", "%7.3X"},
+ {__LINE__, -0x0063f74, "-409460", "%+05.0d"},
+ {__LINE__, 0xfffffe9a, "FFFFFE9A", "%.2X"},
+ {__LINE__, -0x0001ce2, "-7394", "%.4d"},
+ {__LINE__, 0x000038c5, "14533", "%ld"},
+ {__LINE__, 0x000000ad, "000ad", "% 5.5x"},
+ {__LINE__, 0xffffbcc4, "ffffbcc4", "%-5x"},
+ {__LINE__, 0x00000000, "0", "% X"},
+ {__LINE__, 0x00372877, "372877", "%.6X"},
+ {__LINE__, 0xffffffd7, "FFFFFFD7", "%1.X"},
+ {__LINE__, 0xfa58b14b, "fa58b14b", "%x"},
+ {__LINE__, 0xfffffd9f, "FFFFFD9F", "%0.7X"},
+ {__LINE__, 0x00000710, "+1808", "%+#.2ld"},
+ {__LINE__, 0x00000006, " 6", "%5.0ld"},
+ {__LINE__, 0x0fba9706, "263886598", "%-6.3d"},
+ {__LINE__, 0xffff420a, "ffff420a", "%-2x"},
+ {__LINE__, 0x14b9a825, "14b9a825", "%x"},
+ {__LINE__, 0x0077ffe4, "77FFE4", "%+.2X"},
+ {__LINE__, 0x00067108, "422152 ", "%-7.ld"},
+ {__LINE__, 0x00000001, " 00001", "%6.5X"},
+ {__LINE__, 0x00000000, "0", "%ld"},
+ {__LINE__, -0x0000001, " -1", "% 7ld"},
+ {__LINE__, 0x01ddc7a3, "31311779", "%d"},
+ {__LINE__, -0x2a92f9b, "-44642203", "% 3ld"},
+ {__LINE__, 0xfffffff9, "fffffff9", "%4.6x"},
+ {__LINE__, 0x0279a274, "279a274", "%x"},
+ {__LINE__, 0x2e37ed8e, "775417230", "%d"},
+ {__LINE__, 0x5ba59f58, "1537580888", "%-ld"},
+ {__LINE__, 0xffffffe0, "ffffffe0", "%x"},
+ {__LINE__, 0x3110ae47, "0X3110AE47", "%+#X"},
+ {__LINE__, 0x000e00b9, "917689", "%d"},
+ {__LINE__, 0x0000002e, " 0046", "% 7.4d"},
+ {__LINE__, 0x00000363, " 867", "%7.d"},
+ {__LINE__, -0x000000b, "-0011", "% 0.4d"},
+ {__LINE__, 0x000349c8, " 349C8", "% 7.X"},
+ {__LINE__, -0x01358f1, "-1267953", "%d"},
+ {__LINE__, -0x0039d3c, "-236860", "%-.3d"},
+ {__LINE__, 0xffd6de19, "ffd6de19", "%04.0x"},
+ {__LINE__, -0x0003c54, "-0015444", "%1.7d"},
+ {__LINE__, -0x0000e17, "-3607", "%d"},
+ {__LINE__, 0xff0fa3a9, "ff0fa3a9", "%+3x"},
+ {__LINE__, 0x00000009, "0000009", "%1.7x"},
+ {__LINE__, 0xfffffc81, "FFFFFC81", "% X"},
+ {__LINE__, -0x4ef2df5, "-82783733", "%ld"},
+ {__LINE__, 0x00000013, "19", "%-ld"},
+ {__LINE__, 0x00000000, " 0", "%#7x"},
+ {__LINE__, -0x3b9485fd, "-999589373", "%1.d"},
+ {__LINE__, -0x0000006, "-00006", "%6.5d"},
+ {__LINE__, 0x0000003f, "+63", "%+ld"},
+ {__LINE__, 0x000004c5, "1221", "%1.d"},
+ {__LINE__, 0x003f8a8c, "4164236", "%d"},
+ {__LINE__, -0x000001e, "-30", "%-#3d"},
+ {__LINE__, 0xfff9d230, "FFF9D230", "%+07.3X"},
+ {__LINE__, 0x0147cf17, "147cf17", "% x"},
+ {__LINE__, 0xffffffeb, "ffffffeb", "%x"},
+ {__LINE__, 0x0000007d, "00125", "%.5ld"},
+ {__LINE__, 0x000fff56, "1048406", "%#3d"},
+ {__LINE__, 0x064307a0, " 105056160", "% 0.3ld"},
+ {__LINE__, 0x007d2860, "8202336", "%-.2d"},
+ {__LINE__, 0x00a05711, "a05711", "%x"},
+ {__LINE__, 0x179a7f9e, "0x179a7f9e", "%+#.3x"},
+ {__LINE__, 0x00000003, "3", "%X"},
+ {__LINE__, -0x0001d7d, "-7549", "%#5d"},
+ {__LINE__, 0x0025d3f2, "+2479090", "%+2.d"},
+ {__LINE__, -0x0000001, "-1", "%#ld"},
+ {__LINE__, 0xfffffdd5, "fffffdd5", "%.7x"},
+ {__LINE__, 0x003462b9, "3433145", "%d"},
+ {__LINE__, 0x00005a81, "23169", "%d"},
+ {__LINE__, 0xfffffcdb, "fffffcdb", "%-x"},
+ {__LINE__, 0x00000000, "0", "%d"},
+ {__LINE__, 0xfff22085, "fff22085", "%x"},
+ {__LINE__, 0x00016d72, " 93554", "% d"},
+ {__LINE__, -0x0000002, "-2", "%0ld"},
+ {__LINE__, 0xfffffd21, "fffffd21", "% 0x"},
+ {__LINE__, 0x00000931, "2353", "%ld"},
+ {__LINE__, 0x00010021, "10021", "%5.1X"},
+ {__LINE__, -0x000007e, "-126", "%1.0ld"},
+ {__LINE__, 0xfffffff8, "fffffff8", "%01.x"},
+ {__LINE__, -0x001d148, "-119112", "%d"},
+ {__LINE__, -0x0000008, "-8", "%ld"},
+ {__LINE__, -0x000038e, "-910", "% ld"},
+ {__LINE__, 0x0039e3e5, "3793893", "%0.1d"},
+ {__LINE__, 0x0038fb8e, "38FB8E", "%.2X"},
+ {__LINE__, -0x002dafa, "-187130", "%ld"},
+ {__LINE__, -0xbec275b, "-200025947", "%ld"},
+ {__LINE__, 0x1a32f999, "1A32F999", "%05.4X"},
+ {__LINE__, 0x0000002f, "2f", "%x"},
+ {__LINE__, -0x0001a5b, "-6747", "%+3.ld"},
+ {__LINE__, 0x00000762, " 1890", "%7.ld"},
+ {__LINE__, 0x000000c2, "000194", "%0.6ld"},
+ {__LINE__, 0xffff002b, "FFFF002B", "%.4X"},
+ {__LINE__, -0x0019dae, "-105902", "% .2d"},
+ {__LINE__, 0x0000125f, "125f", "%+1x"},
+ {__LINE__, -0x000b688, " -46728", "%#7.d"},
+ {__LINE__, 0x000401ca, "401ca", "%0x"},
+ {__LINE__, 0x00000192, "402", "%#ld"},
+ {__LINE__, 0xffffffff, "ffffffff", "%x"},
+ {__LINE__, 0x1e505a0c, "0X1E505A0C", "%#1.3X"},
+ {__LINE__, 0x000f8f6c, "1019756", "%d"},
+ {__LINE__, 0x0004a296, "4a296", "%5.2x"},
+ {__LINE__, 0x00000003, "3", "% x"},
+ {__LINE__, -0x000d44c, "-54348", "%#ld"},
+ {__LINE__, 0x00009ae2, "39650", "%-d"},
+ {__LINE__, 0xffffff3a, "FFFFFF3A", "% .7X"},
+ {__LINE__, 0x0042350b, "4338955", "%d"},
+ {__LINE__, 0x000071af, "71af", "%+.4x"},
+ {__LINE__, 0x00000001, "0x1", "%#0x"},
+ {__LINE__, 0x00000033, "00051", "%3.5d"},
+ {__LINE__, 0x00000001, "1", "%X"},
+ {__LINE__, -0xebfb0e7, "-247443687", "%+3ld"},
+ {__LINE__, 0x00000027, "27 ", "%-07.X"},
+ {__LINE__, -0x0004837, "-18487", "%01d"},
+ {__LINE__, 0x1a8c53da, "1A8C53DA", "%X"},
+ {__LINE__, -0x0bdb8a9, "-12433577", "%d"},
+ {__LINE__, -0x0000098, "-152", "%#ld"},
+ {__LINE__, -0x003b554, "-243028", "%d"},
+ {__LINE__, 0x000000cb, "00000CB", "%+.7X"},
+ {__LINE__, 0xfffffeda, "FFFFFEDA", "%X"},
+ {__LINE__, -0x0000010, "-16", "%-#d"},
+ {__LINE__, 0x00000006, "+6", "%+d"},
+ {__LINE__, 0x003c294a, "+3942730", "%+4.ld"},
+ {__LINE__, 0x00000009, "9", "%ld"},
+ {__LINE__, 0xfbbdd2bc, "FBBDD2BC", "% X"},
+ {__LINE__, 0x71c86678, "+1908958840", "%+0.6ld"},
+ {__LINE__, -0x0b49bff, "-11836415", "% 6.ld"},
+ {__LINE__, 0xfff416be, "fff416be", "%3.x"},
+ {__LINE__, 0x00000077, "+119", "%+d"},
+ {__LINE__, 0xfff1cfaa, "FFF1CFAA", "% 0.2X"},
+ {__LINE__, 0xfffffffb, "fffffffb", "% x"},
+ {__LINE__, 0x0000127e, "4734", "%d"},
+ {__LINE__, 0x00107ad2, "107ad2", "%+2.6x"},
+ {__LINE__, 0x0006b8e9, "440553", "%-#d"},
+ {__LINE__, 0x0000eb6f, "eb6f", "% x"},
+ {__LINE__, 0x00001f18, "7960", "%0d"},
+ {__LINE__, 0xfffff225, "fffff225", "%1.5x"},
+ {__LINE__, 0xfffffff9, "fffffff9", "%+6.x"},
+ {__LINE__, 0x000005b9, "01465", "%.5ld"},
+ {__LINE__, 0xfffc26b8, "FFFC26B8", "% X"},
+ {__LINE__, 0x540d580d, "0X540D580D", "%+#X"},
+ {__LINE__, 0x05ad7094, "5AD7094", "% 4.7X"},
+ {__LINE__, -0x000019b, "-411", "% d"},
+ {__LINE__, 0x00000006, "000006", "%6.6ld"},
+ {__LINE__, 0x0000026a, "+618", "%+ld"},
+ {__LINE__, 0x0000000b, "11", "%ld"},
+ {__LINE__, -0x26985d5, "-40469973", "%#.0ld"},
+ {__LINE__, 0x0000007d, "7D", "%+02.0X"},
+ {__LINE__, -0x0079ddf, "-0499167", "%+.7ld"},
+ {__LINE__, 0x0000375f, "14175", "%0d"},
+ {__LINE__, -0x18de7f99, "-417234841", "%ld"},
+ {__LINE__, -0x00507cc, "-329676", "%.0d"},
+ {__LINE__, 0x000029d5, "29D5", "%-2.1X"},
+ {__LINE__, 0x0000328c, "328C", "%-3.X"},
+ {__LINE__, 0x016f6234, "24076852", "%3.ld"},
+ {__LINE__, 0xfffffffc, "0XFFFFFFFC", "%#.5X"},
+ {__LINE__, 0xfe6163ca, "FE6163CA", "%5.X"},
+ {__LINE__, 0xffffffc2, "FFFFFFC2", "%X"},
+ {__LINE__, 0x00000087, "+135", "%+ld"},
+ {__LINE__, 0x00310166, "310166", "% x"},
+ {__LINE__, 0x00e8c871, "15255665", "%d"},
+ {__LINE__, 0x000005ee, "1518", "%ld"},
+ {__LINE__, 0xfcb24306, "FCB24306", "%X"},
+ {__LINE__, 0x0000000b, " 11", "%5ld"},
+ {__LINE__, 0x006d11d0, "0x6d11d0", "%#.0x"},
+ {__LINE__, 0x0010d416, "1102870", "%#6.5d"},
+ {__LINE__, -0x0047cb3, "-294067", "%.3d"},
+ {__LINE__, 0x000000c0, "c0", "%x"},
+ {__LINE__, 0xffffffff, "FFFFFFFF", "%+X"},
+ {__LINE__, -0x000000a, "-10", "%d"},
+ {__LINE__, -0x0000007, "-7", "% ld"},
+ {__LINE__, 0xfffffffe, "FFFFFFFE", "%-X"},
+ {__LINE__, 0x00000014, "0x14", "%-#3.1x"},
+ {__LINE__, 0x00003319, "3319", "% x"},
+ {__LINE__, 0x00000000, "00", "%+#.2X"},
+ {__LINE__, -0x0000009, "-9", "% ld"},
+ {__LINE__, -0x0000001, "-1 ", "%-3ld"},
+ {__LINE__, 0x00262909, "2500873", "%.5ld"},
+ {__LINE__, 0x33e76560, "33e76560", "%7.0x"},
+ {__LINE__, -0x0000002, "-2", "%ld"},
+ {__LINE__, 0x00035ee9, "35EE9", "%-3.X"},
+ {__LINE__, -0x0000235, "-565", "%+4.ld"},
+ {__LINE__, -0x3ea63c5, "-65692613", "%d"},
+ {__LINE__, 0x00000003, "3", "%ld"},
+ {__LINE__, -0x003362f, "-210479", "% d"},
+ {__LINE__, -0x1a819f8a, "-444702602", "%.7d"},
+ {__LINE__, 0x027a4668, "41567848", "%d"},
+ {__LINE__, 0x0002b025, "2b025", "%x"},
+ {__LINE__, -0x0000001, "-001", "%.3ld"},
+ {__LINE__, 0xfffffff0, "fffffff0", "%-0x"},
+ {__LINE__, -0x0000d4f, "-3407", "%-ld"},
+ {__LINE__, 0x00000146, " 326", "% 1.d"},
+ {__LINE__, -0x0000006, "-6", "%d"},
+ {__LINE__, 0xffffffff, "FFFFFFFF", "%06.4X"},
+ {__LINE__, 0x376fddae, "+930078126", "%+#0ld"},
+ {__LINE__, 0x006d9da3, "6d9da3", "%1.x"},
+ {__LINE__, -0x0000f28, "-3880", "%3.2ld"},
+ {__LINE__, 0x0006962c, " 431660", "% 5d"},
+ {__LINE__, 0x000011db, " 4571", "%6.ld"},
+ {__LINE__, 0xffffffa8, "ffffffa8", "%+x"},
+ {__LINE__, 0x0d886db3, "D886DB3", "%.7X"},
+ {__LINE__, 0x00000000, "000000", "%2.6ld"},
+ {__LINE__, 0xfffff6b6, "FFFFF6B6", "% X"},
+ {__LINE__, -0x0739068, "-7573608", "%+6.ld"},
+ {__LINE__, 0xfba62553, "0XFBA62553", "%#X"},
+ {__LINE__, -0x4474bc5, "-71781317", "%-2ld"},
+ {__LINE__, 0xffffff95, "FFFFFF95", "% 2.X"},
+ {__LINE__, -0x1d0e1ca, "-30466506", "%+.0d"},
+ {__LINE__, -0x000f3aa, "-62378", "%ld"},
+ {__LINE__, 0x00000026, "26", "%1x"},
+ {__LINE__, 0x001c5400, "1856512", "%-#d"},
+ {__LINE__, 0x03808442, "3808442", "%X"},
+ {__LINE__, -0x0000081, "-129", "%+#ld"},
+ {__LINE__, 0x000004ae, " 1198", "% 3.4d"},
+ {__LINE__, -0x7f4ed54, "-133492052", "%d"},
+ {__LINE__, 0x00000000, "+0", "%+ld"},
+ {__LINE__, 0x00000000, "0", "%+x"},
+ {__LINE__, 0x004c7e46, "5013062", "%.0d"},
+ {__LINE__, -0x647d7a65, "-1685944933", "%0.2d"},
+ {__LINE__, 0x00003b59, "15193", "%-#1d"},
+ {__LINE__, 0xfff3e64d, "FFF3E64D", "%-X"},
+ {__LINE__, 0x00007022, "28706", "%-d"},
+ {__LINE__, 0xc28d0ad8, "c28d0ad8", "%+x"},
+ {__LINE__, -0x005c208, "-377352", "% ld"},
+ {__LINE__, 0x00cfbadc, "13613788", "%d"},
+ {__LINE__, 0x000016ea, "5866", "%0d"},
+ {__LINE__, 0x00000029, "29", "%X"},
+ {__LINE__, 0xffe16813, "0XFFE16813", "%+#X"},
+ {__LINE__, 0x00000004, "4", "%0X"},
+ {__LINE__, -0x0000096, " -150", "%5d"},
+ {__LINE__, 0x00027ac7, "162503", "%ld"},
+ {__LINE__, -0x0075de0, "-482784", "%d"},
+ {__LINE__, 0x005fcff6, "6279158", "%d"},
+ {__LINE__, 0xffffffef, "FFFFFFEF", "%3X"},
+ {__LINE__, 0x267b05ec, "645596652", "%4ld"},
+ {__LINE__, 0xa487b724, "a487b724", "%x"},
+ {__LINE__, 0x01da2a11, "31074833", "%-.0ld"},
+ {__LINE__, 0xffffffff, "FFFFFFFF", "%X"},
+ {__LINE__, 0x0000037a, "37a", "%x"},
+ {__LINE__, 0x003d0314, "+3998484", "%+#1d"},
+ {__LINE__, 0x0000011b, " 283", "%5.2d"},
+ {__LINE__, 0x094f6066, "94f6066", "%x"},
+ {__LINE__, 0x00000004, "4", "%X"},
+ {__LINE__, -0x102e14bd, "-271455421", "% 7.ld"},
+ {__LINE__, 0x000048da, "0018650", "%07ld"},
+ {__LINE__, -0x24ae0390, "-615383952", "%0.6d"},
+ {__LINE__, 0xffff5159, "0XFFFF5159", "%#0X"},
+ {__LINE__, 0xfffd38c3, "fffd38c3", "%x"},
+ {__LINE__, 0xfffff9ea, "FFFFF9EA", "%-X"},
+ {__LINE__, -0x000fd28, "-64808", "% ld"},
+ {__LINE__, 0x002c1bf4, "2890740", "%-.1d"},
+ {__LINE__, 0x00d00ee7, "D00EE7", "%0.4X"},
+ {__LINE__, 0x00000cf9, "3321", "%0d"},
+ {__LINE__, -0x0000001, "-1", "%-#ld"},
+ {__LINE__, 0xfffffd75, "FFFFFD75", "%.2X"},
+ {__LINE__, 0x00000012, "18", "%-d"},
+ {__LINE__, 0xfd44b4b2, "fd44b4b2", "%+5.x"},
+ {__LINE__, -0x001c53f, "-116031", "%-#6.d"},
+ {__LINE__, 0x000ff6fd, "ff6fd", "%2x"},
+ {__LINE__, 0x00000001, "1", "%0d"},
+ {__LINE__, 0x0120b478, "120B478", "%.7X"},
+ {__LINE__, 0x0145591e, "145591E", "%1.4X"},
+ {__LINE__, 0x001f99b9, "1F99B9", "%.1X"},
+ {__LINE__, 0xffffd078, "ffffd078", "%-1.5x"},
+ {__LINE__, 0xffffff1a, "FFFFFF1A", "%-4.6X"},
+ {__LINE__, 0xfffffffa, "fffffffa", "%x"},
+ {__LINE__, -0x00000b9, "-185", "%3ld"},
+ {__LINE__, 0x00001cf0, "7408", "%-ld"},
+ {__LINE__, 0xffffffff, "FFFFFFFF", "%X"},
+ {__LINE__, 0x00151f30, "151F30", "%X"},
+ {__LINE__, -0x0000103, "-259", "%d"},
+ {__LINE__, -0x000303f, "-12351", "%d"},
+ {__LINE__, 0x000002ca, "714", "%ld"},
+ {__LINE__, -0x0000c55, "-3157", "%1d"},
+ {__LINE__, 0x00000691, "01681", "%#.5ld"},
+ {__LINE__, 0x00230537, "2295095", "%#d"},
+ {__LINE__, 0x032a1faa, "53092266", "%.4d"},
+ {__LINE__, 0x000050d7, "20695", "%d"},
+ {__LINE__, -0x0c7ad4c, "-13086028", "%#.4ld"},
+ {__LINE__, -0x00009d9, "-2521", "%+d"},
+ {__LINE__, 0xfffffffe, "fffffffe", "%0x"},
+ {__LINE__, 0xffdec2d9, "FFDEC2D9", "%5.1X"},
+ {__LINE__, -0x000563c, "-22076", "%-.2ld"},
+ {__LINE__, 0x0073b36a, "0x73b36a", "%-#x"},
+ {__LINE__, 0xfffffffd, "fffffffd", "%x"},
+ {__LINE__, 0x0193ba5a, "193ba5a", "%1.x"},
+ {__LINE__, 0x00d147b5, "13715381", "%2.d"},
+ {__LINE__, 0xffffff10, "ffffff10", "%4x"},
+ {__LINE__, 0x000648d5, "648d5", "%1.3x"},
+ {__LINE__, 0x00000011, "11", "%X"},
+ {__LINE__, 0xff259f5b, "0xff259f5b", "% #.1x"},
+ {__LINE__, 0x00000175, "175", "%x"},
+ {__LINE__, 0x00000000, "0", "%ld"},
+ {__LINE__, 0x00000015, "21", "%#ld"},
+ {__LINE__, 0xfffffffe, "fffffffe", "%-x"},
+ {__LINE__, 0x00000013, " 19", "% 0ld"},
+ {__LINE__, -0x0000001, "-0000001", "% 5.7ld"},
+ {__LINE__, 0x0000139d, "139D", "%X"},
+ {__LINE__, 0x0041ad18, "41ad18", "%-.6x"},
+ {__LINE__, -0x00000f9, "-249", "% 3.d"},
+ {__LINE__, 0x00000076, "118", "%ld"},
+ {__LINE__, 0x000006f8, "1784", "%d"},
+ {__LINE__, -0x0000005, "-5", "%ld"},
+ {__LINE__, -0x00008e7, "-2279", "%+ld"},
+ {__LINE__, 0x00003f77, "3F77", "%+0X"},
+ {__LINE__, 0x000ca3f8, "0XCA3F8", "%+#X"},
+ {__LINE__, -0x00004bf, "-001215", "%#5.6ld"},
+ {__LINE__, 0x319129ab, "0x319129ab", "%+#x"},
+ {__LINE__, -0x0000002, "-2", "%ld"},
+ {__LINE__, -0x0f6686e, "-16148590", "%.6ld"},
+ {__LINE__, 0x0329576b, "53041003", "%2.d"},
+ {__LINE__, -0x000179e, "-6046", "%d"},
+ {__LINE__, 0x000002cc, "+716", "%+1.3ld"},
+ {__LINE__, 0xfffffff7, "0xfffffff7", "% #x"},
+ {__LINE__, 0x0016eb40, "1502016", "%ld"},
+ {__LINE__, 0x00000003, "3", "%-0ld"},
+ {__LINE__, 0x0023e0d6, "23E0D6", "%-05.X"},
+ {__LINE__, 0xffffa6a4, "0XFFFFA6A4", "%#X"},
+ {__LINE__, 0x00087664, "87664", "% .2x"},
+ {__LINE__, -0x0000002, " -2", "%3.ld"},
+ {__LINE__, 0x003ad85d, "3AD85D", "%X"},
+ {__LINE__, 0x00002f20, "12064", "%ld"},
+ {__LINE__, 0x02030bfc, "2030BFC", "%02.3X"},
+ {__LINE__, 0xfffff36a, "FFFFF36A", "%X"},
+ {__LINE__, 0xfe0729ff, "0xfe0729ff", "% #.0x"},
+ {__LINE__, 0xfec15164, "FEC15164", "%0.2X"},
+ {__LINE__, -0x00169ec, "-92652", "%+d"},
+ {__LINE__, 0x006d7990, "0x6d7990", "%#x"},
+ {__LINE__, 0xffcc89e6, "ffcc89e6", "%x"},
+ {__LINE__, 0x002d7cca, "2981066", "%7.7ld"},
+ {__LINE__, -0x1649692b, "-373909803", "%#ld"},
+ {__LINE__, 0x00664f47, "664f47", "%+6.x"},
+ {__LINE__, 0x00000000, "0", "% X"},
+ {__LINE__, 0x00000047, "000047", "%.6X"},
+ {__LINE__, 0x00000007, "0000007", "%.7ld"},
+ {__LINE__, 0x00000030, "30", "%-x"},
+ {__LINE__, -0x25bcbabb, "-633125563", "% ld"},
+ {__LINE__, 0xfe11c031, "FE11C031", "%4.6X"},
+ {__LINE__, -0x0000001, "-0000001", "%.7d"},
+ {__LINE__, 0x00b56d84, "11890052", "%ld"},
+ {__LINE__, -0x0000b01, "-0002817", "%+07.7ld"},
+ {__LINE__, 0xffffe4ad, "ffffe4ad", "% 0.0x"},
+ {__LINE__, 0x007760fc, "7760fc", "%+x"},
+ {__LINE__, 0xffef44d8, "FFEF44D8", "%X"},
+ {__LINE__, 0xfcb6862e, "fcb6862e", "%+x"},
+ {__LINE__, -0x0000001, "-1", "%0d"},
+ {__LINE__, 0xffffffe6, "FFFFFFE6", "%3.1X"},
+ {__LINE__, 0xff816e27, "FF816E27", "% 6.X"},
+ {__LINE__, 0x00006415, "25621", "%ld"},
+ {__LINE__, -0xfae5449, "-263083081", "%0ld"},
+ {__LINE__, 0x00000001, " 1", "% 0d"},
+ {__LINE__, 0x00000009, " 9", "%2.X"},
+ {__LINE__, 0x002d7e18, "2981400", "%7d"},
+ {__LINE__, -0x00000fc, "-0000252", "%-#.7d"},
+ {__LINE__, 0x00000003, "3", "%0x"},
+ {__LINE__, 0x0d46e47f, "222749823", "%ld"},
+ {__LINE__, 0xfffcbc52, "FFFCBC52", "%+X"},
+ {__LINE__, 0x00000000, "0", "%-X"},
+ {__LINE__, 0xfffff0e5, "fffff0e5", "%x"},
+ {__LINE__, 0xffffffd9, "FFFFFFD9", "%07X"},
+ {__LINE__, 0x000004ee, "4ee", "%0x"},
+ {__LINE__, 0xffffffff, "ffffffff", "%0x"},
+ {__LINE__, -0x0008cb4, "-036020", "%+3.6ld"},
+ {__LINE__, 0x0000dada, "0xdada", "%#0.x"},
+ {__LINE__, 0x0000001a, "26 ", "%-4d"},
+ {__LINE__, -0x000000c, " -12", "%04.d"},
+ {__LINE__, 0x0000025c, " 25c", "%7.x"},
+ {__LINE__, 0xfe9b091e, "FE9B091E", "%X"},
+ {__LINE__, 0x00000002, " 2", "%07.ld"},
+ {__LINE__, -0x0004930, "-18736", "% 6.d"},
+ {__LINE__, 0xffffffe9, "FFFFFFE9", "%X"},
+ {__LINE__, 0x00000003, " 3", "%2.ld"},
+ {__LINE__, 0x00000e00, "3584", "%.4d"},
+ {__LINE__, 0xffff38c2, "ffff38c2", "%0.x"},
+ {__LINE__, 0xffffffff, "FFFFFFFF", "% .3X"},
+ {__LINE__, 0xff7c1b2f, "FF7C1B2F", "%-3.2X"},
+ {__LINE__, -0x0000005, "-5", "%2d"},
+ {__LINE__, 0x00098775, "98775", "%x"},
+ {__LINE__, 0x000015ff, " 15FF", "%6.X"},
+ {__LINE__, 0xfffbe3ef, "FFFBE3EF", "%0.3X"},
+ {__LINE__, -0x0000048, "-72", "%ld"},
+ {__LINE__, 0x0001488a, "84106", "%d"},
+ {__LINE__, 0x00000001, "1", "%x"},
+ {__LINE__, -0x0000002, "-2", "%-0.0ld"},
+ {__LINE__, -0x0000001, "-1", "%-d"},
+ {__LINE__, 0x0006616f, "6616f", "%x"},
+ {__LINE__, 0x3657856d, "911705453", "%6.d"},
+ {__LINE__, -0x0007222, "-0029218", "%.7d"},
+ {__LINE__, 0x00041606, "267782", "%04.5d"},
+ {__LINE__, 0x00000001, " 1", "%2.ld"},
+ {__LINE__, 0x00000219, "219", "%0x"},
+ {__LINE__, 0x0ae0184c, "ae0184c", "%x"},
+ {__LINE__, 0x00003a7d, " 14973", "%7.ld"},
+ {__LINE__, 0xffffffff, "0XFFFFFFFF", "%#X"},
+ {__LINE__, -0x0000002, "-2", "%0ld"},
+ {__LINE__, 0x00002cdf, "11487", "%0ld"},
+ {__LINE__, -0x000000c, "-12", "%d"},
+ {__LINE__, -0x000000e, "-14", "%-#2d"},
+ {__LINE__, 0x00000371, "881", "%#ld"},
+ {__LINE__, 0x000015be, " 5566", "%5.ld"},
+ {__LINE__, 0x01525b91, "22174609", "%#0.0ld"},
+ {__LINE__, 0xff8fc22f, "FF8FC22F", "% X"},
+ {__LINE__, -0x0007f7b, "-32635", "%4.ld"},
+ {__LINE__, 0x00007bca, "7bca", "%x"},
+ {__LINE__, -0x0000582, "-1410", "%ld"},
+ {__LINE__, 0x00000047, " +71", "%+04.2d"},
+ {__LINE__, 0xf8a8dce2, "f8a8dce2", "%+.6x"},
+ {__LINE__, -0x000de2e, "-56878", "%.0d"},
+ {__LINE__, 0x019c03c1, "0X19C03C1", "%#X"},
+ {__LINE__, -0x0f3a43e, "-15967294", "%ld"},
+ {__LINE__, 0x00009e87, "40583", "%#5.1d"},
+ {__LINE__, 0x000000b8, "184", "%0ld"},
+ {__LINE__, -0x000befe, "-48894", "%2ld"},
+ {__LINE__, -0x002ee1a, "-192026", "%.2d"},
+ {__LINE__, 0x00004fd8, "4fd8", "%x"},
+ {__LINE__, 0x0006d57b, "447867", "%2d"},
+ {__LINE__, 0xfffffa9c, "FFFFFA9C", "%-X"},
+ {__LINE__, 0x0000000f, "15", "%ld"},
+ {__LINE__, 0x0005deb2, "5DEB2", "% X"},
+ {__LINE__, 0x00000007, "7", "%X"},
+ {__LINE__, 0xffffffc8, "0XFFFFFFC8", "% #.1X"},
+ {__LINE__, 0xfffff62f, "FFFFF62F", "%X"},
+ {__LINE__, -0x1a935bba, "-445864890", "% 3.5d"},
+ {__LINE__, 0x000b34b4, "0x0b34b4", "%-#3.6x"},
+ {__LINE__, 0xfffff430, "FFFFF430", "%X"},
+ {__LINE__, 0x00000b5f, "+0002911", "%+#.7d"},
+ {__LINE__, 0x00000007, " 7", "%3ld"},
+ {__LINE__, 0xffffffd8, "FFFFFFD8", "% .7X"},
+ {__LINE__, 0xfffff544, "FFFFF544", "%0X"},
+ {__LINE__, -0x353667b9, "-892757945", "%d"},
+ {__LINE__, 0x00000058, "0x00058", "%+#.5x"},
+ {__LINE__, 0x39dbcc4a, "+970705994", "%+0.6ld"},
+ {__LINE__, 0xfffffffd, "fffffffd", "% 01x"},
+ {__LINE__, 0x00b1c28e, "+11649678", "%+0ld"},
+ {__LINE__, 0x000066c2, "0X66C2", "%-#4X"},
+ {__LINE__, 0x007171a2, "+7434658", "%+07.ld"},
+ {__LINE__, -0x0000001, "-1", "%-d"},
+ {__LINE__, 0x00000ae0, "+2784", "%+0d"},
+ {__LINE__, 0x13786a57, "326658647", "%#5d"},
+ {__LINE__, -0x0000001, "-1", "%2.ld"},
+ {__LINE__, -0x0168a16, "-1477142", "%d"},
+ {__LINE__, 0x12df7dd6, "316636630", "%ld"},
+ {__LINE__, 0x00000000, "000000", "%1.6d"},
+ {__LINE__, 0x266da2a9, "644719273", "%ld"},
+ {__LINE__, 0x0000004a, "74", "%d"},
+ {__LINE__, 0x000102ff, "00102FF", "%+06.7X"},
+ {__LINE__, 0x17916237, "0x17916237", "%#5x"},
+ {__LINE__, -0x0003cbb, "-0015547", "%-.7d"},
+ {__LINE__, 0xe7da2010, "e7da2010", "%2.4x"},
+ {__LINE__, 0xfffffff3, "fffffff3", "% .7x"},
+ {__LINE__, 0xfc9b64f8, "FC9B64F8", "% 7.X"},
+ {__LINE__, 0x000001af, "431", "%0d"},
+ {__LINE__, 0xffc81796, "0xffc81796", "%#.5x"},
+ {__LINE__, 0x057a1fbc, "+91889596", "%+04d"},
+ {__LINE__, 0x00001ae1, "6881", "%ld"},
+ {__LINE__, 0xfffffff6, "fffffff6", "%3.0x"},
+ {__LINE__, -0x6b7d5db, "-112711131", "%-06.1d"},
+ {__LINE__, 0x008e8a5c, " 8e8a5c", "%7.0x"},
+ {__LINE__, 0xfe07a9bd, "fe07a9bd", "%.1x"},
+ {__LINE__, -0x00278e6, "-162022", "%0ld"},
+ {__LINE__, 0xf98709f5, "F98709F5", "%X"},
+ {__LINE__, -0x00000c9, "-201", "% 1.d"},
+ {__LINE__, -0x000001d, "-00029", "%+2.5ld"},
+ {__LINE__, 0x00000030, " 48", "% d"},
+ {__LINE__, 0xffd753f4, "FFD753F4", "%0X"},
+ {__LINE__, 0xfffffffd, "FFFFFFFD", "%X"},
+ {__LINE__, 0x0000a765, "a765", "%x"},
+ {__LINE__, 0x0026e2c8, "26E2C8", "%-0X"},
+ {__LINE__, -0x00003eb, "-1003", "%3.1ld"},
+ {__LINE__, 0x015d53ca, "22893514", "%0ld"},
+ {__LINE__, -0x0000020, "-32", "%ld"},
+ {__LINE__, -0x03558dd, "-3496157", "%1.0ld"},
+ {__LINE__, -0x000007f, "-127", "%1.d"},
+ {__LINE__, 0xffffc737, "0xffffc737", "%+#x"},
+ {__LINE__, 0x0000a70d, " a70d", "%6.x"},
+ {__LINE__, 0x01ea0e31, "0X1EA0E31", "% #1.X"},
+ {__LINE__, 0x00b5f406, "0X0B5F406", "%-#.7X"},
+ {__LINE__, 0x0e58fa9a, "240712346", "%.2d"},
+ {__LINE__, 0xf43ff8a9, "f43ff8a9", "%+0.6x"},
+ {__LINE__, -0x5d0d3d3, "-97571795", "%.3ld"},
+ {__LINE__, -0x000027a, "-634", "%0d"},
+ {__LINE__, 0xffcef248, "FFCEF248", "%07.X"},
+ {__LINE__, 0x000002dc, "2dc", "%0x"},
+ {__LINE__, -0x31fa6c1, "-52405953", "%.2d"},
+ {__LINE__, 0x00000014, "14", "%X"},
+ {__LINE__, -0x0282f98, "-2633624", "%ld"},
+ {__LINE__, 0x00005f55, "24405", "%#d"},
+ {__LINE__, -0x0000004, "-4", "%d"},
+ {__LINE__, 0x00000001, "1", "%+x"},
+ {__LINE__, 0x013f47ce, "13f47ce", "%0.x"},
+ {__LINE__, 0x00143fce, "1327054", "%.3d"},
+ {__LINE__, 0x00000000, "0", "%d"},
+ {__LINE__, 0x00001f9a, "1F9A", "% X"},
+ {__LINE__, 0x00000cf5, "cf5", "%x"},
+ {__LINE__, 0xffea9c24, "ffea9c24", "%x"},
+ {__LINE__, 0xf09f85a7, "F09F85A7", "%X"},
+ {__LINE__, 0x00001e04, "7684", "%ld"},
+ {__LINE__, 0xffffc82a, "ffffc82a", "%7x"},
+ {__LINE__, -0x0000a77, "-2679", "% d"},
+ {__LINE__, 0x0019a859, "+1681497", "%+2.6ld"},
+ {__LINE__, -0x00002d7, "-727", "%ld"},
+ {__LINE__, 0x00011b82, "72578", "%-#ld"},
+ {__LINE__, 0x00000c32, "3122", "%ld"},
+ {__LINE__, -0x0000337, "-823", "%1.d"},
+ {__LINE__, 0x00000004, "4", "%1ld"},
+ {__LINE__, 0x0000062c, "1580", "%.1ld"},
+ {__LINE__, 0xffffffd3, "FFFFFFD3", "% X"},
+ {__LINE__, -0x07b1bf8, "-8068088", "%#d"},
+ {__LINE__, 0xfffffff9, "fffffff9", "%x"},
+ {__LINE__, 0x159e6cfb, "159e6cfb", "%0.x"},
+ {__LINE__, 0x0001148d, "1148d", "%-.1x"},
+ {__LINE__, 0x003373b7, "3371959", "%#.0d"},
+ {__LINE__, 0x00001af2, "1af2", "%.4x"},
+ {__LINE__, -0x0000001, "-000001", "%+.6ld"},
+ {__LINE__, -0x00001a3, "-419", "%d"},
+ {__LINE__, 0xfdb232e7, "fdb232e7", "%5.4x"},
+ {__LINE__, -0x000000d, "-13", "%d"},
+ {__LINE__, 0x98ec1c74, "98ec1c74", "% 3x"},
+ {__LINE__, 0xfffffff8, "fffffff8", "%+1.4x"},
+ {__LINE__, -0x0000d58, "-3416", "%+#0ld"},
+ {__LINE__, -0x65d1973, "-106764659", "%.6d"},
+ {__LINE__, -0x0737641, "-7566913", "%-d"},
+ {__LINE__, 0x0000037c, "37c", "%+0x"},
+ {__LINE__, 0x0000012c, "0000300", "%#3.7d"},
+ {__LINE__, 0x00c12d9b, "12660123", "%1.5ld"},
+ {__LINE__, 0xe7e5e77d, "e7e5e77d", "%6x"},
+ {__LINE__, 0x1fe0e820, "1FE0E820", "%-4X"},
+ {__LINE__, 0xc85a793a, "C85A793A", "%X"},
+ {__LINE__, 0x05f9fe2c, "100269612", "%#ld"},
+ {__LINE__, 0x00000032, "0X32", "%+#4.1X"},
+ {__LINE__, 0xfab4ce81, "fab4ce81", "%3.x"},
+ {__LINE__, -0x0000009, "-9", "%2.d"},
+ {__LINE__, 0xffff8d2e, "ffff8d2e", "% 6x"},
+ {__LINE__, 0xfffffffe, "0xfffffffe", "%#x"},
+ {__LINE__, 0x02960f60, "2960f60", "%1.x"},
+ {__LINE__, 0x34cf3cbc, " 885996732", "% 5ld"},
+ {__LINE__, -0x000006e, "-110", "% d"},
+ {__LINE__, -0x0000001, "-1", "%-.0d"},
+ {__LINE__, 0x000000b1, " B1", "%+7X"},
+ {__LINE__, 0xfffff5b4, "FFFFF5B4", "%01.7X"},
+ {__LINE__, 0x00000086, "86", "%0X"},
+ {__LINE__, 0x00074367, " 74367", "% 6x"},
+ {__LINE__, 0x001000d7, "+1048791", "%+ld"},
+ {__LINE__, 0x00000f35, " 3893", "% d"},
+ {__LINE__, -0x00000e1, "-225", "%d"},
+ {__LINE__, 0xffff6694, "FFFF6694", "%6.X"},
+ {__LINE__, 0x00019cf7, "19cf7", "%0.x"},
+ {__LINE__, 0x00000046, "0046", "%+.4X"},
+ {__LINE__, -0x000001f, "-31", "%ld"},
+ {__LINE__, 0xfff25859, "fff25859", "%6x"},
+ {__LINE__, 0x21884061, "562577505", "%#ld"},
+ {__LINE__, 0x01448b7a, "1448B7A", "%0.1X"},
+ {__LINE__, 0xffffffc0, "ffffffc0", "%x"},
+ {__LINE__, 0xfffffed5, "fffffed5", "% 1.0x"},
+ {__LINE__, 0x0e349767, "E349767", "%.5X"},
+ {__LINE__, 0x00000330, "816", "%0d"},
+ {__LINE__, -0x0000016, "-22", "%d"},
+ {__LINE__, 0xffff9bab, "FFFF9BAB", "%X"},
+ {__LINE__, 0xffffee4e, "ffffee4e", "%x"},
+ {__LINE__, 0x0026beeb, "2539243", "%6.d"},
+ {__LINE__, 0x00002c6c, "11372", "%.2d"},
+ {__LINE__, -0x000002c, "-44", "%ld"},
+ {__LINE__, -0x001dcfa, "-122106", "% d"},
+ {__LINE__, 0x0001683c, "92220", "%#4.ld"},
+ {__LINE__, 0x09b51fc9, "9b51fc9", "%+.7x"},
+ {__LINE__, 0x0000001d, "29", "%0ld"},
+ {__LINE__, -0x83f17e5, "-138352613", "%ld"},
+ {__LINE__, 0xfa4e2c1b, "fa4e2c1b", "%x"},
+ {__LINE__, 0x000001f3, "499", "%0ld"},
+ {__LINE__, 0xffff03e4, "ffff03e4", "%x"},
+ {__LINE__, 0x000000ac, "+0172", "%+.4ld"},
+ {__LINE__, 0x03c3903b, "63148091", "%00d"},
+ {__LINE__, 0x0000000d, "13", "%#d"},
+ {__LINE__, 0x0000002e, "0X2E", "%#X"},
+ {__LINE__, 0x00006b2d, "6B2D", "%X"},
+ {__LINE__, 0x0000010b, " 0010b", "%7.5x"},
+ {__LINE__, 0x0000017a, " 17a", "%4x"},
+ {__LINE__, 0xfffffffb, "fffffffb", "%+x"},
+ {__LINE__, 0xffffac6a, "ffffac6a", "%-.3x"},
+ {__LINE__, -0x0005870, "-22640", "%0d"},
+ {__LINE__, 0x189c17bc, "189c17bc", "%x"},
+ {__LINE__, -0x01bbc38, "-1817656", "%#6.ld"},
+ {__LINE__, -0x3382b55, "-54012757", "%d"},
+ {__LINE__, -0x0000007, "-7", "%-ld"},
+ {__LINE__, -0x000c74b, "-51019", "%ld"},
+ {__LINE__, 0x0001a6f2, "+108274", "%+#1.ld"},
+ {__LINE__, 0x00077448, "77448", "%x"},
+ {__LINE__, 0x00000000, "0", "%x"},
+ {__LINE__, 0xfffff056, "FFFFF056", "%.3X"},
+ {__LINE__, -0x6f3f9451, "-1866437713", "%-#3.0ld"},
+ {__LINE__, 0x000000ac, "AC", "%X"},
+ {__LINE__, 0xffc8752f, "ffc8752f", "%-x"},
+ {__LINE__, 0xfffffe6d, "FFFFFE6D", "%2.X"},
+ {__LINE__, -0x377f1a5, "-58192293", "% .2d"},
+ {__LINE__, -0x0000294, "-660", "%d"},
+ {__LINE__, 0xfffffffe, "fffffffe", "%-x"},
+ {__LINE__, 0xfffcbbe8, "0xfffcbbe8", "%-#4.x"},
+ {__LINE__, 0x0022e510, "+2286864", "%+ld"},
+ {__LINE__, 0xfffffe2a, "FFFFFE2A", "%0.3X"},
+ {__LINE__, 0xfe29f7c0, "fe29f7c0", "%x"},
+ {__LINE__, 0xfffe957e, "FFFE957E", "%X"},
+ {__LINE__, 0x000080f8, "33016", "%ld"},
+ {__LINE__, 0x0003ee2c, " 257580", "%7d"},
+ {__LINE__, 0x000003a1, "929", "%d"},
+ {__LINE__, 0x0000021f, "21f", "%+x"},
+ {__LINE__, 0xffffffff, "ffffffff", "%.5x"},
+ {__LINE__, -0x040a988, "-4237704", "%-d"},
+ {__LINE__, 0x027c8b69, "41716585", "%ld"},
+ {__LINE__, 0x00000003, "3", "%-X"},
+ {__LINE__, -0x0000368, " -872", "%7.d"},
+ {__LINE__, 0x00000d3c, "3388", "%0.2d"},
+ {__LINE__, -0x33734cc, "-53949644", "%2ld"},
+ {__LINE__, 0x000003db, "3DB", "%X"},
+ {__LINE__, -0x00f154d, "-988493", "%5d"},
+ {__LINE__, 0x0000000b, " 11", "%4.ld"},
+ {__LINE__, 0x00000067, "103", "%-ld"},
+ {__LINE__, -0x0199fce, "-1679310", "%4d"},
+ {__LINE__, 0x02b6266b, "2b6266b", "% x"},
+ {__LINE__, -0x006b39d, "-439197", "%+d"},
+ {__LINE__, 0x00000007, "7", "%ld"},
+ {__LINE__, 0x0141fc98, "21101720", "%0ld"},
+ {__LINE__, -0x0008420, "-33824", "%d"},
+ {__LINE__, 0x0011622b, "1139243", "%6ld"},
+ {__LINE__, 0x0000001b, "27", "%-d"},
+ {__LINE__, -0x0030935, "-198965", "%3d"},
+ {__LINE__, 0x0000001f, " 1f", "%4.x"},
+ {__LINE__, -0x10782a19, "-276310553", "%#ld"},
+ {__LINE__, -0x007eac4, "-518852", "%06.ld"},
+ {__LINE__, 0x0bc4c681, "197445249", "%6ld"},
+ {__LINE__, 0x000000f5, "245", "%.3ld"},
+ {__LINE__, 0x00000197, "197", "%X"},
+ {__LINE__, 0xfffffeab, "FFFFFEAB", "% X"},
+ {__LINE__, 0x00000f05, "F05", "%+X"},
+ {__LINE__, 0xffe1b785, "0xffe1b785", "%#x"},
+ {__LINE__, -0x02d3581, "-2962817", "%05d"},
+ {__LINE__, 0xffffb994, "FFFFB994", "%X"},
+ {__LINE__, 0x03d139a3, "64043427", "%ld"},
+ {__LINE__, -0x0000002, " -2", "%+4.d"},
+ {__LINE__, -0x043da83, "-4446851", "%#ld"},
+ {__LINE__, -0x6aad891, "-111859857", "%7.ld"},
+ {__LINE__, 0x00003e68, "15976", "%-4.5ld"},
+ {__LINE__, 0xffe4d3ee, "FFE4D3EE", "%X"},
+ {__LINE__, 0x00000002, "000002", "%4.6ld"},
+ {__LINE__, 0xffffee32, "ffffee32", "%4x"},
+ {__LINE__, 0x0cb7dd25, "cb7dd25", "%3x"},
+ {__LINE__, 0xf773d422, "F773D422", "%X"},
+ {__LINE__, -0x0b590f7, "-11899127", "%#d"},
+ {__LINE__, -0x0002c45, "-11333", "%-#5ld"},
+ {__LINE__, -0x1efc9e4, "-32492004", "%ld"},
+ {__LINE__, -0x0003b9c, "-15260", "%d"},
+ {__LINE__, 0x000001b6, "0X1B6", "%#4X"},
+ {__LINE__, 0x3ce93ec3, "1021918915", "%.6d"},
+ {__LINE__, 0xffffffff, "ffffffff", "%-x"},
+ {__LINE__, 0xfffaf0e4, "fffaf0e4", "%2.x"},
+ {__LINE__, 0x00000002, "0x2", "%#x"},
+ {__LINE__, 0x0000e806, "e806", "%4x"},
+ {__LINE__, 0xfffffff0, "fffffff0", "% 2.x"},
+ {__LINE__, 0xfffffc0e, "fffffc0e", "%+.4x"},
+ {__LINE__, 0xfd45716e, "FD45716E", "%.4X"},
+ {__LINE__, 0xfff96fda, "FFF96FDA", "%-X"},
+ {__LINE__, 0xff99d08a, "FF99D08A", "%.5X"},
+ {__LINE__, 0x00000002, "2", "%-00.d"},
+ {__LINE__, -0x000000f, " -15", "%6.ld"},
+ {__LINE__, -0x00d321c, "-864796", "%#1ld"},
+ {__LINE__, 0xff19ff8d, "ff19ff8d", "%1.5x"},
+ {__LINE__, 0x00000000, "0000000", "%-.7x"},
+ {__LINE__, 0x0000f50d, " F50D", "%5X"},
+ {__LINE__, 0x00001688, " 5768", "%7.ld"},
+ {__LINE__, 0x00000157, "343", "%2ld"},
+ {__LINE__, 0xfffffffd, "0xfffffffd", "%+#3x"},
+ {__LINE__, 0x00000d52, "3410", "%ld"},
+ {__LINE__, 0x00000003, "3", "%d"},
+ {__LINE__, 0x0001c6d2, "01c6d2", "%.6x"},
+ {__LINE__, 0x242d65d2, "606954962", "%#7.ld"},
+ {__LINE__, 0x00000e9f, "0000E9F", "%5.7X"},
+ {__LINE__, 0x0002d785, "2D785", "%0X"},
+ {__LINE__, 0x00000167, "167", "%0X"},
+ {__LINE__, 0xfffff5e5, "fffff5e5", "% x"},
+ {__LINE__, 0xffb69a04, "0xffb69a04", "%#0.x"},
+ {__LINE__, 0xfffa012e, "FFFA012E", "%X"},
+ {__LINE__, 0x0000001a, "0x1a", "% #x"},
+ {__LINE__, 0xfffb26d3, "fffb26d3", "%+x"},
+ {__LINE__, -0x00003e6, " -998", "%7ld"},
+ {__LINE__, 0x00000004, "4", "%-d"},
+ {__LINE__, 0xfffffd76, "0XFFFFFD76", "%#7X"},
+ {__LINE__, 0x00000035, "53", "%ld"},
+ {__LINE__, 0xffc6c190, "0XFFC6C190", "%#X"},
+ {__LINE__, 0xffffffe2, "ffffffe2", "%7.0x"},
+ {__LINE__, 0x03ff1b87, "67050375", "%2.d"},
+ {__LINE__, 0x00020c47, "0X20C47", "%#X"},
+ {__LINE__, 0x00000000, "0", "%d"},
+ {__LINE__, 0x0000000e, "0X000E", "% #.4X"},
+ {__LINE__, -0x00035cd, "-13773", "%+2.d"},
+ {__LINE__, 0x00005eec, "5eec", "%1x"},
+ {__LINE__, 0x001da0ff, "1941759", "%0d"},
+ {__LINE__, 0xf8a9e96a, "f8a9e96a", "%+x"},
+ {__LINE__, -0x0000120, "-288 ", "%-#6.d"},
+ {__LINE__, 0x00000000, "0", "%-X"},
+ {__LINE__, 0x0000152e, "152E", "%+X"},
+ {__LINE__, -0x0001077, "-4215", "% 0d"},
+ {__LINE__, 0xffffffd7, "FFFFFFD7", "%0X"},
+ {__LINE__, 0xfffe097d, "FFFE097D", "%2X"},
+ {__LINE__, 0xcb982712, "cb982712", "%x"},
+ {__LINE__, 0xfff39f2e, "FFF39F2E", "%.5X"},
+ {__LINE__, -0x0058cae, "-363694", "%+.1d"},
+ {__LINE__, -0x000002b, "-043", "%#1.3d"},
+ {__LINE__, -0x001e989, "-125321", "%1d"},
+ {__LINE__, 0x00959ecd, "9805517", "%d"},
+ {__LINE__, 0xf49df846, "F49DF846", "%+3X"},
+ {__LINE__, 0xfffffffd, "fffffffd", "%+.5x"},
+ {__LINE__, -0x000ac76, "-44150", "%3.ld"},
+ {__LINE__, 0x00000028, " 0028", "%06.4x"},
+ {__LINE__, 0x000003e8, "3E8", "%-02X"},
+ {__LINE__, 0x00000012, "012", "%.3X"},
+ {__LINE__, 0x00000006, "0X6", "%#X"},
+ {__LINE__, 0x00ef8479, "+15697017", "%+0.6d"},
+ {__LINE__, 0xffffffe8, "FFFFFFE8", "%-X"},
+ {__LINE__, 0x773a90f7, "773a90f7", "%3.5x"},
+ {__LINE__, 0x00096d44, "96D44", "%-X"},
+ {__LINE__, -0x08a3d96, "-9059734", "%ld"},
+ {__LINE__, -0x000001a, "-26", "%00.ld"},
+ {__LINE__, 0x32f57585, "32f57585", "% x"},
+ {__LINE__, 0x2825f175, "2825F175", "%X"},
+ {__LINE__, 0x000054ff, "21759", "%-2d"},
+ {__LINE__, -0x0266cdc, "-2518236", "%ld"},
+ {__LINE__, 0x0000031d, "0X31D", "%+#4X"},
+ {__LINE__, 0x0003fc99, "3fc99", "%x"},
+ {__LINE__, -0x0064624, "-411172", "%-#d"},
+ {__LINE__, 0x0001b2d9, "111321", "%-ld"},
+ {__LINE__, -0x000007c, "-124", "%#d"},
+ {__LINE__, 0xfffffffa, "FFFFFFFA", "%+X"},
+ {__LINE__, -0x007a5b8, "-501176", "%+ld"},
+ {__LINE__, 0x0213b583, "213B583", "%2.X"},
+ {__LINE__, 0xfff12e51, "FFF12E51", "%+X"},
+ {__LINE__, 0x00052403, "0336899", "%-0.7d"},
+ {__LINE__, 0xffffffff, "ffffffff", "%-04.4x"},
+ {__LINE__, 0x00000010, "0010", "%0.4X"},
+ {__LINE__, 0xffffffb5, "FFFFFFB5", "%-1.3X"},
+ {__LINE__, -0x0000001, "-1", "%d"},
+ {__LINE__, 0x0003a2d1, "3a2d1", "% x"},
+ {__LINE__, 0x00000424, "1060", "%0ld"},
+ {__LINE__, -0x0000078, "-120", "%1d"},
+ {__LINE__, 0x00000000, "0", "%ld"},
+ {__LINE__, 0x00000414, "1044", "%ld"},
+ {__LINE__, 0x00000072, "0x072", "%#5.3x"},
+ {__LINE__, 0x0000007a, "7A", "% X"},
+ {__LINE__, 0x081542a3, "135611043", "%0d"},
+ {__LINE__, 0xfffb4ce6, "fffb4ce6", "%4.6x"},
+ {__LINE__, 0x00002ab2, "2ab2", "%-1x"},
+ {__LINE__, 0x00000000, " 0", "% 2x"},
+ {__LINE__, 0xfffffa59, "FFFFFA59", "%2.X"},
+ {__LINE__, 0xffffe22b, "ffffe22b", "%-x"},
+ {__LINE__, 0xfffffd52, "FFFFFD52", "%+.2X"},
+ {__LINE__, 0x0000039f, "927", "%-d"},
+ {__LINE__, 0x0002dea6, "2dea6", "%0x"},
+ {__LINE__, 0x000216db, "136923", "%ld"},
+ {__LINE__, 0x00000013, "19", "%0d"},
+ {__LINE__, 0x000047cc, "18380", "%2.2ld"},
+ {__LINE__, -0x0007d10, "-32016", "%d"},
+ {__LINE__, 0xff9af906, "FF9AF906", "%0X"},
+ {__LINE__, 0x02cfa224, "+47161892", "%+0.7d"},
+ {__LINE__, -0x0000022, "-34", "%1.d"},
+ {__LINE__, 0xfffffff0, "FFFFFFF0", "%-4X"},
+ {__LINE__, 0x00000029, " 41", "%6.ld"},
+ {__LINE__, 0xffffff76, "ffffff76", "%x"},
+ {__LINE__, 0x00000000, "0", "%+X"},
+ {__LINE__, 0x00000001, "1", "%d"},
+ {__LINE__, 0xfff6de5a, "FFF6DE5A", "%X"},
+ {__LINE__, 0x00000002, "2", "%ld"},
+ {__LINE__, 0x00000025, "25", "%+x"},
+ {__LINE__, 0xfffffffb, "FFFFFFFB", "%5.0X"},
+ {__LINE__, 0x0011bbb5, "1162165", "%0.0ld"},
+ {__LINE__, 0xfffcdc96, "0XFFFCDC96", "%#X"},
+ {__LINE__, 0x00008f5f, "8f5f", "%3.1x"},
+ {__LINE__, 0xffa0fa5d, "0XFFA0FA5D", "%#X"},
+ {__LINE__, 0x00004534, "4534", "% 0X"},
+ {__LINE__, 0xfffffff9, "fffffff9", "%.2x"},
+ {__LINE__, 0xffeeae50, "ffeeae50", "%-x"},
+ {__LINE__, 0x00002964, " 0010596", "% 0.7d"},
+ {__LINE__, 0x000021c9, " 21c9", "%6x"},
+ {__LINE__, 0x00000001, " 1", "% d"},
+ {__LINE__, 0x0002abd8, "+175064", "%+d"},
+ {__LINE__, 0xffffffad, "FFFFFFAD", "%+0X"},
+ {__LINE__, 0x00000003, "3", "%ld"},
+ {__LINE__, 0x0c036da3, " 201551267", "% .3d"},
+ {__LINE__, -0x004343c, "-275516", "%+ld"},
+ {__LINE__, 0x00000003, "003", "% .3x"},
+ {__LINE__, 0xffffe34e, "ffffe34e", "%x"},
+ {__LINE__, 0x0000e118, "e118", "%x"},
+ {__LINE__, -0x007d945, "-514373", "%+#0ld"},
+ {__LINE__, 0x277f1cc5, "277f1cc5", "% x"},
+ {__LINE__, 0x00003bef, "03bef", "% 0.5x"},
+ {__LINE__, 0xfffffcb9, "fffffcb9", "%x"},
+ {__LINE__, 0x0003311a, "209178", "%ld"},
+ {__LINE__, 0x00000000, " ", "%3.ld"},
+ {__LINE__, 0x05942225, "5942225", "%x"},
+ {__LINE__, 0xfffceb4c, "FFFCEB4C", "%-X"},
+ {__LINE__, 0xffd08633, "ffd08633", "%2.x"},
+ {__LINE__, -0x0000001, " -1", "%6d"},
+ {__LINE__, 0x000fdb12, "1039122", "%d"},
+ {__LINE__, 0x00000003, "3", "% 0X"},
+ {__LINE__, -0x2fd5bf1, "-50158577", "% 5.ld"},
+ {__LINE__, -0x0089a03, "-563715", "%-d"},
+ {__LINE__, 0xfffffffe, "FFFFFFFE", "% X"},
+ {__LINE__, 0x29fdb2ba, "29fdb2ba", "% 0x"},
+ {__LINE__, 0x0000008f, "8F", "% X"},
+ {__LINE__, 0x00000003, "3", "%ld"},
+ {__LINE__, 0xffc58445, "FFC58445", "%.2X"},
+ {__LINE__, -0x00023f6, "-9206", "%+d"},
+ {__LINE__, 0x00000011, "11", "%X"},
+ {__LINE__, -0x0000003, "-0000003", "%-.7d"},
+ {__LINE__, -0x0000003, "-3", "%#ld"},
+ {__LINE__, 0x001242d9, "1242D9", "%X"},
+ {__LINE__, -0x48d0c81, "-76352641", "%7.d"},
+ {__LINE__, -0x001b675, "-112245", "%#ld"},
+ {__LINE__, 0x00000003, "3", "%-d"},
+ {__LINE__, 0xfff93fdf, "0XFFF93FDF", "% #X"},
+ {__LINE__, 0x001a9414, "1741844", "%#ld"},
+ {__LINE__, 0x0001fd86, "130438", "%ld"},
+ {__LINE__, 0x010f37a8, "17774504", "%4.7d"},
+ {__LINE__, 0x00382838, "0382838", "%3.7X"},
+ {__LINE__, -0x47fd56c2, "-1207785154", "%ld"},
+ {__LINE__, 0x001981dd, "1981dd", "%x"},
+ {__LINE__, 0xffffefba, "ffffefba", "% 06.x"},
+ {__LINE__, -0x3f402b29, "-1061169961", "%+#ld"},
+ {__LINE__, -0x395aae44, "-962244164", "%-1d"},
+ {__LINE__, 0x1fa39f42, "530816834", "%#d"},
+ {__LINE__, -0x000358d, "-13709", "%d"},
+ {__LINE__, -0xdc17b8f, "-230783887", "%ld"},
+ {__LINE__, -0x23c41583, "-600053123", "%+3.d"},
+ {__LINE__, 0xfffffc16, "fffffc16", "%x"},
+ {__LINE__, 0x003f1364, "4133732", "%7.ld"},
+ {__LINE__, 0xffffe691, "FFFFE691", "%07X"},
+ {__LINE__, 0x07b31d71, "129178993", "%.7d"},
+ {__LINE__, -0x0019732, "-104242", "% ld"},
+ {__LINE__, 0x02428167, "0x2428167", "%#x"},
+ {__LINE__, -0x06c1ecd, "-7085773", "%.7ld"},
+ {__LINE__, 0xfb01cb4e, "fb01cb4e", "%x"},
+ {__LINE__, 0x00005a41, "+23105", "%+ld"},
+ {__LINE__, 0xfffffff4, "FFFFFFF4", "%-5.X"},
+ {__LINE__, 0x00000005, " 5", "%4.ld"},
+ {__LINE__, 0xf4ab4b2d, "F4AB4B2D", "%0.X"},
+ {__LINE__, -0x000fce3, "-64739", "%+#3.ld"},
+ {__LINE__, 0x000076ea, " 30442", "%6.2ld"},
+ {__LINE__, 0x00000cb9, " cb9", "%4.x"},
+ {__LINE__, 0x002f43ef, "3097583", "%1.1ld"},
+ {__LINE__, 0xf5bd0105, "F5BD0105", "%+X"},
+ {__LINE__, 0x0037954a, "3642698", "%d"},
+ {__LINE__, 0xfffffff7, "0XFFFFFFF7", "%-#X"},
+ {__LINE__, 0xffffcedf, "0xffffcedf", "%#6.7x"},
+ {__LINE__, 0xfffffde4, "FFFFFDE4", "%2.4X"},
+ {__LINE__, 0x01a6f103, "1a6f103", "%5.x"},
+ {__LINE__, 0x00000191, " 191", "%7.0X"},
+ {__LINE__, 0x00000003, "03", "% .2X"},
+ {__LINE__, -0xd4e3219, "-223228441", "%6.ld"},
+ {__LINE__, 0x00b0efbd, "11595709", "%d"},
+ {__LINE__, -0x00000ea, "-234", "%#3d"},
+ {__LINE__, 0x00000be8, "BE8 ", "%-5X"},
+ {__LINE__, 0xffffffff, "ffffffff", "%5.3x"},
+ {__LINE__, -0x267f8c6, "-40368326", "%d"},
+ {__LINE__, 0x000006ed, "6ED", "%X"},
+ {__LINE__, 0xfdd6c9b6, "FDD6C9B6", "%X"},
+ {__LINE__, 0x0007ac29, "7ac29", "%-x"},
+ {__LINE__, 0x00000014, "14", "%2x"},
+ {__LINE__, 0x123ca563, "+305964387", "%+ld"},
+ {__LINE__, 0x00000004, " 4", "%5.d"},
+ {__LINE__, 0xffff877a, "ffff877a", "%x"},
+ {__LINE__, -0x00003e7, "-999", "%+0.3d"},
+ {__LINE__, 0x0a68ba6e, "a68ba6e", "%3.1x"},
+ {__LINE__, 0xfe29c810, "FE29C810", "%+X"},
+#endif
+
+ {__LINE__, 0x00000000, "0", "%o"},
+ {__LINE__, 0000000123, "123", "%o"},
+ {__LINE__, 0000123456, "0123456", "%#o"},
+ {__LINE__, 0000123456, "00123456", "%#.8o"},
+ {__LINE__, 0000123456, " 00123456", "%#10.8o"},
+ {__LINE__, 0x00000123, "0x00123", "%#07x"},
+ {__LINE__, 0x00000000, "", "%#.0d"},
+ {__LINE__, 0x00000000, "", "%#.0x"},
+ {__LINE__, 0x00000000, "0", "%#.0o"},
+
+ {__LINE__, 0x00000000, "0", "%Id"},
+ {__LINE__, 0x0000000a, "10", "%Id"},
+ {__LINE__, 0x000000d2, "210", "%Id"},
+ {__LINE__, 0x00000c8a, "3210", "%Id"},
+ {__LINE__, 0x0000a8ca, "43210", "%Id"},
+ {__LINE__, 0x000849ea, "543210", "%Id"},
+ {__LINE__, 0x0063d76a, "6543210", "%Id"},
+ {__LINE__, 0x048ff4ea, "76543210", "%Id"},
+ {__LINE__, 0x343efcea, "876543210", "%Id"},
+
+ {0},
+};
+
+int
+main(int argc, char *argv[])
+{
+ int errcount = 0;
+ int testcount = 0;
+#define BSIZE 1024
+ char buffer[BSIZE];
+ sprint_int_type *iptr;
+ for (iptr = sprint_ints; iptr->line; iptr++) {
+ snprintf(buffer, sizeof(buffer), iptr->format_string, iptr->value);
+ if (strcmp(buffer, iptr->result) != 0) {
+ errcount++;
+ printf(
+ "Error in line %d using \"%s\". Result is \"%s\"; should be: \"%s\".\n",
+ iptr->line, iptr->format_string, buffer, iptr->result);
+ }
+ testcount++;
+ }
+
+ if (errcount == 0) {
+ printf ("Encountered no errors in %d tests.\n", testcount);
+ return 0;
+ }
+ else {
+ printf ("Encountered %d errors in %d tests.\n",
+ errcount, testcount);
+ return 1;
+ }
+}
diff --git a/mozglue/tests/glibc_printf_tests/tllformat.c b/mozglue/tests/glibc_printf_tests/tllformat.c
new file mode 100644
index 0000000000..88b2132093
--- /dev/null
+++ b/mozglue/tests/glibc_printf_tests/tllformat.c
@@ -0,0 +1,59 @@
+#include <stdio.h>
+#include <string.h>
+
+/* The original file was tiformat.c and it has been changed for long long tests\
+. */
+typedef struct
+{
+ int line;
+ long long int value;
+ const char *result;
+ const char *format_string;
+} sprint_int_type;
+
+sprint_int_type sprint_ints[] =
+{
+ {__LINE__, 0x00000000ULL, "0", "%llx"},
+ {__LINE__, 0xffff00000000208bULL, "ffff00000000208b", "%llx"},
+ {__LINE__, 0xffff00000000208bULL, "18446462598732849291", "%llu"},
+ {__LINE__, 18446462598732849291ULL, "ffff00000000208b", "%llx"},
+ {__LINE__, 18446462598732849291ULL, "18446462598732849291", "%llu"},
+ {__LINE__, 18359476226655002763ULL, "fec9f65b0000208b", "%llx"},
+ {__LINE__, 18359476226655002763ULL, "18359476226655002763", "%llu"},
+
+ {0},
+};
+
+int
+main (void)
+{
+ int errcount = 0;
+ int testcount = 0;
+#define BSIZE 1024
+ char buffer[BSIZE];
+ sprint_int_type *iptr;
+ for (iptr = sprint_ints; iptr->line; iptr++)
+ {
+ snprintf (buffer, sizeof(buffer), iptr->format_string, iptr->value);
+ if (strcmp (buffer, iptr->result) != 0)
+ {
+ ++errcount;
+ printf ("\
+Error in line %d using \"%s\". Result is \"%s\"; should be: \"%s\".\n",
+ iptr->line, iptr->format_string, buffer, iptr->result);
+ }
+ ++testcount;
+ }
+
+ if (errcount == 0)
+ {
+ printf ("Encountered no errors in %d tests.\n", testcount);
+ return 0;
+ }
+ else
+ {
+ printf ("Encountered %d errors in %d tests.\n",
+ errcount, testcount);
+ return 1;
+ }
+}
diff --git a/mozglue/tests/gtest/TestNativeNtGTest.cpp b/mozglue/tests/gtest/TestNativeNtGTest.cpp
new file mode 100644
index 0000000000..cc48f16fdd
--- /dev/null
+++ b/mozglue/tests/gtest/TestNativeNtGTest.cpp
@@ -0,0 +1,63 @@
+/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* vim: set ts=8 sts=2 et sw=2 tw=80: */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+#include <windows.h>
+
+#include "gtest/gtest.h"
+
+#include "mozilla/NativeNt.h"
+#include "nsHashKeys.h"
+#include "nsTHashSet.h"
+
+TEST(TestNativeNtGTest, GenerateDependentModuleSet)
+{
+ mozilla::nt::PEHeaders executable(::GetModuleHandleW(nullptr));
+ nsTHashSet<nsStringCaseInsensitiveHashKey> dependentModules;
+ executable.EnumImportChunks([&](const char* aModule) {
+ dependentModules.Insert(
+ mozilla::nt::GetLeafName(NS_ConvertASCIItoUTF16(aModule)));
+ });
+
+ EXPECT_TRUE(dependentModules.Contains(u"mozglue.dll"_ns));
+ EXPECT_TRUE(dependentModules.Contains(u"MOZGLUE.dll"_ns));
+ EXPECT_FALSE(dependentModules.Contains(u"xxx.dll"_ns));
+}
+
+TEST(TestNativeNtGTest, GetLeafName)
+{
+ nsAutoString str;
+ str = mozilla::nt::GetLeafName(u""_ns);
+ EXPECT_STREQ(str.get(), L"");
+ str = mozilla::nt::GetLeafName(u"\\"_ns);
+ EXPECT_STREQ(str.get(), L"");
+ str = mozilla::nt::GetLeafName(u"\\\\"_ns);
+ EXPECT_STREQ(str.get(), L"");
+ str = mozilla::nt::GetLeafName(u"abc\\def\\ghi"_ns);
+ EXPECT_STREQ(str.get(), L"ghi");
+ str = mozilla::nt::GetLeafName(u"abcdef"_ns);
+ EXPECT_STREQ(str.get(), L"abcdef");
+ str = mozilla::nt::GetLeafName(u"\\abcdef"_ns);
+ EXPECT_STREQ(str.get(), L"abcdef");
+
+ const auto kEntireText =
+ u"\\"_ns
+ u"\\\\abc"_ns
+ u"\\x\\y\\z"_ns
+ u"123\\456\\"_ns
+ u"789"_ns;
+ str = mozilla::nt::GetLeafName(Substring(kEntireText, 0, 0));
+ EXPECT_STREQ(str.get(), L"");
+ str = mozilla::nt::GetLeafName(Substring(kEntireText, 0, 1));
+ EXPECT_STREQ(str.get(), L"");
+ str = mozilla::nt::GetLeafName(Substring(kEntireText, 1, 5));
+ EXPECT_STREQ(str.get(), L"abc");
+ str = mozilla::nt::GetLeafName(Substring(kEntireText, 6, 6));
+ EXPECT_STREQ(str.get(), L"z");
+ str = mozilla::nt::GetLeafName(Substring(kEntireText, 12, 8));
+ EXPECT_STREQ(str.get(), L"");
+ str = mozilla::nt::GetLeafName(Substring(kEntireText, 20));
+ EXPECT_STREQ(str.get(), L"789");
+}
diff --git a/mozglue/tests/gtest/TestStackWalk.cpp b/mozglue/tests/gtest/TestStackWalk.cpp
new file mode 100644
index 0000000000..cec21ffc5e
--- /dev/null
+++ b/mozglue/tests/gtest/TestStackWalk.cpp
@@ -0,0 +1,279 @@
+/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* vim: set ts=8 sts=2 et sw=2 tw=80: */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+// The header under test.
+#include "mozilla/StackWalk.h"
+
+#include "mozilla/Assertions.h"
+#include "mozilla/Attributes.h"
+
+#include <algorithm>
+
+#include "gtest/gtest.h"
+
+MOZ_EXPORT bool gStackWalkTesterDummy = true;
+
+struct StackWalkTester;
+
+// Descriptor of the recursive function calls wanted, and for each of them
+// whether to perform tail call optimization or not.
+struct CallInfo {
+ int (*mFunc)(int aDepth, int aLastSkipped, int aIgnored,
+ StackWalkTester& aTester);
+ bool mTailCall;
+
+ bool TailCall() {
+#if defined(__i386__) || defined(MOZ_CODE_COVERAGE)
+ // We can't make tail calls happen on i386 because all arguments to
+ // functions are on the stack, so the stack pointer needs to be updated
+ // before the call and restored after the call, so tail call optimization
+ // never happens.
+ // Similarly, code-coverage flags don't guarantee that tail call
+ // optimization will happen.
+ return false;
+#else
+ return mTailCall;
+#endif
+ }
+};
+
+struct PCRange {
+ void* mStart;
+ void* mEnd;
+};
+
+// PCRange pretty printer for gtest assertions.
+std::ostream& operator<<(std::ostream& aStream, const PCRange& aRange) {
+ aStream << aRange.mStart;
+ aStream << "-";
+ aStream << aRange.mEnd;
+ return aStream;
+}
+
+// Allow to use EXPECT_EQ with a vector of PCRanges and a vector of plain
+// addresses, allowing a more useful output when the test fails, showing
+// both lists.
+bool operator==(const std::vector<PCRange>& aRanges,
+ const std::vector<void*>& aPtrs) {
+ if (aRanges.size() != aPtrs.size()) {
+ return false;
+ }
+ for (size_t i = 0; i < aRanges.size(); i++) {
+ auto range = aRanges[i];
+ auto ptr = reinterpret_cast<uintptr_t>(aPtrs[i]);
+ if (ptr <= reinterpret_cast<uintptr_t>(range.mStart) ||
+ ptr >= reinterpret_cast<uintptr_t>(range.mEnd)) {
+ return false;
+ }
+ }
+ return true;
+}
+
+struct StackWalkTester {
+ // Description of the recursion of functions to perform for the testcase.
+ std::vector<CallInfo> mFuncCalls;
+ // Collection of PCs reported by MozStackWalk.
+ std::vector<void*> mFramePCs;
+ // Collection of PCs expected per what was observed while recursing.
+ std::vector<PCRange> mExpectedFramePCs;
+ // The aFirstFramePC value that will be passed to MozStackWalk.
+ void* mFirstFramePC = nullptr;
+
+ // Callback to be given to the stack walker.
+ // aClosure should point at an instance of this class.
+ static void StackWalkCallback(uint32_t aFrameNumber, void* aPC, void* aSP,
+ void* aClosure) {
+ ASSERT_NE(aClosure, nullptr);
+ StackWalkTester& tester = *reinterpret_cast<StackWalkTester*>(aClosure);
+ tester.mFramePCs.push_back(aPC);
+ EXPECT_EQ(tester.mFramePCs.size(), size_t(aFrameNumber))
+ << "Frame number doesn't match";
+ }
+
+ // Callers of this function get a range of addresses with:
+ // ```
+ // label:
+ // recursion();
+ // AddExpectedPC(&&label);
+ // ```
+ // This intends to record the range from label to the return of AddExpectedPC.
+ // The ideal code would be:
+ // ```
+ // recursion();
+ // label:
+ // AddExpectedPC(&&label);
+ // ```
+ // and we wouldn't need to keep ranges. But while this works fine with Clang,
+ // GCC actually sometimes reorders code such the address received by
+ // AddExpectedPC is the address *before* the recursion.
+ // https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99784 Using a label before the
+ // recursion and CallerPC() from a function call after the recursion makes it
+ // less likely for things to go wrong.
+ MOZ_NEVER_INLINE void AddExpectedPC(void* aPC) {
+ mExpectedFramePCs.push_back({aPC, CallerPC()});
+ }
+
+ // Function intended to be called in sequence for recursion.
+ // CallInfo lists are meant to contain a sequence of IntermediateCallback<1>,
+ // IntermediateCallback<2>, etc.
+ // aDepth is a counter of how deep the recursion has gone so far;
+ // aLastSkipped is the depth of the last frame we want skipped in the
+ // testcase; aIgnored is there to avoid the compiler merging both recursive
+ // function calls, which would prevent tail call optimization happening on one
+ // of them. aTester is the instance of this class for the testcase.
+ template <int Id>
+ MOZ_NEVER_INLINE MOZ_EXPORT static int IntermediateCallback(
+ int aDepth, int aLastSkipped, int aIgnored, StackWalkTester& aTester) {
+ auto& callInfo = aTester.mFuncCalls.at(aDepth + 1);
+ if (aDepth == aLastSkipped) {
+ aTester.mFirstFramePC = CallerPC();
+ }
+ if (aTester.mFuncCalls.at(aDepth).TailCall()) {
+ return callInfo.mFunc(aDepth + 1, aLastSkipped, Id, aTester);
+ // Since we're doing a tail call, we're not expecting this frame appearing
+ // in the trace.
+ }
+ here:
+ callInfo.mFunc(aDepth + 1, aLastSkipped, Id + 1, aTester);
+ aTester.AddExpectedPC(&&here);
+ return 0;
+ }
+
+#if defined(__clang__)
+ __attribute__((no_sanitize("function")))
+#endif
+ MOZ_NEVER_INLINE MOZ_EXPORT static void
+ LeafCallback(int aDepth, int aLastSkipped, int aIgnored,
+ StackWalkTester& aTester) {
+ if (aDepth == aLastSkipped) {
+ aTester.mFirstFramePC = CallerPC();
+ }
+ if (aTester.mFuncCalls.at(aDepth).TailCall()) {
+ // For the same reason that we have the aIgnored argument on these
+ // callbacks, we need to avoid both MozStackWalk calls to be merged by the
+ // compiler, so we use different values of aMaxFrames for that.
+ return MozStackWalk(StackWalkTester::StackWalkCallback,
+ aTester.mFirstFramePC,
+ /*aMaxFrames*/ 19, &aTester);
+ // Since we're doing a tail call, we're not expecting this frame appearing
+ // in the trace.
+ }
+ here:
+ MozStackWalk(StackWalkTester::StackWalkCallback, aTester.mFirstFramePC,
+ /*aMaxFrames*/ 20, &aTester);
+ aTester.AddExpectedPC(&&here);
+ // Because we return nothing from this function, simply returning here would
+ // produce a tail-call optimization, which we explicitly don't want to
+ // happen. So we add a branch that depends on an extern value to prevent
+ // that from happening.
+ MOZ_RELEASE_ASSERT(gStackWalkTesterDummy);
+ }
+
+ explicit StackWalkTester(std::initializer_list<CallInfo> aFuncCalls)
+ : mFuncCalls(aFuncCalls) {}
+
+ // Dump a vector of PCRanges as WalkTheStack would, for test failure output.
+ // Only the end of the range is shown. Not ideal, but
+ // MozFormatCodeAddressDetails only knows to deal with one address at a time.
+ // The full ranges would be printed by EXPECT_EQ anyways.
+ static std::string DumpFrames(std::vector<PCRange>& aFramePCRanges) {
+ std::vector<void*> framePCs;
+ framePCs.reserve(aFramePCRanges.size());
+ for (auto range : aFramePCRanges) {
+ framePCs.push_back(range.mEnd);
+ }
+ return DumpFrames(framePCs);
+ }
+
+ // Dump a vector of addresses as WalkTheStack would, for test failure output.
+ static std::string DumpFrames(std::vector<void*>& aFramePCs) {
+ size_t n = 0;
+ std::string result;
+ for (auto* framePC : aFramePCs) {
+ char buf[1024];
+ MozCodeAddressDetails details;
+ result.append(" ");
+ n++;
+ if (MozDescribeCodeAddress(framePC, &details)) {
+ int length =
+ MozFormatCodeAddressDetails(buf, sizeof(buf), n, framePC, &details);
+ result.append(buf, std::min(length, (int)sizeof(buf) - 1));
+ } else {
+ result.append("MozDescribeCodeAddress failed");
+ }
+ result.append("\n");
+ }
+ return result;
+ }
+
+ // Dump a description of the given test case.
+ static std::string DumpFuncCalls(std::vector<CallInfo>& aFuncCalls) {
+ std::string result;
+ for (auto funcCall : aFuncCalls) {
+ MozCodeAddressDetails details;
+ result.append(" ");
+ if (MozDescribeCodeAddress(reinterpret_cast<void*>(funcCall.mFunc),
+ &details)) {
+ result.append(details.function);
+ if (funcCall.TailCall()) {
+ result.append(" tail call");
+ }
+ } else {
+ result.append("MozDescribeCodeAddress failed");
+ }
+ result.append("\n");
+ }
+ return result;
+ }
+
+ MOZ_EXPORT MOZ_NEVER_INLINE void RunTest(int aLastSkipped) {
+ ASSERT_TRUE(aLastSkipped < (int)mFuncCalls.size());
+ mFramePCs.clear();
+ mExpectedFramePCs.clear();
+ mFirstFramePC = nullptr;
+ auto& callInfo = mFuncCalls.at(0);
+ here:
+ callInfo.mFunc(0, aLastSkipped, 0, *this);
+ AddExpectedPC(&&here);
+ if (aLastSkipped < 0) {
+ aLastSkipped = mFuncCalls.size();
+ }
+ for (int i = (int)mFuncCalls.size() - 1; i >= aLastSkipped; i--) {
+ if (!mFuncCalls.at(i).TailCall()) {
+ mExpectedFramePCs.erase(mExpectedFramePCs.begin());
+ }
+ }
+ mFramePCs.resize(std::min(mExpectedFramePCs.size(), mFramePCs.size()));
+ EXPECT_EQ(mExpectedFramePCs, mFramePCs)
+ << "Expected frames:\n"
+ << DumpFrames(mExpectedFramePCs) << "Found frames:\n"
+ << DumpFrames(mFramePCs)
+ << "Function calls data (last skipped: " << aLastSkipped << "):\n"
+ << DumpFuncCalls(mFuncCalls);
+ }
+};
+
+TEST(TestStackWalk, StackWalk)
+{
+ const auto foo = StackWalkTester::IntermediateCallback<1>;
+ const auto bar = StackWalkTester::IntermediateCallback<2>;
+ const auto qux = StackWalkTester::IntermediateCallback<3>;
+ const auto leaf = reinterpret_cast<int (*)(int, int, int, StackWalkTester&)>(
+ StackWalkTester::LeafCallback);
+
+ const std::initializer_list<CallInfo> tests[] = {
+ {{foo, false}, {bar, false}, {qux, false}, {leaf, false}},
+ {{foo, false}, {bar, true}, {qux, false}, {leaf, false}},
+ {{foo, false}, {bar, false}, {qux, false}, {leaf, true}},
+ {{foo, true}, {bar, false}, {qux, true}, {leaf, true}},
+ };
+ for (auto test : tests) {
+ StackWalkTester tester(test);
+ for (int i = -1; i < (int)test.size(); i++) {
+ tester.RunTest(i);
+ }
+ }
+}
diff --git a/mozglue/tests/gtest/moz.build b/mozglue/tests/gtest/moz.build
new file mode 100644
index 0000000000..8f6ba9ad7b
--- /dev/null
+++ b/mozglue/tests/gtest/moz.build
@@ -0,0 +1,20 @@
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+if CONFIG["OS_ARCH"] == "WINNT":
+ SOURCES += [
+ "TestNativeNtGTest.cpp",
+ ]
+
+
+if not CONFIG["MOZ_TSAN"]:
+ SOURCES += [
+ "TestStackWalk.cpp",
+ ]
+
+ # The test relies on optimizations being on, so we can't let --disable-optimize
+ # getting in the way. See details in the source file.
+ SOURCES["TestStackWalk.cpp"].flags += ["-O2"]
+
+FINAL_LIBRARY = "xul-gtest"
diff --git a/mozglue/tests/moz.build b/mozglue/tests/moz.build
new file mode 100644
index 0000000000..ac68508ebd
--- /dev/null
+++ b/mozglue/tests/moz.build
@@ -0,0 +1,53 @@
+# -*- Mode: python; indent-tabs-mode: nil; tab-width: 40 -*-
+# vim: set filetype=python:
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+DisableStlWrapping()
+
+# Important: for CppUnitTests to be run, they also need to be added
+# to testing/cppunittest.ini.
+
+GeckoCppUnitTests(
+ [
+ "ShowSSEConfig",
+ ],
+ linkage=None,
+)
+
+CppUnitTests(
+ [
+ "TestBaseProfiler",
+ "TestIntegerPrintfMacros",
+ "TestPrintf",
+ ]
+)
+
+with Files("TestBaseProfiler.cpp"):
+ BUG_COMPONENT = ("Core", "Gecko Profiler")
+
+if CONFIG["OS_ARCH"] == "WINNT":
+ GeckoCppUnitTests(
+ [
+ "TestNativeNt",
+ "TestPEExportSection",
+ "TestStackCookie",
+ "TestTimeStampWin",
+ ],
+ linkage=None,
+ )
+ OS_LIBS += [
+ "ntdll",
+ "version",
+ ]
+
+if CONFIG["OS_TARGET"] == "WINNT" and CONFIG["CC_TYPE"] in ("gcc", "clang"):
+ # This allows us to use wmain as the entry point on mingw
+ LDFLAGS += [
+ "-municode",
+ ]
+
+TEST_DIRS += [
+ "gtest",
+]