go/test/literal2.go
Robert Griesemer 4ad5537bfa cmd/compile: accept 'i' suffix orthogonally on all numbers
This change accepts the 'i' suffix on binary and octal integer
literals as well as hexadecimal floats. The suffix was already
accepted on decimal integers and floats.

Note that 0123i == 123i for backward-compatibility (and 09i is
valid).

See also the respective language in the spec change:
https://golang.org/cl/161098

Change-Id: I9d2d755cba36a3fa7b9e24308c73754d4568daaf
Reviewed-on: https://go-review.googlesource.com/c/162878
Run-TryBot: Robert Griesemer <gri@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Ian Lance Taylor <iant@golang.org>
2019-02-19 22:45:09 +00:00

90 lines
2.2 KiB
Go

// run
// Copyright 2019 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
// Test Go2 literal syntax for basic types.
// Avoid running gofmt on this file to preserve the
// test cases with upper-case prefixes (0B, 0O, 0X).
package main
import "fmt"
func assert(cond bool) {
if !cond {
panic("assertion failed")
}
}
func equal(x, y interface{}) bool {
if x != y {
fmt.Printf("%g != %g\n", x, y)
return false
}
return true
}
func main() {
// 0-octals
assert(0_1 == 01)
assert(012 == 012)
assert(0_1_2 == 012)
assert(0_1_2i == complex(0, 12)) // decimal digits despite leading 0 for backward-compatibility
assert(00089i == complex(0, 89)) // decimal digits despite leading 0 for backward-compatibility
// decimals
assert(1_000_000 == 1000000)
assert(1_000i == complex(0, 1000))
// hexadecimals
assert(0x_1 == 0x1)
assert(0x1_2 == 0x12)
assert(0x_cafe_f00d == 0xcafef00d)
assert(0x_cafei == complex(0, 0xcafe))
// octals
assert(0o_1 == 01)
assert(0o12 == 012)
assert(0o_1_2 == 012)
assert(0o_1_2i == complex(0, 0o12))
// binaries
assert(0b_1 == 1)
assert(0b10 == 2)
assert(0b_1_0 == 2)
assert(0b_1_0i == complex(0, 2))
// decimal floats
assert(0. == 0.0)
assert(.0 == 0.0)
assert(1_0. == 10.0)
assert(.0_1 == 0.01)
assert(1_0.0_1 == 10.01)
assert(1_0.0_1i == complex(0, 10.01))
assert(0.e1_0 == 0.0e10)
assert(.0e1_0 == 0.0e10)
assert(1_0.e1_0 == 10.0e10)
assert(.0_1e1_0 == 0.01e10)
assert(1_0.0_1e1_0 == 10.01e10)
assert(1_0.0_1e1_0i == complex(0, 10.01e10))
// hexadecimal floats
assert(equal(0x1p-2, 0.25))
assert(equal(0x2.p10, 2048.0))
assert(equal(0x1.Fp+0, 1.9375))
assert(equal(0x.8p-0, 0.5))
assert(equal(0x1FFFp-16, 0.1249847412109375))
assert(equal(0x1.fffffffffffffp1023, 1.7976931348623157e308))
assert(equal(0x1.fffffffffffffp1023i, complex(0, 1.7976931348623157e308)))
assert(equal(0x_1p-2, 0.25))
assert(equal(0x2.p1_0, 2048.0))
assert(equal(0x1_0.Fp+0, 16.9375))
assert(equal(0x_0.8p-0, 0.5))
assert(equal(0x_1FF_Fp-16, 0.1249847412109375))
assert(equal(0x1.f_ffff_ffff_ffffp1_023, 1.7976931348623157e308))
assert(equal(0x1.f_ffff_ffff_ffffp1_023i, complex(0, 1.7976931348623157e308)))
}