Home | History | Annotate | Download | only in test
      1 
      2 #include "cs_config.h"
      3 #include <unistd.h>
      4 #include <string.h>
      5 #include "util/neo_misc.h"
      6 #include "util/neo_hdf.h"
      7 #include "util/neo_rand.h"
      8 
      9 #define DIE_NOT_OK(err) \
     10   if (err != STATUS_OK) { \
     11       nerr_log_error(err); \
     12       exit(-1); \
     13   }
     14 
     15 
     16 int rand_name (char *s, int slen)
     17 {
     18   char buf[256];
     19   int x, m, l, rl;
     20 
     21   m = neo_rand(10);
     22   while (1) {
     23     neo_rand_word(s, slen);
     24     if (!strchr(s, '.')) break;
     25   }
     26 
     27   for (x = 1; x < m; x++)
     28   {
     29     l = strlen(s);
     30     neo_rand_word(buf, sizeof(buf));
     31     rl = strlen(buf);
     32     /* fprintf(stderr, "%s\n", buf); */
     33     if (rl && slen - l - rl > 1 && !strchr(buf, '.')) {
     34       snprintf(s + l, slen - l, ".%s", buf);
     35     }
     36   }
     37 
     38   return 0;
     39 }
     40 
     41 static int sortByName(const void *a, const void *b) {
     42   HDF **ha = (HDF **)a;
     43   HDF **hb = (HDF **)b;
     44 
     45   /* fprintf(stderr, "%s <=> %s\n", hdf_obj_name(*ha), hdf_obj_name(*hb));  */
     46   return strcasecmp(hdf_obj_name(*ha), hdf_obj_name(*hb));
     47 }
     48 
     49 
     50 int main(int argc, char *argv[])
     51 {
     52   NEOERR *err;
     53   HDF *hdf;
     54   int x;
     55   char name[256];
     56   char value[256];
     57   double tstart = 0;
     58 
     59   err = hdf_init(&hdf);
     60   DIE_NOT_OK(err);
     61 
     62   err = hdf_set_value (hdf, "Beware", "1");
     63   DIE_NOT_OK(err);
     64   err = hdf_set_value (hdf, "Beware.The", "2");
     65   DIE_NOT_OK(err);
     66   err = hdf_set_valuef (hdf, "Beware.The.%s=%d", "Ides", 3);
     67   DIE_NOT_OK(err);
     68   err = hdf_set_value (hdf, "Beware.Off", "4");
     69   DIE_NOT_OK(err);
     70   err = hdf_set_value (hdf, "Beware.The.Ides.Of", "5");
     71   DIE_NOT_OK(err);
     72   err = hdf_set_value (hdf, "Beware.The.Butter", "6");
     73   DIE_NOT_OK(err);
     74   err = hdf_set_attr (hdf, "Beware.The.Butter", "Lang", "en");
     75   DIE_NOT_OK(err);
     76   err = hdf_set_attr (hdf, "Beware.The.Butter", "Lang", "1");
     77   DIE_NOT_OK(err);
     78   err = hdf_set_attr (hdf, "Beware.The.Butter", "Lang", NULL);
     79   DIE_NOT_OK(err);
     80 
     81   err = hdf_read_file (hdf, "test.hdf");
     82   DIE_NOT_OK(err);
     83   hdf_dump(hdf, NULL);
     84 
     85 
     86   x = hdf_get_int_value (hdf, "Beware.The.Ides", 0);
     87   if (x != 3)
     88   {
     89     ne_warn("hdf_get_int_value returned %d, expected 3", x);
     90     return -1;
     91   }
     92 
     93   /* test symlinks */
     94   {
     95     const char *v;
     96     err = hdf_set_value(hdf, "Destination.Foo", "bar");
     97     DIE_NOT_OK(err);
     98     err = hdf_set_symlink(hdf, "Symlink.baz", "Destination.Foo");
     99     DIE_NOT_OK(err);
    100     v = hdf_get_value(hdf, "Symlink.baz", "notfound");
    101     if (strcmp(v, "bar")) {
    102       ne_warn("hdf_get_value through symlink returned %s, expected bar", v);
    103       return -1;
    104     }
    105     err = hdf_set_value(hdf, "Symlink.baz", "newvalue");
    106     DIE_NOT_OK(err);
    107     v = hdf_get_value(hdf, "Symlink.baz", "notfound");
    108     if (strcmp(v, "newvalue")) {
    109       ne_warn("hdf_get_value through symlink returned %s, expected newvalue",
    110               v);
    111       return -1;
    112     }
    113     err = hdf_set_value(hdf, "Symlink.baz.too", "newtoo");
    114     DIE_NOT_OK(err);
    115     v = hdf_get_value(hdf, "Symlink.baz.too", "newtoo");
    116     if (strcmp(v, "newtoo")) {
    117       ne_warn("hdf_get_value through symlink returned %s, expected newtoo",
    118               v);
    119       return -1;
    120     }
    121     v = hdf_get_value(hdf, "Destination.Foo.too", "newtoo");
    122     if (strcmp(v, "newtoo")) {
    123       ne_warn("hdf_get_value through symlink returned %s, expected newtoo",
    124               v);
    125       return -1;
    126     }
    127   }
    128 
    129   for (x = 0; x < 10000; x++)
    130   {
    131     rand_name(name, sizeof(name));
    132     neo_rand_word(value, sizeof(value));
    133     /* ne_warn("Setting %s = %s", name, value); */
    134     err = hdf_set_value (hdf, name, value);
    135     DIE_NOT_OK(err);
    136   }
    137 
    138   tstart = ne_timef();
    139   hdf_sort_obj(hdf, sortByName);
    140   ne_warn("sort took %5.5fs", ne_timef() - tstart);
    141 
    142   hdf_dump(hdf, NULL);
    143 
    144   hdf_destroy(&hdf);
    145 
    146   return 0;
    147 }
    148