Moodle  2.2.1
http://www.collinsharper.com
C:/xampp/htdocs/moodle/question/type/numerical/simpletest/testquestion.php
Go to the documentation of this file.
00001 <?php
00002 // This file is part of Moodle - http://moodle.org/
00003 //
00004 // Moodle is free software: you can redistribute it and/or modify
00005 // it under the terms of the GNU General Public License as published by
00006 // the Free Software Foundation, either version 3 of the License, or
00007 // (at your option) any later version.
00008 //
00009 // Moodle is distributed in the hope that it will be useful,
00010 // but WITHOUT ANY WARRANTY; without even the implied warranty of
00011 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00012 // GNU General Public License for more details.
00013 //
00014 // You should have received a copy of the GNU General Public License
00015 // along with Moodle.  If not, see <http://www.gnu.org/licenses/>.
00016 
00017 
00028 require_once($CFG->dirroot . '/question/engine/simpletest/helpers.php');
00029 
00030 
00037 class qtype_numerical_question_test extends UnitTestCase {
00038     public function test_is_complete_response() {
00039         $question = test_question_maker::make_question('numerical');
00040 
00041         $this->assertFalse($question->is_complete_response(array()));
00042         $this->assertTrue($question->is_complete_response(array('answer' => '0')));
00043         $this->assertTrue($question->is_complete_response(array('answer' => 0)));
00044         $this->assertFalse($question->is_complete_response(array('answer' => 'test')));
00045     }
00046 
00047     public function test_is_gradable_response() {
00048         $question = test_question_maker::make_question('numerical');
00049 
00050         $this->assertFalse($question->is_gradable_response(array()));
00051         $this->assertTrue($question->is_gradable_response(array('answer' => '0')));
00052         $this->assertTrue($question->is_gradable_response(array('answer' => 0)));
00053         $this->assertTrue($question->is_gradable_response(array('answer' => 'test')));
00054     }
00055 
00056     public function test_grading() {
00057         $question = test_question_maker::make_question('numerical');
00058 
00059         $this->assertEqual(array(0, question_state::$gradedwrong),
00060                 $question->grade_response(array('answer' => '1.0')));
00061         $this->assertEqual(array(1, question_state::$gradedright),
00062                 $question->grade_response(array('answer' => '3.14')));
00063     }
00064 
00065     public function test_grading_with_units() {
00066         $question = test_question_maker::make_question('numerical');
00067         $question->unitgradingtype = qtype_numerical::UNITOPTIONAL;
00068         $question->ap = new qtype_numerical_answer_processor(
00069                 array('m' => 1, 'cm' => 100), false, '.', ',');
00070 
00071         $this->assertEqual(array(1, question_state::$gradedright),
00072                 $question->grade_response(array('answer' => '3.14 frogs')));
00073         $this->assertEqual(array(1, question_state::$gradedright),
00074                 $question->grade_response(array('answer' => '3.14')));
00075         $this->assertEqual(array(1, question_state::$gradedright),
00076                 $question->grade_response(array('answer' => '3.14 m')));
00077         $this->assertEqual(array(1, question_state::$gradedright),
00078                 $question->grade_response(array('answer' => '314cm')));
00079         $this->assertEqual(array(1, question_state::$gradedright),
00080                 $question->grade_response(array('answer' => '314000000x10^-8m')));
00081     }
00082 
00083     public function test_grading_with_units_graded() {
00084         $question = test_question_maker::make_question('numerical');
00085         $question->unitgradingtype = qtype_numerical::UNITGRADED;
00086         $question->ap = new qtype_numerical_answer_processor(
00087                 array('m' => 1, 'cm' => 100), false, '.', ',');
00088 
00089         $this->assertEqual(array(0.8, question_state::$gradedpartial),
00090                 $question->grade_response(array('answer' => '3.14 frogs')));
00091         $this->assertEqual(array(0.8, question_state::$gradedpartial),
00092                 $question->grade_response(array('answer' => '3.14')));
00093         $this->assertEqual(array(1, question_state::$gradedright),
00094                 $question->grade_response(array('answer' => '3.14 m')));
00095         $this->assertEqual(array(1, question_state::$gradedright),
00096                 $question->grade_response(array('answer' => '314cm')));
00097         $this->assertEqual(array(1, question_state::$gradedright),
00098                 $question->grade_response(array('answer' => '314000000x10^-8m')));
00099         $this->assertEqual(array(0.8, question_state::$gradedpartial),
00100                 $question->grade_response(array('answer' => '3.14 cm')));
00101         $this->assertEqual(array(0, question_state::$gradedwrong),
00102                 $question->grade_response(array('answer' => '314 m')));
00103     }
00104 
00105     public function test_grading_unit() {
00106         $question = test_question_maker::make_question('numerical', 'unit');
00107 
00108         $this->assertEqual(array(0, question_state::$gradedwrong),
00109                 $question->grade_response(array('answer' => '2', 'unit' => 'm')));
00110         $this->assertEqual(array(0, question_state::$gradedwrong),
00111                 $question->grade_response(array('answer' => '2', 'unit' => 'cm')));
00112         $this->assertEqual(array(0, question_state::$gradedwrong),
00113                 $question->grade_response(array('answer' => '2', 'unit' => '')));
00114 
00115         $this->assertEqual(array(1, question_state::$gradedright),
00116                 $question->grade_response(array('answer' => '1.25', 'unit' => 'm')));
00117         $this->assertEqual(array(1, question_state::$gradedright),
00118                 $question->grade_response(array('answer' => '125', 'unit' => 'cm')));
00119         $this->assertEqual(array(0.5, question_state::$gradedpartial),
00120                 $question->grade_response(array('answer' => '1.25', 'unit' => '')));
00121 
00122         $this->assertEqual(array(0.5, question_state::$gradedpartial),
00123                 $question->grade_response(array('answer' => '1.23', 'unit' => 'm')));
00124         $this->assertEqual(array(0.5, question_state::$gradedpartial),
00125                 $question->grade_response(array('answer' => '123', 'unit' => 'cm')));
00126         $this->assertEqual(array(0.25, question_state::$gradedpartial),
00127                 $question->grade_response(array('answer' => '1.23', 'unit' => '')));
00128     }
00129 
00130     public function test_grading_currency() {
00131         $question = test_question_maker::make_question('numerical', 'currency');
00132 
00133         $this->assertEqual(array(1, question_state::$gradedright),
00134                 $question->grade_response(array('answer' => '$1332')));
00135         $this->assertEqual(array(1, question_state::$gradedright),
00136                 $question->grade_response(array('answer' => '$ 1332')));
00137         $this->assertEqual(array(0.8, question_state::$gradedpartial),
00138                 $question->grade_response(array('answer' => 'frog 1332')));
00139         $this->assertEqual(array(0.8, question_state::$gradedpartial),
00140                 $question->grade_response(array('answer' => '1332')));
00141         $this->assertEqual(array(0.8, question_state::$gradedpartial),
00142                 $question->grade_response(array('answer' => ' 1332')));
00143         $this->assertEqual(array(0, question_state::$gradedwrong),
00144                 $question->grade_response(array('answer' => '1332 $')));
00145         $this->assertEqual(array(0, question_state::$gradedwrong),
00146                 $question->grade_response(array('answer' => '1332 frogs')));
00147         $this->assertEqual(array(0, question_state::$gradedwrong),
00148                 $question->grade_response(array('answer' => '$1')));
00149     }
00150 
00151     public function test_get_correct_response() {
00152         $question = test_question_maker::make_question('numerical');
00153 
00154         $this->assertEqual(array('answer' => '3.14'),
00155                 $question->get_correct_response());
00156     }
00157 
00158     public function test_get_correct_response_units() {
00159         $question = test_question_maker::make_question('numerical', 'unit');
00160 
00161         $this->assertEqual(array('answer' => '1.25', 'unit' => 'm'),
00162                 $question->get_correct_response());
00163     }
00164 
00165     public function test_get_correct_response_currency() {
00166         $question = test_question_maker::make_question('numerical', 'currency');
00167 
00168         $this->assertEqual(array('answer' => '$ 1332'),
00169                 $question->get_correct_response());
00170     }
00171 
00172     public function test_get_question_summary() {
00173         $num = test_question_maker::make_question('numerical');
00174         $qsummary = $num->get_question_summary();
00175         $this->assertEqual('What is pi to two d.p.?', $qsummary);
00176     }
00177 
00178     public function test_summarise_response() {
00179         $num = test_question_maker::make_question('numerical');
00180         $this->assertEqual('3.1', $num->summarise_response(array('answer' => '3.1')));
00181     }
00182 
00183     public function test_summarise_response_unit() {
00184         $num = test_question_maker::make_question('numerical', 'unit');
00185         $this->assertEqual('3.1', $num->summarise_response(array('answer' => '3.1')));
00186         $this->assertEqual('3.1m', $num->summarise_response(array('answer' => '3.1m')));
00187         $this->assertEqual('3.1 cm', $num->summarise_response(array('answer' => '3.1 cm')));
00188     }
00189 
00190     public function test_summarise_response_currency() {
00191         $num = test_question_maker::make_question('numerical', 'currency');
00192         $this->assertEqual('100', $num->summarise_response(array('answer' => '100')));
00193         $this->assertEqual('$100', $num->summarise_response(array('answer' => '$100')));
00194         $this->assertEqual('$ 100', $num->summarise_response(array('answer' => '$ 100')));
00195         $this->assertEqual('100 frogs', $num->summarise_response(array('answer' => '100 frogs')));
00196     }
00197 
00198     public function test_classify_response() {
00199         $num = test_question_maker::make_question('numerical');
00200         $num->start_attempt(new question_attempt_step(), 1);
00201 
00202         $this->assertEqual(array(
00203                 new question_classified_response(15, '3.1', 0.0)),
00204                 $num->classify_response(array('answer' => '3.1')));
00205         $this->assertEqual(array(
00206                 new question_classified_response(17, '42', 0.0)),
00207                 $num->classify_response(array('answer' => '42')));
00208         $this->assertEqual(array(
00209                 new question_classified_response(13, '3.14', 1.0)),
00210                 $num->classify_response(array('answer' => '3.14')));
00211         $this->assertEqual(array(
00212                 question_classified_response::no_response()),
00213                 $num->classify_response(array('answer' => '')));
00214     }
00215 
00216     public function test_classify_response_no_star() {
00217         $num = test_question_maker::make_question('numerical');
00218         unset($num->answers[17]);
00219         $num->start_attempt(new question_attempt_step(), 1);
00220 
00221         $this->assertEqual(array(
00222                 new question_classified_response(15, '3.1', 0.0)),
00223                 $num->classify_response(array('answer' => '3.1')));
00224         $this->assertEqual(array(
00225                 new question_classified_response(0, '42', 0.0)),
00226                 $num->classify_response(array('answer' => '42')));
00227         $this->assertEqual(array(
00228                 question_classified_response::no_response()),
00229                 $num->classify_response(array('answer' => '')));
00230     }
00231 
00232     public function test_classify_response_unit() {
00233         $num = test_question_maker::make_question('numerical', 'unit');
00234         $num->start_attempt(new question_attempt_step(), 1);
00235 
00236         $this->assertEqual(array(
00237                 new question_classified_response(13, '1.25', 0.5)),
00238                 $num->classify_response(array('answer' => '1.25', 'unit' => '')));
00239         $this->assertEqual(array(
00240                 new question_classified_response(13, '1.25 m', 1.0)),
00241                 $num->classify_response(array('answer' => '1.25', 'unit' => 'm')));
00242         $this->assertEqual(array(
00243                 new question_classified_response(13, '125 cm', 1.0)),
00244                 $num->classify_response(array('answer' => '125', 'unit' => 'cm')));
00245         $this->assertEqual(array(
00246                 new question_classified_response(14, '123 cm', 0.5)),
00247                 $num->classify_response(array('answer' => '123', 'unit' => 'cm')));
00248         $this->assertEqual(array(
00249                 new question_classified_response(14, '1.27 m', 0.5)),
00250                 $num->classify_response(array('answer' => '1.27', 'unit' => 'm')));
00251         $this->assertEqual(array(
00252                 new question_classified_response(17, '3.0 m', 0)),
00253                 $num->classify_response(array('answer' => '3.0', 'unit' => 'm')));
00254         $this->assertEqual(array(
00255                 question_classified_response::no_response()),
00256                 $num->classify_response(array('answer' => '')));
00257     }
00258 
00259     public function test_classify_response_unit_no_star() {
00260         $num = test_question_maker::make_question('numerical', 'unit');
00261         unset($num->answers[17]);
00262         $num->start_attempt(new question_attempt_step(), 1);
00263 
00264         $this->assertEqual(array(
00265                 new question_classified_response(0, '42 cm', 0)),
00266                 $num->classify_response(array('answer' => '42', 'unit' => 'cm')));
00267         $this->assertEqual(array(
00268                 new question_classified_response(0, '3.0', 0)),
00269                 $num->classify_response(array('answer' => '3.0', 'unit' => '')));
00270         $this->assertEqual(array(
00271                 new question_classified_response(0, '3.0 m', 0)),
00272                 $num->classify_response(array('answer' => '3.0', 'unit' => 'm')));
00273         $this->assertEqual(array(
00274                 question_classified_response::no_response()),
00275                 $num->classify_response(array('answer' => '', 'unit' => '')));
00276     }
00277 
00278     public function test_classify_response_currency() {
00279         $num = test_question_maker::make_question('numerical', 'currency');
00280         $num->start_attempt(new question_attempt_step(), 1);
00281 
00282         $this->assertEqual(array(
00283                 new question_classified_response(14, '$100', 0)),
00284                 $num->classify_response(array('answer' => '$100')));
00285         $this->assertEqual(array(
00286                 new question_classified_response(13, '1 332', 0.8)),
00287                 $num->classify_response(array('answer' => '1 332')));
00288     }
00289 }
 All Data Structures Namespaces Files Functions Variables Enumerations