KERNEL32: add a test case for CompareStringW undocumented flag 0x10000000

Mike McCormack mike at codeweavers.com
Sun Nov 21 10:15:44 CST 2004


Hi All,

I've written a regression test that shows what the undocumented flag 
0x10000000 passed by shlwapi.StrIsIntlEqualW/A to CompareStringW/A does. 
  I discovered the different by writing a short program that compared 
the output of CompareString with and without the flag for all unicode 
characters... it took a while to run :)

The flag (0x10000000) passed to CompareString reverse the sort order of 
a number of unicode characters.  I've got no idea why it would want to 
do that... maybe somebody can shed some light on what the reason behind 
this would be?

Mike


ChangeLog:
* add a test case for CompareStringW undocumented flag 0x10000000

-------------- next part --------------
Index: dlls/kernel/tests/locale.c
===================================================================
RCS file: /home/wine/wine/dlls/kernel/tests/locale.c,v
retrieving revision 1.33
diff -u -r1.33 locale.c
--- dlls/kernel/tests/locale.c	21 Nov 2004 15:47:24 -0000	1.33
+++ dlls/kernel/tests/locale.c	21 Nov 2004 17:01:12 -0000
@@ -1410,6 +1410,76 @@
 }
 #endif
 
+static void test_CompareString_undoc(void)
+{
+    WCHAR table1[] = {
+        0x0651, 0x3005, 0x3031, 0x3032, 0x309d, 0x309e, 0x30fc, 0x30fd,
+        0x30fe, 0xfe7c, 0xfe7d, 0xff70
+    };
+    WCHAR table2[] = {
+        0x02b9, 0x02ba, 0x02bb, 0x02bc, 0x02bd, 0x02be, 0x02bf, 0x02c0,
+        0x02c1, 0x02c2, 0x02c3, 0x02c4, 0x02c5, 0x02c8, 0x02cc, 0x02cd,
+        0x02ce, 0x02cf, 0x02d1, 0x02d2, 0x02d3, 0x02d4, 0x02d5, 0x02d6,
+        0x02d7, 0x02de, 0x02e4, 0x02e5, 0x02e6, 0x02e7, 0x02e8, 0x02e9,
+        0x0300, 0x0301, 0x0302, 0x0303, 0x0304, 0x0305, 0x0306, 0x0307,
+        0x0308, 0x0309, 0x030a, 0x030b, 0x030c, 0x030d, 0x030e, 0x030f,
+        0x0310, 0x0311, 0x0312, 0x0313, 0x0314, 0x0315, 0x0316, 0x0317,
+        0x0318, 0x0319, 0x031a, 0x031b, 0x031c, 0x031d, 0x031e, 0x031f,
+        0x0320, 0x0321, 0x0322, 0x0323, 0x0324, 0x0325, 0x0326, 0x0327,
+        0x0328, 0x0329, 0x032a, 0x032b, 0x032c, 0x032d, 0x032e, 0x032f,
+        0x0330, 0x0331, 0x0332, 0x0333, 0x0334, 0x0335, 0x0336, 0x0337,
+        0x0338, 0x0339, 0x033a, 0x033b, 0x033c, 0x033d, 0x033e, 0x033f,
+        0x0340, 0x0341, 0x0342, 0x0343, 0x0344, 0x0345, 0x0346, 0x0347,
+        0x0348, 0x0370, 0x0371, 0x0372, 0x0483, 0x0484, 0x0485, 0x0486,
+        0x0559, 0x055a, 0x0591, 0x0592, 0x0593, 0x0594, 0x0595, 0x0596,
+        0x0597, 0x0598, 0x0599, 0x059a, 0x059b, 0x059c, 0x059d, 0x059e,
+        0x059f, 0x05a0, 0x05a1, 0x05a2, 0x05a3, 0x05a4, 0x05a5, 0x05a6,
+        0x05a7, 0x05a8, 0x05a9, 0x05aa, 0x05ab, 0x05ac, 0x05ad, 0x05ae,
+        0x05af, 0x05b0, 0x05b1, 0x05b2, 0x05b3, 0x05b4, 0x05b5, 0x05b6,
+        0x05b7, 0x05b8, 0x05b9, 0x05ba, 0x05bb, 0x05bc, 0x05bd, 0x05bf,
+        0x05c0, 0x05c1, 0x05c2, 0x093c, 0x0951, 0x0952, 0x0953, 0x0954,
+        0x0981, 0x09bc, 0x09c1, 0x09c2, 0x09c3, 0x09c4, 0x09cd, 0x09e2,
+        0x09e3, 0x0a02, 0x0a3c, 0x0a41, 0x0a42, 0x0a47, 0x0a48, 0x0a4b,
+        0x0a4c, 0x0a70, 0x0a71, 0x0a81, 0x0a82, 0x0abc, 0x0ac1, 0x0ac2,
+        0x0ac3, 0x0ac4, 0x0ac5, 0x0ac7, 0x0ac8, 0x0acd, 0x0b01, 0x0b3c,
+        0x0b3f, 0x0b41, 0x0b42, 0x0b43, 0x0b4d, 0x0bcd, 0x0c3e, 0x0c3f,
+        0x0c40, 0x0c46, 0x0c47, 0x0c48, 0x0c4a, 0x0c4b, 0x0c4c, 0x0c4d,
+        0x0c55, 0x0c56, 0x0cbf, 0x0cc6, 0x0ccd, 0x0d41, 0x0d42, 0x0d43,
+        0x0d4d, 0x0e47, 0x0e48, 0x0e49, 0x0e4a, 0x0e4b, 0x0e4c, 0x0e4d,
+        0x0eb1, 0x0eb4, 0x0eb5, 0x0eb6, 0x0eb7, 0x0eb8, 0x0eb9, 0x0ebb,
+        0x0ebc, 0x0ec8, 0x0ec9, 0x0eca, 0x0ecb, 0x0ecc, 0x0ecd, 0x1026,
+        0x1027, 0x1028, 0x1029, 0x102a, 0x102e, 0x1030, 0x1036, 0x1037,
+        0x103b, 0x103d, 0x103e, 0x104b, 0x104c, 0x20d0, 0x20d1, 0x20d2,
+        0x20d3, 0x20d4, 0x20d5, 0x20d6, 0x20d7, 0x20d8, 0x20d9, 0x20da,
+        0x20db, 0x20dc, 0x20dd, 0x20de, 0x20df, 0x20e0, 0x20e1, 0x302a,
+        0x302b, 0x302c, 0x302d, 0x302e, 0x302f, 0x3099, 0x309a, 0x309b,
+        0x309c, 0xfb1e, 0xff9e, 0xff9f
+    };
+    DWORD r,i,j;
+    WCHAR x[2],y[2];
+    BOOL bPass = TRUE;
+
+    x[1]=0;
+    y[1]=0;
+    for(i=0; bPass && (i<sizeof table1/sizeof table1[0]); i++)
+    {
+        x[0] = table1[i];
+        for(j=0; bPass && (j<sizeof table2/sizeof table2[0]); j++ )
+        {
+            y[0] = table2[2];
+            r = CompareStringW(LOCALE_SYSTEM_DEFAULT, 0x10000000, x, 2, y, 2 );
+            if (r!=CSTR_GREATER_THAN)
+                bPass = FALSE;
+            r = CompareStringW(LOCALE_SYSTEM_DEFAULT, 0, x, 2, y, 2 );
+            if (r==CSTR_LESS_THAN)
+                bPass = FALSE;
+        }
+    }
+    todo_wine {
+    ok(bPass,"undocumented flag 0x10000000 test failed\n");
+    }
+}
+
 static void test_FoldStringA(void)
 {
   int ret, i;
@@ -2103,6 +2173,7 @@
   test_GetCurrencyFormatA(); /* Also tests the W version */
   test_GetNumberFormatA();   /* Also tests the W version */
   test_CompareStringA();
+  test_CompareString_undoc();
   test_LCMapStringA();
   test_LCMapStringW();
   test_FoldStringA();


More information about the wine-devel mailing list