aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/test/skylark/testdata
diff options
context:
space:
mode:
authorGravatar laurentlb <laurentlb@google.com>2018-03-28 13:27:12 -0700
committerGravatar Copybara-Service <copybara-piper@google.com>2018-03-28 13:28:34 -0700
commitab0ada9ebbc63785fe6ceb80a5be2a44bee6eef5 (patch)
treed491c813c15255af44017d407e1c80d2ced7cbd8 /src/test/skylark/testdata
parentc45e182028c75bb78b7a12cb5cb3ca93c6b82c4a (diff)
Move more tests to test suite (int function, list index, list mutation)
RELNOTES: None. PiperOrigin-RevId: 190823566
Diffstat (limited to 'src/test/skylark/testdata')
-rw-r--r--src/test/skylark/testdata/int_function.sky95
-rw-r--r--src/test/skylark/testdata/list_mutation.sky87
-rw-r--r--src/test/skylark/testdata/list_slices.sky22
-rw-r--r--src/test/skylark/testdata/range.sky18
-rw-r--r--src/test/skylark/testdata/reversed.sky30
5 files changed, 252 insertions, 0 deletions
diff --git a/src/test/skylark/testdata/int_function.sky b/src/test/skylark/testdata/int_function.sky
new file mode 100644
index 0000000000..7d6a382a65
--- /dev/null
+++ b/src/test/skylark/testdata/int_function.sky
@@ -0,0 +1,95 @@
+# int
+assert_eq(int(0), 0)
+assert_eq(int(42), 42)
+assert_eq(int(-1), -1)
+assert_eq(int(2147483647), 2147483647)
+# -2147483648 is not actually a valid int literal even though it's a
+# valid int value, hence the -1 expression.
+assert_eq(int(-2147483647 - 1), -2147483647 - 1)
+assert_eq(int(True), 1)
+assert_eq(int(False), 0)
+
+---
+int(None) ### None is not of type string or int or bool
+---
+# This case is allowed in Python but not Skylark
+int() ### insufficient arguments received
+---
+
+# string, no base
+# Includes same numbers as integer test cases above.
+assert_eq(int('0'), 0)
+assert_eq(int('42'), 42)
+assert_eq(int('-1'), -1)
+assert_eq(int('2147483647'), 2147483647)
+assert_eq(int('-2147483648'), -2147483647 - 1)
+# Leading zero allowed when not using base = 0.
+assert_eq(int('016'), 16)
+# Leading plus sign allowed for strings.
+assert_eq(int('+42'), 42)
+
+---
+int(2147483648) ### invalid base-10 integer constant: 2147483648
+---
+int(-2147483649) ### invalid base-10 integer constant: 2147483649
+---
+int('') ### cannot be empty
+---
+# Surrounding whitespace is not allowed
+int(' 42 ') ### invalid literal for int() with base 10: " 42 "
+---
+int('-') ### invalid literal for int() with base 10: "-"
+---
+int('0x') ### invalid literal for int() with base 10: "0x"
+---
+int('1.5') ### invalid literal for int() with base 10: "1.5"
+---
+int('ab') ### invalid literal for int() with base 10: "ab"
+---
+
+assert_eq(int('11', 2), 3)
+assert_eq(int('-11', 2), -3)
+assert_eq(int('11', 9), 10)
+assert_eq(int('AF', 16), 175)
+assert_eq(int('11', 36), 37)
+assert_eq(int('az', 36), 395)
+assert_eq(int('11', 10), 11)
+assert_eq(int('11', 0), 11)
+assert_eq(int('016', 8), 14)
+assert_eq(int('016', 16), 22)
+
+---
+# invalid base
+int('016', 0) ### cannot infer base for int() when value begins with a 0: "016"
+---
+int('123', 3) ### invalid literal for int() with base 3: "123"
+---
+int('FF', 15) ### invalid literal for int() with base 15: "FF"
+---
+int('123', -1) ### int() base must be >= 2 and <= 36
+---
+int('123', 1) ### int() base must be >= 2 and <= 36
+---
+int('123', 37) ### int() base must be >= 2 and <= 36
+---
+int('123', 'x') ### base must be an integer (got 'string')
+---
+
+# base with prefix
+assert_eq(int('0b11', 0), 3)
+assert_eq(int('-0b11', 0), -3)
+assert_eq(int('+0b11', 0), 3)
+assert_eq(int('0B11', 2), 3)
+assert_eq(int('0o11', 0), 9)
+assert_eq(int('0O11', 8), 9)
+assert_eq(int('0XFF', 0), 255)
+assert_eq(int('0xFF', 16), 255)
+
+---
+int('0xFF', 8) ### invalid literal for int() with base 8: "0xFF"
+---
+int(True, 2) ### int() can't convert non-string with explicit base
+---
+int(1, 2) ### int() can't convert non-string with explicit base
+---
+int(True, 10) ### int() can't convert non-string with explicit base
diff --git a/src/test/skylark/testdata/list_mutation.sky b/src/test/skylark/testdata/list_mutation.sky
new file mode 100644
index 0000000000..24d5425952
--- /dev/null
+++ b/src/test/skylark/testdata/list_mutation.sky
@@ -0,0 +1,87 @@
+# insert
+
+foo = ['a', 'b']
+
+foo.insert(0, 'c')
+assert_eq(foo, ['c', 'a', 'b'])
+
+foo.insert(1, 'd')
+assert_eq(foo, ['c', 'd', 'a', 'b'])
+
+foo.insert(4, 'e')
+assert_eq(foo, ['c', 'd', 'a', 'b', 'e'])
+
+foo.insert(-10, 'f')
+assert_eq(foo, ['f', 'c', 'd', 'a', 'b', 'e'])
+
+foo.insert(10, 'g')
+assert_eq(foo, ['f', 'c', 'd', 'a', 'b', 'e', 'g'])
+
+---
+(1, 2).insert(3) ### type 'tuple' has no method insert\(int\)
+---
+
+# append
+
+foo = ['a', 'b']
+foo.append('c')
+assert_eq(foo, ['a', 'b', 'c'])
+foo.append('d')
+assert_eq(foo, ['a', 'b', 'c', 'd'])
+
+---
+(1, 2).append(3) ### type 'tuple' has no method append\(int\)
+---
+
+# extend
+
+foo = ['a', 'b']
+foo.extend(['c', 'd'])
+foo.extend(('e', 'f'))
+assert_eq(foo, ['a', 'b', 'c', 'd', 'e', 'f'])
+
+---
+(1, 2).extend([3, 4]) ### type 'tuple' has no method extend(list)
+---
+[1, 2].extend(3) ### argument 'items' has type 'int', but should be 'sequence'
+
+# remove
+
+foo = ['a', 'b', 'c', 'b']
+
+foo.remove('b')
+assert_eq(foo, ['a', 'c', 'b'])
+
+foo.remove('c')
+assert_eq(foo, ['a', 'b'])
+
+foo.remove('a')
+assert_eq(foo, ['b'])
+
+foo.remove('b')
+assert_eq(foo, [])
+
+---
+(1, 2).remove(3) ### type 'tuple' has no method remove\(int\)
+---
+[1, 2].remove(3) ### item 3 not found in list
+---
+
+# pop
+
+li1 = [2, 3, 4]
+assert_eq(li1.pop(), 4)
+assert_eq(li1, [2, 3])
+
+li2 = [2, 3, 4]
+assert_eq(li2.pop(-2), 3)
+assert_eq(li2, [2, 4])
+
+li3 = [2, 3, 4]
+assert_eq(li3.pop(1), 3)
+assert_eq(li3, [2, 4])
+
+---
+[1, 2].pop(3) ### index out of range (index is 3, but sequence has 2 elements)
+---
+(1, 2).pop() ### type 'tuple' has no method pop()
diff --git a/src/test/skylark/testdata/list_slices.sky b/src/test/skylark/testdata/list_slices.sky
index 3ec2999cba..b79661e23c 100644
--- a/src/test/skylark/testdata/list_slices.sky
+++ b/src/test/skylark/testdata/list_slices.sky
@@ -46,6 +46,16 @@ assert_eq((1, 2, 3, 4, 5)[3:1:-1], (4, 3))
assert_eq((1, 2, 3, 4, 5)[::-2], (5, 3, 1))
assert_eq((1, 2, 3, 4, 5)[::-10], (5,))
+# index
+assert_eq(['a', 'b', 'c', 'd'][0], 'a')
+assert_eq(['a', 'b', 'c', 'd'][1], 'b')
+assert_eq(['a', 'b', 'c', 'd'][-1], 'd')
+assert_eq(['a', 'b', 'c', 'd'][-2], 'c')
+assert_eq([0, 1, 2][-3], 0)
+assert_eq([0, 1, 2][-2], 1)
+assert_eq([0, 1, 2][-1], 2)
+assert_eq([0, 1, 2][0], 0)
+
---
'123'['a'::] ### slice start must be an integer, not 'a'
---
@@ -60,3 +70,15 @@ assert_eq((1, 2, 3, 4, 5)[::-10], (5,))
[1, 2, 3][:3:0] ### slice step cannot be zero
---
[1, 2, 3][1:3:0] ### slice step cannot be zero
+---
+[[1], [2]]['a'] ### indices must be integers, not string
+---
+[0, 1, 2][3] ### index out of range (index is 3, but sequence has 3 elements)
+---
+[0, 1, 2][-4] ### index out of range (index is -4, but sequence has 3 elements)
+---
+[0][-2] ### index out of range (index is -2, but sequence has 1 elements)
+---
+[0][1] ### index out of range (index is 1, but sequence has 1 elements)
+---
+[][1] ### index out of range (index is 1, but sequence has 0 elements)
diff --git a/src/test/skylark/testdata/range.sky b/src/test/skylark/testdata/range.sky
new file mode 100644
index 0000000000..75d9be441b
--- /dev/null
+++ b/src/test/skylark/testdata/range.sky
@@ -0,0 +1,18 @@
+assert_eq(range(5), [0, 1, 2, 3, 4])
+assert_eq(range(0), [])
+assert_eq(range(1), [0])
+assert_eq(range(-2), [])
+assert_eq(range(-3, 2), [-3, -2, -1, 0, 1])
+assert_eq(range(3, 2), [])
+assert_eq(range(3, 3), [])
+assert_eq(range(3, 4), [3])
+assert_eq(range(3, 5), [3, 4])
+assert_eq(range(-3, 5, 2), [-3, -1, 1, 3])
+assert_eq(range(-3, 6, 2), [-3, -1, 1, 3, 5])
+assert_eq(range(5, 0, -1), [5, 4, 3, 2, 1])
+assert_eq(range(5, 0, -10), [5])
+assert_eq(range(0, -3, -2), [0, -2])
+
+---
+range(2, 3, 0) ### step cannot be 0
+
diff --git a/src/test/skylark/testdata/reversed.sky b/src/test/skylark/testdata/reversed.sky
new file mode 100644
index 0000000000..91ce565687
--- /dev/null
+++ b/src/test/skylark/testdata/reversed.sky
@@ -0,0 +1,30 @@
+# lists
+
+assert_eq(reversed(''), [])
+assert_eq(reversed('a'), ['a'])
+assert_eq(reversed('abc'), ['c', 'b', 'a'])
+assert_eq(reversed('__test '), [' ', ' ', 't', 's', 'e', 't', '_', '_'])
+assert_eq(reversed('bbb'), ['b', 'b', 'b'])
+
+---
+reversed(None) ### type 'NoneType' is not iterable
+---
+reversed(1) ### type 'int' is not iterable
+---
+reversed({1: 3}) ### Argument to reversed() must be a sequence, not a dictionary
+---
+
+x = ['a', 'b']
+y = reversed(x)
+y.append('c')
+assert_eq(y, ['b', 'a', 'c'])
+assert_eq(x, ['a', 'b'])
+
+def reverse_equivalence(inp):
+ assert_eq(reversed(inp), inp[::-1])
+ assert_eq(reversed(reversed(inp)), inp)
+
+reverse_equivalence([])
+reverse_equivalence([1])
+reverse_equivalence(["a", "b"])
+