diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 17:32:43 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 17:32:43 +0000 |
commit | 6bf0a5cb5034a7e684dcc3500e841785237ce2dd (patch) | |
tree | a68f146d7fa01f0134297619fbe7e33db084e0aa /mozglue/tests | |
parent | Initial commit. (diff) | |
download | thunderbird-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.cpp | 125 | ||||
-rw-r--r-- | mozglue/tests/TestBaseProfiler.cpp | 5732 | ||||
-rw-r--r-- | mozglue/tests/TestIntegerPrintfMacros.cpp | 1128 | ||||
-rw-r--r-- | mozglue/tests/TestNativeNt.cpp | 606 | ||||
-rw-r--r-- | mozglue/tests/TestPEExportSection.cpp | 706 | ||||
-rw-r--r-- | mozglue/tests/TestPrintf.cpp | 264 | ||||
-rw-r--r-- | mozglue/tests/TestStackCookie.cpp | 89 | ||||
-rw-r--r-- | mozglue/tests/TestTimeStampWin.cpp | 96 | ||||
-rw-r--r-- | mozglue/tests/glibc_printf_tests/COPYING | 339 | ||||
-rw-r--r-- | mozglue/tests/glibc_printf_tests/COPYING.LIB | 502 | ||||
-rw-r--r-- | mozglue/tests/glibc_printf_tests/README.MOZILLA | 2 | ||||
-rw-r--r-- | mozglue/tests/glibc_printf_tests/tfformat.c | 4164 | ||||
-rw-r--r-- | mozglue/tests/glibc_printf_tests/tiformat.c | 5070 | ||||
-rw-r--r-- | mozglue/tests/glibc_printf_tests/tllformat.c | 59 | ||||
-rw-r--r-- | mozglue/tests/gtest/TestNativeNtGTest.cpp | 63 | ||||
-rw-r--r-- | mozglue/tests/gtest/TestStackWalk.cpp | 279 | ||||
-rw-r--r-- | mozglue/tests/gtest/moz.build | 20 | ||||
-rw-r--r-- | mozglue/tests/moz.build | 53 |
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", +] |