fix: replace unstable is_multiple_of with modulo and fix flaky temp test

The `is_multiple_of` method is unstable before Rust 1.87, breaking Docker
builds that use rust:1.83-slim. Also merges the two temperature env-var
tests into one to eliminate the race condition when tests run in parallel.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
fettpl 2026-02-15 01:29:23 +01:00
parent b931aeb56c
commit 6f64099a48
2 changed files with 10 additions and 13 deletions

View file

@ -1613,26 +1613,23 @@ default_temperature = 0.7
#[test] #[test]
fn env_override_temperature() { fn env_override_temperature() {
// Both temperature cases tested in one function to avoid env-var
// races when tests run in parallel.
std::env::remove_var("ZEROCLAW_TEMPERATURE"); std::env::remove_var("ZEROCLAW_TEMPERATURE");
let mut config = Config::default();
// Valid temperature is applied
let mut config = Config::default();
std::env::set_var("ZEROCLAW_TEMPERATURE", "0.5"); std::env::set_var("ZEROCLAW_TEMPERATURE", "0.5");
config.apply_env_overrides(); config.apply_env_overrides();
assert!((config.default_temperature - 0.5).abs() < f64::EPSILON); assert!((config.default_temperature - 0.5).abs() < f64::EPSILON);
std::env::remove_var("ZEROCLAW_TEMPERATURE"); // Out-of-range temperature is ignored
} let mut config2 = Config::default();
let original_temp = config2.default_temperature;
#[test]
fn env_override_temperature_out_of_range_ignored() {
std::env::remove_var("ZEROCLAW_TEMPERATURE");
let mut config = Config::default();
let original_temp = config.default_temperature;
std::env::set_var("ZEROCLAW_TEMPERATURE", "3.0"); std::env::set_var("ZEROCLAW_TEMPERATURE", "3.0");
config.apply_env_overrides(); config2.apply_env_overrides();
assert!( assert!(
(config.default_temperature - original_temp).abs() < f64::EPSILON, (config2.default_temperature - original_temp).abs() < f64::EPSILON,
"Temperature 3.0 should be ignored (out of range)" "Temperature 3.0 should be ignored (out of range)"
); );

View file

@ -242,7 +242,7 @@ fn hex_encode(data: &[u8]) -> String {
/// Hex-decode a hex string to bytes. /// Hex-decode a hex string to bytes.
#[allow(clippy::manual_is_multiple_of)] #[allow(clippy::manual_is_multiple_of)]
fn hex_decode(hex: &str) -> Result<Vec<u8>> { fn hex_decode(hex: &str) -> Result<Vec<u8>> {
if !hex.len().is_multiple_of(2) { if hex.len() % 2 != 0 {
anyhow::bail!("Hex string has odd length"); anyhow::bail!("Hex string has odd length");
} }
(0..hex.len()) (0..hex.len())