Commit 479c353d authored by Kirill Smelkov's avatar Kirill Smelkov

test/*: Add py3 + pickle protocol=3 ZODB kind to test matrix

Adjust conftest.py and gen_testdata to generate test data files from
under ZODB/py3 . Adjust testutil to be able to open such databases from
under py2. As seen in the appendix the most difference in generated data
is that *UNICODE opcodes are used instead of *STRING. Adjust test_dump
to normalize UNICODE and further BYTES so that zdump.zpickledis.ok
golden files are handled ok under both py2 and py3.

Appendix.

    (zdev+py39.env) kirr@deca:~/src/wendelin/z/zodbtools/zodbtools/test/testdata/1_!zext$ xdiff py2_pickle3/zdump.zpickledis.ok py3_pickle3/zdump.zpickledis.ok
    diff --git a/py2_pickle3/zdump.zpickledis.ok b/py3_pickle3/zdump.zpickledis.ok
    index cd9d7f5..b44cbc8 100644
    --- a/py2_pickle3/zdump.zpickledis.ok
    +++ b/py3_pickle3/zdump.zpickledis.ok
    @@ -2,16 +2,16 @@ txn 0285cbac70a3d733 "p"
     user "user0.12"
     description "step 0.12"
     extension ""
    -obj 0000000000000001 34 sha1:fc9e49cca756681a9f36c915c6b7b8ad79f17cbc
    +obj 0000000000000001 37 sha1:fb5c1963fc8207cbf2e9959ebb9a29eec5f56ae1
           0: \x80 PROTO      3
           2: c    GLOBAL     '__main__ Object'
    -     19: q    BINPUT     1
    +     19: q    BINPUT     0
          21: .    STOP
       highest protocol among opcodes = 2
          22: \x80 PROTO      3
    -     24: U    SHORT_BINSTRING 'f0.12'
    -     31: q    BINPUT     2
    -     33: .    STOP
    +     24: X    BINUNICODE 'f0.12'
    +     34: q    BINPUT     1
    +     36: .    STOP
       highest protocol among opcodes = 2

    @@ -19,16 +19,16 @@ txn 0285cbac7eb85219 "p"
     user "user0.15"
     description "step 0.15"
     extension ""
    -obj 0000000000000006 34 sha1:76a94af22a81cd970845aeb3536f428a96afcfc7
    +obj 0000000000000006 37 sha1:4baeb60acd0e085453e46bbeea395bf028652f28
           0: \x80 PROTO      3
           2: c    GLOBAL     '__main__ Object'
    -     19: q    BINPUT     1
    +     19: q    BINPUT     0
          21: .    STOP
       highest protocol among opcodes = 2
          22: \x80 PROTO      3
    -     24: U    SHORT_BINSTRING 'e0.15'
    -     31: q    BINPUT     2
    -     33: .    STOP
    +     24: X    BINUNICODE 'e0.15'
    +     34: q    BINPUT     1
    +     36: .    STOP
       highest protocol among opcodes = 2

    @@ -36,16 +36,16 @@ txn 0285cbac917e4b4c "p"
     user "user0.19"
     description "step 0.19"
     extension ""
    -obj 0000000000000005 34 sha1:4bd994052ba9a6b1f328c252d8766f13c53ae209
    +obj 0000000000000005 37 sha1:de7296cc2cea8492226a55e9b4f42daa4070f5af
           0: \x80 PROTO      3
           2: c    GLOBAL     '__main__ Object'
    -     19: q    BINPUT     1
    +     19: q    BINPUT     0
          21: .    STOP
       highest protocol among opcodes = 2
          22: \x80 PROTO      3
    -     24: U    SHORT_BINSTRING 'a0.19'
    -     31: q    BINPUT     2
    -     33: .    STOP
    +     24: X    BINUNICODE 'a0.19'
    +     34: q    BINPUT     1
    +     36: .    STOP
       highest protocol among opcodes = 2

    @@ -53,16 +53,16 @@ txn 0285cbac9ae147e6 "p"
     user "user0.21"
     description "step 0.21"
     extension ""
    -obj 0000000000000002 34 sha1:633b0e1e89447d452468367784717fb48b0b83b1
    +obj 0000000000000002 37 sha1:d9bd775ab8808616fc61abddd57f505c2e53e00e
           0: \x80 PROTO      3
           2: c    GLOBAL     '__main__ Object'
    -     19: q    BINPUT     1
    +     19: q    BINPUT     0
          21: .    STOP
       highest protocol among opcodes = 2
          22: \x80 PROTO      3
    -     24: U    SHORT_BINSTRING 'd0.21'
    -     31: q    BINPUT     2
    -     33: .    STOP
    +     24: X    BINUNICODE 'd0.21'
    +     34: q    BINPUT     1
    +     36: .    STOP
       highest protocol among opcodes = 2

    @@ -70,16 +70,16 @@ txn 0285cbacada74119 "p"
     user "root0.0\nYour\nMagesty "
     description "undo 0.0\nmore detailed description\n\nzzz ..."
     extension ""
    -obj 0000000000000007 34 sha1:b4bf7b467c62a1b51099ba1cc5b5aecd444d598d
    +obj 0000000000000007 37 sha1:2e9378511903201204cb5f08a4d6c52033a05545
           0: \x80 PROTO      3
           2: c    GLOBAL     '__main__ Object'
    -     19: q    BINPUT     1
    +     19: q    BINPUT     0
          21: .    STOP
       highest protocol among opcodes = 2
          22: \x80 PROTO      3
    -     24: U    SHORT_BINSTRING 'c0.22'
    -     31: q    BINPUT     2
    -     33: .    STOP
    +     24: X    BINUNICODE 'c0.22'
    +     34: q    BINPUT     1
    +     36: .    STOP
       highest protocol among opcodes = 2

    @@ -87,16 +87,16 @@ txn 0285cbacb258bf66 "p"
     user "root0.1\nYour\nMagesty "
     description "undo 0.1\nmore detailed description\n\nzzz ...\t"
     extension ""
    -obj 0000000000000003 34 sha1:3e5f02a2aa5f0ea3747a6c0ffeec090654091583
    +obj 0000000000000003 37 sha1:c83a8f07d208ea001abe540845e4ce75a7a32aee
           0: \x80 PROTO      3
           2: c    GLOBAL     '__main__ Object'
    -     19: q    BINPUT     1
    +     19: q    BINPUT     0
          21: .    STOP
       highest protocol among opcodes = 2
          22: \x80 PROTO      3
    -     24: U    SHORT_BINSTRING 'g0.11'
    -     31: q    BINPUT     2
    -     33: .    STOP
    +     24: X    BINUNICODE 'g0.11'
    +     34: q    BINPUT     1
    +     36: .    STOP
       highest protocol among opcodes = 2

    @@ -104,71 +104,92 @@ txn 0285cbacbbbbbc00 "p"
     user ""
     description "predelete 4"
     extension ""
    -obj 0000000000000000 199 sha1:d9c10b69422e9a8279e2f738d9c270b88ee49861
    +obj 0000000000000000 265 sha1:63708dd8f80d0b1f30f35f220f3d2207cb44e034
           0: \x80 PROTO      3
           2: c    GLOBAL     'persistent.mapping PersistentMapping'
    -     40: q    BINPUT     1
    +     40: q    BINPUT     0
          42: .    STOP
       highest protocol among opcodes = 2
          43: \x80 PROTO      3
          45: }    EMPTY_DICT
    -     46: q    BINPUT     2
    -     48: U    SHORT_BINSTRING 'data'
    -     54: q    BINPUT     3
    -     56: }    EMPTY_DICT
    -     57: q    BINPUT     4
    -     59: (    MARK
    -     60: U        SHORT_BINSTRING 'a'
    -     63: C        SHORT_BINBYTES '\x00\x00\x00\x00\x00\x00\x00\x05'
    -     73: c        GLOBAL     '__main__ Object'
    -     90: q        BINPUT     5
    -     92: \x86     TUPLE2
    -     93: Q        BINPERSID
    -     94: U        SHORT_BINSTRING 'c'
    -     97: C        SHORT_BINBYTES '\x00\x00\x00\x00\x00\x00\x00\x07'
    -    107: h        BINGET     5
    -    109: \x86     TUPLE2
    -    110: Q        BINPERSID
    -    111: U        SHORT_BINSTRING 'b'
    -    114: C        SHORT_BINBYTES '\x00\x00\x00\x00\x00\x00\x00\x08'
    -    124: h        BINGET     5
    -    126: \x86     TUPLE2
    -    127: Q        BINPERSID
    -    128: U        SHORT_BINSTRING 'e'
    -    131: C        SHORT_BINBYTES '\x00\x00\x00\x00\x00\x00\x00\x06'
    -    141: h        BINGET     5
    -    143: \x86     TUPLE2
    -    144: Q        BINPERSID
    -    145: U        SHORT_BINSTRING 'd'
    -    148: C        SHORT_BINBYTES '\x00\x00\x00\x00\x00\x00\x00\x02'
    -    158: h        BINGET     5
    -    160: \x86     TUPLE2
    -    161: Q        BINPERSID
    -    162: U        SHORT_BINSTRING 'g'
    -    165: C        SHORT_BINBYTES '\x00\x00\x00\x00\x00\x00\x00\x03'
    -    175: h        BINGET     5
    -    177: \x86     TUPLE2
    -    178: Q        BINPERSID
    -    179: U        SHORT_BINSTRING 'f'
    -    182: C        SHORT_BINBYTES '\x00\x00\x00\x00\x00\x00\x00\x01'
    -    192: h        BINGET     5
    -    194: \x86     TUPLE2
    -    195: Q        BINPERSID
    -    196: u        SETITEMS   (MARK at 59)
    -    197: s    SETITEM
    -    198: .    STOP
    +     46: q    BINPUT     1
    +     48: X    BINUNICODE 'data'
    +     57: q    BINPUT     2
    +     59: }    EMPTY_DICT
    +     60: q    BINPUT     3
    +     62: (    MARK
    +     63: X        BINUNICODE 'f'
    +     69: q        BINPUT     4
    +     71: C        SHORT_BINBYTES b'\x00\x00\x00\x00\x00\x00\x00\x01'
    +     81: q        BINPUT     5
    +     83: c        GLOBAL     '__main__ Object'
    +    100: q        BINPUT     6
    +    102: \x86     TUPLE2
    +    103: q        BINPUT     7
    +    105: Q        BINPERSID
    +    106: X        BINUNICODE 'd'
    +    112: q        BINPUT     8
    +    114: C        SHORT_BINBYTES b'\x00\x00\x00\x00\x00\x00\x00\x02'
    +    124: q        BINPUT     9
    +    126: h        BINGET     6
    +    128: \x86     TUPLE2
    +    129: q        BINPUT     10
    +    131: Q        BINPERSID
    +    132: X        BINUNICODE 'g'
    +    138: q        BINPUT     11
    +    140: C        SHORT_BINBYTES b'\x00\x00\x00\x00\x00\x00\x00\x03'
    +    150: q        BINPUT     12
    +    152: h        BINGET     6
    +    154: \x86     TUPLE2
    +    155: q        BINPUT     13
    +    157: Q        BINPERSID
    +    158: X        BINUNICODE 'b'
    +    164: q        BINPUT     14
    +    166: C        SHORT_BINBYTES b'\x00\x00\x00\x00\x00\x00\x00\x08'
    +    176: q        BINPUT     15
    +    178: h        BINGET     6
    +    180: \x86     TUPLE2
    +    181: q        BINPUT     16
    +    183: Q        BINPERSID
    +    184: X        BINUNICODE 'a'
    +    190: q        BINPUT     17
    +    192: C        SHORT_BINBYTES b'\x00\x00\x00\x00\x00\x00\x00\x05'
    +    202: q        BINPUT     18
    +    204: h        BINGET     6
    +    206: \x86     TUPLE2
    +    207: q        BINPUT     19
    +    209: Q        BINPERSID
    +    210: X        BINUNICODE 'e'
    +    216: q        BINPUT     20
    +    218: C        SHORT_BINBYTES b'\x00\x00\x00\x00\x00\x00\x00\x06'
    +    228: q        BINPUT     21
    +    230: h        BINGET     6
    +    232: \x86     TUPLE2
    +    233: q        BINPUT     22
    +    235: Q        BINPERSID
    +    236: X        BINUNICODE 'c'
    +    242: q        BINPUT     23
    +    244: C        SHORT_BINBYTES b'\x00\x00\x00\x00\x00\x00\x00\x07'
    +    254: q        BINPUT     24
    +    256: h        BINGET     6
    +    258: \x86     TUPLE2
    +    259: q        BINPUT     25
    +    261: Q        BINPERSID
    +    262: u        SETITEMS   (MARK at 62)
    +    263: s    SETITEM
    +    264: .    STOP
       highest protocol among opcodes = 3

    -obj 0000000000000008 32 sha1:dfe254b2f091cf0c9bc835713d53012d44e7e7ca
    +obj 0000000000000008 35 sha1:70dc33558d26431f1d6dbd576cf4b677032c97fd
           0: \x80 PROTO      3
           2: c    GLOBAL     '__main__ Object'
    -     19: q    BINPUT     1
    +     19: q    BINPUT     0
          21: .    STOP
       highest protocol among opcodes = 2
          22: \x80 PROTO      3
    -     24: U    SHORT_BINSTRING 'b0*'
    -     29: q    BINPUT     2
    -     31: .    STOP
    +     24: X    BINUNICODE 'b0*'
    +     32: q    BINPUT     1
    +     34: .    STOP
       highest protocol among opcodes = 2

    @@ -176,16 +197,16 @@ txn 0285cbad02222280 " "
     user "user1.0"
     description "step 1.0"
     extension ""
    -obj 0000000000000006 33 sha1:8f86d80dab366ac9780cdf9fd11aa622364397db
    +obj 0000000000000006 36 sha1:fc39de2e2d959f996fc80c1f8fa58fd8584e9bd6
           0: \x80 PROTO      3
           2: c    GLOBAL     '__main__ Object'
    -     19: q    BINPUT     1
    +     19: q    BINPUT     0
          21: .    STOP
       highest protocol among opcodes = 2
          22: \x80 PROTO      3
    -     24: U    SHORT_BINSTRING 'e1.0'
    -     30: q    BINPUT     2
    -     32: .    STOP
    +     24: X    BINUNICODE 'e1.0'
    +     33: q    BINPUT     1
    +     35: .    STOP
       highest protocol among opcodes = 2

    @@ -193,16 +214,16 @@ txn 0285cbad06d3a0cc " "
     user "user1.1"
     description "step 1.1"
     extension ""
    -obj 0000000000000008 33 sha1:3a63a76c25b677ada2cc1281f0fcbca823c2fde8
    +obj 0000000000000008 36 sha1:48ceba60e193e905cb25a4e452bacbfba1e6f54a
           0: \x80 PROTO      3
           2: c    GLOBAL     '__main__ Object'
    -     19: q    BINPUT     1
    +     19: q    BINPUT     0
          21: .    STOP
       highest protocol among opcodes = 2
          22: \x80 PROTO      3
    -     24: U    SHORT_BINSTRING 'b1.1'
    -     30: q    BINPUT     2
    -     32: .    STOP
    +     24: X    BINUNICODE 'b1.1'
    +     33: q    BINPUT     1
    +     35: .    STOP
       highest protocol among opcodes = 2

    @@ -210,16 +231,16 @@ txn 0285cbad0b851f19 " "
     user "user1.2"
     description "step 1.2"
     extension ""
    -obj 0000000000000003 33 sha1:c13b686e24c0b49869156feaafa5299a0be0db54
    +obj 0000000000000003 36 sha1:5484c69f420ce2bc74798fa0af92cad1fff46ac5
           0: \x80 PROTO      3
           2: c    GLOBAL     '__main__ Object'
    -     19: q    BINPUT     1
    +     19: q    BINPUT     0
          21: .    STOP
       highest protocol among opcodes = 2
          22: \x80 PROTO      3
    -     24: U    SHORT_BINSTRING 'g1.2'
    -     30: q    BINPUT     2
    -     32: .    STOP
    +     24: X    BINUNICODE 'g1.2'
    +     33: q    BINPUT     1
    +     35: .    STOP
       highest protocol among opcodes = 2

    @@ -227,16 +248,16 @@ txn 0285cbad10369d66 " "
     user "user1.3"
     description "step 1.3"
     extension ""
    -obj 0000000000000003 33 sha1:edbfe9c47fdfd3eeb89578d2b975196b72e04a47
    +obj 0000000000000003 36 sha1:c58b6020a7991c2b763ad922d1a9ae93f341883b
           0: \x80 PROTO      3
           2: c    GLOBAL     '__main__ Object'
    -     19: q    BINPUT     1
    +     19: q    BINPUT     0
          21: .    STOP
       highest protocol among opcodes = 2
          22: \x80 PROTO      3
    -     24: U    SHORT_BINSTRING 'g1.3'
    -     30: q    BINPUT     2
    -     32: .    STOP
    +     24: X    BINUNICODE 'g1.3'
    +     33: q    BINPUT     1
    +     35: .    STOP
       highest protocol among opcodes = 2

    @@ -244,16 +265,16 @@ txn 0285cbad14e81bb3 " "
     user "user1.4"
     description "step 1.4"
     extension ""
    -obj 0000000000000007 33 sha1:0ce3b56cc68602d8fcf9633527fc02d68d3c7963
    +obj 0000000000000007 36 sha1:a074839c67efb6d96e1d4400691bdb58e0b3ca43
           0: \x80 PROTO      3
           2: c    GLOBAL     '__main__ Object'
    -     19: q    BINPUT     1
    +     19: q    BINPUT     0
          21: .    STOP
       highest protocol among opcodes = 2
          22: \x80 PROTO      3
    -     24: U    SHORT_BINSTRING 'c1.4'
    -     30: q    BINPUT     2
    -     32: .    STOP
    +     24: X    BINUNICODE 'c1.4'
    +     33: q    BINPUT     1
    +     35: .    STOP
       highest protocol among opcodes = 2

    @@ -261,16 +282,16 @@ txn 0285cbad19999a00 " "
     user "user1.5"
     description "step 1.5"
     extension ""
    -obj 0000000000000001 33 sha1:9bb04c55d1990c274fcc9f6d71701456c999154d
    +obj 0000000000000001 36 sha1:6718431686e2413a926aa146c76ef3007de9d39b
           0: \x80 PROTO      3
           2: c    GLOBAL     '__main__ Object'
    -     19: q    BINPUT     1
    +     19: q    BINPUT     0
          21: .    STOP
       highest protocol among opcodes = 2
          22: \x80 PROTO      3
    -     24: U    SHORT_BINSTRING 'f1.5'
    -     30: q    BINPUT     2
    -     32: .    STOP
    +     24: X    BINUNICODE 'f1.5'
    +     33: q    BINPUT     1
    +     35: .    STOP
       highest protocol among opcodes = 2

    @@ -278,16 +299,16 @@ txn 0285cbad1e4b184c " "
     user "user1.6"
     description "step 1.6"
     extension ""
    -obj 0000000000000002 33 sha1:3856df32ef7c512e9fd2599772e431ce3a18b5f5
    +obj 0000000000000002 36 sha1:9cb878d16cc4c0968eb9942b45d7c7f84b2054ef
           0: \x80 PROTO      3
           2: c    GLOBAL     '__main__ Object'
    -     19: q    BINPUT     1
    +     19: q    BINPUT     0
          21: .    STOP
       highest protocol among opcodes = 2
          22: \x80 PROTO      3
    -     24: U    SHORT_BINSTRING 'd1.6'
    -     30: q    BINPUT     2
    -     32: .    STOP
    +     24: X    BINUNICODE 'd1.6'
    +     33: q    BINPUT     1
    +     35: .    STOP
       highest protocol among opcodes = 2

    @@ -295,16 +316,16 @@ txn 0285cbad22fc9699 " "
     user "user1.7"
     description "step 1.7"
     extension ""
    -obj 0000000000000007 33 sha1:3d9da3b8f59a10f15e7c6796023153089d58d969
    +obj 0000000000000007 36 sha1:bc53969fc907268a68ab4e9c601e114157a6b7ed
           0: \x80 PROTO      3
           2: c    GLOBAL     '__main__ Object'
    -     19: q    BINPUT     1
    +     19: q    BINPUT     0
          21: .    STOP
       highest protocol among opcodes = 2
          22: \x80 PROTO      3
    -     24: U    SHORT_BINSTRING 'c1.7'
    -     30: q    BINPUT     2
    -     32: .    STOP
    +     24: X    BINUNICODE 'c1.7'
    +     33: q    BINPUT     1
    +     35: .    STOP
       highest protocol among opcodes = 2

    @@ -312,16 +333,16 @@ txn 0285cbad27ae14e6 " "
     user "user1.8"
     description "step 1.8"
     extension ""
    -obj 0000000000000007 33 sha1:42c7e6fe473e6d99867b134c44c2d97813629b29
    +obj 0000000000000007 36 sha1:bb7b95b7f8cfcb61b5a19f646a9f54b05d445823
           0: \x80 PROTO      3
           2: c    GLOBAL     '__main__ Object'
    -     19: q    BINPUT     1
    +     19: q    BINPUT     0
          21: .    STOP
       highest protocol among opcodes = 2
          22: \x80 PROTO      3
    -     24: U    SHORT_BINSTRING 'c1.8'
    -     30: q    BINPUT     2
    -     32: .    STOP
    +     24: X    BINUNICODE 'c1.8'
    +     33: q    BINPUT     1
    +     35: .    STOP
       highest protocol among opcodes = 2

    @@ -329,16 +350,16 @@ txn 0285cbad2c5f9333 " "
     user "user1.9"
     description "step 1.9"
     extension ""
    -obj 0000000000000006 33 sha1:88921e4828cbbf11dc61ca6fbaf6595a88fe5076
    +obj 0000000000000006 36 sha1:e592ee7c81df854144e95f6a770786865a0d58d5
           0: \x80 PROTO      3
           2: c    GLOBAL     '__main__ Object'
    -     19: q    BINPUT     1
    +     19: q    BINPUT     0
          21: .    STOP
       highest protocol among opcodes = 2
          22: \x80 PROTO      3
    -     24: U    SHORT_BINSTRING 'e1.9'
    -     30: q    BINPUT     2
    -     32: .    STOP
    +     24: X    BINUNICODE 'e1.9'
    +     33: q    BINPUT     1
    +     35: .    STOP
       highest protocol among opcodes = 2

    @@ -346,16 +367,16 @@ txn 0285cbad31111180 " "
     user "user1.10"
     description "step 1.10"
     extension ""
    -obj 0000000000000005 34 sha1:70fe501d55fc4052b73f5e3473262a48555f375f
    +obj 0000000000000005 37 sha1:b2976e8cc01b2c9914b396cd6d3fdb49b0488856
           0: \x80 PROTO      3
           2: c    GLOBAL     '__main__ Object'
    -     19: q    BINPUT     1
    +     19: q    BINPUT     0
          21: .    STOP
       highest protocol among opcodes = 2
          22: \x80 PROTO      3
    -     24: U    SHORT_BINSTRING 'a1.10'
    -     31: q    BINPUT     2
    -     33: .    STOP
    +     24: X    BINUNICODE 'a1.10'
    +     34: q    BINPUT     1
    +     36: .    STOP
       highest protocol among opcodes = 2

    @@ -363,16 +384,16 @@ txn 0285cbad35c28fcc " "
     user "user1.11"
     description "step 1.11"
     extension ""
    -obj 0000000000000007 34 sha1:f1550b205f2cec40b8716673663fb6e446568772
    +obj 0000000000000007 37 sha1:6e4a4cf52bb36edaa083b1da4b59f3597ad6ea02
           0: \x80 PROTO      3
           2: c    GLOBAL     '__main__ Object'
    -     19: q    BINPUT     1
    +     19: q    BINPUT     0
          21: .    STOP
       highest protocol among opcodes = 2
          22: \x80 PROTO      3
    -     24: U    SHORT_BINSTRING 'c1.11'
    -     31: q    BINPUT     2
    -     33: .    STOP
    +     24: X    BINUNICODE 'c1.11'
    +     34: q    BINPUT     1
    +     36: .    STOP
       highest protocol among opcodes = 2

    @@ -380,16 +401,16 @@ txn 0285cbad3a740e19 " "
     user "user1.12"
     description "step 1.12"
     extension ""
    -obj 0000000000000006 34 sha1:e4587785ac67a316d288d89a2ecf5f7548804416
    +obj 0000000000000006 37 sha1:fad24b6d7758e671a255810ead8994459e9b0417
           0: \x80 PROTO      3
           2: c    GLOBAL     '__main__ Object'
    -     19: q    BINPUT     1
    +     19: q    BINPUT     0
          21: .    STOP
       highest protocol among opcodes = 2
          22: \x80 PROTO      3
    -     24: U    SHORT_BINSTRING 'e1.12'
    -     31: q    BINPUT     2
    -     33: .    STOP
    +     24: X    BINUNICODE 'e1.12'
    +     34: q    BINPUT     1
    +     36: .    STOP
       highest protocol among opcodes = 2

    @@ -397,16 +418,16 @@ txn 0285cbad3f258c66 " "
     user "user1.13"
     description "step 1.13"
     extension ""
    -obj 0000000000000003 34 sha1:c40d417ad5140d3c0a76b8119e1bc3f77924851f
    +obj 0000000000000003 37 sha1:be8b8aacb1e6b6e4661a96fe6f741ddc653acc41
           0: \x80 PROTO      3
           2: c    GLOBAL     '__main__ Object'
    -     19: q    BINPUT     1
    +     19: q    BINPUT     0
          21: .    STOP
       highest protocol among opcodes = 2
          22: \x80 PROTO      3
    -     24: U    SHORT_BINSTRING 'g1.13'
    -     31: q    BINPUT     2
    -     33: .    STOP
    +     24: X    BINUNICODE 'g1.13'
    +     34: q    BINPUT     1
    +     36: .    STOP
       highest protocol among opcodes = 2

    @@ -414,16 +435,16 @@ txn 0285cbad43d70ab3 " "
     user "user1.14"
     description "step 1.14"
     extension ""
    -obj 0000000000000003 34 sha1:141ee9a480f2e04c1c2b9fab6cab263010ab32cd
    +obj 0000000000000003 37 sha1:c65e91e03c291d0082a6ea58c9082e29b9f28c55
           0: \x80 PROTO      3
           2: c    GLOBAL     '__main__ Object'
    -     19: q    BINPUT     1
    +     19: q    BINPUT     0
          21: .    STOP
       highest protocol among opcodes = 2
          22: \x80 PROTO      3
    -     24: U    SHORT_BINSTRING 'g1.14'
    -     31: q    BINPUT     2
    -     33: .    STOP
    +     24: X    BINUNICODE 'g1.14'
    +     34: q    BINPUT     1
    +     36: .    STOP
       highest protocol among opcodes = 2

    @@ -431,16 +452,16 @@ txn 0285cbad48888900 " "
     user "user1.15"
     description "step 1.15"
     extension ""
    -obj 0000000000000002 34 sha1:ffd9e2447b4d6230d8e4c6584967ebd45bdb69cd
    +obj 0000000000000002 37 sha1:8b850edece74832eb6ff1e4be78b05f52ef5609c
           0: \x80 PROTO      3
           2: c    GLOBAL     '__main__ Object'
    -     19: q    BINPUT     1
    +     19: q    BINPUT     0
          21: .    STOP
       highest protocol among opcodes = 2
          22: \x80 PROTO      3
    -     24: U    SHORT_BINSTRING 'd1.15'
    -     31: q    BINPUT     2
    -     33: .    STOP
    +     24: X    BINUNICODE 'd1.15'
    +     34: q    BINPUT     1
    +     36: .    STOP
       highest protocol among opcodes = 2

    @@ -448,16 +469,16 @@ txn 0285cbad4d3a074c " "
     user "user1.16"
     description "step 1.16"
     extension ""
    -obj 0000000000000003 34 sha1:e320d84b1e6f9b5507665684c57938c97fb8707a
    +obj 0000000000000003 37 sha1:9480ee152fd13794009dd03d188cf82ec9fb4819
           0: \x80 PROTO      3
           2: c    GLOBAL     '__main__ Object'
    -     19: q    BINPUT     1
    +     19: q    BINPUT     0
          21: .    STOP
       highest protocol among opcodes = 2
          22: \x80 PROTO      3
    -     24: U    SHORT_BINSTRING 'g1.16'
    -     31: q    BINPUT     2
    -     33: .    STOP
    +     24: X    BINUNICODE 'g1.16'
    +     34: q    BINPUT     1
    +     36: .    STOP
       highest protocol among opcodes = 2

    @@ -465,16 +486,16 @@ txn 0285cbad51eb8599 " "
     user "user1.17"
     description "step 1.17"
     extension ""
    -obj 0000000000000001 34 sha1:a64a2fa4d8de13124ad15958bb44e93bb50be691
    +obj 0000000000000001 37 sha1:ee2d6c62270d71f460cfbe50c25c4558f2e4db96
           0: \x80 PROTO      3
           2: c    GLOBAL     '__main__ Object'
    -     19: q    BINPUT     1
    +     19: q    BINPUT     0
          21: .    STOP
       highest protocol among opcodes = 2
          22: \x80 PROTO      3
    -     24: U    SHORT_BINSTRING 'f1.17'
    -     31: q    BINPUT     2
    -     33: .    STOP
    +     24: X    BINUNICODE 'f1.17'
    +     34: q    BINPUT     1
    +     36: .    STOP
       highest protocol among opcodes = 2

    @@ -482,16 +503,16 @@ txn 0285cbad569d03e6 " "
     user "user1.18"
     description "step 1.18"
     extension ""
    -obj 0000000000000005 34 sha1:1a13c223b1e3c4336157bd9ea48bcebbf2bfeb83
    +obj 0000000000000005 37 sha1:aabc707728e1624e47e00b44c0536837c138f6e9
           0: \x80 PROTO      3
           2: c    GLOBAL     '__main__ Object'
    -     19: q    BINPUT     1
    +     19: q    BINPUT     0
          21: .    STOP
       highest protocol among opcodes = 2
          22: \x80 PROTO      3
    -     24: U    SHORT_BINSTRING 'a1.18'
    -     31: q    BINPUT     2
    -     33: .    STOP
    +     24: X    BINUNICODE 'a1.18'
    +     34: q    BINPUT     1
    +     36: .    STOP
       highest protocol among opcodes = 2

    @@ -499,16 +520,16 @@ txn 0285cbad5b4e8233 " "
     user "user1.19"
     description "step 1.19"
     extension ""
    -obj 0000000000000003 34 sha1:a0b9f323870e42230530e88c3d0df4d0ff53d169
    +obj 0000000000000003 37 sha1:ea6e91b0041c018c8c77ebe55596fb44593396a5
           0: \x80 PROTO      3
           2: c    GLOBAL     '__main__ Object'
    -     19: q    BINPUT     1
    +     19: q    BINPUT     0
          21: .    STOP
       highest protocol among opcodes = 2
          22: \x80 PROTO      3
    -     24: U    SHORT_BINSTRING 'g1.19'
    -     31: q    BINPUT     2
    -     33: .    STOP
    +     24: X    BINUNICODE 'g1.19'
    +     34: q    BINPUT     1
    +     36: .    STOP
       highest protocol among opcodes = 2

    @@ -516,16 +537,16 @@ txn 0285cbad60000080 " "
     user "user1.20"
     description "step 1.20"
     extension ""
    -obj 0000000000000003 34 sha1:9d877b2756905d307e10300aa81428ea05c630d2
    +obj 0000000000000003 37 sha1:2edb6e67e9c1d0c0dd7c4bf008c81ebcf16fe0b7
           0: \x80 PROTO      3
           2: c    GLOBAL     '__main__ Object'
    -     19: q    BINPUT     1
    +     19: q    BINPUT     0
          21: .    STOP
       highest protocol among opcodes = 2
          22: \x80 PROTO      3
    -     24: U    SHORT_BINSTRING 'g1.20'
    -     31: q    BINPUT     2
    -     33: .    STOP
    +     24: X    BINUNICODE 'g1.20'
    +     34: q    BINPUT     1
    +     36: .    STOP
       highest protocol among opcodes = 2

    @@ -533,16 +554,16 @@ txn 0285cbad64b17ecc " "
     user "user1.21"
     description "step 1.21"
     extension ""
    -obj 0000000000000006 34 sha1:4087f3ba62712e5c29b0d861d65bcc9904f0828e
    +obj 0000000000000006 37 sha1:39f276b08f1dbe1c10d8d78fbbb2b56a8adf47bc
           0: \x80 PROTO      3
           2: c    GLOBAL     '__main__ Object'
    -     19: q    BINPUT     1
    +     19: q    BINPUT     0
          21: .    STOP
       highest protocol among opcodes = 2
          22: \x80 PROTO      3
    -     24: U    SHORT_BINSTRING 'e1.21'
    -     31: q    BINPUT     2
    -     33: .    STOP
    +     24: X    BINUNICODE 'e1.21'
    +     34: q    BINPUT     1
    +     36: .    STOP
       highest protocol among opcodes = 2

    @@ -550,16 +571,16 @@ txn 0285cbad6962fd19 " "
     user "user1.22"
     description "step 1.22"
     extension ""
    -obj 0000000000000005 34 sha1:7f234b2ebf6c51bbc2acf55bc481b8ca0912b088
    +obj 0000000000000005 37 sha1:da8d342e0f80ea707724e47afc06640ab2d5a91b
           0: \x80 PROTO      3
           2: c    GLOBAL     '__main__ Object'
    -     19: q    BINPUT     1
    +     19: q    BINPUT     0
          21: .    STOP
       highest protocol among opcodes = 2
          22: \x80 PROTO      3
    -     24: U    SHORT_BINSTRING 'a1.22'
    -     31: q    BINPUT     2
    -     33: .    STOP
    +     24: X    BINUNICODE 'a1.22'
    +     34: q    BINPUT     1
    +     36: .    STOP
       highest protocol among opcodes = 2

    @@ -567,16 +588,16 @@ txn 0285cbad6e147b66 " "
     user "user1.23"
     description "step 1.23"
     extension ""
    -obj 0000000000000005 34 sha1:b54c8d6f9415eef59c5e4598d4ea459c7def7ae5
    +obj 0000000000000005 37 sha1:97ab286d00da92b84ccf43ead31cd607bf847e6d
           0: \x80 PROTO      3
           2: c    GLOBAL     '__main__ Object'
    -     19: q    BINPUT     1
    +     19: q    BINPUT     0
          21: .    STOP
       highest protocol among opcodes = 2
          22: \x80 PROTO      3
    -     24: U    SHORT_BINSTRING 'a1.23'
    -     31: q    BINPUT     2
    -     33: .    STOP
    +     24: X    BINUNICODE 'a1.23'
    +     34: q    BINPUT     1
    +     36: .    STOP
       highest protocol among opcodes = 2

    @@ -584,16 +605,16 @@ txn 0285cbad72c5f9b3 " "
     user "user1.24"
     description "step 1.24"
     extension ""
    -obj 0000000000000001 34 sha1:fc513f6a915be326a3d1212b12b389f284a329b2
    +obj 0000000000000001 37 sha1:fdb7cbf61232f415712183ed09075677d401141f
           0: \x80 PROTO      3
           2: c    GLOBAL     '__main__ Object'
    -     19: q    BINPUT     1
    +     19: q    BINPUT     0
          21: .    STOP
       highest protocol among opcodes = 2
          22: \x80 PROTO      3
    -     24: U    SHORT_BINSTRING 'f1.24'
    -     31: q    BINPUT     2
    -     33: .    STOP
    +     24: X    BINUNICODE 'f1.24'
    +     34: q    BINPUT     1
    +     36: .    STOP
       highest protocol among opcodes = 2

    @@ -613,18 +634,20 @@ txn 0285cbad80da7499 " "
     user "user"
     description "cyclic reference"
     extension ""
    -obj 0000000000000006 39 sha1:baf12eac4d077427f66ff902f64d44a2a141bfd6
    +obj 0000000000000006 43 sha1:983e0d4ef28b594823f7279d8c08d998930d1ff8
           0: \x80 PROTO      3
           2: c    GLOBAL     '__main__ Object'
    -     19: q    BINPUT     1
    +     19: q    BINPUT     0
          21: .    STOP
       highest protocol among opcodes = 2
          22: \x80 PROTO      3
    -     24: C    SHORT_BINBYTES '\x00\x00\x00\x00\x00\x00\x00\x06'
    -     34: h    BINGET     1
    -     36: \x86 TUPLE2
    -     37: Q    BINPERSID
    -     38: .    STOP
    +     24: C    SHORT_BINBYTES b'\x00\x00\x00\x00\x00\x00\x00\x06'
    +     34: q    BINPUT     1
    +     36: h    BINGET     0
    +     38: \x86 TUPLE2
    +     39: q    BINPUT     2
    +     41: Q    BINPERSID
    +     42: .    STOP
       highest protocol among opcodes = 3

    @@ -632,71 +655,92 @@ txn 0285cbad858bf2e6 " "
     user ""
     description "predelete 6"
     extension ""
    -obj 0000000000000000 199 sha1:eaa0f1b643468f33c6b87a875d67eb3b349be5dd
    +obj 0000000000000000 265 sha1:78b3f0aaef3a8674a55a61e9693b4b0443316bc9
           0: \x80 PROTO      3
           2: c    GLOBAL     'persistent.mapping PersistentMapping'
    -     40: q    BINPUT     1
    +     40: q    BINPUT     0
          42: .    STOP
       highest protocol among opcodes = 2
          43: \x80 PROTO      3
          45: }    EMPTY_DICT
    -     46: q    BINPUT     2
    -     48: U    SHORT_BINSTRING 'data'
    -     54: q    BINPUT     3
    -     56: }    EMPTY_DICT
    -     57: q    BINPUT     4
    -     59: (    MARK
    -     60: U        SHORT_BINSTRING 'a'
    -     63: C        SHORT_BINBYTES '\x00\x00\x00\x00\x00\x00\x00\x05'
    -     73: c        GLOBAL     '__main__ Object'
    -     90: q        BINPUT     5
    -     92: \x86     TUPLE2
    -     93: Q        BINPERSID
    -     94: U        SHORT_BINSTRING 'c'
    -     97: C        SHORT_BINBYTES '\x00\x00\x00\x00\x00\x00\x00\x07'
    -    107: h        BINGET     5
    -    109: \x86     TUPLE2
    -    110: Q        BINPERSID
    -    111: U        SHORT_BINSTRING 'b'
    -    114: C        SHORT_BINBYTES '\x00\x00\x00\x00\x00\x00\x00\x08'
    -    124: h        BINGET     5
    -    126: \x86     TUPLE2
    -    127: Q        BINPERSID
    -    128: U        SHORT_BINSTRING 'e'
    -    131: C        SHORT_BINBYTES '\x00\x00\x00\x00\x00\x00\x00\t'
    -    141: h        BINGET     5
    -    143: \x86     TUPLE2
    -    144: Q        BINPERSID
    -    145: U        SHORT_BINSTRING 'd'
    -    148: C        SHORT_BINBYTES '\x00\x00\x00\x00\x00\x00\x00\x02'
    -    158: h        BINGET     5
    -    160: \x86     TUPLE2
    -    161: Q        BINPERSID
    -    162: U        SHORT_BINSTRING 'g'
    -    165: C        SHORT_BINBYTES '\x00\x00\x00\x00\x00\x00\x00\x03'
    -    175: h        BINGET     5
    -    177: \x86     TUPLE2
    -    178: Q        BINPERSID
    -    179: U        SHORT_BINSTRING 'f'
    -    182: C        SHORT_BINBYTES '\x00\x00\x00\x00\x00\x00\x00\x01'
    -    192: h        BINGET     5
    -    194: \x86     TUPLE2
    -    195: Q        BINPERSID
    -    196: u        SETITEMS   (MARK at 59)
    -    197: s    SETITEM
    -    198: .    STOP
    +     46: q    BINPUT     1
    +     48: X    BINUNICODE 'data'
    +     57: q    BINPUT     2
    +     59: }    EMPTY_DICT
    +     60: q    BINPUT     3
    +     62: (    MARK
    +     63: X        BINUNICODE 'f'
    +     69: q        BINPUT     4
    +     71: C        SHORT_BINBYTES b'\x00\x00\x00\x00\x00\x00\x00\x01'
    +     81: q        BINPUT     5
    +     83: c        GLOBAL     '__main__ Object'
    +    100: q        BINPUT     6
    +    102: \x86     TUPLE2
    +    103: q        BINPUT     7
    +    105: Q        BINPERSID
    +    106: X        BINUNICODE 'd'
    +    112: q        BINPUT     8
    +    114: C        SHORT_BINBYTES b'\x00\x00\x00\x00\x00\x00\x00\x02'
    +    124: q        BINPUT     9
    +    126: h        BINGET     6
    +    128: \x86     TUPLE2
    +    129: q        BINPUT     10
    +    131: Q        BINPERSID
    +    132: X        BINUNICODE 'g'
    +    138: q        BINPUT     11
    +    140: C        SHORT_BINBYTES b'\x00\x00\x00\x00\x00\x00\x00\x03'
    +    150: q        BINPUT     12
    +    152: h        BINGET     6
    +    154: \x86     TUPLE2
    +    155: q        BINPUT     13
    +    157: Q        BINPERSID
    +    158: X        BINUNICODE 'b'
    +    164: q        BINPUT     14
    +    166: C        SHORT_BINBYTES b'\x00\x00\x00\x00\x00\x00\x00\x08'
    +    176: q        BINPUT     15
    +    178: h        BINGET     6
    +    180: \x86     TUPLE2
    +    181: q        BINPUT     16
    +    183: Q        BINPERSID
    +    184: X        BINUNICODE 'a'
    +    190: q        BINPUT     17
    +    192: C        SHORT_BINBYTES b'\x00\x00\x00\x00\x00\x00\x00\x05'
    +    202: q        BINPUT     18
    +    204: h        BINGET     6
    +    206: \x86     TUPLE2
    +    207: q        BINPUT     19
    +    209: Q        BINPERSID
    +    210: X        BINUNICODE 'e'
    +    216: q        BINPUT     20
    +    218: C        SHORT_BINBYTES b'\x00\x00\x00\x00\x00\x00\x00\t'
    +    228: q        BINPUT     21
    +    230: h        BINGET     6
    +    232: \x86     TUPLE2
    +    233: q        BINPUT     22
    +    235: Q        BINPERSID
    +    236: X        BINUNICODE 'c'
    +    242: q        BINPUT     23
    +    244: C        SHORT_BINBYTES b'\x00\x00\x00\x00\x00\x00\x00\x07'
    +    254: q        BINPUT     24
    +    256: h        BINGET     6
    +    258: \x86     TUPLE2
    +    259: q        BINPUT     25
    +    261: Q        BINPERSID
    +    262: u        SETITEMS   (MARK at 62)
    +    263: s    SETITEM
    +    264: .    STOP
       highest protocol among opcodes = 3

    -obj 0000000000000009 32 sha1:c10d44876cbf78e49f7cc633d985206f51ecc278
    +obj 0000000000000009 35 sha1:4b20bfd26d2807d81c4c52b56034203b96babe5d
           0: \x80 PROTO      3
           2: c    GLOBAL     '__main__ Object'
    -     19: q    BINPUT     1
    +     19: q    BINPUT     0
          21: .    STOP
       highest protocol among opcodes = 2
          22: \x80 PROTO      3
    -     24: U    SHORT_BINSTRING 'e1*'
    -     29: q    BINPUT     2
    -     31: .    STOP
    +     24: X    BINUNICODE 'e1*'
    +     32: q    BINPUT     1
    +     34: .    STOP
       highest protocol among opcodes = 2

    @@ -710,16 +754,16 @@ txn 0285cbadc740db19 " "
     user "user2.0"
     description "step 2.0"
     extension ""
    -obj 0000000000000001 33 sha1:118c46c51bb0f08ce76d8f4f3b5d923b81abdd46
    +obj 0000000000000001 36 sha1:4698f11fc85b9eadd355d8114ed6f55b71377024
           0: \x80 PROTO      3
           2: c    GLOBAL     '__main__ Object'
    -     19: q    BINPUT     1
    +     19: q    BINPUT     0
          21: .    STOP
       highest protocol among opcodes = 2
          22: \x80 PROTO      3
    -     24: U    SHORT_BINSTRING 'f2.0'
    -     30: q    BINPUT     2
    -     32: .    STOP
    +     24: X    BINUNICODE 'f2.0'
    +     33: q    BINPUT     1
    +     35: .    STOP
       highest protocol among opcodes = 2

    @@ -727,16 +771,16 @@ txn 0285cbadcbf25966 " "
     user "user2.1"
     description "step 2.1"
     extension ""
    -obj 0000000000000002 33 sha1:89ff5e4440585130863b518c044d35e0154daecc
    +obj 0000000000000002 36 sha1:e2f891ce328ae3ae117d22649af0da7cd0b1946d
           0: \x80 PROTO      3
           2: c    GLOBAL     '__main__ Object'
    -     19: q    BINPUT     1
    +     19: q    BINPUT     0
          21: .    STOP
       highest protocol among opcodes = 2
          22: \x80 PROTO      3
    -     24: U    SHORT_BINSTRING 'd2.1'
    -     30: q    BINPUT     2
    -     32: .    STOP
    +     24: X    BINUNICODE 'd2.1'
    +     33: q    BINPUT     1
    +     35: .    STOP
       highest protocol among opcodes = 2

    @@ -744,16 +788,16 @@ txn 0285cbadd0a3d7b3 " "
     user "user2.2"
     description "step 2.2"
     extension ""
    -obj 0000000000000003 33 sha1:e0470e3dee47625819f9bfe8085c1bce2a7a4a42
    +obj 0000000000000003 36 sha1:d1df41d00d4a274b872cc3a461c0e817a56891e8
           0: \x80 PROTO      3
           2: c    GLOBAL     '__main__ Object'
    -     19: q    BINPUT     1
    +     19: q    BINPUT     0
          21: .    STOP
       highest protocol among opcodes = 2
          22: \x80 PROTO      3
    -     24: U    SHORT_BINSTRING 'g2.2'
    -     30: q    BINPUT     2
    -     32: .    STOP
    +     24: X    BINUNICODE 'g2.2'
    +     33: q    BINPUT     1
    +     35: .    STOP
       highest protocol among opcodes = 2

    @@ -761,16 +805,16 @@ txn 0285cbadd5555600 " "
     user "user2.3"
     description "step 2.3"
     extension ""
    -obj 0000000000000003 33 sha1:b1a3740b05c6cae5f6c851b715c76dd7348228a9
    +obj 0000000000000003 36 sha1:94f3e65e39ff51d57f15d484211b9b14cc764dc9
           0: \x80 PROTO      3
           2: c    GLOBAL     '__main__ Object'
    -     19: q    BINPUT     1
    +     19: q    BINPUT     0
          21: .    STOP
       highest protocol among opcodes = 2
          22: \x80 PROTO      3
    -     24: U    SHORT_BINSTRING 'g2.3'
    -     30: q    BINPUT     2
    -     32: .    STOP
    +     24: X    BINUNICODE 'g2.3'
    +     33: q    BINPUT     1
    +     35: .    STOP
       highest protocol among opcodes = 2

    @@ -778,16 +822,16 @@ txn 0285cbadda06d44c " "
     user "user2.4"
     description "step 2.4"
     extension ""
    -obj 0000000000000009 33 sha1:d0368e87213747ab68d8e4f7a87ff1ea959ea579
    +obj 0000000000000009 36 sha1:ee33bb85a5d8eedd010f1353a12710f19164e039
           0: \x80 PROTO      3
           2: c    GLOBAL     '__main__ Object'
    -     19: q    BINPUT     1
    +     19: q    BINPUT     0
          21: .    STOP
       highest protocol among opcodes = 2
          22: \x80 PROTO      3
    -     24: U    SHORT_BINSTRING 'e2.4'
    -     30: q    BINPUT     2
    -     32: .    STOP
    +     24: X    BINUNICODE 'e2.4'
    +     33: q    BINPUT     1
    +     35: .    STOP
       highest protocol among opcodes = 2

    @@ -795,16 +839,16 @@ txn 0285cbaddeb85299 " "
     user "user2.5"
     description "step 2.5"
     extension ""
    -obj 0000000000000005 33 sha1:e5af7f0b8e157926739f657e729594908d188a3d
    +obj 0000000000000005 36 sha1:c772534529d247cfc1b9fdf5a6af0e6d209718f5
           0: \x80 PROTO      3
           2: c    GLOBAL     '__main__ Object'
    -     19: q    BINPUT     1
    +     19: q    BINPUT     0
          21: .    STOP
       highest protocol among opcodes = 2
          22: \x80 PROTO      3
    -     24: U    SHORT_BINSTRING 'a2.5'
    -     30: q    BINPUT     2
    -     32: .    STOP
    +     24: X    BINUNICODE 'a2.5'
    +     33: q    BINPUT     1
    +     35: .    STOP
       highest protocol among opcodes = 2

    @@ -812,16 +856,16 @@ txn 0285cbade369d0e6 " "
     user "user2.6"
     description "step 2.6"
     extension ""
    -obj 0000000000000008 33 sha1:dc70c3b1413c79d75bcfdcc50c3e803273f857ef
    +obj 0000000000000008 36 sha1:100e5baf3b5cf7276d7657e7ebe515e4444be00a
           0: \x80 PROTO      3
           2: c    GLOBAL     '__main__ Object'
    -     19: q    BINPUT     1
    +     19: q    BINPUT     0
          21: .    STOP
       highest protocol among opcodes = 2
          22: \x80 PROTO      3
    -     24: U    SHORT_BINSTRING 'b2.6'
    -     30: q    BINPUT     2
    -     32: .    STOP
    +     24: X    BINUNICODE 'b2.6'
    +     33: q    BINPUT     1
    +     35: .    STOP
       highest protocol among opcodes = 2

    @@ -829,16 +873,16 @@ txn 0285cbade81b4f33 " "
     user "user2.7"
     description "step 2.7"
     extension ""
    -obj 0000000000000003 33 sha1:35892bc2c71edb022b029aa1e4bf8201ccab4b0c
    +obj 0000000000000003 36 sha1:6982830f7f9ec7f5c71c2926dffc85003463365f
           0: \x80 PROTO      3
           2: c    GLOBAL     '__main__ Object'
    -     19: q    BINPUT     1
    +     19: q    BINPUT     0
          21: .    STOP
       highest protocol among opcodes = 2
          22: \x80 PROTO      3
    -     24: U    SHORT_BINSTRING 'g2.7'
    -     30: q    BINPUT     2
    -     32: .    STOP
    +     24: X    BINUNICODE 'g2.7'
    +     33: q    BINPUT     1
    +     35: .    STOP
       highest protocol among opcodes = 2

    @@ -846,16 +890,16 @@ txn 0285cbadeccccd80 " "
     user "user2.8"
     description "step 2.8"
     extension ""
    -obj 0000000000000002 33 sha1:b2da174266d0f0e0b58c214e6d79851f4a18b554
    +obj 0000000000000002 36 sha1:679994a2775668088af510d185f118a6de678e9b
           0: \x80 PROTO      3
           2: c    GLOBAL     '__main__ Object'
    -     19: q    BINPUT     1
    +     19: q    BINPUT     0
          21: .    STOP
       highest protocol among opcodes = 2
          22: \x80 PROTO      3
    -     24: U    SHORT_BINSTRING 'd2.8'
    -     30: q    BINPUT     2
    -     32: .    STOP
    +     24: X    BINUNICODE 'd2.8'
    +     33: q    BINPUT     1
    +     35: .    STOP
       highest protocol among opcodes = 2

    @@ -863,16 +907,16 @@ txn 0285cbadf17e4bcc " "
     user "user2.9"
     description "step 2.9"
     extension ""
    -obj 0000000000000009 33 sha1:92cf61eb5855d3b25fecbe7a458f1b21946f5ba3
    +obj 0000000000000009 36 sha1:7926589c9adf282a8de6ec2d2da7aeeb054db0e8
           0: \x80 PROTO      3
           2: c    GLOBAL     '__main__ Object'
    -     19: q    BINPUT     1
    +     19: q    BINPUT     0
          21: .    STOP
       highest protocol among opcodes = 2
          22: \x80 PROTO      3
    -     24: U    SHORT_BINSTRING 'e2.9'
    -     30: q    BINPUT     2
    -     32: .    STOP
    +     24: X    BINUNICODE 'e2.9'
    +     33: q    BINPUT     1
    +     35: .    STOP
       highest protocol among opcodes = 2

    @@ -880,16 +924,16 @@ txn 0285cbadf62fca19 " "
     user "user2.10"
     description "step 2.10"
     extension ""
    -obj 0000000000000007 34 sha1:f737655162c594cf8296b38f7c435a5e8e06d6d7
    +obj 0000000000000007 37 sha1:230ddb4fcd957487b06a9a6690d0085a5f4e447f
           0: \x80 PROTO      3
           2: c    GLOBAL     '__main__ Object'
    -     19: q    BINPUT     1
    +     19: q    BINPUT     0
          21: .    STOP
       highest protocol among opcodes = 2
          22: \x80 PROTO      3
    -     24: U    SHORT_BINSTRING 'c2.10'
    -     31: q    BINPUT     2
    -     33: .    STOP
    +     24: X    BINUNICODE 'c2.10'
    +     34: q    BINPUT     1
    +     36: .    STOP
       highest protocol among opcodes = 2

    @@ -897,16 +941,16 @@ txn 0285cbadfae14866 " "
     user "user2.11"
     description "step 2.11"
     extension ""
    -obj 0000000000000002 34 sha1:032d8305ea9de2ec785fc77c1743a37bb64553cd
    +obj 0000000000000002 37 sha1:c85a70f3ee80af026ffd7392402efd62e8dbd807
           0: \x80 PROTO      3
           2: c    GLOBAL     '__main__ Object'
    -     19: q    BINPUT     1
    +     19: q    BINPUT     0
          21: .    STOP
       highest protocol among opcodes = 2
          22: \x80 PROTO      3
    -     24: U    SHORT_BINSTRING 'd2.11'
    -     31: q    BINPUT     2
    -     33: .    STOP
    +     24: X    BINUNICODE 'd2.11'
    +     34: q    BINPUT     1
    +     36: .    STOP
       highest protocol among opcodes = 2

    @@ -914,16 +958,16 @@ txn 0285cbadff92c6b3 " "
     user "user2.12"
     description "step 2.12"
     extension ""
    -obj 0000000000000003 34 sha1:975fd7ef6350b6543495a800852969f1d7833c83
    +obj 0000000000000003 37 sha1:f447a42edf90ac9ef506f55e3f2af240f52d84d7
           0: \x80 PROTO      3
           2: c    GLOBAL     '__main__ Object'
    -     19: q    BINPUT     1
    +     19: q    BINPUT     0
          21: .    STOP
       highest protocol among opcodes = 2
          22: \x80 PROTO      3
    -     24: U    SHORT_BINSTRING 'g2.12'
    -     31: q    BINPUT     2
    -     33: .    STOP
    +     24: X    BINUNICODE 'g2.12'
    +     34: q    BINPUT     1
    +     36: .    STOP
       highest protocol among opcodes = 2

    @@ -931,16 +975,16 @@ txn 0285cbae04444500 " "
     user "user2.13"
     description "step 2.13"
     extension ""
    -obj 0000000000000002 34 sha1:d09e49d753b8183ba5e0fa042a239f103d54c873
    +obj 0000000000000002 37 sha1:92783aa30a97637bfa75bb74ee4188163e6599bb
           0: \x80 PROTO      3
           2: c    GLOBAL     '__main__ Object'
    -     19: q    BINPUT     1
    +     19: q    BINPUT     0
          21: .    STOP
       highest protocol among opcodes = 2
          22: \x80 PROTO      3
    -     24: U    SHORT_BINSTRING 'd2.13'
    -     31: q    BINPUT     2
    -     33: .    STOP
    +     24: X    BINUNICODE 'd2.13'
    +     34: q    BINPUT     1
    +     36: .    STOP
       highest protocol among opcodes = 2

    @@ -948,16 +992,16 @@ txn 0285cbae08f5c34c " "
     user "user2.14"
     description "step 2.14"
     extension ""
    -obj 0000000000000007 34 sha1:109581582c53bf400e56780c331410e5195d19e0
    +obj 0000000000000007 37 sha1:26e44812ce9f495bdc79426a987f86514576702b
           0: \x80 PROTO      3
           2: c    GLOBAL     '__main__ Object'
    -     19: q    BINPUT     1
    +     19: q    BINPUT     0
          21: .    STOP
       highest protocol among opcodes = 2
          22: \x80 PROTO      3
    -     24: U    SHORT_BINSTRING 'c2.14'
    -     31: q    BINPUT     2
    -     33: .    STOP
    +     24: X    BINUNICODE 'c2.14'
    +     34: q    BINPUT     1
    +     36: .    STOP
       highest protocol among opcodes = 2

    @@ -965,16 +1009,16 @@ txn 0285cbae0da74199 " "
     user "user2.15"
     description "step 2.15"
     extension ""
    -obj 0000000000000009 34 sha1:e67485cd99587ee9e98158db69ed668fb233093d
    +obj 0000000000000009 37 sha1:5036c79c841dfde65e56cf5ff9d5765ab025a8e8
           0: \x80 PROTO      3
           2: c    GLOBAL     '__main__ Object'
    -     19: q    BINPUT     1
    +     19: q    BINPUT     0
          21: .    STOP
       highest protocol among opcodes = 2
          22: \x80 PROTO      3
    -     24: U    SHORT_BINSTRING 'e2.15'
    -     31: q    BINPUT     2
    -     33: .    STOP
    +     24: X    BINUNICODE 'e2.15'
    +     34: q    BINPUT     1
    +     36: .    STOP
       highest protocol among opcodes = 2

    @@ -982,16 +1026,16 @@ txn 0285cbae1258bfe6 " "
     user "user2.16"
     description "step 2.16"
     extension ""
    -obj 0000000000000001 34 sha1:b9f373fb2097836edf1c9ffbf0ca55d1d2b2168f
    +obj 0000000000000001 37 sha1:a89f350d69c3f1ef8d7f2893d25ddbca59c72c1d
           0: \x80 PROTO      3
           2: c    GLOBAL     '__main__ Object'
    -     19: q    BINPUT     1
    +     19: q    BINPUT     0
          21: .    STOP
       highest protocol among opcodes = 2
          22: \x80 PROTO      3
    -     24: U    SHORT_BINSTRING 'f2.16'
    -     31: q    BINPUT     2
    -     33: .    STOP
    +     24: X    BINUNICODE 'f2.16'
    +     34: q    BINPUT     1
    +     36: .    STOP
       highest protocol among opcodes = 2

    @@ -999,16 +1043,16 @@ txn 0285cbae170a3e33 " "
     user "user2.17"
     description "step 2.17"
     extension ""
    -obj 0000000000000008 34 sha1:698e7a066839a9436339747fe7a85f475095af67
    +obj 0000000000000008 37 sha1:a442c267648c2cdcc7bd94e9343ae3c40bfd4aa1
           0: \x80 PROTO      3
           2: c    GLOBAL     '__main__ Object'
    -     19: q    BINPUT     1
    +     19: q    BINPUT     0
          21: .    STOP
       highest protocol among opcodes = 2
          22: \x80 PROTO      3
    -     24: U    SHORT_BINSTRING 'b2.17'
    -     31: q    BINPUT     2
    -     33: .    STOP
    +     24: X    BINUNICODE 'b2.17'
    +     34: q    BINPUT     1
    +     36: .    STOP
       highest protocol among opcodes = 2

    @@ -1016,16 +1060,16 @@ txn 0285cbae1bbbbc80 " "
     user "user2.18"
     description "step 2.18"
     extension ""
    -obj 0000000000000002 34 sha1:0d2f350bbfeb38c85466b05b336f9414b9e91f77
    +obj 0000000000000002 37 sha1:4751d47156d33d3029b1ac072978a0cd036d8407
           0: \x80 PROTO      3
           2: c    GLOBAL     '__main__ Object'
    -     19: q    BINPUT     1
    +     19: q    BINPUT     0
          21: .    STOP
       highest protocol among opcodes = 2
          22: \x80 PROTO      3
    -     24: U    SHORT_BINSTRING 'd2.18'
    -     31: q    BINPUT     2
    -     33: .    STOP
    +     24: X    BINUNICODE 'd2.18'
    +     34: q    BINPUT     1
    +     36: .    STOP
       highest protocol among opcodes = 2

    @@ -1033,16 +1077,16 @@ txn 0285cbae206d3acc " "
     user "user2.19"
     description "step 2.19"
     extension ""
    -obj 0000000000000009 34 sha1:471ca065c05720073421a0aeab549cb1e58cf99f
    +obj 0000000000000009 37 sha1:2c45fb767784e729381e26b159809465de6cc4a1
           0: \x80 PROTO      3
           2: c    GLOBAL     '__main__ Object'
    -     19: q    BINPUT     1
    +     19: q    BINPUT     0
          21: .    STOP
       highest protocol among opcodes = 2
          22: \x80 PROTO      3
    -     24: U    SHORT_BINSTRING 'e2.19'
    -     31: q    BINPUT     2
    -     33: .    STOP
    +     24: X    BINUNICODE 'e2.19'
    +     34: q    BINPUT     1
    +     36: .    STOP
       highest protocol among opcodes = 2

    @@ -1050,16 +1094,16 @@ txn 0285cbae251eb919 " "
     user "user2.20"
     description "step 2.20"
     extension ""
    -obj 0000000000000008 34 sha1:3b543565ce78028b7118f322a8d1faf2439d70e4
    +obj 0000000000000008 37 sha1:805076196578ebe4b4d399791a0841210348b7dd
           0: \x80 PROTO      3
           2: c    GLOBAL     '__main__ Object'
    -     19: q    BINPUT     1
    +     19: q    BINPUT     0
          21: .    STOP
       highest protocol among opcodes = 2
          22: \x80 PROTO      3
    -     24: U    SHORT_BINSTRING 'b2.20'
    -     31: q    BINPUT     2
    -     33: .    STOP
    +     24: X    BINUNICODE 'b2.20'
    +     34: q    BINPUT     1
    +     36: .    STOP
       highest protocol among opcodes = 2

    @@ -1067,16 +1111,16 @@ txn 0285cbae29d03766 " "
     user "user2.21"
     description "step 2.21"
     extension ""
    -obj 0000000000000009 34 sha1:79714405c7319c5800c2fe5f192a8a1e8a33d873
    +obj 0000000000000009 37 sha1:67fe19d4814705a72c5213d7b9827d60211f955e
           0: \x80 PROTO      3
           2: c    GLOBAL     '__main__ Object'
    -     19: q    BINPUT     1
    +     19: q    BINPUT     0
          21: .    STOP
       highest protocol among opcodes = 2
          22: \x80 PROTO      3
    -     24: U    SHORT_BINSTRING 'e2.21'
    -     31: q    BINPUT     2
    -     33: .    STOP
    +     24: X    BINUNICODE 'e2.21'
    +     34: q    BINPUT     1
    +     36: .    STOP
       highest protocol among opcodes = 2

    @@ -1084,16 +1128,16 @@ txn 0285cbae2e81b5b3 " "
     user "user2.22"
     description "step 2.22"
     extension ""
    -obj 0000000000000009 34 sha1:fb3f01b3470c5dcf9b4ce613bdd3821f2b9a3576
    +obj 0000000000000009 37 sha1:1467daccd50741b009135ca01fa4b1d5603cf52b
           0: \x80 PROTO      3
           2: c    GLOBAL     '__main__ Object'
    -     19: q    BINPUT     1
    +     19: q    BINPUT     0
          21: .    STOP
       highest protocol among opcodes = 2
          22: \x80 PROTO      3
    -     24: U    SHORT_BINSTRING 'e2.22'
    -     31: q    BINPUT     2
    -     33: .    STOP
    +     24: X    BINUNICODE 'e2.22'
    +     34: q    BINPUT     1
    +     36: .    STOP
       highest protocol among opcodes = 2

    @@ -1101,16 +1145,16 @@ txn 0285cbae33333400 " "
     user "user2.23"
     description "step 2.23"
     extension ""
    -obj 0000000000000002 34 sha1:2a646981c19fe36d62d89df7e1fd344eb648f9b8
    +obj 0000000000000002 37 sha1:414bbf42bc2c71670db19a00326a66ae81c95934
           0: \x80 PROTO      3
           2: c    GLOBAL     '__main__ Object'
    -     19: q    BINPUT     1
    +     19: q    BINPUT     0
          21: .    STOP
       highest protocol among opcodes = 2
          22: \x80 PROTO      3
    -     24: U    SHORT_BINSTRING 'd2.23'
    -     31: q    BINPUT     2
    -     33: .    STOP
    +     24: X    BINUNICODE 'd2.23'
    +     34: q    BINPUT     1
    +     36: .    STOP
       highest protocol among opcodes = 2

    @@ -1118,16 +1162,16 @@ txn 0285cbae37e4b24c " "
     user "user2.24"
     description "step 2.24"
     extension ""
    -obj 0000000000000009 34 sha1:8b769601aed2ebd9f3cc8fe1e63b2cd8975f9f2d
    +obj 0000000000000009 37 sha1:5bebc2493258962bc7b04ac95adf0753a48717c6
           0: \x80 PROTO      3
           2: c    GLOBAL     '__main__ Object'
    -     19: q    BINPUT     1
    +     19: q    BINPUT     0
          21: .    STOP
       highest protocol among opcodes = 2
          22: \x80 PROTO      3
    -     24: U    SHORT_BINSTRING 'e2.24'
    -     31: q    BINPUT     2
    -     33: .    STOP
    +     24: X    BINUNICODE 'e2.24'
    +     34: q    BINPUT     1
    +     36: .    STOP
       highest protocol among opcodes = 2

    @@ -1147,18 +1191,20 @@ txn 0285cbae45f92d33 " "
     user "user"
     description "cyclic reference"
     extension ""
    -obj 0000000000000002 39 sha1:f44b22761c7e1df86ed61823eb1404e463378a32
    +obj 0000000000000002 43 sha1:5dbee843010481bc9decea7a3fdc788af687a861
           0: \x80 PROTO      3
           2: c    GLOBAL     '__main__ Object'
    -     19: q    BINPUT     1
    +     19: q    BINPUT     0
          21: .    STOP
       highest protocol among opcodes = 2
          22: \x80 PROTO      3
    -     24: C    SHORT_BINBYTES '\x00\x00\x00\x00\x00\x00\x00\x02'
    -     34: h    BINGET     1
    -     36: \x86 TUPLE2
    -     37: Q    BINPERSID
    -     38: .    STOP
    +     24: C    SHORT_BINBYTES b'\x00\x00\x00\x00\x00\x00\x00\x02'
    +     34: q    BINPUT     1
    +     36: h    BINGET     0
    +     38: \x86 TUPLE2
    +     39: q    BINPUT     2
    +     41: Q    BINPERSID
    +     42: .    STOP
       highest protocol among opcodes = 3

    @@ -1166,71 +1212,92 @@ txn 0285cbae4aaaab80 " "
     user ""
     description "predelete 2"
     extension ""
    -obj 0000000000000000 199 sha1:a51d894c29856c2e8b8194e714cd84a0a23d03b8
    +obj 0000000000000000 265 sha1:7e206c9b8e345ec231a691fa8e5570059f715c42
           0: \x80 PROTO      3
           2: c    GLOBAL     'persistent.mapping PersistentMapping'
    -     40: q    BINPUT     1
    +     40: q    BINPUT     0
          42: .    STOP
       highest protocol among opcodes = 2
          43: \x80 PROTO      3
          45: }    EMPTY_DICT
    -     46: q    BINPUT     2
    -     48: U    SHORT_BINSTRING 'data'
    -     54: q    BINPUT     3
    -     56: }    EMPTY_DICT
    -     57: q    BINPUT     4
    -     59: (    MARK
    -     60: U        SHORT_BINSTRING 'a'
    -     63: C        SHORT_BINBYTES '\x00\x00\x00\x00\x00\x00\x00\x05'
    -     73: c        GLOBAL     '__main__ Object'
    -     90: q        BINPUT     5
    -     92: \x86     TUPLE2
    -     93: Q        BINPERSID
    -     94: U        SHORT_BINSTRING 'c'
    -     97: C        SHORT_BINBYTES '\x00\x00\x00\x00\x00\x00\x00\x07'
    -    107: h        BINGET     5
    -    109: \x86     TUPLE2
    -    110: Q        BINPERSID
    -    111: U        SHORT_BINSTRING 'b'
    -    114: C        SHORT_BINBYTES '\x00\x00\x00\x00\x00\x00\x00\x08'
    -    124: h        BINGET     5
    -    126: \x86     TUPLE2
    -    127: Q        BINPERSID
    -    128: U        SHORT_BINSTRING 'e'
    -    131: C        SHORT_BINBYTES '\x00\x00\x00\x00\x00\x00\x00\t'
    -    141: h        BINGET     5
    -    143: \x86     TUPLE2
    -    144: Q        BINPERSID
    -    145: U        SHORT_BINSTRING 'd'
    -    148: C        SHORT_BINBYTES '\x00\x00\x00\x00\x00\x00\x00\n'
    -    158: h        BINGET     5
    -    160: \x86     TUPLE2
    -    161: Q        BINPERSID
    -    162: U        SHORT_BINSTRING 'g'
    -    165: C        SHORT_BINBYTES '\x00\x00\x00\x00\x00\x00\x00\x03'
    -    175: h        BINGET     5
    -    177: \x86     TUPLE2
    -    178: Q        BINPERSID
    -    179: U        SHORT_BINSTRING 'f'
    -    182: C        SHORT_BINBYTES '\x00\x00\x00\x00\x00\x00\x00\x01'
    -    192: h        BINGET     5
    -    194: \x86     TUPLE2
    -    195: Q        BINPERSID
    -    196: u        SETITEMS   (MARK at 59)
    -    197: s    SETITEM
    -    198: .    STOP
    +     46: q    BINPUT     1
    +     48: X    BINUNICODE 'data'
    +     57: q    BINPUT     2
    +     59: }    EMPTY_DICT
    +     60: q    BINPUT     3
    +     62: (    MARK
    +     63: X        BINUNICODE 'f'
    +     69: q        BINPUT     4
    +     71: C        SHORT_BINBYTES b'\x00\x00\x00\x00\x00\x00\x00\x01'
    +     81: q        BINPUT     5
    +     83: c        GLOBAL     '__main__ Object'
    +    100: q        BINPUT     6
    +    102: \x86     TUPLE2
    +    103: q        BINPUT     7
    +    105: Q        BINPERSID
    +    106: X        BINUNICODE 'd'
    +    112: q        BINPUT     8
    +    114: C        SHORT_BINBYTES b'\x00\x00\x00\x00\x00\x00\x00\n'
    +    124: q        BINPUT     9
    +    126: h        BINGET     6
    +    128: \x86     TUPLE2
    +    129: q        BINPUT     10
    +    131: Q        BINPERSID
    +    132: X        BINUNICODE 'g'
    +    138: q        BINPUT     11
    +    140: C        SHORT_BINBYTES b'\x00\x00\x00\x00\x00\x00\x00\x03'
    +    150: q        BINPUT     12
    +    152: h        BINGET     6
    +    154: \x86     TUPLE2
    +    155: q        BINPUT     13
    +    157: Q        BINPERSID
    +    158: X        BINUNICODE 'b'
    +    164: q        BINPUT     14
    +    166: C        SHORT_BINBYTES b'\x00\x00\x00\x00\x00\x00\x00\x08'
    +    176: q        BINPUT     15
    +    178: h        BINGET     6
    +    180: \x86     TUPLE2
    +    181: q        BINPUT     16
    +    183: Q        BINPERSID
    +    184: X        BINUNICODE 'a'
    +    190: q        BINPUT     17
    +    192: C        SHORT_BINBYTES b'\x00\x00\x00\x00\x00\x00\x00\x05'
    +    202: q        BINPUT     18
    +    204: h        BINGET     6
    +    206: \x86     TUPLE2
    +    207: q        BINPUT     19
    +    209: Q        BINPERSID
    +    210: X        BINUNICODE 'e'
    +    216: q        BINPUT     20
    +    218: C        SHORT_BINBYTES b'\x00\x00\x00\x00\x00\x00\x00\t'
    +    228: q        BINPUT     21
    +    230: h        BINGET     6
    +    232: \x86     TUPLE2
    +    233: q        BINPUT     22
    +    235: Q        BINPERSID
    +    236: X        BINUNICODE 'c'
    +    242: q        BINPUT     23
    +    244: C        SHORT_BINBYTES b'\x00\x00\x00\x00\x00\x00\x00\x07'
    +    254: q        BINPUT     24
    +    256: h        BINGET     6
    +    258: \x86     TUPLE2
    +    259: q        BINPUT     25
    +    261: Q        BINPERSID
    +    262: u        SETITEMS   (MARK at 62)
    +    263: s    SETITEM
    +    264: .    STOP
       highest protocol among opcodes = 3

    -obj 000000000000000a 32 sha1:25364c8085cd5e554eb4756133186e5cf386032b
    +obj 000000000000000a 35 sha1:3c9779a0408ed164eca3ade755529246f25fe76c
           0: \x80 PROTO      3
           2: c    GLOBAL     '__main__ Object'
    -     19: q    BINPUT     1
    +     19: q    BINPUT     0
          21: .    STOP
       highest protocol among opcodes = 2
          22: \x80 PROTO      3
    -     24: U    SHORT_BINSTRING 'd2*'
    -     29: q    BINPUT     2
    -     31: .    STOP
    +     24: X    BINUNICODE 'd2*'
    +     32: q    BINPUT     1
    +     34: .    STOP
       highest protocol among opcodes = 2
parent fac2f190
...@@ -30,8 +30,8 @@ testdir = dirname(__file__) ...@@ -30,8 +30,8 @@ testdir = dirname(__file__)
# ztestdata is test fixture to run a test wrt particular ZODB testdata case. # ztestdata is test fixture to run a test wrt particular ZODB testdata case.
# #
# It yields all testdata cases generated by gen_testdata.py for # It yields all testdata cases generated by gen_testdata.py for both py2 and
# all covered ZODB pickle kinds. # py3 and all covered ZODB pickle kinds.
# #
# ztestdata.prefix is where test database and other generated files live. # ztestdata.prefix is where test database and other generated files live.
# ztestdata.prefix + '/data.fs' , in particular, is the path to test database. # ztestdata.prefix + '/data.fs' , in particular, is the path to test database.
...@@ -40,7 +40,7 @@ testdir = dirname(__file__) ...@@ -40,7 +40,7 @@ testdir = dirname(__file__)
# NOTE keep in sync with run_with_all_zodb_pickle_kinds # NOTE keep in sync with run_with_all_zodb_pickle_kinds
for name in ('1',) for name in ('1',)
for zext in (False, True) for zext in (False, True)
for zkind in ('py2_pickle1', 'py2_pickle2', 'py2_pickle3') for zkind in ('py2_pickle1', 'py2_pickle2', 'py2_pickle3', 'py3_pickle3')
], ],
ids = lambda _: '%s%s/%s' % (_[0], '' if _[1] else '_!zext', _[2]), ids = lambda _: '%s%s/%s' % (_[0], '' if _[1] else '_!zext', _[2]),
) )
......
...@@ -28,6 +28,7 @@ produce. The following combinations are covered: ...@@ -28,6 +28,7 @@ produce. The following combinations are covered:
py2: ZODB 4 and ZODB5 < 5.3 (pickle protocol 1) py2: ZODB 4 and ZODB5 < 5.3 (pickle protocol 1)
py2: ZODB 5.3 (pickle protocol 2) py2: ZODB 5.3 (pickle protocol 2)
py2: ZODB ≥ 5.4 (pickle protocol 3) py2: ZODB ≥ 5.4 (pickle protocol 3)
py3: ZODB4 and ZODB5 (pickle protocol 3)
Each such combination is referred to by "zkind" which indicates major Python Each such combination is referred to by "zkind" which indicates major Python
and pickle protocol versions used, for example "py2_pickle3". See and pickle protocol versions used, for example "py2_pickle3". See
...@@ -37,9 +38,18 @@ Golden zodbdump & zodbanalyze outputs are also generated besides databases thems ...@@ -37,9 +38,18 @@ Golden zodbdump & zodbanalyze outputs are also generated besides databases thems
""" """
# NOTE result of this script must be saved in version control and should not be # NOTE result of this script must be saved in version control and should not be
# generated at the time when tests are run. This is because even though we make # generated at the time when tests are run. This is because we want to have
# time and random predictable ZODB cannot generally save same transaction # test data generated by both py2 and py3, and zodbtools on any particular
# extension dictionary to the same raw data. # python should be able to handle all that testdata. For example zodbtools/py3
# should be able to handle databases generated by both py2 and py3.
#
# Use py2py3-venv to combine py2- and py3- virtual environments into common
# environment and run `python2 gen_testdata.py` and `python3 gen_testdata.py`
# from there to regenerate the test data.
#
# NOTE another reason is that even though we make time and random predictable
# ZODB cannot generally save same transaction extension dictionary to the same
# raw data.
# #
# Quoting # Quoting
# #
...@@ -174,6 +184,7 @@ def ext4subj(subj): ...@@ -174,6 +184,7 @@ def ext4subj(subj):
# py2: ZODB with pickle protocol = 1 generated by ZODB4 and ZODB5 < 5.3 # py2: ZODB with pickle protocol = 1 generated by ZODB4 and ZODB5 < 5.3
# py2: ZODB with pickle protocol = 2 generated by ZODB5 5.3 # py2: ZODB with pickle protocol = 2 generated by ZODB5 5.3
# py2: ZODB with pickle protocol = 3 generated by ZODB5 ≥ 5.4 # py2: ZODB with pickle protocol = 3 generated by ZODB5 ≥ 5.4
# py3: ZODB with pickle protocol = 3 generated by both ZODB4/py3 and ZODB5/py3 since 2013
# #
# For convenience f can detect under which environment it is being executed via current_zkind. # For convenience f can detect under which environment it is being executed via current_zkind.
# #
...@@ -185,6 +196,7 @@ def run_with_all_zodb_pickle_kinds(f): ...@@ -185,6 +196,7 @@ def run_with_all_zodb_pickle_kinds(f):
if expect_protocol is not None: if expect_protocol is not None:
assert zserialize._protocol == expect_protocol, (current_zkind(), expect_protocol) assert zserialize._protocol == expect_protocol, (current_zkind(), expect_protocol)
f() f()
if sys.version_info.major == 2:
_run_with_zodb4py2_compat(_, 1) _run_with_zodb4py2_compat(_, 1)
_run_with_zodb4py2_compat(_, 2) _run_with_zodb4py2_compat(_, 2)
_(3) _(3)
......
...@@ -44,11 +44,19 @@ def test_zodbdump(tmpdir, ztestdata, pretty): ...@@ -44,11 +44,19 @@ def test_zodbdump(tmpdir, ztestdata, pretty):
dumpok = f.read() dumpok = f.read()
# normalize zpickledis.ok to current python: # normalize zpickledis.ok to current python:
# unicode comes as *UNICODE u'... on py2 and *UNICODE '... on py3
# bytes comes as *BYTES '... on py2 and *BYTES b'... on py3 # bytes comes as *BYTES '... on py2 and *BYTES b'... on py3
if pretty == 'zpickledis': if pretty == 'zpickledis':
if PY3: if PY3:
dumpok = dumpok.replace(b"UNICODE u'", b"UNICODE '")
dumpok = dumpok.replace(b'UNICODE u"', b'UNICODE "')
dumpok = dumpok.replace(b"BYTES '", b"BYTES b'") dumpok = dumpok.replace(b"BYTES '", b"BYTES b'")
dumpok = dumpok.replace(b'BYTES "', b'BYTES b"') dumpok = dumpok.replace(b'BYTES "', b'BYTES b"')
else:
dumpok = dumpok.replace(b"UNICODE '", b"UNICODE u'")
dumpok = dumpok.replace(b'UNICODE "', b'UNICODE u"')
dumpok = dumpok.replace(b"BYTES b'", b"BYTES '")
dumpok = dumpok.replace(b'BYTES b"', b'BYTES "')
out = BytesIO() out = BytesIO()
zodbdump(stor, None, None, pretty=pretty, out=out) zodbdump(stor, None, None, pretty=pretty, out=out)
......
Class Name,T.Count,T.Bytes,Pct,AvgSize,C.Count,C.Bytes,O.Count,O.Bytes
persistent.mapping.PersistentMapping,3,795,24.952919%,265.000000,1,265,2,530
__main__.Object,65,2391,75.047081%,36.784615,9,342,56,2049
This diff is collapsed.
Class Name,T.Count,T.Bytes,Pct,AvgSize,C.Count,C.Bytes,O.Count,O.Bytes
persistent.mapping.PersistentMapping,3,795,24.952919%,265.000000,1,265,2,530
__main__.Object,65,2391,75.047081%,36.784615,9,342,56,2049
...@@ -72,9 +72,10 @@ def _zext_supported(): ...@@ -72,9 +72,10 @@ def _zext_supported():
def fs1_testdata_py23(tmpdir, path): def fs1_testdata_py23(tmpdir, path):
data = readfile(path) data = readfile(path)
index = readfile(path + ".index") index = readfile(path + ".index")
assert data[:4] == b"FS21" # FileStorage magic for Python2 head = data[:4]
if PY3: assert head in (b"FS21", b"FS30") # FileStorage magics for Python2 and Python3
data = b"FS30" + data[4:] # FileStorage magic for Python3 head = b"FS30" if PY3 else b"FS21"
data = head + data[4:]
path_ = "%s/%s" % (tmpdir, basename(path)) path_ = "%s/%s" % (tmpdir, basename(path))
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment