shithub: blie

ref: 2f61e9979e69ab014cdd44ea71fa787ea3454446
dir: /test/tdb.c/

View raw version
#include <u.h>
#include <libc.h>
#include "../db.h"

#define LIST(DO) \
	DO(five, INT, int, nil) \
	DO(ten, INT, int, nil) \
	DO(half, FLOAT, double, nil) \
	DO(str, STRING, char*, nil)

typedef struct Data Data;
struct Data {
	LIST(STRUCT)
};
Data data;

Sdata serdata[] = {
	LIST(SDATA)
	ENDSDATA
};

void
main(int, char**)
{
	Db *db;
	Dpack *dv;
	Dtuple *tp;
	
	db = opendb("db");
	dv = getdpack(db, "test");
	
	deserialize(dv, &data, serdata);
	
	if (data.five != 5)
		fprint(2, "five != 5 (%d)\n", data.five);
	if (data.ten != 10)
		fprint(2, "ten != 10 (%d)\n", data.ten);
	if (data.half != 0.5)
		fprint(2, "half != 0.5 (%f)\n", data.half);
	if (strcmp(data.str, "hello") != 0)
		fprint(2, "str != 'hello' (%s)\n", data.str);
	
	data.five = 50;
	data.ten = 100;
	data.half = 0.05;
	data.str = "bye'bye";
	
	serialize(dv, &data, serdata);
	
	for (tp = dv->tuple; tp; tp = tp->next) {
		if (strcmp(tp->key, "five") == 0) {
			if (strcmp(tp->value, "50") != 0)
				fprint(2, "s: five != 50 (%s)\n", tp->value);
			continue;
		}
		if (strcmp(tp->key, "ten") == 0) {
			if (strcmp(tp->value, "100") != 0)
				fprint(2, "s: ten != 100 (%s)\n", tp->value);
			continue;
		}
		if (strcmp(tp->key, "half") == 0) {
			if (strcmp(tp->value, "0.050000") != 0)
				fprint(2, "s: half != 0.05 (%s)\n", tp->value);
			continue;
		}
		if (strcmp(tp->key, "str") == 0) {
			if (strcmp(tp->value, "bye'bye") != 0)
				fprint(2, "s: str != 'bye' (%s)\n", tp->value);
			continue;
		}
		fprint(2, "s: %s = %s\n", tp->key, tp->value);
	}
	
	writedb(db, "dbout");
	
	exits(nil);
}