BinaryTableTests.cs 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. using NUnit.Framework;
  2. using System;
  3. using System.Collections.Generic;
  4. using System.Globalization;
  5. namespace SharpGLTF.Memory
  6. {
  7. public class BinaryTableTests
  8. {
  9. [Test]
  10. public void ConvertListofListofIntToBytes()
  11. {
  12. var values = new List<List<int>>();
  13. values.Add(new List<int>() { 0, 1 });
  14. values.Add(new List<int>() { 2, 3 });
  15. var bytes = BinaryTable.GetBytesForArray(values);
  16. Assert.That(bytes.Count, Is.EqualTo(BinaryTable.GetSize<int>() * 4));
  17. }
  18. [Test]
  19. public void ConvertVector2ToBytes()
  20. {
  21. var values = new List<System.Numerics.Vector2>();
  22. values.Add(new System.Numerics.Vector2(0, 1));
  23. values.Add(new System.Numerics.Vector2(2, 3));
  24. var bytes = BinaryTable.GetBytes(values);
  25. Assert.That(bytes.Length, Is.EqualTo(BinaryTable.GetSize<System.Numerics.Vector2>() * 2));
  26. }
  27. [Test]
  28. public void ConvertVector3ToBytes()
  29. {
  30. var values = new List<System.Numerics.Vector3>();
  31. values.Add(new System.Numerics.Vector3(0, 1, 2));
  32. values.Add(new System.Numerics.Vector3(3, 4, 5));
  33. var bytes = BinaryTable.GetBytes(values);
  34. Assert.That(bytes.Length, Is.EqualTo(BinaryTable.GetSize<System.Numerics.Vector3>() * 2));
  35. }
  36. [Test]
  37. public void ConvertVector4ToBytes()
  38. {
  39. var values = new List<System.Numerics.Vector4>();
  40. values.Add(new System.Numerics.Vector4(0, 1, 2, 3));
  41. values.Add(new System.Numerics.Vector4(4, 5, 6, 7));
  42. var bytes = BinaryTable.GetBytes(values);
  43. Assert.That(bytes.Length, Is.EqualTo(BinaryTable.GetSize<System.Numerics.Vector4>() * 2));
  44. }
  45. [Test]
  46. public void ConvertMatrix4x4ToBytes()
  47. {
  48. // create list of identity matrices
  49. var values = new List<System.Numerics.Matrix4x4>();
  50. values.Add(System.Numerics.Matrix4x4.Identity);
  51. // convert to bytes
  52. var bytes = BinaryTable.GetBytes(values);
  53. // check size
  54. Assert.That(bytes.Length, Is.EqualTo(BinaryTable.GetSize<System.Numerics.Matrix4x4>()));
  55. }
  56. [Test]
  57. public void TestGetArrayOffset()
  58. {
  59. // arrange
  60. var list0 = new List<string>() { "hello", "world!" };
  61. var list1 = new List<string>() { "test", "testtest" };
  62. var arrays = new List<List<string>>() { list0, list1 };
  63. // act
  64. var arrayOffsets = BinaryTable.GetArrayOffsets(arrays);
  65. var stringOffsets = BinaryTable.GetStringOffsets(arrays);
  66. // assert
  67. Assert.That(arrayOffsets.Count, Is.EqualTo(arrays.Count + 1));
  68. Assert.That(arrayOffsets[0], Is.EqualTo(0));
  69. var l0 = list0.Count;
  70. var l1 = list1.Count;
  71. Assert.That(arrayOffsets[1], Is.EqualTo(l0));
  72. Assert.That(arrayOffsets[2], Is.EqualTo(l0 + l1));
  73. Assert.That(stringOffsets.Count, Is.EqualTo(list0.Count + list1.Count + 1));
  74. Assert.That(stringOffsets[0], Is.EqualTo(0));
  75. Assert.That(stringOffsets[1], Is.EqualTo(list0[0].Length));
  76. Assert.That(stringOffsets[2], Is.EqualTo(list0[0].Length + list0[1].Length));
  77. Assert.That(stringOffsets[3], Is.EqualTo(list0[0].Length + list0[1].Length + list1[0].Length));
  78. Assert.That(stringOffsets[4], Is.EqualTo(list0[0].Length + list0[1].Length + list1[0].Length + list1[1].Length));
  79. }
  80. [Test]
  81. public void TestBinaryConversion()
  82. {
  83. var bytes = BinaryTable.GetBytes(GetTestArray<byte>());
  84. Assert.That(bytes.Length, Is.EqualTo(BinaryTable.GetSize<byte>() * 2));
  85. bytes = BinaryTable.GetBytes(GetTestArray<int>());
  86. Assert.That(bytes.Length, Is.EqualTo(BinaryTable.GetSize<int>() * 2));
  87. bytes = BinaryTable.GetBytes(new List<string>() { "a", "b" });
  88. Assert.That(bytes.Length, Is.EqualTo(2));
  89. bytes = BinaryTable.GetBytes(new List<bool>() { true, false });
  90. Assert.That(bytes.Length, Is.EqualTo(1));
  91. var bits = new System.Collections.BitArray(bytes);
  92. Assert.That(bits[0] == true);
  93. Assert.That(bits[1] == false);
  94. // test exception for datetime
  95. var dates = new List<DateTime>();
  96. dates.Add(new DateTime());
  97. Assert.Throws<NotImplementedException>(() => BinaryTable.GetBytes(dates));
  98. }
  99. private static List<T> GetTestArray<T>()
  100. {
  101. var l = new List<T>();
  102. l.Add((T)Convert.ChangeType(0, typeof(T), CultureInfo.InvariantCulture));
  103. l.Add((T)Convert.ChangeType(1, typeof(T), CultureInfo.InvariantCulture));
  104. return l;
  105. }
  106. }
  107. }