Ver código fonte

Refactor read test

Johannes Hofmann 8 anos atrás
pai
commit
3285b74a48
1 arquivos alterados com 47 adições e 76 exclusões
  1. 47
    76
      tests/read.rs

+ 47
- 76
tests/read.rs Ver arquivo

@@ -8,59 +8,63 @@ fn approx_eq(a: f64, b: f64) -> bool {
8 8
     (a - b).abs() < 1.0e-6
9 9
 }
10 10
 
11
-#[test]
12
-fn read() {
13
-    let reader = BlobReader::from_path(TEST_FILE_PATH).unwrap();
14
-
15
-    let blobs = reader.collect::<Result<Vec<_>>>().unwrap();
11
+// Compare the content of a HeaderBlock with known values from the test file.
12
+fn check_header_block_content(block: &HeaderBlock) {
13
+    assert!(block.required_features().contains(&String::from("OsmSchema-V0.6")));
14
+    assert!(block.required_features().contains(&String::from("DenseNodes")));
15
+    assert_eq!(block.optional_features().len(), 0);
16
+}
16 17
 
17
-    assert_eq!(blobs.len(), 2);
18
-
19
-    assert_eq!(blobs[0].get_type(), BlobType::OsmHeader);
20
-    assert_eq!(blobs[1].get_type(), BlobType::OsmData);
18
+// Compare the content of a PrimitiveBlock with known values from the test file.
19
+fn check_primitive_block_content(block: &PrimitiveBlock) {
20
+    let nodes = block.groups().flat_map(|g| g.nodes()).count();
21
+    assert_eq!(nodes, 0);
21 22
 
22 23
     {
23
-        let header = blobs[0].to_headerblock().unwrap();
24
-        assert!(header.required_features().contains(&String::from("OsmSchema-V0.6")));
25
-        assert!(header.required_features().contains(&String::from("DenseNodes")));
26
-    }
24
+        let dense_nodes: Vec<_> = block.groups().flat_map(|g| g.dense_nodes()).collect();
25
+        assert_eq!(dense_nodes.len(), 3);
27 26
 
28
-    {
29
-        let primitive_block = blobs[1].to_primitiveblock().unwrap();
27
+        assert!(approx_eq(dense_nodes[1].lat(), 52.11992359584));
28
+        assert!(approx_eq(dense_nodes[1].lon(), 11.62564468943));
29
+
30
+        assert!(approx_eq(dense_nodes[2].lat(), 52.11989910567));
31
+        assert!(approx_eq(dense_nodes[2].lon(), 11.63101926915));
30 32
 
31
-        let nodes = primitive_block.groups().flat_map(|g| g.nodes()).count();
32
-        assert_eq!(nodes, 0);
33
+        assert_eq!(dense_nodes[0].id, 105);
34
+        assert_eq!(dense_nodes[1].id, 106);
35
+        assert_eq!(dense_nodes[2].id, 108);
33 36
 
34
-        {
35
-            let dense_nodes: Vec<_> = primitive_block.groups().flat_map(|g| g.dense_nodes()).collect();
36
-            assert_eq!(dense_nodes.len(), 3);
37
+        assert_eq!(dense_nodes[0].uid, 17);
38
+        assert_eq!(dense_nodes[1].uid, 17);
39
+        assert_eq!(dense_nodes[2].uid, 17);
40
+    }
37 41
 
38
-            assert!(approx_eq(dense_nodes[1].lat(), 52.11992359584));
39
-            assert!(approx_eq(dense_nodes[1].lon(), 11.62564468943));
42
+    {
43
+        let ways: Vec<_> = block.groups().flat_map(|g| g.ways()).collect();
44
+        assert_eq!(ways.len(), 1);
40 45
 
41
-            assert!(approx_eq(dense_nodes[2].lat(), 52.11989910567));
42
-            assert!(approx_eq(dense_nodes[2].lon(), 11.63101926915));
46
+        let way_tags = ways[0].tags().collect::<Vec<_>>();
47
+        assert_eq!(way_tags.len(), 2);
43 48
 
44
-            assert_eq!(dense_nodes[0].id, 105);
45
-            assert_eq!(dense_nodes[1].id, 106);
46
-            assert_eq!(dense_nodes[2].id, 108);
49
+        assert!(way_tags.contains(&("building", "yes")));
50
+        assert!(way_tags.contains(&("name", "triangle")));
51
+    }
52
+}
47 53
 
48
-            assert_eq!(dense_nodes[0].uid, 17);
49
-            assert_eq!(dense_nodes[1].uid, 17);
50
-            assert_eq!(dense_nodes[2].uid, 17);
51
-        }
54
+#[test]
55
+fn read() {
56
+    let reader = BlobReader::from_path(TEST_FILE_PATH).unwrap();
57
+    let blobs = reader.collect::<Result<Vec<_>>>().unwrap();
52 58
 
53
-        {
54
-            let ways: Vec<_> = primitive_block.groups().flat_map(|g| g.ways()).collect();
55
-            assert_eq!(ways.len(), 1);
59
+    assert_eq!(blobs.len(), 2);
60
+    assert_eq!(blobs[0].get_type(), BlobType::OsmHeader);
61
+    assert_eq!(blobs[1].get_type(), BlobType::OsmData);
56 62
 
57
-            let way_tags = ways[0].tags().collect::<Vec<_>>();
58
-            assert_eq!(way_tags.len(), 2);
63
+    let header = blobs[0].to_headerblock().unwrap();
64
+    check_header_block_content(&header);
59 65
 
60
-            assert!(way_tags.contains(&("building", "yes")));
61
-            assert!(way_tags.contains(&("name", "triangle")));
62
-        }
63
-    }
66
+    let primitive_block = blobs[1].to_primitiveblock().unwrap();
67
+    check_primitive_block_content(&primitive_block);
64 68
 }
65 69
 
66 70
 #[test]
@@ -71,50 +75,17 @@ fn mmap_read() {
71 75
     let blobs = reader.collect::<Result<Vec<_>>>().unwrap();
72 76
 
73 77
     assert_eq!(blobs.len(), 2);
74
-
75 78
     assert_eq!(blobs[0].get_type(), BlobType::OsmHeader);
76 79
     assert_eq!(blobs[1].get_type(), BlobType::OsmData);
77 80
 
78 81
     if let BlobDecode::OsmHeader(header) = blobs[0].decode().unwrap() {
79
-        assert!(header.required_features().contains(&String::from("OsmSchema-V0.6")));
80
-        assert!(header.required_features().contains(&String::from("DenseNodes")));
82
+        check_header_block_content(&header);
81 83
     } else {
82 84
         panic!("Unexpected blob type");
83 85
     }
84 86
 
85 87
     if let BlobDecode::OsmData(primitive_block) = blobs[1].decode().unwrap() {
86
-        let nodes = primitive_block.groups().flat_map(|g| g.nodes()).count();
87
-        assert_eq!(nodes, 0);
88
-
89
-        {
90
-            let dense_nodes: Vec<_> = primitive_block.groups().flat_map(|g| g.dense_nodes()).collect();
91
-            assert_eq!(dense_nodes.len(), 3);
92
-
93
-            assert!(approx_eq(dense_nodes[1].lat(), 52.11992359584));
94
-            assert!(approx_eq(dense_nodes[1].lon(), 11.62564468943));
95
-
96
-            assert!(approx_eq(dense_nodes[2].lat(), 52.11989910567));
97
-            assert!(approx_eq(dense_nodes[2].lon(), 11.63101926915));
98
-
99
-            assert_eq!(dense_nodes[0].id, 105);
100
-            assert_eq!(dense_nodes[1].id, 106);
101
-            assert_eq!(dense_nodes[2].id, 108);
102
-
103
-            assert_eq!(dense_nodes[0].uid, 17);
104
-            assert_eq!(dense_nodes[1].uid, 17);
105
-            assert_eq!(dense_nodes[2].uid, 17);
106
-        }
107
-
108
-        {
109
-            let ways: Vec<_> = primitive_block.groups().flat_map(|g| g.ways()).collect();
110
-            assert_eq!(ways.len(), 1);
111
-
112
-            let way_tags = ways[0].tags().collect::<Vec<_>>();
113
-            assert_eq!(way_tags.len(), 2);
114
-
115
-            assert!(way_tags.contains(&("building", "yes")));
116
-            assert!(way_tags.contains(&("name", "triangle")));
117
-        }
88
+        check_primitive_block_content(&primitive_block);
118 89
     } else {
119 90
         panic!("Unexpected blob type");
120 91
     }
@@ -129,7 +100,7 @@ fn decode_blob() {
129 100
     assert_eq!(blobs[0].get_type(), BlobType::OsmHeader);
130 101
     assert_eq!(blobs[1].get_type(), BlobType::OsmData);
131 102
 
132
-    // decoding to the wrong blob type should not panic, but produce an Err.
103
+    // Decoding to the wrong blob type should not panic but produce an Err.
133 104
     assert!(blobs[0].to_primitiveblock().is_err());
134 105
     assert!(blobs[1].to_headerblock().is_err());
135 106