Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package perl-Sereal-Decoder for 
openSUSE:Factory checked in at 2022-09-09 18:27:49
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/perl-Sereal-Decoder (Old)
 and      /work/SRC/openSUSE:Factory/.perl-Sereal-Decoder.new.2083 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "perl-Sereal-Decoder"

Fri Sep  9 18:27:49 2022 rev:12 rq:1002182 version:5.001

Changes:
--------
--- /work/SRC/openSUSE:Factory/perl-Sereal-Decoder/perl-Sereal-Decoder.changes  
2022-08-16 17:08:32.720021931 +0200
+++ 
/work/SRC/openSUSE:Factory/.perl-Sereal-Decoder.new.2083/perl-Sereal-Decoder.changes
        2022-09-09 18:29:22.229243157 +0200
@@ -1,0 +2,6 @@
+Sun Sep  4 03:12:20 UTC 2022 - Tina M??ller <[email protected]>
+
+- updated to 5.001
+   see /usr/share/doc/packages/perl-Sereal-Decoder/Changes
+
+-------------------------------------------------------------------

Old:
----
  Sereal-Decoder-4.025.tar.gz

New:
----
  Sereal-Decoder-5.001.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ perl-Sereal-Decoder.spec ++++++
--- /var/tmp/diff_new_pack.bcD0QQ/_old  2022-09-09 18:29:22.645244252 +0200
+++ /var/tmp/diff_new_pack.bcD0QQ/_new  2022-09-09 18:29:22.649244263 +0200
@@ -18,7 +18,7 @@
 
 %define cpan_name Sereal-Decoder
 Name:           perl-Sereal-Decoder
-Version:        4.025
+Version:        5.001
 Release:        0
 License:        Artistic-1.0 OR GPL-1.0-or-later
 Summary:        Binary serialization module for Perl (decoder part)

++++++ Sereal-Decoder-4.025.tar.gz -> Sereal-Decoder-5.001.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Sereal-Decoder-4.025/Changes 
new/Sereal-Decoder-5.001/Changes
--- old/Sereal-Decoder-4.025/Changes    2022-07-28 13:57:13.000000000 +0200
+++ new/Sereal-Decoder-5.001/Changes    2022-09-03 15:37:06.000000000 +0200
@@ -1,10 +1,32 @@
 Revision history for Perl extension Sereal-Decoder
 
 ****************************************************************
-* Warning: For a seamless upgrade, upgrade to version 4        *
-*          of the decoder before upgrading to version 4 of the *
+* Warning: For a seamless upgrade, upgrade to version 5        *
+*          of the decoder before upgrading to version 5 of the *
 *          encoder!                                            *
 ****************************************************************
+5.001
+    * First official release of protocol 5. Better support for non
+      standard NV types. Support for the new Perl 5.36 bools.
+      Upgrade *Sereal::Decoder* FIRST.
+
+5.000_002
+    * Prerelease CPAN testing. Build fixes for quadmath and
+      longdouble perls. Certain tests were failing with the old
+      versions which were subtly broken on quadmath or longdouble
+      machines. These tests are now skipped on these builds. You
+      will not be able to fully test this platform until you install
+      the Decoder, and then install the Encoder.
+
+5.000_001
+    * Prerelease CPAN testing for 5.000_000.
+
+5.000_000 Tue Aug 30, 2022
+    * Support quadmath builds with FLOAT_128 tag type.
+    * Support YES/NO tags for booleans. Requires perl 5.36.
+
+---
+
 4.025 Thr Jul 28, 2022
     * Release with build fixes for threaded perls and MANIFEST
       update. Oops.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Sereal-Decoder-4.025/MANIFEST 
new/Sereal-Decoder-5.001/MANIFEST
--- old/Sereal-Decoder-4.025/MANIFEST   2022-07-28 14:05:36.000000000 +0200
+++ new/Sereal-Decoder-5.001/MANIFEST   2022-09-03 15:40:34.000000000 +0200
@@ -111,6 +111,23 @@
 t/700_roundtrip/v4/zlib_force.t
 t/700_roundtrip/v4/zstd.t
 t/700_roundtrip/v4/zstd_force.t
+t/700_roundtrip/v5/dedudep_strings.t
+t/700_roundtrip/v5/freeze_thaw.t
+t/700_roundtrip/v5/plain.t
+t/700_roundtrip/v5/plain_canon.t
+t/700_roundtrip/v5/readonly.t
+t/700_roundtrip/v5/snappy.t
+t/700_roundtrip/v5/snappy_and_warn_unknown.t
+t/700_roundtrip/v5/snappy_canon.t
+t/700_roundtrip/v5/snappy_incr.t
+t/700_roundtrip/v5/snappy_incr_canon.t
+t/700_roundtrip/v5/sort_keys.t
+t/700_roundtrip/v5/sort_keys_perl.t
+t/700_roundtrip/v5/sort_keys_perl_rev.t
+t/700_roundtrip/v5/zlib.t
+t/700_roundtrip/v5/zlib_force.t
+t/700_roundtrip/v5/zstd.t
+t/700_roundtrip/v5/zstd_force.t
 t/800_threads.t
 t/900_regr_issue_15.t
 t/901_regr_segv.t
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Sereal-Decoder-4.025/META.json 
new/Sereal-Decoder-5.001/META.json
--- old/Sereal-Decoder-4.025/META.json  2022-07-28 14:05:36.000000000 +0200
+++ new/Sereal-Decoder-5.001/META.json  2022-09-03 15:40:34.000000000 +0200
@@ -70,6 +70,6 @@
          "url" : "git://github.com/Sereal/Sereal.git"
       }
    },
-   "version" : "4.025",
-   "x_serialization_backend" : "JSON::PP version 4.07"
+   "version" : "5.001",
+   "x_serialization_backend" : "JSON::PP version 4.11"
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Sereal-Decoder-4.025/META.yml 
new/Sereal-Decoder-5.001/META.yml
--- old/Sereal-Decoder-4.025/META.yml   2022-07-28 14:05:36.000000000 +0200
+++ new/Sereal-Decoder-5.001/META.yml   2022-09-03 15:40:34.000000000 +0200
@@ -34,5 +34,5 @@
 resources:
   bugtracker: https://github.com/Sereal/Sereal/issues
   repository: git://github.com/Sereal/Sereal.git
-version: '4.025'
+version: '5.001'
 x_serialization_backend: 'CPAN::Meta::YAML version 0.018'
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Sereal-Decoder-4.025/author_tools/hobodecoder.pl 
new/Sereal-Decoder-5.001/author_tools/hobodecoder.pl
--- old/Sereal-Decoder-4.025/author_tools/hobodecoder.pl        2022-02-20 
04:51:47.000000000 +0100
+++ new/Sereal-Decoder-5.001/author_tools/hobodecoder.pl        2022-08-30 
18:57:40.000000000 +0200
@@ -112,7 +112,7 @@
     $hlen= length($done);
 }
 
-my ( $len_f, $len_d, $len_D );
+my ( $len_f, $len_d, $len_D, $len_F );
 
 sub parse_float {
     $len_f ||= length( pack( "f", 0 ) );
@@ -121,6 +121,14 @@
     return unpack( "f", $v );
 }
 
+sub parse_float_128 {
+    $len_F ||= length( pack( "F", 0 ) );
+    my $v= _chop_data_prefix($len_F);
+    $done .= $v;
+    return unpack( "F", $v );
+}
+
+
 sub parse_double {
     $len_d ||= length( pack( "d", 0 ) );
     my $v= _chop_data_prefix($len_d);
@@ -190,6 +198,9 @@
     elsif ( $o == SRL_HDR_LONG_DOUBLE ) {
         printf "LONG_DOUBLE(%f)\n", parse_long_double();
     }
+    elsif ( $o == SRL_HDR_FLOAT_128 ) {
+        printf "FLOAT_128(%f)\n", parse_float_128();
+    }
     elsif ( $o == SRL_HDR_REFN ) {
         printf "REFN\n";
         parse_sv( $ind . "  " );
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Sereal-Decoder-4.025/inc/Sereal/BuildTools.pm 
new/Sereal-Decoder-5.001/inc/Sereal/BuildTools.pm
--- old/Sereal-Decoder-4.025/inc/Sereal/BuildTools.pm   2022-02-20 
05:05:20.000000000 +0100
+++ new/Sereal-Decoder-5.001/inc/Sereal/BuildTools.pm   2022-08-30 
19:40:40.000000000 +0200
@@ -145,6 +145,13 @@
             grep { exists $ENV{$_} } ( qw(NOINLINE DEBUG MEMDEBUG NDEBUG), 
@defs ) );
 
     $defines .= " -DNDEBUG" unless $ENV{DEBUG};
+
+    if ($Config{usequadmath}) {
+        $defines .= " -DHAS_QUADMATH";
+    } elsif ($Config{uselongdouble}) {
+        $defines .= " -DHAS_LONGDOUBLE";
+    }
+
     if ( $Config{osname} eq 'hpux' && not $Config{gccversion} ) {
 
         # HP-UX cc does not support inline.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Sereal-Decoder-4.025/lib/Sereal/Decoder/Constants.pm 
new/Sereal-Decoder-5.001/lib/Sereal/Decoder/Constants.pm
--- old/Sereal-Decoder-4.025/lib/Sereal/Decoder/Constants.pm    2022-07-28 
13:57:13.000000000 +0200
+++ new/Sereal-Decoder-5.001/lib/Sereal/Decoder/Constants.pm    2022-09-03 
15:37:12.000000000 +0200
@@ -4,7 +4,7 @@
 require Exporter;
 our @ISA= qw(Exporter);
 
-our $VERSION= '4.025'; # Don't forget to update the TestCompat set for testing 
against installed encoders!
+our $VERSION= '5.001'; # Don't forget to update the TestCompat set for testing 
against installed encoders!
 
 our ( @EXPORT_OK, %DEFINE, %TAG_INFO_HASH, @TAG_INFO_ARRAY );
 
@@ -26,6 +26,7 @@
         "SRL_HDR_EXTEND"                           => 62,
         "SRL_HDR_FALSE"                            => 58,
         "SRL_HDR_FLOAT"                            => 34,
+        "SRL_HDR_FLOAT_128"                        => 56,
         "SRL_HDR_HASH"                             => 42,
         "SRL_HDR_HASHREF"                          => 80,
         "SRL_HDR_HASHREF_HIGH"                     => 95,
@@ -35,6 +36,7 @@
         "SRL_HDR_NEG"                              => 16,
         "SRL_HDR_NEG_HIGH"                         => 31,
         "SRL_HDR_NEG_LOW"                          => 16,
+        "SRL_HDR_NO"                               => 52,
         "SRL_HDR_OBJECT"                           => 44,
         "SRL_HDR_OBJECTV"                          => 45,
         "SRL_HDR_OBJECTV_FREEZE"                   => 51,
@@ -47,9 +49,9 @@
         "SRL_HDR_REFN"                             => 40,
         "SRL_HDR_REFP"                             => 41,
         "SRL_HDR_REGEXP"                           => 49,
-        "SRL_HDR_RESERVED"                         => 52,
-        "SRL_HDR_RESERVED_HIGH"                    => 56,
-        "SRL_HDR_RESERVED_LOW"                     => 52,
+        "SRL_HDR_RESERVED"                         => 54,
+        "SRL_HDR_RESERVED_HIGH"                    => 55,
+        "SRL_HDR_RESERVED_LOW"                     => 54,
         "SRL_HDR_SHORT_BINARY"                     => 96,
         "SRL_HDR_SHORT_BINARY_HIGH"                => 127,
         "SRL_HDR_SHORT_BINARY_LOW"                 => 96,
@@ -59,16 +61,17 @@
         "SRL_HDR_UNDEF"                            => 37,
         "SRL_HDR_VARINT"                           => 32,
         "SRL_HDR_WEAKEN"                           => 48,
+        "SRL_HDR_YES"                              => 53,
         "SRL_HDR_ZIGZAG"                           => 33,
         "SRL_MAGIC_STRING"                         => "=srl",
         "SRL_MAGIC_STRING_HIGHBIT"                 => "=\363rl",
-        "SRL_MAGIC_STRING_HIGHBIT_UINT_BE"         => "1039364716",
-        "SRL_MAGIC_STRING_HIGHBIT_UINT_LE"         => "1819472701",
+        "SRL_MAGIC_STRING_HIGHBIT_UINT_BE"         => 1039364716,
+        "SRL_MAGIC_STRING_HIGHBIT_UINT_LE"         => 1819472701,
         "SRL_MAGIC_STRING_HIGHBIT_UTF8"            => "=\303\263rl",
-        "SRL_MAGIC_STRING_HIGHBIT_UTF8_UINT_BE"    => "1036235634",
-        "SRL_MAGIC_STRING_HIGHBIT_UTF8_UINT_LE"    => "1924383549",
-        "SRL_MAGIC_STRING_UINT_BE"                 => "1030976108",
-        "SRL_MAGIC_STRING_UINT_LE"                 => "1819439933",
+        "SRL_MAGIC_STRING_HIGHBIT_UTF8_UINT_BE"    => 1036235634,
+        "SRL_MAGIC_STRING_HIGHBIT_UTF8_UINT_LE"    => 1924383549,
+        "SRL_MAGIC_STRING_UINT_BE"                 => 1030976108,
+        "SRL_MAGIC_STRING_UINT_LE"                 => 1819439933,
         "SRL_MAGIC_STRLEN"                         => 4,
         "SRL_MASK_ARRAYREF_COUNT"                  => 15,
         "SRL_MASK_HASHREF_COUNT"                   => 15,
@@ -83,7 +86,7 @@
         "SRL_PROTOCOL_ENCODING_ZSTD"               => 64,
         "SRL_PROTOCOL_HDR_CONTINUE"                => 8,
         "SRL_PROTOCOL_HDR_USER_DATA"               => 1,
-        "SRL_PROTOCOL_VERSION"                     => 4,
+        "SRL_PROTOCOL_VERSION"                     => 5,
         "SRL_PROTOCOL_VERSION_BITS"                => 4,
         "SRL_PROTOCOL_VERSION_MASK"                => 15
     );
@@ -602,52 +605,48 @@
 
     # autoupdated by Sereal.git:Perl/shared/author_tools/update_from_header.pl 
do not modify directly!
     {
-        "comment"    => "reserved",
-        "masked"     => 1,
-        "masked_val" => 0,
-        "name"       => "RESERVED_0",
-        "type_name"  => "RESERVED",
+        "comment"    => "SvIsBOOL() == PL_No,  5.36 and later only (json 
false)",
+        "name"       => "NO",
+        "type_name"  => "NO",
         "type_value" => 52,
         "value"      => 52
     },
 
     # autoupdated by Sereal.git:Perl/shared/author_tools/update_from_header.pl 
do not modify directly!
     {
-        "masked"     => 1,
-        "masked_val" => 1,
-        "name"       => "RESERVED_1",
-        "type_name"  => "RESERVED",
-        "type_value" => 52,
+        "comment"    => "SvIsBOOL() == PL_Yes, 5.36 and later only (json 
true)",
+        "name"       => "YES",
+        "type_name"  => "YES",
+        "type_value" => 53,
         "value"      => 53
     },
 
     # autoupdated by Sereal.git:Perl/shared/author_tools/update_from_header.pl 
do not modify directly!
     {
         "masked"     => 1,
-        "masked_val" => 2,
-        "name"       => "RESERVED_2",
+        "masked_val" => 0,
+        "name"       => "RESERVED_0",
         "type_name"  => "RESERVED",
-        "type_value" => 52,
+        "type_value" => 54,
         "value"      => 54
     },
 
     # autoupdated by Sereal.git:Perl/shared/author_tools/update_from_header.pl 
do not modify directly!
     {
         "masked"     => 1,
-        "masked_val" => 3,
-        "name"       => "RESERVED_3",
+        "masked_val" => 1,
+        "name"       => "RESERVED_1",
         "type_name"  => "RESERVED",
-        "type_value" => 52,
+        "type_value" => 54,
         "value"      => 55
     },
 
     # autoupdated by Sereal.git:Perl/shared/author_tools/update_from_header.pl 
do not modify directly!
     {
-        "masked"     => 1,
-        "masked_val" => 4,
-        "name"       => "RESERVED_4",
-        "type_name"  => "RESERVED",
-        "type_value" => 52,
+        "comment"    => "quadmath _float128",
+        "name"       => "FLOAT_128",
+        "type_name"  => "FLOAT_128",
+        "type_value" => 56,
         "value"      => 56
     },
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Sereal-Decoder-4.025/lib/Sereal/Decoder.pm 
new/Sereal-Decoder-5.001/lib/Sereal/Decoder.pm
--- old/Sereal-Decoder-4.025/lib/Sereal/Decoder.pm      2022-07-28 
13:57:13.000000000 +0200
+++ new/Sereal-Decoder-5.001/lib/Sereal/Decoder.pm      2022-09-03 
15:37:12.000000000 +0200
@@ -5,7 +5,7 @@
 use Carp qw/croak/;
 use XSLoader;
 
-our $VERSION= '4.025'; # Don't forget to update the TestCompat set for testing 
against installed encoders!
+our $VERSION= '5.001'; # Don't forget to update the TestCompat set for testing 
against installed encoders!
 our $XS_VERSION= $VERSION; $VERSION= eval $VERSION;
 
 # not for public consumption, just for testing.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Sereal-Decoder-4.025/srl_common.h 
new/Sereal-Decoder-5.001/srl_common.h
--- old/Sereal-Decoder-4.025/srl_common.h       2022-02-20 04:25:44.000000000 
+0100
+++ new/Sereal-Decoder-5.001/srl_common.h       2022-08-30 20:51:38.000000000 
+0200
@@ -14,6 +14,15 @@
 #define expect_true(expr)  expect((expr) != 0, 1)
 
 /* these defines are somewhat borrowed from miniz.c */
+#ifndef HAS_LONGDOUBLE
+#define SRL_EXTENDED_PRECISION_LONG_DOUBLE 0
+#endif
+
+#ifdef HAS_QUADMATH
+#define SRL_EXTENDED_PRECISION_LONG_DOUBLE 0
+#endif
+
+#define HAS_LONG_FLOAT (sizeof(NV) > sizeof(double))
 
 #if defined(_M_IX86) || defined(_M_X64) || defined(__i386__) || 
defined(__i386) || defined(__i486__) || defined(__i486) || defined(i386) || 
defined(__ia64__) || defined(__x86_64__) || defined(__x86_64)
 /* SRL_X86_OR_X64_CPU is only used to help set the below macros. */
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Sereal-Decoder-4.025/srl_decoder.c 
new/Sereal-Decoder-5.001/srl_decoder.c
--- old/Sereal-Decoder-4.025/srl_decoder.c      2022-07-28 13:57:13.000000000 
+0200
+++ new/Sereal-Decoder-5.001/srl_decoder.c      2022-08-30 21:11:53.000000000 
+0200
@@ -120,6 +120,7 @@
 SRL_STATIC_INLINE void srl_read_long_double(pTHX_ srl_decoder_t *dec, SV* 
into);
 SRL_STATIC_INLINE void srl_read_double(pTHX_ srl_decoder_t *dec, SV* into);
 SRL_STATIC_INLINE void srl_read_float(pTHX_ srl_decoder_t *dec, SV* into);
+SRL_STATIC_INLINE void srl_read_float_128(pTHX_ srl_decoder_t *dec, SV* into);
 SRL_STATIC_INLINE void srl_read_string(pTHX_ srl_decoder_t *dec, int is_utf8, 
SV* into);
 SRL_STATIC_INLINE void srl_read_varint_into(pTHX_ srl_decoder_t *dec, SV* 
into, SV** container, const U8 *track_it);
 SRL_STATIC_INLINE void srl_read_zigzag_into(pTHX_ srl_decoder_t *dec, SV* 
into, SV** container, const U8 *track_it);
@@ -1062,6 +1063,9 @@
     float f;
     double d;
     long double ld;
+#ifdef HAS_QUADMATH
+    __float128 nv;
+#endif
 };
 
 /* XXX Most (if not all?) non-x86 platforms are strict in their
@@ -1082,6 +1086,25 @@
     dec->buf.pos+= sizeof(float);
 }
 
+/* XXX Most (if not all?) non-x86 platforms are strict in their
+ * floating point alignment.  So maybe this logic should be the other
+ * way: default to strict, and do sloppy only if x86? */
+
+SRL_STATIC_INLINE void
+srl_read_float_128(pTHX_ srl_decoder_t *dec, SV* into)
+{
+#ifdef HAS_QUADMATH
+    union myfloat val;
+    SRL_RDR_ASSERT_SPACE(dec->pbuf, sizeof(NV), " while reading FLOAT");
+    Copy(dec->buf.pos,val.c,sizeof(NV),U8);
+    sv_setnv(into, (NV)val.nv);
+    dec->buf.pos += sizeof(NV);
+#else
+    SRL_RDR_ERROR(dec->pbuf, "FLOAT_128 not supported. No quadmath support in 
this perl.");
+#endif
+}
+
+
 
 SRL_STATIC_INLINE void
 srl_read_double(pTHX_ srl_decoder_t *dec, SV* into)
@@ -1906,12 +1929,19 @@
         case SRL_HDR_ZIGZAG:        srl_read_zigzag_into(aTHX_ dec, into, 
container, track_it); break;
 
         case SRL_HDR_FLOAT:         srl_read_float(aTHX_ dec, into);           
       break;
+
+        case SRL_HDR_FLOAT_128:     srl_read_float_128(aTHX_ dec, into);       
       break;
+
         case SRL_HDR_DOUBLE:        srl_read_double(aTHX_ dec, into);          
       break;
+
         case SRL_HDR_LONG_DOUBLE:   srl_read_long_double(aTHX_ dec, into);     
       break;
 
-        case SRL_HDR_TRUE:          sv_setsv(into, &PL_sv_yes);                
       break;
+        case SRL_HDR_NO:            /* fallthrough */
         case SRL_HDR_FALSE:         sv_setsv(into, &PL_sv_no);                 
       break;
 
+        case SRL_HDR_YES:           /* fallthrough */
+        case SRL_HDR_TRUE:          sv_setsv(into, &PL_sv_yes);                
       break;
+
         case SRL_HDR_CANONICAL_UNDEF: /* fallthrough (XXX: is this right?)*/
         case SRL_HDR_UNDEF:
         {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Sereal-Decoder-4.025/srl_protocol.h 
new/Sereal-Decoder-5.001/srl_protocol.h
--- old/Sereal-Decoder-4.025/srl_protocol.h     2020-02-02 12:33:20.000000000 
+0100
+++ new/Sereal-Decoder-5.001/srl_protocol.h     2022-09-01 15:03:25.000000000 
+0200
@@ -59,11 +59,11 @@
     REGEXP            | "1"  |  49 | 0x31 | 0b00110001 | <PATTERN-STR-TAG> 
<MODIFIERS-STR-TAG>
     OBJECT_FREEZE     | "2"  |  50 | 0x32 | 0b00110010 | <STR-TAG> <ITEM-TAG> 
- class, object-item. Need to call "THAW" method on class after decoding
     OBJECTV_FREEZE    | "3"  |  51 | 0x33 | 0b00110011 | <OFFSET-VARINT> 
<ITEM-TAG> - (OBJECTV_FREEZE is to OBJECT_FREEZE as OBJECTV is to OBJECT)
-    RESERVED_0        | "4"  |  52 | 0x34 | 0b00110100 | reserved
-    RESERVED_1        | "5"  |  53 | 0x35 | 0b00110101 |
-    RESERVED_2        | "6"  |  54 | 0x36 | 0b00110110 |
-    RESERVED_3        | "7"  |  55 | 0x37 | 0b00110111 |
-    RESERVED_4        | "8"  |  56 | 0x38 | 0b00111000 | reserved
+    NO                | "4"  |  52 | 0x34 | 0b00110100 | SvIsBOOL() == PL_No,  
5.36 and later only (json false)
+    YES               | "5"  |  53 | 0x35 | 0b00110101 | SvIsBOOL() == PL_Yes, 
5.36 and later only (json true)
+    RESERVED_0        | "6"  |  54 | 0x36 | 0b00110110 |
+    RESERVED_1        | "7"  |  55 | 0x37 | 0b00110111 |
+    FLOAT_128         | "8"  |  56 | 0x38 | 0b00111000 | quadmath _float128
     CANONICAL_UNDEF   | "9"  |  57 | 0x39 | 0b00111001 | undef (PL_sv_undef) - 
"the" Perl undef (see notes)
     FALSE             | ":"  |  58 | 0x3a | 0b00111010 | false (PL_sv_no)
     TRUE              | ";"  |  59 | 0x3b | 0b00111011 | true  (PL_sv_yes)
@@ -155,7 +155,7 @@
 #define SRL_MAGIC_STRING_HIGHBIT_UTF8_UINT_LE   0x72B3C33D      /* first four 
bytes of SRL_MAGIC_STRING encoded as UTF8, little endian */
 #define SRL_MAGIC_STRING_HIGHBIT_UTF8_UINT_BE   0x3DC3B372      /* first four 
bytes of SRL_MAGIC_STRING encoded as UTF8, big endian */
 
-#define SRL_PROTOCOL_VERSION            ( 4 )
+#define SRL_PROTOCOL_VERSION            ( 5 )
 #define SRL_PROTOCOL_VERSION_BITS       ( 4 )           /* how many bits we 
use for the version, the rest go to the encoding */
 #define SRL_PROTOCOL_VERSION_MASK       ( ( 1 << SRL_PROTOCOL_VERSION_BITS ) - 
1 )
 
@@ -211,12 +211,16 @@
 #define SRL_HDR_OBJECT_FREEZE   ((U8)50)      /* <STR-TAG> <ITEM-TAG> - class, 
object-item. Need to call "THAW" method on class after decoding */
 #define SRL_HDR_OBJECTV_FREEZE  ((U8)51)      /* <OFFSET-VARINT> <ITEM-TAG> - 
(OBJECTV_FREEZE is to OBJECT_FREEZE as OBJECTV is to OBJECT) */
 
+#define SRL_HDR_NO             ((U8)52)      /* SvIsBOOL() == PL_No,  5.36 and 
later only (json false) */
+#define SRL_HDR_YES            ((U8)53)      /* SvIsBOOL() == PL_Yes, 5.36 and 
later only (json true)*/
+
 /* Note: Can do reserved check with a range now, but as we start using
  *       them, might have to explicit == check later. */
-#define SRL_HDR_RESERVED        ((U8)52)      /* reserved */
-#define SRL_HDR_RESERVED_LOW    ((U8)52)
-#define SRL_HDR_RESERVED_HIGH   ((U8)56)
+#define SRL_HDR_RESERVED        ((U8)54)
+#define SRL_HDR_RESERVED_LOW    ((U8)54)
+#define SRL_HDR_RESERVED_HIGH   ((U8)55)
 
+#define SRL_HDR_FLOAT_128       ((U8)56)      /* quadmath _float128 */
 #define SRL_HDR_CANONICAL_UNDEF ((U8)57)      /* undef (PL_sv_undef) - "the" 
Perl undef (see notes) */
 #define SRL_HDR_FALSE           ((U8)58)      /* false (PL_sv_no)  */
 #define SRL_HDR_TRUE            ((U8)59)      /* true  (PL_sv_yes) */
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Sereal-Decoder-4.025/srl_reader_error.h 
new/Sereal-Decoder-5.001/srl_reader_error.h
--- old/Sereal-Decoder-4.025/srl_reader_error.h 2017-10-03 19:46:10.000000000 
+0200
+++ new/Sereal-Decoder-5.001/srl_reader_error.h 2022-09-01 13:17:05.000000000 
+0200
@@ -15,8 +15,8 @@
 #define SRL_RDR_ERRORf4(buf, fmt, var1, var2, var3, var4)    
croak(SRL_RDR_BASE_ERROR_FORMAT(fmt),  (var1), (var2), (var3), (var4), 
SRL_RDR_BASE_ERROR_ARGS((buf)))
 
 #define SRL_RDR_ERROR_UNIMPLEMENTED(buf, tag, str)           
SRL_RDR_ERRORf3((buf), "Tag %u (0x%x) '%s' is unimplemented", (tag), (tag), 
(str))
-#define SRL_RDR_ERROR_UNEXPECTED(buf, tag, msg)              
SRL_RDR_ERRORf2((buf), "Unexpected tag SRL_HDR_%s while expecting %s", 
SRL_TAG_NAME((tag)), (msg))
-#define SRL_RDR_ERROR_BAD_COPY(buf, tag)                     
SRL_RDR_ERRORf1((buf), "While processing tag SRL_HDR_%s encountered a bad COPY 
tag", SRL_TAG_NAME((tag)))
+#define SRL_RDR_ERROR_UNEXPECTED(buf, tag, msg)              
SRL_RDR_ERRORf3((buf), "Unexpected tag SRL_HDR_%s (%02x) while expecting %s", 
SRL_TAG_NAME((tag)), (tag), (msg))
+#define SRL_RDR_ERROR_BAD_COPY(buf, tag)                     
SRL_RDR_ERRORf2((buf), "While processing tag SRL_HDR_%s (%02x) encountered a 
bad COPY tag", SRL_TAG_NAME((tag)),(tag))
 #define SRL_RDR_ERROR_EOF(buf, msg)                          
SRL_RDR_ERRORf1((buf), "Premature end of document while expecting %s", (msg));
 #define SRL_RDR_ERROR_REFUSE_OBJECT(buf)                     
SRL_RDR_ERROR((buf),   "Encountered object in input, but the 'refuse_objects' 
option is in effect");
 #define SRL_RDR_ERROR_PANIC(buf, msg)                        
SRL_RDR_ERRORf1((buf), "Panic: %s", msg);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Sereal-Decoder-4.025/srl_taginfo.h 
new/Sereal-Decoder-5.001/srl_taginfo.h
--- old/Sereal-Decoder-4.025/srl_taginfo.h      2020-02-02 18:25:40.000000000 
+0100
+++ new/Sereal-Decoder-5.001/srl_taginfo.h      2022-09-01 11:12:36.000000000 
+0200
@@ -63,11 +63,11 @@
        "REGEXP",            /* "1"   49 0x31 0b00110001 */
        "OBJECT_FREEZE",     /* "2"   50 0x32 0b00110010 */
        "OBJECTV_FREEZE",    /* "3"   51 0x33 0b00110011 */
-       "RESERVED_0",        /* "4"   52 0x34 0b00110100 */
-       "RESERVED_1",        /* "5"   53 0x35 0b00110101 */
-       "RESERVED_2",        /* "6"   54 0x36 0b00110110 */
-       "RESERVED_3",        /* "7"   55 0x37 0b00110111 */
-       "RESERVED_4",        /* "8"   56 0x38 0b00111000 */
+       "NO",                /* "4"   52 0x34 0b00110100 */
+       "YES",               /* "5"   53 0x35 0b00110101 */
+       "RESERVED_0",        /* "6"   54 0x36 0b00110110 */
+       "RESERVED_1",        /* "7"   55 0x37 0b00110111 */
+       "FLOAT_128",         /* "8"   56 0x38 0b00111000 */
        "CANONICAL_UNDEF",   /* "9"   57 0x39 0b00111001 */
        "FALSE",             /* ":"   58 0x3a 0b00111010 */
        "TRUE",              /* ";"   59 0x3b 0b00111011 */
@@ -173,11 +173,8 @@
 #define SRL_HDR_NEG_3                 29
 #define SRL_HDR_NEG_2                 30
 #define SRL_HDR_NEG_1                 31
-#define SRL_HDR_RESERVED_0            52
-#define SRL_HDR_RESERVED_1            53
-#define SRL_HDR_RESERVED_2            54
-#define SRL_HDR_RESERVED_3            55
-#define SRL_HDR_RESERVED_4            56
+#define SRL_HDR_RESERVED_0            54
+#define SRL_HDR_RESERVED_1            55
 #define SRL_HDR_ARRAYREF_0            64
 #define SRL_HDR_ARRAYREF_1            65
 #define SRL_HDR_ARRAYREF_2            66
@@ -321,10 +318,7 @@
 
 #define CASE_SRL_HDR_RESERVED    \
    case SRL_HDR_RESERVED_0:    \
-   case SRL_HDR_RESERVED_1:    \
-   case SRL_HDR_RESERVED_2:    \
-   case SRL_HDR_RESERVED_3:    \
-   case SRL_HDR_RESERVED_4
+   case SRL_HDR_RESERVED_1
 
 
 #define CASE_SRL_HDR_SHORT_BINARY    \
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Sereal-Decoder-4.025/t/002_have_enc_and_dec.t 
new/Sereal-Decoder-5.001/t/002_have_enc_and_dec.t
--- old/Sereal-Decoder-4.025/t/002_have_enc_and_dec.t   2020-02-02 
18:25:40.000000000 +0100
+++ new/Sereal-Decoder-5.001/t/002_have_enc_and_dec.t   2022-09-02 
19:58:47.000000000 +0200
@@ -10,8 +10,8 @@
         if !-d 't';
 }
 use Sereal::TestSet qw(:all);
-
-if ( have_encoder_and_decoder() ) {
+my $problem= check_for_dependency_issues();
+if ( !$problem or $problem!~/is missing/ ) {
     plan tests => 1;
 }
 else {
@@ -20,5 +20,8 @@
 diag "Testing with both encoder and decoder.";
 diag "Sereal::Decoder v$Sereal::Decoder::VERSION";
 diag "Sereal::Encoder v$Sereal::Encoder::VERSION";
-ok(1);
-
+is($problem,"","There should be no Encoder/Decoder dependency problems.")
+    or diag "If this test fails it means you need to upgrade Sereal::Decoder 
first!\n"
+            . "You are strongly advised to follow this guidance, upgrading the 
Encoder\n"
+            . "before you upgrade the Decoder may lead to serious problems\n\n"
+            . "YOU HAVE BEEN WARNED.\n\n";
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Sereal-Decoder-4.025/t/004_testset.t 
new/Sereal-Decoder-5.001/t/004_testset.t
--- old/Sereal-Decoder-4.025/t/004_testset.t    2020-02-02 18:25:40.000000000 
+0100
+++ new/Sereal-Decoder-5.001/t/004_testset.t    2022-09-01 13:17:05.000000000 
+0200
@@ -17,14 +17,14 @@
 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_deep_cmp( ["x"], {} ) );
+ok( _test_deep_cmp( { "x" => 1 }, { "y" => 1 } ) );
+ok( _test_deep_cmp( { "x" => 1 }, { "x" => 2 } ) );
+ok( _test_deep_cmp( { "x" => 1 }, { "x" => 2, "y" => 1 } ) );
+ok( !_test_deep_cmp( { "x" => 1 }, { "x" => 1 } ) );
+ok( !_test_deep_cmp( ["x"], ["x"] ) );
+ok( _test_deep_cmp( ["x"], [ "y", "p" ] ) );
+ok( _test_deep_cmp( [ "a", "x" ], ["y"] ) );
 ok( _cmp_str( "foo", "bar" ) );
 ok( !_cmp_str( "aaa", "aaa" ) );
 ok( _cmp_str( "aaacowbbb", "aaadogbb" ) );
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Sereal-Decoder-4.025/t/005_flags.t 
new/Sereal-Decoder-5.001/t/005_flags.t
--- old/Sereal-Decoder-4.025/t/005_flags.t      2020-02-02 18:25:40.000000000 
+0100
+++ new/Sereal-Decoder-5.001/t/005_flags.t      2022-09-01 13:17:05.000000000 
+0200
@@ -24,6 +24,7 @@
 
 sub run_tests {
     my ( $extra_name, $opt_hash )= @_;
+    $opt_hash->{protocol_version} = 3;
 
     my $encoder= Sereal::Encoder->new($opt_hash);
     my $decoder= Sereal::Decoder->new($opt_hash);
@@ -86,4 +87,3 @@
         # hobodecode($out);
     }
 }
-
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Sereal-Decoder-4.025/t/040_special_vars.t 
new/Sereal-Decoder-5.001/t/040_special_vars.t
--- old/Sereal-Decoder-4.025/t/040_special_vars.t       2022-02-18 
05:14:23.000000000 +0100
+++ new/Sereal-Decoder-5.001/t/040_special_vars.t       2022-09-01 
13:17:05.000000000 +0200
@@ -46,6 +46,9 @@
     my ( $name, $var, $todo )= @$_;
     TODO: {
         todo_skip $todo, 1 if $todo;
-        is( desc_special( $dec->decode( $enc->encode($var) ) ), 
desc_special($var), $name );
+        my $want= desc_special($var);
+        is( desc_special( $dec->decode( $enc->encode($var) ) ), $want, $name . 
" ($want)" );
+        #use Devel::Peek;
+        #Dump($dec->decode( $enc->encode($var) ) );
     }
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Sereal-Decoder-4.025/t/155_zipbomb.t 
new/Sereal-Decoder-5.001/t/155_zipbomb.t
--- old/Sereal-Decoder-4.025/t/155_zipbomb.t    2022-02-20 05:05:20.000000000 
+0100
+++ new/Sereal-Decoder-5.001/t/155_zipbomb.t    2022-08-30 20:58:54.000000000 
+0200
@@ -46,7 +46,7 @@
         my $hugeblob= $enc->encode(MONSTER_BLOB);
 
         # Snappy compression
-        is(vec($hugeblob, 4, 8), 36);
+        ok(abs(vec($hugeblob, 4, 8)-36)<=1);
 
         # Lets validate we have the expected uncompress size: 100MB
         is(vec($hugeblob, 10, 8), 134);
@@ -74,7 +74,7 @@
         my $hugeblob= $enc->encode(MONSTER_BLOB);
 
         # zlib compression
-        is(vec($hugeblob, 4, 8), 52);
+        ok(abs(vec($hugeblob, 4, 8)-52)<=1);
 
         # Lets validate we have the expected uncompress size: 100MB
         is(vec($hugeblob, 6, 8), 134);
@@ -102,7 +102,7 @@
         my $hugeblob= $enc->encode(MONSTER_BLOB);
 
         # zstd compression
-        is(vec($hugeblob, 4, 8), 68);
+        ok(abs(vec($hugeblob, 4, 8)-68)<=1);
 
         # Lets validate we have the expected uncompress size: 100MB
         is(vec($hugeblob, 25, 8), 129);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/Sereal-Decoder-4.025/t/700_roundtrip/v5/dedudep_strings.t 
new/Sereal-Decoder-5.001/t/700_roundtrip/v5/dedudep_strings.t
--- old/Sereal-Decoder-4.025/t/700_roundtrip/v5/dedudep_strings.t       
1970-01-01 01:00:00.000000000 +0100
+++ new/Sereal-Decoder-5.001/t/700_roundtrip/v5/dedudep_strings.t       
2022-09-01 14:55:52.000000000 +0200
@@ -0,0 +1,27 @@
+#!perl
+use strict;
+use warnings;
+use Data::Dumper;
+use File::Spec;
+
+use lib File::Spec->catdir(qw(t lib));
+
+BEGIN {
+    lib->import('lib')
+        if !-d 't';
+}
+
+use Sereal::TestSet qw(:all);
+use Test::More;
+
+my $ok= have_encoder_and_decoder();
+if ( not $ok ) {
+    plan skip_all => 'Did not find right version of encoder';
+}
+else {
+    run_roundtrip_tests( 'dedupe_strings', { dedupe_strings => 1 } );
+}
+
+pass();
+done_testing();
+
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/Sereal-Decoder-4.025/t/700_roundtrip/v5/freeze_thaw.t 
new/Sereal-Decoder-5.001/t/700_roundtrip/v5/freeze_thaw.t
--- old/Sereal-Decoder-4.025/t/700_roundtrip/v5/freeze_thaw.t   1970-01-01 
01:00:00.000000000 +0100
+++ new/Sereal-Decoder-5.001/t/700_roundtrip/v5/freeze_thaw.t   2020-02-02 
18:25:40.000000000 +0100
@@ -0,0 +1,27 @@
+#!perl
+use strict;
+use warnings;
+use Data::Dumper;
+use File::Spec;
+
+use lib File::Spec->catdir(qw(t lib));
+
+BEGIN {
+    lib->import('lib')
+        if !-d 't';
+}
+
+use Sereal::TestSet qw(:all);
+use Test::More;
+
+my $ok= have_encoder_and_decoder();
+if ( not $ok ) {
+    plan skip_all => 'Did not find right version of encoder';
+}
+else {
+    run_roundtrip_tests( 'freeze-thaw', { freeze_callbacks => 1 } );
+}
+
+pass();
+done_testing();
+
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Sereal-Decoder-4.025/t/700_roundtrip/v5/plain.t 
new/Sereal-Decoder-5.001/t/700_roundtrip/v5/plain.t
--- old/Sereal-Decoder-4.025/t/700_roundtrip/v5/plain.t 1970-01-01 
01:00:00.000000000 +0100
+++ new/Sereal-Decoder-5.001/t/700_roundtrip/v5/plain.t 2020-02-02 
18:25:40.000000000 +0100
@@ -0,0 +1,29 @@
+#!perl
+use strict;
+use warnings;
+use Data::Dumper;
+use File::Spec;
+
+use lib File::Spec->catdir(qw(t lib));
+
+BEGIN {
+    lib->import('lib')
+        if !-d 't';
+}
+
+use Sereal::TestSet qw(:all);
+use Test::More;
+
+my $version;
+
+my $ok= have_encoder_and_decoder();
+if ( not $ok ) {
+    plan skip_all => 'Did not find right version of encoder';
+}
+else {
+    run_roundtrip_tests("plain");
+}
+
+pass();
+done_testing();
+
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/Sereal-Decoder-4.025/t/700_roundtrip/v5/plain_canon.t 
new/Sereal-Decoder-5.001/t/700_roundtrip/v5/plain_canon.t
--- old/Sereal-Decoder-4.025/t/700_roundtrip/v5/plain_canon.t   1970-01-01 
01:00:00.000000000 +0100
+++ new/Sereal-Decoder-5.001/t/700_roundtrip/v5/plain_canon.t   2020-02-02 
18:25:40.000000000 +0100
@@ -0,0 +1,28 @@
+#!perl
+use strict;
+use warnings;
+use Data::Dumper;
+use File::Spec;
+
+use lib File::Spec->catdir(qw(t lib));
+
+BEGIN {
+    lib->import('lib')
+        if !-d 't';
+}
+
+use Sereal::TestSet qw(:all);
+use Test::More;
+
+my $ok= have_encoder_and_decoder();
+$ok= 0 if $ok and $Sereal::Encoder::VERSION < 3.001006;
+if ( not $ok ) {
+    plan skip_all => 'Did not find right version of encoder (want 3.001006)';
+}
+else {
+    run_roundtrip_tests( "plain_canonical", { canonical => 1 } );
+}
+
+pass();
+done_testing();
+
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Sereal-Decoder-4.025/t/700_roundtrip/v5/readonly.t 
new/Sereal-Decoder-5.001/t/700_roundtrip/v5/readonly.t
--- old/Sereal-Decoder-4.025/t/700_roundtrip/v5/readonly.t      1970-01-01 
01:00:00.000000000 +0100
+++ new/Sereal-Decoder-5.001/t/700_roundtrip/v5/readonly.t      2020-02-02 
18:25:40.000000000 +0100
@@ -0,0 +1,27 @@
+#!perl
+use strict;
+use warnings;
+use Data::Dumper;
+use File::Spec;
+
+use lib File::Spec->catdir(qw(t lib));
+
+BEGIN {
+    lib->import('lib')
+        if !-d 't';
+}
+
+use Sereal::TestSet qw(:all);
+use Test::More;
+
+my $ok= have_encoder_and_decoder();
+if ( not $ok ) {
+    plan skip_all => 'Did not find right version of encoder';
+}
+else {
+    run_roundtrip_tests( 'readonly', { set_readonly => 1 } );
+}
+
+pass();
+done_testing();
+
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Sereal-Decoder-4.025/t/700_roundtrip/v5/snappy.t 
new/Sereal-Decoder-5.001/t/700_roundtrip/v5/snappy.t
--- old/Sereal-Decoder-4.025/t/700_roundtrip/v5/snappy.t        1970-01-01 
01:00:00.000000000 +0100
+++ new/Sereal-Decoder-5.001/t/700_roundtrip/v5/snappy.t        2020-02-02 
18:25:40.000000000 +0100
@@ -0,0 +1,27 @@
+#!perl
+use strict;
+use warnings;
+use Data::Dumper;
+use File::Spec;
+
+use lib File::Spec->catdir(qw(t lib));
+
+BEGIN {
+    lib->import('lib')
+        if !-d 't';
+}
+
+use Sereal::TestSet qw(:all);
+use Test::More;
+
+my $ok= have_encoder_and_decoder();
+if ( not $ok ) {
+    plan skip_all => 'Did not find right version of encoder';
+}
+else {
+    run_roundtrip_tests( 'snappy', { snappy => 1 } );
+}
+
+pass();
+done_testing();
+
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/Sereal-Decoder-4.025/t/700_roundtrip/v5/snappy_and_warn_unknown.t 
new/Sereal-Decoder-5.001/t/700_roundtrip/v5/snappy_and_warn_unknown.t
--- old/Sereal-Decoder-4.025/t/700_roundtrip/v5/snappy_and_warn_unknown.t       
1970-01-01 01:00:00.000000000 +0100
+++ new/Sereal-Decoder-5.001/t/700_roundtrip/v5/snappy_and_warn_unknown.t       
2020-02-02 18:25:40.000000000 +0100
@@ -0,0 +1,45 @@
+#!perl
+use strict;
+use warnings;
+use Data::Dumper;
+use File::Spec;
+
+use lib File::Spec->catdir(qw(t lib));
+
+BEGIN {
+    lib->import('lib')
+        if !-d 't';
+}
+
+use Sereal::TestSet qw(:all);
+use Test::More;
+
+my $ok= have_encoder_and_decoder();
+if ( not $ok ) {
+    plan skip_all => 'Did not find right version of encoder';
+}
+else {
+    my $e= Sereal::Encoder->new();
+    my $d= Sereal::Decoder->new();
+
+    my $out;
+    my $payload= [ 'abcd' x 1024 ];
+    my $ok= eval { $out= $e->encode($payload); 1 };
+    my $err= $@ || 'Zombie error';
+    ok( $ok, "snappy_incr and warn_unknown makes CODE encoding not fail" );
+
+    my $decoded;
+    $ok= eval { $decoded= $d->decode($out); 1 };
+    $err= $@ || 'Zombie error';
+    ok( $ok, "snappy_incr and warn_unknown produced decodable output" )
+        or do {
+        diag($err);
+        hobodecode($out) if $ENV{DEBUG_SEREAL};
+        };
+
+    is_deeply( $decoded, $payload, 'results matches' );
+}
+
+pass();
+done_testing();
+
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/Sereal-Decoder-4.025/t/700_roundtrip/v5/snappy_canon.t 
new/Sereal-Decoder-5.001/t/700_roundtrip/v5/snappy_canon.t
--- old/Sereal-Decoder-4.025/t/700_roundtrip/v5/snappy_canon.t  1970-01-01 
01:00:00.000000000 +0100
+++ new/Sereal-Decoder-5.001/t/700_roundtrip/v5/snappy_canon.t  2020-02-02 
18:25:40.000000000 +0100
@@ -0,0 +1,28 @@
+#!perl
+use strict;
+use warnings;
+use Data::Dumper;
+use File::Spec;
+
+use lib File::Spec->catdir(qw(t lib));
+
+BEGIN {
+    lib->import('lib')
+        if !-d 't';
+}
+
+use Sereal::TestSet qw(:all);
+use Test::More;
+
+my $ok= have_encoder_and_decoder();
+$ok= 0 if $ok and $Sereal::Encoder::VERSION < 3.001006;
+if ( not $ok ) {
+    plan skip_all => 'Did not find right version of encoder (want 3.001006)';
+}
+else {
+    run_roundtrip_tests( 'snappy_canon', { snappy => 1, canonical => 1 } );
+}
+
+pass();
+done_testing();
+
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/Sereal-Decoder-4.025/t/700_roundtrip/v5/snappy_incr.t 
new/Sereal-Decoder-5.001/t/700_roundtrip/v5/snappy_incr.t
--- old/Sereal-Decoder-4.025/t/700_roundtrip/v5/snappy_incr.t   1970-01-01 
01:00:00.000000000 +0100
+++ new/Sereal-Decoder-5.001/t/700_roundtrip/v5/snappy_incr.t   2020-02-02 
18:25:40.000000000 +0100
@@ -0,0 +1,27 @@
+#!perl
+use strict;
+use warnings;
+use Data::Dumper;
+use File::Spec;
+
+use lib File::Spec->catdir(qw(t lib));
+
+BEGIN {
+    lib->import('lib')
+        if !-d 't';
+}
+
+use Sereal::TestSet qw(:all);
+use Test::More;
+
+my $ok= have_encoder_and_decoder();
+if ( not $ok ) {
+    plan skip_all => 'Did not find right version of encoder';
+}
+else {
+    run_roundtrip_tests( 'snappy_incr', { snappy_incr => 1 } );
+}
+
+pass();
+done_testing();
+
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/Sereal-Decoder-4.025/t/700_roundtrip/v5/snappy_incr_canon.t 
new/Sereal-Decoder-5.001/t/700_roundtrip/v5/snappy_incr_canon.t
--- old/Sereal-Decoder-4.025/t/700_roundtrip/v5/snappy_incr_canon.t     
1970-01-01 01:00:00.000000000 +0100
+++ new/Sereal-Decoder-5.001/t/700_roundtrip/v5/snappy_incr_canon.t     
2020-02-02 18:25:40.000000000 +0100
@@ -0,0 +1,28 @@
+#!perl
+use strict;
+use warnings;
+use Data::Dumper;
+use File::Spec;
+
+use lib File::Spec->catdir(qw(t lib));
+
+BEGIN {
+    lib->import('lib')
+        if !-d 't';
+}
+
+use Sereal::TestSet qw(:all);
+use Test::More;
+
+my $ok= have_encoder_and_decoder();
+$ok= 0 if $ok and $Sereal::Encoder::VERSION < 3.001006;
+if ( not $ok ) {
+    plan skip_all => 'Did not find right version of encoder (want 3.001006)';
+}
+else {
+    run_roundtrip_tests( 'snappy_incr_canon', { snappy_incr => 1, canonical => 
1 } );
+}
+
+pass();
+done_testing();
+
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Sereal-Decoder-4.025/t/700_roundtrip/v5/sort_keys.t 
new/Sereal-Decoder-5.001/t/700_roundtrip/v5/sort_keys.t
--- old/Sereal-Decoder-4.025/t/700_roundtrip/v5/sort_keys.t     1970-01-01 
01:00:00.000000000 +0100
+++ new/Sereal-Decoder-5.001/t/700_roundtrip/v5/sort_keys.t     2022-09-01 
12:10:09.000000000 +0200
@@ -0,0 +1,27 @@
+#!perl
+use strict;
+use warnings;
+use Data::Dumper;
+use File::Spec;
+
+use lib File::Spec->catdir(qw(t lib));
+
+BEGIN {
+    lib->import('lib')
+        if !-d 't';
+}
+
+use Sereal::TestSet qw(:all);
+use Test::More;
+
+my $ok= have_encoder_and_decoder();
+if ( not $ok ) {
+    plan skip_all => 'Did not find right version of encoder';
+}
+else {
+    run_roundtrip_tests( 'sort_keys', { sort_keys => 1 } );
+}
+
+pass();
+done_testing();
+
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/Sereal-Decoder-4.025/t/700_roundtrip/v5/sort_keys_perl.t 
new/Sereal-Decoder-5.001/t/700_roundtrip/v5/sort_keys_perl.t
--- old/Sereal-Decoder-4.025/t/700_roundtrip/v5/sort_keys_perl.t        
1970-01-01 01:00:00.000000000 +0100
+++ new/Sereal-Decoder-5.001/t/700_roundtrip/v5/sort_keys_perl.t        
2020-02-02 18:25:40.000000000 +0100
@@ -0,0 +1,27 @@
+#!perl
+use strict;
+use warnings;
+use Data::Dumper;
+use File::Spec;
+
+use lib File::Spec->catdir(qw(t lib));
+
+BEGIN {
+    lib->import('lib')
+        if !-d 't';
+}
+
+use Sereal::TestSet qw(:all);
+use Test::More;
+
+my $ok= have_encoder_and_decoder();
+if ( not $ok ) {
+    plan skip_all => 'Did not find right version of encoder';
+}
+else {
+    run_roundtrip_tests( 'sort_keys', { sort_keys => 2 } );
+}
+
+pass();
+done_testing();
+
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/Sereal-Decoder-4.025/t/700_roundtrip/v5/sort_keys_perl_rev.t 
new/Sereal-Decoder-5.001/t/700_roundtrip/v5/sort_keys_perl_rev.t
--- old/Sereal-Decoder-4.025/t/700_roundtrip/v5/sort_keys_perl_rev.t    
1970-01-01 01:00:00.000000000 +0100
+++ new/Sereal-Decoder-5.001/t/700_roundtrip/v5/sort_keys_perl_rev.t    
2020-02-02 18:25:40.000000000 +0100
@@ -0,0 +1,27 @@
+#!perl
+use strict;
+use warnings;
+use Data::Dumper;
+use File::Spec;
+
+use lib File::Spec->catdir(qw(t lib));
+
+BEGIN {
+    lib->import('lib')
+        if !-d 't';
+}
+
+use Sereal::TestSet qw(:all);
+use Test::More;
+
+my $ok= have_encoder_and_decoder();
+if ( not $ok ) {
+    plan skip_all => 'Did not find right version of encoder';
+}
+else {
+    run_roundtrip_tests( 'sort_keys', { sort_keys => 3 } );
+}
+
+pass();
+done_testing();
+
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Sereal-Decoder-4.025/t/700_roundtrip/v5/zlib.t 
new/Sereal-Decoder-5.001/t/700_roundtrip/v5/zlib.t
--- old/Sereal-Decoder-4.025/t/700_roundtrip/v5/zlib.t  1970-01-01 
01:00:00.000000000 +0100
+++ new/Sereal-Decoder-5.001/t/700_roundtrip/v5/zlib.t  2020-02-02 
18:25:40.000000000 +0100
@@ -0,0 +1,31 @@
+#!perl
+use strict;
+use warnings;
+use Data::Dumper;
+use File::Spec;
+
+use lib File::Spec->catdir(qw(t lib));
+
+BEGIN {
+    lib->import('lib')
+        if !-d 't';
+}
+
+use Sereal::TestSet qw(:all);
+use Test::More;
+
+my $ok= have_encoder_and_decoder();
+if ( not $ok ) {
+    plan skip_all => 'Did not find right version of encoder';
+}
+else {
+    run_roundtrip_tests(
+        'zlib',
+        {
+            compress => Sereal::Encoder::SRL_ZLIB(),
+        } );
+}
+
+pass();
+done_testing();
+
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Sereal-Decoder-4.025/t/700_roundtrip/v5/zlib_force.t 
new/Sereal-Decoder-5.001/t/700_roundtrip/v5/zlib_force.t
--- old/Sereal-Decoder-4.025/t/700_roundtrip/v5/zlib_force.t    1970-01-01 
01:00:00.000000000 +0100
+++ new/Sereal-Decoder-5.001/t/700_roundtrip/v5/zlib_force.t    2020-02-02 
18:25:40.000000000 +0100
@@ -0,0 +1,32 @@
+#!perl
+use strict;
+use warnings;
+use Data::Dumper;
+use File::Spec;
+
+use lib File::Spec->catdir(qw(t lib));
+
+BEGIN {
+    lib->import('lib')
+        if !-d 't';
+}
+
+use Sereal::TestSet qw(:all);
+use Test::More;
+
+my $ok= have_encoder_and_decoder();
+if ( not $ok ) {
+    plan skip_all => 'Did not find right version of encoder';
+}
+else {
+    run_roundtrip_tests(
+        'zlib_force',
+        {
+            compress           => Sereal::Encoder::SRL_ZLIB(),
+            compress_threshold => 0,
+        } );
+}
+
+pass();
+done_testing();
+
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Sereal-Decoder-4.025/t/700_roundtrip/v5/zstd.t 
new/Sereal-Decoder-5.001/t/700_roundtrip/v5/zstd.t
--- old/Sereal-Decoder-4.025/t/700_roundtrip/v5/zstd.t  1970-01-01 
01:00:00.000000000 +0100
+++ new/Sereal-Decoder-5.001/t/700_roundtrip/v5/zstd.t  2020-02-02 
18:25:40.000000000 +0100
@@ -0,0 +1,31 @@
+#!perl
+use strict;
+use warnings;
+use Data::Dumper;
+use File::Spec;
+
+use lib File::Spec->catdir(qw(t lib));
+
+BEGIN {
+    lib->import('lib')
+        if !-d 't';
+}
+
+use Sereal::TestSet qw(:all);
+use Test::More;
+
+my $ok= have_encoder_and_decoder();
+if ( not $ok ) {
+    plan skip_all => 'Did not find right version of encoder';
+}
+else {
+    run_roundtrip_tests(
+        'zstd',
+        {
+            compress => Sereal::Encoder::SRL_ZSTD(),
+        } );
+}
+
+pass();
+done_testing();
+
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Sereal-Decoder-4.025/t/700_roundtrip/v5/zstd_force.t 
new/Sereal-Decoder-5.001/t/700_roundtrip/v5/zstd_force.t
--- old/Sereal-Decoder-4.025/t/700_roundtrip/v5/zstd_force.t    1970-01-01 
01:00:00.000000000 +0100
+++ new/Sereal-Decoder-5.001/t/700_roundtrip/v5/zstd_force.t    2020-02-02 
18:25:40.000000000 +0100
@@ -0,0 +1,32 @@
+#!perl
+use strict;
+use warnings;
+use Data::Dumper;
+use File::Spec;
+
+use lib File::Spec->catdir(qw(t lib));
+
+BEGIN {
+    lib->import('lib')
+        if !-d 't';
+}
+
+use Sereal::TestSet qw(:all);
+use Test::More;
+
+my $ok= have_encoder_and_decoder();
+if ( not $ok ) {
+    plan skip_all => 'Did not find right version of encoder';
+}
+else {
+    run_roundtrip_tests(
+        'zstd_force',
+        {
+            compress           => Sereal::Encoder::SRL_ZSTD(),
+            compress_threshold => 0,
+        } );
+}
+
+pass();
+done_testing();
+
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Sereal-Decoder-4.025/t/lib/Sereal/TestSet.pm 
new/Sereal-Decoder-5.001/t/lib/Sereal/TestSet.pm
--- old/Sereal-Decoder-4.025/t/lib/Sereal/TestSet.pm    2022-02-20 
05:05:20.000000000 +0100
+++ new/Sereal-Decoder-5.001/t/lib/Sereal/TestSet.pm    2022-09-02 
20:39:47.000000000 +0200
@@ -82,11 +82,13 @@
     integer short_string varint array array_fbit
     hash dump_bless
     have_encoder_and_decoder
+    check_for_dependency_issues
     run_roundtrip_tests
     write_test_files
     $use_objectv
     setup_tests
     _deep_cmp
+    _test_deep_cmp
     _test
     _cmp_str
 );
@@ -672,42 +674,59 @@
 }
 
 sub have_encoder_and_decoder {
+    return !check_for_dependency_issues(@_);
+}
+
+sub check_for_dependency_issues {
     my ($min_v)= @_;
 
     # $Class is the already-loaded class, so the one we're testing
     my @need=
           $Class =~ /Encoder/ ? ("Decoder")
         : $Class =~ /Decoder/ ? ("Encoder")
-        :                       ( "Encoder", "Decoder" );
+        :                       ( "Decoder", "Encoder" );
     my @need_class= ( $Class, map { "Sereal::$_" } @need );
 
     foreach my $class (@need_class) {
         eval "use $class; 1"
             or do {
-            note( "Could not locate $class for testing" . ( $@ ? " (Exception: 
$@)" : "" ) );
-            return ();
+                note( "Could not locate $class for testing" . ( $@ ? " 
(Exception: $@)" : "" ) );
+                return "$Class is missing.";
             };
         my $cmp_v= $class->VERSION;
 
+        if (!defined $min_v and $Class eq $class) {
+            if ($class eq "Sereal::Encoder") {
+                $min_v= $cmp_v;
+            } elsif ($class eq "Sereal::Decoder") {
+                if ($0=~m!/v(\d+)/!) {
+                    $min_v= $1;
+                    if ($Config{usequadmath} || $Config{uselongdouble}) {
+                        $min_v= 5;
+                    }
+                }
+            }
+        }
+
         if ( $min_v and $cmp_v < $min_v ) {
             diag(     "Could not load correct version of $class for testing "
                     . "(got: $cmp_v, needed at least $min_v)" );
-            return;
+            return "$class version $cmp_v too low, need version $min_v";
         }
 
         $cmp_v =~ s/_//;
         $cmp_v= sprintf( "%.2f", int( $cmp_v * 100 ) / 100 );
         my %compat_versions= map { $_ => 1 } $Class->_test_compat();
-        if ( not defined $cmp_v or not exists $compat_versions{$cmp_v} ) {
+        if ( not length($cmp_v) or not exists $compat_versions{$cmp_v} ) {
             diag(     "Could not load correct version of $class for testing "
                     . "(got: $cmp_v, needed any of "
                     . join( ", ", keys %compat_versions )
                     . ")" );
-            return ();
+            return "$class version $cmp_v not compatible, $Class is version 
$min_v"
         }
     }
 
-    return 1;
+    return "";
 }
 
 # max iv/uv logic taken from Storable tests
@@ -1042,13 +1061,11 @@
     }
 
     my $suffix= "_v$proto_version";
+    # older v2.x and v1.0 should ingore this.
+    $opts->{protocol_version}= $proto_version;
     if ( $proto_version == 1 ) {
         $opts->{use_protocol_v1}= 1;
     }
-    else {
-        # v2 ignores this, but will output v2 by default
-        $opts->{protocol_version}= $proto_version;
-    }
     setup_tests($proto_version);
     run_roundtrip_tests_internal( $name . $suffix, $opts );
 }
@@ -1150,6 +1167,11 @@
     return $ret;
 }
 
+our $deep_cmp_name; # set by deep_cmp()
+sub _test_deep_cmp {
+    local $deep_cmp_name= "_test_deep_cmp";
+    return _deep_cmp(@_);
+}
 sub _deep_cmp {
     my ( $x, $y, $seenx, $seeny )= @_;
     $seenx ||= {};
@@ -1205,7 +1227,20 @@
             die "Unknown reftype '", reftype($x) . "'";
         }
     }
-    else {
+    else{
+        if (
+            $deep_cmp_name !~ /v5/ and $deep_cmp_name =~ /float/
+            and $x=~/^-?\d+\.\d+\z/ and $y=~/^-?\d+\.\d+\z/
+        ) {
+            if ($deep_cmp_name=~/(-?\d+\.(\d+))/) {
+                my $maxf= length $1;
+                my $minf= length $2;
+                $_= sprintf "%*.*f", $maxf, $minf, $_
+                    for $x, $y;
+            } else {
+                $_= sprintf "%f", $_ for $x, $y;
+            }
+        }
         $cmp= _cmp_str( $x, $y )
             and return $cmp;
     }
@@ -1214,6 +1249,7 @@
 
 sub deep_cmp {
     my ( $v1, $v2, $name )= @_;
+    local $deep_cmp_name= $name;
     my $diff= _deep_cmp( $v1, $v2 );
     if ($diff) {
         my ( $reason, $diag )= split /\n/, $diff, 2;

Reply via email to