Skip to content

Commit 1c8f01b

Browse files
committed
adding code to be used for demo
1 parent 513b32e commit 1c8f01b

File tree

7 files changed

+202
-0
lines changed

7 files changed

+202
-0
lines changed

demo/README.md

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
# pytest-inline demo
2+
3+
Run all demos
4+
```
5+
pytest
6+
```
7+
8+
Run an example basic inline test (try: uncomment the failing inline test in example.py and see how the output changes):
9+
```
10+
pytest example.py
11+
```
12+
13+
Explore features supported by pytest-inline in features.py
14+
```
15+
pytest -vv features.py
16+
pytest -vv features.py --inlinetest-group=foo
17+
pytest -vv features.py --inlinetest-order=bar --inlinetest-order=foo
18+
```
19+
20+
Run inline tests in parallel
21+
```
22+
pip install pytest-xdist
23+
pytest parallel/ # sequential
24+
pytest -n 4 parallel/ # parallel using 4 threads
25+
```
26+

demo/example.py

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
# Taken from https://github.com/google-research/bert modeling.py
2+
import collections
3+
import re
4+
from inline import itest
5+
6+
def get_assignment_map_from_checkpoint(tvars, init_checkpoint):
7+
"""Compute the union of the current variables and checkpoint variables."""
8+
assignment_map = {}
9+
initialized_variable_names = {}
10+
11+
name_to_variable = collections.OrderedDict()
12+
for var in tvars:
13+
name = var.name
14+
# statement under test
15+
m = re.match("^(.*):\\d+$", name)
16+
# inline test
17+
itest().given(name, "a:0").check_eq(m.group(1), "a")
18+
# a failing inline test
19+
# itest().given(name, "a:0").check_eq(m.group(1), "aaa")
20+
if m is not None:
21+
name = m.group(1)
22+
name_to_variable[name] = var
23+
24+
init_vars = tf.train.list_variables(init_checkpoint)
25+
26+
assignment_map = collections.OrderedDict()
27+
for x in init_vars:
28+
(name, var) = (x[0], x[1])
29+
if name not in name_to_variable:
30+
continue
31+
assignment_map[name] = name
32+
initialized_variable_names[name] = 1
33+
initialized_variable_names[name + ":0"] = 1
34+
35+
return (assignment_map, initialized_variable_names)

demo/features.py

Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
import time
2+
from inline import itest
3+
4+
### display name: customize test name, default name is filename+line number
5+
6+
def inline_test_with_name(a):
7+
b = a + 1
8+
itest(test_name="test-with-name").given(a, 1).check_eq(b, 2)
9+
10+
11+
### parameterized tests: pass different sets of inputs to tests
12+
13+
def inline_test_parameterized(a):
14+
b = a + 1
15+
itest(parameterized=True).given(a, [1, 2, 3]).check_eq(b, [2, 3, 4])
16+
17+
18+
### repeated tests: repeat a test a specified number of times
19+
20+
def inline_test_repeated(a):
21+
b = a + 1
22+
itest(repeated=3).given(a, 1).check_eq(b, 2)
23+
24+
25+
### disabled tests: disable a test
26+
27+
def inline_test_disabled(a):
28+
b = a + 1
29+
itest(disabled=True).given(a, 1).check_eq(b, "this test is disabled")
30+
31+
32+
### timeout: fail a test if the execution time exceeds a given duration
33+
34+
def slow_method():
35+
time.sleep(0.01)
36+
# time.sleep(0.1)
37+
return 1
38+
39+
def inline_test_with_timeout(a):
40+
b = a + 1
41+
# this inline test will fail if you increase the sleep time in slow_method
42+
itest(timeout=0.1, test_name="timeout-expected-to-fail").given(a, slow_method()).check_eq(b, 2)
43+
44+
45+
### assumptions: execute test when the assumption is satisfied
46+
47+
def inline_test_with_assume(a):
48+
b = a + 1
49+
itest().assume(False).given(a, 1).check_eq(b, 2)
50+
51+
52+
### more assertions
53+
54+
def inline_test_assertions(a):
55+
b = a + 1
56+
itest().given(a, 1).check_neq(b, 1)
57+
58+
c = None if b == 2 else []
59+
itest().given(b, 2).check_none(c)
60+
itest().given(b, 1).check_not_none(c)
61+
62+
d = c if b == 2 else list(c)
63+
itest().given(b, 2).given(c, []).check_same(c, d)
64+
itest().given(b, 1).given(c, []).check_not_same(c, d)
65+
66+
67+
### tagged tests: tag tests for filtering
68+
### run tests in order: Run some tests first
69+
70+
def inline_test_with_tags(a):
71+
b = a + 1
72+
itest(test_name="foo1", tag=["foo"]).given(a, 1).check_eq(b, 2)
73+
itest(test_name="foo2", tag=["foo"]).given(a, 2).check_eq(b, 3)
74+
itest(test_name="bar3", tag=["bar"]).given(a, 3).check_eq(b, 4)
75+
itest(test_name="bar4", tag=["bar"]).given(a, 4).check_eq(b, 5)

demo/parallel/a.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
from inline import itest
2+
3+
a = 0
4+
a = a + 1
5+
itest("1", tag = ["add"]).given(a, 1).check_eq(a, 2)
6+
itest("1", tag = ["add"]).given(a, 1).check_eq(a, 2)
7+
itest("1", tag = ["add"]).given(a, 1).check_eq(a, 2)
8+
a = a + 2
9+
itest("2").given(a, 1).check_eq(a, 3)
10+
itest("2").given(a, 1).check_eq(a, 3)
11+
itest("2").given(a, 1).check_eq(a, 3)
12+
a = a - 1
13+
itest("3", tag = ["minus"]).given(a, 1).check_eq(a, 0)
14+
itest("3", tag = ["minus"]).given(a, 1).check_eq(a, 0)
15+
itest("3", tag = ["minus"]).given(a, 1).check_eq(a, 0)

demo/parallel/b.py

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
from inline import itest
2+
import time
3+
4+
sleep = 0.1
5+
b = 0
6+
b = b + 1
7+
itest("1", tag = ["add"]).given(b, 1).check_eq(b, 2).check_eq(time.sleep(sleep), None)
8+
itest("1", tag = ["add"]).given(b, 1).check_eq(b, 2)
9+
itest("1", tag = ["add"]).given(b, 1).check_eq(b, 2)
10+
b = b + 2
11+
itest("2").given(b, 1).check_eq(b, 3).check_eq(time.sleep(sleep), None)
12+
itest("2").given(b, 1).check_eq(b, 3)
13+
itest("2").given(b, 1).check_eq(b, 3)
14+
b = b - 1
15+
itest("3", tag = ["minus"]).given(b, 1).check_eq(b, 0).check_eq(time.sleep(sleep), None)
16+
itest("3", tag = ["minus"]).given(b, 1).check_eq(b, 0)
17+
itest("3", tag = ["minus"]).given(b, 1).check_eq(b, 0)

demo/parallel/c.py

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
from inline import itest
2+
import time
3+
4+
sleep = 0.2
5+
c = 0
6+
c = c + 1
7+
itest("1", tag = ["add"]).given(c, 1).check_eq(c, 2).check_eq(time.sleep(sleep), None)
8+
itest("1", tag = ["add"]).given(c, 1).check_eq(c, 2)
9+
itest("1", tag = ["add"]).given(c, 1).check_eq(c, 2)
10+
c = c + 2
11+
itest("2").given(c, 1).check_eq(c, 3).check_eq(time.sleep(sleep), None)
12+
itest("2").given(c, 1).check_eq(c, 3)
13+
itest("2").given(c, 1).check_eq(c, 3)
14+
c = c - 1
15+
itest("3", tag = ["minus"]).given(c, 1).check_eq(c, 0).check_eq(time.sleep(sleep), None)
16+
itest("3", tag = ["minus"]).given(c, 1)
17+
itest("3", tag = ["minus"]).given(c, 1)

demo/parallel/d.py

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
from inline import itest
2+
import time
3+
4+
sleep = 0.1
5+
d = 0
6+
d = d + 1
7+
itest("1", tag = ["add"]).given(d, 1).check_eq(d, 2).check_eq(time.sleep(sleep), None)
8+
itest("1", tag = ["add"]).given(d, 1).check_eq(d, 2)
9+
itest("1", tag = ["add"]).given(d, 1).check_eq(d, 2)
10+
d = d + 2
11+
itest("2").given(d, 1).check_eq(d, 3).check_eq(time.sleep(sleep), None)
12+
itest("2").given(d, 1).check_eq(d, 3)
13+
itest("2").given(d, 1).check_eq(d, 3)
14+
d = d - 1
15+
itest("3", tag = ["minus"]).given(d, 1).check_eq(d, 0).check_eq(time.sleep(sleep), None)
16+
itest("3", tag = ["minus"]).given(d, 1).check_eq(d, 0)
17+
itest("3", tag = ["minus"]).given(d, 1).check_eq(d, 0)

0 commit comments

Comments
 (0)