1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
//!	A 2D geometry library. It provides a way to easily extract 1d ranges from a 2d Rectangle based off of the x or y axis.
//!	Also provides functions that operate on types that implement Ord, as well has hard coded ones for f32.
//!
//!## Example
//!
//!```
//!extern crate axgeom;
//!use axgeom::{Rect,Range,Axis,AxisIter,XAXIS,YAXIS};
//!fn main(){
//!let rect = Rect::new(30.0,40.0,30.0,40.0);
//!
//!for k in AxisIter::new(){
//!	let r=rect.get_range(k);
//!	assert!(r.len()==10.0);
//!}
//!
//!let (r1,r2)=rect.subdivide(35.0,XAXIS);
//!assert!(*r1.get_range(XAXIS)==Range{start:30.0,end:35.0});
//!assert!(*r1.get_range(YAXIS)==Range{start:30.0,end:40.0});
//!	      
//!assert!(*r2.get_range(XAXIS)==Range{start:35.0,end:40.0});
//!assert!(*r2.get_range(YAXIS)==Range{start:30.0,end:40.0});
//!}
//!```
//!

#![feature(ord_max_min)]
mod vec;
mod range;
mod rect;

pub use self::vec::Vec2;
pub use self::vec::ComputedVec2;
pub use self::vec::VecCont;
pub use self::range::Range;
pub use self::vec::Axis;
pub use self::vec::AxisIter;
pub use self::rect::Rect;
pub use self::vec::XAXIS;
pub use self::vec::YAXIS;

#[cfg(test)]
mod tests {
    use super::*;
    #[test]
    fn test1() {
        let rect = Rect::new(30.0,40.0,30.0,40.0);
        for k in AxisIter::new(){
            let r=rect.get_range(k);
            assert!(r.len()==10.0);
        }

        let (r1,r2)=rect.subdivide(35.0,XAXIS);
        assert_eq!(*r1.get_range(XAXIS),Range{start:30.0,end:35.0});
        assert_eq!(*r1.get_range(YAXIS),Range{start:30.0,end:40.0});
        
        assert_eq!(*r2.get_range(XAXIS),Range{start:35.0,end:40.0});
        assert_eq!(*r2.get_range(YAXIS),Range{start:30.0,end:40.0});
    }
}