1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244
|
/*
* Copyright 2010-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license
* that can be found in the license/LICENSE.txt file.
*/
package ranges
import kotlin.test.*
public class URangeTest {
@Test
fun uintRange() {
val range = 9u..(-5).toUInt()
assertFalse((-4).toUInt() in range)
assertFalse((-1).toUInt() in range)
assertFalse(0u in range)
assertFalse(3u in range)
assertFalse(8u in range)
assertTrue(9u in range)
assertTrue(10u in range)
assertTrue(9000u in range)
assertTrue((-1000).toUInt() in range)
assertTrue((-6).toUInt() in range)
assertTrue((-5).toUInt() in range)
assertFalse(range.isEmpty())
assertTrue(9u in (range as ClosedRange<UInt>))
assertFalse((range as ClosedRange<UInt>).isEmpty())
assertTrue(12.toUShort() in range)
assertTrue(12.toUByte() in range)
assertTrue(12.toULong() in range)
assertFalse((-1).toULong() in range)
assertFalse((-1000).toULong() in range)
assertFalse(null in range)
assertTrue(12u as UInt? in range)
assertFalse((-3).toUInt() as UInt? in range)
val openRange = 1u until 10u
assertTrue(9u in openRange)
assertFalse(10u in openRange)
assertTrue((1u until UInt.MIN_VALUE).isEmpty())
}
@Test
fun ubyteRange() {
val range = 9.toUByte()..(-5).toUByte()
assertFalse((-4).toUByte() in range)
assertFalse((-1).toUByte() in range)
assertFalse(0.toUByte() in range)
assertFalse(3.toUByte() in range)
assertFalse(8.toUByte() in range)
assertTrue(9.toUByte() in range)
assertTrue(10.toUByte() in range)
assertTrue(111.toUByte() in range)
assertTrue((-100).toUByte() in range)
assertTrue((-6).toUByte() in range)
assertTrue((-5).toUByte() in range)
assertFalse(range.isEmpty())
assertTrue(12.toUShort() in range)
assertTrue(12.toUInt() in range)
assertTrue(12.toULong() in range)
assertFalse((-1).toUShort() in range)
assertFalse((-1000).toUInt() in range)
// assertTrue(1.toUByte() as UByte? in range) // expected not to compile
val openRange = 1.toUByte() until 10.toUByte()
assertTrue(9.toUByte() in openRange)
assertFalse(10.toUByte() in openRange)
assertTrue((UByte.MAX_VALUE until UByte.MIN_VALUE).isEmpty())
}
@Test
fun ushortRange() {
val range = 9.toUShort()..(-5).toUShort()
assertFalse((-1).toUShort() in range)
assertFalse((-4).toUShort() in range)
assertFalse(0.toUShort() in range)
assertFalse(3.toUShort() in range)
assertFalse(8.toUShort() in range)
assertTrue(9.toUShort() in range)
assertTrue(10.toUShort() in range)
assertTrue(239.toUShort() in range)
assertTrue((-1000).toUShort() in range)
assertTrue((-6).toUShort() in range)
assertTrue((-5).toUShort() in range)
assertFalse(range.isEmpty())
assertTrue(12.toUByte() in range)
assertTrue(12.toUInt() in range)
assertTrue(12.toULong() in range)
assertFalse((-1).toUInt() in range)
assertFalse((-1000).toULong() in range)
// assertTrue(1.toUShort() as UShort? in range) // expected not to compile
val openRange = 1.toUShort() until 10.toUShort()
assertTrue(9.toUShort() in openRange)
assertFalse(10.toUShort() in openRange)
assertTrue((0.toUShort() until UShort.MIN_VALUE).isEmpty())
}
@Test
fun ulongRange() {
val range = 9uL..(-5).toULong()
assertFalse((-1).toULong() in range)
assertFalse((-4).toULong() in range)
assertFalse(0uL in range)
assertFalse(3uL in range)
assertFalse(8uL in range)
assertTrue(9uL in range)
assertTrue(10uL in range)
assertTrue(10000000uL in range)
assertTrue((-10000000).toULong() in range)
assertTrue((-6).toULong() in range)
assertTrue((-5).toULong() in range)
assertFalse(range.isEmpty())
assertTrue((-5).toULong() in (range as ClosedRange<ULong>))
assertFalse((range as ClosedRange<ULong>).isEmpty())
assertTrue(12.toUByte() in range)
assertTrue(12.toUShort() in range)
assertTrue(12.toUInt() in range)
assertFalse(null in range)
assertTrue(12uL as ULong? in range)
assertFalse((-3).toULong() as ULong? in range)
val openRange = 1uL until 10uL
assertTrue(9uL in openRange)
assertFalse(10uL in openRange)
assertTrue((0uL until ULong.MIN_VALUE).isEmpty())
}
@Suppress("EmptyRange")
@Test
fun isEmpty() {
assertTrue((2u..1u).isEmpty())
assertTrue((2uL..0uL).isEmpty())
assertTrue(((-1).toUShort()..1.toUShort()).isEmpty())
assertTrue(((-5).toUByte()..0.toUByte()).isEmpty())
assertTrue((1u downTo 2u).isEmpty())
assertTrue((0uL downTo 2uL).isEmpty())
assertFalse((2u downTo 1u).isEmpty())
assertFalse((2uL downTo 0uL).isEmpty())
}
@Suppress("ReplaceAssertBooleanWithAssertEquality", "EmptyRange")
@Test
fun emptyEquals() {
assertTrue(UIntRange.EMPTY == UIntRange.EMPTY)
assertEquals(UIntRange.EMPTY, UIntRange.EMPTY)
assertEquals(0uL..42uL, 0uL..42uL)
assertEquals(0uL..4200000042000000uL, 0uL..4200000042000000uL)
assertEquals(3u downTo 0u, 3u downTo 0u)
assertEquals(2u..1u, 1u..0u)
assertEquals(2uL..1uL, 1uL..0uL)
assertEquals(2u.toUShort()..1u.toUShort(), 1u.toUShort()..0u.toUShort())
assertEquals(2u.toUByte()..1u.toUByte(), 1u.toUByte()..0u.toUByte())
assertTrue(1u downTo 2u == 2u downTo 3u)
assertTrue(0uL downTo (-1).toULong() == (-2).toULong() downTo (-1).toULong())
assertFalse(0u..1u == UIntRange.EMPTY)
}
@Suppress("EmptyRange")
@Test
fun emptyHashCode() {
assertEquals((0u..42u).hashCode(), (0u..42u).hashCode())
assertEquals(((-1).toUInt()..0u).hashCode(), UIntRange.EMPTY.hashCode())
assertEquals((2uL..1uL).hashCode(), (1uL..0uL).hashCode())
assertEquals(((-1).toUShort()..(-2).toUShort()).hashCode(), (42.toUShort()..0.toUShort()).hashCode())
assertEquals(((-1).toUByte()..(-2).toUByte()).hashCode(), (42.toUByte()..0.toUByte()).hashCode())
assertEquals((1u downTo 2u).hashCode(), (2u downTo 3U).hashCode())
assertEquals((1UL downTo 2uL).hashCode(), (2UL downTo 3UL).hashCode())
}
private fun assertFailsWithIllegalArgument(f: () -> Unit) = assertFailsWith<IllegalArgumentException> { f() }
@Test
fun illegalProgressionCreation() {
// create Progression explicitly with increment = 0
assertFailsWithIllegalArgument { UIntProgression.fromClosedRange(0u, 5u, 0) }
assertFailsWithIllegalArgument { ULongProgression.fromClosedRange(0uL, 5uL, 0) }
assertFailsWithIllegalArgument { 0u..5u step 0 }
assertFailsWithIllegalArgument { 0.toUByte()..5.toUByte() step 0 }
assertFailsWithIllegalArgument { 0.toUShort()..5.toUShort() step 0 }
assertFailsWithIllegalArgument { 0uL..5uL step 0 }
assertFailsWithIllegalArgument { (-5).toUInt() downTo 0u step 0 }
assertFailsWithIllegalArgument { (-5).toUByte() downTo 0.toUByte() step 0 }
assertFailsWithIllegalArgument { (-5).toUShort() downTo 0.toUShort() step 0 }
assertFailsWithIllegalArgument { (-5).toULong() downTo 0uL step 0L }
assertFailsWithIllegalArgument { 0u..5u step -2 }
assertFailsWithIllegalArgument { 0.toUByte()..5.toUByte() step -2 }
assertFailsWithIllegalArgument { 0.toUShort()..5.toUShort() step -2 }
assertFailsWithIllegalArgument { 0uL..5uL step -2L }
assertFailsWithIllegalArgument { (-5).toUInt() downTo 0u step -2 }
assertFailsWithIllegalArgument { (-5).toUByte() downTo 0.toUByte() step -2 }
assertFailsWithIllegalArgument { (-5).toUShort() downTo 0.toUShort() step -2 }
assertFailsWithIllegalArgument { (-5).toULong() downTo 0uL step -2L }
}
@Test
fun stepSizeIsTooLow() {
assertFailsWithIllegalArgument { UIntProgression.fromClosedRange(0u, 1u, Int.MIN_VALUE) }
assertFailsWithIllegalArgument { ULongProgression.fromClosedRange(0u, 1u, Long.MIN_VALUE) }
}
@Test
fun randomInEmptyRange() {
assertFailsWith<NoSuchElementException> { UIntRange.EMPTY.random() }
assertFailsWith<NoSuchElementException> { ULongRange.EMPTY.random() }
}
}
|