Skip to content

Commit

Permalink
Add tests for using Buf type objects and write-int*
Browse files Browse the repository at this point in the history
  • Loading branch information
lizmat committed Oct 4, 2019
1 parent f1f56d5 commit 1848404
Showing 1 changed file with 60 additions and 20 deletions.
80 changes: 60 additions & 20 deletions S03-buf/write-int.t
Expand Up @@ -48,30 +48,33 @@ my @may-be-negative = (
|(@filled-with-sign.map( (^*).roll )),
);

plan (@umethods / 4) * 2
plan (@umethods / 4)
+ @byte-widths * (@positive + @patterns) * 8
+ (@imethods / 4) * 2
+ (@imethods / 4)
+ @byte-widths * (@may-be-negative + @positive + @patterns) * 8
;

# run for all possible methods setting / returning unsigned values
for @umethods -> $bytes, $mask, $write, $read {
dies-ok { buf8."$write"(0,42) }, "does buf8 $write 0 42 die";

subtest {
plan 2; # + @endians * 2;
plan 3 + @endians * 3;

dies-ok { buf8."$write"(-1,42) },
"does $write -1 42 die on type object";
dies-ok { buf8.new."$write"(-1,42) },
"does $write -1 42 die on uninited";
dies-ok { buf8.new(255)."$write"(-1,42) },
"does $write -1 42 die on inited";

# for @endians -> $endian {
# dies-ok { buf8.new."$write"(-1,42,$endian) },
# "does $write -1 42 $endian die on uninited";
# dies-ok { buf8.new(255)."$write"(-1,42,$endian) },
# "does $write -1 42 $endian die";
# }
for @endians -> $endian {
dies-ok { buf8."$write"(-1,42,$endian) },
"does $write -1 42 $endian die on type object";
dies-ok { buf8.new."$write"(-1,42,$endian) },
"does $write -1 42 $endian die on uninited";
dies-ok { buf8.new(255)."$write"(-1,42,$endian) },
"does $write -1 42 $endian die";
}
}, "did all possible negative offsets die";

# run for a set or predetermined and random values
Expand All @@ -89,7 +92,7 @@ for @umethods -> $bytes, $mask, $write, $read {
for ^8 -> $offset {

subtest {
plan 3 + @endians * 3 + 3 + @endians * 3;
plan 3 * (3 + @endians * 3);

# tests on existing buf
is-deeply existing."$write"($offset,$value), existing,
Expand All @@ -108,6 +111,23 @@ for @umethods -> $bytes, $mask, $write, $read {
"did existing $read $offset $endian give $returned";
}

# tests on type object
my $fromtype := buf8."$write"($offset,$value);
ok $fromtype ~~ buf8, 'did we get a buf8?';
is $fromtype.elems, $offset + $bytes,
"did type $write $offset $value set size {$offset + $bytes}";
is $fromtype."$read"($offset), $returned,
"did type $read $offset give $returned";

for @endians -> $endian {
my $fromtype := buf8."$write"($offset,$value,$endian);
ok $fromtype ~~ buf8, 'did we get a buf8?';
is $fromtype.elems, $offset + $bytes,
"did type $write $offset $value $endian set size {$offset + $bytes}";
is $fromtype."$read"($offset,$endian), $returned,
"did type $read $offset $endian give $returned";
}

# tests on new buf
is-deeply (my $buf := buf8.new)."$write"($offset,$value), $buf,
"does new $write $offset $value return \$buf";
Expand All @@ -131,22 +151,25 @@ for @umethods -> $bytes, $mask, $write, $read {

# run for all possible methods setting / returning possibly signed values
for @imethods -> $bytes, $mask, $write, $read {
dies-ok { buf8."$write"(0,-42) }, "does buf8 $write 0 -42 die";

subtest {
plan 2; # + @endians * 2;
plan 3 + @endians * 3;

dies-ok { buf8."$write"(-1,-42) },
"does $write -1 -42 die on type object";
dies-ok { buf8.new."$write"(-1,-42) },
"does $write -1 -42 die on uninited";
dies-ok { buf8.new(255)."$write"(-1,-42) },
"does $write -1 -42 die on inited";

# for @endians -> $endian {
# dies-ok { buf8.new."$write"(-1,-42,$endian) },
# "does $write -1 -42 $endian die on uninited";
# dies-ok { buf8.new(255)."$write"(-1,-42,$endian) },
# "does $write -1 -42 $endian die";
# }
for @endians -> $endian {
dies-ok { buf8."$write"(-1,-42,$endian) },
"does $write -1 -42 $endian die on type object";
dies-ok { buf8.new."$write"(-1,-42,$endian) },
"does $write -1 -42 $endian die on uninited";
dies-ok { buf8.new(255)."$write"(-1,-42,$endian) },
"does $write -1 -42 $endian die";
}
}, "did all possible negative offsets die";

# run for a set or predetermined and random values
Expand All @@ -167,7 +190,7 @@ for @imethods -> $bytes, $mask, $write, $read {
for ^8 -> $offset {

subtest {
plan 3 + @endians * 3 + 3 + @endians * 3;
plan 3 * (3 + @endians * 3);

# tests on existing buf
is-deeply existing."$write"($offset,$value), existing,
Expand All @@ -186,6 +209,23 @@ for @imethods -> $bytes, $mask, $write, $read {
"did existing $read $offset $endian give $returned";
}

# tests on type object
my $fromtype := buf8."$write"($offset,$value);
ok $fromtype ~~ buf8, 'did we get a buf8?';
is $fromtype.elems, $offset + $bytes,
"did type $write $offset $value set size {$offset + $bytes}";
is $fromtype."$read"($offset), $returned,
"did type $read $offset give $returned";

for @endians -> $endian {
my $fromtype := buf8."$write"($offset,$value,$endian);
ok $fromtype ~~ buf8, "did we get a buf8 with $endian?";
is $fromtype.elems, $offset + $bytes,
"did type $write $offset $value $endian set size {$offset + $bytes}";
is $fromtype."$read"($offset,$endian), $returned,
"did type $read $offset $endian give $returned";
}

# tests on new buf
is-deeply (my $buf := buf8.new)."$write"($offset,$value), $buf,
"does new $write $offset $value return \$buf";
Expand Down

0 comments on commit 1848404

Please sign in to comment.