示例#1
0
 protected override void OnCreate()
 {
     m_EndSimulationEcbSystem = World
                                .GetOrCreateSystem <EndSimulationEntityCommandBufferSystem>();
     randomSystem    = World.GetOrCreateSystem <RandomSystem>();
     worldGridSystem = World.GetOrCreateSystem <WorldGridSystem>();
 }
示例#2
0
        public void MedianTests(int maxCount)
        {
            Test.Begin("median tests");
            foreach (var pm in new[] { false, true })
            {
                for (int count = 1; count <= maxCount; count *= 2)
                {
                    var rnd   = new RandomSystem(count);
                    var array = rnd.CreatePermutationArray(count);
                    var a     = new int[count];

                    Test.Begin("{0}quick-median {1} items", pm ? "permutation " : "", count);
                    if (pm)
                    {
                        for (int i = 0; i < a.Length; i++)
                        {
                            a.SetByIndex(pi => pi);
                            a.PermutationQuickMedianAscending(array, i);
                            Test.IsTrue(array[a[i]] == i);
                        }
                    }
                    else
                    {
                        for (int i = 0; i < a.Length; i++)
                        {
                            array.CopyTo(a, 0);
                            a.QuickMedianAscending(i);
                            Test.IsTrue(a[i] == i);
                        }
                    }
                    Test.End();
                }
            }
            Test.End();
        }
示例#3
0
        public static void JulianDay()
        {
            var rnd = new RandomSystem(123);

            TestDate(new DateTime(2019, 3, 5, 12, 0, 0, 0));
            TestDate(new DateTime(2019, 3, 5, 12, 1, 0, 0));
            TestDate(new DateTime(2019, 3, 5, 11, 59, 0, 0));

            // https://en.wikipedia.org/wiki/Julian_day
            // 00:30:00.0 UT January 1, 2013, is 2 456 293.520 833
            var test2 = new DateTime(2013, 1, 1, 0, 30, 0);

            TestDate(test2);

            for (int i = 0; i < 10000000; i++)
            {
                var lg = rnd.UniformLong();
                if (lg > DateTime.MaxValue.Ticks || lg < DateTime.MinValue.Ticks)
                {
                    continue;
                }

                var dt = new DateTime(lg);

                TestDate(dt);
            }

            Report.Line("Times: (NOTE benchmark meaningless, measurement of first algorithm will always have x3 time)");
            Report.Line("GetDatePart: {0}ms", sw0.Elapsed.TotalMilliseconds);
            Report.Line("ComputeJulianDayNREL: {0}ms", sw1.Elapsed.TotalMilliseconds);
            Report.Line("ComputeJulianDayInt2: {0}ms", sw2.Elapsed.TotalMilliseconds);
            Report.Line("ComputeJulianDayMeeus: {0}ms", sw3.Elapsed.TotalMilliseconds);
            Report.Line("ComputeJulianDayInt: {0}ms", sw4.Elapsed.TotalMilliseconds);
            Report.Line("ComputeJulianDayRaw: {0}ms", sw5.Elapsed.TotalMilliseconds);
        }
        public static void MatrixRepresentation()
        {
            var rnd = new RandomSystem(1);

            for (int i = 0; i < iterations; i++)
            {
                var q1 = GetRandomQuat(rnd);
                var q2 = GetRandomQuat(rnd);

                var m1 = (M44d)q1;
                var m2 = (M44d)q2;

                var q1_plus_q2 = (M44d)(q1 + q2);
                var m1_plus_m2 = m1 + m2;

                var q1q2 = (M44d)(q1 * q2);
                var m1m2 = m1 * m2;

                var q2q1 = (M44d)(q2 * q1);
                var m2m1 = m2 * m1;

                Assert.IsTrue(Fun.ApproximateEquals(q1_plus_q2, m1_plus_m2, 0.00001));
                Assert.IsTrue(Fun.ApproximateEquals(q1q2, m1m2, 0.00001));
                Assert.IsTrue(Fun.ApproximateEquals(q2q1, m2m1, 0.00001));
            }
        }
示例#5
0
        public static void OrthoNormalOrientation()
        {
            // Previous implementation
            Func <Trafo3d, Trafo3d> reference = trafo =>
            {
                var x = trafo.Forward.C0.XYZ.Normalized; // TransformDir(V3f.XAxis)
                var y = trafo.Forward.C1.XYZ.Normalized; // TransformDir(V3f.YAxis)
                var z = trafo.Forward.C2.XYZ.Normalized; // TransformDir(V3f.ZAxis)

                y = z.Cross(x).Normalized;
                z = x.Cross(y).Normalized;

                return(Trafo3d.FromBasis(x, y, z, V3d.Zero));
            };

            var rnd = new RandomSystem(1);

            TrafoTesting.GenericTest(rnd =>
            {
                var trafo = TrafoTesting.GetRandomTrafo(rnd);

                var res     = trafo.GetOrthoNormalOrientation();
                var res_ref = reference(trafo);

                TrafoTesting.AreEqual(res, res_ref);
            });
        }
        protected override void OnCreate()
        {
            base.OnCreate();

            _endSimulationEcbSystem = World.GetOrCreateSystem <EndSimulationEntityCommandBufferSystem>();
            _randomSystem           = World.GetOrCreateSystem <RandomSystem>();
        }
示例#7
0
        public void CreateStringTable(int count, int subCount)
        {
            Report.BeginTimed("creating string table with {0} items", count);
            m_stringTable = new string[count];
            for (int i = 0; i < count; i++)
            {
                m_stringTable[i] = Guid.NewGuid().ToString();
            }
            //+ Guid.NewGuid().ToString() + Guid.NewGuid().ToString()
            //+ Guid.NewGuid().ToString() + Guid.NewGuid().ToString();
            Report.End();
            m_symbolTable = new Symbol[count];
            Report.BeginTimed("create symbols from strings");
            for (int i = 0; i < count; i++)
            {
                m_symbolTable[i] = Symbol.Create(m_stringTable[i]);
            }
            Report.End();
            Report.BeginTimed("create subset");
            var rnd  = new RandomSystem(13);
            var perm = rnd.CreatePermutationArray(count);

            m_stringSubsetTable = new string[subCount];
            m_symbolSubsetTable = new Symbol[subCount];
            for (int i = 0; i < subCount; i++)
            {
                m_stringSubsetTable[i] = m_stringTable[perm[i]];
                m_symbolSubsetTable[i] = m_symbolTable[perm[i]];
            }
            Report.End();
        }
        public __type__()
        {
            var rnd = new RandomSystem(1);

            indices.SetByIndex(i => rnd.UniformV2i(__n__));
            vectors.SetByIndex(i => new __vtype__(rnd.CreateUniformDoubleArray(__n__)));
            matrices.SetByIndex(i => new __nmtype__(rnd.CreateUniformDoubleArray(__nm__)));
        }
示例#9
0
        public MatrixMinor()
        {
            var rnd = new RandomSystem(1);

            A.SetByIndex(i => new M44d(rnd.CreateUniformDoubleArray(16)));
            rows.SetByIndex(i => rnd.UniformInt(4));
            columns.SetByIndex(i => rnd.UniformInt(4));
        }
示例#10
0
        static void Main(string[] args)
        {
            // This initialization is required to be able to use DeviL for loading and saving PixImages.
            Aardvark.Base.Aardvark.Init();

            var rnd = new RandomSystem(1);

            var series = new(string, IRandomSeries)[]
示例#11
0
        public Indexers3()
        {
            var rnd = new RandomSystem(1);

            indices.SetByIndex(i => rnd.UniformV2i(3));
            vectors.SetByIndex(i => new Vector(rnd.CreateUniformDoubleArray(3)));
            matrices.SetByIndex(i => new Matrix(rnd.CreateUniformDoubleArray(9)));
        }
示例#12
0
        /// <summary>
        /// Runs the given test function multiple times and provides a RandomSystem.
        /// </summary>
        public static void GenericTest(Action <RandomSystem, int> f)
        {
            var rnd = new RandomSystem(1);

            for (int i = 0; i < Iterations; i++)
            {
                f(rnd, i);
            }
        }
示例#13
0
 private IEnumerator TPRandomToggleObject(int repeat)
 {
     while (repeat >= 0)
     {
         GameObject selectedObject = RandomSystem.PickObjectWithProbability(probabilityElements);
         selectedObject.SetActive(!selectedObject.activeSelf);
         repeat--;
         yield return(ExampleHelper.WaitSecond);
     }
 }
示例#14
0
        public void BoxTransformTest()
        {
            var cnt    = 10000;
            var rnd    = new RandomSystem(1);
            var trafos = new M44d[cnt].SetByIndex(i => new M44d(rnd.CreateUniformDoubleArray(16)));
            //var trafos = new M44d[cnt].SetByIndex(i => M44d.FromBasis(rnd.UniformV3d(), rnd.UniformV3d(), rnd.UniformV3d(), rnd.UniformV3d()));
            //var trafos = new M44d[cnt].SetByIndex(i => M44d.Translation(rnd.UniformV3d()));
            //var trafos = new M44d[cnt].SetByIndex(i => M44d.Rotation(rnd.UniformV3d()) * M44d.Translation(rnd.UniformV3d()));
            var boxes    = new Box3d[cnt].SetByIndex(i => Box3d.FromCenterAndSize(rnd.UniformV3d(), rnd.UniformV3d()));
            var refBoxes = boxes.Map((b, i) => Transform1(b, trafos[i]));

            for (int j = 0; j < 10; j++)
            {
                Report.BeginTimed("Transform Boxes Aardvark");
                for (int i = 0; i < trafos.Length; i++)
                {
                    var test = boxes[i].Transformed(trafos[i]);
                    Assert.IsTrue(test.Min.ApproximateEquals(refBoxes[i].Min, 1e-7) && test.Max.ApproximateEquals(refBoxes[i].Max, 1e-7));
                }
                Report.End();

                Report.BeginTimed("Transform Boxes1");
                for (int i = 0; i < trafos.Length; i++)
                {
                    var test = Transform1(boxes[i], trafos[i]);
                    Assert.IsTrue(test.Min.ApproximateEquals(refBoxes[i].Min, 1e-7) && test.Max.ApproximateEquals(refBoxes[i].Max, 1e-7));
                }
                Report.End();


                Report.BeginTimed("Transform Boxes2");
                for (int i = 0; i < trafos.Length; i++)
                {
                    var test = Transform2(boxes[i], trafos[i]);
                    Assert.IsTrue(test.Min.ApproximateEquals(refBoxes[i].Min, 1e-7) && test.Max.ApproximateEquals(refBoxes[i].Max, 1e-7));
                }
                Report.End();

                Report.BeginTimed("Transform Boxes3");
                for (int i = 0; i < trafos.Length; i++)
                {
                    var test = Transform3(boxes[i], trafos[i]);
                    Assert.IsTrue(test.Min.ApproximateEquals(refBoxes[i].Min, 1e-7) && test.Max.ApproximateEquals(refBoxes[i].Max, 1e-7));
                }
                Report.End();

                Report.BeginTimed("Transform Boxes4");
                for (int i = 0; i < trafos.Length; i++)
                {
                    var test = Transform4(boxes[i], trafos[i]);
                    Assert.IsTrue(test.Min.ApproximateEquals(refBoxes[i].Min, 1e-7) && test.Max.ApproximateEquals(refBoxes[i].Max, 1e-7));
                }
                Report.End();
            }
        }
示例#15
0
        public void SortTests(int maxCount)
        {
            var sortDict = new Dict <string, Action <int[]> >
            {
                { "heap", SortingExtensions.HeapSortAscending },
                { "quick", SortingExtensions.QuickSortAscending },
                { "smooth", SortingExtensions.SmoothSortAscending },
                { "tim", SortingExtensions.TimSortAscending },
            };

            var permSortDict = new Dict <string, Action <int[], int[]> >
            {
                { "heap", SortingExtensions.PermutationHeapSortAscending },
                { "quick", SortingExtensions.PermutationQuickSortAscending },
                { "smooth", SortingExtensions.PermutationSmoothSortAscending },
                { "tim", SortingExtensions.PermutationTimSortAscending },
            };

            Test.Begin("sort tests");
            foreach (var pm in new[] { false, true })
            {
                for (int count = 1; count <= maxCount; count *= 2)
                {
                    var rnd   = new RandomSystem(count);
                    var array = rnd.CreatePermutationArray(count);
                    var a     = new int[count];

                    foreach (var sort in new[] { "heap", "quick", "smooth", "tim" })
                    {
                        Test.Begin("{0}{1}-sort {2} items", pm ? "permutation " : "", sort, count);
                        if (pm)
                        {
                            a.SetByIndex(pi => pi);
                            permSortDict[sort](a, array);
                            for (int i = 0; i < count; i++)
                            {
                                Test.IsTrue(array[a[i]] == i);
                            }
                        }
                        else
                        {
                            array.CopyTo(a, 0);
                            sortDict[sort](a);
                            for (int i = 0; i < count; i++)
                            {
                                Test.IsTrue(a[i] == i);
                            }
                        }
                        Test.End();
                    }
                }
            }
            Test.End();
        }
示例#16
0
        public void InPlaceTransposeTest()
        {
            var rand = new RandomSystem();

            var m          = new M44d(rand.CreateUniformDoubleArray(16));
            var transposed = m.Transposed;

            Mat.Transpose(ref m);

            Assert.IsTrue(Fun.ApproximateEquals(m, transposed, 0.0001));
        }
        public IntegerPowerLong()
        {
            var rnd = new RandomSystem(1);

            numbers.SetByIndex(i =>
            {
                var x = rnd.UniformDouble() - 0.5;
                x    += 0.1 * Fun.Sign(x);
                return((long)(x * 10));
            });
            exponents.SetByIndex(i => rnd.UniformInt(32));
        }
示例#18
0
        public void TrafoDecomposeTest()
        {
            var rnd = new RandomSystem();

            for (int i = 0; i < 100000; i++)
            {
                var rot   = rnd.UniformV3dFull() * Constant.PiTimesFour - Constant.PiTimesTwo;
                var trans = rnd.UniformV3dFull() * 10 - 5;
                var scale = rnd.UniformV3dFull() * 4 - 2;

                TestDecompose(scale, rot, trans);
            }
        }
示例#19
0
        public static void IdentityTest()
        {
            var rnd = new RandomSystem(1);

            for (int i = 0; i < iterations; i++)
            {
                var q  = GetRandomQuat(rnd);
                var id = QuaternionD.Identity;

                Assert.IsTrue(Fun.ApproximateEquals(q * id, q, 0.00001));
                Assert.IsTrue(Fun.ApproximateEquals(id * q, q, 0.00001));
                Assert.IsTrue(Fun.ApproximateEquals(id * id, id, 0.00001));
            }
        }
示例#20
0
        public static void Comparison()
        {
            var rnd = new RandomSystem(1);

            for (int i = 0; i < iterations; i++)
            {
                var q0 = GetRandomQuat(rnd);
                var q1 = new QuaternionD((V4d)q0 + V4d.OIOI);

                Assert.IsFalse(q0.Equals(q1));
                Assert.IsFalse(q0 == q1);
                Assert.IsTrue(q0 != q1);
            }
        }
示例#21
0
        public static void ToStringAndParse()
        {
            var rnd = new RandomSystem(1);

            for (int i = 0; i < iterations; i++)
            {
                var q = GetRandomQuat(rnd);

                var str    = q.ToString();
                var parsed = QuaternionD.Parse(str);

                Assert.IsTrue(Fun.ApproximateEquals(parsed, q, 0.00001));
            }
        }
示例#22
0
        public void MatrixMultiplicationTest()
        {
            using (Report.JobTimed("Matrix multiplication tests"))
            {
                var rand = new RandomSystem();

                Test.Begin("Row vector with matrix");
                var m = new M44d(rand.CreateUniformDoubleArray(16));
                var v = new V4d(rand.CreateUniformDoubleArray(4));

                Test.IsTrue(v * m == m.Transposed * v);
                Test.End();
            }
        }
示例#23
0
        public void ConcurrentSymbolDictTest(int rounds, int tasks)
        {
            int count = m_stringTable.Length;
            int block = count / tasks;

            var rnd  = new RandomSystem();
            var perm = new int[count].SetByIndex(i => i);

            var map = new SymbolDict <int>().AsConcurrent();

            // var map = new FastConcurrentSymbolDict<int>();

            Test.Begin("parallel adding and removing tests {0}", count);
            for (int r = 0; r < rounds; r++)
            {
                Test.Begin("round {0}", r);
                Test.Begin("adding in parallel");
                Parallel.For(0, tasks, t =>
                {
                    for (int i = t * block, e = i + block; i < e; i++)
                    {
                        map[m_symbolTable[perm[i]]] = i;
                    }
                });
                Test.IsTrue(count == map.Count);
                Test.End();

                Test.Begin("checking");
                for (int i = 0; i < count; i++)
                {
                    Test.IsTrue(map[m_symbolTable[perm[i]]] == i);
                }
                Test.End();

                rnd.Randomize(perm);
                Test.Begin("removing in parallel");
                Parallel.For(0, tasks, t =>
                {
                    for (int i = t * block, e = i + block; i < e; i++)
                    {
                        map.Remove(m_symbolTable[perm[i]]);
                    }
                });
                Test.IsTrue(map.Count == 0);
                Test.End();
                Test.End();
            }
            Test.End();
        }
示例#24
0
        public void TransformedInfinite()
        {
            var rnd = new RandomSystem(123);

            for (int i = 0; i < 1000; i++)
            {
                var mat  = new M44d(rnd.CreateUniformDoubleArray(16));
                var test = Box3d.Infinite.Transformed(mat);
                if (test.Min.AnyInfinity || test.Max.AnyInfinity)
                {
                    Report.Line("Max -> Infinite");                                               // NOTE: some max values will be infinite
                }
                Assert.False(test.Max.AnyNaN || test.Min.AnyNaN || test.IsEmpty);
            }
        }
示例#25
0
        public static Trafo3d GetRandomTrafo(RandomSystem rnd, bool withPerspective)
        {
            var rot   = rnd.UniformV3dFull() * Constant.PiTimesFour - Constant.PiTimesTwo;
            var trans = rnd.UniformV3dFull() * 10 - 5;
            var scale = rnd.UniformV3dFull() * 4 - 2;

            var trafo = Trafo3d.FromComponents(scale, rot, trans);

            if (withPerspective)
            {
                trafo *= Trafo3d.PerspectiveProjectionRH(-1, 1, -1, 1, rnd.UniformDouble(), rnd.UniformDouble() * 100);
            }

            return(trafo);
        }
示例#26
0
        public void ListHeapTest(int count, bool print)
        {
            Test.Begin("heap size {0}", count);
            var rnd = new RandomSystem(count);

            Report.BeginTimed("creating array");
            var array = rnd.CreatePermutationArray(count);

            Report.End();
            var heap = new List <int>();

            Report.BeginTimed("enqueueing items");
            foreach (var item in array)
            {
                heap.HeapAscendingEnqueue(item);
            }
            Report.End();

            Test.Begin("dequeueing items");

            var pos = 0;

            if (print)
            {
                while (heap.Count > 0)
                {
                    var item = heap.HeapAscendingDequeue();
                    Test.IsTrue(pos == item, "item[{0}] = {1}", pos, item);
                    ++pos;
                    Report.Text("{0,3},", item);
                    if ((pos & 0xf) == 0)
                    {
                        Report.Line();
                    }
                }
            }
            else
            {
                while (heap.Count > 0)
                {
                    var item = heap.HeapAscendingDequeue();
                    Test.IsTrue(pos == item, "item[{0}] = {1}", pos, item);
                    ++pos;
                }
            }
            Test.End();
            Test.End();
        }
示例#27
0
        public void TransformedEmpty()
        {
            var rnd = new RandomSystem(123);

            for (int i = 0; i < 1000; i++)
            {
                var mat  = new M44d(rnd.CreateUniformDoubleArray(16));
                var test = Box3d.Invalid.Transformed(mat);
                Assert.True(test.IsEmpty);
                Assert.False(test.Max.AnyNaN || test.Min.AnyNaN || test.IsNonEmpty);
                if (test.Min.AnyInfinity || test.Max.AnyInfinity)
                {
                    Report.Line("Max -> Infinite");
                }
            }
        }
    private IEnumerator TPObjectPoolSpawnObjects(UnityPool <GameObject> pool)
    {
        isRunning = true;
        GameObject prevObj = pool.Get();

        prevObj.transform.position = RandomSystem.InsideUnitSquare() * 5;
        while (run)
        {
            yield return(ExampleHelper.WaitSecond);

            pool.Push(prevObj);

            prevObj = pool.Get();
            prevObj.transform.position = RandomSystem.InsideUnitSquare() * 5;
            prevObj.SetActive(true);
        }
        isRunning = false;
    }
示例#29
0
        public static void NormalizeTest()
        {
            var rnd = new RandomSystem(1);

            for (int i = 0; i < iterations; i++)
            {
                var q = GetRandomQuat(rnd);

                // Normalized property
                var q1 = q.Normalized;

                // Normalize method
                var q2 = new QuaternionD(q);
                Quaternion.Normalize(ref q2);

                Assert.IsTrue(Fun.ApproximateEquals(q1.Norm, 1, 0.00001));
                Assert.IsTrue(Fun.ApproximateEquals(q2.Norm, 1, 0.00001));
            }
        }
        public AngleBetweenFloat()
        {
            var rnd = new RandomSystem(1);

            A.SetByIndex(i => rnd.UniformV3fDirection());
            angles.SetByIndex(i => rnd.UniformFloat() * (float)Constant.Pi);
            B.SetByIndex(i =>
            {
                V3f v;
                do
                {
                    v = rnd.UniformV3fDirection();
                }while (v.Dot(A[i]).IsTiny());

                V3f axis = v.Cross(A[i]).Normalized;

                return(M44f.Rotation(axis, angles[i]).TransformDir(A[i]));
            });
        }