summaryrefslogtreecommitdiff
path: root/tests/basics
diff options
context:
space:
mode:
Diffstat (limited to 'tests/basics')
-rw-r--r--tests/basics/class_store_class.py47
-rw-r--r--tests/basics/frozenset1.py14
-rw-r--r--tests/basics/frozenset_add.py12
-rw-r--r--tests/basics/frozenset_binop.py36
-rw-r--r--tests/basics/frozenset_copy.py12
-rw-r--r--tests/basics/frozenset_difference.py21
-rw-r--r--tests/basics/int1.py1
-rw-r--r--tests/basics/list_slice_assign.py36
-rw-r--r--tests/basics/namedtuple1.py2
-rw-r--r--tests/basics/string_partition.py11
-rw-r--r--tests/basics/string_strip.py10
-rw-r--r--tests/basics/string_upperlow.py4
-rw-r--r--tests/basics/subclass-native5.py12
-rw-r--r--tests/basics/subclass_native_cmp.py9
-rw-r--r--tests/basics/subclass_native_specmeth.py18
15 files changed, 245 insertions, 0 deletions
diff --git a/tests/basics/class_store_class.py b/tests/basics/class_store_class.py
new file mode 100644
index 000000000..60f65220d
--- /dev/null
+++ b/tests/basics/class_store_class.py
@@ -0,0 +1,47 @@
+# Inspired by urlparse.py from CPython 3.3 stdlib
+# There was a bug in MicroPython that under some conditions class stored
+# in instance attribute later was returned "bound" as if it was a method,
+# which caused class constructor to receive extra argument.
+try:
+ from collections import namedtuple
+except ImportError:
+ from _collections import namedtuple
+
+_DefragResultBase = namedtuple('DefragResult', 'foo bar')
+
+class _ResultMixinStr(object):
+ def encode(self):
+ return self._encoded_counterpart(*(x.encode() for x in self))
+
+class _ResultMixinBytes(object):
+ def decode(self):
+ return self._decoded_counterpart(*(x.decode() for x in self))
+
+class DefragResult(_DefragResultBase, _ResultMixinStr):
+ pass
+
+class DefragResultBytes(_DefragResultBase, _ResultMixinBytes):
+ pass
+
+
+DefragResult._encoded_counterpart = DefragResultBytes
+DefragResultBytes._decoded_counterpart = DefragResult
+
+# Due to differences in type and native subclass printing,
+# the best thing we can do here is to just test that no exceptions
+# happen
+
+#print(DefragResult, DefragResult._encoded_counterpart)
+#print(DefragResultBytes, DefragResultBytes._decoded_counterpart)
+
+o1 = DefragResult("a", "b")
+#print(o1, type(o1))
+o2 = DefragResultBytes("a", "b")
+#print(o2, type(o2))
+
+#print(o1._encoded_counterpart)
+_o1 = o1.encode()
+print(_o1[0], _o1[1])
+#print(_o1, type(_o1))
+
+print("All's ok")
diff --git a/tests/basics/frozenset1.py b/tests/basics/frozenset1.py
new file mode 100644
index 000000000..02a5bf8c5
--- /dev/null
+++ b/tests/basics/frozenset1.py
@@ -0,0 +1,14 @@
+# basic sets
+
+try:
+ frozenset
+except NameError:
+ print("SKIP")
+ import sys
+ sys.exit()
+
+s = frozenset({1})
+print(s)
+
+s = frozenset({3, 4, 3, 1})
+print(sorted(s))
diff --git a/tests/basics/frozenset_add.py b/tests/basics/frozenset_add.py
new file mode 100644
index 000000000..50615775b
--- /dev/null
+++ b/tests/basics/frozenset_add.py
@@ -0,0 +1,12 @@
+try:
+ frozenset
+except NameError:
+ print("SKIP")
+ import sys
+ sys.exit()
+
+s = frozenset({1, 2, 3, 4})
+try:
+ print(s.add(5))
+except AttributeError:
+ print("AttributeError")
diff --git a/tests/basics/frozenset_binop.py b/tests/basics/frozenset_binop.py
new file mode 100644
index 000000000..5cc07e9e1
--- /dev/null
+++ b/tests/basics/frozenset_binop.py
@@ -0,0 +1,36 @@
+try:
+ frozenset
+except NameError:
+ print("SKIP")
+ import sys
+ sys.exit()
+
+sets = [
+ frozenset(), frozenset({1}), frozenset({1, 2}), frozenset({1, 2, 3}), frozenset({2, 3}),
+ frozenset({2, 3, 5}), frozenset({5}), frozenset({7})
+]
+for s in sets:
+ for t in sets:
+ print(sorted(s), '|', sorted(t), '=', sorted(s | t))
+ print(sorted(s), '^', sorted(t), '=', sorted(s ^ t))
+ print(sorted(s), '&', sorted(t), '=', sorted(s & t))
+ print(sorted(s), '-', sorted(t), '=', sorted(s - t))
+ u = s.copy()
+ u |= t
+ print(sorted(s), "|=", sorted(t), '-->', sorted(u))
+ u = s.copy()
+ u ^= t
+ print(sorted(s), "^=", sorted(t), '-->', sorted(u))
+ u = s.copy()
+ u &= t
+ print(sorted(s), "&=", sorted(t), "-->", sorted(u))
+ u = s.copy()
+ u -= t
+ print(sorted(s), "-=", sorted(t), "-->", sorted(u))
+
+ print(sorted(s), '==', sorted(t), '=', s == t)
+ print(sorted(s), '!=', sorted(t), '=', s != t)
+ print(sorted(s), '>', sorted(t), '=', s > t)
+ print(sorted(s), '>=', sorted(t), '=', s >= t)
+ print(sorted(s), '<', sorted(t), '=', s < t)
+ print(sorted(s), '<=', sorted(t), '=', s <= t)
diff --git a/tests/basics/frozenset_copy.py b/tests/basics/frozenset_copy.py
new file mode 100644
index 000000000..92e115d34
--- /dev/null
+++ b/tests/basics/frozenset_copy.py
@@ -0,0 +1,12 @@
+try:
+ frozenset
+except NameError:
+ print("SKIP")
+ import sys
+ sys.exit()
+
+s = frozenset({1, 2, 3, 4})
+t = s.copy()
+print(type(t))
+for i in s, t:
+ print(sorted(i))
diff --git a/tests/basics/frozenset_difference.py b/tests/basics/frozenset_difference.py
new file mode 100644
index 000000000..3d142f959
--- /dev/null
+++ b/tests/basics/frozenset_difference.py
@@ -0,0 +1,21 @@
+try:
+ frozenset
+except NameError:
+ print("SKIP")
+ import sys
+ sys.exit()
+
+l = [1, 2, 3, 4]
+s = frozenset(l)
+outs = [s.difference(),
+ s.difference(frozenset({1})),
+ s.difference(frozenset({1}), [1, 2]),
+ s.difference(frozenset({1}), {1, 2}, {2, 3})]
+for out in outs:
+ print(type(out), sorted(out))
+
+s = frozenset(l)
+try:
+ print(s.difference_update({1}))
+except AttributeError:
+ print("AttributeError")
diff --git a/tests/basics/int1.py b/tests/basics/int1.py
index 2daef9bf0..e8a0a0468 100644
--- a/tests/basics/int1.py
+++ b/tests/basics/int1.py
@@ -46,6 +46,7 @@ print(int('0B100', 2))
print(int('0100', 2))
print(int(' \t 0o12', 8))
print(int('0o12 \t ', 8))
+print(int(b"12", 10))
def test(value, base):
diff --git a/tests/basics/list_slice_assign.py b/tests/basics/list_slice_assign.py
new file mode 100644
index 000000000..baa9a0081
--- /dev/null
+++ b/tests/basics/list_slice_assign.py
@@ -0,0 +1,36 @@
+# test slices; only 2 argument version supported by Micro Python at the moment
+x = list(range(10))
+
+# Assignment
+l = list(x)
+l[1:3] = [10, 20]
+print(l)
+l = list(x)
+l[1:3] = [10]
+print(l)
+l = list(x)
+l[1:3] = []
+print(l)
+l = list(x)
+del l[1:3]
+print(l)
+
+l = list(x)
+l[:3] = [10, 20]
+print(l)
+l = list(x)
+l[:3] = []
+print(l)
+l = list(x)
+del l[:3]
+print(l)
+
+l = list(x)
+l[:-3] = [10, 20]
+print(l)
+l = list(x)
+l[:-3] = []
+print(l)
+l = list(x)
+del l[:-3]
+print(l)
diff --git a/tests/basics/namedtuple1.py b/tests/basics/namedtuple1.py
index 98628cc54..05dd15bd1 100644
--- a/tests/basics/namedtuple1.py
+++ b/tests/basics/namedtuple1.py
@@ -16,6 +16,8 @@ print(bool(t))
print(t + t)
print(t * 3)
+print([f for f in t])
+
print(isinstance(t, tuple))
try:
diff --git a/tests/basics/string_partition.py b/tests/basics/string_partition.py
index ad70d0250..fe0070a65 100644
--- a/tests/basics/string_partition.py
+++ b/tests/basics/string_partition.py
@@ -27,3 +27,14 @@ except ValueError:
print("Raised ValueError")
else:
print("Did not raise ValueError")
+
+# Bytes
+print(b"abba".partition(b'b'))
+try:
+ print(b"abba".partition('b'))
+except TypeError:
+ print("Raised TypeError")
+try:
+ print("abba".partition(b'b'))
+except TypeError:
+ print("Raised TypeError")
diff --git a/tests/basics/string_strip.py b/tests/basics/string_strip.py
index 8e03eff93..4684c2a24 100644
--- a/tests/basics/string_strip.py
+++ b/tests/basics/string_strip.py
@@ -10,3 +10,13 @@ print('www.example.com'.lstrip('cmowz.'))
print(' spacious '.rstrip())
print('mississippi'.rstrip('ipz'))
+
+print(b'mississippi'.rstrip(b'ipz'))
+try:
+ print(b'mississippi'.rstrip('ipz'))
+except TypeError:
+ print("TypeError")
+try:
+ print('mississippi'.rstrip(b'ipz'))
+except TypeError:
+ print("TypeError")
diff --git a/tests/basics/string_upperlow.py b/tests/basics/string_upperlow.py
new file mode 100644
index 000000000..950ea24d1
--- /dev/null
+++ b/tests/basics/string_upperlow.py
@@ -0,0 +1,4 @@
+print("".lower())
+print(" t\tn\nr\rv\vf\f".upper())
+print(" T E S T".lower())
+print("*@a1b2cabc_[]/\\".upper())
diff --git a/tests/basics/subclass-native5.py b/tests/basics/subclass-native5.py
new file mode 100644
index 000000000..6127dae33
--- /dev/null
+++ b/tests/basics/subclass-native5.py
@@ -0,0 +1,12 @@
+# Subclass from 2 bases explicitly subclasses from object
+
+class Base1(object):
+ pass
+
+class Base2(object):
+ pass
+
+class Sub(Base1, Base2):
+ pass
+
+o = Sub()
diff --git a/tests/basics/subclass_native_cmp.py b/tests/basics/subclass_native_cmp.py
new file mode 100644
index 000000000..1a095bfa1
--- /dev/null
+++ b/tests/basics/subclass_native_cmp.py
@@ -0,0 +1,9 @@
+# Test calling non-special method inherited from native type
+
+class mytuple(tuple):
+ pass
+
+t = mytuple((1, 2, 3))
+print(t)
+print(t == (1, 2, 3))
+print((1, 2, 3) == t)
diff --git a/tests/basics/subclass_native_specmeth.py b/tests/basics/subclass_native_specmeth.py
new file mode 100644
index 000000000..91ffc9624
--- /dev/null
+++ b/tests/basics/subclass_native_specmeth.py
@@ -0,0 +1,18 @@
+# Test calling non-special method inherited from native type
+
+class mylist(list):
+ pass
+
+l = mylist([1, 2, 3])
+print(l)
+print([e for e in l])
+
+
+class mylist2(list):
+
+ def __iter__(self):
+ return iter([10, 20, 30])
+
+l = mylist2([1, 2, 3])
+print(l)
+print([e for e in l])