chrono/
div.rs

1// This is a part of Chrono.
2// Portions Copyright 2013-2014 The Rust Project Developers.
3// See README.md and LICENSE.txt for details.
4
5//! Integer division utilities. (Shamelessly copied from [num](https://github.com/rust-lang/num/))
6
7// Algorithm from [Daan Leijen. _Division and Modulus for Computer Scientists_,
8// December 2001](http://research.microsoft.com/pubs/151917/divmodnote-letter.pdf)
9
10pub use num_integer::{div_rem, div_floor, mod_floor, div_mod_floor};
11
12#[cfg(test)]
13mod tests {
14    use super::{mod_floor, div_mod_floor};
15
16    #[test]
17    fn test_mod_floor() {
18        assert_eq!(mod_floor( 8,  3),  2);
19        assert_eq!(mod_floor( 8, -3), -1);
20        assert_eq!(mod_floor(-8,  3),  1);
21        assert_eq!(mod_floor(-8, -3), -2);
22
23        assert_eq!(mod_floor( 1,  2),  1);
24        assert_eq!(mod_floor( 1, -2), -1);
25        assert_eq!(mod_floor(-1,  2),  1);
26        assert_eq!(mod_floor(-1, -2), -1);
27    }
28
29    #[test]
30    fn test_div_mod_floor() {
31        assert_eq!(div_mod_floor( 8,  3), ( 2,  2));
32        assert_eq!(div_mod_floor( 8, -3), (-3, -1));
33        assert_eq!(div_mod_floor(-8,  3), (-3,  1));
34        assert_eq!(div_mod_floor(-8, -3), ( 2, -2));
35
36        assert_eq!(div_mod_floor( 1,  2), ( 0,  1));
37        assert_eq!(div_mod_floor( 1, -2), (-1, -1));
38        assert_eq!(div_mod_floor(-1,  2), (-1,  1));
39        assert_eq!(div_mod_floor(-1, -2), ( 0, -1));
40    }
41}
42