Exemplo n.º 1
0
        public void TestSparseEquality()
        {
            Assert.IsTrue(SparseWeight8.AreEqual(SparseWeight8.Create(0, 1), SparseWeight8.Create(0, 1)));

            Assert.IsFalse(SparseWeight8.AreEqual(SparseWeight8.Create(0, 1), SparseWeight8.Create(0, 1, 0.25f)));
            Assert.IsFalse(SparseWeight8.AreEqual(SparseWeight8.Create(0, 1), SparseWeight8.Create(1, 0)));

            // check if two "half weights" are equal to one "full weight"
            //Assert.IsTrue(SparseWeight8.AreWeightsEqual(SparseWeight8.Create((3, 5), (3, 5)), SparseWeight8.Create((3, 10))));
        }
Exemplo n.º 2
0
        public void TestSparseCreation(params float[] array1)
        {
            var array2 = CreateSparseCompatibleArray(array1);

            var array3 = array1
                         .Select((val, idx) => (idx, val))
                         .Where(item => item.val != 0)
                         .Reverse()
                         .ToArray();

            // creation mode 1
            var sparse = SparseWeight8.Create(array1);

            Assert.AreEqual(array2.Sum(), sparse.WeightSum);
            CollectionAssert.AreEqual(array2, sparse.Expand(array2.Length));

            // creation mode 2
            var indexedSparse = SparseWeight8.Create(array3);

            Assert.AreEqual(array2.Sum(), indexedSparse.WeightSum, 0.000001f);
            CollectionAssert.AreEqual(array2, indexedSparse.Expand(array2.Length));

            Assert.IsTrue(SparseWeight8.AreEqual(sparse, indexedSparse));

            // sort by weights
            var sByWeights = SparseWeight8.OrderedByWeight(sparse);

            Assert.AreEqual(array2.Sum(), sByWeights.WeightSum);
            CollectionAssert.AreEqual(array2, sByWeights.Expand(array2.Length));
            CheckWeightOrdered(sByWeights);

            // sort by indices
            var sByIndices = SparseWeight8.OrderedByIndex(sByWeights);

            Assert.AreEqual(array2.Sum(), sByIndices.WeightSum);
            CollectionAssert.AreEqual(array2, sByIndices.Expand(array2.Length));
            CheckIndexOrdered(sByWeights);

            // equality
            Assert.IsTrue(SparseWeight8.AreEqual(sByIndices, sByWeights));
            Assert.AreEqual(sByIndices.GetHashCode(), sByWeights.GetHashCode());

            // sum
            var sum = SparseWeight8.Add(sByIndices, sByWeights);

            Assert.AreEqual(array2.Sum() * 2, sum.WeightSum);

            // complement normalization
            if (!array2.Any(item => item < 0))
            {
                Assert.GreaterOrEqual(sparse.GetNormalizedWithComplement(int.MaxValue).WeightSum, 1);
            }
        }