/* * Copyright 2017 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ /* Each top-level struct in this file represents an IonHashing test case. A test may be named by an annotation on the top-level struct; alternatively, the default name of a test is the value of the 'ion' field. Each test defines a source Ion value and an ordered list of byte arrays that correspond to expected calls to a user-provided hash function. S-expressions annotated with update:: represent bytes passed to the update() method, while those annotated with digest:: represent the bytes returned by the digest() method. To illustrate the expected behavior clearly, the expectations for the vast majority of these tests are verified via an identity hash function. For example: { ion:[1,2,3], // source Ion value expect:{ identity:( // list of byte arrays corresponding to update() input and digest() output update::(0x0b) update::(0xb0) update::(0x0b) update::(0x20) update::(0x01) update::(0x0e) update::(0x0b) update::(0x20) update::(0x02) update::(0x0e) update::(0x0b) update::(0x20) update::(0x03) update::(0x0e) update::(0x0e) digest::(0x0b 0xb0 0x0b 0x20 0x01 0x0e 0x0b 0x20 0x02 0x0e 0x0b 0x20 0x03 0x0e 0x0e) ) } } For some tests, it is sufficient to verify only the final digest bytes. The above test could be written to accomplish this as follows: { ion:[1,2,3], expect:{ identity:( final_digest::(0x0b 0xb0 0x0b 0x20 0x01 0x0e 0x0b 0x20 0x02 0x0e 0x0b 0x20 0x03 0x0e 0x0e) ) } } Specifying the source Ion value in Ion binary is done via '10n' field as follows: { '10n':(0x20 0x05), // source Ion value (binary encoding) expect:{ identity:(update::(0x0b) update::(0x20 0x05) update::(0x0e) digest::(0x0b 0x20 0x05 0x0e)) } } For these tests, logic that caches digests of some scalars (e.g., symbols) is disabled. This caching logic may be enabled for an individual test by specifying "useDigestCache:true". Alternatively, or in addition to expecting identity bytes, values computed by an MD5 hasher are supported. An expect:{ md5:(()) } value asserts that the expected sequence of MD5 hashes is reported as a separate test, named with a ".md5" suffix. Expected MD5 hashes can be calculated via Python. For example, for the ion:null test, the expected MD5 was found as follows (Python 2.7 was used here): % python >>> import binascii >>> import hashlib >>> binascii.hexlify(hashlib.md5(binascii.unhexlify("0f")).digest()) 'd838691e5d4ad06879ca721442e883d4' The expect MD5 hash option is intended as a double-check that the system is working correctly. If the expected bytes are simply used to create the MD5 equivalents, there's minimal, if any benefit; rather, expected MD5 hashes should be calculated by an independent process (e.g., pencil and paper with MD5 support from the Python REPL). */ // nulls { ion:null, expect:{ identity:(update::(0x0b) update::(0x0f) update::(0x0e) digest::(0x0b 0x0f 0x0e)), md5:(digest::(0x0f 0x50 0xc5 0xe5 0xe8 0x77 0xb4 0x45 0x1a 0xa9 0xfe 0x77 0xc3 0x76 0xcd 0xe4)) } } { ion:null.null, expect:{ identity:(update::(0x0b) update::(0x0f) update::(0x0e) digest::(0x0b 0x0f 0x0e)) } } { ion:null.bool, expect:{ identity:(update::(0x0b) update::(0x1f) update::(0x0e) digest::(0x0b 0x1f 0x0e)) } } { ion:null.int, expect:{ identity:(update::(0x0b) update::(0x2f) update::(0x0e) digest::(0x0b 0x2f 0x0e)) } } { ion:null.float, expect:{ identity:(update::(0x0b) update::(0x4f) update::(0x0e) digest::(0x0b 0x4f 0x0e)) } } { ion:null.decimal, expect:{ identity:(update::(0x0b) update::(0x5f) update::(0x0e) digest::(0x0b 0x5f 0x0e)) } } { ion:null.timestamp, expect:{ identity:(update::(0x0b) update::(0x6f) update::(0x0e) digest::(0x0b 0x6f 0x0e)) } } { ion:null.symbol, expect:{ identity:(update::(0x0b) update::(0x7f) update::(0x0e) digest::(0x0b 0x7f 0x0e)) } } { ion:null.string, expect:{ identity:(update::(0x0b) update::(0x8f) update::(0x0e) digest::(0x0b 0x8f 0x0e)) } } { ion:null.clob, expect:{ identity:(update::(0x0b) update::(0x9f) update::(0x0e) digest::(0x0b 0x9f 0x0e)) } } { ion:null.blob, expect:{ identity:(update::(0x0b) update::(0xaf) update::(0x0e) digest::(0x0b 0xaf 0x0e)) } } { ion:null.list, expect:{ identity:(update::(0x0b) update::(0xbf) update::(0x0e) digest::(0x0b 0xbf 0x0e)) } } { ion:null.sexp, expect:{ identity:(update::(0x0b) update::(0xcf) update::(0x0e) digest::(0x0b 0xcf 0x0e)) } } { ion:null.struct, expect:{ identity:(update::(0x0b) update::(0xdf) update::(0x0e) digest::(0x0b 0xdf 0x0e)) } } // /nulls // bools { ion:false, expect:{ identity:(update::(0x0b) update::(0x10) update::(0x0e) digest::(0x0b 0x10 0x0e)), md5:(digest::(0xc1 0x69 0xd7 0xf5 0x3c 0x70 0x09 0xc6 0x6e 0xff 0x7c 0x6e 0x09 0x30 0x62 0x7c)) } } { ion:true, expect:{ identity:(update::(0x0b) update::(0x11) update::(0x0e) digest::(0x0b 0x11 0x0e)), md5:(digest::(0xa7 0x51 0x0a 0x8e 0x9a 0x56 0xd0 0x23 0x29 0x27 0x2e 0xb4 0x96 0x66 0xde 0x12)) } } // /bools // ints { ion: 0, expect:{ identity:(update::(0x0b) update::(0x20) update::(0x0e) digest::(0x0b 0x20 0x0e)) } } { ion:-0, expect:{ identity:(update::(0x0b) update::(0x20) update::(0x0e) digest::(0x0b 0x20 0x0e)) } } { ion: 5, expect:{ identity:(update::(0x0b) update::(0x20) update::(0x05) update::(0x0e) digest::(0x0b 0x20 0x05 0x0e)) } } { ion:-6, expect:{ identity:(update::(0x0b) update::(0x30) update::(0x06) update::(0x0e) digest::(0x0b 0x30 0x06 0x0e)) } } intLength512::{ ion:-0xfe95f4cff19a8ee2edbbee30c7c0acbb83bfc4c0a58e8b94bb6250aeeaf3db8f41b0acdbb94b990c518d96c5ee3c02e276e06e07570a2b6e5dea9fe4fac8475a84efca8a8432d6d463bf0ceb470b4ad9b3b0c80730492e5ee660bca86932d933c471f178140c5256affe4ef5c0404d74b4b7776e77178b3281e1c5b65ad8866bcbaa6225c4e1c5b9624b19dcc6001afc3535a3769c8e937b7e3f9073ab0053cc0ffeb34124d5d570749d0181f4d4dedced7d28f038247befa18ce02a3d1293da637bb1ab6598bb6617a6a5ce0512c390236dbca283adf0291e6903fbd6819d4c5a8216c69e2083da5b3fefb0928b208345a39207c8461e38f793036146107559adf2f40612d25f14d45d7e2780b45e2cf9b5790d91aaaf327af3323e20242c2632a64725844f1d9e218aab0d56ee99ae486034d7b3fbfc4dce8c9cc2a793ce93affe81dee7158dad7f0623ce692c8ed0975dbeef9a717a0b63f90af4febc96785a6ff4e06b090a65d33c98932df39f7c5b807956a19897e0c3463046df2eb4df624c7c43bef48fab381a857b9f5b6c1bdbd6b3270c107cd3bc1c41fe04e1ddac69f14119de961af773285544f819f3951542f704b501ff0364bf54d14a86e19bec39394c85a6b256c6233da801a44f5db98ccdd8d9bb6788c014216dd57cb64573333ceed5b5c72a4ee296e75b3e32ed69083675a6a8f6b8ac85deaed88ad0a7, expect:{ identity:( update::(0x0b) update::(0x30) update::(0xfe 0x95 0xf4 0xcf 0xf1 0x9a 0x8e 0xe2 0xed 0xbb 0xee 0x30 0xc7 0xc0 0xac 0xbb 0x83 0xbf 0xc4 0xc0 0xa5 0x8e 0x8b 0x94 0xbb 0x62 0x50 0xae 0xea 0xf3 0xdb 0x8f 0x41 0xb0 0xac 0xdb 0xb9 0x4b 0x99 0x0c 0x0c 0x51 0x8d 0x96 0xc5 0xee 0x3c 0x02 0xe2 0x76 0xe0 0x6e 0x07 0x57 0x0a 0x2b 0x6e 0x5d 0xea 0x9f 0xe4 0xfa 0xc8 0x47 0x5a 0x84 0xef 0xca 0x8a 0x84 0x32 0xd6 0xd4 0x63 0xbf 0x0c 0x0c 0xeb 0x47 0x0c 0x0b 0x4a 0xd9 0xb3 0xb0 0xc8 0x07 0x30 0x49 0x2e 0x5e 0xe6 0x60 0xbc 0xa8 0x69 0x32 0xd9 0x33 0xc4 0x71 0xf1 0x78 0x14 0x0c 0x0c 0x52 0x56 0xaf 0xfe 0x4e 0xf5 0xc0 0x40 0x4d 0x74 0xb4 0xb7 0x77 0x6e 0x77 0x17 0x8b 0x32 0x81 0xe1 0xc5 0xb6 0x5a 0xd8 0x86 0x6b 0xcb 0xaa 0x62 0x25 0xc4 0xe1 0xc5 0xb9 0x62 0x4b 0x19 0xdc 0xc6 0x00 0x1a 0xfc 0x35 0x35 0xa3 0x76 0x9c 0x8e 0x93 0x7b 0x7e 0x3f 0x90 0x73 0xab 0x00 0x53 0xcc 0x0f 0xfe 0xb3 0x41 0x24 0xd5 0xd5 0x70 0x74 0x9d 0x01 0x81 0xf4 0xd4 0xde 0xdc 0xed 0x7d 0x28 0xf0 0x38 0x24 0x7b 0xef 0xa1 0x8c 0xe0 0x2a 0x3d 0x12 0x93 0xda 0x63 0x7b 0xb1 0xab 0x65 0x98 0xbb 0x66 0x17 0xa6 0xa5 0xce 0x05 0x12 0xc3 0x90 0x23 0x6d 0xbc 0xa2 0x83 0xad 0xf0 0x29 0x1e 0x69 0x03 0xfb 0xd6 0x81 0x9d 0x4c 0x5a 0x82 0x16 0xc6 0x9e 0x20 0x83 0xda 0x5b 0x3f 0xef 0xb0 0x92 0x8b 0x20 0x83 0x45 0xa3 0x92 0x07 0xc8 0x46 0x1e 0x38 0xf7 0x93 0x03 0x61 0x46 0x10 0x75 0x59 0xad 0xf2 0xf4 0x06 0x12 0xd2 0x5f 0x14 0xd4 0x5d 0x7e 0x27 0x80 0xb4 0x5e 0x2c 0xf9 0xb5 0x79 0x0d 0x91 0xaa 0xaf 0x32 0x7a 0xf3 0x32 0x3e 0x20 0x24 0x2c 0x26 0x32 0xa6 0x47 0x25 0x84 0x4f 0x1d 0x9e 0x21 0x8a 0xab 0x0d 0x56 0xee 0x99 0xae 0x48 0x60 0x34 0xd7 0xb3 0xfb 0xfc 0x4d 0xce 0x8c 0x9c 0xc2 0xa7 0x93 0xce 0x93 0xaf 0xfe 0x81 0xde 0xe7 0x15 0x8d 0xad 0x7f 0x06 0x23 0xce 0x69 0x2c 0x8e 0xd0 0x97 0x5d 0xbe 0xef 0x9a 0x71 0x7a 0x0c 0x0b 0x63 0xf9 0x0a 0xf4 0xfe 0xbc 0x96 0x78 0x5a 0x6f 0xf4 0xe0 0x6b 0x09 0x0a 0x65 0xd3 0x3c 0x98 0x93 0x2d 0xf3 0x9f 0x7c 0x5b 0x80 0x79 0x56 0xa1 0x98 0x97 0xe0 0xc3 0x46 0x30 0x46 0xdf 0x2e 0xb4 0xdf 0x62 0x4c 0x7c 0x43 0xbe 0xf4 0x8f 0xab 0x38 0x1a 0x85 0x7b 0x9f 0x5b 0x6c 0x1b 0xdb 0xd6 0xb3 0x27 0x0c 0x0c 0x10 0x7c 0xd3 0xbc 0x1c 0x41 0xfe 0x04 0xe1 0xdd 0xac 0x69 0xf1 0x41 0x19 0xde 0x96 0x1a 0xf7 0x73 0x28 0x55 0x44 0xf8 0x19 0xf3 0x95 0x15 0x42 0xf7 0x04 0xb5 0x01 0xff 0x03 0x64 0xbf 0x54 0xd1 0x4a 0x86 0xe1 0x9b 0xec 0x39 0x39 0x4c 0x85 0xa6 0xb2 0x56 0xc6 0x23 0x3d 0xa8 0x01 0xa4 0x4f 0x5d 0xb9 0x8c 0xcd 0xd8 0xd9 0xbb 0x67 0x88 0xc0 0x14 0x21 0x6d 0xd5 0x7c 0xb6 0x45 0x73 0x33 0x3c 0xee 0xd5 0xb5 0xc7 0x2a 0x4e 0xe2 0x96 0xe7 0x5b 0x3e 0x32 0xed 0x69 0x08 0x36 0x75 0xa6 0xa8 0xf6 0xb8 0xac 0x85 0xde 0xae 0xd8 0x8a 0xd0 0xa7) update::(0x0e) digest::(0x0b 0x30 0xfe 0x95 0xf4 0xcf 0xf1 0x9a 0x8e 0xe2 0xed 0xbb 0xee 0x30 0xc7 0xc0 0xac 0xbb 0x83 0xbf 0xc4 0xc0 0xa5 0x8e 0x8b 0x94 0xbb 0x62 0x50 0xae 0xea 0xf3 0xdb 0x8f 0x41 0xb0 0xac 0xdb 0xb9 0x4b 0x99 0x0c 0x0c 0x51 0x8d 0x96 0xc5 0xee 0x3c 0x02 0xe2 0x76 0xe0 0x6e 0x07 0x57 0x0a 0x2b 0x6e 0x5d 0xea 0x9f 0xe4 0xfa 0xc8 0x47 0x5a 0x84 0xef 0xca 0x8a 0x84 0x32 0xd6 0xd4 0x63 0xbf 0x0c 0x0c 0xeb 0x47 0x0c 0x0b 0x4a 0xd9 0xb3 0xb0 0xc8 0x07 0x30 0x49 0x2e 0x5e 0xe6 0x60 0xbc 0xa8 0x69 0x32 0xd9 0x33 0xc4 0x71 0xf1 0x78 0x14 0x0c 0x0c 0x52 0x56 0xaf 0xfe 0x4e 0xf5 0xc0 0x40 0x4d 0x74 0xb4 0xb7 0x77 0x6e 0x77 0x17 0x8b 0x32 0x81 0xe1 0xc5 0xb6 0x5a 0xd8 0x86 0x6b 0xcb 0xaa 0x62 0x25 0xc4 0xe1 0xc5 0xb9 0x62 0x4b 0x19 0xdc 0xc6 0x00 0x1a 0xfc 0x35 0x35 0xa3 0x76 0x9c 0x8e 0x93 0x7b 0x7e 0x3f 0x90 0x73 0xab 0x00 0x53 0xcc 0x0f 0xfe 0xb3 0x41 0x24 0xd5 0xd5 0x70 0x74 0x9d 0x01 0x81 0xf4 0xd4 0xde 0xdc 0xed 0x7d 0x28 0xf0 0x38 0x24 0x7b 0xef 0xa1 0x8c 0xe0 0x2a 0x3d 0x12 0x93 0xda 0x63 0x7b 0xb1 0xab 0x65 0x98 0xbb 0x66 0x17 0xa6 0xa5 0xce 0x05 0x12 0xc3 0x90 0x23 0x6d 0xbc 0xa2 0x83 0xad 0xf0 0x29 0x1e 0x69 0x03 0xfb 0xd6 0x81 0x9d 0x4c 0x5a 0x82 0x16 0xc6 0x9e 0x20 0x83 0xda 0x5b 0x3f 0xef 0xb0 0x92 0x8b 0x20 0x83 0x45 0xa3 0x92 0x07 0xc8 0x46 0x1e 0x38 0xf7 0x93 0x03 0x61 0x46 0x10 0x75 0x59 0xad 0xf2 0xf4 0x06 0x12 0xd2 0x5f 0x14 0xd4 0x5d 0x7e 0x27 0x80 0xb4 0x5e 0x2c 0xf9 0xb5 0x79 0x0d 0x91 0xaa 0xaf 0x32 0x7a 0xf3 0x32 0x3e 0x20 0x24 0x2c 0x26 0x32 0xa6 0x47 0x25 0x84 0x4f 0x1d 0x9e 0x21 0x8a 0xab 0x0d 0x56 0xee 0x99 0xae 0x48 0x60 0x34 0xd7 0xb3 0xfb 0xfc 0x4d 0xce 0x8c 0x9c 0xc2 0xa7 0x93 0xce 0x93 0xaf 0xfe 0x81 0xde 0xe7 0x15 0x8d 0xad 0x7f 0x06 0x23 0xce 0x69 0x2c 0x8e 0xd0 0x97 0x5d 0xbe 0xef 0x9a 0x71 0x7a 0x0c 0x0b 0x63 0xf9 0x0a 0xf4 0xfe 0xbc 0x96 0x78 0x5a 0x6f 0xf4 0xe0 0x6b 0x09 0x0a 0x65 0xd3 0x3c 0x98 0x93 0x2d 0xf3 0x9f 0x7c 0x5b 0x80 0x79 0x56 0xa1 0x98 0x97 0xe0 0xc3 0x46 0x30 0x46 0xdf 0x2e 0xb4 0xdf 0x62 0x4c 0x7c 0x43 0xbe 0xf4 0x8f 0xab 0x38 0x1a 0x85 0x7b 0x9f 0x5b 0x6c 0x1b 0xdb 0xd6 0xb3 0x27 0x0c 0x0c 0x10 0x7c 0xd3 0xbc 0x1c 0x41 0xfe 0x04 0xe1 0xdd 0xac 0x69 0xf1 0x41 0x19 0xde 0x96 0x1a 0xf7 0x73 0x28 0x55 0x44 0xf8 0x19 0xf3 0x95 0x15 0x42 0xf7 0x04 0xb5 0x01 0xff 0x03 0x64 0xbf 0x54 0xd1 0x4a 0x86 0xe1 0x9b 0xec 0x39 0x39 0x4c 0x85 0xa6 0xb2 0x56 0xc6 0x23 0x3d 0xa8 0x01 0xa4 0x4f 0x5d 0xb9 0x8c 0xcd 0xd8 0xd9 0xbb 0x67 0x88 0xc0 0x14 0x21 0x6d 0xd5 0x7c 0xb6 0x45 0x73 0x33 0x3c 0xee 0xd5 0xb5 0xc7 0x2a 0x4e 0xe2 0x96 0xe7 0x5b 0x3e 0x32 0xed 0x69 0x08 0x36 0x75 0xa6 0xa8 0xf6 0xb8 0xac 0x85 0xde 0xae 0xd8 0x8a 0xd0 0xa7 0x0e) ) } } // /ints // floats, derived from https://en.wikipedia.org/wiki/Double-precision_floating-point_format#Double-precision_examples { ion: 0e0, expect:{ identity:(update::(0x0b) update::(0x40) update::(0x0e) digest::(0x0b 0x40 0x0e)) } } { ion:-0e0, expect:{ identity:(update::(0x0b) update::(0x40) update::(0x80 0x00 0x00 0x00 0x00 0x00 0x00 0x00) update::(0x0e) digest::(0x0b 0x40 0x80 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x0e)) } } { ion:+inf, expect:{ identity:(update::(0x0b) update::(0x40) update::(0x7f 0xf0 0x00 0x00 0x00 0x00 0x00 0x00) update::(0x0e) digest::(0x0b 0x40 0x7f 0xf0 0x00 0x00 0x00 0x00 0x00 0x00 0x0e)) } } { ion:-inf, expect:{ identity:(update::(0x0b) update::(0x40) update::(0xff 0xf0 0x00 0x00 0x00 0x00 0x00 0x00) update::(0x0e) digest::(0x0b 0x40 0xff 0xf0 0x00 0x00 0x00 0x00 0x00 0x00 0x0e)) } } { ion: nan, expect:{ identity:(update::(0x0b) update::(0x40) update::(0x7f 0xf8 0x00 0x00 0x00 0x00 0x00 0x00) update::(0x0e) digest::(0x0b 0x40 0x7f 0xf8 0x00 0x00 0x00 0x00 0x00 0x00 0x0e)) } } { ion:-1e0, expect:{ identity:(update::(0x0b) update::(0x40) update::(0xbf 0xf0 0x00 0x00 0x00 0x00 0x00 0x00) update::(0x0e) digest::(0x0b 0x40 0xbf 0xf0 0x00 0x00 0x00 0x00 0x00 0x00 0x0e)) } } { ion: 1e0, expect:{ identity:(update::(0x0b) update::(0x40) update::(0x3f 0xf0 0x00 0x00 0x00 0x00 0x00 0x00) update::(0x0e) digest::(0x0b 0x40 0x3f 0xf0 0x00 0x00 0x00 0x00 0x00 0x00 0x0e)) } } { ion:-1.0000000000000002e0, expect:{ identity:(update::(0x0b) update::(0x40) update::(0xbf 0xf0 0x00 0x00 0x00 0x00 0x00 0x01) update::(0x0e) digest::(0x0b 0x40 0xbf 0xf0 0x00 0x00 0x00 0x00 0x00 0x01 0x0e)) } } { ion: 1.0000000000000002e0, expect:{ identity:(update::(0x0b) update::(0x40) update::(0x3f 0xf0 0x00 0x00 0x00 0x00 0x00 0x01) update::(0x0e) digest::(0x0b 0x40 0x3f 0xf0 0x00 0x00 0x00 0x00 0x00 0x01 0x0e)) } } { ion:-2e0, expect:{ identity:(update::(0x0b) update::(0x40) update::(0xc0 0x00 0x00 0x00 0x00 0x00 0x00 0x00) update::(0x0e) digest::(0x0b 0x40 0xc0 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x0e)) } } { ion: 2e0, expect:{ identity:(update::(0x0b) update::(0x40) update::(0x40 0x00 0x00 0x00 0x00 0x00 0x00 0x00) update::(0x0e) digest::(0x0b 0x40 0x40 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x0e)) } } { ion: 4.9e-324, expect:{ identity:(update::(0x0b) update::(0x40) update::(0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x01) update::(0x0e) digest::(0x0b 0x40 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x01 0x0e)) } } { ion: 2.2250738585072009e-308, expect:{ identity:(update::(0x0b) update::(0x40) update::(0x00 0x0f 0xff 0xff 0xff 0xff 0xff 0xff) update::(0x0e) digest::(0x0b 0x40 0x00 0x0f 0xff 0xff 0xff 0xff 0xff 0xff 0x0e)) } } { ion: 2.2250738585072014e-308, expect:{ identity:(update::(0x0b) update::(0x40) update::(0x00 0x10 0x00 0x00 0x00 0x00 0x00 0x00) update::(0x0e) digest::(0x0b 0x40 0x00 0x10 0x00 0x00 0x00 0x00 0x00 0x00 0x0e)) } } { ion: 1.7976931348623157e308, expect:{ identity:(update::(0x0b) update::(0x40) update::(0x7f 0xef 0xff 0xff 0xff 0xff 0xff 0xff) update::(0x0e) digest::(0x0b 0x40 0x7f 0xef 0xff 0xff 0xff 0xff 0xff 0xff 0x0e)) } } // /floats // decimals { ion: 0d0, expect:{ identity:(update::(0x0b) update::(0x50) update::(0x0e) digest::(0x0b 0x50 0x0e)) } } { ion: 0d-0, expect:{ identity:(update::(0x0b) update::(0x50) update::(0x0e) digest::(0x0b 0x50 0x0e)) } } { ion: 0d1, expect:{ identity:(update::(0x0b) update::(0x50) update::( 0x81) update::(0x0e) digest::(0x0b 0x50 0x81 0x0e)) } } { ion: 0d-1, expect:{ identity:(update::(0x0b) update::(0x50) update::( 0xc1) update::(0x0e) digest::(0x0b 0x50 0xc1 0x0e)) } } { ion: 0d5, expect:{ identity:(update::(0x0b) update::(0x50) update::( 0x85) update::(0x0e) digest::(0x0b 0x50 0x85 0x0e)) } } { ion: 0d-5, expect:{ identity:(update::(0x0b) update::(0x50) update::( 0xc5) update::(0x0e) digest::(0x0b 0x50 0xc5 0x0e)) } } { ion:-0d0, expect:{ identity:(update::(0x0b) update::(0x50) update::(0x80 0x80) update::(0x0e) digest::(0x0b 0x50 0x80 0x80 0x0e)) } } { ion:-0d-0, expect:{ identity:(update::(0x0b) update::(0x50) update::(0x80 0x80) update::(0x0e) digest::(0x0b 0x50 0x80 0x80 0x0e)) } } { ion:-0d1, expect:{ identity:(update::(0x0b) update::(0x50) update::(0x81 0x80) update::(0x0e) digest::(0x0b 0x50 0x81 0x80 0x0e)) } } { ion:-0d-1, expect:{ identity:(update::(0x0b) update::(0x50) update::(0xc1 0x80) update::(0x0e) digest::(0x0b 0x50 0xc1 0x80 0x0e)) } } { ion:-0d5, expect:{ identity:(update::(0x0b) update::(0x50) update::(0x85 0x80) update::(0x0e) digest::(0x0b 0x50 0x85 0x80 0x0e)) } } { ion:-0d-5, expect:{ identity:(update::(0x0b) update::(0x50) update::(0xc5 0x80) update::(0x0e) digest::(0x0b 0x50 0xc5 0x80 0x0e)) } } { ion: 0.012345, expect:{ identity:(update::(0x0b) update::(0x50) update::(0xc6 0x30 0x39) update::(0x0e) digest::(0x0b 0x50 0xc6 0x30 0x39 0x0e)) } } { ion: 0.12345, expect:{ identity:(update::(0x0b) update::(0x50) update::(0xc5 0x30 0x39) update::(0x0e) digest::(0x0b 0x50 0xc5 0x30 0x39 0x0e)) } } { ion: 1.2345, expect:{ identity:(update::(0x0b) update::(0x50) update::(0xc4 0x30 0x39) update::(0x0e) digest::(0x0b 0x50 0xc4 0x30 0x39 0x0e)) } } { ion: 12.345, expect:{ identity:(update::(0x0b) update::(0x50) update::(0xc3 0x30 0x39) update::(0x0e) digest::(0x0b 0x50 0xc3 0x30 0x39 0x0e)) } } { ion: 123.45, expect:{ identity:(update::(0x0b) update::(0x50) update::(0xc2 0x30 0x39) update::(0x0e) digest::(0x0b 0x50 0xc2 0x30 0x39 0x0e)) } } { ion: 1234.5, expect:{ identity:(update::(0x0b) update::(0x50) update::(0xc1 0x30 0x39) update::(0x0e) digest::(0x0b 0x50 0xc1 0x30 0x39 0x0e)) } } { ion: 12345., expect:{ identity:(update::(0x0b) update::(0x50) update::(0x80 0x30 0x39) update::(0x0e) digest::(0x0b 0x50 0x80 0x30 0x39 0x0e)) } } { ion: 123450., expect:{ identity:(update::(0x0b) update::(0x50) update::(0x80 0x01 0xe2 0x3a) update::(0x0e) digest::(0x0b 0x50 0x80 0x01 0xe2 0x3a 0x0e)) } } { ion: 1234500., expect:{ identity:(update::(0x0b) update::(0x50) update::(0x80 0x12 0xd6 0x44) update::(0x0e) digest::(0x0b 0x50 0x80 0x12 0xd6 0x44 0x0e)) } } { ion: 1234.5, expect:{ identity:(update::(0x0b) update::(0x50) update::(0xc1 0x30 0x39) update::(0x0e) digest::(0x0b 0x50 0xc1 0x30 0x39 0x0e)) } } // dup { ion: 1234.50, expect:{ identity:(update::(0x0b) update::(0x50) update::(0xc2 0x01 0xe2 0x3a) update::(0x0e) digest::(0x0b 0x50 0xc2 0x01 0xe2 0x3a 0x0e)) } } { ion: 1234.500, expect:{ identity:(update::(0x0b) update::(0x50) update::(0xc3 0x12 0xd6 0x44) update::(0x0e) digest::(0x0b 0x50 0xc3 0x12 0xd6 0x44 0x0e)) } } { ion: 500d0, expect:{ identity:(update::(0x0b) update::(0x50) update::(0x80 0x01 0xf4) update::(0x0e) digest::(0x0b 0x50 0x80 0x01 0xf4 0x0e)) } } { ion: 50d1, expect:{ identity:(update::(0x0b) update::(0x50) update::(0x81 0x32) update::(0x0e) digest::(0x0b 0x50 0x81 0x32 0x0e)) } } { ion: 5d2, expect:{ identity:(update::(0x0b) update::(0x50) update::(0x82 0x05) update::(0x0e) digest::(0x0b 0x50 0x82 0x05 0x0e)) } } { ion: 5d300, expect:{ identity:(update::(0x0b) update::(0x50) update::(0x02 0xac 0x05) update::(0x0e) digest::(0x0b 0x50 0x02 0xac 0x05 0x0e)) } } { ion: 500d300, expect:{ identity:(update::(0x0b) update::(0x50) update::(0x02 0xac 0x01 0xf4) update::(0x0e) digest::(0x0b 0x50 0x02 0xac 0x01 0xf4 0x0e)) } } { ion:-500d-300, expect:{ identity:(update::(0x0b) update::(0x50) update::(0x42 0xac 0x81 0xf4) update::(0x0e) digest::(0x0b 0x50 0x42 0xac 0x81 0xf4 0x0e)) } } // /decimals // timestamps { ion:2017T, expect:{ identity:(update::(0x0b) update::(0x60) update::(0xc0 0x0f 0xe1) update::(0x0e) digest::(0x0b 0x60 0xc0 0x0f 0xe1 0x0e)) } } { ion:2017-01T, expect:{ identity:(update::(0x0b) update::(0x60) update::(0xc0 0x0f 0xe1 0x81) update::(0x0e) digest::(0x0b 0x60 0xc0 0x0f 0xe1 0x81 0x0e)) } } { ion:2017-01-01T, expect:{ identity:(update::(0x0b) update::(0x60) update::(0xc0 0x0f 0xe1 0x81 0x81) update::(0x0e) digest::(0x0b 0x60 0xc0 0x0f 0xe1 0x81 0x81 0x0e)) } } { ion:2017-01-01T00:00Z, expect:{ identity:(update::(0x0b) update::(0x60) update::(0x80 0x0f 0xe1 0x81 0x81 0x80 0x80) update::(0x0e) digest::(0x0b 0x60 0x80 0x0f 0xe1 0x81 0x81 0x80 0x80 0x0e)) } } { ion:2017-01-01T00:00:00Z, expect:{ identity:(update::(0x0b) update::(0x60) update::(0x80 0x0f 0xe1 0x81 0x81 0x80 0x80 0x80) update::(0x0e) digest::(0x0b 0x60 0x80 0x0f 0xe1 0x81 0x81 0x80 0x80 0x80 0x0e)) } } { ion:2017-01-01T00:00:00+00:00, expect:{ identity:(update::(0x0b) update::(0x60) update::(0x80 0x0f 0xe1 0x81 0x81 0x80 0x80 0x80) update::(0x0e) digest::(0x0b 0x60 0x80 0x0f 0xe1 0x81 0x81 0x80 0x80 0x80 0x0e)) } } { ion:2017-01-01T00:00:00-00:00, expect:{ identity:(update::(0x0b) update::(0x60) update::(0xc0 0x0f 0xe1 0x81 0x81 0x80 0x80 0x80) update::(0x0e) digest::(0x0b 0x60 0xc0 0x0f 0xe1 0x81 0x81 0x80 0x80 0x80 0x0e)) } } { ion:2001-02-03T04:05:06-00:00, expect:{ identity:(update::(0x0b) update::(0x60) update::(0xc0 0x0f 0xd1 0x82 0x83 0x84 0x85 0x86) update::(0x0e) digest::(0x0b 0x60 0xc0 0x0f 0xd1 0x82 0x83 0x84 0x85 0x86 0x0e)) } } { ion:2001-02-03T04:05:06-12:34, expect:{ identity:(update::(0x0b) update::(0x60) update::(0x45 0xf2 0x0f 0xd1 0x82 0x83 0x90 0xa7 0x86) update::(0x0e) digest::(0x0b 0x60 0x45 0xf2 0x0f 0xd1 0x82 0x83 0x90 0xa7 0x86 0x0e)) } } { ion:2001-02-03T04:05:06.123456789-12:34, expect:{ identity:(update::(0x0b) update::(0x60) update::(0x45 0xf2 0x0f 0xd1 0x82 0x83 0x90 0xa7 0x86 0xc9 0x07 0x5b 0xcd 0x15) update::(0x0e) digest::(0x0b 0x60 0x45 0xf2 0x0f 0xd1 0x82 0x83 0x90 0xa7 0x86 0xc9 0x07 0x5b 0xcd 0x15 0x0e)) } } // these 5 are all equivalent, so must be encoded as the same bytes: timestampNoFractionalSeconds ::{ '10n': (0x68 0x80 0x0f 0xd0 0x81 0x81 0x80 0x80 0x80), expect:{ identity:( update::(0x0b) update::(0x60) update::(0x80 0x0f 0xd0 0x81 0x81 0x80 0x80 0x80) update::(0x0e) digest::(0x0b 0x60 0x80 0x0f 0xd0 0x81 0x81 0x80 0x80 0x80 0x0e) ) } } timestampImplicitZeroCoefficient ::{ '10n': (0x69 0x80 0x0f 0xd0 0x81 0x81 0x80 0x80 0x80 0x80), expect:{ identity:( update::(0x0b) update::(0x60) update::(0x80 0x0f 0xd0 0x81 0x81 0x80 0x80 0x80) update::(0x0e) digest::(0x0b 0x60 0x80 0x0f 0xd0 0x81 0x81 0x80 0x80 0x80 0x0e) ) } } timestampExplicitZeroCoefficient ::{ '10n': (0x6a 0x80 0x0f 0xd0 0x81 0x81 0x80 0x80 0x80 0x80 0x00), expect:{ identity:( update::(0x0b) update::(0x60) update::(0x80 0x0f 0xd0 0x81 0x81 0x80 0x80 0x80) update::(0x0e) digest::(0x0b 0x60 0x80 0x0f 0xd0 0x81 0x81 0x80 0x80 0x80 0x0e) ) } } 'timestampWith0d-0FractionalSeconds'::{ '10n': (0x69 0x80 0x0f 0xd0 0x81 0x81 0x80 0x80 0x80 0xc0), expect:{ identity:( update::(0x0b) update::(0x60) update::(0x80 0x0f 0xd0 0x81 0x81 0x80 0x80 0x80) update::(0x0e) digest::(0x0b 0x60 0x80 0x0f 0xd0 0x81 0x81 0x80 0x80 0x80 0x0e) ) } } 'timestampWith0d1FractionalSeconds' ::{ '10n': (0x69 0x80 0x0f 0xd0 0x81 0x81 0x80 0x80 0x80 0x81), expect:{ identity:( update::(0x0b) update::(0x60) update::(0x80 0x0f 0xd0 0x81 0x81 0x80 0x80 0x80) update::(0x0e) digest::(0x0b 0x60 0x80 0x0f 0xd0 0x81 0x81 0x80 0x80 0x80 0x0e) ) } } timestampDistinct01::{ '10n': (0x68 0x80 0x0f 0xd0 0x81 0x81 0x80 0x80 0x80), expect:{ identity:( update::(0x0b) update::(0x60) update::(0x80 0x0f 0xd0 0x81 0x81 0x80 0x80 0x80) update::(0x0e) digest::(0x0b 0x60 0x80 0x0f 0xd0 0x81 0x81 0x80 0x80 0x80 0x0e) ) } } timestampDistinct02::{ '10n': (0x69 0x80 0x0f 0xd0 0x81 0x81 0x80 0x80 0x80 0xc1), expect:{ identity:( update::(0x0b) update::(0x60) update::(0x80 0x0f 0xd0 0x81 0x81 0x80 0x80 0x80 0xc1) update::(0x0e) digest::(0x0b 0x60 0x80 0x0f 0xd0 0x81 0x81 0x80 0x80 0x80 0xc1 0x0e) ) } } timestampDistinct03::{ '10n': (0x69 0x80 0x0f 0xd0 0x81 0x81 0x80 0x80 0x80 0xc2), expect:{ identity:( update::(0x0b) update::(0x60) update::(0x80 0x0f 0xd0 0x81 0x81 0x80 0x80 0x80 0xc2) update::(0x0e) digest::(0x0b 0x60 0x80 0x0f 0xd0 0x81 0x81 0x80 0x80 0x80 0xc2 0x0e) ) } } // /timestamps // symbols { ion:$0, expect:{ identity:(update::(0x0b) update::(0x71) update::(0x0e) digest::(0x0b 0x71 0x0e)) } } { ion:$1, expect:{ identity:(update::(0x0b) update::(0x70) update::(0x24 0x69 0x6f 0x6e) update::(0x0e) digest::(0x0b 0x70 0x24 0x69 0x6f 0x6e 0x0e)) } } // skipping $2, as it can't be processed in this manner { ion:$3, expect:{ identity:(update::(0x0b) update::(0x70) update::(0x24 0x69 0x6f 0x6e 0x5f 0x73 0x79 0x6d 0x62 0x6f 0x6c 0x5f 0x74 0x61 0x62 0x6c 0x65) update::(0x0e) digest::(0x0b 0x70 0x24 0x69 0x6f 0x6e 0x5f 0x73 0x79 0x6d 0x62 0x6f 0x6c 0x5f 0x74 0x61 0x62 0x6c 0x65 0x0e)) } } { ion:$4, expect:{ identity:(update::(0x0b) update::(0x70) update::(0x6e 0x61 0x6d 0x65) update::(0x0e) digest::(0x0b 0x70 0x6e 0x61 0x6d 0x65 0x0e)) } } { ion:$5, expect:{ identity:(update::(0x0b) update::(0x70) update::(0x76 0x65 0x72 0x73 0x69 0x6f 0x6e) update::(0x0e) digest::(0x0b 0x70 0x76 0x65 0x72 0x73 0x69 0x6f 0x6e 0x0e)) } } { ion:$6, expect:{ identity:(update::(0x0b) update::(0x70) update::(0x69 0x6d 0x70 0x6f 0x72 0x74 0x73) update::(0x0e) digest::(0x0b 0x70 0x69 0x6d 0x70 0x6f 0x72 0x74 0x73 0x0e)) } } { ion:$7, expect:{ identity:(update::(0x0b) update::(0x70) update::(0x73 0x79 0x6d 0x62 0x6f 0x6c 0x73) update::(0x0e) digest::(0x0b 0x70 0x73 0x79 0x6d 0x62 0x6f 0x6c 0x73 0x0e)) } } { ion:$8, expect:{ identity:(update::(0x0b) update::(0x70) update::(0x6d 0x61 0x78 0x5f 0x69 0x64) update::(0x0e) digest::(0x0b 0x70 0x6d 0x61 0x78 0x5f 0x69 0x64 0x0e)) } } { ion:$9, expect:{ identity:(update::(0x0b) update::(0x70) update::(0x24 0x69 0x6f 0x6e 0x5f 0x73 0x68 0x61 0x72 0x65 0x64 0x5f 0x73 0x79 0x6d 0x62 0x6f 0x6c 0x5f 0x74 0x61 0x62 0x6c 0x65) update::(0x0e) digest::(0x0b 0x70 0x24 0x69 0x6f 0x6e 0x5f 0x73 0x68 0x61 0x72 0x65 0x64 0x5f 0x73 0x79 0x6d 0x62 0x6f 0x6c 0x5f 0x74 0x61 0x62 0x6c 0x65 0x0e)) } } { ion:'', expect:{ identity:(update::(0x0b) update::(0x70) update::(0x0e) digest::(0x0b 0x70 0x0e)) } } { ion:' ', expect:{ identity:(update::(0x0b) update::(0x70) update::(0x20) update::(0x0e) digest::(0x0b 0x70 0x20 0x0e)) } } { ion:hello, expect:{ identity:(update::(0x0b) update::(0x70) update::(0x68 0x65 0x6c 0x6c 0x6f) update::(0x0e) digest::(0x0b 0x70 0x68 0x65 0x6c 0x6c 0x6f 0x0e)) } } { ion:hellohellohe, expect:{ identity:(update::(0x0b) update::(0x70) update::(0x68 0x65 0x6c 0x6c 0x6f 0x68 0x65 0x6c 0x6c 0x6f 0x68 0x65) update::(0x0e) digest::(0x0b 0x70 0x68 0x65 0x6c 0x6c 0x6f 0x68 0x65 0x6c 0x6c 0x6f 0x68 0x65 0x0e)) } } { ion:hellohellohel, expect:{ identity:(update::(0x0b) update::(0x70) update::(0x68 0x65 0x6c 0x6c 0x6f 0x68 0x65 0x6c 0x6c 0x6f 0x68 0x65 0x6c) update::(0x0e) digest::(0x0b 0x70 0x68 0x65 0x6c 0x6c 0x6f 0x68 0x65 0x6c 0x6c 0x6f 0x68 0x65 0x6c 0x0e)) } } { ion:hellohellohell, expect:{ identity:(update::(0x0b) update::(0x70) update::(0x68 0x65 0x6c 0x6c 0x6f 0x68 0x65 0x6c 0x6c 0x6f 0x68 0x65 0x6c 0x6c) update::(0x0e) digest::(0x0b 0x70 0x68 0x65 0x6c 0x6c 0x6f 0x68 0x65 0x6c 0x6c 0x6f 0x68 0x65 0x6c 0x6c 0x0e)) } } { ion:'\x0b\x0c\x0e', expect:{ identity:(update::(0x0b) // special bytes that require escaping update::(0x70) update::(0x0c 0x0b 0x0c 0x0c 0x0c 0x0e) update::(0x0e) digest::(0x0b 0x70 0x0c 0x0b 0x0c 0x0c 0x0c 0x0e 0x0e)) } } symbolLength127::{ // 126 chars + 1 for the flag ion:abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuv, expect:{ identity:( update::(0x0b) update::(0x70) update::(0x61 0x62 0x63 0x64 0x65 0x66 0x67 0x68 0x69 0x6a 0x6b 0x6c 0x6d 0x6e 0x6f 0x70 0x71 0x72 0x73 0x74 0x75 0x76 0x77 0x78 0x79 0x7a 0x61 0x62 0x63 0x64 0x65 0x66 0x67 0x68 0x69 0x6a 0x6b 0x6c 0x6d 0x6e 0x6f 0x70 0x71 0x72 0x73 0x74 0x75 0x76 0x77 0x78 0x79 0x7a 0x61 0x62 0x63 0x64 0x65 0x66 0x67 0x68 0x69 0x6a 0x6b 0x6c 0x6d 0x6e 0x6f 0x70 0x71 0x72 0x73 0x74 0x75 0x76 0x77 0x78 0x79 0x7a 0x61 0x62 0x63 0x64 0x65 0x66 0x67 0x68 0x69 0x6a 0x6b 0x6c 0x6d 0x6e 0x6f 0x70 0x71 0x72 0x73 0x74 0x75 0x76 0x77 0x78 0x79 0x7a 0x61 0x62 0x63 0x64 0x65 0x66 0x67 0x68 0x69 0x6a 0x6b 0x6c 0x6d 0x6e 0x6f 0x70 0x71 0x72 0x73 0x74 0x75 0x76) update::(0x0e) digest::(0x0b 0x70 0x61 0x62 0x63 0x64 0x65 0x66 0x67 0x68 0x69 0x6a 0x6b 0x6c 0x6d 0x6e 0x6f 0x70 0x71 0x72 0x73 0x74 0x75 0x76 0x77 0x78 0x79 0x7a 0x61 0x62 0x63 0x64 0x65 0x66 0x67 0x68 0x69 0x6a 0x6b 0x6c 0x6d 0x6e 0x6f 0x70 0x71 0x72 0x73 0x74 0x75 0x76 0x77 0x78 0x79 0x7a 0x61 0x62 0x63 0x64 0x65 0x66 0x67 0x68 0x69 0x6a 0x6b 0x6c 0x6d 0x6e 0x6f 0x70 0x71 0x72 0x73 0x74 0x75 0x76 0x77 0x78 0x79 0x7a 0x61 0x62 0x63 0x64 0x65 0x66 0x67 0x68 0x69 0x6a 0x6b 0x6c 0x6d 0x6e 0x6f 0x70 0x71 0x72 0x73 0x74 0x75 0x76 0x77 0x78 0x79 0x7a 0x61 0x62 0x63 0x64 0x65 0x66 0x67 0x68 0x69 0x6a 0x6b 0x6c 0x6d 0x6e 0x6f 0x70 0x71 0x72 0x73 0x74 0x75 0x76 0x0e) ) } } symbolLength128::{ // 127 chars + 1 for the flag ion:abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvw, expect:{ identity:( update::(0x0b) update::(0x70) update::(0x61 0x62 0x63 0x64 0x65 0x66 0x67 0x68 0x69 0x6a 0x6b 0x6c 0x6d 0x6e 0x6f 0x70 0x71 0x72 0x73 0x74 0x75 0x76 0x77 0x78 0x79 0x7a 0x61 0x62 0x63 0x64 0x65 0x66 0x67 0x68 0x69 0x6a 0x6b 0x6c 0x6d 0x6e 0x6f 0x70 0x71 0x72 0x73 0x74 0x75 0x76 0x77 0x78 0x79 0x7a 0x61 0x62 0x63 0x64 0x65 0x66 0x67 0x68 0x69 0x6a 0x6b 0x6c 0x6d 0x6e 0x6f 0x70 0x71 0x72 0x73 0x74 0x75 0x76 0x77 0x78 0x79 0x7a 0x61 0x62 0x63 0x64 0x65 0x66 0x67 0x68 0x69 0x6a 0x6b 0x6c 0x6d 0x6e 0x6f 0x70 0x71 0x72 0x73 0x74 0x75 0x76 0x77 0x78 0x79 0x7a 0x61 0x62 0x63 0x64 0x65 0x66 0x67 0x68 0x69 0x6a 0x6b 0x6c 0x6d 0x6e 0x6f 0x70 0x71 0x72 0x73 0x74 0x75 0x76 0x77) update::(0x0e) digest::(0x0b 0x70 0x61 0x62 0x63 0x64 0x65 0x66 0x67 0x68 0x69 0x6a 0x6b 0x6c 0x6d 0x6e 0x6f 0x70 0x71 0x72 0x73 0x74 0x75 0x76 0x77 0x78 0x79 0x7a 0x61 0x62 0x63 0x64 0x65 0x66 0x67 0x68 0x69 0x6a 0x6b 0x6c 0x6d 0x6e 0x6f 0x70 0x71 0x72 0x73 0x74 0x75 0x76 0x77 0x78 0x79 0x7a 0x61 0x62 0x63 0x64 0x65 0x66 0x67 0x68 0x69 0x6a 0x6b 0x6c 0x6d 0x6e 0x6f 0x70 0x71 0x72 0x73 0x74 0x75 0x76 0x77 0x78 0x79 0x7a 0x61 0x62 0x63 0x64 0x65 0x66 0x67 0x68 0x69 0x6a 0x6b 0x6c 0x6d 0x6e 0x6f 0x70 0x71 0x72 0x73 0x74 0x75 0x76 0x77 0x78 0x79 0x7a 0x61 0x62 0x63 0x64 0x65 0x66 0x67 0x68 0x69 0x6a 0x6b 0x6c 0x6d 0x6e 0x6f 0x70 0x71 0x72 0x73 0x74 0x75 0x76 0x77 0x0e) ) } } // /symbols // strings { ion:"", expect:{ identity:(update::(0x0b) update::(0x80) update::(0x0e) digest::(0x0b 0x80 0x0e)) } } { ion:"hello", expect:{ identity:(update::(0x0b) update::(0x80) update::(0x68 0x65 0x6c 0x6c 0x6f) update::(0x0e) digest::(0x0b 0x80 0x68 0x65 0x6c 0x6c 0x6f 0x0e)) } } { ion:"hellohellohel", expect:{ identity:(update::(0x0b) update::(0x80) update::(0x68 0x65 0x6c 0x6c 0x6f 0x68 0x65 0x6c 0x6c 0x6f 0x68 0x65 0x6c) update::(0x0e) digest::(0x0b 0x80 0x68 0x65 0x6c 0x6c 0x6f 0x68 0x65 0x6c 0x6c 0x6f 0x68 0x65 0x6c 0x0e)) } } { ion:"hellohellohell", expect:{ identity:(update::(0x0b) update::(0x80) update::(0x68 0x65 0x6c 0x6c 0x6f 0x68 0x65 0x6c 0x6c 0x6f 0x68 0x65 0x6c 0x6c) update::(0x0e) digest::(0x0b 0x80 0x68 0x65 0x6c 0x6c 0x6f 0x68 0x65 0x6c 0x6c 0x6f 0x68 0x65 0x6c 0x6c 0x0e)) } } stringLength127::{ ion:"abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvw", expect:{ identity:( update::(0x0b) update::(0x80) update::(0x61 0x62 0x63 0x64 0x65 0x66 0x67 0x68 0x69 0x6a 0x6b 0x6c 0x6d 0x6e 0x6f 0x70 0x71 0x72 0x73 0x74 0x75 0x76 0x77 0x78 0x79 0x7a 0x61 0x62 0x63 0x64 0x65 0x66 0x67 0x68 0x69 0x6a 0x6b 0x6c 0x6d 0x6e 0x6f 0x70 0x71 0x72 0x73 0x74 0x75 0x76 0x77 0x78 0x79 0x7a 0x61 0x62 0x63 0x64 0x65 0x66 0x67 0x68 0x69 0x6a 0x6b 0x6c 0x6d 0x6e 0x6f 0x70 0x71 0x72 0x73 0x74 0x75 0x76 0x77 0x78 0x79 0x7a 0x61 0x62 0x63 0x64 0x65 0x66 0x67 0x68 0x69 0x6a 0x6b 0x6c 0x6d 0x6e 0x6f 0x70 0x71 0x72 0x73 0x74 0x75 0x76 0x77 0x78 0x79 0x7a 0x61 0x62 0x63 0x64 0x65 0x66 0x67 0x68 0x69 0x6a 0x6b 0x6c 0x6d 0x6e 0x6f 0x70 0x71 0x72 0x73 0x74 0x75 0x76 0x77) update::(0x0e) digest::(0x0b 0x80 0x61 0x62 0x63 0x64 0x65 0x66 0x67 0x68 0x69 0x6a 0x6b 0x6c 0x6d 0x6e 0x6f 0x70 0x71 0x72 0x73 0x74 0x75 0x76 0x77 0x78 0x79 0x7a 0x61 0x62 0x63 0x64 0x65 0x66 0x67 0x68 0x69 0x6a 0x6b 0x6c 0x6d 0x6e 0x6f 0x70 0x71 0x72 0x73 0x74 0x75 0x76 0x77 0x78 0x79 0x7a 0x61 0x62 0x63 0x64 0x65 0x66 0x67 0x68 0x69 0x6a 0x6b 0x6c 0x6d 0x6e 0x6f 0x70 0x71 0x72 0x73 0x74 0x75 0x76 0x77 0x78 0x79 0x7a 0x61 0x62 0x63 0x64 0x65 0x66 0x67 0x68 0x69 0x6a 0x6b 0x6c 0x6d 0x6e 0x6f 0x70 0x71 0x72 0x73 0x74 0x75 0x76 0x77 0x78 0x79 0x7a 0x61 0x62 0x63 0x64 0x65 0x66 0x67 0x68 0x69 0x6a 0x6b 0x6c 0x6d 0x6e 0x6f 0x70 0x71 0x72 0x73 0x74 0x75 0x76 0x77 0x0e) ) } } stringLength128::{ ion:"abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwx", expect:{ identity:( update::(0x0b) update::(0x80) update::(0x61 0x62 0x63 0x64 0x65 0x66 0x67 0x68 0x69 0x6a 0x6b 0x6c 0x6d 0x6e 0x6f 0x70 0x71 0x72 0x73 0x74 0x75 0x76 0x77 0x78 0x79 0x7a 0x61 0x62 0x63 0x64 0x65 0x66 0x67 0x68 0x69 0x6a 0x6b 0x6c 0x6d 0x6e 0x6f 0x70 0x71 0x72 0x73 0x74 0x75 0x76 0x77 0x78 0x79 0x7a 0x61 0x62 0x63 0x64 0x65 0x66 0x67 0x68 0x69 0x6a 0x6b 0x6c 0x6d 0x6e 0x6f 0x70 0x71 0x72 0x73 0x74 0x75 0x76 0x77 0x78 0x79 0x7a 0x61 0x62 0x63 0x64 0x65 0x66 0x67 0x68 0x69 0x6a 0x6b 0x6c 0x6d 0x6e 0x6f 0x70 0x71 0x72 0x73 0x74 0x75 0x76 0x77 0x78 0x79 0x7a 0x61 0x62 0x63 0x64 0x65 0x66 0x67 0x68 0x69 0x6a 0x6b 0x6c 0x6d 0x6e 0x6f 0x70 0x71 0x72 0x73 0x74 0x75 0x76 0x77 0x78) update::(0x0e) digest::(0x0b 0x80 0x61 0x62 0x63 0x64 0x65 0x66 0x67 0x68 0x69 0x6a 0x6b 0x6c 0x6d 0x6e 0x6f 0x70 0x71 0x72 0x73 0x74 0x75 0x76 0x77 0x78 0x79 0x7a 0x61 0x62 0x63 0x64 0x65 0x66 0x67 0x68 0x69 0x6a 0x6b 0x6c 0x6d 0x6e 0x6f 0x70 0x71 0x72 0x73 0x74 0x75 0x76 0x77 0x78 0x79 0x7a 0x61 0x62 0x63 0x64 0x65 0x66 0x67 0x68 0x69 0x6a 0x6b 0x6c 0x6d 0x6e 0x6f 0x70 0x71 0x72 0x73 0x74 0x75 0x76 0x77 0x78 0x79 0x7a 0x61 0x62 0x63 0x64 0x65 0x66 0x67 0x68 0x69 0x6a 0x6b 0x6c 0x6d 0x6e 0x6f 0x70 0x71 0x72 0x73 0x74 0x75 0x76 0x77 0x78 0x79 0x7a 0x61 0x62 0x63 0x64 0x65 0x66 0x67 0x68 0x69 0x6a 0x6b 0x6c 0x6d 0x6e 0x6f 0x70 0x71 0x72 0x73 0x74 0x75 0x76 0x77 0x78 0x0e) ) } } // /strings { ion:{{""}}, expect:{ identity:(update::(0x0b) update::(0x90) update::(0x0e) digest::(0x0b 0x90 0x0e)) } } { ion:{{"hello"}}, expect:{ identity:(update::(0x0b) update::(0x90) update::(0x68 0x65 0x6c 0x6c 0x6f) update::(0x0e) digest::(0x0b 0x90 0x68 0x65 0x6c 0x6c 0x6f 0x0e)) } } { ion:{{"hellohellohel"}}, expect:{ identity:(update::(0x0b) update::(0x90) update::(0x68 0x65 0x6c 0x6c 0x6f 0x68 0x65 0x6c 0x6c 0x6f 0x68 0x65 0x6c) update::(0x0e) digest::(0x0b 0x90 0x68 0x65 0x6c 0x6c 0x6f 0x68 0x65 0x6c 0x6c 0x6f 0x68 0x65 0x6c 0x0e)) } } { ion:{{"hellohellohell"}}, expect:{ identity:(update::(0x0b) update::(0x90) update::(0x68 0x65 0x6c 0x6c 0x6f 0x68 0x65 0x6c 0x6c 0x6f 0x68 0x65 0x6c 0x6c) update::(0x0e) digest::(0x0b 0x90 0x68 0x65 0x6c 0x6c 0x6f 0x68 0x65 0x6c 0x6c 0x6f 0x68 0x65 0x6c 0x6c 0x0e)) } } clobLength127::{ ion:{{"abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvw"}}, expect:{ identity:( update::(0x0b) update::(0x90) update::(0x61 0x62 0x63 0x64 0x65 0x66 0x67 0x68 0x69 0x6a 0x6b 0x6c 0x6d 0x6e 0x6f 0x70 0x71 0x72 0x73 0x74 0x75 0x76 0x77 0x78 0x79 0x7a 0x61 0x62 0x63 0x64 0x65 0x66 0x67 0x68 0x69 0x6a 0x6b 0x6c 0x6d 0x6e 0x6f 0x70 0x71 0x72 0x73 0x74 0x75 0x76 0x77 0x78 0x79 0x7a 0x61 0x62 0x63 0x64 0x65 0x66 0x67 0x68 0x69 0x6a 0x6b 0x6c 0x6d 0x6e 0x6f 0x70 0x71 0x72 0x73 0x74 0x75 0x76 0x77 0x78 0x79 0x7a 0x61 0x62 0x63 0x64 0x65 0x66 0x67 0x68 0x69 0x6a 0x6b 0x6c 0x6d 0x6e 0x6f 0x70 0x71 0x72 0x73 0x74 0x75 0x76 0x77 0x78 0x79 0x7a 0x61 0x62 0x63 0x64 0x65 0x66 0x67 0x68 0x69 0x6a 0x6b 0x6c 0x6d 0x6e 0x6f 0x70 0x71 0x72 0x73 0x74 0x75 0x76 0x77) update::(0x0e) digest::(0x0b 0x90 0x61 0x62 0x63 0x64 0x65 0x66 0x67 0x68 0x69 0x6a 0x6b 0x6c 0x6d 0x6e 0x6f 0x70 0x71 0x72 0x73 0x74 0x75 0x76 0x77 0x78 0x79 0x7a 0x61 0x62 0x63 0x64 0x65 0x66 0x67 0x68 0x69 0x6a 0x6b 0x6c 0x6d 0x6e 0x6f 0x70 0x71 0x72 0x73 0x74 0x75 0x76 0x77 0x78 0x79 0x7a 0x61 0x62 0x63 0x64 0x65 0x66 0x67 0x68 0x69 0x6a 0x6b 0x6c 0x6d 0x6e 0x6f 0x70 0x71 0x72 0x73 0x74 0x75 0x76 0x77 0x78 0x79 0x7a 0x61 0x62 0x63 0x64 0x65 0x66 0x67 0x68 0x69 0x6a 0x6b 0x6c 0x6d 0x6e 0x6f 0x70 0x71 0x72 0x73 0x74 0x75 0x76 0x77 0x78 0x79 0x7a 0x61 0x62 0x63 0x64 0x65 0x66 0x67 0x68 0x69 0x6a 0x6b 0x6c 0x6d 0x6e 0x6f 0x70 0x71 0x72 0x73 0x74 0x75 0x76 0x77 0x0e) ) } } clobLength128::{ ion:{{"abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwx"}}, expect:{ identity:( update::(0x0b) update::(0x90) update::(0x61 0x62 0x63 0x64 0x65 0x66 0x67 0x68 0x69 0x6a 0x6b 0x6c 0x6d 0x6e 0x6f 0x70 0x71 0x72 0x73 0x74 0x75 0x76 0x77 0x78 0x79 0x7a 0x61 0x62 0x63 0x64 0x65 0x66 0x67 0x68 0x69 0x6a 0x6b 0x6c 0x6d 0x6e 0x6f 0x70 0x71 0x72 0x73 0x74 0x75 0x76 0x77 0x78 0x79 0x7a 0x61 0x62 0x63 0x64 0x65 0x66 0x67 0x68 0x69 0x6a 0x6b 0x6c 0x6d 0x6e 0x6f 0x70 0x71 0x72 0x73 0x74 0x75 0x76 0x77 0x78 0x79 0x7a 0x61 0x62 0x63 0x64 0x65 0x66 0x67 0x68 0x69 0x6a 0x6b 0x6c 0x6d 0x6e 0x6f 0x70 0x71 0x72 0x73 0x74 0x75 0x76 0x77 0x78 0x79 0x7a 0x61 0x62 0x63 0x64 0x65 0x66 0x67 0x68 0x69 0x6a 0x6b 0x6c 0x6d 0x6e 0x6f 0x70 0x71 0x72 0x73 0x74 0x75 0x76 0x77 0x78) update::(0x0e) digest::(0x0b 0x90 0x61 0x62 0x63 0x64 0x65 0x66 0x67 0x68 0x69 0x6a 0x6b 0x6c 0x6d 0x6e 0x6f 0x70 0x71 0x72 0x73 0x74 0x75 0x76 0x77 0x78 0x79 0x7a 0x61 0x62 0x63 0x64 0x65 0x66 0x67 0x68 0x69 0x6a 0x6b 0x6c 0x6d 0x6e 0x6f 0x70 0x71 0x72 0x73 0x74 0x75 0x76 0x77 0x78 0x79 0x7a 0x61 0x62 0x63 0x64 0x65 0x66 0x67 0x68 0x69 0x6a 0x6b 0x6c 0x6d 0x6e 0x6f 0x70 0x71 0x72 0x73 0x74 0x75 0x76 0x77 0x78 0x79 0x7a 0x61 0x62 0x63 0x64 0x65 0x66 0x67 0x68 0x69 0x6a 0x6b 0x6c 0x6d 0x6e 0x6f 0x70 0x71 0x72 0x73 0x74 0x75 0x76 0x77 0x78 0x79 0x7a 0x61 0x62 0x63 0x64 0x65 0x66 0x67 0x68 0x69 0x6a 0x6b 0x6c 0x6d 0x6e 0x6f 0x70 0x71 0x72 0x73 0x74 0x75 0x76 0x77 0x78 0x0e) ) } } // /clobs // blobs { ion:{{}}, expect:{ identity:(update::(0x0b) update::(0xa0) update::(0x0e) digest::(0x0b 0xa0 0x0e)) } } { ion:{{aGVsbG8=}}, // % echo -n "hello" | base64 expect:{ identity:(update::(0x0b) update::(0xa0) update::(0x68 0x65 0x6c 0x6c 0x6f) update::(0x0e) digest::(0x0b 0xa0 0x68 0x65 0x6c 0x6c 0x6f 0x0e) ) } } { ion:{{aGVsbG9oZWxsb2hlbA==}}, // % echo -n "hellohellohel" | base64 expect:{ identity:(update::(0x0b) update::(0xa0) update::(0x68 0x65 0x6c 0x6c 0x6f 0x68 0x65 0x6c 0x6c 0x6f 0x68 0x65 0x6c) update::(0x0e) digest::(0x0b 0xa0 0x68 0x65 0x6c 0x6c 0x6f 0x68 0x65 0x6c 0x6c 0x6f 0x68 0x65 0x6c 0x0e) ) } } { ion:{{aGVsbG9oZWxsb2hlbGw=}}, // % echo -n "hellohellohell" | base64 expect:{ identity:(update::(0x0b) update::(0xa0) update::(0x68 0x65 0x6c 0x6c 0x6f 0x68 0x65 0x6c 0x6c 0x6f 0x68 0x65 0x6c 0x6c) update::(0x0e) digest::(0x0b 0xa0 0x68 0x65 0x6c 0x6c 0x6f 0x68 0x65 0x6c 0x6c 0x6f 0x68 0x65 0x6c 0x6c 0x0e) ) } } blobLength127::{ // % echo -n "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvw" | base64 ion:{{YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5emFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXphYmNkZWZnaGlqa2xtbm9wcXJzdHV2dw==}}, expect:{ identity:( update::(0x0b) update::(0xa0) update::(0x61 0x62 0x63 0x64 0x65 0x66 0x67 0x68 0x69 0x6a 0x6b 0x6c 0x6d 0x6e 0x6f 0x70 0x71 0x72 0x73 0x74 0x75 0x76 0x77 0x78 0x79 0x7a 0x61 0x62 0x63 0x64 0x65 0x66 0x67 0x68 0x69 0x6a 0x6b 0x6c 0x6d 0x6e 0x6f 0x70 0x71 0x72 0x73 0x74 0x75 0x76 0x77 0x78 0x79 0x7a 0x61 0x62 0x63 0x64 0x65 0x66 0x67 0x68 0x69 0x6a 0x6b 0x6c 0x6d 0x6e 0x6f 0x70 0x71 0x72 0x73 0x74 0x75 0x76 0x77 0x78 0x79 0x7a 0x61 0x62 0x63 0x64 0x65 0x66 0x67 0x68 0x69 0x6a 0x6b 0x6c 0x6d 0x6e 0x6f 0x70 0x71 0x72 0x73 0x74 0x75 0x76 0x77 0x78 0x79 0x7a 0x61 0x62 0x63 0x64 0x65 0x66 0x67 0x68 0x69 0x6a 0x6b 0x6c 0x6d 0x6e 0x6f 0x70 0x71 0x72 0x73 0x74 0x75 0x76 0x77) update::(0x0e) digest::(0x0b 0xa0 0x61 0x62 0x63 0x64 0x65 0x66 0x67 0x68 0x69 0x6a 0x6b 0x6c 0x6d 0x6e 0x6f 0x70 0x71 0x72 0x73 0x74 0x75 0x76 0x77 0x78 0x79 0x7a 0x61 0x62 0x63 0x64 0x65 0x66 0x67 0x68 0x69 0x6a 0x6b 0x6c 0x6d 0x6e 0x6f 0x70 0x71 0x72 0x73 0x74 0x75 0x76 0x77 0x78 0x79 0x7a 0x61 0x62 0x63 0x64 0x65 0x66 0x67 0x68 0x69 0x6a 0x6b 0x6c 0x6d 0x6e 0x6f 0x70 0x71 0x72 0x73 0x74 0x75 0x76 0x77 0x78 0x79 0x7a 0x61 0x62 0x63 0x64 0x65 0x66 0x67 0x68 0x69 0x6a 0x6b 0x6c 0x6d 0x6e 0x6f 0x70 0x71 0x72 0x73 0x74 0x75 0x76 0x77 0x78 0x79 0x7a 0x61 0x62 0x63 0x64 0x65 0x66 0x67 0x68 0x69 0x6a 0x6b 0x6c 0x6d 0x6e 0x6f 0x70 0x71 0x72 0x73 0x74 0x75 0x76 0x77 0x0e) ) } } blobLength128::{ // % echo -n "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwx" | base64 ion:{{YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5emFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3g=}}, expect:{ identity:( update::(0x0b) update::(0xa0) update::(0x61 0x62 0x63 0x64 0x65 0x66 0x67 0x68 0x69 0x6a 0x6b 0x6c 0x6d 0x6e 0x6f 0x70 0x71 0x72 0x73 0x74 0x75 0x76 0x77 0x78 0x79 0x7a 0x61 0x62 0x63 0x64 0x65 0x66 0x67 0x68 0x69 0x6a 0x6b 0x6c 0x6d 0x6e 0x6f 0x70 0x71 0x72 0x73 0x74 0x75 0x76 0x77 0x78 0x79 0x7a 0x61 0x62 0x63 0x64 0x65 0x66 0x67 0x68 0x69 0x6a 0x6b 0x6c 0x6d 0x6e 0x6f 0x70 0x71 0x72 0x73 0x74 0x75 0x76 0x77 0x78 0x79 0x7a 0x61 0x62 0x63 0x64 0x65 0x66 0x67 0x68 0x69 0x6a 0x6b 0x6c 0x6d 0x6e 0x6f 0x70 0x71 0x72 0x73 0x74 0x75 0x76 0x77 0x78 0x79 0x7a 0x61 0x62 0x63 0x64 0x65 0x66 0x67 0x68 0x69 0x6a 0x6b 0x6c 0x6d 0x6e 0x6f 0x70 0x71 0x72 0x73 0x74 0x75 0x76 0x77 0x78) update::(0x0e) digest::(0x0b 0xa0 0x61 0x62 0x63 0x64 0x65 0x66 0x67 0x68 0x69 0x6a 0x6b 0x6c 0x6d 0x6e 0x6f 0x70 0x71 0x72 0x73 0x74 0x75 0x76 0x77 0x78 0x79 0x7a 0x61 0x62 0x63 0x64 0x65 0x66 0x67 0x68 0x69 0x6a 0x6b 0x6c 0x6d 0x6e 0x6f 0x70 0x71 0x72 0x73 0x74 0x75 0x76 0x77 0x78 0x79 0x7a 0x61 0x62 0x63 0x64 0x65 0x66 0x67 0x68 0x69 0x6a 0x6b 0x6c 0x6d 0x6e 0x6f 0x70 0x71 0x72 0x73 0x74 0x75 0x76 0x77 0x78 0x79 0x7a 0x61 0x62 0x63 0x64 0x65 0x66 0x67 0x68 0x69 0x6a 0x6b 0x6c 0x6d 0x6e 0x6f 0x70 0x71 0x72 0x73 0x74 0x75 0x76 0x77 0x78 0x79 0x7a 0x61 0x62 0x63 0x64 0x65 0x66 0x67 0x68 0x69 0x6a 0x6b 0x6c 0x6d 0x6e 0x6f 0x70 0x71 0x72 0x73 0x74 0x75 0x76 0x77 0x78 0x0e) ) } } // /blobs // lists { ion:[], expect:{ identity:(update::(0x0b) update::(0xb0) update::(0x0e) digest::(0x0b 0xb0 0x0e)) } } { ion:[1,2,3], expect:{ identity:( update::(0x0b) update::(0xb0) update::(0x0b) update::(0x20) update::(0x01) update::(0x0e) update::(0x0b) update::(0x20) update::(0x02) update::(0x0e) update::(0x0b) update::(0x20) update::(0x03) update::(0x0e) update::(0x0e) digest::(0x0b 0xb0 0x0b 0x20 0x01 0x0e 0x0b 0x20 0x02 0x0e 0x0b 0x20 0x03 0x0e 0x0e) ) } } { ion:[1,2,3,4,5,6,7,8,9,10,11,12,13], expect:{ identity:( update::(0x0b) update::(0xb0) update::(0x0b) update::(0x20) update::(0x01) update::(0x0e) update::(0x0b) update::(0x20) update::(0x02) update::(0x0e) update::(0x0b) update::(0x20) update::(0x03) update::(0x0e) update::(0x0b) update::(0x20) update::(0x04) update::(0x0e) update::(0x0b) update::(0x20) update::(0x05) update::(0x0e) update::(0x0b) update::(0x20) update::(0x06) update::(0x0e) update::(0x0b) update::(0x20) update::(0x07) update::(0x0e) update::(0x0b) update::(0x20) update::(0x08) update::(0x0e) update::(0x0b) update::(0x20) update::(0x09) update::(0x0e) update::(0x0b) update::(0x20) update::(0x0a) update::(0x0e) update::(0x0b) update::(0x20) update::(0x0c 0x0b) update::(0x0e) update::(0x0b) update::(0x20) update::(0x0c 0x0c) update::(0x0e) update::(0x0b) update::(0x20) update::(0x0d) update::(0x0e) update::(0x0e) digest::(0x0b 0xb0 0x0b 0x20 0x01 0x0e 0x0b 0x20 0x02 0x0e 0x0b 0x20 0x03 0x0e 0x0b 0x20 0x04 0x0e 0x0b 0x20 0x05 0x0e 0x0b 0x20 0x06 0x0e 0x0b 0x20 0x07 0x0e 0x0b 0x20 0x08 0x0e 0x0b 0x20 0x09 0x0e 0x0b 0x20 0x0a 0x0e 0x0b 0x20 0x0c 0x0b 0x0e 0x0b 0x20 0x0c 0x0c 0x0e 0x0b 0x20 0x0d 0x0e 0x0e) ) } } { ion:[1,2,3,4,5,6,7,8,9,10,11,12,13,14], expect:{ identity:( update::(0x0b) update::(0xb0) update::(0x0b) update::(0x20) update::(0x01) update::(0x0e) update::(0x0b) update::(0x20) update::(0x02) update::(0x0e) update::(0x0b) update::(0x20) update::(0x03) update::(0x0e) update::(0x0b) update::(0x20) update::(0x04) update::(0x0e) update::(0x0b) update::(0x20) update::(0x05) update::(0x0e) update::(0x0b) update::(0x20) update::(0x06) update::(0x0e) update::(0x0b) update::(0x20) update::(0x07) update::(0x0e) update::(0x0b) update::(0x20) update::(0x08) update::(0x0e) update::(0x0b) update::(0x20) update::(0x09) update::(0x0e) update::(0x0b) update::(0x20) update::(0x0a) update::(0x0e) update::(0x0b) update::(0x20) update::(0x0c 0x0b) update::(0x0e) update::(0x0b) update::(0x20) update::(0x0c 0x0c) update::(0x0e) update::(0x0b) update::(0x20) update::(0x0d) update::(0x0e) update::(0x0b) update::(0x20) update::(0x0c 0x0e) update::(0x0e) update::(0x0e) digest::(0x0b 0xb0 0x0b 0x20 0x01 0x0e 0x0b 0x20 0x02 0x0e 0x0b 0x20 0x03 0x0e 0x0b 0x20 0x04 0x0e 0x0b 0x20 0x05 0x0e 0x0b 0x20 0x06 0x0e 0x0b 0x20 0x07 0x0e 0x0b 0x20 0x08 0x0e 0x0b 0x20 0x09 0x0e 0x0b 0x20 0x0a 0x0e 0x0b 0x20 0x0c 0x0b 0x0e 0x0b 0x20 0x0c 0x0c 0x0e 0x0b 0x20 0x0d 0x0e 0x0b 0x20 0x0c 0x0e 0x0e 0x0e) ) } } listCount127::{ ion:[ 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30, 31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59, 60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89, 90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119, 120,121,122,123,124,125,126,127 ], expect:{ identity:( final_digest::(0x0b 0xb0 0x0b 0x20 0x01 0x0e 0x0b 0x20 0x02 0x0e 0x0b 0x20 0x03 0x0e 0x0b 0x20 0x04 0x0e 0x0b 0x20 0x05 0x0e 0x0b 0x20 0x06 0x0e 0x0b 0x20 0x07 0x0e 0x0b 0x20 0x08 0x0e 0x0b 0x20 0x09 0x0e 0x0b 0x20 0x0a 0x0e 0x0b 0x20 0x0c 0x0b 0x0e 0x0b 0x20 0x0c 0x0c 0x0e 0x0b 0x20 0x0d 0x0e 0x0b 0x20 0x0c 0x0e 0x0e 0x0b 0x20 0x0f 0x0e 0x0b 0x20 0x10 0x0e 0x0b 0x20 0x11 0x0e 0x0b 0x20 0x12 0x0e 0x0b 0x20 0x13 0x0e 0x0b 0x20 0x14 0x0e 0x0b 0x20 0x15 0x0e 0x0b 0x20 0x16 0x0e 0x0b 0x20 0x17 0x0e 0x0b 0x20 0x18 0x0e 0x0b 0x20 0x19 0x0e 0x0b 0x20 0x1a 0x0e 0x0b 0x20 0x1b 0x0e 0x0b 0x20 0x1c 0x0e 0x0b 0x20 0x1d 0x0e 0x0b 0x20 0x1e 0x0e 0x0b 0x20 0x1f 0x0e 0x0b 0x20 0x20 0x0e 0x0b 0x20 0x21 0x0e 0x0b 0x20 0x22 0x0e 0x0b 0x20 0x23 0x0e 0x0b 0x20 0x24 0x0e 0x0b 0x20 0x25 0x0e 0x0b 0x20 0x26 0x0e 0x0b 0x20 0x27 0x0e 0x0b 0x20 0x28 0x0e 0x0b 0x20 0x29 0x0e 0x0b 0x20 0x2a 0x0e 0x0b 0x20 0x2b 0x0e 0x0b 0x20 0x2c 0x0e 0x0b 0x20 0x2d 0x0e 0x0b 0x20 0x2e 0x0e 0x0b 0x20 0x2f 0x0e 0x0b 0x20 0x30 0x0e 0x0b 0x20 0x31 0x0e 0x0b 0x20 0x32 0x0e 0x0b 0x20 0x33 0x0e 0x0b 0x20 0x34 0x0e 0x0b 0x20 0x35 0x0e 0x0b 0x20 0x36 0x0e 0x0b 0x20 0x37 0x0e 0x0b 0x20 0x38 0x0e 0x0b 0x20 0x39 0x0e 0x0b 0x20 0x3a 0x0e 0x0b 0x20 0x3b 0x0e 0x0b 0x20 0x3c 0x0e 0x0b 0x20 0x3d 0x0e 0x0b 0x20 0x3e 0x0e 0x0b 0x20 0x3f 0x0e 0x0b 0x20 0x40 0x0e 0x0b 0x20 0x41 0x0e 0x0b 0x20 0x42 0x0e 0x0b 0x20 0x43 0x0e 0x0b 0x20 0x44 0x0e 0x0b 0x20 0x45 0x0e 0x0b 0x20 0x46 0x0e 0x0b 0x20 0x47 0x0e 0x0b 0x20 0x48 0x0e 0x0b 0x20 0x49 0x0e 0x0b 0x20 0x4a 0x0e 0x0b 0x20 0x4b 0x0e 0x0b 0x20 0x4c 0x0e 0x0b 0x20 0x4d 0x0e 0x0b 0x20 0x4e 0x0e 0x0b 0x20 0x4f 0x0e 0x0b 0x20 0x50 0x0e 0x0b 0x20 0x51 0x0e 0x0b 0x20 0x52 0x0e 0x0b 0x20 0x53 0x0e 0x0b 0x20 0x54 0x0e 0x0b 0x20 0x55 0x0e 0x0b 0x20 0x56 0x0e 0x0b 0x20 0x57 0x0e 0x0b 0x20 0x58 0x0e 0x0b 0x20 0x59 0x0e 0x0b 0x20 0x5a 0x0e 0x0b 0x20 0x5b 0x0e 0x0b 0x20 0x5c 0x0e 0x0b 0x20 0x5d 0x0e 0x0b 0x20 0x5e 0x0e 0x0b 0x20 0x5f 0x0e 0x0b 0x20 0x60 0x0e 0x0b 0x20 0x61 0x0e 0x0b 0x20 0x62 0x0e 0x0b 0x20 0x63 0x0e 0x0b 0x20 0x64 0x0e 0x0b 0x20 0x65 0x0e 0x0b 0x20 0x66 0x0e 0x0b 0x20 0x67 0x0e 0x0b 0x20 0x68 0x0e 0x0b 0x20 0x69 0x0e 0x0b 0x20 0x6a 0x0e 0x0b 0x20 0x6b 0x0e 0x0b 0x20 0x6c 0x0e 0x0b 0x20 0x6d 0x0e 0x0b 0x20 0x6e 0x0e 0x0b 0x20 0x6f 0x0e 0x0b 0x20 0x70 0x0e 0x0b 0x20 0x71 0x0e 0x0b 0x20 0x72 0x0e 0x0b 0x20 0x73 0x0e 0x0b 0x20 0x74 0x0e 0x0b 0x20 0x75 0x0e 0x0b 0x20 0x76 0x0e 0x0b 0x20 0x77 0x0e 0x0b 0x20 0x78 0x0e 0x0b 0x20 0x79 0x0e 0x0b 0x20 0x7a 0x0e 0x0b 0x20 0x7b 0x0e 0x0b 0x20 0x7c 0x0e 0x0b 0x20 0x7d 0x0e 0x0b 0x20 0x7e 0x0e 0x0b 0x20 0x7f 0x0e 0x0e) ) } } listCount128::{ ion:[ 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30, 31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59, 60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89, 90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119, 120,121,122,123,124,125,126,127,128 ], expect:{ identity:( final_digest::(0x0b 0xb0 0x0b 0x20 0x01 0x0e 0x0b 0x20 0x02 0x0e 0x0b 0x20 0x03 0x0e 0x0b 0x20 0x04 0x0e 0x0b 0x20 0x05 0x0e 0x0b 0x20 0x06 0x0e 0x0b 0x20 0x07 0x0e 0x0b 0x20 0x08 0x0e 0x0b 0x20 0x09 0x0e 0x0b 0x20 0x0a 0x0e 0x0b 0x20 0x0c 0x0b 0x0e 0x0b 0x20 0x0c 0x0c 0x0e 0x0b 0x20 0x0d 0x0e 0x0b 0x20 0x0c 0x0e 0x0e 0x0b 0x20 0x0f 0x0e 0x0b 0x20 0x10 0x0e 0x0b 0x20 0x11 0x0e 0x0b 0x20 0x12 0x0e 0x0b 0x20 0x13 0x0e 0x0b 0x20 0x14 0x0e 0x0b 0x20 0x15 0x0e 0x0b 0x20 0x16 0x0e 0x0b 0x20 0x17 0x0e 0x0b 0x20 0x18 0x0e 0x0b 0x20 0x19 0x0e 0x0b 0x20 0x1a 0x0e 0x0b 0x20 0x1b 0x0e 0x0b 0x20 0x1c 0x0e 0x0b 0x20 0x1d 0x0e 0x0b 0x20 0x1e 0x0e 0x0b 0x20 0x1f 0x0e 0x0b 0x20 0x20 0x0e 0x0b 0x20 0x21 0x0e 0x0b 0x20 0x22 0x0e 0x0b 0x20 0x23 0x0e 0x0b 0x20 0x24 0x0e 0x0b 0x20 0x25 0x0e 0x0b 0x20 0x26 0x0e 0x0b 0x20 0x27 0x0e 0x0b 0x20 0x28 0x0e 0x0b 0x20 0x29 0x0e 0x0b 0x20 0x2a 0x0e 0x0b 0x20 0x2b 0x0e 0x0b 0x20 0x2c 0x0e 0x0b 0x20 0x2d 0x0e 0x0b 0x20 0x2e 0x0e 0x0b 0x20 0x2f 0x0e 0x0b 0x20 0x30 0x0e 0x0b 0x20 0x31 0x0e 0x0b 0x20 0x32 0x0e 0x0b 0x20 0x33 0x0e 0x0b 0x20 0x34 0x0e 0x0b 0x20 0x35 0x0e 0x0b 0x20 0x36 0x0e 0x0b 0x20 0x37 0x0e 0x0b 0x20 0x38 0x0e 0x0b 0x20 0x39 0x0e 0x0b 0x20 0x3a 0x0e 0x0b 0x20 0x3b 0x0e 0x0b 0x20 0x3c 0x0e 0x0b 0x20 0x3d 0x0e 0x0b 0x20 0x3e 0x0e 0x0b 0x20 0x3f 0x0e 0x0b 0x20 0x40 0x0e 0x0b 0x20 0x41 0x0e 0x0b 0x20 0x42 0x0e 0x0b 0x20 0x43 0x0e 0x0b 0x20 0x44 0x0e 0x0b 0x20 0x45 0x0e 0x0b 0x20 0x46 0x0e 0x0b 0x20 0x47 0x0e 0x0b 0x20 0x48 0x0e 0x0b 0x20 0x49 0x0e 0x0b 0x20 0x4a 0x0e 0x0b 0x20 0x4b 0x0e 0x0b 0x20 0x4c 0x0e 0x0b 0x20 0x4d 0x0e 0x0b 0x20 0x4e 0x0e 0x0b 0x20 0x4f 0x0e 0x0b 0x20 0x50 0x0e 0x0b 0x20 0x51 0x0e 0x0b 0x20 0x52 0x0e 0x0b 0x20 0x53 0x0e 0x0b 0x20 0x54 0x0e 0x0b 0x20 0x55 0x0e 0x0b 0x20 0x56 0x0e 0x0b 0x20 0x57 0x0e 0x0b 0x20 0x58 0x0e 0x0b 0x20 0x59 0x0e 0x0b 0x20 0x5a 0x0e 0x0b 0x20 0x5b 0x0e 0x0b 0x20 0x5c 0x0e 0x0b 0x20 0x5d 0x0e 0x0b 0x20 0x5e 0x0e 0x0b 0x20 0x5f 0x0e 0x0b 0x20 0x60 0x0e 0x0b 0x20 0x61 0x0e 0x0b 0x20 0x62 0x0e 0x0b 0x20 0x63 0x0e 0x0b 0x20 0x64 0x0e 0x0b 0x20 0x65 0x0e 0x0b 0x20 0x66 0x0e 0x0b 0x20 0x67 0x0e 0x0b 0x20 0x68 0x0e 0x0b 0x20 0x69 0x0e 0x0b 0x20 0x6a 0x0e 0x0b 0x20 0x6b 0x0e 0x0b 0x20 0x6c 0x0e 0x0b 0x20 0x6d 0x0e 0x0b 0x20 0x6e 0x0e 0x0b 0x20 0x6f 0x0e 0x0b 0x20 0x70 0x0e 0x0b 0x20 0x71 0x0e 0x0b 0x20 0x72 0x0e 0x0b 0x20 0x73 0x0e 0x0b 0x20 0x74 0x0e 0x0b 0x20 0x75 0x0e 0x0b 0x20 0x76 0x0e 0x0b 0x20 0x77 0x0e 0x0b 0x20 0x78 0x0e 0x0b 0x20 0x79 0x0e 0x0b 0x20 0x7a 0x0e 0x0b 0x20 0x7b 0x0e 0x0b 0x20 0x7c 0x0e 0x0b 0x20 0x7d 0x0e 0x0b 0x20 0x7e 0x0e 0x0b 0x20 0x7f 0x0e 0x0b 0x20 0x80 0x0e 0x0e) ) } } { ion:[1,2,3,(4 5 6),[7,8,9]], expect:{ identity:( update::(0x0b) update::(0xb0) update::(0x0b) update::(0x20) update::(0x01) update::(0x0e) update::(0x0b) update::(0x20) update::(0x02) update::(0x0e) update::(0x0b) update::(0x20) update::(0x03) update::(0x0e) update::(0x0b) update::(0xc0) update::(0x0b) update::(0x20) update::(0x04) update::(0x0e) update::(0x0b) update::(0x20) update::(0x05) update::(0x0e) update::(0x0b) update::(0x20) update::(0x06) update::(0x0e) update::(0x0e) update::(0x0b) update::(0xb0) update::(0x0b) update::(0x20) update::(0x07) update::(0x0e) update::(0x0b) update::(0x20) update::(0x08) update::(0x0e) update::(0x0b) update::(0x20) update::(0x09) update::(0x0e) update::(0x0e) update::(0x0e) digest::(0x0b 0xb0 0x0b 0x20 0x01 0x0e 0x0b 0x20 0x02 0x0e 0x0b 0x20 0x03 0x0e 0x0b 0xc0 0x0b 0x20 0x04 0x0e 0x0b 0x20 0x05 0x0e 0x0b 0x20 0x06 0x0e 0x0e 0x0b 0xb0 0x0b 0x20 0x07 0x0e 0x0b 0x20 0x08 0x0e 0x0b 0x20 0x09 0x0e 0x0e 0x0e) ) } } // /lists // sexps { ion:(), expect:{ identity:(update::(0x0b) update::(0xc0) update::(0x0e) digest::(0x0b 0xc0 0x0e)) } } { ion:(1 2 3), expect:{ identity:( update::(0x0b) update::(0xc0) update::(0x0b) update::(0x20) update::(0x01) update::(0x0e) update::(0x0b) update::(0x20) update::(0x02) update::(0x0e) update::(0x0b) update::(0x20) update::(0x03) update::(0x0e) update::(0x0e) digest::(0x0b 0xc0 0x0b 0x20 0x01 0x0e 0x0b 0x20 0x02 0x0e 0x0b 0x20 0x03 0x0e 0x0e) ) } } { ion:(1 2 3 4 5 6 7 8 9 10 11 12 13), expect:{ identity:( update::(0x0b) update::(0xc0) update::(0x0b) update::(0x20) update::(0x01) update::(0x0e) update::(0x0b) update::(0x20) update::(0x02) update::(0x0e) update::(0x0b) update::(0x20) update::(0x03) update::(0x0e) update::(0x0b) update::(0x20) update::(0x04) update::(0x0e) update::(0x0b) update::(0x20) update::(0x05) update::(0x0e) update::(0x0b) update::(0x20) update::(0x06) update::(0x0e) update::(0x0b) update::(0x20) update::(0x07) update::(0x0e) update::(0x0b) update::(0x20) update::(0x08) update::(0x0e) update::(0x0b) update::(0x20) update::(0x09) update::(0x0e) update::(0x0b) update::(0x20) update::(0x0a) update::(0x0e) update::(0x0b) update::(0x20) update::(0x0c 0x0b) update::(0x0e) update::(0x0b) update::(0x20) update::(0x0c 0x0c) update::(0x0e) update::(0x0b) update::(0x20) update::(0x0d) update::(0x0e) update::(0x0e) digest::(0x0b 0xc0 0x0b 0x20 0x01 0x0e 0x0b 0x20 0x02 0x0e 0x0b 0x20 0x03 0x0e 0x0b 0x20 0x04 0x0e 0x0b 0x20 0x05 0x0e 0x0b 0x20 0x06 0x0e 0x0b 0x20 0x07 0x0e 0x0b 0x20 0x08 0x0e 0x0b 0x20 0x09 0x0e 0x0b 0x20 0x0a 0x0e 0x0b 0x20 0x0c 0x0b 0x0e 0x0b 0x20 0x0c 0x0c 0x0e 0x0b 0x20 0x0d 0x0e 0x0e) ) } } { ion:(1 2 3 4 5 6 7 8 9 10 11 12 13 14), expect:{ identity:( update::(0x0b) update::(0xc0) update::(0x0b) update::(0x20) update::(0x01) update::(0x0e) update::(0x0b) update::(0x20) update::(0x02) update::(0x0e) update::(0x0b) update::(0x20) update::(0x03) update::(0x0e) update::(0x0b) update::(0x20) update::(0x04) update::(0x0e) update::(0x0b) update::(0x20) update::(0x05) update::(0x0e) update::(0x0b) update::(0x20) update::(0x06) update::(0x0e) update::(0x0b) update::(0x20) update::(0x07) update::(0x0e) update::(0x0b) update::(0x20) update::(0x08) update::(0x0e) update::(0x0b) update::(0x20) update::(0x09) update::(0x0e) update::(0x0b) update::(0x20) update::(0x0a) update::(0x0e) update::(0x0b) update::(0x20) update::(0x0c 0x0b) update::(0x0e) update::(0x0b) update::(0x20) update::(0x0c 0x0c) update::(0x0e) update::(0x0b) update::(0x20) update::(0x0d) update::(0x0e) update::(0x0b) update::(0x20) update::(0x0c 0x0e) update::(0x0e) update::(0x0e) digest::(0x0b 0xc0 0x0b 0x20 0x01 0x0e 0x0b 0x20 0x02 0x0e 0x0b 0x20 0x03 0x0e 0x0b 0x20 0x04 0x0e 0x0b 0x20 0x05 0x0e 0x0b 0x20 0x06 0x0e 0x0b 0x20 0x07 0x0e 0x0b 0x20 0x08 0x0e 0x0b 0x20 0x09 0x0e 0x0b 0x20 0x0a 0x0e 0x0b 0x20 0x0c 0x0b 0x0e 0x0b 0x20 0x0c 0x0c 0x0e 0x0b 0x20 0x0d 0x0e 0x0b 0x20 0x0c 0x0e 0x0e 0x0e) ) } } sexpCount127::{ ion:( 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 ), expect:{ identity:( final_digest::(0x0b 0xc0 0x0b 0x20 0x01 0x0e 0x0b 0x20 0x02 0x0e 0x0b 0x20 0x03 0x0e 0x0b 0x20 0x04 0x0e 0x0b 0x20 0x05 0x0e 0x0b 0x20 0x06 0x0e 0x0b 0x20 0x07 0x0e 0x0b 0x20 0x08 0x0e 0x0b 0x20 0x09 0x0e 0x0b 0x20 0x0a 0x0e 0x0b 0x20 0x0c 0x0b 0x0e 0x0b 0x20 0x0c 0x0c 0x0e 0x0b 0x20 0x0d 0x0e 0x0b 0x20 0x0c 0x0e 0x0e 0x0b 0x20 0x0f 0x0e 0x0b 0x20 0x10 0x0e 0x0b 0x20 0x11 0x0e 0x0b 0x20 0x12 0x0e 0x0b 0x20 0x13 0x0e 0x0b 0x20 0x14 0x0e 0x0b 0x20 0x15 0x0e 0x0b 0x20 0x16 0x0e 0x0b 0x20 0x17 0x0e 0x0b 0x20 0x18 0x0e 0x0b 0x20 0x19 0x0e 0x0b 0x20 0x1a 0x0e 0x0b 0x20 0x1b 0x0e 0x0b 0x20 0x1c 0x0e 0x0b 0x20 0x1d 0x0e 0x0b 0x20 0x1e 0x0e 0x0b 0x20 0x1f 0x0e 0x0b 0x20 0x20 0x0e 0x0b 0x20 0x21 0x0e 0x0b 0x20 0x22 0x0e 0x0b 0x20 0x23 0x0e 0x0b 0x20 0x24 0x0e 0x0b 0x20 0x25 0x0e 0x0b 0x20 0x26 0x0e 0x0b 0x20 0x27 0x0e 0x0b 0x20 0x28 0x0e 0x0b 0x20 0x29 0x0e 0x0b 0x20 0x2a 0x0e 0x0b 0x20 0x2b 0x0e 0x0b 0x20 0x2c 0x0e 0x0b 0x20 0x2d 0x0e 0x0b 0x20 0x2e 0x0e 0x0b 0x20 0x2f 0x0e 0x0b 0x20 0x30 0x0e 0x0b 0x20 0x31 0x0e 0x0b 0x20 0x32 0x0e 0x0b 0x20 0x33 0x0e 0x0b 0x20 0x34 0x0e 0x0b 0x20 0x35 0x0e 0x0b 0x20 0x36 0x0e 0x0b 0x20 0x37 0x0e 0x0b 0x20 0x38 0x0e 0x0b 0x20 0x39 0x0e 0x0b 0x20 0x3a 0x0e 0x0b 0x20 0x3b 0x0e 0x0b 0x20 0x3c 0x0e 0x0b 0x20 0x3d 0x0e 0x0b 0x20 0x3e 0x0e 0x0b 0x20 0x3f 0x0e 0x0b 0x20 0x40 0x0e 0x0b 0x20 0x41 0x0e 0x0b 0x20 0x42 0x0e 0x0b 0x20 0x43 0x0e 0x0b 0x20 0x44 0x0e 0x0b 0x20 0x45 0x0e 0x0b 0x20 0x46 0x0e 0x0b 0x20 0x47 0x0e 0x0b 0x20 0x48 0x0e 0x0b 0x20 0x49 0x0e 0x0b 0x20 0x4a 0x0e 0x0b 0x20 0x4b 0x0e 0x0b 0x20 0x4c 0x0e 0x0b 0x20 0x4d 0x0e 0x0b 0x20 0x4e 0x0e 0x0b 0x20 0x4f 0x0e 0x0b 0x20 0x50 0x0e 0x0b 0x20 0x51 0x0e 0x0b 0x20 0x52 0x0e 0x0b 0x20 0x53 0x0e 0x0b 0x20 0x54 0x0e 0x0b 0x20 0x55 0x0e 0x0b 0x20 0x56 0x0e 0x0b 0x20 0x57 0x0e 0x0b 0x20 0x58 0x0e 0x0b 0x20 0x59 0x0e 0x0b 0x20 0x5a 0x0e 0x0b 0x20 0x5b 0x0e 0x0b 0x20 0x5c 0x0e 0x0b 0x20 0x5d 0x0e 0x0b 0x20 0x5e 0x0e 0x0b 0x20 0x5f 0x0e 0x0b 0x20 0x60 0x0e 0x0b 0x20 0x61 0x0e 0x0b 0x20 0x62 0x0e 0x0b 0x20 0x63 0x0e 0x0b 0x20 0x64 0x0e 0x0b 0x20 0x65 0x0e 0x0b 0x20 0x66 0x0e 0x0b 0x20 0x67 0x0e 0x0b 0x20 0x68 0x0e 0x0b 0x20 0x69 0x0e 0x0b 0x20 0x6a 0x0e 0x0b 0x20 0x6b 0x0e 0x0b 0x20 0x6c 0x0e 0x0b 0x20 0x6d 0x0e 0x0b 0x20 0x6e 0x0e 0x0b 0x20 0x6f 0x0e 0x0b 0x20 0x70 0x0e 0x0b 0x20 0x71 0x0e 0x0b 0x20 0x72 0x0e 0x0b 0x20 0x73 0x0e 0x0b 0x20 0x74 0x0e 0x0b 0x20 0x75 0x0e 0x0b 0x20 0x76 0x0e 0x0b 0x20 0x77 0x0e 0x0b 0x20 0x78 0x0e 0x0b 0x20 0x79 0x0e 0x0b 0x20 0x7a 0x0e 0x0b 0x20 0x7b 0x0e 0x0b 0x20 0x7c 0x0e 0x0b 0x20 0x7d 0x0e 0x0b 0x20 0x7e 0x0e 0x0b 0x20 0x7f 0x0e 0x0e) ) } } sexpCount128::{ ion:( 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 ), expect:{ identity:( final_digest::(0x0b 0xc0 0x0b 0x20 0x01 0x0e 0x0b 0x20 0x02 0x0e 0x0b 0x20 0x03 0x0e 0x0b 0x20 0x04 0x0e 0x0b 0x20 0x05 0x0e 0x0b 0x20 0x06 0x0e 0x0b 0x20 0x07 0x0e 0x0b 0x20 0x08 0x0e 0x0b 0x20 0x09 0x0e 0x0b 0x20 0x0a 0x0e 0x0b 0x20 0x0c 0x0b 0x0e 0x0b 0x20 0x0c 0x0c 0x0e 0x0b 0x20 0x0d 0x0e 0x0b 0x20 0x0c 0x0e 0x0e 0x0b 0x20 0x0f 0x0e 0x0b 0x20 0x10 0x0e 0x0b 0x20 0x11 0x0e 0x0b 0x20 0x12 0x0e 0x0b 0x20 0x13 0x0e 0x0b 0x20 0x14 0x0e 0x0b 0x20 0x15 0x0e 0x0b 0x20 0x16 0x0e 0x0b 0x20 0x17 0x0e 0x0b 0x20 0x18 0x0e 0x0b 0x20 0x19 0x0e 0x0b 0x20 0x1a 0x0e 0x0b 0x20 0x1b 0x0e 0x0b 0x20 0x1c 0x0e 0x0b 0x20 0x1d 0x0e 0x0b 0x20 0x1e 0x0e 0x0b 0x20 0x1f 0x0e 0x0b 0x20 0x20 0x0e 0x0b 0x20 0x21 0x0e 0x0b 0x20 0x22 0x0e 0x0b 0x20 0x23 0x0e 0x0b 0x20 0x24 0x0e 0x0b 0x20 0x25 0x0e 0x0b 0x20 0x26 0x0e 0x0b 0x20 0x27 0x0e 0x0b 0x20 0x28 0x0e 0x0b 0x20 0x29 0x0e 0x0b 0x20 0x2a 0x0e 0x0b 0x20 0x2b 0x0e 0x0b 0x20 0x2c 0x0e 0x0b 0x20 0x2d 0x0e 0x0b 0x20 0x2e 0x0e 0x0b 0x20 0x2f 0x0e 0x0b 0x20 0x30 0x0e 0x0b 0x20 0x31 0x0e 0x0b 0x20 0x32 0x0e 0x0b 0x20 0x33 0x0e 0x0b 0x20 0x34 0x0e 0x0b 0x20 0x35 0x0e 0x0b 0x20 0x36 0x0e 0x0b 0x20 0x37 0x0e 0x0b 0x20 0x38 0x0e 0x0b 0x20 0x39 0x0e 0x0b 0x20 0x3a 0x0e 0x0b 0x20 0x3b 0x0e 0x0b 0x20 0x3c 0x0e 0x0b 0x20 0x3d 0x0e 0x0b 0x20 0x3e 0x0e 0x0b 0x20 0x3f 0x0e 0x0b 0x20 0x40 0x0e 0x0b 0x20 0x41 0x0e 0x0b 0x20 0x42 0x0e 0x0b 0x20 0x43 0x0e 0x0b 0x20 0x44 0x0e 0x0b 0x20 0x45 0x0e 0x0b 0x20 0x46 0x0e 0x0b 0x20 0x47 0x0e 0x0b 0x20 0x48 0x0e 0x0b 0x20 0x49 0x0e 0x0b 0x20 0x4a 0x0e 0x0b 0x20 0x4b 0x0e 0x0b 0x20 0x4c 0x0e 0x0b 0x20 0x4d 0x0e 0x0b 0x20 0x4e 0x0e 0x0b 0x20 0x4f 0x0e 0x0b 0x20 0x50 0x0e 0x0b 0x20 0x51 0x0e 0x0b 0x20 0x52 0x0e 0x0b 0x20 0x53 0x0e 0x0b 0x20 0x54 0x0e 0x0b 0x20 0x55 0x0e 0x0b 0x20 0x56 0x0e 0x0b 0x20 0x57 0x0e 0x0b 0x20 0x58 0x0e 0x0b 0x20 0x59 0x0e 0x0b 0x20 0x5a 0x0e 0x0b 0x20 0x5b 0x0e 0x0b 0x20 0x5c 0x0e 0x0b 0x20 0x5d 0x0e 0x0b 0x20 0x5e 0x0e 0x0b 0x20 0x5f 0x0e 0x0b 0x20 0x60 0x0e 0x0b 0x20 0x61 0x0e 0x0b 0x20 0x62 0x0e 0x0b 0x20 0x63 0x0e 0x0b 0x20 0x64 0x0e 0x0b 0x20 0x65 0x0e 0x0b 0x20 0x66 0x0e 0x0b 0x20 0x67 0x0e 0x0b 0x20 0x68 0x0e 0x0b 0x20 0x69 0x0e 0x0b 0x20 0x6a 0x0e 0x0b 0x20 0x6b 0x0e 0x0b 0x20 0x6c 0x0e 0x0b 0x20 0x6d 0x0e 0x0b 0x20 0x6e 0x0e 0x0b 0x20 0x6f 0x0e 0x0b 0x20 0x70 0x0e 0x0b 0x20 0x71 0x0e 0x0b 0x20 0x72 0x0e 0x0b 0x20 0x73 0x0e 0x0b 0x20 0x74 0x0e 0x0b 0x20 0x75 0x0e 0x0b 0x20 0x76 0x0e 0x0b 0x20 0x77 0x0e 0x0b 0x20 0x78 0x0e 0x0b 0x20 0x79 0x0e 0x0b 0x20 0x7a 0x0e 0x0b 0x20 0x7b 0x0e 0x0b 0x20 0x7c 0x0e 0x0b 0x20 0x7d 0x0e 0x0b 0x20 0x7e 0x0e 0x0b 0x20 0x7f 0x0e 0x0b 0x20 0x80 0x0e 0x0e) ) } } { ion:(1 2 3 [4,5,6] (7 8 9)), expect:{ identity:( update::(0x0b) update::(0xc0) update::(0x0b) update::(0x20) update::(0x01) update::(0x0e) update::(0x0b) update::(0x20) update::(0x02) update::(0x0e) update::(0x0b) update::(0x20) update::(0x03) update::(0x0e) update::(0x0b) update::(0xb0) update::(0x0b) update::(0x20) update::(0x04) update::(0x0e) update::(0x0b) update::(0x20) update::(0x05) update::(0x0e) update::(0x0b) update::(0x20) update::(0x06) update::(0x0e) update::(0x0e) update::(0x0b) update::(0xc0) update::(0x0b) update::(0x20) update::(0x07) update::(0x0e) update::(0x0b) update::(0x20) update::(0x08) update::(0x0e) update::(0x0b) update::(0x20) update::(0x09) update::(0x0e) update::(0x0e) update::(0x0e) digest::(0x0b 0xc0 0x0b 0x20 0x01 0x0e 0x0b 0x20 0x02 0x0e 0x0b 0x20 0x03 0x0e 0x0b 0xb0 0x0b 0x20 0x04 0x0e 0x0b 0x20 0x05 0x0e 0x0b 0x20 0x06 0x0e 0x0e 0x0b 0xc0 0x0b 0x20 0x07 0x0e 0x0b 0x20 0x08 0x0e 0x0b 0x20 0x09 0x0e 0x0e 0x0e) ) } } // /sexps // structs { ion:{}, expect:{ identity:(update::(0x0b) update::(0xd0) update::(0x0e) digest::(0x0b 0xd0 0x0e)) } } { ion:{$0:1}, // SID0 expect:{ identity:( update::(0x0b) update::(0xd0) update::(0x0b) update::(0x71) update::(0x0e) update::(0x0b) update::(0x20) update::(0x01) update::(0x0e) digest::(0x0b 0x71 0x0e 0x0b 0x20 0x01 0x0e) update::(0x0c 0x0b 0x71 0x0c 0x0e 0x0c 0x0b 0x20 0x01 0x0c 0x0e) update::(0x0e) digest::(0x0b 0xd0 0x0c 0x0b 0x71 0x0c 0x0e 0x0c 0x0b 0x20 0x01 0x0c 0x0e 0x0e) ) } } { ion:{'':1}, // empty symbol expect:{ identity:( update::(0x0b) update::(0xd0) update::(0x0b) update::(0x70) update::(0x0e) update::(0x0b) update::(0x20) update::(0x01) update::(0x0e) digest::(0x0b 0x70 0x0e 0x0b 0x20 0x01 0x0e) update::(0x0c 0x0b 0x70 0x0c 0x0e 0x0c 0x0b 0x20 0x01 0x0c 0x0e) update::(0x0e) digest::(0x0b 0xd0 0x0c 0x0b 0x70 0x0c 0x0e 0x0c 0x0b 0x20 0x01 0x0c 0x0e 0x0e) ) } } { ion:{hellohellohel: 1}, expect:{ identity:( update::(0x0b) update::(0xd0) update::(0x0b) update::(0x70) update::(0x68 0x65 0x6c 0x6c 0x6f 0x68 0x65 0x6c 0x6c 0x6f 0x68 0x65 0x6c) update::(0x0e) update::(0x0b) update::(0x20) update::(0x01) update::(0x0e) digest::(0x0b 0x70 0x68 0x65 0x6c 0x6c 0x6f 0x68 0x65 0x6c 0x6c 0x6f 0x68 0x65 0x6c 0x0e 0x0b 0x20 0x01 0x0e) update::(0x0c 0x0b 0x70 0x68 0x65 0x6c 0x6c 0x6f 0x68 0x65 0x6c 0x6c 0x6f 0x68 0x65 0x6c 0x0c 0x0e 0x0c 0x0b 0x20 0x01 0x0c 0x0e) update::(0x0e) digest::(0x0b 0xd0 0x0c 0x0b 0x70 0x68 0x65 0x6c 0x6c 0x6f 0x68 0x65 0x6c 0x6c 0x6f 0x68 0x65 0x6c 0x0c 0x0e 0x0c 0x0b 0x20 0x01 0x0c 0x0e 0x0e) ) } } { ion:{hellohellohell: 1}, expect:{ identity:( update::(0x0b) update::(0xd0) update::(0x0b) update::(0x70) update::(0x68 0x65 0x6c 0x6c 0x6f 0x68 0x65 0x6c 0x6c 0x6f 0x68 0x65 0x6c 0x6c) update::(0x0e) update::(0x0b) update::(0x20) update::(0x01) update::(0x0e) digest::(0x0b 0x70 0x68 0x65 0x6c 0x6c 0x6f 0x68 0x65 0x6c 0x6c 0x6f 0x68 0x65 0x6c 0x6c 0x0e 0x0b 0x20 0x01 0x0e) update::(0x0c 0x0b 0x70 0x68 0x65 0x6c 0x6c 0x6f 0x68 0x65 0x6c 0x6c 0x6f 0x68 0x65 0x6c 0x6c 0x0c 0x0e 0x0c 0x0b 0x20 0x01 0x0c 0x0e) update::(0x0e) digest::(0x0b 0xd0 0x0c 0x0b 0x70 0x68 0x65 0x6c 0x6c 0x6f 0x68 0x65 0x6c 0x6c 0x6f 0x68 0x65 0x6c 0x6c 0x0c 0x0e 0x0c 0x0b 0x20 0x01 0x0c 0x0e 0x0e) ) } } { ion:{'\x0b\x0c\x0e': 1}, // special bytes that require escaping expect:{ identity:( update::(0x0b) update::(0xd0) update::(0x0b) update::(0x70) update::(0x0c 0x0b 0x0c 0x0c 0x0c 0x0e) update::(0x0e) update::(0x0b) update::(0x20) update::(0x01) update::(0x0e) digest::(0x0b 0x70 0x0c 0x0b 0x0c 0x0c 0x0c 0x0e 0x0e 0x0b 0x20 0x01 0x0e) update::(0x0c 0x0b 0x70 0x0c 0x0c 0x0c 0x0b 0x0c 0x0c 0x0c 0x0c 0x0c 0x0c 0x0c 0x0e 0x0c 0x0e 0x0c 0x0b 0x20 0x01 0x0c 0x0e) update::(0x0e) digest::(0x0b 0xd0 0x0c 0x0b 0x70 0x0c 0x0c 0x0c 0x0b 0x0c 0x0c 0x0c 0x0c 0x0c 0x0c 0x0c 0x0e 0x0c 0x0e 0x0c 0x0b 0x20 0x01 0x0c 0x0e 0x0e) ) } } { ion:{c:3, a:1, b:2}, expect:{ identity:( update::(0x0b) update::(0xd0) update::(0x0b) update::(0x70) update::(0x63) update::(0x0e) // c update::(0x0b) update::(0x20) update::(0x03) update::(0x0e) // 3 digest::(0x0b 0x70 0x63 0x0e 0x0b 0x20 0x03 0x0e) update::(0x0b) update::(0x70) update::(0x61) update::(0x0e) // a update::(0x0b) update::(0x20) update::(0x01) update::(0x0e) // 1 digest::(0x0b 0x70 0x61 0x0e 0x0b 0x20 0x01 0x0e) update::(0x0b) update::(0x70) update::(0x62) update::(0x0e) // b update::(0x0b) update::(0x20) update::(0x02) update::(0x0e) // 2 digest::(0x0b 0x70 0x62 0x0e 0x0b 0x20 0x02 0x0e) update::(0x0c 0x0b 0x70 0x61 0x0c 0x0e 0x0c 0x0b 0x20 0x01 0x0c 0x0e) // escaped and in sorted order update::(0x0c 0x0b 0x70 0x62 0x0c 0x0e 0x0c 0x0b 0x20 0x02 0x0c 0x0e) update::(0x0c 0x0b 0x70 0x63 0x0c 0x0e 0x0c 0x0b 0x20 0x03 0x0c 0x0e) update::(0x0e) digest::(0x0b 0xd0 0x0c 0x0b 0x70 0x61 0x0c 0x0e 0x0c 0x0b 0x20 0x01 0x0c 0x0e 0x0c 0x0b 0x70 0x62 0x0c 0x0e 0x0c 0x0b 0x20 0x02 0x0c 0x0e 0x0c 0x0b 0x70 0x63 0x0c 0x0e 0x0c 0x0b 0x20 0x03 0x0c 0x0e 0x0e) ) } } { ion:{a:3, a:1, a:2}, expect:{ identity:( update::(0x0b) update::(0xd0) update::(0x0b) update::(0x70) update::(0x61) update::(0x0e) // a update::(0x0b) update::(0x20) update::(0x03) update::(0x0e) // 3 digest::(0x0b 0x70 0x61 0x0e 0x0b 0x20 0x03 0x0e) update::(0x0b) update::(0x70) update::(0x61) update::(0x0e) // a update::(0x0b) update::(0x20) update::(0x01) update::(0x0e) // 1 digest::(0x0b 0x70 0x61 0x0e 0x0b 0x20 0x01 0x0e) update::(0x0b) update::(0x70) update::(0x61) update::(0x0e) // a update::(0x0b) update::(0x20) update::(0x02) update::(0x0e) // 2 digest::(0x0b 0x70 0x61 0x0e 0x0b 0x20 0x02 0x0e) update::(0x0c 0x0b 0x70 0x61 0x0c 0x0e 0x0c 0x0b 0x20 0x01 0x0c 0x0e) // escaped and in sorted order update::(0x0c 0x0b 0x70 0x61 0x0c 0x0e 0x0c 0x0b 0x20 0x02 0x0c 0x0e) update::(0x0c 0x0b 0x70 0x61 0x0c 0x0e 0x0c 0x0b 0x20 0x03 0x0c 0x0e) update::(0x0e) digest::(0x0b 0xd0 0x0c 0x0b 0x70 0x61 0x0c 0x0e 0x0c 0x0b 0x20 0x01 0x0c 0x0e 0x0c 0x0b 0x70 0x61 0x0c 0x0e 0x0c 0x0b 0x20 0x02 0x0c 0x0e 0x0c 0x0b 0x70 0x61 0x0c 0x0e 0x0c 0x0b 0x20 0x03 0x0c 0x0e 0x0e) ) } } { ion:{ // verify various types get added to a struct 'null':null, bool:false, int:5, neg_int:-6, float:4.9e-324, decimal:123.45, timestamp:2017-01-01T00:00:00-00:00, symbol:hello, string:"hello", clob:{{"hello"}}, blob:{{aGVsbG8=}}, list:[1,2,3], sexp:(1 2 3), struct:{}, annotated_value:hello::{}, }, expect:{ identity:( final_digest::( 0x0b 0xd0 0x0c 0x0b 0x70 0x61 0x6e 0x6e 0x6f 0x74 0x61 0x74 0x65 0x64 0x5f 0x76 0x61 0x6c 0x75 0x65 0x0c 0x0e 0x0c 0x0b 0xe0 0x0c 0x0b 0x70 0x68 0x65 0x6c 0x6c 0x6f 0x0c 0x0e 0x0c 0x0b 0xd0 0x0c 0x0e 0x0c 0x0e // annotated_value:hello::{} 0x0c 0x0b 0x70 0x62 0x6c 0x6f 0x62 0x0c 0x0e 0x0c 0x0b 0xa0 0x68 0x65 0x6c 0x6c 0x6f 0x0c 0x0e // blob:{{aGVsbG8=}} 0x0c 0x0b 0x70 0x62 0x6f 0x6f 0x6c 0x0c 0x0e 0x0c 0x0b 0x10 0x0c 0x0e // bool:false 0x0c 0x0b 0x70 0x63 0x6c 0x6f 0x62 0x0c 0x0e 0x0c 0x0b 0x90 0x68 0x65 0x6c 0x6c 0x6f 0x0c 0x0e // clob:{{"hello"}} 0x0c 0x0b 0x70 0x64 0x65 0x63 0x69 0x6d 0x61 0x6c 0x0c 0x0e 0x0c 0x0b 0x50 0xc2 0x30 0x39 0x0c 0x0e // decimal:123.45 0x0c 0x0b 0x70 0x66 0x6c 0x6f 0x61 0x74 0x0c 0x0e 0x0c 0x0b 0x40 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x01 0x0c 0x0e // float:4-9e-324 0x0c 0x0b 0x70 0x69 0x6e 0x74 0x0c 0x0e 0x0c 0x0b 0x20 0x05 0x0c 0x0e // int:5 0x0c 0x0b 0x70 0x6c 0x69 0x73 0x74 0x0c 0x0e 0x0c 0x0b 0xb0 0x0c 0x0b 0x20 0x01 0x0c 0x0e 0x0c 0x0b 0x20 0x02 0x0c 0x0e 0x0c 0x0b 0x20 0x03 0x0c 0x0e 0x0c 0x0e // list:[1,2,3] 0x0c 0x0b 0x70 0x6e 0x65 0x67 0x5f 0x69 0x6e 0x74 0x0c 0x0e 0x0c 0x0b 0x30 0x06 0x0c 0x0e // neg_int:-6 0x0c 0x0b 0x70 0x6e 0x75 0x6c 0x6c 0x0c 0x0e 0x0c 0x0b 0x0f 0x0c 0x0e // null:null 0x0c 0x0b 0x70 0x73 0x65 0x78 0x70 0x0c 0x0e 0x0c 0x0b 0xc0 0x0c 0x0b 0x20 0x01 0x0c 0x0e 0x0c 0x0b 0x20 0x02 0x0c 0x0e 0x0c 0x0b 0x20 0x03 0x0c 0x0e 0x0c 0x0e // sexp:[1,2,3] 0x0c 0x0b 0x70 0x73 0x74 0x72 0x69 0x6e 0x67 0x0c 0x0e 0x0c 0x0b 0x80 0x68 0x65 0x6c 0x6c 0x6f 0x0c 0x0e // string:"hello" 0x0c 0x0b 0x70 0x73 0x74 0x72 0x75 0x63 0x74 0x0c 0x0e 0x0c 0x0b 0xd0 0x0c 0x0e // struct:{} 0x0c 0x0b 0x70 0x73 0x79 0x6d 0x62 0x6f 0x6c 0x0c 0x0e 0x0c 0x0b 0x70 0x68 0x65 0x6c 0x6c 0x6f 0x0c 0x0e // symbol:hello 0x0c 0x0b 0x70 0x74 0x69 0x6d 0x65 0x73 0x74 0x61 0x6d 0x70 0x0c 0x0e 0x0c 0x0b 0x60 0xc0 0x0f 0xe1 0x81 0x81 0x80 0x80 0x80 0x0c 0x0e // timestamp:2017-01-01T00:00:00-00:00 0x0e ) ) } } { ion:{float_zero:0e0}, // verify this special value gets added to a struct expect:{ identity:( final_digest::(0x0b 0xd0 0x0c 0x0b 0x70 0x66 0x6c 0x6f 0x61 0x74 0x5f 0x7a 0x65 0x72 0x6f 0x0c 0x0e 0x0c 0x0b 0x40 0x0c 0x0e 0x0e) ) } } structCount13::{ ion:{e:5, a:1, l:12, b:2, i:9, c:3, j:10, d:4, f:6, h:8, k:11, m:13, g:7}, expect:{ identity:( final_digest::(0x0b 0xd0 0x0c 0x0b 0x70 0x61 0x0c 0x0e 0x0c 0x0b 0x20 0x01 0x0c 0x0e 0x0c 0x0b 0x70 0x62 0x0c 0x0e 0x0c 0x0b 0x20 0x02 0x0c 0x0e 0x0c 0x0b 0x70 0x63 0x0c 0x0e 0x0c 0x0b 0x20 0x03 0x0c 0x0e 0x0c 0x0b 0x70 0x64 0x0c 0x0e 0x0c 0x0b 0x20 0x04 0x0c 0x0e 0x0c 0x0b 0x70 0x65 0x0c 0x0e 0x0c 0x0b 0x20 0x05 0x0c 0x0e 0x0c 0x0b 0x70 0x66 0x0c 0x0e 0x0c 0x0b 0x20 0x06 0x0c 0x0e 0x0c 0x0b 0x70 0x67 0x0c 0x0e 0x0c 0x0b 0x20 0x07 0x0c 0x0e 0x0c 0x0b 0x70 0x68 0x0c 0x0e 0x0c 0x0b 0x20 0x08 0x0c 0x0e 0x0c 0x0b 0x70 0x69 0x0c 0x0e 0x0c 0x0b 0x20 0x09 0x0c 0x0e 0x0c 0x0b 0x70 0x6a 0x0c 0x0e 0x0c 0x0b 0x20 0x0a 0x0c 0x0e 0x0c 0x0b 0x70 0x6b 0x0c 0x0e 0x0c 0x0b 0x20 0x0c 0x0c 0x0c 0x0b 0x0c 0x0e 0x0c 0x0b 0x70 0x6c 0x0c 0x0e 0x0c 0x0b 0x20 0x0c 0x0c 0x0c 0x0c 0x0c 0x0e 0x0c 0x0b 0x70 0x6d 0x0c 0x0e 0x0c 0x0b 0x20 0x0d 0x0c 0x0e 0x0e) ) } } structCount14::{ ion:{e:5, a:1, l:12, b:2, i:9, n:14, c:3, j:10, d:4, f:6, h:8, k:11, m:13, g:7}, expect:{ identity:( final_digest::(0x0b 0xd0 0x0c 0x0b 0x70 0x61 0x0c 0x0e 0x0c 0x0b 0x20 0x01 0x0c 0x0e 0x0c 0x0b 0x70 0x62 0x0c 0x0e 0x0c 0x0b 0x20 0x02 0x0c 0x0e 0x0c 0x0b 0x70 0x63 0x0c 0x0e 0x0c 0x0b 0x20 0x03 0x0c 0x0e 0x0c 0x0b 0x70 0x64 0x0c 0x0e 0x0c 0x0b 0x20 0x04 0x0c 0x0e 0x0c 0x0b 0x70 0x65 0x0c 0x0e 0x0c 0x0b 0x20 0x05 0x0c 0x0e 0x0c 0x0b 0x70 0x66 0x0c 0x0e 0x0c 0x0b 0x20 0x06 0x0c 0x0e 0x0c 0x0b 0x70 0x67 0x0c 0x0e 0x0c 0x0b 0x20 0x07 0x0c 0x0e 0x0c 0x0b 0x70 0x68 0x0c 0x0e 0x0c 0x0b 0x20 0x08 0x0c 0x0e 0x0c 0x0b 0x70 0x69 0x0c 0x0e 0x0c 0x0b 0x20 0x09 0x0c 0x0e 0x0c 0x0b 0x70 0x6a 0x0c 0x0e 0x0c 0x0b 0x20 0x0a 0x0c 0x0e 0x0c 0x0b 0x70 0x6b 0x0c 0x0e 0x0c 0x0b 0x20 0x0c 0x0c 0x0c 0x0b 0x0c 0x0e 0x0c 0x0b 0x70 0x6c 0x0c 0x0e 0x0c 0x0b 0x20 0x0c 0x0c 0x0c 0x0c 0x0c 0x0e 0x0c 0x0b 0x70 0x6d 0x0c 0x0e 0x0c 0x0b 0x20 0x0d 0x0c 0x0e 0x0c 0x0b 0x70 0x6e 0x0c 0x0e 0x0c 0x0b 0x20 0x0c 0x0c 0x0c 0x0e 0x0c 0x0e 0x0e) ) } } { ion:{a:{b:{c:5}}}, expect:{ identity:( update::(0x0b) update::(0xd0) update::(0x0b) update::(0x70) update::(0x61) update::(0x0e) // a update::(0x0b) update::(0xd0) update::(0x0b) update::(0x70) update::(0x62) update::(0x0e) // b update::(0x0b) update::(0xd0) update::(0x0b) update::(0x70) update::(0x63) update::(0x0e) // c update::(0x0b) update::(0x20) update::(0x05) update::(0x0e) // 5 digest::(0x0b 0x70 0x63 0x0e 0x0b 0x20 0x05 0x0e) update::(0x0c 0x0b 0x70 0x63 0x0c 0x0e 0x0c 0x0b 0x20 0x05 0x0c 0x0e) // c:5 update::(0x0e) digest::(0x0b 0x70 0x62 0x0e 0x0b 0xd0 0x0c 0x0b 0x70 0x63 0x0c 0x0e 0x0c 0x0b 0x20 0x05 0x0c 0x0e 0x0e) update::(0x0c 0x0b 0x70 0x62 0x0c 0x0e 0x0c 0x0b 0xd0 0x0c 0x0c 0x0c 0x0b 0x70 0x63 0x0c 0x0c 0x0c 0x0e 0x0c 0x0c 0x0c 0x0b 0x20 0x05 0x0c 0x0c 0x0c 0x0e 0x0c 0x0e) // b:{c:5} update::(0x0e) digest::(0x0b 0x70 0x61 0x0e 0x0b 0xd0 0x0c 0x0b 0x70 0x62 0x0c 0x0e 0x0c 0x0b 0xd0 0x0c 0x0c 0x0c 0x0b 0x70 0x63 0x0c 0x0c 0x0c 0x0e 0x0c 0x0c 0x0c 0x0b 0x20 0x05 0x0c 0x0c 0x0c 0x0e 0x0c 0x0e 0x0e) update::(0x0c 0x0b 0x70 0x61 0x0c 0x0e 0x0c 0x0b 0xd0 0x0c 0x0c 0x0c 0x0b 0x70 0x62 0x0c 0x0c 0x0c 0x0e 0x0c 0x0c 0x0c 0x0b 0xd0 0x0c 0x0c 0x0c 0x0c 0x0c 0x0c 0x0c 0x0b 0x70 0x63 0x0c 0x0c 0x0c 0x0c 0x0c 0x0c 0x0c 0x0e 0x0c 0x0c 0x0c 0x0c 0x0c 0x0c 0x0c 0x0b 0x20 0x05 0x0c 0x0c 0x0c 0x0c 0x0c 0x0c 0x0c 0x0e 0x0c 0x0c 0x0c 0x0e 0x0c 0x0e) update::(0x0e) digest::(0x0b 0xd0 0x0c 0x0b 0x70 0x61 0x0c 0x0e 0x0c 0x0b 0xd0 0x0c 0x0c 0x0c 0x0b 0x70 0x62 0x0c 0x0c 0x0c 0x0e 0x0c 0x0c 0x0c 0x0b 0xd0 0x0c 0x0c 0x0c 0x0c 0x0c 0x0c 0x0c 0x0b 0x70 0x63 0x0c 0x0c 0x0c 0x0c 0x0c 0x0c 0x0c 0x0e 0x0c 0x0c 0x0c 0x0c 0x0c 0x0c 0x0c 0x0b 0x20 0x05 0x0c 0x0c 0x0c 0x0c 0x0c 0x0c 0x0c 0x0e 0x0c 0x0c 0x0c 0x0e 0x0c 0x0e 0x0e) ) } } { ion:{a:{b:{c:5},d:[1,2,3]},e:6}, expect:{ identity:( update::(0x0b) update::(0xd0) update::(0x0b) update::(0x70) update::(0x61) update::(0x0e) // a update::(0x0b) update::(0xd0) update::(0x0b) update::(0x70) update::(0x62) update::(0x0e) // b update::(0x0b) update::(0xd0) update::(0x0b) update::(0x70) update::(0x63) update::(0x0e) // c update::(0x0b) update::(0x20) update::(0x05) update::(0x0e) // 5 digest::(0x0b 0x70 0x63 0x0e 0x0b 0x20 0x05 0x0e) update::(0x0c 0x0b 0x70 0x63 0x0c 0x0e 0x0c 0x0b 0x20 0x05 0x0c 0x0e) // c:5 update::(0x0e) digest::(0x0b 0x70 0x62 0x0e 0x0b 0xd0 0x0c 0x0b 0x70 0x63 0x0c 0x0e 0x0c 0x0b 0x20 0x05 0x0c 0x0e 0x0e) update::(0x0b) update::(0x70) update::(0x64) update::(0x0e) // d update::(0x0b) update::(0xb0) update::(0x0b) update::(0x20) update::(0x01) update::(0x0e) update::(0x0b) update::(0x20) update::(0x02) update::(0x0e) update::(0x0b) update::(0x20) update::(0x03) update::(0x0e) update::(0x0e) digest::(0x0b 0x70 0x64 0x0e 0x0b 0xb0 0x0b 0x20 0x01 0x0e 0x0b 0x20 0x02 0x0e 0x0b 0x20 0x03 0x0e 0x0e) update::(0x0c 0x0b 0x70 0x62 0x0c 0x0e 0x0c 0x0b 0xd0 0x0c 0x0c 0x0c 0x0b 0x70 0x63 0x0c 0x0c 0x0c 0x0e 0x0c 0x0c 0x0c 0x0b 0x20 0x05 0x0c 0x0c 0x0c 0x0e 0x0c 0x0e) // b:{c:5} update::(0x0c 0x0b 0x70 0x64 0x0c 0x0e 0x0c 0x0b 0xb0 0x0c 0x0b 0x20 0x01 0x0c 0x0e 0x0c 0x0b 0x20 0x02 0x0c 0x0e 0x0c 0x0b 0x20 0x03 0x0c 0x0e 0x0c 0x0e) // d:[1,2,3] update::(0x0e) digest::(0x0b 0x70 0x61 0x0e 0x0b 0xd0 0x0c 0x0b 0x70 0x62 0x0c 0x0e 0x0c 0x0b 0xd0 0x0c 0x0c 0x0c 0x0b 0x70 0x63 0x0c 0x0c 0x0c 0x0e 0x0c 0x0c 0x0c 0x0b 0x20 0x05 0x0c 0x0c 0x0c 0x0e 0x0c 0x0e // b:{c:5} 0x0c 0x0b 0x70 0x64 0x0c 0x0e 0x0c 0x0b 0xb0 0x0c 0x0b 0x20 0x01 0x0c 0x0e 0x0c 0x0b 0x20 0x02 0x0c 0x0e 0x0c 0x0b 0x20 0x03 0x0c 0x0e 0x0c 0x0e // d:[1,2,3] 0x0e) update::(0x0b) update::(0x70) update::(0x65) update::(0x0e) update::(0x0b) update::(0x20) update::(0x06) update::(0x0e) digest::(0x0b 0x70 0x65 0x0e 0x0b 0x20 0x06 0x0e) // e:6 update::(0x0c 0x0b 0x70 0x61 0x0c 0x0e 0x0c 0x0b 0xd0 0x0c 0x0c 0x0c 0x0b 0x70 0x62 0x0c 0x0c 0x0c 0x0e 0x0c 0x0c 0x0c 0x0b 0xd0 0x0c 0x0c 0x0c 0x0c 0x0c 0x0c 0x0c 0x0b 0x70 0x63 0x0c 0x0c 0x0c 0x0c 0x0c 0x0c 0x0c 0x0e 0x0c 0x0c 0x0c 0x0c 0x0c 0x0c 0x0c 0x0b 0x20 0x05 0x0c 0x0c 0x0c 0x0c 0x0c 0x0c 0x0c 0x0e 0x0c 0x0c 0x0c 0x0e // b:{c:5} 0x0c 0x0c 0x0c 0x0b 0x70 0x64 0x0c 0x0c 0x0c 0x0e 0x0c 0x0c 0x0c 0x0b 0xb0 0x0c 0x0c 0x0c 0x0b 0x20 0x01 0x0c 0x0c 0x0c 0x0e 0x0c 0x0c 0x0c 0x0b 0x20 0x02 0x0c 0x0c 0x0c 0x0e 0x0c 0x0c 0x0c 0x0b 0x20 0x03 0x0c 0x0c 0x0c 0x0e 0x0c 0x0c 0x0c 0x0e // d:[1,2,3] 0x0c 0x0e) update::(0x0c 0x0b 0x70 0x65 0x0c 0x0e 0x0c 0x0b 0x20 0x06 0x0c 0x0e) // e:6 update::(0x0e) digest::(0x0b 0xd0 0x0c 0x0b 0x70 0x61 0x0c 0x0e 0x0c 0x0b 0xd0 0x0c 0x0c 0x0c 0x0b 0x70 0x62 0x0c 0x0c 0x0c 0x0e 0x0c 0x0c 0x0c 0x0b 0xd0 0x0c 0x0c 0x0c 0x0c 0x0c 0x0c 0x0c 0x0b 0x70 0x63 0x0c 0x0c 0x0c 0x0c 0x0c 0x0c 0x0c 0x0e 0x0c 0x0c 0x0c 0x0c 0x0c 0x0c 0x0c 0x0b 0x20 0x05 0x0c 0x0c 0x0c 0x0c 0x0c 0x0c 0x0c 0x0e 0x0c 0x0c 0x0c 0x0e // b:{c:5} 0x0c 0x0c 0x0c 0x0b 0x70 0x64 0x0c 0x0c 0x0c 0x0e 0x0c 0x0c 0x0c 0x0b 0xb0 0x0c 0x0c 0x0c 0x0b 0x20 0x01 0x0c 0x0c 0x0c 0x0e 0x0c 0x0c 0x0c 0x0b 0x20 0x02 0x0c 0x0c 0x0c 0x0e 0x0c 0x0c 0x0c 0x0b 0x20 0x03 0x0c 0x0c 0x0c 0x0e 0x0c 0x0c 0x0c 0x0e // d:[1,2,3] 0x0c 0x0e 0x0c 0x0b 0x70 0x65 0x0c 0x0e 0x0c 0x0b 0x20 0x06 0x0c 0x0e 0x0e) ) } } // the following test fails if digests of struct fields are escaped prior to sorting; // struct field digests must be sorted first, then escaped { ion:{Metrics:{'Event.Catchup':[{Value:0, Unit:ms}],'FanoutCache.Time':[{Value:1, Unit:ms}]}}, expect:{ md5:( update::(0x0b) update::(0xd0) update::(0x0b) update::(0x70) update::(0x4d 0x65 0x74 0x72 0x69 0x63 0x73) update::(0x0e) update::(0x0b) update::(0xd0) update::(0x0b) update::(0x70) update::(0x45 0x76 0x65 0x6e 0x74 0x2e 0x43 0x61 0x74 0x63 0x68 0x75 0x70) update::(0x0e) update::(0x0b) update::(0xb0) update::(0x0b) update::(0xd0) update::(0x0b) update::(0x70) update::(0x56 0x61 0x6c 0x75 0x65) update::(0x0e) update::(0x0b) update::(0x20) update::(0x0e) digest::(0xa1 0xe4 0x0b 0xf0 0x8d 0x3f 0x76 0x4b 0x62 0x62 0x42 0x84 0x6b 0x4d 0x59 0xe7) update::(0x0b) update::(0x70) update::(0x55 0x6e 0x69 0x74) update::(0x0e) update::(0x0b) update::(0x70) update::(0x6d 0x73) update::(0x0e) digest::(0x18 0xe8 0xa5 0x1f 0x1b 0xa7 0x41 0xab 0x84 0xbe 0x40 0xf8 0x61 0x8d 0xf1 0xbd) update::(0x18 0xe8 0xa5 0x1f 0x1b 0xa7 0x41 0xab 0x84 0xbe 0x40 0xf8 0x61 0x8d 0xf1 0xbd) update::(0xa1 0xe4 0x0c 0x0b 0xf0 0x8d 0x3f 0x76 0x4b 0x62 0x62 0x42 0x84 0x6b 0x4d 0x59 0xe7) update::(0x0e) update::(0x0e) digest::(0x0d 0xf2 0x10 0x7b 0x90 0x8b 0x6b 0xbf 0xfa 0x05 0x8d 0x82 0x41 0x69 0x5b 0x5a) update::(0x0b) update::(0x70) update::(0x46 0x61 0x6e 0x6f 0x75 0x74 0x43 0x61 0x63 0x68 0x65 0x2e 0x54 0x69 0x6d 0x65) update::(0x0e) update::(0x0b) update::(0xb0) update::(0x0b) update::(0xd0) update::(0x0b) update::(0x70) update::(0x56 0x61 0x6c 0x75 0x65) update::(0x0e) update::(0x0b) update::(0x20) update::(0x01) update::(0x0e) digest::(0x6a 0xc8 0x6b 0xad 0xe5 0xb9 0x8b 0x44 0xcc 0xa2 0x4c 0xfd 0x95 0xba 0x9e 0xfd) update::(0x0b) update::(0x70) update::(0x55 0x6e 0x69 0x74) update::(0x0e) update::(0x0b) update::(0x70) update::(0x6d 0x73) update::(0x0e) digest::(0x18 0xe8 0xa5 0x1f 0x1b 0xa7 0x41 0xab 0x84 0xbe 0x40 0xf8 0x61 0x8d 0xf1 0xbd) update::(0x18 0xe8 0xa5 0x1f 0x1b 0xa7 0x41 0xab 0x84 0xbe 0x40 0xf8 0x61 0x8d 0xf1 0xbd) update::(0x6a 0xc8 0x6b 0xad 0xe5 0xb9 0x8b 0x44 0xcc 0xa2 0x4c 0xfd 0x95 0xba 0x9e 0xfd) update::(0x0e) update::(0x0e) digest::(0x0e 0x5e 0x6d 0xbf 0x2b 0x48 0xd8 0xb9 0xba 0xea 0xcd 0x0f 0xd4 0x30 0x51 0xd5) // the following two updates are correctly sorted pre-escaping, but the updates occur post-escaping: // (note that 0x0c at the beginning of the second update is an escape byte) update::(0x0d 0xf2 0x10 0x7b 0x90 0x8b 0x6b 0xbf 0xfa 0x05 0x8d 0x82 0x41 0x69 0x5b 0x5a) update::(0x0c 0x0e 0x5e 0x6d 0xbf 0x2b 0x48 0xd8 0xb9 0xba 0xea 0xcd 0x0f 0xd4 0x30 0x51 0xd5) update::(0x0e) digest::(0xf9 0x3f 0x7d 0x62 0xbf 0x16 0x55 0xf2 0xe9 0xbc 0x9d 0xd5 0xb2 0x84 0x0b 0xed) update::(0xf9 0x3f 0x7d 0x62 0xbf 0x16 0x55 0xf2 0xe9 0xbc 0x9d 0xd5 0xb2 0x84 0x0c 0x0b 0xed) update::(0x0e) digest::(0x68 0x4e 0x44 0x28 0xce 0xbb 0xb8 0xb1 0x64 0xd2 0x2b 0xa2 0xb1 0x3b 0x4b 0x11) ) } } // /structs // annotations { ion:hello::null, expect:{ identity:( update::(0x0b) update::(0xe0) update::(0x0b) update::(0x70) update::(0x68 0x65 0x6c 0x6c 0x6f) update::(0x0e) update::(0x0b) update::(0x0f) update::(0x0e) update::(0x0e) digest::(0x0b 0xe0 0x0b 0x70 0x68 0x65 0x6c 0x6c 0x6f 0x0e 0x0b 0x0f 0x0e 0x0e) ) } } { ion:hello::7, expect:{ identity:( update::(0x0b) update::(0xe0) update::(0x0b) update::(0x70) update::(0x68 0x65 0x6c 0x6c 0x6f) update::(0x0e) update::(0x0b) update::(0x20) update::(0x07) update::(0x0e) update::(0x0e) digest::(0x0b 0xe0 0x0b 0x70 0x68 0x65 0x6c 0x6c 0x6f 0x0e 0x0b 0x20 0x07 0x0e 0x0e) ) } } { ion:hello::[], expect:{ identity:( update::(0x0b) update::(0xe0) update::(0x0b) update::(0x70) update::(0x68 0x65 0x6c 0x6c 0x6f) update::(0x0e) update::(0x0b) update::(0xb0) update::(0x0e) update::(0x0e) digest::(0x0b 0xe0 0x0b 0x70 0x68 0x65 0x6c 0x6c 0x6f 0x0e 0x0b 0xb0 0x0e 0x0e) ) } } { ion:hello::(), expect:{ identity:( update::(0x0b) update::(0xe0) update::(0x0b) update::(0x70) update::(0x68 0x65 0x6c 0x6c 0x6f) update::(0x0e) update::(0x0b) update::(0xc0) update::(0x0e) update::(0x0e) digest::(0x0b 0xe0 0x0b 0x70 0x68 0x65 0x6c 0x6c 0x6f 0x0e 0x0b 0xc0 0x0e 0x0e) ) } } { ion:hello::{}, expect:{ identity:( update::(0x0b) update::(0xe0) update::(0x0b) update::(0x70) update::(0x68 0x65 0x6c 0x6c 0x6f) update::(0x0e) update::(0x0b) update::(0xd0) update::(0x0e) update::(0x0e) digest::(0x0b 0xe0 0x0b 0x70 0x68 0x65 0x6c 0x6c 0x6f 0x0e 0x0b 0xd0 0x0e 0x0e) ) } } { ion:hellohellohel::null, expect:{ identity:( update::(0x0b) update::(0xe0) update::(0x0b) update::(0x70) update::(0x68 0x65 0x6c 0x6c 0x6f 0x68 0x65 0x6c 0x6c 0x6f 0x68 0x65 0x6c) update::(0x0e) update::(0x0b) update::(0x0f) update::(0x0e) update::(0x0e) digest::(0x0b 0xe0 0x0b 0x70 0x68 0x65 0x6c 0x6c 0x6f 0x68 0x65 0x6c 0x6c 0x6f 0x68 0x65 0x6c 0x0e 0x0b 0x0f 0x0e 0x0e) ) } } { ion:hellohellohell::null, expect:{ identity:( update::(0x0b) update::(0xe0) update::(0x0b) update::(0x70) update::(0x68 0x65 0x6c 0x6c 0x6f 0x68 0x65 0x6c 0x6c 0x6f 0x68 0x65 0x6c 0x6c) update::(0x0e) update::(0x0b) update::(0x0f) update::(0x0e) update::(0x0e) digest::(0x0b 0xe0 0x0b 0x70 0x68 0x65 0x6c 0x6c 0x6f 0x68 0x65 0x6c 0x6c 0x6f 0x68 0x65 0x6c 0x6c 0x0e 0x0b 0x0f 0x0e 0x0e) ) } } { ion:$0::{}, // SID0 expect:{ identity:( update::(0x0b) update::(0xe0) update::(0x0b) update::(0x71) update::(0x0e) update::(0x0b) update::(0xd0) update::(0x0e) update::(0x0e) digest::(0x0b 0xe0 0x0b 0x71 0x0e 0x0b 0xd0 0x0e 0x0e) ) } } { ion:''::{}, // empty symbol expect:{ identity:( update::(0x0b) update::(0xe0) update::(0x0b) update::(0x70) update::(0x0e) update::(0x0b) update::(0xd0) update::(0x0e) update::(0x0e) digest::(0x0b 0xe0 0x0b 0x70 0x0e 0x0b 0xd0 0x0e 0x0e) ) } } { ion:'\x0b\x0c\x0e'::{}, // special bytes that require escaping expect:{ identity:( update::(0x0b) update::(0xe0) update::(0x0b) update::(0x70) update::(0x0c 0x0b 0x0c 0x0c 0x0c 0x0e) update::(0x0e) update::(0x0b) update::(0xd0) update::(0x0e) update::(0x0e) digest::(0x0b 0xe0 0x0b 0x70 0x0c 0x0b 0x0c 0x0c 0x0c 0x0e 0x0e 0x0b 0xd0 0x0e 0x0e) ) } } { ion:a::b::c::null.int, expect:{ identity:( update::(0x0b) update::(0xe0) update::(0x0b) update::(0x70) update::(0x61) update::(0x0e) update::(0x0b) update::(0x70) update::(0x62) update::(0x0e) update::(0x0b) update::(0x70) update::(0x63) update::(0x0e) update::(0x0b) update::(0x2f) update::(0x0e) update::(0x0e) digest::(0x0b 0xe0 0x0b 0x70 0x61 0x0e 0x0b 0x70 0x62 0x0e 0x0b 0x70 0x63 0x0e 0x0b 0x2f 0x0e 0x0e ) ) } } annotationLength127::{ // 126 chars + 1 for the flag ion:abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuv::null, expect:{ identity:( final_digest::(0x0b 0xe0 0x0b 0x70 0x61 0x62 0x63 0x64 0x65 0x66 0x67 0x68 0x69 0x6a 0x6b 0x6c 0x6d 0x6e 0x6f 0x70 0x71 0x72 0x73 0x74 0x75 0x76 0x77 0x78 0x79 0x7a 0x61 0x62 0x63 0x64 0x65 0x66 0x67 0x68 0x69 0x6a 0x6b 0x6c 0x6d 0x6e 0x6f 0x70 0x71 0x72 0x73 0x74 0x75 0x76 0x77 0x78 0x79 0x7a 0x61 0x62 0x63 0x64 0x65 0x66 0x67 0x68 0x69 0x6a 0x6b 0x6c 0x6d 0x6e 0x6f 0x70 0x71 0x72 0x73 0x74 0x75 0x76 0x77 0x78 0x79 0x7a 0x61 0x62 0x63 0x64 0x65 0x66 0x67 0x68 0x69 0x6a 0x6b 0x6c 0x6d 0x6e 0x6f 0x70 0x71 0x72 0x73 0x74 0x75 0x76 0x77 0x78 0x79 0x7a 0x61 0x62 0x63 0x64 0x65 0x66 0x67 0x68 0x69 0x6a 0x6b 0x6c 0x6d 0x6e 0x6f 0x70 0x71 0x72 0x73 0x74 0x75 0x76 0x0e 0x0b 0x0f 0x0e 0x0e) ) } } annotationLength128::{ // 127 chars + 1 for the flag ion:abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvw::null, expect:{ identity:( final_digest::(0x0b 0xe0 0x0b 0x70 0x61 0x62 0x63 0x64 0x65 0x66 0x67 0x68 0x69 0x6a 0x6b 0x6c 0x6d 0x6e 0x6f 0x70 0x71 0x72 0x73 0x74 0x75 0x76 0x77 0x78 0x79 0x7a 0x61 0x62 0x63 0x64 0x65 0x66 0x67 0x68 0x69 0x6a 0x6b 0x6c 0x6d 0x6e 0x6f 0x70 0x71 0x72 0x73 0x74 0x75 0x76 0x77 0x78 0x79 0x7a 0x61 0x62 0x63 0x64 0x65 0x66 0x67 0x68 0x69 0x6a 0x6b 0x6c 0x6d 0x6e 0x6f 0x70 0x71 0x72 0x73 0x74 0x75 0x76 0x77 0x78 0x79 0x7a 0x61 0x62 0x63 0x64 0x65 0x66 0x67 0x68 0x69 0x6a 0x6b 0x6c 0x6d 0x6e 0x6f 0x70 0x71 0x72 0x73 0x74 0x75 0x76 0x77 0x78 0x79 0x7a 0x61 0x62 0x63 0x64 0x65 0x66 0x67 0x68 0x69 0x6a 0x6b 0x6c 0x6d 0x6e 0x6f 0x70 0x71 0x72 0x73 0x74 0x75 0x76 0x77 0x0e 0x0b 0x0f 0x0e 0x0e) ) } } annotationCount13::{ ion:a::b::c::d::e::f::g::h::i::j::k::l::m::null, expect:{ identity:( update::(0x0b) update::(0xe0) update::(0x0b) update::(0x70) update::(0x61) update::(0x0e) update::(0x0b) update::(0x70) update::(0x62) update::(0x0e) update::(0x0b) update::(0x70) update::(0x63) update::(0x0e) update::(0x0b) update::(0x70) update::(0x64) update::(0x0e) update::(0x0b) update::(0x70) update::(0x65) update::(0x0e) update::(0x0b) update::(0x70) update::(0x66) update::(0x0e) update::(0x0b) update::(0x70) update::(0x67) update::(0x0e) update::(0x0b) update::(0x70) update::(0x68) update::(0x0e) update::(0x0b) update::(0x70) update::(0x69) update::(0x0e) update::(0x0b) update::(0x70) update::(0x6a) update::(0x0e) update::(0x0b) update::(0x70) update::(0x6b) update::(0x0e) update::(0x0b) update::(0x70) update::(0x6c) update::(0x0e) update::(0x0b) update::(0x70) update::(0x6d) update::(0x0e) update::(0x0b) update::(0x0f) update::(0x0e) update::(0x0e) digest::(0x0b 0xe0 0x0b 0x70 0x61 0x0e 0x0b 0x70 0x62 0x0e 0x0b 0x70 0x63 0x0e 0x0b 0x70 0x64 0x0e 0x0b 0x70 0x65 0x0e 0x0b 0x70 0x66 0x0e 0x0b 0x70 0x67 0x0e 0x0b 0x70 0x68 0x0e 0x0b 0x70 0x69 0x0e 0x0b 0x70 0x6a 0x0e 0x0b 0x70 0x6b 0x0e 0x0b 0x70 0x6c 0x0e 0x0b 0x70 0x6d 0x0e 0x0b 0x0f 0x0e 0x0e) ) } } annotationCount14::{ ion:a::b::c::d::e::f::g::h::i::j::k::l::m::n::null, expect:{ identity:( update::(0x0b) update::(0xe0) update::(0x0b) update::(0x70) update::(0x61) update::(0x0e) update::(0x0b) update::(0x70) update::(0x62) update::(0x0e) update::(0x0b) update::(0x70) update::(0x63) update::(0x0e) update::(0x0b) update::(0x70) update::(0x64) update::(0x0e) update::(0x0b) update::(0x70) update::(0x65) update::(0x0e) update::(0x0b) update::(0x70) update::(0x66) update::(0x0e) update::(0x0b) update::(0x70) update::(0x67) update::(0x0e) update::(0x0b) update::(0x70) update::(0x68) update::(0x0e) update::(0x0b) update::(0x70) update::(0x69) update::(0x0e) update::(0x0b) update::(0x70) update::(0x6a) update::(0x0e) update::(0x0b) update::(0x70) update::(0x6b) update::(0x0e) update::(0x0b) update::(0x70) update::(0x6c) update::(0x0e) update::(0x0b) update::(0x70) update::(0x6d) update::(0x0e) update::(0x0b) update::(0x70) update::(0x6e) update::(0x0e) update::(0x0b) update::(0x0f) update::(0x0e) update::(0x0e) digest::(0x0b 0xe0 0x0b 0x70 0x61 0x0e 0x0b 0x70 0x62 0x0e 0x0b 0x70 0x63 0x0e 0x0b 0x70 0x64 0x0e 0x0b 0x70 0x65 0x0e 0x0b 0x70 0x66 0x0e 0x0b 0x70 0x67 0x0e 0x0b 0x70 0x68 0x0e 0x0b 0x70 0x69 0x0e 0x0b 0x70 0x6a 0x0e 0x0b 0x70 0x6b 0x0e 0x0b 0x70 0x6c 0x0e 0x0b 0x70 0x6d 0x0e 0x0b 0x70 0x6e 0x0e 0x0b 0x0f 0x0e 0x0e) ) } } { ion:{a:z::5}, expect:{ identity:( update::(0x0b) update::(0xd0) update::(0x0b) update::(0x70) update::(0x61) update::(0x0e) // a update::(0x0b) update::(0xe0) update::(0x0b) update::(0x70) update::(0x7a) update::(0x0e) // z update::(0x0b) update::(0x20) update::(0x05) update::(0x0e) // 5 update::(0x0e) // z::5 digest::(0x0b 0x70 0x61 0x0e 0x0b 0xe0 0x0b 0x70 0x7a 0x0e 0x0b 0x20 0x05 0x0e 0x0e) // a:z::5 update::(0x0c 0x0b 0x70 0x61 0x0c 0x0e 0x0c 0x0b 0xe0 0x0c 0x0b 0x70 0x7a 0x0c 0x0e 0x0c 0x0b 0x20 0x05 0x0c 0x0e 0x0c 0x0e) update::(0x0e) digest::(0x0b 0xd0 0x0c 0x0b 0x70 0x61 0x0c 0x0e 0x0c 0x0b 0xe0 0x0c 0x0b 0x70 0x7a 0x0c 0x0e 0x0c 0x0b 0x20 0x05 0x0c 0x0e 0x0c 0x0e 0x0e) ) } } { ion:z::[1,y::2,x::{a:w::3,b:v::(s::t::u::4)},r::5], expect:{ identity:( update::(0x0b) update::(0xe0) update::(0x0b) update::(0x70) update::(0x7a) update::(0x0e) // z update::(0x0b) update::(0xb0) // [ update::(0x0b) update::(0x20) update::(0x01) update::(0x0e) // 1 update::(0x0b) update::(0xe0) update::(0x0b) update::(0x70) update::(0x79) update::(0x0e) update::(0x0b) update::(0x20) update::(0x02) update::(0x0e) update::(0x0e) // y::2 update::(0x0b) update::(0xe0) update::(0x0b) update::(0x70) update::(0x78) update::(0x0e) // x update::(0x0b) update::(0xd0) // { update::(0x0b) update::(0x70) update::(0x61) update::(0x0e) update::(0x0b) update::(0xe0) update::(0x0b) update::(0x70) update::(0x77) update::(0x0e) update::(0x0b) update::(0x20) update::(0x03) update::(0x0e) update::(0x0e) digest::(0x0b 0x70 0x61 0x0e 0x0b 0xe0 0x0b 0x70 0x77 0x0e 0x0b 0x20 0x03 0x0e 0x0e) // a:w::3 update::(0x0b) update::(0x70) update::(0x62) update::(0x0e) // b update::(0x0b) update::(0xe0) update::(0x0b) update::(0x70) update::(0x76) update::(0x0e) // v update::(0x0b) update::(0xc0) // ( update::(0x0b) update::(0xe0) update::(0x0b) update::(0x70) update::(0x73) update::(0x0e) // s update::(0x0b) update::(0x70) update::(0x74) update::(0x0e) // t update::(0x0b) update::(0x70) update::(0x75) update::(0x0e) // u update::(0x0b) update::(0x20) update::(0x04) update::(0x0e) // 4 update::(0x0e) update::(0x0e) update::(0x0e) digest::(0x0b 0x70 0x62 0x0e 0x0b 0xe0 0x0b 0x70 0x76 0x0e 0x0b 0xc0 0x0b 0xe0 0x0b 0x70 0x73 0x0e 0x0b 0x70 0x74 0x0e 0x0b 0x70 0x75 0x0e 0x0b 0x20 0x04 0x0e 0x0e 0x0e 0x0e) // b:v::(s::t::u::4) update::(0x0c 0x0b 0x70 0x61 0x0c 0x0e 0x0c 0x0b 0xe0 0x0c 0x0b 0x70 0x77 0x0c 0x0e 0x0c 0x0b 0x20 0x03 0x0c 0x0e 0x0c 0x0e) // a:w::3 update::(0x0c 0x0b 0x70 0x62 0x0c 0x0e 0x0c 0x0b 0xe0 0x0c 0x0b 0x70 0x76 0x0c 0x0e 0x0c 0x0b 0xc0 0x0c 0x0b 0xe0 0x0c 0x0b 0x70 0x73 0x0c 0x0e 0x0c 0x0b 0x70 0x74 0x0c 0x0e 0x0c 0x0b 0x70 0x75 0x0c 0x0e 0x0c 0x0b 0x20 0x04 0x0c 0x0e 0x0c 0x0e 0x0c 0x0e 0x0c 0x0e) // b:v::(s::t::u::4) update::(0x0e) update::(0x0e) // x::{a:w::3,b:v::(s::t::u::4)} update::(0x0b) update::(0xe0) update::(0x0b) update::(0x70) update::(0x72) update::(0x0e) update::(0x0b) update::(0x20) update::(0x05) update::(0x0e) update::(0x0e) // r::5 update::(0x0e) // [1,y::2,x::{a:w::3,b:v::(s::t::u::4)},r::5] update::(0x0e) // z::[1,y::2,x::{a:w::3,b:v::(s::t::u::4)},r::5] digest::(0x0b 0xe0 0x0b 0x70 0x7a 0x0e 0x0b 0xb0 0x0b 0x20 0x01 0x0e 0x0b 0xe0 0x0b 0x70 0x79 0x0e 0x0b 0x20 0x02 0x0e 0x0e 0x0b 0xe0 0x0b 0x70 0x78 0x0e 0x0b 0xd0 0x0c 0x0b 0x70 0x61 0x0c 0x0e 0x0c 0x0b 0xe0 0x0c 0x0b 0x70 0x77 0x0c 0x0e 0x0c 0x0b 0x20 0x03 0x0c 0x0e 0x0c 0x0e 0x0c 0x0b 0x70 0x62 0x0c 0x0e 0x0c 0x0b 0xe0 0x0c 0x0b 0x70 0x76 0x0c 0x0e 0x0c 0x0b 0xc0 0x0c 0x0b 0xe0 0x0c 0x0b 0x70 0x73 0x0c 0x0e 0x0c 0x0b 0x70 0x74 0x0c 0x0e 0x0c 0x0b 0x70 0x75 0x0c 0x0e 0x0c 0x0b 0x20 0x04 0x0c 0x0e 0x0c 0x0e 0x0c 0x0e 0x0c 0x0e 0x0e 0x0e 0x0b 0xe0 0x0b 0x70 0x72 0x0e 0x0b 0x20 0x05 0x0e 0x0e 0x0e 0x0e) ) } } // /annotations // MD5 tests { ion:( null true 1 -1 1e0 1d0 2017-01-01T00:00:00-00:00 hello "hello" {{"hello"}} {{aGVsbG8=}} [1,2,3] (1 2 3) { c:3, a:1, b:2 } hello::null ), expect:{ identity:( update::(0x0b) update::(0xc0) // ( update::(0x0b) update::(0x0f) update::(0x0e) // null update::(0x0b) update::(0x11) update::(0x0e) // true update::(0x0b) update::(0x20) update::(0x01) update::(0x0e) // 1 update::(0x0b) update::(0x30) update::(0x01) update::(0x0e) // -1 update::(0x0b) update::(0x40) update::(0x3f 0xf0 0x00 0x00 0x00 0x00 0x00 0x00) update::(0x0e) // 1e0 update::(0x0b) update::(0x50) update::(0x80 0x01) update::(0x0e) // 1d0 update::(0x0b) update::(0x60) update::(0xc0 0x0f 0xe1 0x81 0x81 0x80 0x80 0x80) update::(0x0e) // 2017-01-01T00:00:00-00:00 update::(0x0b) update::(0x70) update::(0x68 0x65 0x6c 0x6c 0x6f) update::(0x0e) // hello update::(0x0b) update::(0x80) update::(0x68 0x65 0x6c 0x6c 0x6f) update::(0x0e) // "hello" update::(0x0b) update::(0x90) update::(0x68 0x65 0x6c 0x6c 0x6f) update::(0x0e) // {{"hello"}} update::(0x0b) update::(0xa0) update::(0x68 0x65 0x6c 0x6c 0x6f) update::(0x0e) // {{aGVsbG8=}} update::(0x0b) update::(0xb0) update::(0x0b) update::(0x20) update::(0x01) update::(0x0e) update::(0x0b) update::(0x20) update::(0x02) update::(0x0e) update::(0x0b) update::(0x20) update::(0x03) update::(0x0e) update::(0x0e) // [1,2,3] update::(0x0b) update::(0xc0) update::(0x0b) update::(0x20) update::(0x01) update::(0x0e) update::(0x0b) update::(0x20) update::(0x02) update::(0x0e) update::(0x0b) update::(0x20) update::(0x03) update::(0x0e) update::(0x0e) // (1,2,3) update::(0x0b) update::(0xd0) // { update::(0x0b) update::(0x70) update::(0x63) update::(0x0e) update::(0x0b) update::(0x20) update::(0x03) update::(0x0e) digest::(0x0b 0x70 0x63 0x0e 0x0b 0x20 0x03 0x0e) // c:3 update::(0x0b) update::(0x70) update::(0x61) update::(0x0e) update::(0x0b) update::(0x20) update::(0x01) update::(0x0e) digest::(0x0b 0x70 0x61 0x0e 0x0b 0x20 0x01 0x0e) // a:1 update::(0x0b) update::(0x70) update::(0x62) update::(0x0e) update::(0x0b) update::(0x20) update::(0x02) update::(0x0e) digest::(0x0b 0x70 0x62 0x0e 0x0b 0x20 0x02 0x0e) // b:2 update::(0x0c 0x0b 0x70 0x61 0x0c 0x0e 0x0c 0x0b 0x20 0x01 0x0c 0x0e) update::(0x0c 0x0b 0x70 0x62 0x0c 0x0e 0x0c 0x0b 0x20 0x02 0x0c 0x0e) update::(0x0c 0x0b 0x70 0x63 0x0c 0x0e 0x0c 0x0b 0x20 0x03 0x0c 0x0e) update::(0x0e) // } update::(0x0b) update::(0xe0) update::(0x0b) update::(0x70) update::(0x68 0x65 0x6c 0x6c 0x6f) update::(0x0e) update::(0x0b) update::(0x0f) update::(0x0e) update::(0x0e) // hello::null update::(0x0e) // ) digest::(0x0b 0xc0 0x0b 0x0f 0x0e 0x0b 0x11 0x0e 0x0b 0x20 0x01 0x0e 0x0b 0x30 0x01 0x0e 0x0b 0x40 0x3f 0xf0 0x00 0x00 0x00 0x00 0x00 0x00 0x0e 0x0b 0x50 0x80 0x01 0x0e 0x0b 0x60 0xc0 0x0f 0xe1 0x81 0x81 0x80 0x80 0x80 0x0e 0x0b 0x70 0x68 0x65 0x6c 0x6c 0x6f 0x0e 0x0b 0x80 0x68 0x65 0x6c 0x6c 0x6f 0x0e 0x0b 0x90 0x68 0x65 0x6c 0x6c 0x6f 0x0e 0x0b 0xa0 0x68 0x65 0x6c 0x6c 0x6f 0x0e 0x0b 0xb0 0x0b 0x20 0x01 0x0e 0x0b 0x20 0x02 0x0e 0x0b 0x20 0x03 0x0e 0x0e 0x0b 0xc0 0x0b 0x20 0x01 0x0e 0x0b 0x20 0x02 0x0e 0x0b 0x20 0x03 0x0e 0x0e 0x0b 0xd0 0x0c 0x0b 0x70 0x61 0x0c 0x0e 0x0c 0x0b 0x20 0x01 0x0c 0x0e 0x0c 0x0b 0x70 0x62 0x0c 0x0e 0x0c 0x0b 0x20 0x02 0x0c 0x0e 0x0c 0x0b 0x70 0x63 0x0c 0x0e 0x0c 0x0b 0x20 0x03 0x0c 0x0e 0x0e 0x0b 0xe0 0x0b 0x70 0x68 0x65 0x6c 0x6c 0x6f 0x0e 0x0b 0x0f 0x0e 0x0e 0x0e) ), md5:( digest::(0x88 0xac 0xf3 0x33 0xde 0xe2 0xc6 0xab 0x56 0x0a 0x2e 0x52 0xc8 0xcc 0x97 0x02) digest::(0xca 0x1d 0xee 0x1a 0x85 0x66 0xbc 0x89 0xf1 0x49 0x95 0xa3 0xe2 0x8d 0x47 0xa9) digest::(0x77 0x79 0x64 0x77 0x32 0xf0 0x2f 0x40 0x10 0x65 0xb0 0x04 0xc2 0xc6 0x2e 0xb4) digest::(0x9a 0x3f 0x98 0x3e 0x56 0x73 0x51 0x80 0x08 0x7d 0x9c 0xf5 0x3f 0xe1 0x2f 0x72) ) } }