Loading...
tests/locale.c Libc-1725.40.4 /dev/null
--- Libc/Libc-1725.40.4/tests/locale.c
+++ /dev/null
@@ -1,239 +0,0 @@
-#include <TargetConditionals.h>
-#include <locale.h>
-#include <signal.h>
-#include <stdarg.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <wchar.h>
-#include <wctype.h>
-#include <xlocale.h>
-#include <os/lock.h>
-#include <sys/wait.h>
-
-#include <darwintest.h>
-
-#if TARGET_OS_OSX
-T_DECL(locale_PR_23679075, "converts a cyrillic a to uppercase")
-{
-	locale_t loc = newlocale(LC_COLLATE_MASK|LC_CTYPE_MASK, "ru_RU", 0);
-	T_ASSERT_NOTNULL(loc, "newlocale(LC_COLLATE_MASK|LC_CTYPE_MASK, \"ru_RU\", 0) should return a locale");
-
-	T_ASSERT_EQ(towupper_l(0x0430, loc), 0x0410, NULL);
-	freelocale(loc);
-}
-
-T_DECL(locale_PR_24165555, "swprintf with Russian chars")
-{
-    setlocale(LC_ALL, "ru_RU.UTF-8");
-
-    wchar_t buffer[256];
-    T_EXPECT_POSIX_SUCCESS(swprintf(buffer, 256, L"%ls", L"English: Hello World"), "English");
-    T_EXPECT_POSIX_SUCCESS(swprintf(buffer, 256, L"%ls", L"Russian: ру́сский язы́к"), "Russian");
-
-    setlocale(LC_ALL, "");
-}
-
-T_DECL(locale_PR_28774201, "return code on bad locale")
-{
-    T_EXPECT_NULL(newlocale(LC_COLLATE_MASK | LC_CTYPE_MASK, "foobar", NULL), NULL);
-    T_EXPECT_EQ(errno, ENOENT, NULL);
-}
-
-static void *hammer_snprintf(void *hammer)
-{
-	while(*(bool *)hammer) {
-		char buf[3];
-		snprintf(buf, sizeof(buf), "%s%s", "a", "b");
-	}
-
-	return NULL;
-}
-
-#define HOW_MANY_FORKS 10000
-
-T_DECL(locale_PR_91564505, "locale lock should be reset on fork")
-{
-	bool hammer = true;
-	pthread_t thread;
-	pthread_create(&thread, NULL, hammer_snprintf, &hammer);
-
-	int i;
-	for (i = 0; i < HOW_MANY_FORKS; i++) {
-		pid_t pid = fork();
-		if (pid < 0) {
-			T_FAIL("fork() returned %d", pid);
-		}
-
-		if (pid) {
-			int stat_loc;
-			waitpid(pid, &stat_loc, 0);
-			if(WIFSIGNALED(stat_loc)) {
-				T_FAIL("child crashed post-fork pre-exec");
-				break;
-			}
-		} else {
-			exit(0);
-		}
-	}
-
-	hammer = false;
-	pthread_join(thread, NULL);
-
-	T_EXPECT_EQ(i, HOW_MANY_FORKS, "We made it through %d forks without a post-fork pre-exec crash", i);
-}
-
-static void
-test_one_wc(wchar_t wc)
-{
-	char buf[MB_LEN_MAX];
-	mbstate_t mbs = { 0 };
-	size_t ret;
-
-	/* Always using a fresh mbstate */
-	ret = wcrtomb(&buf[0], wc, &mbs);
-
-	T_QUIET;
-	T_ASSERT_LE(ret, MB_CUR_MAX, "wc %x bad", wc);
-}
-
-static void
-test_one_packed(unsigned char upper, unsigned char lower)
-{
-	wchar_t wc = (upper << 8) | lower;
-	wchar_t rev;
-	size_t off;
-	int exp, ret;
-	char buf[3];
-
-	off = 0;
-	if (upper != 0)
-		buf[off++] = upper;
-	buf[off++] = lower;
-	buf[off] = 0;
-
-	test_one_wc(wc);
-
-	if (upper == 0 && lower == 0)
-		exp = 0;
-	else
-		exp = off;
-
-	ret = mbtowc(&rev, &buf[0], off);
-
-	T_QUIET;
-	T_ASSERT_EQ(ret, exp, NULL);
-}
-
-static void
-test_packed(void)
-{
-	wchar_t wc;
-
-	/* G0 (US-ASCII or ISO646-JP) */
-	for (unsigned char l = 0x00; l <= 0x7f; l++) {
-		test_one_packed(0, l);
-	}
-
-	/* G1 (JISX0208 / JISC6226) */
-	for (unsigned char u = 0xa1; u <= 0xfe; u++) {
-		for (unsigned char l = 0xa1; l <= 0xfe; l++) {
-			test_one_packed(u, l);
-		}
-	}
-
-	/* G3 (JISX0212) */
-	for (unsigned char u = 0xa1; u <= 0xfe; u++) {
-		for (unsigned char l = 0x21; l <= 0x7e; l++) {
-			test_one_packed(u, l);
-		}
-	}
-}
-
-/* locale/FreeBSD/mblocal.h */
-#define	SS2	0x8e
-#define	SS3	0x8f
-
-/*
- * Test SS2, SS3 under the current locale.
- */
-static void
-test_cjk_cntrl(unsigned int cntrl, size_t bytes)
-{
-	char buf[MB_LEN_MAX];
-	wchar_t end, rev, wc;
-	unsigned int shift;
-	int exp, ret;
-
-	T_QUIET;
-	T_ASSERT_EQ(cntrl & ~0xff, 0, NULL);
-	T_QUIET;
-	T_ASSERT_GT(bytes, 1, NULL);
-	T_QUIET;
-	T_ASSERT_LT(bytes, 5, NULL);
-
-	shift = (8 * (bytes - 1));
-	wc = (cntrl << shift);
-	end = (1 << shift);
-
-	for (wchar_t next = 0; next < end; next++) {
-		wc = (wc & ~(end - 1)) | next;
-
-		test_one_wc(wc);
-
-		for (size_t i = 0; i < bytes; i++) {
-			buf[i] = (wc >> (8 * (bytes - (i + 1)))) & 0xff;
-		}
-
-		if (wc == 0)
-			exp = 0;
-		else
-			exp = bytes;
-
-		ret = mbtowc(&rev, &buf[0], bytes);
-
-		T_QUIET;
-		T_ASSERT_EQ(ret, exp, NULL);
-		T_QUIET;
-		T_ASSERT_EQ(rev, wc, NULL);
-	}
-}
-
-/*
- * euc-cw, euc-kr == base, first byte >= 0xa1 == 2 byte
- * euc-jp == base + SS2, 2 bytes; SS3, 3 bytes
- * euc-tw == base + SS2, 4 bytes
- */
-T_DECL(locale_cjk, "Test each codeset that should be usable in eucCN, eucJP, eucKR")
-{
-	const char *locales[] = { "zh_CN.eucCN", "ja_JP.eucJP", "ko_KR.eucKR" };
-	const char *cloc;
-
-	for (size_t i = 0; i < sizeof(locales) / sizeof(locales[0]); i++) {
-		cloc = locales[i];
-
-		T_ASSERT_EQ_STR(cloc, setlocale(LC_CTYPE, cloc),
-		    "setlocale(LC_CTYPE, %s)", cloc);
-
-		T_LOG("Basic packed tests");
-		test_packed();
-
-		/* Avoid the legacy check & noise; no extended tests. */
-		if (MB_CUR_MAX == 2)
-			continue;
-
-		T_LOG("Running extended tests");
-
-		if (strstr(cloc, "eucTW") != NULL) {
-			/*
-			 * We don't have any eucTW yet, but for completeness
-			 * it's included here.
-			 */
-			test_cjk_cntrl(SS2, 4);
-		} else if (strstr(cloc, "eucJP") != NULL) {
-			test_cjk_cntrl(SS2, 2);
-			test_cjk_cntrl(SS3, 3);
-		}
-	}
-}
-#endif