54 lines
1.4 KiB
PHP
54 lines
1.4 KiB
PHP
|
|
<?php
|
||
|
|
|
||
|
|
require "tests.php";
|
||
|
|
|
||
|
|
// No new functions
|
||
|
|
check::functions(array());
|
||
|
|
check::classes(array('director_binary_string','Callback','Caller'));
|
||
|
|
// No new vars
|
||
|
|
check::globals(array());
|
||
|
|
|
||
|
|
class DirectorBinaryStringCallback extends Callback {
|
||
|
|
function run(string $dataBufferAA, string $dataBufferBB)
|
||
|
|
{
|
||
|
|
$ret = 0;
|
||
|
|
if ($dataBufferAA != null) {
|
||
|
|
for ($i = 0; $i < strlen($dataBufferAA); $i++)
|
||
|
|
$ret = $ret + ord($dataBufferAA[$i]) * 2;
|
||
|
|
}
|
||
|
|
if ($dataBufferBB != null) {
|
||
|
|
for ($i = 0; $i < strlen($dataBufferBB); $i++)
|
||
|
|
$ret = $ret + ord($dataBufferBB[$i]) * 3;
|
||
|
|
}
|
||
|
|
return $ret;
|
||
|
|
}
|
||
|
|
function writeData(string $dataBufferAA)
|
||
|
|
{
|
||
|
|
$ret = 0;
|
||
|
|
if ($dataBufferAA != null) {
|
||
|
|
for ($i = 0; $i < strlen($dataBufferAA); $i++)
|
||
|
|
$ret = $ret + ord($dataBufferAA[$i]) * 2;
|
||
|
|
}
|
||
|
|
return $ret;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
$caller = new Caller();
|
||
|
|
$callback = new DirectorBinaryStringCallback();
|
||
|
|
$caller->setCallback($callback);
|
||
|
|
$sum = $caller->call();
|
||
|
|
$sumData = $caller->callWriteData();
|
||
|
|
$caller->delCallback();
|
||
|
|
|
||
|
|
check::equal($sum, 9*2*8 + 13*3*5, "Unexpected sum: $sum");
|
||
|
|
check::equal($sumData, 9*2*8, "Unexpected sumData: $sumData");
|
||
|
|
|
||
|
|
// FIXME Error: Cannot instantiate abstract class Callback
|
||
|
|
// It does make sense as writeData() is abstract
|
||
|
|
// (new Callback())->run("", "");
|
||
|
|
|
||
|
|
$callback = new DirectorBinaryStringCallback();
|
||
|
|
$caller->setCallback($callback);
|
||
|
|
$caller->call_null();
|
||
|
|
$caller->delCallback();
|