This repository has been archived on 2025-09-14. You can view files and clone it, but cannot push or open issues or pull requests.
Files
zhangyang-zerotierone/ext/librethinkdbxx/test/upstream/datum/string.yaml
2017-11-02 07:05:11 -07:00

330 lines
13 KiB
YAML

desc: Tests of converstion to and from the RQL string type
tests:
- def:
cd: japanese_hello = 'こんにちは'
# Python supports unicode strings with the u'' pattern, except 3.0-3.2
py: japanese_hello = u'こんにちは'
py3.0: japanese_hello = 'こんにちは'
py3.1: japanese_hello = 'こんにちは'
py3.2: japanese_hello = 'こんにちは'
# Simple strings
- cd:
- r('str')
- r.expr('str')
py: r.expr('str')
ot: "str"
- cd:
- r("str")
- r.expr("str")
py: r.expr("str")
ot: "str"
# Unicode
- cd:
py:
cd: r.expr(u'str')
ot: u'str'
py3.0: r.expr('str')
py3.1: r.expr('str')
py3.2: r.expr('str')
ot: 'str'
- cd: r.expr(japanese_hello)
ot:
cd: 'こんにちは'
py: u'こんにちは'
py3.0: 'こんにちは'
py3.1: 'こんにちは'
py3.2: 'こんにちは'
- cd: r.expr('foo').type_of()
ot: 'STRING'
# test coercions
- cd: r.expr('foo').coerce_to('string')
ot: 'foo'
- cd: r.expr('-1.2').coerce_to('NUMBER')
ot: -1.2
- cd: r.expr('--1.2').coerce_to('NUMBER')
ot: err("ReqlQueryLogicError", "Could not coerce `--1.2` to NUMBER.", [])
- cd: r.expr('-1.2-').coerce_to('NUMBER')
ot: err("ReqlQueryLogicError", "Could not coerce `-1.2-` to NUMBER.", [])
- cd: r.expr('0xa').coerce_to('NUMBER')
ot: 10
- cd: r.expr('inf').coerce_to('NUMBER')
ot: err("ReqlQueryLogicError", "Non-finite number: inf", [])
# count is defined as the number of unicode codepoints
- cd: r.expr('hello, world!').count()
ot: 13
- cd: r.expr(japanese_hello).count()
ot: 5
# slice is defined on unicode codepoints
- cd: r.expr('hello').slice(1)
ot: 'ello'
- cd: r.expr('hello').slice(-1)
ot: 'o'
- cd: r.expr('hello').slice(-4,3)
ot: 'el'
- cd: r.expr('hello').slice(-99)
ot: 'hello'
- cd: r.expr('hello').slice(0)
ot: 'hello'
- cd: r.expr(japanese_hello).slice(1)
ot:
cd: 'んにちは'
py: u'んにちは'
py3.0: 'んにちは'
py3.1: 'んにちは'
py3.2: 'んにちは'
- cd: r.expr(japanese_hello).slice(1,2)
ot:
cd: 'ん'
py: u'ん'
py3.0: 'ん'
py3.1: 'ん'
py3.2: 'ん'
- cd: r.expr(japanese_hello).slice(-3)
ot:
cd: 'にちは'
py: u'にちは'
py3.0: 'にちは'
py3.1: 'にちは'
py3.2: 'にちは'
# This is how these edge cases are handled in Python.
- cd: r.expr('').split()
ot: []
- cd: r.expr('').split(null)
ot: []
- cd: r.expr('').split(' ')
ot: ['']
- cd: r.expr('').split('')
ot: []
- cd: r.expr('').split(null, 5)
ot: []
- cd: r.expr('').split(' ', 5)
ot: ['']
- cd: r.expr('').split('', 5)
ot: []
- cd: r.expr('aaaa bbbb cccc ').split()
ot: ['aaaa', 'bbbb', 'cccc']
- cd: r.expr('aaaa bbbb cccc ').split(null)
ot: ['aaaa', 'bbbb', 'cccc']
- cd: r.expr('aaaa bbbb cccc ').split(' ')
ot: ['aaaa', 'bbbb', '', 'cccc', '']
- cd: r.expr('aaaa bbbb cccc ').split('')
ot: ['a', 'a', 'a', 'a', ' ', 'b', 'b', 'b', 'b', ' ', ' ', 'c', 'c', 'c', 'c', ' ']
- cd: r.expr('aaaa bbbb cccc ').split('b')
ot: ['aaaa ', '', '', '', ' cccc ']
- cd: r.expr('aaaa bbbb cccc ').split('bb')
ot: ['aaaa ', '', ' cccc ']
- cd: r.expr('aaaa bbbb cccc ').split(' bbbb ')
ot: ['aaaa', 'cccc ']
- cd: r.expr('aaaa bbbb cccc b d bb e bbbb f').split('bb')
ot: ['aaaa ', '', ' cccc b d ', ' e ', '', ' f']
- cd: r.expr('aaaa bbbb cccc b d bb e bbbb f').split(' bbbb ')
ot: ['aaaa', 'cccc b d bb e bbbb f']
- cd: r.expr('aaaa bbbb cccc b d bb e bbbb f').split(' bbbb ')
ot: ['aaaa', 'cccc b d bb e', 'f']
- cd: r.expr('aaaa bbbb cccc ').split(null, 3)
ot: ['aaaa', 'bbbb', 'cccc']
- cd: r.expr('aaaa bbbb cccc ').split(' ', 5)
ot: ['aaaa', 'bbbb', '', 'cccc', '']
- cd: r.expr('aaaa bbbb cccc ').split('', 5)
ot: ['a', 'a', 'a', 'a', ' ', 'bbbb cccc ']
- cd: r.expr('aaaa bbbb cccc ').split('b', 5)
ot: ['aaaa ', '', '', '', ' cccc ']
- cd: r.expr('aaaa bbbb cccc ').split('bb', 3)
ot: ['aaaa ', '', ' cccc ']
- cd: r.expr('aaaa bbbb cccc ').split(' bbbb ', 2)
ot: ['aaaa', 'cccc ']
- cd: r.expr('aaaa bbbb cccc b d bb e bbbb f').split('bb', 6)
ot: ['aaaa ', '', ' cccc b d ', ' e ', '', ' f']
- cd: r.expr('aaaa bbbb cccc b d bb e bbbb f').split(' bbbb ', 2)
ot: ['aaaa', 'cccc b d bb e bbbb f']
- cd: r.expr('aaaa bbbb cccc b d bb e bbbb f').split(' bbbb ', 3)
ot: ['aaaa', 'cccc b d bb e', 'f']
- cd: r.expr('aaaa bbbb cccc ').split(null, 2)
ot: ['aaaa', 'bbbb', 'cccc ']
- cd: r.expr("a b ").split(null, 2)
ot: ["a", "b"]
- cd: r.expr('aaaa bbbb cccc ').split(' ', 4)
ot: ['aaaa', 'bbbb', '', 'cccc', '']
- cd: r.expr('aaaa bbbb cccc ').split('', 4)
ot: ['a', 'a', 'a', 'a', ' bbbb cccc ']
- cd: r.expr('aaaa bbbb cccc ').split('b', 4)
ot: ['aaaa ', '', '', '', ' cccc ']
- cd: r.expr('aaaa bbbb cccc ').split('bb', 2)
ot: ['aaaa ', '', ' cccc ']
- cd: r.expr('aaaa bbbb cccc ').split(' bbbb ', 1)
ot: ['aaaa', 'cccc ']
- cd: r.expr('aaaa bbbb cccc b d bb e bbbb f').split('bb', 5)
ot: ['aaaa ', '', ' cccc b d ', ' e ', '', ' f']
- cd: r.expr('aaaa bbbb cccc b d bb e bbbb f').split(' bbbb ', 1)
ot: ['aaaa', 'cccc b d bb e bbbb f']
- cd: r.expr('aaaa bbbb cccc b d bb e bbbb f').split(' bbbb ', 2)
ot: ['aaaa', 'cccc b d bb e', 'f']
- cd: r.expr('aaaa bbbb cccc ').split(null, 1)
ot: ['aaaa', 'bbbb cccc ']
- cd: r.expr('aaaa bbbb cccc ').split(' ', 2)
ot: ['aaaa', 'bbbb', ' cccc ']
- cd: r.expr('aaaa bbbb cccc ').split('', 2)
ot: ['a', 'a', 'aa bbbb cccc ']
- cd: r.expr('aaaa bbbb cccc ').split('b', 2)
ot: ['aaaa ', '', 'bb cccc ']
- cd: r.expr('aaaa bbbb cccc ').split('bb', 2)
ot: ['aaaa ', '', ' cccc ']
- cd: r.expr('aaaa bbbb cccc ').split(' bbbb ', 2)
ot: ['aaaa', 'cccc ']
- cd: r.expr('aaaa bbbb cccc b d bb e bbbb f').split('bb', 2)
ot: ['aaaa ', '', ' cccc b d bb e bbbb f']
- cd: r.expr('aaaa bbbb cccc b d bb e bbbb f').split(' bbbb ', 2)
ot: ['aaaa', 'cccc b d bb e bbbb f']
- cd: r.expr('aaaa bbbb cccc b d bb e bbbb f').split(' bbbb ', 2)
ot: ['aaaa', 'cccc b d bb e', 'f']
- cd: r.expr(' ').split()
ot: []
- cd: r.expr(' ').split(null)
ot: []
- cd: r.expr(' ').split(' ')
ot: ['', '', '']
- cd: r.expr(' ').split(null, 5)
ot: []
- cd: r.expr(' ').split(' ', 5)
ot: ['', '', '']
- cd: r.expr(' aaaa bbbb cccc ').split()
ot: ['aaaa', 'bbbb', 'cccc']
- cd: r.expr(' aaaa bbbb cccc ').split(null)
ot: ['aaaa', 'bbbb', 'cccc']
- cd: r.expr(' aaaa bbbb cccc ').split(' ')
ot: ['', '', 'aaaa', 'bbbb', '', 'cccc', '']
- cd: r.expr(' aaaa bbbb cccc ').split('b')
ot: [' aaaa ', '', '', '', ' cccc ']
- cd: r.expr(' aaaa bbbb cccc ').split('bb')
ot: [' aaaa ', '', ' cccc ']
- cd: r.expr(' aaaa bbbb cccc ').split(' bbbb ')
ot: [' aaaa', 'cccc ']
- cd: r.expr(' aaaa bbbb cccc b d bb e bbbb f').split('bb')
ot: [' aaaa ', '', ' cccc b d ', ' e ', '', ' f']
- cd: r.expr(' aaaa bbbb cccc b d bb e bbbb f').split(' bbbb ')
ot: [' aaaa', 'cccc b d bb e bbbb f']
- cd: r.expr(' aaaa bbbb cccc b d bb e bbbb f').split(' bbbb ')
ot: [' aaaa', 'cccc b d bb e', 'f']
- cd: r.expr(' aaaa bbbb cccc ').split(null, 3)
ot: ['aaaa', 'bbbb', 'cccc']
- cd: r.expr(' aaaa bbbb cccc ').split(' ', 5)
ot: ['', '', 'aaaa', 'bbbb', '', 'cccc ']
- cd: r.expr(' aaaa bbbb cccc ').split('b', 5)
ot: [' aaaa ', '', '', '', ' cccc ']
- cd: r.expr(' aaaa bbbb cccc ').split('bb', 3)
ot: [' aaaa ', '', ' cccc ']
- cd: r.expr(' aaaa bbbb cccc ').split(' bbbb ', 2)
ot: [' aaaa', 'cccc ']
- cd: r.expr(' aaaa bbbb cccc b d bb e bbbb f').split('bb', 6)
ot: [' aaaa ', '', ' cccc b d ', ' e ', '', ' f']
- cd: r.expr(' aaaa bbbb cccc b d bb e bbbb f').split(' bbbb ', 2)
ot: [' aaaa', 'cccc b d bb e bbbb f']
- cd: r.expr(' aaaa bbbb cccc b d bb e bbbb f').split(' bbbb ', 3)
ot: [' aaaa', 'cccc b d bb e', 'f']
- cd: r.expr(' aaaa bbbb cccc ').split(null, 2)
ot: ['aaaa', 'bbbb', 'cccc ']
- cd: r.expr("a b ").split(null, 2)
ot: ["a", "b"]
- cd: r.expr(' aaaa bbbb cccc ').split(' ', 4)
ot: ['', '', 'aaaa', 'bbbb', ' cccc ']
- cd: r.expr(' aaaa bbbb cccc ').split('b', 4)
ot: [' aaaa ', '', '', '', ' cccc ']
- cd: r.expr(' aaaa bbbb cccc ').split('bb', 2)
ot: [' aaaa ', '', ' cccc ']
- cd: r.expr(' aaaa bbbb cccc ').split(' bbbb ', 1)
ot: [' aaaa', 'cccc ']
- cd: r.expr(' aaaa bbbb cccc b d bb e bbbb f').split('bb', 5)
ot: [' aaaa ', '', ' cccc b d ', ' e ', '', ' f']
- cd: r.expr(' aaaa bbbb cccc b d bb e bbbb f').split(' bbbb ', 1)
ot: [' aaaa', 'cccc b d bb e bbbb f']
- cd: r.expr(' aaaa bbbb cccc b d bb e bbbb f').split(' bbbb ', 2)
ot: [' aaaa', 'cccc b d bb e', 'f']
- cd: r.expr(' aaaa bbbb cccc ').split(null, 1)
ot: ['aaaa', 'bbbb cccc ']
- cd: r.expr(' aaaa bbbb cccc ').split(' ', 2)
ot: ['', '', 'aaaa bbbb cccc ']
- cd: r.expr(' aaaa bbbb cccc ').split('b', 2)
ot: [' aaaa ', '', 'bb cccc ']
- cd: r.expr(' aaaa bbbb cccc ').split('bb', 2)
ot: [' aaaa ', '', ' cccc ']
- cd: r.expr(' aaaa bbbb cccc ').split(' bbbb ', 2)
ot: [' aaaa', 'cccc ']
- cd: r.expr(' aaaa bbbb cccc b d bb e bbbb f').split('bb', 2)
ot: [' aaaa ', '', ' cccc b d bb e bbbb f']
- cd: r.expr(' aaaa bbbb cccc b d bb e bbbb f').split(' bbbb ', 2)
ot: [' aaaa', 'cccc b d bb e bbbb f']
- cd: r.expr(' aaaa bbbb cccc b d bb e bbbb f').split(' bbbb ', 2)
ot: [' aaaa', 'cccc b d bb e', 'f']
- cd: r.expr("abc-dEf-GHJ").upcase()
ot: "ABC-DEF-GHJ"
- cd: r.expr("abc-dEf-GHJ").downcase()
ot: "abc-def-ghj"
# Same 3.0-3.2 caveats
- py:
cd: r.expr(u"f\u00e9oo").split("")
ot: [u"f", u"\u00e9", u"o", u"o"]
py3.0: r.expr("f\u00e9oo").split("")
py3.1: r.expr("f\u00e9oo").split("")
py3.2: r.expr("f\u00e9oo").split("")
cd: r.expr("f\u00e9oo").split("")
ot: ["f", "\u00e9", "o", "o"]
- py:
cd: r.expr(u"fe\u0301oo").split("")
ot: [u"f", u"e\u0301", u"o", u"o"]
py3.0: r.expr("fe\u0301oo").split("")
py3.1: r.expr("fe\u0301oo").split("")
py3.2: r.expr("fe\u0301oo").split("")
cd: r.expr("fe\u0301oo").split("")
ot: ["f", "e\u0301", "o", "o"]
## Unicode spacing characters.
## original set from previous work:
- cd: r.expr("foo bar\tbaz\nquux\rfred\u000bbarney\u000cwilma").split()
py:
cd: r.expr(u"foo bar\tbaz\nquux\rfred\u000bbarney\u000cwilma").split()
ot: ["foo", "bar", "baz", "quux", "fred", "barney", "wilma"]
py3.0: r.expr("foo bar\tbaz\nquux\rfred\u000bbarney\u000cwilma").split()
py3.1: r.expr("foo bar\tbaz\nquux\rfred\u000bbarney\u000cwilma").split()
py3.2: r.expr("foo bar\tbaz\nquux\rfred\u000bbarney\u000cwilma").split()
ot: ["foo", "bar", "baz", "quux", "fred", "barney", "wilma"]
## some specialized Unicode horrors:
## - U+00A0 is nonbreaking space and is in the Zs category
## - U+0085 is the next line character and is not in the Zs category but is considered whitespace
## - U+2001 is em quad space and is in the Zs category
## - U+200B is a zero width space and is not in the Zs category and is not considered whitespace
## - U+2060 is a word joining zero width nonbreaking space and is NOT in any of the Z categories
## - U+2028 is a line separator and is in the Zl category
## - U+2029 is a paragraph separator and is in the Zp category
- py:
cd: r.expr(u"foo\u00a0bar\u2001baz\u2060quux\u2028fred\u2028barney\u2029wilma\u0085betty\u200b").split()
ot: ["foo", "bar", u"baz\u2060quux", "fred", "barney", "wilma", u"betty\u200b"]
py3.0: r.expr("foo\u00a0bar\u2001baz\u2060quux\u2028fred\u2028barney\u2029wilma\u0085betty\u200b").split()
py3.1: r.expr("foo\u00a0bar\u2001baz\u2060quux\u2028fred\u2028barney\u2029wilma\u0085betty\u200b").split()
py3.2: r.expr("foo\u00a0bar\u2001baz\u2060quux\u2028fred\u2028barney\u2029wilma\u0085betty\u200b").split()
cd: r.expr("foo\u00a0bar\u2001baz\u2060quux\u2028fred\u2028barney\u2029wilma\u0085betty\u200b").split()
ot: ["foo", "bar", "baz\u2060quux", "fred", "barney", "wilma", "betty\u200b"]