Files
hawk/hawk_test.go
hyung-hwan 2fb423df1a
All checks were successful
continuous-integration/drone/push Build is passing
updating more value manipulation code for the go wrapper
2025-11-01 13:29:49 +09:00

93 lines
1.8 KiB
Go

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
}