diff options
Diffstat (limited to 'ext/librethinkdbxx/test/upstream/datum/binary.yaml')
-rw-r--r-- | ext/librethinkdbxx/test/upstream/datum/binary.yaml | 363 |
1 files changed, 363 insertions, 0 deletions
diff --git a/ext/librethinkdbxx/test/upstream/datum/binary.yaml b/ext/librethinkdbxx/test/upstream/datum/binary.yaml new file mode 100644 index 00000000..6236a457 --- /dev/null +++ b/ext/librethinkdbxx/test/upstream/datum/binary.yaml @@ -0,0 +1,363 @@ +desc: Tests of converstion to and from the RQL binary type +tests: + + # Short binary data from 0 to 12 characters + # Not fully implemented for JS as comparing Buffer objects is non-trivial + - def: + rb: s = "".force_encoding('BINARY') + py: s = b'' + js: s = Buffer("", 'binary') + - cd: r.binary(s) + ot: s + - cd: r.binary(s).count() + ot: 0 + + - def: + rb: s = "\x00".force_encoding('BINARY') + py: s = b'\x00' + js: s = Buffer("\x00", 'binary') + - cd: r.binary(s) + ot: s + - cd: r.binary(s).count() + ot: 1 + + - def: + rb: s = "\x00\x42".force_encoding('BINARY') + py: s = b'\x00\x42' + js: s = Buffer("\x00\x42", 'binary') + - cd: r.binary(s) + ot: s + - cd: r.binary(s).count() + ot: 2 + + - def: + rb: s = "\x00\xfe\x7a".force_encoding('BINARY') + py: s = b'\x00\xfe\x7a' + js: s = Buffer("\x00\xfe\x7a", 'binary') + - cd: r.binary(s) + ot: s + - cd: r.binary(s).count() + ot: 3 + + - def: + rb: s = "\xed\xfe\x00\xba".force_encoding('BINARY') + py: s = b'\xed\xfe\x00\xba' + js: s = Buffer("\xed\xfe\x00\xba", 'binary') + - cd: r.binary(s) + ot: s + - cd: r.binary(s).count() + ot: 4 + + - def: + rb: s = "\x50\xf9\x00\x77\xf9".force_encoding('BINARY') + py: s = b'\x50\xf9\x00\x77\xf9' + js: s = Buffer("\x50\xf9\x00\x77\xf9", 'binary') + - cd: r.binary(s) + ot: s + - cd: r.binary(s).count() + ot: 5 + + - def: + rb: s = "\x2f\xe3\xb5\x57\x00\x92".force_encoding('BINARY') + py: s = b'\x2f\xe3\xb5\x57\x00\x92' + js: s = Buffer("\x2f\xe3\xb5\x57\x00\x92", 'binary') + - cd: r.binary(s) + ot: s + - cd: r.binary(s).count() + ot: 6 + + - def: + rb: s = "\xa9\x43\x54\xe9\x00\xf8\xfb".force_encoding('BINARY') + py: s = b'\xa9\x43\x54\xe9\x00\xf8\xfb' + js: s = Buffer("\xa9\x43\x54\xe9\x00\xf8\xfb", 'binary') + - cd: r.binary(s) + ot: s + - cd: r.binary(s).count() + ot: 7 + + - def: + rb: s = "\x57\xbb\xe5\x82\x8b\xd3\x00\xf9".force_encoding('BINARY') + py: s = b'\x57\xbb\xe5\x82\x8b\xd3\x00\xf9' + js: s = Buffer("\x57\xbb\xe5\x82\x8b\xd3\x00\xf9", 'binary') + - cd: r.binary(s) + ot: s + - cd: r.binary(s).count() + ot: 8 + + - def: + rb: s = "\x44\x1b\x3e\x00\x13\x19\x29\x2a\xbf".force_encoding('BINARY') + py: s = b'\x44\x1b\x3e\x00\x13\x19\x29\x2a\xbf' + js: s = Buffer("\x44\x1b\x3e\x00\x13\x19\x29\x2a\xbf", 'binary') + - cd: r.binary(s) + ot: s + - cd: r.binary(s).count() + ot: 9 + + - def: + rb: s = "\x8a\x1d\x09\x00\x5d\x60\x6b\x2e\x70\xd9".force_encoding('BINARY') + py: s = b'\x8a\x1d\x09\x00\x5d\x60\x6b\x2e\x70\xd9' + js: s = Buffer("\x8a\x1d\x09\x00\x5d\x60\x6b\x2e\x70\xd9", 'binary') + - cd: r.binary(s) + ot: s + - cd: r.binary(s).count() + ot: 10 + + - def: + rb: s = "\x00\xaf\x47\x4b\x38\x99\x14\x8d\x8f\x10\x51".force_encoding('BINARY') + py: s = b'\x00\xaf\x47\x4b\x38\x99\x14\x8d\x8f\x10\x51' + js: s = Buffer("\x00\xaf\x47\x4b\x38\x99\x14\x8d\x8f\x10\x51", 'binary') + - cd: r.binary(s) + ot: s + - cd: r.binary(s).count() + ot: 11 + + - def: + cd: s = "\x45\x39\x00\xf7\xc2\x37\xfd\xe0\x38\x82\x40\xa9".force_encoding('BINARY') + py: s = b'\x45\x39\x00\xf7\xc2\x37\xfd\xe0\x38\x82\x40\xa9' + js: s = Buffer("\x45\x39\x00\xf7\xc2\x37\xfd\xe0\x38\x82\x40\xa9", 'binary') + - cd: r.binary(s) + ot: s + - cd: r.binary(s).count() + ot: 12 + + # Test comparisons + # Binary objects to use, in order of increasing value + - def: + js: a = Buffer("\x00", 'binary') + rb: a = "\x00".force_encoding('BINARY') + py: a = b'\x00' + - def: + js: b = Buffer("\x00\x01", 'binary') + rb: b = "\x00\x01".force_encoding('BINARY') + py: b = b'\x00\x01' + - def: + js: c = Buffer("\x01", 'binary') + rb: c = "\x01".force_encoding('BINARY') + py: c = b'\x01' + - def: + js: d = Buffer("\x70\x22", 'binary') + rb: d = "\x70\x22".force_encoding('BINARY') + py: d = b'\x70\x22' + - def: + js: e = Buffer("\x80", 'binary') + rb: e = "\x80".force_encoding('BINARY') + py: e = b'\x80' + - def: + js: f = Buffer("\xFE", 'binary') + rb: f = "\xFE".force_encoding('BINARY') + py: f = b'\xFE' + + # a -> a + - cd: r.binary(a).eq(r.binary(a)) + ot: true + - cd: r.binary(a).le(r.binary(a)) + ot: true + - cd: r.binary(a).ge(r.binary(a)) + ot: true + - cd: r.binary(a).ne(r.binary(a)) + ot: false + - cd: r.binary(a).lt(r.binary(a)) + ot: false + - cd: r.binary(a).gt(r.binary(a)) + ot: false + + # a -> b + - cd: r.binary(a).ne(r.binary(b)) + ot: true + - cd: r.binary(a).lt(r.binary(b)) + ot: true + - cd: r.binary(a).le(r.binary(b)) + ot: true + - cd: r.binary(a).ge(r.binary(b)) + ot: false + - cd: r.binary(a).gt(r.binary(b)) + ot: false + - cd: r.binary(a).eq(r.binary(b)) + ot: false + + # b -> c + - cd: r.binary(b).ne(r.binary(c)) + ot: true + - cd: r.binary(b).lt(r.binary(c)) + ot: true + - cd: r.binary(b).le(r.binary(c)) + ot: true + - cd: r.binary(b).ge(r.binary(c)) + ot: false + - cd: r.binary(b).gt(r.binary(c)) + ot: false + - cd: r.binary(b).eq(r.binary(c)) + ot: false + + # c -> d + - cd: r.binary(c).ne(r.binary(d)) + ot: true + - cd: r.binary(c).lt(r.binary(d)) + ot: true + - cd: r.binary(c).le(r.binary(d)) + ot: true + - cd: r.binary(c).ge(r.binary(d)) + ot: false + - cd: r.binary(c).gt(r.binary(d)) + ot: false + - cd: r.binary(c).eq(r.binary(d)) + ot: false + + # d -> e + - cd: r.binary(d).ne(r.binary(e)) + ot: true + - cd: r.binary(d).lt(r.binary(e)) + ot: true + - cd: r.binary(d).le(r.binary(e)) + ot: true + - cd: r.binary(d).ge(r.binary(e)) + ot: false + - cd: r.binary(d).gt(r.binary(e)) + ot: false + - cd: r.binary(d).eq(r.binary(e)) + ot: false + + # e -> f + - cd: r.binary(e).ne(r.binary(f)) + ot: true + - cd: r.binary(e).lt(r.binary(f)) + ot: true + - cd: r.binary(e).le(r.binary(f)) + ot: true + - cd: r.binary(e).ge(r.binary(f)) + ot: false + - cd: r.binary(e).gt(r.binary(f)) + ot: false + - cd: r.binary(e).eq(r.binary(f)) + ot: false + + # f -> f + - cd: r.binary(f).eq(r.binary(f)) + ot: true + - cd: r.binary(f).le(r.binary(f)) + ot: true + - cd: r.binary(f).ge(r.binary(f)) + ot: true + - cd: r.binary(f).ne(r.binary(f)) + ot: false + - cd: r.binary(f).lt(r.binary(f)) + ot: false + - cd: r.binary(f).gt(r.binary(f)) + ot: false + + # Test encodings + - py: + cd: r.binary(u'イロハニホヘト チリヌルヲ ワカヨタレソ ツネナラム'.encode('utf-8')) + ot: u'イロハニホヘト チリヌルヲ ワカヨタレソ ツネナラム'.encode('utf-8') + py3: + cd: r.binary(str('イロハニホヘト チリヌルヲ ワカヨタレソ ツネナラム').encode('utf-8')) + ot: str('イロハニホヘト チリヌルヲ ワカヨタレソ ツネナラム').encode('utf-8') + - py: + cd: r.binary(u'ƀƁƂƃƄƅƆƇƈƉƊƋƌƍƎƏ'.encode('utf-16')) + ot: u'ƀƁƂƃƄƅƆƇƈƉƊƋƌƍƎƏ'.encode('utf-16') + py3: + cd: r.binary(str('ƀƁƂƃƄƅƆƇƈƉƊƋƌƍƎƏ').encode('utf-16')) + ot: str('ƀƁƂƃƄƅƆƇƈƉƊƋƌƍƎƏ').encode('utf-16') + - py: + cd: r.binary(u'lorem ipsum'.encode('ascii')) + ot: u'lorem ipsum'.encode('ascii') + py3: + cd: r.binary(str('lorem ipsum').encode('ascii')) + ot: str('lorem ipsum').encode('ascii') + + # Test coercions + - py: r.binary(b'foo').coerce_to('string') + ot: 'foo' + - py: + cd: r.binary(u'イロハニホヘト チリヌルヲ ワカヨタレソ ツネナラム'.encode('utf-8')).coerce_to('string') + ot: u'イロハニホヘト チリヌルヲ ワカヨタレソ ツネナラム' + py3: + cd: r.binary(str('イロハニホヘト チリヌルヲ ワカヨタレソ ツネナラム').encode('utf-8')).coerce_to('string') + ot: str('イロハニホヘト チリヌルヲ ワカヨタレソ ツネナラム') + - py: + cd: r.binary(u'lorem ipsum'.encode('ascii')).coerce_to('string') + ot: u'lorem ipsum' + py3: + cd: r.binary(str('lorem ipsum').encode('ascii')).coerce_to('string') + ot: str('lorem ipsum') + + - py: r.expr('foo').coerce_to('binary') + ot: b'foo' + + - cd: r.binary(a).coerce_to('bool') + ot: True + + - py: r.binary(b'foo').coerce_to('binary') + ot: b'foo' + + # Test slice + - py: r.binary(b'abcdefg').slice(-3,-1) + ot: b'ef' + - py: r.binary(b'abcdefg').slice(0, 2) + ot: b'ab' + - py: r.binary(b'abcdefg').slice(3, -1) + ot: b'def' + - py: r.binary(b'abcdefg').slice(-5, 5) + ot: b'cde' + - py: r.binary(b'abcdefg').slice(-8, 2) + ot: b'ab' + - py: r.binary(b'abcdefg').slice(5, 7) + ot: b'fg' + + # Left side out-of-bound should clamp to index 0 + - py: r.binary(b'abcdefg').slice(-9, 2) + ot: b'ab' + + # Right side out-of-bound should return the valid subset of the range + - py: r.binary(b'abcdefg').slice(5, 9) + ot: b'fg' + + # Test binary_format optarg + - cd: r.binary(b) + runopts: + binary_format: "native" + ot: b + - cd: r.binary(b) + runopts: + binary_format: "raw" + ot: {'$reql_type$':'BINARY','data':'AAE='} + + # Test r.binary of nested terms + - cd: r.binary(r.expr("data")) + ot: + js: Buffer("data", "binary") + rb: "data" + py: b"data" + + - cd: r.binary(r.expr({})) + ot: err('ReqlQueryLogicError', 'Expected type STRING but found OBJECT.', []) + + - cd: r.binary(r.expr([])) + ot: err('ReqlQueryLogicError', 'Expected type STRING but found ARRAY.', []) + + # Test errors + + # Missing 'data' field + - py: r.expr({'$reql_type$':'BINARY'}) + rb: r.expr({'$reql_type$':'BINARY'}) + ot: err('ReqlQueryLogicError','Invalid binary pseudotype:'+' lacking `data` key.',[]) + + # Invalid base64 format + - py: r.expr({'$reql_type$':'BINARY','data':'ABCDEFGH==AA'}) + ot: err('ReqlQueryLogicError','Invalid base64 format, data found after padding character \'=\'.',[]) + - py: r.expr({'$reql_type$':'BINARY','data':'ABCDEF==$'}) + ot: err('ReqlQueryLogicError','Invalid base64 format, data found after padding character \'=\'.',[]) + - py: r.expr({'$reql_type$':'BINARY','data':'A^CDEFGH'}) + ot: err('ReqlQueryLogicError','Invalid base64 character found:'+' \'^\'.',[]) + - py: r.expr({'$reql_type$':'BINARY','data':'ABCDE'}) + ot: err('ReqlQueryLogicError','Invalid base64 length:'+' 1 character remaining, cannot decode a full byte.',[]) + + # Invalid coercions + - cd: r.binary(a).coerce_to('array') + ot: err('ReqlQueryLogicError','Cannot coerce BINARY to ARRAY.',[]) + - cd: r.binary(a).coerce_to('object') + ot: err('ReqlQueryLogicError','Cannot coerce BINARY to OBJECT.',[]) + - cd: r.binary(a).coerce_to('number') + ot: err('ReqlQueryLogicError','Cannot coerce BINARY to NUMBER.',[]) + - cd: r.binary(a).coerce_to('nu'+'ll') + ot: err('ReqlQueryLogicError','Cannot coerce BINARY to NULL.',[]) |