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