diff --git a/tests/MyGame/InParentNamespace.cs b/tests/MyGame/InParentNamespace.cs
index 869c400..efefa34 100644
--- a/tests/MyGame/InParentNamespace.cs
+++ b/tests/MyGame/InParentNamespace.cs
@@ -6,13 +6,14 @@
 {
 
 using global::System;
+using global::System.Collections.Generic;
 using global::FlatBuffers;
 
 public struct InParentNamespace : IFlatbufferObject
 {
   private Table __p;
   public ByteBuffer ByteBuffer { get { return __p.bb; } }
-  public static void ValidateVersion() { FlatBufferConstants.FLATBUFFERS_1_11_1(); }
+  public static void ValidateVersion() { FlatBufferConstants.FLATBUFFERS_1_12_0(); }
   public static InParentNamespace GetRootAsInParentNamespace(ByteBuffer _bb) { return GetRootAsInParentNamespace(_bb, new InParentNamespace()); }
   public static InParentNamespace GetRootAsInParentNamespace(ByteBuffer _bb, InParentNamespace obj) { return (obj.__assign(_bb.GetInt(_bb.Position) + _bb.Position, _bb)); }
   public void __init(int _i, ByteBuffer _bb) { __p = new Table(_i, _bb); }
@@ -24,7 +25,26 @@
     int o = builder.EndTable();
     return new Offset<MyGame.InParentNamespace>(o);
   }
+  public InParentNamespaceT UnPack() {
+    var _o = new InParentNamespaceT();
+    this.UnPackTo(_o);
+    return _o;
+  }
+  public void UnPackTo(InParentNamespaceT _o) {
+  }
+  public static Offset<MyGame.InParentNamespace> Pack(FlatBufferBuilder builder, InParentNamespaceT _o) {
+    if (_o == null) return default(Offset<MyGame.InParentNamespace>);
+    StartInParentNamespace(builder);
+    return EndInParentNamespace(builder);
+  }
 };
 
+public class InParentNamespaceT
+{
+
+  public InParentNamespaceT() {
+  }
+}
+
 
 }
