cgo: fix GoBytes

R=golang-dev, adg
CC=golang-dev
https://golang.org/cl/4956051
This commit is contained in:
Gustavo Niemeyer 2011-08-30 14:33:16 -03:00
parent 4ca2172f38
commit e1cfb6f3a9
5 changed files with 40 additions and 1 deletions

View file

@ -12,6 +12,7 @@ CGOFILES=\
callback.go\
env.go\
exports.go\
helpers.go\
issue1222.go\
issue1328.go\
issue1560.go\

View file

@ -65,7 +65,7 @@ func testCallbackPanic(t *testing.T) {
func testCallbackPanicLoop(t *testing.T) {
// Make sure we don't blow out m->g0 stack.
for i := 0; i < 100000; i++ {
TestCallbackPanic(t)
testCallbackPanic(t)
}
}

View file

@ -26,5 +26,6 @@ func TestBlocking(t *testing.T) { testBlocking(t) }
func Test1328(t *testing.T) { test1328(t) }
func TestParallelSleep(t *testing.T) { testParallelSleep(t) }
func TestSetEnv(t *testing.T) { testSetEnv(t) }
func TestHelpers(t *testing.T) { testHelpers(t) }
func BenchmarkCgoCall(b *testing.B) { benchCgoCall(b) }

35
misc/cgo/test/helpers.go Normal file
View file

@ -0,0 +1,35 @@
// Copyright 2011 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package cgotest
// const char *greeting = "hello, world";
import "C"
import (
"reflect"
"testing"
"unsafe"
)
const greeting = "hello, world"
type testPair struct {
Name string
Got, Want interface{}
}
var testPairs = []testPair{
{"GoString", C.GoString(C.greeting), greeting},
{"GoStringN", C.GoStringN(C.greeting, 5), greeting[:5]},
{"GoBytes", C.GoBytes(unsafe.Pointer(C.greeting), 5), []byte(greeting[:5])},
}
func testHelpers(t *testing.T) {
for _, pair := range testPairs {
if !reflect.DeepEqual(pair.Got, pair.Want) {
t.Errorf("%s: got %#v, want %#v", pair.Got, pair.Want)
}
}
}

View file

@ -80,6 +80,8 @@ runtime·gobytes(byte *p, int32 n)
Slice sl;
sl.array = runtime·mallocgc(n, FlagNoPointers, 1, 0);
sl.len = n;
sl.cap = n;
runtime·memmove(sl.array, p, n);
return sl;
}