nmarshall commited on
Commit
ff6283b
·
1 Parent(s): 92b30ee

gameplay: port float formatter arithmetic

Browse files
crates/urt-gameplay/src/bin/urt-lifecycle.rs CHANGED
@@ -394,6 +394,19 @@ fn run() -> Result<(), String> {
394
  second.cached_ping as u32
395
  );
396
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
397
  "exit-prefix" if w.len() == 4 => {
398
  use urt_gameplay::exit_prefix::{Action, advance};
399
  let mut pending = w[1] as i32;
 
394
  second.cached_ping as u32
395
  );
396
  }
397
+ "qvm-float" if w.len() == 3 => {
398
+ let precision = if (w[2] as i32) < 0 {
399
+ None
400
+ } else {
401
+ Some(w[2] as usize)
402
+ };
403
+ let bytes = urt_gameplay::qvm_format::floating(w[0], w[1] as usize, precision)
404
+ .map_err(|e| format!("unsupported input: {e:?}"))?;
405
+ println!(
406
+ "{{\"output_hex\":\"{}\"}}",
407
+ bytes.iter().map(|v| format!("{v:02x}")).collect::<String>()
408
+ );
409
+ }
410
  "exit-prefix" if w.len() == 4 => {
411
  use urt_gameplay::exit_prefix::{Action, advance};
412
  let mut pending = w[1] as i32;
crates/urt-gameplay/src/qvm_format.rs CHANGED
@@ -10,7 +10,7 @@ pub enum Error {
10
  Argument,
11
  Limit,
12
  PaddingDomain,
13
- UnsupportedFloat,
14
  }
15
  /// Preserve original wrapping-negation/remainder behavior, including INT_MIN.
16
  pub fn decimal(value: i32) -> Vec<u8> {
@@ -33,6 +33,31 @@ pub fn decimal(value: i32) -> Vec<u8> {
33
  digits.reverse();
34
  digits
35
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
36
  fn append(out: &mut Vec<u8>, data: &[u8]) -> Result<(), Error> {
37
  if out.len() + data.len() > 32768 {
38
  return Err(Error::Limit);
@@ -98,12 +123,14 @@ pub fn render(template: &[u8], arguments: &[Argument<'_>]) -> Result<Vec<u8>, Er
98
  append(&mut out, b"%")?;
99
  continue;
100
  }
101
- if spec == b'f' {
102
- return Err(Error::UnsupportedFloat);
103
- }
104
  let value = arguments.get(arg).ok_or(Error::Argument)?;
105
  arg += 1;
106
- if [b'd', b'i', b'p'].contains(&spec) {
 
 
 
 
 
107
  let Argument::Word(value) = value else {
108
  return Err(Error::Argument);
109
  };
@@ -184,6 +211,24 @@ pub fn ring(
184
  mod tests {
185
  use super::*;
186
  #[test]
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
187
  fn bounded_count_can_exceed_visible_length() {
188
  let p = bounded(b"%c/AB", &[Argument::Word(0)], 3).unwrap();
189
  assert_eq!(p.bytes, [0, 0, 0]);
@@ -231,7 +276,7 @@ mod tests {
231
  Err(Error::PaddingDomain)
232
  );
233
  assert_eq!(render(b"%", &[]), Err(Error::Malformed));
234
- assert_eq!(render(b"%f", &[]), Err(Error::UnsupportedFloat));
235
  assert_eq!(render(b"%s", &[Argument::Word(0)]), Err(Error::Argument));
236
  assert_eq!(render(b"%99999i", &[Argument::Word(1)]), Err(Error::Limit));
237
  }
 
10
  Argument,
11
  Limit,
12
  PaddingDomain,
13
+ FloatDomain,
14
  }
15
  /// Preserve original wrapping-negation/remainder behavior, including INT_MIN.
16
  pub fn decimal(value: i32) -> Vec<u8> {
 
33
  digits.reverse();
34
  digits
35
  }
36
+ /// Source37498 finite f32 subset: integer-width padding, truncation, no rounding.
37
+ /// Precision is bounded to the verified0..9 domain; negative zero has no sign.
38
+ pub fn floating(bits: u32, width: usize, precision: Option<usize>) -> Result<Vec<u8>, Error> {
39
+ let value = f32::from_bits(bits);
40
+ let precision = precision.unwrap_or(6);
41
+ if !value.is_finite() || value.abs() >= 2147483648.0 || precision > 9 || width > 4096 {
42
+ return Err(Error::FloatDomain);
43
+ }
44
+ let mut x = if value < 0.0 { -value } else { value };
45
+ let mut integer = decimal(x as i32);
46
+ if value < 0.0 {
47
+ integer.insert(0, b'-');
48
+ }
49
+ let mut out = vec![b' '; width.saturating_sub(integer.len())];
50
+ out.extend_from_slice(&integer);
51
+ if precision > 0 {
52
+ out.push(b'.');
53
+ for _ in 0..precision {
54
+ let fraction = x - (x as i32) as f32;
55
+ x = fraction * 10.0;
56
+ out.push((48 + (x as i32) % 10) as u8);
57
+ }
58
+ }
59
+ Ok(out)
60
+ }
61
  fn append(out: &mut Vec<u8>, data: &[u8]) -> Result<(), Error> {
62
  if out.len() + data.len() > 32768 {
63
  return Err(Error::Limit);
 
123
  append(&mut out, b"%")?;
124
  continue;
125
  }
 
 
 
126
  let value = arguments.get(arg).ok_or(Error::Argument)?;
127
  arg += 1;
128
+ if spec == b'f' {
129
+ let Argument::Word(value) = value else {
130
+ return Err(Error::Argument);
131
+ };
132
+ append(&mut out, &floating(*value as u32, width, precision)?)?;
133
+ } else if [b'd', b'i', b'p'].contains(&spec) {
134
  let Argument::Word(value) = value else {
135
  return Err(Error::Argument);
136
  };
 
211
  mod tests {
212
  use super::*;
213
  #[test]
214
+ fn float_truncates_and_ignores_zero_left_flags() {
215
+ assert_eq!(
216
+ render(b"%010.2f", &[Argument::Word((-0.125f32).to_bits() as i32)]).unwrap(),
217
+ b" -0.12\0"
218
+ );
219
+ assert_eq!(floating((-0.0f32).to_bits(), 0, Some(0)).unwrap(), b"0");
220
+ }
221
+ #[test]
222
+ fn float_invalid_conversion_and_precision_reject() {
223
+ for v in [f32::NAN, f32::INFINITY, -2147483648.0, 2147483648.0] {
224
+ assert_eq!(floating(v.to_bits(), 0, None), Err(Error::FloatDomain));
225
+ }
226
+ assert_eq!(
227
+ floating(1.0f32.to_bits(), 0, Some(10)),
228
+ Err(Error::FloatDomain)
229
+ );
230
+ }
231
+ #[test]
232
  fn bounded_count_can_exceed_visible_length() {
233
  let p = bounded(b"%c/AB", &[Argument::Word(0)], 3).unwrap();
234
  assert_eq!(p.bytes, [0, 0, 0]);
 
276
  Err(Error::PaddingDomain)
277
  );
278
  assert_eq!(render(b"%", &[]), Err(Error::Malformed));
279
+ assert_eq!(render(b"%f", &[]), Err(Error::Argument));
280
  assert_eq!(render(b"%s", &[Argument::Word(0)]), Err(Error::Argument));
281
  assert_eq!(render(b"%99999i", &[Argument::Word(1)]), Err(Error::Limit));
282
  }
docs/FINDINGS.md CHANGED
@@ -1472,3 +1472,6 @@ RE-813–822 replaces the scoreboard decimal assumption with actual37914 executi
1472
 
1473
 
1474
  **RE-824:** 37498 pads only the signed integer portion, ignores formatting flags and iteratively truncates fractional f32 digits without rounding; negative zero has no sign. [Evidence](research/QVM_FORMAT_FLOAT.md).
 
 
 
 
1472
 
1473
 
1474
  **RE-824:** 37498 pads only the signed integer portion, ignores formatting flags and iteratively truncates fractional f32 digits without rounding; negative zero has no sign. [Evidence](research/QVM_FORMAT_FLOAT.md).
1475
+
1476
+
1477
+ **RE-825:** Rust now reproduces original37498 fractional truncation and integer-only width padding, including negative-zero and ignored flag behavior. [Evidence](research/RUST_FORMAT_FLOAT.md).
docs/PROVISIONAL_TODO.md CHANGED
@@ -1485,3 +1485,6 @@ RE-813–822 validation: 1,608 Python and117 Rust tests pass;34 affected produce
1485
 
1486
 
1487
  RE-824: 37498 pads only the signed integer portion, ignores formatting flags and iteratively truncates fractional f32 digits without rounding; negative zero has no sign. Full runtime completion remains open. [Evidence](research/QVM_FORMAT_FLOAT.md).
 
 
 
 
1485
 
1486
 
1487
  RE-824: 37498 pads only the signed integer portion, ignores formatting flags and iteratively truncates fractional f32 digits without rounding; negative zero has no sign. Full runtime completion remains open. [Evidence](research/QVM_FORMAT_FLOAT.md).
1488
+
1489
+
1490
+ RE-825: Rust now reproduces original37498 fractional truncation and integer-only width padding, including negative-zero and ignored flag behavior. Full runtime completion remains open. [Evidence](research/RUST_FORMAT_FLOAT.md).
docs/RESEARCH_LEDGER.md CHANGED
@@ -1790,3 +1790,8 @@ After exactly ten task commits from `7c1c4082`, the single `cargo xtask test-ful
1790
  ## 2026-10-27 — RE-824 Original float formatter f32 truncation precision and width policy
1791
 
1792
  37498 pads only the signed integer portion, ignores formatting flags and iteratively truncates fractional f32 digits without rounding; negative zero has no sign. Focused `cargo xtask test-group format-float` passes (5 Python tests); selected reports regenerate twice deterministically, with storage, documentation links and whitespace guards. Full suite deferred to task ten. Original assets unchanged; source fixtures do not establish complete native/runtime parity.
 
 
 
 
 
 
1790
  ## 2026-10-27 — RE-824 Original float formatter f32 truncation precision and width policy
1791
 
1792
  37498 pads only the signed integer portion, ignores formatting flags and iteratively truncates fractional f32 digits without rounding; negative zero has no sign. Focused `cargo xtask test-group format-float` passes (5 Python tests); selected reports regenerate twice deterministically, with storage, documentation links and whitespace guards. Full suite deferred to task ten. Original assets unchanged; source fixtures do not establish complete native/runtime parity.
1793
+
1794
+
1795
+ ## 2026-10-27 — RE-825 Rust f32 formatter truncation and original float dispatch
1796
+
1797
+ Rust now reproduces original37498 fractional truncation and integer-only width padding, including negative-zero and ignored flag behavior. Focused `cargo xtask test-group rust-format-float` passes (19 Python tests); selected reports regenerate twice deterministically, with storage, documentation links and whitespace guards. Full suite deferred to task ten. Original assets unchanged; source fixtures do not establish complete native/runtime parity.
docs/REVERSE_ENGINEERING_TODO.md CHANGED
@@ -1522,3 +1522,6 @@ Purpose: turn the supplied installation into an evidence-backed specification of
1522
 
1523
 
1524
  - [x] RE-824 Original float formatter f32 truncation precision and width policy ([evidence](research/QVM_FORMAT_FLOAT.md)).
 
 
 
 
1522
 
1523
 
1524
  - [x] RE-824 Original float formatter f32 truncation precision and width policy ([evidence](research/QVM_FORMAT_FLOAT.md)).
1525
+
1526
+
1527
+ - [x] RE-825 Rust f32 formatter truncation and original float dispatch ([evidence](research/RUST_FORMAT_FLOAT.md)).
docs/research/README.md CHANGED
@@ -1062,3 +1062,6 @@ The extension collector adds five focused tests for native tail calls, command-r
1062
 
1063
 
1064
  [RE-824: Original float formatter f32 truncation precision and width policy](QVM_FORMAT_FLOAT.md).
 
 
 
 
1062
 
1063
 
1064
  [RE-824: Original float formatter f32 truncation precision and width policy](QVM_FORMAT_FLOAT.md).
1065
+
1066
+
1067
+ [RE-825: Rust f32 formatter truncation and original float dispatch](RUST_FORMAT_FLOAT.md).
docs/research/RUST_FORMAT_FLOAT.md ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
 
1
+ # Rust f32 formatter truncation and original float dispatch
2
+
3
+ RE-825. Reproduce with `python3 scripts/analyze_rust_format_float.py`; focused validation: `cargo xtask test-group rust-format-float`. [Machine report](rust-format-float.json).
4
+
5
+ 126 source-helper and12 central formatter cases match exact Rust bytes with an independent f32 oracle. Public precision is restricted to0..9/default6 and nonfinite/abs>=2^31 values reject before conversion. Existing integer/string formatter parity reruns after integration. Larger precision and native/JIT acceptance remain open.
6
+
7
+ Original executable/native runtime and complete Linux/macOS Rust/Bevy/Solari acceptance remain unverified.
docs/research/RUST_QVM_FORMAT.md CHANGED
@@ -5,3 +5,5 @@ RE-817. Reproduce with `python3 scripts/analyze_rust_qvm_format.py`; focused val
5
  A typed byte-oriented formatter reproduces55 original-QVM fixtures exactly. Unit tests cover negative zero padding, string trailing padding, ignored null precision, unknown conversion low bytes and embedded character NUL. Unsafe narrow-left padding, malformed arguments, float formatting and output/width limits reject explicitly. This stage leaves scoreboard packet integration to the next task.
6
 
7
  Original executable/native runtime and complete Linux/macOS Rust/Bevy/Solari acceptance remain unverified.
 
 
 
5
  A typed byte-oriented formatter reproduces55 original-QVM fixtures exactly. Unit tests cover negative zero padding, string trailing padding, ignored null precision, unknown conversion low bytes and embedded character NUL. Unsafe narrow-left padding, malformed arguments, float formatting and output/width limits reject explicitly. This stage leaves scoreboard packet integration to the next task.
6
 
7
  Original executable/native runtime and complete Linux/macOS Rust/Bevy/Solari acceptance remain unverified.
8
+
9
+ RE-825 extends the current API with the verified float subset; the earlier float exclusion is superseded within the finite precision/CVFI domain. [Evidence](RUST_FORMAT_FLOAT.md).
docs/research/qvm-formatter.json CHANGED
@@ -1,5 +1,5 @@
1
  {
2
- "limits": "Actual37914 with original jump tables, actual37279/37768 and36038 children across55 finite integer/string/character/literal fixtures. Float37498 remains unrecovered here. Unknown conversion consumes a word and writes its low byte; p dispatches decimal. Unsafe trailing formats/uninitialized varargs and narrow-left-padding domains excluded.",
3
  "probes": [
4
  {
5
  "arguments": [
 
1
  {
2
+ "limits": "Actual37914 with original jump tables, actual37279/37768 and36038 children across55 finite integer/string/character/literal fixtures. Float37498 is covered separately by qvm-format-float.json. Unknown conversion consumes a word and writes its low byte; p dispatches decimal. Unsafe trailing formats/uninitialized varargs and narrow-left-padding domains excluded.",
3
  "probes": [
4
  {
5
  "arguments": [
docs/research/rust-format-float.json ADDED
@@ -0,0 +1,1522 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "composed": [
3
+ {
4
+ "rust": {
5
+ "count": 8,
6
+ "cstring_hex": "302e30303030303000"
7
+ },
8
+ "source": {
9
+ "count": 8,
10
+ "cstring_hex": "302e30303030303000"
11
+ }
12
+ },
13
+ {
14
+ "rust": {
15
+ "count": 9,
16
+ "cstring_hex": "2d302e31323530303000"
17
+ },
18
+ "source": {
19
+ "count": 9,
20
+ "cstring_hex": "2d302e31323530303000"
21
+ }
22
+ },
23
+ {
24
+ "rust": {
25
+ "count": 8,
26
+ "cstring_hex": "302e31303030303000"
27
+ },
28
+ "source": {
29
+ "count": 8,
30
+ "cstring_hex": "302e31303030303000"
31
+ }
32
+ },
33
+ {
34
+ "rust": {
35
+ "count": 9,
36
+ "cstring_hex": "31322e33343530303000"
37
+ },
38
+ "source": {
39
+ "count": 9,
40
+ "cstring_hex": "31322e33343530303000"
41
+ }
42
+ },
43
+ {
44
+ "rust": {
45
+ "count": 13,
46
+ "cstring_hex": "202020202020202020302e303000"
47
+ },
48
+ "source": {
49
+ "count": 13,
50
+ "cstring_hex": "202020202020202020302e303000"
51
+ }
52
+ },
53
+ {
54
+ "rust": {
55
+ "count": 13,
56
+ "cstring_hex": "20202020202020202d302e313200"
57
+ },
58
+ "source": {
59
+ "count": 13,
60
+ "cstring_hex": "20202020202020202d302e313200"
61
+ }
62
+ },
63
+ {
64
+ "rust": {
65
+ "count": 13,
66
+ "cstring_hex": "202020202020202020302e313000"
67
+ },
68
+ "source": {
69
+ "count": 13,
70
+ "cstring_hex": "202020202020202020302e313000"
71
+ }
72
+ },
73
+ {
74
+ "rust": {
75
+ "count": 13,
76
+ "cstring_hex": "202020202020202031322e333400"
77
+ },
78
+ "source": {
79
+ "count": 13,
80
+ "cstring_hex": "202020202020202031322e333400"
81
+ }
82
+ },
83
+ {
84
+ "rust": {
85
+ "count": 10,
86
+ "cstring_hex": "2020202020202020203000"
87
+ },
88
+ "source": {
89
+ "count": 10,
90
+ "cstring_hex": "2020202020202020203000"
91
+ }
92
+ },
93
+ {
94
+ "rust": {
95
+ "count": 10,
96
+ "cstring_hex": "20202020202020202d3000"
97
+ },
98
+ "source": {
99
+ "count": 10,
100
+ "cstring_hex": "20202020202020202d3000"
101
+ }
102
+ },
103
+ {
104
+ "rust": {
105
+ "count": 10,
106
+ "cstring_hex": "2020202020202020203000"
107
+ },
108
+ "source": {
109
+ "count": 10,
110
+ "cstring_hex": "2020202020202020203000"
111
+ }
112
+ },
113
+ {
114
+ "rust": {
115
+ "count": 10,
116
+ "cstring_hex": "2020202020202020313200"
117
+ },
118
+ "source": {
119
+ "count": 10,
120
+ "cstring_hex": "2020202020202020313200"
121
+ }
122
+ }
123
+ ],
124
+ "limits": "Rust37498 f32 truncation and37914 float dispatch match126 helper and12 composed source cases. Precision0..9/default6, finite CVFI domain; no native/JIT or large-precision parity claim.",
125
+ "probes": [
126
+ {
127
+ "input": {
128
+ "precision": -1,
129
+ "width": 0,
130
+ "word": 2147483648
131
+ },
132
+ "rust": {
133
+ "output_hex": "302e303030303030"
134
+ },
135
+ "source": "302e303030303030"
136
+ },
137
+ {
138
+ "input": {
139
+ "precision": 0,
140
+ "width": 0,
141
+ "word": 2147483648
142
+ },
143
+ "rust": {
144
+ "output_hex": "30"
145
+ },
146
+ "source": "30"
147
+ },
148
+ {
149
+ "input": {
150
+ "precision": 1,
151
+ "width": 0,
152
+ "word": 2147483648
153
+ },
154
+ "rust": {
155
+ "output_hex": "302e30"
156
+ },
157
+ "source": "302e30"
158
+ },
159
+ {
160
+ "input": {
161
+ "precision": 2,
162
+ "width": 0,
163
+ "word": 2147483648
164
+ },
165
+ "rust": {
166
+ "output_hex": "302e3030"
167
+ },
168
+ "source": "302e3030"
169
+ },
170
+ {
171
+ "input": {
172
+ "precision": 6,
173
+ "width": 0,
174
+ "word": 2147483648
175
+ },
176
+ "rust": {
177
+ "output_hex": "302e303030303030"
178
+ },
179
+ "source": "302e303030303030"
180
+ },
181
+ {
182
+ "input": {
183
+ "precision": 9,
184
+ "width": 0,
185
+ "word": 2147483648
186
+ },
187
+ "rust": {
188
+ "output_hex": "302e303030303030303030"
189
+ },
190
+ "source": "302e303030303030303030"
191
+ },
192
+ {
193
+ "input": {
194
+ "precision": -1,
195
+ "width": 3,
196
+ "word": 2147483648
197
+ },
198
+ "rust": {
199
+ "output_hex": "2020302e303030303030"
200
+ },
201
+ "source": "2020302e303030303030"
202
+ },
203
+ {
204
+ "input": {
205
+ "precision": 0,
206
+ "width": 3,
207
+ "word": 2147483648
208
+ },
209
+ "rust": {
210
+ "output_hex": "202030"
211
+ },
212
+ "source": "202030"
213
+ },
214
+ {
215
+ "input": {
216
+ "precision": 1,
217
+ "width": 3,
218
+ "word": 2147483648
219
+ },
220
+ "rust": {
221
+ "output_hex": "2020302e30"
222
+ },
223
+ "source": "2020302e30"
224
+ },
225
+ {
226
+ "input": {
227
+ "precision": 2,
228
+ "width": 3,
229
+ "word": 2147483648
230
+ },
231
+ "rust": {
232
+ "output_hex": "2020302e3030"
233
+ },
234
+ "source": "2020302e3030"
235
+ },
236
+ {
237
+ "input": {
238
+ "precision": 6,
239
+ "width": 3,
240
+ "word": 2147483648
241
+ },
242
+ "rust": {
243
+ "output_hex": "2020302e303030303030"
244
+ },
245
+ "source": "2020302e303030303030"
246
+ },
247
+ {
248
+ "input": {
249
+ "precision": 9,
250
+ "width": 3,
251
+ "word": 2147483648
252
+ },
253
+ "rust": {
254
+ "output_hex": "2020302e303030303030303030"
255
+ },
256
+ "source": "2020302e303030303030303030"
257
+ },
258
+ {
259
+ "input": {
260
+ "precision": -1,
261
+ "width": 10,
262
+ "word": 2147483648
263
+ },
264
+ "rust": {
265
+ "output_hex": "202020202020202020302e303030303030"
266
+ },
267
+ "source": "202020202020202020302e303030303030"
268
+ },
269
+ {
270
+ "input": {
271
+ "precision": 0,
272
+ "width": 10,
273
+ "word": 2147483648
274
+ },
275
+ "rust": {
276
+ "output_hex": "20202020202020202030"
277
+ },
278
+ "source": "20202020202020202030"
279
+ },
280
+ {
281
+ "input": {
282
+ "precision": 1,
283
+ "width": 10,
284
+ "word": 2147483648
285
+ },
286
+ "rust": {
287
+ "output_hex": "202020202020202020302e30"
288
+ },
289
+ "source": "202020202020202020302e30"
290
+ },
291
+ {
292
+ "input": {
293
+ "precision": 2,
294
+ "width": 10,
295
+ "word": 2147483648
296
+ },
297
+ "rust": {
298
+ "output_hex": "202020202020202020302e3030"
299
+ },
300
+ "source": "202020202020202020302e3030"
301
+ },
302
+ {
303
+ "input": {
304
+ "precision": 6,
305
+ "width": 10,
306
+ "word": 2147483648
307
+ },
308
+ "rust": {
309
+ "output_hex": "202020202020202020302e303030303030"
310
+ },
311
+ "source": "202020202020202020302e303030303030"
312
+ },
313
+ {
314
+ "input": {
315
+ "precision": 9,
316
+ "width": 10,
317
+ "word": 2147483648
318
+ },
319
+ "rust": {
320
+ "output_hex": "202020202020202020302e303030303030303030"
321
+ },
322
+ "source": "202020202020202020302e303030303030303030"
323
+ },
324
+ {
325
+ "input": {
326
+ "precision": -1,
327
+ "width": 0,
328
+ "word": 0
329
+ },
330
+ "rust": {
331
+ "output_hex": "302e303030303030"
332
+ },
333
+ "source": "302e303030303030"
334
+ },
335
+ {
336
+ "input": {
337
+ "precision": 0,
338
+ "width": 0,
339
+ "word": 0
340
+ },
341
+ "rust": {
342
+ "output_hex": "30"
343
+ },
344
+ "source": "30"
345
+ },
346
+ {
347
+ "input": {
348
+ "precision": 1,
349
+ "width": 0,
350
+ "word": 0
351
+ },
352
+ "rust": {
353
+ "output_hex": "302e30"
354
+ },
355
+ "source": "302e30"
356
+ },
357
+ {
358
+ "input": {
359
+ "precision": 2,
360
+ "width": 0,
361
+ "word": 0
362
+ },
363
+ "rust": {
364
+ "output_hex": "302e3030"
365
+ },
366
+ "source": "302e3030"
367
+ },
368
+ {
369
+ "input": {
370
+ "precision": 6,
371
+ "width": 0,
372
+ "word": 0
373
+ },
374
+ "rust": {
375
+ "output_hex": "302e303030303030"
376
+ },
377
+ "source": "302e303030303030"
378
+ },
379
+ {
380
+ "input": {
381
+ "precision": 9,
382
+ "width": 0,
383
+ "word": 0
384
+ },
385
+ "rust": {
386
+ "output_hex": "302e303030303030303030"
387
+ },
388
+ "source": "302e303030303030303030"
389
+ },
390
+ {
391
+ "input": {
392
+ "precision": -1,
393
+ "width": 3,
394
+ "word": 0
395
+ },
396
+ "rust": {
397
+ "output_hex": "2020302e303030303030"
398
+ },
399
+ "source": "2020302e303030303030"
400
+ },
401
+ {
402
+ "input": {
403
+ "precision": 0,
404
+ "width": 3,
405
+ "word": 0
406
+ },
407
+ "rust": {
408
+ "output_hex": "202030"
409
+ },
410
+ "source": "202030"
411
+ },
412
+ {
413
+ "input": {
414
+ "precision": 1,
415
+ "width": 3,
416
+ "word": 0
417
+ },
418
+ "rust": {
419
+ "output_hex": "2020302e30"
420
+ },
421
+ "source": "2020302e30"
422
+ },
423
+ {
424
+ "input": {
425
+ "precision": 2,
426
+ "width": 3,
427
+ "word": 0
428
+ },
429
+ "rust": {
430
+ "output_hex": "2020302e3030"
431
+ },
432
+ "source": "2020302e3030"
433
+ },
434
+ {
435
+ "input": {
436
+ "precision": 6,
437
+ "width": 3,
438
+ "word": 0
439
+ },
440
+ "rust": {
441
+ "output_hex": "2020302e303030303030"
442
+ },
443
+ "source": "2020302e303030303030"
444
+ },
445
+ {
446
+ "input": {
447
+ "precision": 9,
448
+ "width": 3,
449
+ "word": 0
450
+ },
451
+ "rust": {
452
+ "output_hex": "2020302e303030303030303030"
453
+ },
454
+ "source": "2020302e303030303030303030"
455
+ },
456
+ {
457
+ "input": {
458
+ "precision": -1,
459
+ "width": 10,
460
+ "word": 0
461
+ },
462
+ "rust": {
463
+ "output_hex": "202020202020202020302e303030303030"
464
+ },
465
+ "source": "202020202020202020302e303030303030"
466
+ },
467
+ {
468
+ "input": {
469
+ "precision": 0,
470
+ "width": 10,
471
+ "word": 0
472
+ },
473
+ "rust": {
474
+ "output_hex": "20202020202020202030"
475
+ },
476
+ "source": "20202020202020202030"
477
+ },
478
+ {
479
+ "input": {
480
+ "precision": 1,
481
+ "width": 10,
482
+ "word": 0
483
+ },
484
+ "rust": {
485
+ "output_hex": "202020202020202020302e30"
486
+ },
487
+ "source": "202020202020202020302e30"
488
+ },
489
+ {
490
+ "input": {
491
+ "precision": 2,
492
+ "width": 10,
493
+ "word": 0
494
+ },
495
+ "rust": {
496
+ "output_hex": "202020202020202020302e3030"
497
+ },
498
+ "source": "202020202020202020302e3030"
499
+ },
500
+ {
501
+ "input": {
502
+ "precision": 6,
503
+ "width": 10,
504
+ "word": 0
505
+ },
506
+ "rust": {
507
+ "output_hex": "202020202020202020302e303030303030"
508
+ },
509
+ "source": "202020202020202020302e303030303030"
510
+ },
511
+ {
512
+ "input": {
513
+ "precision": 9,
514
+ "width": 10,
515
+ "word": 0
516
+ },
517
+ "rust": {
518
+ "output_hex": "202020202020202020302e303030303030303030"
519
+ },
520
+ "source": "202020202020202020302e303030303030303030"
521
+ },
522
+ {
523
+ "input": {
524
+ "precision": -1,
525
+ "width": 0,
526
+ "word": 3187671040
527
+ },
528
+ "rust": {
529
+ "output_hex": "2d302e313235303030"
530
+ },
531
+ "source": "2d302e313235303030"
532
+ },
533
+ {
534
+ "input": {
535
+ "precision": 0,
536
+ "width": 0,
537
+ "word": 3187671040
538
+ },
539
+ "rust": {
540
+ "output_hex": "2d30"
541
+ },
542
+ "source": "2d30"
543
+ },
544
+ {
545
+ "input": {
546
+ "precision": 1,
547
+ "width": 0,
548
+ "word": 3187671040
549
+ },
550
+ "rust": {
551
+ "output_hex": "2d302e31"
552
+ },
553
+ "source": "2d302e31"
554
+ },
555
+ {
556
+ "input": {
557
+ "precision": 2,
558
+ "width": 0,
559
+ "word": 3187671040
560
+ },
561
+ "rust": {
562
+ "output_hex": "2d302e3132"
563
+ },
564
+ "source": "2d302e3132"
565
+ },
566
+ {
567
+ "input": {
568
+ "precision": 6,
569
+ "width": 0,
570
+ "word": 3187671040
571
+ },
572
+ "rust": {
573
+ "output_hex": "2d302e313235303030"
574
+ },
575
+ "source": "2d302e313235303030"
576
+ },
577
+ {
578
+ "input": {
579
+ "precision": 9,
580
+ "width": 0,
581
+ "word": 3187671040
582
+ },
583
+ "rust": {
584
+ "output_hex": "2d302e313235303030303030"
585
+ },
586
+ "source": "2d302e313235303030303030"
587
+ },
588
+ {
589
+ "input": {
590
+ "precision": -1,
591
+ "width": 3,
592
+ "word": 3187671040
593
+ },
594
+ "rust": {
595
+ "output_hex": "202d302e313235303030"
596
+ },
597
+ "source": "202d302e313235303030"
598
+ },
599
+ {
600
+ "input": {
601
+ "precision": 0,
602
+ "width": 3,
603
+ "word": 3187671040
604
+ },
605
+ "rust": {
606
+ "output_hex": "202d30"
607
+ },
608
+ "source": "202d30"
609
+ },
610
+ {
611
+ "input": {
612
+ "precision": 1,
613
+ "width": 3,
614
+ "word": 3187671040
615
+ },
616
+ "rust": {
617
+ "output_hex": "202d302e31"
618
+ },
619
+ "source": "202d302e31"
620
+ },
621
+ {
622
+ "input": {
623
+ "precision": 2,
624
+ "width": 3,
625
+ "word": 3187671040
626
+ },
627
+ "rust": {
628
+ "output_hex": "202d302e3132"
629
+ },
630
+ "source": "202d302e3132"
631
+ },
632
+ {
633
+ "input": {
634
+ "precision": 6,
635
+ "width": 3,
636
+ "word": 3187671040
637
+ },
638
+ "rust": {
639
+ "output_hex": "202d302e313235303030"
640
+ },
641
+ "source": "202d302e313235303030"
642
+ },
643
+ {
644
+ "input": {
645
+ "precision": 9,
646
+ "width": 3,
647
+ "word": 3187671040
648
+ },
649
+ "rust": {
650
+ "output_hex": "202d302e313235303030303030"
651
+ },
652
+ "source": "202d302e313235303030303030"
653
+ },
654
+ {
655
+ "input": {
656
+ "precision": -1,
657
+ "width": 10,
658
+ "word": 3187671040
659
+ },
660
+ "rust": {
661
+ "output_hex": "20202020202020202d302e313235303030"
662
+ },
663
+ "source": "20202020202020202d302e313235303030"
664
+ },
665
+ {
666
+ "input": {
667
+ "precision": 0,
668
+ "width": 10,
669
+ "word": 3187671040
670
+ },
671
+ "rust": {
672
+ "output_hex": "20202020202020202d30"
673
+ },
674
+ "source": "20202020202020202d30"
675
+ },
676
+ {
677
+ "input": {
678
+ "precision": 1,
679
+ "width": 10,
680
+ "word": 3187671040
681
+ },
682
+ "rust": {
683
+ "output_hex": "20202020202020202d302e31"
684
+ },
685
+ "source": "20202020202020202d302e31"
686
+ },
687
+ {
688
+ "input": {
689
+ "precision": 2,
690
+ "width": 10,
691
+ "word": 3187671040
692
+ },
693
+ "rust": {
694
+ "output_hex": "20202020202020202d302e3132"
695
+ },
696
+ "source": "20202020202020202d302e3132"
697
+ },
698
+ {
699
+ "input": {
700
+ "precision": 6,
701
+ "width": 10,
702
+ "word": 3187671040
703
+ },
704
+ "rust": {
705
+ "output_hex": "20202020202020202d302e313235303030"
706
+ },
707
+ "source": "20202020202020202d302e313235303030"
708
+ },
709
+ {
710
+ "input": {
711
+ "precision": 9,
712
+ "width": 10,
713
+ "word": 3187671040
714
+ },
715
+ "rust": {
716
+ "output_hex": "20202020202020202d302e313235303030303030"
717
+ },
718
+ "source": "20202020202020202d302e313235303030303030"
719
+ },
720
+ {
721
+ "input": {
722
+ "precision": -1,
723
+ "width": 0,
724
+ "word": 1036831949
725
+ },
726
+ "rust": {
727
+ "output_hex": "302e313030303030"
728
+ },
729
+ "source": "302e313030303030"
730
+ },
731
+ {
732
+ "input": {
733
+ "precision": 0,
734
+ "width": 0,
735
+ "word": 1036831949
736
+ },
737
+ "rust": {
738
+ "output_hex": "30"
739
+ },
740
+ "source": "30"
741
+ },
742
+ {
743
+ "input": {
744
+ "precision": 1,
745
+ "width": 0,
746
+ "word": 1036831949
747
+ },
748
+ "rust": {
749
+ "output_hex": "302e31"
750
+ },
751
+ "source": "302e31"
752
+ },
753
+ {
754
+ "input": {
755
+ "precision": 2,
756
+ "width": 0,
757
+ "word": 1036831949
758
+ },
759
+ "rust": {
760
+ "output_hex": "302e3130"
761
+ },
762
+ "source": "302e3130"
763
+ },
764
+ {
765
+ "input": {
766
+ "precision": 6,
767
+ "width": 0,
768
+ "word": 1036831949
769
+ },
770
+ "rust": {
771
+ "output_hex": "302e313030303030"
772
+ },
773
+ "source": "302e313030303030"
774
+ },
775
+ {
776
+ "input": {
777
+ "precision": 9,
778
+ "width": 0,
779
+ "word": 1036831949
780
+ },
781
+ "rust": {
782
+ "output_hex": "302e313030303030303030"
783
+ },
784
+ "source": "302e313030303030303030"
785
+ },
786
+ {
787
+ "input": {
788
+ "precision": -1,
789
+ "width": 3,
790
+ "word": 1036831949
791
+ },
792
+ "rust": {
793
+ "output_hex": "2020302e313030303030"
794
+ },
795
+ "source": "2020302e313030303030"
796
+ },
797
+ {
798
+ "input": {
799
+ "precision": 0,
800
+ "width": 3,
801
+ "word": 1036831949
802
+ },
803
+ "rust": {
804
+ "output_hex": "202030"
805
+ },
806
+ "source": "202030"
807
+ },
808
+ {
809
+ "input": {
810
+ "precision": 1,
811
+ "width": 3,
812
+ "word": 1036831949
813
+ },
814
+ "rust": {
815
+ "output_hex": "2020302e31"
816
+ },
817
+ "source": "2020302e31"
818
+ },
819
+ {
820
+ "input": {
821
+ "precision": 2,
822
+ "width": 3,
823
+ "word": 1036831949
824
+ },
825
+ "rust": {
826
+ "output_hex": "2020302e3130"
827
+ },
828
+ "source": "2020302e3130"
829
+ },
830
+ {
831
+ "input": {
832
+ "precision": 6,
833
+ "width": 3,
834
+ "word": 1036831949
835
+ },
836
+ "rust": {
837
+ "output_hex": "2020302e313030303030"
838
+ },
839
+ "source": "2020302e313030303030"
840
+ },
841
+ {
842
+ "input": {
843
+ "precision": 9,
844
+ "width": 3,
845
+ "word": 1036831949
846
+ },
847
+ "rust": {
848
+ "output_hex": "2020302e313030303030303030"
849
+ },
850
+ "source": "2020302e313030303030303030"
851
+ },
852
+ {
853
+ "input": {
854
+ "precision": -1,
855
+ "width": 10,
856
+ "word": 1036831949
857
+ },
858
+ "rust": {
859
+ "output_hex": "202020202020202020302e313030303030"
860
+ },
861
+ "source": "202020202020202020302e313030303030"
862
+ },
863
+ {
864
+ "input": {
865
+ "precision": 0,
866
+ "width": 10,
867
+ "word": 1036831949
868
+ },
869
+ "rust": {
870
+ "output_hex": "20202020202020202030"
871
+ },
872
+ "source": "20202020202020202030"
873
+ },
874
+ {
875
+ "input": {
876
+ "precision": 1,
877
+ "width": 10,
878
+ "word": 1036831949
879
+ },
880
+ "rust": {
881
+ "output_hex": "202020202020202020302e31"
882
+ },
883
+ "source": "202020202020202020302e31"
884
+ },
885
+ {
886
+ "input": {
887
+ "precision": 2,
888
+ "width": 10,
889
+ "word": 1036831949
890
+ },
891
+ "rust": {
892
+ "output_hex": "202020202020202020302e3130"
893
+ },
894
+ "source": "202020202020202020302e3130"
895
+ },
896
+ {
897
+ "input": {
898
+ "precision": 6,
899
+ "width": 10,
900
+ "word": 1036831949
901
+ },
902
+ "rust": {
903
+ "output_hex": "202020202020202020302e313030303030"
904
+ },
905
+ "source": "202020202020202020302e313030303030"
906
+ },
907
+ {
908
+ "input": {
909
+ "precision": 9,
910
+ "width": 10,
911
+ "word": 1036831949
912
+ },
913
+ "rust": {
914
+ "output_hex": "202020202020202020302e313030303030303030"
915
+ },
916
+ "source": "202020202020202020302e313030303030303030"
917
+ },
918
+ {
919
+ "input": {
920
+ "precision": -1,
921
+ "width": 0,
922
+ "word": 3221217083
923
+ },
924
+ "rust": {
925
+ "output_hex": "2d312e393938393939"
926
+ },
927
+ "source": "2d312e393938393939"
928
+ },
929
+ {
930
+ "input": {
931
+ "precision": 0,
932
+ "width": 0,
933
+ "word": 3221217083
934
+ },
935
+ "rust": {
936
+ "output_hex": "2d31"
937
+ },
938
+ "source": "2d31"
939
+ },
940
+ {
941
+ "input": {
942
+ "precision": 1,
943
+ "width": 0,
944
+ "word": 3221217083
945
+ },
946
+ "rust": {
947
+ "output_hex": "2d312e39"
948
+ },
949
+ "source": "2d312e39"
950
+ },
951
+ {
952
+ "input": {
953
+ "precision": 2,
954
+ "width": 0,
955
+ "word": 3221217083
956
+ },
957
+ "rust": {
958
+ "output_hex": "2d312e3939"
959
+ },
960
+ "source": "2d312e3939"
961
+ },
962
+ {
963
+ "input": {
964
+ "precision": 6,
965
+ "width": 0,
966
+ "word": 3221217083
967
+ },
968
+ "rust": {
969
+ "output_hex": "2d312e393938393939"
970
+ },
971
+ "source": "2d312e393938393939"
972
+ },
973
+ {
974
+ "input": {
975
+ "precision": 9,
976
+ "width": 0,
977
+ "word": 3221217083
978
+ },
979
+ "rust": {
980
+ "output_hex": "2d312e393938393939393737"
981
+ },
982
+ "source": "2d312e393938393939393737"
983
+ },
984
+ {
985
+ "input": {
986
+ "precision": -1,
987
+ "width": 3,
988
+ "word": 3221217083
989
+ },
990
+ "rust": {
991
+ "output_hex": "202d312e393938393939"
992
+ },
993
+ "source": "202d312e393938393939"
994
+ },
995
+ {
996
+ "input": {
997
+ "precision": 0,
998
+ "width": 3,
999
+ "word": 3221217083
1000
+ },
1001
+ "rust": {
1002
+ "output_hex": "202d31"
1003
+ },
1004
+ "source": "202d31"
1005
+ },
1006
+ {
1007
+ "input": {
1008
+ "precision": 1,
1009
+ "width": 3,
1010
+ "word": 3221217083
1011
+ },
1012
+ "rust": {
1013
+ "output_hex": "202d312e39"
1014
+ },
1015
+ "source": "202d312e39"
1016
+ },
1017
+ {
1018
+ "input": {
1019
+ "precision": 2,
1020
+ "width": 3,
1021
+ "word": 3221217083
1022
+ },
1023
+ "rust": {
1024
+ "output_hex": "202d312e3939"
1025
+ },
1026
+ "source": "202d312e3939"
1027
+ },
1028
+ {
1029
+ "input": {
1030
+ "precision": 6,
1031
+ "width": 3,
1032
+ "word": 3221217083
1033
+ },
1034
+ "rust": {
1035
+ "output_hex": "202d312e393938393939"
1036
+ },
1037
+ "source": "202d312e393938393939"
1038
+ },
1039
+ {
1040
+ "input": {
1041
+ "precision": 9,
1042
+ "width": 3,
1043
+ "word": 3221217083
1044
+ },
1045
+ "rust": {
1046
+ "output_hex": "202d312e393938393939393737"
1047
+ },
1048
+ "source": "202d312e393938393939393737"
1049
+ },
1050
+ {
1051
+ "input": {
1052
+ "precision": -1,
1053
+ "width": 10,
1054
+ "word": 3221217083
1055
+ },
1056
+ "rust": {
1057
+ "output_hex": "20202020202020202d312e393938393939"
1058
+ },
1059
+ "source": "20202020202020202d312e393938393939"
1060
+ },
1061
+ {
1062
+ "input": {
1063
+ "precision": 0,
1064
+ "width": 10,
1065
+ "word": 3221217083
1066
+ },
1067
+ "rust": {
1068
+ "output_hex": "20202020202020202d31"
1069
+ },
1070
+ "source": "20202020202020202d31"
1071
+ },
1072
+ {
1073
+ "input": {
1074
+ "precision": 1,
1075
+ "width": 10,
1076
+ "word": 3221217083
1077
+ },
1078
+ "rust": {
1079
+ "output_hex": "20202020202020202d312e39"
1080
+ },
1081
+ "source": "20202020202020202d312e39"
1082
+ },
1083
+ {
1084
+ "input": {
1085
+ "precision": 2,
1086
+ "width": 10,
1087
+ "word": 3221217083
1088
+ },
1089
+ "rust": {
1090
+ "output_hex": "20202020202020202d312e3939"
1091
+ },
1092
+ "source": "20202020202020202d312e3939"
1093
+ },
1094
+ {
1095
+ "input": {
1096
+ "precision": 6,
1097
+ "width": 10,
1098
+ "word": 3221217083
1099
+ },
1100
+ "rust": {
1101
+ "output_hex": "20202020202020202d312e393938393939"
1102
+ },
1103
+ "source": "20202020202020202d312e393938393939"
1104
+ },
1105
+ {
1106
+ "input": {
1107
+ "precision": 9,
1108
+ "width": 10,
1109
+ "word": 3221217083
1110
+ },
1111
+ "rust": {
1112
+ "output_hex": "20202020202020202d312e393938393939393737"
1113
+ },
1114
+ "source": "20202020202020202d312e393938393939393737"
1115
+ },
1116
+ {
1117
+ "input": {
1118
+ "precision": -1,
1119
+ "width": 0,
1120
+ "word": 1095075103
1121
+ },
1122
+ "rust": {
1123
+ "output_hex": "31322e333435303030"
1124
+ },
1125
+ "source": "31322e333435303030"
1126
+ },
1127
+ {
1128
+ "input": {
1129
+ "precision": 0,
1130
+ "width": 0,
1131
+ "word": 1095075103
1132
+ },
1133
+ "rust": {
1134
+ "output_hex": "3132"
1135
+ },
1136
+ "source": "3132"
1137
+ },
1138
+ {
1139
+ "input": {
1140
+ "precision": 1,
1141
+ "width": 0,
1142
+ "word": 1095075103
1143
+ },
1144
+ "rust": {
1145
+ "output_hex": "31322e33"
1146
+ },
1147
+ "source": "31322e33"
1148
+ },
1149
+ {
1150
+ "input": {
1151
+ "precision": 2,
1152
+ "width": 0,
1153
+ "word": 1095075103
1154
+ },
1155
+ "rust": {
1156
+ "output_hex": "31322e3334"
1157
+ },
1158
+ "source": "31322e3334"
1159
+ },
1160
+ {
1161
+ "input": {
1162
+ "precision": 6,
1163
+ "width": 0,
1164
+ "word": 1095075103
1165
+ },
1166
+ "rust": {
1167
+ "output_hex": "31322e333435303030"
1168
+ },
1169
+ "source": "31322e333435303030"
1170
+ },
1171
+ {
1172
+ "input": {
1173
+ "precision": 9,
1174
+ "width": 0,
1175
+ "word": 1095075103
1176
+ },
1177
+ "rust": {
1178
+ "output_hex": "31322e333435303030323637"
1179
+ },
1180
+ "source": "31322e333435303030323637"
1181
+ },
1182
+ {
1183
+ "input": {
1184
+ "precision": -1,
1185
+ "width": 3,
1186
+ "word": 1095075103
1187
+ },
1188
+ "rust": {
1189
+ "output_hex": "2031322e333435303030"
1190
+ },
1191
+ "source": "2031322e333435303030"
1192
+ },
1193
+ {
1194
+ "input": {
1195
+ "precision": 0,
1196
+ "width": 3,
1197
+ "word": 1095075103
1198
+ },
1199
+ "rust": {
1200
+ "output_hex": "203132"
1201
+ },
1202
+ "source": "203132"
1203
+ },
1204
+ {
1205
+ "input": {
1206
+ "precision": 1,
1207
+ "width": 3,
1208
+ "word": 1095075103
1209
+ },
1210
+ "rust": {
1211
+ "output_hex": "2031322e33"
1212
+ },
1213
+ "source": "2031322e33"
1214
+ },
1215
+ {
1216
+ "input": {
1217
+ "precision": 2,
1218
+ "width": 3,
1219
+ "word": 1095075103
1220
+ },
1221
+ "rust": {
1222
+ "output_hex": "2031322e3334"
1223
+ },
1224
+ "source": "2031322e3334"
1225
+ },
1226
+ {
1227
+ "input": {
1228
+ "precision": 6,
1229
+ "width": 3,
1230
+ "word": 1095075103
1231
+ },
1232
+ "rust": {
1233
+ "output_hex": "2031322e333435303030"
1234
+ },
1235
+ "source": "2031322e333435303030"
1236
+ },
1237
+ {
1238
+ "input": {
1239
+ "precision": 9,
1240
+ "width": 3,
1241
+ "word": 1095075103
1242
+ },
1243
+ "rust": {
1244
+ "output_hex": "2031322e333435303030323637"
1245
+ },
1246
+ "source": "2031322e333435303030323637"
1247
+ },
1248
+ {
1249
+ "input": {
1250
+ "precision": -1,
1251
+ "width": 10,
1252
+ "word": 1095075103
1253
+ },
1254
+ "rust": {
1255
+ "output_hex": "202020202020202031322e333435303030"
1256
+ },
1257
+ "source": "202020202020202031322e333435303030"
1258
+ },
1259
+ {
1260
+ "input": {
1261
+ "precision": 0,
1262
+ "width": 10,
1263
+ "word": 1095075103
1264
+ },
1265
+ "rust": {
1266
+ "output_hex": "20202020202020203132"
1267
+ },
1268
+ "source": "20202020202020203132"
1269
+ },
1270
+ {
1271
+ "input": {
1272
+ "precision": 1,
1273
+ "width": 10,
1274
+ "word": 1095075103
1275
+ },
1276
+ "rust": {
1277
+ "output_hex": "202020202020202031322e33"
1278
+ },
1279
+ "source": "202020202020202031322e33"
1280
+ },
1281
+ {
1282
+ "input": {
1283
+ "precision": 2,
1284
+ "width": 10,
1285
+ "word": 1095075103
1286
+ },
1287
+ "rust": {
1288
+ "output_hex": "202020202020202031322e3334"
1289
+ },
1290
+ "source": "202020202020202031322e3334"
1291
+ },
1292
+ {
1293
+ "input": {
1294
+ "precision": 6,
1295
+ "width": 10,
1296
+ "word": 1095075103
1297
+ },
1298
+ "rust": {
1299
+ "output_hex": "202020202020202031322e333435303030"
1300
+ },
1301
+ "source": "202020202020202031322e333435303030"
1302
+ },
1303
+ {
1304
+ "input": {
1305
+ "precision": 9,
1306
+ "width": 10,
1307
+ "word": 1095075103
1308
+ },
1309
+ "rust": {
1310
+ "output_hex": "202020202020202031322e333435303030323637"
1311
+ },
1312
+ "source": "202020202020202031322e333435303030323637"
1313
+ },
1314
+ {
1315
+ "input": {
1316
+ "precision": -1,
1317
+ "width": 0,
1318
+ "word": 1176256000
1319
+ },
1320
+ "rust": {
1321
+ "output_hex": "393939392e353030303030"
1322
+ },
1323
+ "source": "393939392e353030303030"
1324
+ },
1325
+ {
1326
+ "input": {
1327
+ "precision": 0,
1328
+ "width": 0,
1329
+ "word": 1176256000
1330
+ },
1331
+ "rust": {
1332
+ "output_hex": "39393939"
1333
+ },
1334
+ "source": "39393939"
1335
+ },
1336
+ {
1337
+ "input": {
1338
+ "precision": 1,
1339
+ "width": 0,
1340
+ "word": 1176256000
1341
+ },
1342
+ "rust": {
1343
+ "output_hex": "393939392e35"
1344
+ },
1345
+ "source": "393939392e35"
1346
+ },
1347
+ {
1348
+ "input": {
1349
+ "precision": 2,
1350
+ "width": 0,
1351
+ "word": 1176256000
1352
+ },
1353
+ "rust": {
1354
+ "output_hex": "393939392e3530"
1355
+ },
1356
+ "source": "393939392e3530"
1357
+ },
1358
+ {
1359
+ "input": {
1360
+ "precision": 6,
1361
+ "width": 0,
1362
+ "word": 1176256000
1363
+ },
1364
+ "rust": {
1365
+ "output_hex": "393939392e353030303030"
1366
+ },
1367
+ "source": "393939392e353030303030"
1368
+ },
1369
+ {
1370
+ "input": {
1371
+ "precision": 9,
1372
+ "width": 0,
1373
+ "word": 1176256000
1374
+ },
1375
+ "rust": {
1376
+ "output_hex": "393939392e353030303030303030"
1377
+ },
1378
+ "source": "393939392e353030303030303030"
1379
+ },
1380
+ {
1381
+ "input": {
1382
+ "precision": -1,
1383
+ "width": 3,
1384
+ "word": 1176256000
1385
+ },
1386
+ "rust": {
1387
+ "output_hex": "393939392e353030303030"
1388
+ },
1389
+ "source": "393939392e353030303030"
1390
+ },
1391
+ {
1392
+ "input": {
1393
+ "precision": 0,
1394
+ "width": 3,
1395
+ "word": 1176256000
1396
+ },
1397
+ "rust": {
1398
+ "output_hex": "39393939"
1399
+ },
1400
+ "source": "39393939"
1401
+ },
1402
+ {
1403
+ "input": {
1404
+ "precision": 1,
1405
+ "width": 3,
1406
+ "word": 1176256000
1407
+ },
1408
+ "rust": {
1409
+ "output_hex": "393939392e35"
1410
+ },
1411
+ "source": "393939392e35"
1412
+ },
1413
+ {
1414
+ "input": {
1415
+ "precision": 2,
1416
+ "width": 3,
1417
+ "word": 1176256000
1418
+ },
1419
+ "rust": {
1420
+ "output_hex": "393939392e3530"
1421
+ },
1422
+ "source": "393939392e3530"
1423
+ },
1424
+ {
1425
+ "input": {
1426
+ "precision": 6,
1427
+ "width": 3,
1428
+ "word": 1176256000
1429
+ },
1430
+ "rust": {
1431
+ "output_hex": "393939392e353030303030"
1432
+ },
1433
+ "source": "393939392e353030303030"
1434
+ },
1435
+ {
1436
+ "input": {
1437
+ "precision": 9,
1438
+ "width": 3,
1439
+ "word": 1176256000
1440
+ },
1441
+ "rust": {
1442
+ "output_hex": "393939392e353030303030303030"
1443
+ },
1444
+ "source": "393939392e353030303030303030"
1445
+ },
1446
+ {
1447
+ "input": {
1448
+ "precision": -1,
1449
+ "width": 10,
1450
+ "word": 1176256000
1451
+ },
1452
+ "rust": {
1453
+ "output_hex": "202020202020393939392e353030303030"
1454
+ },
1455
+ "source": "202020202020393939392e353030303030"
1456
+ },
1457
+ {
1458
+ "input": {
1459
+ "precision": 0,
1460
+ "width": 10,
1461
+ "word": 1176256000
1462
+ },
1463
+ "rust": {
1464
+ "output_hex": "20202020202039393939"
1465
+ },
1466
+ "source": "20202020202039393939"
1467
+ },
1468
+ {
1469
+ "input": {
1470
+ "precision": 1,
1471
+ "width": 10,
1472
+ "word": 1176256000
1473
+ },
1474
+ "rust": {
1475
+ "output_hex": "202020202020393939392e35"
1476
+ },
1477
+ "source": "202020202020393939392e35"
1478
+ },
1479
+ {
1480
+ "input": {
1481
+ "precision": 2,
1482
+ "width": 10,
1483
+ "word": 1176256000
1484
+ },
1485
+ "rust": {
1486
+ "output_hex": "202020202020393939392e3530"
1487
+ },
1488
+ "source": "202020202020393939392e3530"
1489
+ },
1490
+ {
1491
+ "input": {
1492
+ "precision": 6,
1493
+ "width": 10,
1494
+ "word": 1176256000
1495
+ },
1496
+ "rust": {
1497
+ "output_hex": "202020202020393939392e353030303030"
1498
+ },
1499
+ "source": "202020202020393939392e353030303030"
1500
+ },
1501
+ {
1502
+ "input": {
1503
+ "precision": 9,
1504
+ "width": 10,
1505
+ "word": 1176256000
1506
+ },
1507
+ "rust": {
1508
+ "output_hex": "202020202020393939392e353030303030303030"
1509
+ },
1510
+ "source": "202020202020393939392e353030303030303030"
1511
+ }
1512
+ ],
1513
+ "rejections": [
1514
+ 2,
1515
+ 2,
1516
+ 2,
1517
+ 2,
1518
+ 2
1519
+ ],
1520
+ "source_report": "docs/research/qvm-format-float.json",
1521
+ "source_report_sha256": "a11651635c8c38fed7316bbcd346232fde9a64ca61bb3dfcf6e8cfb40e1f434a"
1522
+ }
docs/research/rust-health-impulse.json CHANGED
@@ -2985,7 +2985,7 @@
2985
  "exit_code": 2
2986
  }
2987
  ],
2988
- "rust_unit_tests": 79,
2989
  "source_report": "docs/research/qvm-health-impulse.json",
2990
  "source_report_sha256": "625fd8064004ea6dbdf398d51d0af844d9c635ff04c0a0790886dddb6ab81e71"
2991
  }
 
2985
  "exit_code": 2
2986
  }
2987
  ],
2988
+ "rust_unit_tests": 81,
2989
  "source_report": "docs/research/qvm-health-impulse.json",
2990
  "source_report_sha256": "625fd8064004ea6dbdf398d51d0af844d9c635ff04c0a0790886dddb6ab81e71"
2991
  }
docs/research/rust-qvm-format.json CHANGED
@@ -611,5 +611,5 @@
611
  2
612
  ],
613
  "source_report": "docs/research/qvm-formatter.json",
614
- "source_report_sha256": "05948658242afbba756f1c33448be002c60cc73b2a108ec605140ec4b39de31d"
615
  }
 
611
  2
612
  ],
613
  "source_report": "docs/research/qvm-formatter.json",
614
+ "source_report_sha256": "c75b4755b17a42038f1e7e0e0a6abb5bdb92a6e68a9165c79637f3fa87bc36c4"
615
  }
scripts/analyze_qvm_formatter.py CHANGED
@@ -21,5 +21,5 @@ def main():
21
  for spec in [b'%s',b'%12s',b'%.2s',b'%08.2s']:
22
  for v in [b'',b'A',b'ABCDE',bytes([255,254,253]),None]:rows.append(run(ins,raw,h,spec,[v]))
23
  for template,args in [(b'',[]),(b'plain literal',[]),(b'%%:%c:%q',[65,0x142]),(b'%c %c',[0,255]),(b'hello %i / %s',[-12,b'A %s B'])]:rows.append(run(ins,raw,h,template,args))
24
- write_json(Path('docs/research/qvm-formatter.json'),{'source':q['source'],'sha256':q['sha256'],'probes':rows,'limits':'Actual37914 with original jump tables, actual37279/37768 and36038 children across55 finite integer/string/character/literal fixtures. Float37498 remains unrecovered here. Unknown conversion consumes a word and writes its low byte; p dispatches decimal. Unsafe trailing formats/uninitialized varargs and narrow-left-padding domains excluded.'})
25
  if __name__=='__main__':main()
 
21
  for spec in [b'%s',b'%12s',b'%.2s',b'%08.2s']:
22
  for v in [b'',b'A',b'ABCDE',bytes([255,254,253]),None]:rows.append(run(ins,raw,h,spec,[v]))
23
  for template,args in [(b'',[]),(b'plain literal',[]),(b'%%:%c:%q',[65,0x142]),(b'%c %c',[0,255]),(b'hello %i / %s',[-12,b'A %s B'])]:rows.append(run(ins,raw,h,template,args))
24
+ write_json(Path('docs/research/qvm-formatter.json'),{'source':q['source'],'sha256':q['sha256'],'probes':rows,'limits':'Actual37914 with original jump tables, actual37279/37768 and36038 children across55 finite integer/string/character/literal fixtures. Float37498 is covered separately by qvm-format-float.json. Unknown conversion consumes a word and writes its low byte; p dispatches decimal. Unsafe trailing formats/uninitialized varargs and narrow-left-padding domains excluded.'})
25
  if __name__=='__main__':main()
scripts/analyze_rust_format_float.py ADDED
@@ -0,0 +1,15 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/usr/bin/env python3
2
+ import hashlib,json
3
+ from pathlib import Path
4
+ from rust_lifecycle_support import binary,result,invoke
5
+ from analyze_rust_qvm_format import encode
6
+ from analyze_qvm import write_json
7
+
8
+ def main():
9
+ b=binary();p=Path('docs/research/qvm-format-float.json');data=p.read_bytes();r=json.loads(data);rows=[];composed=[]
10
+ for s in r['probes']:rows.append({'input':{k:s[k] for k in ['word','width','precision']},'source':s['output_hex'],'rust':result(b,'qvm-float',[s['word'],s['width'],s['precision']])})
11
+ for s in r['composed']:composed.append({'source':{'cstring_hex':s['output_hex'],'count':s['count']},'rust':result(b,'qvm-format',encode(s))})
12
+ errors=[]
13
+ for s in r['rejections']:v=invoke(b,'qvm-float',[s['word'],0,6],check=False);assert v.returncode;errors.append(v.returncode)
14
+ write_json(Path('docs/research/rust-format-float.json'),{'source_report':str(p),'source_report_sha256':hashlib.sha256(data).hexdigest(),'probes':rows,'composed':composed,'rejections':errors,'limits':'Rust37498 f32 truncation and37914 float dispatch match126 helper and12 composed source cases. Precision0..9/default6, finite CVFI domain; no native/JIT or large-precision parity claim.'})
15
+ if __name__=='__main__':main()
scripts/test_rust_format_float.py ADDED
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import hashlib,json,unittest
2
+ from pathlib import Path
3
+ from test_qvm_format_float import float_text
4
+ class RustFormatFloatTests(unittest.TestCase):
5
+ def test_source_and_independent_f32_bytes(self):
6
+ r=json.loads(Path('docs/research/rust-format-float.json').read_text());self.assertEqual(len(r['probes']),126)
7
+ for p in r['probes']:a=p['input'];self.assertEqual(p['rust']['output_hex'],p['source']);self.assertEqual(p['source'],float_text(a['word'],a['width'],a['precision']).hex())
8
+ for p in r['composed']:self.assertEqual(p['rust'],p['source'])
9
+ def test_identity_and_nonfinite_overflow_domains(self):
10
+ r=json.loads(Path('docs/research/rust-format-float.json').read_text());self.assertEqual(hashlib.sha256(Path(r['source_report']).read_bytes()).hexdigest(),r['source_report_sha256']);self.assertEqual(len(r['rejections']),5)
11
+ if __name__=='__main__':unittest.main()
xtask/checks.tsv CHANGED
@@ -2064,3 +2064,17 @@ report scripts/analyze_qvm_format_float.py docs/research/qvm-format-float.json
2064
  edge docs/research/qvm-format-float.json scripts/test_qvm_format_float.py
2065
  group format-float scripts/analyze_qvm_format_float.py
2066
  edge scripts/analyze_qvm_format_float.py scripts/analyze_qvm_resumer_audit.py
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2064
  edge docs/research/qvm-format-float.json scripts/test_qvm_format_float.py
2065
  group format-float scripts/analyze_qvm_format_float.py
2066
  edge scripts/analyze_qvm_format_float.py scripts/analyze_qvm_resumer_audit.py
2067
+ edge Cargo.toml scripts/analyze_rust_format_float.py
2068
+ edge Cargo.lock scripts/analyze_rust_format_float.py
2069
+ edge crates/urt-gameplay/Cargo.toml scripts/analyze_rust_format_float.py
2070
+ edge crates/urt-gameplay/src/lib.rs scripts/analyze_rust_format_float.py
2071
+ edge crates/urt-gameplay/src/bin/urt-lifecycle.rs scripts/analyze_rust_format_float.py
2072
+ edge crates/urt-gameplay/src/qvm_format.rs scripts/analyze_rust_format_float.py
2073
+ group gameplay scripts/analyze_rust_format_float.py
2074
+ group rust-format-float scripts/analyze_rust_health_impulse.py
2075
+ group rust-format-float scripts/analyze_qvm_formatter.py
2076
+ group rust-format-float scripts/analyze_rust_qvm_format.py
2077
+ report scripts/analyze_rust_format_float.py docs/research/rust-format-float.json
2078
+ edge docs/research/rust-format-float.json scripts/test_rust_format_float.py
2079
+ group rust-format-float scripts/analyze_rust_format_float.py
2080
+ edge scripts/analyze_rust_format_float.py scripts/analyze_qvm_resumer_audit.py