public void TestLongHighEndpointIncluded()
        {
            FilterParamIndexDoubleRange index = this.GetLongDataset(FilterOperator.RANGE_HALF_CLOSED);

            VerifyLongPrimitive(index, -1, 0);
            VerifyLongPrimitive(index, 0, 0);
            VerifyLongPrimitive(index, 1, 2);
            VerifyLongPrimitive(index, 2, 5);
            VerifyLongPrimitive(index, 3, 5);
            VerifyLongPrimitive(index, 4, 6);
            VerifyLongPrimitive(index, 5, 6);
            VerifyLongPrimitive(index, 6, 3);
            VerifyLongPrimitive(index, 7, 5);
            VerifyLongPrimitive(index, 8, 4);
            VerifyLongPrimitive(index, 9, 5);
            VerifyLongPrimitive(index, 10, 3);
            VerifyLongPrimitive(index, 11, 1);
        }
        public void TestLongLowEndpointIncluded()
        {
            FilterParamIndexDoubleRange index = this.GetLongDataset(FilterOperator.RANGE_HALF_OPEN);

            VerifyLongPrimitive(index, -1, 0);
            VerifyLongPrimitive(index, 0, 2);
            VerifyLongPrimitive(index, 1, 5);
            VerifyLongPrimitive(index, 2, 5);
            VerifyLongPrimitive(index, 3, 6);
            VerifyLongPrimitive(index, 4, 6);
            VerifyLongPrimitive(index, 5, 3);
            VerifyLongPrimitive(index, 6, 5);
            VerifyLongPrimitive(index, 7, 4);
            VerifyLongPrimitive(index, 8, 5);
            VerifyLongPrimitive(index, 9, 3);
            VerifyLongPrimitive(index, 10, 1);
            VerifyLongPrimitive(index, 11, 1);
        }
        public void TestDoubleBothEndpointsIncluded()
        {
            FilterParamIndexDoubleRange index = this.GetDoubleDataset(FilterOperator.RANGE_CLOSED);

            VerifyDoublePrimitive(index, 1.49, 0);
            VerifyDoublePrimitive(index, 1.5, 1);
            VerifyDoublePrimitive(index, 2.5, 1);
            VerifyDoublePrimitive(index, 2.51, 0);
            VerifyDoublePrimitive(index, 3.5, 2);
            VerifyDoublePrimitive(index, 4.4, 2);
            VerifyDoublePrimitive(index, 4.5, 2);
            VerifyDoublePrimitive(index, 4.5001, 1);
            VerifyDoublePrimitive(index, 5.1, 1);
            VerifyDoublePrimitive(index, 5.8, 2);
            VerifyDoublePrimitive(index, 6.7, 2);
            VerifyDoublePrimitive(index, 6.8, 1);
            VerifyDoublePrimitive(index, 9.5, 1);
            VerifyDoublePrimitive(index, 10.1, 0);
        }
        private FilterParamIndexDoubleRange GetLongDataset(FilterOperator operatorType)
        {
            FilterParamIndexDoubleRange index = MakeOne("LongPrimitive", operatorType, testEventType);

            AddToIndex(index, 0, 5);
            AddToIndex(index, 0, 6);
            AddToIndex(index, 1, 3);
            AddToIndex(index, 1, 5);
            AddToIndex(index, 1, 7);
            AddToIndex(index, 3, 5);
            AddToIndex(index, 3, 7);
            AddToIndex(index, 6, 9);
            AddToIndex(index, 6, 10);
            AddToIndex(index, 6, Int32.MaxValue - 1);
            AddToIndex(index, 7, 8);
            AddToIndex(index, 8, 9);
            AddToIndex(index, 8, 10);

            return(index);
        }
        public void TestDoubleVariableRangeSize()
        {
            FilterParamIndexDoubleRange index = MakeOne("DoublePrimitive", FilterOperator.RANGE_CLOSED, testEventType);

            for (int i = 0; i < 100; i++)
            {
                DoubleRange range = new DoubleRange(i, i * 2);
                index.Put(range, testEvaluator);
            }

            // 1 to 2
            // 2 to 4
            // 3 to 6
            // and so on

            VerifyDoublePrimitive(index, 1, 1);
            VerifyDoublePrimitive(index, 2, 2);
            VerifyDoublePrimitive(index, 2.001, 1);
            VerifyDoublePrimitive(index, 3, 2);
            VerifyDoublePrimitive(index, 4, 3);
            VerifyDoublePrimitive(index, 4.5, 2);
            VerifyDoublePrimitive(index, 50, 26);
        }
Beispiel #6
0
        /// <summary>
        ///     Factory for indexes that store filter parameter constants for a given event property and filter
        ///     operator.
        ///     <para />
        ///     Does not perform any check of validity of property name.
        /// </summary>
        /// <param name="filterOperator">is the type of index to use</param>
        /// <param name="lockFactory">lock factory</param>
        /// <param name="lookupable">the lookup item</param>
        /// <returns>the proper index based on the filter operator type</returns>
        public static FilterParamIndexBase CreateIndex(
            ExprFilterSpecLookupable lookupable,
            FilterServiceGranularLockFactory lockFactory,
            FilterOperator filterOperator)
        {
            FilterParamIndexBase index;
            var returnValueType = lookupable.ReturnType;

            // Handle all EQUAL comparisons
            if (filterOperator == FilterOperator.EQUAL) {
                index = new FilterParamIndexEquals(lookupable, lockFactory.ObtainNew());
                return index;
            }

            // Handle all NOT-EQUAL comparisons
            if (filterOperator == FilterOperator.NOT_EQUAL) {
                index = new FilterParamIndexNotEquals(lookupable, lockFactory.ObtainNew());
                return index;
            }

            if (filterOperator == FilterOperator.IS) {
                index = new FilterParamIndexEqualsIs(lookupable, lockFactory.ObtainNew());
                return index;
            }

            if (filterOperator == FilterOperator.IS_NOT) {
                index = new FilterParamIndexNotEqualsIs(lookupable, lockFactory.ObtainNew());
                return index;
            }

            // Handle all GREATER, LESS etc. comparisons
            if (filterOperator == FilterOperator.GREATER ||
                filterOperator == FilterOperator.GREATER_OR_EQUAL ||
                filterOperator == FilterOperator.LESS ||
                filterOperator == FilterOperator.LESS_OR_EQUAL) {
                if (returnValueType != typeof(string)) {
                    index = new FilterParamIndexCompare(lookupable, lockFactory.ObtainNew(), filterOperator);
                }
                else {
                    index = new FilterParamIndexCompareString(lookupable, lockFactory.ObtainNew(), filterOperator);
                }

                return index;
            }

            // Handle all normal and inverted RANGE comparisons
            if (filterOperator.IsRangeOperator()) {
                if (returnValueType != typeof(string)) {
                    index = new FilterParamIndexDoubleRange(lookupable, lockFactory.ObtainNew(), filterOperator);
                }
                else {
                    index = new FilterParamIndexStringRange(lookupable, lockFactory.ObtainNew(), filterOperator);
                }

                return index;
            }

            if (filterOperator.IsInvertedRangeOperator()) {
                if (returnValueType != typeof(string)) {
                    return new FilterParamIndexDoubleRangeInverted(lookupable, lockFactory.ObtainNew(), filterOperator);
                }

                return new FilterParamIndexStringRangeInverted(lookupable, lockFactory.ObtainNew(), filterOperator);
            }

            // Handle all IN and NOT IN comparisons
            if (filterOperator == FilterOperator.IN_LIST_OF_VALUES) {
                return new FilterParamIndexIn(lookupable, lockFactory.ObtainNew());
            }

            if (filterOperator == FilterOperator.NOT_IN_LIST_OF_VALUES) {
                return new FilterParamIndexNotIn(lookupable, lockFactory.ObtainNew());
            }

            
            // Handle re-usable boolean expression
            if (filterOperator == FilterOperator.REBOOL) {
                if (lookupable.ReturnType == null) {
                    return new FilterParamIndexReboolNoValue(lookupable, lockFactory.ObtainNew());
                }
                return new FilterParamIndexReboolWithValue(lookupable, lockFactory.ObtainNew());
            }
            
            // Handle all boolean expression
            if (filterOperator == FilterOperator.BOOLEAN_EXPRESSION) {
                return new FilterParamIndexBooleanExpr(lockFactory.ObtainNew());
            }

            // Handle advanced-index
            if (filterOperator == FilterOperator.ADVANCED_INDEX) {
                var advLookable = (FilterSpecLookupableAdvancedIndex) lookupable;
                if (advLookable.IndexType.Equals(SettingsApplicationDotMethodPointInsideRectangle.INDEXTYPE_NAME)) {
                    return new FilterParamIndexQuadTreePointRegion(lockFactory.ObtainNew(), lookupable);
                }

                if (advLookable.IndexType.Equals(SettingsApplicationDotMethodRectangeIntersectsRectangle.INDEXTYPE_NAME)) {
                    return new FilterParamIndexQuadTreeMXCIF(lockFactory.ObtainNew(), lookupable);
                }

                throw new IllegalStateException("Unrecognized index type " + advLookable.IndexType);
            }

            throw new ArgumentException("Cannot create filter index instance for filter operator " + filterOperator);
        }
        private void AddToIndex(FilterParamIndexDoubleRange index, double min, double max)
        {
            DoubleRange r = new DoubleRange(min, max);

            index.Put(r, testEvaluator);
        }