diff options
| author | Michael Williamson <mike@zwobble.org> | 2026-08-29 23:29:20 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2026-08-29 23:29:20 +0100 |
| commit | 5853245ec192799892a1a713f73269bbe4b03593 (patch) | |
| tree | a3d46a9ee6bfcc2ab2e3cc708586891b24384111 /examples | |
| parent | e5b0b62785e75d19b4d852712cb6a72ea77429d2 (diff) | |
Support Float64 in transient-0
Diffstat (limited to 'examples')
8 files changed, 83 insertions, 1 deletions
diff --git a/examples/16-transient-0/output/java/src/main/java/org/zwobble/example/types/data/transient0/HobgoblinTransient0Data.java b/examples/16-transient-0/output/java/src/main/java/org/zwobble/example/types/data/transient0/HobgoblinTransient0Data.java index 13e5044..f8799b7 100644 --- a/examples/16-transient-0/output/java/src/main/java/org/zwobble/example/types/data/transient0/HobgoblinTransient0Data.java +++ b/examples/16-transient-0/output/java/src/main/java/org/zwobble/example/types/data/transient0/HobgoblinTransient0Data.java @@ -35,6 +35,17 @@ public final class HobgoblinTransient0Data { return new org.zwobble.example.types.data.StructWithBool(a, b); } + public static void encodeStructWithFloat64(org.zwobble.example.types.data.StructWithFloat64 value, java.io.OutputStream outputStream, java.util.Map<org.zwobble.example.types.transient0.HobgoblinTransient0TaggedSharedValue, java.lang.Long> sharedValues) throws java.io.IOException { + org.zwobble.example.types.transient0.HobgoblinTransient0Builtins.encodeFloat64(value.a(), outputStream, sharedValues); + org.zwobble.example.types.transient0.HobgoblinTransient0Builtins.encodeFloat64(value.b(), outputStream, sharedValues); + } + + public static org.zwobble.example.types.data.StructWithFloat64 decodeStructWithFloat64(java.io.InputStream inputStream, java.util.List<java.lang.Object> sharedValues) throws java.io.IOException { + var a = org.zwobble.example.types.transient0.HobgoblinTransient0Builtins.decodeFloat64(inputStream, sharedValues); + var b = org.zwobble.example.types.transient0.HobgoblinTransient0Builtins.decodeFloat64(inputStream, sharedValues); + return new org.zwobble.example.types.data.StructWithFloat64(a, b); + } + public static void encodeStructWithInt8(org.zwobble.example.types.data.StructWithInt8 value, java.io.OutputStream outputStream, java.util.Map<org.zwobble.example.types.transient0.HobgoblinTransient0TaggedSharedValue, java.lang.Long> sharedValues) throws java.io.IOException { org.zwobble.example.types.transient0.HobgoblinTransient0Builtins.encodeInt8(value.a(), outputStream, sharedValues); org.zwobble.example.types.transient0.HobgoblinTransient0Builtins.encodeInt8(value.b(), outputStream, sharedValues); diff --git a/examples/16-transient-0/output/java/src/main/java/org/zwobble/example/types/transient0/HobgoblinTransient0Builtins.java b/examples/16-transient-0/output/java/src/main/java/org/zwobble/example/types/transient0/HobgoblinTransient0Builtins.java index 7935ca8..861d7bb 100644 --- a/examples/16-transient-0/output/java/src/main/java/org/zwobble/example/types/transient0/HobgoblinTransient0Builtins.java +++ b/examples/16-transient-0/output/java/src/main/java/org/zwobble/example/types/transient0/HobgoblinTransient0Builtins.java @@ -14,6 +14,15 @@ public final class HobgoblinTransient0Builtins { return inputStream.read() != 0; } + public static void encodeFloat64(double value, java.io.OutputStream outputStream, java.util.Map<org.zwobble.example.types.transient0.HobgoblinTransient0TaggedSharedValue, java.lang.Long> sharedValues) throws java.io.IOException { + org.zwobble.example.types.transient0.HobgoblinTransient0Builtins.encodeInt64(java.lang.Double.doubleToLongBits(value), outputStream, sharedValues); + } + + public static double decodeFloat64(java.io.InputStream inputStream, java.util.List<java.lang.Object> sharedValues) throws java.io.IOException { + var longBits = org.zwobble.example.types.transient0.HobgoblinTransient0Builtins.decodeInt64(inputStream, sharedValues); + return java.lang.Double.longBitsToDouble(longBits); + } + public static void encodeInt8(byte value, java.io.OutputStream outputStream, java.util.Map<org.zwobble.example.types.transient0.HobgoblinTransient0TaggedSharedValue, java.lang.Long> sharedValues) throws java.io.IOException { outputStream.write(value); } diff --git a/examples/16-transient-0/output/java/src/test/java/org/zwobble/example/Transient0Tests.java b/examples/16-transient-0/output/java/src/test/java/org/zwobble/example/Transient0Tests.java index 8b2ba3a..1a1d659 100644 --- a/examples/16-transient-0/output/java/src/test/java/org/zwobble/example/Transient0Tests.java +++ b/examples/16-transient-0/output/java/src/test/java/org/zwobble/example/Transient0Tests.java @@ -23,6 +23,7 @@ import org.zwobble.example.types.data.StructWithBool; import org.zwobble.example.types.data.StructWithBox; import org.zwobble.example.types.data.StructWithDifferentSharedTypes; import org.zwobble.example.types.data.StructWithEnum; +import org.zwobble.example.types.data.StructWithFloat64; import org.zwobble.example.types.data.StructWithGenericNative; import org.zwobble.example.types.data.StructWithGenericStruct; import org.zwobble.example.types.data.StructWithInt8; @@ -67,6 +68,18 @@ public class Transient0Tests { } @Test + public void structWithFloat64() throws IOException { + var value = new StructWithFloat64(10, 2.5); + + assertRoundTripEncoding( + "StructWithFloat64", + value, + HobgoblinTransient0Data::encodeStructWithFloat64, + HobgoblinTransient0Data::decodeStructWithFloat64 + ); + } + + @Test public void structWithInt8() throws IOException { var value = new StructWithInt8((byte)10, (byte)25); diff --git a/examples/16-transient-0/output/rust/src/gen/data.rs b/examples/16-transient-0/output/rust/src/gen/data.rs index 63cdda5..2b344e4 100644 --- a/examples/16-transient-0/output/rust/src/gen/data.rs +++ b/examples/16-transient-0/output/rust/src/gen/data.rs @@ -10,6 +10,12 @@ pub struct StructWithBool { } #[derive(Clone, Debug, PartialEq)] +pub struct StructWithFloat64 { + pub a: ::core::primitive::f64, + pub b: ::core::primitive::f64, +} + +#[derive(Clone, Debug, PartialEq)] pub struct StructWithInt8 { pub a: ::core::primitive::i8, pub b: ::core::primitive::i8, diff --git a/examples/16-transient-0/output/rust/src/gen/data/transient_0.rs b/examples/16-transient-0/output/rust/src/gen/data/transient_0.rs index 0731126..3c40ea2 100644 --- a/examples/16-transient-0/output/rust/src/gen/data/transient_0.rs +++ b/examples/16-transient-0/output/rust/src/gen/data/transient_0.rs @@ -20,6 +20,18 @@ pub fn decode_struct_with_bool(reader: &mut impl ::std::io::Read, shared_values: ::std::io::Result::Ok(crate::data::StructWithBool { a: a, b: b }) } +pub fn encode_struct_with_float_64(value: &crate::data::StructWithFloat64, writer: &mut impl ::std::io::Write, shared_values: &mut ::std::collections::HashMap::<::core::primitive::usize, ::core::primitive::i64>) -> ::std::io::Result::<()> { + crate::transient_0::encode_float_64(&value.a, writer, shared_values)?; + crate::transient_0::encode_float_64(&value.b, writer, shared_values)?; + ::std::io::Result::Ok(()) +} + +pub fn decode_struct_with_float_64(reader: &mut impl ::std::io::Read, shared_values: &mut ::std::vec::Vec::<::std::sync::Arc::<dyn ::std::any::Any + ::std::marker::Sync + ::std::marker::Send>>) -> ::std::io::Result::<crate::data::StructWithFloat64> { + let a = crate::transient_0::decode_float_64(reader, shared_values)?; + let b = crate::transient_0::decode_float_64(reader, shared_values)?; + ::std::io::Result::Ok(crate::data::StructWithFloat64 { a: a, b: b }) +} + pub fn encode_struct_with_int_8(value: &crate::data::StructWithInt8, writer: &mut impl ::std::io::Write, shared_values: &mut ::std::collections::HashMap::<::core::primitive::usize, ::core::primitive::i64>) -> ::std::io::Result::<()> { crate::transient_0::encode_int_8(&value.a, writer, shared_values)?; crate::transient_0::encode_int_8(&value.b, writer, shared_values)?; diff --git a/examples/16-transient-0/output/rust/src/gen/transient_0.rs b/examples/16-transient-0/output/rust/src/gen/transient_0.rs index f9538ca..1b1b659 100644 --- a/examples/16-transient-0/output/rust/src/gen/transient_0.rs +++ b/examples/16-transient-0/output/rust/src/gen/transient_0.rs @@ -29,6 +29,20 @@ pub fn decode_bool(reader: &mut impl ::std::io::Read, shared_values: &mut ::std: }) } +pub fn encode_float_64(value: &::core::primitive::f64, writer: &mut impl ::std::io::Write, shared_values: &mut ::std::collections::HashMap::<::core::primitive::usize, ::core::primitive::i64>) -> ::std::io::Result::<()> { + writer.write_all(&value.to_le_bytes())?; + ::std::io::Result::Ok(()) +} + +pub fn decode_float_64(reader: &mut impl ::std::io::Read, shared_values: &mut ::std::vec::Vec::<::std::sync::Arc::<dyn ::std::any::Any + ::std::marker::Sync + ::std::marker::Send>>) -> ::std::io::Result::<::core::primitive::f64> { + let bytes = { + let mut bytes = [0; 8]; + reader.read_exact(&mut bytes)?; + bytes + }; + ::std::io::Result::Ok(::core::primitive::f64::from_le_bytes(bytes)) +} + pub fn encode_int_8(value: &::core::primitive::i8, writer: &mut impl ::std::io::Write, shared_values: &mut ::std::collections::HashMap::<::core::primitive::usize, ::core::primitive::i64>) -> ::std::io::Result::<()> { writer.write_all(&value.to_le_bytes())?; ::std::io::Result::Ok(()) diff --git a/examples/16-transient-0/output/rust/src/lib.rs b/examples/16-transient-0/output/rust/src/lib.rs index 1f78032..ea26e60 100644 --- a/examples/16-transient-0/output/rust/src/lib.rs +++ b/examples/16-transient-0/output/rust/src/lib.rs @@ -8,7 +8,7 @@ mod test { use std::path::PathBuf; use std::sync::Arc; use std::collections::HashMap; - use super::data::{EnumWithVariants, GenericNative, GenericStruct, Native, StructSingleton, StructWithBool, StructWithBox, StructWithDifferentSharedTypes, StructWithEnum, StructWithGenericNative, StructWithGenericStruct, StructWithInt8, StructWithInt32, StructWithInt64, StructWithList, StructWithListOfShared, StructWithNative, StructWithOption, StructWithSharedSumAndVariant, StructWithString, StructWithStruct, StructWithSum, SumWithBoxedVariants, SumWithVariants, VariantOne, VariantTwo }; + use super::data::{EnumWithVariants, GenericNative, GenericStruct, Native, StructSingleton, StructWithBool, StructWithBox, StructWithDifferentSharedTypes, StructWithEnum, StructWithFloat64, StructWithGenericNative, StructWithGenericStruct, StructWithInt8, StructWithInt32, StructWithInt64, StructWithList, StructWithListOfShared, StructWithNative, StructWithOption, StructWithSharedSumAndVariant, StructWithString, StructWithStruct, StructWithSum, SumWithBoxedVariants, SumWithVariants, VariantOne, VariantTwo }; #[test] fn struct_singleton() { @@ -35,6 +35,18 @@ mod test { } #[test] + fn struct_with_float_64() { + let value = StructWithFloat64 { a: 10.0, b: 2.5 }; + + assert_round_trip_encoding( + "StructWithFloat64", + value, + super::data::transient_0::encode_struct_with_float_64, + super::data::transient_0::decode_struct_with_float_64, + ); + } + + #[test] fn struct_with_int_8() { let value = StructWithInt8 { a: 10, b: 25 }; diff --git a/examples/16-transient-0/src/data.hob b/examples/16-transient-0/src/data.hob index ed93768..25fb1be 100644 --- a/examples/16-transient-0/src/data.hob +++ b/examples/16-transient-0/src/data.hob @@ -7,6 +7,11 @@ struct StructWithBool { field b: Bool; } +struct StructWithFloat64 { + field a: Float64; + field b: Float64; +} + struct StructWithInt8 { field a: Int8; field b: Int8; |
