v8.run/go/exp@v0.0.26-0.20230226010534-afcdbd3f782d/time2/timeparse/8601_test.go (about) 1 package timeparse 2 3 import ( 4 "testing" 5 "time" 6 ) 7 8 func TestParse8601(t *testing.T) { 9 tests := []struct { 10 name string 11 data string 12 wantUnix int64 13 wantNano int64 14 wantOffset int64 15 }{ 16 { 17 name: "epoch", 18 data: "1970-01-01T00:00:00Z", 19 wantUnix: 0, 20 wantNano: 0, 21 wantOffset: 0, 22 }, 23 { 24 name: "epoch+1", 25 data: "1970-01-01T00:00:01Z", 26 wantUnix: 1, 27 wantNano: 0, 28 wantOffset: 0, 29 }, 30 { 31 name: "0000-01-01", 32 data: "0000-01-01T00:00:00Z", 33 wantUnix: -62167219200, 34 wantNano: 0, 35 wantOffset: 0, 36 }, 37 { 38 name: "2006-01-02T15:04:05-07:00", 39 data: "2006-01-02T15:04:05-07:00", 40 wantUnix: 1136239445, 41 wantNano: 0, 42 wantOffset: -3600 * 7, 43 }, 44 { 45 name: "2006-01-03T07:04:05.123456+09:00", 46 data: "2006-01-03T07:04:05.123456+09:00", 47 wantUnix: 1136239445, 48 wantNano: 123456000, 49 wantOffset: 3600 * 9, 50 }, 51 { 52 name: "2022-10-08T01:31:29+00:00", 53 data: "2022-10-08T01:31:29+00:00", 54 wantUnix: 1665192689, 55 wantNano: 0, 56 wantOffset: 0, 57 }, 58 } 59 for _, tt := range tests { 60 t.Run(tt.name, func(t *testing.T) { 61 gotUnix, gotNano, gotOffset := Parse8601(tt.data) 62 if gotUnix != tt.wantUnix { 63 t.Errorf("Parse8601() gotUnix = %v, want %v", gotUnix, tt.wantUnix) 64 } 65 if gotNano != tt.wantNano { 66 t.Errorf("Parse8601() gotNano = %v, want %v", gotNano, tt.wantNano) 67 } 68 if gotOffset != tt.wantOffset { 69 t.Errorf("Parse8601() gotOffset = %v, want %v", gotOffset, tt.wantOffset) 70 } 71 }) 72 } 73 } 74 75 func FuzzParse8601(f *testing.F) { 76 f.Add(time.Layout) 77 f.Add(time.ANSIC) 78 f.Add(time.UnixDate) 79 f.Add(time.RubyDate) 80 f.Add(time.RFC822) 81 f.Add(time.RFC822Z) 82 f.Add(time.RFC850) 83 f.Add(time.RFC1123) 84 f.Add(time.RFC1123Z) 85 f.Add(time.RFC3339) 86 f.Add(time.RFC3339Nano) 87 f.Add(time.Kitchen) 88 f.Add(time.Stamp) 89 f.Add(time.StampMilli) 90 f.Add(time.StampMicro) 91 f.Add(time.StampNano) 92 93 f.Add(":") 94 f.Add("::") 95 f.Add("/") 96 f.Add(",") 97 f.Add(" ") 98 f.Add("T") 99 f.Add("+") 100 f.Add("-") 101 f.Add("Z") 102 f.Add("0000") 103 f.Add("1970") 104 f.Add("00") 105 f.Add("0") 106 f.Add("1") 107 f.Add("2") 108 f.Add("3") 109 f.Add("4") 110 f.Add("5") 111 f.Add("6") 112 f.Add("7") 113 f.Add("8") 114 f.Add("9") 115 f.Add("10") 116 117 f.Fuzz(func(t *testing.T, data string) { 118 _ = t 119 Parse8601(data) 120 }) 121 }