function twoways($communicator, $p) { global $NS; $enum1 = $NS ? constant("Test\\MyEnum::enum1") : constant("Test_MyEnum::enum1"); $enum2 = $NS ? constant("Test\\MyEnum::enum2") : constant("Test_MyEnum::enum2"); $enum3 = $NS ? constant("Test\\MyEnum::enum3") : constant("Test_MyEnum::enum3"); { $p->ice_ping(); } { test($p->ice_isA("::Test::MyClass")); } { test(count($p->ice_ids()) == 3); } { test($p->ice_id() == "::Test::MyDerivedClass"); } { $p->opVoid(); } { $r = $p->opByte(0xff, 0x0f, $b); test($b == 0xf0); test($r == 0xff); } { $r = $p->opBool(true, false, $b); test($b); test(!$r); } { $r = $p->opShortIntLong(10, 11, 12, $s, $i, $l); test($s == 10); test($i == 11); test($l == 12); test($r == 12); $SHORT_MIN = -32768; $INT_MIN = -2147483647 - 1; $LONG_MIN = "-9223372036854775808"; // Must be a string $r = $p->opShortIntLong($SHORT_MIN, $INT_MIN, $LONG_MIN, $s, $i, $l); test($s == $SHORT_MIN); test($i == $INT_MIN); test($l == $LONG_MIN); test($r == $LONG_MIN); $SHORT_MAX = 32767; $INT_MAX = 2147483647; $LONG_MAX = "9223372036854775807"; // Must be a string $r = $p->opShortIntLong($SHORT_MAX, $INT_MAX, $LONG_MAX, $s, $i, $l); test($s == $SHORT_MAX); test($i == $INT_MAX); test($l == $LONG_MAX); test($r == $LONG_MAX); } { $r = $p->opFloatDouble(3.14, 1.1E10, $f, $d); test($f - 3.14 < 0.0001); test($d == 1.1E10); test($r == 1.1E10); } { // // Verify that null is accepted for strings. // $r = $p->opString(null, null, $s); test($s == " "); test($r == " "); } { $r = $p->opString("hello", "world", $s); test($s == "world hello"); test($r == "hello world"); } { $r = $p->opMyEnum($enum2, $e); test($e == $enum2); test($r == $enum3); } { $r = $p->opMyClass($p, $c1, $c2); test(Ice_proxyIdentityAndFacetEqual($c1, $p)); test(!Ice_proxyIdentityAndFacetEqual($c2, $p)); test(Ice_proxyIdentityAndFacetEqual($r, $p)); test($c1->ice_getIdentity() == $communicator->stringToIdentity("test")); test($c2->ice_getIdentity() == $communicator->stringToIdentity("noSuchIdentity")); test($r->ice_getIdentity() == $communicator->stringToIdentity("test")); $r->opVoid(); $c1->opVoid(); try { $c2->opVoid(); test(false); } catch(Exception $ex) { $le = $NS ? "Ice\\LocalException" : "Ice_LocalException"; if(!($ex instanceof $le)) { throw $ex; } } $r = $p->opMyClass(null, $c1, $c2); test($c1 == null); test($c2 != null); $r->opVoid(); } { $si1 = $NS ? eval("return new Test\\Structure;") : eval("return new Test_Structure;"); $si1->p = $p; $si1->e = $enum3; $si1->s = $NS ? eval("return new Test\\AnotherStruct;") : eval("return new Test_AnotherStruct;"); $si1->s->s = "abc"; $si2 = $NS ? eval("return new Test\\Structure;") : eval("return new Test_Structure;"); $si2->p = null; $si2->e = $enum2; $si2->s = $NS ? eval("return new Test\\AnotherStruct;") : eval("return new Test_AnotherStruct;"); $si2->s->s = "def"; $rso = $p->opStruct($si1, $si2, $so); test($rso->p == null); test($rso->e == $enum2); test($rso->s->s == "def"); test($so->p == $p); test($so->e == $enum3); test($so->s->s == "a new string"); $so->p->opVoid(); } { // // Verify that null is accepted for sequences. // $rso = $p->opByteS(null, null, $bso); test(count($bso) == 0); test(count($rso) == 0); } { $bsi1 = array(0x01, 0x11, 0x12, 0x22); $bsi2 = array(0xf1, 0xf2, 0xf3, 0xf4); $rso = $p->opByteS($bsi1, $bsi2, $bso); test(count($bso) == 4); test($bso[0] == 0x22); test($bso[1] == 0x12); test($bso[2] == 0x11); test($bso[3] == 0x01); test(count($rso) == 8); test($rso[0] == 0x01); test($rso[1] == 0x11); test($rso[2] == 0x12); test($rso[3] == 0x22); test($rso[4] == 0xf1); test($rso[5] == 0xf2); test($rso[6] == 0xf3); test($rso[7] == 0xf4); } { $bsi1 = array(true, true, false); $bsi2 = array(false); $rso = $p->opBoolS($bsi1, $bsi2, $bso); test(count($bso) == 4); test($bso[0]); test($bso[1]); test(!$bso[2]); test(!$bso[3]); test(count($rso) == 3); test(!$rso[0]); test($rso[1]); test($rso[2]); } { $ssi = array(1, 2, 3); $isi = array(5, 6, 7, 8); $lsi = array(10, 30, 20); $rso = $p->opShortIntLongS($ssi, $isi, $lsi, $sso, $iso, $lso); test(count($sso) == 3); test($sso[0] == 1); test($sso[1] == 2); test($sso[2] == 3); test(count($iso) == 4); test($iso[0] == 8); test($iso[1] == 7); test($iso[2] == 6); test($iso[3] == 5); test(count($lso) == 6); test($lso[0] == 10); test($lso[1] == 30); test($lso[2] == 20); test($lso[3] == 10); test($lso[4] == 30); test($lso[5] == 20); test(count($rso) == 3); test($rso[0] == 10); test($rso[1] == 30); test($rso[2] == 20); } { $fsi = array(3.14, 1.11); $dsi = array(1.1E10, 1.2E10, 1.3E10); $rso = $p->opFloatDoubleS($fsi, $dsi, $fso, $dso); test(count($fso) == 2); test($fso[0] - 3.14 < 0.0001); test($fso[1] - 1.11 < 0.0001); test(count($dso) == 3); test($dso[0] == 1.3E10); test($dso[1] == 1.2E10); test($dso[2] == 1.1E10); test(count($rso) == 5); test($rso[0] == 1.1E10); test($rso[1] == 1.2E10); test($rso[2] == 1.3E10); test($rso[3] - 3.14 < 0.0001); test($rso[4] - 1.11 < 0.0001); } { $ssi1 = array("abc", "de", "fghi"); $ssi2 = array("xyz"); $rso = $p->opStringS($ssi1, $ssi2, $sso); test(count($sso) == 4); test($sso[0] == "abc"); test($sso[1] == "de"); test($sso[2] == "fghi"); test($sso[3] == "xyz"); test(count($rso) == 3); test($rso[0] == "fghi"); test($rso[1] == "de"); test($rso[2] == "abc"); } { $bsi1 = array(array(0x01, 0x11, 0x12), array(0xff)); $bsi2 = array(array(0x0e), array(0xf2, 0xf1)); $rso = $p->opByteSS($bsi1, $bsi2, $bso); test(count($bso) == 2); test(count($bso[0]) == 1); test($bso[0][0] == 0xff); test(count($bso[1]) == 3); test($bso[1][0] == 0x01); test($bso[1][1] == 0x11); test($bso[1][2] == 0x12); test(count($rso) == 4); test(count($rso[0]) == 3); test($rso[0][0] == 0x01); test($rso[0][1] == 0x11); test($rso[0][2] == 0x12); test($bso[0][0] == 0xff); test(count($rso[1]) == 1); test($rso[1][0] == 0xff); test(count($rso[2]) == 1); test($rso[2][0] == 0x0e); test(count($rso[3]) == 2); test($rso[3][0] == 0xf2); test($rso[3][1] == 0xf1); } { $fsi = array(array(3.14), array(1.11), array()); $dsi = array(array(1.1E10, 1.2E10, 1.3E10)); $rso = $p->opFloatDoubleSS($fsi, $dsi, $fso, $dso); test(count($fso) == 3); test(count($fso[0]) == 1); test($fso[0][0] - 3.14 < 0.0001); test(count($fso[1]) == 1); test($fso[1][0] - 1.11 < 0.0001); test(count($fso[2]) == 0); test(count($dso) == 1); test(count($dso[0]) == 3); test($dso[0][0] == 1.1E10); test($dso[0][1] == 1.2E10); test($dso[0][2] == 1.3E10); test(count($rso) == 2); test(count($rso[0]) == 3); test($rso[0][0] == 1.1E10); test($rso[0][1] == 1.2E10); test($rso[0][2] == 1.3E10); test(count($rso[1]) == 3); test($rso[1][0] == 1.1E10); test($rso[1][1] == 1.2E10); test($rso[1][2] == 1.3E10); } { $ssi1 = array(array("abc"), array("de", "fghi")); $ssi2 = array(array(), array(), array("xyz")); $rso = $p->opStringSS($ssi1, $ssi2, $sso); test(count($sso) == 5); test(count($sso[0]) == 1); test($sso[0][0] == "abc"); test(count($sso[1]) == 2); test($sso[1][0] == "de"); test($sso[1][1] == "fghi"); test(count($sso[2]) == 0); test(count($sso[3]) == 0); test(count($sso[4]) == 1); test($sso[4][0] == "xyz"); test(count($rso) == 3); test(count($rso[0]) == 1); test($rso[0][0] == "xyz"); test(count($rso[1]) == 0); test(count($rso[2]) == 0); } { // // Verify that null is accepted for dictionaries. // $ro = $p->opByteBoolD(null, null, $_do); test(count($_do) == 0); test(count($ro) == 0); } { $di1 = array(10 => true, 100 => false); $di2 = array(10 => true, 11 => false, 101 => true); $ro = $p->opByteBoolD($di1, $di2, $_do); test($_do == $di1); test(count($ro) == 4); test($ro[10]); test(!$ro[11]); test(!$ro[100]); test($ro[101]); } { $di1 = array(110 => -1, 1100 => 123123); $di2 = array(110 => -1, 111 => -100, 1101 => 0); $ro = $p->opShortIntD($di1, $di2, $_do); test($_do == $di1); test(count($ro) == 4); test($ro[110] == -1); test($ro[111] == -100); test($ro[1100] == 123123); test($ro[1101] == 0); } { $di1 = array(999999110 => -1.1, 999999111 => 123123.2); $di2 = array(999999110 => -1.1, 999999120 => -100.4, 999999130 => 0.5); $ro = $p->opLongFloatD($di1, $di2, $_do); test(count($_do) == 2); test($_do[999999110] - $di1[999999110] < 0.0001); test($_do[999999111] - $di1[999999111] < 0.01); test(count($ro) == 4); test($ro[999999110] - -1.1 < 0.0001); test($ro[999999120] - -100.4 < 0.0001); test($ro[999999111] - 123123.2 < 0.01); test($ro[999999130] - 0.5 < 0.0001); } { $di1 = array("foo" => "abc -1.1", "bar" => "abc 123123.2"); $di2 = array("foo" => "abc -1.1", "FOO" => "abc -100.4", "BAR" => "abc 0.5"); $ro = $p->opStringStringD($di1, $di2, $_do); test(count($_do) == 2); test($_do["foo"] == $di1["foo"]); test($_do["bar"] == $di1["bar"]); test(count($ro) == 4); test($ro["foo"] == "abc -1.1"); test($ro["FOO"] == "abc -100.4"); test($ro["bar"] == "abc 123123.2"); test($ro["BAR"] == "abc 0.5"); } { $di1 = array("abc" => $enum1, "" => $enum2); $di2 = array("abc" => $enum1, "qwerty" => $enum3, "Hello!!" => $enum2); $ro = $p->opStringMyEnumD($di1, $di2, $_do); test(count($_do) == 2); test($_do["abc"] == $di1["abc"]); test($_do[""] == $di1[""]); test(count($ro) == 4); test($ro["abc"] == $enum1); test($ro["qwerty"] == $enum3); test($ro[""] == $enum2); test($ro["Hello!!"] == $enum2); } { $di1 = array($enum1 => "abc"); $di2 = array($enum2 => "Hello!!", $enum3 => "qwerty"); $ro = $p->opMyEnumStringD($di1, $di2, $_do); test(count($_do) == 1); test($_do[$enum1] == $di1[$enum1]); test(count($ro) == 3); test($ro[$enum1] == "abc"); test($ro[$enum2] == "Hello!!"); test($ro[$enum3] == "qwerty"); } { $lengths = array(0, 1, 2, 126, 127, 128, 129, 253, 254, 255, 256, 257, 1000); foreach($lengths as $l) { $s = array(); for($i = 0; $i < $l; $i++) { $s[$i] = $i; } $r = $p->opIntS($s); test(count($r) == $l); for($j = 0; $j < count($r); $j++) { test($r[$j] == -$j); } } } { $p->opIdempotent(); } { $p->opNonmutating(); } }
function twoways($communicator, $p) { global $NS; $enum1 = $NS ? constant("Test\\MyEnum::enum1") : constant("Test_MyEnum::enum1"); $enum2 = $NS ? constant("Test\\MyEnum::enum2") : constant("Test_MyEnum::enum2"); $enum3 = $NS ? constant("Test\\MyEnum::enum3") : constant("Test_MyEnum::enum3"); $myDerivedClassPrxHelper = $NS ? "Test\\MyDerivedClassPrxHelper" : "Test_MyDerivedClassPrxHelper"; $myDerivedClass = $NS ? "Test\\MyDerivedClass" : "Test_MyDerivedClass"; $myClass = $NS ? "Test\\MyClass" : "Test_MyClass"; $objectPrxHelper = $NS ? "Ice\\ObjectPrxHelper" : "Ice_ObjectPrxHelper"; $s0 = $NS ? constant("Test\\s0") : constant("Test_s0"); $s1 = $NS ? constant("Test\\s1") : constant("Test_s1"); $s2 = $NS ? constant("Test\\s2") : constant("Test_s2"); $s3 = $NS ? constant("Test\\s3") : constant("Test_s3"); $s4 = $NS ? constant("Test\\s4") : constant("Test_s4"); $s5 = $NS ? constant("Test\\s5") : constant("Test_s5"); $s6 = $NS ? constant("Test\\s6") : constant("Test_s6"); $s7 = $NS ? constant("Test\\s7") : constant("Test_s7"); $s8 = $NS ? constant("Test\\s8") : constant("Test_s8"); $s9 = $NS ? constant("Test\\s9") : constant("Test_s9"); $s10 = $NS ? constant("Test\\s10") : constant("Test_s10"); $sw0 = $NS ? constant("Test\\sw0") : constant("Test_sw0"); $sw1 = $NS ? constant("Test\\sw1") : constant("Test_sw1"); $sw2 = $NS ? constant("Test\\sw2") : constant("Test_sw2"); $sw3 = $NS ? constant("Test\\sw3") : constant("Test_sw3"); $sw4 = $NS ? constant("Test\\sw4") : constant("Test_sw4"); $sw5 = $NS ? constant("Test\\sw5") : constant("Test_sw5"); $sw6 = $NS ? constant("Test\\sw6") : constant("Test_sw6"); $sw7 = $NS ? constant("Test\\sw7") : constant("Test_sw7"); $sw8 = $NS ? constant("Test\\sw8") : constant("Test_sw8"); $sw9 = $NS ? constant("Test\\sw9") : constant("Test_sw9"); $sw10 = $NS ? constant("Test\\sw10") : constant("Test_sw10"); $ss0 = $NS ? constant("Test\\ss0") : constant("Test_ss0"); $ss1 = $NS ? constant("Test\\ss1") : constant("Test_ss1"); $ss2 = $NS ? constant("Test\\ss2") : constant("Test_ss2"); $ss3 = $NS ? constant("Test\\ss3") : constant("Test_ss3"); $ss4 = $NS ? constant("Test\\ss4") : constant("Test_ss4"); $ss5 = $NS ? constant("Test\\ss5") : constant("Test_ss5"); $su0 = $NS ? constant("Test\\su0") : constant("Test_su0"); $su1 = $NS ? constant("Test\\su1") : constant("Test_su1"); $su2 = $NS ? constant("Test\\su2") : constant("Test_su2"); $literals = $p->opStringLiterals(); test($s0 == "\\" && $s0 == $sw0 && $s0 == $literals[0] && $s0 == $literals[11]); test($s1 == "A" && $s1 == $sw1 && $s1 == $literals[1] && $s1 == $literals[12]); test($s2 == "Ice" && $s2 == $sw2 && $s2 == $literals[2] && $s2 == $literals[13]); test($s3 == "A21" && $s3 == $sw3 && $s3 == $literals[3] && $s3 == $literals[14]); test($s4 == "\\u0041 \\U00000041" && $s4 == $sw4 && $s4 == $literals[4] && $s4 == $literals[15]); test($s5 == "ÿ" && $s5 == $sw5 && $s5 == $literals[5] && $s5 == $literals[16]); test($s6 == "Ͽ" && $s6 == $sw6 && $s6 == $literals[6] && $s6 == $literals[17]); test($s7 == "װ" && $s7 == $sw7 && $s7 == $literals[7] && $s7 == $literals[18]); test($s8 == "𐀀" && $s8 == $sw8 && $s8 == $literals[8] && $s8 == $literals[19]); test($s9 == "🍌" && $s9 == $sw9 && $s9 == $literals[9] && $s9 == $literals[20]); test($s10 == "ට" && $s10 == $sw10 && $s10 == $literals[10] && $s10 == $literals[21]); test($ss0 == "'\"?\\\f\n\r\t\v" && $ss0 == $ss1 && $ss1 == $ss2 && $ss0 == $literals[22] && $ss0 == $literals[23] && $ss0 == $literals[24]); test($ss3 == "\\\\U\\u\\" && $ss3 == $literals[25]); test($ss4 == "\\A\\" && $ss4 == $literals[26]); test($ss5 == "\\u0041\\" && $ss5 == $literals[27]); test($su0 == $su1 && $su0 == $su2 && $su0 == $literals[28] && $su0 == $literals[29] && $su0 == $literals[30]); $p->ice_ping(); test($myDerivedClassPrxHelper::ice_staticId() == $myDerivedClass::ice_staticId()); test($objectPrxHelper::ice_staticId() == "::Ice::Object"); test($p->ice_isA($myClass::ice_staticId())); test($p->ice_id() == $myDerivedClass::ice_staticId()); test(count($p->ice_ids()) == 3); test($p->ice_id() == "::Test::MyDerivedClass"); $p->opVoid(); $r = $p->opByte(0xff, 0xf, $b); test($b == 0xf0); test($r == 0xff); $r = $p->opBool(true, false, $b); test($b); test(!$r); $r = $p->opShortIntLong(10, 11, 12, $s, $i, $l); test($s == 10); test($i == 11); test($l == 12); test($r == 12); $SHORT_MIN = -32768; $INT_MIN = -2147483647 - 1; $LONG_MIN = "-9223372036854775808"; // Must be a string $r = $p->opShortIntLong($SHORT_MIN, $INT_MIN, $LONG_MIN, $s, $i, $l); test($s == $SHORT_MIN); test($i == $INT_MIN); test($l == $LONG_MIN); test($r == $LONG_MIN); $SHORT_MAX = 32767; $INT_MAX = 2147483647; $LONG_MAX = "9223372036854775807"; // Must be a string $r = $p->opShortIntLong($SHORT_MAX, $INT_MAX, $LONG_MAX, $s, $i, $l); test($s == $SHORT_MAX); test($i == $INT_MAX); test($l == $LONG_MAX); test($r == $LONG_MAX); $r = $p->opFloatDouble(3.14, 11000000000.0, $f, $d); test($f - 3.14 < 0.0001); test($d == 11000000000.0); test($r == 11000000000.0); // // Test invalid ranges for numbers. // try { $r = $p->opByte(0x1ff, 0xf, $b); test(false); } catch (InvalidArgumentException $ex) { } try { $r = $p->opShortIntLong($SHORT_MAX + 1, 0, 0, $s, $i, $l); test(false); } catch (InvalidArgumentException $ex) { } try { $r = $p->opShortIntLong($SHORT_MIN - 1, 0, 0, $s, $i, $l); test(false); } catch (InvalidArgumentException $ex) { } try { $r = $p->opShortIntLong(0, $INT_MAX + 1, 0, $s, $i, $l); test(false); } catch (InvalidArgumentException $ex) { } try { $r = $p->opShortIntLong(0, $INT_MIN - 1, 0, $s, $i, $l); test(false); } catch (InvalidArgumentException $ex) { } try { $r = $p->opShortIntLong(0, 0, $LONG_MAX + 1, $s, $i, $l); test(false); } catch (InvalidArgumentException $ex) { } try { $r = $p->opShortIntLong(0, 0, $LONG_MIN - 1, $s, $i, $l); test(false); } catch (InvalidArgumentException $ex) { } $r = $p->opFloatDouble(3.402823466E+38, 0.0, $f, $d); $r = $p->opFloatDouble(-3.402823466E+38, 0.0, $f, $d); foreach (array(NAN, -NAN) as $val) { $r = $p->opFloatDouble($val, $val, $f, $d); test(is_nan($r) && is_nan($f) && is_nan($d)); } foreach (array(INF, -INF) as $val) { $r = $p->opFloatDouble($val, $val, $f, $d); test(is_infinite($r) && is_infinite($f) && is_infinite($d)); } try { $r = $p->opFloatDouble(3.402823466E+38 * 2, 0.0, $f, $d); test(false); } catch (InvalidArgumentException $ex) { } try { $r = $p->opFloatDouble(-3.402823466E+38 * 2, 0.0, $f, $d); test(false); } catch (InvalidArgumentException $ex) { } // // Verify that null is accepted for strings. // $r = $p->opString(null, null, $s); test($s == " "); test($r == " "); $r = $p->opString("hello", "world", $s); test($s == "world hello"); test($r == "hello world"); $r = $p->opMyEnum($enum2, $e); test($e == $enum2); test($r == $enum3); $r = $p->opMyClass($p, $c1, $c2); test(Ice_proxyIdentityAndFacetEqual($c1, $p)); test(!Ice_proxyIdentityAndFacetEqual($c2, $p)); test(Ice_proxyIdentityAndFacetEqual($r, $p)); test($c1->ice_getIdentity() == $communicator->stringToIdentity("test")); test($c2->ice_getIdentity() == $communicator->stringToIdentity("noSuchIdentity")); test($r->ice_getIdentity() == $communicator->stringToIdentity("test")); $r->opVoid(); $c1->opVoid(); try { $c2->opVoid(); test(false); } catch (Exception $ex) { $le = $NS ? "Ice\\LocalException" : "Ice_LocalException"; if (!$ex instanceof $le) { throw $ex; } } $r = $p->opMyClass(null, $c1, $c2); test($c1 == null); test($c2 != null); $r->opVoid(); $si1 = $NS ? eval("return new Test\\Structure;") : eval("return new Test_Structure;"); $si1->p = $p; $si1->e = $enum3; $si1->s = $NS ? eval("return new Test\\AnotherStruct;") : eval("return new Test_AnotherStruct;"); $si1->s->s = "abc"; $si2 = $NS ? eval("return new Test\\Structure;") : eval("return new Test_Structure;"); $si2->p = null; $si2->e = $enum2; $si2->s = $NS ? eval("return new Test\\AnotherStruct;") : eval("return new Test_AnotherStruct;"); $si2->s->s = "def"; $rso = $p->opStruct($si1, $si2, $so); test($rso->p == null); test($rso->e == $enum2); test($rso->s->s == "def"); test($so->p == $p); test($so->e == $enum3); test($so->s->s == "a new string"); $so->p->opVoid(); // Test marshalling of null structs and structs with null members. $si1 = $NS ? eval("return new Test\\Structure;") : eval("return new Test_Structure;"); $si2 = null; $rso = $p->opStruct($si1, $si2, $so); test($rso->p == null); test($rso->e == $enum1); test($rso->s->s == ""); test($so->p == null); test($so->e == $enum1); test($so->s->s == "a new string"); // // Verify that null is accepted for sequences. // $rso = $p->opByteS(null, null, $bso); test(count($bso) == 0); test(count($rso) == 0); $bsi1 = array(0x1, 0x11, 0x12, 0x22); $bsi2 = array(0xf1, 0xf2, 0xf3, 0xf4); $rso = $p->opByteS($bsi1, $bsi2, $bso); test(count($bso) == 4); test($bso[0] == 0x22); test($bso[1] == 0x12); test($bso[2] == 0x11); test($bso[3] == 0x1); test(count($rso) == 8); test($rso[0] == 0x1); test($rso[1] == 0x11); test($rso[2] == 0x12); test($rso[3] == 0x22); test($rso[4] == 0xf1); test($rso[5] == 0xf2); test($rso[6] == 0xf3); test($rso[7] == 0xf4); $bsi1 = array(true, true, false); $bsi2 = array(false); $rso = $p->opBoolS($bsi1, $bsi2, $bso); test(count($bso) == 4); test($bso[0]); test($bso[1]); test(!$bso[2]); test(!$bso[3]); test(count($rso) == 3); test(!$rso[0]); test($rso[1]); test($rso[2]); $ssi = array(1, 2, 3); $isi = array(5, 6, 7, 8); $lsi = array(10, 30, 20); $rso = $p->opShortIntLongS($ssi, $isi, $lsi, $sso, $iso, $lso); test(count($sso) == 3); test($sso[0] == 1); test($sso[1] == 2); test($sso[2] == 3); test(count($iso) == 4); test($iso[0] == 8); test($iso[1] == 7); test($iso[2] == 6); test($iso[3] == 5); test(count($lso) == 6); test($lso[0] == 10); test($lso[1] == 30); test($lso[2] == 20); test($lso[3] == 10); test($lso[4] == 30); test($lso[5] == 20); test(count($rso) == 3); test($rso[0] == 10); test($rso[1] == 30); test($rso[2] == 20); $fsi = array(3.14, 1.11); $dsi = array(11000000000.0, 12000000000.0, 13000000000.0); $rso = $p->opFloatDoubleS($fsi, $dsi, $fso, $dso); test(count($fso) == 2); test($fso[0] - 3.14 < 0.0001); test($fso[1] - 1.11 < 0.0001); test(count($dso) == 3); test($dso[0] == 13000000000.0); test($dso[1] == 12000000000.0); test($dso[2] == 11000000000.0); test(count($rso) == 5); test($rso[0] == 11000000000.0); test($rso[1] == 12000000000.0); test($rso[2] == 13000000000.0); test($rso[3] - 3.14 < 0.0001); test($rso[4] - 1.11 < 0.0001); $ssi1 = array("abc", "de", "fghi"); $ssi2 = array("xyz"); $rso = $p->opStringS($ssi1, $ssi2, $sso); test(count($sso) == 4); test($sso[0] == "abc"); test($sso[1] == "de"); test($sso[2] == "fghi"); test($sso[3] == "xyz"); test(count($rso) == 3); test($rso[0] == "fghi"); test($rso[1] == "de"); test($rso[2] == "abc"); $bsi1 = array(array(0x1, 0x11, 0x12), array(0xff)); $bsi2 = array(array(0xe), array(0xf2, 0xf1)); $rso = $p->opByteSS($bsi1, $bsi2, $bso); test(count($bso) == 2); test(count($bso[0]) == 1); test($bso[0][0] == 0xff); test(count($bso[1]) == 3); test($bso[1][0] == 0x1); test($bso[1][1] == 0x11); test($bso[1][2] == 0x12); test(count($rso) == 4); test(count($rso[0]) == 3); test($rso[0][0] == 0x1); test($rso[0][1] == 0x11); test($rso[0][2] == 0x12); test($bso[0][0] == 0xff); test(count($rso[1]) == 1); test($rso[1][0] == 0xff); test(count($rso[2]) == 1); test($rso[2][0] == 0xe); test(count($rso[3]) == 2); test($rso[3][0] == 0xf2); test($rso[3][1] == 0xf1); $fsi = array(array(3.14), array(1.11), array()); $dsi = array(array(11000000000.0, 12000000000.0, 13000000000.0)); $rso = $p->opFloatDoubleSS($fsi, $dsi, $fso, $dso); test(count($fso) == 3); test(count($fso[0]) == 1); test($fso[0][0] - 3.14 < 0.0001); test(count($fso[1]) == 1); test($fso[1][0] - 1.11 < 0.0001); test(count($fso[2]) == 0); test(count($dso) == 1); test(count($dso[0]) == 3); test($dso[0][0] == 11000000000.0); test($dso[0][1] == 12000000000.0); test($dso[0][2] == 13000000000.0); test(count($rso) == 2); test(count($rso[0]) == 3); test($rso[0][0] == 11000000000.0); test($rso[0][1] == 12000000000.0); test($rso[0][2] == 13000000000.0); test(count($rso[1]) == 3); test($rso[1][0] == 11000000000.0); test($rso[1][1] == 12000000000.0); test($rso[1][2] == 13000000000.0); $ssi1 = array(array("abc"), array("de", "fghi")); $ssi2 = array(array(), array(), array("xyz")); $rso = $p->opStringSS($ssi1, $ssi2, $sso); test(count($sso) == 5); test(count($sso[0]) == 1); test($sso[0][0] == "abc"); test(count($sso[1]) == 2); test($sso[1][0] == "de"); test($sso[1][1] == "fghi"); test(count($sso[2]) == 0); test(count($sso[3]) == 0); test(count($sso[4]) == 1); test($sso[4][0] == "xyz"); test(count($rso) == 3); test(count($rso[0]) == 1); test($rso[0][0] == "xyz"); test(count($rso[1]) == 0); test(count($rso[2]) == 0); // // Verify that null is accepted for dictionaries. // $ro = $p->opByteBoolD(null, null, $_do); test(count($_do) == 0); test(count($ro) == 0); $di1 = array(10 => true, 100 => false); $di2 = array(10 => true, 11 => false, 101 => true); $ro = $p->opByteBoolD($di1, $di2, $_do); test($_do == $di1); test(count($ro) == 4); test($ro[10]); test(!$ro[11]); test(!$ro[100]); test($ro[101]); $di1 = array(110 => -1, 1100 => 123123); $di2 = array(110 => -1, 111 => -100, 1101 => 0); $ro = $p->opShortIntD($di1, $di2, $_do); test($_do == $di1); test(count($ro) == 4); test($ro[110] == -1); test($ro[111] == -100); test($ro[1100] == 123123); test($ro[1101] == 0); $di1 = array(999999110 => -1.1, 999999111 => 123123.2); $di2 = array(999999110 => -1.1, 999999120 => -100.4, 999999130 => 0.5); $ro = $p->opLongFloatD($di1, $di2, $_do); test(count($_do) == 2); test($_do[999999110] - $di1[999999110] < 0.0001); test($_do[999999111] - $di1[999999111] < 0.01); test(count($ro) == 4); test($ro[999999110] - -1.1 < 0.0001); test($ro[999999120] - -100.4 < 0.0001); test($ro[999999111] - 123123.2 < 0.01); test($ro[999999130] - 0.5 < 0.0001); $di1 = array("foo" => "abc -1.1", "bar" => "abc 123123.2"); $di2 = array("foo" => "abc -1.1", "FOO" => "abc -100.4", "BAR" => "abc 0.5"); $ro = $p->opStringStringD($di1, $di2, $_do); test(count($_do) == 2); test($_do["foo"] == $di1["foo"]); test($_do["bar"] == $di1["bar"]); test(count($ro) == 4); test($ro["foo"] == "abc -1.1"); test($ro["FOO"] == "abc -100.4"); test($ro["bar"] == "abc 123123.2"); test($ro["BAR"] == "abc 0.5"); $di1 = array("abc" => $enum1, "" => $enum2); $di2 = array("abc" => $enum1, "qwerty" => $enum3, "Hello!!" => $enum2); $ro = $p->opStringMyEnumD($di1, $di2, $_do); test(count($_do) == 2); test($_do["abc"] == $di1["abc"]); test($_do[""] == $di1[""]); test(count($ro) == 4); test($ro["abc"] == $enum1); test($ro["qwerty"] == $enum3); test($ro[""] == $enum2); test($ro["Hello!!"] == $enum2); $di1 = array($enum1 => "abc"); $di2 = array($enum2 => "Hello!!", $enum3 => "qwerty"); $ro = $p->opMyEnumStringD($di1, $di2, $_do); test(count($_do) == 1); test($_do[$enum1] == $di1[$enum1]); test(count($ro) == 3); test($ro[$enum1] == "abc"); test($ro[$enum2] == "Hello!!"); test($ro[$enum3] == "qwerty"); $dsi1 = array(array(10 => true, 100 => false), array(10 => true, 11 => false, 101 => true)); $dsi2 = array(array(100 => false, 101 => false)); $ro = $p->opByteBoolDS($dsi1, $dsi2, $_do); test(count($ro) == 2); test(count($ro[0]) == 3); test($ro[0][10]); test(!$ro[0][11]); test($ro[0][101]); test(count($ro[1]) == 2); test($ro[1][10]); test(!$ro[1][100]); test(count($_do) == 3); test(count($_do[0]) == 2); test(!$_do[0][100]); test(!$_do[0][101]); test(count($_do[1]) == 2); test($_do[1][10]); test(!$_do[1][100]); test(count($_do[2]) == 3); test($_do[2][10]); test(!$_do[2][11]); test($_do[2][101]); $dsi1 = array(array(110 => -1, 1100 => 123123), array(110 => -1, 111 => -100, 1101 => 0)); $dsi2 = array(array(100 => -1001)); $ro = $p->opShortIntDS($dsi1, $dsi2, $_do); test(count($ro) == 2); test(count($ro[0]) == 3); test($ro[0][110] == -1); test($ro[0][111] == -100); test($ro[0][1101] == 0); test(count($ro[1]) == 2); test($ro[1][110] == -1); test($ro[1][1100] == 123123); test(count($_do) == 3); test(count($_do[0]) == 1); test($_do[0][100] == -1001); test(count($_do[1]) == 2); test($_do[1][110] == -1); test($_do[1][1100] == 123123); test(count($_do[2]) == 3); test($_do[2][110] == -1); test($_do[2][111] == -100); test($_do[2][1101] == 0); $dsi1 = array(array(999999110 => -1.1, 999999111 => 123123.2), array(999999110 => -1.1, 999999120 => -100.4, 999999130 => 0.5)); $dsi2 = array(array(999999140 => 3.14)); $ro = $p->opLongFloatDS($dsi1, $dsi2, $_do); test(count($ro) == 2); test(count($ro[0]) == 3); test($ro[0][999999110] - -1.1 < 0.01); test($ro[0][999999120] - -100.4 < 0.01); test($ro[0][999999130] - 0.5 < 0.01); test(count($ro[1]) == 2); test($ro[1][999999110] - -1.1 < 0.01); test($ro[1][999999111] - 123123.2 < 0.01); test(count($_do) == 3); test(count($_do[0]) == 1); test($_do[0][999999140] - 3.14 < 0.01); test(count($_do[1]) == 2); test($_do[1][999999110] - -1.1 < 0.01); test($_do[1][999999111] - 123123.2 < 0.01); test(count($_do[2]) == 3); test($_do[2][999999110] - -1.1 < 0.01); test($_do[2][999999120] - -100.4 < 0.01); test($_do[2][999999130] - 0.5 < 0.01); $dsi1 = array(array("foo" => "abc -1.1", "bar" => "abc 123123.2"), array("foo" => "abc -1.1", "FOO" => "abc -100.4", "BAR" => "abc 0.5")); $dsi2 = array(array("f00" => "ABC -3.14")); $ro = $p->opStringStringDS($dsi1, $dsi2, $_do); test(count($ro) == 2); test(count($ro[0]) == 3); test($ro[0]["foo"] == "abc -1.1"); test($ro[0]["FOO"] == "abc -100.4"); test($ro[0]["BAR"] == "abc 0.5"); test(count($ro[1]) == 2); test($ro[1]["foo"] == "abc -1.1"); test($ro[1]["bar"] == "abc 123123.2"); test(count($_do) == 3); test(count($_do[0]) == 1); test($_do[0]["f00"] == "ABC -3.14"); test(count($_do[1]) == 2); test($_do[1]["foo"] == "abc -1.1"); test($_do[1]["bar"] == "abc 123123.2"); test(count($_do[2]) == 3); test($_do[2]["foo"] == "abc -1.1"); test($_do[2]["FOO"] == "abc -100.4"); test($_do[2]["BAR"] == "abc 0.5"); $dsi1 = array(array("abc" => $enum1, "" => $enum2), array("abc" => $enum1, "qwerty" => $enum3, "Hello!!" => $enum2)); $dsi2 = array(array("Goodbye" => $enum1)); $ro = $p->opStringMyEnumDS($dsi1, $dsi2, $_do); test(count($ro) == 2); test(count($ro[0]) == 3); test($ro[0]["abc"] == $enum1); test($ro[0]["qwerty"] == $enum3); test($ro[0]["Hello!!"] == $enum2); test(count($ro[1]) == 2); test($ro[1]["abc"] == $enum1); test($ro[1][""] == $enum2); test(count($_do) == 3); test(count($_do[0]) == 1); test($_do[0]["Goodbye"] == $enum1); test(count($_do[1]) == 2); test($_do[1]["abc"] == $enum1); test($_do[1][""] == $enum2); test(count($_do[2]) == 3); test($_do[2]["abc"] == $enum1); test($_do[2]["qwerty"] == $enum3); test($_do[2]["Hello!!"] == $enum2); $dsi1 = array(array($enum1 => 'abc'), array($enum2 => 'Hello!!', $enum3 => 'qwerty')); $dsi2 = array(array($enum1 => 'Goodbye')); $ro = $p->opMyEnumStringDS($dsi1, $dsi2, $_do); test(count($ro) == 2); test(count($ro[0]) == 2); test($ro[0][$enum2] == "Hello!!"); test($ro[0][$enum3] == "qwerty"); test(count($ro[1]) == 1); test($ro[1][$enum1] == "abc"); test(count($_do) == 3); test(count($_do[0]) == 1); test($_do[0][$enum1] == "Goodbye"); test(count($_do[1]) == 1); test($_do[1][$enum1] == "abc"); test(count($_do[2]) == 2); test($_do[2][$enum2] == "Hello!!"); test($_do[2][$enum3] == "qwerty"); $sdi1 = array(0x1 => array(0x1, 0x11), 0x22 => array(0x12)); $sdi2 = array(0xf1 => array(0xf2, 0xf3)); $ro = $p->opByteByteSD($sdi1, $sdi2, $_do); test($_do == $sdi2); test(count($ro) == 3); test(count($ro[0x1]) == 2); test($ro[0x1][0] == 0x1); test($ro[0x1][1] == 0x11); test(count($ro[0x22]) == 1); test($ro[0x22][0] == 0x12); test(count($ro[0xf1]) == 2); test($ro[0xf1][0] == 0xf2); test($ro[0xf1][1] == 0xf3); $sdi1 = array(false => array(true, false), true => array(false, true, true)); $sdi2 = array(false => array(true, false)); $ro = $p->opBoolBoolSD($sdi1, $sdi2, $_do); test($_do == $sdi2); test(count($ro) == 2); test(count($ro[false]) == 2); test($ro[false][0]); test(!$ro[false][1]); test(count($ro[true]) == 3); test(!$ro[true][0]); test($ro[true][1]); test($ro[true][2]); $sdi1 = array(1 => array(1, 2, 3), 2 => array(4, 5)); $sdi2 = array(4 => array(6, 7)); $ro = $p->opShortShortSD($sdi1, $sdi2, $_do); test($_do == $sdi2); test(count($ro) == 3); test(count($ro[1]) == 3); test($ro[1][0] == 1); test($ro[1][1] == 2); test($ro[1][2] == 3); test(count($ro[2]) == 2); test($ro[2][0] == 4); test($ro[2][1] == 5); test(count($ro[4]) == 2); test($ro[4][0] == 6); test($ro[4][1] == 7); $sdi1 = array(100 => array(100, 200, 300), 200 => array(400, 500)); $sdi2 = array(400 => array(600, 700)); $ro = $p->opIntIntSD($sdi1, $sdi2, $_do); test($_do == $sdi2); test(count($ro) == 3); test(count($ro[100]) == 3); test($ro[100][0] == 100); test($ro[100][1] == 200); test($ro[100][2] == 300); test(count($ro[200]) == 2); test($ro[200][0] == 400); test($ro[200][1] == 500); test(count($ro[400]) == 2); test($ro[400][0] == 600); test($ro[400][1] == 700); $sdi1 = array(999999990 => array(999999110, 999999111, 999999110), 999999991 => array(999999120, 999999130)); $sdi2 = array(999999992 => array(999999110, 999999120)); $ro = $p->opLongLongSD($sdi1, $sdi2, $_do); test($_do == $sdi2); test(count($ro) == 3); test(count($ro[999999990]) == 3); test($ro[999999990][0] == 999999110); test($ro[999999990][1] == 999999111); test($ro[999999990][2] == 999999110); test(count($ro[999999991]) == 2); test($ro[999999991][0] == 999999120); test($ro[999999991][1] == 999999130); test(count($ro[999999992]) == 2); test($ro[999999992][0] == 999999110); test($ro[999999992][1] == 999999120); $sdi1 = array("abc" => array(-1.1, 123123.2, 100.0), "ABC" => array(42.24, -1.61)); $sdi2 = array("aBc" => array(-3.14, 3.14)); $ro = $p->opStringFloatSD($sdi1, $sdi2, $_do); test(count($_do) == 1); test(count($_do["aBc"]) == 2); test($_do["aBc"][0] - -3.14 < 0.01); test($_do["aBc"][1] - 3.14 < 0.01); test(count($ro) == 3); test(count($ro["abc"]) == 3); test($ro["abc"][0] - -1.1 < 0.01); test($ro["abc"][1] - 123123.2 < 0.01); test($ro["abc"][2] - 100.0 < 0.01); test(count($ro["ABC"]) == 2); test($ro["ABC"][0] - 42.24 < 0.01); test($ro["ABC"][1] - -1.61 < 0.01); test(count($ro["aBc"]) == 2); test($ro["aBc"][0] - -3.14 < 0.01); test($ro["aBc"][1] - 3.14 < 0.01); $sdi1 = array("Hello!!" => array(11000000000.0, 12000000000.0, 13000000000.0), "Goodbye" => array(14000000000.0, 15000000000.0)); $sdi2 = array("" => array(16000000000.0, 17000000000.0)); $ro = $p->opStringDoubleSD($sdi1, $sdi2, $_do); test($_do == $sdi2); test(count($ro) == 3); test(count($ro["Hello!!"]) == 3); test($ro["Hello!!"][0] == 11000000000.0); test($ro["Hello!!"][1] == 12000000000.0); test($ro["Hello!!"][2] == 13000000000.0); test(count($ro["Goodbye"]) == 2); test($ro["Goodbye"][0] == 14000000000.0); test($ro["Goodbye"][1] == 15000000000.0); test(count($ro[""]) == 2); test($ro[""][0] == 16000000000.0); test($ro[""][1] == 17000000000.0); $sdi1 = array("abc" => array("abc", "de", "fghi"), "def" => array("xyz", "or")); $sdi2 = array("ghi" => array("and", "xor")); $ro = $p->opStringStringSD($sdi1, $sdi2, $_do); test($_do == $sdi2); test(count($ro) == 3); test(count($ro["abc"]) == 3); test($ro["abc"][0] == "abc"); test($ro["abc"][1] == "de"); test($ro["abc"][2] == "fghi"); test(count($ro["def"]) == 2); test($ro["def"][0] == "xyz"); test($ro["def"][1] == "or"); test(count($ro["ghi"]) == 2); test($ro["ghi"][0] == "and"); test($ro["ghi"][1] == "xor"); $sdi1 = array($enum3 => array($enum1, $enum1, $enum2), $enum2 => array($enum1, $enum2)); $sdi2 = array($enum1 => array($enum3, $enum3)); $ro = $p->opMyEnumMyEnumSD($sdi1, $sdi2, $_do); test($_do == $sdi2); test(count($ro) == 3); test(count($ro[$enum3]) == 3); test($ro[$enum3][0] == $enum1); test($ro[$enum3][1] == $enum1); test($ro[$enum3][2] == $enum2); test(count($ro[$enum2]) == 2); test($ro[$enum2][0] == $enum1); test($ro[$enum2][1] == $enum2); test(count($ro[$enum1]) == 2); test($ro[$enum1][0] == $enum3); test($ro[$enum1][1] == $enum3); $lengths = array(0, 1, 2, 126, 127, 128, 129, 253, 254, 255, 256, 257, 1000); foreach ($lengths as $l) { $s = array(); for ($i = 0; $i < $l; $i++) { $s[$i] = $i; } $r = $p->opIntS($s); test(count($r) == $l); for ($j = 0; $j < count($r); $j++) { test($r[$j] == -$j); } } $p->opIdempotent(); $p->opNonmutating(); test($p->opByte1(0xff) == 0xff); test($p->opShort1(0x7fff) == 0x7fff); test($p->opInt1(0x7fffffff) == 0x7fffffff); test($p->opLong1($LONG_MAX) == $LONG_MAX); test($p->opFloat1(1.0) == 1.0); test($p->opDouble1(1.0) == 1.0); test($p->opString1("opString1") == "opString1"); test(count($p->opStringS1(null)) == 0); test(count($p->opByteBoolD1(null)) == 0); test(count($p->opStringS2(null)) == 0); test(count($p->opByteBoolD2(null)) == 0); }
function twoways($communicator, $p) { global $NS; $enum1 = $NS ? constant("Test\\MyEnum::enum1") : constant("Test_MyEnum::enum1"); $enum2 = $NS ? constant("Test\\MyEnum::enum2") : constant("Test_MyEnum::enum2"); $enum3 = $NS ? constant("Test\\MyEnum::enum3") : constant("Test_MyEnum::enum3"); $myDerivedClassPrxHelper = $NS ? "Test\\MyDerivedClassPrxHelper" : "Test_MyDerivedClassPrxHelper"; $myDerivedClass = $NS ? "Test\\MyDerivedClass" : "Test_MyDerivedClass"; $myClass = $NS ? "Test\\MyClass" : "Test_MyClass"; $objectPrxHelper = $NS ? "Ice\\ObjectPrxHelper" : "Ice_ObjectPrxHelper"; { $p->ice_ping(); } { test($myDerivedClassPrxHelper::ice_staticId() == $myDerivedClass::ice_staticId()); test($objectPrxHelper::ice_staticId() == "::Ice::Object"); } { test($p->ice_isA($myClass::ice_staticId())); } { test($p->ice_id() == $myDerivedClass::ice_staticId()); } { test(count($p->ice_ids()) == 3); } { test($p->ice_id() == "::Test::MyDerivedClass"); } { $p->opVoid(); } { $r = $p->opByte(0xff, 0x0f, $b); test($b == 0xf0); test($r == 0xff); } { $r = $p->opBool(true, false, $b); test($b); test(!$r); } { $r = $p->opShortIntLong(10, 11, 12, $s, $i, $l); test($s == 10); test($i == 11); test($l == 12); test($r == 12); $SHORT_MIN = -32768; $INT_MIN = -2147483647 - 1; $LONG_MIN = "-9223372036854775808"; // Must be a string $r = $p->opShortIntLong($SHORT_MIN, $INT_MIN, $LONG_MIN, $s, $i, $l); test($s == $SHORT_MIN); test($i == $INT_MIN); test($l == $LONG_MIN); test($r == $LONG_MIN); $SHORT_MAX = 32767; $INT_MAX = 2147483647; $LONG_MAX = "9223372036854775807"; // Must be a string $r = $p->opShortIntLong($SHORT_MAX, $INT_MAX, $LONG_MAX, $s, $i, $l); test($s == $SHORT_MAX); test($i == $INT_MAX); test($l == $LONG_MAX); test($r == $LONG_MAX); } { $r = $p->opFloatDouble(3.14, 1.1E10, $f, $d); test($f - 3.14 < 0.0001); test($d == 1.1E10); test($r == 1.1E10); } { // // Test invalid ranges for numbers. // try { $r = $p->opByte(0x01ff, 0x0f, $b); test(false); } catch(InvalidArgumentException $ex) { } try { $r = $p->opShortIntLong($SHORT_MAX + 1, 0, 0, $s, $i, $l); test(false); } catch(InvalidArgumentException $ex) { } try { $r = $p->opShortIntLong($SHORT_MIN - 1, 0, 0, $s, $i, $l); test(false); } catch(InvalidArgumentException $ex) { } try { $r = $p->opShortIntLong(0, $INT_MAX + 1, 0, $s, $i, $l); test(false); } catch(InvalidArgumentException $ex) { } try { $r = $p->opShortIntLong(0, $INT_MIN - 1, 0, $s, $i, $l); test(false); } catch(InvalidArgumentException $ex) { } try { $r = $p->opShortIntLong(0, 0, $LONG_MAX + 1, $s, $i, $l); test(false); } catch(InvalidArgumentException $ex) { } try { $r = $p->opShortIntLong(0, 0, $LONG_MIN - 1, $s, $i, $l); test(false); } catch(InvalidArgumentException $ex) { } $r = $p->opFloatDouble(3.402823466E38, 0.0, $f, $d); $r = $p->opFloatDouble(-3.402823466E38, 0.0, $f, $d); try { $r = $p->opFloatDouble(3.402823466E38*2, 0.0, $f, $d); test(false); } catch(InvalidArgumentException $ex) { } try { $r = $p->opFloatDouble(-3.402823466E38*2, 0.0, $f, $d); test(false); } catch(InvalidArgumentException $ex) { } } { // // Verify that null is accepted for strings. // $r = $p->opString(null, null, $s); test($s == " "); test($r == " "); } { $r = $p->opString("hello", "world", $s); test($s == "world hello"); test($r == "hello world"); } { $r = $p->opMyEnum($enum2, $e); test($e == $enum2); test($r == $enum3); } { $r = $p->opMyClass($p, $c1, $c2); test(Ice_proxyIdentityAndFacetEqual($c1, $p)); test(!Ice_proxyIdentityAndFacetEqual($c2, $p)); test(Ice_proxyIdentityAndFacetEqual($r, $p)); test($c1->ice_getIdentity() == $communicator->stringToIdentity("test")); test($c2->ice_getIdentity() == $communicator->stringToIdentity("noSuchIdentity")); test($r->ice_getIdentity() == $communicator->stringToIdentity("test")); $r->opVoid(); $c1->opVoid(); try { $c2->opVoid(); test(false); } catch(Exception $ex) { $le = $NS ? "Ice\\LocalException" : "Ice_LocalException"; if(!($ex instanceof $le)) { throw $ex; } } $r = $p->opMyClass(null, $c1, $c2); test($c1 == null); test($c2 != null); $r->opVoid(); } { $si1 = $NS ? eval("return new Test\\Structure;") : eval("return new Test_Structure;"); $si1->p = $p; $si1->e = $enum3; $si1->s = $NS ? eval("return new Test\\AnotherStruct;") : eval("return new Test_AnotherStruct;"); $si1->s->s = "abc"; $si2 = $NS ? eval("return new Test\\Structure;") : eval("return new Test_Structure;"); $si2->p = null; $si2->e = $enum2; $si2->s = $NS ? eval("return new Test\\AnotherStruct;") : eval("return new Test_AnotherStruct;"); $si2->s->s = "def"; $rso = $p->opStruct($si1, $si2, $so); test($rso->p == null); test($rso->e == $enum2); test($rso->s->s == "def"); test($so->p == $p); test($so->e == $enum3); test($so->s->s == "a new string"); $so->p->opVoid(); // Test marshalling of null structs and structs with null members. $si1 = $NS ? eval("return new Test\\Structure;") : eval("return new Test_Structure;"); $si2 = null; $rso = $p->opStruct($si1, $si2, $so); test($rso->p == null); test($rso->e == $enum1); test($rso->s->s == ""); test($so->p == null); test($so->e == $enum1); test($so->s->s == "a new string"); } { // // Verify that null is accepted for sequences. // $rso = $p->opByteS(null, null, $bso); test(count($bso) == 0); test(count($rso) == 0); } { $bsi1 = array(0x01, 0x11, 0x12, 0x22); $bsi2 = array(0xf1, 0xf2, 0xf3, 0xf4); $rso = $p->opByteS($bsi1, $bsi2, $bso); test(count($bso) == 4); test($bso[0] == 0x22); test($bso[1] == 0x12); test($bso[2] == 0x11); test($bso[3] == 0x01); test(count($rso) == 8); test($rso[0] == 0x01); test($rso[1] == 0x11); test($rso[2] == 0x12); test($rso[3] == 0x22); test($rso[4] == 0xf1); test($rso[5] == 0xf2); test($rso[6] == 0xf3); test($rso[7] == 0xf4); } { $bsi1 = array(true, true, false); $bsi2 = array(false); $rso = $p->opBoolS($bsi1, $bsi2, $bso); test(count($bso) == 4); test($bso[0]); test($bso[1]); test(!$bso[2]); test(!$bso[3]); test(count($rso) == 3); test(!$rso[0]); test($rso[1]); test($rso[2]); } { $ssi = array(1, 2, 3); $isi = array(5, 6, 7, 8); $lsi = array(10, 30, 20); $rso = $p->opShortIntLongS($ssi, $isi, $lsi, $sso, $iso, $lso); test(count($sso) == 3); test($sso[0] == 1); test($sso[1] == 2); test($sso[2] == 3); test(count($iso) == 4); test($iso[0] == 8); test($iso[1] == 7); test($iso[2] == 6); test($iso[3] == 5); test(count($lso) == 6); test($lso[0] == 10); test($lso[1] == 30); test($lso[2] == 20); test($lso[3] == 10); test($lso[4] == 30); test($lso[5] == 20); test(count($rso) == 3); test($rso[0] == 10); test($rso[1] == 30); test($rso[2] == 20); } { $fsi = array(3.14, 1.11); $dsi = array(1.1E10, 1.2E10, 1.3E10); $rso = $p->opFloatDoubleS($fsi, $dsi, $fso, $dso); test(count($fso) == 2); test($fso[0] - 3.14 < 0.0001); test($fso[1] - 1.11 < 0.0001); test(count($dso) == 3); test($dso[0] == 1.3E10); test($dso[1] == 1.2E10); test($dso[2] == 1.1E10); test(count($rso) == 5); test($rso[0] == 1.1E10); test($rso[1] == 1.2E10); test($rso[2] == 1.3E10); test($rso[3] - 3.14 < 0.0001); test($rso[4] - 1.11 < 0.0001); } { $ssi1 = array("abc", "de", "fghi"); $ssi2 = array("xyz"); $rso = $p->opStringS($ssi1, $ssi2, $sso); test(count($sso) == 4); test($sso[0] == "abc"); test($sso[1] == "de"); test($sso[2] == "fghi"); test($sso[3] == "xyz"); test(count($rso) == 3); test($rso[0] == "fghi"); test($rso[1] == "de"); test($rso[2] == "abc"); } { $bsi1 = array(array(0x01, 0x11, 0x12), array(0xff)); $bsi2 = array(array(0x0e), array(0xf2, 0xf1)); $rso = $p->opByteSS($bsi1, $bsi2, $bso); test(count($bso) == 2); test(count($bso[0]) == 1); test($bso[0][0] == 0xff); test(count($bso[1]) == 3); test($bso[1][0] == 0x01); test($bso[1][1] == 0x11); test($bso[1][2] == 0x12); test(count($rso) == 4); test(count($rso[0]) == 3); test($rso[0][0] == 0x01); test($rso[0][1] == 0x11); test($rso[0][2] == 0x12); test($bso[0][0] == 0xff); test(count($rso[1]) == 1); test($rso[1][0] == 0xff); test(count($rso[2]) == 1); test($rso[2][0] == 0x0e); test(count($rso[3]) == 2); test($rso[3][0] == 0xf2); test($rso[3][1] == 0xf1); } { $fsi = array(array(3.14), array(1.11), array()); $dsi = array(array(1.1E10, 1.2E10, 1.3E10)); $rso = $p->opFloatDoubleSS($fsi, $dsi, $fso, $dso); test(count($fso) == 3); test(count($fso[0]) == 1); test($fso[0][0] - 3.14 < 0.0001); test(count($fso[1]) == 1); test($fso[1][0] - 1.11 < 0.0001); test(count($fso[2]) == 0); test(count($dso) == 1); test(count($dso[0]) == 3); test($dso[0][0] == 1.1E10); test($dso[0][1] == 1.2E10); test($dso[0][2] == 1.3E10); test(count($rso) == 2); test(count($rso[0]) == 3); test($rso[0][0] == 1.1E10); test($rso[0][1] == 1.2E10); test($rso[0][2] == 1.3E10); test(count($rso[1]) == 3); test($rso[1][0] == 1.1E10); test($rso[1][1] == 1.2E10); test($rso[1][2] == 1.3E10); } { $ssi1 = array(array("abc"), array("de", "fghi")); $ssi2 = array(array(), array(), array("xyz")); $rso = $p->opStringSS($ssi1, $ssi2, $sso); test(count($sso) == 5); test(count($sso[0]) == 1); test($sso[0][0] == "abc"); test(count($sso[1]) == 2); test($sso[1][0] == "de"); test($sso[1][1] == "fghi"); test(count($sso[2]) == 0); test(count($sso[3]) == 0); test(count($sso[4]) == 1); test($sso[4][0] == "xyz"); test(count($rso) == 3); test(count($rso[0]) == 1); test($rso[0][0] == "xyz"); test(count($rso[1]) == 0); test(count($rso[2]) == 0); } { // // Verify that null is accepted for dictionaries. // $ro = $p->opByteBoolD(null, null, $_do); test(count($_do) == 0); test(count($ro) == 0); } { $di1 = array(10 => true, 100 => false); $di2 = array(10 => true, 11 => false, 101 => true); $ro = $p->opByteBoolD($di1, $di2, $_do); test($_do == $di1); test(count($ro) == 4); test($ro[10]); test(!$ro[11]); test(!$ro[100]); test($ro[101]); } { $di1 = array(110 => -1, 1100 => 123123); $di2 = array(110 => -1, 111 => -100, 1101 => 0); $ro = $p->opShortIntD($di1, $di2, $_do); test($_do == $di1); test(count($ro) == 4); test($ro[110] == -1); test($ro[111] == -100); test($ro[1100] == 123123); test($ro[1101] == 0); } { $di1 = array(999999110 => -1.1, 999999111 => 123123.2); $di2 = array(999999110 => -1.1, 999999120 => -100.4, 999999130 => 0.5); $ro = $p->opLongFloatD($di1, $di2, $_do); test(count($_do) == 2); test($_do[999999110] - $di1[999999110] < 0.0001); test($_do[999999111] - $di1[999999111] < 0.01); test(count($ro) == 4); test($ro[999999110] - -1.1 < 0.0001); test($ro[999999120] - -100.4 < 0.0001); test($ro[999999111] - 123123.2 < 0.01); test($ro[999999130] - 0.5 < 0.0001); } { $di1 = array("foo" => "abc -1.1", "bar" => "abc 123123.2"); $di2 = array("foo" => "abc -1.1", "FOO" => "abc -100.4", "BAR" => "abc 0.5"); $ro = $p->opStringStringD($di1, $di2, $_do); test(count($_do) == 2); test($_do["foo"] == $di1["foo"]); test($_do["bar"] == $di1["bar"]); test(count($ro) == 4); test($ro["foo"] == "abc -1.1"); test($ro["FOO"] == "abc -100.4"); test($ro["bar"] == "abc 123123.2"); test($ro["BAR"] == "abc 0.5"); } { $di1 = array("abc" => $enum1, "" => $enum2); $di2 = array("abc" => $enum1, "qwerty" => $enum3, "Hello!!" => $enum2); $ro = $p->opStringMyEnumD($di1, $di2, $_do); test(count($_do) == 2); test($_do["abc"] == $di1["abc"]); test($_do[""] == $di1[""]); test(count($ro) == 4); test($ro["abc"] == $enum1); test($ro["qwerty"] == $enum3); test($ro[""] == $enum2); test($ro["Hello!!"] == $enum2); } { $di1 = array($enum1 => "abc"); $di2 = array($enum2 => "Hello!!", $enum3 => "qwerty"); $ro = $p->opMyEnumStringD($di1, $di2, $_do); test(count($_do) == 1); test($_do[$enum1] == $di1[$enum1]); test(count($ro) == 3); test($ro[$enum1] == "abc"); test($ro[$enum2] == "Hello!!"); test($ro[$enum3] == "qwerty"); } { $dsi1 = array(array(10 => true, 100 => false ), array(10 => true, 11 => false, 101 => true)); $dsi2 = array(array(100 => false, 101 => false)); $ro = $p->opByteBoolDS($dsi1, $dsi2, $_do); test(count($ro) == 2); test(count($ro[0]) == 3); test($ro[0][10]); test(!$ro[0][11]); test($ro[0][101]); test(count($ro[1]) == 2); test($ro[1][10]); test(!$ro[1][100]); test(count($_do) == 3); test(count($_do[0]) == 2); test(!$_do[0][100]); test(!$_do[0][101]); test(count($_do[1]) == 2); test($_do[1][10]); test(!$_do[1][100]); test(count($_do[2]) == 3); test($_do[2][10]); test(!$_do[2][11]); test($_do[2][101]); } { $dsi1 = array(array(110 => -1, 1100 => 123123), array(110 => -1, 111 => -100, 1101 => 0)); $dsi2 = array(array(100 => -1001)); $ro= $p->opShortIntDS($dsi1, $dsi2, $_do); test(count($ro) == 2); test(count($ro[0]) == 3); test($ro[0][110] == -1); test($ro[0][111] == -100); test($ro[0][1101] == 0); test(count($ro[1]) == 2); test($ro[1][110] == -1); test($ro[1][1100] == 123123); test(count($_do) == 3); test(count($_do[0]) == 1); test($_do[0][100] == -1001); test(count($_do[1]) == 2); test($_do[1][110] == -1); test($_do[1][1100] == 123123); test(count($_do[2]) == 3); test($_do[2][110] == -1); test($_do[2][111] == -100); test($_do[2][1101] == 0); } { $dsi1 = array(array(999999110 => -1.1, 999999111 => 123123.2 ), array(999999110 => -1.1, 999999120 => -100.4, 999999130 => 0.5 )); $dsi2 = array(array(999999140 => 3.14 )); $ro = $p->opLongFloatDS($dsi1, $dsi2, $_do); test(count($ro) == 2); test(count($ro[0]) == 3); test($ro[0][999999110] - -1.1 < 0.01); test($ro[0][999999120] - -100.4 < 0.01); test($ro[0][999999130] - 0.5 < 0.01); test(count($ro[1]) == 2); test($ro[1][999999110] - -1.1 < 0.01); test($ro[1][999999111] - 123123.2 < 0.01); test(count($_do) == 3); test(count($_do[0]) == 1); test($_do[0][999999140] - 3.14 < 0.01); test(count($_do[1]) == 2); test($_do[1][999999110] - -1.1 < 0.01); test($_do[1][999999111] - 123123.2 < 0.01); test(count($_do[2]) == 3); test($_do[2][999999110] - -1.1 < 0.01); test($_do[2][999999120] - -100.4 < 0.01); test($_do[2][999999130] - 0.5 < 0.01); } { $dsi1 = array(array("foo" => "abc -1.1", "bar" => "abc 123123.2" ), array("foo" => "abc -1.1", "FOO" => "abc -100.4", "BAR" => "abc 0.5" )); $dsi2 = array(array("f00" => "ABC -3.14" )); $ro = $p->opStringStringDS($dsi1, $dsi2, $_do); test(count($ro) == 2); test(count($ro[0]) == 3); test($ro[0]["foo"] == "abc -1.1"); test($ro[0]["FOO"] == "abc -100.4"); test($ro[0]["BAR"] == "abc 0.5"); test(count($ro[1]) == 2); test($ro[1]["foo"] == "abc -1.1"); test($ro[1]["bar"] == "abc 123123.2"); test(count($_do) == 3); test(count($_do[0]) == 1); test($_do[0]["f00"] == "ABC -3.14"); test(count($_do[1]) == 2); test($_do[1]["foo"] == "abc -1.1"); test($_do[1]["bar"] == "abc 123123.2"); test(count($_do[2]) == 3); test($_do[2]["foo"] == "abc -1.1"); test($_do[2]["FOO"] == "abc -100.4"); test($_do[2]["BAR"] == "abc 0.5"); } { $dsi1 = array(array("abc" => $enum1, "" => $enum2), array("abc" => $enum1, "qwerty" => $enum3, "Hello!!" => $enum2)); $dsi2 = array(array("Goodbye" => $enum1)); $ro = $p->opStringMyEnumDS($dsi1, $dsi2, $_do); test(count($ro) == 2); test(count($ro[0]) == 3); test($ro[0]["abc"] == $enum1); test($ro[0]["qwerty"] == $enum3); test($ro[0]["Hello!!"] == $enum2); test(count($ro[1]) == 2); test($ro[1]["abc"] == $enum1); test($ro[1][""] == $enum2); test(count($_do) == 3); test(count($_do[0]) == 1); test($_do[0]["Goodbye"] == $enum1); test(count($_do[1]) == 2); test($_do[1]["abc"] == $enum1); test($_do[1][""] == $enum2); test(count($_do[2]) == 3); test($_do[2]["abc"] == $enum1); test($_do[2]["qwerty"] == $enum3); test($_do[2]["Hello!!"] == $enum2); } { $dsi1 = array(array($enum1 => 'abc'), array($enum2 => 'Hello!!', $enum3 => 'qwerty')); $dsi2 = array(array($enum1 => 'Goodbye')); $ro = $p->opMyEnumStringDS($dsi1, $dsi2, $_do); test(count($ro) == 2); test(count($ro[0]) == 2); test($ro[0][$enum2] == "Hello!!"); test($ro[0][$enum3] == "qwerty"); test(count($ro[1]) == 1); test($ro[1][$enum1] == "abc"); test(count($_do) == 3); test(count($_do[0]) == 1); test($_do[0][$enum1] == "Goodbye"); test(count($_do[1]) == 1); test($_do[1][$enum1] == "abc"); test(count($_do[2]) == 2); test($_do[2][$enum2] == "Hello!!"); test($_do[2][$enum3] == "qwerty"); } { $sdi1 = array(0x01 => array(0x01, 0x11), 0x22 => array(0x12)); $sdi2 = array(0xf1 => array(0xf2, 0xf3)); $ro = $p->opByteByteSD($sdi1, $sdi2, $_do); test($_do == $sdi2); test(count($ro) == 3); test(count($ro[0x01]) == 2); test($ro[0x01][0] == 0x01); test($ro[0x01][1] == 0x11); test(count($ro[0x22]) == 1); test($ro[0x22][0] == 0x12); test(count($ro[0xf1]) == 2); test($ro[0xf1][0] == 0xf2); test($ro[0xf1][1] == 0xf3); } { $sdi1 = array(false => array(true, false), true => array(false, true, true)); $sdi2 = array(false => array(true, false)); $ro = $p->opBoolBoolSD($sdi1, $sdi2, $_do); test($_do == $sdi2); test(count($ro) == 2); test(count($ro[false]) == 2); test($ro[false][0]); test(!$ro[false][1]); test(count($ro[true]) == 3); test(!$ro[true][0]); test($ro[true][1]); test($ro[true][2]); } { $sdi1 = array(1 => array(1, 2, 3), 2 => array(4, 5)); $sdi2 = array(4 => array(6, 7)); $ro = $p->opShortShortSD($sdi1, $sdi2, $_do); test($_do == $sdi2); test(count($ro) == 3); test(count($ro[1]) == 3); test($ro[1][0] == 1); test($ro[1][1] == 2); test($ro[1][2] == 3); test(count($ro[2]) == 2); test($ro[2][0] == 4); test($ro[2][1] == 5); test(count($ro[4]) == 2); test($ro[4][0] == 6); test($ro[4][1] == 7); } { $sdi1 = array(100 => array(100, 200, 300), 200 => array(400, 500)); $sdi2 = array(400 => array(600, 700)); $ro = $p->opIntIntSD($sdi1, $sdi2, $_do); test($_do == $sdi2); test(count($ro) == 3); test(count($ro[100]) == 3); test($ro[100][0] == 100); test($ro[100][1] == 200); test($ro[100][2] == 300); test(count($ro[200]) == 2); test($ro[200][0] == 400); test($ro[200][1] == 500); test(count($ro[400]) == 2); test($ro[400][0] == 600); test($ro[400][1] == 700); } { $sdi1 = array(999999990 => array(999999110, 999999111, 999999110), 999999991 => array(999999120, 999999130)); $sdi2 = array(999999992 => array(999999110, 999999120)); $ro = $p->opLongLongSD($sdi1, $sdi2, $_do); test($_do == $sdi2); test(count($ro) == 3); test(count($ro[999999990]) == 3); test($ro[999999990][0] == 999999110); test($ro[999999990][1] == 999999111); test($ro[999999990][2] == 999999110); test(count($ro[999999991]) == 2); test($ro[999999991][0] == 999999120); test($ro[999999991][1] == 999999130); test(count($ro[999999992]) == 2); test($ro[999999992][0] == 999999110); test($ro[999999992][1] == 999999120); } { $sdi1 = array("abc" => array(-1.1, 123123.2, 100.0), "ABC" => array(42.24, -1.61)); $sdi2 = array("aBc" => array(-3.14, 3.14)); $ro = $p->opStringFloatSD($sdi1, $sdi2, $_do); test(count($_do) == 1); test(count($_do["aBc"]) == 2); test($_do["aBc"][0] - -3.14 < 0.01); test($_do["aBc"][1] - 3.14 < 0.01); test(count($ro) == 3); test(count($ro["abc"]) == 3); test($ro["abc"][0] - -1.1 < 0.01); test($ro["abc"][1] - 123123.2 < 0.01); test($ro["abc"][2] - 100.0 < 0.01); test(count($ro["ABC"]) == 2); test($ro["ABC"][0] - 42.24 < 0.01); test($ro["ABC"][1] - -1.61 < 0.01); test(count($ro["aBc"]) == 2); test($ro["aBc"][0] - -3.14 < 0.01); test($ro["aBc"][1] - 3.14 < 0.01); } { $sdi1 = array("Hello!!" => array(1.1E10, 1.2E10, 1.3E10), "Goodbye" => array(1.4E10, 1.5E10)); $sdi2 = array("" => array(1.6E10, 1.7E10)); $ro = $p->opStringDoubleSD($sdi1, $sdi2, $_do); test($_do == $sdi2); test(count($ro) == 3); test(count($ro["Hello!!"]) == 3); test($ro["Hello!!"][0] == 1.1E10); test($ro["Hello!!"][1] == 1.2E10); test($ro["Hello!!"][2] == 1.3E10); test(count($ro["Goodbye"]) == 2); test($ro["Goodbye"][0] == 1.4E10); test($ro["Goodbye"][1] == 1.5E10); test(count($ro[""]) == 2); test($ro[""][0] == 1.6E10); test($ro[""][1] == 1.7E10); } { $sdi1 = array("abc" => array("abc", "de", "fghi") , "def" => array("xyz", "or")); $sdi2 = array("ghi" => array("and", "xor")); $ro = $p->opStringStringSD($sdi1, $sdi2, $_do); test($_do == $sdi2); test(count($ro) == 3); test(count($ro["abc"]) == 3); test($ro["abc"][0] == "abc"); test($ro["abc"][1] == "de"); test($ro["abc"][2] == "fghi"); test(count($ro["def"]) == 2); test($ro["def"][0] == "xyz"); test($ro["def"][1] == "or"); test(count($ro["ghi"]) == 2); test($ro["ghi"][0] == "and"); test($ro["ghi"][1] == "xor"); } { $sdi1 = array($enum3 => array($enum1, $enum1, $enum2), $enum2 => array($enum1, $enum2)); $sdi2 = array($enum1 => array($enum3, $enum3)); $ro = $p->opMyEnumMyEnumSD($sdi1, $sdi2, $_do); test($_do == $sdi2); test(count($ro) == 3); test(count($ro[$enum3]) == 3); test($ro[$enum3][0] == $enum1); test($ro[$enum3][1] == $enum1); test($ro[$enum3][2] == $enum2); test(count($ro[$enum2]) == 2); test($ro[$enum2][0] == $enum1); test($ro[$enum2][1] == $enum2); test(count($ro[$enum1]) == 2); test($ro[$enum1][0] == $enum3); test($ro[$enum1][1] == $enum3); } { $lengths = array(0, 1, 2, 126, 127, 128, 129, 253, 254, 255, 256, 257, 1000); foreach($lengths as $l) { $s = array(); for($i = 0; $i < $l; $i++) { $s[$i] = $i; } $r = $p->opIntS($s); test(count($r) == $l); for($j = 0; $j < count($r); $j++) { test($r[$j] == -$j); } } } { $p->opIdempotent(); } { $p->opNonmutating(); } test($p->opByte1(0xFF) == 0xFF); test($p->opShort1(0x7FFF) == 0x7FFF); test($p->opInt1(0x7FFFFFFF) == 0x7FFFFFFF); test($p->opLong1($LONG_MAX) == $LONG_MAX); test($p->opFloat1(1.0) == 1.0); test($p->opDouble1(1.0) == 1.0); test($p->opString1("opString1") == "opString1"); test(count($p->opStringS1(null)) == 0); test(count($p->opByteBoolD1(null)) == 0); test(count($p->opStringS2(null)) == 0); test(count($p->opByteBoolD2(null)) == 0); }