VertexListTests.cs 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using NUnit.Framework;
  6. using XYZ = System.Numerics.Vector3;
  7. namespace SharpGLTF.Collections
  8. {
  9. [TestFixture]
  10. [Category("Core")]
  11. public class VertexListTests
  12. {
  13. [Test]
  14. public void TestFloatHashCode()
  15. {
  16. // it's important to ensure that the hash or positive and negative Zero is the same.
  17. float positiveZero = 0f;
  18. float negativeZero = -positiveZero;
  19. var floats = new float[] { positiveZero, negativeZero };
  20. var integers = System.Runtime.InteropServices.MemoryMarshal.Cast<float, uint>(floats);
  21. Assert.That(integers[1], Is.Not.EqualTo(integers[0]));
  22. var positiveHash = positiveZero.GetHashCode();
  23. var negativeHash = negativeZero.GetHashCode();
  24. Assert.That(negativeHash, Is.EqualTo(positiveHash));
  25. }
  26. [System.Diagnostics.DebuggerDisplay("{Value}")]
  27. struct _VertexExample
  28. {
  29. public static implicit operator _VertexExample(int value)
  30. {
  31. return new _VertexExample(value);
  32. }
  33. public _VertexExample(int val)
  34. {
  35. Value = val;
  36. }
  37. public int Value;
  38. }
  39. [Test]
  40. public void TestVertexListDictionary()
  41. {
  42. var list = new VertexList<_VertexExample>();
  43. list.Use(5);
  44. Assert.That(list, Has.Count.EqualTo(1));
  45. list.Use(7);
  46. Assert.That(list, Has.Count.EqualTo(2));
  47. Assert.That(list[0].Value, Is.EqualTo(5));
  48. Assert.That(list[1].Value, Is.EqualTo(7));
  49. list.Use(5);
  50. Assert.That(list, Has.Count.EqualTo(2));
  51. var list2 = new VertexList<_VertexExample>();
  52. list.CopyTo(list2);
  53. Assert.That(list2, Has.Count.EqualTo(2));
  54. }
  55. [Test]
  56. public void TestValueListSet()
  57. {
  58. var a = new XYZ(1.1f);
  59. var b = new XYZ(1.2f);
  60. var c = new XYZ(1.3f);
  61. var d = new XYZ(1.4f);
  62. var vlist = new ValueListSet<XYZ>();
  63. var idx0 = vlist.Use(a); Assert.That(idx0, Is.EqualTo(0));
  64. var idx1 = vlist.Use(b); Assert.That(idx1, Is.EqualTo(1));
  65. var idx2 = vlist.Use(a); Assert.That(idx2, Is.EqualTo(0));
  66. Assert.That(vlist[idx0], Is.EqualTo(a));
  67. Assert.That(vlist[idx1], Is.EqualTo(b));
  68. Assert.That(vlist[idx2], Is.EqualTo(a));
  69. Assert.That(new[] { a, b }, Is.EqualTo(vlist.ToArray()));
  70. vlist.Use(c);
  71. vlist.Use(d);
  72. Assert.That(new[] { a, b, c, d }, Is.EqualTo(vlist.ToArray()));
  73. var vlist2 = new ValueListSet<XYZ>();
  74. vlist.CopyTo(vlist2);
  75. Assert.That(vlist2[0], Is.EqualTo(vlist[0]));
  76. Assert.That(vlist2[1], Is.EqualTo(vlist[1]));
  77. Assert.That(vlist2[2], Is.EqualTo(vlist[2]));
  78. Assert.That(vlist2[3], Is.EqualTo(vlist[3]));
  79. }
  80. }
  81. }