diff --git a/core/logic/sprintf.cpp b/core/logic/sprintf.cpp index b10f26c18d..0c01df7610 100644 --- a/core/logic/sprintf.cpp +++ b/core/logic/sprintf.cpp @@ -492,6 +492,7 @@ void AddInt(char **buf_p, size_t &maxlen, int64_t val, int width, int flags) if (val < 0) { unsignedVal = 0 - static_cast(val); + width--; // Reserved for '-' sign } else { diff --git a/plugins/testsuite/mock/test_format.sp b/plugins/testsuite/mock/test_format.sp new file mode 100644 index 0000000000..5b2472c6c5 --- /dev/null +++ b/plugins/testsuite/mock/test_format.sp @@ -0,0 +1,2327 @@ +#pragma semicolon 1 +#pragma newdecls required + +#include +#include +#include + +public void OnPluginStart() +{ + TestChar(); + + TestBinary(); + + TestInt(); + + TestUInt(); + + TestFloat(); + + // The worldspawn may not be complete, and it is not available for "%E" + // Therefore, the test will be initiated in the next frame + RequestFrame(Frame_TestSpecial); + + TestString(); + + TestTranslates(); + + TestHex(); +} + +void Frame_TestSpecial() +{ + TestSpecial(); +} + + +void TestChar() +{ + SetTestContext("Test Char"); + + // Base + AssertFmtEq("'%c'", 'a', "'a'"); + AssertFmtEq("'%%'", 'b', "'%'"); + AssertFmtEq("'%%c'", 'c', "'%c'"); + AssertFmtEq("'%%d'", 'd', "'%d'"); + + // Precision + AssertFmtEq("'%.c'", 'a', "'a'"); + AssertFmtEq("'%.0c'", 'a', "'a'"); + AssertFmtEq("'%.7c'", 'a', "'a'"); + + // Width + AssertFmtEq("'%c'", 'a', "'a'"); + AssertFmtEq("'%0c'", 'a', "'a'"); + AssertFmtEq("'%7c'", 'a', "'a'"); + + // Precision & Width + AssertFmtEq("'%0.c'", 'a', "'a'"); + AssertFmtEq("'%0.0c'", 'a', "'a'"); + AssertFmtEq("'%0.7c'", 'a', "'a'"); + AssertFmtEq("'%7.c'", 'a', "'a'"); + AssertFmtEq("'%7.0c'", 'a', "'a'"); + AssertFmtEq("'%7.7c'", 'a', "'a'"); + + // Flags + AssertFmtEq("'%0c'", 'a', "'a'"); + AssertFmtEq("'%-c'", 'a', "'a'"); + AssertFmtEq("'%0-c'", 'a', "'a'"); + + // Flags & Precision + AssertFmtEq("'%0.c'", 'a', "'a'"); + AssertFmtEq("'%0.0c'", 'a', "'a'"); + AssertFmtEq("'%0.7c'", 'a', "'a'"); + AssertFmtEq("'%-.c'", 'a', "'a'"); + AssertFmtEq("'%-.0c'", 'a', "'a'"); + AssertFmtEq("'%-.7c'", 'a', "'a'"); + AssertFmtEq("'%-0.c'", 'a', "'a'"); + AssertFmtEq("'%-0.0c'", 'a', "'a'"); + AssertFmtEq("'%-0.7c'", 'a', "'a'"); + + // Flags & Width + AssertFmtEq("'%00c'", 'a', "'a'"); + AssertFmtEq("'%07c'", 'a', "'a'"); + AssertFmtEq("'%-0c'", 'a', "'a'"); + AssertFmtEq("'%-7c'", 'a', "'a'"); + AssertFmtEq("'%-00c'", 'a', "'a'"); + AssertFmtEq("'%-07c'", 'a', "'a'"); + + // Flags & Precision & Width + AssertFmtEq("'%00.0c'", 'a', "'a'"); + AssertFmtEq("'%00.7c'", 'a', "'a'"); + AssertFmtEq("'%07.0c'", 'a', "'a'"); + AssertFmtEq("'%07.7c'", 'a', "'a'"); + + AssertFmtEq("'%-0.0c'", 'a', "'a'"); + AssertFmtEq("'%-0.7c'", 'a', "'a'"); + AssertFmtEq("'%-7.0c'", 'a', "'a'"); + AssertFmtEq("'%-7.7c'", 'a', "'a'"); + + AssertFmtEq("'%-00.0c'", 'a', "'a'"); + AssertFmtEq("'%-00.7c'", 'a', "'a'"); + AssertFmtEq("'%-07.0c'", 'a', "'a'"); + AssertFmtEq("'%-07.7c'", 'a', "'a'"); +} + + +void TestBinary() +{ + SetTestContext("Test Binary"); + + // Base + AssertFmtEq("'%b'", 0, "'0'"); + AssertFmtEq("'%b'", 128, "'10000000'"); + AssertFmtEq("'%b'", 1234567, "'100101101011010000111'"); + AssertFmtEq("'%b'", 2147483647, "'1111111111111111111111111111111'"); + AssertFmtEq("'%b'", 4294967295, "'11111111111111111111111111111111'"); + AssertFmtEq("'%b'", -1, "'11111111111111111111111111111111'"); + + // Precision + AssertFmtEq("'%.0b'", 1234567, "'100101101011010000111'"); + AssertFmtEq("'%.7b'", 1234567, "'100101101011010000111'"); + AssertFmtEq("'%.21b'", 1234567, "'100101101011010000111'"); + AssertFmtEq("'%.32b'", 1234567, "'100101101011010000111'"); + + // Width + AssertFmtEq("'%0b'", 1234567, "'100101101011010000111'"); + AssertFmtEq("'%7b'", 1234567, "'100101101011010000111'"); + AssertFmtEq("'%21b'", 1234567, "'100101101011010000111'"); + AssertFmtEq("'%32b'", 1234567, "' 100101101011010000111'"); + + // Width & Precision + AssertFmtEq("'%0.0b'", 1234567, "'100101101011010000111'"); + AssertFmtEq("'%0.7b'", 1234567, "'100101101011010000111'"); + AssertFmtEq("'%0.21b'", 1234567, "'100101101011010000111'"); + AssertFmtEq("'%0.32b'", 1234567, "'100101101011010000111'"); + AssertFmtEq("'%7.7b'", 1234567, "'100101101011010000111'"); + AssertFmtEq("'%7.21b'", 1234567, "'100101101011010000111'"); + AssertFmtEq("'%7.32b'", 1234567, "'100101101011010000111'"); + AssertFmtEq("'%21.7b'", 1234567, "'100101101011010000111'"); + AssertFmtEq("'%21.21b'", 1234567, "'100101101011010000111'"); + AssertFmtEq("'%21.32b'", 1234567, "'100101101011010000111'"); + AssertFmtEq("'%32.7b'", 1234567, "' 100101101011010000111'"); + AssertFmtEq("'%32.21b'", 1234567, "' 100101101011010000111'"); + AssertFmtEq("'%32.32b'", 1234567, "' 100101101011010000111'"); + + // Flags + AssertFmtEq("'%0b'", 1234567, "'100101101011010000111'"); + AssertFmtEq("'%-b'", 1234567, "'100101101011010000111'"); + AssertFmtEq("'%0-b'", 1234567, "'100101101011010000111'"); + + // Flags & Precision + AssertFmtEq("'%0.b'", 1234567, "'100101101011010000111'"); + AssertFmtEq("'%0.0b'", 1234567, "'100101101011010000111'"); + AssertFmtEq("'%0.7b'", 1234567, "'100101101011010000111'"); + AssertFmtEq("'%0.21b'", 1234567, "'100101101011010000111'"); + AssertFmtEq("'%0.32b'", 1234567, "'100101101011010000111'"); + AssertFmtEq("'%-.b'", 1234567, "'100101101011010000111'"); + AssertFmtEq("'%-.0b'", 1234567, "'100101101011010000111'"); + AssertFmtEq("'%-.7b'", 1234567, "'100101101011010000111'"); + AssertFmtEq("'%-.21b'", 1234567, "'100101101011010000111'"); + AssertFmtEq("'%-.32b'", 1234567, "'100101101011010000111'"); + AssertFmtEq("'%-0.b'", 1234567, "'100101101011010000111'"); + AssertFmtEq("'%-0.0b'", 1234567, "'100101101011010000111'"); + AssertFmtEq("'%-0.7b'", 1234567, "'100101101011010000111'"); + AssertFmtEq("'%-0.21b'", 1234567, "'100101101011010000111'"); + AssertFmtEq("'%-0.32b'", 1234567, "'100101101011010000111'"); + + // Flags & Width + AssertFmtEq("'%00b'", 1234567, "'100101101011010000111'"); + AssertFmtEq("'%07b'", 1234567, "'100101101011010000111'"); + AssertFmtEq("'%021b'", 1234567, "'100101101011010000111'"); + AssertFmtEq("'%032b'", 1234567, "'00000000000100101101011010000111'"); + AssertFmtEq("'%-0b'", 1234567, "'100101101011010000111'"); + AssertFmtEq("'%-7b'", 1234567, "'100101101011010000111'"); + AssertFmtEq("'%-21b'", 1234567, "'100101101011010000111'"); + AssertFmtEq("'%-32b'", 1234567, "'100101101011010000111 '"); + AssertFmtEq("'%-00b'", 1234567, "'100101101011010000111'"); + AssertFmtEq("'%-07b'", 1234567, "'100101101011010000111'"); + AssertFmtEq("'%-021b'", 1234567, "'100101101011010000111'"); + AssertFmtEq("'%-032b'", 1234567, "'10010110101101000011100000000000'"); + + // Flags & Precision & Width + AssertFmtEq("'%07.b'", 1234567, "'100101101011010000111'"); + AssertFmtEq("'%07.0b'", 1234567, "'100101101011010000111'"); + AssertFmtEq("'%07.7b'", 1234567, "'100101101011010000111'"); + AssertFmtEq("'%07.21b'", 1234567, "'100101101011010000111'"); + AssertFmtEq("'%07.32b'", 1234567, "'100101101011010000111'"); + AssertFmtEq("'%021.b'", 1234567, "'100101101011010000111'"); + AssertFmtEq("'%021.0b'", 1234567, "'100101101011010000111'"); + AssertFmtEq("'%021.7b'", 1234567, "'100101101011010000111'"); + AssertFmtEq("'%021.21b'", 1234567, "'100101101011010000111'"); + AssertFmtEq("'%021.32b'", 1234567, "'100101101011010000111'"); + AssertFmtEq("'%032.b'", 1234567, "'00000000000100101101011010000111'"); + AssertFmtEq("'%032.0b'", 1234567, "'00000000000100101101011010000111'"); + AssertFmtEq("'%032.7b'", 1234567, "'00000000000100101101011010000111'"); + AssertFmtEq("'%032.21b'", 1234567, "'00000000000100101101011010000111'"); + AssertFmtEq("'%032.32b'", 1234567, "'00000000000100101101011010000111'"); + + AssertFmtEq("'%-7.b'", 1234567, "'100101101011010000111'"); + AssertFmtEq("'%-7.0b'", 1234567, "'100101101011010000111'"); + AssertFmtEq("'%-7.7b'", 1234567, "'100101101011010000111'"); + AssertFmtEq("'%-7.21b'", 1234567, "'100101101011010000111'"); + AssertFmtEq("'%-7.32b'", 1234567, "'100101101011010000111'"); + AssertFmtEq("'%-21.b'", 1234567, "'100101101011010000111'"); + AssertFmtEq("'%-21.0b'", 1234567, "'100101101011010000111'"); + AssertFmtEq("'%-21.7b'", 1234567, "'100101101011010000111'"); + AssertFmtEq("'%-21.21b'", 1234567, "'100101101011010000111'"); + AssertFmtEq("'%-21.32b'", 1234567, "'100101101011010000111'"); + AssertFmtEq("'%-32.b'", 1234567, "'100101101011010000111 '"); + AssertFmtEq("'%-32.0b'", 1234567, "'100101101011010000111 '"); + AssertFmtEq("'%-32.7b'", 1234567, "'100101101011010000111 '"); + AssertFmtEq("'%-32.21b'", 1234567, "'100101101011010000111 '"); + AssertFmtEq("'%-32.32b'", 1234567, "'100101101011010000111 '"); + + AssertFmtEq("'%-07.b'", 1234567, "'100101101011010000111'"); + AssertFmtEq("'%-07.0b'", 1234567, "'100101101011010000111'"); + AssertFmtEq("'%-07.7b'", 1234567, "'100101101011010000111'"); + AssertFmtEq("'%-07.21b'", 1234567, "'100101101011010000111'"); + AssertFmtEq("'%-07.32b'", 1234567, "'100101101011010000111'"); + AssertFmtEq("'%-021.b'", 1234567, "'100101101011010000111'"); + AssertFmtEq("'%-021.0b'", 1234567, "'100101101011010000111'"); + AssertFmtEq("'%-021.7b'", 1234567, "'100101101011010000111'"); + AssertFmtEq("'%-021.21b'", 1234567, "'100101101011010000111'"); + AssertFmtEq("'%-021.32b'", 1234567, "'100101101011010000111'"); + AssertFmtEq("'%-032.b'", 1234567, "'10010110101101000011100000000000'"); + AssertFmtEq("'%-032.0b'", 1234567, "'10010110101101000011100000000000'"); + AssertFmtEq("'%-032.7b'", 1234567, "'10010110101101000011100000000000'"); + AssertFmtEq("'%-032.21b'", 1234567, "'10010110101101000011100000000000'"); + AssertFmtEq("'%-032.32b'", 1234567, "'10010110101101000011100000000000'"); +} + + +void TestInt() +{ + SetTestContext("Test Integer"); + + // Base + AssertFmtEq("'%d'", 0, "'0'"); + AssertFmtEq("'%d'", 128, "'128'"); + AssertFmtEq("'%d'", 1234567, "'1234567'"); + AssertFmtEq("'%d'", 2147483647, "'2147483647'"); + AssertFmtEq("'%d'", -128, "'-128'"); + AssertFmtEq("'%d'", -1234567, "'-1234567'"); + AssertFmtEq("'%d'", -2147483648, "'-2147483648'"); + + AssertFmtEq("'%i'", 0, "'0'"); + AssertFmtEq("'%i'", 128, "'128'"); + AssertFmtEq("'%i'", 1234567, "'1234567'"); + AssertFmtEq("'%i'", 2147483647, "'2147483647'"); + AssertFmtEq("'%i'", -128, "'-128'"); + AssertFmtEq("'%i'", -1234567, "'-1234567'"); + AssertFmtEq("'%i'", -2147483648, "'-2147483648'"); + + // Precision + AssertFmtEq("'%.0d'", 1234567, "'1234567'"); + AssertFmtEq("'%.7d'", 1234567, "'1234567'"); + AssertFmtEq("'%.9d'", 1234567, "'1234567'"); + AssertFmtEq("'%.20d'", 1234567, "'1234567'"); + AssertFmtEq("'%.0d'", -1234567, "'-1234567'"); + AssertFmtEq("'%.8d'", -1234567, "'-1234567'"); + AssertFmtEq("'%.9d'", -1234567, "'-1234567'"); + AssertFmtEq("'%.20d'", -1234567, "'-1234567'"); + + // Width + AssertFmtEq("'%0d'", 1234567, "'1234567'"); + AssertFmtEq("'%7d'", 1234567, "'1234567'"); + AssertFmtEq("'%9d'", 1234567, "' 1234567'"); + AssertFmtEq("'%20d'", 1234567, "' 1234567'"); + AssertFmtEq("'%0d'", -1234567, "'-1234567'"); + AssertFmtEq("'%8d'", -1234567, "'-1234567'"); + AssertFmtEq("'%9d'", -1234567, "' -1234567'"); + AssertFmtEq("'%20d'", -1234567, "' -1234567'"); + + // Width & Precision + AssertFmtEq("'%0.7d'", 1234567, "'1234567'"); + AssertFmtEq("'%0.9d'", 1234567, "'1234567'"); + AssertFmtEq("'%7.7d'", 1234567, "'1234567'"); + AssertFmtEq("'%7.9d'", 1234567, "'1234567'"); + AssertFmtEq("'%9.7d'", 1234567, "' 1234567'"); + AssertFmtEq("'%9.9d'", 1234567, "' 1234567'"); + AssertFmtEq("'%20.7d'", 1234567, "' 1234567'"); + AssertFmtEq("'%20.9d'", 1234567, "' 1234567'"); + AssertFmtEq("'%0.8d'", -1234567, "'-1234567'"); + AssertFmtEq("'%0.9d'", -1234567, "'-1234567'"); + AssertFmtEq("'%8.8d'", -1234567, "'-1234567'"); + AssertFmtEq("'%8.9d'", -1234567, "'-1234567'"); + AssertFmtEq("'%9.8d'", -1234567, "' -1234567'"); + AssertFmtEq("'%9.9d'", -1234567, "' -1234567'"); + AssertFmtEq("'%20.8d'", -1234567, "' -1234567'"); + AssertFmtEq("'%20.9d'", -1234567, "' -1234567'"); + + // Flags + AssertFmtEq("'%0d'", 1234567, "'1234567'"); + AssertFmtEq("'%-d'", 1234567, "'1234567'"); + AssertFmtEq("'%0-d'", 1234567, "'1234567'"); + AssertFmtEq("'%0d'", -1234567, "'-1234567'"); + AssertFmtEq("'%-d'", -1234567, "'-1234567'"); + AssertFmtEq("'%0-d'", -1234567, "'-1234567'"); + + // Flags & Precision + AssertFmtEq("'%0.d'", 1234567, "'1234567'"); + AssertFmtEq("'%0.0d'", 1234567, "'1234567'"); + AssertFmtEq("'%0.7d'", 1234567, "'1234567'"); + AssertFmtEq("'%0.9d'", 1234567, "'1234567'"); + AssertFmtEq("'%0.20d'", 1234567, "'1234567'"); + AssertFmtEq("'%-.d'", 1234567, "'1234567'"); + AssertFmtEq("'%-.0d'", 1234567, "'1234567'"); + AssertFmtEq("'%-.7d'", 1234567, "'1234567'"); + AssertFmtEq("'%-.9d'", 1234567, "'1234567'"); + AssertFmtEq("'%-.20d'", 1234567, "'1234567'"); + AssertFmtEq("'%-0.d'", 1234567, "'1234567'"); + AssertFmtEq("'%-0.0d'", 1234567, "'1234567'"); + AssertFmtEq("'%-0.7d'", 1234567, "'1234567'"); + AssertFmtEq("'%-0.9d'", 1234567, "'1234567'"); + AssertFmtEq("'%-0.20d'", 1234567, "'1234567'"); + AssertFmtEq("'%0.d'", -1234567, "'-1234567'"); + AssertFmtEq("'%0.0d'", -1234567, "'-1234567'"); + AssertFmtEq("'%0.8d'", -1234567, "'-1234567'"); + AssertFmtEq("'%0.9d'", -1234567, "'-1234567'"); + AssertFmtEq("'%0.20d'", -1234567, "'-1234567'"); + AssertFmtEq("'%-.d'", -1234567, "'-1234567'"); + AssertFmtEq("'%-.0d'", -1234567, "'-1234567'"); + AssertFmtEq("'%-.8d'", -1234567, "'-1234567'"); + AssertFmtEq("'%-.9d'", -1234567, "'-1234567'"); + AssertFmtEq("'%-.20d'", -1234567, "'-1234567'"); + AssertFmtEq("'%-0.d'", -1234567, "'-1234567'"); + AssertFmtEq("'%-0.0d'", -1234567, "'-1234567'"); + AssertFmtEq("'%-0.8d'", -1234567, "'-1234567'"); + AssertFmtEq("'%-0.9d'", -1234567, "'-1234567'"); + AssertFmtEq("'%-0.20d'", -1234567, "'-1234567'"); + + // Flags & Width + AssertFmtEq("'%00d'", 1234567, "'1234567'"); + AssertFmtEq("'%07d'", 1234567, "'1234567'"); + AssertFmtEq("'%09d'", 1234567, "'001234567'"); + AssertFmtEq("'%020d'", 1234567, "'00000000000001234567'"); + AssertFmtEq("'%-0d'", 1234567, "'1234567'"); + AssertFmtEq("'%-7d'", 1234567, "'1234567'"); + AssertFmtEq("'%-9d'", 1234567, "'1234567 '"); + AssertFmtEq("'%-20d'", 1234567, "'1234567 '"); + AssertFmtEq("'%-00d'", 1234567, "'1234567'"); + AssertFmtEq("'%-07d'", 1234567, "'1234567'"); + AssertFmtEq("'%-09d'", 1234567, "'123456700'"); + AssertFmtEq("'%-020d'", 1234567, "'12345670000000000000'"); + AssertFmtEq("'%00d'", -1234567, "'-1234567'"); + AssertFmtEq("'%08d'", -1234567, "'-1234567'"); + AssertFmtEq("'%09d'", -1234567, "'-01234567'"); + AssertFmtEq("'%020d'", -1234567, "'-0000000000001234567'"); + AssertFmtEq("'%-0d'", -1234567, "'-1234567'"); + AssertFmtEq("'%-8d'", -1234567, "'-1234567'"); + AssertFmtEq("'%-9d'", -1234567, "'-1234567 '"); + AssertFmtEq("'%-20d'", -1234567, "'-1234567 '"); + AssertFmtEq("'%-00d'", -1234567, "'-1234567'"); + AssertFmtEq("'%-08d'", -1234567, "'-1234567'"); + AssertFmtEq("'%-09d'", -1234567, "'-12345670'"); + AssertFmtEq("'%-020d'", -1234567, "'-1234567000000000000'"); + + // Flags & Precision & Width + AssertFmtEq("'%00.d'", 1234567, "'1234567'"); + AssertFmtEq("'%00.0d'", 1234567, "'1234567'"); + AssertFmtEq("'%00.7d'", 1234567, "'1234567'"); + AssertFmtEq("'%00.9d'", 1234567, "'1234567'"); + AssertFmtEq("'%00.20d'", 1234567, "'1234567'"); + AssertFmtEq("'%07.d'", 1234567, "'1234567'"); + AssertFmtEq("'%07.0d'", 1234567, "'1234567'"); + AssertFmtEq("'%07.7d'", 1234567, "'1234567'"); + AssertFmtEq("'%07.9d'", 1234567, "'1234567'"); + AssertFmtEq("'%07.20d'", 1234567, "'1234567'"); + AssertFmtEq("'%09.d'", 1234567, "'001234567'"); + AssertFmtEq("'%09.0d'", 1234567, "'001234567'"); + AssertFmtEq("'%09.7d'", 1234567, "'001234567'"); + AssertFmtEq("'%09.9d'", 1234567, "'001234567'"); + AssertFmtEq("'%09.20d'", 1234567, "'001234567'"); + AssertFmtEq("'%020.d'", 1234567, "'00000000000001234567'"); + AssertFmtEq("'%020.0d'", 1234567, "'00000000000001234567'"); + AssertFmtEq("'%020.7d'", 1234567, "'00000000000001234567'"); + AssertFmtEq("'%020.9d'", 1234567, "'00000000000001234567'"); + AssertFmtEq("'%020.20d'", 1234567, "'00000000000001234567'"); + AssertFmtEq("'%00.d'", -1234567, "'-1234567'"); + AssertFmtEq("'%00.0d'", -1234567, "'-1234567'"); + AssertFmtEq("'%00.8d'", -1234567, "'-1234567'"); + AssertFmtEq("'%00.9d'", -1234567, "'-1234567'"); + AssertFmtEq("'%00.20d'", -1234567, "'-1234567'"); + AssertFmtEq("'%08.d'", -1234567, "'-1234567'"); + AssertFmtEq("'%08.0d'", -1234567, "'-1234567'"); + AssertFmtEq("'%08.8d'", -1234567, "'-1234567'"); + AssertFmtEq("'%08.9d'", -1234567, "'-1234567'"); + AssertFmtEq("'%08.20d'", -1234567, "'-1234567'"); + AssertFmtEq("'%09.d'", -1234567, "'-01234567'"); + AssertFmtEq("'%09.0d'", -1234567, "'-01234567'"); + AssertFmtEq("'%09.8d'", -1234567, "'-01234567'"); + AssertFmtEq("'%09.9d'", -1234567, "'-01234567'"); + AssertFmtEq("'%09.20d'", -1234567, "'-01234567'"); + AssertFmtEq("'%020.d'", -1234567, "'-0000000000001234567'"); + AssertFmtEq("'%020.0d'", -1234567, "'-0000000000001234567'"); + AssertFmtEq("'%020.8d'", -1234567, "'-0000000000001234567'"); + AssertFmtEq("'%020.9d'", -1234567, "'-0000000000001234567'"); + AssertFmtEq("'%020.20d'", -1234567, "'-0000000000001234567'"); + + AssertFmtEq("'%-0.d'", 1234567, "'1234567'"); + AssertFmtEq("'%-0.0d'", 1234567, "'1234567'"); + AssertFmtEq("'%-0.7d'", 1234567, "'1234567'"); + AssertFmtEq("'%-0.9d'", 1234567, "'1234567'"); + AssertFmtEq("'%-0.20d'", 1234567, "'1234567'"); + AssertFmtEq("'%-7.d'", 1234567, "'1234567'"); + AssertFmtEq("'%-7.0d'", 1234567, "'1234567'"); + AssertFmtEq("'%-7.7d'", 1234567, "'1234567'"); + AssertFmtEq("'%-7.9d'", 1234567, "'1234567'"); + AssertFmtEq("'%-7.20d'", 1234567, "'1234567'"); + AssertFmtEq("'%-9.d'", 1234567, "'1234567 '"); + AssertFmtEq("'%-9.0d'", 1234567, "'1234567 '"); + AssertFmtEq("'%-9.7d'", 1234567, "'1234567 '"); + AssertFmtEq("'%-9.9d'", 1234567, "'1234567 '"); + AssertFmtEq("'%-9.20d'", 1234567, "'1234567 '"); + AssertFmtEq("'%-20.d'", 1234567, "'1234567 '"); + AssertFmtEq("'%-20.0d'", 1234567, "'1234567 '"); + AssertFmtEq("'%-20.7d'", 1234567, "'1234567 '"); + AssertFmtEq("'%-20.9d'", 1234567, "'1234567 '"); + AssertFmtEq("'%-20.20d'", 1234567, "'1234567 '"); + AssertFmtEq("'%-0.d'", -1234567, "'-1234567'"); + AssertFmtEq("'%-0.0d'", -1234567, "'-1234567'"); + AssertFmtEq("'%-0.8d'", -1234567, "'-1234567'"); + AssertFmtEq("'%-0.9d'", -1234567, "'-1234567'"); + AssertFmtEq("'%-0.20d'", -1234567, "'-1234567'"); + AssertFmtEq("'%-8.d'", -1234567, "'-1234567'"); + AssertFmtEq("'%-8.0d'", -1234567, "'-1234567'"); + AssertFmtEq("'%-8.8d'", -1234567, "'-1234567'"); + AssertFmtEq("'%-8.9d'", -1234567, "'-1234567'"); + AssertFmtEq("'%-8.20d'", -1234567, "'-1234567'"); + AssertFmtEq("'%-9.d'", -1234567, "'-1234567 '"); + AssertFmtEq("'%-9.0d'", -1234567, "'-1234567 '"); + AssertFmtEq("'%-9.8d'", -1234567, "'-1234567 '"); + AssertFmtEq("'%-9.9d'", -1234567, "'-1234567 '"); + AssertFmtEq("'%-9.20d'", -1234567, "'-1234567 '"); + AssertFmtEq("'%-20.d'", -1234567, "'-1234567 '"); + AssertFmtEq("'%-20.0d'", -1234567, "'-1234567 '"); + AssertFmtEq("'%-20.8d'", -1234567, "'-1234567 '"); + AssertFmtEq("'%-20.9d'", -1234567, "'-1234567 '"); + AssertFmtEq("'%-20.20d'", -1234567, "'-1234567 '"); + + AssertFmtEq("'%-00.d'", 1234567, "'1234567'"); + AssertFmtEq("'%-00.0d'", 1234567, "'1234567'"); + AssertFmtEq("'%-00.7d'", 1234567, "'1234567'"); + AssertFmtEq("'%-00.9d'", 1234567, "'1234567'"); + AssertFmtEq("'%-00.20d'", 1234567, "'1234567'"); + AssertFmtEq("'%-07.d'", 1234567, "'1234567'"); + AssertFmtEq("'%-07.0d'", 1234567, "'1234567'"); + AssertFmtEq("'%-07.7d'", 1234567, "'1234567'"); + AssertFmtEq("'%-07.9d'", 1234567, "'1234567'"); + AssertFmtEq("'%-07.20d'", 1234567, "'1234567'"); + AssertFmtEq("'%-09.d'", 1234567, "'123456700'"); + AssertFmtEq("'%-09.0d'", 1234567, "'123456700'"); + AssertFmtEq("'%-09.7d'", 1234567, "'123456700'"); + AssertFmtEq("'%-09.9d'", 1234567, "'123456700'"); + AssertFmtEq("'%-09.20d'", 1234567, "'123456700'"); + AssertFmtEq("'%-020.d'", 1234567, "'12345670000000000000'"); + AssertFmtEq("'%-020.0d'", 1234567, "'12345670000000000000'"); + AssertFmtEq("'%-020.7d'", 1234567, "'12345670000000000000'"); + AssertFmtEq("'%-020.9d'", 1234567, "'12345670000000000000'"); + AssertFmtEq("'%-020.20d'", 1234567, "'12345670000000000000'"); + AssertFmtEq("'%-00.d'", -1234567, "'-1234567'"); + AssertFmtEq("'%-00.0d'", -1234567, "'-1234567'"); + AssertFmtEq("'%-00.8d'", -1234567, "'-1234567'"); + AssertFmtEq("'%-00.9d'", -1234567, "'-1234567'"); + AssertFmtEq("'%-00.20d'", -1234567, "'-1234567'"); + AssertFmtEq("'%-08.d'", -1234567, "'-1234567'"); + AssertFmtEq("'%-08.0d'", -1234567, "'-1234567'"); + AssertFmtEq("'%-08.8d'", -1234567, "'-1234567'"); + AssertFmtEq("'%-08.9d'", -1234567, "'-1234567'"); + AssertFmtEq("'%-08.20d'", -1234567, "'-1234567'"); + AssertFmtEq("'%-09.d'", -1234567, "'-12345670'"); + AssertFmtEq("'%-09.0d'", -1234567, "'-12345670'"); + AssertFmtEq("'%-09.8d'", -1234567, "'-12345670'"); + AssertFmtEq("'%-09.9d'", -1234567, "'-12345670'"); + AssertFmtEq("'%-09.20d'", -1234567, "'-12345670'"); + AssertFmtEq("'%-020.d'", -1234567, "'-1234567000000000000'"); + AssertFmtEq("'%-020.0d'", -1234567, "'-1234567000000000000'"); + AssertFmtEq("'%-020.8d'", -1234567, "'-1234567000000000000'"); + AssertFmtEq("'%-020.9d'", -1234567, "'-1234567000000000000'"); + AssertFmtEq("'%-020.20d'", -1234567, "'-1234567000000000000'"); +} + + +void TestUInt() +{ + SetTestContext("Test Unsigned Integer"); + + // Base + AssertFmtEq("'%u'", 0, "'0'"); + AssertFmtEq("'%u'", 128, "'128'"); + AssertFmtEq("'%u'", 1234567, "'1234567'"); + AssertFmtEq("'%u'", 2147483647, "'2147483647'"); + AssertFmtEq("'%u'", 4294967295, "'4294967295'"); + AssertFmtEq("'%u'", -1, "'4294967295'"); + + // Precision + AssertFmtEq("'%.0u'", 1234567, "'1234567'"); + AssertFmtEq("'%.3u'", 1234567, "'1234567'"); + AssertFmtEq("'%.7u'", 1234567, "'1234567'"); + AssertFmtEq("'%.9u'", 1234567, "'1234567'"); + AssertFmtEq("'%.20u'", 1234567, "'1234567'"); + + // Width + AssertFmtEq("'%0u'", 1234567, "'1234567'"); + AssertFmtEq("'%3u'", 1234567, "'1234567'"); + AssertFmtEq("'%7u'", 1234567, "'1234567'"); + AssertFmtEq("'%9u'", 1234567, "' 1234567'"); + AssertFmtEq("'%20u'", 1234567, "' 1234567'"); + + // Width & Precision + AssertFmtEq("'%0.3u'", 1234567, "'1234567'"); + AssertFmtEq("'%0.7u'", 1234567, "'1234567'"); + AssertFmtEq("'%0.9u'", 1234567, "'1234567'"); + AssertFmtEq("'%3.3u'", 1234567, "'1234567'"); + AssertFmtEq("'%3.7u'", 1234567, "'1234567'"); + AssertFmtEq("'%3.9u'", 1234567, "'1234567'"); + AssertFmtEq("'%7.3u'", 1234567, "'1234567'"); + AssertFmtEq("'%7.7u'", 1234567, "'1234567'"); + AssertFmtEq("'%7.9u'", 1234567, "'1234567'"); + AssertFmtEq("'%9.3u'", 1234567, "' 1234567'"); + AssertFmtEq("'%9.7u'", 1234567, "' 1234567'"); + AssertFmtEq("'%9.9u'", 1234567, "' 1234567'"); + AssertFmtEq("'%20.3u'", 1234567, "' 1234567'"); + AssertFmtEq("'%20.7u'", 1234567, "' 1234567'"); + AssertFmtEq("'%20.9u'", 1234567, "' 1234567'"); + + // Flags + AssertFmtEq("'%0u'", 1234567, "'1234567'"); + AssertFmtEq("'%-u'", 1234567, "'1234567'"); + AssertFmtEq("'%0-u'", 1234567, "'1234567'"); + + // Flags & Precision + AssertFmtEq("'%0.u'", 1234567, "'1234567'"); + AssertFmtEq("'%0.0u'", 1234567, "'1234567'"); + AssertFmtEq("'%0.3u'", 1234567, "'1234567'"); + AssertFmtEq("'%0.7u'", 1234567, "'1234567'"); + AssertFmtEq("'%0.9u'", 1234567, "'1234567'"); + AssertFmtEq("'%0.20u'", 1234567, "'1234567'"); + AssertFmtEq("'%-.u'", 1234567, "'1234567'"); + AssertFmtEq("'%-.0u'", 1234567, "'1234567'"); + AssertFmtEq("'%-.3u'", 1234567, "'1234567'"); + AssertFmtEq("'%-.7u'", 1234567, "'1234567'"); + AssertFmtEq("'%-.9u'", 1234567, "'1234567'"); + AssertFmtEq("'%-.20u'", 1234567, "'1234567'"); + AssertFmtEq("'%-0.u'", 1234567, "'1234567'"); + AssertFmtEq("'%-0.0u'", 1234567, "'1234567'"); + AssertFmtEq("'%-0.3u'", 1234567, "'1234567'"); + AssertFmtEq("'%-0.7u'", 1234567, "'1234567'"); + AssertFmtEq("'%-0.9u'", 1234567, "'1234567'"); + AssertFmtEq("'%-0.20u'", 1234567, "'1234567'"); + + // Flags & Width + AssertFmtEq("'%00u'", 1234567, "'1234567'"); + AssertFmtEq("'%03u'", 1234567, "'1234567'"); + AssertFmtEq("'%07u'", 1234567, "'1234567'"); + AssertFmtEq("'%09u'", 1234567, "'001234567'"); + AssertFmtEq("'%020u'", 1234567, "'00000000000001234567'"); + AssertFmtEq("'%-0u'", 1234567, "'1234567'"); + AssertFmtEq("'%-3u'", 1234567, "'1234567'"); + AssertFmtEq("'%-7u'", 1234567, "'1234567'"); + AssertFmtEq("'%-9u'", 1234567, "'1234567 '"); + AssertFmtEq("'%-20u'", 1234567, "'1234567 '"); + AssertFmtEq("'%-00u'", 1234567, "'1234567'"); + AssertFmtEq("'%-03u'", 1234567, "'1234567'"); + AssertFmtEq("'%-07u'", 1234567, "'1234567'"); + AssertFmtEq("'%-09u'", 1234567, "'123456700'"); + AssertFmtEq("'%-020u'", 1234567, "'12345670000000000000'"); + + // Flags & Precision & Width + AssertFmtEq("'%00.u'", 1234567, "'1234567'"); + AssertFmtEq("'%00.0u'", 1234567, "'1234567'"); + AssertFmtEq("'%00.3u'", 1234567, "'1234567'"); + AssertFmtEq("'%00.7u'", 1234567, "'1234567'"); + AssertFmtEq("'%00.9u'", 1234567, "'1234567'"); + AssertFmtEq("'%00.20u'", 1234567, "'1234567'"); + AssertFmtEq("'%03.u'", 1234567, "'1234567'"); + AssertFmtEq("'%03.0u'", 1234567, "'1234567'"); + AssertFmtEq("'%03.3u'", 1234567, "'1234567'"); + AssertFmtEq("'%03.7u'", 1234567, "'1234567'"); + AssertFmtEq("'%03.9u'", 1234567, "'1234567'"); + AssertFmtEq("'%03.20u'", 1234567, "'1234567'"); + AssertFmtEq("'%07.u'", 1234567, "'1234567'"); + AssertFmtEq("'%07.0u'", 1234567, "'1234567'"); + AssertFmtEq("'%07.3u'", 1234567, "'1234567'"); + AssertFmtEq("'%07.7u'", 1234567, "'1234567'"); + AssertFmtEq("'%07.9u'", 1234567, "'1234567'"); + AssertFmtEq("'%07.20u'", 1234567, "'1234567'"); + AssertFmtEq("'%09.u'", 1234567, "'001234567'"); + AssertFmtEq("'%09.0u'", 1234567, "'001234567'"); + AssertFmtEq("'%09.3u'", 1234567, "'001234567'"); + AssertFmtEq("'%09.7u'", 1234567, "'001234567'"); + AssertFmtEq("'%09.9u'", 1234567, "'001234567'"); + AssertFmtEq("'%09.20u'", 1234567, "'001234567'"); + AssertFmtEq("'%020.u'", 1234567, "'00000000000001234567'"); + AssertFmtEq("'%020.0u'", 1234567, "'00000000000001234567'"); + AssertFmtEq("'%020.3u'", 1234567, "'00000000000001234567'"); + AssertFmtEq("'%020.7u'", 1234567, "'00000000000001234567'"); + AssertFmtEq("'%020.9u'", 1234567, "'00000000000001234567'"); + AssertFmtEq("'%020.20u'", 1234567, "'00000000000001234567'"); + + AssertFmtEq("'%-0.u'", 1234567, "'1234567'"); + AssertFmtEq("'%-0.0u'", 1234567, "'1234567'"); + AssertFmtEq("'%-0.3u'", 1234567, "'1234567'"); + AssertFmtEq("'%-0.7u'", 1234567, "'1234567'"); + AssertFmtEq("'%-0.9u'", 1234567, "'1234567'"); + AssertFmtEq("'%-0.20u'", 1234567, "'1234567'"); + AssertFmtEq("'%-3.u'", 1234567, "'1234567'"); + AssertFmtEq("'%-3.0u'", 1234567, "'1234567'"); + AssertFmtEq("'%-3.3u'", 1234567, "'1234567'"); + AssertFmtEq("'%-3.7u'", 1234567, "'1234567'"); + AssertFmtEq("'%-3.9u'", 1234567, "'1234567'"); + AssertFmtEq("'%-3.20u'", 1234567, "'1234567'"); + AssertFmtEq("'%-7.u'", 1234567, "'1234567'"); + AssertFmtEq("'%-7.0u'", 1234567, "'1234567'"); + AssertFmtEq("'%-7.3u'", 1234567, "'1234567'"); + AssertFmtEq("'%-7.7u'", 1234567, "'1234567'"); + AssertFmtEq("'%-7.9u'", 1234567, "'1234567'"); + AssertFmtEq("'%-7.20u'", 1234567, "'1234567'"); + AssertFmtEq("'%-9.u'", 1234567, "'1234567 '"); + AssertFmtEq("'%-9.0u'", 1234567, "'1234567 '"); + AssertFmtEq("'%-9.3u'", 1234567, "'1234567 '"); + AssertFmtEq("'%-9.7u'", 1234567, "'1234567 '"); + AssertFmtEq("'%-9.9u'", 1234567, "'1234567 '"); + AssertFmtEq("'%-9.20u'", 1234567, "'1234567 '"); + AssertFmtEq("'%-20.u'", 1234567, "'1234567 '"); + AssertFmtEq("'%-20.0u'", 1234567, "'1234567 '"); + AssertFmtEq("'%-20.3u'", 1234567, "'1234567 '"); + AssertFmtEq("'%-20.7u'", 1234567, "'1234567 '"); + AssertFmtEq("'%-20.9u'", 1234567, "'1234567 '"); + AssertFmtEq("'%-20.20u'", 1234567, "'1234567 '"); + + AssertFmtEq("'%-00.u'", 1234567, "'1234567'"); + AssertFmtEq("'%-00.0u'", 1234567, "'1234567'"); + AssertFmtEq("'%-00.3u'", 1234567, "'1234567'"); + AssertFmtEq("'%-00.7u'", 1234567, "'1234567'"); + AssertFmtEq("'%-00.9u'", 1234567, "'1234567'"); + AssertFmtEq("'%-00.20u'", 1234567, "'1234567'"); + AssertFmtEq("'%-03.u'", 1234567, "'1234567'"); + AssertFmtEq("'%-03.0u'", 1234567, "'1234567'"); + AssertFmtEq("'%-03.3u'", 1234567, "'1234567'"); + AssertFmtEq("'%-03.7u'", 1234567, "'1234567'"); + AssertFmtEq("'%-03.9u'", 1234567, "'1234567'"); + AssertFmtEq("'%-03.20u'", 1234567, "'1234567'"); + AssertFmtEq("'%-07.u'", 1234567, "'1234567'"); + AssertFmtEq("'%-07.0u'", 1234567, "'1234567'"); + AssertFmtEq("'%-07.3u'", 1234567, "'1234567'"); + AssertFmtEq("'%-07.7u'", 1234567, "'1234567'"); + AssertFmtEq("'%-07.9u'", 1234567, "'1234567'"); + AssertFmtEq("'%-07.20u'", 1234567, "'1234567'"); + AssertFmtEq("'%-09.u'", 1234567, "'123456700'"); + AssertFmtEq("'%-09.0u'", 1234567, "'123456700'"); + AssertFmtEq("'%-09.3u'", 1234567, "'123456700'"); + AssertFmtEq("'%-09.7u'", 1234567, "'123456700'"); + AssertFmtEq("'%-09.9u'", 1234567, "'123456700'"); + AssertFmtEq("'%-09.20u'", 1234567, "'123456700'"); + AssertFmtEq("'%-020.u'", 1234567, "'12345670000000000000'"); + AssertFmtEq("'%-020.0u'", 1234567, "'12345670000000000000'"); + AssertFmtEq("'%-020.3u'", 1234567, "'12345670000000000000'"); + AssertFmtEq("'%-020.7u'", 1234567, "'12345670000000000000'"); + AssertFmtEq("'%-020.9u'", 1234567, "'12345670000000000000'"); + AssertFmtEq("'%-020.20u'" , 1234567, "'12345670000000000000'"); +} + + +void TestFloat() +{ + // Note: right-padding only with spaces, ZEROPAD is ignored + SetTestContext("Test Float"); + + // Base + AssertFmtEq("'%f'", 0.0, "'0.000000'"); + AssertFmtEq("'%f'", 0.000003, "'0.000003'"); + AssertFmtEq("'%f'", 1.0, "'1.000000'"); + AssertFmtEq("'%f'", 3.141, "'3.141000'"); + AssertFmtEq("'%f'", 123456.125, "'123456.125000'"); + AssertFmtEq("'%f'", -0.000003, "'-0.000003'"); + AssertFmtEq("'%f'", -1.0, "'-1.000000'"); + AssertFmtEq("'%f'", -3.141, "'-3.141000'"); + AssertFmtEq("'%f'", -123456.125, "'-123456.125000'"); + + // Precision + AssertFmtEq("'%.0f'", 0.0, "'0'"); + AssertFmtEq("'%.0f'", 0.000001, "'0'"); + AssertFmtEq("'%.0f'", 1.0, "'1'"); + AssertFmtEq("'%.0f'", 3.2, "'3'"); + AssertFmtEq("'%.0f'", 3.5, "'3'"); + AssertFmtEq("'%.0f'", 3.5, "'3'"); + AssertFmtEq("'%.1f'", 3.625, "'3.6'"); + AssertFmtEq("'%.2f'", 3.625, "'3.62'"); + AssertFmtEq("'%.3f'", 3.625, "'3.625'"); + AssertFmtEq("'%.6f'", 3.625, "'3.625000'"); + AssertFmtEq("'%.9f'", 3.625, "'3.625000000'"); + AssertFmtEq("'%.20f'", 3.625, "'3.62500000000000000000'"); + AssertFmtEq("'%.0f'", -0.000001, "'-0'"); + AssertFmtEq("'%.0f'", -1.0, "'-1'"); + AssertFmtEq("'%.0f'", -3.2, "'-3'"); + AssertFmtEq("'%.0f'", -3.5, "'-3'"); + AssertFmtEq("'%.0f'", -3.5, "'-3'"); + AssertFmtEq("'%.1f'", -3.625, "'-3.6'"); + AssertFmtEq("'%.2f'", -3.625, "'-3.62'"); + AssertFmtEq("'%.3f'", -3.625, "'-3.625'"); + AssertFmtEq("'%.6f'", -3.625, "'-3.625000'"); + AssertFmtEq("'%.9f'", -3.625, "'-3.625000000'"); + AssertFmtEq("'%.20f'", -3.625, "'-3.62500000000000000000'"); + + // Width + AssertFmtEq("'%0f'", 3.625, "'3.625000'"); + AssertFmtEq("'%3f'", 3.625, "'3.625000'"); + AssertFmtEq("'%9f'", 3.625, "' 3.625000'"); + AssertFmtEq("'%20f'", 3.625, "' 3.625000'"); + AssertFmtEq("'%0f'", -3.625, "'-3.625000'"); + AssertFmtEq("'%3f'", -3.625, "'-3.625000'"); + AssertFmtEq("'%9f'", -3.625, "'-3.625000'"); + AssertFmtEq("'%20f'", -3.625, "' -3.625000'"); + + // Width & Precision + AssertFmtEq("'%0.1f'", 3.625, "'3.6'"); + AssertFmtEq("'%0.3f'", 3.625, "'3.625'"); + AssertFmtEq("'%0.9f'", 3.625, "'3.625000000'"); + AssertFmtEq("'%3.1f'", 3.625, "'3.6'"); + AssertFmtEq("'%3.3f'", 3.625, "'3.625'"); + AssertFmtEq("'%3.9f'", 3.625, "'3.625000000'"); + AssertFmtEq("'%9.1f'", 3.625, "' 3.6'"); + AssertFmtEq("'%9.3f'", 3.625, "' 3.625'"); + AssertFmtEq("'%9.9f'", 3.625, "'3.625000000'"); + AssertFmtEq("'%20.1f'", 3.625, "' 3.6'"); + AssertFmtEq("'%20.3f'", 3.625, "' 3.625'"); + AssertFmtEq("'%20.9f'", 3.625, "' 3.625000000'"); + + // Flags + AssertFmtEq("'%0f'", 3.625, "'3.625000'"); + AssertFmtEq("'%-f'", 3.625, "'3.625000'"); + AssertFmtEq("'%0-f'", 3.625, "'3.625000'"); + + // Flags & Precision + AssertFmtEq("'%0.f'", 3.625, "'3'"); + AssertFmtEq("'%0.0f'", 3.625, "'3'"); + AssertFmtEq("'%0.1f'", 3.625, "'3.6'"); + AssertFmtEq("'%0.3f'", 3.625, "'3.625'"); + AssertFmtEq("'%0.6f'", 3.625, "'3.625000'"); + AssertFmtEq("'%0.9f'", 3.625, "'3.625000000'"); + AssertFmtEq("'%0.20f'", 3.625, "'3.62500000000000000000'"); + AssertFmtEq("'%-.f'", 3.625, "'3'"); + AssertFmtEq("'%-.0f'", 3.625, "'3'"); + AssertFmtEq("'%-.1f'", 3.625, "'3.6'"); + AssertFmtEq("'%-.3f'", 3.625, "'3.625'"); + AssertFmtEq("'%-.6f'", 3.625, "'3.625000'"); + AssertFmtEq("'%-.9f'", 3.625, "'3.625000000'"); + AssertFmtEq("'%-.20f'", 3.625, "'3.62500000000000000000'"); + AssertFmtEq("'%-0.f'", 3.625, "'3'"); + AssertFmtEq("'%-0.0f'", 3.625, "'3'"); + AssertFmtEq("'%-0.1f'", 3.625, "'3.6'"); + AssertFmtEq("'%-0.3f'", 3.625, "'3.625'"); + AssertFmtEq("'%-0.6f'", 3.625, "'3.625000'"); + AssertFmtEq("'%-0.9f'", 3.625, "'3.625000000'"); + AssertFmtEq("'%-0.20f'", 3.625, "'3.62500000000000000000'"); + + // Flags & Width + AssertFmtEq("'%00f'", 3.625, "'3.625000'"); + AssertFmtEq("'%01f'", 3.625, "'3.625000'"); + AssertFmtEq("'%03f'", 3.625, "'3.625000'"); + AssertFmtEq("'%06f'", 3.625, "'3.625000'"); + AssertFmtEq("'%09f'", 3.625, "'03.625000'"); + AssertFmtEq("'%020f'", 3.625, "'0000000000003.625000'"); + AssertFmtEq("'%-0f'", 3.625, "'3.625000'"); + AssertFmtEq("'%-1f'", 3.625, "'3.625000'"); + AssertFmtEq("'%-3f'", 3.625, "'3.625000'"); + AssertFmtEq("'%-6f'", 3.625, "'3.625000'"); + AssertFmtEq("'%-9f'", 3.625, "'3.625000 '"); + AssertFmtEq("'%-20f'", 3.625, "'3.625000 '"); + AssertFmtEq("'%-00f'", 3.625, "'3.625000'"); + AssertFmtEq("'%-01f'", 3.625, "'3.625000'"); + AssertFmtEq("'%-03f'", 3.625, "'3.625000'"); + AssertFmtEq("'%-06f'", 3.625, "'3.625000'"); + AssertFmtEq("'%-09f'", 3.625, "'3.625000 '"); // Ref sprintf: right-padding only with spaces, ZEROPAD is ignored + AssertFmtEq("'%-020f'", 3.625, "'3.625000 '"); // Ref sprintf: right-padding only with spaces, ZEROPAD is ignored + + // Flags & Precision & Width + AssertFmtEq("'%00.f'", 3.625, "'3'"); + AssertFmtEq("'%00.0f'", 3.625, "'3'"); + AssertFmtEq("'%00.1f'", 3.625, "'3.6'"); + AssertFmtEq("'%00.3f'", 3.625, "'3.625'"); + AssertFmtEq("'%00.6f'", 3.625, "'3.625000'"); + AssertFmtEq("'%00.9f'", 3.625, "'3.625000000'"); + AssertFmtEq("'%00.20f'", 3.625, "'3.62500000000000000000'"); + AssertFmtEq("'%01.f'", 3.625, "'3'"); + AssertFmtEq("'%01.0f'", 3.625, "'3'"); + AssertFmtEq("'%01.1f'", 3.625, "'3.6'"); + AssertFmtEq("'%01.3f'", 3.625, "'3.625'"); + AssertFmtEq("'%01.6f'", 3.625, "'3.625000'"); + AssertFmtEq("'%01.9f'", 3.625, "'3.625000000'"); + AssertFmtEq("'%01.20f'", 3.625, "'3.62500000000000000000'"); + AssertFmtEq("'%03.f'", 3.625, "'003'"); + AssertFmtEq("'%03.0f'", 3.625, "'003'"); + AssertFmtEq("'%03.1f'", 3.625, "'3.6'"); + AssertFmtEq("'%03.3f'", 3.625, "'3.625'"); + AssertFmtEq("'%03.6f'", 3.625, "'3.625000'"); + AssertFmtEq("'%03.9f'", 3.625, "'3.625000000'"); + AssertFmtEq("'%03.20f'", 3.625, "'3.62500000000000000000'"); + AssertFmtEq("'%06.f'", 3.625, "'000003'"); + AssertFmtEq("'%06.0f'", 3.625, "'000003'"); + AssertFmtEq("'%06.1f'", 3.625, "'0003.6'"); + AssertFmtEq("'%06.3f'", 3.625, "'03.625'"); + AssertFmtEq("'%06.6f'", 3.625, "'3.625000'"); + AssertFmtEq("'%06.9f'", 3.625, "'3.625000000'"); + AssertFmtEq("'%06.20f'", 3.625, "'3.62500000000000000000'"); + AssertFmtEq("'%09.f'", 3.625, "'000000003'"); + AssertFmtEq("'%09.0f'", 3.625, "'000000003'"); + AssertFmtEq("'%09.1f'", 3.625, "'0000003.6'"); + AssertFmtEq("'%09.3f'", 3.625, "'00003.625'"); + AssertFmtEq("'%09.6f'", 3.625, "'03.625000'"); + AssertFmtEq("'%09.9f'", 3.625, "'3.625000000'"); + AssertFmtEq("'%09.20f'", 3.625, "'3.62500000000000000000'"); + AssertFmtEq("'%020.f'", 3.625, "'00000000000000000003'"); + AssertFmtEq("'%020.0f'", 3.625, "'00000000000000000003'"); + AssertFmtEq("'%020.1f'", 3.625, "'000000000000000003.6'"); + AssertFmtEq("'%020.3f'", 3.625, "'0000000000000003.625'"); + AssertFmtEq("'%020.6f'", 3.625, "'0000000000003.625000'"); + AssertFmtEq("'%020.9f'", 3.625, "'0000000003.625000000'"); + AssertFmtEq("'%020.20f'", 3.625, "'3.62500000000000000000'"); + + AssertFmtEq("'%-0.f'", 3.625, "'3'"); + AssertFmtEq("'%-0.0f'", 3.625, "'3'"); + AssertFmtEq("'%-0.1f'", 3.625, "'3.6'"); + AssertFmtEq("'%-0.3f'", 3.625, "'3.625'"); + AssertFmtEq("'%-0.6f'", 3.625, "'3.625000'"); + AssertFmtEq("'%-0.9f'", 3.625, "'3.625000000'"); + AssertFmtEq("'%-0.20f'", 3.625, "'3.62500000000000000000'"); + AssertFmtEq("'%-1.f'", 3.625, "'3'"); + AssertFmtEq("'%-1.0f'", 3.625, "'3'"); + AssertFmtEq("'%-1.1f'", 3.625, "'3.6'"); + AssertFmtEq("'%-1.3f'", 3.625, "'3.625'"); + AssertFmtEq("'%-1.6f'", 3.625, "'3.625000'"); + AssertFmtEq("'%-1.9f'", 3.625, "'3.625000000'"); + AssertFmtEq("'%-1.20f'", 3.625, "'3.62500000000000000000'"); + AssertFmtEq("'%-3.f'", 3.625, "'3 '"); + AssertFmtEq("'%-3.0f'", 3.625, "'3 '"); + AssertFmtEq("'%-3.1f'", 3.625, "'3.6'"); + AssertFmtEq("'%-3.3f'", 3.625, "'3.625'"); + AssertFmtEq("'%-3.6f'", 3.625, "'3.625000'"); + AssertFmtEq("'%-3.9f'", 3.625, "'3.625000000'"); + AssertFmtEq("'%-3.20f'", 3.625, "'3.62500000000000000000'"); + AssertFmtEq("'%-6.f'", 3.625, "'3 '"); + AssertFmtEq("'%-6.0f'", 3.625, "'3 '"); + AssertFmtEq("'%-6.1f'", 3.625, "'3.6 '"); + AssertFmtEq("'%-6.3f'", 3.625, "'3.625 '"); + AssertFmtEq("'%-6.6f'", 3.625, "'3.625000'"); + AssertFmtEq("'%-6.9f'", 3.625, "'3.625000000'"); + AssertFmtEq("'%-6.20f'", 3.625, "'3.62500000000000000000'"); + AssertFmtEq("'%-9.f'", 3.625, "'3 '"); + AssertFmtEq("'%-9.0f'", 3.625, "'3 '"); + AssertFmtEq("'%-9.1f'", 3.625, "'3.6 '"); + AssertFmtEq("'%-9.3f'", 3.625, "'3.625 '"); + AssertFmtEq("'%-9.6f'", 3.625, "'3.625000 '"); + AssertFmtEq("'%-9.9f'", 3.625, "'3.625000000'"); + AssertFmtEq("'%-9.20f'", 3.625, "'3.62500000000000000000'"); + AssertFmtEq("'%-20.f'", 3.625, "'3 '"); + AssertFmtEq("'%-20.0f'", 3.625, "'3 '"); + AssertFmtEq("'%-20.1f'", 3.625, "'3.6 '"); + AssertFmtEq("'%-20.3f'", 3.625, "'3.625 '"); + AssertFmtEq("'%-20.6f'", 3.625, "'3.625000 '"); + AssertFmtEq("'%-20.9f'", 3.625, "'3.625000000 '"); + AssertFmtEq("'%-20.20f'", 3.625, "'3.62500000000000000000'"); + + AssertFmtEq("'%-00.f'", 3.625, "'3'"); + AssertFmtEq("'%-00.0f'", 3.625, "'3'"); + AssertFmtEq("'%-00.1f'", 3.625, "'3.6'"); + AssertFmtEq("'%-00.3f'", 3.625, "'3.625'"); + AssertFmtEq("'%-00.6f'", 3.625, "'3.625000'"); + AssertFmtEq("'%-00.9f'", 3.625, "'3.625000000'"); + AssertFmtEq("'%-00.20f'", 3.625, "'3.62500000000000000000'"); + AssertFmtEq("'%-01.f'", 3.625, "'3'"); + AssertFmtEq("'%-01.0f'", 3.625, "'3'"); + AssertFmtEq("'%-01.1f'", 3.625, "'3.6'"); + AssertFmtEq("'%-01.3f'", 3.625, "'3.625'"); + AssertFmtEq("'%-01.6f'", 3.625, "'3.625000'"); + AssertFmtEq("'%-01.9f'", 3.625, "'3.625000000'"); + AssertFmtEq("'%-01.20f'", 3.625, "'3.62500000000000000000'"); + AssertFmtEq("'%-03.f'", 3.625, "'3 '"); // Ref sprintf: right-padding only with spaces, ZEROPAD is ignored + AssertFmtEq("'%-03.0f'", 3.625, "'3 '"); // Ref sprintf: right-padding only with spaces, ZEROPAD is ignored + AssertFmtEq("'%-03.1f'", 3.625, "'3.6'"); + AssertFmtEq("'%-03.3f'", 3.625, "'3.625'"); + AssertFmtEq("'%-03.6f'", 3.625, "'3.625000'"); + AssertFmtEq("'%-03.9f'", 3.625, "'3.625000000'"); + AssertFmtEq("'%-03.20f'", 3.625, "'3.62500000000000000000'"); + AssertFmtEq("'%-06.f'", 3.625, "'3 '"); // Ref sprintf: right-padding only with spaces, ZEROPAD is ignored + AssertFmtEq("'%-06.0f'", 3.625, "'3 '"); // Ref sprintf: right-padding only with spaces, ZEROPAD is ignored + AssertFmtEq("'%-06.1f'", 3.625, "'3.6 '"); // Ref sprintf: right-padding only with spaces, ZEROPAD is ignored + AssertFmtEq("'%-06.3f'", 3.625, "'3.625 '"); // Ref sprintf: right-padding only with spaces, ZEROPAD is ignored + AssertFmtEq("'%-06.6f'", 3.625, "'3.625000'"); + AssertFmtEq("'%-06.9f'", 3.625, "'3.625000000'"); + AssertFmtEq("'%-06.20f'", 3.625, "'3.62500000000000000000'"); + AssertFmtEq("'%-09.f'", 3.625, "'3 '"); // Ref sprintf: right-padding only with spaces, ZEROPAD is ignored + AssertFmtEq("'%-09.0f'", 3.625, "'3 '"); // Ref sprintf: right-padding only with spaces, ZEROPAD is ignored + AssertFmtEq("'%-09.1f'", 3.625, "'3.6 '"); // Ref sprintf: right-padding only with spaces, ZEROPAD is ignored + AssertFmtEq("'%-09.3f'", 3.625, "'3.625 '"); // Ref sprintf: right-padding only with spaces, ZEROPAD is ignored + AssertFmtEq("'%-09.6f'", 3.625, "'3.625000 '"); // Ref sprintf: right-padding only with spaces, ZEROPAD is ignored + AssertFmtEq("'%-09.9f'", 3.625, "'3.625000000'"); + AssertFmtEq("'%-09.20f'", 3.625, "'3.62500000000000000000'"); + AssertFmtEq("'%-020.f'", 3.625, "'3 '"); // Ref sprintf: right-padding only with spaces, ZEROPAD is ignored + AssertFmtEq("'%-020.0f'", 3.625, "'3 '"); // Ref sprintf: right-padding only with spaces, ZEROPAD is ignored + AssertFmtEq("'%-020.1f'", 3.625, "'3.6 '"); // Ref sprintf: right-padding only with spaces, ZEROPAD is ignored + AssertFmtEq("'%-020.3f'", 3.625, "'3.625 '"); // Ref sprintf: right-padding only with spaces, ZEROPAD is ignored + AssertFmtEq("'%-020.6f'", 3.625, "'3.625000 '"); // Ref sprintf: right-padding only with spaces, ZEROPAD is ignored + AssertFmtEq("'%-020.9f'", 3.625, "'3.625000000 '"); // Ref sprintf: right-padding only with spaces, ZEROPAD is ignored + AssertFmtEq("'%-020.20f'", 3.625, "'3.62500000000000000000'"); + + // Error + AssertFmtEq("'%.f'", 3.5, "'3'"); + AssertFmtEq("'%.-f'", 3.5, "'3'"); + AssertFmtEq("'%.0-f'", 3.5, "'3'"); + AssertFmtEq("'%0.f'", 3.5, "'3'"); + AssertFmtEq("'%0.-f'", 3.5, "'3'"); + AssertFmtEq("'%0.0-f'", 3.5, "'3'"); + AssertFmtEq("'%.f'", -3.5, "'-3'"); + AssertFmtEq("'%.-f'", -3.5, "'-3'"); + AssertFmtEq("'%.0-f'", -3.5, "'-3'"); + AssertFmtEq("'%0.f'", -3.5, "'-3'"); + AssertFmtEq("'%0.-f'", -3.5, "'-3'"); + AssertFmtEq("'%0.0-f'", -3.5, "'-3'"); + + // Special + AssertFmtEq("'%f'", (0.0 / 0.0), "'NaN'"); + AssertFmtEq("'%f'", (1.0 / 0.0), "'Inf'"); + AssertFmtEq("'%f'", (-1.0 / 0.0), "'-Inf'"); + + // Special & Precision + AssertFmtEq("'%.0f'", (0.0 / 0.0), "''"); + AssertFmtEq("'%.3f'", (0.0 / 0.0), "'NaN'"); + AssertFmtEq("'%.9f'", (0.0 / 0.0), "'NaN'"); + + AssertFmtEq("'%.0f'", (1.0 / 0.0), "''"); + AssertFmtEq("'%.3f'", (1.0 / 0.0), "'Inf'"); + AssertFmtEq("'%.9f'", (1.0 / 0.0), "'Inf'"); + + AssertFmtEq("'%.0f'", (-1.0 / 0.0), "''"); + AssertFmtEq("'%.4f'", (-1.0 / 0.0), "'-Inf'"); + AssertFmtEq("'%.9f'", (-1.0 / 0.0), "'-Inf'"); + + // Special & Width + AssertFmtEq("'%0f'", (0.0 / 0.0), "'NaN'"); + AssertFmtEq("'%3f'", (0.0 / 0.0), "'NaN'"); + AssertFmtEq("'%9f'", (0.0 / 0.0), "' NaN'"); + + AssertFmtEq("'%0f'", (1.0 / 0.0), "'Inf'"); + AssertFmtEq("'%3f'", (1.0 / 0.0), "'Inf'"); + AssertFmtEq("'%9f'", (1.0 / 0.0), "' Inf'"); + + AssertFmtEq("'%0f'", (-1.0 / 0.0), "'-Inf'"); + AssertFmtEq("'%4f'", (-1.0 / 0.0), "'-Inf'"); + AssertFmtEq("'%9f'", (-1.0 / 0.0), "' -Inf'"); + + // Special & Width & Precision + AssertFmtEq("'%0.0f'", (0.0 / 0.0), "''"); + AssertFmtEq("'%0.3f'", (0.0 / 0.0), "'NaN'"); + AssertFmtEq("'%0.9f'", (0.0 / 0.0), "'NaN'"); + AssertFmtEq("'%3.0f'", (0.0 / 0.0), "' '"); + AssertFmtEq("'%3.3f'", (0.0 / 0.0), "'NaN'"); + AssertFmtEq("'%3.9f'", (0.0 / 0.0), "'NaN'"); + AssertFmtEq("'%9.0f'", (0.0 / 0.0), "' '"); + AssertFmtEq("'%9.3f'", (0.0 / 0.0), "' NaN'"); + AssertFmtEq("'%9.9f'", (0.0 / 0.0), "' NaN'"); + + AssertFmtEq("'%0.0f'", (1.0 / 0.0), "''"); + AssertFmtEq("'%0.3f'", (1.0 / 0.0), "'Inf'"); + AssertFmtEq("'%0.9f'", (1.0 / 0.0), "'Inf'"); + AssertFmtEq("'%3.0f'", (1.0 / 0.0), "' '"); + AssertFmtEq("'%3.3f'", (1.0 / 0.0), "'Inf'"); + AssertFmtEq("'%3.9f'", (1.0 / 0.0), "'Inf'"); + AssertFmtEq("'%9.0f'", (1.0 / 0.0), "' '"); + AssertFmtEq("'%9.3f'", (1.0 / 0.0), "' Inf'"); + AssertFmtEq("'%9.9f'", (1.0 / 0.0), "' Inf'"); + + AssertFmtEq("'%0.0f'", (-1.0 / 0.0), "''"); + AssertFmtEq("'%0.4f'", (-1.0 / 0.0), "'-Inf'"); + AssertFmtEq("'%0.9f'", (-1.0 / 0.0), "'-Inf'"); + AssertFmtEq("'%4.0f'", (-1.0 / 0.0), "' '"); + AssertFmtEq("'%4.4f'", (-1.0 / 0.0), "'-Inf'"); + AssertFmtEq("'%4.9f'", (-1.0 / 0.0), "'-Inf'"); + AssertFmtEq("'%9.0f'", (-1.0 / 0.0), "' '"); + AssertFmtEq("'%9.4f'", (-1.0 / 0.0), "' -Inf'"); + AssertFmtEq("'%9.9f'", (-1.0 / 0.0), "' -Inf'"); + + // Special & Flags + AssertFmtEq("'%0f'", (0.0 / 0.0), "'NaN'"); + AssertFmtEq("'%-f'", (0.0 / 0.0), "'NaN'"); + AssertFmtEq("'%0-f'", (0.0 / 0.0), "'NaN'"); + + AssertFmtEq("'%0f'", (1.0 / 0.0), "'Inf'"); + AssertFmtEq("'%-f'", (1.0 / 0.0), "'Inf'"); + AssertFmtEq("'%0-f'", (1.0 / 0.0), "'Inf'"); + + AssertFmtEq("'%0f'", (-1.0 / 0.0), "'-Inf'"); + AssertFmtEq("'%-f'", (-1.0 / 0.0), "'-Inf'"); + AssertFmtEq("'%0-f'", (-1.0 / 0.0), "'-Inf'"); + + // Special & Flags & Precision + AssertFmtEq("'%0.f'", (0.0 / 0.0), "''"); + AssertFmtEq("'%0.0f'", (0.0 / 0.0), "''"); + AssertFmtEq("'%0.3f'", (0.0 / 0.0), "'NaN'"); + AssertFmtEq("'%0.9f'", (0.0 / 0.0), "'NaN'"); + AssertFmtEq("'%-.f'", (0.0 / 0.0), "''"); + AssertFmtEq("'%-.0f'", (0.0 / 0.0), "''"); + AssertFmtEq("'%-.3f'", (0.0 / 0.0), "'NaN'"); + AssertFmtEq("'%-.9f'", (0.0 / 0.0), "'NaN'"); + AssertFmtEq("'%-0.f'", (0.0 / 0.0), "''"); + AssertFmtEq("'%-0.0f'", (0.0 / 0.0), "''"); + AssertFmtEq("'%-0.3f'", (0.0 / 0.0), "'NaN'"); + AssertFmtEq("'%-0.9f'", (0.0 / 0.0), "'NaN'"); + + AssertFmtEq("'%0.f'", (1.0 / 0.0), "''"); + AssertFmtEq("'%0.0f'", (1.0 / 0.0), "''"); + AssertFmtEq("'%0.3f'", (1.0 / 0.0), "'Inf'"); + AssertFmtEq("'%0.9f'", (1.0 / 0.0), "'Inf'"); + AssertFmtEq("'%-.f'", (1.0 / 0.0), "''"); + AssertFmtEq("'%-.0f'", (1.0 / 0.0), "''"); + AssertFmtEq("'%-.3f'", (1.0 / 0.0), "'Inf'"); + AssertFmtEq("'%-.9f'", (1.0 / 0.0), "'Inf'"); + AssertFmtEq("'%-0.f'", (1.0 / 0.0), "''"); + AssertFmtEq("'%-0.0f'", (1.0 / 0.0), "''"); + AssertFmtEq("'%-0.3f'", (1.0 / 0.0), "'Inf'"); + AssertFmtEq("'%-0.9f'", (1.0 / 0.0), "'Inf'"); + + AssertFmtEq("'%0.f'", (-1.0 / 0.0), "''"); + AssertFmtEq("'%0.0f'", (-1.0 / 0.0), "''"); + AssertFmtEq("'%0.4f'", (-1.0 / 0.0), "'-Inf'"); + AssertFmtEq("'%0.9f'", (-1.0 / 0.0), "'-Inf'"); + AssertFmtEq("'%-.f'", (-1.0 / 0.0), "''"); + AssertFmtEq("'%-.0f'", (-1.0 / 0.0), "''"); + AssertFmtEq("'%-.4f'", (-1.0 / 0.0), "'-Inf'"); + AssertFmtEq("'%-.9f'", (-1.0 / 0.0), "'-Inf'"); + AssertFmtEq("'%-0.f'", (-1.0 / 0.0), "''"); + AssertFmtEq("'%-0.0f'", (-1.0 / 0.0), "''"); + AssertFmtEq("'%-0.4f'", (-1.0 / 0.0), "'-Inf'"); + AssertFmtEq("'%-0.9f'", (-1.0 / 0.0), "'-Inf'"); + + // Special & Flags & Width + AssertFmtEq("'%00f'", (0.0 / 0.0), "'NaN'"); + AssertFmtEq("'%03f'", (0.0 / 0.0), "'NaN'"); + AssertFmtEq("'%09f'", (0.0 / 0.0), "' NaN'"); + AssertFmtEq("'%-0f'", (0.0 / 0.0), "'NaN'"); + AssertFmtEq("'%-3f'", (0.0 / 0.0), "'NaN'"); + AssertFmtEq("'%-9f'", (0.0 / 0.0), "'NaN '"); + AssertFmtEq("'%-00f'", (0.0 / 0.0), "'NaN'"); + AssertFmtEq("'%-03f'", (0.0 / 0.0), "'NaN'"); + AssertFmtEq("'%-09f'", (0.0 / 0.0), "'NaN '"); + + AssertFmtEq("'%00f'", (1.0 / 0.0), "'Inf'"); + AssertFmtEq("'%03f'", (1.0 / 0.0), "'Inf'"); + AssertFmtEq("'%09f'", (1.0 / 0.0), "' Inf'"); + AssertFmtEq("'%-0f'", (1.0 / 0.0), "'Inf'"); + AssertFmtEq("'%-3f'", (1.0 / 0.0), "'Inf'"); + AssertFmtEq("'%-9f'", (1.0 / 0.0), "'Inf '"); + AssertFmtEq("'%-00f'", (1.0 / 0.0), "'Inf'"); + AssertFmtEq("'%-03f'", (1.0 / 0.0), "'Inf'"); + AssertFmtEq("'%-09f'", (1.0 / 0.0), "'Inf '"); + + AssertFmtEq("'%00f'", (-1.0 / 0.0), "'-Inf'"); + AssertFmtEq("'%04f'", (-1.0 / 0.0), "'-Inf'"); + AssertFmtEq("'%09f'", (-1.0 / 0.0), "' -Inf'"); + AssertFmtEq("'%-0f'", (-1.0 / 0.0), "'-Inf'"); + AssertFmtEq("'%-4f'", (-1.0 / 0.0), "'-Inf'"); + AssertFmtEq("'%-9f'", (-1.0 / 0.0), "'-Inf '"); + AssertFmtEq("'%-00f'", (-1.0 / 0.0), "'-Inf'"); + AssertFmtEq("'%-04f'", (-1.0 / 0.0), "'-Inf'"); + AssertFmtEq("'%-09f'", (-1.0 / 0.0), "'-Inf '"); + + // Special & Flags & Precision & Width + AssertFmtEq("'%00.f'", (0.0 / 0.0), "''"); + AssertFmtEq("'%00.0f'", (0.0 / 0.0), "''"); + AssertFmtEq("'%00.3f'", (0.0 / 0.0), "'NaN'"); + AssertFmtEq("'%00.9f'", (0.0 / 0.0), "'NaN'"); + AssertFmtEq("'%03.f'", (0.0 / 0.0), "' '"); + AssertFmtEq("'%03.0f'", (0.0 / 0.0), "' '"); + AssertFmtEq("'%03.3f'", (0.0 / 0.0), "'NaN'"); + AssertFmtEq("'%03.9f'", (0.0 / 0.0), "'NaN'"); + AssertFmtEq("'%09.f'", (0.0 / 0.0), "' '"); + AssertFmtEq("'%09.0f'", (0.0 / 0.0), "' '"); + AssertFmtEq("'%09.3f'", (0.0 / 0.0), "' NaN'"); + AssertFmtEq("'%09.9f'", (0.0 / 0.0), "' NaN'"); + + AssertFmtEq("'%00.f'", (1.0 / 0.0), "''"); + AssertFmtEq("'%00.0f'", (1.0 / 0.0), "''"); + AssertFmtEq("'%00.3f'", (1.0 / 0.0), "'Inf'"); + AssertFmtEq("'%00.9f'", (1.0 / 0.0), "'Inf'"); + AssertFmtEq("'%03.f'", (1.0 / 0.0), "' '"); + AssertFmtEq("'%03.0f'", (1.0 / 0.0), "' '"); + AssertFmtEq("'%03.3f'", (1.0 / 0.0), "'Inf'"); + AssertFmtEq("'%03.9f'", (1.0 / 0.0), "'Inf'"); + AssertFmtEq("'%09.f'", (1.0 / 0.0), "' '"); + AssertFmtEq("'%09.0f'", (1.0 / 0.0), "' '"); + AssertFmtEq("'%09.3f'", (1.0 / 0.0), "' Inf'"); + AssertFmtEq("'%09.9f'", (1.0 / 0.0), "' Inf'"); + + AssertFmtEq("'%00.f'", (-1.0 / 0.0), "''"); + AssertFmtEq("'%00.0f'", (-1.0 / 0.0), "''"); + AssertFmtEq("'%00.4f'", (-1.0 / 0.0), "'-Inf'"); + AssertFmtEq("'%00.9f'", (-1.0 / 0.0), "'-Inf'"); + AssertFmtEq("'%04.f'", (-1.0 / 0.0), "' '"); + AssertFmtEq("'%04.0f'", (-1.0 / 0.0), "' '"); + AssertFmtEq("'%04.4f'", (-1.0 / 0.0), "'-Inf'"); + AssertFmtEq("'%04.9f'", (-1.0 / 0.0), "'-Inf'"); + AssertFmtEq("'%09.f'", (-1.0 / 0.0), "' '"); + AssertFmtEq("'%09.0f'", (-1.0 / 0.0), "' '"); + AssertFmtEq("'%09.4f'", (-1.0 / 0.0), "' -Inf'"); + AssertFmtEq("'%09.9f'", (-1.0 / 0.0), "' -Inf'"); + + AssertFmtEq("'%-0.f'", (0.0 / 0.0), "''"); + AssertFmtEq("'%-0.0f'", (0.0 / 0.0), "''"); + AssertFmtEq("'%-0.3f'", (0.0 / 0.0), "'NaN'"); + AssertFmtEq("'%-0.9f'", (0.0 / 0.0), "'NaN'"); + AssertFmtEq("'%-3.f'", (0.0 / 0.0), "' '"); + AssertFmtEq("'%-3.0f'", (0.0 / 0.0), "' '"); + AssertFmtEq("'%-3.3f'", (0.0 / 0.0), "'NaN'"); + AssertFmtEq("'%-3.9f'", (0.0 / 0.0), "'NaN'"); + AssertFmtEq("'%-9.f'", (0.0 / 0.0), "' '"); + AssertFmtEq("'%-9.0f'", (0.0 / 0.0), "' '"); + AssertFmtEq("'%-9.3f'", (0.0 / 0.0), "'NaN '"); + AssertFmtEq("'%-9.9f'", (0.0 / 0.0), "'NaN '"); + + AssertFmtEq("'%-0.f'", (1.0 / 0.0), "''"); + AssertFmtEq("'%-0.0f'", (1.0 / 0.0), "''"); + AssertFmtEq("'%-0.3f'", (1.0 / 0.0), "'Inf'"); + AssertFmtEq("'%-0.9f'", (1.0 / 0.0), "'Inf'"); + AssertFmtEq("'%-3.f'", (1.0 / 0.0), "' '"); + AssertFmtEq("'%-3.0f'", (1.0 / 0.0), "' '"); + AssertFmtEq("'%-3.3f'", (1.0 / 0.0), "'Inf'"); + AssertFmtEq("'%-3.9f'", (1.0 / 0.0), "'Inf'"); + AssertFmtEq("'%-9.f'", (1.0 / 0.0), "' '"); + AssertFmtEq("'%-9.0f'", (1.0 / 0.0), "' '"); + AssertFmtEq("'%-9.3f'", (1.0 / 0.0), "'Inf '"); + AssertFmtEq("'%-9.9f'", (1.0 / 0.0), "'Inf '"); + + AssertFmtEq("'%-0.f'", (-1.0 / 0.0), "''"); + AssertFmtEq("'%-0.0f'", (-1.0 / 0.0), "''"); + AssertFmtEq("'%-0.4f'", (-1.0 / 0.0), "'-Inf'"); + AssertFmtEq("'%-0.9f'", (-1.0 / 0.0), "'-Inf'"); + AssertFmtEq("'%-4.f'", (-1.0 / 0.0), "' '"); + AssertFmtEq("'%-4.0f'", (-1.0 / 0.0), "' '"); + AssertFmtEq("'%-4.4f'", (-1.0 / 0.0), "'-Inf'"); + AssertFmtEq("'%-4.9f'", (-1.0 / 0.0), "'-Inf'"); + AssertFmtEq("'%-9.f'", (-1.0 / 0.0), "' '"); + AssertFmtEq("'%-9.0f'", (-1.0 / 0.0), "' '"); + AssertFmtEq("'%-9.4f'", (-1.0 / 0.0), "'-Inf '"); + AssertFmtEq("'%-9.9f'", (-1.0 / 0.0), "'-Inf '"); + + AssertFmtEq("'%-00.f'", (0.0 / 0.0), "''"); + AssertFmtEq("'%-00.0f'", (0.0 / 0.0), "''"); + AssertFmtEq("'%-00.3f'", (0.0 / 0.0), "'NaN'"); + AssertFmtEq("'%-00.9f'", (0.0 / 0.0), "'NaN'"); + AssertFmtEq("'%-03.f'", (0.0 / 0.0), "' '"); + AssertFmtEq("'%-03.0f'", (0.0 / 0.0), "' '"); + AssertFmtEq("'%-03.3f'", (0.0 / 0.0), "'NaN'"); + AssertFmtEq("'%-03.9f'", (0.0 / 0.0), "'NaN'"); + AssertFmtEq("'%-09.f'", (0.0 / 0.0), "' '"); + AssertFmtEq("'%-09.0f'", (0.0 / 0.0), "' '"); + AssertFmtEq("'%-09.3f'", (0.0 / 0.0), "'NaN '"); + AssertFmtEq("'%-09.9f'", (0.0 / 0.0), "'NaN '"); + + AssertFmtEq("'%-00.f'", (1.0 / 0.0), "''"); + AssertFmtEq("'%-00.0f'", (1.0 / 0.0), "''"); + AssertFmtEq("'%-00.3f'", (1.0 / 0.0), "'Inf'"); + AssertFmtEq("'%-00.9f'", (1.0 / 0.0), "'Inf'"); + AssertFmtEq("'%-03.f'", (1.0 / 0.0), "' '"); + AssertFmtEq("'%-03.0f'", (1.0 / 0.0), "' '"); + AssertFmtEq("'%-03.3f'", (1.0 / 0.0), "'Inf'"); + AssertFmtEq("'%-03.9f'", (1.0 / 0.0), "'Inf'"); + AssertFmtEq("'%-09.f'", (1.0 / 0.0), "' '"); + AssertFmtEq("'%-09.0f'", (1.0 / 0.0), "' '"); + AssertFmtEq("'%-09.3f'", (1.0 / 0.0), "'Inf '"); + AssertFmtEq("'%-09.9f'", (1.0 / 0.0), "'Inf '"); + + AssertFmtEq("'%-00.f'", (-1.0 / 0.0), "''"); + AssertFmtEq("'%-00.0f'", (-1.0 / 0.0), "''"); + AssertFmtEq("'%-00.4f'", (-1.0 / 0.0), "'-Inf'"); + AssertFmtEq("'%-00.9f'", (-1.0 / 0.0), "'-Inf'"); + AssertFmtEq("'%-04.f'", (-1.0 / 0.0), "' '"); + AssertFmtEq("'%-04.0f'", (-1.0 / 0.0), "' '"); + AssertFmtEq("'%-04.4f'", (-1.0 / 0.0), "'-Inf'"); + AssertFmtEq("'%-04.9f'", (-1.0 / 0.0), "'-Inf'"); + AssertFmtEq("'%-09.f'", (-1.0 / 0.0), "' '"); + AssertFmtEq("'%-09.0f'", (-1.0 / 0.0), "' '"); + AssertFmtEq("'%-09.4f'", (-1.0 / 0.0), "'-Inf '"); + AssertFmtEq("'%-09.9f'", (-1.0 / 0.0), "'-Inf '"); +} + + +void TestSpecial() +{ + SetTestContext("Test Special"); + + // Base + AssertFmtEq("'%N'", 0, "'Console'"); + AssertFmtEq("'%L'", 0, "'Console<0>'"); + AssertFmtEq("'%E'", 0, "'worldspawn'"); + + // Precision + AssertFmtEq("'%.0N'", 0, "''"); + AssertFmtEq("'%.3N'", 0, "'Con'"); + AssertFmtEq("'%.7N'", 0, "'Console'"); + AssertFmtEq("'%.20N'", 0, "'Console'"); + + AssertFmtEq("'%.0L'", 0, "''"); + AssertFmtEq("'%.3L'", 0, "'Con'"); + AssertFmtEq("'%.28L'", 0, "'Console<0>'"); + AssertFmtEq("'%.32L'", 0, "'Console<0>'"); + + AssertFmtEq("'%.0E'", 0, "''"); + AssertFmtEq("'%.3E'", 0, "'wor'"); + AssertFmtEq("'%.10E'", 0, "'worldspawn'"); + AssertFmtEq("'%.20E'", 0, "'worldspawn'"); + + // Width + AssertFmtEq("'%0N'", 0, "'Console'"); + AssertFmtEq("'%3N'", 0, "'Console'"); + AssertFmtEq("'%7N'", 0, "'Console'"); + AssertFmtEq("'%20N'", 0, "' Console'"); + + AssertFmtEq("'%0L'", 0, "'Console<0>'"); + AssertFmtEq("'%3L'", 0, "'Console<0>'"); + AssertFmtEq("'%28L'", 0, "'Console<0>'"); + AssertFmtEq("'%32L'", 0, "' Console<0>'"); + + AssertFmtEq("'%0E'", 0, "'worldspawn'"); + AssertFmtEq("'%3E'", 0, "'worldspawn'"); + AssertFmtEq("'%10E'", 0, "'worldspawn'"); + AssertFmtEq("'%20E'", 0, "' worldspawn'"); + + // Width & Precision + AssertFmtEq("'%0.3N'", 0, "'Con'"); + AssertFmtEq("'%0.7N'", 0, "'Console'"); + AssertFmtEq("'%0.20N'", 0, "'Console'"); + AssertFmtEq("'%3.3N'", 0, "'Con'"); + AssertFmtEq("'%3.7N'", 0, "'Console'"); + AssertFmtEq("'%3.20N'", 0, "'Console'"); + AssertFmtEq("'%7.3N'", 0, "' Con'"); + AssertFmtEq("'%7.7N'", 0, "'Console'"); + AssertFmtEq("'%7.20N'", 0, "'Console'"); + AssertFmtEq("'%20.3N'", 0, "' Con'"); + AssertFmtEq("'%20.7N'", 0, "' Console'"); + AssertFmtEq("'%20.20N'", 0, "' Console'"); + + AssertFmtEq("'%0.3L'", 0, "'Con'"); + AssertFmtEq("'%0.28L'", 0, "'Console<0>'"); + AssertFmtEq("'%0.32L'", 0, "'Console<0>'"); + AssertFmtEq("'%3.3L'", 0, "'Con'"); + AssertFmtEq("'%3.28L'", 0, "'Console<0>'"); + AssertFmtEq("'%3.32L'", 0, "'Console<0>'"); + AssertFmtEq("'%28.3L'", 0, "' Con'"); + AssertFmtEq("'%28.28L'", 0, "'Console<0>'"); + AssertFmtEq("'%28.32L'", 0, "'Console<0>'"); + AssertFmtEq("'%32.3L'", 0, "' Con'"); + AssertFmtEq("'%32.28L'", 0, "' Console<0>'"); + AssertFmtEq("'%32.32L'", 0, "' Console<0>'"); + + AssertFmtEq("'%0.3E'", 0, "'wor'"); + AssertFmtEq("'%0.10E'", 0, "'worldspawn'"); + AssertFmtEq("'%0.20E'", 0, "'worldspawn'"); + AssertFmtEq("'%3.3E'", 0, "'wor'"); + AssertFmtEq("'%3.10E'", 0, "'worldspawn'"); + AssertFmtEq("'%3.20E'", 0, "'worldspawn'"); + AssertFmtEq("'%10.3E'", 0, "' wor'"); + AssertFmtEq("'%10.10E'", 0, "'worldspawn'"); + AssertFmtEq("'%10.20E'", 0, "'worldspawn'"); + AssertFmtEq("'%20.3E'", 0, "' wor'"); + AssertFmtEq("'%20.10E'", 0, "' worldspawn'"); + AssertFmtEq("'%20.20E'", 0, "' worldspawn'"); + + // Flags + AssertFmtEq("'%0N'", 0, "'Console'"); + AssertFmtEq("'%-N'", 0, "'Console'"); + AssertFmtEq("'%0-N'", 0, "'Console'"); + + AssertFmtEq("'%0L'", 0, "'Console<0>'"); + AssertFmtEq("'%-L'", 0, "'Console<0>'"); + AssertFmtEq("'%0-L'", 0, "'Console<0>'"); + + AssertFmtEq("'%0E'", 0, "'worldspawn'"); + AssertFmtEq("'%-E'", 0, "'worldspawn'"); + AssertFmtEq("'%0-E'", 0, "'worldspawn'"); + + // Flags & Precision + AssertFmtEq("'%0.N'", 0, "''"); + AssertFmtEq("'%0.0N'", 0, "''"); + AssertFmtEq("'%0.3N'", 0, "'Con'"); + AssertFmtEq("'%0.7N'", 0, "'Console'"); + AssertFmtEq("'%0.20N'", 0, "'Console'"); + AssertFmtEq("'%-.N'", 0, "''"); + AssertFmtEq("'%-.0N'", 0, "''"); + AssertFmtEq("'%-.3N'", 0, "'Con'"); + AssertFmtEq("'%-.7N'", 0, "'Console'"); + AssertFmtEq("'%-.20N'", 0, "'Console'"); + AssertFmtEq("'%-0.N'", 0, "''"); + AssertFmtEq("'%-0.0N'", 0, "''"); + AssertFmtEq("'%-0.3N'", 0, "'Con'"); + AssertFmtEq("'%-0.7N'", 0, "'Console'"); + AssertFmtEq("'%-0.20N'", 0, "'Console'"); + + AssertFmtEq("'%0.L'", 0, "''"); + AssertFmtEq("'%0.0L'", 0, "''"); + AssertFmtEq("'%0.3L'", 0, "'Con'"); + AssertFmtEq("'%0.28L'", 0, "'Console<0>'"); + AssertFmtEq("'%0.32L'", 0, "'Console<0>'"); + AssertFmtEq("'%-.L'", 0, "''"); + AssertFmtEq("'%-.0L'", 0, "''"); + AssertFmtEq("'%-.3L'", 0, "'Con'"); + AssertFmtEq("'%-.28L'", 0, "'Console<0>'"); + AssertFmtEq("'%-.32L'", 0, "'Console<0>'"); + AssertFmtEq("'%-0.L'", 0, "''"); + AssertFmtEq("'%-0.0L'", 0, "''"); + AssertFmtEq("'%-0.3L'", 0, "'Con'"); + AssertFmtEq("'%-0.28L'", 0, "'Console<0>'"); + AssertFmtEq("'%-0.32L'", 0, "'Console<0>'"); + + AssertFmtEq("'%0.E'", 0, "''"); + AssertFmtEq("'%0.0E'", 0, "''"); + AssertFmtEq("'%0.3E'", 0, "'wor'"); + AssertFmtEq("'%0.10E'", 0, "'worldspawn'"); + AssertFmtEq("'%0.20E'", 0, "'worldspawn'"); + AssertFmtEq("'%-.E'", 0, "''"); + AssertFmtEq("'%-.0E'", 0, "''"); + AssertFmtEq("'%-.3E'", 0, "'wor'"); + AssertFmtEq("'%-.10E'", 0, "'worldspawn'"); + AssertFmtEq("'%-.20E'", 0, "'worldspawn'"); + AssertFmtEq("'%-0.E'", 0, "''"); + AssertFmtEq("'%-0.0E'", 0, "''"); + AssertFmtEq("'%-0.3E'", 0, "'wor'"); + AssertFmtEq("'%-0.10E'", 0, "'worldspawn'"); + AssertFmtEq("'%-0.20E'", 0, "'worldspawn'"); + + // Flags & Width + AssertFmtEq("'%00N'", 0, "'Console'"); + AssertFmtEq("'%03N'", 0, "'Console'"); + AssertFmtEq("'%07N'", 0, "'Console'"); + AssertFmtEq("'%020N'", 0, "' Console'"); + AssertFmtEq("'%-0N'", 0, "'Console'"); + AssertFmtEq("'%-3N'", 0, "'Console'"); + AssertFmtEq("'%-7N'", 0, "'Console'"); + AssertFmtEq("'%-20N'", 0, "'Console '"); + AssertFmtEq("'%-00N'", 0, "'Console'"); + AssertFmtEq("'%-03N'", 0, "'Console'"); + AssertFmtEq("'%-07N'", 0, "'Console'"); + AssertFmtEq("'%-020N'", 0, "'Console '"); + + AssertFmtEq("'%00L'", 0, "'Console<0>'"); + AssertFmtEq("'%03L'", 0, "'Console<0>'"); + AssertFmtEq("'%028L'", 0, "'Console<0>'"); + AssertFmtEq("'%032L'", 0, "' Console<0>'"); + AssertFmtEq("'%-0L'", 0, "'Console<0>'"); + AssertFmtEq("'%-3L'", 0, "'Console<0>'"); + AssertFmtEq("'%-28L'", 0, "'Console<0>'"); + AssertFmtEq("'%-32L'", 0, "'Console<0> '"); + AssertFmtEq("'%-00L'", 0, "'Console<0>'"); + AssertFmtEq("'%-03L'", 0, "'Console<0>'"); + AssertFmtEq("'%-28L'", 0, "'Console<0>'"); + AssertFmtEq("'%-032L'", 0, "'Console<0> '"); + + AssertFmtEq("'%00E'", 0, "'worldspawn'"); + AssertFmtEq("'%03E'", 0, "'worldspawn'"); + AssertFmtEq("'%010E'", 0, "'worldspawn'"); + AssertFmtEq("'%020E'", 0, "' worldspawn'"); + AssertFmtEq("'%-0E'", 0, "'worldspawn'"); + AssertFmtEq("'%-3E'", 0, "'worldspawn'"); + AssertFmtEq("'%-10E'", 0, "'worldspawn'"); + AssertFmtEq("'%-20E'", 0, "'worldspawn '"); + AssertFmtEq("'%-00E'", 0, "'worldspawn'"); + AssertFmtEq("'%-03E'", 0, "'worldspawn'"); + AssertFmtEq("'%-10E'", 0, "'worldspawn'"); + AssertFmtEq("'%-020E'", 0, "'worldspawn '"); + + // Flags & Precision & Width + AssertFmtEq("'%00.0N'", 0, "''"); + AssertFmtEq("'%00.3N'", 0, "'Con'"); + AssertFmtEq("'%00.7N'", 0, "'Console'"); + AssertFmtEq("'%00.20N'", 0, "'Console'"); + AssertFmtEq("'%03.0N'", 0, "' '"); + AssertFmtEq("'%03.3N'", 0, "'Con'"); + AssertFmtEq("'%03.7N'", 0, "'Console'"); + AssertFmtEq("'%03.20N'", 0, "'Console'"); + AssertFmtEq("'%07.0N'", 0, "' '"); + AssertFmtEq("'%07.3N'", 0, "' Con'"); + AssertFmtEq("'%07.7N'", 0, "'Console'"); + AssertFmtEq("'%07.20N'", 0, "'Console'"); + AssertFmtEq("'%020.0N'", 0, "' '"); + AssertFmtEq("'%020.3N'", 0, "' Con'"); + AssertFmtEq("'%020.7N'", 0, "' Console'"); + AssertFmtEq("'%020.20N'", 0, "' Console'"); + + AssertFmtEq("'%-0.0N'", 0, "''"); + AssertFmtEq("'%-0.3N'", 0, "'Con'"); + AssertFmtEq("'%-0.7N'", 0, "'Console'"); + AssertFmtEq("'%-0.20N'", 0, "'Console'"); + AssertFmtEq("'%-3.0N'", 0, "' '"); + AssertFmtEq("'%-3.3N'", 0, "'Con'"); + AssertFmtEq("'%-3.7N'", 0, "'Console'"); + AssertFmtEq("'%-3.20N'", 0, "'Console'"); + AssertFmtEq("'%-7.0N'", 0, "' '"); + AssertFmtEq("'%-7.3N'", 0, "'Con '"); + AssertFmtEq("'%-7.7N'", 0, "'Console'"); + AssertFmtEq("'%-7.20N'", 0, "'Console'"); + AssertFmtEq("'%-20.0N'", 0, "' '"); + AssertFmtEq("'%-20.3N'", 0, "'Con '"); + AssertFmtEq("'%-20.7N'", 0, "'Console '"); + AssertFmtEq("'%-20.20N'", 0, "'Console '"); + + AssertFmtEq("'%-00.0N'", 0, "''"); + AssertFmtEq("'%-00.3N'", 0, "'Con'"); + AssertFmtEq("'%-00.7N'", 0, "'Console'"); + AssertFmtEq("'%-00.20N'", 0, "'Console'"); + AssertFmtEq("'%-03.0N'", 0, "' '"); + AssertFmtEq("'%-03.3N'", 0, "'Con'"); + AssertFmtEq("'%-03.7N'", 0, "'Console'"); + AssertFmtEq("'%-03.20N'", 0, "'Console'"); + AssertFmtEq("'%-07.0N'", 0, "' '"); + AssertFmtEq("'%-07.3N'", 0, "'Con '"); + AssertFmtEq("'%-07.7N'", 0, "'Console'"); + AssertFmtEq("'%-07.20N'", 0, "'Console'"); + AssertFmtEq("'%-020.0N'", 0, "' '"); + AssertFmtEq("'%-020.3N'", 0, "'Con '"); + AssertFmtEq("'%-020.7N'", 0, "'Console '"); + AssertFmtEq("'%-020.20N'", 0, "'Console '"); + + AssertFmtEq("'%00.0N'", 0, "''"); + AssertFmtEq("'%00.3N'", 0, "'Con'"); + AssertFmtEq("'%00.7N'", 0, "'Console'"); + AssertFmtEq("'%00.20N'", 0, "'Console'"); + AssertFmtEq("'%03.0N'", 0, "' '"); + AssertFmtEq("'%03.3N'", 0, "'Con'"); + AssertFmtEq("'%03.7N'", 0, "'Console'"); + AssertFmtEq("'%03.20N'", 0, "'Console'"); + AssertFmtEq("'%07.0N'", 0, "' '"); + AssertFmtEq("'%07.3N'", 0, "' Con'"); + AssertFmtEq("'%07.7N'", 0, "'Console'"); + AssertFmtEq("'%07.20N'", 0, "'Console'"); + AssertFmtEq("'%020.0N'", 0, "' '"); + AssertFmtEq("'%020.3N'", 0, "' Con'"); + AssertFmtEq("'%020.7N'", 0, "' Console'"); + AssertFmtEq("'%020.20N'", 0, "' Console'"); + + AssertFmtEq("'%-0.0N'", 0, "''"); + AssertFmtEq("'%-0.3N'", 0, "'Con'"); + AssertFmtEq("'%-0.7N'", 0, "'Console'"); + AssertFmtEq("'%-0.20N'", 0, "'Console'"); + AssertFmtEq("'%-3.0N'", 0, "' '"); + AssertFmtEq("'%-3.3N'", 0, "'Con'"); + AssertFmtEq("'%-3.7N'", 0, "'Console'"); + AssertFmtEq("'%-3.20N'", 0, "'Console'"); + AssertFmtEq("'%-7.0N'", 0, "' '"); + AssertFmtEq("'%-7.3N'", 0, "'Con '"); + AssertFmtEq("'%-7.7N'", 0, "'Console'"); + AssertFmtEq("'%-7.20N'", 0, "'Console'"); + AssertFmtEq("'%-20.0N'", 0, "' '"); + AssertFmtEq("'%-20.3N'", 0, "'Con '"); + AssertFmtEq("'%-20.7N'", 0, "'Console '"); + AssertFmtEq("'%-20.20N'", 0, "'Console '"); + + AssertFmtEq("'%-00.0N'", 0, "''"); + AssertFmtEq("'%-00.3N'", 0, "'Con'"); + AssertFmtEq("'%-00.7N'", 0, "'Console'"); + AssertFmtEq("'%-00.20N'", 0, "'Console'"); + AssertFmtEq("'%-03.0N'", 0, "' '"); + AssertFmtEq("'%-03.3N'", 0, "'Con'"); + AssertFmtEq("'%-03.7N'", 0, "'Console'"); + AssertFmtEq("'%-03.20N'", 0, "'Console'"); + AssertFmtEq("'%-07.0N'", 0, "' '"); + AssertFmtEq("'%-07.3N'", 0, "'Con '"); + AssertFmtEq("'%-07.7N'", 0, "'Console'"); + AssertFmtEq("'%-07.20N'", 0, "'Console'"); + AssertFmtEq("'%-020.0N'", 0, "' '"); + AssertFmtEq("'%-020.3N'", 0, "'Con '"); + AssertFmtEq("'%-020.7N'", 0, "'Console '"); + AssertFmtEq("'%-020.20N'", 0, "'Console '"); + + AssertFmtEq("'%00.0L'", 0, "''"); + AssertFmtEq("'%00.3L'", 0, "'Con'"); + AssertFmtEq("'%00.28L'", 0, "'Console<0>'"); + AssertFmtEq("'%00.32L'", 0, "'Console<0>'"); + AssertFmtEq("'%03.0L'", 0, "' '"); + AssertFmtEq("'%03.3L'", 0, "'Con'"); + AssertFmtEq("'%03.28L'", 0, "'Console<0>'"); + AssertFmtEq("'%03.32L'", 0, "'Console<0>'"); + AssertFmtEq("'%028.0L'", 0, "' '"); + AssertFmtEq("'%028.3L'", 0, "' Con'"); + AssertFmtEq("'%028.28L'", 0, "'Console<0>'"); + AssertFmtEq("'%028.32L'", 0, "'Console<0>'"); + AssertFmtEq("'%032.0L'", 0, "' '"); + AssertFmtEq("'%032.3L'", 0, "' Con'"); + AssertFmtEq("'%032.28L'", 0, "' Console<0>'"); + AssertFmtEq("'%032.32L'", 0, "' Console<0>'"); + + AssertFmtEq("'%-0.0L'", 0, "''"); + AssertFmtEq("'%-0.3L'", 0, "'Con'"); + AssertFmtEq("'%-0.28L'", 0, "'Console<0>'"); + AssertFmtEq("'%-0.32L'", 0, "'Console<0>'"); + AssertFmtEq("'%-3.0L'", 0, "' '"); + AssertFmtEq("'%-3.3L'", 0, "'Con'"); + AssertFmtEq("'%-3.28L'", 0, "'Console<0>'"); + AssertFmtEq("'%-3.32L'", 0, "'Console<0>'"); + AssertFmtEq("'%-28.0L'", 0, "' '"); + AssertFmtEq("'%-28.3L'", 0, "'Con '"); + AssertFmtEq("'%-28.28L'", 0, "'Console<0>'"); + AssertFmtEq("'%-28.32L'", 0, "'Console<0>'"); + AssertFmtEq("'%-32.0L'", 0, "' '"); + AssertFmtEq("'%-32.3L'", 0, "'Con '"); + AssertFmtEq("'%-32.28L'", 0, "'Console<0> '"); + AssertFmtEq("'%-32.32L'", 0, "'Console<0> '"); + + AssertFmtEq("'%-00.0L'", 0, "''"); + AssertFmtEq("'%-00.3L'", 0, "'Con'"); + AssertFmtEq("'%-00.28L'", 0, "'Console<0>'"); + AssertFmtEq("'%-00.32L'", 0, "'Console<0>'"); + AssertFmtEq("'%-03.0L'", 0, "' '"); + AssertFmtEq("'%-03.3L'", 0, "'Con'"); + AssertFmtEq("'%-03.28L'", 0, "'Console<0>'"); + AssertFmtEq("'%-03.32L'", 0, "'Console<0>'"); + AssertFmtEq("'%-028.0L'", 0, "' '"); + AssertFmtEq("'%-028.3L'", 0, "'Con '"); + AssertFmtEq("'%-028.28L'", 0, "'Console<0>'"); + AssertFmtEq("'%-028.32L'", 0, "'Console<0>'"); + AssertFmtEq("'%-032.0L'", 0, "' '"); + AssertFmtEq("'%-032.3L'", 0, "'Con '"); + AssertFmtEq("'%-032.28L'", 0, "'Console<0> '"); + AssertFmtEq("'%-032.32L'", 0, "'Console<0> '"); + + AssertFmtEq("'%00.0E'", 0, "''"); + AssertFmtEq("'%00.3E'", 0, "'wor'"); + AssertFmtEq("'%00.10E'", 0, "'worldspawn'"); + AssertFmtEq("'%00.20E'", 0, "'worldspawn'"); + AssertFmtEq("'%03.0E'", 0, "' '"); + AssertFmtEq("'%03.3E'", 0, "'wor'"); + AssertFmtEq("'%03.10E'", 0, "'worldspawn'"); + AssertFmtEq("'%03.20E'", 0, "'worldspawn'"); + AssertFmtEq("'%010.0E'", 0, "' '"); + AssertFmtEq("'%010.3E'", 0, "' wor'"); + AssertFmtEq("'%010.10E'", 0, "'worldspawn'"); + AssertFmtEq("'%010.20E'", 0, "'worldspawn'"); + AssertFmtEq("'%020.0E'", 0, "' '"); + AssertFmtEq("'%020.3E'", 0, "' wor'"); + AssertFmtEq("'%020.10E'", 0, "' worldspawn'"); + AssertFmtEq("'%020.20E'", 0, "' worldspawn'"); + + AssertFmtEq("'%-0.0E'", 0, "''"); + AssertFmtEq("'%-0.3E'", 0, "'wor'"); + AssertFmtEq("'%-0.10E'", 0, "'worldspawn'"); + AssertFmtEq("'%-0.20E'", 0, "'worldspawn'"); + AssertFmtEq("'%-3.0E'", 0, "' '"); + AssertFmtEq("'%-3.3E'", 0, "'wor'"); + AssertFmtEq("'%-3.10E'", 0, "'worldspawn'"); + AssertFmtEq("'%-3.20E'", 0, "'worldspawn'"); + AssertFmtEq("'%-10.0E'", 0, "' '"); + AssertFmtEq("'%-10.3E'", 0, "'wor '"); + AssertFmtEq("'%-10.10E'", 0, "'worldspawn'"); + AssertFmtEq("'%-10.20E'", 0, "'worldspawn'"); + AssertFmtEq("'%-20.0E'", 0, "' '"); + AssertFmtEq("'%-20.3E'", 0, "'wor '"); + AssertFmtEq("'%-20.10E'", 0, "'worldspawn '"); + AssertFmtEq("'%-20.20E'", 0, "'worldspawn '"); + + AssertFmtEq("'%-00.0E'", 0, "''"); + AssertFmtEq("'%-00.3E'", 0, "'wor'"); + AssertFmtEq("'%-00.10E'", 0, "'worldspawn'"); + AssertFmtEq("'%-00.20E'", 0, "'worldspawn'"); + AssertFmtEq("'%-03.0E'", 0, "' '"); + AssertFmtEq("'%-03.3E'", 0, "'wor'"); + AssertFmtEq("'%-03.10E'", 0, "'worldspawn'"); + AssertFmtEq("'%-03.20E'", 0, "'worldspawn'"); + AssertFmtEq("'%-010.0E'", 0, "' '"); + AssertFmtEq("'%-010.3E'", 0, "'wor '"); + AssertFmtEq("'%-010.10E'", 0, "'worldspawn'"); + AssertFmtEq("'%-010.20E'", 0, "'worldspawn'"); + AssertFmtEq("'%-020.0E'", 0, "' '"); + AssertFmtEq("'%-020.3E'", 0, "'wor '"); + AssertFmtEq("'%-020.10E'", 0, "'worldspawn '"); + AssertFmtEq("'%-020.20E'", 0, "'worldspawn '"); + + // Random + for (int i = 1; i <= MaxClients; ++i) + { + if (IsValidClient(i)) + { + int userid = GetClientUserId(i); + char name[MAX_NAME_LENGTH], auth[MAX_AUTHID_LENGTH]; + GetClientName(i, name, sizeof(name)); + GetClientAuthId(i, AuthId_Engine, auth, sizeof(auth)); + + char expected[256]; + FormatEx(expected, sizeof(expected), "%s<%d><%s><>", name, userid, auth); + + AssertFmtEq("%N", i, name); + AssertFmtEq("%L", i, expected); + } + } + + int entity = -1; + char expected[256]; + while ((entity = FindEntityByClassname(entity, "*")) != -1) + { + GetEntityClassname(entity, expected, sizeof(expected)); + AssertFmtEq("%E", entity, expected); + } +} + + +void TestString() +{ + SetTestContext("Test String"); + + // Base + AssertFmtStrEq("'%s'", "Some String Text", "'Some String Text'"); + + // Precision + AssertFmtStrEq("'%.s'", "Some String Text", "''"); + AssertFmtStrEq("'%.0s'", "Some String Text", "''"); + AssertFmtStrEq("'%.10s'", "Some String Text", "'Some Strin'"); + AssertFmtStrEq("'%.16s'", "Some String Text", "'Some String Text'"); + AssertFmtStrEq("'%.32s'", "Some String Text", "'Some String Text'"); + + // Width + AssertFmtStrEq("'%0s'", "Some String Text", "'Some String Text'"); + AssertFmtStrEq("'%10s'", "Some String Text", "'Some String Text'"); + AssertFmtStrEq("'%16s'", "Some String Text", "'Some String Text'"); + AssertFmtStrEq("'%32s'", "Some String Text", "' Some String Text'"); + + // Width & Precision + AssertFmtStrEq("'%0.0s'", "Some String Text", "''"); + AssertFmtStrEq("'%0.10s'", "Some String Text", "'Some Strin'"); + AssertFmtStrEq("'%0.16s'", "Some String Text", "'Some String Text'"); + AssertFmtStrEq("'%0.32s'", "Some String Text", "'Some String Text'"); + AssertFmtStrEq("'%10.0s'", "Some String Text", "' '"); + AssertFmtStrEq("'%10.10s'", "Some String Text", "'Some Strin'"); + AssertFmtStrEq("'%10.16s'", "Some String Text", "'Some String Text'"); + AssertFmtStrEq("'%10.32s'", "Some String Text", "'Some String Text'"); + AssertFmtStrEq("'%16.0s'", "Some String Text", "' '"); + AssertFmtStrEq("'%16.10s'", "Some String Text", "' Some Strin'"); + AssertFmtStrEq("'%16.16s'", "Some String Text", "'Some String Text'"); + AssertFmtStrEq("'%16.32s'", "Some String Text", "'Some String Text'"); + AssertFmtStrEq("'%32.0s'", "Some String Text", "' '"); + AssertFmtStrEq("'%32.10s'", "Some String Text", "' Some Strin'"); + AssertFmtStrEq("'%32.16s'", "Some String Text", "' Some String Text'"); + AssertFmtStrEq("'%32.32s'", "Some String Text", "' Some String Text'"); + + // Flags + AssertFmtStrEq("'%0s'", "Some String Text", "'Some String Text'"); + AssertFmtStrEq("'%-s'", "Some String Text", "'Some String Text'"); + AssertFmtStrEq("'%0-s'", "Some String Text", "'Some String Text'"); + + // Flags & Precision + AssertFmtStrEq("'%0.s'", "Some String Text", "''"); + AssertFmtStrEq("'%0.0s'", "Some String Text", "''"); + AssertFmtStrEq("'%0.10s'", "Some String Text", "'Some Strin'"); + AssertFmtStrEq("'%0.16s'", "Some String Text", "'Some String Text'"); + AssertFmtStrEq("'%0.32s'", "Some String Text", "'Some String Text'"); + AssertFmtStrEq("'%-.s'", "Some String Text", "''"); + AssertFmtStrEq("'%-.0s'", "Some String Text", "''"); + AssertFmtStrEq("'%-.10s'", "Some String Text", "'Some Strin'"); + AssertFmtStrEq("'%-.16s'", "Some String Text", "'Some String Text'"); + AssertFmtStrEq("'%-.32s'", "Some String Text", "'Some String Text'"); + AssertFmtStrEq("'%-0.s'", "Some String Text", "''"); + AssertFmtStrEq("'%-0.0s'", "Some String Text", "''"); + AssertFmtStrEq("'%-0.10s'", "Some String Text", "'Some Strin'"); + AssertFmtStrEq("'%-0.16s'", "Some String Text", "'Some String Text'"); + AssertFmtStrEq("'%-0.32s'", "Some String Text", "'Some String Text'"); + + // Flags & Width + AssertFmtStrEq("'%0s'", "Some String Text", "'Some String Text'"); + AssertFmtStrEq("'%00s'", "Some String Text", "'Some String Text'"); + AssertFmtStrEq("'%010s'", "Some String Text", "'Some String Text'"); + AssertFmtStrEq("'%016s'", "Some String Text", "'Some String Text'"); + AssertFmtStrEq("'%032s'", "Some String Text", "' Some String Text'"); + AssertFmtStrEq("'%-s'", "Some String Text", "'Some String Text'"); + AssertFmtStrEq("'%-0s'", "Some String Text", "'Some String Text'"); + AssertFmtStrEq("'%-10s'", "Some String Text", "'Some String Text'"); + AssertFmtStrEq("'%-16s'", "Some String Text", "'Some String Text'"); + AssertFmtStrEq("'%-32s'", "Some String Text", "'Some String Text '"); + AssertFmtStrEq("'%-0s'", "Some String Text", "'Some String Text'"); + AssertFmtStrEq("'%-00s'", "Some String Text", "'Some String Text'"); + AssertFmtStrEq("'%-010s'", "Some String Text", "'Some String Text'"); + AssertFmtStrEq("'%-016s'", "Some String Text", "'Some String Text'"); + AssertFmtStrEq("'%-032s'", "Some String Text", "'Some String Text '"); + + // Flags & Precision & Width + AssertFmtStrEq("'%00.s'", "Some String Text", "''"); + AssertFmtStrEq("'%00.0s'", "Some String Text", "''"); + AssertFmtStrEq("'%00.10s'", "Some String Text", "'Some Strin'"); + AssertFmtStrEq("'%00.16s'", "Some String Text", "'Some String Text'"); + AssertFmtStrEq("'%00.32s'", "Some String Text", "'Some String Text'"); + AssertFmtStrEq("'%010.s'", "Some String Text", "' '"); + AssertFmtStrEq("'%010.0s'", "Some String Text", "' '"); + AssertFmtStrEq("'%010.10s'", "Some String Text", "'Some Strin'"); + AssertFmtStrEq("'%010.16s'", "Some String Text", "'Some String Text'"); + AssertFmtStrEq("'%010.32s'", "Some String Text", "'Some String Text'"); + AssertFmtStrEq("'%016.s'", "Some String Text", "' '"); + AssertFmtStrEq("'%016.0s'", "Some String Text", "' '"); + AssertFmtStrEq("'%016.10s'", "Some String Text", "' Some Strin'"); + AssertFmtStrEq("'%016.16s'", "Some String Text", "'Some String Text'"); + AssertFmtStrEq("'%016.32s'", "Some String Text", "'Some String Text'"); + AssertFmtStrEq("'%032.s'", "Some String Text", "' '"); + AssertFmtStrEq("'%032.0s'", "Some String Text", "' '"); + AssertFmtStrEq("'%032.10s'", "Some String Text", "' Some Strin'"); + AssertFmtStrEq("'%032.16s'", "Some String Text", "' Some String Text'"); + AssertFmtStrEq("'%032.32s'", "Some String Text", "' Some String Text'"); + + AssertFmtStrEq("'%-0.s'", "Some String Text", "''"); + AssertFmtStrEq("'%-0.0s'", "Some String Text", "''"); + AssertFmtStrEq("'%-0.10s'", "Some String Text", "'Some Strin'"); + AssertFmtStrEq("'%-0.16s'", "Some String Text", "'Some String Text'"); + AssertFmtStrEq("'%-0.32s'", "Some String Text", "'Some String Text'"); + AssertFmtStrEq("'%-10.s'", "Some String Text", "' '"); + AssertFmtStrEq("'%-10.0s'", "Some String Text", "' '"); + AssertFmtStrEq("'%-10.10s'", "Some String Text", "'Some Strin'"); + AssertFmtStrEq("'%-10.16s'", "Some String Text", "'Some String Text'"); + AssertFmtStrEq("'%-10.32s'", "Some String Text", "'Some String Text'"); + AssertFmtStrEq("'%-16.s'", "Some String Text", "' '"); + AssertFmtStrEq("'%-16.0s'", "Some String Text", "' '"); + AssertFmtStrEq("'%-16.10s'", "Some String Text", "'Some Strin '"); + AssertFmtStrEq("'%-16.16s'", "Some String Text", "'Some String Text'"); + AssertFmtStrEq("'%-16.32s'", "Some String Text", "'Some String Text'"); + AssertFmtStrEq("'%-32.s'", "Some String Text", "' '"); + AssertFmtStrEq("'%-32.0s'", "Some String Text", "' '"); + AssertFmtStrEq("'%-32.10s'", "Some String Text", "'Some Strin '"); + AssertFmtStrEq("'%-32.16s'", "Some String Text", "'Some String Text '"); + AssertFmtStrEq("'%-32.32s'", "Some String Text", "'Some String Text '"); + + AssertFmtStrEq("'%-00.s'", "Some String Text", "''"); + AssertFmtStrEq("'%-00.0s'", "Some String Text", "''"); + AssertFmtStrEq("'%-00.10s'", "Some String Text", "'Some Strin'"); + AssertFmtStrEq("'%-00.16s'", "Some String Text", "'Some String Text'"); + AssertFmtStrEq("'%-00.32s'", "Some String Text", "'Some String Text'"); + AssertFmtStrEq("'%-010.s'", "Some String Text", "' '"); + AssertFmtStrEq("'%-010.0s'", "Some String Text", "' '"); + AssertFmtStrEq("'%-010.10s'", "Some String Text", "'Some Strin'"); + AssertFmtStrEq("'%-010.16s'", "Some String Text", "'Some String Text'"); + AssertFmtStrEq("'%-010.32s'", "Some String Text", "'Some String Text'"); + AssertFmtStrEq("'%-016.s'", "Some String Text", "' '"); + AssertFmtStrEq("'%-016.0s'", "Some String Text", "' '"); + AssertFmtStrEq("'%-016.10s'", "Some String Text", "'Some Strin '"); + AssertFmtStrEq("'%-016.16s'", "Some String Text", "'Some String Text'"); + AssertFmtStrEq("'%-016.32s'", "Some String Text", "'Some String Text'"); + AssertFmtStrEq("'%-032.s'", "Some String Text", "' '"); + AssertFmtStrEq("'%-032.0s'", "Some String Text", "' '"); + AssertFmtStrEq("'%-032.10s'", "Some String Text", "'Some Strin '"); + AssertFmtStrEq("'%-032.16s'", "Some String Text", "'Some String Text '"); + AssertFmtStrEq("'%-032.32s'", "Some String Text", "'Some String Text '"); + + // Special + AssertFmtStrEq("'%s'", NULL_STRING, "''"); + AssertFmtStrEq("'%s'", "", "''"); + AssertFmtStrEq("'%-256s'", "Some String Text", "'Some String Text '"); +} + + +void TestTranslates() +{ + LoadTranslations("common.phrases"); + + SetTestContext("Test Translates"); + + int lang = GetLanguageByCode("en"); + + // Base + AssertFmtTR1("'%T'", "Unable to target", lang, "'You cannot target this player.'"); + AssertFmtTR2("'%T'", "Chat admins", lang, 0, "'(ADMINS) Console'"); + AssertFmtTR2("'%T'", "Vote Delay Seconds", lang, 77777777, "'You must wait 77777777 seconds before starting another vote.'"); + AssertFmtTR3("'%T'", "Vote Select", lang, "player1", "option2", "'player1 has chosen option2.'"); + + // Precision + AssertFmtTR1("'%.T'", "Unable to target", lang, "'You cannot target this player.'"); + AssertFmtTR1("'%.0T'", "Unable to target", lang, "'You cannot target this player.'"); + AssertFmtTR1("'%.32T'", "Unable to target", lang, "'You cannot target this player.'"); + + // Width + AssertFmtTR1("'%T'", "Unable to target", lang, "'You cannot target this player.'"); + AssertFmtTR1("'%0T'", "Unable to target", lang, "'You cannot target this player.'"); + AssertFmtTR1("'%32T'", "Unable to target", lang, "'You cannot target this player.'"); + + // Precision & Width + AssertFmtTR1("'%0.T'", "Unable to target", lang, "'You cannot target this player.'"); + AssertFmtTR1("'%0.0T'", "Unable to target", lang, "'You cannot target this player.'"); + AssertFmtTR1("'%0.32T'", "Unable to target", lang, "'You cannot target this player.'"); + AssertFmtTR1("'%32.T'", "Unable to target", lang, "'You cannot target this player.'"); + AssertFmtTR1("'%32.0T'", "Unable to target", lang, "'You cannot target this player.'"); + AssertFmtTR1("'%32.32T'", "Unable to target", lang, "'You cannot target this player.'"); + + // Flags + AssertFmtTR1("'%0T'", "Unable to target", lang, "'You cannot target this player.'"); + AssertFmtTR1("'%-T'", "Unable to target", lang, "'You cannot target this player.'"); + AssertFmtTR1("'%-0T'", "Unable to target", lang, "'You cannot target this player.'"); + + // Flags & Precision + AssertFmtTR1("'%0.T'", "Unable to target", lang, "'You cannot target this player.'"); + AssertFmtTR1("'%0.0T'", "Unable to target", lang, "'You cannot target this player.'"); + AssertFmtTR1("'%0.32T'", "Unable to target", lang, "'You cannot target this player.'"); + AssertFmtTR1("'%-.T'", "Unable to target", lang, "'You cannot target this player.'"); + AssertFmtTR1("'%-.0T'", "Unable to target", lang, "'You cannot target this player.'"); + AssertFmtTR1("'%-.32T'", "Unable to target", lang, "'You cannot target this player.'"); + AssertFmtTR1("'%-0.T'", "Unable to target", lang, "'You cannot target this player.'"); + AssertFmtTR1("'%-0.0T'", "Unable to target", lang, "'You cannot target this player.'"); + AssertFmtTR1("'%-0.32T'", "Unable to target", lang, "'You cannot target this player.'"); + + // Flags & Width + AssertFmtTR1("'%0T'", "Unable to target", lang, "'You cannot target this player.'"); + AssertFmtTR1("'%00T'", "Unable to target", lang, "'You cannot target this player.'"); + AssertFmtTR1("'%032T'", "Unable to target", lang, "'You cannot target this player.'"); + AssertFmtTR1("'%-T'", "Unable to target", lang, "'You cannot target this player.'"); + AssertFmtTR1("'%-0T'", "Unable to target", lang, "'You cannot target this player.'"); + AssertFmtTR1("'%-32T'", "Unable to target", lang, "'You cannot target this player.'"); + AssertFmtTR1("'%-0T'", "Unable to target", lang, "'You cannot target this player.'"); + AssertFmtTR1("'%-00T'", "Unable to target", lang, "'You cannot target this player.'"); + AssertFmtTR1("'%-032T'", "Unable to target", lang, "'You cannot target this player.'"); + + // Flags & Precision & Width + AssertFmtTR1("'%00.T'", "Unable to target", lang, "'You cannot target this player.'"); + AssertFmtTR1("'%00.0T'", "Unable to target", lang, "'You cannot target this player.'"); + AssertFmtTR1("'%00.32T'", "Unable to target", lang, "'You cannot target this player.'"); + AssertFmtTR1("'%032.T'", "Unable to target", lang, "'You cannot target this player.'"); + AssertFmtTR1("'%032.0T'", "Unable to target", lang, "'You cannot target this player.'"); + AssertFmtTR1("'%032.32T'", "Unable to target", lang, "'You cannot target this player.'"); + AssertFmtTR1("'%-0.T'", "Unable to target", lang, "'You cannot target this player.'"); + AssertFmtTR1("'%-0.0T'", "Unable to target", lang, "'You cannot target this player.'"); + AssertFmtTR1("'%-0.32T'", "Unable to target", lang, "'You cannot target this player.'"); + AssertFmtTR1("'%-32.T'", "Unable to target", lang, "'You cannot target this player.'"); + AssertFmtTR1("'%-32.0T'", "Unable to target", lang, "'You cannot target this player.'"); + AssertFmtTR1("'%-32.32T'", "Unable to target", lang, "'You cannot target this player.'"); + AssertFmtTR1("'%-00.T'", "Unable to target", lang, "'You cannot target this player.'"); + AssertFmtTR1("'%-00.0T'", "Unable to target", lang, "'You cannot target this player.'"); + AssertFmtTR1("'%-00.32T'", "Unable to target", lang, "'You cannot target this player.'"); + AssertFmtTR1("'%-032.T'", "Unable to target", lang, "'You cannot target this player.'"); + AssertFmtTR1("'%-032.0T'", "Unable to target", lang, "'You cannot target this player.'"); + AssertFmtTR1("'%-032.32T'", "Unable to target", lang, "'You cannot target this player.'"); + + // Ensure that the global language target is English + // otherwise it may deviate from the expected value + AssertEq("Server Language", GetServerLanguage(), lang); + SetGlobalTransTarget(LANG_SERVER); + + // Base + AssertFmtTR4("'%t'", "Unable to target", "'You cannot target this player.'"); + AssertFmtTR5("'%t'", "Chat admins", 0, "'(ADMINS) Console'"); + AssertFmtTR5("'%t'", "Vote Delay Seconds", 77777777, "'You must wait 77777777 seconds before starting another vote.'"); + AssertFmtTR6("'%t'", "Vote Select", "player1", "option2", "'player1 has chosen option2.'"); + + // Precision + AssertFmtTR4("'%.t'", "Unable to target", "'You cannot target this player.'"); + AssertFmtTR4("'%.0t'", "Unable to target", "'You cannot target this player.'"); + AssertFmtTR4("'%.32t'", "Unable to target", "'You cannot target this player.'"); + + // Width + AssertFmtTR4("'%t'", "Unable to target", "'You cannot target this player.'"); + AssertFmtTR4("'%0t'", "Unable to target", "'You cannot target this player.'"); + AssertFmtTR4("'%32t'", "Unable to target", "'You cannot target this player.'"); + + // Precision & Width + AssertFmtTR4("'%0.t'", "Unable to target", "'You cannot target this player.'"); + AssertFmtTR4("'%0.0t'", "Unable to target", "'You cannot target this player.'"); + AssertFmtTR4("'%0.32t'", "Unable to target", "'You cannot target this player.'"); + AssertFmtTR4("'%32.t'", "Unable to target", "'You cannot target this player.'"); + AssertFmtTR4("'%32.0t'", "Unable to target", "'You cannot target this player.'"); + AssertFmtTR4("'%32.32t'", "Unable to target", "'You cannot target this player.'"); + + // Flags + AssertFmtTR4("'%0t'", "Unable to target", "'You cannot target this player.'"); + AssertFmtTR4("'%-t'", "Unable to target", "'You cannot target this player.'"); + AssertFmtTR4("'%-0t'", "Unable to target", "'You cannot target this player.'"); + + // Flags & Precision + AssertFmtTR4("'%0.t'", "Unable to target", "'You cannot target this player.'"); + AssertFmtTR4("'%0.0t'", "Unable to target", "'You cannot target this player.'"); + AssertFmtTR4("'%0.32t'", "Unable to target", "'You cannot target this player.'"); + AssertFmtTR4("'%-.t'", "Unable to target", "'You cannot target this player.'"); + AssertFmtTR4("'%-.0t'", "Unable to target", "'You cannot target this player.'"); + AssertFmtTR4("'%-.32t'", "Unable to target", "'You cannot target this player.'"); + AssertFmtTR4("'%-0.t'", "Unable to target", "'You cannot target this player.'"); + AssertFmtTR4("'%-0.0t'", "Unable to target", "'You cannot target this player.'"); + AssertFmtTR4("'%-0.32t'", "Unable to target", "'You cannot target this player.'"); + + // Flags & Width + AssertFmtTR4("'%0t'", "Unable to target", "'You cannot target this player.'"); + AssertFmtTR4("'%00t'", "Unable to target", "'You cannot target this player.'"); + AssertFmtTR4("'%032t'", "Unable to target", "'You cannot target this player.'"); + AssertFmtTR4("'%-t'", "Unable to target", "'You cannot target this player.'"); + AssertFmtTR4("'%-0t'", "Unable to target", "'You cannot target this player.'"); + AssertFmtTR4("'%-32t'", "Unable to target", "'You cannot target this player.'"); + AssertFmtTR4("'%-0t'", "Unable to target", "'You cannot target this player.'"); + AssertFmtTR4("'%-00t'", "Unable to target", "'You cannot target this player.'"); + AssertFmtTR4("'%-032t'", "Unable to target", "'You cannot target this player.'"); + + // Flags & Precision & Width + AssertFmtTR4("'%00.t'", "Unable to target", "'You cannot target this player.'"); + AssertFmtTR4("'%00.0t'", "Unable to target", "'You cannot target this player.'"); + AssertFmtTR4("'%00.32t'", "Unable to target", "'You cannot target this player.'"); + AssertFmtTR4("'%032.t'", "Unable to target", "'You cannot target this player.'"); + AssertFmtTR4("'%032.0t'", "Unable to target", "'You cannot target this player.'"); + AssertFmtTR4("'%032.32t'", "Unable to target", "'You cannot target this player.'"); + AssertFmtTR4("'%-0.t'", "Unable to target", "'You cannot target this player.'"); + AssertFmtTR4("'%-0.0t'", "Unable to target", "'You cannot target this player.'"); + AssertFmtTR4("'%-0.32t'", "Unable to target", "'You cannot target this player.'"); + AssertFmtTR4("'%-32.t'", "Unable to target", "'You cannot target this player.'"); + AssertFmtTR4("'%-32.0t'", "Unable to target", "'You cannot target this player.'"); + AssertFmtTR4("'%-32.32t'", "Unable to target", "'You cannot target this player.'"); + AssertFmtTR4("'%-00.t'", "Unable to target", "'You cannot target this player.'"); + AssertFmtTR4("'%-00.0t'", "Unable to target", "'You cannot target this player.'"); + AssertFmtTR4("'%-00.32t'", "Unable to target", "'You cannot target this player.'"); + AssertFmtTR4("'%-032.t'", "Unable to target", "'You cannot target this player.'"); + AssertFmtTR4("'%-032.0t'", "Unable to target", "'You cannot target this player.'"); + AssertFmtTR4("'%-032.32t'", "Unable to target", "'You cannot target this player.'"); +} + + +void TestHex() +{ + SetTestContext("Test Hex"); + + // Base + AssertFmtEq("'%X'", 0, "'0'"); + AssertFmtEq("'%X'", 1234567, "'12D687'"); + AssertFmtEq("'%X'", 2147483647, "'7FFFFFFF'"); + AssertFmtEq("'%X'", -1, "'FFFFFFFF'"); + AssertFmtEq("'%X'", -2147483648, "'80000000'"); + AssertFmtEq("'%X'", 2147483647, "'7FFFFFFF'"); + + AssertFmtEq("'%x'", 0, "'0'"); + AssertFmtEq("'%x'", 1234567, "'12d687'"); + AssertFmtEq("'%x'", 2147483647, "'7fffffff'"); + AssertFmtEq("'%x'", -1, "'ffffffff'"); + AssertFmtEq("'%x'", -2147483648, "'80000000'"); + AssertFmtEq("'%x'", 2147483647, "'7fffffff'"); + + // Precision + AssertFmtEq("'%.0X'", 1234567, "'12D687'"); + AssertFmtEq("'%.3X'", 1234567, "'12D687'"); + AssertFmtEq("'%.6X'", 1234567, "'12D687'"); + AssertFmtEq("'%.9X'", 1234567, "'12D687'"); + AssertFmtEq("'%.20X'", 1234567, "'12D687'"); + + AssertFmtEq("'%.0x'", 1234567, "'12d687'"); + AssertFmtEq("'%.3x'", 1234567, "'12d687'"); + AssertFmtEq("'%.6x'", 1234567, "'12d687'"); + AssertFmtEq("'%.9x'", 1234567, "'12d687'"); + AssertFmtEq("'%.20x'", 1234567, "'12d687'"); + + // Width + AssertFmtEq("'%0X'", 1234567, "'12D687'"); + AssertFmtEq("'%3X'", 1234567, "'12D687'"); + AssertFmtEq("'%6X'", 1234567, "'12D687'"); + AssertFmtEq("'%9X'", 1234567, "' 12D687'"); + AssertFmtEq("'%20X'", 1234567, "' 12D687'"); + + AssertFmtEq("'%0x'", 1234567, "'12d687'"); + AssertFmtEq("'%3x'", 1234567, "'12d687'"); + AssertFmtEq("'%6x'", 1234567, "'12d687'"); + AssertFmtEq("'%9x'", 1234567, "' 12d687'"); + AssertFmtEq("'%20x'", 1234567, "' 12d687'"); + + // Width & Precision + AssertFmtEq("'%0.0X'", 1234567, "'12D687'"); + AssertFmtEq("'%0.3X'", 1234567, "'12D687'"); + AssertFmtEq("'%0.6X'", 1234567, "'12D687'"); + AssertFmtEq("'%0.9X'", 1234567, "'12D687'"); + AssertFmtEq("'%3.0X'", 1234567, "'12D687'"); + AssertFmtEq("'%3.3X'", 1234567, "'12D687'"); + AssertFmtEq("'%3.6X'", 1234567, "'12D687'"); + AssertFmtEq("'%3.9X'", 1234567, "'12D687'"); + AssertFmtEq("'%6.0X'", 1234567, "'12D687'"); + AssertFmtEq("'%6.3X'", 1234567, "'12D687'"); + AssertFmtEq("'%6.6X'", 1234567, "'12D687'"); + AssertFmtEq("'%6.9X'", 1234567, "'12D687'"); + AssertFmtEq("'%9.0X'", 1234567, "' 12D687'"); + AssertFmtEq("'%9.3X'", 1234567, "' 12D687'"); + AssertFmtEq("'%9.6X'", 1234567, "' 12D687'"); + AssertFmtEq("'%9.9X'", 1234567, "' 12D687'"); + AssertFmtEq("'%20.0X'", 1234567, "' 12D687'"); + AssertFmtEq("'%20.3X'", 1234567, "' 12D687'"); + AssertFmtEq("'%20.6X'", 1234567, "' 12D687'"); + AssertFmtEq("'%20.9X'", 1234567, "' 12D687'"); + + AssertFmtEq("'%0.0x'", 1234567, "'12d687'"); + AssertFmtEq("'%0.3x'", 1234567, "'12d687'"); + AssertFmtEq("'%0.6x'", 1234567, "'12d687'"); + AssertFmtEq("'%0.9x'", 1234567, "'12d687'"); + AssertFmtEq("'%3.0x'", 1234567, "'12d687'"); + AssertFmtEq("'%3.3x'", 1234567, "'12d687'"); + AssertFmtEq("'%3.6x'", 1234567, "'12d687'"); + AssertFmtEq("'%3.9x'", 1234567, "'12d687'"); + AssertFmtEq("'%6.0x'", 1234567, "'12d687'"); + AssertFmtEq("'%6.3x'", 1234567, "'12d687'"); + AssertFmtEq("'%6.6x'", 1234567, "'12d687'"); + AssertFmtEq("'%6.9x'", 1234567, "'12d687'"); + AssertFmtEq("'%9.0x'", 1234567, "' 12d687'"); + AssertFmtEq("'%9.3x'", 1234567, "' 12d687'"); + AssertFmtEq("'%9.6x'", 1234567, "' 12d687'"); + AssertFmtEq("'%9.9x'", 1234567, "' 12d687'"); + AssertFmtEq("'%20.0x'", 1234567, "' 12d687'"); + AssertFmtEq("'%20.3x'", 1234567, "' 12d687'"); + AssertFmtEq("'%20.6x'", 1234567, "' 12d687'"); + AssertFmtEq("'%20.9x'", 1234567, "' 12d687'"); + + // Flags + AssertFmtEq("'%0X'", 1234567, "'12D687'"); + AssertFmtEq("'%-X'", 1234567, "'12D687'"); + AssertFmtEq("'%0-X'", 1234567, "'12D687'"); + + AssertFmtEq("'%0x'", 1234567, "'12d687'"); + AssertFmtEq("'%-x'", 1234567, "'12d687'"); + AssertFmtEq("'%0-x'", 1234567, "'12d687'"); + + // Flags & Precision + AssertFmtEq("'%0.X'", 1234567, "'12D687'"); + AssertFmtEq("'%0.0X'", 1234567, "'12D687'"); + AssertFmtEq("'%0.3X'", 1234567, "'12D687'"); + AssertFmtEq("'%0.6X'", 1234567, "'12D687'"); + AssertFmtEq("'%0.9X'", 1234567, "'12D687'"); + AssertFmtEq("'%0.20X'", 1234567, "'12D687'"); + AssertFmtEq("'%-.X'", 1234567, "'12D687'"); + AssertFmtEq("'%-.0X'", 1234567, "'12D687'"); + AssertFmtEq("'%-.3X'", 1234567, "'12D687'"); + AssertFmtEq("'%-.6X'", 1234567, "'12D687'"); + AssertFmtEq("'%-.9X'", 1234567, "'12D687'"); + AssertFmtEq("'%-.20X'", 1234567, "'12D687'"); + AssertFmtEq("'%-0.X'", 1234567, "'12D687'"); + AssertFmtEq("'%-0.0X'", 1234567, "'12D687'"); + AssertFmtEq("'%-0.3X'", 1234567, "'12D687'"); + AssertFmtEq("'%-0.6X'", 1234567, "'12D687'"); + AssertFmtEq("'%-0.9X'", 1234567, "'12D687'"); + AssertFmtEq("'%-0.20X'", 1234567, "'12D687'"); + + AssertFmtEq("'%0.x'", 1234567, "'12d687'"); + AssertFmtEq("'%0.0x'", 1234567, "'12d687'"); + AssertFmtEq("'%0.3x'", 1234567, "'12d687'"); + AssertFmtEq("'%0.6x'", 1234567, "'12d687'"); + AssertFmtEq("'%0.9x'", 1234567, "'12d687'"); + AssertFmtEq("'%0.20x'", 1234567, "'12d687'"); + AssertFmtEq("'%-.x'", 1234567, "'12d687'"); + AssertFmtEq("'%-.0x'", 1234567, "'12d687'"); + AssertFmtEq("'%-.3x'", 1234567, "'12d687'"); + AssertFmtEq("'%-.6x'", 1234567, "'12d687'"); + AssertFmtEq("'%-.9x'", 1234567, "'12d687'"); + AssertFmtEq("'%-.20x'", 1234567, "'12d687'"); + AssertFmtEq("'%-0.x'", 1234567, "'12d687'"); + AssertFmtEq("'%-0.0x'", 1234567, "'12d687'"); + AssertFmtEq("'%-0.3x'", 1234567, "'12d687'"); + AssertFmtEq("'%-0.6x'", 1234567, "'12d687'"); + AssertFmtEq("'%-0.9x'", 1234567, "'12d687'"); + AssertFmtEq("'%-0.20x'", 1234567, "'12d687'"); + + // Flags & Width + AssertFmtEq("'%00X'", 1234567, "'12D687'"); + AssertFmtEq("'%03X'", 1234567, "'12D687'"); + AssertFmtEq("'%06X'", 1234567, "'12D687'"); + AssertFmtEq("'%09X'", 1234567, "'00012D687'"); + AssertFmtEq("'%020X'", 1234567, "'0000000000000012D687'"); + AssertFmtEq("'%-0X'", 1234567, "'12D687'"); + AssertFmtEq("'%-3X'", 1234567, "'12D687'"); + AssertFmtEq("'%-6X'", 1234567, "'12D687'"); + AssertFmtEq("'%-9X'", 1234567, "'12D687 '"); + AssertFmtEq("'%-20X'", 1234567, "'12D687 '"); + AssertFmtEq("'%-00X'", 1234567, "'12D687'"); + AssertFmtEq("'%-03X'", 1234567, "'12D687'"); + AssertFmtEq("'%-06X'", 1234567, "'12D687'"); + AssertFmtEq("'%-09X'", 1234567, "'12D687000'"); + AssertFmtEq("'%-020X'", 1234567, "'12D68700000000000000'"); + + AssertFmtEq("'%00x'", 1234567, "'12d687'"); + AssertFmtEq("'%03x'", 1234567, "'12d687'"); + AssertFmtEq("'%06x'", 1234567, "'12d687'"); + AssertFmtEq("'%09x'", 1234567, "'00012d687'"); + AssertFmtEq("'%020x'", 1234567, "'0000000000000012d687'"); + AssertFmtEq("'%-0x'", 1234567, "'12d687'"); + AssertFmtEq("'%-3x'", 1234567, "'12d687'"); + AssertFmtEq("'%-6x'", 1234567, "'12d687'"); + AssertFmtEq("'%-9x'", 1234567, "'12d687 '"); + AssertFmtEq("'%-20x'", 1234567, "'12d687 '"); + AssertFmtEq("'%-00x'", 1234567, "'12d687'"); + AssertFmtEq("'%-03x'", 1234567, "'12d687'"); + AssertFmtEq("'%-06x'", 1234567, "'12d687'"); + AssertFmtEq("'%-09x'", 1234567, "'12d687000'"); + AssertFmtEq("'%-020x'", 1234567, "'12d68700000000000000'"); + + // Flags & Precision & Width + AssertFmtEq("'%00.X'", 1234567, "'12D687'"); + AssertFmtEq("'%00.0X'", 1234567, "'12D687'"); + AssertFmtEq("'%00.3X'", 1234567, "'12D687'"); + AssertFmtEq("'%00.6X'", 1234567, "'12D687'"); + AssertFmtEq("'%00.9X'", 1234567, "'12D687'"); + AssertFmtEq("'%00.20X'", 1234567, "'12D687'"); + AssertFmtEq("'%03.X'", 1234567, "'12D687'"); + AssertFmtEq("'%03.0X'", 1234567, "'12D687'"); + AssertFmtEq("'%03.3X'", 1234567, "'12D687'"); + AssertFmtEq("'%03.6X'", 1234567, "'12D687'"); + AssertFmtEq("'%03.9X'", 1234567, "'12D687'"); + AssertFmtEq("'%03.20X'", 1234567, "'12D687'"); + AssertFmtEq("'%06.X'", 1234567, "'12D687'"); + AssertFmtEq("'%06.0X'", 1234567, "'12D687'"); + AssertFmtEq("'%06.3X'", 1234567, "'12D687'"); + AssertFmtEq("'%06.6X'", 1234567, "'12D687'"); + AssertFmtEq("'%06.9X'", 1234567, "'12D687'"); + AssertFmtEq("'%06.20X'", 1234567, "'12D687'"); + AssertFmtEq("'%09.X'", 1234567, "'00012D687'"); + AssertFmtEq("'%09.0X'", 1234567, "'00012D687'"); + AssertFmtEq("'%09.3X'", 1234567, "'00012D687'"); + AssertFmtEq("'%09.6X'", 1234567, "'00012D687'"); + AssertFmtEq("'%09.9X'", 1234567, "'00012D687'"); + AssertFmtEq("'%09.20X'", 1234567, "'00012D687'"); + AssertFmtEq("'%020.X'", 1234567, "'0000000000000012D687'"); + AssertFmtEq("'%020.0X'", 1234567, "'0000000000000012D687'"); + AssertFmtEq("'%020.3X'", 1234567, "'0000000000000012D687'"); + AssertFmtEq("'%020.6X'", 1234567, "'0000000000000012D687'"); + AssertFmtEq("'%020.9X'", 1234567, "'0000000000000012D687'"); + AssertFmtEq("'%020.20X'", 1234567, "'0000000000000012D687'"); + + AssertFmtEq("'%00.x'", 1234567, "'12d687'"); + AssertFmtEq("'%00.0x'", 1234567, "'12d687'"); + AssertFmtEq("'%00.3x'", 1234567, "'12d687'"); + AssertFmtEq("'%00.6x'", 1234567, "'12d687'"); + AssertFmtEq("'%00.9x'", 1234567, "'12d687'"); + AssertFmtEq("'%00.20x'", 1234567, "'12d687'"); + AssertFmtEq("'%03.x'", 1234567, "'12d687'"); + AssertFmtEq("'%03.0x'", 1234567, "'12d687'"); + AssertFmtEq("'%03.3x'", 1234567, "'12d687'"); + AssertFmtEq("'%03.6x'", 1234567, "'12d687'"); + AssertFmtEq("'%03.9x'", 1234567, "'12d687'"); + AssertFmtEq("'%03.20x'", 1234567, "'12d687'"); + AssertFmtEq("'%06.x'", 1234567, "'12d687'"); + AssertFmtEq("'%06.0x'", 1234567, "'12d687'"); + AssertFmtEq("'%06.3x'", 1234567, "'12d687'"); + AssertFmtEq("'%06.6x'", 1234567, "'12d687'"); + AssertFmtEq("'%06.9x'", 1234567, "'12d687'"); + AssertFmtEq("'%06.20x'", 1234567, "'12d687'"); + AssertFmtEq("'%09.x'", 1234567, "'00012d687'"); + AssertFmtEq("'%09.0x'", 1234567, "'00012d687'"); + AssertFmtEq("'%09.3x'", 1234567, "'00012d687'"); + AssertFmtEq("'%09.6x'", 1234567, "'00012d687'"); + AssertFmtEq("'%09.9x'", 1234567, "'00012d687'"); + AssertFmtEq("'%09.20x'", 1234567, "'00012d687'"); + AssertFmtEq("'%020.x'", 1234567, "'0000000000000012d687'"); + AssertFmtEq("'%020.0x'", 1234567, "'0000000000000012d687'"); + AssertFmtEq("'%020.3x'", 1234567, "'0000000000000012d687'"); + AssertFmtEq("'%020.6x'", 1234567, "'0000000000000012d687'"); + AssertFmtEq("'%020.9x'", 1234567, "'0000000000000012d687'"); + AssertFmtEq("'%020.20x'", 1234567, "'0000000000000012d687'"); + + AssertFmtEq("'%-0.X'", 1234567, "'12D687'"); + AssertFmtEq("'%-0.0X'", 1234567, "'12D687'"); + AssertFmtEq("'%-0.3X'", 1234567, "'12D687'"); + AssertFmtEq("'%-0.6X'", 1234567, "'12D687'"); + AssertFmtEq("'%-0.9X'", 1234567, "'12D687'"); + AssertFmtEq("'%-0.20X'", 1234567, "'12D687'"); + AssertFmtEq("'%-3.X'", 1234567, "'12D687'"); + AssertFmtEq("'%-3.0X'", 1234567, "'12D687'"); + AssertFmtEq("'%-3.3X'", 1234567, "'12D687'"); + AssertFmtEq("'%-3.6X'", 1234567, "'12D687'"); + AssertFmtEq("'%-3.9X'", 1234567, "'12D687'"); + AssertFmtEq("'%-3.20X'", 1234567, "'12D687'"); + AssertFmtEq("'%-6.X'", 1234567, "'12D687'"); + AssertFmtEq("'%-6.0X'", 1234567, "'12D687'"); + AssertFmtEq("'%-6.3X'", 1234567, "'12D687'"); + AssertFmtEq("'%-6.6X'", 1234567, "'12D687'"); + AssertFmtEq("'%-6.9X'", 1234567, "'12D687'"); + AssertFmtEq("'%-6.20X'", 1234567, "'12D687'"); + AssertFmtEq("'%-9.X'", 1234567, "'12D687 '"); + AssertFmtEq("'%-9.0X'", 1234567, "'12D687 '"); + AssertFmtEq("'%-9.3X'", 1234567, "'12D687 '"); + AssertFmtEq("'%-9.6X'", 1234567, "'12D687 '"); + AssertFmtEq("'%-9.9X'", 1234567, "'12D687 '"); + AssertFmtEq("'%-9.20X'", 1234567, "'12D687 '"); + AssertFmtEq("'%-20.X'", 1234567, "'12D687 '"); + AssertFmtEq("'%-20.0X'", 1234567, "'12D687 '"); + AssertFmtEq("'%-20.3X'", 1234567, "'12D687 '"); + AssertFmtEq("'%-20.6X'", 1234567, "'12D687 '"); + AssertFmtEq("'%-20.9X'", 1234567, "'12D687 '"); + AssertFmtEq("'%-20.20X'", 1234567, "'12D687 '"); + + AssertFmtEq("'%-0.x'", 1234567, "'12d687'"); + AssertFmtEq("'%-0.0x'", 1234567, "'12d687'"); + AssertFmtEq("'%-0.3x'", 1234567, "'12d687'"); + AssertFmtEq("'%-0.6x'", 1234567, "'12d687'"); + AssertFmtEq("'%-0.9x'", 1234567, "'12d687'"); + AssertFmtEq("'%-0.20x'", 1234567, "'12d687'"); + AssertFmtEq("'%-3.x'", 1234567, "'12d687'"); + AssertFmtEq("'%-3.0x'", 1234567, "'12d687'"); + AssertFmtEq("'%-3.3x'", 1234567, "'12d687'"); + AssertFmtEq("'%-3.6x'", 1234567, "'12d687'"); + AssertFmtEq("'%-3.9x'", 1234567, "'12d687'"); + AssertFmtEq("'%-3.20x'", 1234567, "'12d687'"); + AssertFmtEq("'%-6.x'", 1234567, "'12d687'"); + AssertFmtEq("'%-6.0x'", 1234567, "'12d687'"); + AssertFmtEq("'%-6.3x'", 1234567, "'12d687'"); + AssertFmtEq("'%-6.6x'", 1234567, "'12d687'"); + AssertFmtEq("'%-6.9x'", 1234567, "'12d687'"); + AssertFmtEq("'%-6.20x'", 1234567, "'12d687'"); + AssertFmtEq("'%-9.x'", 1234567, "'12d687 '"); + AssertFmtEq("'%-9.0x'", 1234567, "'12d687 '"); + AssertFmtEq("'%-9.3x'", 1234567, "'12d687 '"); + AssertFmtEq("'%-9.6x'", 1234567, "'12d687 '"); + AssertFmtEq("'%-9.9x'", 1234567, "'12d687 '"); + AssertFmtEq("'%-9.20x'", 1234567, "'12d687 '"); + AssertFmtEq("'%-20.x'", 1234567, "'12d687 '"); + AssertFmtEq("'%-20.0x'", 1234567, "'12d687 '"); + AssertFmtEq("'%-20.3x'", 1234567, "'12d687 '"); + AssertFmtEq("'%-20.6x'", 1234567, "'12d687 '"); + AssertFmtEq("'%-20.9x'", 1234567, "'12d687 '"); + AssertFmtEq("'%-20.20x'", 1234567, "'12d687 '"); + + AssertFmtEq("'%-00.X'", 1234567, "'12D687'"); + AssertFmtEq("'%-00.0X'", 1234567, "'12D687'"); + AssertFmtEq("'%-00.3X'", 1234567, "'12D687'"); + AssertFmtEq("'%-00.6X'", 1234567, "'12D687'"); + AssertFmtEq("'%-00.9X'", 1234567, "'12D687'"); + AssertFmtEq("'%-00.20X'", 1234567, "'12D687'"); + AssertFmtEq("'%-03.X'", 1234567, "'12D687'"); + AssertFmtEq("'%-03.0X'", 1234567, "'12D687'"); + AssertFmtEq("'%-03.3X'", 1234567, "'12D687'"); + AssertFmtEq("'%-03.6X'", 1234567, "'12D687'"); + AssertFmtEq("'%-03.9X'", 1234567, "'12D687'"); + AssertFmtEq("'%-03.20X'", 1234567, "'12D687'"); + AssertFmtEq("'%-06.X'", 1234567, "'12D687'"); + AssertFmtEq("'%-06.0X'", 1234567, "'12D687'"); + AssertFmtEq("'%-06.3X'", 1234567, "'12D687'"); + AssertFmtEq("'%-06.6X'", 1234567, "'12D687'"); + AssertFmtEq("'%-06.9X'", 1234567, "'12D687'"); + AssertFmtEq("'%-06.20X'", 1234567, "'12D687'"); + AssertFmtEq("'%-09.X'", 1234567, "'12D687000'"); + AssertFmtEq("'%-09.0X'", 1234567, "'12D687000'"); + AssertFmtEq("'%-09.3X'", 1234567, "'12D687000'"); + AssertFmtEq("'%-09.6X'", 1234567, "'12D687000'"); + AssertFmtEq("'%-09.9X'", 1234567, "'12D687000'"); + AssertFmtEq("'%-09.20X'", 1234567, "'12D687000'"); + AssertFmtEq("'%-020.X'", 1234567, "'12D68700000000000000'"); + AssertFmtEq("'%-020.0X'", 1234567, "'12D68700000000000000'"); + AssertFmtEq("'%-020.3X'", 1234567, "'12D68700000000000000'"); + AssertFmtEq("'%-020.6X'", 1234567, "'12D68700000000000000'"); + AssertFmtEq("'%-020.9X'", 1234567, "'12D68700000000000000'"); + AssertFmtEq("'%-020.20X'", 1234567, "'12D68700000000000000'"); + + AssertFmtEq("'%-00.x'", 1234567, "'12d687'"); + AssertFmtEq("'%-00.0x'", 1234567, "'12d687'"); + AssertFmtEq("'%-00.3x'", 1234567, "'12d687'"); + AssertFmtEq("'%-00.6x'", 1234567, "'12d687'"); + AssertFmtEq("'%-00.9x'", 1234567, "'12d687'"); + AssertFmtEq("'%-00.20x'", 1234567, "'12d687'"); + AssertFmtEq("'%-03.x'", 1234567, "'12d687'"); + AssertFmtEq("'%-03.0x'", 1234567, "'12d687'"); + AssertFmtEq("'%-03.3x'", 1234567, "'12d687'"); + AssertFmtEq("'%-03.6x'", 1234567, "'12d687'"); + AssertFmtEq("'%-03.9x'", 1234567, "'12d687'"); + AssertFmtEq("'%-03.20x'", 1234567, "'12d687'"); + AssertFmtEq("'%-06.x'", 1234567, "'12d687'"); + AssertFmtEq("'%-06.0x'", 1234567, "'12d687'"); + AssertFmtEq("'%-06.3x'", 1234567, "'12d687'"); + AssertFmtEq("'%-06.6x'", 1234567, "'12d687'"); + AssertFmtEq("'%-06.9x'", 1234567, "'12d687'"); + AssertFmtEq("'%-06.20x'", 1234567, "'12d687'"); + AssertFmtEq("'%-09.x'", 1234567, "'12d687000'"); + AssertFmtEq("'%-09.0x'", 1234567, "'12d687000'"); + AssertFmtEq("'%-09.3x'", 1234567, "'12d687000'"); + AssertFmtEq("'%-09.6x'", 1234567, "'12d687000'"); + AssertFmtEq("'%-09.9x'", 1234567, "'12d687000'"); + AssertFmtEq("'%-09.20x'", 1234567, "'12d687000'"); + AssertFmtEq("'%-020.x'", 1234567, "'12d68700000000000000'"); + AssertFmtEq("'%-020.0x'", 1234567, "'12d68700000000000000'"); + AssertFmtEq("'%-020.3x'", 1234567, "'12d68700000000000000'"); + AssertFmtEq("'%-020.6x'", 1234567, "'12d68700000000000000'"); + AssertFmtEq("'%-020.9x'", 1234567, "'12d68700000000000000'"); + AssertFmtEq("'%-020.20x'", 1234567, "'12d68700000000000000'"); +} + + + +stock void AssertFmtEq(const char[] fmt, const any value, const char[] expected) +{ + char buffer[512]; + FormatEx(buffer, sizeof(buffer), fmt, value); + AssertStrEq(fmt, buffer, expected); +} + +stock void AssertFmtStrEq(const char[] fmt, const char[] value, const char[] expected) +{ + char buffer[512]; + FormatEx(buffer, sizeof(buffer), fmt, value); + AssertStrEq(fmt, buffer, expected); +} + +stock void AssertFmtTR1(const char[] fmt, const char[] value, int language, const char[] expected) +{ + char buffer[512]; + FormatEx(buffer, sizeof(buffer), fmt, value, language); + AssertStrEq(fmt, buffer, expected); +} + +stock void AssertFmtTR2(const char[] fmt, const char[] value, int language, any arg, const char[] expected) +{ + char buffer[512]; + FormatEx(buffer, sizeof(buffer), fmt, value, language, arg); + AssertStrEq(fmt, buffer, expected); +} + +stock void AssertFmtTR3(const char[] fmt, const char[] value, int language, char[] arg1, char[] arg2, const char[] expected) +{ + char buffer[512]; + FormatEx(buffer, sizeof(buffer), fmt, value, language, arg1, arg2); + AssertStrEq(fmt, buffer, expected); +} + +stock void AssertFmtTR4(const char[] fmt, const char[] value, const char[] expected) +{ + char buffer[512]; + FormatEx(buffer, sizeof(buffer), fmt, value); + AssertStrEq(fmt, buffer, expected); +} + +stock void AssertFmtTR5(const char[] fmt, const char[] value, any arg, const char[] expected) +{ + char buffer[512]; + FormatEx(buffer, sizeof(buffer), fmt, value, arg); + AssertStrEq(fmt, buffer, expected); +} + +stock void AssertFmtTR6(const char[] fmt, const char[] value, char[] arg1, char[] arg2, const char[] expected) +{ + char buffer[512]; + FormatEx(buffer, sizeof(buffer), fmt, value, arg1, arg2); + AssertStrEq(fmt, buffer, expected); +} + +stock bool IsValidClient(int client) +{ + return client > 0 && client <= MaxClients && IsClientInGame(client); +}