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)); } }
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)); } }
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}."); } }