Example #1
0
        public void ArraySlice_TestSlice()
        {
            var a          = new[] { 1.0, 2.71828, 3.14, 4, 4.99999, 42, 1024 };
            var slicea     = new ArraySlice <double>(a, 2, 3);
            var sliceaSame = new ArraySlice <double>(a, 2, 3);

            var b      = new[] { 1.0, 2, 3, 4, 5, 99, 1024 };
            var sliceb = new ArraySlice <double>(b, 2, 3);

            Assert.AreEqual(a, slicea.List);
            Assert.AreEqual(2, slicea.Offset);
            Assert.AreEqual(3, slicea.Count);
            Assert.IsTrue(slicea.Equals(sliceaSame));
            Assert.IsTrue(slicea.Equals((object)sliceaSame));
            Assert.AreEqual(sliceaSame.GetHashCode(), sliceaSame.GetHashCode());
            Assert.IsTrue(slicea == sliceaSame);
            Assert.IsTrue(slicea != sliceb);

            Assert.IsTrue(ApproximatelyEqual(4.99999, slicea[2]));
            Assert.AreEqual(1, slicea.IndexOf(4));
            Assert.AreEqual(-1, slicea.IndexOf(1025));
            Assert.IsTrue(slicea.Contains(4));
            Assert.IsFalse(slicea.Contains(1025));
            Assert.IsTrue(ApproximatelyEqual(12.13999, slicea.Sum()));

            IList <double> asList = slicea;

            Assert.IsTrue(ApproximatelyEqual(4.99999, asList[2]));
            Assert.AreEqual(1, asList.IndexOf(4));
            Assert.AreEqual(-1, asList.IndexOf(1025));
            Assert.IsTrue(asList.Contains(4));
            Assert.IsFalse(asList.Contains(1025));
            Assert.IsTrue(ApproximatelyEqual(12.13999, asList.Sum()));
        }
Example #2
0
        public void ArraySlice_WorksLikeArray()
        {
            var a          = new[] { 1.0, 2.71828, 3.14, 4, 4.99999, 42, 1024 };
            var slicea     = new ArraySlice <double>(a);
            var sliceaSame = new ArraySlice <double>(a);

            var b      = new[] { 1.0, 2, 3, 4, 5, 99, 1024 };
            var sliceb = new ArraySlice <double>(b);

            Assert.AreEqual(a, slicea.List);
            Assert.AreEqual(0, slicea.Offset);
            Assert.AreEqual(7, slicea.Count);
            Assert.IsTrue(slicea.Equals(sliceaSame));
            Assert.IsTrue(slicea.Equals((object)sliceaSame));
            Assert.AreEqual(sliceaSame.GetHashCode(), sliceaSame.GetHashCode());
            Assert.IsTrue(slicea == sliceaSame);
            Assert.IsTrue(slicea != sliceb);

            Assert.IsTrue(ApproximatelyEqual(4, slicea[3]));
            Assert.AreEqual(6, slicea.IndexOf(1024));
            Assert.AreEqual(-1, slicea.IndexOf(1025));
            Assert.IsTrue(slicea.Contains(1024));
            Assert.IsFalse(slicea.Contains(1025));
            Assert.IsTrue(ApproximatelyEqual(1081.85827, slicea.Sum()));

            IList <double> asList = slicea;

            Assert.IsTrue(ApproximatelyEqual(4, asList[3]));
            Assert.AreEqual(6, asList.IndexOf(1024));
            Assert.AreEqual(-1, asList.IndexOf(1025));
            Assert.IsTrue(asList.Contains(1024));
            Assert.IsFalse(asList.Contains(1025));
            Assert.IsTrue(ApproximatelyEqual(1081.85827, asList.Sum()));
        }
        private bool IsSwitchable(ArraySlice<DecisionTest> S)
        {
            long elementCount = S.Sum(test => test.Interval.LongSize);
            if (elementCount > platform.MaxSwitchElementCount)
            {
                return false;
            }

            var rangeSize = S[S.Count - 1].Interval.Last
                          - S[0].Interval.First
                          + 1;

            double density = elementCount / (double)rangeSize;
            return density > platform.MinSwitchDensity;
        }
        public void TestAllMethods()
        {
            // Define variables and constants
            ModelInstanceManager testMIM          = new ModelInstanceManager();
            const int            NUM_ALLOCATIONS  = 3000;
            const int            NUM_MODELS       = 7;
            const int            NUM_MATERIALS    = 11;
            const int            NUM_SCENE_LAYERS = 3;

            ConstantBuffer <Vector4> fsCBuffer = BufferFactory.NewConstantBuffer <Vector4>().WithUsage(ResourceUsage.DiscardWrite);
            FragmentShader           testFS    = new FragmentShader(@"Tests\SimpleFS.cso", new ConstantBufferBinding(0U, "MaterialProperties", fsCBuffer));

            Material[] materials = new Material[NUM_MATERIALS];
            for (int i = 0; i < NUM_MATERIALS; ++i)
            {
                materials[i] = new Material(i.ToString(), testFS);
            }

            // Set up context
            ModelInstanceHandle[] instances = new ModelInstanceHandle[NUM_ALLOCATIONS];

            // Execute
            for (int i = 0; i < NUM_ALLOCATIONS; i++)
            {
                Transform initialTransform = new Transform(
                    Vector3.ONE * i,
                    Quaternion.FromAxialRotation(Vector3.ONE * (i + 1), MathUtils.PI),
                    Vector3.ONE * -i
                    );
                instances[i] = testMIM.AllocateInstance(materials[i % NUM_MATERIALS].Index, (uint)i % NUM_MODELS, (uint)i % NUM_SCENE_LAYERS, initialTransform);
            }

            for (int i = 0; i < NUM_ALLOCATIONS; i += 2)
            {
                instances[i].Transform = instances[i].Transform.With(scale: Vector3.FORWARD * i);
            }

            // Assert outcome
            RenderingModule.RenderStateBarrier.FreezeMutations();
            ArraySlice <KeyValuePair <Material, ModelInstanceManager.MIDArray> > midData = testMIM.GetModelInstanceData();

            RenderingModule.RenderStateBarrier.UnfreezeMutations();
            Assert.AreEqual(NUM_ALLOCATIONS, midData.Sum(kvp => {
                unsafe {
                    int val = 0;
                    for (int i = 0; i < kvp.Value.Length; ++i)
                    {
                        if (kvp.Value.Data[i].InUse)
                        {
                            ++val;
                        }
                    }
                    return(val);
                }
            }));

            unsafe {
                foreach (KeyValuePair <Material, ModelInstanceManager.MIDArray> kvp in midData)
                {
                    Assert.IsTrue(materials.Contains(kvp.Key));
                    for (uint i = 0U; i < kvp.Value.Length; ++i)
                    {
                        if (!kvp.Value.Data[i].InUse)
                        {
                            continue;
                        }
                        Assert.AreEqual(1, instances.Count(mih => mih.Transform == kvp.Value.Data[i].Transform));
                    }
                }
            }

            materials.ForEach(mat => mat.Dispose());
            testFS.Dispose();
            fsCBuffer.Dispose();
        }