safe unpack on field to uint casts
This commit is contained in:
parent
942901c55b
commit
42fd168029
6 changed files with 28 additions and 36 deletions
|
@ -1,9 +1,7 @@
|
|||
from "EMBED" import unpack, u16_from_bits
|
||||
from "field" import FIELD_SIZE_IN_BITS
|
||||
import "utils/pack/bool/unpack"
|
||||
import "utils/casts/u16_from_bits"
|
||||
|
||||
const field U16_MAX = 65535
|
||||
|
||||
// Condition: field value is asserted to be in range [0, U16_MAX]
|
||||
def main(field input) -> u16:
|
||||
assert(input <= U16_MAX)
|
||||
bool[16] bits = unpack(input)
|
||||
return u16_from_bits(bits)
|
||||
bool[FIELD_SIZE_IN_BITS] bits = unpack(input)
|
||||
return u16_from_bits(bits[FIELD_SIZE_IN_BITS-16..])
|
|
@ -1,9 +1,7 @@
|
|||
from "EMBED" import unpack, u32_from_bits
|
||||
from "field" import FIELD_SIZE_IN_BITS
|
||||
import "utils/pack/bool/unpack"
|
||||
import "utils/casts/u32_from_bits"
|
||||
|
||||
const field U32_MAX = 4294967295
|
||||
|
||||
// Condition: field value is asserted to be in range [0, U32_MAX]
|
||||
def main(field input) -> u32:
|
||||
assert(input <= U32_MAX)
|
||||
bool[32] bits = unpack(input)
|
||||
return u32_from_bits(bits)
|
||||
bool[FIELD_SIZE_IN_BITS] bits = unpack(input)
|
||||
return u32_from_bits(bits[FIELD_SIZE_IN_BITS-32..])
|
|
@ -1,9 +1,7 @@
|
|||
from "EMBED" import unpack, u64_from_bits
|
||||
from "field" import FIELD_SIZE_IN_BITS
|
||||
import "utils/pack/bool/unpack"
|
||||
import "utils/casts/u64_from_bits"
|
||||
|
||||
const field U64_MAX = 18446744073709551615
|
||||
|
||||
// Condition: field value is asserted to be in range [0, U64_MAX]
|
||||
def main(field input) -> u64:
|
||||
assert(input <= U64_MAX)
|
||||
bool[64] bits = unpack(input)
|
||||
return u64_from_bits(bits)
|
||||
bool[FIELD_SIZE_IN_BITS] bits = unpack(input)
|
||||
return u64_from_bits(bits[FIELD_SIZE_IN_BITS-64..])
|
|
@ -1,9 +1,7 @@
|
|||
from "EMBED" import unpack, u8_from_bits
|
||||
from "field" import FIELD_SIZE_IN_BITS
|
||||
import "utils/pack/bool/unpack"
|
||||
import "utils/casts/u8_from_bits"
|
||||
|
||||
const field U8_MAX = 255
|
||||
|
||||
// Condition: field value is asserted to be in range [0, U8_MAX]
|
||||
def main(field input) -> u8:
|
||||
assert(input <= U8_MAX)
|
||||
bool[8] bits = unpack(input)
|
||||
return u8_from_bits(bits)
|
||||
bool[FIELD_SIZE_IN_BITS] bits = unpack(input)
|
||||
return u8_from_bits(bits[FIELD_SIZE_IN_BITS-8..])
|
|
@ -4,11 +4,11 @@
|
|||
"tests": [
|
||||
{
|
||||
"input": {
|
||||
"values": ["0", "1", "18446744073709551615", "42", "0", "1", "4294967295", "42", "0", "1", "65535", "42", "0", "1", "255", "42"]
|
||||
"values": ["0", "1", "18446744073709551615", "18446744073709551616", "18446744073709551658", "0", "1", "4294967295", "4294967296", "4294967338", "0", "1", "65535", "65536", "65578", "0", "1", "255", "256", "298"]
|
||||
},
|
||||
"output": {
|
||||
"Ok": {
|
||||
"values": ["0", "1", "18446744073709551615", "42", "0", "1", "4294967295", "42", "0", "1", "65535", "42", "0", "1", "255", "42"]
|
||||
"values": ["0", "1", "18446744073709551615", "0", "42", "0", "1", "4294967295", "0", "42", "0", "1", "65535", "0", "42", "0", "1", "255", "0", "42"]
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -3,13 +3,13 @@ import "utils/casts/field_to_u32"
|
|||
import "utils/casts/field_to_u16"
|
||||
import "utils/casts/field_to_u8"
|
||||
|
||||
def main(field[4] a, field[4] b, field[4] c, field[4] d) -> (u64[4], u32[4], u16[4], u8[4]):
|
||||
u64[4] e = [0; 4]
|
||||
u32[4] f = [0; 4]
|
||||
u16[4] g = [0; 4]
|
||||
u8[4] h = [0; 4]
|
||||
def main(field[5] a, field[5] b, field[5] c, field[5] d) -> (u64[5], u32[5], u16[5], u8[5]):
|
||||
u64[5] e = [0; 5]
|
||||
u32[5] f = [0; 5]
|
||||
u16[5] g = [0; 5]
|
||||
u8[5] h = [0; 5]
|
||||
|
||||
for u32 i in 0..4 do
|
||||
for u32 i in 0..5 do
|
||||
e[i] = field_to_u64(a[i])
|
||||
f[i] = field_to_u32(b[i])
|
||||
g[i] = field_to_u16(c[i])
|
||||
|
|
Loading…
Reference in a new issue