Add documentation and tests to AxisSettings (#3303)
# Objective Fixes: #3247 ## Solution - Added short documentation for `AxisSettings` - Added tests for `AxisSettings` and `ButtonSettings` Co-authored-by: CrazyRoka <rokarostuk@gmail.com>
This commit is contained in:
parent
ed9d45fae5
commit
e48f9d8cd4
@ -154,12 +154,21 @@ impl ButtonSettings {
|
||||
}
|
||||
}
|
||||
|
||||
/// Defines the sensitivity range and threshold for an axis.
|
||||
///
|
||||
/// Values that are lower than `negative_high` will be rounded to -1.0.
|
||||
/// Values that are higher than `positive_high` will be rounded to 1.0.
|
||||
/// Values that are in-between `negative_low` and `positive_low` will be rounded to 0.0.
|
||||
/// Otherwise, values will not be rounded.
|
||||
///
|
||||
/// The valid range is from -1.0 to 1.0, inclusive.
|
||||
#[derive(Debug, Clone)]
|
||||
pub struct AxisSettings {
|
||||
pub positive_high: f32,
|
||||
pub positive_low: f32,
|
||||
pub negative_high: f32,
|
||||
pub negative_low: f32,
|
||||
///`threshold` defines the minimum difference between old and new values to apply the changes.
|
||||
pub threshold: f32,
|
||||
}
|
||||
|
||||
@ -364,7 +373,7 @@ const ALL_AXIS_TYPES: [GamepadAxisType; 8] = [
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::ButtonAxisSettings;
|
||||
use super::{AxisSettings, ButtonAxisSettings, ButtonSettings};
|
||||
|
||||
fn test_button_axis_settings_filter(
|
||||
settings: ButtonAxisSettings,
|
||||
@ -421,4 +430,123 @@ mod tests {
|
||||
test_button_axis_settings_filter(settings, new_value, old_value, expected);
|
||||
}
|
||||
}
|
||||
|
||||
fn test_axis_settings_filter(
|
||||
settings: AxisSettings,
|
||||
new_value: f32,
|
||||
old_value: Option<f32>,
|
||||
expected: Option<f32>,
|
||||
) {
|
||||
let actual = settings.filter(new_value, old_value);
|
||||
assert_eq!(
|
||||
expected, actual,
|
||||
"Testing filtering for {:?} with new_value = {:?}, old_value = {:?}",
|
||||
settings, new_value, old_value
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_axis_settings_default_filter() {
|
||||
let cases = [
|
||||
(1.0, Some(1.0)),
|
||||
(0.99, Some(1.0)),
|
||||
(0.96, Some(1.0)),
|
||||
(0.95, Some(1.0)),
|
||||
(0.9499, Some(0.9499)),
|
||||
(0.84, Some(0.84)),
|
||||
(0.43, Some(0.43)),
|
||||
(0.05001, Some(0.05001)),
|
||||
(0.05, Some(0.0)),
|
||||
(0.04, Some(0.0)),
|
||||
(0.01, Some(0.0)),
|
||||
(0.0, Some(0.0)),
|
||||
(-1.0, Some(-1.0)),
|
||||
(-0.99, Some(-1.0)),
|
||||
(-0.96, Some(-1.0)),
|
||||
(-0.95, Some(-1.0)),
|
||||
(-0.9499, Some(-0.9499)),
|
||||
(-0.84, Some(-0.84)),
|
||||
(-0.43, Some(-0.43)),
|
||||
(-0.05001, Some(-0.05001)),
|
||||
(-0.05, Some(0.0)),
|
||||
(-0.04, Some(0.0)),
|
||||
(-0.01, Some(0.0)),
|
||||
];
|
||||
|
||||
for (new_value, expected) in cases {
|
||||
let settings = AxisSettings::default();
|
||||
test_axis_settings_filter(settings, new_value, None, expected);
|
||||
}
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_axis_settings_default_filter_with_old_values() {
|
||||
let cases = [
|
||||
(0.43, Some(0.44001), Some(0.43)),
|
||||
(0.43, Some(0.44), None),
|
||||
(0.43, Some(0.43), None),
|
||||
(0.43, Some(0.41999), Some(0.43)),
|
||||
(0.43, Some(0.17), Some(0.43)),
|
||||
(0.43, Some(0.84), Some(0.43)),
|
||||
(0.05, Some(0.055), Some(0.0)),
|
||||
(0.95, Some(0.945), Some(1.0)),
|
||||
(-0.43, Some(-0.44001), Some(-0.43)),
|
||||
(-0.43, Some(-0.44), None),
|
||||
(-0.43, Some(-0.43), None),
|
||||
(-0.43, Some(-0.41999), Some(-0.43)),
|
||||
(-0.43, Some(-0.17), Some(-0.43)),
|
||||
(-0.43, Some(-0.84), Some(-0.43)),
|
||||
(-0.05, Some(-0.055), Some(0.0)),
|
||||
(-0.95, Some(-0.945), Some(-1.0)),
|
||||
];
|
||||
|
||||
for (new_value, old_value, expected) in cases {
|
||||
let settings = AxisSettings::default();
|
||||
test_axis_settings_filter(settings, new_value, old_value, expected);
|
||||
}
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_button_settings_default_is_pressed() {
|
||||
let cases = [
|
||||
(1.0, true),
|
||||
(0.95, true),
|
||||
(0.9, true),
|
||||
(0.8, true),
|
||||
(0.75, true),
|
||||
(0.7, false),
|
||||
(0.65, false),
|
||||
(0.5, false),
|
||||
(0.0, false),
|
||||
];
|
||||
|
||||
for (value, expected) in cases {
|
||||
let settings = ButtonSettings::default();
|
||||
let actual = settings.is_pressed(value);
|
||||
|
||||
assert_eq!(expected, actual, "Testing is pressed for value: {}", value);
|
||||
}
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_button_settings_default_is_released() {
|
||||
let cases = [
|
||||
(1.0, false),
|
||||
(0.95, false),
|
||||
(0.9, false),
|
||||
(0.8, false),
|
||||
(0.75, false),
|
||||
(0.7, false),
|
||||
(0.65, true),
|
||||
(0.5, true),
|
||||
(0.0, true),
|
||||
];
|
||||
|
||||
for (value, expected) in cases {
|
||||
let settings = ButtonSettings::default();
|
||||
let actual = settings.is_released(value);
|
||||
|
||||
assert_eq!(expected, actual, "Testing is released for value: {}", value);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user