/
niceSOFT
/
swig
Обзор
Документация
Войти
/
niceSOFT
/
swig
Код
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
Examples/test-suite/php/director_classes_runme.php
79 строк
3 KB
Olly Betts
Fix director_classes testcase failures on x86
19 ноя 2023, 11:45
19 ноя 2023, 11:45
5f8b913
Код
Авторство
О чём код?
<?php require "tests.php"; // No new functions check::functions(array()); // New classes check::classes(array('director_classes', 'Base', 'BaseClass', 'Caller', 'Derived', 'DerivedClass', 'DoubleHolder')); // New vars check::globals(array('PrintDebug')); class PHPDerived extends Base { function Val(DoubleHolder $x) { return $x; } function Ref(DoubleHolder $x) { return $x; } function Ptr(?DoubleHolder $x) { return $x; } function ConstPtrRef(?DoubleHolder $x) { return $x; } function FullyOverloaded($x) { $rv = parent::FullyOverloaded($x); $rv = preg_replace('/Base/', 'PHPDerived', $rv); return $rv; } function SemiOverloaded($x) { # this is going to be awkward because we can't really # semi-overload in PHP, but we can sort of fake it. if (!is_int($x)) { return parent::SemiOverloaded($x); } $rv = parent::SemiOverloaded($x); $rv = preg_replace('/Base/', 'PHPDerived', $rv); return $rv; } function DefaultParms(int $x, float $y = 1.125) { $rv = parent::DefaultParms($x, $y); $rv = preg_replace('/Base/', 'PHPDerived', $rv); return $rv; } } { $c = new Caller(); makeCalls($c, new Base(100.0)); makeCalls($c, new Derived(200.0)); makeCalls($c, new PHPDerived(300.0)); } function makeCalls($caller, $base) { $bname = get_class($base); if ($bname == 'PHPDerived') { // TODO: Debug and make this work: return; } $caller->set($base); $dh = new DoubleHolder(444.555); check::equal($caller->ValCall($dh)->val, $dh->val, "$bname.Val"); check::equal($caller->RefCall($dh)->val, $dh->val, "$bname.Ref"); check::equal($caller->PtrCall($dh)->val, $dh->val, "$bname.Ptr"); check::equal($caller->ConstPtrRefCall($dh)->val, $dh->val, "$bname.ConstPtrRef"); check::equal($caller->FullyOverloadedCall(1), "{$bname}::FullyOverloaded(int)", "$bname.FullyOverloaded(int)"); check::equal($caller->FullyOverloadedCall(false), "{$bname}::FullyOverloaded(bool)", "$bname.FullyOverloaded(bool)"); // This next one is TODO for Perl with PerlDerived. check::equal($caller->SemiOverloadedCall(-678), "{$bname}::SemiOverloaded(int)", "$bname.SemiOverloaded(int)"); check::equal($caller->SemiOverloadedCall(false), "Base::SemiOverloaded(bool)", "$bname.SemiOverloaded(bool)"); check::equal($caller->DefaultParmsCall(10, 2.2), "{$bname}::DefaultParms(int, double)", "$bname.DefaultParms(int, double)"); check::equal($caller->DefaultParmsCall(10), "{$bname}::DefaultParms(int)", "$bname.DefaultParms(int)"); $caller->reset(); } check::done();