diff --git a/test/php/TestClient.php b/test/php/TestClient.php
index 2443ee0..c1f6435 100755
--- a/test/php/TestClient.php
+++ b/test/php/TestClient.php
@@ -44,6 +44,7 @@
 /** Include the Thrift base */
 /** Include the protocols */
 use Thrift\Protocol\TBinaryProtocol;
+use Thrift\Protocol\TBinaryProtocolAccelerated;
 use Thrift\Protocol\TCompactProtocol;
 use Thrift\Protocol\TJSONProtocol;
 
@@ -63,9 +64,16 @@
     return new TCompactProtocol($transport);
   } else if ($PROTO == 'json') {
     return new TJSONProtocol($transport);
+  } else if ($PROTO == 'accel') {
+    if (!function_exists('thrift_protocol_write_binary')) {
+      echo "Acceleration extension is not loaded\n";
+      exit(1);
+    }
+    return new TBinaryProtocolAccelerated($transport);
   }
 
-  die ("--protocol must be one of {binary|compact|json}");
+  echo "--protocol must be one of {binary|compact|json|accel}\n";
+  exit(1);
 }
 
 $host = 'localhost';
@@ -114,11 +122,11 @@
 
 $start = microtime(true);
 
-define(ERR_BASETYPES, 1);
-// ERR_STRUCTS = 2;
-// ERR_CONTAINERS = 4;
-// ERR_EXCEPTIONS = 8;
-// ERR_UNKNOWN = 64;
+define('ERR_BASETYPES', 1);
+define('ERR_STRUCTS', 2);
+define('ERR_CONTAINERS', 4);
+define('ERR_EXCEPTIONS', 8);
+define('ERR_UNKNOWN', 64);
 $exitcode = 0;
 /**
  * VOID TEST
@@ -132,7 +140,7 @@
   print_r("$method($value)");
   $ret = $testClient->$method($value);
   print_r(" = \"$ret\"\n");
-  if ($value != $ret) {
+  if ($value !== $ret) {
     print_r("*** FAILED ***\n");
     $exitcode |= ERR_BASETYPES;
   }
@@ -144,9 +152,18 @@
 roundtrip($testClient, 'testString', "Test");
 
 /**
+ * BOOL TEST
+ */
+roundtrip($testClient, 'testBool', true);
+roundtrip($testClient, 'testBool', false);
+
+/**
  * BYTE TEST
  */
 roundtrip($testClient, 'testByte', 1);
+roundtrip($testClient, 'testByte', -1);
+roundtrip($testClient, 'testByte', 127);
+roundtrip($testClient, 'testByte', -128);
 
 /**
  * I32 TEST
@@ -156,6 +173,9 @@
 /**
  * I64 TEST
  */
+roundtrip($testClient, 'testI64', 0);
+roundtrip($testClient, 'testI64', 1);
+roundtrip($testClient, 'testI64', -1);
 roundtrip($testClient, 'testI64', -34359738368);
 
 /**
@@ -182,6 +202,11 @@
         $in->i32_thing.", ".
         $in->i64_thing."}\n");
 
+if ($in != $out) {
+    echo "**FAILED**\n";
+    $exitcode |= ERR_STRUCTS;
+}
+
 /**
  * NESTED STRUCT TEST
  */
@@ -199,6 +224,11 @@
         $in->i64_thing."}, ".
         $in2->i32_thing."}\n");
 
+if ($in2 != $out2) {
+    echo "**FAILED**\n";
+    $exitcode |= ERR_STRUCTS;
+}
+
 /**
  * MAP TEST
  */
@@ -231,36 +261,36 @@
 }
 print_r("}\n");
 
+if ($mapin != $mapout) {
+    echo "**FAILED**\n";
+    $exitcode |= ERR_CONTAINERS;
+}
+
 /**
  * SET TEST
  */
 $setout = array();;
 for ($i = -2; $i < 3; ++$i) {
-  $setout []= $i;
+  $setout[$i]= true;
 }
 print_r("testSet({");
-$first = true;
-foreach ($setout as $val) {
-  if ($first) {
-    $first = false;
-  } else {
-    print_r(", ");
-  }
-  print_r($val);
-}
+echo implode(',', array_keys($setout));
 print_r("})");
 $setin = $testClient->testSet($setout);
 print_r(" = {");
-$first = true;
-foreach ($setin as $val) {
-  if ($first) {
-    $first = false;
-  } else {
-    print_r(", ");
-  }
-  print_r($val);
-}
+echo implode(', ', array_keys($setin));
 print_r("}\n");
+// Order of keys in set does not matter
+ksort($setin);
+if ($setout !== $setin) {
+    echo "**FAILED**\n";
+    $exitcode |= ERR_CONTAINERS;
+}
+// Regression test for corrupted array
+if ($setin[2] !== $setout[2] || is_int($setin[2])) {
+    echo "**FAILED**\n";
+    $exitcode |= ERR_CONTAINERS;
+}
 
 /**
  * LIST TEST
@@ -292,6 +322,10 @@
   print_r($val);
 }
 print_r("}\n");
+if ($listin !== $listout) {
+    echo "**FAILED**\n";
+    $exitcode |= ERR_CONTAINERS;
+}
 
 /**
  * ENUM TEST
@@ -299,22 +333,42 @@
 print_r("testEnum(ONE)");
 $ret = $testClient->testEnum(\ThriftTest\Numberz::ONE);
 print_r(" = $ret\n");
+if ($ret != \ThriftTest\Numberz::ONE) {
+    echo "**FAILED**\n";
+    $exitcode |= ERR_STRUCTS;
+}
 
 print_r("testEnum(TWO)");
 $ret = $testClient->testEnum(\ThriftTest\Numberz::TWO);
 print_r(" = $ret\n");
+if ($ret != \ThriftTest\Numberz::TWO) {
+    echo "**FAILED**\n";
+    $exitcode |= ERR_STRUCTS;
+}
 
 print_r("testEnum(THREE)");
 $ret = $testClient->testEnum(\ThriftTest\Numberz::THREE);
 print_r(" = $ret\n");
+if ($ret != \ThriftTest\Numberz::THREE) {
+    echo "**FAILED**\n";
+    $exitcode |= ERR_STRUCTS;
+}
 
 print_r("testEnum(FIVE)");
 $ret = $testClient->testEnum(\ThriftTest\Numberz::FIVE);
 print_r(" = $ret\n");
+if ($ret != \ThriftTest\Numberz::FIVE) {
+    echo "**FAILED**\n";
+    $exitcode |= ERR_STRUCTS;
+}
 
 print_r("testEnum(EIGHT)");
 $ret = $testClient->testEnum(\ThriftTest\Numberz::EIGHT);
 print_r(" = $ret\n");
+if ($ret != \ThriftTest\Numberz::EIGHT) {
+    echo "**FAILED**\n";
+    $exitcode |= ERR_STRUCTS;
+}
 
 /**
  * TYPEDEF TEST
@@ -322,6 +376,10 @@
 print_r("testTypedef(309858235082523)");
 $uid = $testClient->testTypedef(309858235082523);
 print_r(" = $uid\n");
+if ($uid !== 309858235082523) {
+    echo "**FAILED**\n";
+    $exitcode |= ERR_STRUCTS;
+}
 
 /**
  * NESTED MAP TEST
@@ -337,6 +395,14 @@
   print_r("}, ");
 }
 print_r("}\n");
+$expected_mm = [
+  -4 => [-4 => -4, -3 => -3, -2 => -2, -1 => -1],
+  4 => [4 => 4, 3 => 3, 2 => 2, 1 => 1],
+];
+if ($mm != $expected_mm) {
+    echo "**FAILED**\n";
+    $exitcode |= ERR_CONTAINERS;
+}
 
 /**
  * INSANITY TEST
@@ -388,6 +454,7 @@
 try {
   $testClient->testException('Xception');
   print_r("  void\nFAILURE\n");
+  $exitcode |= ERR_EXCEPTIONS;
 } catch (\ThriftTest\Xception $x) {
   print_r(' caught xception '.$x->errorCode.': '.$x->message."\n");
 }
@@ -407,19 +474,19 @@
 
 // Max I32
 $num = pow(2, 30) + (pow(2, 30) - 1);
-roundtrip($testClient, testI32, $num);
+roundtrip($testClient, 'testI32', $num);
 
 // Min I32
 $num = 0 - pow(2, 31);
-roundtrip($testClient, testI32, $num);
+roundtrip($testClient, 'testI32', $num);
 
 // Max I64
 $num = pow(2, 62) + (pow(2, 62) - 1);
-roundtrip($testClient, testI64, $num);
+roundtrip($testClient, 'testI64', $num);
 
 // Min I64
 $num = 0 - pow(2, 62) - pow(2, 62);
-roundtrip($testClient, testI64, $num);
+roundtrip($testClient, 'testI64', $num);
 
 $transport->close();
 exit($exitcode);
diff --git a/test/tests.json b/test/tests.json
index 0dbc8bf..2460b83 100644
--- a/test/tests.json
+++ b/test/tests.json
@@ -416,6 +416,12 @@
       ],
       "command": [
         "php",
+        "-dextension_dir=../../lib/php/src/ext/thrift_protocol/modules/",
+        "--php-ini=../../lib/php/thrift_protocol.ini",
+        "--no-php-ini",
+        "-ddisplay_errors=stderr",
+        "-dlog_errors=0",
+        "-derror_reporting=E_ALL",
         "TestClient.php"
       ]
     },
