Beispiel #1
0
        public void TestComparableDvInt4()
        {
            const int count = 100;

            var rand   = RandomUtils.Create(42);
            var values = new DvInt4[2 * count];

            for (int i = 0; i < count; i++)
            {
                var v = values[i] = rand.Next();
                values[values.Length - i - 1] = v;
            }

            // Assign two NA's at random.
            int iv1 = rand.Next(values.Length);
            int iv2 = rand.Next(values.Length - 1);

            if (iv2 >= iv1)
            {
                iv2++;
            }
            values[iv1] = DvInt4.NA;
            values[iv2] = DvInt4.NA;
            Array.Sort(values);

            Assert.True(values[0].IsNA);
            Assert.True(values[1].IsNA);
            Assert.True(!values[2].IsNA);

            Assert.True((values[0] == values[1]).IsNA);
            Assert.True((values[0] != values[1]).IsNA);
            Assert.True((values[0] <= values[1]).IsNA);
            Assert.True(values[0].Equals(values[1]));
            Assert.True(values[0].CompareTo(values[1]) == 0);

            Assert.True((values[1] == values[2]).IsNA);
            Assert.True((values[1] != values[2]).IsNA);
            Assert.True((values[1] <= values[2]).IsNA);
            Assert.True(!values[1].Equals(values[2]));
            Assert.True(values[1].CompareTo(values[2]) < 0);

            for (int i = 3; i < values.Length; i++)
            {
                DvBool eq  = values[i - 1] == values[i];
                DvBool ne  = values[i - 1] != values[i];
                DvBool le  = values[i - 1] <= values[i];
                bool   feq = values[i - 1].Equals(values[i]);
                int    cmp = values[i - 1].CompareTo(values[i]);
                Assert.True(!eq.IsNA);
                Assert.True(!ne.IsNA);
                Assert.True(eq.IsTrue == ne.IsFalse);
                Assert.True(le.IsTrue);
                Assert.True(feq == eq.IsTrue);
                Assert.True(cmp <= 0);
                Assert.True(feq == (cmp == 0));
            }
        }
Beispiel #2
0
        public static NumericColumn Operation(NumericColumn c1, DvInt4 value)
        {
            switch (c1.Kind)
            {
            case DataKind.I4:
            {
                DvInt4[]            a;
                DataColumn <DvBool> res;
                Operation(c1, out a, out res);
                for (int i = 0; i < res.Length; ++i)
                {
                    res.Set(i, a[i] /**/ <= value);
                }
                return(new NumericColumn(res));
            }

            case DataKind.I8:
            {
                DvInt8[]            a;
                DataColumn <DvBool> res;
                Operation(c1, out a, out res);
                for (int i = 0; i < res.Length; ++i)
                {
                    res.Set(i, a[i] /**/ <= value);
                }
                return(new NumericColumn(res));
            }

            case DataKind.R4:
            {
                float[]             a;
                DataColumn <DvBool> res;
                Operation(c1, out a, out res);
                for (int i = 0; i < res.Length; ++i)
                {
                    res.Set(i, a[i] /**/ <= (float)value);
                }
                return(new NumericColumn(res));
            }

            case DataKind.R8:
            {
                double[]            a;
                DataColumn <DvBool> res;
                Operation(c1, out a, out res);
                for (int i = 0; i < res.Length; ++i)
                {
                    res.Set(i, a[i] /**/ <= (double)value);
                }
                return(new NumericColumn(res));
            }

            default:
                throw new DataTypeError(string.Format("{0} not implemented for column {1}.", OperationName, c1.Kind));
            }
        }
Beispiel #3
0
        public static Func <DvInt4[], DvInt4> GetAggFunction(AggregatedFunction func, DvInt4 defaultValue)
        {
            switch (func)
            {
            case AggregatedFunction.Count:
                return((DvInt4[] arr) => { return (DvInt4)arr.Length; });

            case AggregatedFunction.Sum:
                return((DvInt4[] arr) => { return arr.Aggregate((a, b) => a + b); });

            case AggregatedFunction.Min:
                return((DvInt4[] arr) => { return arr.Aggregate((a, b) => DvInt4.Min(a, b)); });

            case AggregatedFunction.Max:
                return((DvInt4[] arr) => { return arr.Aggregate((a, b) => DvInt4.Max(a, b)); });

            case AggregatedFunction.Mean:
                return((DvInt4[] arr) => { return arr.Aggregate((a, b) => a + b) / arr.Length; });

            default:
                throw new NotImplementedException($"Unkown aggregated function ${func}.");
            }
        }