| Akron | 78c4950 | 2017-07-27 16:00:36 +0200 | [diff] [blame] | 1 | use Test::More; |
| 2 | use strict; |
| 3 | use warnings; |
| 4 | |
| Akron | 5cf5fca | 2017-10-09 19:01:47 +0200 | [diff] [blame^] | 5 | use_ok('Krawfish::Koral::Compile::Builder'); |
| 6 | use_ok('Krawfish::Koral::Compile'); |
| Akron | 78c4950 | 2017-07-27 16:00:36 +0200 | [diff] [blame] | 7 | |
| Akron | 5cf5fca | 2017-10-09 19:01:47 +0200 | [diff] [blame^] | 8 | my $mb = Krawfish::Koral::Compile::Builder->new; |
| Akron | 78c4950 | 2017-07-27 16:00:36 +0200 | [diff] [blame] | 9 | |
| Akron | 01e97e8 | 2017-08-03 15:12:25 +0200 | [diff] [blame] | 10 | # Build aggregations |
| Akron | 78c4950 | 2017-07-27 16:00:36 +0200 | [diff] [blame] | 11 | ok(my $meta = $mb->aggregate( $mb->a_frequencies ), 'Add aggregation'); |
| 12 | is($meta->to_string, 'aggr=[freq]', 'Stringification'); |
| 13 | |
| 14 | ok($meta = $mb->aggregate( |
| Akron | a3581a9 | 2017-08-17 17:45:37 +0200 | [diff] [blame] | 15 | $mb->a_fields('size', 'age'), |
| Akron | 78c4950 | 2017-07-27 16:00:36 +0200 | [diff] [blame] | 16 | $mb->a_frequencies, |
| 17 | $mb->a_length |
| 18 | ), 'Add aggregation'); |
| Akron | a3581a9 | 2017-08-17 17:45:37 +0200 | [diff] [blame] | 19 | is($meta->to_string, "aggr=[fields:['size','age'],freq,length]", 'Stringification'); |
| Akron | 78c4950 | 2017-07-27 16:00:36 +0200 | [diff] [blame] | 20 | |
| Akron | cfa3e01 | 2017-08-07 19:46:41 +0200 | [diff] [blame] | 21 | ok($meta = $mb->enrich( |
| 22 | $mb->e_fields('author', 'title', 'id') |
| 23 | ), 'Create fields'); |
| 24 | is($meta->to_string, "enrich=[fields:['author','title','id']]", 'Stringification'); |
| Akron | 78c4950 | 2017-07-27 16:00:36 +0200 | [diff] [blame] | 25 | |
| Akron | 01e97e8 | 2017-08-03 15:12:25 +0200 | [diff] [blame] | 26 | |
| 27 | # Build sorting |
| Akron | 78c4950 | 2017-07-27 16:00:36 +0200 | [diff] [blame] | 28 | ok($meta = $mb->sort_by($mb->s_field('author', 1), $mb->s_field('age')), 'Create fields'); |
| 29 | is($meta->to_string, "sort=[field='author'>,field='age'<]", 'Stringification'); |
| 30 | |
| Akron | c1ed58c | 2017-08-04 17:26:30 +0200 | [diff] [blame] | 31 | |
| Akron | 5cf5fca | 2017-10-09 19:01:47 +0200 | [diff] [blame^] | 32 | my $meta_koral = Krawfish::Koral::Compile->new( |
| Akron | 78c4950 | 2017-07-27 16:00:36 +0200 | [diff] [blame] | 33 | $mb->sort_by($mb->s_field('author', 1), $mb->s_field('age')), |
| Akron | cfa3e01 | 2017-08-07 19:46:41 +0200 | [diff] [blame] | 34 | $mb->enrich($mb->e_fields('author', 'title', 'id')) |
| Akron | 78c4950 | 2017-07-27 16:00:36 +0200 | [diff] [blame] | 35 | ); |
| 36 | |
| Akron | cfa3e01 | 2017-08-07 19:46:41 +0200 | [diff] [blame] | 37 | |
| Akron | 78c4950 | 2017-07-27 16:00:36 +0200 | [diff] [blame] | 38 | is( |
| 39 | $meta_koral->to_string, |
| Akron | cfa3e01 | 2017-08-07 19:46:41 +0200 | [diff] [blame] | 40 | "sort=[field='author'>,field='age'<],enrich=[fields:['author','title','id']]", |
| Akron | 78c4950 | 2017-07-27 16:00:36 +0200 | [diff] [blame] | 41 | 'Stringification' |
| 42 | ); |
| 43 | |
| 44 | |
| 45 | # Introduce redundant operations and new sorts |
| Akron | 5cf5fca | 2017-10-09 19:01:47 +0200 | [diff] [blame^] | 46 | $meta_koral = Krawfish::Koral::Compile->new( |
| Akron | 78c4950 | 2017-07-27 16:00:36 +0200 | [diff] [blame] | 47 | $mb->sort_by($mb->s_field('author', 1), $mb->s_field('age')), |
| Akron | cfa3e01 | 2017-08-07 19:46:41 +0200 | [diff] [blame] | 48 | $mb->enrich($mb->e_fields('author', 'title', 'id')), |
| Akron | 78c4950 | 2017-07-27 16:00:36 +0200 | [diff] [blame] | 49 | $mb->sort_by($mb->s_field('length')), |
| Akron | cfa3e01 | 2017-08-07 19:46:41 +0200 | [diff] [blame] | 50 | $mb->enrich($mb->e_fields('subTitle')) |
| Akron | 78c4950 | 2017-07-27 16:00:36 +0200 | [diff] [blame] | 51 | ); |
| 52 | |
| 53 | |
| 54 | is( |
| 55 | $meta_koral->to_string, |
| Akron | cfa3e01 | 2017-08-07 19:46:41 +0200 | [diff] [blame] | 56 | "sort=[field='author'>,field='age'<],enrich=[fields:['author','title','id']],sort=[field='length'<],enrich=[fields:['subTitle']]", |
| Akron | 78c4950 | 2017-07-27 16:00:36 +0200 | [diff] [blame] | 57 | 'Stringification' |
| 58 | ); |
| 59 | |
| 60 | |
| 61 | # This will introduce a sort filter and reorder and simplify the operations |
| 62 | ok($meta_koral = $meta_koral->normalize, 'Normalize meta object'); |
| 63 | |
| 64 | is( |
| 65 | $meta_koral->to_string, |
| Akron | 45d3192 | 2017-09-15 17:05:36 +0200 | [diff] [blame] | 66 | "sort=[field='author'>,field='age'<,field='length'<,field='id'<],enrich=[fields:['author','title','id','subTitle']]", |
| Akron | 78c4950 | 2017-07-27 16:00:36 +0200 | [diff] [blame] | 67 | 'Stringification' |
| 68 | ); |
| 69 | |
| 70 | |
| 71 | # Check normalization of aggregate functions |
| Akron | 5cf5fca | 2017-10-09 19:01:47 +0200 | [diff] [blame^] | 72 | $meta_koral = Krawfish::Koral::Compile->new( |
| Akron | 78c4950 | 2017-07-27 16:00:36 +0200 | [diff] [blame] | 73 | $mb->aggregate( |
| 74 | $mb->a_length, |
| Akron | a3581a9 | 2017-08-17 17:45:37 +0200 | [diff] [blame] | 75 | $mb->a_fields('author', 'age'), |
| Akron | 78c4950 | 2017-07-27 16:00:36 +0200 | [diff] [blame] | 76 | $mb->a_frequencies, |
| Akron | a3581a9 | 2017-08-17 17:45:37 +0200 | [diff] [blame] | 77 | $mb->a_fields('corpus', 'age') |
| Akron | 78c4950 | 2017-07-27 16:00:36 +0200 | [diff] [blame] | 78 | ) |
| 79 | ); |
| 80 | |
| 81 | ok($meta_koral = $meta_koral->normalize, 'Normalization'); |
| 82 | |
| 83 | is($meta_koral->to_string, |
| Akron | a3581a9 | 2017-08-17 17:45:37 +0200 | [diff] [blame] | 84 | "aggr=[length,freq,fields:['author','age','corpus']]", |
| Akron | 78c4950 | 2017-07-27 16:00:36 +0200 | [diff] [blame] | 85 | 'stringification'); |
| 86 | |
| 87 | done_testing; |
| 88 | |
| 89 | __END__; |