func ZIPStrToStrPtr() string {
	return `
func TestZip<FINPUT_TYPE1><FINPUT_TYPE2>Ptr(t *testing.T) {
	var v1 <INPUT_TYPE1> = "1"
	var v2 <INPUT_TYPE1> = "2"
	var v3 <INPUT_TYPE1> = "3"
	var v4 <INPUT_TYPE1> = "4"
	var v10 <INPUT_TYPE2> = "10"
	var v20 <INPUT_TYPE2> = "20"
	var v30 <INPUT_TYPE2> = "30"
	var v40 <INPUT_TYPE2> = "40"
	list1 := []*<INPUT_TYPE1>{&v1, &v2, &v3, &v4}
	list2 := []*<INPUT_TYPE2>{&v10, &v20, &v30, &v40}
	expectedMap := map[*<INPUT_TYPE1>]*<INPUT_TYPE2>{&v1: &v10, &v2: &v20, &v3: &v30, &v4: &v40}
	actualMap := Zip<FINPUT_TYPE1><FINPUT_TYPE2>Ptr(list1, list2)
	if !reflect.DeepEqual(expectedMap, actualMap) {
		t.Errorf("TestZip<FINPUT_TYPE1><FINPUT_TYPE2>Ptr failed. Expected=%v, actual=%v", expectedMap, actualMap)
	}
	list1 = []*<INPUT_TYPE1>{&v1, &v2, &v3, &v4}
	list2 = []*<INPUT_TYPE2>{&v10, &v20, &v30}
	expectedMap = map[*<INPUT_TYPE1>]*<INPUT_TYPE2>{&v1: &v10, &v2: &v20, &v3: &v30}
	actualMap = Zip<FINPUT_TYPE1><FINPUT_TYPE2>Ptr(list1, list2)
	if !reflect.DeepEqual(expectedMap, actualMap) {
		t.Errorf("TestZip<FINPUT_TYPE1><FINPUT_TYPE2>Ptr failed. Expected=%v, actual=%v", expectedMap, actualMap)
	}
	list1 = []*<INPUT_TYPE1>{&v1, &v2, &v3}
	list2 = []*<INPUT_TYPE2>{&v10, &v20, &v30, &v40}
	expectedMap = map[*<INPUT_TYPE1>]*<INPUT_TYPE2>{&v1: &v10, &v2: &v20, &v3: &v30}
	actualMap = Zip<FINPUT_TYPE1><FINPUT_TYPE2>Ptr(list1, list2)
	if !reflect.DeepEqual(expectedMap, actualMap) {
		t.Errorf("TestZip<FINPUT_TYPE1><FINPUT_TYPE2>Ptr failed. Expected=%v, actual=%v", expectedMap, actualMap)
	}
	list1 = []*<INPUT_TYPE1>{}
	list2 = []*<INPUT_TYPE2>{&v10, &v20, &v30, &v40}
	expectedMap = map[*<INPUT_TYPE1>]*<INPUT_TYPE2>{}
	actualMap = Zip<FINPUT_TYPE1><FINPUT_TYPE2>Ptr(list1, list2)
	if !reflect.DeepEqual(expectedMap, actualMap) {
		t.Errorf("TestZip<FINPUT_TYPE1><FINPUT_TYPE2> failed. Expected=%v, actual=%v", expectedMap, actualMap)
	}
	list1 = []*<INPUT_TYPE1>{&v1, &v2, &v3, &v4}
	list2 = []*<INPUT_TYPE2>{}
	expectedMap = map[*<INPUT_TYPE1>]*<INPUT_TYPE2>{}
	actualMap = Zip<FINPUT_TYPE1><FINPUT_TYPE2>Ptr(list1, list2)
	if !reflect.DeepEqual(expectedMap, actualMap) {
		t.Errorf("TestZip<FINPUT_TYPE1><FINPUT_TYPE2>Ptr failed. Expected=%v, actual=%v", expectedMap, actualMap)
	}
	list1 = []*<INPUT_TYPE1>{}
	list2 = []*<INPUT_TYPE2>{}
	expectedMap = map[*<INPUT_TYPE1>]*<INPUT_TYPE2>{}
	actualMap = Zip<FINPUT_TYPE1><FINPUT_TYPE2>Ptr(list1, list2)
	if !reflect.DeepEqual(expectedMap, actualMap) {
		t.Errorf("TestZip<FINPUT_TYPE1><FINPUT_TYPE2>Ptr failed. Expected=%v, actual=%v", expectedMap, actualMap)
	}
	list1 = nil
	list2 = nil
	expectedMap = map[*<INPUT_TYPE1>]*<INPUT_TYPE2>{}
	actualMap = Zip<FINPUT_TYPE1><FINPUT_TYPE2>Ptr(list1, list2)
	if !reflect.DeepEqual(expectedMap, actualMap) {
		t.Errorf("TestZip<FINPUT_TYPE1><FINPUT_TYPE2>Ptr failed. Expected=%v, actual=%v", expectedMap, actualMap)
	}
	list1 = []*<INPUT_TYPE1>{}
	list2 = nil
	expectedMap = map[*<INPUT_TYPE1>]*<INPUT_TYPE2>{}
	actualMap = Zip<FINPUT_TYPE1><FINPUT_TYPE2>Ptr(list1, list2)
	if !reflect.DeepEqual(expectedMap, actualMap) {
		t.Errorf("TestZip<FINPUT_TYPE1><FINPUT_TYPE2>Ptr failed. Expected=%v, actual=%v", expectedMap, actualMap)
	}
}
`
}
ZIPStrToStrPtr is template to generate itself for different combination of data type.
package basic
func ZIPNumberToNumberPtr() string {
	return `
func TestZip<FINPUT_TYPE1><FINPUT_TYPE2>Ptr(t *testing.T) {
	var v1 <INPUT_TYPE1> = 1
	var v2 <INPUT_TYPE1> = 2
	var v3 <INPUT_TYPE1> = 3
	var v4 <INPUT_TYPE1> = 4
	var v10 <INPUT_TYPE2> = 10
	var v20 <INPUT_TYPE2> = 20
	var v30 <INPUT_TYPE2> = 30
	var v40 <INPUT_TYPE2> = 40
	list1 := []*<INPUT_TYPE1>{&v1, &v2, &v3, &v4}
	list2 := []*<INPUT_TYPE2>{&v10, &v20, &v30, &v40}
	expectedMap := map[*<INPUT_TYPE1>]*<INPUT_TYPE2>{&v1: &v10, &v2: &v20, &v3: &v30, &v4: &v40}
	actualMap := Zip<FINPUT_TYPE1><FINPUT_TYPE2>Ptr(list1, list2)
	if !reflect.DeepEqual(expectedMap, actualMap) {
		t.Errorf("TestZip<FINPUT_TYPE1><FINPUT_TYPE2>Ptr failed. Expected=%v, actual=%v", expectedMap, actualMap)
	}
	list1 = []*<INPUT_TYPE1>{&v1, &v2, &v3, &v4}
	list2 = []*<INPUT_TYPE2>{&v10, &v20, &v30}
	expectedMap = map[*<INPUT_TYPE1>]*<INPUT_TYPE2>{&v1: &v10, &v2: &v20, &v3: &v30}
	actualMap = Zip<FINPUT_TYPE1><FINPUT_TYPE2>Ptr(list1, list2)
	if !reflect.DeepEqual(expectedMap, actualMap) {
		t.Errorf("TestZip<FINPUT_TYPE1><FINPUT_TYPE2>Ptr failed. Expected=%v, actual=%v", expectedMap, actualMap)
	}
	list1 = []*<INPUT_TYPE1>{&v1, &v2, &v3}
	list2 = []*<INPUT_TYPE2>{&v10, &v20, &v30, &v40}
	expectedMap = map[*<INPUT_TYPE1>]*<INPUT_TYPE2>{&v1: &v10, &v2: &v20, &v3: &v30}
	actualMap = Zip<FINPUT_TYPE1><FINPUT_TYPE2>Ptr(list1, list2)
	if !reflect.DeepEqual(expectedMap, actualMap) {
		t.Errorf("TestZip<FINPUT_TYPE1><FINPUT_TYPE2>Ptr failed. Expected=%v, actual=%v", expectedMap, actualMap)
	}
	list1 = []*<INPUT_TYPE1>{}
	list2 = []*<INPUT_TYPE2>{&v10, &v20, &v30, &v40}
	expectedMap = map[*<INPUT_TYPE1>]*<INPUT_TYPE2>{}
	actualMap = Zip<FINPUT_TYPE1><FINPUT_TYPE2>Ptr(list1, list2)
	if !reflect.DeepEqual(expectedMap, actualMap) {
		t.Errorf("TestZip<FINPUT_TYPE1><FINPUT_TYPE2>Ptr failed. Expected=%v, actual=%v", expectedMap, actualMap)
	}
	list1 = []*<INPUT_TYPE1>{&v1, &v2, &v3, &v4}
	list2 = []*<INPUT_TYPE2>{}
	expectedMap = map[*<INPUT_TYPE1>]*<INPUT_TYPE2>{}
	actualMap = Zip<FINPUT_TYPE1><FINPUT_TYPE2>Ptr(list1, list2)
	if !reflect.DeepEqual(expectedMap, actualMap) {
		t.Errorf("TestZip<FINPUT_TYPE1><FINPUT_TYPE2>Ptr failed. Expected=%v, actual=%v", expectedMap, actualMap)
	}
	list1 = []*<INPUT_TYPE1>{}
	list2 = []*<INPUT_TYPE2>{}
	expectedMap = map[*<INPUT_TYPE1>]*<INPUT_TYPE2>{}
	actualMap = Zip<FINPUT_TYPE1><FINPUT_TYPE2>Ptr(list1, list2)
	if !reflect.DeepEqual(expectedMap, actualMap) {
		t.Errorf("TestZip<FINPUT_TYPE1><FINPUT_TYPE2>Ptr failed. Expected=%v, actual=%v", expectedMap, actualMap)
	}
	list1 = nil
	list2 = nil
	expectedMap = map[*<INPUT_TYPE1>]*<INPUT_TYPE2>{}
	actualMap = Zip<FINPUT_TYPE1><FINPUT_TYPE2>Ptr(list1, list2)
	if !reflect.DeepEqual(expectedMap, actualMap) {
		t.Errorf("TestZip<FINPUT_TYPE1><FINPUT_TYPE2>Ptr failed. Expected=%v, actual=%v", expectedMap, actualMap)
	}
	list1 = []*<INPUT_TYPE1>{}
	list2 = nil
	expectedMap = map[*<INPUT_TYPE1>]*<INPUT_TYPE2>{}
	actualMap = Zip<FINPUT_TYPE1><FINPUT_TYPE2>Ptr(list1, list2)
	if !reflect.DeepEqual(expectedMap, actualMap) {
		t.Errorf("TestZip<FINPUT_TYPE1><FINPUT_TYPE2>Ptr failed. Expected=%v, actual=%v", expectedMap, actualMap)
	}
}
`
}
func ZIPNumberToStrPtr() string {
	return `
func TestZip<FINPUT_TYPE1><FINPUT_TYPE2>Ptr(t *testing.T) {
	var v1 <INPUT_TYPE1> = 1
	var v2 <INPUT_TYPE1> = 2
	var v3 <INPUT_TYPE1> = 3
	var v4 <INPUT_TYPE1> = 4
	var v10 <INPUT_TYPE2> = "10"
	var v20 <INPUT_TYPE2> = "20"
	var v30 <INPUT_TYPE2> = "30"
	var v40 <INPUT_TYPE2> = "40"
	list1 := []*<INPUT_TYPE1>{&v1, &v2, &v3, &v4}
	list2 := []*<INPUT_TYPE2>{&v10, &v20, &v30, &v40}
	expectedMap := map[*<INPUT_TYPE1>]*<INPUT_TYPE2>{&v1: &v10, &v2: &v20, &v3: &v30, &v4: &v40}
	actualMap := Zip<FINPUT_TYPE1><FINPUT_TYPE2>Ptr(list1, list2)
	if !reflect.DeepEqual(expectedMap, actualMap) {
		t.Errorf("TestZip<FINPUT_TYPE1><FINPUT_TYPE2>Ptr failed. Expected=%v, actual=%v", expectedMap, actualMap)
	}
	list1 = []*<INPUT_TYPE1>{&v1, &v2, &v3, &v4}
	list2 = []*<INPUT_TYPE2>{&v10, &v20, &v30}
	expectedMap = map[*<INPUT_TYPE1>]*<INPUT_TYPE2>{&v1: &v10, &v2: &v20, &v3: &v30}
	actualMap = Zip<FINPUT_TYPE1><FINPUT_TYPE2>Ptr(list1, list2)
	if !reflect.DeepEqual(expectedMap, actualMap) {
		t.Errorf("TestZip<FINPUT_TYPE1><FINPUT_TYPE2> failed. Expected=%v, actual=%v", expectedMap, actualMap)
	}
	list1 = []*<INPUT_TYPE1>{&v1, &v2, &v3}
	list2 = []*<INPUT_TYPE2>{&v10, &v20, &v30, &v40}
	expectedMap = map[*<INPUT_TYPE1>]*<INPUT_TYPE2>{&v1: &v10, &v2: &v20, &v3: &v30}
	actualMap = Zip<FINPUT_TYPE1><FINPUT_TYPE2>Ptr(list1, list2)
	if !reflect.DeepEqual(expectedMap, actualMap) {
		t.Errorf("TestZip<FINPUT_TYPE1><FINPUT_TYPE2>Ptr failed. Expected=%v, actual=%v", expectedMap, actualMap)
	}
	list1 = []*<INPUT_TYPE1>{}
	list2 = []*<INPUT_TYPE2>{&v10, &v20, &v30, &v40}
	expectedMap = map[*<INPUT_TYPE1>]*<INPUT_TYPE2>{}
	actualMap = Zip<FINPUT_TYPE1><FINPUT_TYPE2>Ptr(list1, list2)
	if !reflect.DeepEqual(expectedMap, actualMap) {
		t.Errorf("TestZip<FINPUT_TYPE1><FINPUT_TYPE2>Ptr failed. Expected=%v, actual=%v", expectedMap, actualMap)
	}
	list1 = []*<INPUT_TYPE1>{&v1, &v2, &v3, &v4}
	list2 = []*<INPUT_TYPE2>{}
	expectedMap = map[*<INPUT_TYPE1>]*<INPUT_TYPE2>{}
	actualMap = Zip<FINPUT_TYPE1><FINPUT_TYPE2>Ptr(list1, list2)
	if !reflect.DeepEqual(expectedMap, actualMap) {
		t.Errorf("TestZip<FINPUT_TYPE1><FINPUT_TYPE2>Ptr failed. Expected=%v, actual=%v", expectedMap, actualMap)
	}
	list1 = []*<INPUT_TYPE1>{}
	list2 = []*<INPUT_TYPE2>{}
	expectedMap = map[*<INPUT_TYPE1>]*<INPUT_TYPE2>{}
	actualMap = Zip<FINPUT_TYPE1><FINPUT_TYPE2>Ptr(list1, list2)
	if !reflect.DeepEqual(expectedMap, actualMap) {
		t.Errorf("TestZip<FINPUT_TYPE1><FINPUT_TYPE2>Ptr failed. Expected=%v, actual=%v", expectedMap, actualMap)
	}
	list1 = nil
	list2 = nil
	expectedMap = map[*<INPUT_TYPE1>]*<INPUT_TYPE2>{}
	actualMap = Zip<FINPUT_TYPE1><FINPUT_TYPE2>Ptr(list1, list2)
	if !reflect.DeepEqual(expectedMap, actualMap) {
		t.Errorf("TestZip<FINPUT_TYPE1><FINPUT_TYPE2>Ptr failed. Expected=%v, actual=%v", expectedMap, actualMap)
	}
	list1 = []*<INPUT_TYPE1>{}
	list2 = nil
	expectedMap = map[*<INPUT_TYPE1>]*<INPUT_TYPE2>{}
	actualMap = Zip<FINPUT_TYPE1><FINPUT_TYPE2>Ptr(list1, list2)
	if !reflect.DeepEqual(expectedMap, actualMap) {
		t.Errorf("TestZip<FINPUT_TYPE1><FINPUT_TYPE2>Ptr failed. Expected=%v, actual=%v", expectedMap, actualMap)
	}
}
`
}
func ZIPStrToNumberPtr() string {
	return `
func TestZip<FINPUT_TYPE1><FINPUT_TYPE2>Ptr(t *testing.T) {
	var v1 <INPUT_TYPE1> = "1"
	var v2 <INPUT_TYPE1> = "2"
	var v3 <INPUT_TYPE1> = "3"
	var v4 <INPUT_TYPE1> = "4"
	var v10 <INPUT_TYPE2> = 10
	var v20 <INPUT_TYPE2> = 20
	var v30 <INPUT_TYPE2> = 30
	var v40 <INPUT_TYPE2> = 40
	list1 := []*<INPUT_TYPE1>{&v1, &v2, &v3, &v4}
	list2 := []*<INPUT_TYPE2>{&v10, &v20, &v30, &v40}
	expectedMap := map[*<INPUT_TYPE1>]*<INPUT_TYPE2>{&v1: &v10, &v2: &v20, &v3: &v30, &v4: &v40}
	actualMap := Zip<FINPUT_TYPE1><FINPUT_TYPE2>Ptr(list1, list2)
	if !reflect.DeepEqual(expectedMap, actualMap) {
		t.Errorf("TestZip<FINPUT_TYPE1><FINPUT_TYPE2>Ptr failed. Expected=%v, actual=%v", expectedMap, actualMap)
	}
	list1 = []*<INPUT_TYPE1>{&v1, &v2, &v3, &v4}
	list2 = []*<INPUT_TYPE2>{&v10, &v20, &v30}
	expectedMap = map[*<INPUT_TYPE1>]*<INPUT_TYPE2>{&v1: &v10, &v2: &v20, &v3: &v30}
	actualMap = Zip<FINPUT_TYPE1><FINPUT_TYPE2>Ptr(list1, list2)
	if !reflect.DeepEqual(expectedMap, actualMap) {
		t.Errorf("TestZip<FINPUT_TYPE1><FINPUT_TYPE2>Ptr failed. Expected=%v, actual=%v", expectedMap, actualMap)
	}
	list1 = []*<INPUT_TYPE1>{&v1, &v2, &v3}
	list2 = []*<INPUT_TYPE2>{&v10, &v20, &v30, &v40}
	expectedMap = map[*<INPUT_TYPE1>]*<INPUT_TYPE2>{&v1: &v10, &v2: &v20, &v3: &v30}
	actualMap = Zip<FINPUT_TYPE1><FINPUT_TYPE2>Ptr(list1, list2)
	if !reflect.DeepEqual(expectedMap, actualMap) {
		t.Errorf("TestZip<FINPUT_TYPE1><FINPUT_TYPE2>Ptr failed. Expected=%v, actual=%v", expectedMap, actualMap)
	}
	list1 = []*<INPUT_TYPE1>{}
	list2 = []*<INPUT_TYPE2>{&v10, &v20, &v30, &v40}
	expectedMap = map[*<INPUT_TYPE1>]*<INPUT_TYPE2>{}
	actualMap = Zip<FINPUT_TYPE1><FINPUT_TYPE2>Ptr(list1, list2)
	if !reflect.DeepEqual(expectedMap, actualMap) {
		t.Errorf("TestZip<FINPUT_TYPE1><FINPUT_TYPE2>Ptr failed. Expected=%v, actual=%v", expectedMap, actualMap)
	}
	list1 = []*<INPUT_TYPE1>{&v1, &v2, &v3, &v4}
	list2 = []*<INPUT_TYPE2>{}
	expectedMap = map[*<INPUT_TYPE1>]*<INPUT_TYPE2>{}
	actualMap = Zip<FINPUT_TYPE1><FINPUT_TYPE2>Ptr(list1, list2)
	if !reflect.DeepEqual(expectedMap, actualMap) {
		t.Errorf("TestZip<FINPUT_TYPE1><FINPUT_TYPE2>Ptr failed. Expected=%v, actual=%v", expectedMap, actualMap)
	}
	list1 = []*<INPUT_TYPE1>{}
	list2 = []*<INPUT_TYPE2>{}
	expectedMap = map[*<INPUT_TYPE1>]*<INPUT_TYPE2>{}
	actualMap = Zip<FINPUT_TYPE1><FINPUT_TYPE2>Ptr(list1, list2)
	if !reflect.DeepEqual(expectedMap, actualMap) {
		t.Errorf("TestZip<FINPUT_TYPE1><FINPUT_TYPE2>Ptr failed. Expected=%v, actual=%v", expectedMap, actualMap)
	}
	list1 = nil
	list2 = nil
	expectedMap = map[*<INPUT_TYPE1>]*<INPUT_TYPE2>{}
	actualMap = Zip<FINPUT_TYPE1><FINPUT_TYPE2>Ptr(list1, list2)
	if !reflect.DeepEqual(expectedMap, actualMap) {
		t.Errorf("TestZip<FINPUT_TYPE1><FINPUT_TYPE2>Ptr failed. Expected=%v, actual=%v", expectedMap, actualMap)
	}
	list1 = []*<INPUT_TYPE1>{}
	list2 = nil
	expectedMap = map[*<INPUT_TYPE1>]*<INPUT_TYPE2>{}
	actualMap = Zip<FINPUT_TYPE1><FINPUT_TYPE2>Ptr(list1, list2)
	if !reflect.DeepEqual(expectedMap, actualMap) {
		t.Errorf("TestZip<FINPUT_TYPE1><FINPUT_TYPE2>Ptr failed. Expected=%v, actual=%v", expectedMap, actualMap)
	}
}
`
}