def test_args_kwargs_check_function_passing(argspec): code = 'my_fun(1, 2, 3, 4, c = 5)' s = setup_state(pec='def my_fun(a, b, *args, **kwargs): pass', stu_code=code, sol_code=code) x = s.check_function('my_fun') helper.passes(x.check_args(argspec).has_equal_value())
def test_same_as(stu, same_as, correct): s = setup_state(stu_code=stu, sol_code='import pandas as pd') if correct: helper.passes(s.has_import('pandas', same_as=same_as)) else: with pytest.raises(TF): s.has_import('pandas', same_as=same_as)
def test_chaining(stu, correct): s = setup_state(stu_code=stu, sol_code='import numpy.random as rand') if correct: helper.passes(s.has_import('numpy.random')) else: with pytest.raises(TF): s.has_import('numpy.random')
def check_function_sig_false(): code = "f(color = 'blue')" s = setup_state(pec="def f(*args, **kwargs): pass", sol_code=code, stu_code=code) helper.passes( s.check_function('f', 0, signature=False).check_args('color').has_equal_ast())
def test_method_2(): code = "df[df.b == 'x'].a.sum()" s = setup_state(sol_code = code, stu_code = code, pec = "import pandas as pd; df = pd.DataFrame({'a': [1, 2, 3], 'b': ['x', 'x', 'y']})") helper.passes(s.check_function('df.a.sum', signature = False)) from pythonwhat.signatures import sig_from_obj import pandas as pd helper.passes(s.check_function('df.a.sum', signature = sig_from_obj(pd.Series.sum)))
def test_named_vs_positional(stu): s = setup_state(sol_code='round(1.23, 2)', stu_code=stu) helper.passes(s.check_function('round').check_args(0).has_equal_value()) helper.passes( s.check_function('round').check_args("number").has_equal_value()) helper.passes(s.check_function('round').check_args(1).has_equal_value()) helper.passes( s.check_function('round').check_args("ndigits").has_equal_value())
def check_function_multiple_times(): from pythonwhat.local import setup_state s = setup_state(sol_code = "print('test')", stu_code = "print('test')") helper.passes(s.check_function('print')) helper.passes(s.check_function('print').check_args(0)) helper.passes(s.check_function('print').check_args('value'))
def test_basic_check_function_passing(arg, stu): pec = 'def my_fun(a, b): pass' sol = 'my_fun(1, 2)' s = setup_state(stu_code=stu, sol_code=sol, pec=pec) helper.passes(s.check_function('my_fun')) helper.passes(s.check_function('my_fun').check_args(arg)) helper.passes(s.check_function('my_fun').check_args(arg).has_equal_value())
def test_method_1(): code = "df.groupby('b').sum()" s = setup_state(sol_code = code, stu_code = code, pec = "import pandas as pd; df = pd.DataFrame({'a': [1, 2, 3], 'b': ['x', 'x', 'y']})") helper.passes(s.check_function('df.groupby').check_args(0).has_equal_value()) helper.passes(s.check_function('df.groupby.sum', signature = False)) from pythonwhat.signatures import sig_from_obj import pandas as pd helper.passes(s.check_function('df.groupby.sum', signature = sig_from_obj(pd.Series.sum)))
def test_basic_check_function_failing(): pec = 'def my_fun(a=1): pass' sol = 'my_fun(1)' s = setup_state(stu_code='', sol_code=sol, pec=pec) with pytest.raises(TF): s.check_function('my_fun') s = setup_state(stu_code='my_fun()', sol_code=sol, pec=pec) helper.passes(s.check_function('my_fun')) with pytest.raises(TF): s.check_function('my_fun').check_args('a') s = setup_state(stu_code='my_fun(a = 10)', sol_code=sol, pec=pec) helper.passes(s.check_function('my_fun')) helper.passes(s.check_function('my_fun').check_args('a')) with pytest.raises(TF): s.check_function('my_fun').check_args('a').has_equal_value()
def test_has_printout_multiple(stu): sol = 'print("randomness")\nprint(1, 2, 3)' s = setup_state(stu_code=stu, sol_code=sol) helper.passes(s.has_printout(1))
def test_has_expr_override_pass(): stu = 'x = [1, 2, 3]' sol = 'x = [1, 2, 5]' s = setup_state(stu_code=stu, sol_code=sol) helper.passes(s.check_object('x').has_equal_value(expr_code = 'x[2]', override=3))
def check_function_sig_false_override(): s = setup_state(pec="def f(*args, **kwargs): pass", sol_code="f(color = 'blue')", stu_code="f(c = 'blue')") helper.passes(s.override("f(c = 'blue')").check_function('f', 0, signature=False)\ .check_args('c').has_equal_ast())
def test_check_function_with_has_equal_value(): code = 'import numpy as np\narr = np.array([1, 2, 3, 4, 5])\nnp.mean(arr)' s = setup_state(stu_code=code, sol_code=code) helper.passes(s.check_function('numpy.mean').has_equal_value())
def test_check_object_single_process(): state1pid = setup_state('x = 3', '', pid=1) helper.passes(state1pid.check_object('x'))
def test_basic_has_printout_passing(stu): sol = 'print(1, 2, 3)' s = setup_state(stu_code=stu, sol_code=sol) helper.passes(s.has_printout(0))