The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.
use Test::More tests => 10;
BEGIN { use_ok('Linux::Taskstats::Read') };

#########################

my $file_v3 = 'ver3.dump';
my $file_v4 = 'ver4.dump';
my $file_v6 = 'ver6.dump';
my $file_v7 = 'ver7.dump';
if( -d 't' ) {
    $file_v3 = 't/' . $file_v3;
    $file_v4 = 't/' . $file_v4;
    $file_v6 = 't/' . $file_v6;
    $file_v7 = 't/' . $file_v7;
}

my $ts = new Linux::Taskstats::Read( -ver => 3 );

is( $ts->version, 3, "version check" );

my @fields = $ts->fields;
is( scalar(@fields), 36, "field count" );
is( $fields[2], "ac_flag", "field member" );

like( $ts->template, qr(QQQQQQ$), "template read" );

$ts->open($file_v3);

my $rec_raw = $ts->read_raw;
is( length($rec_raw), $ts->size, "size of raw record" );

eval { my $q = unpack("Q", 1234123412341234) };
my $can_Q = ( $@ ? 0 : 1 );

SKIP: {
    skip("64-bit architecture required", 4) unless $can_Q;

    my $rec = $ts->read;
    $ts->close;

    is( $rec->{ac_comm}, 'grep', "v3 groked comm" );

    ## try v4 record
    undef $ts;
    $ts = new Linux::Taskstats::Read( -ver => 4 );
    $ts->open($file_v4);

    $ts->read;
    $ts->read;
    undef $rec;
    $rec = $ts->read;
    $ts->close;

    is( $rec->{ac_comm}, 'php', "v4 groked comm" );


    ## try v6 record
    undef $ts;
    $ts = new Linux::Taskstats::Read( -ver => 6 );
    $ts->open($file_v6);

    while( my $trec = $ts->read ) { $rec = $trec }  ## find last record                                               
    $ts->close;

    is( $rec->{ac_comm}, 'perl', "v6 groked comm" );

    ## try v7 record
    undef $ts;
    $ts = new Linux::Taskstats::Read( -ver => 7 );
    $ts->open($file_v7);

    while( my $trec = $ts->read ) { $rec = $trec }  ## find last record                                               
    $ts->close;

    is( $rec->{ac_comm}, 'php5', "v7 groked comm" );
}