diff --git a/tests/go_test.go b/tests/go_test.go
index 4784705..9e64cca 100644
--- a/tests/go_test.go
+++ b/tests/go_test.go
@@ -28,6 +28,7 @@
 	"reflect"
 	"sort"
 	"testing"
+	"testing/quick"
 
 	flatbuffers "github.com/google/flatbuffers/go"
 )
@@ -77,6 +78,8 @@
 	CheckByteStringIsNestedError(t.Fatalf)
 	CheckStructIsNotInlineError(t.Fatalf)
 	CheckFinishedBytesError(t.Fatalf)
+	CheckSharedStrings(t.Fatalf)
+	CheckEmptiedBuilder(t.Fatalf)
 
 	// Verify that GetRootAs works for non-root tables
 	CheckGetRootAsForNonRootTable(t.Fatalf)
@@ -84,12 +87,13 @@
 
 	// Verify that using the generated Go code builds a buffer without
 	// returning errors:
-	generated, off := CheckGeneratedBuild(t.Fatalf)
+	generated, off := CheckGeneratedBuild(false, t.Fatalf)
 
 	// Verify that the buffer generated by Go code is readable by the
 	// generated Go code:
-	CheckReadBuffer(generated, off, t.Fatalf)
-	CheckMutateBuffer(generated, off, t.Fatalf)
+	CheckReadBuffer(generated, off, false, t.Fatalf)
+	CheckMutateBuffer(generated, off, false, t.Fatalf)
+	CheckObjectAPI(generated, off, false, t.Fatalf)
 
 	// Verify that the buffer generated by C++ code is readable by the
 	// generated Go code:
@@ -97,8 +101,9 @@
 	if err != nil {
 		t.Fatal(err)
 	}
-	CheckReadBuffer(monsterDataCpp, 0, t.Fatalf)
-	CheckMutateBuffer(monsterDataCpp, 0, t.Fatalf)
+	CheckReadBuffer(monsterDataCpp, 0, false, t.Fatalf)
+	CheckMutateBuffer(monsterDataCpp, 0, false, t.Fatalf)
+	CheckObjectAPI(monsterDataCpp, 0, false, t.Fatalf)
 
 	// Verify that vtables are deduplicated when written:
 	CheckVtableDeduplication(t.Fatalf)
@@ -122,6 +127,9 @@
 	// Check a parent namespace import
 	CheckParentNamespace(t.Fatalf)
 
+	// Check size-prefixed flatbuffers
+	CheckSizePrefixedBuffer(t.Fatalf)
+
 	// If the filename of the FlatBuffers file generated by the Java test
 	// is given, check that Go code can read it, and that Go code
 	// generates an identical buffer when used to create the example data:
@@ -130,7 +138,7 @@
 		if err != nil {
 			t.Fatal(err)
 		}
-		CheckReadBuffer(monsterDataJava, 0, t.Fatalf)
+		CheckReadBuffer(monsterDataJava, 0, false, t.Fatalf)
 		CheckByteEquality(generated[off:], monsterDataJava, t.Fatalf)
 	}
 
@@ -148,11 +156,19 @@
 
 // CheckReadBuffer checks that the given buffer is evaluated correctly
 // as the example Monster.
-func CheckReadBuffer(buf []byte, offset flatbuffers.UOffsetT, fail func(string, ...interface{})) {
+func CheckReadBuffer(buf []byte, offset flatbuffers.UOffsetT, sizePrefix bool, fail func(string, ...interface{})) {
 	// try the two ways of generating a monster
-	monster1 := example.GetRootAsMonster(buf, offset)
+	var monster1 *example.Monster
 	monster2 := &example.Monster{}
-	flatbuffers.GetRootAs(buf, offset, monster2)
+
+	if sizePrefix {
+		monster1 = example.GetSizePrefixedRootAsMonster(buf, offset)
+		flatbuffers.GetSizePrefixedRootAs(buf, offset, monster2)
+	} else {
+		monster1 = example.GetRootAsMonster(buf, offset)
+		flatbuffers.GetRootAs(buf, offset, monster2)
+	}
+
 	for _, monster := range []*example.Monster{monster1, monster2} {
 		if got := monster.Hp(); 80 != got {
 			fail(FailString("hp", 80, got))
@@ -315,13 +331,18 @@
 
 // CheckMutateBuffer checks that the given buffer can be mutated correctly
 // as the example Monster. Only available scalar values are mutated.
-func CheckMutateBuffer(org []byte, offset flatbuffers.UOffsetT, fail func(string, ...interface{})) {
+func CheckMutateBuffer(org []byte, offset flatbuffers.UOffsetT, sizePrefix bool, fail func(string, ...interface{})) {
 	// make a copy to mutate
 	buf := make([]byte, len(org))
 	copy(buf, org)
 
 	// load monster data from the buffer
-	monster := example.GetRootAsMonster(buf, offset)
+	var monster *example.Monster
+	if sizePrefix {
+		monster = example.GetSizePrefixedRootAsMonster(buf, offset)
+	} else {
+		monster = example.GetRootAsMonster(buf, offset)
+	}
 
 	// test case struct
 	type testcase struct {
@@ -404,7 +425,12 @@
 
 	// To make sure the buffer has changed accordingly
 	// Read data from the buffer and verify all fields
-	monster = example.GetRootAsMonster(buf, offset)
+	if sizePrefix {
+		monster = example.GetSizePrefixedRootAsMonster(buf, offset)
+	} else {
+		monster = example.GetRootAsMonster(buf, offset)
+	}
+
 	for _, t := range testForMutatedValues {
 		if !t.testfn() {
 			fail("field '" + t.field + "' doesn't have the expected mutated value")
@@ -424,7 +450,12 @@
 	// back to their original values and compare buffers.
 	// This test is done to make sure mutations do not do
 	// any unnecessary changes to the buffer.
-	monster = example.GetRootAsMonster(buf, offset)
+	if sizePrefix {
+		monster = example.GetSizePrefixedRootAsMonster(buf, offset)
+	} else {
+		monster = example.GetRootAsMonster(buf, offset)
+	}
+
 	monster.MutateHp(80)
 	monster.MutateTestbool(true)
 	monster.Pos(nil).MutateX(1.0)
@@ -448,6 +479,32 @@
 	}
 }
 
+func CheckObjectAPI(buf []byte, offset flatbuffers.UOffsetT, sizePrefix bool, fail func(string, ...interface{})) {
+	var monster *example.MonsterT
+
+	if sizePrefix {
+		monster = example.GetSizePrefixedRootAsMonster(buf, offset).UnPack()
+	} else {
+		monster = example.GetRootAsMonster(buf, offset).UnPack()
+	}
+
+	if got := monster.Hp; 80 != got {
+		fail(FailString("hp", 80, got))
+	}
+
+	// default
+	if got := monster.Mana; 150 != got {
+		fail(FailString("mana", 150, got))
+	}
+
+	builder := flatbuffers.NewBuilder(0)
+	builder.Finish(monster.Pack(builder))
+	monster2 := example.GetRootAsMonster(builder.FinishedBytes(), 0).UnPack()
+	if !reflect.DeepEqual(monster, monster2) {
+		fail(FailString("Pack/Unpack()", monster, monster2))
+	}
+}
+
 // Low level stress/fuzz test: serialize/deserialize a variety of
 // different kinds of data in different combinations
 func checkFuzz(fuzzFields, fuzzObjects int, fail func(string, ...interface{})) {
@@ -1158,7 +1215,7 @@
 }
 
 // CheckGeneratedBuild uses generated code to build the example Monster.
-func CheckGeneratedBuild(fail func(string, ...interface{})) ([]byte, flatbuffers.UOffsetT) {
+func CheckGeneratedBuild(sizePrefix bool, fail func(string, ...interface{})) ([]byte, flatbuffers.UOffsetT) {
 	b := flatbuffers.NewBuilder(0)
 	str := b.CreateString("MyMonster")
 	test1 := b.CreateString("test1")
@@ -1202,7 +1259,11 @@
 	example.MonsterAddTestarrayofstring(b, testArrayOfString)
 	mon := example.MonsterEnd(b)
 
-	b.Finish(mon)
+	if sizePrefix {
+		b.FinishSizePrefixed(mon)
+	} else {
+		b.Finish(mon)
+	}
 
 	return b.Bytes, b.Head()
 }
@@ -1353,6 +1414,50 @@
 	b.CreateString("foo")
 }
 
+func CheckEmptiedBuilder(fail func(string, ...interface{})) {
+	f := func(a, b string) bool {
+		if a == b {
+			return true
+		}
+
+		builder := flatbuffers.NewBuilder(0)
+
+		a1 := builder.CreateSharedString(a)
+		b1 := builder.CreateSharedString(b)
+		builder.Reset()
+		b2 := builder.CreateSharedString(b)
+		a2 := builder.CreateSharedString(a)
+
+		return !(a1 == a2 || b1 == b2)
+	}
+	if err := quick.Check(f, nil); err != nil {
+		fail("expected different offset")
+	}
+}
+
+func CheckSharedStrings(fail func(string, ...interface{})) {
+	f := func(strings []string) bool {
+		b := flatbuffers.NewBuilder(0)
+		for _, s1 := range strings {
+			for _, s2 := range strings {
+				off1 := b.CreateSharedString(s1)
+				off2 := b.CreateSharedString(s2)
+
+				if (s1 == s2) && (off1 != off2) {
+					return false
+				}
+				if (s1 != s2) && (off1 == off2) {
+					return false
+				}
+			}
+		}
+		return true
+	}
+	if err := quick.Check(f, nil); err != nil {
+		fail("expected same offset")
+	}
+}
+
 // CheckByteStringIsNestedError verifies that a bytestring can not be created
 // inside another object.
 func CheckByteStringIsNestedError(fail func(string, ...interface{})) {
@@ -1557,6 +1662,27 @@
 	}
 }
 
+func CheckSizePrefixedBuffer(fail func(string, ...interface{})) {
+	// Generate a size-prefixed flatbuffer
+	generated, off := CheckGeneratedBuild(true, fail)
+
+	// Check that the size prefix is the size of monsterdata_go_wire.mon minus 4
+	size := flatbuffers.GetSizePrefix(generated, off)
+	if size != 220 {
+		fail("mismatch between size prefix and expected size")
+	}
+
+	// Check that the buffer can be used as expected
+	CheckReadBuffer(generated, off, true, fail)
+	CheckMutateBuffer(generated, off, true, fail)
+	CheckObjectAPI(generated, off, true, fail)
+
+	// Write generated bfufer out to a file
+	if err := ioutil.WriteFile(outData+".sp", generated[off:], os.FileMode(0644)); err != nil {
+		fail("failed to write file: %s", err)
+	}
+}
+
 // Include simple random number generator to ensure results will be the
 // same cross platform.
 // http://en.wikipedia.org/wiki/Park%E2%80%93Miller_random_number_generator
@@ -1766,7 +1892,7 @@
 // BenchmarkParseGold measures the speed of parsing the 'gold' data
 // used throughout this test suite.
 func BenchmarkParseGold(b *testing.B) {
-	buf, offset := CheckGeneratedBuild(b.Fatalf)
+	buf, offset := CheckGeneratedBuild(false, b.Fatalf)
 	monster := example.GetRootAsMonster(buf, offset)
 
 	// use these to prevent allocations:
@@ -1828,7 +1954,7 @@
 
 // BenchmarkBuildGold uses generated code to build the example Monster.
 func BenchmarkBuildGold(b *testing.B) {
-	buf, offset := CheckGeneratedBuild(b.Fatalf)
+	buf, offset := CheckGeneratedBuild(false, b.Fatalf)
 	bytes_length := int64(len(buf[offset:]))
 
 	reuse_str := "MyMonster"
