1// +build go1.13
2
3// Copyright (c) Microsoft Corporation. All rights reserved.
4// Licensed under the MIT License.
5
6package to
7
8import (
9	"fmt"
10	"reflect"
11	"strconv"
12	"testing"
13	"time"
14)
15
16func TestBoolPtr(t *testing.T) {
17	b := true
18	pb := BoolPtr(b)
19	if pb == nil {
20		t.Fatal("unexpected nil conversion")
21	}
22	if *pb != b {
23		t.Fatalf("got %v, want %v", *pb, b)
24	}
25}
26
27func TestFloat32Ptr(t *testing.T) {
28	f32 := float32(3.1415926)
29	pf32 := Float32Ptr(f32)
30	if pf32 == nil {
31		t.Fatal("unexpected nil conversion")
32	}
33	if *pf32 != f32 {
34		t.Fatalf("got %v, want %v", *pf32, f32)
35	}
36}
37
38func TestFloat64Ptr(t *testing.T) {
39	f64 := float64(2.71828182845904)
40	pf64 := Float64Ptr(f64)
41	if pf64 == nil {
42		t.Fatal("unexpected nil conversion")
43	}
44	if *pf64 != f64 {
45		t.Fatalf("got %v, want %v", *pf64, f64)
46	}
47}
48
49func TestInt32Ptr(t *testing.T) {
50	i32 := int32(123456789)
51	pi32 := Int32Ptr(i32)
52	if pi32 == nil {
53		t.Fatal("unexpected nil conversion")
54	}
55	if *pi32 != i32 {
56		t.Fatalf("got %v, want %v", *pi32, i32)
57	}
58}
59
60func TestInt64Ptr(t *testing.T) {
61	i64 := int64(9876543210)
62	pi64 := Int64Ptr(i64)
63	if pi64 == nil {
64		t.Fatal("unexpected nil conversion")
65	}
66	if *pi64 != i64 {
67		t.Fatalf("got %v, want %v", *pi64, i64)
68	}
69}
70
71func TestStringPtr(t *testing.T) {
72	s := "the string"
73	ps := StringPtr(s)
74	if ps == nil {
75		t.Fatal("unexpected nil conversion")
76	}
77	if *ps != s {
78		t.Fatalf("got %v, want %v", *ps, s)
79	}
80}
81
82func TestTimePtr(t *testing.T) {
83	tt := time.Now()
84	pt := TimePtr(tt)
85	if pt == nil {
86		t.Fatal("unexpected nil conversion")
87	}
88	if *pt != tt {
89		t.Fatalf("got %v, want %v", *pt, tt)
90	}
91}
92
93func TestInt32PtrArray(t *testing.T) {
94	arr := Int32PtrArray()
95	if len(arr) != 0 {
96		t.Fatal("expected zero length")
97	}
98	arr = Int32PtrArray(1, 2, 3, 4, 5)
99	for i, v := range arr {
100		if *v != int32(i+1) {
101			t.Fatal("values don't match")
102		}
103	}
104}
105
106func TestInt64PtrArray(t *testing.T) {
107	arr := Int64PtrArray()
108	if len(arr) != 0 {
109		t.Fatal("expected zero length")
110	}
111	arr = Int64PtrArray(1, 2, 3, 4, 5)
112	for i, v := range arr {
113		if *v != int64(i+1) {
114			t.Fatal("values don't match")
115		}
116	}
117}
118
119func TestFloat32PtrArray(t *testing.T) {
120	arr := Float32PtrArray()
121	if len(arr) != 0 {
122		t.Fatal("expected zero length")
123	}
124	arr = Float32PtrArray(1.1, 2.2, 3.3, 4.4, 5.5)
125	for i, v := range arr {
126		f, err := strconv.ParseFloat(fmt.Sprintf("%d.%d", i+1, i+1), 32)
127		if err != nil {
128			t.Fatal(err)
129		}
130		if *v != float32(f) {
131			t.Fatal("values don't match")
132		}
133	}
134}
135
136func TestFloat64PtrArray(t *testing.T) {
137	arr := Float64PtrArray()
138	if len(arr) != 0 {
139		t.Fatal("expected zero length")
140	}
141	arr = Float64PtrArray(1.1, 2.2, 3.3, 4.4, 5.5)
142	for i, v := range arr {
143		f, err := strconv.ParseFloat(fmt.Sprintf("%d.%d", i+1, i+1), 64)
144		if err != nil {
145			t.Fatal(err)
146		}
147		if *v != f {
148			t.Fatal("values don't match")
149		}
150	}
151}
152
153func TestBoolPtrArray(t *testing.T) {
154	arr := BoolPtrArray()
155	if len(arr) != 0 {
156		t.Fatal("expected zero length")
157	}
158	arr = BoolPtrArray(true, false, true)
159	curr := true
160	for _, v := range arr {
161		if *v != curr {
162			t.Fatal("values don'p match")
163		}
164		curr = !curr
165	}
166}
167
168func TestStringPtrArray(t *testing.T) {
169	arr := StringPtrArray()
170	if len(arr) != 0 {
171		t.Fatal("expected zero length")
172	}
173	arr = StringPtrArray("one", "", "three")
174	if !reflect.DeepEqual(arr, []*string{StringPtr("one"), StringPtr(""), StringPtr("three")}) {
175		t.Fatal("values don't match")
176	}
177}
178
179func TestTimePtrArray(t *testing.T) {
180	arr := TimePtrArray()
181	if len(arr) != 0 {
182		t.Fatal("expected zero length")
183	}
184	t1 := time.Now()
185	t2 := time.Time{}
186	t3 := t1.Add(24 * time.Hour)
187	arr = TimePtrArray(t1, t2, t3)
188	if !reflect.DeepEqual(arr, []*time.Time{&t1, &t2, &t3}) {
189		t.Fatal("values don't match")
190	}
191}
192