// Copyright 2013 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.

package shifts

func shifts1() {
	// basics
	var (
		i0 int
		u0 uint

		v0 = 1<<0
		v1 = 1<<i0 /* ERROR "must be unsigned" */
		v2 = 1<<u0
		v3 = 1<<"foo" /* ERROR "cannot convert" */
		v4 = 1<<- /* ERROR "stupid shift" */ 1
		v5 = 1<<1025 /* ERROR "stupid shift" */
		v6 = 1 /* ERROR "overflows" */ <<100

		v10 uint = 1 << 0
		v11 uint = 1 << u0
		v12 float32 = 1 /* ERROR "must be integer" */ << u0
	)
}

func shifts2() {
	// from the spec
	var (
		s uint = 33
		i = 1<<s           // 1 has type int
		j int32 = 1<<s     // 1 has type int32; j == 0
		k = uint64(1<<s)   // 1 has type uint64; k == 1<<33
		m int = 1.0<<s     // 1.0 has type int
		// Disabled test below. gc and gccgo disagree: gc permits it per spec special case,
		// gccgo does not (issue 4881). The spec special case seems not justified (issue 4883),
		// and go/types agrees with gccgo.
		// n = 1.0<<s != 0    // 1.0 has type int; n == false if ints are 32bits in size
		n = 1.0 /* ERROR "must be integer" */ <<s != 0
		o = 1<<s == 2<<s   // 1 and 2 have type int; o == true if ints are 32bits in size
		p = 1<<s == 1<<33  // illegal if ints are 32bits in size: 1 has type int, but 1<<33 overflows int
		u = 1.0 /* ERROR "must be integer" */ <<s         // illegal: 1.0 has type float64, cannot shift
		u1 = 1.0 /* ERROR "must be integer" */ <<s != 0   // illegal: 1.0 has type float64, cannot shift
		u2 = 1 /* ERROR "must be integer" */ <<s != 1.0   // illegal: 1 has type float64, cannot shift
		v float32 = 1 /* ERROR "must be integer" */ <<s   // illegal: 1 has type float32, cannot shift
		w int64 = 1.0<<33  // 1.0<<33 is a constant shift expression
	)
}

func shifts3(a int16, b float32) {
	// random tests
	var (
		s uint = 11
		u = 1 /* ERROR "must be integer" */ <<s + 1.0
		v complex128 = 1 /* ERROR "must be integer" */ << s + 1.0 /* ERROR "must be integer" */ << s + 1
	)
	x := 1.0 /* ERROR "must be integer" */ <<s + 1
	shifts3(1.0 << s, 1 /* ERROR "must be integer" */ >> s)
}

func shifts4() {
	// shifts in comparisons w/ untyped operands
	var s uint

	_ = 1<<s == 1
	_ = 1 /* ERROR "integer" */ <<s == 1.
	_ = 1. /* ERROR "integer" */ <<s == 1
	_ = 1. /* ERROR "integer" */ <<s == 1.

	_ = 1<<s + 1 == 1
	_ = 1 /* ERROR "integer" */ <<s + 1 == 1.
	_ = 1 /* ERROR "integer" */ <<s + 1. == 1
	_ = 1 /* ERROR "integer" */ <<s + 1. == 1.
	_ = 1. /* ERROR "integer" */ <<s + 1 == 1
	_ = 1. /* ERROR "integer" */ <<s + 1 == 1.
	_ = 1. /* ERROR "integer" */ <<s + 1. == 1
	_ = 1. /* ERROR "integer" */ <<s + 1. == 1.

	_ = 1<<s == 1<<s
	_ = 1 /* ERROR "integer" */ <<s == 1. /* ERROR "integer" */ <<s
	_ = 1. /* ERROR "integer" */ <<s == 1 /* ERROR "integer" */ <<s
	_ = 1. /* ERROR "integer" */ <<s == 1. /* ERROR "integer" */ <<s

	_ = 1<<s + 1<<s == 1
	_ = 1 /* ERROR "integer" */ <<s + 1 /* ERROR "integer" */ <<s == 1.
	_ = 1 /* ERROR "integer" */ <<s + 1. /* ERROR "integer" */ <<s == 1
	_ = 1 /* ERROR "integer" */ <<s + 1. /* ERROR "integer" */ <<s == 1.
	_ = 1. /* ERROR "integer" */ <<s + 1 /* ERROR "integer" */ <<s == 1
	_ = 1. /* ERROR "integer" */ <<s + 1 /* ERROR "integer" */ <<s == 1.
	_ = 1. /* ERROR "integer" */ <<s + 1. /* ERROR "integer" */ <<s == 1
	_ = 1. /* ERROR "integer" */ <<s + 1. /* ERROR "integer" */ <<s == 1.

	_ = 1<<s + 1<<s == 1<<s + 1<<s
	_ = 1 /* ERROR "integer" */ <<s + 1 /* ERROR "integer" */ <<s == 1 /* ERROR "integer" */ <<s + 1. /* ERROR "integer" */ <<s
	_ = 1 /* ERROR "integer" */ <<s + 1 /* ERROR "integer" */ <<s == 1. /* ERROR "integer" */ <<s + 1 /* ERROR "integer" */ <<s
	_ = 1 /* ERROR "integer" */ <<s + 1 /* ERROR "integer" */ <<s == 1. /* ERROR "integer" */ <<s + 1. /* ERROR "integer" */ <<s
	_ = 1 /* ERROR "integer" */ <<s + 1. /* ERROR "integer" */ <<s == 1 /* ERROR "integer" */ <<s + 1 /* ERROR "integer" */ <<s
	_ = 1 /* ERROR "integer" */ <<s + 1. /* ERROR "integer" */ <<s == 1 /* ERROR "integer" */ <<s + 1. /* ERROR "integer" */ <<s
	_ = 1 /* ERROR "integer" */ <<s + 1. /* ERROR "integer" */ <<s == 1. /* ERROR "integer" */ <<s + 1 /* ERROR "integer" */ <<s
	_ = 1 /* ERROR "integer" */ <<s + 1. /* ERROR "integer" */ <<s == 1. /* ERROR "integer" */ <<s + 1. /* ERROR "integer" */ <<s
	_ = 1. /* ERROR "integer" */ <<s + 1 /* ERROR "integer" */ <<s == 1 /* ERROR "integer" */ <<s + 1 /* ERROR "integer" */ <<s
	_ = 1. /* ERROR "integer" */ <<s + 1 /* ERROR "integer" */ <<s == 1 /* ERROR "integer" */ <<s + 1. /* ERROR "integer" */ <<s
	_ = 1. /* ERROR "integer" */ <<s + 1 /* ERROR "integer" */ <<s == 1. /* ERROR "integer" */ <<s + 1 /* ERROR "integer" */ <<s
	_ = 1. /* ERROR "integer" */ <<s + 1 /* ERROR "integer" */ <<s == 1. /* ERROR "integer" */ <<s + 1. /* ERROR "integer" */ <<s
	_ = 1. /* ERROR "integer" */ <<s + 1. /* ERROR "integer" */ <<s == 1 /* ERROR "integer" */ <<s + 1 /* ERROR "integer" */ <<s
	_ = 1. /* ERROR "integer" */ <<s + 1. /* ERROR "integer" */ <<s == 1 /* ERROR "integer" */ <<s + 1. /* ERROR "integer" */ <<s
	_ = 1. /* ERROR "integer" */ <<s + 1. /* ERROR "integer" */ <<s == 1. /* ERROR "integer" */ <<s + 1 /* ERROR "integer" */ <<s
	_ = 1. /* ERROR "integer" */ <<s + 1. /* ERROR "integer" */ <<s == 1. /* ERROR "integer" */ <<s + 1. /* ERROR "integer" */ <<s
}

func shifts5() {
	// shifts in comparisons w/ typed operands
	var s uint
	var x int

	_ = 1<<s == x
	_ = 1.<<s == x
	_ = 1.1 /* ERROR "int" */ <<s == x

	_ = 1<<s + x == 1
	_ = 1<<s + x == 1.
	_ = 1<<s + x == 1.1 /* ERROR "int" */
	_ = 1.<<s + x == 1
	_ = 1.<<s + x == 1.
	_ = 1.<<s + x == 1.1 /* ERROR "int" */
	_ = 1.1 /* ERROR "int" */ <<s + x == 1
	_ = 1.1 /* ERROR "int" */ <<s + x == 1.
	_ = 1.1 /* ERROR "int" */ <<s + x == 1.1

	_ = 1<<s == x<<s
	_ = 1.<<s == x<<s
	_ = 1.1  /* ERROR "int" */ <<s == x<<s
}

func shifts6() {
	// shifts as operands in non-arithmetic operations and as arguments
	var a [10]int
	var s uint

	_ = a[1<<s]
	_ = a[1.0]
	_ = a[1.0<<s]

	_ = make([]int, 1.0)
	_ = make([]int, 1.0<<s)
	_ = make([]int, 1.1 /* ERROR "integer" */ <<s)

	_ = float32(1)
	_ = float32(1<<s)
	_ = float32(1.0)
	_ = float32(1.0 /* ERROR "int" */ <<s)
	_ = float32(1.1 /* ERROR "int" */ <<s)

	var b []int
	_ = append(b, 1<<s)
	_ = append(b, 1.0<<s)
	_ = append(b, 1.1 /* ERROR "must be integer" */ <<s)

	var c []float32
	_ = append(b, 1<<s)
	_ = append(b, 1.0<<s) // should fail - see TODO in append code
	_ = append(b, 1.1 /* ERROR "must be integer" */ <<s)

	_ = complex(1.0 /* ERROR "must be integer" */ <<s, 0)
	_ = complex(1.1 /* ERROR "must be integer" */ <<s, 0)
	_ = complex(0, 1.0 /* ERROR "must be integer" */ <<s)
	_ = complex(0, 1.1 /* ERROR "must be integer" */ <<s)

	// TODO(gri) The delete below is not type-checked correctly yet.
	// var m1 map[int]string
	// delete(m1, 1<<s)
}

func shifts7() {
	// shifts of shifts
	var s uint
	var x int
	_ = 1<<(1<<s)
	_ = 1<<(1.<<s)
	_ = 1. /* ERROR "integer" */ <<(1<<s)
	_ = 1. /* ERROR "integer" */ <<(1.<<s)

	x = 1<<(1<<s)
	x = 1<<(1.<<s)
	x = 1.<<(1<<s)
	x = 1.<<(1.<<s)

	_ = (1<<s)<<(1<<s)
	_ = (1<<s)<<(1.<<s)
	_ = ( /* ERROR "integer" */ 1.<<s)<<(1<<s)
	_ = ( /* ERROR "integer" */ 1.<<s)<<(1.<<s)

	x = (1<<s)<<(1<<s)
	x = (1<<s)<<(1.<<s)
	x = ( /* ERROR "integer" */ 1.<<s)<<(1<<s)
	x = ( /* ERROR "integer" */ 1.<<s)<<(1.<<s)
}

func shifts8() {
	// shift examples from shift discussion: better error messages
	var s uint
	_ = 1.0 /* ERROR "shifted operand 1.0 \(type float64\) must be integer" */ <<s == 1
	_ = 1.0 /* ERROR "shifted operand 1.0 \(type float64\) must be integer" */ <<s == 1.0
	_ = 1 /* ERROR "shifted operand 1 \(type float64\) must be integer" */ <<s == 1.0
	_ = 1 /* ERROR "shifted operand 1 \(type float64\) must be integer" */ <<s + 1.0 == 1
	_ = 1 /* ERROR "shifted operand 1 \(type float64\) must be integer" */ <<s + 1.1 == 1
	_ = 1 /* ERROR "shifted operand 1 \(type float64\) must be integer" */ <<s + 1 == 1.0

	// additional cases
	_ = complex(1.0 /* ERROR "shifted operand 1.0 \(type float64\) must be integer" */ <<s, 1)
	_ = complex(1.0, 1 /* ERROR "shifted operand 1 \(type float64\) must be integer" */ <<s)

	// TODO(gri): enable tests using conversions (the spec is unclear)
	// _ = int(1.<<s)
	// _ = int(1.1<<s)
	// _ = float32(1<<s)
	// _ = float32(1.<<s)
	// _ = float32(1.1<<s)
	// _ = complex64(1<<s)
	// _ = complex64(1.<<s)
	// _ = complex64(1.1<<s)
}

func shifts9() {
	// various originally failing snippets of code from the std library
	// from src/pkg/compress/lzw/reader.go:90
	{
		var d struct {
			bits     uint32
			width    uint
		}
		_ = uint16(d.bits & (1<<d.width - 1))
	}

	// from src/pkg/debug/dwarf/buf.go:116
	{
		var ux uint64
		var bits uint
		x := int64(ux)
		if x&(1<<(bits-1)) != 0 {}
	}

	// from src/pkg/encoding/asn1/asn1.go:160
	{
		var bytes []byte
		if bytes[len(bytes)-1]&((1<<bytes[0])-1) != 0 {}
	}

	// from src/pkg/math/big/rat.go:140
	{
		var exp int
		var mantissa uint64
		shift := uint64(-1022 - (exp - 1)) // [1..53)
		_ = mantissa & (1<<shift - 1)
	}

	// from src/pkg/net/interface.go:51
	{
		type Flags uint
		var f Flags
		var i int
		if f&(1<<uint(i)) != 0 {}
	}

	// from src/pkg/runtime/softfloat64.go:234
	{
		var gm uint64
		var shift uint
		_ = gm & (1<<shift - 1)
	}

	// from src/pkg/strconv/atof.go:326
	{
		var mant uint64
		var mantbits uint
		if mant == 2<<mantbits {}
	}

	// from src/pkg/syscall/route_bsd.go:82
	{
		var Addrs int32
		const rtaRtMask = 1
		var i uint
		if Addrs&rtaRtMask&(1<<i) == 0 {}
	}

	// from src/pkg/text/scanner/scanner.go:540
	{
		var s struct { Whitespace uint64 }
		var ch rune
		for s.Whitespace&(1<<uint(ch)) != 0 {}
	}
}
