MemoryArrayTests.cs 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. using System;
  2. using System.Linq;
  3. using System.Numerics;
  4. using NUnit.Framework;
  5. namespace SharpGLTF.Memory
  6. {
  7. [TestFixture]
  8. [Category("Core Memory")]
  9. public class MemoryArrayTests
  10. {
  11. [Test]
  12. public void TestFloatingArrayDecoding()
  13. {
  14. Assert.That(_CreateFloatingAccessor(new Byte[] { 17 }, Schema2.EncodingType.UNSIGNED_BYTE, false)[0], Is.EqualTo(17));
  15. Assert.That(_CreateFloatingAccessor(new Byte[] { 17, 0 }, Schema2.EncodingType.UNSIGNED_SHORT, false)[0], Is.EqualTo(17));
  16. Assert.That(_CreateFloatingAccessor(new Byte[] { 17 }, Schema2.EncodingType.BYTE, false)[0], Is.EqualTo(17));
  17. Assert.That(_CreateFloatingAccessor(new Byte[] { 17, 0 }, Schema2.EncodingType.SHORT, false)[0], Is.EqualTo(17));
  18. Assert.That(_CreateFloatingAccessor(new Byte[] { 255 }, Schema2.EncodingType.UNSIGNED_BYTE, true)[0], Is.EqualTo(1));
  19. Assert.That(_CreateFloatingAccessor(new Byte[] { 127 }, Schema2.EncodingType.BYTE, true)[0], Is.EqualTo(1));
  20. Assert.That(_CreateFloatingAccessor(new Byte[] { 128 }, Schema2.EncodingType.BYTE, true)[0], Is.EqualTo(-1));
  21. Assert.That(_CreateFloatingAccessor(new Byte[] { 255, 255 }, Schema2.EncodingType.UNSIGNED_SHORT, true)[0], Is.EqualTo(1));
  22. Assert.That(_CreateFloatingAccessor(new Byte[] { 255, 127 }, Schema2.EncodingType.SHORT, true)[0], Is.EqualTo(1));
  23. Assert.That(_CreateFloatingAccessor(new Byte[] { 0, 128 }, Schema2.EncodingType.SHORT, true)[0], Is.EqualTo(-1));
  24. Assert.That(_CreateFloatingAccessor(new Byte[] { 17, 0, 0, 0 }, Schema2.EncodingType.UNSIGNED_INT, false)[0], Is.EqualTo(17));
  25. Assert.That(_CreateFloatingAccessor(new Byte[] { 0,0, 0x80, 0x3f }, Schema2.EncodingType.FLOAT, false)[0], Is.EqualTo(1));
  26. }
  27. private static FloatingAccessor _CreateFloatingAccessor(byte[] data, Schema2.EncodingType encoding, bool normalized)
  28. {
  29. return new FloatingAccessor(new ArraySegment<byte>(data), 0, int.MaxValue, 0, 1, encoding, normalized);
  30. }
  31. [Test]
  32. public void TestFloatingArrayEncoding1()
  33. {
  34. var v1 = new Vector4(0.1f, 0.2f, 0.6f, 0.8f);
  35. var v2 = new Vector4(1, 2, 3, 4);
  36. var bytes = new Byte[256];
  37. var v4n = new Vector4Array(bytes, 0, Schema2.EncodingType.UNSIGNED_BYTE, true);
  38. v4n[1] = v1;
  39. NumericsAssert.AreEqual(v4n[1], v1, 0.1f);
  40. var v4u = new Vector4Array(bytes, 0, Schema2.EncodingType.UNSIGNED_BYTE, false);
  41. v4u[1] = v2;
  42. NumericsAssert.AreEqual(v4u[1], v2);
  43. }
  44. [Test]
  45. public void TestFloatingArrayEncoding2()
  46. {
  47. var v1 = new Vector4(0.1f, 0.2f, 0.6f, 0.8f);
  48. var v2 = new Vector4(1, 2, 3, 4);
  49. var bytes = new Byte[256];
  50. var v4n = new Vector4Array(bytes, 0, 5, 8, Schema2.EncodingType.UNSIGNED_BYTE, true);
  51. var v4u = new Vector4Array(bytes, 4, 5, 8, Schema2.EncodingType.UNSIGNED_BYTE, false);
  52. v4n[1] = v1;
  53. NumericsAssert.AreEqual(v4n[1], v1, 0.1f);
  54. v4u[1] = v2;
  55. NumericsAssert.AreEqual(v4u[1], v2);
  56. }
  57. [Test]
  58. public void TestLinqAccess()
  59. {
  60. var buffer = new Byte[] { 1, 52, 43, 6, 23, 234 };
  61. var accessor = new Vector2Array(buffer, 0, Schema2.EncodingType.BYTE, true);
  62. var result = accessor.ToArray();
  63. Assert.That(result, Has.Length.EqualTo(3));
  64. }
  65. }
  66. }