updating more value manipulation code for the go wrapper
All checks were successful
continuous-integration/drone/push Build is passing
All checks were successful
continuous-integration/drone/push Build is passing
This commit is contained in:
92
hawk_test.go
Normal file
92
hawk_test.go
Normal file
@@ -0,0 +1,92 @@
|
||||
package hawk_test
|
||||
|
||||
import "hawk"
|
||||
import "fmt"
|
||||
import "os"
|
||||
import "runtime"
|
||||
import "runtime/debug"
|
||||
import "sync"
|
||||
import "testing"
|
||||
import "time"
|
||||
|
||||
func exit_with_error(msg string, err error) {
|
||||
fmt.Printf("ERROR: %s - %s\n", msg, err.Error())
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
func make_hawk() (*hawk.Hawk, error) {
|
||||
var h *hawk.Hawk
|
||||
var err error
|
||||
|
||||
h, err = hawk.New()
|
||||
if err != nil { return nil, err }
|
||||
|
||||
err = h.ParseText(`function x(a1, a2, a3) {
|
||||
for (i = 0; i < 10; i++) {
|
||||
printf("hello, world [%d] [%s] [%s]\n", a1, a2, a3);
|
||||
##if (i == 3) sys::sleep(1);
|
||||
}
|
||||
##return "welcome to the jungle 999";
|
||||
return 1.9923;
|
||||
}`)
|
||||
if err != nil { return nil, err }
|
||||
|
||||
return h, nil
|
||||
}
|
||||
|
||||
func run_hawk(h *hawk.Hawk, id int, wg *sync.WaitGroup) {
|
||||
var r *hawk.Rtx
|
||||
var v *hawk.Val
|
||||
//var ret string
|
||||
var ret []byte //float64
|
||||
var err error
|
||||
|
||||
defer wg.Done()
|
||||
|
||||
r, err = h.NewRtx(fmt.Sprintf("%d", id))
|
||||
if err != nil {
|
||||
}
|
||||
|
||||
v, err = r.Call("x",
|
||||
hawk.Must(r.NewVal/*FromInt*/(id + 10)),
|
||||
hawk.Must(r.NewVal([]byte{'A',66,67,68,69})),
|
||||
hawk.Must(r.NewVal/*FromStr*/("this is cool")))
|
||||
if err != nil { exit_with_error("rtx call", err) }
|
||||
|
||||
ret, err = v.ToByteArr()
|
||||
if err != nil {
|
||||
fmt.Printf("failed to get return value - %s\n", err.Error())
|
||||
} else {
|
||||
fmt.Printf("RET[%d] => [%v]\n", id, ret)
|
||||
}
|
||||
|
||||
r.Close()
|
||||
}
|
||||
|
||||
func Test1(t *testing.T) {
|
||||
var h *hawk.Hawk
|
||||
var wg sync.WaitGroup
|
||||
var i int
|
||||
var err error
|
||||
|
||||
debug.SetGCPercent(100) // enable normal GC
|
||||
|
||||
h, err = make_hawk()
|
||||
if err != nil { exit_with_error("Failed to make hawk", err) }
|
||||
|
||||
for i = 0; i < 10; i++ {
|
||||
wg.Add(1)
|
||||
go run_hawk(h, i, &wg)
|
||||
}
|
||||
wg.Wait()
|
||||
|
||||
fmt.Printf ("%d RTX objects\n", h.RtxCount())
|
||||
h.Close()
|
||||
h = nil
|
||||
|
||||
fmt.Printf ("== END of run ==\n")
|
||||
runtime.GC()
|
||||
runtime.Gosched()
|
||||
time.Sleep(1000 * time.Millisecond) // give finalizer time to print
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user