mirror of
				https://git.proxmox.com/git/libgit2
				synced 2025-11-04 07:09:14 +00:00 
			
		
		
		
	The old `allocfmt` is of no use to callers, as they are not able to free the returned buffer. Export a new API that returns a static string that doesn't need to be freed.
		
			
				
	
	
		
			124 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			124 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
 | 
						|
#include "clar_libgit2.h"
 | 
						|
 | 
						|
#include "odb.h"
 | 
						|
 | 
						|
void test_object_raw_compare__succeed_on_copy_oid(void)
 | 
						|
{
 | 
						|
	git_oid a, b;
 | 
						|
	unsigned char exp[] = {
 | 
						|
		0x16, 0xa6, 0x77, 0x70, 0xb7,
 | 
						|
		0xd8, 0xd7, 0x23, 0x17, 0xc4,
 | 
						|
		0xb7, 0x75, 0x21, 0x3c, 0x23,
 | 
						|
		0xa8, 0xbd, 0x74, 0xf5, 0xe0,
 | 
						|
	};
 | 
						|
	memset(&b, 0, sizeof(b));
 | 
						|
	git_oid_fromraw(&a, exp);
 | 
						|
	git_oid_cpy(&b, &a);
 | 
						|
	cl_git_pass(memcmp(a.id, exp, sizeof(a.id)));
 | 
						|
}
 | 
						|
 | 
						|
void test_object_raw_compare__succeed_on_oid_comparison_lesser(void)
 | 
						|
{
 | 
						|
	git_oid a, b;
 | 
						|
	unsigned char a_in[] = {
 | 
						|
		0x16, 0xa6, 0x77, 0x70, 0xb7,
 | 
						|
		0xd8, 0xd7, 0x23, 0x17, 0xc4,
 | 
						|
		0xb7, 0x75, 0x21, 0x3c, 0x23,
 | 
						|
		0xa8, 0xbd, 0x74, 0xf5, 0xe0,
 | 
						|
	};
 | 
						|
	unsigned char b_in[] = {
 | 
						|
		0x16, 0xa6, 0x77, 0x70, 0xb7,
 | 
						|
		0xd8, 0xd7, 0x23, 0x17, 0xc4,
 | 
						|
		0xb7, 0x75, 0x21, 0x3c, 0x23,
 | 
						|
		0xa8, 0xbd, 0x74, 0xf5, 0xf0,
 | 
						|
	};
 | 
						|
	git_oid_fromraw(&a, a_in);
 | 
						|
	git_oid_fromraw(&b, b_in);
 | 
						|
	cl_assert(git_oid_cmp(&a, &b) < 0);
 | 
						|
}
 | 
						|
 | 
						|
void test_object_raw_compare__succeed_on_oid_comparison_equal(void)
 | 
						|
{
 | 
						|
	git_oid a, b;
 | 
						|
	unsigned char a_in[] = {
 | 
						|
		0x16, 0xa6, 0x77, 0x70, 0xb7,
 | 
						|
		0xd8, 0xd7, 0x23, 0x17, 0xc4,
 | 
						|
		0xb7, 0x75, 0x21, 0x3c, 0x23,
 | 
						|
		0xa8, 0xbd, 0x74, 0xf5, 0xe0,
 | 
						|
	};
 | 
						|
	git_oid_fromraw(&a, a_in);
 | 
						|
	git_oid_fromraw(&b, a_in);
 | 
						|
	cl_assert(git_oid_cmp(&a, &b) == 0);
 | 
						|
}
 | 
						|
 | 
						|
void test_object_raw_compare__succeed_on_oid_comparison_greater(void)
 | 
						|
{
 | 
						|
	git_oid a, b;
 | 
						|
	unsigned char a_in[] = {
 | 
						|
		0x16, 0xa6, 0x77, 0x70, 0xb7,
 | 
						|
		0xd8, 0xd7, 0x23, 0x17, 0xc4,
 | 
						|
		0xb7, 0x75, 0x21, 0x3c, 0x23,
 | 
						|
		0xa8, 0xbd, 0x74, 0xf5, 0xe0,
 | 
						|
	};
 | 
						|
	unsigned char b_in[] = {
 | 
						|
		0x16, 0xa6, 0x77, 0x70, 0xb7,
 | 
						|
		0xd8, 0xd7, 0x23, 0x17, 0xc4,
 | 
						|
		0xb7, 0x75, 0x21, 0x3c, 0x23,
 | 
						|
		0xa8, 0xbd, 0x74, 0xf5, 0xd0,
 | 
						|
	};
 | 
						|
	git_oid_fromraw(&a, a_in);
 | 
						|
	git_oid_fromraw(&b, b_in);
 | 
						|
	cl_assert(git_oid_cmp(&a, &b) > 0);
 | 
						|
}
 | 
						|
 | 
						|
void test_object_raw_compare__compare_fmt_oids(void)
 | 
						|
{
 | 
						|
	const char *exp = "16a0123456789abcdef4b775213c23a8bd74f5e0";
 | 
						|
	git_oid in;
 | 
						|
	char out[GIT_OID_HEXSZ + 1];
 | 
						|
 | 
						|
	cl_git_pass(git_oid_fromstr(&in, exp));
 | 
						|
 | 
						|
	/* Format doesn't touch the last byte */
 | 
						|
	out[GIT_OID_HEXSZ] = 'Z';
 | 
						|
	git_oid_fmt(out, &in);
 | 
						|
	cl_assert(out[GIT_OID_HEXSZ] == 'Z');
 | 
						|
 | 
						|
	/* Format produced the right result */
 | 
						|
	out[GIT_OID_HEXSZ] = '\0';
 | 
						|
	cl_assert_equal_s(exp, out);
 | 
						|
}
 | 
						|
 | 
						|
void test_object_raw_compare__compare_static_oids(void)
 | 
						|
{
 | 
						|
	const char *exp = "16a0123456789abcdef4b775213c23a8bd74f5e0";
 | 
						|
	git_oid in;
 | 
						|
	char *out;
 | 
						|
 | 
						|
	cl_git_pass(git_oid_fromstr(&in, exp));
 | 
						|
 | 
						|
	out = git_oid_tostr_s(&in);
 | 
						|
	cl_assert(out);
 | 
						|
	cl_assert_equal_s(exp, out);
 | 
						|
}
 | 
						|
 | 
						|
void test_object_raw_compare__compare_pathfmt_oids(void)
 | 
						|
{
 | 
						|
	const char *exp1 = "16a0123456789abcdef4b775213c23a8bd74f5e0";
 | 
						|
	const char *exp2 = "16/a0123456789abcdef4b775213c23a8bd74f5e0";
 | 
						|
	git_oid in;
 | 
						|
	char out[GIT_OID_HEXSZ + 2];
 | 
						|
 | 
						|
	cl_git_pass(git_oid_fromstr(&in, exp1));
 | 
						|
 | 
						|
	/* Format doesn't touch the last byte */
 | 
						|
	out[GIT_OID_HEXSZ + 1] = 'Z';
 | 
						|
	git_oid_pathfmt(out, &in);
 | 
						|
	cl_assert(out[GIT_OID_HEXSZ + 1] == 'Z');
 | 
						|
 | 
						|
	/* Format produced the right result */
 | 
						|
	out[GIT_OID_HEXSZ + 1] = '\0';
 | 
						|
	cl_assert_equal_s(exp2, out);
 | 
						|
}
 |