You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
89 lines
1.9 KiB
89 lines
1.9 KiB
#include "../src/common.h" |
|
#include "../src/record.h" |
|
#include "../src/io.h" |
|
#include "../src/simdb.h" |
|
|
|
int main() { |
|
simdb_t *db; |
|
simdb_urec_t *data; |
|
simdb_urec_t rec[2]; |
|
char *path = "test.db"; |
|
int mode = 0, ret = 0; |
|
|
|
unlink(path); |
|
|
|
db = simdb_open(path, mode, &ret); |
|
assert(db == NULL); |
|
assert(ret == -1); /* no such file */ |
|
|
|
ret = simdb_create(path); |
|
assert(ret == true); |
|
|
|
db = simdb_open(path, mode, &ret); |
|
assert(db != NULL); |
|
|
|
ret = simdb_read(db, 1, 1, &data); |
|
assert(ret == 0); |
|
|
|
memset(&rec[0], 0xAA, SIMDB_REC_LEN); |
|
memset(&rec[1], 0xAA, SIMDB_REC_LEN); |
|
rec[0].used = 1; |
|
rec[1].used = 1; |
|
|
|
ret = simdb_write(db, 1, 2, rec); |
|
assert(ret == SIMDB_ERR_READONLY); /* database open in read-only mode */ |
|
|
|
simdb_close(db); |
|
|
|
mode = SIMDB_FLAG_WRITE | SIMDB_FLAG_LOCKNB; |
|
db = simdb_open(path, mode, &ret); |
|
assert(db != NULL); |
|
|
|
ret = simdb_records_count(db); |
|
assert(ret == 0); |
|
|
|
ret = simdb_write(db, 1, 2, rec); |
|
assert(ret == 2); /* success */ |
|
|
|
assert(simdb_record_used(db, 0) == false); |
|
assert(simdb_record_used(db, 1) == true); |
|
assert(simdb_record_used(db, 2) == true); |
|
assert(simdb_record_used(db, 3) == false); |
|
|
|
ret = simdb_records_count(db); |
|
assert(ret == 2); |
|
|
|
ret = simdb_read(db, 1, 0, &data); |
|
assert(ret == SIMDB_ERR_USAGE); |
|
|
|
ret = simdb_read(db, 0, 0, &data); |
|
assert(ret == SIMDB_ERR_USAGE); |
|
|
|
ret = simdb_read(db, 0, 1, &data); |
|
assert(ret == SIMDB_ERR_USAGE); |
|
|
|
/* valid request : single record */ |
|
ret = simdb_read(db, 1, 1, &data); |
|
assert(ret == 1); |
|
free(data); |
|
|
|
/* valid request : multiple records */ |
|
ret = simdb_read(db, 1, 2, &data); |
|
assert(ret == 2); |
|
free(data); |
|
|
|
/* range beyond end of file */ |
|
ret = simdb_read(db, 1, 4, &data); |
|
assert(ret == 2); |
|
free(data); |
|
|
|
/* start beyond end of file */ |
|
ret = simdb_read(db, 3, 4, &data); |
|
assert(ret == 0); |
|
|
|
simdb_close(db); |
|
|
|
unlink(path); |
|
|
|
return 0; |
|
}
|
|
|