/**
* This is a test for table in si
*/
#include "si_test.h"
#include "si_table.h"

TEST_FUNC(si_table) {
  SiTable * tab = sitable_new(NULL);
  char * k1 = "hello";
  char * k2 = "world";
  char * k3 = "!";
  char * v1 = "olleh";
  char * v2 = "dlrow";
  char * v3 = "?";
  TEST_NOTNULL(tab);
  TEST_NULL(sitable_get(tab, k1));
  TEST_NOTNULL(sitable_set(tab, k1, v1));
  TEST_NOTNULL(sitable_set(tab, k2, v2));
  TEST_NOTNULL(sitable_set(tab, k3, v3));
  TEST_NOTNULL(sitable_get(tab, k1));
  TEST_NOTNULL(sitable_get(tab, k3));
  TEST_NOTNULL(sitable_get(tab, k2));
  TEST_STREQ(sitable_get(tab, k1), v1);
  TEST_STREQ(sitable_get(tab, k2), v2);
  TEST_STREQ(sitable_get(tab, k3), v3);
  TEST_STREQ(sitable_drop(tab, k3), v3);
  TEST_NULL(sitable_get(tab, k3));
  TEST_NOTNULL(sitable_set(tab, k3, v3));
  TEST_NOTNULL(sitable_get(tab, k3));
  TEST_NOTNULL(sitable_grow(tab, 1024));
  TEST_NOTNULL(sitable_get(tab, k3));
  TEST_STREQ(sitable_drop(tab, k3), v3);
  TEST_DONE();
}


int main(void) {
  TEST_INIT();
  TEST_RUN(si_table);
  TEST_REPORT();
}