Add unit tests for list sorting. Signed-off-by: Vicent Marti <tanoku@gmail.com> Signed-off-by: Andreas Ericsson <ae@op5.se>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66
diff --git a/tests/t0403-lists.c b/tests/t0403-lists.c
new file mode 100644
index 0000000..1093c8f
--- /dev/null
+++ b/tests/t0403-lists.c
@@ -0,0 +1,60 @@
+#include "test_lib.h"
+#include "test_helpers.h"
+#include "commit.h"
+#include <git/odb.h>
+#include <git/commit.h>
+
+BEGIN_TEST(list_sort_test)
+
+ git_commit_list list;
+ git_commit_node *n;
+ int i, t;
+ time_t previous_time;
+
+#define TEST_SORTED() \
+ previous_time = 0;\
+ for (n = list.head; n != NULL; n = n->next)\
+ {\
+ must_be_true(n->commit->commit_time >= previous_time);\
+ previous_time = n->commit->commit_time;\
+ }
+
+ memset(&list, 0x0, sizeof(git_commit_list));
+ srand(time(NULL));
+
+ for (t = 0; t < 20; ++t)
+ {
+ const int test_size = rand() % 500 + 500;
+
+ // Purely random sorting test
+ for (i = 0; i < test_size; ++i)
+ {
+ git_commit *c = git__malloc(sizeof(git_commit));
+ c->commit_time = (time_t)rand();
+
+ git_commit_list_append(&list, c);
+ }
+
+ git_commit_list_sort(&list);
+ TEST_SORTED();
+ git_commit_list_clear(&list, 1);
+ }
+
+ // Try to sort list with all dates equal.
+ for (i = 0; i < 200; ++i)
+ {
+ git_commit *c = git__malloc(sizeof(git_commit));
+ c->commit_time = 0;
+
+ git_commit_list_append(&list, c);
+ }
+
+ git_commit_list_sort(&list);
+ TEST_SORTED();
+ git_commit_list_clear(&list, 1);
+
+ // Try to sort empty list
+ git_commit_list_sort(&list);
+ TEST_SORTED();
+
+END_TEST