You are an expert in writing code in many different languages. Your goal is to perform code completion for the following code, keeping in mind the rest of the code and the file meta data.
    Metadata details:
    filename: channel_and_thread_test.go
    path of file: ./repos/goby/vm
    
    the code of the file until where you have to start completion: package vm

import "testing"

func TestObjectMutationInThread(t *testing.T) {
	tests := []struct {
		input    string
		expected interface{}
	}{
		{`
		c = Channel.new

		i = 0
		thread do
		  i += 1
		  c.deliver(i)
		end

		# Used to block main process until thread is finished
		c.receive
		i
		`, 1},
		{`
		c = Channel.new

		i = 0
		thread do
		  i += 1
		  c.deliver(i)
		end

		# if we put i += 1 here then it will execute along with other thread,
		# which will cause a race condition.
		# The following "receive" is needed to block the main process until thread is finished
		c.receive
		i += 1
		i
		`, 2},
	}

	for i, tt := range tests {
		v := initTestVM()
		evaluated := v.testEval(t, tt.input, getFilename())
		VerifyExpected(
    
func TestObjectMutationInThread(t *testing.T) {
	tests := []struct {
		input    string
		expected interface{}
	}{
		{`
		c = Channel.new

		i = 0
		thread do
		  i += 1
		  c.deliver(i)
		end

		# Used to block main process until thread is finished
		c.receive
		i
		`, 1},
		{`
		c = Channel.new

		i = 0
		thread do
		  i += 1
		  c.deliver(i)
		end

		# if we put i += 1 here then it will execute along with other thread,
		# which will cause a race condition.
		# The following "receive" is needed to block the main process until thread is finished
		c.receive
		i += 1
		i
		`, 2},
	}

	for i, tt := range tests {
		v := initTestVM()
		evaluated := v.testEval(t, tt.input, getFilename())
		VerifyExpected(t, i, evaluated, tt.expected)
		v.checkCFP(t, i, 0)
		v.checkSP(t, i, 1)
	}
}