package main

import (
	"testing"
	"testing/synctest"
	"time"
)

var result int

func TestDeferResults(t *testing.T) {
	if oneDefer(4) != 5 || loopDefers(3) != 3 {
		t.Fatal("wrong defer result")
	}
}
func TestResetRemovesStaleValue(t *testing.T) {
	synctest.Test(t, func(t *testing.T) {
		timer := time.NewTimer(time.Second)
		time.Sleep(2 * time.Second)
		if !timer.Reset(time.Second) {
			t.Fatal("unreceived timer should still be running")
		}
		select {
		case <-timer.C:
			t.Fatal("stale value after Reset")
		default:
		}
		time.Sleep(time.Second)
		<-timer.C
	})
}
func TestTCPDeadline(t *testing.T) {
	if err := tcpDeadline(); err != nil {
		t.Fatal(err)
	}
}
func BenchmarkDirect(b *testing.B) {
	for b.Loop() {
		result = direct(4)
	}
}
func BenchmarkOneDefer(b *testing.B) {
	for b.Loop() {
		result = oneDefer(4)
	}
}
func BenchmarkLoopOneDefer(b *testing.B) {
	for b.Loop() {
		result = loopDefers(1)
	}
}
