source: josm/trunk/test/unit/org/openstreetmap/josm/data/osm/OsmPrimitiveTest.java@ 4126

Last change on this file since 4126 was 4126, checked in by bastiK, 13 years ago

memory optimizations for Node & WayPoint (Patch by Gubaer, modified)

The field 'proj' in CachedLatLon is a waste of memory. For the 2 classes where this has the greatest impact, the cache for the projected coordinates is replaced by 2 simple double fields (east & north). On projection change, they have to be invalidated explicitly. This is handled by the DataSet & the GpxLayer.

  • Property svn:mime-type set to text/plain
File size: 4.2 KB
Line 
1// License: GPL. For details, see LICENSE file.
2package org.openstreetmap.josm.data.osm;
3
4import java.util.Arrays;
5import java.util.HashSet;
6
7import org.junit.Assert;
8import org.junit.BeforeClass;
9import org.junit.Test;
10import org.openstreetmap.josm.Main;
11import org.openstreetmap.josm.data.Preferences;
12import org.openstreetmap.josm.data.coor.LatLon;
13import org.openstreetmap.josm.data.projection.Mercator;
14
15public class OsmPrimitiveTest {
16
17 @BeforeClass
18 public static void init() {
19 Main.pref = new Preferences();
20 }
21
22 private void compareReferrers(OsmPrimitive actual, OsmPrimitive... expected) {
23 Assert.assertEquals(new HashSet<OsmPrimitive>(Arrays.asList(expected)),
24 new HashSet<OsmPrimitive>(actual.getReferrers()));
25 }
26
27 private DataSet dataSet = new DataSet();
28
29 @BeforeClass
30 public static void setUp() {
31 Main.setProjection(new Mercator());
32 }
33
34 @Test
35 public void simpleReferrersTest() {
36 Node n1 = new Node(new LatLon(0.0, 0.0));
37 Way w1 = new Way();
38 w1.addNode(n1);
39 dataSet.addPrimitive(n1);
40 dataSet.addPrimitive(w1);
41 compareReferrers(n1, w1);
42 }
43
44 @Test
45 public void addAndRemoveReferrer() {
46 Node n1 = new Node(new LatLon(0.0, 0.0));
47 Node n2 = new Node(new LatLon(0.0, 0.0));
48 Way w1 = new Way();
49 w1.addNode(n1);
50 w1.addNode(n2);
51 w1.addNode(n1);
52 w1.removeNode(n1);
53 dataSet.addPrimitive(n1);
54 dataSet.addPrimitive(n2);
55 dataSet.addPrimitive(w1);
56 compareReferrers(n1);
57 compareReferrers(n2, w1);
58 }
59
60 @Test
61 public void multipleReferrers() {
62 Node n1 = new Node(new LatLon(0.0, 0.0));
63 Way w1 = new Way();
64 Way w2 = new Way();
65 Relation r1 = new Relation();
66 w1.addNode(n1);
67 w2.addNode(n1);
68 r1.addMember(new RelationMember("", n1));
69 dataSet.addPrimitive(n1);
70 dataSet.addPrimitive(w1);
71 dataSet.addPrimitive(w2);
72 dataSet.addPrimitive(r1);
73 compareReferrers(n1, w1, w2, r1);
74 }
75
76 @Test
77 public void removeMemberFromRelationReferrerTest() {
78 Node n1 = new Node(new LatLon(0, 0));
79 Relation r1 = new Relation();
80 r1.addMember(new RelationMember("", n1));
81 r1.addMember(new RelationMember("", n1));
82 r1.removeMember(0);
83 dataSet.addPrimitive(n1);
84 dataSet.addPrimitive(r1);
85 compareReferrers(n1, r1);
86 }
87
88 @Test
89 public void setRelationMemberReferrerTest() {
90 Node n1 = new Node(new LatLon(0, 0));
91 Node n2 = new Node(new LatLon(0, 0));
92 Relation r1 = new Relation();
93 Relation r2 = new Relation();
94 r1.addMember(new RelationMember("", n1));
95 r2.addMember(new RelationMember("", n2));
96 r2.setMember(0, r1.getMember(0));
97 dataSet.addPrimitive(n1);
98 dataSet.addPrimitive(n2);
99 dataSet.addPrimitive(r1);
100 dataSet.addPrimitive(r2);
101 compareReferrers(n1, r1, r2);
102 compareReferrers(n2);
103 }
104
105 @Test
106 public void removePrimitiveReferrerTest() {
107 Node n1 = new Node(new LatLon(0.0, 0.0));
108 Way w1 = new Way();
109 w1.addNode(n1);
110 w1.setDeleted(true);
111 dataSet.addPrimitive(n1);
112 compareReferrers(n1);
113 w1.setDeleted(false);
114 dataSet.addPrimitive(w1);
115
116 compareReferrers(n1, w1);
117
118 Relation r1 = new Relation();
119 r1.addMember(new RelationMember("", w1));
120 r1.setDeleted(true);
121 dataSet.addPrimitive(r1);
122 compareReferrers(w1);
123 r1.setDeleted(false);
124 compareReferrers(w1, r1);
125 }
126
127 @Test
128 public void nodeFromMultipleDatasets() {
129 // n has two referrers - w1 and w2. But only w1 is returned because it is in the same dataset as n
130 Node n = new Node(new LatLon(0.0, 0.0));
131
132 Way w1 = new Way();
133 w1.addNode(n);
134 dataSet.addPrimitive(n);
135 dataSet.addPrimitive(w1);
136 new Way(w1);
137
138 Assert.assertEquals(n.getReferrers().size(), 1);
139 Assert.assertEquals(n.getReferrers().get(0), w1);
140 }
141
142 @Test(expected=DataIntegrityProblemException.class)
143 public void checkMustBeInDatasate() {
144 Node n = new Node();
145 n.getReferrers();
146 }
147
148}
Note: See TracBrowser for help on using the repository browser.