summaryrefslogtreecommitdiff
path: root/tests/t0501-walk.c
diff options
context:
space:
mode:
Diffstat (limited to 'tests/t0501-walk.c')
-rw-r--r--tests/t0501-walk.c77
1 files changed, 77 insertions, 0 deletions
diff --git a/tests/t0501-walk.c b/tests/t0501-walk.c
new file mode 100644
index 000000000..755a4f75d
--- /dev/null
+++ b/tests/t0501-walk.c
@@ -0,0 +1,77 @@
+#include "test_lib.h"
+#include "test_helpers.h"
+#include "commit.h"
+
+#include <git/odb.h>
+#include <git/commit.h>
+#include <git/revwalk.h>
+
+static const char *odb_dir = "../t0501-objects";
+/*
+ $ git log --oneline --graph --decorate
+ * a4a7dce (HEAD, br2) Merge branch 'master' into br2
+ |\
+ | * 9fd738e (master) a fourth commit
+ | * 4a202b3 a third commit
+ * | c47800c branch commit one
+ |/
+ * 5b5b025 another commit
+ * 8496071 testing
+*/
+static const char *commit_head = "a4a7dce85cf63874e984719f4fdd239f5145052f";
+
+static const char *commit_ids[] = {
+ "a4a7dce85cf63874e984719f4fdd239f5145052f", // 0
+ "9fd738e8f7967c078dceed8190330fc8648ee56a", // 1
+ "4a202b346bb0fb0db7eff3cffeb3c70babbd2045", // 2
+ "c47800c7266a2be04c571c04d5a6614691ea99bd", // 3
+ "8496071c1b46c854b31185ea97743be6a8774479", // 4
+ "5b5b025afb0b4c913b4c338a42934a3863bf3644", // 5
+};
+
+static const int commit_sorting_topo[] = {0, 1, 2, 3, 5, 4};
+static const int commit_sorting_time[] = {0, 3, 1, 2, 5, 4};
+static const int commit_sorting_topo_reverse[] = {4, 5, 3, 2, 1, 0};
+static const int commit_sorting_time_reverse[] = {4, 5, 2, 1, 3, 0};
+static const int commit_sorting_topo_time[] = {0};
+
+BEGIN_TEST(simple_walk_test)
+ git_odb *db;
+ git_oid id;
+ git_revpool *pool;
+ git_commit *head = NULL;
+
+ must_pass(git_odb_open(&db, odb_dir));
+
+ pool = gitrp_alloc(db);
+ must_be_true(pool != NULL);
+
+ git_oid_mkstr(&id, commit_head);
+
+ head = git_commit_parse(pool, &id);
+ must_be_true(head != NULL);
+
+ gitrp_push(pool, head);
+
+#define TEST_WALK(sort_flags, result_array) {\
+ char oid[40]; int i = 0;\
+ git_commit *commit = NULL;\
+ gitrp_sorting(pool, sort_flags);\
+ while ((commit = gitrp_next(pool)) != NULL) {\
+ git_oid_fmt(oid, &commit->object.id);\
+ must_be_true(memcmp(oid, commit_ids[result_array[i++]], 40) == 0);\
+ }\
+ must_be_true(i == sizeof(result_array)/sizeof(int));\
+ gitrp_reset(pool);\
+}
+
+ TEST_WALK(GIT_RPSORT_TIME, commit_sorting_time);
+ TEST_WALK(GIT_RPSORT_TOPOLOGICAL, commit_sorting_topo);
+ TEST_WALK(GIT_RPSORT_TIME | GIT_RPSORT_REVERSE, commit_sorting_time_reverse);
+ TEST_WALK(GIT_RPSORT_TOPOLOGICAL | GIT_RPSORT_REVERSE, commit_sorting_topo_reverse);
+
+#undef TEST_WALK
+
+ gitrp_free(pool);
+ git_odb_close(db);
+END_TEST