Imported Upstream version 3.001.007
authorgregor herrmann <gregoa@debian.org>
Mon, 4 Aug 2014 22:28:26 +0000 (00:28 +0200)
committergregor herrmann <gregoa@debian.org>
Mon, 4 Aug 2014 22:28:26 +0000 (00:28 +0200)
33 files changed:
MANIFEST
META.json
META.yml
lib/Sereal/Encoder.pm
t/002_testset.t [deleted file]
t/004_testset.t [new file with mode: 0644]
t/700_roundtrip/v1/plain.t
t/700_roundtrip/v1/plain_canon.t
t/700_roundtrip/v1/snappy.t
t/700_roundtrip/v1/snappy_canon.t
t/700_roundtrip/v2/dedudep_strings.t
t/700_roundtrip/v2/freeze_thaw.t
t/700_roundtrip/v2/plain.t
t/700_roundtrip/v2/plain_canon.t
t/700_roundtrip/v2/readonly.t
t/700_roundtrip/v2/snappy.t
t/700_roundtrip/v2/snappy_canon.t
t/700_roundtrip/v2/snappy_incr.t
t/700_roundtrip/v2/snappy_incr_canon.t
t/700_roundtrip/v2/sort_keys.t
t/700_roundtrip/v3/dedudep_strings.t
t/700_roundtrip/v3/freeze_thaw.t
t/700_roundtrip/v3/plain.t
t/700_roundtrip/v3/plain_canon.t
t/700_roundtrip/v3/readonly.t
t/700_roundtrip/v3/snappy.t
t/700_roundtrip/v3/snappy_canon.t
t/700_roundtrip/v3/snappy_incr.t
t/700_roundtrip/v3/snappy_incr_canon.t
t/700_roundtrip/v3/sort_keys.t
t/700_roundtrip/v3/zlib.t
t/700_roundtrip/v3/zlib_force.t
t/lib/Sereal/TestSet.pm

index 595d9d2ea9dbc08c39e8c0257609460b8f82112c..c976cbd9be281c38d25052ea07a318f9ad629bb9 100644 (file)
--- a/MANIFEST
+++ b/MANIFEST
@@ -35,8 +35,8 @@ srl_inline.h
 srl_protocol.h
 t/001_load.t
 t/002_constants.t
-t/002_testset.t
 t/003_ptable.t
+t/004_testset.t
 t/010_desperate.t
 t/011_aliased_dedupe.t
 t/020_sort_keys.t
index 042b86dcf20059679f1c891a26dda554e2dbd6c3..5cb0a60c0f1bea42ecd8b9a5eb3e7b5309fd83d8 100644 (file)
--- a/META.json
+++ b/META.json
@@ -55,5 +55,5 @@
          "url" : "git://github.com/Sereal/Sereal.git"
       }
    },
-   "version" : "3.001_006"
+   "version" : "3.001_007"
 }
index 8b59bcea0ed2f3caa3c8800c54c749e52afc8e56..e92ef7578b97c8ebd840bb7efa0d9f002d09c678 100644 (file)
--- a/META.yml
+++ b/META.yml
@@ -32,4 +32,4 @@ requires:
 resources:
   bugtracker: https://github.com/Sereal/Sereal/issues
   repository: git://github.com/Sereal/Sereal.git
-version: 3.001_006
+version: 3.001_007
index 36f7e6dfa5dfb5c67b583ace51f2d30307e18ebd..c7b1e4e6afa794711623b75b6c02be9d2b373919 100644 (file)
@@ -5,7 +5,7 @@ use warnings;
 use Carp qw/croak/;
 use XSLoader;
 
-our $VERSION = '3.001_006'; # Don't forget to update the TestCompat set for testing against installed decoders!
+our $VERSION = '3.001_007'; # Don't forget to update the TestCompat set for testing against installed decoders!
 our $XS_VERSION = $VERSION; $VERSION= eval $VERSION;
 
 # not for public consumption, just for testing.
@@ -236,11 +236,26 @@ do so.
 Do note that the setting is somewhat approximate. Setting it to 10000 may break at
 somewhere between 9997 and 10003 nested structures depending on their types.
 
+=head3 canoncial
+
+Enable all options which are related to producing canonical output, so that
+two strucutures with similar contents produce the same serialized form.
+
+See the caveats elsewhere in this document about producing canonical output.
+
+Currently sets the default for the following parameters: C<canonical_refs>
+and C<sort_keys>. If the option is explicitly set then this setting is ignored.
+More options may be added in the future.
+
+You are warned that use of this option may incur additional performance penalties
+in a future release by enabling other options than those listed here.
+
 =head3 canonical_refs
 
 Normally C<Sereal::Encoder> will ARRAYREF and HASHREF tags when the item contains
 less than 16 items, and and is not referenced more than once. This flag will
-override this optimization and use a standard REFN ARRAY style tag output.
+override this optimization and use a standard REFN ARRAY style tag output. This
+is primarily useful for producing canoncial output and for testing Sereal itself.
 
 =head3 sort_keys
 
diff --git a/t/002_testset.t b/t/002_testset.t
deleted file mode 100644 (file)
index 25b8fa6..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
-#!perl
-use strict;
-use warnings;
-use Sereal::Decoder;
-use Data::Dumper;
-use File::Spec;
-
-# test our test framework
-
-use lib File::Spec->catdir(qw(t lib));
-BEGIN {
-    lib->import('lib')
-        if !-d 't';
-}
-
-use Sereal::TestSet qw(:all);
-use Test::More;
-# needs more tests
-ok(_deep_cmp(["x"],{}));
-ok(_deep_cmp({"x"=>1},{"y"=>1}));
-ok(_deep_cmp({"x"=>1},{"x"=>2}));
-ok(_deep_cmp({"x"=>1},{"x"=>2,"y"=>1}));
-ok(!_deep_cmp({"x"=>1},{"x"=>1}));
-ok(!_deep_cmp(["x"],["x"]));
-ok(_deep_cmp(["x"],["y","p"]));
-ok(_deep_cmp(["a","x"],["y"]));
-ok(_test_str("test","foo","bar"));
-ok(!_test_str("test","aaa","aaa"));
-
-pass();
-done_testing();
-
diff --git a/t/004_testset.t b/t/004_testset.t
new file mode 100644 (file)
index 0000000..20719c3
--- /dev/null
@@ -0,0 +1,36 @@
+#!perl
+use strict;
+use warnings;
+use Data::Dumper;
+use File::Spec;
+
+# test our test framework
+
+use lib File::Spec->catdir(qw(t lib));
+BEGIN {
+    lib->import('lib')
+        if !-d 't';
+}
+
+use Sereal::TestSet qw(:all);
+use Test::More;
+
+# needs more tests
+ok(_deep_cmp(["x"],{}));
+ok(_deep_cmp({"x"=>1},{"y"=>1}));
+ok(_deep_cmp({"x"=>1},{"x"=>2}));
+ok(_deep_cmp({"x"=>1},{"x"=>2,"y"=>1}));
+ok(!_deep_cmp({"x"=>1},{"x"=>1}));
+ok(!_deep_cmp(["x"],["x"]));
+ok(_deep_cmp(["x"],["y","p"]));
+ok(_deep_cmp(["a","x"],["y"]));
+ok(_cmp_str("foo","bar"));
+ok(!_cmp_str("aaa","aaa"));
+ok(_cmp_str("aaacowbbb","aaadogbb"));
+my $l= "ba\xDF";
+my $u= $l;
+utf8::upgrade($u);
+ok(_cmp_str($l,$u));
+pass();
+done_testing();
+
index 49f7e03e6f713ab1ce4b999abc58f56ea9a24355..5f272a4e478bcf346fd2602b82e133a97b5ab6cd 100644 (file)
@@ -1,7 +1,6 @@
 #!perl
 use strict;
 use warnings;
-use Sereal::Decoder;
 use Data::Dumper;
 use File::Spec;
 
index 5f95299b7770c09cd68fe2da79df3d6389842ed2..00cbb89e77680efda3c8a7f23f61cd101ed84ff4 100644 (file)
@@ -1,7 +1,6 @@
 #!perl
 use strict;
 use warnings;
-use Sereal::Decoder;
 use Data::Dumper;
 use File::Spec;
 
index a9735e03ef6fccfe3587641e6d391510a1ba6e9a..02ed97b4732f04b348e70d4b637fb426087330fe 100644 (file)
@@ -1,7 +1,6 @@
 #!perl
 use strict;
 use warnings;
-use Sereal::Decoder;
 use Data::Dumper;
 use File::Spec;
 
index 9b8deb59dad4c0142a30b6f058eec4bdf57153f2..acb9611091cda3a86f74fd9ad748f6abc20a82d3 100644 (file)
@@ -1,7 +1,6 @@
 #!perl
 use strict;
 use warnings;
-use Sereal::Decoder;
 use Data::Dumper;
 use File::Spec;
 
index 41473a6ffdcaa27203d81e609b06214ad83187dc..f0590bd7bc7e6de0a5310decce107f172bed9faf 100644 (file)
@@ -1,7 +1,6 @@
 #!perl
 use strict;
 use warnings;
-use Sereal::Decoder;
 use Data::Dumper;
 use File::Spec;
 
index 35913aa860aa4306eea73da54535396e9e61ca1f..4efd5d0eb6a9757213daa398eda5b0ec53fd9fab 100644 (file)
@@ -1,7 +1,6 @@
 #!perl
 use strict;
 use warnings;
-use Sereal::Decoder;
 use Data::Dumper;
 use File::Spec;
 
index 49f7e03e6f713ab1ce4b999abc58f56ea9a24355..5f272a4e478bcf346fd2602b82e133a97b5ab6cd 100644 (file)
@@ -1,7 +1,6 @@
 #!perl
 use strict;
 use warnings;
-use Sereal::Decoder;
 use Data::Dumper;
 use File::Spec;
 
index 5f95299b7770c09cd68fe2da79df3d6389842ed2..00cbb89e77680efda3c8a7f23f61cd101ed84ff4 100644 (file)
@@ -1,7 +1,6 @@
 #!perl
 use strict;
 use warnings;
-use Sereal::Decoder;
 use Data::Dumper;
 use File::Spec;
 
index 08a2916d494a7e782e0ae7859bdc5d5ca7491772..238fc8ea0afe21af5156a59a57fc64d937b0ea36 100644 (file)
@@ -1,7 +1,6 @@
 #!perl
 use strict;
 use warnings;
-use Sereal::Decoder;
 use Data::Dumper;
 use File::Spec;
 
index a9735e03ef6fccfe3587641e6d391510a1ba6e9a..02ed97b4732f04b348e70d4b637fb426087330fe 100644 (file)
@@ -1,7 +1,6 @@
 #!perl
 use strict;
 use warnings;
-use Sereal::Decoder;
 use Data::Dumper;
 use File::Spec;
 
index 9b8deb59dad4c0142a30b6f058eec4bdf57153f2..acb9611091cda3a86f74fd9ad748f6abc20a82d3 100644 (file)
@@ -1,7 +1,6 @@
 #!perl
 use strict;
 use warnings;
-use Sereal::Decoder;
 use Data::Dumper;
 use File::Spec;
 
index ddd4bb95e44fd6e70593796314768eeed8862b8c..54c6485dfcc15a4a0417ddfdc38a8eb64fc18702 100644 (file)
@@ -1,7 +1,6 @@
 #!perl
 use strict;
 use warnings;
-use Sereal::Decoder;
 use Data::Dumper;
 use File::Spec;
 
index dd1d622c241ee70982457fdd309f6f70070404a7..6d5f4f9ee2f9e88eac04ecf1ffbcf57516ea0f1a 100644 (file)
@@ -1,7 +1,6 @@
 #!perl
 use strict;
 use warnings;
-use Sereal::Decoder;
 use Data::Dumper;
 use File::Spec;
 
index 61f543975751ab0ce9154655d77fbadf34cc4ce6..a31789ef733dd8cdd17cc67cec49c0364cff6bff 100644 (file)
@@ -1,7 +1,6 @@
 #!perl
 use strict;
 use warnings;
-use Sereal::Decoder;
 use Data::Dumper;
 use File::Spec;
 
index 41473a6ffdcaa27203d81e609b06214ad83187dc..f0590bd7bc7e6de0a5310decce107f172bed9faf 100644 (file)
@@ -1,7 +1,6 @@
 #!perl
 use strict;
 use warnings;
-use Sereal::Decoder;
 use Data::Dumper;
 use File::Spec;
 
index 35913aa860aa4306eea73da54535396e9e61ca1f..4efd5d0eb6a9757213daa398eda5b0ec53fd9fab 100644 (file)
@@ -1,7 +1,6 @@
 #!perl
 use strict;
 use warnings;
-use Sereal::Decoder;
 use Data::Dumper;
 use File::Spec;
 
index 49f7e03e6f713ab1ce4b999abc58f56ea9a24355..5f272a4e478bcf346fd2602b82e133a97b5ab6cd 100644 (file)
@@ -1,7 +1,6 @@
 #!perl
 use strict;
 use warnings;
-use Sereal::Decoder;
 use Data::Dumper;
 use File::Spec;
 
index 5f95299b7770c09cd68fe2da79df3d6389842ed2..00cbb89e77680efda3c8a7f23f61cd101ed84ff4 100644 (file)
@@ -1,7 +1,6 @@
 #!perl
 use strict;
 use warnings;
-use Sereal::Decoder;
 use Data::Dumper;
 use File::Spec;
 
index 08a2916d494a7e782e0ae7859bdc5d5ca7491772..238fc8ea0afe21af5156a59a57fc64d937b0ea36 100644 (file)
@@ -1,7 +1,6 @@
 #!perl
 use strict;
 use warnings;
-use Sereal::Decoder;
 use Data::Dumper;
 use File::Spec;
 
index a9735e03ef6fccfe3587641e6d391510a1ba6e9a..02ed97b4732f04b348e70d4b637fb426087330fe 100644 (file)
@@ -1,7 +1,6 @@
 #!perl
 use strict;
 use warnings;
-use Sereal::Decoder;
 use Data::Dumper;
 use File::Spec;
 
index 9b8deb59dad4c0142a30b6f058eec4bdf57153f2..acb9611091cda3a86f74fd9ad748f6abc20a82d3 100644 (file)
@@ -1,7 +1,6 @@
 #!perl
 use strict;
 use warnings;
-use Sereal::Decoder;
 use Data::Dumper;
 use File::Spec;
 
index ddd4bb95e44fd6e70593796314768eeed8862b8c..54c6485dfcc15a4a0417ddfdc38a8eb64fc18702 100644 (file)
@@ -1,7 +1,6 @@
 #!perl
 use strict;
 use warnings;
-use Sereal::Decoder;
 use Data::Dumper;
 use File::Spec;
 
index dd1d622c241ee70982457fdd309f6f70070404a7..6d5f4f9ee2f9e88eac04ecf1ffbcf57516ea0f1a 100644 (file)
@@ -1,7 +1,6 @@
 #!perl
 use strict;
 use warnings;
-use Sereal::Decoder;
 use Data::Dumper;
 use File::Spec;
 
index 61f543975751ab0ce9154655d77fbadf34cc4ce6..a31789ef733dd8cdd17cc67cec49c0364cff6bff 100644 (file)
@@ -1,7 +1,6 @@
 #!perl
 use strict;
 use warnings;
-use Sereal::Decoder;
 use Data::Dumper;
 use File::Spec;
 
index b541a4692a33379a44f1a507226756957d7256e9..1f082b7d37d51f7e50ee52feaad48e44ceefd23f 100644 (file)
@@ -1,7 +1,6 @@
 #!perl
 use strict;
 use warnings;
-use Sereal::Decoder;
 use Data::Dumper;
 use File::Spec;
 
index 37640019c0bb81e4e2e8e0c4c37a31549bf5b194..ec77263a7374f709ecde50fdc92bb7b30df43326 100644 (file)
@@ -1,7 +1,6 @@
 #!perl
 use strict;
 use warnings;
-use Sereal::Decoder;
 use Data::Dumper;
 use File::Spec;
 
index 726ac7166d746eb42e63dcda641c94a13ea8803a..79462986df125bf4c14a54a049e3ae8173ab3a61 100644 (file)
@@ -12,17 +12,18 @@ use Test::LongString;
 use Devel::Peek;
 use Encode qw(encode_utf8 is_utf8);
 use Scalar::Util qw(reftype blessed refaddr);
+use Data::Dumper;
 
 # Dynamically load constants from whatever is being tested
 our ($Class, $ConstClass);
 BEGIN {
-    if (defined $INC{"Sereal/Encoder.pm"}
-        and $INC{"Sereal/Encoder.pm"} =~ /\bblib\b/)
-    {
+    if (-e "lib/Sereal/Encoder") {
         $Class = 'Sereal::Encoder';
     }
-    else {
+    elsif (-e "lib/Sereal/Decoder") {
         $Class = 'Sereal::Decoder';
+    } else {
+        die "Could not find an applicable Sereal constants location";
     }
     $ConstClass = $Class . "::Constants";
     eval "use $ConstClass ':all'; 1"
@@ -48,7 +49,7 @@ our @EXPORT_OK = qw(
     setup_tests
     _deep_cmp
     _test
-    _test_str
+    _cmp_str
 );
 
 our %EXPORT_TAGS = (all => \@EXPORT_OK);
@@ -771,15 +772,17 @@ sub _test {
     if ($v1 ne $v2) {
         my $q1= Data::Dumper::qquote($v1);
         my $q2= Data::Dumper::qquote($v2);
-        return "msg: $q1 ne $q2"
+        return "$msg: $q1 ne $q2"
     }
     return;
 }
-sub _test_str {
-    my ($msg, $v1, $v2)= @_;
-    if (is_utf8($v1) != is_utf8($v2)) {
-        return "$msg: utf8 flag mismatch";
-    }
+sub _cmp_str {
+    my ($v1, $v2)= @_;
+    my $v1_is_utf8= is_utf8($v1);
+    my $v2_is_utf8= is_utf8($v2);
+
+    Encode::_utf8_off($v1); # turn off utf8, in case it is corrupt
+    Encode::_utf8_off($v2); # turn off utf8, in case it is corrupt
     if ($v1 eq $v2) {
         return;
     }
@@ -787,43 +790,67 @@ sub _test_str {
     $diff_start++ while $diff_start < length($v1)
                     and $diff_start < length($v2)
                     and substr($v1, $diff_start,1) eq substr($v2, $diff_start,1);
-    my $diff_end= $diff_start;
-    $diff_end++ while $diff_end < length($v1)
-                    and $diff_end < length($v2)
-                    and substr($v1, $diff_end,1) ne substr($v2, $diff_end,1);
+    my $diff_end= length($v1) < length($v2) ? length($v1) : length($v2);
+    $diff_end-- if $diff_end;
+
+    $diff_end-- while $diff_end > $diff_start
+                  and $diff_end > $diff_start
+                  and substr($v1, $diff_end-1,1) eq substr($v2, $diff_end-1,1);
     my $length_to_show= $diff_end - $diff_start;
-    $length_to_show= 30 if $length_to_show > 30;
+
+    my $max_context_len= 10;
+    my $max_diff_len= 30;
+
+    $length_to_show= $max_diff_len if $length_to_show > $max_diff_len;
+
 
     my $q1= Data::Dumper::qquote(substr($v1, $diff_start, $length_to_show ));
     my $q2= Data::Dumper::qquote(substr($v2, $diff_start, $length_to_show ));
-    my $context_start= $diff_start > 10 ? $diff_start - 10 : 0;
+    my $context_start= $diff_start > $max_context_len ? $diff_start - $max_context_len : 0;
 
     if ($context_start < $diff_start) {
-        $q1 = Data::Dumper::qquote(substr($v1,$context_start,10)) . " . " . $q1;
-        $q2 = Data::Dumper::qquote(substr($v2,$context_start,10)) . " . " . $q2;
+        $q1 = Data::Dumper::qquote(substr($v1,$context_start, $diff_start - $context_start)) . " . " . $q1;
+        $q2 = Data::Dumper::qquote(substr($v2,$context_start, $diff_start - $context_start)) . " . " . $q2;
     }
+
     if ($context_start > 0) {
         $q1 = "...$q1";
         $q2 = "...$q2";
     }
-    if ($length_to_show < 30) {
-        $q1 .= " . " . Data::Dumper::qquote(substr($v1, $diff_start + $length_to_show, 30-$length_to_show));
-        $q2 .= " . " . Data::Dumper::qquote(substr($v2, $diff_start + $length_to_show, 30-$length_to_show));
+    if ($length_to_show < $max_diff_len) {
+        $q1 .= " . " . Data::Dumper::qquote(substr($v1, $diff_start + $length_to_show, $max_diff_len - $length_to_show))
+            if $diff_start + $length_to_show < length($v1);
+        $q2 .= " . " . Data::Dumper::qquote(substr($v2, $diff_start + $length_to_show, $max_diff_len - $length_to_show))
+            if $diff_start + $length_to_show < length($v2);
     }
-    if ( $diff_start + 30 < length($v1) ) {
+    if ( $diff_start + $max_diff_len <= length($v1) ) {
         $q1 .= "..."
     }
-    if ( $diff_start + 30 < length($v2) ) {
+    if ( $diff_start + $max_diff_len <= length($v2) ) {
         $q2 .= "..."
     }
-    return ($msg, sprintf("%s at offset %d\nv1 = %s (length %d)\nv2 = %s (length %d)\n",
-        $msg, $diff_start, $q1, length($v1), $q2, length($v2)));
+    my $pad= length($q1) > length($q2) ? length($q1) : length($q2);
+    my $lpad= length(length($v1)) > length(length($v2)) ? length(length($v1)) : length(length($v2));
+
+    my $issues= "";
+    $issues .="; utf8 mismatch" if $v1_is_utf8 != $v2_is_utf8;
+    $issues .="; length mismatch" if length($v1) != length($v2);
+
+    my $ret= sprintf(  "strings different\n"
+                     . "first string difference at octet offset %d%s\n"
+                     . "want-octets = %*s (octets: %*d, utf8-flag: %d)\n"
+                     . " got-octets = %*s (octets: %*d, utf8-flag: %d)\n"
+        ,$diff_start, $issues,
+        -$pad, $q1, $lpad, length($v1), $v1_is_utf8,
+        -$pad, $q2, $lpad, length($v2), $v2_is_utf8,
+    );
+    return $ret;
 }
 
 sub _deep_cmp {
     my ($x, $y, $seenx, $seeny)= @_;
-    $seenx||={};
-    $seeny||={};
+    $seenx ||= {};
+    $seeny ||= {};
     my $cmp;
 
     $cmp= _test("defined mismatch",defined($x),defined($y))
@@ -868,7 +895,7 @@ sub _deep_cmp {
             die "Unknown reftype '",reftype($x)."'";
         }
     } else {
-        $cmp= _test_str("strings differ",$x,$y)
+        $cmp= _cmp_str($x,$y)
             and return $cmp;
     }
     return ""
@@ -880,7 +907,7 @@ sub deep_cmp {
     if ($diff) {
         my ($reason,$diag)= split /\n/, $diff, 2;
         fail("$name - $reason");
-        diag("$reason\n$diag") if $diag;
+        diag("$name - $diag") if $diag;
         return;
     }
     return 1;
@@ -928,7 +955,7 @@ sub run_roundtrip_tests_internal {
                 or do {
                     fail("$name ($ename, $mname, encoded defined)");
                     debug_checks(\$data, \$encoded, undef);
-                    last;
+                    next; #test
                 };
 
             my $decoded;
@@ -942,7 +969,7 @@ sub run_roundtrip_tests_internal {
                 or do {
                     fail("$name ($ename, $mname, decoded definedness)");
                     debug_checks(\$data, \$encoded, undef);
-                    last;
+                    next; #test
                 };
 
             # Second roundtrip
@@ -957,7 +984,7 @@ sub run_roundtrip_tests_internal {
                 or do {
                     fail("$name ($ename, $mname, encoded2 defined)");
                     debug_checks(\$data, \$encoded, \$decoded);
-                    last;
+                    next; #test
                 };
 
             my $decoded2;
@@ -970,7 +997,7 @@ sub run_roundtrip_tests_internal {
             defined($decoded2) == defined($data)
                 or do {
                     fail("$name ($ename, $mname, decoded2 defined)");
-                    last;
+                    next; #test
                 };
 
             # Third roundtrip
@@ -985,7 +1012,7 @@ sub run_roundtrip_tests_internal {
                 or do {
                     fail("$name ($ename, $mname, encoded3 defined)");
                     debug_checks(\$data, \$encoded, \$decoded);
-                    last;
+                    next; #test
                 };
 
             my $decoded3;
@@ -998,21 +1025,21 @@ sub run_roundtrip_tests_internal {
             defined($decoded3) == defined($data)
                 or do {
                     fail("$name ($ename, $mname, decoded3 defined)");
-                    last;
+                    next; #test
                 };
 
-            deep_cmp($decoded, $data,       "$name ($ename, $mname, decoded vs data)") or last;
-            deep_cmp($decoded2, $data,      "$name ($ename, $mname, decoded2 vs data)") or last;
-            deep_cmp($decoded2, $decoded,   "$name ($ename, $mname, decoded2 vs decoded)") or last;
+            deep_cmp($decoded, $data,       "$name ($ename, $mname, decoded vs data)") or next; #test
+            deep_cmp($decoded2, $data,      "$name ($ename, $mname, decoded2 vs data)") or next; #test
+            deep_cmp($decoded2, $decoded,   "$name ($ename, $mname, decoded2 vs decoded)") or next; #test
 
-            deep_cmp($decoded3, $data,      "$name ($ename, $mname, decoded3 vs data)") or last;
-            deep_cmp($decoded3, $decoded,   "$name ($ename, $mname, decoded3 vs decoded)") or last;
-            deep_cmp($decoded3, $decoded2,  "$name ($ename, $mname, decoded3 vs decoded2)") or last;
+            deep_cmp($decoded3, $data,      "$name ($ename, $mname, decoded3 vs data)") or next; #test
+            deep_cmp($decoded3, $decoded,   "$name ($ename, $mname, decoded3 vs decoded)") or next; #test
+            deep_cmp($decoded3, $decoded2,  "$name ($ename, $mname, decoded3 vs decoded2)") or next; #test
 
             if ( $ename =~ /canon/) {
-                deep_cmp($encoded2, $encoded,  "$name ($ename, $mname, encoded2 vs encoded)") or last;
-                deep_cmp($encoded3, $encoded,  "$name ($ename, $mname, encoded3 vs encoded)") or last;
-                deep_cmp($encoded3, $encoded2, "$name ($ename, $mname, encoded3 vs encoded2)") or last;
+                deep_cmp($encoded2, $encoded,  "$name ($ename, $mname, encoded2 vs encoded)") or next; #test
+                deep_cmp($encoded3, $encoded,  "$name ($ename, $mname, encoded3 vs encoded)") or next; #test
+                deep_cmp($encoded3, $encoded2, "$name ($ename, $mname, encoded3 vs encoded2)") or next; #test
 
                 if ($ENV{SEREAL_TEST_SAVE_OUTPUT} and $mname eq 'object-oriented') {
                     use File::Path;
@@ -1039,8 +1066,8 @@ sub run_roundtrip_tests_internal {
                     }
                 }
             }
+            pass("$name ($ename, $mname)");
         } # end method type
-        pass("$name ($ename)");
     } # end test type
 }