ILIAS  release_9 Revision v9.13-25-g2c18ec4c24f
assFormulaQuestionTest.php
Go to the documentation of this file.
1 <?php
2 
20 
29 {
30  protected $backupGlobals = false;
31  protected $backup_dic;
32 
33  protected function setUp(): void
34  {
35  parent::setUp();
36  $lng = $this->getMockBuilder(\ilLanguage::class)
37  ->disableOriginalConstructor()
38  ->getMock();
39  $lng->method('txt')
40  ->will($this->returnArgument(0));
41 
42  $this->setGlobalVariable('lng', $lng);
43  }
44 
45  protected function tearDown(): void
46  {
47  global $DIC;
48  $DIC = $this->backup_dic;
49  }
50 
62  array $variables,
63  array $results,
64  $userResult,
65  $userResultUnit,
66  $expectedResult
67  ): void {
68  $isCorrect = $result->isCorrect($variables, $results, $userResult, $userResultUnit);
69  $this->assertEquals($expectedResult, $isCorrect);
70  }
71 
75  public function simpleRatedCalculationsData(): array
76  {
77  global $DIC;
78 
79  $this->backup_dic = $DIC;
80  $DIC = new ILIAS\DI\Container([
81  'tpl' => $this->getMockBuilder(ilGlobalTemplateInterface::class)->getMock(),
82  'refinery' => $this->getMockBuilder(Factory::class)->disableOriginalConstructor()->getMock(),
83  'lng' => $this->getMockBuilder(\ilLanguage::class)->disableOriginalConstructor()->getMock(),
84  ]);
85  $points = 5;
86  $precision = 2;
87 
88  $meter = new assFormulaQuestionUnit();
89  $meter->initFormArray([
90  'unit_id' => 1,
91  'category' => 1,
92  'sequence' => 1,
93  'unit' => 'Meter',
94  'factor' => 1,
95  'baseunit_fi' => -1,
96  'baseunit_title' => ''
97  ]);
98 
99  $centimeter = new assFormulaQuestionUnit();
100  $centimeter->initFormArray([
101  'unit_id' => 2,
102  'category' => 1,
103  'sequence' => 2,
104  'unit' => 'Centimeter',
105  'factor' => 0.01,
106  'baseunit_fi' => 1,
107  'baseunit_title' => 'Meter'
108  ]);
109 
110  $newtonmetre = new assFormulaQuestionUnit();
111  $newtonmetre->initFormArray([
112  'unit_id' => 3,
113  'category' => 1,
114  'sequence' => 3,
115  'unit' => 'Newton Metre',
116  'factor' => 1,
117  'baseunit_fi' => -1,
118  'baseunit_title' => ''
119  ]);
120 
121  $newtoncentimeter = new assFormulaQuestionUnit();
122  $newtoncentimeter->initFormArray([
123  'unit_id' => 4,
124  'category' => 1,
125  'sequence' => 4,
126  'unit' => 'Newton Centimeter',
127  'factor' => 0.01,
128  'baseunit_fi' => 3,
129  'baseunit_title' => 'Newton Metre'
130  ]);
131 
132  $v1 = new assFormulaQuestionVariable('$v1', 1, 20, $newtonmetre, 1);
133  $v2 = new assFormulaQuestionVariable('$v2', 1, 10, $centimeter, 1);
134  $v1->setValue(19.6);
135  $v1->setIntprecision(1);
136  $v2->setValue(6.6);
137  $v2->setIntprecision(1);
138 
139  $v3 = clone $v1;
140  $v4 = clone $v2;
141  $v3->setUnit(null);
142  $v3->setVariable('$v3');
143  $v4->setUnit(null);
144  $v4->setVariable('$v4');
145 
146  $r1 = new assFormulaQuestionResult(
147  '$r1',
148  0,
149  0,
150  0,
151  $newtoncentimeter,
152  '$v1 * $v2',
153  $points,
154  $precision,
155  true,
156  33,
157  34,
158  33,
160  );
161  $r2 = new assFormulaQuestionResult(
162  '$r2',
163  0,
164  0,
165  0,
166  $newtonmetre,
167  '$v1 * $v2',
168  $points,
169  $precision,
170  true,
171  33,
172  34,
173  33,
175  );
176  $r3 = new assFormulaQuestionResult(
177  '$r3',
178  0,
179  0,
180  0,
181  null,
182  '$v1 * $v2',
183  $points,
184  $precision,
185  true,
186  33,
187  34,
188  33,
190  );
191  $r4 = new assFormulaQuestionResult(
192  '$r4',
193  0,
194  0,
195  0,
196  null,
197  '$v1 * $v2',
198  $points,
199  $precision,
200  true,
201  33,
202  34,
203  33,
205  );
206  $r5 = new assFormulaQuestionResult(
207  '$r5',
208  0,
209  0,
210  0,
211  null,
212  '$v1 * $v2',
213  $points,
214  $precision,
215  true,
216  33,
217  34,
218  33,
220  );
221  $r6 = new assFormulaQuestionResult(
222  '$r6',
223  0,
224  0,
225  0,
226  null,
227  '$v3 * $v4',
228  $points,
229  $precision,
230  true,
231  33,
232  34,
233  33,
235  );
236 
237  // RESULT_FRAC
238  $v5 = new assFormulaQuestionVariable('$v5', 1, 20, null, 1);
239  $v6 = new assFormulaQuestionVariable('$v6', 1, 10, null, 1);
240  $v5->setValue(1);
241  $v6->setValue(3);
242 
243  $v7 = new assFormulaQuestionVariable('$v7', 1, 20, null, 1);
244  $v8 = new assFormulaQuestionVariable('$v8', 1, 10, null, 1);
245  $v7->setValue(2);
246  $v8->setValue(4);
247 
248  $r7 = new assFormulaQuestionResult(
249  '$r7',
250  0,
251  0,
252  0,
253  null,
254  '$v5/$v6',
255  $points,
256  $precision,
257  true,
258  33,
259  34,
260  33,
262  );
263 
264  $r8 = new assFormulaQuestionResult(
265  '$r8',
266  0,
267  0,
268  0,
269  null,
270  '$v7/$v8',
271  $points,
272  $precision,
273  true,
274  33,
275  34,
276  33,
278  );
279 
280  // RESULT_CO_FRAC
281  $v9 = clone $v7;
282  $v9->setVariable('$v9');
283  $v10 = clone $v8;
284  $v10->setVariable('$v10');
285 
286  $v11 = clone $v7;
287  $v11->setVariable('$v11');
288  $v12 = clone $v8;
289  $v12->setVariable('$v12');
290 
291  $r9 = new assFormulaQuestionResult(
292  '$r9',
293  0,
294  0,
295  0,
296  null,
297  '$v9/$v10',
298  $points,
299  $precision,
300  true,
301  33,
302  34,
303  33,
305  );
306 
307  $r10 = new assFormulaQuestionResult(
308  '$r10',
309  0,
310  0,
311  0,
312  null,
313  '$v11/$v12',
314  $points,
315  $precision,
316  true,
317  33,
318  34,
319  33,
321  );
322 
323  // RESULT_NO_SELECTION
324  $v13 = new assFormulaQuestionVariable('$v13', 1, 20, null, 1);
325  $v14 = new assFormulaQuestionVariable('$v14', 1, 10, null, 1);
326  $v13->setValue(1);
327  $v14->setValue(3);
328  $r11 = new assFormulaQuestionResult(
329  '$r11',
330  0,
331  0,
332  0,
333  null,
334  '$v13/$v14',
335  $points,
336  $precision,
337  true,
338  33,
339  34,
340  33,
342  );
343 
344  $v15 = new assFormulaQuestionVariable('$v15', 200, 800, null, 0);
345  $v16 = new assFormulaQuestionVariable('$v16', 50, 250, null, 0);
346  $v17 = new assFormulaQuestionVariable('$v17', 3, 18, null, 0);
347  $v15->setIntprecision(25);
348  $v16->setIntprecision(5);
349  $v17->setIntprecision(1);
350  $v15->setValue(225);
351  $v16->setValue(85);
352  $v17->setValue(10);
353  $r12 = new assFormulaQuestionResult(
354  '$r12',
355  0,
356  0,
357  0,
358  null,
359  '1/(2*pi)*sqrt($v16*1000/$v15)+$v17-$v17',
360  $points,
361  1,
362  true,
363  33,
364  34,
365  33,
367  );
368  $r13 = new assFormulaQuestionResult(
369  '$r12',
370  0,
371  0,
372  0,
373  null,
374  '1/(2*pi)*sqrt($v16*1000/$v15)+$v17-$v17',
375  $points,
376  2,
377  true,
378  33,
379  34,
380  33,
382  );
383  $r14 = new assFormulaQuestionResult(
384  '$r11',
385  0,
386  0,
387  0,
388  null,
389  '$v7/$v14',
390  $points,
391  $precision,
392  true,
393  33,
394  34,
395  33,
397  );
398 
399  $variables = [
400  $v1->getVariable() => $v1,
401  $v2->getVariable() => $v2,
402  $v3->getVariable() => $v3,
403  $v4->getVariable() => $v4,
404  $v5->getVariable() => $v5,
405  $v6->getVariable() => $v6,
406  $v7->getVariable() => $v7,
407  $v8->getVariable() => $v8,
408  $v9->getVariable() => $v9,
409  $v10->getVariable() => $v10,
410  $v11->getVariable() => $v11,
411  $v12->getVariable() => $v12,
412  $v13->getVariable() => $v13,
413  $v14->getVariable() => $v14,
414  $v15->getVariable() => $v15,
415  $v16->getVariable() => $v16,
416  $v17->getVariable() => $v17,
417  ];
418 
419  $results = [
420  $r1->getResult() => $r1,
421  $r2->getResult() => $r2,
422  $r3->getResult() => $r3,
423  $r4->getResult() => $r4,
424  $r5->getResult() => $r5,
425  $r6->getResult() => $r6,
426  $r7->getResult() => $r7,
427  $r8->getResult() => $r8,
428  $r9->getResult() => $r9,
429  $r10->getResult() => $r10,
430  $r11->getResult() => $r11,
431  $r12->getResult() => $r12,
432  $r13->getResult() => $r13,
433  $r14->getResult() => $r14,
434  ];
435 
436  return [
437  //result, all variables, all results, user solution, unit chosen by user for solution
438  [$r1, $variables, $results, '129.36', $newtoncentimeter, true],
439  [$r2, $variables, $results, '1.29', $newtonmetre, true],
440  [$r3, $variables, $results, '1.29', $newtonmetre, true],
441  [$r4, $variables, $results, '129.36', $newtoncentimeter, true],
442  [$r5, $variables, $results, '1.29', null, true],
443  [$r6, $variables, $results, '129.36', null, true],
444  // RESULT_FRAC
445  [$r7, $variables, $results, '1/3', null, true],
446  [$r8, $variables, $results, '4/8', null, true],
447  // RESULT_CO_FRAC
448  [$r9, $variables, $results, '1/2', null, true],
449  [$r10, $variables, $results, '4/8', null, false],
450  // RESULT_NO_SELECTION
451  [$r11, $variables, $results, '1/3', null, true],
452  [$r14, $variables, $results, '0.67', null, true],
453  [$r14, $variables, $results, '0.66666', null, true],
454  [$r14, $variables, $results, '0.7', null, false],
455  [$r14, $variables, $results, '2/3', null, true],
456  // Test for #22381
457  [$r12, $variables, $results, '3.1', null, true],
458  [$r13, $variables, $results, '3.09', null, true],
459  [$r13, $variables, $results, '3.1', null, false],
460  ];
461  }
462 }
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
Class assBaseTestCase.
global $DIC
Definition: feed.php:28
$lng
isCorrect($variables, $results, $value, $unit=null)
$results
testSimpleRatedFormulaQuestionCalculations(assFormulaQuestionResult $result, array $variables, array $results, $userResult, $userResultUnit, $expectedResult)
simpleRatedCalculationsData
setGlobalVariable(string $name, $value)