Exemple #1
0
 public function test_adjust_fraction() {
     $this->assertEquals(0, question_cbm::adjust_fraction(0, question_cbm::LOW), '', 0.0000001);
     $this->assertEquals(-2/3, question_cbm::adjust_fraction(0, question_cbm::MED), '', 0.0000001);
     $this->assertEquals(-2, question_cbm::adjust_fraction(0, question_cbm::HIGH), '', 0.0000001);
     $this->assertEquals(1/3, question_cbm::adjust_fraction(1, question_cbm::LOW), '', 0.0000001);
     $this->assertEquals(2/3, question_cbm::adjust_fraction(1, question_cbm::MED), '', 0.0000001);
     $this->assertEquals(1, question_cbm::adjust_fraction(1, question_cbm::HIGH), '', 0.0000001);
 }
 public function test_adjust_fraction()
 {
     $this->assertWithinMargin(0, question_cbm::adjust_fraction(0, question_cbm::LOW), 1.0E-7);
     $this->assertWithinMargin(-2 / 3, question_cbm::adjust_fraction(0, question_cbm::MED), 1.0E-7);
     $this->assertWithinMargin(-2, question_cbm::adjust_fraction(0, question_cbm::HIGH), 1.0E-7);
     $this->assertWithinMargin(1 / 3, question_cbm::adjust_fraction(1, question_cbm::LOW), 1.0E-7);
     $this->assertWithinMargin(2 / 3, question_cbm::adjust_fraction(1, question_cbm::MED), 1.0E-7);
     $this->assertWithinMargin(1, question_cbm::adjust_fraction(1, question_cbm::HIGH), 1.0E-7);
 }
Exemple #3
0
 public function test_adjust_fraction()
 {
     $this->assertEquals(1, question_cbm::adjust_fraction(1, question_cbm::LOW), '', 1.0E-7);
     $this->assertEquals(2, question_cbm::adjust_fraction(1, question_cbm::MED), '', 1.0E-7);
     $this->assertEquals(3, question_cbm::adjust_fraction(1, question_cbm::HIGH), '', 1.0E-7);
     $this->assertEquals(0, question_cbm::adjust_fraction(0, question_cbm::LOW), '', 1.0E-7);
     $this->assertEquals(-2, question_cbm::adjust_fraction(0, question_cbm::MED), '', 1.0E-7);
     $this->assertEquals(-6, question_cbm::adjust_fraction(0, question_cbm::HIGH), '', 1.0E-7);
     $this->assertEquals(0.5, question_cbm::adjust_fraction(0.5, question_cbm::LOW), '', 1.0E-7);
     $this->assertEquals(1, question_cbm::adjust_fraction(0.5, question_cbm::MED), '', 1.0E-7);
     $this->assertEquals(1.5, question_cbm::adjust_fraction(0.5, question_cbm::HIGH), '', 1.0E-7);
     $this->assertEquals(0, question_cbm::adjust_fraction(-0.25, question_cbm::LOW), '', 1.0E-7);
     $this->assertEquals(-2, question_cbm::adjust_fraction(-0.25, question_cbm::MED), '', 1.0E-7);
     $this->assertEquals(-6, question_cbm::adjust_fraction(-0.25, question_cbm::HIGH), '', 1.0E-7);
 }
 public function calculate_bonus($total, $accuracy)
 {
     $expectedforaccuracy = max($accuracy * question_cbm::adjust_fraction(1, question_cbm::LOW) + (1 - $accuracy) * question_cbm::adjust_fraction(0, question_cbm::LOW), $accuracy * question_cbm::adjust_fraction(1, question_cbm::MED) + (1 - $accuracy) * question_cbm::adjust_fraction(0, question_cbm::MED), $accuracy * question_cbm::adjust_fraction(1, question_cbm::HIGH) + (1 - $accuracy) * question_cbm::adjust_fraction(0, question_cbm::HIGH));
     // The constant 0.1 here is determinted empirically from looking at lots
     // for CBM quiz results. See www.ucl.ac.uk/~ucgbarg/tea/IUPS_2013a.pdf.
     // It approximately maximises the reliability of accuracy + bonus.
     return 0.1 * ($total - $expectedforaccuracy);
 }
Exemple #5
0
 public static function adjust_random_guess_score($fraction) {
     return question_cbm::adjust_fraction($fraction, question_cbm::default_certainty());
 }
 public function test_test0_no_validation_required()
 {
     // Account for the changes in Moodle 2.6.
     if (question_cbm::adjust_fraction(1, question_cbm::HIGH) > 2) {
         // Moodle 2.6+.
         $outof = 1;
     } else {
         // Moodle 2.5-.
         $outof = 3;
     }
     // Create a stack question - we use test0, then replace the input with
     // a dropdown, to get a question that does not require validation.
     $q = test_question_maker::make_question('stack', 'test0');
     $q->inputs['ans1'] = stack_input_factory::make('dropdown', 'ans1', '2', array('ddl_values' => '1,2'));
     $this->start_attempt_at_question($q, 'deferredcbm', $outof);
     // Check the right behaviour is used.
     $this->assertEquals('deferredcbm', $this->quba->get_question_attempt($this->slot)->get_behaviour_name());
     // Check the initial state.
     $this->check_current_state(question_state::$todo);
     $this->check_current_mark(null);
     $this->render();
     $this->check_output_does_not_contain_input_validation();
     $this->check_output_does_not_contain_prt_feedback();
     $this->check_output_does_not_contain_stray_placeholders();
     $this->check_current_output($this->get_contains_select_expectation('ans1', array('' => stack_string('notanswered'), '1' => '1', '2' => '2'), null, true), $this->get_does_not_contain_feedback_expectation(), $this->get_does_not_contain_num_parts_correct(), $this->get_no_hint_visible_expectation());
     // Save a correct response, medium certainty.
     $this->process_submission(array('ans1' => '2', '-certainty' => 2));
     $this->check_current_state(question_state::$complete);
     $this->check_current_mark(null);
     $this->render();
     $this->check_output_does_not_contain_input_validation();
     $this->check_output_does_not_contain_prt_feedback();
     $this->check_output_does_not_contain_stray_placeholders();
     $this->check_current_output($this->get_contains_select_expectation('ans1', array('' => stack_string('notanswered'), '1' => '1', '2' => '2'), '2', true), $this->get_does_not_contain_feedback_expectation(), $this->get_does_not_contain_num_parts_correct(), $this->get_no_hint_visible_expectation());
     // Submit all and finish.
     $this->quba->finish_all_questions();
     $this->check_current_state(question_state::$gradedright);
     $this->check_current_mark(2);
     $this->render();
     $this->check_output_does_not_contain_input_validation();
     $this->check_output_contains_prt_feedback('firsttree');
     $this->check_output_does_not_contain_stray_placeholders();
     $this->check_current_output($this->get_contains_select_expectation('ans1', array('' => stack_string('notanswered'), '1' => '1', '2' => '2'), '2', false), $this->get_does_not_contain_num_parts_correct(), $this->get_no_hint_visible_expectation());
 }
Exemple #7
0
 public function process_finish(question_attempt_pending_step $pendingstep)
 {
     $status = parent::process_finish($pendingstep);
     if ($status == question_attempt::KEEP) {
         $fraction = $pendingstep->get_fraction();
         if ($this->qa->get_last_step()->has_behaviour_var('certainty')) {
             $certainty = $this->qa->get_last_step()->get_behaviour_var('certainty');
         } else {
             $certainty = question_cbm::default_certainty();
             $pendingstep->set_behaviour_var('_assumedcertainty', $certainty);
         }
         if (!is_null($fraction)) {
             $pendingstep->set_behaviour_var('_rawfraction', $fraction);
             $pendingstep->set_fraction(question_cbm::adjust_fraction($fraction, $certainty));
         }
         $pendingstep->set_new_response_summary(question_cbm::summary_with_certainty($pendingstep->get_new_response_summary(), $this->qa->get_last_step()->get_behaviour_var('certainty')));
     }
     return $status;
 }
Exemple #8
0
 protected function do_grading(question_attempt_step $responsesstep, question_attempt_pending_step $pendingstep)
 {
     if (!$this->question->is_gradable_response($responsesstep->get_qt_data())) {
         $pendingstep->set_state(question_state::$gaveup);
     } else {
         $response = $responsesstep->get_qt_data();
         list($fraction, $state) = $this->question->grade_response($response);
         if ($responsesstep->has_behaviour_var('certainty')) {
             $certainty = $responsesstep->get_behaviour_var('certainty');
         } else {
             $certainty = question_cbm::default_certainty();
             $pendingstep->set_behaviour_var('_assumedcertainty', $certainty);
         }
         $pendingstep->set_behaviour_var('_rawfraction', $fraction);
         $pendingstep->set_fraction(question_cbm::adjust_fraction($fraction, $certainty));
         $pendingstep->set_state($state);
         $pendingstep->set_new_response_summary(question_cbm::summary_with_certainty($this->question->summarise_response($response), $responsesstep->get_behaviour_var('certainty')));
     }
     return question_attempt::KEEP;
 }
Exemple #9
0
 public function marked_out_of_max(question_attempt $qa, core_question_renderer $qoutput, question_display_options $options)
 {
     return get_string('basemark', 'qbehaviour_deferredcbm', $qa->format_fraction_as_mark(question_cbm::adjust_fraction(1, question_cbm::default_certainty()), $options->markdp));
 }