From 5eb9ac471fa1b635e70305ecdc57ac82f7af532d Mon Sep 17 00:00:00 2001 From: Magnus Ahltorp Date: Fri, 12 Feb 2016 16:07:20 +0100 Subject: Allow all data sizes in permdbtest --- c_src/permdbtest.c | 34 ++++++++++++++++++++++++++-------- 1 file changed, 26 insertions(+), 8 deletions(-) (limited to 'c_src/permdbtest.c') diff --git a/c_src/permdbtest.c b/c_src/permdbtest.c index 7fb17b7..e4b54c2 100644 --- a/c_src/permdbtest.c +++ b/c_src/permdbtest.c @@ -68,26 +68,28 @@ main(int argc, char *argv[]) void *testdata = gentestdata(nentries); printf("inserting test data\n"); int written_since_fsync = 0; - int datamultiplier = datasize / 32; - if (datasize % 32 != 0) { - printf("datasize %d not multiple of 32, truncating to %d\n", datasize, datamultiplier * 32); - } - datasize = datamultiplier * 32; unsigned char *value = malloc(datasize); for (long long i = 0; i < nentries; i++) { unsigned char *key = testdata + i * 32 * 2; - for (int j = 0; j < datamultiplier; j++) { + for (int j = 0; j < datasize / 32; j++) { memcpy(value + j * 32, testdata + i * 32 * 2 + 32, 32); } + if (datasize % 32 > 0) { + memcpy(value + (datasize / 32) * 32, testdata + i * 32 * 2 + 32, datasize % 32); + } int result = addvalue(state, key, 32, value, datasize); if (result < 0) { - errx(1, "addvalue: %d\n", result); + free(testdata); + permdb_free(state); + errx(1, "addvalue: %d\n", result); } written_since_fsync += 1; if (written_since_fsync >= nfsync) { result = committree(state); if (result < 0) { + free(testdata); + permdb_free(state); errx(1, "committree: %d\n", result); } written_since_fsync = 0; @@ -96,6 +98,8 @@ main(int argc, char *argv[]) free(value); int result = committree(state); if (result < 0) { + free(testdata); + permdb_free(state); errx(1, "committree: %d\n", result); } written_since_fsync = 0; @@ -106,13 +110,27 @@ main(int argc, char *argv[]) size_t datalen; unsigned char *result = getvalue(state, key, 32, &datalen); if (datalen != datasize) { + free(testdata); + permdb_free(state); + free(result); errx(1, "getvalue returned datalen %zd\n", datalen); } - for (int j = 0; j < datamultiplier; j++) { + for (int j = 0; j < datasize / 32; j++) { if (memcmp(result + j * 32, testdata + i * 32 * 2 + 32, 32)) { + free(testdata); + permdb_free(state); + free(result); errx(1, "getvalue returned incorrect data\n"); } } + if (datasize % 32 > 0) { + if (memcmp(result + (datasize / 32) * 32, testdata + i * 32 * 2 + 32, datasize % 32)) { + free(testdata); + permdb_free(state); + free(result); + errx(1, "getvalue returned incorrect data\n"); + } + } free(result); } -- cgit v1.1