adjusted config score penalty calculation (#5206)

* adjusted config score penalty calculation

* updated contract schema
This commit is contained in:
Jędrzej Stuczyński
2024-12-03 11:24:46 +00:00
committed by GitHub
parent 60c21a8d1d
commit 29ea4623c8
4 changed files with 76 additions and 9 deletions
@@ -253,10 +253,22 @@ impl ConfigScoreParams {
1
};
major_diff * self.version_weights.major
+ minor_diff * self.version_weights.minor
+ patch_diff * self.version_weights.patch
+ prerelease_diff * self.version_weights.prerelease
// if you're a major version behind, ignore minor and patch and treat it as 0
if major_diff != 0 {
return major_diff * self.version_weights.major
+ expected.minor as u32 * self.version_weights.minor
+ expected.patch as u32 * self.version_weights.patch
+ prerelease_diff * self.version_weights.prerelease;
}
// if you're minor version behind, ignore patch and treat is as 0
if minor_diff != 0 {
return minor_diff * self.version_weights.minor
+ expected.patch as u32 * self.version_weights.patch
+ prerelease_diff * self.version_weights.prerelease;
}
patch_diff * self.version_weights.patch + prerelease_diff * self.version_weights.prerelease
}
}
@@ -274,7 +286,7 @@ impl Default for OutdatedVersionWeights {
fn default() -> Self {
OutdatedVersionWeights {
major: 100,
minor: 10,
minor: 1,
patch: 1,
prerelease: 1,
}
@@ -314,3 +326,58 @@ impl ConfigScoreParamsUpdate {
|| self.version_score_formula_params.is_some()
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn versions_behind() {
let weights = OutdatedVersionWeights {
major: 100,
minor: 1,
patch: 1,
prerelease: 1,
};
let c = ConfigScoreParams {
current_nym_node_semver: "2.2.3".to_string(),
version_weights: weights,
version_score_formula_params: Default::default(),
};
// 1 patch behind
assert_eq!(1, c.versions_behind(&"2.2.2".parse().unwrap()));
// 1 minor behind
assert_eq!(4, c.versions_behind(&"2.1.0".parse().unwrap()));
assert_eq!(4, c.versions_behind(&"2.1.15".parse().unwrap()));
// 2 patch behind
assert_eq!(2, c.versions_behind(&"2.2.1".parse().unwrap()));
// 2 minor behind
assert_eq!(5, c.versions_behind(&"2.0.0".parse().unwrap()));
assert_eq!(5, c.versions_behind(&"2.0.123".parse().unwrap()));
// lying about being 1 patch AHEAD (you're still penalised as if behind)
assert_eq!(1, c.versions_behind(&"2.2.4".parse().unwrap()));
// major behind
assert_eq!(105, c.versions_behind(&"1.0.0".parse().unwrap()));
assert_eq!(105, c.versions_behind(&"1.2.0".parse().unwrap()));
assert_eq!(105, c.versions_behind(&"1.0.123".parse().unwrap()));
// different prerelease
let c = ConfigScoreParams {
current_nym_node_semver: "1.2.3-important-patch".to_string(),
version_weights: weights,
version_score_formula_params: Default::default(),
};
assert_eq!(1, c.versions_behind(&"1.2.3".parse().unwrap()));
// different prerelease + patch
assert_eq!(2, c.versions_behind(&"1.2.2".parse().unwrap()));
assert_eq!(5, c.versions_behind(&"1.1.0".parse().unwrap()));
}
}
@@ -72,7 +72,7 @@
"version_score_weights": {
"default": {
"major": 100,
"minor": 10,
"minor": 1,
"patch": 1,
"prerelease": 1
},
@@ -3455,7 +3455,7 @@
"version_score_weights": {
"default": {
"major": 100,
"minor": 10,
"minor": 1,
"patch": 1,
"prerelease": 1
},
+1 -1
View File
@@ -68,7 +68,7 @@
"version_score_weights": {
"default": {
"major": 100,
"minor": 10,
"minor": 1,
"patch": 1,
"prerelease": 1
},
+1 -1
View File
@@ -29,7 +29,7 @@
"version_score_weights": {
"default": {
"major": 100,
"minor": 10,
"minor": 1,
"patch": 1,
"prerelease": 1
},