@@ -5,15 +5,15 @@ use std::option::Option;
5
5
use super :: { point:: Point , utilities:: make_uuid} ;
6
6
7
7
#[ derive( Debug , PartialEq , Clone ) ]
8
- pub struct Vertex < T , U > {
9
- pub point : Point < T > ,
8
+ pub struct Vertex < T , U , const D : usize > {
9
+ pub point : Point < T , D > ,
10
10
pub uuid : Uuid ,
11
11
pub incident_cell : Option < Uuid > ,
12
12
pub data : Option < U > ,
13
13
}
14
14
15
- impl < T , U > Vertex < T , U > {
16
- pub fn new_with_data ( point : Point < T > , data : U ) -> Self {
15
+ impl < T , U , const D : usize > Vertex < T , U , D > {
16
+ pub fn new_with_data ( point : Point < T , D > , data : U ) -> Self {
17
17
let uuid = make_uuid ( ) ;
18
18
let incident_cell = None ;
19
19
let data = Some ( data) ;
@@ -25,7 +25,7 @@ impl<T, U> Vertex<T, U> {
25
25
}
26
26
}
27
27
28
- pub fn new ( point : Point < T > ) -> Self {
28
+ pub fn new ( point : Point < T , D > ) -> Self {
29
29
let uuid = make_uuid ( ) ;
30
30
let incident_cell = None ;
31
31
let data = None ;
@@ -37,13 +37,17 @@ impl<T, U> Vertex<T, U> {
37
37
}
38
38
}
39
39
40
- pub fn from_points ( points : Vec < Point < T > > ) -> Vec < Self > {
40
+ pub fn from_points ( points : Vec < Point < T , D > > ) -> Vec < Self > {
41
41
points. into_iter ( ) . map ( |p| Self :: new ( p) ) . collect ( )
42
42
}
43
43
44
44
pub fn into_hashmap ( vertices : Vec < Self > ) -> std:: collections:: HashMap < Uuid , Self > {
45
45
vertices. into_iter ( ) . map ( |v| ( v. uuid , v) ) . collect ( )
46
46
}
47
+
48
+ pub fn dim ( & self ) -> usize {
49
+ D
50
+ }
47
51
}
48
52
#[ cfg( test) ]
49
53
mod tests {
@@ -52,64 +56,69 @@ mod tests {
52
56
53
57
#[ test]
54
58
fn make_vertex_with_data ( ) {
55
- let vertex = Vertex :: new_with_data ( Point :: new ( 1.0 , 2.0 , 3.0 ) , 3 ) ;
59
+ let vertex = Vertex :: new_with_data ( Point :: new ( [ 1.0 , 2.0 , 3.0 , 4.0 ] ) , "4D" ) ;
56
60
println ! ( "{:?}" , vertex) ;
57
- assert_eq ! ( vertex. point. x, 1.0 ) ;
58
- assert_eq ! ( vertex. point. y, 2.0 ) ;
59
- assert_eq ! ( vertex. point. z, 3.0 ) ;
61
+ assert_eq ! ( vertex. point. coords[ 0 ] , 1.0 ) ;
62
+ assert_eq ! ( vertex. point. coords[ 1 ] , 2.0 ) ;
63
+ assert_eq ! ( vertex. point. coords[ 2 ] , 3.0 ) ;
64
+ assert_eq ! ( vertex. point. coords[ 3 ] , 4.0 ) ;
65
+ assert_eq ! ( vertex. point. dim( ) , 4 ) ;
60
66
assert ! ( vertex. incident_cell. is_none( ) ) ;
61
67
assert ! ( vertex. data. is_some( ) ) ;
62
- assert_eq ! ( vertex. data. unwrap( ) , 3 ) ;
68
+ assert_eq ! ( vertex. data. unwrap( ) , "4D" ) ;
63
69
}
64
70
65
71
#[ test]
66
72
fn make_vertex_without_data ( ) {
67
- let vertex: Vertex < f64 , Option < ( ) > > = Vertex :: new ( Point :: new ( 1.0 , 2.0 , 3.0 ) ) ;
73
+ let vertex: Vertex < f64 , Option < ( ) > , 3 > = Vertex :: new ( Point :: new ( [ 1.0 , 2.0 , 3.0 ] ) ) ;
68
74
println ! ( "{:?}" , vertex) ;
69
- assert_eq ! ( vertex. point. x , 1.0 ) ;
70
- assert_eq ! ( vertex. point. y , 2.0 ) ;
71
- assert_eq ! ( vertex. point. z , 3.0 ) ;
75
+ assert_eq ! ( vertex. point. coords [ 0 ] , 1.0 ) ;
76
+ assert_eq ! ( vertex. point. coords [ 1 ] , 2.0 ) ;
77
+ assert_eq ! ( vertex. point. coords [ 2 ] , 3.0 ) ;
72
78
assert ! ( vertex. incident_cell. is_none( ) ) ;
73
79
assert ! ( vertex. data. is_none( ) ) ;
74
80
}
75
81
76
82
#[ test]
77
83
fn make_vertices_from_points ( ) {
78
84
let points = vec ! [
79
- Point :: new( 1.0 , 2.0 , 3.0 ) ,
80
- Point :: new( 4.0 , 5.0 , 6.0 ) ,
81
- Point :: new( 7.0 , 8.0 , 9.0 ) ,
85
+ Point :: new( [ 1.0 , 2.0 , 3.0 ] ) ,
86
+ Point :: new( [ 4.0 , 5.0 , 6.0 ] ) ,
87
+ Point :: new( [ 7.0 , 8.0 , 9.0 ] ) ,
82
88
] ;
83
- let vertices: Vec < Vertex < f64 , Option < ( ) > > > = Vertex :: from_points ( points) ;
84
- println ! ( "{:?}" , vertices ) ;
89
+ let vertices: Vec < Vertex < f64 , Option < ( ) > , 3 > > = Vertex :: from_points ( points) ;
90
+
85
91
assert_eq ! ( vertices. len( ) , 3 ) ;
86
- assert_eq ! ( vertices[ 0 ] . point. x, 1.0 ) ;
87
- assert_eq ! ( vertices[ 0 ] . point. y, 2.0 ) ;
88
- assert_eq ! ( vertices[ 0 ] . point. z, 3.0 ) ;
89
- assert_eq ! ( vertices[ 1 ] . point. x, 4.0 ) ;
90
- assert_eq ! ( vertices[ 1 ] . point. y, 5.0 ) ;
91
- assert_eq ! ( vertices[ 1 ] . point. z, 6.0 ) ;
92
- assert_eq ! ( vertices[ 2 ] . point. x, 7.0 ) ;
93
- assert_eq ! ( vertices[ 2 ] . point. y, 8.0 ) ;
94
- assert_eq ! ( vertices[ 2 ] . point. z, 9.0 ) ;
92
+ assert_eq ! ( vertices[ 0 ] . point. coords[ 0 ] , 1.0 ) ;
93
+ assert_eq ! ( vertices[ 0 ] . point. coords[ 1 ] , 2.0 ) ;
94
+ assert_eq ! ( vertices[ 0 ] . point. coords[ 2 ] , 3.0 ) ;
95
+ assert_eq ! ( vertices[ 1 ] . point. coords[ 0 ] , 4.0 ) ;
96
+ assert_eq ! ( vertices[ 1 ] . point. coords[ 1 ] , 5.0 ) ;
97
+ assert_eq ! ( vertices[ 1 ] . point. coords[ 2 ] , 6.0 ) ;
98
+ assert_eq ! ( vertices[ 2 ] . point. coords[ 0 ] , 7.0 ) ;
99
+ assert_eq ! ( vertices[ 2 ] . point. coords[ 1 ] , 8.0 ) ;
100
+ assert_eq ! ( vertices[ 2 ] . point. coords[ 2 ] , 9.0 ) ;
101
+
102
+ // Human readable output for cargo test -- --nocapture
103
+ println ! ( "{:?}" , vertices) ;
95
104
}
96
105
97
106
#[ test]
98
107
fn make_hashmap_from_vec ( ) {
99
108
let points = vec ! [
100
- Point :: new( 1.0 , 2.0 , 3.0 ) ,
101
- Point :: new( 4.0 , 5.0 , 6.0 ) ,
102
- Point :: new( 7.0 , 8.0 , 9.0 ) ,
109
+ Point :: new( [ 1.0 , 2.0 , 3.0 ] ) ,
110
+ Point :: new( [ 4.0 , 5.0 , 6.0 ] ) ,
111
+ Point :: new( [ 7.0 , 8.0 , 9.0 ] ) ,
103
112
] ;
104
- let mut vertices: Vec < Vertex < f64 , Option < ( ) > > > = Vertex :: from_points ( points) ;
113
+ let mut vertices: Vec < Vertex < f64 , Option < ( ) > , 3 > > = Vertex :: from_points ( points) ;
105
114
let hashmap = Vertex :: into_hashmap ( vertices. clone ( ) ) ;
106
- println ! ( "{:?}" , hashmap ) ;
115
+
107
116
assert_eq ! ( hashmap. len( ) , 3 ) ;
108
117
for ( key, val) in hashmap. iter ( ) {
109
118
assert_eq ! ( * key, val. uuid) ;
110
119
}
111
120
112
- let mut values: Vec < Vertex < f64 , Option < ( ) > > > = hashmap. into_values ( ) . collect ( ) ;
121
+ let mut values: Vec < Vertex < f64 , Option < ( ) > , 3 > > = hashmap. into_values ( ) . collect ( ) ;
113
122
assert_eq ! ( values. len( ) , 3 ) ;
114
123
115
124
values. sort_by ( |a, b| a. uuid . cmp ( & b. uuid ) ) ;
0 commit comments