mod algorithm;
pub use algorithm::{calculate_fair_division_equal_weights, calculate_fair_division_weighted};
#[derive(Debug)]
pub enum Error {
InvalidInput,
CalculationFailed,
NotEnoughParticipants,
}
pub type Result<T> = std::result::Result<T, Error>;
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_equal_weights() {
let input = vec![10, 20, 30];
let result = calculate_fair_division_equal_weights(&input);
assert!(result.is_ok());
let allocation = result.unwrap();
assert_eq!(allocation.len(), input.len());
assert_eq!(allocation.iter().sum::<i128>(), 0);
}
#[test]
fn test_weighted() {
let input = vec![100, 200, 300];
let weights = vec![1, 2, 3];
let result = calculate_fair_division_weighted(&input, &weights);
assert!(result.is_ok());
let allocation = result.unwrap();
assert_eq!(allocation.len(), input.len());
assert_eq!(allocation.iter().sum::<i128>(), 0);
}
#[test]
fn test_invalid_input() {
let empty: Vec<i128> = vec![];
assert!(calculate_fair_division_equal_weights(&empty).is_err());
let input = vec![10, 20, 30];
let weights = vec![1, 2];
assert!(calculate_fair_division_weighted(&input, &weights).is_err());
let input = vec![10, 20, 30];
let weights = vec![1, -2, 3];
assert!(calculate_fair_division_weighted(&input, &weights).is_err());
let single_input = vec![100];
let single_weight = vec![1];
assert!(calculate_fair_division_equal_weights(&single_input).is_err());
assert!(calculate_fair_division_weighted(&single_input, &single_weight).is_err());
}
}