コード例 #1
0
def test_linear_too_few_comparisons():
    FormulaGrader.set_default_comparer(LinearComparer())
    grader = FormulaGrader(samples=2)
    with raises(
            ConfigError,
            match='Cannot perform linear comparison with less than 3 samples'):
        grader('1.5', '1.5')

    # Ensure that NumericalGrader does not use the same default comparer as FormulaGrader
    grader = NumericalGrader()
    assert grader('1.5', '1.5')['ok']

    FormulaGrader.reset_default_comparer()
コード例 #2
0
def test_default_comparer():
    """Tests setting and resetting default_comparer"""
    def silly_comparer(comparer_params_eval, student_eval, utils):
        return utils.within_tolerance(1, student_eval)

    FormulaGrader.set_default_comparer(silly_comparer)
    silly_grader = FormulaGrader(answers='pi')
    FormulaGrader.reset_default_comparer()
    grader = FormulaGrader(answers='pi')

    silly_grader.config['answers'][0]['expect']['comparer'] is silly_comparer
    assert silly_grader(None, '1')['ok']
    grader.config['answers'][0]['expect']['comparer'] is equality_comparer
    assert not grader(None, '1')['ok']
    assert grader(None, '3.141592653')['ok']
コード例 #3
0
def test_scaling_partial_credit():
    FormulaGrader.set_default_comparer(LinearComparer())
    grader = FormulaGrader(answers=('m*c^2', {
        'expect': 'm*c^3',
        'grade_decimal': 0.1
    }),
                           variables=['m', 'c'])
    FormulaGrader.reset_default_comparer()

    expected = {
        'ok':
        'partial',
        'grade_decimal':
        0.1 * 0.5,
        # This message is a bit awkward ... in this situation, probably better to set up
        # a different LinearComparer for the common wrong answers, if you want to do that.
        # Or only use an linear comparer for the correct answer, and use equality_compaer
        # for the common wrong answers.
        # Anyway, I'm just testing the partial credit scaling
        'msg':
        'The submitted answer differs from an expected answer by a constant factor.',
    }

    assert grader(None, '4*m*c^3') == expected