Added support for corpus classes in value aggregation

Change-Id: I22f85c96f9004ea8f96d5173d1f803364daf6c50
diff --git a/t/compile/segment/aggregate_fields.t b/t/compile/segment/aggregate_fields.t
index 5343137..47deff4 100644
--- a/t/compile/segment/aggregate_fields.t
+++ b/t/compile/segment/aggregate_fields.t
@@ -141,10 +141,10 @@
 
 is($coll->to_string,
    '[aggr=[fields='.
-     'total:[author=Fritz:[1,2],Michael:[1,1],Peter:[3,4]];' .
-     'class1:[author=Fritz:[1,2],Michael:[1,1],Peter:[1,2]];' .
-     'class2:[author=Peter:[2,2]]]]' .
-     '[matches=[0:0-1][1:0-1][2:0-1][2:2-3][4:0-1]]',
+     'total:[author=Fritz:[1,2],Michael:[1,1],Peter:[3,4]];'.
+     'class1:[author=Fritz:[1,2],Michael:[1,1],Peter:[1,2]];'.
+     'class2:[author=Peter:[2,2]]]]'.
+     '[matches=[0:0-1!2][1:0-1!2][2:0-1!1][2:2-3!1][4:0-1!1]]',
    'Stringification'
  );
 
diff --git a/t/compile/segment/aggregate_freq.t b/t/compile/segment/aggregate_freq.t
index 2d9071f..4ce2144 100644
--- a/t/compile/segment/aggregate_freq.t
+++ b/t/compile/segment/aggregate_freq.t
@@ -120,7 +120,7 @@
 # Search till the end
 is($query->compile->to_string,
    '[aggr=[freq=total:[3,7];class1:[2,4];class2:[1,3]]]'.
-     '[matches=[0:0-1][0:0-2][1:0-1][1:0-2][1:0-3][2:0-1][2:0-2]]',
+     '[matches=[0:0-1!1][0:0-2!1][1:0-1!2][1:0-2!2][1:0-3!2][2:0-1!1][2:0-2!1]]',
    'Finish');
 
 done_testing;
diff --git a/t/compile/segment/aggregate_values.t b/t/compile/segment/aggregate_values.t
index d3dae6e..fc49928 100644
--- a/t/compile/segment/aggregate_values.t
+++ b/t/compile/segment/aggregate_values.t
@@ -9,14 +9,17 @@
 my $index = Krawfish::Index->new;
 
 ok_index($index, {
+  lang => 'de',
   integer_id => 7,
   integer_size => 2,
 } => [qw/aa bb/], 'Add complex document');
 ok_index($index, {
+  lang => 'de',
   integer_id => 3,
   integer_size => 3,
 } => [qw/aa cc cc/], 'Add complex document');
 ok_index($index, {
+  lang => 'en',
   integer_id => 1,
   integer_size => 2,
 } => [qw/aa bb/], 'Add complex document');
@@ -27,7 +30,9 @@
 my $qb = $koral->query_builder;
 my $mb = $koral->compilation_builder;
 
-$koral->query($qb->token('bb'));
+$koral->query(
+  $qb->token('bb')
+);
 
 $koral->compilation(
   $mb->aggregate(
@@ -55,9 +60,10 @@
 
 # This is a query that is fine to be send to nodes
 is($koral_query->to_string(1),
-   "aggr(values:[#1,#3]:filter(#8,[1]))",
+   "aggr(values:[#1,#3]:filter(#10,[1]))",
    'Stringification');
 
+
 ok(my $query = $koral_query->optimize($index->segment), 'Optimize');
 
 # may very well be renamed to search()
@@ -66,14 +72,12 @@
    'Inflate fields');
 
 is($result->to_string,
-   '[aggr=[values='.
+   '[aggr=[values=total:['.
      'id:[sum:8,freq:2,min:1,max:7,avg:4];'.
-     'size:[sum:4,freq:2,min:2,max:2,avg:2]]'.
-     ']'.
+     'size:[sum:4,freq:2,min:2,max:2,avg:2]]]]' .
      '[matches=[0:1-2][2:1-2]]',
    'Stringification');
 
-
 $koral = Krawfish::Koral->new;
 $koral->query($qb->token($qb->bool_or('bb','cc')));
 $koral->compilation($mb->aggregate($mb->a_values('size')));
@@ -88,11 +92,54 @@
 
 # This may differ from system to system
 is($coll->to_string,
-   '[aggr=[values=size:[sum:7,freq:3,min:2,max:3,avg:2.33333333333333]]]'.
+   '[aggr=[values=total:[size:[sum:7,freq:3,min:2,max:3,avg:2.33333333333333]]]]'.
      '[matches=[0:1-2][1:1-2][1:2-3][2:1-2]]',
    'Stringification');
 
-diag 'Test with corpus classes';
+
+
+# Test with corpus classes
+ok_index($index, {
+  lang => 'en',
+  integer_id => 1,
+  integer_size => 5,
+} => [qw/aa bb aa bb/], 'Add complex document');
+
+$koral = Krawfish::Koral->new;
+my $cb = $koral->corpus_builder;
+
+$koral->query(
+  $qb->token('bb')
+);
+
+$koral->corpus(
+  $cb->bool_or(
+    $cb->class($cb->string('lang')->eq('de'), 1),
+    $cb->class($cb->string('lang')->eq('en'), 2)
+  )
+);
+
+$koral->compilation($mb->aggregate($mb->a_values('size')));
+
+ok($query = $koral->to_query, 'Create query');
+
+is($query->to_string,
+   "aggr(values:['size']:filter(bb,{1:lang=de}|{2:lang=en}))",
+   'Stringification');
+
+ok($coll = $query->identify($index->dict), 'Identify');
+ok($coll = $coll->optimize($index->segment), 'Optimize');
+ok($coll = $coll->compile, 'Compile');
+ok($coll = $coll->inflate($index->dict), 'Inflate');
+
+is($coll->to_string,
+   '[aggr=[values='.
+     'total:[size:[sum:9,freq:3,min:2,max:5,avg:3]];'.
+     'class1:[size:[sum:2,freq:1,min:2,max:2,avg:2]];'.
+     'class2:[size:[sum:7,freq:2,min:2,max:5,avg:3.5]]]]'.
+     '[matches=[0:1-2!1][2:1-2!2][3:1-2!2][3:3-4!2]]',
+   'Stringification');
+
 
 done_testing;
 __END__
diff --git a/t/compile/segment/enrich_corpus_classes.t b/t/compile/segment/enrich_corpus_classes.t
index 27259aa..f40b5a1 100644
--- a/t/compile/segment/enrich_corpus_classes.t
+++ b/t/compile/segment/enrich_corpus_classes.t
@@ -87,17 +87,17 @@
 
 ok($query->next, 'Next');
 is($query->current->to_string, '[0:1-2!1,2]', 'Current object');
-is($query->current_match->to_string, "[0:1-2|fields:#1=#2|inCorpus:1,2]",
+is($query->current_match->to_string, "[0:1-2!1,2|fields:#1=#2|inCorpus:1,2]",
    'Current match');
 
 ok($query->next, 'Next');
 is($query->current->to_string, '[1:1-2!2]', 'Current object');
-is($query->current_match->to_string, "[1:1-2|fields:#1=#13|inCorpus:2]",
+is($query->current_match->to_string, "[1:1-2!2|fields:#1=#13|inCorpus:2]",
    'Current match');
 
 ok($query->next, 'Next');
 is($query->current->to_string, '[2:0-1!1]', 'Current object');
-is($query->current_match->to_string, "[2:0-1|fields:#1=#17|inCorpus:1]",
+is($query->current_match->to_string, "[2:0-1!1|fields:#1=#17|inCorpus:1]",
    'Current match');
 ok(!$query->next, 'Next');