예제 #1
0
        public void IntersectLinesTest()
        {
            // Lines do intersects with infinities first (vertical lines)
            Tuple <double, double, bool> inf1 = FISOperators.IntersectLines(0, 0, 0, 4, -2, 2, 2, 2);

            Assert.AreEqual(inf1.Item1, 0);
            Assert.AreEqual(inf1.Item2, 2);
            Assert.AreEqual(inf1.Item3, true);

            // Lines do intersects with infinities first (vertical lines)
            Tuple <double, double, bool> inf2 = FISOperators.IntersectLines(-2, 2, 2, 2, 0, 0, 0, 4);

            Assert.AreEqual(inf2.Item1, 0);
            Assert.AreEqual(inf2.Item2, 2);
            Assert.AreEqual(inf2.Item3, true);

            // Draw a nice X away from zero
            Tuple <double, double, bool> x1 = FISOperators.IntersectLines(1, 1, 4, 4, 1, 4, 4, 1);

            Assert.AreEqual(x1.Item1, 2.5);
            Assert.AreEqual(x1.Item2, 2.5);
            Assert.AreEqual(x1.Item3, true);

            // Lines don't intersect
            Tuple <double, double, bool> res2 = FISOperators.IntersectLines(0, 0, 0, 4, 2, 0, 4, 0);

            Assert.AreEqual(res2.Item1, 0);
            Assert.AreEqual(res2.Item2, 0);
            Assert.AreEqual(res2.Item3, false);
        }
예제 #2
0
        public void ImpMinTest()
        {
            // Set our input
            MemberFunction inMF = new MemberFunction(new List <double[]>
            {
                new double[] { 0, 0 },
                new double[] { 1, 1 },
                new double[] { 2, 1 },
                new double[] { 3, 0 },
            });

            // Run the test
            MemberFunction outMF = FISOperators.ImpMin(inMF, 0.5, 3.0);

            // Here's what we expect to get
            List <double[]> expected = new List <double[]>
            {
                new double[] { 0, 0 },
                new double[] { 0.5, 1.5 },
                new double[] { 2.5, 1.5 },
                new double[] { 3, 0 },
            };

            for (int i = 0; i < expected.Count; i++)
            {
                Assert.AreEqual(outMF.Coords[i][0], expected[i][0]);
                Assert.AreEqual(outMF.Coords[i][1], expected[i][1]);
            }
        }
예제 #3
0
 public void ProductTest()
 {
     Assert.AreEqual(FISOperators.Product(1, 1), 1);
     Assert.AreEqual(FISOperators.Product(0, 2), 0);
     Assert.AreEqual(FISOperators.Product(3, -1), -3);
     Assert.AreEqual(FISOperators.Product(0.01, -1), -0.01);
     Assert.AreEqual(FISOperators.Product(23, 24), 552);
 }
예제 #4
0
 public void MinTest()
 {
     Assert.AreEqual(FISOperators.Min(1, 1), 1);
     Assert.AreEqual(FISOperators.Min(0, 1), 0);
     Assert.AreEqual(FISOperators.Min(0, -1), -1);
     Assert.AreEqual(FISOperators.Min(0.01, -1), -1);
     Assert.AreEqual(FISOperators.Min(23, 24), 23);
 }
예제 #5
0
 public void MaxTest()
 {
     Assert.AreEqual(FISOperators.Max(1, 1), 1);
     Assert.AreEqual(FISOperators.Max(0, 1), 1);
     Assert.AreEqual(FISOperators.Max(0, -1), 0);
     Assert.AreEqual(FISOperators.Max(0.01, -1), 0.01);
     Assert.AreEqual(FISOperators.Max(23, 24), 24);
 }
예제 #6
0
 public void ProbOrTest()
 {
     // Note: I go this from https://www.mathworks.com/help/fuzzy/probor.html?requestedDomain=www.mathworks.com
     Assert.AreEqual(FISOperators.ProbOr(1, 1), 1);
     Assert.AreEqual(FISOperators.ProbOr(0, 1), 1);
     Assert.AreEqual(FISOperators.ProbOr(0, -1), -1);
     Assert.AreEqual(FISOperators.ProbOr(0.01, -1), -0.98);
     Assert.AreEqual(FISOperators.ProbOr(23, 24), -505);
 }
예제 #7
0
        public void AggMaxTest()
        {
            // Set our inputs
            MemberFunction inMF = new MemberFunction(new List <double[]>
            {
                new double[] { 0, 0 },
                new double[] { 1, 1 },
                new double[] { 2, 1 },
                new double[] { 3, 0 },
            });
            MemberFunction outMf = new MemberFunction(new List <double[]>
            {
                new double[] { 1.4, 0 },
                new double[] { 1.5, 2 },
                new double[] { 3, 2 },
                new double[] { 4, 0 },
            });

            // Run the test
            FISOperators.AggMax(inMF, outMf);

            // Here's what we expect to get
            List <double[]> expected = new List <double[]>
            {
                new double[] { 0, 0 },
                new double[] { 1, 1 },
                new double[] { 1.4, 1 },
                new double[] { 1.5, 2 },
                new double[] { 2, 2 },
                new double[] { 3, 2 },
                new double[] { 4, 0 },
            };

            // Visual output for sanity
            for (int i = 0; i < expected.Count; i++)
            {
                Debug.WriteLine(String.Format("({0}, {1}) ==> ({2}, {3})", outMf.Coords[i][0], outMf.Coords[i][1], expected[i][0], expected[i][1]));
            }

            // Test the values
            for (int i = 0; i < expected.Count; i++)
            {
                Assert.AreEqual(outMf.Coords[i][0], expected[i][0]);
                Assert.AreEqual(outMf.Coords[i][1], expected[i][1]);
            }
        }