public virtual void TestTypes()
        {
            Expression     expr     = JavascriptCompiler.Compile("2*popularity");
            SimpleBindings bindings = new SimpleBindings();

            bindings.Add(new SortField("popularity", SortField.Type_e.LONG));
            ValueSource vs = expr.GetValueSource(bindings);

            AreEqual(1, reader.Leaves.Count);
            AtomicReaderContext leaf   = reader.Leaves[0];
            FunctionValues      values = vs.GetValues(new Dictionary <string, object>(), leaf);

            AreEqual(10, values.DoubleVal(0), 0);
            AreEqual(10, values.FloatVal(0), 0);
            AreEqual(10, values.LongVal(0));
            AreEqual(10, values.IntVal(0));
            AreEqual(10, values.ShortVal(0));
            AreEqual(10, values.ByteVal(0));
            AreEqual("10", values.StrVal(0));
            AreEqual(System.Convert.ToDouble(10), values.ObjectVal(0));
            AreEqual(40, values.DoubleVal(1), 0);
            AreEqual(40, values.FloatVal(1), 0);
            AreEqual(40, values.LongVal(1));
            AreEqual(40, values.IntVal(1));
            AreEqual(40, values.ShortVal(1));
            AreEqual(40, values.ByteVal(1));
            AreEqual("40", values.StrVal(1));
            AreEqual(System.Convert.ToDouble(40), values.ObjectVal(1));
            AreEqual(4, values.DoubleVal(2), 0);
            AreEqual(4, values.FloatVal(2), 0);
            AreEqual(4, values.LongVal(2));
            AreEqual(4, values.IntVal(2));
            AreEqual(4, values.ShortVal(2));
            AreEqual(4, values.ByteVal(2));
            AreEqual("4", values.StrVal(2));
            AreEqual(System.Convert.ToDouble(4), values.ObjectVal(2));
        }
示例#2
0
        private ScaleInfo CreateScaleInfo(IDictionary context, AtomicReaderContext readerContext)
        {
            var leaves = ReaderUtil.GetTopLevelContext(readerContext).Leaves;

            float minVal = float.PositiveInfinity;
            float maxVal = float.NegativeInfinity;

            foreach (AtomicReaderContext leaf in leaves)
            {
                int            maxDoc = leaf.Reader.MaxDoc;
                FunctionValues vals   = source.GetValues(context, leaf);
                for (int i = 0; i < maxDoc; i++)
                {
                    float val = vals.FloatVal(i);
                    if ((Number.FloatToRawIntBits(val) & (0xff << 23)) == 0xff << 23)
                    {
                        // if the exponent in the float is all ones, then this is +Inf, -Inf or NaN
                        // which don't make sense to factor into the scale function
                        continue;
                    }
                    if (val < minVal)
                    {
                        minVal = val;
                    }
                    if (val > maxVal)
                    {
                        maxVal = val;
                    }
                }
            }

            if (minVal == float.PositiveInfinity)
            {
                // must have been an empty index
                minVal = maxVal = 0;
            }

            var scaleInfo = new ScaleInfo {
                minVal = minVal, maxVal = maxVal
            };

            context[this] = scaleInfo;
            return(scaleInfo);
        }
示例#3
0
 public override float FloatVal(int doc)
 {
     return(ifVals.BoolVal(doc) ? trueVals.FloatVal(doc) : falseVals.FloatVal(doc));
 }
示例#4
0
 public override void FloatVal(int doc, float[] vals)
 {
     vals[0] = x.FloatVal(doc);
     vals[1] = y.FloatVal(doc);
 }
示例#5
0
 protected override float Func(int doc, FunctionValues aVals, FunctionValues bVals)
 {
     return aVals.FloatVal(doc) / bVals.FloatVal(doc);
 }
示例#6
0
 public override float FloatVal(int doc)
 {
     return(vals.FloatVal(doc) * outerInstance.slope + outerInstance.intercept);
 }
示例#7
0
 protected override float Func(int doc, FunctionValues aVals, FunctionValues bVals)
 {
     return (float)Math.Pow(aVals.FloatVal(doc), bVals.FloatVal(doc));
 }
示例#8
0
 public override float FloatVal(int doc)
 {
     return((vals.FloatVal(doc) - minSource) * scale + outerInstance.min);
 }
示例#9
0
 protected override float Func(int doc, FunctionValues aVals, FunctionValues bVals)
 {
     return(aVals.FloatVal(doc) / bVals.FloatVal(doc));
 }
示例#10
0
 public override float FloatVal(int doc)
 {
     return(outerInstance.a / (outerInstance.m * vals.FloatVal(doc) + outerInstance.b));
 }
示例#11
0
            public override float FloatVal(int doc)
            {
                float val = vals.FloatVal(doc);

                return((val >= outerInstance.min && val <= outerInstance.max) ? targets.FloatVal(doc) : (outerInstance.defaultVal == null ? val : defaults.FloatVal(doc)));
            }
示例#12
0
 protected override float Func(int doc, FunctionValues aVals, FunctionValues bVals)
 {
     return((float)Math.Pow(aVals.FloatVal(doc), bVals.FloatVal(doc)));
 }