libgit2/tests-clar/core/oid.c
Russell Belfer aa8f010120 Add git_oid_strcmp and use it for git_oid_streq
Add a new git_oid_strcmp that compares a string OID with a hex
oid for sort order, and then reimplement git_oid_streq using it.
This actually should speed up git_oid_streq because it only reads
as far into the string as it needs to, whereas previously it would
convert the whole string into an OID and then use git_oid_cmp.
2013-04-29 08:59:46 -07:00

71 lines
2.6 KiB
C

#include "clar_libgit2.h"
static git_oid id;
static git_oid idp;
static git_oid idm;
const char *str_oid = "ae90f12eea699729ed24555e40b9fd669da12a12";
const char *str_oid_p = "ae90f12eea699729ed";
const char *str_oid_m = "ae90f12eea699729ed24555e40b9fd669da12a12THIS IS EXTRA TEXT THAT SHOULD GET IGNORED";
void test_core_oid__initialize(void)
{
cl_git_pass(git_oid_fromstr(&id, str_oid));
cl_git_pass(git_oid_fromstrp(&idp, str_oid_p));
cl_git_fail(git_oid_fromstrp(&idm, str_oid_m));
}
void test_core_oid__streq(void)
{
cl_assert_equal_i(0, git_oid_streq(&id, str_oid));
cl_assert_equal_i(-1, git_oid_streq(&id, "deadbeefdeadbeefdeadbeefdeadbeefdeadbeef"));
cl_assert_equal_i(-1, git_oid_streq(&id, "deadbeef"));
cl_assert_equal_i(-1, git_oid_streq(&id, "I'm not an oid.... :)"));
cl_assert_equal_i(0, git_oid_streq(&idp, "ae90f12eea699729ed0000000000000000000000"));
cl_assert_equal_i(0, git_oid_streq(&idp, "ae90f12eea699729ed"));
cl_assert_equal_i(-1, git_oid_streq(&idp, "ae90f12eea699729ed1"));
cl_assert_equal_i(-1, git_oid_streq(&idp, "ae90f12eea699729ec"));
cl_assert_equal_i(-1, git_oid_streq(&idp, "deadbeefdeadbeefdeadbeefdeadbeefdeadbeef"));
cl_assert_equal_i(-1, git_oid_streq(&idp, "deadbeef"));
cl_assert_equal_i(-1, git_oid_streq(&idp, "I'm not an oid.... :)"));
}
void test_core_oid__strcmp(void)
{
cl_assert_equal_i(0, git_oid_strcmp(&id, str_oid));
cl_assert(git_oid_strcmp(&id, "deadbeefdeadbeefdeadbeefdeadbeefdeadbeef") < 0);
cl_assert(git_oid_strcmp(&id, "deadbeef") < 0);
cl_assert_equal_i(-1, git_oid_strcmp(&id, "I'm not an oid.... :)"));
cl_assert_equal_i(0, git_oid_strcmp(&idp, "ae90f12eea699729ed0000000000000000000000"));
cl_assert_equal_i(0, git_oid_strcmp(&idp, "ae90f12eea699729ed"));
cl_assert(git_oid_strcmp(&idp, "ae90f12eea699729ed1") < 0);
cl_assert(git_oid_strcmp(&idp, "ae90f12eea699729ec") > 0);
cl_assert(git_oid_strcmp(&idp, "deadbeefdeadbeefdeadbeefdeadbeefdeadbeef") < 0);
cl_assert(git_oid_strcmp(&idp, "deadbeef") < 0);
cl_assert_equal_i(-1, git_oid_strcmp(&idp, "I'm not an oid.... :)"));
}
void test_core_oid__ncmp(void)
{
cl_assert(!git_oid_ncmp(&id, &idp, 0));
cl_assert(!git_oid_ncmp(&id, &idp, 1));
cl_assert(!git_oid_ncmp(&id, &idp, 2));
cl_assert(!git_oid_ncmp(&id, &idp, 17));
cl_assert(!git_oid_ncmp(&id, &idp, 18));
cl_assert(git_oid_ncmp(&id, &idp, 19));
cl_assert(git_oid_ncmp(&id, &idp, 40));
cl_assert(git_oid_ncmp(&id, &idp, 41));
cl_assert(git_oid_ncmp(&id, &idp, 42));
cl_assert(!git_oid_ncmp(&id, &id, 0));
cl_assert(!git_oid_ncmp(&id, &id, 1));
cl_assert(!git_oid_ncmp(&id, &id, 39));
cl_assert(!git_oid_ncmp(&id, &id, 40));
cl_assert(!git_oid_ncmp(&id, &id, 41));
}