Home | History | Annotate | Download | only in test
      1 // Copyright 2013 The Go Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style
      3 // license that can be found in the LICENSE file.
      4 
      5 package cgotest
      6 
      7 // extern void doAdd(int, int);
      8 import "C"
      9 
     10 import (
     11 	"runtime"
     12 	"sync"
     13 	"testing"
     14 )
     15 
     16 var sum struct {
     17 	sync.Mutex
     18 	i int
     19 }
     20 
     21 //export Add
     22 func Add(x int) {
     23 	defer func() {
     24 		recover()
     25 	}()
     26 	sum.Lock()
     27 	sum.i += x
     28 	sum.Unlock()
     29 	var p *int
     30 	*p = 2
     31 }
     32 
     33 func testCthread(t *testing.T) {
     34 	if runtime.GOOS == "darwin" && (runtime.GOARCH == "arm" || runtime.GOARCH == "arm64") {
     35 		t.Skip("the iOS exec wrapper is unable to properly handle the panic from Add")
     36 	}
     37 	sum.i = 0
     38 	C.doAdd(10, 6)
     39 
     40 	want := 10 * (10 - 1) / 2 * 6
     41 	if sum.i != want {
     42 		t.Fatalf("sum=%d, want %d", sum.i, want)
     43 	}
     44 }
     45