The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
use strict;
use 5.10.0;
use FindBin qw/$Bin/;
use lib "$Bin/lib";

use Test::More tests => 30;
use Data::CTable;

## Cache or read a limited subset.
my $t = Data::CTable->new({_FieldList=>[qw(State Age)]}, "$Bin/data/people.tabs.2.txt") or die;
is("@{$t->fieldlist()}",  'State Age');
is("@{$t->col('State')}", 'CA NV HI');
is("@{$t->col('Age')}",   '43 22 15');

## Delete the cache file.
unlink $t->prep_cache_file();

## Cache a limited subset.
my $t = Data::CTable->new({_FieldList=>[qw(State Age)]}, "$Bin/data/people.tabs.2.txt") or die;
is("@{$t->fieldlist()}",  'State Age');
is("@{$t->col('State')}", 'CA NV HI');
is("@{$t->col('Age')}",   '43 22 15');

## Get an IMPLIED full field list.
my $t = Data::CTable->new("$Bin/data/people.tabs.2.txt") or die;
is("@{$t->fieldlist()}",  'First Last Age State');
is("@{$t->col('First')}", 'Chris Marco Pearl');
is("@{$t->col('Last')}",  'Zack Bart Muth');
is("@{$t->col('State')}", 'CA NV HI');
is("@{$t->col('Age')}",   '43 22 15');

## Delete the cache file.
unlink $t->prep_cache_file();

## Will cache limited field list.
my $t = Data::CTable->new({_FieldList=>[qw(State Age)]}, "$Bin/data/people.tabs.2.txt") or die;
is("@{$t->fieldlist()}",  'State Age');
is("@{$t->col('State')}", 'CA NV HI');
is("@{$t->col('Age')}",   '43 22 15');

## Will cache different limited field list (abandon cache once).
my $t = Data::CTable->new({_FieldList=>[qw(First Last)]}, "$Bin/data/people.tabs.2.txt") or die;
is("@{$t->fieldlist()}",  'First Last');
is("@{$t->col('First')}", 'Chris Marco Pearl');
is("@{$t->col('Last')}",  'Zack Bart Muth');

## Will require full field list (abandon cache again).
my $t = Data::CTable->new({_FieldList=>[qw(First State Last Age)]}, "$Bin/data/people.tabs.2.txt") or die;
is("@{$t->fieldlist()}",  'First State Last Age');
is("@{$t->col('First')}", 'Chris Marco Pearl');
is("@{$t->col('Last')}",  'Zack Bart Muth');
is("@{$t->col('State')}", 'CA NV HI');
is("@{$t->col('Age')}",   '43 22 15');

## Will be able to use cache although fields in different order.
my $t = Data::CTable->new({_FieldList=>[qw(First Last State Age)]}, "$Bin/data/people.tabs.2.txt") or die;
is("@{$t->fieldlist()}",  'First Last State Age');
is("@{$t->col('First')}", 'Chris Marco Pearl');
is("@{$t->col('Last')}",  'Zack Bart Muth');
is("@{$t->col('State')}", 'CA NV HI');
is("@{$t->col('Age')}",   '43 22 15');

## Will be able to use cache although subset of fields requested.
my $t = Data::CTable->new({_FieldList=>[qw(First Last)]}, "$Bin/data/people.tabs.2.txt") or die;
is("@{$t->fieldlist()}",  'First Last');
is("@{$t->col('First')}", 'Chris Marco Pearl');
is("@{$t->col('Last')}",  'Zack Bart Muth');