Files
Nim/tests/misc/tsizeof3.nim
cooldome 28664cf7b8 fixes #11792 (#11793)
(cherry picked from commit d563efb719)
2019-08-12 10:50:36 +02:00

50 lines
1.2 KiB
Nim

discard """
output: '''
@[48, 57]
'''
"""
# bug #7238
type ByteArrayBE*[N: static[int]] = array[N, byte]
## A byte array that stores bytes in big-endian order
proc toByteArrayBE*[T: SomeInteger](num: T): ByteArrayBE[sizeof(T)]=
## Convert an integer (in native host endianness) to a big-endian byte array
## Notice the result type
const N = T.sizeof
for i in 0 ..< N:
result[i] = byte((num shr ((N-1-i) * 8)) and high(int8))
let a = 12345.toByteArrayBE
echo a[^2 .. ^1] # to make it work on both 32-bit and 64-bit
#-----------------------------------------------------------------
# bug #11792
type
m256d {.importc: "__m256d", header: "immintrin.h".} = object
MyKind = enum
k1, k2, k3
MyTypeObj = object
kind: MyKind
x: int
amount: UncheckedArray[m256d]
# The sizeof(MyTypeObj) is not equal to (sizeof(int) + sizeof(MyKind)) due to
# alignment requirement of m256d, make sure Nim understands that
doAssert(sizeof(MyTypeObj) > sizeof(int) + sizeof(MyKind))
#---------------------------------------------------------------------
type
Payload = object
something: int
vals: UncheckedArray[int]
static:
doAssert(compiles(offsetOf(Payload, vals)))