ncdval_test.c 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. #include <stdio.h>
  2. #include <ncd/NCDVal.h>
  3. #include <misc/debug.h>
  4. #define FORCE(cmd) if (!(cmd)) { fprintf(stderr, "failed\n"); exit(1); }
  5. static void print_indent (int indent)
  6. {
  7. for (int i = 0; i < indent; i++) {
  8. printf(" ");
  9. }
  10. }
  11. static void print_value (NCDValRef val, unsigned int indent)
  12. {
  13. switch (NCDVal_Type(val)) {
  14. case NCDVAL_STRING: {
  15. print_indent(indent);
  16. printf("string(%zu) %s\n", NCDVal_StringLength(val), NCDVal_StringValue(val));
  17. } break;
  18. case NCDVAL_LIST: {
  19. size_t count = NCDVal_ListCount(val);
  20. print_indent(indent);
  21. printf("list(%zu)\n", NCDVal_ListCount(val));
  22. for (size_t i = 0; i < count; i++) {
  23. NCDValRef elem_val = NCDVal_ListGet(val, i);
  24. print_value(elem_val, indent + 1);
  25. }
  26. } break;
  27. case NCDVAL_MAP: {
  28. print_indent(indent);
  29. printf("map(%zu)\n", NCDVal_MapCount(val));
  30. for (NCDValMapElem e = NCDVal_MapFirst(val); !NCDVal_MapElemInvalid(e); e = NCDVal_MapNext(val, e)) {
  31. NCDValRef ekey = NCDVal_MapElemKey(val, e);
  32. NCDValRef eval = NCDVal_MapElemVal(val, e);
  33. print_indent(indent + 1);
  34. printf("key=\n");
  35. print_value(ekey, indent + 2);
  36. print_indent(indent + 1);
  37. printf("val=\n");
  38. print_value(eval, indent + 2);
  39. }
  40. } break;
  41. }
  42. }
  43. int main ()
  44. {
  45. NCDValMem mem;
  46. NCDValMem_Init(&mem);
  47. NCDValRef s1 = NCDVal_NewString(&mem, "Hello World");
  48. FORCE( !NCDVal_IsInvalid(s1) )
  49. NCDValRef s2 = NCDVal_NewString(&mem, "This is reeeeeeeeeeeeeallllllllyyyyy fun!");
  50. FORCE( !NCDVal_IsInvalid(s2) )
  51. printf("%s. %s\n", NCDVal_StringValue(s1), NCDVal_StringValue(s2));
  52. NCDValRef l1 = NCDVal_NewList(&mem, 10);
  53. FORCE( !NCDVal_IsInvalid(l1) )
  54. NCDVal_ListAppend(l1, s1);
  55. NCDVal_ListAppend(l1, s2);
  56. print_value(s1, 0);
  57. print_value(s2, 0);
  58. print_value(l1, 0);
  59. NCDValRef k1 = NCDVal_NewString(&mem, "K1");
  60. FORCE( !NCDVal_IsInvalid(k1) )
  61. NCDValRef v1 = NCDVal_NewString(&mem, "V1");
  62. FORCE( !NCDVal_IsInvalid(v1) )
  63. NCDValRef k2 = NCDVal_NewString(&mem, "K2");
  64. FORCE( !NCDVal_IsInvalid(k2) )
  65. NCDValRef v2 = NCDVal_NewString(&mem, "V2");
  66. FORCE( !NCDVal_IsInvalid(v2) )
  67. NCDValRef m1 = NCDVal_NewMap(&mem, 2);
  68. FORCE( !NCDVal_IsInvalid(m1) )
  69. FORCE( NCDVal_MapInsert(m1, k1, v1) )
  70. FORCE( NCDVal_MapInsert(m1, k2, v2) )
  71. print_value(m1, 0);
  72. NCDValMem_Free(&mem);
  73. return 0;
  74. }