MDL-75757 phpunit: Add some tolerance to a few failing assertions
Recently, PHPUnit (all versions) did some changes about how the comparators worked and this has caused some float comparisons to stop working. We need to move them to assertEqualsWithDelta(), allowing a small tolerance to workaround the floats comparison problem. 0.00001 has been decided. And applied to all the similar assertions within the unittest function, so if more cases are added to them better be copied with the agreed tolerance.
This commit is contained in:
@@ -139,8 +139,8 @@ class qbehaviour_deferredcbm_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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -479,6 +479,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') {
|
||||
|
||||
@@ -14,7 +14,6 @@
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
|
||||
/**
|
||||
* Unit tests for the multianswer question definition class.
|
||||
*
|
||||
@@ -199,7 +198,7 @@ class qtype_multianswer_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 +207,7 @@ class qtype_multianswer_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 +216,7 @@ class qtype_multianswer_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 +226,7 @@ class qtype_multianswer_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,6 +235,6 @@ class qtype_multianswer_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);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user