K

 view release on metacpan or  search on metacpan

t/raw.t  view on Meta::CPAN


    ok  k($handle, '2 = 2'), 'parse true';
    ok !k($handle, '2 = 3'), 'parse false';

    is k($handle, '`int$7'),    7,    'parse int';
    is k($handle, '0x1f'),      0x1f, 'parse byte';
    is k($handle, '"c"'),       'c',  'parse char';
    is k($handle, '`short$12'), 12,   'parse short';
    is k($handle, '`long$13'),  13,   'parse long';

    my $real = k($handle, '`real$13.7');
    ok $real > 13.699999, 'real lower bound';
    ok $real < 13.700001, 'real upper bound';

    is k($handle, '`float$13.7'), 13.7,  'parse float';
    is k($handle, '`foo'),        'foo', 'parse symbol';

    my $timestamp = k($handle, '2012.03.24D23:25:13.12345678912345');
    is "$timestamp", '385946713123456789', 'parse timestamp';

    my $long = k($handle, '385946713123000000j');
    is "$long", '385946713123000000', 'parse long';

    is k($handle, '`month$3'),   3,    'parse month';
    is k($handle, '2012.03.24'), 4466, 'parse date';

    my $timespan = k($handle, '17D12:13:14.000001234');
    is "$timespan", '1512794000001234', 'parse timespan';

    is k($handle, '`minute$4'),   4,        'parse minute';
    is k($handle, '`second$5'),   5,        'parse second';
    is k($handle, '12:13:14.15'), 43994150, 'parse time';

    my $datetime = k($handle, '2012.03.24T12:13:14.01');
    is sprintf('%.3f', $datetime), '4466.509', 'parse datetime';

    throws_ok { k($handle, 'does_not_exist') } qr/does_not_exist/,
        'croaked properly on error';
}

sub null_scalar_tests {
    my ($handle) = @_;

    is k( $handle, '0b' ),   undef, 'null boolean';
    is k( $handle, '0x00' ), 0x00,  'null byte';  # 0
    is k( $handle, '0Nh' ),  undef, 'null short'; # 0
    is k( $handle, '0N' ),   undef, 'null int';
    is k( $handle, '0Nj' ),  undef, 'null long';
    is k( $handle, '0Ne' ),  undef, 'null real';
    is k( $handle, '0n' ),   undef, 'null float';
    is k( $handle, '" "' ),  ' ',   'null char'; # this ones weird
    is k( $handle, '`' ),    undef, 'null sym';
    is k( $handle, '0Nm' ),  undef, 'null month';
    is k( $handle, '0Nd' ),  undef, 'null day';
    is k( $handle, '0Nz' ),  undef, 'null datetime';
    is k( $handle, '0Np' ),  undef, 'null timestamp';
    is k( $handle, '0Nu' ),  undef, 'null minute';
    is k( $handle, '0Nv' ),  undef, 'null second';
    is k( $handle, '0Nt' ),  undef, 'null time';

    is k( $handle, '0n' ),   undef, 'NaN';
}

sub infinity_scalar_tests {
    my ($handle) = @_;

    is k( $handle, '0Wh'  ),  'inf', '+infinite short';
    is k( $handle, '0W'   ),  'inf', '+infinite int';
    is k( $handle, '0Wj'  ),  'inf', '+infinite long';
    is k( $handle, '0We'  ),  'inf', '+infinite real';
    is k( $handle, '0w'   ),  'inf', '+infinite float';
    is k( $handle, '0Wz'  ),  'inf', '+infinite datetime';
    is k( $handle, '0Wp'  ),  'inf', '+infinite timestamp';

    is k( $handle, '-0Wh' ), '-inf', '-infinite short';
    is k( $handle, '-0W'  ), '-inf', '-infinite int';
    is k( $handle, '-0Wj' ), '-inf', '-infinite long';
    is k( $handle, '-0We' ), '-inf', '-infinite real';
    is k( $handle, '-0w'  ), '-inf', '-infinite float';
    is k( $handle, '-0Wz' ), '-inf', '-infinite datetime';
    is k( $handle, '-0Wp' ), '-inf', '-infinite timestamp';
}

sub null_vector_tests {
    my ($handle) = @_;

    is_deeply k( $handle, '(),0b'  ), [ undef ], 'null boolean vector';
    is_deeply k( $handle, '(),0x00'), [ 0x00  ], 'null byte vector';
    is_deeply k( $handle, '()," "' ), [ ' '   ], 'null char vector'; # this ones weird
    is_deeply k( $handle, '(),0Nh' ), [ undef ], 'null short vector';
    is_deeply k( $handle, '(),0N'  ), [ undef ], 'null int vector';
    is_deeply k( $handle, '(),0Nj' ), [ undef ], 'null long vector';
    is_deeply k( $handle, '(),0Ne' ), [ undef ], 'null real vector';
    is_deeply k( $handle, '(),0n'  ), [ undef ], 'null float vector';
    is_deeply k( $handle, '(),`'   ), [ undef ], 'null sym vector';
    is_deeply k( $handle, '(),0Nm' ), [ undef ], 'null month vector';
    is_deeply k( $handle, '(),0Nd' ), [ undef ], 'null day vector';
    is_deeply k( $handle, '(),0Nz' ), [ undef ], 'null datetime vector';
    is_deeply k( $handle, '(),0Np' ), [ undef ], 'null timestamp vector';
    is_deeply k( $handle, '(),0Nu' ), [ undef ], 'null minute vector';
    is_deeply k( $handle, '(),0Nv' ), [ undef ], 'null second vector';
    is_deeply k( $handle, '(),0Nt' ), [ undef ], 'null time vector';

    is_deeply k( $handle, '(),0n'  ), [ undef ], 'NaN vector';
}

sub infinite_vector_tests {
    my ($handle) = @_;

    is_deeply k( $handle, '(),0Wh' ),  [ 'inf'  ], '+infinite short vector';
    is_deeply k( $handle, '(),0W'  ),  [ 'inf'  ], '+infinite int vector';
    is_deeply k( $handle, '(),0Wj' ),  [ 'inf'  ], '+infinite long vector';
    is_deeply k( $handle, '(),0We' ),  [ 'inf'  ], '+infinite real vector';
    is_deeply k( $handle, '(),0w'  ),  [ 'inf'  ], '+infinite float vector';
    is_deeply k( $handle, '(),0Wz' ),  [ 'inf'  ], '+infinite datetime vector';
    is_deeply k( $handle, '(),0Wp' ),  [ 'inf'  ], '+infinite timestamp vector';

    is_deeply k( $handle, '(),-0Wh' ), [ '-inf' ], '-infinite short vector';
    is_deeply k( $handle, '(),-0W'  ), [ '-inf' ], '-infinite int vector';
    is_deeply k( $handle, '(),-0Wj' ), [ '-inf' ], '-infinite long vector';
    is_deeply k( $handle, '(),-0We' ), [ '-inf' ], '-infinite real vector';
    is_deeply k( $handle, '(),-0w'  ), [ '-inf' ], '-infinite float vector';
    is_deeply k( $handle, '(),-0Wz' ), [ '-inf' ], '-infinite datetime vector';
    is_deeply k( $handle, '(),-0Wp' ), [ '-inf' ], '-infinite timestamp vector';
}

sub vector_tests {
    my ($handle) = @_;

    is_deeply k($handle, '(0b;1b;0b)'), [undef, 1, undef], 'parse bool vector';
    is_deeply k($handle, '"abc"'),      [qw/a b c/],       'parse char vector';
    is_deeply k($handle, '(7h;8h;9h)'), [7, 8, 9],         'parse short vector';
    is_deeply k($handle, '(7i;8i;9i)'), [7, 8, 9],         'parse int vector';

    is_deeply
        [ map {"$_"} @{ k($handle, '(7j;8j;9j)') } ],
        [ qw(7 8 9) ],
        'parse long vector';

    is_deeply k($handle, '(7e;8e;9e)'), [7, 8, 9],   'parse real vector';
    is_deeply k($handle, '(7f;8f;9f)'), [7, 8, 9],   'parse float vector';
    is_deeply k($handle, '(`a;`b;`c)'), [qw(a b c)], 'parse symbol vector';

    is_deeply
        [ map { "$_" } @{ k($handle, 'enlist 2012.03.24D23:25:13.123456789') } ],
        [ '385946713123456789' ],
        'parse timestamp vector';
}

sub mixed_list_tests {
    my ($handle) = @_;

    is_deeply
        [ map { "$_" } @{ k($handle, '(1b;8i;9j)') } ],
        [ qw/1 8 9/],
        'parse mixed list of nums';

    is_deeply
        k($handle, '((1e;2i;(3f;`foo));"x")'),
        [
            [
                1,
                2,
                [3,'foo'],



( run in 0.608 second using v1.01-cache-2.11-cpan-5735350b133 )