# HG changeset patch # User mas01cr # Date 1250089031 0 # Node ID b2a941a372fb2c35e9d57faa3959a37570a63e6f # Parent fac63f65753ef9fd1e9b3baafcc46cefc4a44291 Test for audiodb_retrieve_datum() The good news: my fix for audiodb_track_id_datum()'s timesTable handling looks correct. The bad news: we need to NULL out fields we don't fill with data. Do so. diff -r fac63f65753e -r b2a941a372fb libtests/0048/prog1.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/libtests/0048/prog1.c Wed Aug 12 14:57:11 2009 +0000 @@ -0,0 +1,63 @@ +#include "audioDB_API.h" +#include "test_utils_lib.h" + +int main(int argc, char **argv) { + adb_t *adb; + + clean_remove_db(TESTDB); + if(!(adb = audiodb_create(TESTDB, 0, 0, 0))) + return 1; + + adb_datum_t datum1 = {2, 2, "testfeature01", (double[4]) {0, 0.5, 0.5, 0}, + NULL, (double[4]) {0, 1, 1, 2}}; + adb_datum_t datum2 = {3, 2, "testfeature10", (double[6]) {0.5, 0, 0, 0.5, 0.5, 0}, + NULL, (double[6]) {0, 2, 2, 3, 3, 4}}; + if(audiodb_insert_datum(adb, &datum1)) + return 1; + if(audiodb_insert_datum(adb, &datum2)) + return 1; + if(audiodb_l2norm(adb)) + return 1; + + adb_datum_t retrieve; + if(!(audiodb_retrieve_datum(adb, "testfeature", &retrieve))) + return 1; + + if(audiodb_retrieve_datum(adb, "testfeature01", &retrieve)) + return 1; + if(retrieve.nvectors != 2) + return 1; + if(retrieve.dim != 2) + return 1; + if(strcmp(retrieve.key, "testfeature01")) + return 1; + if(memcmp(retrieve.data, datum1.data, 4*sizeof(double))) + return 1; + if(retrieve.power) + return 1; + if(memcmp(retrieve.times, datum1.times, 4*sizeof(double))) + return 1; + if(audiodb_free_datum(adb, &retrieve)) + return 1; + + if(audiodb_retrieve_datum(adb, "testfeature10", &retrieve)) + return 1; + if(retrieve.nvectors != 3) + return 1; + if(retrieve.dim != 2) + return 1; + if(strcmp(retrieve.key, "testfeature10")) + return 1; + if(memcmp(retrieve.data, datum2.data, 6*sizeof(double))) + return 1; + if(retrieve.power) + return 1; + if(memcmp(retrieve.times, datum2.times, 6*sizeof(double))) + return 1; + if(audiodb_free_datum(adb, &retrieve)) + return 1; + + audiodb_close(adb); + + return 104; +} diff -r fac63f65753e -r b2a941a372fb libtests/0048/short-description --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/libtests/0048/short-description Wed Aug 12 14:57:11 2009 +0000 @@ -0,0 +1,1 @@ +insertion and retrieval \ No newline at end of file diff -r fac63f65753e -r b2a941a372fb query.cpp --- a/query.cpp Tue Aug 11 21:57:46 2009 +0000 +++ b/query.cpp Wed Aug 12 14:57:11 2009 +0000 @@ -226,9 +226,13 @@ malloc_and_fill_or_goto_error(double *, d->data, adb->header->dataOffset + track_offset, d->nvectors * d->dim * sizeof(double)); if(adb->header->flags & ADB_HEADER_FLAG_POWER) { malloc_and_fill_or_goto_error(double *, d->power, adb->header->powerTableOffset + track_offset / d->dim, d->nvectors * sizeof(double)); + } else { + d->power = NULL; } if(adb->header->flags & ADB_HEADER_FLAG_TIMES) { malloc_and_fill_or_goto_error(double *, d->times, adb->header->timesTableOffset + 2 * track_offset / d->dim, 2 * d->nvectors * sizeof(double)); + } else { + d->times = NULL; } return 0; }