#if UNITY_EDITOR using NUnit.Framework; using System; using Unity.Mathematics; using UnityEngine.PathTracing.Lightmapping; namespace UnityEngine.PathTracing.Tests { internal class ChartIdenticationTests { [Test] public void TestUnionFind() { uint vertexCount = 8; var vertexChartIds = new UInt32[vertexCount]; var triangleIndices = new UInt32[] { 0, 1, 7, 4, 5, 6, 2, 6, 4, 0, 3, 7 }; ChartIdentification.InitializeRepresentatives(vertexChartIds); ChartIdentification.UnionTriangleEdges(triangleIndices, vertexChartIds); ChartIdentification.FindRepresentatives(vertexChartIds); Assert.AreEqual(0, vertexChartIds[0]); Assert.AreEqual(0, vertexChartIds[1]); Assert.AreEqual(2, vertexChartIds[2]); Assert.AreEqual(0, vertexChartIds[3]); Assert.AreEqual(2, vertexChartIds[4]); Assert.AreEqual(2, vertexChartIds[5]); Assert.AreEqual(2, vertexChartIds[6]); Assert.AreEqual(0, vertexChartIds[7]); } [Test] public void TestCompaction() { var vertexChartIds = new UInt32[] { 3, 3, 3, 3, 2, 2, 9, 9, 0, 0, 3, 3 }; ChartIdentification.Compact(vertexChartIds, out uint chartCount); Assert.AreEqual(4, chartCount); Assert.AreEqual(0, vertexChartIds[0]); Assert.AreEqual(0, vertexChartIds[1]); Assert.AreEqual(0, vertexChartIds[2]); Assert.AreEqual(0, vertexChartIds[3]); Assert.AreEqual(1, vertexChartIds[4]); Assert.AreEqual(1, vertexChartIds[5]); Assert.AreEqual(2, vertexChartIds[6]); Assert.AreEqual(2, vertexChartIds[7]); Assert.AreEqual(3, vertexChartIds[8]); Assert.AreEqual(3, vertexChartIds[9]); Assert.AreEqual(0, vertexChartIds[10]); Assert.AreEqual(0, vertexChartIds[11]); } [Test] public void TestDeduplication() { uint vertexCount = 6; var vertexChartIds = new UInt32[vertexCount]; var inputVertexUvs = new float2[] { new(-1.0f, 0.0f), new(0.0f, 1.0f), new(0.0f, -1.0f), new(0.0f, 1.0f), new(1.0f, 0.0f), new(0.0f, -1.0f) }; var inputVertexNormals = new float3[] { new(-1.0f, 0.0f, 0.0f), new(0.0f, 1.0f, 0.0f), new(0.0f, -1.0f, 0.0f), new(0.0f, 1.0f, 0.0f), new(1.0f, 0.0f, 0.0f), new(0.0f, -1.0f, 0.0f) }; var inputVertexPositions = new float3[] { new(-1.0f, 0.0f, 0.0f), new(0.0f, 1.0f, 0.0f), new(0.0f, -1.0f, 0.0f), new(0.0f, 1.0f, 0.0f), new(1.0f, 0.0f, 0.0f), new(0.0f, -2.0f, 0.0f) }; ChartIdentification.InitializeRepresentatives(vertexChartIds); ChartIdentification.UnionDuplicateVertices(inputVertexUvs, inputVertexPositions, inputVertexNormals, vertexChartIds, true); ChartIdentification.FindRepresentatives(vertexChartIds); Assert.AreEqual(0, vertexChartIds[0]); Assert.AreEqual(3, vertexChartIds[1]); Assert.AreEqual(2, vertexChartIds[2]); Assert.AreEqual(3, vertexChartIds[3]); Assert.AreEqual(4, vertexChartIds[4]); Assert.AreEqual(5, vertexChartIds[5]); } } } #endif