ARLightEstimationDataTests.cs 6.87 KB
using NUnit.Framework;
using System.Collections.Generic;

namespace UnityEngine.XR.ARFoundation
{
    [TestFixture]
    public class ARLightEstimationDataTestFixture
    {
        [Test]
        public void ARLightEstimationData_TestBrightnessConversion()
        {
            Dictionary<float, float> brightnessToLumensMapping = new Dictionary<float, float> {
                // {brightness (0 -> 1), intensity in lumens (0 -> 2000)}
                {0f, 0f},
                {-1f, 0f},
                {0.25f, 500f},
                {0.5f, 1000f},
                {0.75f, 1500f},
                {1f, 2000f},
                {1.3f, 2000f}
            };

            var obj = new ARLightEstimationData();
            foreach (var testPair in brightnessToLumensMapping)
            {
                // If intensity is not filled, expect it to be converted based on the brightness.
                obj.averageIntensityInLumens = null;
                obj.averageBrightness = testPair.Key;
                Assert.AreEqual(obj.averageIntensityInLumens, testPair.Value, "Conversion from averageBrightness to averageIntensityInLumens failed.");
            }

            obj.averageBrightness = 0.5f;
            obj.averageIntensityInLumens = 5000f;
            Assert.AreEqual(obj.averageBrightness, 0.5f, "If averageBrightness is set, no conversion should be performed.");
        }

        [Test]
        public void ARLightEstimationData_TestIntensityConversion()
        {
            Dictionary<float, float> brightnessToLumensMapping = new Dictionary<float, float> {
                // {intensity in lumens (0 -> 2000), brightness (0 -> 1)}
                {0f, 0f},
                {-100f, 0f},
                {500f, 0.25f},
                {1000f, 0.5f},
                {1500f, 0.75f},
                {2000f, 1f},
                {2500f, 1f}
            };

            var obj = new ARLightEstimationData();
            foreach (var testPair in brightnessToLumensMapping)
            {
                // If brightness is not filled, expect it to be converted based on the intensity.
                obj.averageIntensityInLumens = testPair.Key;
                obj.averageBrightness = null;
                Assert.AreEqual(obj.averageBrightness, testPair.Value, "Conversion from averageIntensityInLumens to averageBrightness failed.");
            }

            obj.averageBrightness = 0.5f;
            obj.averageIntensityInLumens = 5000f;
            Assert.AreEqual(obj.averageIntensityInLumens, 5000f, "If averageIntensityInLumens is set, no conversion should be performed.");
        }

        [Test]
        public void ARLightEstimationData_TestGetHashCode()
        {
            var obj1 = new ARLightEstimationData();
            var obj2 = new ARLightEstimationData();

            obj1.averageIntensityInLumens = 1115f;
            obj1.averageBrightness = null;
            obj2.averageIntensityInLumens = 1233f;
            obj2.averageBrightness = null;
            Assert.AreNotEqual(obj1.GetHashCode(), obj2.GetHashCode(), "Hash codes should differ when averageIntensityInLumens is different.");

            obj1.averageBrightness = 0.5f;
            obj1.averageIntensityInLumens = null;
            obj2.averageBrightness = 0.6f;
            obj2.averageIntensityInLumens = null;
            Assert.AreNotEqual(obj1.GetHashCode(), obj2.GetHashCode(), "Hash codes should differ when averageBrightness is different.");

            obj1.averageBrightness = 0.5f;
            obj1.averageIntensityInLumens = null;
            obj2.averageBrightness = 0.5f;
            obj2.averageIntensityInLumens = null;
            Assert.AreEqual(obj1.GetHashCode(), obj2.GetHashCode(), "Hash codes should match when averageBrightness is same.");
        }

        [Test]
        public void ARLightEstimationData_TestEquality()
        {
            var obj1 = new ARLightEstimationData();
            var obj2 = new ARLightEstimationData();
            Assert.AreEqual(obj1, obj2, "Freshly created ARLightEstimationData objects should match.");

            obj1.averageBrightness = 0.1f;
            obj2.averageBrightness = 0.5f;
            Assert.AreNotEqual(obj1, obj2, "ARLightEstimationData with different averageBrightness values should not match.");

            obj1.averageBrightness = 0.5f;
            obj2.averageBrightness = 0.5f;
            Assert.AreEqual(obj1, obj2, "ARLightEstimationData with same averageBrightness values should match.");

            obj1.averageBrightness = null;
            obj2.averageBrightness = 0.5f;
            Assert.AreNotEqual(obj1, obj2, "ARLightEstimationData with different averageBrightness values should not match.");

            obj1.averageIntensityInLumens = 1000;
            obj2.averageBrightness = 0.5f;
            Assert.AreEqual(obj1, obj2, "ARLightEstimationData with same calculated brightness values should match.");

            obj1.averageIntensityInLumens = 2000;
            obj2.averageBrightness = 0.5f;
            Assert.AreNotEqual(obj1, obj2, "ARLightEstimationData with different calculated brightness values should not match.");

            obj1.averageIntensityInLumens = null;
            obj1.averageBrightness = null;
            obj1.colorCorrection = new Color(1f, 0.5f, 0.5f, 1f);

            obj2.averageIntensityInLumens = null;
            obj2.averageBrightness = null;
            obj2.colorCorrection = new Color(1f, 0.5f, 0.5f, 1f);
            Assert.AreEqual(obj1, obj2, "ARLightEstimationData with same color correction should match.");

            obj1.averageIntensityInLumens = null;
            obj1.averageBrightness = null;
            obj1.averageColorTemperature = 5230f;

            obj2.averageIntensityInLumens = null;
            obj2.averageBrightness = null;
            obj2.averageColorTemperature = 5230f;
            Assert.AreEqual(obj1, obj2, "ARLightEstimationData with same color temperature should match.");

            obj1.averageIntensityInLumens = null;
            obj1.averageBrightness = null;
            obj1.averageColorTemperature = 5230f;
            obj1.colorCorrection = new Color(1f, 0.5f, 0.5f, 1f);

            obj2.averageIntensityInLumens = null;
            obj2.averageBrightness = null;
            obj2.averageColorTemperature = 5230f;
            obj2.colorCorrection = new Color(1f, 0.5f, 0.5f, 1f);
            Assert.AreEqual(obj1, obj2, "ARLightEstimationData with same properties should match.");

            obj1.averageIntensityInLumens = null;
            obj1.averageBrightness = null;
            obj1.averageColorTemperature = 5230f;
            obj1.colorCorrection = new Color(1f, 0.5f, 0.5f, 1f);

            obj2.averageIntensityInLumens = 2300;
            obj2.averageBrightness = 0.5f;
            obj2.averageColorTemperature = 1222f;
            obj2.colorCorrection = new Color(1f, 1f, 0.5f, 1f);
            Assert.AreNotEqual(obj1, obj2, "ARLightEstimationData with different properties should not match.");
        }
    }
}