Algorithmix.UnitTest.ChamferTest.ChamferSimilarityTest C# (CSharp) Method

ChamferSimilarityTest() private method

private ChamferSimilarityTest ( ) : void
return void
        public void ChamferSimilarityTest()
        {
            Console.WriteLine("Begin Chamfer Similarity Test");

            Console.WriteLine("Begin Chamfer Similarity Test with Equal Size Arrays");
            var c1 = new[] {0, 1, 2, 1, 0, 1, 0, 0, 1, 1, 0, 1, 0};
            var c2 = new[] {0, 1, 2, 3, 2, 1, 0, 0, 0, 1, 0, 1, 0};

            var c1DotC2 = (new[] {0, 1, 4, 3, 0, 1, 0, 0, 0, 1, 0, 1, 0}).Sum();
            var c1DotC1 = (new[] {0, 1, 4, 1, 0, 1, 0, 0, 1, 1, 0, 1, 0}).Sum();
            var c2DotC2 = (new[] {0, 1, 4, 9, 4, 1, 0, 0, 0, 1, 0, 1, 0}).Sum();

            var expected = c1DotC2/(double) Math.Max(c1DotC1, c2DotC2);
            var actual = Chamfer.Similarity(c1, c2);

            Assert.IsTrue(Math.Abs(expected - actual) < 0.001);

            Console.WriteLine("Begin Chamfer Similarity Test with Differently Sized Arrays");

            var larger = new[] {0, 1, 2, 3, 4, 5, 5};
            var smaller = new[] {0, 1, 2, 3};
            const double expected0 = 1.000;
            var actual0 = Chamfer.Similarity(smaller, larger);
            Assert.IsTrue(Math.Abs(expected0 - actual0) < 0.001);

            var sDoTs = (new[] {0, 1, 4, 9}).Sum();
            var lDoTl = (new[] {1, 4, 9, 16}).Sum();
            var sDoTl = (new[] {0, 2, 6, 12}).Sum();

            var expected1 = sDoTl/(double) Math.Max(sDoTs, lDoTl);
            var actual1 = Chamfer.Similarity(smaller, larger, 1);
            Assert.IsTrue(Math.Abs(expected1 - actual1) < 0.001);

            Console.WriteLine("Begin Chamfer Similarity Scan Test");
            var expected2 = Chamfer.Similarity(smaller, larger, 2);
            var expected3 = Chamfer.Similarity(smaller, larger, 3);
            var expectedScan = new[] {expected0, expected1, expected2, expected3};
            var actualScan = Chamfer.ScanSimilarity(smaller, larger);
            var actualReverse = Chamfer.ScanSimilarity(larger, smaller);

            var diff = actualScan.Zip(expectedScan, (act, exp) => Math.Abs(act - exp)).Sum();
            var diffReverse = actualReverse.Zip(actualScan, (rev, scan) => Math.Abs(rev - scan)).Sum();
            Assert.IsTrue(diff < 0.001);
            Assert.IsTrue(diffReverse < 0.001);

            Console.WriteLine("End Chamfer Similarity Test");
        }