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