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__)
# ztestdata is test fixture to run a test wrt particular ZODB testdata case.
#
# It yields all testdata cases generated by gen_testdata.py for
# all covered ZODB pickle kinds.
# It yields all testdata cases generated by gen_testdata.py for both py2 and
# py3 and all covered ZODB pickle kinds.
#
# ztestdata.prefix is where test database and other generated files live.
# ztestdata.prefix + '/data.fs' , in particular, is the path to test database.
......@@ -40,7 +40,7 @@ testdir = dirname(__file__)
# NOTE keep in sync with run_with_all_zodb_pickle_kinds
for name in ('1',)
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]),
)
......
......@@ -28,6 +28,7 @@ produce. The following combinations are covered:
py2: ZODB 4 and ZODB5 < 5.3 (pickle protocol 1)
py2: ZODB 5.3 (pickle protocol 2)
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
and pickle protocol versions used, for example "py2_pickle3". See
......@@ -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
# generated at the time when tests are run. This is because even though we make
# time and random predictable ZODB cannot generally save same transaction
# extension dictionary to the same raw data.
# generated at the time when tests are run. This is because we want to have
# test data generated by both py2 and py3, and zodbtools on any particular
# 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
#
......@@ -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 = 2 generated by ZODB5 5.3
# 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.
#
......@@ -185,8 +196,9 @@ def run_with_all_zodb_pickle_kinds(f):
if expect_protocol is not None:
assert zserialize._protocol == expect_protocol, (current_zkind(), expect_protocol)
f()
_run_with_zodb4py2_compat(_, 1)
_run_with_zodb4py2_compat(_, 2)
if sys.version_info.major == 2:
_run_with_zodb4py2_compat(_, 1)
_run_with_zodb4py2_compat(_, 2)
_(3)
# current_zkind returns string indicating currently activated ZODB environment,
......
......@@ -44,11 +44,19 @@ def test_zodbdump(tmpdir, ztestdata, pretty):
dumpok = f.read()
# 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
if pretty == 'zpickledis':
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"')
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()
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():
def fs1_testdata_py23(tmpdir, path):
data = readfile(path)
index = readfile(path + ".index")
assert data[:4] == b"FS21" # FileStorage magic for Python2
if PY3:
data = b"FS30" + data[4:] # FileStorage magic for Python3
head = data[:4]
assert head in (b"FS21", b"FS30") # FileStorage magics for Python2 and Python3
head = b"FS30" if PY3 else b"FS21"
data = head + data[4:]
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