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())); }
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(); }