Преглед изворни кода

Test different types of PBF encoding

Johannes Hofmann пре 8 година
родитељ
комит
7849329389
3 измењених фајлова са 74 додато и 45 уклоњено
  1. 74
    45
      tests/read.rs
  2. BIN
      tests/test_nozlib.osm.pbf
  3. BIN
      tests/test_nozlib_nodense.osm.pbf

+ 74
- 45
tests/read.rs Прегледај датотеку

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

BIN
tests/test_nozlib.osm.pbf Прегледај датотеку


BIN
tests/test_nozlib_nodense.osm.pbf Прегледај датотеку