sexp-test.c 2.05 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
#include "testutils.h"
#include "sexp.h"

int
test_main(void)
{
  struct sexp_iterator i;

  sexp_iterator_init(&i, LDATA(""));
  ASSERT(sexp_iterator_next(&i) && i.type == SEXP_END);

  sexp_iterator_init(&i, LDATA("()"));
  ASSERT(sexp_iterator_next(&i) && i.type == SEXP_LIST
	 && sexp_iterator_enter_list(&i)
	 && sexp_iterator_next(&i) && i.type == SEXP_END
	 && sexp_iterator_exit_list(&i)
	 && sexp_iterator_next(&i) && i.type == SEXP_END);

  sexp_iterator_init(&i, LDATA("("));
  ASSERT(sexp_iterator_next(&i) && i.type == SEXP_LIST
	 && sexp_iterator_enter_list(&i)
	 && !sexp_iterator_next(&i));

  sexp_iterator_init(&i, LDATA("3:foo0:[3:bar]1:x"));
  ASSERT(sexp_iterator_next(&i) && i.type == SEXP_ATOM
	 && !i.display_length && !i.display
	 && i.atom_length == 3 && MEMEQ(3, "foo", i.atom)

	 && sexp_iterator_next(&i) && i.type == SEXP_ATOM
	 && !i.display_length && !i.display
	 && !i.atom_length && i.atom

	 && sexp_iterator_next(&i) && i.type == SEXP_ATOM
	 && i.display_length == 3 && MEMEQ(3, "bar", i.display)
	 && i.atom_length == 1 && MEMEQ(1, "x", i.atom));

  {
    struct sexp_assoc_key keys[2] =
      { { LDATA("n") }, { LDATA("e") } };
    struct sexp_iterator v[2];
    
    sexp_iterator_init(&i, LDATA("((1:n2:xx3:foo)0:(1:y)(1:e))"));
43 44
    ASSERT(sexp_iterator_next(&i)
	   && sexp_iterator_assoc(&i, 2, keys, v));
45 46 47 48 49 50 51 52 53 54

    ASSERT(sexp_iterator_next(&v[0]) && v[0].type == SEXP_ATOM
	   && !v[0].display_length && !v[0].display
	   && v[0].atom_length == 2 && MEMEQ(2, "xx", v[0].atom)

	   && sexp_iterator_next(&v[0]) && v[0].type == SEXP_ATOM
	   && !v[0].display_length && !v[0].display
	   && v[0].atom_length == 3 && MEMEQ(3, "foo", v[0].atom)

	   && sexp_iterator_next(&v[0]) && v[0].type == SEXP_END);
55 56 57 58 59 60 61 62 63 64 65 66

    ASSERT(sexp_iterator_next(&v[1]) && v[1].type == SEXP_END);

#if 0
    sexp_iterator_init(&i, LDATA("((1:n))"));
    ASSERT(sexp_iterator_next(&i)
	   && !sexp_iterator_assoc(&i, 2, keys, v));

    sexp_iterator_init(&i, LDATA("((1:n)(1:n3:foo))"));
    ASSERT(sexp_iterator_next(&i)
	   && !sexp_iterator_assoc(&i, 2, keys, v));
#endif
67 68 69
  }
  SUCCESS();
}