From d7a69cc903c5e7d24d4792ebc438a116aa13993b Mon Sep 17 00:00:00 2001 From: Zeke Foppa Date: Thu, 30 Jul 2026 15:03:18 +0200 Subject: [PATCH 1/4] [bfops/fix-defaults]: fixes --- .../diag/snapshots/Module#FFI.verified.cs | 2 +- crates/bindings-csharp/Runtime/Attrs.cs | 4 ++++ crates/bindings-macro/src/table.rs | 6 ++++- .../tests/smoketests/column_defaults.rs | 23 ++++++------------- 4 files changed, 17 insertions(+), 18 deletions(-) diff --git a/crates/bindings-csharp/Codegen.Tests/fixtures/diag/snapshots/Module#FFI.verified.cs b/crates/bindings-csharp/Codegen.Tests/fixtures/diag/snapshots/Module#FFI.verified.cs index e6df8c9e52a..8ae73ee287e 100644 --- a/crates/bindings-csharp/Codegen.Tests/fixtures/diag/snapshots/Module#FFI.verified.cs +++ b/crates/bindings-csharp/Codegen.Tests/fixtures/diag/snapshots/Module#FFI.verified.cs @@ -3584,7 +3584,7 @@ public static void Main() var value = new SpacetimeDB.BSATN.F32(); __memoryStream.Position = 0; __memoryStream.SetLength(0); - value.Write(__writer, 2); + value.Write(__writer, 2F); var array = __memoryStream.ToArray(); SpacetimeDB.Internal.Module.RegisterTableDefaultValue( "TestDefaultFieldValues", diff --git a/crates/bindings-csharp/Runtime/Attrs.cs b/crates/bindings-csharp/Runtime/Attrs.cs index 38b3c45edd9..3865f925a2a 100644 --- a/crates/bindings-csharp/Runtime/Attrs.cs +++ b/crates/bindings-csharp/Runtime/Attrs.cs @@ -172,6 +172,10 @@ public string Value { return value.ToString()?.ToLower()!; } + if (value is float f) + { + return $"{f.ToString("R", System.Globalization.CultureInfo.InvariantCulture)}F"; + } var str = value.ToString(); if (value is string) { diff --git a/crates/bindings-macro/src/table.rs b/crates/bindings-macro/src/table.rs index 1cbba4c5ca1..f25e044358c 100644 --- a/crates/bindings-macro/src/table.rs +++ b/crates/bindings-macro/src/table.rs @@ -1026,10 +1026,14 @@ pub(crate) fn table_impl(mut args: TableArgs, item: &syn::DeriveInput) -> syn::R let col_defaults: Vec = columns.iter().filter_map(|col| { if let Some(val) = &col.default_value { let col_id = col.index; + let ty = &col.ty; Some(quote! { spacetimedb::table::ColumnDefault { col_id: #col_id, - value: #val.serialize(spacetimedb::sats::algebraic_value::ser::ValueSerializer).expect("default value serialization failed"), + value: { + let value: #ty = #val; + value.serialize(spacetimedb::sats::algebraic_value::ser::ValueSerializer).expect("default value serialization failed") + }, }, }) } else { diff --git a/crates/smoketests/tests/smoketests/column_defaults.rs b/crates/smoketests/tests/smoketests/column_defaults.rs index 0529e9b1b1c..75478d55b15 100644 --- a/crates/smoketests/tests/smoketests/column_defaults.rs +++ b/crates/smoketests/tests/smoketests/column_defaults.rs @@ -16,21 +16,12 @@ const EXPECTED_DEFAULTS: &[(&str, &str)] = &[ // TODO: uncomment this once negative defaults are fixed in Rust // https://github.com/clockworklabs/SpacetimeDB/issues/5622 //("i32_value", "-32"), - - // TODO: uncomment once u64s are fixed. - // https://github.com/clockworklabs/SpacetimeDB/issues/5623 - //("u64_value", "64"), - + ("u64_value", "64"), // TODO: uncomment this once negative defaults are fixed in Rust // https://github.com/clockworklabs/SpacetimeDB/issues/5622 //("i64_value", "-64"), - - // TODO: uncomment once floats are fixed in C#. - // https://github.com/clockworklabs/SpacetimeDB/issues/5624 - //("f32_positive_value", "32.5"), - - // TODO: uncomment once floats are fixed in C# and negative defaults are fixed in Rust - // https://github.com/clockworklabs/SpacetimeDB/issues/5624 + ("f32_positive_value", "32.5"), + // TODO: uncomment once negative defaults are fixed in Rust // https://github.com/clockworklabs/SpacetimeDB/issues/5622 //("f32_negative_value", "-32.5"), ("f64_positive_value", "64.25"), @@ -146,8 +137,8 @@ pub struct DefaultsTestTable { pub u32_value: u32, // #[default(-64)] // pub i64_value: i64, -// #[default(64)] -// pub u64_value: u64, + #[default(64)] + pub u64_value: u64, #[default(32.5)] pub f32_positive_value: f32, // #[default(-32.5)] @@ -230,8 +221,8 @@ public static partial class Module [Default(32U)] public uint u32_value; [Default(-64L)] public long i64_value; [Default(64UL)] public ulong u64_value; - //[Default(32.5f)] public float f32_positive_value; - //[Default(-32.5f)] public float f32_negative_value; + [Default(32.5f)] public float f32_positive_value; + [Default(-32.5f)] public float f32_negative_value; [Default(64.25)] public double f64_positive_value; [Default(-64.25)] public double f64_negative_value; [Default("default string")] public string string_value; From 3079ce52f6dc25b525951b384859592ae6292b41 Mon Sep 17 00:00:00 2001 From: Zeke Foppa Date: Thu, 30 Jul 2026 15:17:47 +0200 Subject: [PATCH 2/4] [bfops/fix-defaults]: f32 value fix --- crates/bindings/tests/defaults.rs | 23 +++++++++++++++++++ .../tests/smoketests/column_defaults.rs | 9 ++------ 2 files changed, 25 insertions(+), 7 deletions(-) create mode 100644 crates/bindings/tests/defaults.rs diff --git a/crates/bindings/tests/defaults.rs b/crates/bindings/tests/defaults.rs new file mode 100644 index 00000000000..0b1ea46c07e --- /dev/null +++ b/crates/bindings/tests/defaults.rs @@ -0,0 +1,23 @@ +use spacetimedb::sats::{F32, F64}; +use spacetimedb::table::TableInternal; +use spacetimedb::AlgebraicValue; + +#[spacetimedb::table(accessor = defaults)] +pub struct Defaults { + pub id: u32, + #[default(32.5)] + pub f32_value: f32, + #[default(64.25)] + pub f64_value: f64, +} + +#[test] +fn float_defaults_use_the_column_type() { + let defaults = defaults__TableHandle::get_default_col_values(); + + assert_eq!(defaults.len(), 2); + assert_eq!(defaults[0].col_id, 1); + assert_eq!(defaults[0].value, AlgebraicValue::F32(F32::from(32.5))); + assert_eq!(defaults[1].col_id, 2); + assert_eq!(defaults[1].value, AlgebraicValue::F64(F64::from(64.25))); +} diff --git a/crates/smoketests/tests/smoketests/column_defaults.rs b/crates/smoketests/tests/smoketests/column_defaults.rs index 639effdfaa8..75478d55b15 100644 --- a/crates/smoketests/tests/smoketests/column_defaults.rs +++ b/crates/smoketests/tests/smoketests/column_defaults.rs @@ -20,13 +20,8 @@ const EXPECTED_DEFAULTS: &[(&str, &str)] = &[ // TODO: uncomment this once negative defaults are fixed in Rust // https://github.com/clockworklabs/SpacetimeDB/issues/5622 //("i64_value", "-64"), - - // TODO: uncomment once f32s are fixed in Rust - // https://github.com/clockworklabs/SpacetimeDB/issues/5624 - //("f32_positive_value", "32.5"), - - // TODO: uncomment once f32s are fixed in Rust and negative defaults are fixed in Rust - // https://github.com/clockworklabs/SpacetimeDB/issues/5624 + ("f32_positive_value", "32.5"), + // TODO: uncomment once negative defaults are fixed in Rust // https://github.com/clockworklabs/SpacetimeDB/issues/5622 //("f32_negative_value", "-32.5"), ("f64_positive_value", "64.25"), From 1f17514485c613e9ec23a3ad74da60b506b4eccd Mon Sep 17 00:00:00 2001 From: Zeke Foppa Date: Thu, 30 Jul 2026 20:38:25 +0200 Subject: [PATCH 3/4] [bfops/fix-defaults]: updates --- .../tests/smoketests/column_defaults.rs | 48 +++++++------------ 1 file changed, 18 insertions(+), 30 deletions(-) diff --git a/crates/smoketests/tests/smoketests/column_defaults.rs b/crates/smoketests/tests/smoketests/column_defaults.rs index 75478d55b15..f7175ea994f 100644 --- a/crates/smoketests/tests/smoketests/column_defaults.rs +++ b/crates/smoketests/tests/smoketests/column_defaults.rs @@ -5,29 +5,17 @@ use spacetimedb_smoketests::{ const EXPECTED_DEFAULTS: &[(&str, &str)] = &[ ("bool_value", "true"), ("u8_value", "8"), - // TODO: uncomment this once negative defaults are fixed in Rust - // https://github.com/clockworklabs/SpacetimeDB/issues/5622 - //("i8_value", "-8"), + ("i8_value", "-8"), ("u16_value", "16"), - // TODO: uncomment this once negative defaults are fixed in Rust - // https://github.com/clockworklabs/SpacetimeDB/issues/5622 - //("i16_value", "-16"), + ("i16_value", "-16"), ("u32_value", "32"), - // TODO: uncomment this once negative defaults are fixed in Rust - // https://github.com/clockworklabs/SpacetimeDB/issues/5622 - //("i32_value", "-32"), + ("i32_value", "-32"), ("u64_value", "64"), - // TODO: uncomment this once negative defaults are fixed in Rust - // https://github.com/clockworklabs/SpacetimeDB/issues/5622 - //("i64_value", "-64"), + ("i64_value", "-64"), ("f32_positive_value", "32.5"), - // TODO: uncomment once negative defaults are fixed in Rust - // https://github.com/clockworklabs/SpacetimeDB/issues/5622 - //("f32_negative_value", "-32.5"), + ("f32_negative_value", "-32.5"), ("f64_positive_value", "64.25"), - // TODO: uncomment once negative defaults are fixed in Rust - // https://github.com/clockworklabs/SpacetimeDB/issues/5622 - //("f64_negative_value", "-64.25"), + ("f64_negative_value", "-64.25"), // TODO: uncomment this once string default values are fixed in Rust //("string_value", r#""default string""#), @@ -123,30 +111,30 @@ pub struct DefaultsTestTable { pub id: u32, #[default(true)] pub bool_value: bool, -// #[default(-8)] -// pub i8_value: i8, + #[default(-8)] + pub i8_value: i8, #[default(8)] pub u8_value: u8, -// #[default(-16)] -// pub i16_value: i16, + #[default(-16)] + pub i16_value: i16, #[default(16)] pub u16_value: u16, -// #[default(-32)] -// pub i32_value: i32, + #[default(-32)] + pub i32_value: i32, #[default(32)] pub u32_value: u32, -// #[default(-64)] -// pub i64_value: i64, + #[default(-64)] + pub i64_value: i64, #[default(64)] pub u64_value: u64, #[default(32.5)] pub f32_positive_value: f32, -// #[default(-32.5)] -// pub f32_negative_value: f32, + #[default(-32.5)] + pub f32_negative_value: f32, #[default(64.25)] pub f64_positive_value: f64, -// #[default(-64.25)] -// pub f64_negative_value: f64, + #[default(-64.25)] + pub f64_negative_value: f64, // #[default("default string")] // pub string_value: String, } From 29b6e3748c01cc449a2ab8c9db3cecb283a14dc7 Mon Sep 17 00:00:00 2001 From: Zeke Foppa Date: Thu, 30 Jul 2026 20:44:12 +0200 Subject: [PATCH 4/4] [bfops/fix-defaults]: lint --- crates/smoketests/tests/smoketests/column_defaults.rs | 1 - 1 file changed, 1 deletion(-) diff --git a/crates/smoketests/tests/smoketests/column_defaults.rs b/crates/smoketests/tests/smoketests/column_defaults.rs index f7175ea994f..83af4e28afa 100644 --- a/crates/smoketests/tests/smoketests/column_defaults.rs +++ b/crates/smoketests/tests/smoketests/column_defaults.rs @@ -16,7 +16,6 @@ const EXPECTED_DEFAULTS: &[(&str, &str)] = &[ ("f32_negative_value", "-32.5"), ("f64_positive_value", "64.25"), ("f64_negative_value", "-64.25"), - // TODO: uncomment this once string default values are fixed in Rust //("string_value", r#""default string""#), ];