| // Copyright 2019 The Fuchsia Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| success("BoolTrue") { |
| value = MyBool { |
| value: true, |
| }, |
| bytes = { |
| v1 = [ |
| 0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00, |
| ], |
| }, |
| } |
| |
| success("BoolFalse") { |
| value = MyBool { |
| value: false, |
| }, |
| bytes = { |
| v1 = [ |
| 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, |
| ], |
| }, |
| } |
| |
| success("ByteZero") { |
| value = MyByte { |
| value: 0, |
| }, |
| bytes = { |
| v1 = [ |
| 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, |
| ], |
| }, |
| } |
| |
| success("Byte255") { |
| value = MyByte { |
| value: 255, |
| }, |
| bytes = { |
| v1 = [ |
| 0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00, |
| ], |
| }, |
| } |
| |
| success("Int8Min") { |
| value = MyInt8 { |
| value: -128, |
| }, |
| bytes = { |
| v1 = [ |
| 0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00, |
| ], |
| }, |
| } |
| |
| success("Int8Zero") { |
| value = MyInt8 { |
| value: 0, |
| }, |
| bytes = { |
| v1 = [ |
| 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, |
| ], |
| }, |
| } |
| |
| success("Int8Max") { |
| value = MyInt8 { |
| value: 127, |
| }, |
| bytes = { |
| v1 = [ |
| 0x7f,0x00,0x00,0x00,0x00,0x00,0x00,0x00, |
| ], |
| }, |
| } |
| |
| success("Int16Min") { |
| value = MyInt16 { |
| value: -32768, |
| }, |
| bytes = { |
| v1 = [ |
| 0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00, |
| ], |
| }, |
| } |
| |
| success("Int16Zero") { |
| value = MyInt16 { |
| value: 0, |
| }, |
| bytes = { |
| v1 = [ |
| 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, |
| ], |
| }, |
| } |
| |
| success("Int16Max") { |
| value = MyInt16 { |
| value: 32767, |
| }, |
| bytes = { |
| v1 = [ |
| 0xff,0x7f,0x00,0x00,0x00,0x00,0x00,0x00, |
| ], |
| }, |
| } |
| |
| success("Int32Min") { |
| value = MyInt32 { |
| value: -2147483648, |
| }, |
| bytes = { |
| v1 = [ |
| 0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00, |
| ], |
| }, |
| } |
| |
| success("Int32Zero") { |
| value = MyInt32 { |
| value: 0, |
| }, |
| bytes = { |
| v1 = [ |
| 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, |
| ], |
| }, |
| } |
| |
| success("Int32Max") { |
| value = MyInt32 { |
| value: 2147483647, |
| }, |
| bytes = { |
| v1 = [ |
| 0xff,0xff,0xff,0x7f,0x00,0x00,0x00,0x00, |
| ], |
| }, |
| } |
| |
| success("Int64Min") { |
| value = MyInt64 { |
| value: -9223372036854775808, |
| }, |
| bytes = { |
| v1 = [ |
| 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80, |
| ], |
| }, |
| } |
| |
| success("Int64Zero") { |
| value = MyInt64 { |
| value: 0, |
| }, |
| bytes = { |
| v1 = [ |
| 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, |
| ], |
| }, |
| } |
| |
| success("Int64Max") { |
| value = MyInt64 { |
| value: 9223372036854775807, |
| }, |
| bytes = { |
| v1 = [ |
| 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f, |
| ], |
| }, |
| } |
| |
| success("Uint8Zero") { |
| value = MyUint8 { |
| value: 0, |
| }, |
| bytes = { |
| v1 = [ |
| 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, |
| ], |
| }, |
| } |
| |
| success("Uint8Max") { |
| value = MyUint8 { |
| value: 255, |
| }, |
| bytes = { |
| v1 = [ |
| 0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00, |
| ], |
| }, |
| } |
| |
| success("Uint16Zero") { |
| value = MyUint16 { |
| value: 0, |
| }, |
| bytes = { |
| v1 = [ |
| 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, |
| ], |
| }, |
| } |
| |
| success("Uint16Max") { |
| value = MyUint16 { |
| value: 65535, |
| }, |
| bytes = { |
| v1 = [ |
| 0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00, |
| ], |
| }, |
| } |
| |
| success("Uint32Zero") { |
| value = MyUint32 { |
| value: 0, |
| }, |
| bytes = { |
| v1 = [ |
| 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, |
| ], |
| }, |
| } |
| |
| success("Uint32Max") { |
| value = MyUint32 { |
| value: 4294967295, |
| }, |
| bytes = { |
| v1 = [ |
| 0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00, |
| ], |
| }, |
| } |
| |
| success("Uint64Zero") { |
| value = MyUint64 { |
| value: 0, |
| }, |
| bytes = { |
| v1 = [ |
| 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, |
| ], |
| }, |
| } |
| |
| success("Uint64Max") { |
| value = MyUint64 { |
| value: 18446744073709551615, |
| }, |
| bytes = { |
| v1 = [ |
| 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, |
| ], |
| }, |
| } |
| |
| // Note: floats are tricky and there may be failures do to cpu architecture |
| // and similar reasons. |
| |
| success("Float32PositiveZero") { |
| value = MyFloat32 { |
| value: 0.0, |
| }, |
| bytes = { |
| v1 = [ |
| 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, |
| ], |
| }, |
| } |
| |
| success("Float32NegativeZero") { |
| value = MyFloat32 { |
| value: raw_float(0b1_00000000_00000000000000000000000), |
| }, |
| bytes = { |
| v1 = [ |
| 0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00, |
| ], |
| }, |
| } |
| |
| success("Float32PositiveOne") { |
| value = MyFloat32 { |
| value: 1.0, |
| }, |
| bytes = { |
| v1 = [ |
| 0x00,0x00,0x80,0x3f,0x00,0x00,0x00,0x00, |
| ], |
| }, |
| } |
| |
| success("Float32NegativeOne") { |
| value = MyFloat32 { |
| value: -1.0, |
| }, |
| bytes = { |
| v1 = [ |
| 0x00,0x00,0x80,0xbf,0x00,0x00,0x00,0x00, |
| ], |
| }, |
| } |
| |
| success("Float32Min") { |
| value = MyFloat32 { |
| value: -3.40282346638528859811704183484516925440e+38, |
| }, |
| bytes = { |
| v1 = [ |
| 0xff,0xff,0x7f,0xff,0x00,0x00,0x00,0x00, |
| ], |
| }, |
| } |
| success("Float32Max") { |
| value = MyFloat32 { |
| value: 3.40282346638528859811704183484516925440e+38, |
| }, |
| bytes = { |
| v1 = [ |
| 0xff,0xff,0x7f,0x7f,0x00,0x00,0x00,0x00, |
| ], |
| }, |
| } |
| |
| success("Float32SmallestNormalizedPositive") { |
| value = MyFloat32 { |
| value: 1.1754943508222875e-38, |
| }, |
| bytes = { |
| v1 = [ |
| 0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00, |
| ], |
| }, |
| } |
| |
| success("Float32SmallestNormalizedNegative") { |
| value = MyFloat32 { |
| value: -1.1754943508222875e-38, |
| }, |
| bytes = { |
| v1 = [ |
| 0x00,0x00,0x80,0x80,0x00,0x00,0x00,0x00, |
| ], |
| }, |
| } |
| |
| success("Float32LargestDenormalizedPositive") { |
| value = MyFloat32 { |
| value: 1.1754942106924411e-38, |
| }, |
| bytes = { |
| v1 = [ |
| 0xff,0xff,0x7f,0x00,0x00,0x00,0x00,0x00, |
| ], |
| }, |
| } |
| |
| success("Float32LargestDenormalizedNegative") { |
| value = MyFloat32 { |
| value: -1.1754942106924411e-38, |
| }, |
| bytes = { |
| v1 = [ |
| 0xff,0xff,0x7f,0x80,0x00,0x00,0x00,0x00, |
| ], |
| }, |
| } |
| |
| success("Float32SmallestDenormalizedPositive") { |
| value = MyFloat32 { |
| value: 1.401298464324817e-45, |
| }, |
| bytes = { |
| v1 = [ |
| 0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00, |
| ], |
| }, |
| } |
| |
| success("Float32SmallestDenormalizedNegative") { |
| value = MyFloat32 { |
| value: -1.401298464324817e-45, |
| }, |
| bytes = { |
| v1 = [ |
| 0x01,0x00,0x00,0x80,0x00,0x00,0x00,0x00, |
| ], |
| }, |
| } |
| |
| success("Float32PositiveInfinity") { |
| value = MyFloat32 { |
| value: raw_float(0b0_11111111_00000000000000000000000), |
| }, |
| bytes = { |
| v1 = [ |
| 0x00,0x00,0x80,0x7f,0x00,0x00,0x00,0x00, |
| ], |
| }, |
| } |
| |
| success("Float32NegativeInfinity") { |
| value = MyFloat32 { |
| value: raw_float(0b1_11111111_00000000000000000000000), |
| }, |
| bytes = { |
| v1 = [ |
| 0x00,0x00,0x80,0xff,0x00,0x00,0x00,0x00, |
| ], |
| }, |
| } |
| |
| // No decode_success because NaN != NaN. |
| encode_success("Float32QuietNaN") { |
| value = MyFloat32 { |
| value: raw_float(0b0_11111111_10000000000000000000000), |
| }, |
| bytes = { |
| v1 = [ |
| 0x00,0x00,0xc0,0x7f,0x00,0x00,0x00,0x00, |
| ], |
| }, |
| } |
| |
| // No decode_success because NaN != NaN. |
| encode_success("Float32SignallingNaN") { |
| bindings_denylist = [dart], |
| value = MyFloat32 { |
| value: raw_float(0b0_11111111_01000000000000000000000), |
| }, |
| bytes = { |
| v1 = [ |
| 0x00,0x00,0xa0,0x7f,0x00,0x00,0x00,0x00, |
| ], |
| }, |
| } |
| |
| // No decode_success because NaN != NaN. |
| encode_success("Float32SignallingNaNCovertedToQuiet") { |
| // Dart only has double-precision floats. For FIDL float32, the bindings |
| // encode using ByteData.setFloat32 (takes a double) and decode using |
| // BytePart.getFloat32 (returns a double). For NaNs, these functions |
| // truncate/zero-extend the mantissa AND SET ITS MOST SIGNIFICANT BIT (the |
| // quiet bit). This effectively means that float32 signalling NaNs do not |
| // exist in Dart; they always get converted to quiet NaNs on encode/decode. |
| bindings_allowlist = [dart], |
| value = MyFloat32 { |
| value: raw_float(0b0_11111111_01000000000000000000000), |
| }, |
| bytes = { |
| v1 = [ |
| // 0xe0 instead of 0xa0: quiet bit set |
| 0x00,0x00,0xe0,0x7f,0x00,0x00,0x00,0x00, |
| ], |
| }, |
| } |
| |
| success("Float64PositiveZero") { |
| value = MyFloat64 { |
| value: 0.0, |
| }, |
| bytes = { |
| v1 = [ |
| 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, |
| ], |
| }, |
| } |
| |
| success("Float64NegativeZero") { |
| value = MyFloat64 { |
| value: raw_float(0b1_00000000000_0000000000000000000000000000000000000000000000000000), |
| }, |
| bytes = { |
| v1 = [ |
| 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80, |
| ], |
| }, |
| } |
| |
| success("Float64PositiveOne") { |
| value = MyFloat64 { |
| value: 1.0, |
| }, |
| bytes = { |
| v1 = [ |
| 0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0x3f, |
| ], |
| }, |
| } |
| |
| success("Float64NegativeOne") { |
| value = MyFloat64 { |
| value: -1.0, |
| }, |
| bytes = { |
| v1 = [ |
| 0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0xbf, |
| ], |
| }, |
| } |
| |
| success("Float64Min") { |
| value = MyFloat64 { |
| value: -1.797693134862315708145274237317043567981e+308, |
| }, |
| bytes = { |
| v1 = [ |
| 0xff,0xff,0xff,0xff,0xff,0xff,0xef,0xff, |
| ], |
| }, |
| } |
| |
| success("Float64Max") { |
| value = MyFloat64 { |
| value: 1.797693134862315708145274237317043567981e+308, |
| }, |
| bytes = { |
| v1 = [ |
| 0xff,0xff,0xff,0xff,0xff,0xff,0xef,0x7f, |
| ], |
| }, |
| } |
| |
| success("Float64SmallestNormalizedPositive") { |
| value = MyFloat64 { |
| value: 2.2250738585072014e-308, |
| }, |
| bytes = { |
| v1 = [ |
| 0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x00, |
| ], |
| }, |
| } |
| |
| success("Float64SmallestNormalizedNegative") { |
| value = MyFloat64 { |
| value: -2.2250738585072014e-308, |
| }, |
| bytes = { |
| v1 = [ |
| 0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x80, |
| ], |
| }, |
| } |
| |
| success("Float64LargestDenormalizedPositive") { |
| value = MyFloat64 { |
| value: 2.225073858507201e-308, |
| }, |
| bytes = { |
| v1 = [ |
| 0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0x00, |
| ], |
| }, |
| } |
| |
| success("Float64LargestDenormalizedNegative") { |
| value = MyFloat64 { |
| value: -2.225073858507201e-308, |
| }, |
| bytes = { |
| v1 = [ |
| 0xff,0xff,0xff,0xff,0xff,0xff,0x0f,0x80, |
| ], |
| }, |
| } |
| |
| success("Float64SmallestDenormalizedPositive") { |
| value = MyFloat64 { |
| value: 5.0e-324 |
| }, |
| bytes = { |
| v1 = [ |
| 0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00, |
| ], |
| }, |
| } |
| |
| success("Float64SmallestDenormalizedNegative") { |
| value = MyFloat64 { |
| value: -5.0e-324 |
| }, |
| bytes = { |
| v1 = [ |
| 0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x80, |
| ], |
| }, |
| } |
| |
| success("Float64PositiveInfinity") { |
| value = MyFloat64 { |
| value: raw_float(0b0_11111111111_0000000000000000000000000000000000000000000000000000), |
| }, |
| bytes = { |
| v1 = [ |
| 0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0x7f, |
| ], |
| }, |
| } |
| |
| success("Float64NegativeInfinity") { |
| value = MyFloat64 { |
| value: raw_float(0b1_11111111111_0000000000000000000000000000000000000000000000000000), |
| }, |
| bytes = { |
| v1 = [ |
| 0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0xff, |
| ], |
| }, |
| } |
| |
| // No decode_success because NaN != NaN. |
| encode_success("Float64QuietNaN") { |
| value = MyFloat64 { |
| value: raw_float(0b0_11111111111_1000000000000000000000000000000000000000000000000000), |
| }, |
| bytes = { |
| v1 = [ |
| 0x00,0x00,0x00,0x00,0x00,0x00,0xf8,0x7f, |
| ], |
| }, |
| } |
| |
| // No decode_success because NaN != NaN. |
| encode_success("Float64SignallingNaN") { |
| value = MyFloat64 { |
| value: raw_float(0b0_11111111111_0100000000000000000000000000000000000000000000000000), |
| }, |
| bytes = { |
| v1 = [ |
| 0x00,0x00,0x00,0x00,0x00,0x00,0xf4,0x7f, |
| ], |
| }, |
| } |