1package iterator
2
3import (
4	"context"
5	"testing"
6
7	"github.com/cayleygraph/cayley/graph"
8	"github.com/cayleygraph/cayley/quad"
9	"github.com/stretchr/testify/require"
10)
11
12func TestCount(t *testing.T) {
13	ctx := context.TODO()
14	fixed := NewFixed(
15		graph.PreFetched(quad.String("a")),
16		graph.PreFetched(quad.String("b")),
17		graph.PreFetched(quad.String("c")),
18		graph.PreFetched(quad.String("d")),
19		graph.PreFetched(quad.String("e")),
20	)
21	it := NewCount(fixed, nil)
22	require.True(t, it.Next(ctx))
23	require.Equal(t, graph.PreFetched(quad.Int(5)), it.Result())
24	require.False(t, it.Next(ctx))
25	require.True(t, it.Contains(ctx, graph.PreFetched(quad.Int(5))))
26	require.False(t, it.Contains(ctx, graph.PreFetched(quad.Int(3))))
27
28	fixed.Reset()
29
30	fixed2 := NewFixed(
31		graph.PreFetched(quad.String("b")),
32		graph.PreFetched(quad.String("d")),
33	)
34	it = NewCount(NewAnd(nil, fixed, fixed2), nil)
35	require.True(t, it.Next(ctx))
36	require.Equal(t, graph.PreFetched(quad.Int(2)), it.Result())
37	require.False(t, it.Next(ctx))
38	require.False(t, it.Contains(ctx, graph.PreFetched(quad.Int(5))))
39	require.True(t, it.Contains(ctx, graph.PreFetched(quad.Int(2))))
40
41	it.Reset()
42	it.Tagger().Add("count")
43	require.True(t, it.Next(ctx))
44	m := make(map[string]graph.Value)
45	it.TagResults(m)
46	require.Equal(t, map[string]graph.Value{"count": graph.PreFetched(quad.Int(2))}, m)
47}
48