Moodle  2.2.1
http://www.collinsharper.com
C:/xampp/htdocs/moodle/mod/workshop/eval/best/simpletest/testlib.php
Go to the documentation of this file.
00001 <?php
00002 
00003 // This file is part of Moodle - http://moodle.org/
00004 //
00005 // Moodle is free software: you can redistribute it and/or modify
00006 // it under the terms of the GNU General Public License as published by
00007 // the Free Software Foundation, either version 3 of the License, or
00008 // (at your option) any later version.
00009 //
00010 // Moodle is distributed in the hope that it will be useful,
00011 // but WITHOUT ANY WARRANTY; without even the implied warranty of
00012 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00013 // GNU General Public License for more details.
00014 //
00015 // You should have received a copy of the GNU General Public License
00016 // along with Moodle.  If not, see <http://www.gnu.org/licenses/>.
00017 
00027 defined('MOODLE_INTERNAL') || die();
00028 
00029 // Include the code to test
00030 require_once($CFG->dirroot . '/mod/workshop/locallib.php');
00031 require_once($CFG->dirroot . '/mod/workshop/eval/best/lib.php');
00032 require_once($CFG->libdir . '/gradelib.php');
00033 
00034 global $DB;
00035 Mock::generate(get_class($DB), 'mockDB');
00036 
00040 class testable_workshop_best_evaluation extends workshop_best_evaluation {
00041 
00042     public function normalize_grades(array $assessments, array $diminfo) {
00043         return parent::normalize_grades($assessments, $diminfo);
00044     }
00045     public function average_assessment(array $assessments) {
00046         return parent::average_assessment($assessments);
00047     }
00048     public function weighted_variance(array $assessments) {
00049         return parent::weighted_variance($assessments);
00050     }
00051     public function assessments_distance(stdclass $assessment, stdclass $referential, array $diminfo, stdclass $settings) {
00052         return parent::assessments_distance($assessment, $referential, $diminfo, $settings);
00053     }
00054 }
00055 
00056 class workshop_best_evaluation_test extends UnitTestCase {
00057 
00059     protected $realDB;
00060 
00062     protected $workshop;
00063 
00065     protected $evaluator;
00066 
00070     public function setUp() {
00071         global $DB;
00072         $this->realDB   = $DB;
00073         $DB             = new mockDB();
00074 
00075         $cm             = new stdclass();
00076         $course         = new stdclass();
00077         $context        = new stdclass();
00078         $workshop       = (object)array('id' => 42, 'evaluation' => 'best');
00079         $this->workshop = new workshop($workshop, $cm, $course, $context);
00080         $this->evaluator = new testable_workshop_best_evaluation($this->workshop);
00081     }
00082 
00083     public function tearDown() {
00084         global $DB;
00085         $DB = $this->realDB;
00086 
00087         $this->workshop = null;
00088         $this->evaluator = null;
00089     }
00090 
00091     public function test_normalize_grades() {
00092         // fixture set-up
00093         $assessments = array();
00094         $assessments[1] = (object)array(
00095                 'dimgrades' => array(3 => 1.0000, 4 => 13.42300),
00096             );
00097         $assessments[3] = (object)array(
00098                 'dimgrades' => array(3 => 2.0000, 4 => 19.1000),
00099             );
00100         $assessments[7] = (object)array(
00101                 'dimgrades' => array(3 => 3.0000, 4 => 0.00000),
00102             );
00103         $diminfo = array(
00104                 3 => (object)array('min' => 1, 'max' => 3),
00105                 4 => (object)array('min' => 0, 'max' => 20),
00106             );
00107         // exercise SUT
00108         $norm = $this->evaluator->normalize_grades($assessments, $diminfo);
00109         // validate
00110         $this->assertIsA($norm, 'array');
00111         // the following grades from a scale
00112         $this->assertEqual($norm[1]->dimgrades[3], 0);
00113         $this->assertEqual($norm[3]->dimgrades[3], 50);
00114         $this->assertEqual($norm[7]->dimgrades[3], 100);
00115         // the following grades from an interval 0 - 20
00116         $this->assertEqual($norm[1]->dimgrades[4], grade_floatval(13.423 / 20 * 100));
00117         $this->assertEqual($norm[3]->dimgrades[4], grade_floatval(19.1 / 20 * 100));
00118         $this->assertEqual($norm[7]->dimgrades[4], 0);
00119     }
00120 
00121     public function test_normalize_grades_max_equals_min() {
00122         // fixture set-up
00123         $assessments = array();
00124         $assessments[1] = (object)array(
00125                 'dimgrades' => array(3 => 100.0000),
00126             );
00127         $diminfo = array(
00128                 3 => (object)array('min' => 100, 'max' => 100),
00129             );
00130         // exercise SUT
00131         $norm = $this->evaluator->normalize_grades($assessments, $diminfo);
00132         // validate
00133         $this->assertIsA($norm, 'array');
00134         $this->assertEqual($norm[1]->dimgrades[3], 100);
00135     }
00136 
00137     public function test_average_assessment_same_weights() {
00138         // fixture set-up
00139         $assessments = array();
00140         $assessments[18] = (object)array(
00141                 'weight'        => 1,
00142                 'dimgrades'     => array(1 => 50, 2 => 33.33333),
00143             );
00144         $assessments[16] = (object)array(
00145                 'weight'        => 1,
00146                 'dimgrades'     => array(1 => 0, 2 => 66.66667),
00147             );
00148         // exercise SUT
00149         $average = $this->evaluator->average_assessment($assessments);
00150         // validate
00151         $this->assertIsA($average->dimgrades, 'array');
00152         $this->assertEqual(grade_floatval($average->dimgrades[1]), grade_floatval(25));
00153         $this->assertEqual(grade_floatval($average->dimgrades[2]), grade_floatval(50));
00154     }
00155 
00156     public function test_average_assessment_different_weights() {
00157         // fixture set-up
00158         $assessments = array();
00159         $assessments[11] = (object)array(
00160                 'weight'        => 1,
00161                 'dimgrades'     => array(3 => 10.0, 4 => 13.4, 5 => 95.0),
00162             );
00163         $assessments[13] = (object)array(
00164                 'weight'        => 3,
00165                 'dimgrades'     => array(3 => 11.0, 4 => 10.1, 5 => 92.0),
00166             );
00167         $assessments[17] = (object)array(
00168                 'weight'        => 1,
00169                 'dimgrades'     => array(3 => 11.0, 4 => 8.1, 5 => 88.0),
00170             );
00171         // exercise SUT
00172         $average = $this->evaluator->average_assessment($assessments);
00173         // validate
00174         $this->assertIsA($average->dimgrades, 'array');
00175         $this->assertEqual(grade_floatval($average->dimgrades[3]), grade_floatval((10.0 + 11.0*3 + 11.0)/5));
00176         $this->assertEqual(grade_floatval($average->dimgrades[4]), grade_floatval((13.4 + 10.1*3 + 8.1)/5));
00177         $this->assertEqual(grade_floatval($average->dimgrades[5]), grade_floatval((95.0 + 92.0*3 + 88.0)/5));
00178     }
00179 
00180     public function test_average_assessment_noweight() {
00181         // fixture set-up
00182         $assessments = array();
00183         $assessments[11] = (object)array(
00184                 'weight'        => 0,
00185                 'dimgrades'     => array(3 => 10.0, 4 => 13.4, 5 => 95.0),
00186             );
00187         $assessments[17] = (object)array(
00188                 'weight'        => 0,
00189                 'dimgrades'     => array(3 => 11.0, 4 => 8.1, 5 => 88.0),
00190             );
00191         // exercise SUT
00192         $average = $this->evaluator->average_assessment($assessments);
00193         // validate
00194         $this->assertNull($average);
00195     }
00196 
00197     public function test_weighted_variance() {
00198         // fixture set-up
00199         $assessments[11] = (object)array(
00200                 'weight'        => 1,
00201                 'dimgrades'     => array(3 => 11, 4 => 2),
00202             );
00203         $assessments[13] = (object)array(
00204                 'weight'        => 3,
00205                 'dimgrades'     => array(3 => 11, 4 => 4),
00206             );
00207         $assessments[17] = (object)array(
00208                 'weight'        => 2,
00209                 'dimgrades'     => array(3 => 11, 4 => 5),
00210             );
00211         $assessments[20] = (object)array(
00212                 'weight'        => 1,
00213                 'dimgrades'     => array(3 => 11, 4 => 7),
00214             );
00215         $assessments[25] = (object)array(
00216                 'weight'        => 1,
00217                 'dimgrades'     => array(3 => 11, 4 => 9),
00218             );
00219         // exercise SUT
00220         $variance = $this->evaluator->weighted_variance($assessments);
00221         // validate
00222         // dimension [3] have all the grades equal to 11
00223         $this->assertEqual($variance[3], 0);
00224         // dimension [4] represents data 2, 4, 4, 4, 5, 5, 7, 9 having stdev=2 (stdev is sqrt of variance)
00225         $this->assertEqual($variance[4], 4);
00226     }
00227 
00228     public function test_assessments_distance_zero() {
00229         // fixture set-up
00230         $diminfo = array(
00231             3 => (object)array('weight' => 1, 'min' => 0, 'max' => 100, 'variance' => 12.34567),
00232             4 => (object)array('weight' => 1, 'min' => 1, 'max' => 5,   'variance' => 98.76543),
00233         );
00234         $assessment1 = (object)array('dimgrades' => array(3 => 15, 4 => 2));
00235         $assessment2 = (object)array('dimgrades' => array(3 => 15, 4 => 2));
00236         $settings = (object)array('comparison' => 5);
00237         // exercise SUT and validate
00238         $this->assertEqual($this->evaluator->assessments_distance($assessment1, $assessment2, $diminfo, $settings), 0);
00239     }
00240 
00241     public function test_assessments_distance_equals() {
00242         /*
00243         // fixture set-up
00244         $diminfo = array(
00245             3 => (object)array('weight' => 1, 'min' => 0, 'max' => 100, 'variance' => 12.34567),
00246             4 => (object)array('weight' => 1, 'min' => 0, 'max' => 100, 'variance' => 12.34567),
00247         );
00248         $assessment1 = (object)array('dimgrades' => array(3 => 25, 4 => 4));
00249         $assessment2 = (object)array('dimgrades' => array(3 => 75, 4 => 2));
00250         $referential = (object)array('dimgrades' => array(3 => 50, 4 => 3));
00251         $settings = (object)array('comparison' => 5);
00252         // exercise SUT and validate
00253         $this->assertEqual($this->evaluator->assessments_distance($assessment1, $referential, $diminfo, $settings),
00254                            $this->evaluator->assessments_distance($assessment2, $referential, $diminfo, $settings));
00255         */
00256         // fixture set-up
00257         $diminfo = array(
00258             1 => (object)array('min' => 0, 'max' => 2, 'weight' => 1, 'variance' => 625),
00259             2 => (object)array('min' => 0, 'max' => 3, 'weight' => 1, 'variance' => 277.7778888889),
00260         );
00261         $assessment1 = (object)array('dimgrades' => array(1 => 0,  2 => 66.66667));
00262         $assessment2 = (object)array('dimgrades' => array(1 => 50, 2 => 33.33333));
00263         $referential = (object)array('dimgrades' => array(1 => 25, 2 => 50));
00264         $settings = (object)array('comparison' => 9);
00265         // exercise SUT and validate
00266         $this->assertEqual($this->evaluator->assessments_distance($assessment1, $referential, $diminfo, $settings),
00267                            $this->evaluator->assessments_distance($assessment2, $referential, $diminfo, $settings));
00268 
00269     }
00270 }
 All Data Structures Namespaces Files Functions Variables Enumerations