// Copyright 2017 The Go Authors. All right reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

//go:build aix || darwin || dragonfly || freebsd || linux || netbsd || openbsd || solaris
// +build aix darwin dragonfly freebsd linux netbsd openbsd solaris

package unix_test

import (
	"testing"
	"time"
	"unsafe"

	"golang.org/x/sys/unix"
)

func TestTimeToTimespec(t *testing.T) {
	timeTests := []struct {
		time  time.Time
		valid bool
	}{
		{time.Unix(0, 0), true},
		{time.Date(2009, time.November, 10, 23, 0, 0, 0, time.UTC), true},
		{time.Date(2262, time.December, 31, 23, 0, 0, 0, time.UTC), false},
		{time.Unix(0x7FFFFFFF, 0), true},
		{time.Unix(0x80000000, 0), false},
		{time.Unix(0x7FFFFFFF, 1000000000), false},
		{time.Unix(0x7FFFFFFF, 999999999), true},
		{time.Unix(-0x80000000, 0), true},
		{time.Unix(-0x80000001, 0), false},
		{time.Date(2038, time.January, 19, 3, 14, 7, 0, time.UTC), true},
		{time.Date(2038, time.January, 19, 3, 14, 8, 0, time.UTC), false},
		{time.Date(1901, time.December, 13, 20, 45, 52, 0, time.UTC), true},
		{time.Date(1901, time.December, 13, 20, 45, 51, 0, time.UTC), false},
	}

	// Currently all targets have either int32 or int64 for Timespec.Sec.
	// If there were a new target with unsigned or floating point type for
	// it, this test must be adjusted.
	have64BitTime := (unsafe.Sizeof(unix.Timespec{}.Sec) == 8)
	for _, tt := range timeTests {
		ts, err := unix.TimeToTimespec(tt.time)
		tt.valid = tt.valid || have64BitTime
		if tt.valid && err != nil {
			t.Errorf("TimeToTimespec(%v): %v", tt.time, err)
		}
		if err == nil {
			tstime := time.Unix(int64(ts.Sec), int64(ts.Nsec))
			if !tstime.Equal(tt.time) {
				t.Errorf("TimeToTimespec(%v) is the time %v", tt.time, tstime)
			}
		}
	}
}
