diff --git a/tests/MyGame/Example/StructOfStructsOfStructs.php b/tests/MyGame/Example/StructOfStructsOfStructs.php
new file mode 100644
index 0000000..bcdcca0
--- /dev/null
+++ b/tests/MyGame/Example/StructOfStructsOfStructs.php
@@ -0,0 +1,55 @@
+<?php
+// automatically generated by the FlatBuffers compiler, do not modify
+
+namespace MyGame\Example;
+
+use \Google\FlatBuffers\Struct;
+use \Google\FlatBuffers\Table;
+use \Google\FlatBuffers\ByteBuffer;
+use \Google\FlatBuffers\FlatBufferBuilder;
+
+class StructOfStructsOfStructs extends Struct
+{
+    /**
+     * @param int $_i offset
+     * @param ByteBuffer $_bb
+     * @return StructOfStructsOfStructs
+     **/
+    public function init($_i, ByteBuffer $_bb)
+    {
+        $this->bb_pos = $_i;
+        $this->bb = $_bb;
+        return $this;
+    }
+
+    /**
+     * @return StructOfStructs
+     */
+    public function getA()
+    {
+        $obj = new StructOfStructs();
+        $obj->init($this->bb_pos + 0, $this->bb);
+        return $obj;
+    }
+
+
+    /**
+     * @return int offset
+     */
+    public static function createStructOfStructsOfStructs(FlatBufferBuilder $builder, $a_a_id, $a_a_distance, $a_b_a, $a_b_b, $a_c_id, $a_c_distance)
+    {
+        $builder->prep(4, 20);
+        $builder->prep(4, 20);
+        $builder->prep(4, 8);
+        $builder->putUint($a_c_distance);
+        $builder->putUint($a_c_id);
+        $builder->prep(2, 4);
+        $builder->pad(1);
+        $builder->putSbyte($a_b_b);
+        $builder->putShort($a_b_a);
+        $builder->prep(4, 8);
+        $builder->putUint($a_a_distance);
+        $builder->putUint($a_a_id);
+        return $builder->offset();
+    }
+}
