diff options
| author | Pierre Pronchery <khorben@FreeBSD.org> | 2026-06-25 22:30:05 +0000 |
|---|---|---|
| committer | Pierre Pronchery <khorben@FreeBSD.org> | 2026-06-29 05:21:48 +0000 |
| commit | b0fc1b7a2fe8fcb18ee407227591bf25a86ffbaf (patch) | |
| tree | 0cc32f86bf808bcf9d79da95db969cd76f0feadb /tests/api/test-version.c | |
| parent | eaa637963bcfde283b411c14968b7903b02d6aa1 (diff) | |
Diffstat (limited to 'tests/api/test-version.c')
| -rw-r--r-- | tests/api/test-version.c | 133 |
1 files changed, 133 insertions, 0 deletions
diff --git a/tests/api/test-version.c b/tests/api/test-version.c new file mode 100644 index 000000000000..71ed2c1de811 --- /dev/null +++ b/tests/api/test-version.c @@ -0,0 +1,133 @@ +/* + * test-version.c + * Tests for the public libpkgconf version comparison API. + * + * SPDX-License-Identifier: pkgconf + * + * Copyright (c) 2026 pkgconf authors (see AUTHORS). + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * This software is provided 'as is' and without any warranty, express or + * implied. In no event shall the authors be liable for any damages arising + * from the use of this software. + */ + +#include "test-api.h" + +static void +cmp_lt(const char *a, const char *b) +{ + TEST_ASSERT_EQ(pkgconf_compare_version(a, b), -1); + TEST_ASSERT_EQ(pkgconf_compare_version(b, a), 1); +} + +static void +cmp_eq(const char *a, const char *b) +{ + TEST_ASSERT_EQ(pkgconf_compare_version(a, b), 0); + TEST_ASSERT_EQ(pkgconf_compare_version(b, a), 0); +} + +static void +test_version_equal(void) +{ + cmp_eq("1.0.0", "1.0.0"); + cmp_eq("", ""); + cmp_eq("abc", "abc"); + cmp_eq("1.0a", "1.0A"); + cmp_eq("RELEASE", "release"); +} + +static void +test_version_null(void) +{ + TEST_ASSERT_EQ(pkgconf_compare_version(NULL, NULL), -1); + cmp_lt(NULL, "1.0"); + cmp_lt(NULL, ""); +} + +static void +test_version_numeric(void) +{ + cmp_lt("1.0.0", "1.0.1"); + cmp_lt("0.9", "1.0"); + cmp_lt("1.9.9", "2.0.0"); + cmp_lt("1.9", "1.10"); + cmp_lt("1.9", "1.100"); +} + +static void +test_version_leading_zeros(void) +{ + cmp_eq("1.0", "1.00"); + cmp_eq("1.7", "1.007"); + cmp_eq("01.02.03", "1.2.3"); + cmp_lt("1.0.1", "1.0.10"); +} + +static void +test_version_component_count(void) +{ + cmp_lt("1.0", "1.0.1"); + cmp_lt("1.0", "1.0.0"); + cmp_lt("1.2.3", "1.2.3.1"); +} + +static void +test_version_separators(void) +{ + cmp_eq("1.2.3", "1-2-3"); + cmp_eq("1.2.3", "1_2_3"); + cmp_eq("1.2.3", "1:2:3"); + cmp_eq("1.0", "1...0"); +} + +static void +test_version_tilde(void) +{ + cmp_lt("1.0~rc1", "1.0"); + cmp_lt("1.0~rc1", "1.0~rc2"); + cmp_lt("1.0~~", "1.0~"); + cmp_lt("1.0~1", "1.0.1"); + cmp_lt("1.0.0~beta", "1.0.0"); +} + +static void +test_version_alpha_numeric(void) +{ + cmp_lt("1.b", "1.5"); + cmp_lt("1.0.alpha", "1.0.beta"); + cmp_lt("1.0alpha", "1.0alphabeta"); + cmp_lt("1.0", "1.0pre"); +} + +static void +test_version_real_world(void) +{ + cmp_lt("2.5.1", "2.9.91"); + cmp_lt("2.9.91", "3.0.0"); + cmp_lt("1.0.0~beta", "1.0.0~rc1"); + cmp_lt("1.0.0~rc1", "1.0.0"); +} + +int +main(int argc, char *argv[]) +{ + (void) argc; + const char *basename = pkgconf_path_find_basename(argv[0]); + + TEST_RUN(basename, test_version_equal); + TEST_RUN(basename, test_version_null); + TEST_RUN(basename, test_version_numeric); + TEST_RUN(basename, test_version_leading_zeros); + TEST_RUN(basename, test_version_component_count); + TEST_RUN(basename, test_version_separators); + TEST_RUN(basename, test_version_tilde); + TEST_RUN(basename, test_version_alpha_numeric); + TEST_RUN(basename, test_version_real_world); + + return EXIT_SUCCESS; +} |
