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: z_test.go
    path of file: ./repos/gomacro/_experiments/zero
    
    the code of the file until where you have to start completion: /*
 * gomacro - A Go interpreter with Lisp-like macros
 *
 * Copyright (C) 2018-2019 Massimiliano Ghilardi
 *
 *     This Source Code Form is subject to the terms of the Mozilla Public
 *     License, v. 2.0. If a copy of the MPL was not distributed with this
 *     file, You can obtain one at http://mozilla.org/MPL/2.0/.
 *
 *
 * z_test.go
 *
 *  Created on May 26, 2018
 *      Author Massimiliano Ghilardi
 */

package zero

import (
	r "reflect"
	"testing"
	"unsafe"
)

var rbasictypes = []r.Type{
	r.Bool:          r.Ty
    
func TestFunctionZero(t *testing.T) {
	var targs, trets = []r.Type{nil}, []r.Type{nil}
	lo, hi := r.Bool, r.UnsafePointer

	for karg := lo; karg <= hi; karg++ {
		targ := rbasictypes[karg]
		if targ == nil {
			continue
		}
		targs[0] = targ
		for kret := lo; kret <= hi; kret++ {
			tret := rbasictypes[kret]
			if tret == nil {
				continue
			}
			trets[0] = tret
			typ := r.FuncOf(targs, trets, false)
			f := FunctionZero(typ)
			if !f.IsValid() {
				t.Logf("FunctionZero(%v)\treturned nil function", typ)
				continue
			}
			rets := f.Call([]r.Value{r.Zero(targ)})
			if len(rets) != 1 {
				t.Errorf("f(%v) %v\treturned %d values, expecting one: %v", targ, tret, len(rets), rets)
				continue
			}
			if zero := r.Zero(tret); rets[0].Interface() != zero.Interface() {
				t.Errorf("f(%v) %v\treturned value %v, expecting zero value %v", targ, tret, rets[0], zero)
				continue
			}
			// t.Logf("f(%v) %v\treturned zero value %v", targ, tret, rets[0])
		}
	}
}