// Copyright 2015 The Vanadium 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 basics implements some benchmarks for important basic operations in go.
package basics

// #include "roundtrip.h"
import "C"

import (
	"fmt"
	"testing"
)

func cRoundTrip(b *testing.B) error {
	var test C.struct_rt_test
	if C.rt_init(&test) != 0 {
		return fmt.Errorf("rtInit failure.")
	}
	defer C.rt_stop(test)
	ch := make(chan error)
	b.ResetTimer()
	go func() {
		if C.rt_recvn(test, C.int(b.N)) != 0 {
			ch <- fmt.Errorf("rtRecvN failure.")
		} else {
			ch <- nil
		}
	}()
	if C.rt_sendn(test, C.int(b.N)) != 0 {
		return fmt.Errorf("rtSendN failure.")
	}
	b.StopTimer()
	return <-ch
}
