// Ensure that a boolean iterator can be created for a modBooleanl. func TestCallIterator_Mode_Boolean(t *testing.T) { itr, _ := influxql.NewModeIterator(&BooleanIterator{Points: []influxql.BooleanPoint{ {Time: 0, Value: true, Tags: ParseTags("region=us-east,host=hostA")}, {Time: 1, Value: false, Tags: ParseTags("region=us-west,host=hostB")}, {Time: 1, Value: true, Tags: ParseTags("region=us-west,host=hostA")}, {Time: 2, Value: true, Tags: ParseTags("region=us-east,host=hostA")}, {Time: 3, Value: true, Tags: ParseTags("region=us-east,host=hostA")}, {Time: 4, Value: false, Tags: ParseTags("region=us-east,host=hostA")}, {Time: 6, Value: false, Tags: ParseTags("region=us-east,host=hostA")}, {Time: 7, Value: false, Tags: ParseTags("region=us-east,host=hostA")}, {Time: 8, Value: false, Tags: ParseTags("region=us-east,host=hostA")}, {Time: 22, Value: false, Tags: ParseTags("region=us-west,host=hostB")}, {Time: 23, Value: true, Tags: ParseTags("region=us-west,host=hostB")}, {Time: 24, Value: true, Tags: ParseTags("region=us-west,host=hostB")}, }}, influxql.IteratorOptions{ Expr: MustParseExpr(`mode("value")`), Dimensions: []string{"host"}, Interval: influxql.Interval{Duration: 5 * time.Nanosecond}, }, ) if a, err := Iterators([]influxql.Iterator{itr}).ReadAll(); err != nil { t.Fatalf("unexpected error: %s", err) } else if !deep.Equal(a, [][]influxql.Point{ {&influxql.BooleanPoint{Time: 0, Value: true, Tags: ParseTags("host=hostA")}}, {&influxql.BooleanPoint{Time: 1, Value: false, Tags: ParseTags("host=hostB")}}, {&influxql.BooleanPoint{Time: 5, Value: false, Tags: ParseTags("host=hostA")}}, {&influxql.BooleanPoint{Time: 20, Value: true, Tags: ParseTags("host=hostB")}}, }) { t.Fatalf("unexpected points: %s", spew.Sdump(a)) } }
func benchmarkModeIterator(b *testing.B, pointN int) { b.ReportAllocs() for i := 0; i < b.N; i++ { // Create a lightweight point generator. p := influxql.FloatPoint{Name: "cpu"} input := FloatPointGenerator{ N: pointN, Fn: func(i int) *influxql.FloatPoint { p.Value = float64(10) return &p }, } // Execute call against input. itr, err := influxql.NewModeIterator(&input, influxql.IteratorOptions{}) if err != nil { b.Fatal(err) } influxql.DrainIterator(itr) } }