Reformat encoder tests. Other minor tweaks.
diff --git a/api_c.go b/api_c.go
index 9cdb1aa..6d75786 100644
--- a/api_c.go
+++ b/api_c.go
@@ -26,16 +26,15 @@
 
 // Create a new parser object.
 func yaml_parser_initialize(parser *yaml_parser_t) bool {
-	// [Go] These should be initialized lazily instead.
 	*parser = yaml_parser_t{
 		raw_buffer:     make([]byte, 0, input_raw_buffer_size),
 		buffer:         make([]byte, 0, input_buffer_size),
-		tokens:         make([]yaml_token_t, 0, initial_queue_size),
-		indents:        make([]int, 0, initial_stack_size),
-		simple_keys:    make([]yaml_simple_key_t, 0, initial_stack_size),
-		states:         make([]yaml_parser_state_t, 0, initial_stack_size),
-		marks:          make([]yaml_mark_t, 0, initial_stack_size),
-		tag_directives: make([]yaml_tag_directive_t, 0, initial_stack_size),
+		//tokens:         make([]yaml_token_t, 0, initial_queue_size),
+		//indents:        make([]int, 0, initial_stack_size),
+		//simple_keys:    make([]yaml_simple_key_t, 0, initial_stack_size),
+		//states:         make([]yaml_parser_state_t, 0, initial_stack_size),
+		//marks:          make([]yaml_mark_t, 0, initial_stack_size),
+		//tag_directives: make([]yaml_tag_directive_t, 0, initial_stack_size),
 	}
 	return true
 }
diff --git a/decode_test.go b/decode_test.go
index b341848..182eed0 100644
--- a/decode_test.go
+++ b/decode_test.go
@@ -1,6 +1,7 @@
 package goyaml_test
 
 import (
+	"io/ioutil"
 	. "launchpad.net/gocheck"
 	"launchpad.net/goyaml"
 	"math"
@@ -266,3 +267,33 @@
 	c.Assert(m["abc"].value, Equals, 1)
 	c.Assert(m["ghi"].value, Equals, 3)
 }
+
+
+//var data []byte
+//func init() {
+//	var err error
+//	data, err = ioutil.ReadFile("/tmp/file.yaml")
+//	if err != nil {
+//		panic(err)
+//	}
+//}
+//
+//func (s *S) BenchmarkUnmarshal(c *C) {
+//	var err error
+//	for i := 0; i < c.N; i++ {
+//		var v map[string]interface{}
+//		err = goyaml.Unmarshal(data, &v)
+//	}
+//	if err != nil {
+//		panic(err)
+//	}
+//}
+//
+//func (s *S) BenchmarkMarshal(c *C) {
+//	var v map[string]interface{}
+//	goyaml.Unmarshal(data, &v)
+//	c.ResetTimer()
+//	for i := 0; i < c.N; i++ {
+//		goyaml.Marshal(&v)
+//	}
+//}
diff --git a/encode_test.go b/encode_test.go
index 1d63c02..78e3112 100644
--- a/encode_test.go
+++ b/encode_test.go
@@ -12,105 +12,191 @@
 var marshalIntTest = 123
 
 var marshalTests = []struct {
-	data  string
 	value interface{}
+	data  string
 }{
-	{"{}\n", &struct{}{}},
-	{"v: hi\n", map[string]string{"v": "hi"}},
-	{"v: hi\n", map[string]interface{}{"v": "hi"}},
-	{"v: \"true\"\n", map[string]string{"v": "true"}},
-	{"v: \"false\"\n", map[string]string{"v": "false"}},
-	{"v: true\n", map[string]interface{}{"v": true}},
-	{"v: false\n", map[string]interface{}{"v": false}},
-	{"v: 10\n", map[string]interface{}{"v": 10}},
-	{"v: -10\n", map[string]interface{}{"v": -10}},
-	{"v: 42\n", map[string]uint{"v": 42}},
-	{"v: 4294967296\n", map[string]interface{}{"v": int64(4294967296)}},
-	{"v: 4294967296\n", map[string]int64{"v": int64(4294967296)}},
-	{"v: 4294967296\n", map[string]uint64{"v": 4294967296}},
-	{"v: \"10\"\n", map[string]interface{}{"v": "10"}},
-	{"v: 0.1\n", map[string]interface{}{"v": 0.1}},
-	{"v: 0.1\n", map[string]interface{}{"v": float64(0.1)}},
-	{"v: -0.1\n", map[string]interface{}{"v": -0.1}},
-	{"v: .inf\n", map[string]interface{}{"v": math.Inf(+1)}},
-	{"v: -.inf\n", map[string]interface{}{"v": math.Inf(-1)}},
-	{"v: .nan\n", map[string]interface{}{"v": math.NaN()}},
-	{"v: null\n", map[string]interface{}{"v": nil}},
-	{"v: \"\"\n", map[string]interface{}{"v": ""}},
-	{"v:\n- A\n- B\n", map[string][]string{"v": []string{"A", "B"}}},
-	{"v:\n- A\n- 1\n", map[string][]interface{}{"v": []interface{}{"A", 1}}},
-	{"a:\n  b: c\n",
-		map[string]interface{}{"a": map[interface{}]interface{}{"b": "c"}}},
+	{
+		&struct{}{},
+		"{}\n",
+	}, {
+		map[string]string{"v": "hi"},
+		"v: hi\n",
+	}, {
+		map[string]interface{}{"v": "hi"},
+		"v: hi\n",
+	}, {
+		map[string]string{"v": "true"},
+		"v: \"true\"\n",
+	}, {
+		map[string]string{"v": "false"},
+		"v: \"false\"\n",
+	}, {
+		map[string]interface{}{"v": true},
+		"v: true\n",
+	}, {
+		map[string]interface{}{"v": false},
+		"v: false\n",
+	}, {
+		map[string]interface{}{"v": 10},
+		"v: 10\n",
+	}, {
+		map[string]interface{}{"v": -10},
+		"v: -10\n",
+	}, {
+		map[string]uint{"v": 42},
+		"v: 42\n",
+	}, {
+		map[string]interface{}{"v": int64(4294967296)},
+		"v: 4294967296\n",
+	}, {
+		map[string]int64{"v": int64(4294967296)},
+		"v: 4294967296\n",
+	}, {
+		map[string]uint64{"v": 4294967296},
+		"v: 4294967296\n",
+	}, {
+		map[string]interface{}{"v": "10"},
+		"v: \"10\"\n",
+	}, {
+		map[string]interface{}{"v": 0.1},
+		"v: 0.1\n",
+	}, {
+		map[string]interface{}{"v": float64(0.1)},
+		"v: 0.1\n",
+	}, {
+		map[string]interface{}{"v": -0.1},
+		"v: -0.1\n",
+	}, {
+		map[string]interface{}{"v": math.Inf(+1)},
+		"v: .inf\n",
+	}, {
+		map[string]interface{}{"v": math.Inf(-1)},
+		"v: -.inf\n",
+	}, {
+		map[string]interface{}{"v": math.NaN()},
+		"v: .nan\n",
+	}, {
+		map[string]interface{}{"v": nil},
+		"v: null\n",
+	}, {
+		map[string]interface{}{"v": ""},
+		"v: \"\"\n",
+	}, {
+		map[string][]string{"v": []string{"A", "B"}},
+		"v:\n- A\n- B\n",
+	}, {
+		map[string][]interface{}{"v": []interface{}{"A", 1, map[string][]int{"B": []int{2, 3}}}},
+		"v:\n- A\n- 1\n- B:\n  - 2\n  - 3\n",
+	}, {
+		map[string]interface{}{"a": map[interface{}]interface{}{"b": "c"}},
+		"a:\n  b: c\n",
+	},
 
 	// Simple values.
-	{"123\n", &marshalIntTest},
+	{
+		&marshalIntTest,
+		"123\n",
+	},
 
 	// Structures
-	{"hello: world\n", &struct{ Hello string }{"world"}},
-	{"a:\n  b: c\n", &struct {
-		A struct {
-			B string
-		}
-	}{struct{ B string }{"c"}}},
-	{"a:\n  b: c\n", &struct {
-		A *struct {
-			B string
-		}
-	}{&struct{ B string }{"c"}}},
-	{"a: null\n", &struct {
-		A *struct {
-			B string
-		}
-	}{}},
-	{"a: 1\n", &struct{ A int }{1}},
-	{"a:\n- 1\n- 2\n", &struct{ A []int }{[]int{1, 2}}},
-	{"a: 1\n", &struct {
-		B int "a"
-	}{1}},
-	{"a: true\n", &struct{ A bool }{true}},
-
-	// Conditional flag
-	{"a: 1\n", &struct {
-		A int "a,omitempty"
-		B int "b,omitempty"
-	}{1, 0}},
-	{"{}\n", &struct {
-		A int "a,omitempty"
-		B int "b,omitempty"
-	}{0, 0}},
-	{"{}\n", &struct {
-		A *struct{ X int } "a,omitempty"
-		B int              "b,omitempty"
-	}{nil, 0}},
-
-	// Flow flag
-	{"a: [1, 2]\n", &struct {
-		A []int "a,flow"
-	}{[]int{1, 2}}},
-	{"a: {b: c}\n",
-		&struct {
-			A map[string]string "a,flow"
-		}{map[string]string{"b": "c"}}},
-	{"a: {b: c}\n",
+	{
+		&struct{ Hello string }{"world"},
+		"hello: world\n",
+	}, {
 		&struct {
 			A struct {
 				B string
+			}
+		}{struct{ B string }{"c"}},
+		"a:\n  b: c\n",
+	}, {
+		&struct {
+			A *struct {
+				B string
+			}
+		}{&struct{ B string }{"c"}},
+		"a:\n  b: c\n",
+	}, {
+		&struct {
+			A *struct {
+				B string
+			}
+		}{},
+		"a: null\n",
+	}, {
+		&struct{ A int }{1},
+		"a: 1\n",
+	}, {
+		&struct{ A []int }{[]int{1, 2}},
+		"a:\n- 1\n- 2\n",
+	}, {
+		&struct {
+			B int "a"
+		}{1},
+		"a: 1\n",
+	}, {
+		&struct{ A bool }{true},
+		"a: true\n",
+	},
+
+	// Conditional flag
+	{
+		&struct {
+			A int "a,omitempty"
+			B int "b,omitempty"
+		}{1, 0},
+		"a: 1\n",
+	}, {
+		&struct {
+			A int "a,omitempty"
+			B int "b,omitempty"
+		}{0, 0},
+		"{}\n",
+	}, {
+		&struct {
+			A *struct{ X int } "a,omitempty"
+			B int              "b,omitempty"
+		}{nil, 0},
+		"{}\n",
+	},
+
+	// Flow flag
+	{
+		&struct {
+			A []int "a,flow"
+		}{[]int{1, 2}},
+		"a: [1, 2]\n",
+	}, {
+		&struct {
+			A map[string]string "a,flow"
+		}{map[string]string{"b": "c", "d": "e"}},
+		"a: {b: c, d: e}\n",
+	}, {
+		&struct {
+			A struct {
+				B, D string
 			} "a,flow"
-		}{struct{ B string }{"c"}}},
+		}{struct{ B, D string }{"c", "e"}},
+		"a: {b: c, d: e}\n",
+	},
 
 	// Unexported field
-	{"a: 1\n",
+	{
 		&struct {
 			u int
 			A int
-		}{0, 1}},
+		}{0, 1},
+		"a: 1\n",
+	},
 
 	// Ignored field
-	{"a: 1\n",
+	{
 		&struct {
 			A int
 			B int "-"
-		}{1, 2}},
+		}{1, 2},
+		"a: 1\n",
+	},
 }
 
 func (s *S) TestMarshal(c *C) {