os_simple_hash.c   [plain text]


#include <darwintest.h>
#include <stdlib.h>
#include <os/stdlib.h>

T_DECL(os_simple_hash, "sanity check of os_simple_hash",
		T_META_ALL_VALID_ARCHS(true))
{
	const char * string =
			"We made the buttons on the screen look so good you'll want to lick them.";
	uint64_t hashval = os_simple_hash_string(string);
	T_EXPECT_NE(hashval, 0ULL, "usually should get a non-0 hash value");

	char buf[1024];
	arc4random_buf(buf, sizeof(buf));
	hashval = os_simple_hash(buf, sizeof(buf));
	T_EXPECT_NE(hashval, 0ULL, "usually should get a non-0 hash value");
}

T_DECL(os_simple_hash_seeds, "os_simple_hash different seeds give different hashes",
		T_META_ALL_VALID_ARCHS(true))
{
	const char * string =
			"We made the buttons on the screen look so good you'll want to lick them.";

	uint64_t hashval0 = os_simple_hash_string_with_seed(string, 0x0);
	T_EXPECT_NE(hashval0, 0ULL, "usually should get a non-0 hash value");
	uint64_t hashval1 = os_simple_hash_string_with_seed(string, 0x1);
	T_EXPECT_NE(hashval1, 0ULL, "usually should get a non-0 hash value");
	uint64_t hashvalF = os_simple_hash_string_with_seed(string, 0xF);
	T_EXPECT_NE(hashvalF, 0ULL, "usually should get a non-0 hash value");
	uint64_t hashvalFoo = os_simple_hash_string_with_seed(string, 0xF0000000);
	T_EXPECT_NE(hashvalFoo, 0ULL, "usually should get a non-0 hash value");

	T_EXPECT_NE(hashval0, hashval1, NULL);
	T_EXPECT_NE(hashval0, hashvalF, NULL);
	T_EXPECT_NE(hashval0, hashvalFoo, NULL);
	T_EXPECT_NE(hashval1, hashvalF, NULL);
	T_EXPECT_NE(hashval1, hashvalFoo, NULL);
	T_EXPECT_NE(hashvalF, hashvalFoo, NULL);
}