git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Chandra Pratap <chandrapratap3519@gmail.com>
To: git@vger.kernel.org
Cc: Chandra Pratap <chandrapratap3519@gmail.com>,
	Patrick Steinhardt <ps@pks.im>,
	Christian Couder <chriscool@tuxfamily.org>
Subject: [PATCH v6 7/7] t-reftable-pq: add tests for merged_iter_pqueue_top()
Date: Thu, 25 Jul 2024 14:55:59 +0530	[thread overview]
Message-ID: <20240725093855.4201-8-chandrapratap3519@gmail.com> (raw)
In-Reply-To: <20240725093855.4201-1-chandrapratap3519@gmail.com>

merged_iter_pqueue_top() as defined by reftable/pq.{c, h} returns
the element at the top of a priority-queue's heap without removing
it. Since there are no tests for this function in the existing
setup, add tests for the same.

Mentored-by: Patrick Steinhardt <ps@pks.im>
Mentored-by: Christian Couder <chriscool@tuxfamily.org>
Signed-off-by: Chandra Pratap <chandrapratap3519@gmail.com>
---
 t/unit-tests/t-reftable-pq.c | 50 ++++++++++++++++++++++++++++++++++++
 1 file changed, 50 insertions(+)

diff --git a/t/unit-tests/t-reftable-pq.c b/t/unit-tests/t-reftable-pq.c
index 67f3e4546c..ce322d7255 100644
--- a/t/unit-tests/t-reftable-pq.c
+++ b/t/unit-tests/t-reftable-pq.c
@@ -18,6 +18,11 @@ static void merged_iter_pqueue_check(const struct merged_iter_pqueue *pq)
 	}
 }
 
+static int pq_entry_equal(struct pq_entry *a, struct pq_entry *b)
+{
+	return !reftable_record_cmp(a->rec, b->rec) && (a->index == b->index);
+}
+
 static void t_pq_record(void)
 {
 	struct merged_iter_pqueue pq = { 0 };
@@ -42,9 +47,11 @@ static void t_pq_record(void)
 	} while (i != 1);
 
 	while (!merged_iter_pqueue_is_empty(pq)) {
+		struct pq_entry top = merged_iter_pqueue_top(pq);
 		struct pq_entry e = merged_iter_pqueue_remove(&pq);
 		merged_iter_pqueue_check(&pq);
 
+		check(pq_entry_equal(&top, &e));
 		check(reftable_record_type(e.rec) == BLOCK_TYPE_REF);
 		if (last)
 			check_int(strcmp(last, e.rec->u.ref.refname), <, 0);
@@ -82,9 +89,11 @@ static void t_pq_index(void)
 	while (i != 1);
 
 	for (i = N - 1; i > 0; i--) {
+		struct pq_entry top = merged_iter_pqueue_top(pq);
 		struct pq_entry e = merged_iter_pqueue_remove(&pq);
 		merged_iter_pqueue_check(&pq);
 
+		check(pq_entry_equal(&top, &e));
 		check(reftable_record_type(e.rec) == BLOCK_TYPE_REF);
 		check_int(e.index, ==, i);
 		if (last)
@@ -95,10 +104,51 @@ static void t_pq_index(void)
 	merged_iter_pqueue_release(&pq);
 }
 
+static void t_merged_iter_pqueue_top(void)
+{
+	struct merged_iter_pqueue pq = { 0 };
+	struct reftable_record recs[13];
+	size_t N = ARRAY_SIZE(recs), i;
+
+	for (i = 0; i < N; i++) {
+		reftable_record_init(&recs[i], BLOCK_TYPE_REF);
+		recs[i].u.ref.refname = (char *) "refs/heads/master";
+	}
+
+	i = 1;
+	do {
+		struct pq_entry e = {
+			.rec = &recs[i],
+			.index = i,
+		};
+
+		merged_iter_pqueue_add(&pq, &e);
+		merged_iter_pqueue_check(&pq);
+		i = (i * 7) % N;
+	}
+	while (i != 1);
+
+	for (i = N - 1; i > 0; i--) {
+		struct pq_entry top = merged_iter_pqueue_top(pq);
+		struct pq_entry e = merged_iter_pqueue_remove(&pq);
+
+		merged_iter_pqueue_check(&pq);
+		check(pq_entry_equal(&top, &e));
+		check(reftable_record_equal(top.rec, &recs[i], GIT_SHA1_RAWSZ));
+		for (size_t j = 0; i < pq.len; j++) {
+			check(pq_less(&top, &pq.heap[j]));
+			check_int(top.index, >, j);
+		}
+	}
+
+	merged_iter_pqueue_release(&pq);
+}
+
 int cmd_main(int argc, const char *argv[])
 {
 	TEST(t_pq_record(), "pq works with record-based comparison");
 	TEST(t_pq_index(), "pq works with index-based comparison");
+	TEST(t_merged_iter_pqueue_top(), "merged_iter_pqueue_top works");
 
 	return test_done();
 }
-- 
2.45.GIT


  parent reply	other threads:[~2024-07-25  9:39 UTC|newest]

Thread overview: 78+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-06-06  7:40 [GSoC][PATCH 0/6] t: port reftable/pq_test.c to the unit testing Chandra Pratap
2024-06-06  7:40 ` [GSoC][PATCH 1/6] reftable: clean up reftable/pq.c Chandra Pratap
2024-06-06  8:51   ` Christian Couder
2024-06-06 10:07     ` Chandra Pratap
2024-06-06 16:23       ` Christian Couder
2024-06-06  7:40 ` [GSoC][PATCH 2/6] t: move reftable/pq_test.c to the unit testing framework Chandra Pratap
2024-06-06 11:48   ` Patrick Steinhardt
2024-06-06  7:40 ` [GSoC][PATCH 3/6] t-reftable-pq: make merged_iter_pqueue_check() static Chandra Pratap
2024-06-06  7:40 ` [GSoC][PATCH 4/6] t-reftable-pq: make merged_iter_pqueue_check() callable by reference Chandra Pratap
2024-06-06 11:48   ` Patrick Steinhardt
2024-06-06  7:40 ` [GSoC][PATCH 5/6] t-reftable-pq: add test for index based comparison Chandra Pratap
2024-06-06 11:48   ` Patrick Steinhardt
2024-06-06  7:40 ` [GSoC][PATCH 6/6] t-reftable-pq: add tests for merged_iter_pqueue_top() Chandra Pratap
2024-06-06 11:49   ` Patrick Steinhardt
2024-06-06 15:23 ` [GSoC][PATCH v2 0/6] t: port reftable/pq_test.c to the unit testing Chandra Pratap
2024-06-06 15:23   ` [GSoC][PATCH v2 1/6] reftable: clean up reftable/pq.c Chandra Pratap
2024-06-10  7:36     ` Patrick Steinhardt
2024-06-06 15:23   ` [GSoC][PATCH v2 2/6] t: move reftable/pq_test.c to the unit testing framework Chandra Pratap
2024-06-06 15:23   ` [GSoC][PATCH v2 3/6] t-reftable-pq: make merged_iter_pqueue_check() static Chandra Pratap
2024-06-06 15:23   ` [GSoC][PATCH v2 4/6] t-reftable-pq: make merged_iter_pqueue_check() callable by reference Chandra Pratap
2024-06-06 15:23   ` [GSoC][PATCH v2 5/6] t-reftable-pq: add test for index based comparison Chandra Pratap
2024-06-06 15:23   ` [GSoC][PATCH v2 6/6] t-reftable-pq: add tests for merged_iter_pqueue_top() Chandra Pratap
2024-06-11  8:19   ` [GSoC][PATCH v3 0/7] t: port reftable/pq_test.c to the unit testing framework Chandra Pratap
2024-06-11  8:19     ` [PATCH v3 1/7] reftable: remove unncessary curly braces in reftable/pq.c Chandra Pratap
2024-06-11  8:19     ` [PATCH v3 2/7] reftable: change the type of array indices to 'size_t' " Chandra Pratap
2024-06-11  9:02       ` Patrick Steinhardt
2024-06-11  8:19     ` [PATCH v3 3/7] t: move reftable/pq_test.c to the unit testing framework Chandra Pratap
2024-06-11  8:19     ` [PATCH v3 4/7] t-reftable-pq: make merged_iter_pqueue_check() static Chandra Pratap
2024-06-11  8:19     ` [PATCH v3 5/7] t-reftable-pq: make merged_iter_pqueue_check() callable by reference Chandra Pratap
2024-06-11  8:19     ` [PATCH v3 6/7] t-reftable-pq: add test for index based comparison Chandra Pratap
2024-06-11  8:19     ` [PATCH v3 7/7] t-reftable-pq: add tests for merged_iter_pqueue_top() Chandra Pratap
2024-06-14  9:48     ` [GSoC][PATCH v4 0/7] t: port reftable/pq_test.c to the unit testing framework Chandra Pratap
2024-06-14  9:48       ` [PATCH v4 1/7] reftable: remove unncessary curly braces in reftable/pq.c Chandra Pratap
2024-06-14  9:48       ` [PATCH v4 2/7] reftable: change the type of array indices to 'size_t' " Chandra Pratap
2024-06-14  9:48       ` [PATCH v4 3/7] t: move reftable/pq_test.c to the unit testing framework Chandra Pratap
2024-06-14  9:48       ` [PATCH v4 4/7] t-reftable-pq: make merged_iter_pqueue_check() static Chandra Pratap
2024-06-14  9:48       ` [PATCH v4 5/7] t-reftable-pq: make merged_iter_pqueue_check() callable by reference Chandra Pratap
2024-06-14  9:48       ` [PATCH v4 6/7] t-reftable-pq: add test for index based comparison Chandra Pratap
2024-06-14  9:48       ` [PATCH v4 7/7] t-reftable-pq: add tests for merged_iter_pqueue_top() Chandra Pratap
2024-06-14 17:40       ` [GSoC][PATCH v4 0/7] t: port reftable/pq_test.c to the unit testing framework Junio C Hamano
2024-07-23 14:17       ` [GSoC][PATCH v5 " Chandra Pratap
2024-07-23 14:17         ` [PATCH v5 1/7] reftable: remove unncessary curly braces in reftable/pq.c Chandra Pratap
2024-07-23 14:17         ` [PATCH v5 2/7] reftable: change the type of array indices to 'size_t' " Chandra Pratap
2024-07-23 14:17         ` [PATCH v5 3/7] t: move reftable/pq_test.c to the unit testing framework Chandra Pratap
2024-07-23 14:17         ` [PATCH v5 4/7] t-reftable-pq: make merged_iter_pqueue_check() static Chandra Pratap
2024-07-23 14:17         ` [PATCH v5 5/7] t-reftable-pq: make merged_iter_pqueue_check() callable by reference Chandra Pratap
2024-07-23 14:17         ` [PATCH v5 6/7] t-reftable-pq: add test for index based comparison Chandra Pratap
2024-07-24  9:03           ` Patrick Steinhardt
2024-07-24 16:15             ` Junio C Hamano
2024-07-25  5:10               ` Patrick Steinhardt
2024-07-23 14:17         ` [PATCH v5 7/7] t-reftable-pq: add tests for merged_iter_pqueue_top() Chandra Pratap
2024-07-23 17:09         ` [GSoC][PATCH v5 0/7] t: port reftable/pq_test.c to the unit testing framework Junio C Hamano
2024-07-24  5:12           ` Chandra Pratap
2024-07-24  7:17             ` Christian Couder
2024-07-24  7:51               ` Chandra Pratap
2024-07-24  8:56               ` Patrick Steinhardt
2024-07-24 16:06                 ` Junio C Hamano
2024-07-25  9:25         ` [GSoC][PATCH v6 " Chandra Pratap
2024-07-25  9:25           ` [PATCH v6 1/7] reftable: remove unncessary curly braces in reftable/pq.c Chandra Pratap
2024-07-25 13:29             ` Kristoffer Haugsbakk
2024-07-25  9:25           ` [PATCH v6 2/7] reftable: change the type of array indices to 'size_t' " Chandra Pratap
2024-07-25  9:25           ` [PATCH v6 3/7] t: move reftable/pq_test.c to the unit testing framework Chandra Pratap
2024-07-25  9:25           ` [PATCH v6 4/7] t-reftable-pq: make merged_iter_pqueue_check() static Chandra Pratap
2024-07-25  9:25           ` [PATCH v6 5/7] t-reftable-pq: make merged_iter_pqueue_check() callable by reference Chandra Pratap
2024-07-25  9:25           ` [PATCH v6 6/7] t-reftable-pq: add test for index based comparison Chandra Pratap
2024-07-30  6:03             ` Patrick Steinhardt
2024-07-25  9:25           ` Chandra Pratap [this message]
2024-07-30  6:04             ` [PATCH v6 7/7] t-reftable-pq: add tests for merged_iter_pqueue_top() Patrick Steinhardt
2024-08-01 10:59           ` [GSoC][PATCH v7 0/7] t: port reftable/pq_test.c to the unit testing framework Chandra Pratap
2024-08-01 10:59             ` [PATCH v7 1/7] reftable: remove unnecessary curly braces in reftable/pq.c Chandra Pratap
2024-08-01 10:59             ` [PATCH v7 2/7] reftable: change the type of array indices to 'size_t' " Chandra Pratap
2024-08-01 10:59             ` [PATCH v7 3/7] t: move reftable/pq_test.c to the unit testing framework Chandra Pratap
2024-08-01 10:59             ` [PATCH v7 4/7] t-reftable-pq: make merged_iter_pqueue_check() static Chandra Pratap
2024-08-01 10:59             ` [PATCH v7 5/7] t-reftable-pq: make merged_iter_pqueue_check() callable by reference Chandra Pratap
2024-08-01 10:59             ` [PATCH v7 6/7] t-reftable-pq: add test for index based comparison Chandra Pratap
2024-08-01 10:59             ` [PATCH v7 7/7] t-reftable-pq: add tests for merged_iter_pqueue_top() Chandra Pratap
2024-08-01 11:43             ` [GSoC][PATCH v7 0/7] t: port reftable/pq_test.c to the unit testing framework Patrick Steinhardt
2024-08-01 16:07               ` Junio C Hamano

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20240725093855.4201-8-chandrapratap3519@gmail.com \
    --to=chandrapratap3519@gmail.com \
    --cc=chriscool@tuxfamily.org \
    --cc=git@vger.kernel.org \
    --cc=ps@pks.im \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).