From 19d95a226cc57254e969402bc8f91ca77cc10f4f Mon Sep 17 00:00:00 2001 From: Wildan M Date: Sat, 27 Dec 2025 22:25:01 +0700 Subject: [PATCH] Add tests for new locale.h functions --- tests/Makefile | 4 +- .../duplocale.stderr} | 0 .../locale/duplocale.stdout} | 0 .../bins_dynamic/locale/newlocale.stderr | 0 .../bins_dynamic/locale/newlocale.stdout | 0 .../bins_dynamic/locale/setlocale.stderr | 0 .../setlocale.stdout} | 0 .../bins_static/locale/duplocale.stderr | 0 .../bins_static/locale/duplocale.stdout | 0 .../bins_static/locale/newlocale.stderr | 0 .../bins_static/locale/newlocale.stdout | 0 .../bins_static/locale/setlocale.stderr | 0 .../setlocale.stdout} | 0 tests/locale/duplocale.c | 39 +++++++++++++++++++ tests/locale/newlocale.c | 16 ++++++++ tests/{locale.c => locale/setlocale.c} | 0 16 files changed, 58 insertions(+), 1 deletion(-) rename tests/expected/bins_dynamic/{locale.stderr => locale/duplocale.stderr} (100%) rename tests/expected/{bins_static/locale.stderr => bins_dynamic/locale/duplocale.stdout} (100%) create mode 100644 tests/expected/bins_dynamic/locale/newlocale.stderr create mode 100644 tests/expected/bins_dynamic/locale/newlocale.stdout create mode 100644 tests/expected/bins_dynamic/locale/setlocale.stderr rename tests/expected/bins_dynamic/{locale.stdout => locale/setlocale.stdout} (100%) create mode 100644 tests/expected/bins_static/locale/duplocale.stderr create mode 100644 tests/expected/bins_static/locale/duplocale.stdout create mode 100644 tests/expected/bins_static/locale/newlocale.stderr create mode 100644 tests/expected/bins_static/locale/newlocale.stdout create mode 100644 tests/expected/bins_static/locale/setlocale.stderr rename tests/expected/bins_static/{locale.stdout => locale/setlocale.stdout} (100%) create mode 100644 tests/locale/duplocale.c create mode 100644 tests/locale/newlocale.c rename tests/{locale.c => locale/setlocale.c} (100%) diff --git a/tests/Makefile b/tests/Makefile index 7d2a7f9169..0f3489d4a8 100644 --- a/tests/Makefile +++ b/tests/Makefile @@ -46,7 +46,9 @@ EXPECT_NAMES=\ glob \ iso646 \ libgen \ - locale \ + locale/duplocale \ + locale/newlocale \ + locale/setlocale \ math \ regex \ select \ diff --git a/tests/expected/bins_dynamic/locale.stderr b/tests/expected/bins_dynamic/locale/duplocale.stderr similarity index 100% rename from tests/expected/bins_dynamic/locale.stderr rename to tests/expected/bins_dynamic/locale/duplocale.stderr diff --git a/tests/expected/bins_static/locale.stderr b/tests/expected/bins_dynamic/locale/duplocale.stdout similarity index 100% rename from tests/expected/bins_static/locale.stderr rename to tests/expected/bins_dynamic/locale/duplocale.stdout diff --git a/tests/expected/bins_dynamic/locale/newlocale.stderr b/tests/expected/bins_dynamic/locale/newlocale.stderr new file mode 100644 index 0000000000..e69de29bb2 diff --git a/tests/expected/bins_dynamic/locale/newlocale.stdout b/tests/expected/bins_dynamic/locale/newlocale.stdout new file mode 100644 index 0000000000..e69de29bb2 diff --git a/tests/expected/bins_dynamic/locale/setlocale.stderr b/tests/expected/bins_dynamic/locale/setlocale.stderr new file mode 100644 index 0000000000..e69de29bb2 diff --git a/tests/expected/bins_dynamic/locale.stdout b/tests/expected/bins_dynamic/locale/setlocale.stdout similarity index 100% rename from tests/expected/bins_dynamic/locale.stdout rename to tests/expected/bins_dynamic/locale/setlocale.stdout diff --git a/tests/expected/bins_static/locale/duplocale.stderr b/tests/expected/bins_static/locale/duplocale.stderr new file mode 100644 index 0000000000..e69de29bb2 diff --git a/tests/expected/bins_static/locale/duplocale.stdout b/tests/expected/bins_static/locale/duplocale.stdout new file mode 100644 index 0000000000..e69de29bb2 diff --git a/tests/expected/bins_static/locale/newlocale.stderr b/tests/expected/bins_static/locale/newlocale.stderr new file mode 100644 index 0000000000..e69de29bb2 diff --git a/tests/expected/bins_static/locale/newlocale.stdout b/tests/expected/bins_static/locale/newlocale.stdout new file mode 100644 index 0000000000..e69de29bb2 diff --git a/tests/expected/bins_static/locale/setlocale.stderr b/tests/expected/bins_static/locale/setlocale.stderr new file mode 100644 index 0000000000..e69de29bb2 diff --git a/tests/expected/bins_static/locale.stdout b/tests/expected/bins_static/locale/setlocale.stdout similarity index 100% rename from tests/expected/bins_static/locale.stdout rename to tests/expected/bins_static/locale/setlocale.stdout diff --git a/tests/locale/duplocale.c b/tests/locale/duplocale.c new file mode 100644 index 0000000000..735fbbe353 --- /dev/null +++ b/tests/locale/duplocale.c @@ -0,0 +1,39 @@ +#include +#include +#include +#include + +int main() { + struct lconv *lconv0 = localeconv(); + + locale_t locale0 = uselocale(NULL); + assert(locale0 == LC_GLOBAL_LOCALE); + + locale_t locale1 = uselocale(LC_GLOBAL_LOCALE); + assert(locale1 == LC_GLOBAL_LOCALE); + + struct lconv *lconv1 = localeconv(); + assert(lconv0 == lconv1); + + locale_t locale2 = newlocale(LC_ALL_MASK, "C", (locale_t)0); + assert(locale2 != LC_GLOBAL_LOCALE); + + struct lconv *lconv2 = localeconv(); + assert(lconv2 == lconv1); + + locale_t locale3 = duplocale(locale2); + assert(locale3 != locale2); + assert(locale3 != LC_GLOBAL_LOCALE); + + locale_t locale4 = uselocale(locale3); + assert(locale4 == locale1); + + struct lconv *lconv3 = localeconv(); + assert(lconv3 != lconv2); + + // should not crash + freelocale(locale3); + freelocale(locale2); + freelocale(locale1); + return 0; +} \ No newline at end of file diff --git a/tests/locale/newlocale.c b/tests/locale/newlocale.c new file mode 100644 index 0000000000..0dbb70b5f1 --- /dev/null +++ b/tests/locale/newlocale.c @@ -0,0 +1,16 @@ +#include +#include +#include +#include + +int main() { + locale_t locale0 = newlocale(LC_ALL_MASK, "C", (locale_t)0); + assert(locale0 != (locale_t)0); + + locale_t locale1 = newlocale(LC_ALL_MASK, "non-existent-locale", (locale_t)0); + assert(locale1 == (locale_t)0); + + // TODO: test with existing custom locale + + return 0; +} diff --git a/tests/locale.c b/tests/locale/setlocale.c similarity index 100% rename from tests/locale.c rename to tests/locale/setlocale.c