Path: blob/main/lib/libc/tests/string/strverscmp_test.c
39485 views
/*-1* SPDX-License-Identifier: BSD-2-Clause2* Copyright (c) 2022 Aymeric Wibo <[email protected]>3*/45#include <atf-c.h>6#include <string.h>78static void9check_all(size_t len, const char *ordered[len])10{11const char *a, *b;1213for (size_t i = 0; i < len; i++) {14for (size_t j = 0; j < len; j++) {15a = ordered[i];16b = ordered[j];1718if (i == j)19ATF_CHECK_MSG(20strverscmp(a, b) == 0,21"strverscmp(\"%s\", \"%s\") == 0",22a, b23);24else if (i < j)25ATF_CHECK_MSG(26strverscmp(a, b) < 0,27"strverscmp(\"%s\", \"%s\") < 0",28a, b29);30else if (i > j)31ATF_CHECK_MSG(32strverscmp(a, b) > 0,33"strverscmp(\"%s\", \"%s\") > 0",34a, b35);36}37}38}3940#define CHECK_ALL(...) do { \41const char *ordered[] = { __VA_ARGS__ }; \42check_all(sizeof(ordered) / sizeof(*ordered), ordered); \43} while (0)4445ATF_TC_WITHOUT_HEAD(strcmp_functionality);46ATF_TC_BODY(strcmp_functionality, tc)47{48CHECK_ALL("", "a", "b");49}5051/* from Linux man page strverscmp(3) */5253ATF_TC_WITHOUT_HEAD(vers_ordering);54ATF_TC_BODY(vers_ordering, tc)55{56CHECK_ALL("000", "00", "01", "010", "09", "0", "1", "9", "10");57}5859ATF_TC_WITHOUT_HEAD(natural_ordering);60ATF_TC_BODY(natural_ordering, tc)61{62CHECK_ALL("jan1", "jan2", "jan9", "jan10", "jan11", "jan19", "jan20");63}6465/* https://sourceware.org/bugzilla/show_bug.cgi?id=9913 */6667ATF_TC_WITHOUT_HEAD(glibc_bug_9913);68ATF_TC_BODY(glibc_bug_9913, tc)69{70CHECK_ALL(71"B0075022800016.gbp.corp.com",72"B007502280067.gbp.corp.com",73"B007502357019.GBP.CORP.COM"74);75}7677ATF_TC_WITHOUT_HEAD(semver_ordering);78ATF_TC_BODY(semver_ordering, tc)79{80CHECK_ALL("2.6.20", "2.6.21");81}8283ATF_TP_ADD_TCS(tp)84{85ATF_TP_ADD_TC(tp, strcmp_functionality);86ATF_TP_ADD_TC(tp, vers_ordering);87ATF_TP_ADD_TC(tp, natural_ordering);88ATF_TP_ADD_TC(tp, glibc_bug_9913);89ATF_TP_ADD_TC(tp, semver_ordering);9091return (atf_no_error());92}939495