Пример #1
0
        public void TestInner()
        {
            Vector a = Vector.Create(1.0, 2.0);
            Vector b = Vector.Create(-1.0, 3.0);

            Assert.IsTrue(FloatComparison.Close(VectorOperations.Inner(a, b), 5.0, FloatComparison.DefaultEps));
        }
Пример #2
0
        /// <summary>
        /// Select axis by cycling through dimensions at each depth level of tree
        /// </summary>
        public int Select <T> (KdNode <T> target) where T : IVector
        {
            IVector diagonal = target.InternalBounds.Diagonal;
            int     dims     = target.InternalBounds.Dimensions;

            // Setup initial axis
            // On root level this is zero on each other level it the depth of the node module its dimensions
            int    axis   = target.Depth % dims;
            double spread = diagonal[axis];
            int    i      = 0;

            while (FloatComparison.CloseZero(spread, FloatComparison.DefaultEps) && i < dims)
            {
                axis   = (axis + 1) % dims;
                spread = diagonal[axis];
                i     += 1;
            }

            if (i == dims)
            {
                // Cycle completed without finding an axis that has a spread greater than zero
                throw new DegenerateDatasetException();
            }

            return(axis);
        }
Пример #3
0
        public void Creating_a_DefaultComparison()
        {
            "When creating a DefaultComparison".x(() =>
                                                  SUT = new FloatComparison(0.1d, 0.1f)
                                                  );

            "Then is should implement IComparison".x(() =>
                                                     SUT.ShouldBeAssignableTo <IComparison>()
                                                     );
        }
Пример #4
0
        /// <summary>
        /// Select axis of maximum spread and test for degenerate data sets.
        /// </summary>
        public int Select <T> (KdNode <T> target) where T : IVector
        {
            // Use the internal bounds to detect degenerate data sets.
            IVector diagonal      = target.InternalBounds.Diagonal;
            int     max_spread_id = VectorReductions.IndexNormInf(diagonal);

            // Sanity check for degenerate data-sets
            if (FloatComparison.CloseZero(diagonal[max_spread_id], FloatComparison.DefaultEps))
            {
                throw new DegenerateDatasetException();
            }

            return(max_spread_id);
        }
Пример #5
0
        public void Can_compare_float_types(Type type1, Type type2, bool canCompare)
        {
            "Given a DefaultComparison".x(() =>
                                          SUT = new FloatComparison(0.1d, 0.1f)
                                          );

            "When calling CanCompare".x(() =>
                                        CanCompareResult = SUT.CanCompare(type1, type2)
                                        );

            "Then the result should be {2}".x(() =>
                                              CanCompareResult.ShouldBe(canCompare)
                                              );
        }
Пример #6
0
            /// <summary>
            ///
            /// </summary>
            /// <param name="valueA"></param>
            /// <param name="valueB"></param>
            /// <param name="floatComparison"></param>
            /// <returns></returns>
            private bool CompareFloat(float valueA, float valueB, FloatComparison floatComparison)
            {
                switch (floatComparison)
                {
                case FloatComparison.LessThan:
                    return(valueA < valueB); // float is less than value

                case FloatComparison.EqualTo:
                    return(valueA == valueB); // float is equal to value

                case FloatComparison.GreaterThan:
                    return(valueA > valueB); // float is greater than value
                }

                return(false);
            }
Пример #7
0
        private bool CompareFloat(float valueA, float valueB, FloatComparison floatComparison)
        {
            switch (floatComparison)
            {
            case FloatComparison.LessThan:
                return(valueA < valueB);

            case FloatComparison.EqualTo:
                return(valueA == valueB);

            case FloatComparison.GreaterThan:
                return(valueA > valueB);
            }

            return(false);
        }
Пример #8
0
        /// <summary>
        /// Selects the split location based on the median of the coordinates of all
        /// elements in the split dimension.
        /// </summary>
        public double Select <T>(KdNode <T> target, int split_dimension) where T : IVector
        {
            // Sort based on chosen split-dimension
            List <T> vecs = target.Vectors;

            vecs.Sort(new SingleDimensionComparer <T>(split_dimension));

            // Fetch median
            int    median_location = MedianLocation(vecs.Count);
            double median_value    = vecs[median_location][split_dimension];

            // Verify that the coordinate of the last element has a value greater than the
            // median value.
            if (FloatComparison.Close(vecs[vecs.Count - 1][split_dimension], median_value, FloatComparison.DefaultEps))
            {
                throw new DegenerateDatasetException();
            }

            return(median_value);
        }
Пример #9
0
        public void Compares_floats_within_tolarance(
            double doubleTolerance,
            float singleTolerance,
            object value1,
            object value2,
            ComparisonResult result)
        {
            "Given a DefaultComparison".x(() =>
                                          SUT = new FloatComparison(doubleTolerance, singleTolerance)
                                          );

            "And a Comparison context object".x(() =>
                                                Context = new ComparisonContext()
                                                );

            "When calling Compare".x(() =>
                                     (Result, _) = SUT.Compare(Context, value1, value2)
                                     );

            "And it should return Pass".x(() =>
                                          Result.ShouldBe(result)
                                          );
        }
Пример #10
0
            /// <summary>
            ///
            /// </summary>
            /// <param name="blackboard"></param>
            /// <param name="key"></param>
            /// <param name="value"></param>
            /// <param name="floatComparison"></param>
            /// <returns></returns>
            public bool EvaluateBlackboardVsValue(Blackboard blackboard, string key, float value, FloatComparison floatComparison)
            {
                Blackboard sceneBlackboard = FindBlackboard(blackboard);
                Value      valueA          = sceneBlackboard.GetValue(key);

                return(CompareFloat(valueA.m_float, value, floatComparison));
            }
Пример #11
0
            /// <summary>
            ///
            /// </summary>
            /// <param name="blackboardA"></param>
            /// <param name="keyA"></param>
            /// <param name="blackboardB"></param>
            /// <param name="keyB"></param>
            /// <param name="floatComparison"></param>
            /// <returns></returns>
            public bool EvaluateBlackboardVsBlackboard(Blackboard blackboardA, string keyA, Blackboard blackboardB, string keyB, FloatComparison floatComparison)
            {
                Blackboard sceneBlackboardA = FindBlackboard(blackboardA);
                Value      valueA           = sceneBlackboardA.GetValue(keyA);
                Blackboard sceneBlackboardB = FindBlackboard(blackboardB);
                Value      valueB           = sceneBlackboardB.GetValue(keyB);

                return(CompareFloat(valueA.m_float, valueB.m_float, floatComparison));
            }
Пример #12
0
        public void TestL2Norm()
        {
            Vector a = Vector.Create(1.0, 2.0);

            Assert.IsTrue(FloatComparison.Close(VectorReductions.L2Norm(a), (double)Math.Sqrt(5.0), FloatComparison.DefaultEps));
        }
Пример #13
0
        public void TestSquaredL2Norm()
        {
            Vector a = Vector.Create(1.0, 2.0);

            Assert.IsTrue(FloatComparison.Close(VectorReductions.SquaredL2Norm(a), 5.0, FloatComparison.DefaultEps));
        }