Program.cs 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. using Microsoft.Xna.Framework;
  7. using System.Diagnostics;
  8. namespace ABTest
  9. {
  10. class Program
  11. {
  12. static void Main(string[] args)
  13. {
  14. //var random = new Random();
  15. //var randomVoxels = 100;
  16. //var iterations = 10;
  17. //var naiveVoxelsStored = 16 * 64 * 16;
  18. //var sumSparseVoxelsStored = 0;
  19. //for (int i = 0; i < iterations; ++i)
  20. //{
  21. // var sparseVoxels = new SparseVoxelTree(new DwarfCorp.Point3(0, 0, 0), new DwarfCorp.Point3(16, 64, 16), 0);
  22. // for (int v = 0; v < randomVoxels; ++v)
  23. // {
  24. // var coord = new DwarfCorp.Point3(random.Next(16), random.Next(64), random.Next(16));
  25. // sparseVoxels.SetVoxel(coord, v % 10);
  26. // }
  27. // var memoryUsage = sparseVoxels.CalculateMemoryUsage();
  28. // Console.WriteLine(i.ToString() + " Sparse tree: " + memoryUsage.Item2 + " voxels stored with " + memoryUsage.Item1 + " bytes overhead.");
  29. // Console.WriteLine(i.ToString() + " Sparse storage usage as % of naive: " + ((float)memoryUsage.Item2 / (float)naiveVoxelsStored));
  30. // sumSparseVoxelsStored += memoryUsage.Item2;
  31. //}
  32. //Console.WriteLine("Total sparse voxels: " + sumSparseVoxelsStored + " - % " + ((float)sumSparseVoxelsStored / ((float)naiveVoxelsStored * iterations)));
  33. var top = new SVT.Level_TOP(0);
  34. top.SetVoxel(new SVT.MiniPoint3(0, 16, 0), 1);
  35. var l2 = new SVT.Level2(new SVT.MiniPoint3(0, 0, 0), 0);
  36. TestLevel(2, 2, 2, (c, v) => l2.SetVoxel(c, v), (c) => l2.GetVoxel(c));
  37. var l4 = new SVT.Level4(new SVT.MiniPoint3(0, 0, 0), 0);
  38. TestLevel(4, 4, 4, (c, v) => l4.SetVoxel(c, v), (c) => l4.GetVoxel(c));
  39. var l8 = new SVT.Level8(new SVT.MiniPoint3(0, 0, 0), 0);
  40. TestLevel(8, 8, 8, (c, v) => l8.SetVoxel(c, v), (c) => l8.GetVoxel(c));
  41. var l16 = new SVT.Level16(new SVT.MiniPoint3(0, 0, 0), 0);
  42. TestLevel(16, 16, 16, (c, v) => l16.SetVoxel(c, v), (c) => l16.GetVoxel(c));
  43. var lTOP = new SVT.Level_TOP(0);
  44. TestLevel(16, 64, 16, (c, v) => lTOP.SetVoxel(c, v), (c) => lTOP.GetVoxel(c));
  45. Console.ReadLine();
  46. }
  47. private static void TestLevel(int X, int Y, int Z, Action<SVT.MiniPoint3, int> Set, Func<SVT.MiniPoint3, int> Get)
  48. {
  49. Console.WriteLine("Testing Level " + Y);
  50. var good = 0;
  51. var bad = 0;
  52. for (byte x = 0; x < X; ++x)
  53. for (byte y = 0; y < Y; ++y)
  54. for (byte z = 0; z < Z; ++z)
  55. Set(new SVT.MiniPoint3(x, y, z), CalcTestValue(x, y, z));
  56. for (byte x = 0; x < X; ++x)
  57. for (byte z = 0; z < Z; ++z) // Order here intentionally 'wrong'.
  58. for (byte y = 0; y < Y; ++y)
  59. if (Get(new SVT.MiniPoint3(x, y, z)) == CalcTestValue(x, y, z))
  60. good += 1;
  61. else
  62. bad += 1;
  63. Console.WriteLine("Good: " + good + " Bad: " + bad);
  64. }
  65. private static int CalcTestValue(byte x, byte y, byte z)
  66. {
  67. return (x << 16) + (y << 8) + z;
  68. }
  69. }
  70. }