
#include "clar_libgit2.h"

#include "odb.h"

void test_object_raw_chars__find_invalid_chars_in_oid(void)
{
	git_oid out;
	unsigned char exp[] = {
		0x16, 0xa6, 0x77, 0x70, 0xb7,
		0xd8, 0xd7, 0x23, 0x17, 0xc4,
		0xb7, 0x75, 0x21, 0x3c, 0x23,
		0xa8, 0xbd, 0x74, 0xf5, 0xe0,
	};
	char in[] = "16a67770b7d8d72317c4b775213c23a8bd74f5e0";
	unsigned int i;

	for (i = 0; i < 256; i++) {
		in[38] = (char)i;
		if (git__fromhex(i) >= 0) {
			exp[19] = (unsigned char)(git__fromhex(i) << 4);
			cl_git_pass(git_oid_fromstr(&out, in));
			cl_assert(memcmp(out.id, exp, sizeof(out.id)) == 0);
		} else {
			cl_git_fail(git_oid_fromstr(&out, in));
		}
	}
}

void test_object_raw_chars__build_valid_oid_from_raw_bytes(void)
{
	git_oid out;
	unsigned char exp[] = {
		0x16, 0xa6, 0x77, 0x70, 0xb7,
		0xd8, 0xd7, 0x23, 0x17, 0xc4,
		0xb7, 0x75, 0x21, 0x3c, 0x23,
		0xa8, 0xbd, 0x74, 0xf5, 0xe0,
	};
	git_oid_fromraw(&out, exp);
	cl_git_pass(memcmp(out.id, exp, sizeof(out.id)));
}
