ref: d3298a0f73f8d45249df6b45b167ae17bea22167
dir: /test.c/
#include "hash.c"
typedef struct Tnode {
Hnode;
char *key;
char *value;
} Tnode;
int
tfmt(Fmt *f)
{
Tnode *t;
t = va_arg(f->args, Tnode*);
return fmtprint(f, "%s %s\n", t->key, t->value);
}
uvlong
thash(Hnode *h)
{
Tnode *t;
uvlong hash;
char *s;
t = (Tnode*)h;
hash = 7;
s = t->key;
for(; *s;s++)
hash = hash*31 + *s;
return hash;
}
int
tcmp(Hnode *ha, Hnode *hb)
{
Tnode *a, *b;
a = (Tnode*)ha;
b = (Tnode*)hb;
return strcmp(a->key, b->key);
}
void
main(int argc, char **argv)
{
Hmap *h;
Tnode a, b;
Tnode *r;
fmtinstall('T', tfmt);
fmtinstall('H', hmapfmt);
h = allochmap(thash, tcmp, 2, sizeof(Tnode));
h->nodeverb = 'T';
a.key = "key";
a.value = "value";
hmapset(h, &a);
b.key = "key2";
b.value = "value2";
hmapset(h, &b);
b.key = "key3";
b.value = "value3";
hmapset(h, &b);
a.value = "";
r = (Tnode*)hmapget(h, &a);
assert(strcmp(r->key, a.key) == 0);
if(strcmp(r->value, "value") != 0)
sysfatal("fail");
b.key = "key3";
r = (Tnode*)hmapget(h, &b);
assert(strcmp(r->key, b.key) == 0);
print("%H", h);
hmapfree(h);
print("len, cap: %d %d\n", h->len, h->cap);
print("pass\n");
}