Search in sources :

Example 6 with Sum

use of uk.gov.gchq.koryphe.impl.binaryoperator.Sum in project Gaffer by gchq.

the class AggregateHandlerTest method shouldAggregateTheSameFromSchemaOrOperation.

@Test
public void shouldAggregateTheSameFromSchemaOrOperation() throws OperationException {
    // Given
    final Schema schema = new Schema.Builder().edge(TestGroups.EDGE, new SchemaEdgeDefinition.Builder().build()).build();
    final Store store1 = mock(Store.class);
    final List<Element> input1 = new ArrayList<>();
    final Set<Element> expected1 = new HashSet<>();
    final Map<String, AggregatePair> edges1 = new HashMap<>();
    final Schema schema1 = new Schema.Builder().edge(TestGroups.EDGE, new SchemaEdgeDefinition.Builder().aggregator(new ElementAggregator.Builder().select("count").execute(new Sum()).select("turns").execute(new Sum()).build()).groupBy("timestamp").build()).build();
    given(store.getSchema()).willReturn(schema);
    given(store1.getSchema()).willReturn(schema1);
    input.add(edge);
    input.add(edge1);
    input.add(edge2);
    final Edge localEdge = new Edge.Builder().group(TestGroups.EDGE).property("timestamp", 2L).property("turns", 6).property("count", 2L).build();
    final Edge localEdge1 = new Edge.Builder().group(TestGroups.EDGE).property("timestamp", 1L).property("turns", 9).property("count", 5L).build();
    final Edge localEdge2 = new Edge.Builder().group(TestGroups.EDGE).property("timestamp", 2L).property("turns", 4).property("count", 1L).build();
    input1.add(localEdge);
    input1.add(localEdge1);
    input1.add(localEdge2);
    final AggregatePair pair = new AggregatePair(new String[] { "timestamp" }, new ElementAggregator.Builder().select("count").execute(new Sum()).select("turns").execute(new Sum()).build());
    final AggregatePair otherPair = new AggregatePair();
    edges.put(TestGroups.EDGE, pair);
    edges1.put(TestGroups.EDGE, otherPair);
    final Edge expectedEdge = new Edge.Builder().group(TestGroups.EDGE).property("timestamp", 2L).property("turns", 10).property("count", 3L).build();
    expected.add(expectedEdge);
    expected.add(edge1);
    expected1.add(expectedEdge);
    expected1.add(edge1);
    final Aggregate aggregate = new Aggregate.Builder().input(input).edges(edges).build();
    final Aggregate aggregate1 = new Aggregate.Builder().input(input1).edges(edges1).build();
    // When
    final Iterable<? extends Element> results = handler.doOperation(aggregate, context, store);
    final Set<Element> resultsSet = Sets.newHashSet(results);
    final Iterable<? extends Element> results1 = handler.doOperation(aggregate1, context, store1);
    final Set<Element> resultsSet1 = Sets.newHashSet(results1);
    // Then
    assertEquals(expected, resultsSet);
    assertEquals(expected1, resultsSet1);
}
Also used : HashMap(java.util.HashMap) Schema(uk.gov.gchq.gaffer.store.schema.Schema) Element(uk.gov.gchq.gaffer.data.element.Element) ArrayList(java.util.ArrayList) Store(uk.gov.gchq.gaffer.store.Store) AggregatePair(uk.gov.gchq.gaffer.operation.util.AggregatePair) Sum(uk.gov.gchq.koryphe.impl.binaryoperator.Sum) SchemaEdgeDefinition(uk.gov.gchq.gaffer.store.schema.SchemaEdgeDefinition) Aggregate(uk.gov.gchq.gaffer.operation.impl.function.Aggregate) Edge(uk.gov.gchq.gaffer.data.element.Edge) HashSet(java.util.HashSet) Test(org.junit.jupiter.api.Test)

Example 7 with Sum

use of uk.gov.gchq.koryphe.impl.binaryoperator.Sum in project Gaffer by gchq.

the class AggregateHandlerTest method shouldAggregateElementsWhenAggregatorNotProvidedInSchema.

@Test
public void shouldAggregateElementsWhenAggregatorNotProvidedInSchema() throws OperationException {
    // Given
    final Schema schema = new Schema.Builder().entity(TestGroups.ENTITY, new SchemaEntityDefinition.Builder().groupBy("timestamp").build()).build();
    given(store.getSchema()).willReturn(schema);
    input.add(entity);
    input.add(entity1);
    input.add(entity2);
    input.add(entity3);
    final AggregatePair pair = new AggregatePair(new ElementAggregator.Builder().select("count").execute(new Sum()).build());
    entities.put(TestGroups.ENTITY, pair);
    final Entity expectedEntity = new Entity.Builder().group(TestGroups.ENTITY).property("timestamp", 3L).property("count", 5).build();
    final Entity expectedEntity1 = new Entity.Builder().group(TestGroups.ENTITY).property("timestamp", 2L).property("count", 6).build();
    expected.add(expectedEntity);
    expected.add(expectedEntity1);
    final Aggregate aggregate = new Aggregate.Builder().input(input).entities(entities).build();
    // When
    final Iterable<? extends Element> results = handler.doOperation(aggregate, context, store);
    final Set<Element> resultsSet = Sets.newHashSet(results);
    // Then
    assertEquals(expected, resultsSet);
}
Also used : Entity(uk.gov.gchq.gaffer.data.element.Entity) Schema(uk.gov.gchq.gaffer.store.schema.Schema) Element(uk.gov.gchq.gaffer.data.element.Element) AggregatePair(uk.gov.gchq.gaffer.operation.util.AggregatePair) Sum(uk.gov.gchq.koryphe.impl.binaryoperator.Sum) Aggregate(uk.gov.gchq.gaffer.operation.impl.function.Aggregate) Test(org.junit.jupiter.api.Test)

Example 8 with Sum

use of uk.gov.gchq.koryphe.impl.binaryoperator.Sum in project Gaffer by gchq.

the class AggregateHandlerTest method shouldAggregateAMixOfEdgesAndEntities.

@Test
public void shouldAggregateAMixOfEdgesAndEntities() throws OperationException {
    // Given
    final Schema schema = new Schema.Builder().edge(TestGroups.EDGE, new SchemaEdgeDefinition.Builder().aggregator(new ElementAggregator.Builder().select("turns").execute(new Max()).build()).build()).entity(TestGroups.ENTITY, new SchemaEntityDefinition.Builder().aggregator(new ElementAggregator.Builder().select("count").execute(new Sum()).build()).build()).build();
    given(store.getSchema()).willReturn(schema);
    input.add(edge);
    input.add(edge1);
    input.add(edge2);
    input.add(entity);
    input.add(entity1);
    input.add(entity2);
    input.add(entity3);
    final AggregatePair edgePair = new AggregatePair(new String[] { "timestamp" });
    final AggregatePair entityPair = new AggregatePair(new String[] { "timestamp" });
    edges.put(TestGroups.EDGE, edgePair);
    entities.put(TestGroups.ENTITY, entityPair);
    final Edge expectedEdge = new Edge.Builder().group(TestGroups.EDGE).property("timestamp", 2L).property("turns", 6).property("count", 2L).build();
    final Edge expectedEdge1 = new Edge.Builder().group(TestGroups.EDGE).property("timestamp", 1L).property("turns", 9).property("count", 5L).build();
    final Entity expectedEntity = new Entity.Builder().group(TestGroups.ENTITY).property("timestamp", 2L).property("count", 6).build();
    final Entity expectedEntity1 = new Entity.Builder().group(TestGroups.ENTITY).property("timestamp", 3L).property("count", 5).build();
    expected.add(expectedEdge);
    expected.add(expectedEdge1);
    expected.add(expectedEntity);
    expected.add(expectedEntity1);
    final Aggregate aggregate = new Aggregate.Builder().input(input).edges(edges).entities(entities).build();
    // When
    final Iterable<? extends Element> results = handler.doOperation(aggregate, context, store);
    final Set<Element> resultsSet = Sets.newHashSet(results);
    // Then
    assertEquals(expected, resultsSet);
}
Also used : Entity(uk.gov.gchq.gaffer.data.element.Entity) Max(uk.gov.gchq.koryphe.impl.binaryoperator.Max) Schema(uk.gov.gchq.gaffer.store.schema.Schema) Element(uk.gov.gchq.gaffer.data.element.Element) Sum(uk.gov.gchq.koryphe.impl.binaryoperator.Sum) AggregatePair(uk.gov.gchq.gaffer.operation.util.AggregatePair) SchemaEdgeDefinition(uk.gov.gchq.gaffer.store.schema.SchemaEdgeDefinition) Aggregate(uk.gov.gchq.gaffer.operation.impl.function.Aggregate) Edge(uk.gov.gchq.gaffer.data.element.Edge) ElementAggregator(uk.gov.gchq.gaffer.data.element.function.ElementAggregator) Test(org.junit.jupiter.api.Test)

Example 9 with Sum

use of uk.gov.gchq.koryphe.impl.binaryoperator.Sum in project Gaffer by gchq.

the class AggregateHandlerTest method shouldAggregateEdgesFromMultipleGroups.

@Test
public void shouldAggregateEdgesFromMultipleGroups() throws OperationException {
    final Schema schema = new Schema.Builder().edge(TestGroups.EDGE, new SchemaEdgeDefinition.Builder().aggregator(new ElementAggregator.Builder().select("turns").execute(new Max()).build()).groupBy("timestamp").build()).edge(TestGroups.EDGE_2, new SchemaEdgeDefinition.Builder().aggregator(new ElementAggregator.Builder().select("count").execute(new Sum()).select("length").execute(new Sum()).build()).groupBy("timestamp").build()).build();
    given(store.getSchema()).willReturn(schema);
    input.add(edge);
    input.add(edge1);
    input.add(edge2);
    input.add(edge3);
    input.add(edge4);
    final AggregatePair pair = new AggregatePair();
    final AggregatePair pair1 = new AggregatePair();
    edges.put(TestGroups.EDGE, pair);
    edges.put(TestGroups.EDGE_2, pair1);
    final Edge expectedEdge = new Edge.Builder().group(TestGroups.EDGE).property("timestamp", 2L).property("turns", 6).property("count", 2L).build();
    final Edge expectedEdge1 = new Edge.Builder().group(TestGroups.EDGE).property("timestamp", 1L).property("turns", 9).property("count", 5L).build();
    final Edge expectedEdge2 = new Edge.Builder().group(TestGroups.EDGE_2).property("timestamp", 4L).property("length", 40).property("count", 5L).build();
    expected.add(expectedEdge);
    expected.add(expectedEdge1);
    expected.add(expectedEdge2);
    final Aggregate aggregate = new Aggregate.Builder().input(input).edges(edges).build();
    // When
    final Iterable<? extends Element> results = handler.doOperation(aggregate, context, store);
    final Set<Element> resultsSet = Sets.newHashSet(results);
    // Then
    assertEquals(expected, resultsSet);
}
Also used : Max(uk.gov.gchq.koryphe.impl.binaryoperator.Max) Schema(uk.gov.gchq.gaffer.store.schema.Schema) Element(uk.gov.gchq.gaffer.data.element.Element) Sum(uk.gov.gchq.koryphe.impl.binaryoperator.Sum) AggregatePair(uk.gov.gchq.gaffer.operation.util.AggregatePair) SchemaEdgeDefinition(uk.gov.gchq.gaffer.store.schema.SchemaEdgeDefinition) Aggregate(uk.gov.gchq.gaffer.operation.impl.function.Aggregate) Edge(uk.gov.gchq.gaffer.data.element.Edge) ElementAggregator(uk.gov.gchq.gaffer.data.element.function.ElementAggregator) Test(org.junit.jupiter.api.Test)

Example 10 with Sum

use of uk.gov.gchq.koryphe.impl.binaryoperator.Sum in project Gaffer by gchq.

the class GraphTest method shouldThrowExceptionIfSchemaIsInvalid.

@Test
public void shouldThrowExceptionIfSchemaIsInvalid() throws OperationException {
    final StoreProperties storeProperties = new StoreProperties();
    storeProperties.setStoreClass(TestStoreImpl.class.getName());
    try {
        new Graph.Builder().config(new GraphConfig.Builder().graphId(GRAPH_ID).build()).addSchema(new Schema.Builder().type("int", new TypeDefinition.Builder().clazz(Integer.class).aggregateFunction(new Sum()).serialiser(new RawDoubleSerialiser()).build()).type("string", new TypeDefinition.Builder().clazz(String.class).aggregateFunction(new StringConcat()).build()).type("boolean", Boolean.class).edge("EDGE", new SchemaEdgeDefinition.Builder().source("string").destination("string").directed("boolean").build()).entity("ENTITY", new SchemaEntityDefinition.Builder().vertex("string").property("p2", "int").build()).build()).storeProperties(storeProperties).build();
        fail("exception expected");
    } catch (final SchemaException e) {
        assertNotNull(e.getMessage());
    }
}
Also used : SchemaException(uk.gov.gchq.gaffer.data.elementdefinition.exception.SchemaException) StringConcat(uk.gov.gchq.koryphe.impl.binaryoperator.StringConcat) RawDoubleSerialiser(uk.gov.gchq.gaffer.serialisation.implementation.raw.RawDoubleSerialiser) Schema(uk.gov.gchq.gaffer.store.schema.Schema) Sum(uk.gov.gchq.koryphe.impl.binaryoperator.Sum) StoreProperties(uk.gov.gchq.gaffer.store.StoreProperties) TypeDefinition(uk.gov.gchq.gaffer.store.schema.TypeDefinition) Test(org.junit.jupiter.api.Test)

Aggregations

Sum (uk.gov.gchq.koryphe.impl.binaryoperator.Sum)10 Element (uk.gov.gchq.gaffer.data.element.Element)8 Schema (uk.gov.gchq.gaffer.store.schema.Schema)8 Test (org.junit.jupiter.api.Test)7 Aggregate (uk.gov.gchq.gaffer.operation.impl.function.Aggregate)5 AggregatePair (uk.gov.gchq.gaffer.operation.util.AggregatePair)5 SchemaEdgeDefinition (uk.gov.gchq.gaffer.store.schema.SchemaEdgeDefinition)4 ArrayList (java.util.ArrayList)3 Edge (uk.gov.gchq.gaffer.data.element.Edge)3 Entity (uk.gov.gchq.gaffer.data.element.Entity)3 TypeDefinition (uk.gov.gchq.gaffer.store.schema.TypeDefinition)3 HashMap (java.util.HashMap)2 Test (org.junit.Test)2 ElementAggregator (uk.gov.gchq.gaffer.data.element.function.ElementAggregator)2 Max (uk.gov.gchq.koryphe.impl.binaryoperator.Max)2 StringConcat (uk.gov.gchq.koryphe.impl.binaryoperator.StringConcat)2 ToLong (uk.gov.gchq.koryphe.impl.function.ToLong)2 InputStream (java.io.InputStream)1 InputStreamReader (java.io.InputStreamReader)1 HashSet (java.util.HashSet)1