source: josm/trunk/test/unit/org/openstreetmap/josm/gui/mappaint/DividedScaleTest.java

Last change on this file was 17582, checked in by simon04, 3 years ago

see #20613 - Avoid heap allocations in DividedScale.getWithRange

4.74% in AbstractMapRendererPerformanceTestParent#testCity amount to Range from DividedScale.getWithRange

File size: 4.3 KB
Line 
1// License: GPL. For details, see LICENSE file.
2package org.openstreetmap.josm.gui.mappaint;
3
4import org.junit.jupiter.api.Test;
5import org.openstreetmap.josm.tools.Pair;
6
7import static org.junit.jupiter.api.Assertions.assertEquals;
8import static org.junit.jupiter.api.Assertions.assertNull;
9import static org.junit.jupiter.api.Assertions.assertThrows;
10
11/**
12 * Unit tests of {@link DividedScale} class.
13 */
14class DividedScaleTest {
15
16 /**
17 * Test {@link DividedScale#get}
18 */
19 @Test
20 void testGetEmpty() {
21 DividedScale<String> scale = new DividedScale<>();
22 assertThrows(IllegalArgumentException.class, () -> scale.get(0.));
23 assertNull(scale.get(0.01));
24 assertNull(scale.get(1.));
25 assertNull(scale.get(4.));
26 assertNull(scale.get(6.));
27 assertNull(scale.get(8.));
28 assertNull(scale.get(100.));
29 }
30
31 /**
32 * Test {@link DividedScale#put} and {@link DividedScale#get}
33 */
34 @Test
35 void testGetFoo() {
36 DividedScale<String> scale = new DividedScale<String>()
37 .put("foo", new Range(4., 8.));
38 assertNull(scale.get(1.));
39 assertNull(scale.get(4.));
40 assertEquals("foo", scale.get(4.01));
41 assertEquals("foo", scale.get(6.));
42 assertEquals("foo", scale.get(8.));
43 assertNull(scale.get(8.01));
44 assertNull(scale.get(100.));
45 assertEquals(scale, new DividedScale<>(scale));
46 }
47
48 /**
49 * Test {@link DividedScale#put} and {@link DividedScale#getWithRange}
50 */
51 @Test
52 void testGetWithRangeFoo() {
53 DividedScale<String> scale = new DividedScale<String>()
54 .put("foo", new Range(4., 8.));
55 Pair<String, Range> pair = scale.getWithRange(6.);
56 assertEquals("foo", pair.a);
57 assertEquals(new Range(4., 8.), pair.b);
58 }
59
60 /**
61 * Test {@link DividedScale#put} and {@link DividedScale#get}
62 */
63 @Test
64 void testGetFooBar() {
65 DividedScale<String> scale = new DividedScale<String>()
66 .put("foo", new Range(4., 8.))
67 .put("bar", new Range(2., 3.));
68 assertNull(scale.get(2.));
69 assertEquals("bar", scale.get(2.01));
70 assertEquals("bar", scale.get(3.));
71 assertNull(scale.get(3.01));
72 assertNull(scale.get(4.));
73 assertEquals("foo", scale.get(4.01));
74 assertEquals("foo", scale.get(8.));
75 assertNull(scale.get(8.01));
76 }
77
78 /**
79 * Test {@link DividedScale#put} and {@link DividedScale#get}
80 */
81 @Test
82 void testGetFooBarBaz() {
83 DividedScale<String> scale = new DividedScale<String>()
84 .put("foo", new Range(4., 8.))
85 .put("bar", new Range(2., 3.))
86 .put("baz", new Range(3., 4.));
87 assertNull(scale.get(2.));
88 assertEquals("bar", scale.get(2.01));
89 assertEquals("bar", scale.get(3.));
90 assertEquals("baz", scale.get(3.01));
91 assertEquals("baz", scale.get(4.));
92 assertEquals("foo", scale.get(4.01));
93 assertEquals("foo", scale.get(8.));
94 assertNull(scale.get(8.01));
95 }
96
97 /**
98 * Test {@link DividedScale#put}
99 */
100 @Test
101 void testPutSingleSubrange1() {
102 DividedScale<String> scale = new DividedScale<String>()
103 .put("foo", new Range(4., 8.));
104 Exception ex = assertThrows(DividedScale.RangeViolatedError.class, () -> scale.put("bar", new Range(4., 9.)));
105 assertEquals("the new range must be within a single subrange", ex.getMessage());
106 }
107
108 /**
109 * Test {@link DividedScale#put}
110 */
111 @Test
112 void testPutSingleSubrangeNoData() {
113 DividedScale<String> scale = new DividedScale<String>()
114 .put("foo", new Range(4., 8.));
115 Exception ex = assertThrows(DividedScale.RangeViolatedError.class, () -> scale.put("bar", new Range(4., 5.)));
116 assertEquals("the new range must be within a subrange that has no data", ex.getMessage());
117 }
118
119 /**
120 * Test {@link DividedScale#put}
121 */
122 @Test
123 void testPutSingleSubrange2() {
124 DividedScale<String> scale = new DividedScale<String>()
125 .put("foo", new Range(4., 8.));
126 Exception ex = assertThrows(DividedScale.RangeViolatedError.class, () -> scale.put("bar", new Range(2., 5.)));
127 assertEquals("the new range must be within a single subrange", ex.getMessage());
128 }
129}
Note: See TracBrowser for help on using the repository browser.