Serializer.cpp 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. // Copyright (C) 2009-2021, Panagiotis Christopoulos Charitos and contributors.
  2. // All rights reserved.
  3. // Code licensed under the BSD License.
  4. // http://www.anki3d.org/LICENSE
  5. #include <Tests/Framework/Framework.h>
  6. #include <anki/util/Serializer.h>
  7. #include <Tests/Util/SerializerTest.h>
  8. ANKI_TEST(Util, BinarySerializer)
  9. {
  10. Array<ClassB, 2> b = {};
  11. b[0].m_array[0] = 2;
  12. b[0].m_array[1] = 3;
  13. b[0].m_array[2] = 4;
  14. Array<U32, 3> bDarr = {{0xFF12EE34, 0xAA12BB34, 0xCC12DD34}};
  15. b[0].m_darray = bDarr;
  16. b[1].m_array[0] = 255;
  17. b[1].m_array[1] = 127;
  18. b[1].m_array[2] = 55;
  19. Array<U32, 1> bDarr2 = {{0x12345678}};
  20. b[1].m_darray = bDarr2;
  21. ClassA a = {};
  22. a.m_array[0] = 123;
  23. a.m_array[1] = 56;
  24. a.m_u32 = 321;
  25. a.m_u64 = 0x123456789ABCDEFF;
  26. a.m_darray = b;
  27. HeapAllocator<U8> alloc(allocAligned, nullptr);
  28. // Serialize
  29. {
  30. File file;
  31. ANKI_TEST_EXPECT_NO_ERR(file.open("serialized.bin", FileOpenFlag::WRITE | FileOpenFlag::BINARY));
  32. BinarySerializer serializer;
  33. ANKI_TEST_EXPECT_NO_ERR(serializer.serialize(a, alloc, file));
  34. }
  35. // Deserialize
  36. {
  37. File file;
  38. ANKI_TEST_EXPECT_NO_ERR(file.open("serialized.bin", FileOpenFlag::READ | FileOpenFlag::BINARY));
  39. BinaryDeserializer deserializer;
  40. ClassA* pa;
  41. ANKI_TEST_EXPECT_NO_ERR(deserializer.deserialize(pa, alloc, file));
  42. ANKI_TEST_EXPECT_EQ(pa->m_array[0], a.m_array[0]);
  43. ANKI_TEST_EXPECT_EQ(pa->m_u32, a.m_u32);
  44. ANKI_TEST_EXPECT_EQ(pa->m_darray.getSize(), a.m_darray.getSize());
  45. for(U32 i = 0; i < pa->m_darray.getSize(); ++i)
  46. {
  47. ANKI_TEST_EXPECT_EQ(pa->m_darray[i].m_array[1], b[i].m_array[1]);
  48. for(U32 j = 0; j < pa->m_darray[i].m_darray.getSize(); ++j)
  49. {
  50. ANKI_TEST_EXPECT_EQ(pa->m_darray[i].m_darray[j], b[i].m_darray[j]);
  51. }
  52. }
  53. alloc.deleteInstance(pa);
  54. }
  55. }