Skip to content

Commit 0c12643

Browse files
committed
Update tests
1 parent cd62f54 commit 0c12643

File tree

3 files changed

+346
-1
lines changed

3 files changed

+346
-1
lines changed

build.gradle

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
buildscript {
2+
ext.kotlin_version = "1.3.0"
3+
}
4+
15
plugins {
26
id 'org.jetbrains.kotlin.jvm' version '1.3.0'
37
}
@@ -22,7 +26,8 @@ assemble.dependsOn(sourcesJar)
2226

2327
dependencies {
2428
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8"
25-
compile files("libs/kotlin-ranges-extensions-1.0-withSources.jar")
29+
implementation files("libs/kotlin-ranges-extensions-1.0-withSources.jar")
30+
testImplementation "org.jetbrains.kotlin:kotlin-test-junit:$kotlin_version"
2631
}
2732

2833
compileKotlin {
Lines changed: 167 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,167 @@
1+
2+
package vladsaif.kotlin.ranges.union
3+
4+
import org.junit.Assert.*
5+
import org.junit.Test
6+
import vladsaif.kotlin.ranges.extensions.from
7+
import java.util.*
8+
9+
10+
class IntRangeUnionTest {
11+
private fun createTestModel(): IntRangeUnion {
12+
val model = IntRangeUnion()
13+
model.clear()
14+
for (i in 0..9) {
15+
model.union(IntRange.from(i * 20, 10))
16+
}
17+
return model
18+
}
19+
20+
@Test
21+
fun `test exclude all ranges`() {
22+
val model = createTestModel()
23+
for (i in 0..9) {
24+
model.exclude(IntRange.from(i * 20, 10))
25+
}
26+
assertEquals(0, model.ranges.size)
27+
}
28+
29+
@Test
30+
fun `test exclude one unit from each range`() {
31+
val model = createTestModel()
32+
for (i in 10 downTo 0) {
33+
model.exclude(IntRange.from(i * 20 + 10, 10))
34+
}
35+
assertEquals(10, model.ranges.size)
36+
}
37+
38+
@Test
39+
fun `test exclude range that cover three ranges in model`() {
40+
val model = createTestModel()
41+
model.exclude(25 .. 89)
42+
assertEquals(7, model.ranges.size)
43+
}
44+
45+
@Test
46+
fun `test exclude part of ranges`() {
47+
val model = createTestModel()
48+
model.exclude(10.. 59)
49+
assertEquals(8, model.ranges.size)
50+
}
51+
52+
@Test
53+
fun `test add range that covers all ranges`() {
54+
val model = createTestModel()
55+
val added = -100..100000
56+
model.union(added)
57+
assertEquals(1, model.ranges.size)
58+
assertEquals(added, model.ranges[0])
59+
}
60+
61+
@Test
62+
fun `test add intersecting ranges`() {
63+
val model = IntRangeUnion()
64+
model.union(0..10)
65+
model.union(20..30)
66+
model.union(9..29)
67+
assertEquals(1, model.ranges.size)
68+
assertEquals(0..30, model.ranges[0])
69+
}
70+
71+
@Test
72+
fun `test fill spaces between ranges`() {
73+
val model = createTestModel()
74+
model.union(10..179)
75+
assertEquals(1, model.ranges.size)
76+
assertEquals(0..189, model.ranges[0])
77+
}
78+
79+
@Test
80+
fun `test add intersecting ranges incrementally`() {
81+
val model = IntRangeUnion()
82+
model.union(IntRange.from(1, 30))
83+
assertEquals(1, model.ranges.size)
84+
model.union(IntRange.from(0, 50))
85+
assertEquals(1, model.ranges.size)
86+
model.union(IntRange.from(5, 60))
87+
assertEquals(1, model.ranges.size)
88+
model.union(IntRange.from(40, 10))
89+
assertEquals(1, model.ranges.size)
90+
}
91+
92+
@Test
93+
fun `test divide range by excluding center part`() {
94+
val model = IntRangeUnion()
95+
model.union(IntRange.from(1, 30))
96+
model.exclude(IntRange.from(5, 5))
97+
model.exclude(IntRange.from(12, 5))
98+
assertEquals(3, model.ranges.size)
99+
}
100+
101+
@Test
102+
fun `test exclude outer and inner parts from range`() {
103+
val model = IntRangeUnion()
104+
model.union(IntRange.from(1, 100))
105+
model.exclude(IntRange.from(5, 5))
106+
model.exclude(IntRange.from(12, 5))
107+
model.exclude(IntRange.from(0, 3))
108+
model.exclude(IntRange.from(90, 20))
109+
assertEquals(3, model.ranges.size)
110+
}
111+
112+
@Test
113+
fun `test impose on border`() {
114+
val model = IntRangeUnion()
115+
model.union(40..60)
116+
assertEquals(30..39, model.impose(30..40))
117+
}
118+
119+
@Test
120+
fun `test impose on multiple ranges`() {
121+
val model = createTestModel()
122+
assertEquals(20..45, model.impose(45..95))
123+
}
124+
125+
@Test
126+
fun `test impose on containing range`() {
127+
val model = IntRangeUnion()
128+
model.union(10..100)
129+
assertTrue(model.impose(50..60).isEmpty())
130+
}
131+
132+
@Test
133+
fun `test impose on no ranges`() {
134+
val model = IntRangeUnion()
135+
assertEquals(model.impose(40..60), model.impose(40..60))
136+
}
137+
138+
@Test
139+
fun `test impose on empty model results in same range`() {
140+
val model = IntRangeUnion()
141+
val gen = Random(System.currentTimeMillis())
142+
for (i in 0..99) {
143+
val rand = IntRange.from(gen.nextInt() % 300, gen.nextInt() % 300)
144+
assertEquals(rand, model.impose(rand))
145+
}
146+
}
147+
148+
@Test
149+
fun `test impose cache`() {
150+
val gen = Random(System.currentTimeMillis())
151+
val ranges = mutableListOf<IntRange>()
152+
for (i in 0..99) {
153+
ranges.add(IntRange.from(gen.nextInt() % 300, gen.nextInt() % 300))
154+
}
155+
val resultsWithClear = mutableListOf<IntRange>()
156+
val resultsNoClear = mutableListOf<IntRange>()
157+
for (x in ranges) {
158+
val model = createTestModel()
159+
resultsWithClear.add(model.impose(x))
160+
}
161+
val model = createTestModel()
162+
for (x in ranges) {
163+
resultsNoClear.add(model.impose(x))
164+
}
165+
assertEquals(resultsNoClear, resultsWithClear)
166+
}
167+
}
Lines changed: 173 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,173 @@
1+
package vladsaif.kotlin.ranges.union
2+
3+
import org.junit.Test
4+
import vladsaif.kotlin.ranges.extensions.from
5+
import java.util.*
6+
import kotlin.test.assertEquals
7+
import kotlin.test.assertTrue
8+
9+
class LongRangeUnionTest {
10+
private fun createTestModel(): LongRangeUnion {
11+
val model = LongRangeUnion()
12+
for (i in 0L..9L) {
13+
model.union(LongRange.from(i * 20L, 10L))
14+
}
15+
return model
16+
}
17+
18+
@Test
19+
fun `test exclude all ranges`() {
20+
val model = createTestModel()
21+
for (i in 0L..9L) {
22+
model.exclude(LongRange.from(i * 20L, 10L))
23+
}
24+
assertEquals(0, model.ranges.size)
25+
}
26+
27+
@Test
28+
fun `test exclude one unit from each range`() {
29+
val model = createTestModel()
30+
for (i in 10L downTo 0L) {
31+
model.exclude(LongRange.from(i * 20L + 10L, 10L))
32+
}
33+
assertEquals(10, model.ranges.size)
34+
}
35+
36+
@Test
37+
fun `test exclude range that cover three ranges in model`() {
38+
val model = createTestModel()
39+
model.exclude(25L..89L)
40+
assertEquals(7, model.ranges.size)
41+
}
42+
43+
@Test
44+
fun `test exclude part of ranges`() {
45+
val model = createTestModel()
46+
model.exclude(10L..59L)
47+
assertEquals(8, model.ranges.size)
48+
}
49+
50+
@Test
51+
fun `test add range that covers all ranges`() {
52+
val model = createTestModel()
53+
val added = -100L..100000L
54+
model.union(added)
55+
assertEquals(1, model.ranges.size)
56+
assertEquals(added, model.ranges[0])
57+
}
58+
59+
@Test
60+
fun `test add intersecting ranges`() {
61+
val model = LongRangeUnion()
62+
model.union(0L..10L)
63+
model.union(20L..30L)
64+
model.union(9L..29L)
65+
assertEquals(1, model.ranges.size)
66+
assertEquals(0L..30L, model.ranges[0])
67+
}
68+
69+
@Test
70+
fun `test fill spaces between ranges`() {
71+
val model = createTestModel()
72+
model.union(10L..179L)
73+
assertEquals(1, model.ranges.size)
74+
assertEquals(0L..189L, model.ranges[0])
75+
}
76+
77+
@Test
78+
fun `test add intersecting ranges incrementally`() {
79+
val model = LongRangeUnion()
80+
model.union(LongRange.from(1L, 30L))
81+
assertEquals(1, model.ranges.size)
82+
model.union(LongRange.from(0L, 50L))
83+
assertEquals(1, model.ranges.size)
84+
model.union(LongRange.from(5L, 60L))
85+
assertEquals(1, model.ranges.size)
86+
model.union(LongRange.from(40L, 10L))
87+
assertEquals(1, model.ranges.size)
88+
}
89+
90+
@Test
91+
fun `test divide range by excluding center part`() {
92+
val model = LongRangeUnion()
93+
model.union(LongRange.from(1L, 30L))
94+
model.exclude(LongRange.from(5L, 5L))
95+
model.exclude(LongRange.from(12L, 5L))
96+
assertEquals(3, model.ranges.size)
97+
}
98+
99+
@Test
100+
fun `test exclude outer and inner parts from range`() {
101+
val model = LongRangeUnion()
102+
model.union(LongRange.from(1L, 100L))
103+
model.exclude(LongRange.from(5L, 5L))
104+
model.exclude(LongRange.from(12L, 5L))
105+
model.exclude(LongRange.from(0L, 3L))
106+
model.exclude(LongRange.from(90L, 20L))
107+
assertEquals(3, model.ranges.size)
108+
}
109+
110+
@Test
111+
fun `test impose on border`() {
112+
val model = LongRangeUnion()
113+
model.union(40L..60L)
114+
assertEquals(30L..39L, model.impose(30L..40L))
115+
}
116+
117+
@Test
118+
fun `test impose on multiple ranges`() {
119+
val model = createTestModel()
120+
assertEquals(20L..45L, model.impose(45L..95L))
121+
}
122+
123+
@Test
124+
fun `test impose on containing range`() {
125+
val model = LongRangeUnion()
126+
model.union(10L..100L)
127+
assertTrue(model.impose(50L..60L).isEmpty())
128+
}
129+
130+
@Test
131+
fun `test impose on no ranges`() {
132+
val model = LongRangeUnion()
133+
assertEquals(model.impose(40L..60L), model.impose(40L..60L))
134+
}
135+
136+
@Test
137+
fun `test impose on empty model results in same range`() {
138+
val model = LongRangeUnion()
139+
val gen = Random(System.currentTimeMillis())
140+
for (i in 0L..99L) {
141+
val rand = LongRange.from(gen.nextInt() % 300L, gen.nextInt() % 300L)
142+
assertEquals(rand, model.impose(rand))
143+
}
144+
}
145+
146+
@Test
147+
fun `test impose cache`() {
148+
val gen = Random(System.currentTimeMillis())
149+
val ranges = mutableListOf<LongRange>()
150+
for (i in 0L..99L) {
151+
ranges.add(LongRange.from(gen.nextInt() % 300L, gen.nextInt() % 300L))
152+
}
153+
val resultsWithClear = mutableListOf<LongRange>()
154+
val resultsNoClear = mutableListOf<LongRange>()
155+
for (x in ranges) {
156+
val model = createTestModel()
157+
resultsWithClear.add(model.impose(x))
158+
}
159+
val model = createTestModel()
160+
for (x in ranges) {
161+
resultsNoClear.add(model.impose(x))
162+
}
163+
assertEquals(resultsNoClear, resultsWithClear)
164+
}
165+
166+
@Test
167+
fun `test impose single dot`() {
168+
with(LongRangeUnion()) {
169+
union(11..100L)
170+
assertEquals(20, impose(110..110L).start)
171+
}
172+
}
173+
}

0 commit comments

Comments
 (0)