From patchwork Fri Jan 31 22:14:17 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Seyi Kuforiji X-Patchwork-Id: 13955945 Received: from mail-ej1-f44.google.com (mail-ej1-f44.google.com [209.85.218.44]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 7E5CD1F4271 for ; Fri, 31 Jan 2025 22:14:32 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.44 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738361674; cv=none; b=V2a/Y5dlAkESAVCOkVLraJCPBvKud+HOUy96pAteKC9lOcE0rn9v1+8cSiRzmwWYdZqHef8GzrafmArTpUM9D4lAia4GXLMJJ0fG4eE0DlDwVd8E9T/WIQz5QbuCSgygpvZEjKYIZc3fxp6pNVebu7KAffwX1FiEScd9Ur51V4w= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738361674; c=relaxed/simple; bh=sA3KFDNsnXKqPbcROUYrhyPAR3NoRarKLwfPelVNcjI=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=b7q8QeXTNimbQz74Rt+Ar5NFMqarhOek8Wr6ImKXqyIvOf+VuQd7h+6TsPRHx4KsIGY+LA44krz47KNNuf/izgXnalKNlqQtAcMNDDCvu528yeFaFuPoye8txxvy+Z0oTIYDN66drAEMhht9QC+Uy2Q9WTU7+umBDkRZPBT93D0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=LOQwOvqa; arc=none smtp.client-ip=209.85.218.44 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="LOQwOvqa" Received: by mail-ej1-f44.google.com with SMTP id a640c23a62f3a-aaf900cc7fbso540953866b.3 for ; Fri, 31 Jan 2025 14:14:32 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1738361670; x=1738966470; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=4ovvVsYFbv+o/snIOQCBO35zGf0tz5apnG1OshH6a7I=; b=LOQwOvqaDOJKm4wq5UQpKPw4Q1Qc9hpvhhZQ9FrtPsXVr/oPh6x+VdSPk6qsCQYflV 6jLBnIoGeCA3RaY0jbdFRcXWUSqnG8JxfXpRfdjY/dXCgbXnQ/sVoxg8wh+zBz9h0Dtu bU6a4PuCbLH8AhAqt3Y963MFdrOxYpcBcvwAPO8SvZdPeLrh+M0NbHPRlll6q5Z8KeNO LwnRcX53TXrG9XsovrfTXY67qjqdo//YrPpTa41tom3LhtZxfke7f00ohv3VQHIoqSr4 JXu0rqXDQLTkGdnAkfc8fVPfCP9SHT7svLI2eaR/6jBDpUYv/fXePApUzXQ/p8eBUGVh hrGA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1738361670; x=1738966470; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=4ovvVsYFbv+o/snIOQCBO35zGf0tz5apnG1OshH6a7I=; b=A7HyV/c9WUw9ptOGZmpmoPhdxHWoQ4ucppwa52YtqEcHdBigFvNskcsrkj1fgVEiVI B9yLj08Mr2Ok12zxbWPJVItw04qfm1Xu4a4XMRoYpUAeVLUarHEE7rHD6iqKVLzRKXkc rxavabj915fCxDlHiIflUGOai5oUKBacCzipCjCgwH2+aELsP6UpjzmRaYPruuKQByLJ iUuGczwC5A2RsNHJPjWdE591i4PfCDgSR380uKJRxdEZm4wHxFnutAqQ3gZqONBj8/Tj SHdrA8lkK6oXSvlkg1CypqzV7lM+89KvCpsnGAp/Za5sIcgog77+TrklSk5NfNMJWPOO yqtA== X-Gm-Message-State: AOJu0YzijDLWixGgBzV8ngYctDrOi2cJ8Bbc0/KiAisili/qZyS8z9bG pF+krJgran5Kt9gqGAxOO9TbwauSDq3aTA+4K1O4E0O9Lm5dGcH9lNzG+BLe7d+JzQ== X-Gm-Gg: ASbGncvaf8Ldfet0TRT/cDwU0yX7hQgtZIHlzC32lTzOEzcni0jyVOFHkvHVlj1R/Aq zNC66FigiO5TRwM6/huS+lMxuGzG1boF7vOqb91YOgaCjgGtkbQvS8zJi/GpUILtyyz3It+VcI0 ga+gGmF6eAj7gEa2kN9OF9RteoQbAm9NFYIBaoU+r8AIGGMVbFPZKTbiNLn0xsWcXE97rSy7+nN a5/Wk7uhQ1I6dyY1ntE/z83YydxDB4Sr1fBIrzTnBlmetzPc+kbwIYgekhiMP1qJqK4UXloAa+b IJTrdktRrzbz+dYZ/t6y1g2dug27hRU= X-Google-Smtp-Source: AGHT+IH4EV0shh8wDTjk13Un631iquZUNu4b0Tw5Fxs4P+MWUIERGX3Y9BesGU6PMAastJbe7w4cNw== X-Received: by 2002:a17:907:c28:b0:ab3:7720:d87c with SMTP id a640c23a62f3a-ab6cfdbddafmr1545482066b.35.1738361670162; Fri, 31 Jan 2025 14:14:30 -0800 (PST) Received: from localhost.localdomain ([154.120.111.177]) by smtp.googlemail.com with ESMTPSA id a640c23a62f3a-ab6e49ff77fsm359288966b.108.2025.01.31.14.14.28 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 31 Jan 2025 14:14:29 -0800 (PST) From: Seyi Kuforiji To: git@vger.kernel.org Cc: ps@pks.im, phillip.wood@dunelm.org.uk, Seyi Kuforiji Subject: [PATCH v2 1/4] t/unit-tests: convert hashmap test to use clar test framework Date: Fri, 31 Jan 2025 23:14:17 +0100 Message-ID: <20250131221420.38161-2-kuforiji98@gmail.com> X-Mailer: git-send-email 2.47.0.86.g15030f9556 In-Reply-To: <20250131221420.38161-1-kuforiji98@gmail.com> References: <20250130091334.39922-1-kuforiji98@gmail.com> <20250131221420.38161-1-kuforiji98@gmail.com> Precedence: bulk X-Mailing-List: git@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Adapts hashmap test script to clar framework by using clar assertions where necessary. Mentored-by: Patrick Steinhardt Signed-off-by: Seyi Kuforiji --- Makefile | 2 +- t/meson.build | 2 +- t/unit-tests/{t-hashmap.c => u-hashmap.c} | 226 +++++++++++----------- 3 files changed, 114 insertions(+), 116 deletions(-) rename t/unit-tests/{t-hashmap.c => u-hashmap.c} (60%) diff --git a/Makefile b/Makefile index b0cdc1fd4a..2d9dad119a 100644 --- a/Makefile +++ b/Makefile @@ -1339,6 +1339,7 @@ THIRD_PARTY_SOURCES += $(UNIT_TEST_DIR)/clar/clar/% CLAR_TEST_SUITES += u-ctype CLAR_TEST_SUITES += u-hash +CLAR_TEST_SUITES += u-hashmap CLAR_TEST_SUITES += u-mem-pool CLAR_TEST_SUITES += u-prio-queue CLAR_TEST_SUITES += u-reftable-tree @@ -1349,7 +1350,6 @@ CLAR_TEST_OBJS += $(UNIT_TEST_DIR)/clar/clar.o CLAR_TEST_OBJS += $(UNIT_TEST_DIR)/unit-test.o UNIT_TEST_PROGRAMS += t-example-decorate -UNIT_TEST_PROGRAMS += t-hashmap UNIT_TEST_PROGRAMS += t-oid-array UNIT_TEST_PROGRAMS += t-oidmap UNIT_TEST_PROGRAMS += t-oidtree diff --git a/t/meson.build b/t/meson.build index 14fea8dddf..af597f9804 100644 --- a/t/meson.build +++ b/t/meson.build @@ -1,6 +1,7 @@ clar_test_suites = [ 'unit-tests/u-ctype.c', 'unit-tests/u-hash.c', + 'unit-tests/u-hashmap.c', 'unit-tests/u-mem-pool.c', 'unit-tests/u-prio-queue.c', 'unit-tests/u-reftable-tree.c', @@ -45,7 +46,6 @@ test('unit-tests', clar_unit_tests) unit_test_programs = [ 'unit-tests/t-example-decorate.c', - 'unit-tests/t-hashmap.c', 'unit-tests/t-oid-array.c', 'unit-tests/t-oidmap.c', 'unit-tests/t-oidtree.c', diff --git a/t/unit-tests/t-hashmap.c b/t/unit-tests/u-hashmap.c similarity index 60% rename from t/unit-tests/t-hashmap.c rename to t/unit-tests/u-hashmap.c index 83b79dff39..eb80aa1348 100644 --- a/t/unit-tests/t-hashmap.c +++ b/t/unit-tests/u-hashmap.c @@ -1,4 +1,4 @@ -#include "test-lib.h" +#include "unit-test.h" #include "hashmap.h" #include "strbuf.h" @@ -83,23 +83,23 @@ static void t_replace(struct hashmap *map, unsigned int ignore_case) struct test_entry *entry; entry = alloc_test_entry("key1", "value1", ignore_case); - check_pointer_eq(hashmap_put_entry(map, entry, ent), NULL); + cl_assert_equal_p(hashmap_put_entry(map, entry, ent), NULL); entry = alloc_test_entry(ignore_case ? "Key1" : "key1", "value2", ignore_case); entry = hashmap_put_entry(map, entry, ent); - if (check(entry != NULL)) - check_str(get_value(entry), "value1"); + cl_assert(entry != NULL); + cl_assert_equal_s(get_value(entry), "value1"); free(entry); entry = alloc_test_entry("fooBarFrotz", "value3", ignore_case); - check_pointer_eq(hashmap_put_entry(map, entry, ent), NULL); + cl_assert_equal_p(hashmap_put_entry(map, entry, ent), NULL); entry = alloc_test_entry(ignore_case ? "FOObarFrotz" : "fooBarFrotz", "value4", ignore_case); entry = hashmap_put_entry(map, entry, ent); - if (check(entry != NULL)) - check_str(get_value(entry), "value3"); + cl_assert(entry != NULL); + cl_assert_equal_s(get_value(entry), "value3"); free(entry); } @@ -122,20 +122,18 @@ static void t_get(struct hashmap *map, unsigned int ignore_case) for (size_t i = 0; i < ARRAY_SIZE(key_val); i++) { entry = alloc_test_entry(key_val[i][0], key_val[i][1], ignore_case); - check_pointer_eq(hashmap_put_entry(map, entry, ent), NULL); + cl_assert_equal_p(hashmap_put_entry(map, entry, ent), NULL); } for (size_t i = 0; i < ARRAY_SIZE(query); i++) { entry = get_test_entry(map, query[i][0], ignore_case); - if (check(entry != NULL)) - check_str(get_value(entry), query[i][1]); - else - test_msg("query key: %s", query[i][0]); + cl_assert(entry != NULL); + cl_assert_equal_s(get_value(entry), query[i][1]); } - check_pointer_eq(get_test_entry(map, "notInMap", ignore_case), NULL); - check_int(map->tablesize, ==, 64); - check_int(hashmap_get_size(map), ==, ARRAY_SIZE(key_val)); + cl_assert_equal_p(get_test_entry(map, "notInMap", ignore_case), NULL); + cl_assert_equal_i(map->tablesize, 64); + cl_assert_equal_i(hashmap_get_size(map), ARRAY_SIZE(key_val)); } static void t_add(struct hashmap *map, unsigned int ignore_case) @@ -165,39 +163,19 @@ static void t_add(struct hashmap *map, unsigned int ignore_case) hashmap_for_each_entry_from(map, entry, ent) { - int ret; - if (!check_int((ret = key_val_contains( - key_val, seen, - ARRAY_SIZE(key_val), entry)), - ==, 0)) { - switch (ret) { - case 1: - test_msg("found entry was not given in the input\n" - " key: %s\n value: %s", - entry->key, get_value(entry)); - break; - case 2: - test_msg("duplicate entry detected\n" - " key: %s\n value: %s", - entry->key, get_value(entry)); - break; - } - } else { - count++; - } + int ret = key_val_contains(key_val, seen, + ARRAY_SIZE(key_val), entry); + cl_assert_equal_i(ret, 0); + count++; } - check_int(count, ==, 2); + cl_assert_equal_i(count, 2); } - for (size_t i = 0; i < ARRAY_SIZE(seen); i++) { - if (!check_int(seen[i], ==, 1)) - test_msg("following key-val pair was not iterated over:\n" - " key: %s\n value: %s", - key_val[i][0], key_val[i][1]); - } + for (size_t i = 0; i < ARRAY_SIZE(seen); i++) + cl_assert_equal_i(seen[i], 1); - check_int(hashmap_get_size(map), ==, ARRAY_SIZE(key_val)); - check_pointer_eq(get_test_entry(map, "notInMap", ignore_case), NULL); + cl_assert_equal_i(hashmap_get_size(map), ARRAY_SIZE(key_val)); + cl_assert_equal_p(get_test_entry(map, "notInMap", ignore_case), NULL); } static void t_remove(struct hashmap *map, unsigned int ignore_case) @@ -211,24 +189,25 @@ static void t_remove(struct hashmap *map, unsigned int ignore_case) for (size_t i = 0; i < ARRAY_SIZE(key_val); i++) { entry = alloc_test_entry(key_val[i][0], key_val[i][1], ignore_case); - check_pointer_eq(hashmap_put_entry(map, entry, ent), NULL); + cl_assert_equal_p(hashmap_put_entry(map, entry, ent), NULL); } for (size_t i = 0; i < ARRAY_SIZE(remove); i++) { entry = alloc_test_entry(remove[i][0], "", ignore_case); removed = hashmap_remove_entry(map, entry, ent, remove[i][0]); - if (check(removed != NULL)) - check_str(get_value(removed), remove[i][1]); + cl_assert(removed != NULL); + cl_assert_equal_s(get_value(removed), remove[i][1]); free(entry); free(removed); } entry = alloc_test_entry("notInMap", "", ignore_case); - check_pointer_eq(hashmap_remove_entry(map, entry, ent, "notInMap"), NULL); + cl_assert_equal_p(hashmap_remove_entry(map, entry, ent, "notInMap"), NULL); free(entry); - check_int(map->tablesize, ==, 64); - check_int(hashmap_get_size(map), ==, ARRAY_SIZE(key_val) - ARRAY_SIZE(remove)); + cl_assert_equal_i(map->tablesize, 64); + cl_assert_equal_i(hashmap_get_size(map), + ARRAY_SIZE(key_val) - ARRAY_SIZE(remove)); } static void t_iterate(struct hashmap *map, unsigned int ignore_case) @@ -242,38 +221,21 @@ static void t_iterate(struct hashmap *map, unsigned int ignore_case) for (size_t i = 0; i < ARRAY_SIZE(key_val); i++) { entry = alloc_test_entry(key_val[i][0], key_val[i][1], ignore_case); - check_pointer_eq(hashmap_put_entry(map, entry, ent), NULL); + cl_assert_equal_p(hashmap_put_entry(map, entry, ent), NULL); } hashmap_for_each_entry(map, &iter, entry, ent /* member name */) { - int ret; - if (!check_int((ret = key_val_contains(key_val, seen, - ARRAY_SIZE(key_val), - entry)), ==, 0)) { - switch (ret) { - case 1: - test_msg("found entry was not given in the input\n" - " key: %s\n value: %s", - entry->key, get_value(entry)); - break; - case 2: - test_msg("duplicate entry detected\n" - " key: %s\n value: %s", - entry->key, get_value(entry)); - break; - } - } + int ret = key_val_contains(key_val, seen, + ARRAY_SIZE(key_val), + entry); + cl_assert(ret == 0); } - for (size_t i = 0; i < ARRAY_SIZE(seen); i++) { - if (!check_int(seen[i], ==, 1)) - test_msg("following key-val pair was not iterated over:\n" - " key: %s\n value: %s", - key_val[i][0], key_val[i][1]); - } + for (size_t i = 0; i < ARRAY_SIZE(seen); i++) + cl_assert_equal_i(seen[i], 1); - check_int(hashmap_get_size(map), ==, ARRAY_SIZE(key_val)); + cl_assert_equal_i(hashmap_get_size(map), ARRAY_SIZE(key_val)); } static void t_alloc(struct hashmap *map, unsigned int ignore_case) @@ -284,17 +246,17 @@ static void t_alloc(struct hashmap *map, unsigned int ignore_case) char *key = xstrfmt("key%d", i); char *value = xstrfmt("value%d", i); entry = alloc_test_entry(key, value, ignore_case); - check_pointer_eq(hashmap_put_entry(map, entry, ent), NULL); + cl_assert_equal_p(hashmap_put_entry(map, entry, ent), NULL); free(key); free(value); } - check_int(map->tablesize, ==, 64); - check_int(hashmap_get_size(map), ==, 51); + cl_assert_equal_i(map->tablesize, 64); + cl_assert_equal_i(hashmap_get_size(map), 51); entry = alloc_test_entry("key52", "value52", ignore_case); - check_pointer_eq(hashmap_put_entry(map, entry, ent), NULL); - check_int(map->tablesize, ==, 256); - check_int(hashmap_get_size(map), ==, 52); + cl_assert_equal_p(hashmap_put_entry(map, entry, ent), NULL); + cl_assert_equal_i(map->tablesize, 256); + cl_assert_equal_i(hashmap_get_size(map), 52); for (int i = 1; i <= 12; i++) { char *key = xstrfmt("key%d", i); @@ -302,27 +264,27 @@ static void t_alloc(struct hashmap *map, unsigned int ignore_case) entry = alloc_test_entry(key, "", ignore_case); removed = hashmap_remove_entry(map, entry, ent, key); - if (check(removed != NULL)) - check_str(value, get_value(removed)); + cl_assert(removed != NULL); + cl_assert_equal_s(value, get_value(removed)); free(key); free(value); free(entry); free(removed); } - check_int(map->tablesize, ==, 256); - check_int(hashmap_get_size(map), ==, 40); + cl_assert_equal_i(map->tablesize, 256); + cl_assert_equal_i(hashmap_get_size(map), 40); entry = alloc_test_entry("key40", "", ignore_case); removed = hashmap_remove_entry(map, entry, ent, "key40"); - if (check(removed != NULL)) - check_str("value40", get_value(removed)); - check_int(map->tablesize, ==, 64); - check_int(hashmap_get_size(map), ==, 39); + cl_assert(removed != NULL); + cl_assert_equal_s("value40", get_value(removed)); + cl_assert_equal_i(map->tablesize, 64); + cl_assert_equal_i(hashmap_get_size(map), 39); free(entry); free(removed); } -static void t_intern(void) +void test_hashmap__intern(void) { const char *values[] = { "value1", "Value1", "value2", "value2" }; @@ -330,32 +292,68 @@ static void t_intern(void) const char *i1 = strintern(values[i]); const char *i2 = strintern(values[i]); - if (!check(!strcmp(i1, values[i]))) - test_msg("strintern(%s) returns %s\n", values[i], i1); - else if (!check(i1 != values[i])) - test_msg("strintern(%s) returns input pointer\n", - values[i]); - else if (!check_pointer_eq(i1, i2)) - test_msg("address('%s') != address('%s'), so strintern('%s') != strintern('%s')", - i1, i2, values[i], values[i]); - else - check_str(i1, values[i]); + cl_assert_equal_s(i1, values[i]); + cl_assert(i1 != values[i]); + cl_assert_equal_p(i1, i2); } } -int cmd_main(int argc UNUSED, const char **argv UNUSED) +void test_hashmap__replace_case_sensitive(void) +{ + setup(t_replace, 0); +} + +void test_hashmap__replace_case_insensitive(void) +{ + setup(t_replace, 1); +} + +void test_hashmap__get_case_sensitive(void) +{ + setup(t_get, 0); +} + +void test_hashmap__get_case_insensitive(void) +{ + setup(t_get, 1); +} + +void test_hashmap__add_case_sensitive(void) +{ + setup(t_add, 0); +} + +void test_hashmap__add_case_insensitive(void) +{ + setup(t_add, 1); +} + +void test_hashmap__remove_case_sensitive(void) +{ + setup(t_remove, 0); +} + +void test_hashmap__remove_case_insensitive(void) +{ + setup(t_remove, 1); +} + +void test_hashmap__iterate_case_sensitive(void) +{ + setup(t_iterate, 0); +} + +void test_hashmap__iterate_case_insensitive(void) +{ + setup(t_iterate, 1); +} + +void test_hashmap__alloc_case_sensitive(void) +{ + setup(t_alloc, 0); +} + +void test_hashmap__alloc_case_insensitive(void) { - TEST(setup(t_replace, 0), "replace works"); - TEST(setup(t_replace, 1), "replace (case insensitive) works"); - TEST(setup(t_get, 0), "get works"); - TEST(setup(t_get, 1), "get (case insensitive) works"); - TEST(setup(t_add, 0), "add works"); - TEST(setup(t_add, 1), "add (case insensitive) works"); - TEST(setup(t_remove, 0), "remove works"); - TEST(setup(t_remove, 1), "remove (case insensitive) works"); - TEST(setup(t_iterate, 0), "iterate works"); - TEST(setup(t_iterate, 1), "iterate (case insensitive) works"); - TEST(setup(t_alloc, 0), "grow / shrink works"); - TEST(t_intern(), "string interning works"); - return test_done(); + setup(t_alloc, 1); } From patchwork Fri Jan 31 22:14:18 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Seyi Kuforiji X-Patchwork-Id: 13955946 Received: from mail-ej1-f54.google.com (mail-ej1-f54.google.com [209.85.218.54]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 2CCD51F3D3A for ; Fri, 31 Jan 2025 22:14:35 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.54 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738361678; cv=none; b=vEqp3b2D9zXABevECO+6eC7wwJOCju+NTrs+5oODIRoMWZe8j8RKVoDHw3dQyAwnqZDoLEIZW/4vCdpMnkC0Iaqwt9BDlLpgM0aAGRo4CRsUBLzgd1ujfexXn0dcOXLXgV2V7NVhGQ9hzDyAbCtpAvN53pjaXCkUuaEJeeiZ/y0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738361678; c=relaxed/simple; bh=wkSPu4vTPXtGwdAXBJEGWO3kHvkewj74t+0njsY76sI=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=N1/spJO3NVaJih8JwZrZPC+XX1voLOGgGTW4tO4/J2peU8eS6W1LJSranecOyDDy3d6VyaOB0VGBlA8lFkYu6sh1A/JdpKWrdyHJueRiWgmbo+4EcmvRdKWY8osJ/SZLP1z8GFntQYbPzMIXXOtEsHzs04gwJakauNV+DktoiPs= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=IKE2LYyB; arc=none smtp.client-ip=209.85.218.54 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="IKE2LYyB" Received: by mail-ej1-f54.google.com with SMTP id a640c23a62f3a-aa684b6d9c7so412486466b.2 for ; Fri, 31 Jan 2025 14:14:35 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1738361674; x=1738966474; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=4nIcFQZE2ytujNnM8WfUXPpvOqEdMTID09V2LTb13DE=; b=IKE2LYyBr7db65OWHl5x57xEdZX/WKgkKn+s5pRwsPFF0f+Mf+xj8rWgmlpaifolVa bwPdpvs5F4wMAVfk2KMXojj102qg3klBAva4hgc4QMhUnF7Hr4PBYzWRV1Ez+wGYreqa g4+IlJqGV+KB0fQXn52UkcFTJFWgJwUJRVS4EPFmUJ0sLVSj2fveDMbHIJkLfmR0pNRe CYlKkSVa7XCSIZoF4riM3YDhcWUfoyWUfI6nwOdFC4sXSWeyzIOfuuBBeAZOTILBEV+L h9nnQykQJpQDJlg32y/Ok/stuVm4DrRpxPt3QmrnL2WmlOz75ONc2M9Vmaug+SgF3e42 2wDQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1738361674; x=1738966474; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=4nIcFQZE2ytujNnM8WfUXPpvOqEdMTID09V2LTb13DE=; b=bBujbbPBOkJtc+a9kn1B/b0LtOq85ZVB+n9EuTeEDLxs9qBTCX6ImV1gCSfB9ckvKm tHWY2fm3G9pl3lN0+gziZqOcNx+xVwmJr3z5I8On7mmL+eyx64nAsNbq/bRhqroKQsHx nQqFAHzf5Vl9tRNX53MAdxPqv2e943VqPtD8TbODAE4eTRAUqlXPwKFHuYfqPLlQcMmU 3v1Hf6TKQtRy+zJgLDztVNRH1AxqWLD8I2XxD5doyELo7zHb16BBl2AReNprz9hgtigJ JVl9b9vPjRgyKS8TDiZFoWHIISCJR64VdhtPFZ4pBMuv4gdRbsMV7TjdHhtVXmIy4eo6 AxPw== X-Gm-Message-State: AOJu0Yxm+k1KB2Nnqc1nlVnYnljlU0c1BH32TcDFVanDjULFx1TRmbDn G13SXkzLHD1tQ42us0ArmABnTWIJfNGc3YAb9UhmkvJCqW5YTM+5JDvq9rQlFsjOJQ== X-Gm-Gg: ASbGncvV9JR8d14Fzxr7n6MFHEhdAQOwikp5MZhBgB5V8/6bbqyeVSEiAfrBCx7L/QS OM/sb/APA6TsHAwMrruIxt/9fSW2Y/cDzcnW8dRUiEJWZ7n5yYUYEEx9T/AeeyGtFS2ItBzG77J ydhl7OB9/bXmc76cI5ur/DZQ/Q663Zlm2JhZ3bd0drzPiZD0zD7q1acKd17uSVCrPye3VJ9c67p bsvm9bW8Xptfnij8xrWhIEsCFGa4NllM30DHTZ63Vdztuyp9kevT/g8/THmDHM0benH7sao/DT1 4eHAACqc57iKjfnn7EoQPWy3eLARmR4= X-Google-Smtp-Source: AGHT+IFTK1Fnn+W8jGLnQ/KsnS48WCSWjkM2YK32iu03x2qDnSZtO0gFL4tZpYqrZBNYQZf1uxlgeQ== X-Received: by 2002:a17:906:a3d3:b0:ab6:d9f7:fd71 with SMTP id a640c23a62f3a-ab6d9f83783mr1136600266b.51.1738361673740; Fri, 31 Jan 2025 14:14:33 -0800 (PST) Received: from localhost.localdomain ([154.120.111.177]) by smtp.googlemail.com with ESMTPSA id a640c23a62f3a-ab6e49ff77fsm359288966b.108.2025.01.31.14.14.32 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 31 Jan 2025 14:14:33 -0800 (PST) From: Seyi Kuforiji To: git@vger.kernel.org Cc: ps@pks.im, phillip.wood@dunelm.org.uk, Seyi Kuforiji Subject: [PATCH v2 2/4] t/unit-tests: adapt example decorate test to use clar test framework Date: Fri, 31 Jan 2025 23:14:18 +0100 Message-ID: <20250131221420.38161-3-kuforiji98@gmail.com> X-Mailer: git-send-email 2.47.0.86.g15030f9556 In-Reply-To: <20250131221420.38161-1-kuforiji98@gmail.com> References: <20250130091334.39922-1-kuforiji98@gmail.com> <20250131221420.38161-1-kuforiji98@gmail.com> Precedence: bulk X-Mailing-List: git@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Introduce `test_example_decorate__initialize()` to explicitly set up object IDs and retrieve corresponding objects before tests run. This ensures a consistent and predictable test state without relying on data from previous tests. Add `test_example_decorate__cleanup()` to clear decorations after each test, preventing interference between tests and ensuring each runs in isolation. Adapt example decorate test script to clar framework by using clar assertions where necessary. Previously, tests relied on data written by earlier tests, leading to unintended dependencies between them. This explicitly initializes the necessary state within `test_example_decorate__readd`, ensuring it does not depend on prior test executions. Mentored-by: Patrick Steinhardt Signed-off-by: Seyi Kuforiji --- Makefile | 2 +- t/meson.build | 2 +- ...xample-decorate.c => u-example-decorate.c} | 76 ++++++++----------- 3 files changed, 35 insertions(+), 45 deletions(-) rename t/unit-tests/{t-example-decorate.c => u-example-decorate.c} (30%) diff --git a/Makefile b/Makefile index 2d9dad119a..732d765f1c 100644 --- a/Makefile +++ b/Makefile @@ -1338,6 +1338,7 @@ THIRD_PARTY_SOURCES += $(UNIT_TEST_DIR)/clar/% THIRD_PARTY_SOURCES += $(UNIT_TEST_DIR)/clar/clar/% CLAR_TEST_SUITES += u-ctype +CLAR_TEST_SUITES += u-example-decorate CLAR_TEST_SUITES += u-hash CLAR_TEST_SUITES += u-hashmap CLAR_TEST_SUITES += u-mem-pool @@ -1349,7 +1350,6 @@ CLAR_TEST_OBJS = $(patsubst %,$(UNIT_TEST_DIR)/%.o,$(CLAR_TEST_SUITES)) CLAR_TEST_OBJS += $(UNIT_TEST_DIR)/clar/clar.o CLAR_TEST_OBJS += $(UNIT_TEST_DIR)/unit-test.o -UNIT_TEST_PROGRAMS += t-example-decorate UNIT_TEST_PROGRAMS += t-oid-array UNIT_TEST_PROGRAMS += t-oidmap UNIT_TEST_PROGRAMS += t-oidtree diff --git a/t/meson.build b/t/meson.build index af597f9804..c7e08eca6f 100644 --- a/t/meson.build +++ b/t/meson.build @@ -1,5 +1,6 @@ clar_test_suites = [ 'unit-tests/u-ctype.c', + 'unit-tests/u-example-decorate.c', 'unit-tests/u-hash.c', 'unit-tests/u-hashmap.c', 'unit-tests/u-mem-pool.c', @@ -45,7 +46,6 @@ clar_unit_tests = executable('unit-tests', test('unit-tests', clar_unit_tests) unit_test_programs = [ - 'unit-tests/t-example-decorate.c', 'unit-tests/t-oid-array.c', 'unit-tests/t-oidmap.c', 'unit-tests/t-oidtree.c', diff --git a/t/unit-tests/t-example-decorate.c b/t/unit-tests/u-example-decorate.c similarity index 30% rename from t/unit-tests/t-example-decorate.c rename to t/unit-tests/u-example-decorate.c index bfc776e223..9b1d1ce753 100644 --- a/t/unit-tests/t-example-decorate.c +++ b/t/unit-tests/u-example-decorate.c @@ -1,6 +1,6 @@ #define USE_THE_REPOSITORY_VARIABLE -#include "test-lib.h" +#include "unit-test.h" #include "object.h" #include "decorate.h" #include "repository.h" @@ -11,64 +11,54 @@ struct test_vars { int decoration_a, decoration_b; }; -static void t_add(struct test_vars *vars) +static struct test_vars vars; + +void test_example_decorate__initialize(void) { - void *ret = add_decoration(&vars->n, vars->one, &vars->decoration_a); + struct object_id one_oid = { { 1 } }, two_oid = { { 2 } }, three_oid = { { 3 } }; - check(ret == NULL); - ret = add_decoration(&vars->n, vars->two, NULL); - check(ret == NULL); + vars.one = lookup_unknown_object(the_repository, &one_oid); + vars.two = lookup_unknown_object(the_repository, &two_oid); + vars.three = lookup_unknown_object(the_repository, &three_oid); } -static void t_readd(struct test_vars *vars) +void test_example_decorate__cleanup(void) { - void *ret = add_decoration(&vars->n, vars->one, NULL); - - check(ret == &vars->decoration_a); - ret = add_decoration(&vars->n, vars->two, &vars->decoration_b); - check(ret == NULL); + clear_decoration(&vars.n, NULL); } -static void t_lookup(struct test_vars *vars) +void test_example_decorate__add(void) { - void *ret = lookup_decoration(&vars->n, vars->one); - - check(ret == NULL); - ret = lookup_decoration(&vars->n, vars->two); - check(ret == &vars->decoration_b); - ret = lookup_decoration(&vars->n, vars->three); - check(ret == NULL); + cl_assert_equal_p(add_decoration(&vars.n, vars.one, &vars.decoration_a), NULL); + cl_assert_equal_p(add_decoration(&vars.n, vars.two, NULL), NULL); } -static void t_loop(struct test_vars *vars) +void test_example_decorate__readd(void) { - int objects_noticed = 0; - - for (size_t i = 0; i < vars->n.size; i++) { - if (vars->n.entries[i].base) - objects_noticed++; - } - check_int(objects_noticed, ==, 2); + cl_assert_equal_p(add_decoration(&vars.n, vars.one, &vars.decoration_a), NULL); + cl_assert_equal_p(add_decoration(&vars.n, vars.two, NULL), NULL); + cl_assert_equal_p(add_decoration(&vars.n, vars.one, NULL), &vars.decoration_a); + cl_assert_equal_p(add_decoration(&vars.n, vars.two, &vars.decoration_b), NULL); } -int cmd_main(int argc UNUSED, const char **argv UNUSED) +void test_example_decorate__lookup(void) { - struct object_id one_oid = { { 1 } }, two_oid = { { 2 } }, three_oid = { { 3 } }; - struct test_vars vars = { 0 }; + cl_assert_equal_p(add_decoration(&vars.n, vars.two, &vars.decoration_b), NULL); + cl_assert_equal_p(add_decoration(&vars.n, vars.one, NULL), NULL); + cl_assert_equal_p(lookup_decoration(&vars.n, vars.two), &vars.decoration_b); + cl_assert_equal_p(lookup_decoration(&vars.n, vars.one), NULL); +} - vars.one = lookup_unknown_object(the_repository, &one_oid); - vars.two = lookup_unknown_object(the_repository, &two_oid); - vars.three = lookup_unknown_object(the_repository, &three_oid); +void test_example_decorate__loop(void) +{ + int objects_noticed = 0; - TEST(t_add(&vars), - "Add 2 objects, one with a non-NULL decoration and one with a NULL decoration."); - TEST(t_readd(&vars), - "When re-adding an already existing object, the old decoration is returned."); - TEST(t_lookup(&vars), - "Lookup returns the added declarations, or NULL if the object was never added."); - TEST(t_loop(&vars), "The user can also loop through all entries."); + cl_assert_equal_p(add_decoration(&vars.n, vars.one, &vars.decoration_a), NULL); + cl_assert_equal_p(add_decoration(&vars.n, vars.two, &vars.decoration_b), NULL); - clear_decoration(&vars.n, NULL); + for (size_t i = 0; i < vars.n.size; i++) + if (vars.n.entries[i].base) + objects_noticed++; - return test_done(); + cl_assert_equal_i(objects_noticed, 2); } From patchwork Fri Jan 31 22:14:19 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Seyi Kuforiji X-Patchwork-Id: 13955947 Received: from mail-ej1-f54.google.com (mail-ej1-f54.google.com [209.85.218.54]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 2B4001F4298 for ; Fri, 31 Jan 2025 22:14:38 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.54 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738361681; cv=none; b=ZtffBXnzPsfQZF2jdcc4OlZqT798rkOLjmwmJ9KGDH5Q0YWQkfK704zBhQ+noY+Ryt8PxY+LRMuzFH5IqFILyWSpDaGYsiiFAKyhSYvdiGTD5FrZaVfF1zA86j0Iy6g8h5RdGhGEoSvCReXWElI0Z4Hu4ChxyKPvH5J9QWM2hRM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738361681; c=relaxed/simple; bh=okHr2gtasWkVrcn92IMvdzKaNlhk8G7QcTsQpnRvXqY=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=JKf+MpfHfg1n4qS4xK1PZV6b81L3mtFehQPY1bwhIXcP6Zy0utmcRy+VN88tEa8ROPv/nnsQcjIs2zPrGikgU+tCWufKz/Y2kJ3Uan57it50QOpxorBkiR/xayhusnyP8lZHxer6ugqlW9E8wZRgrxQzlI+onjwVUr8mrmnVJeI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=C+YjZOMK; arc=none smtp.client-ip=209.85.218.54 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="C+YjZOMK" Received: by mail-ej1-f54.google.com with SMTP id a640c23a62f3a-aaeef97ff02so427078766b.1 for ; Fri, 31 Jan 2025 14:14:38 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1738361677; x=1738966477; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=+UZBfc4J4wKHnHbI83gsUAxBGAfnhfMWWFs7BlRqEXs=; b=C+YjZOMKQ6U75WvkUeOTwsAxMfvMt8BaVmtuvMSecEgl+rf6rp3VplsQxmV1pkCVXR uvu6oILCAttZoTov/Tqq+SXfkqpKsXGSDvL/QqxVBYPoKodK3xxGNjHdkVcrR5QQDKW7 Y4lf/wyuv5YmgefTzC743IavsskX8oJh9gyzitN/T69CMW95HhrddkWWIkoFbfgBGQZe NYUlDys4D0eOF95UZ+BICdkya4qeFGxpV1lbeIvI0G3eObkLIOj4CLWNh5edC5Cl207p iDbRnMZAOX0GzIGvShBElSDCMurkQpZzjZng0W2VU5QltDoaZi0lmsF1vZVAo/CMhQPj oItw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1738361677; x=1738966477; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=+UZBfc4J4wKHnHbI83gsUAxBGAfnhfMWWFs7BlRqEXs=; b=S6jdeE5qpXikBaEsiyQ0pnO6kTBSg08JDgJQVcQtk6LeYsUtDNqGxmETRZz2sjpgat 3Z6VlcXPW0+R3CVgHIVbKFbjhq5vkuPWkvlJ3y5l8wys3W8fPgTKk8RJXIn5l1Vie4Uk FengpKymWphP/ZwJQI+ssWs5/hjZ5UxL2Rr/GoEkGNmzXv+erd76KD1dm+5rDaJFtXsY G97XsaEFmdTLDMYfA3mKaGNGCiTKjF8oUUwE6sbCL4h+SmmAZlU4pWVCAXlCJHF4DQ9w xT3D3X5rpJmEQevkLdtlLnuCjGRFj5uivtlhOPx1j0m0dzg5Yp/bMdkZreJFCiIpS8AT wY4A== X-Gm-Message-State: AOJu0YxwIeBpxhM29momFEr+rLLWFsOBHRV+OMv6zH9xThLL7CMfsCH2 ySVOkOZJX+Ei7EiEKGuqnPeE5V+naQ+Wonv/gYEoiYaDsEcow+pjId0nUYS4cRuIwg== X-Gm-Gg: ASbGnctLAaANEJXELmxPqlfuO0FxnxJBnA8iEy8T18EuAbgVw6sYthvMqAk9uLt2D1d 6LWInUTvKXoGN620cj3/oT/HJ6nj1Joy3o79q7HwKT/Cb4/0FBRXaAVVDghse17dbfBYu//xQs3 dZwJDD6d6ZqN8p8MVEf4gu/0Pj5PEhHscMF4NqBuWjqc5SUXaQpDqqcYQKKn2Fhrlmf7ORSM8KK 46kgcpP3sx/1apl8zHOBQTQeN/VjcWDHWeumWNWWRA4fnGaa99WSP4HD493ltfoDi7bE6nHMatM lJLa82/oA9787hIbmR74D+HQtjE9T8E= X-Google-Smtp-Source: AGHT+IETTrrpbsG3nGxOiSJxgbadim1sGQwPeK2xaYH98gAkGU3csv71t15DcUPoHuOzaQC948ZAKw== X-Received: by 2002:a17:907:7da5:b0:ab2:db7b:5db3 with SMTP id a640c23a62f3a-ab6cfe12dbamr1357515766b.54.1738361676968; Fri, 31 Jan 2025 14:14:36 -0800 (PST) Received: from localhost.localdomain ([154.120.111.177]) by smtp.googlemail.com with ESMTPSA id a640c23a62f3a-ab6e49ff77fsm359288966b.108.2025.01.31.14.14.35 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 31 Jan 2025 14:14:36 -0800 (PST) From: Seyi Kuforiji To: git@vger.kernel.org Cc: ps@pks.im, phillip.wood@dunelm.org.uk, Seyi Kuforiji Subject: [PATCH v2 3/4] t/unit-tests: convert strbuf test to use clar test framework Date: Fri, 31 Jan 2025 23:14:19 +0100 Message-ID: <20250131221420.38161-4-kuforiji98@gmail.com> X-Mailer: git-send-email 2.47.0.86.g15030f9556 In-Reply-To: <20250131221420.38161-1-kuforiji98@gmail.com> References: <20250130091334.39922-1-kuforiji98@gmail.com> <20250131221420.38161-1-kuforiji98@gmail.com> Precedence: bulk X-Mailing-List: git@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Adapt strbuf test script to clar framework by using clar assertions where necessary. Mentored-by: Patrick Steinhardt Signed-off-by: Seyi Kuforiji --- Makefile | 2 +- t/meson.build | 2 +- t/unit-tests/{t-strbuf.c => u-strbuf.c} | 115 ++++++++++++------------ 3 files changed, 58 insertions(+), 61 deletions(-) rename t/unit-tests/{t-strbuf.c => u-strbuf.c} (35%) diff --git a/Makefile b/Makefile index 732d765f1c..358193597f 100644 --- a/Makefile +++ b/Makefile @@ -1344,6 +1344,7 @@ CLAR_TEST_SUITES += u-hashmap CLAR_TEST_SUITES += u-mem-pool CLAR_TEST_SUITES += u-prio-queue CLAR_TEST_SUITES += u-reftable-tree +CLAR_TEST_SUITES += u-strbuf CLAR_TEST_SUITES += u-strvec CLAR_TEST_PROG = $(UNIT_TEST_BIN)/unit-tests$(X) CLAR_TEST_OBJS = $(patsubst %,$(UNIT_TEST_DIR)/%.o,$(CLAR_TEST_SUITES)) @@ -1361,7 +1362,6 @@ UNIT_TEST_PROGRAMS += t-reftable-reader UNIT_TEST_PROGRAMS += t-reftable-readwrite UNIT_TEST_PROGRAMS += t-reftable-record UNIT_TEST_PROGRAMS += t-reftable-stack -UNIT_TEST_PROGRAMS += t-strbuf UNIT_TEST_PROGRAMS += t-strcmp-offset UNIT_TEST_PROGRAMS += t-trailer UNIT_TEST_PROGRAMS += t-urlmatch-normalization diff --git a/t/meson.build b/t/meson.build index c7e08eca6f..6cb72842b1 100644 --- a/t/meson.build +++ b/t/meson.build @@ -6,6 +6,7 @@ clar_test_suites = [ 'unit-tests/u-mem-pool.c', 'unit-tests/u-prio-queue.c', 'unit-tests/u-reftable-tree.c', + 'unit-tests/u-strbuf.c', 'unit-tests/u-strvec.c', ] @@ -57,7 +58,6 @@ unit_test_programs = [ 'unit-tests/t-reftable-readwrite.c', 'unit-tests/t-reftable-record.c', 'unit-tests/t-reftable-stack.c', - 'unit-tests/t-strbuf.c', 'unit-tests/t-strcmp-offset.c', 'unit-tests/t-trailer.c', 'unit-tests/t-urlmatch-normalization.c', diff --git a/t/unit-tests/t-strbuf.c b/t/unit-tests/u-strbuf.c similarity index 35% rename from t/unit-tests/t-strbuf.c rename to t/unit-tests/u-strbuf.c index 3f4044d697..caa5d78aa3 100644 --- a/t/unit-tests/t-strbuf.c +++ b/t/unit-tests/u-strbuf.c @@ -1,4 +1,4 @@ -#include "test-lib.h" +#include "unit-test.h" #include "strbuf.h" /* wrapper that supplies tests with an empty, initialized strbuf */ @@ -9,8 +9,8 @@ static void setup(void (*f)(struct strbuf*, const void*), f(&buf, data); strbuf_release(&buf); - check_uint(buf.len, ==, 0); - check_uint(buf.alloc, ==, 0); + cl_assert_equal_i(buf.len, 0); + cl_assert_equal_i(buf.alloc, 0); } /* wrapper that supplies tests with a populated, initialized strbuf */ @@ -20,49 +20,45 @@ static void setup_populated(void (*f)(struct strbuf*, const void*), struct strbuf buf = STRBUF_INIT; strbuf_addstr(&buf, init_str); - check_uint(buf.len, ==, strlen(init_str)); + cl_assert_equal_i(buf.len, strlen(init_str)); f(&buf, data); strbuf_release(&buf); - check_uint(buf.len, ==, 0); - check_uint(buf.alloc, ==, 0); + cl_assert_equal_i(buf.len, 0); + cl_assert_equal_i(buf.alloc, 0); } -static int assert_sane_strbuf(struct strbuf *buf) +static void assert_sane_strbuf(struct strbuf *buf) { /* Initialized strbufs should always have a non-NULL buffer */ - if (!check(!!buf->buf)) - return 0; + cl_assert(buf->buf != NULL); /* Buffers should always be NUL-terminated */ - if (!check_char(buf->buf[buf->len], ==, '\0')) - return 0; + cl_assert(buf->buf[buf->len] == '\0'); /* - * Freshly-initialized strbufs may not have a dynamically allocated - * buffer - */ - if (buf->len == 0 && buf->alloc == 0) - return 1; - /* alloc must be at least one byte larger than len */ - return check_uint(buf->len, <, buf->alloc); + * In case the buffer contains anything, `alloc` must alloc must + * be at least one byte larger than `len`. + */ + if (buf->len) + cl_assert(buf->len < buf->alloc); } -static void t_static_init(void) +void test_strbuf__static_init(void) { struct strbuf buf = STRBUF_INIT; - check_uint(buf.len, ==, 0); - check_uint(buf.alloc, ==, 0); - check_char(buf.buf[0], ==, '\0'); + cl_assert_equal_i(buf.len, 0); + cl_assert_equal_i(buf.alloc, 0); + cl_assert(buf.buf[0] == '\0'); } -static void t_dynamic_init(void) +void test_strbuf__dynamic_init(void) { struct strbuf buf; strbuf_init(&buf, 1024); - check(assert_sane_strbuf(&buf)); - check_uint(buf.len, ==, 0); - check_uint(buf.alloc, >=, 1024); - check_char(buf.buf[0], ==, '\0'); + assert_sane_strbuf(&buf); + cl_assert_equal_i(buf.len, 0); + cl_assert(buf.alloc >= 1024); + cl_assert(buf.buf[0] == '\0'); strbuf_release(&buf); } @@ -73,16 +69,12 @@ static void t_addch(struct strbuf *buf, const void *data) size_t orig_alloc = buf->alloc; size_t orig_len = buf->len; - if (!check(assert_sane_strbuf(buf))) - return; + assert_sane_strbuf(buf); strbuf_addch(buf, ch); - if (!check(assert_sane_strbuf(buf))) - return; - if (!(check_uint(buf->len, ==, orig_len + 1) && - check_uint(buf->alloc, >=, orig_alloc))) - return; /* avoid de-referencing buf->buf */ - check_char(buf->buf[buf->len - 1], ==, ch); - check_char(buf->buf[buf->len], ==, '\0'); + assert_sane_strbuf(buf); + cl_assert_equal_i(buf->len, orig_len + 1); + cl_assert(buf->alloc >= orig_alloc); + cl_assert(buf->buf[buf->len] == '\0'); } static void t_addstr(struct strbuf *buf, const void *data) @@ -92,31 +84,36 @@ static void t_addstr(struct strbuf *buf, const void *data) size_t orig_alloc = buf->alloc; size_t orig_len = buf->len; - if (!check(assert_sane_strbuf(buf))) - return; + assert_sane_strbuf(buf); strbuf_addstr(buf, text); - if (!check(assert_sane_strbuf(buf))) - return; - if (!(check_uint(buf->len, ==, orig_len + len) && - check_uint(buf->alloc, >=, orig_alloc) && - check_uint(buf->alloc, >, orig_len + len) && - check_char(buf->buf[orig_len + len], ==, '\0'))) - return; - check_str(buf->buf + orig_len, text); + assert_sane_strbuf(buf); + cl_assert_equal_i(buf->len, orig_len + len); + cl_assert(buf->alloc >= orig_alloc); + cl_assert(buf->buf[buf->len] == '\0'); + cl_assert_equal_s(buf->buf + orig_len, text); } -int cmd_main(int argc UNUSED, const char **argv UNUSED) +void test_strbuf__add_single_char(void) { - if (!TEST(t_static_init(), "static initialization works")) - test_skip_all("STRBUF_INIT is broken"); - TEST(t_dynamic_init(), "dynamic initialization works"); - TEST(setup(t_addch, "a"), "strbuf_addch adds char"); - TEST(setup(t_addch, ""), "strbuf_addch adds NUL char"); - TEST(setup_populated(t_addch, "initial value", "a"), - "strbuf_addch appends to initial value"); - TEST(setup(t_addstr, "hello there"), "strbuf_addstr adds string"); - TEST(setup_populated(t_addstr, "initial value", "hello there"), - "strbuf_addstr appends string to initial value"); - - return test_done(); + setup(t_addch, "a"); +} + +void test_strbuf__add_empty_char(void) +{ + setup(t_addch, ""); +} + +void test_strbuf__add_append_char(void) +{ + setup_populated(t_addch, "initial value", "a"); +} + +void test_strbuf__add_single_str(void) +{ + setup(t_addstr, "hello there"); +} + +void test_strbuf__add_append_str(void) +{ + setup_populated(t_addstr, "initial value", "hello there"); } From patchwork Fri Jan 31 22:14:20 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Seyi Kuforiji X-Patchwork-Id: 13955948 Received: from mail-ed1-f51.google.com (mail-ed1-f51.google.com [209.85.208.51]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 1E3FF1F428A for ; Fri, 31 Jan 2025 22:14:42 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.208.51 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738361684; cv=none; b=txc6d9C4A0cwr1UW3pQmI4M5W1a/gFlIhpU+Zx+o3h0HZ/prjX/zmJcl2iLDs7lrrkbrDpENXIYferYk3rPytS6pH9mXcw+mxoK/6MBk1MwxWFaIjpKEJGDI9TjJZcqmQABWzVobvTAa83BhhlG4t0c7ACZkb7XvBnq5oGoK9S0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738361684; c=relaxed/simple; bh=pnaZI3AYjZdwYsLcGZfAj0vZF4dU5BZDi84EVS12oOA=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Xi+VtehkOxQhd5fRJY9KOpf6+/viSws5MlwGOxfunmIWxK/C8R+kOR17xBdm39LH6bT/2DVM7vsYxqlav7zC7phaBHtUQOEJgbNbB0bu0AOeTqSeSMv9WfK1kTgYbSAW2Igp2vmTPz7UrLQWiJ+sxx+AGF7LnaizBXTpMZS+euw= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=GqYlXAPL; arc=none smtp.client-ip=209.85.208.51 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="GqYlXAPL" Received: by mail-ed1-f51.google.com with SMTP id 4fb4d7f45d1cf-5da12292b67so3849403a12.3 for ; Fri, 31 Jan 2025 14:14:42 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1738361681; x=1738966481; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=eTz+u+xh5ejnDHgZnUTHlZu9tLo7KlskV/grW18aj5I=; b=GqYlXAPLFsEP8U5OWnAX7zCu1JEkk8dKE/yWg+FmqP56/otOHTkehcdb18ehY72ZfG Pp8pNLLmAVS9USolMHCXKv9y4BswONsISpShXT6uCE+JhPilNLEISZfXegl0KTGyEUG7 pbrSvYVeuoATQ/XSzgOTi7VTsoIx09SN3u6mfxBRuQaH6DT1U7LvvKWARNVsnGoGbkDC GWCZqMYHaZ8PZVhbywnV/lLytzIVFlzV5GXn8raWhpzo2dzOb1qWm/Q0viCy3Wo2c+ts Xl867JJNA/igVAOfrKxxvnZvHZ7awTPmtaaRPBfOGtHwjMKBiTy7L2mw32Jam6LBTT37 WzYQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1738361681; x=1738966481; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=eTz+u+xh5ejnDHgZnUTHlZu9tLo7KlskV/grW18aj5I=; b=NjfgVofY/ohRLq+zb9qb1RiGwjvfVyfaLUZIoswKPIs9MAraqEMo+387QtQOO29ehy SmRq9anoKE6yOq26b0MTK416zd/cuWcVTlJqcqEX6kmbhGdO0Aq3RKohS/pGjjXsS7AF E4jvhPB+vk7eClHcOqapnOhduQZm4iOMrRbT024B7FrlevrFWAYYBPZLDN2dPuqHvQ5m AL46iVS7+FXEOkA77tOqPY5qIpYOPhmNybxLzYP4zPzgEyt2JgexzDY5pAPCN88VFeJc AmIKO9nPsBBBZ66DNc7igXGBCNoQnYR2Cfup4UZwoxABKV/89kFt+C3SNh6Kg8MueNEd 6ehA== X-Gm-Message-State: AOJu0Yyamd0aA/v3w+/EqKPli4F4MmpZt3HCMpZt6M1tBYQHc4eB6tIM 2dReXC9sVhVkJ2SOWo3zd81JXrwgYz7HMWKlpE5asoevY6yU4u6phbsNOevPYShlDw== X-Gm-Gg: ASbGncuNYsfbh0W0N3Yze88incdxbeU/vkDa0Cq4Aohq2xnGb89+/B9tBpqtFlszBHD WFY+tpkm4pX5wOUtz8Ee90rUTFd7K9mid+HN6W2ymUtvg98wHFmBC3MHaZ0NqTIBxKLUJprRDkI BXcycNskABKruYiXbnzQz175QbwWRBkTef1t3dqXjQj7w02BTWpqvL717o7mjYDntSdf2M3KBt6 3viCC6dmSPPFauY5WkjR06kU7G2GJPrrvgYy6nwKXr5IwJOsMnGgDFrIKkMUjPPdmOW7U+kveN1 4fQ+LKJru7FNCud9PG/Pg1ifSyJ7UUQ= X-Google-Smtp-Source: AGHT+IGF4sy9IVgd4oOCCoU4akjjeq7cSV4tq8WmmZO8bNZXEPaUqvRYsN7PVXhsTH1FXsnXKGrdwg== X-Received: by 2002:a05:6402:4309:b0:5d0:fb56:3f with SMTP id 4fb4d7f45d1cf-5dc5efbf5d8mr31753142a12.12.1738361680958; Fri, 31 Jan 2025 14:14:40 -0800 (PST) Received: from localhost.localdomain ([154.120.111.177]) by smtp.googlemail.com with ESMTPSA id a640c23a62f3a-ab6e49ff77fsm359288966b.108.2025.01.31.14.14.38 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 31 Jan 2025 14:14:39 -0800 (PST) From: Seyi Kuforiji To: git@vger.kernel.org Cc: ps@pks.im, phillip.wood@dunelm.org.uk, Seyi Kuforiji Subject: [PATCH v2 4/4] t/unit-tests: convert strcmp-offset test to use clar test framework Date: Fri, 31 Jan 2025 23:14:20 +0100 Message-ID: <20250131221420.38161-5-kuforiji98@gmail.com> X-Mailer: git-send-email 2.47.0.86.g15030f9556 In-Reply-To: <20250131221420.38161-1-kuforiji98@gmail.com> References: <20250130091334.39922-1-kuforiji98@gmail.com> <20250131221420.38161-1-kuforiji98@gmail.com> Precedence: bulk X-Mailing-List: git@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Adapt strcmp-offset test script to clar framework by using clar assertions where necessary. Introduce `test_strcmp_offset__empty()` to verify `check_strcmp_offset()` behavior when both input strings are empty. This ensures the function correctly handles edge cases and returns expected values. Mentored-by: Patrick Steinhardt Signed-off-by: Seyi Kuforiji --- Makefile | 2 +- t/meson.build | 2 +- .../{t-strcmp-offset.c => u-strcmp-offset.c} | 36 ++++++++++++------- 3 files changed, 25 insertions(+), 15 deletions(-) rename t/unit-tests/{t-strcmp-offset.c => u-strcmp-offset.c} (39%) diff --git a/Makefile b/Makefile index 358193597f..76b5de4fdd 100644 --- a/Makefile +++ b/Makefile @@ -1345,6 +1345,7 @@ CLAR_TEST_SUITES += u-mem-pool CLAR_TEST_SUITES += u-prio-queue CLAR_TEST_SUITES += u-reftable-tree CLAR_TEST_SUITES += u-strbuf +CLAR_TEST_SUITES += u-strcmp-offset CLAR_TEST_SUITES += u-strvec CLAR_TEST_PROG = $(UNIT_TEST_BIN)/unit-tests$(X) CLAR_TEST_OBJS = $(patsubst %,$(UNIT_TEST_DIR)/%.o,$(CLAR_TEST_SUITES)) @@ -1362,7 +1363,6 @@ UNIT_TEST_PROGRAMS += t-reftable-reader UNIT_TEST_PROGRAMS += t-reftable-readwrite UNIT_TEST_PROGRAMS += t-reftable-record UNIT_TEST_PROGRAMS += t-reftable-stack -UNIT_TEST_PROGRAMS += t-strcmp-offset UNIT_TEST_PROGRAMS += t-trailer UNIT_TEST_PROGRAMS += t-urlmatch-normalization UNIT_TEST_PROGS = $(patsubst %,$(UNIT_TEST_BIN)/%$X,$(UNIT_TEST_PROGRAMS)) diff --git a/t/meson.build b/t/meson.build index 6cb72842b1..3935782bbb 100644 --- a/t/meson.build +++ b/t/meson.build @@ -7,6 +7,7 @@ clar_test_suites = [ 'unit-tests/u-prio-queue.c', 'unit-tests/u-reftable-tree.c', 'unit-tests/u-strbuf.c', + 'unit-tests/u-strcmp-offset.c', 'unit-tests/u-strvec.c', ] @@ -58,7 +59,6 @@ unit_test_programs = [ 'unit-tests/t-reftable-readwrite.c', 'unit-tests/t-reftable-record.c', 'unit-tests/t-reftable-stack.c', - 'unit-tests/t-strcmp-offset.c', 'unit-tests/t-trailer.c', 'unit-tests/t-urlmatch-normalization.c', ] diff --git a/t/unit-tests/t-strcmp-offset.c b/t/unit-tests/u-strcmp-offset.c similarity index 39% rename from t/unit-tests/t-strcmp-offset.c rename to t/unit-tests/u-strcmp-offset.c index 6880f21161..7e8e9acf3c 100644 --- a/t/unit-tests/t-strcmp-offset.c +++ b/t/unit-tests/u-strcmp-offset.c @@ -1,4 +1,4 @@ -#include "test-lib.h" +#include "unit-test.h" #include "read-cache-ll.h" static void check_strcmp_offset(const char *string1, const char *string2, @@ -15,21 +15,31 @@ static void check_strcmp_offset(const char *string1, const char *string2, result > 0 ? 1 : 0); - check_int(result, ==, expect_result); - check_uint((uintmax_t)offset, ==, expect_offset); + cl_assert_equal_i(result, expect_result); + cl_assert_equal_i((uintmax_t)offset, expect_offset); } -#define TEST_STRCMP_OFFSET(string1, string2, expect_result, expect_offset) \ - TEST(check_strcmp_offset(string1, string2, expect_result, \ - expect_offset), \ - "strcmp_offset(%s, %s) works", #string1, #string2) +void test_strcmp_offset__empty(void) +{ + check_strcmp_offset("", "", 0, 0); +} + +void test_strcmp_offset__equal(void) +{ + check_strcmp_offset("abc", "abc", 0, 3); +} -int cmd_main(int argc UNUSED, const char **argv UNUSED) +void test_strcmp_offset__different(void) { - TEST_STRCMP_OFFSET("abc", "abc", 0, 3); - TEST_STRCMP_OFFSET("abc", "def", -1, 0); - TEST_STRCMP_OFFSET("abc", "abz", -1, 2); - TEST_STRCMP_OFFSET("abc", "abcdef", -1, 3); + check_strcmp_offset("abc", "def", -1, 0); +} - return test_done(); +void test_strcmp_offset__mismatch(void) +{ + check_strcmp_offset("abc", "abz", -1, 2); +} + +void test_strcmp_offset__different_length(void) +{ + check_strcmp_offset("abc", "abcdef", -1, 3); }