| 
									
										
										
										
											2001-08-09 19:10:37 +00:00
										 |  |  | #include <locale.h>
 | 
					
						
							|  |  |  | #include <stdio.h>
 | 
					
						
							|  |  |  | #include <string.h>
 | 
					
						
							|  |  |  | #include <wchar.h>
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static int do_test (const char *loc); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | int | 
					
						
							|  |  |  | main (void) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |   int result; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   result = do_test ("C"); | 
					
						
							|  |  |  |   result |= do_test ("de_DE.ISO-8859-1"); | 
					
						
							|  |  |  |   result |= do_test ("de_DE.UTF-8"); | 
					
						
							|  |  |  |   result |= do_test ("ja_JP.EUC-JP"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   return result; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static const struct | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |   const wchar_t *fmt; | 
					
						
							|  |  |  |   const wchar_t *wfmt; | 
					
						
							|  |  |  |   const wchar_t *arg; | 
					
						
							| 
									
										
										
										
											2002-02-26 18:08:08 +00:00
										 |  |  |   int retval; | 
					
						
							| 
									
										
										
										
											2001-08-09 19:10:37 +00:00
										 |  |  |   const char *res; | 
					
						
							|  |  |  |   const wchar_t *wres; | 
					
						
							|  |  |  |   int only_C_locale; | 
					
						
							|  |  |  | } tests[] = | 
					
						
							|  |  |  |   { | 
					
						
							| 
									
										
										
										
											2002-02-26 18:08:08 +00:00
										 |  |  |     { L"%[abc]", L"%l[abc]", L"aabbccddaabb", 1 ,"aabbcc", L"aabbcc", 0 }, | 
					
						
							|  |  |  |     { L"%[^def]", L"%l[^def]", L"aabbccddaabb", 1, "aabbcc", L"aabbcc", 0 }, | 
					
						
							|  |  |  |     { L"%[^abc]", L"%l[^abc]", L"aabbccddaabb", 0, "", L"", 0 }, | 
					
						
							|  |  |  |     { L"%[a-c]", L"%l[a-c]", L"aabbccddaabb", 1, "aabbcc", L"aabbcc", 1 }, | 
					
						
							|  |  |  |     { L"%[^d-f]", L"%l[^d-f]", L"aabbccddaabb", 1, "aabbcc", L"aabbcc", 1 }, | 
					
						
							|  |  |  |     { L"%[^a-c]", L"%l[^a-c]", L"aabbccddaabb", 0, "", L"", 1 }, | 
					
						
							|  |  |  |     { L"%[^a-c]", L"%l[^a-c]", L"bbccddaabb", 0, "", L"", 1 } | 
					
						
							| 
									
										
										
										
											2001-08-09 19:10:37 +00:00
										 |  |  |   }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static int | 
					
						
							|  |  |  | do_test (const char *loc) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |   size_t n; | 
					
						
							|  |  |  |   int result = 0; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   if (setlocale (LC_ALL, loc) == NULL) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |       printf ("cannot set locale \"%s\": %m\n", loc); | 
					
						
							|  |  |  |       return 1; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   printf ("\nnew locale: \"%s\"\n", loc); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   for (n = 0; n < sizeof (tests) / sizeof (tests[0]); ++n) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |       char buf[100]; | 
					
						
							|  |  |  |       wchar_t wbuf[100]; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       if (tests[n].only_C_locale && strcmp (loc, "C") != 0) | 
					
						
							|  |  |  | 	continue; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-02-26 18:08:08 +00:00
										 |  |  |       if (swscanf (tests[n].arg, tests[n].fmt, buf) != tests[n].retval) | 
					
						
							| 
									
										
										
										
											2001-08-09 19:10:37 +00:00
										 |  |  | 	{ | 
					
						
							|  |  |  | 	  printf ("swscanf (\"%S\", \"%S\", ...) failed\n", | 
					
						
							|  |  |  | 		  tests[n].arg, tests[n].fmt); | 
					
						
							|  |  |  | 	  result = 1; | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2002-02-26 18:08:08 +00:00
										 |  |  |       else if (tests[n].retval != 0 && strcmp (buf, tests[n].res) != 0) | 
					
						
							| 
									
										
										
										
											2001-08-09 19:10:37 +00:00
										 |  |  | 	{ | 
					
						
							|  |  |  | 	  printf ("swscanf (\"%S\", \"%S\", ...) return \"%s\", expected \"%s\"\n", | 
					
						
							|  |  |  | 		  tests[n].arg, tests[n].fmt, buf, tests[n].res); | 
					
						
							|  |  |  | 	  result = 1; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  |       else | 
					
						
							|  |  |  | 	printf ("swscanf (\"%S\", \"%S\", ...) OK\n", | 
					
						
							|  |  |  | 		tests[n].arg, tests[n].fmt); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2002-02-26 18:08:08 +00:00
										 |  |  |       if (swscanf (tests[n].arg, tests[n].wfmt, wbuf) != tests[n].retval) | 
					
						
							| 
									
										
										
										
											2001-08-09 19:10:37 +00:00
										 |  |  | 	{ | 
					
						
							|  |  |  | 	  printf ("swscanf (\"%S\", \"%S\", ...) failed\n", | 
					
						
							|  |  |  | 		  tests[n].arg, tests[n].wfmt); | 
					
						
							|  |  |  | 	  result = 1; | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2002-02-26 18:08:08 +00:00
										 |  |  |       else if (tests[n].retval != 0 && wcscmp (wbuf, tests[n].wres) != 0) | 
					
						
							| 
									
										
										
										
											2001-08-09 19:10:37 +00:00
										 |  |  | 	{ | 
					
						
							|  |  |  | 	  printf ("swscanf (\"%S\", \"%S\", ...) return \"%S\", expected \"%S\"\n", | 
					
						
							|  |  |  | 		  tests[n].arg, tests[n].wfmt, wbuf, tests[n].wres); | 
					
						
							|  |  |  | 	  result = 1; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  |       else | 
					
						
							|  |  |  | 	printf ("swscanf (\"%S\", \"%S\", ...) OK\n", | 
					
						
							|  |  |  | 		tests[n].arg, tests[n].wfmt); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   return result; | 
					
						
							|  |  |  | } |