def test_named_vs_positional(stu): s = setup_state(sol_code='round(1.23, 2)', stu_code=stu) passes(s.check_function('round').check_args(0).has_equal_value()) passes(s.check_function('round').check_args("number").has_equal_value()) passes(s.check_function('round').check_args(1).has_equal_value()) passes(s.check_function('round').check_args("ndigits").has_equal_value())
def test_test_function_do_eval(stu, do_eval, passes): s = setup_state(stu, "round(a)", pec="a,b = 1,2") with helper.verify_sct(passes): s.test_function("round", do_eval=do_eval)
def test_test_function_v2_params(stu, passes): s = setup_state(stu, "my_fun(1, b = 2)", pec="def my_fun(a, b): pass") with helper.verify_sct(passes): s.test_function_v2("my_fun", params=["a"])
def test_check_function_parser_mappings_2(): code = "import numpy as np\nfor x in range(0): np.random.randint(1, 7)" s = setup_state(code, code) s.check_for_loop().check_body().check_function("numpy.random.randint")
def test_test_function_basic(stu, passes): s = setup_state(stu, "my_fun(a = 1, b = 2)", pec="def my_fun(a, b): pass") with helper.verify_sct(passes): s.test_function("my_fun")
def test_builtins(name, params, arguments): code = "%s(%s)" % (name, arguments) s = setup_state(code, code) fun_state = s.check_function(name) for param in params: fun_state.check_args(param).has_equal_value()
def test_sig_from_params(stu, passes): s = setup_state(stu, "max([1, 2, 3, 4])") with helper.verify_sct(passes): sig = sig_from_params(param("iterable", param.POSITIONAL_ONLY)) s.check_function("max", signature=sig).check_args(0).has_equal_value()
def test_has_equal_output_basic(stu, passes): s = setup_state(stu, 'x = {"a":1, "b":2, "c": 3}') with helper.verify_sct(passes): s.test_expression_output(expr_code='print(x["a"])')
def test_has_equal_value_basic(stu, passes): s = setup_state(stu, "a = 2") with helper.verify_sct(passes): s.has_equal_value(expr_code="a")
def test_has_expr_override_pass_2(): 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(override=[1, 2, 3]))
def test_has_equal_value_name(stu, passes): s = setup_state(stu, "a = 0\nfor i in range(0): a = 1") with helper.verify_sct(passes): s.check_for_loop().check_body().has_equal_value(name="a")
def test_chaining(stu, correct): s = setup_state(stu_code=stu, sol_code="import numpy.random as rand") with helper.verify_sct(correct): s.has_import("numpy.random")
def test_same_as(stu, same_as, correct): s = setup_state(stu_code=stu, sol_code="import pandas as pd") with helper.verify_sct(correct): s.has_import("pandas", same_as=same_as)
def test_basic(stu, correct): s = setup_state(stu_code=stu, sol_code="import pandas as pd") with helper.verify_sct(correct): s.has_import("pandas")
def test_list_methods(fun, argument): code = "x.%s(2)" % fun s = setup_state(code, code, "x = [1, 2, 3]") s.check_function("x.%s" % fun).check_args(argument).has_equal_value()
def test_has_equal_output_for(stu, passes, context_vals): s = setup_state(stu, "for i in range(10):\n print(i)") with helper.verify_sct(passes): s.check_for_loop().check_body().has_equal_output( context_vals=context_vals)
def test_center(): code = "x.center(10, 's')" s = setup_state(code, code, "x = 'test'") fun_state = s.check_function("x.center") fun_state.check_args("width").has_equal_value() fun_state.check_args("fillchar").has_equal_value()
def test_copy_functionality(copy, passes): s = setup_state("a = [1]", "a = [2]") with helper.verify_sct(passes): s.has_equal_value(expr_code="a[0] = 3", name="a", copy=copy).has_equal_value(expr_code="a", name="a")
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_basic_has_printout(stu, correct): sol = 'print(1, 2, 3)' s = setup_state(stu_code=stu, sol_code=sol) with helper.verify_sct(correct): s.has_printout(0)
def test_check_function_parser_mappings_1(): code = "import numpy as np\nnp.random.randint(1, 7)" s = setup_state(code, code) s.check_function("numpy.random.randint")
def test_basic_has_printout_failing_custom(): sol = 'print(1, 2, 3)' stu = 'print(1, 2)' s = setup_state(stu_code=stu, sol_code=sol) with pytest.raises(TF, match='wrong'): s.has_printout(0, not_printed_msg='wrong')
def test_check_function_basic(stu, passes, a_arg, b_arg): s = setup_state(stu, "my_fun(1, 2)", pec="def my_fun(a, b): pass") with helper.verify_sct(passes): s.check_function("my_fun").multi( check_args(a_arg).has_equal_value(), check_args(b_arg).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_test_function_keywords(stu, passes): s = setup_state(stu, "my_fun(1, b = 2)", pec="def my_fun(a, b): pass") with helper.verify_sct(passes): s.test_function("my_fun", args=[], keywords=["b"])
def test_numpy_builtins(name, values, arguments): code = "%s(%s)" % (name, values) s = setup_state(code, code, pec="import numpy") fun_state = s.check_function(name) for arg in arguments: fun_state.check_args(arg).has_equal_value()
def test_test_function_print(stu, passes): s = setup_state(stu, "print(1)") with helper.verify_sct(passes): s.test_function("print")
def test_math_builtins(): code = "m.radians(100)" s = setup_state(code, code, pec="import math as m") s.check_function("math.radians").check_args("x").has_equal_value()
def test_test_function_v2_do_eval(stu, do_eval, passes): s = setup_state(stu, "round(a)", pec="a,b = 1,2") with helper.verify_sct(passes): s.test_function_v2("round", params=["number"], do_eval=[do_eval])
def check_function_multiple_times(): from pythonwhat.local import setup_state s = setup_state(sol_code="print('test')", stu_code="print('test')") passes(s.check_function('print')) passes(s.check_function('print').check_args(0)) passes(s.check_function('print').check_args('value'))