summaryrefslogtreecommitdiff
path: root/tests/micropython/viper_misc3.py
blob: 7b211e5dd8c7d34503b935f53c6b3d73b25651a5 (plain)
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
# Miscellaneous viper tests.

import micropython


# a for loop
@micropython.viper
def viper_for(a: int, b: int) -> int:
    total = 0
    for x in range(a, b):
        total += x
    return total


print(viper_for(10, 10000))


# accessing a global
@micropython.viper
def viper_access_global():
    global gl
    gl = 1
    return gl


print(viper_access_global(), gl)


# calling print with object and int types
@micropython.viper
def viper_print(x, y: int):
    print(x, y + 1)


viper_print(1, 2)


# convert constants to objects in tuple
@micropython.viper
def viper_tuple_consts(x):
    return (x, 1, False, True)


print(viper_tuple_consts(0))


# making a tuple from an object and an int
@micropython.viper
def viper_tuple(x, y: int):
    return (x, y + 1)


print(viper_tuple(1, 2))


# making a list from an object and an int
@micropython.viper
def viper_list(x, y: int):
    return [x, y + 1]


print(viper_list(1, 2))


# making a set from an object and an int
@micropython.viper
def viper_set(x, y: int):
    return {x, y + 1}


print(sorted(list(viper_set(1, 2))))


# raising an exception
@micropython.viper
def viper_raise(x: int):
    raise OSError(x)


try:
    viper_raise(1)
except OSError as e:
    print(repr(e))


# calling GC after defining the function
@micropython.viper
def viper_gc() -> int:
    return 1


print(viper_gc())
import gc

gc.collect()
print(viper_gc())