obj_test.c 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. /*
  2. *******************************************************************************
  3. \file obj_test.c
  4. \brief Tests for compound objects
  5. \project bee2/test
  6. \created 2013.04.16
  7. \version 2023.03.30
  8. \copyright The Bee2 authors
  9. \license Licensed under the Apache License, Version 2.0 (see LICENSE.txt).
  10. *******************************************************************************
  11. */
  12. #include <bee2/core/mem.h>
  13. #include <bee2/core/obj.h>
  14. #include <bee2/core/util.h>
  15. /*
  16. *******************************************************************************
  17. Тестирование
  18. *******************************************************************************
  19. */
  20. struct obj_test1_t
  21. {
  22. obj_hdr_t hdr;
  23. octet* p1;
  24. word* p2;
  25. octet a1[12];
  26. word a2[12];
  27. };
  28. struct obj_test2_t
  29. {
  30. obj_hdr_t hdr;
  31. struct obj_test1_t* p1;
  32. octet* p2;
  33. octet a2[123];
  34. };
  35. bool_t objTest()
  36. {
  37. octet buf[1024];
  38. struct obj_test1_t obj1[1];
  39. struct obj_test2_t obj2[1];
  40. void* t;
  41. // настроить obj1
  42. obj1->hdr.keep = sizeof(struct obj_test1_t);
  43. obj1->hdr.p_count = 2;
  44. obj1->hdr.o_count = 0;
  45. obj1->p1 = obj1->a1;
  46. obj1->p2 = obj1->a2;
  47. memSet(obj1->a1, 0x11, sizeof(obj1->a1));
  48. memSet(obj1->a2, 0x12, sizeof(obj1->a2));
  49. // настроить obj2
  50. obj2->hdr.keep = sizeof(struct obj_test2_t);
  51. obj2->hdr.p_count = 2;
  52. obj2->hdr.o_count = 1;
  53. obj2->p1 = obj1;
  54. obj2->p2 = obj2->a2;
  55. memSet(obj2->a2, 0x22, sizeof(obj2->a2));
  56. // подготовить буфер
  57. if (sizeof(buf) < objKeep(obj1) + 2 * objKeep(obj2))
  58. return FALSE;
  59. memSetZero(buf, sizeof(buf));
  60. // копировать obj2 в buf
  61. objCopy(buf, obj2);
  62. // присоединить obj1 к buf
  63. objAppend(buf, obj1, 0);
  64. // получить встроенный объект
  65. t = objPtr(buf, 0, void);
  66. // проверить
  67. if (memCmp(objPtr(t, 0, void), obj1->a1, sizeof(obj1->a1)) != 0 ||
  68. memCmp(objPtr(t, 1, void), obj1->a2, sizeof(obj1->a2)) != 0 ||
  69. memCmp(objPtr(buf, 1, void), obj2->a2, sizeof(obj2->a2)))
  70. return FALSE;
  71. // присоединить buf к buf
  72. objAppend(buf, buf, 0);
  73. // получить встроенный объект
  74. t = objPtr(buf, 0, void);
  75. // проверить
  76. if (memCmp(objPtr(t, 1, void), obj2->a2, sizeof(obj2->a2)) != 0)
  77. return FALSE;
  78. // все нормально
  79. return TRUE;
  80. }