Files
llgo/_cmptest/conversion_int/int_conv.go
xgopilot 2d95847a92 Add comprehensive type conversion tests for issue #961
- Add integer conversion tests (signed/unsigned, truncation, extension)
- Add float conversion tests (precision loss, special values, overflow)
- Add untyped constant conversion tests
- Add overflow and wrapping behavior tests

These tests cover the gaps identified in the code review:
1. Signed/unsigned conversions with negative values
2. Truncation from larger to smaller integer types
3. Sign extension vs zero extension
4. Float-to-int conversions with overflow/saturation
5. Int-to-float conversions with precision loss
6. Untyped constants with typed variables
7. Integer overflow and wrapping behavior
8. Special float values (Inf, NaN)

Generated with [codeagent](https://github.com/qbox/codeagent)
Co-authored-by: cpunion <cpunion@users.noreply.github.com>
2025-10-22 02:05:09 +00:00

67 lines
2.4 KiB
Go

package main
import "fmt"
func main() {
fmt.Println("=== Integer Type Conversions ===")
// 1. Signed/Unsigned conversions
fmt.Println("\n1. Negative to Unsigned:")
var negInt int32 = -1
fmt.Printf("int32(-1) -> uint32: %d (0x%X)\n", uint32(negInt), uint32(negInt))
fmt.Printf("int32(-1) -> uint8: %d (0x%X)\n", uint8(negInt), uint8(negInt))
var negInt64 int64 = -1234567890
fmt.Printf("int64(-1234567890) -> uint32: %d (0x%X)\n", uint32(negInt64), uint32(negInt64))
// 2. Large unsigned to signed
fmt.Println("\n2. Large Unsigned to Signed:")
var bigUint uint32 = 0xFFFFFFFF
fmt.Printf("uint32(0xFFFFFFFF) -> int32: %d\n", int32(bigUint))
fmt.Printf("uint32(0xFFFFFFFF) -> int16: %d\n", int16(bigUint))
var bigUint64 uint64 = 0xFFFFFFFFFFFFFFFF
fmt.Printf("uint64(max) -> int32: %d\n", int32(bigUint64))
// 3. Truncation (downward conversion)
fmt.Println("\n3. Truncation (Larger to Smaller):")
var i64 int64 = 0x123456789ABC
fmt.Printf("int64(0x123456789ABC) -> int32: 0x%X\n", int32(i64))
fmt.Printf("int64(0x123456789ABC) -> int16: 0x%X\n", int16(i64))
fmt.Printf("int64(0x123456789ABC) -> int8: 0x%X\n", int8(i64))
var u64 uint64 = 0xFFFFFFFFFFFFFFFF
fmt.Printf("uint64(max) -> uint32: 0x%X\n", uint32(u64))
fmt.Printf("uint64(max) -> uint16: 0x%X\n", uint16(u64))
fmt.Printf("uint64(max) -> uint8: 0x%X\n", uint8(u64))
// 4. Sign extension vs zero extension
fmt.Println("\n4. Sign Extension vs Zero Extension:")
var i8 int8 = -1
fmt.Printf("int8(-1) -> int16: %d (0x%04X)\n", int16(i8), uint16(int16(i8)))
fmt.Printf("int8(-1) -> int32: %d (0x%08X)\n", int32(i8), uint32(int32(i8)))
fmt.Printf("int8(-1) -> int64: %d (0x%016X)\n", int64(i8), uint64(int64(i8)))
var u8 uint8 = 0xFF
fmt.Printf("uint8(0xFF) -> uint16: %d (0x%04X)\n", uint16(u8), uint16(u8))
fmt.Printf("uint8(0xFF) -> uint32: %d (0x%08X)\n", uint32(u8), uint32(u8))
// 5. Mixed sign conversions with specific values
fmt.Println("\n5. Mixed Sign Conversions:")
var si16 int16 = -32768 // MinInt16
fmt.Printf("int16(MinInt16) -> uint16: %d\n", uint16(si16))
var su16 uint16 = 32768
fmt.Printf("uint16(32768) -> int16: %d\n", int16(su16))
// 6. Boundary values
fmt.Println("\n6. Boundary Value Conversions:")
var maxI8 int8 = 127
var minI8 int8 = -128
fmt.Printf("int8(MaxInt8=%d) -> uint8: %d\n", maxI8, uint8(maxI8))
fmt.Printf("int8(MinInt8=%d) -> uint8: %d\n", minI8, uint8(minI8))
var maxU8 uint8 = 255
fmt.Printf("uint8(MaxUint8=%d) -> int8: %d\n", maxU8, int8(maxU8))
}