diff --git a/question/behaviour/deferredcbm/tests/behaviour_type_test.php b/question/behaviour/deferredcbm/tests/behaviour_type_test.php index 0d1ab506ad8..6cff5fef789 100644 --- a/question/behaviour/deferredcbm/tests/behaviour_type_test.php +++ b/question/behaviour/deferredcbm/tests/behaviour_type_test.php @@ -18,6 +18,7 @@ namespace qbehaviour_deferredcbm; use question_display_options; use question_engine; +use question_testcase; defined('MOODLE_INTERNAL') || die(); @@ -134,8 +135,8 @@ class behaviour_type_test extends \qbehaviour_walkthrough_test_base { } public function test_calculate_bonus() { - $this->assertEquals(0.05, $this->behaviourtype->calculate_bonus(1, 1/2)); - $this->assertEquals(-0.01, $this->behaviourtype->calculate_bonus(2, 9/10)); - $this->assertEquals(0, $this->behaviourtype->calculate_bonus(3, 1)); + $this->assertEqualsWithDelta(0.05, $this->behaviourtype->calculate_bonus(1, 1 / 2), question_testcase::GRADE_DELTA); + $this->assertEqualsWithDelta(-0.01, $this->behaviourtype->calculate_bonus(2, 9 / 10), question_testcase::GRADE_DELTA); + $this->assertEqualsWithDelta(0, $this->behaviourtype->calculate_bonus(3, 1), question_testcase::GRADE_DELTA); } } diff --git a/question/engine/tests/helpers.php b/question/engine/tests/helpers.php index b3865a4dec8..a1abe623985 100644 --- a/question/engine/tests/helpers.php +++ b/question/engine/tests/helpers.php @@ -480,6 +480,11 @@ abstract class data_loading_method_test_base extends advanced_testcase { abstract class question_testcase extends advanced_testcase { + /** + * Tolerance accepted in some unit tests when float operations are involved. + */ + const GRADE_DELTA = 0.00000005; + public function assert($expectation, $compare, $notused = '') { if (get_class($expectation) === 'question_pattern_expectation') { diff --git a/question/type/multianswer/tests/question_test.php b/question/type/multianswer/tests/question_test.php index ae38468730a..407d8b97487 100644 --- a/question/type/multianswer/tests/question_test.php +++ b/question/type/multianswer/tests/question_test.php @@ -19,6 +19,7 @@ namespace qtype_multianswer; use question_attempt_step; use question_display_options; use question_state; +use question_testcase; defined('MOODLE_INTERNAL') || die(); @@ -199,7 +200,7 @@ class question_test extends \advanced_testcase { 2 => array('sub1_answer' => 'Owl', 'sub2_answer' => $right), ); $finalgrade = $question->compute_final_grade($responses, 1); - $this->assertEquals(1 / 3 * (1 - 0.2) + 2 / 3 * (1 - 2 * 0.2), $finalgrade); + $this->assertEqualsWithDelta(1 / 3 * (1 - 0.2) + 2 / 3 * (1 - 2 * 0.2), $finalgrade, question_testcase::GRADE_DELTA); // Get subquestion 1 right at 3rd try and subquestion 2 right at 2nd try. $responses = array(0 => array('sub1_answer' => 'Dog', 'sub2_answer' => $wrong), @@ -208,7 +209,7 @@ class question_test extends \advanced_testcase { 3 => array('sub1_answer' => 'Owl', 'sub2_answer' => $right), ); $finalgrade = $question->compute_final_grade($responses, 1); - $this->assertEquals(1 / 3 * (1 - 2 * 0.2) + 2 / 3 * (1 - 0.2), $finalgrade); + $this->assertEqualsWithDelta(1 / 3 * (1 - 2 * 0.2) + 2 / 3 * (1 - 0.2), $finalgrade, question_testcase::GRADE_DELTA); // Get subquestion 1 right at 4th try and subquestion 2 right at 1st try. $responses = array(0 => array('sub1_answer' => 'Dog', 'sub2_answer' => $right), @@ -217,7 +218,7 @@ class question_test extends \advanced_testcase { 3 => array('sub1_answer' => 'Owl', 'sub2_answer' => $right), ); $finalgrade = $question->compute_final_grade($responses, 1); - $this->assertEquals(1 / 3 * (1 - 3 * 0.2) + 2 / 3, $finalgrade); + $this->assertEqualsWithDelta(1 / 3 * (1 - 3 * 0.2) + 2 / 3, $finalgrade, question_testcase::GRADE_DELTA); // Get subquestion 1 right at 4th try and subquestion 2 right 3rd try. // Subquestion 2 was right at 1st try, but last change is at 3rd try. @@ -227,7 +228,7 @@ class question_test extends \advanced_testcase { 3 => array('sub1_answer' => 'Owl', 'sub2_answer' => $right), ); $finalgrade = $question->compute_final_grade($responses, 1); - $this->assertEquals(1 / 3 * (1 - 3 * 0.2) + 2 / 3 * (1 - 2 * 0.2), $finalgrade); + $this->assertEqualsWithDelta(1 / 3 * (1 - 3 * 0.2) + 2 / 3 * (1 - 2 * 0.2), $finalgrade, question_testcase::GRADE_DELTA); // Incomplete responses. Subquestion 1 is right at 4th try and subquestion 2 at 3rd try. $responses = array(0 => array('sub1_answer' => 'Dog'), @@ -236,7 +237,7 @@ class question_test extends \advanced_testcase { 3 => array('sub1_answer' => 'Owl', 'sub2_answer' => $right), ); $finalgrade = $question->compute_final_grade($responses, 1); - $this->assertEquals(1 / 3 * (1 - 3 * 0.2) + 2 / 3 * (1 - 2 * 0.2), $finalgrade); + $this->assertEqualsWithDelta(1 / 3 * (1 - 3 * 0.2) + 2 / 3 * (1 - 2 * 0.2), $finalgrade, question_testcase::GRADE_DELTA); } /**