# HG changeset patch # User Marcin Mielniczuk # Date 1530890161 -7200 # Node ID dd2e51f7303d708cbb2fc23c0407281db95e3db6 # Parent d3c86ade3d4daf02df79d59a013e3564f2ed1114 Add an extra test for Rnd's distribution diff -r d3c86ade3d4d -r dd2e51f7303d gameServer2/src/server/handlers/common.rs --- a/gameServer2/src/server/handlers/common.rs Fri Jul 06 16:59:52 2018 +0200 +++ b/gameServer2/src/server/handlers/common.rs Fri Jul 06 17:16:01 2018 +0200 @@ -1,13 +1,8 @@ use protocol::messages::{ - HWProtocolMessage::{self, Rnd}, - HWServerMessage::{self, ChatMsg}, + HWProtocolMessage::{self, Rnd}, HWServerMessage::{self, ChatMsg}, }; use rand::{self, Rng}; -use server::{ - actions::Action, - room::HWRoom, - server::HWServer -}; +use server::{actions::Action, room::HWRoom, server::HWServer}; pub fn rnd_action(options: Vec, room: Option<&mut HWRoom>) -> Vec { if let Some(room) = room { @@ -54,13 +49,32 @@ } } + /// This test terminates almost surely. #[test] fn test_handle_rnd_empty() { run_handle_test(vec![]) } + /// This test terminates almost surely. #[test] fn test_handle_rnd_nonempty() { run_handle_test(vec!["A".to_owned(), "B".to_owned(), "C".to_owned()]) } + + /// This test terminates almost surely (strong law of large numbers) + #[test] + fn test_distribution() { + let eps = 0.000001; + let lim = 0.5; + let opts = vec![0.to_string(), 1.to_string()]; + let mut ones = 0; + let mut tries = 0; + + while tries < 1000 || ((ones as f64 / tries as f64) - lim).abs() >= eps { + tries += 1; + if reply2string(rnd_reply(opts.clone())) == 1.to_string() { + ones += 1; + } + } + } }