public virtual void TestAddSparseToDense(double[] dense1, int sparseIndex, double v) { ConcatVector v1 = new ConcatVector(1); v1.SetDenseComponent(0, dense1); ConcatVector v2 = new ConcatVector(1); v2.SetSparseComponent(0, (int)sparseIndex, v); double expected = v1.DotProduct(v2) + 0.7f * (v2.DotProduct(v2)); v1.AddVectorInPlace(v2, 0.7f); NUnit.Framework.Assert.AreEqual(v1.DotProduct(v2), 5.0e-4, expected); }
public virtual void TestAddSparseToSparse(int sparseIndex1, double val1, int sparseIndex2, double val2) { ConcatVector v1 = new ConcatVector(1); v1.SetSparseComponent(0, (int)sparseIndex1, val1); ConcatVector v2 = new ConcatVector(1); v2.SetSparseComponent(0, (int)sparseIndex2, val2); double expected = v1.DotProduct(v2) + 0.7f * (v2.DotProduct(v2)); v1.AddVectorInPlace(v2, 0.7f); NUnit.Framework.Assert.AreEqual(v1.DotProduct(v2), 5.0e-3, expected); }
public virtual void TestCopyOnWrite(ConcatVectorTest.DenseTestVector d1) { ConcatVector v2 = d1.vector.DeepClone(); v2.AddVectorInPlace(v2, 1.0); for (int i = 0; i < d1.values.Length; i++) { for (int j = 0; j < d1.values[i].Length; j++) { NUnit.Framework.Assert.AreEqual(d1.vector.GetValueAt(i, j), 5.0e-4, d1.values[i][j]); NUnit.Framework.Assert.AreEqual(v2.GetValueAt(i, j), 5.0e-4, d1.values[i][j] * 2); } } }
public virtual void TestValueEquals(ConcatVectorTest.DenseTestVector d1) { ConcatVector clone = d1.vector.DeepClone(); NUnit.Framework.Assert.IsTrue(clone.ValueEquals(d1.vector, 1.0e-5)); NUnit.Framework.Assert.IsTrue(d1.vector.ValueEquals(clone, 1.0e-5)); NUnit.Framework.Assert.IsTrue(d1.vector.ValueEquals(d1.vector, 1.0e-5)); NUnit.Framework.Assert.IsTrue(clone.ValueEquals(clone, 1.0e-5)); Random r = new Random(); int size = clone.GetNumberOfComponents(); if (size > 0) { clone.AddVectorInPlace(d1.vector, 1.0); // If the clone is a 0 vector bool isZero = true; foreach (double[] arr in d1.values) { foreach (double d in arr) { if (d != 0) { isZero = false; } } } if (isZero) { NUnit.Framework.Assert.IsTrue(clone.ValueEquals(d1.vector, 1.0e-5)); NUnit.Framework.Assert.IsTrue(d1.vector.ValueEquals(clone, 1.0e-5)); } else { NUnit.Framework.Assert.IsFalse(clone.ValueEquals(d1.vector, 1.0e-5)); NUnit.Framework.Assert.IsFalse(d1.vector.ValueEquals(clone, 1.0e-5)); } NUnit.Framework.Assert.IsTrue(d1.vector.ValueEquals(d1.vector, 1.0e-5)); NUnit.Framework.Assert.IsTrue(clone.ValueEquals(clone, 1.0e-5)); // refresh the clone clone = d1.vector.DeepClone(); int tinker = r.NextInt(size); d1.vector.SetDenseComponent(tinker, new double[] { 0, 0, 1 }); clone.SetSparseComponent(tinker, 2, 1); NUnit.Framework.Assert.IsTrue(d1.vector.ValueEquals(clone, 1.0e-5)); NUnit.Framework.Assert.IsTrue(clone.ValueEquals(d1.vector, 1.0e-5)); } }
public virtual void TestResizeOnSetComponent(IDictionary <int, int> featureMap1, IDictionary <int, int> featureMap2) { ConcatVectorNamespace @namespace = new ConcatVectorNamespace(); ConcatVector namespace1 = ToNamespaceVector(@namespace, (IDictionary <int, int>)featureMap1); ConcatVector namespace2 = ToNamespaceVector(@namespace, (IDictionary <int, int>)featureMap2); ConcatVector regular1 = ToVector((IDictionary <int, int>)featureMap1); ConcatVector regular2 = ToVector((IDictionary <int, int>)featureMap2); NUnit.Framework.Assert.AreEqual(namespace1.DotProduct(namespace2), 1.0e-5, regular1.DotProduct(regular2)); ConcatVector namespaceSum = namespace1.DeepClone(); namespaceSum.AddVectorInPlace(namespace2, 1.0); ConcatVector regularSum = regular1.DeepClone(); regularSum.AddVectorInPlace(regular2, 1.0); NUnit.Framework.Assert.AreEqual(namespace1.DotProduct(namespaceSum), 1.0e-5, regular1.DotProduct(regularSum)); NUnit.Framework.Assert.AreEqual(namespaceSum.DotProduct(namespace2), 1.0e-5, regularSum.DotProduct(regular2)); }