1 /* 2 * Copyright (C) 2008 The Guava Authors 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package com.google.common.primitives; 18 19 import static com.google.common.truth.Truth.assertThat; 20 import static com.google.common.truth.Truth.assertWithMessage; 21 22 import com.google.common.annotations.GwtCompatible; 23 import com.google.common.annotations.GwtIncompatible; 24 import com.google.common.annotations.J2ktIncompatible; 25 import com.google.common.collect.testing.Helpers; 26 import com.google.common.testing.NullPointerTester; 27 import com.google.common.testing.SerializableTester; 28 import java.util.Arrays; 29 import java.util.Collection; 30 import java.util.Collections; 31 import java.util.Comparator; 32 import java.util.List; 33 import junit.framework.TestCase; 34 import org.checkerframework.checker.nullness.qual.Nullable; 35 36 /** 37 * Unit test for {@link Booleans}. 38 * 39 * @author Kevin Bourrillion 40 */ 41 @GwtCompatible(emulated = true) 42 @ElementTypesAreNonnullByDefault 43 public class BooleansTest extends TestCase { 44 private static final boolean[] EMPTY = {}; 45 private static final boolean[] ARRAY_FALSE = {false}; 46 private static final boolean[] ARRAY_TRUE = {true}; 47 private static final boolean[] ARRAY_FALSE_FALSE = {false, false}; 48 private static final boolean[] ARRAY_FALSE_TRUE = {false, true}; 49 50 private static final boolean[] VALUES = {false, true}; 51 52 @J2ktIncompatible // TODO(b/285538920): Fix and enable. testHashCode()53 public void testHashCode() { 54 assertThat(Booleans.hashCode(true)).isEqualTo(Boolean.TRUE.hashCode()); 55 assertThat(Booleans.hashCode(false)).isEqualTo(Boolean.FALSE.hashCode()); 56 } 57 testTrueFirst()58 public void testTrueFirst() { 59 assertThat(Booleans.trueFirst().compare(true, true)).isEqualTo(0); 60 assertThat(Booleans.trueFirst().compare(false, false)).isEqualTo(0); 61 assertThat(Booleans.trueFirst().compare(true, false)).isLessThan(0); 62 assertThat(Booleans.trueFirst().compare(false, true)).isGreaterThan(0); 63 } 64 testFalseFirst()65 public void testFalseFirst() { 66 assertThat(Booleans.falseFirst().compare(true, true)).isEqualTo(0); 67 assertThat(Booleans.falseFirst().compare(false, false)).isEqualTo(0); 68 assertThat(Booleans.falseFirst().compare(false, true)).isLessThan(0); 69 assertThat(Booleans.falseFirst().compare(true, false)).isGreaterThan(0); 70 } 71 testCompare()72 public void testCompare() { 73 for (boolean x : VALUES) { 74 for (boolean y : VALUES) { 75 // note: spec requires only that the sign is the same 76 assertWithMessage(x + ", " + y) 77 .that(Booleans.compare(x, y)) 78 .isEqualTo(Boolean.valueOf(x).compareTo(y)); 79 } 80 } 81 } 82 testContains()83 public void testContains() { 84 assertThat(Booleans.contains(EMPTY, false)).isFalse(); 85 assertThat(Booleans.contains(ARRAY_FALSE, true)).isFalse(); 86 assertThat(Booleans.contains(ARRAY_FALSE, false)).isTrue(); 87 assertThat(Booleans.contains(ARRAY_FALSE_TRUE, false)).isTrue(); 88 assertThat(Booleans.contains(ARRAY_FALSE_TRUE, true)).isTrue(); 89 } 90 testIndexOf()91 public void testIndexOf() { 92 assertThat(Booleans.indexOf(EMPTY, ARRAY_FALSE)).isEqualTo(-1); 93 assertThat(Booleans.indexOf(ARRAY_FALSE, ARRAY_FALSE_TRUE)).isEqualTo(-1); 94 assertThat(Booleans.indexOf(ARRAY_FALSE_FALSE, ARRAY_FALSE)).isEqualTo(0); 95 assertThat(Booleans.indexOf(ARRAY_FALSE, ARRAY_FALSE)).isEqualTo(0); 96 assertThat(Booleans.indexOf(ARRAY_FALSE_TRUE, ARRAY_FALSE)).isEqualTo(0); 97 assertThat(Booleans.indexOf(ARRAY_FALSE_TRUE, ARRAY_TRUE)).isEqualTo(1); 98 assertThat(Booleans.indexOf(ARRAY_TRUE, new boolean[0])).isEqualTo(0); 99 } 100 testIndexOf_arrays()101 public void testIndexOf_arrays() { 102 assertThat(Booleans.indexOf(EMPTY, false)).isEqualTo(-1); 103 assertThat(Booleans.indexOf(ARRAY_FALSE, true)).isEqualTo(-1); 104 assertThat(Booleans.indexOf(ARRAY_FALSE_FALSE, true)).isEqualTo(-1); 105 assertThat(Booleans.indexOf(ARRAY_FALSE, false)).isEqualTo(0); 106 assertThat(Booleans.indexOf(ARRAY_FALSE_TRUE, false)).isEqualTo(0); 107 assertThat(Booleans.indexOf(ARRAY_FALSE_TRUE, true)).isEqualTo(1); 108 assertThat(Booleans.indexOf(new boolean[] {false, false, true}, true)).isEqualTo(2); 109 } 110 testLastIndexOf()111 public void testLastIndexOf() { 112 assertThat(Booleans.lastIndexOf(EMPTY, false)).isEqualTo(-1); 113 assertThat(Booleans.lastIndexOf(ARRAY_FALSE, true)).isEqualTo(-1); 114 assertThat(Booleans.lastIndexOf(ARRAY_FALSE_FALSE, true)).isEqualTo(-1); 115 assertThat(Booleans.lastIndexOf(ARRAY_FALSE, false)).isEqualTo(0); 116 assertThat(Booleans.lastIndexOf(ARRAY_FALSE_TRUE, false)).isEqualTo(0); 117 assertThat(Booleans.lastIndexOf(ARRAY_FALSE_TRUE, true)).isEqualTo(1); 118 assertThat(Booleans.lastIndexOf(new boolean[] {false, true, true}, true)).isEqualTo(2); 119 } 120 testConcat()121 public void testConcat() { 122 assertThat(Booleans.concat()).isEqualTo(EMPTY); 123 assertThat(Booleans.concat(EMPTY)).isEqualTo(EMPTY); 124 assertThat(Booleans.concat(EMPTY, EMPTY, EMPTY)).isEqualTo(EMPTY); 125 assertThat(Booleans.concat(ARRAY_FALSE)).isEqualTo(ARRAY_FALSE); 126 assertThat(Booleans.concat(ARRAY_FALSE)).isNotSameInstanceAs(ARRAY_FALSE); 127 assertThat(Booleans.concat(EMPTY, ARRAY_FALSE, EMPTY)).isEqualTo(ARRAY_FALSE); 128 assertThat(Booleans.concat(ARRAY_FALSE, ARRAY_FALSE, ARRAY_FALSE)) 129 .isEqualTo(new boolean[] {false, false, false}); 130 assertThat(Booleans.concat(ARRAY_FALSE, ARRAY_FALSE_TRUE)) 131 .isEqualTo(new boolean[] {false, false, true}); 132 } 133 testEnsureCapacity()134 public void testEnsureCapacity() { 135 assertThat(Booleans.ensureCapacity(EMPTY, 0, 1)).isSameInstanceAs(EMPTY); 136 assertThat(Booleans.ensureCapacity(ARRAY_FALSE, 0, 1)).isSameInstanceAs(ARRAY_FALSE); 137 assertThat(Booleans.ensureCapacity(ARRAY_FALSE, 1, 1)).isSameInstanceAs(ARRAY_FALSE); 138 assertThat(Booleans.ensureCapacity(new boolean[] {true}, 2, 1)) 139 .isEqualTo(new boolean[] {true, false, false}); 140 } 141 testEnsureCapacity_fail()142 public void testEnsureCapacity_fail() { 143 try { 144 Booleans.ensureCapacity(ARRAY_FALSE, -1, 1); 145 fail(); 146 } catch (IllegalArgumentException expected) { 147 } 148 try { 149 // notice that this should even fail when no growth was needed 150 Booleans.ensureCapacity(ARRAY_FALSE, 1, -1); 151 fail(); 152 } catch (IllegalArgumentException expected) { 153 } 154 } 155 testJoin()156 public void testJoin() { 157 assertThat(Booleans.join(",", EMPTY)).isEmpty(); 158 assertThat(Booleans.join(",", ARRAY_FALSE)).isEqualTo("false"); 159 assertThat(Booleans.join(",", false, true)).isEqualTo("false,true"); 160 assertThat(Booleans.join("", false, true, false)).isEqualTo("falsetruefalse"); 161 } 162 testLexicographicalComparator()163 public void testLexicographicalComparator() { 164 List<boolean[]> ordered = 165 Arrays.asList( 166 new boolean[] {}, 167 new boolean[] {false}, 168 new boolean[] {false, false}, 169 new boolean[] {false, true}, 170 new boolean[] {true}, 171 new boolean[] {true, false}, 172 new boolean[] {true, true}, 173 new boolean[] {true, true, true}); 174 175 Comparator<boolean[]> comparator = Booleans.lexicographicalComparator(); 176 Helpers.testComparator(comparator, ordered); 177 } 178 179 @J2ktIncompatible 180 @GwtIncompatible // SerializableTester testLexicographicalComparatorSerializable()181 public void testLexicographicalComparatorSerializable() { 182 Comparator<boolean[]> comparator = Booleans.lexicographicalComparator(); 183 assertThat(SerializableTester.reserialize(comparator)).isSameInstanceAs(comparator); 184 } 185 testReverse()186 public void testReverse() { 187 testReverse(new boolean[] {}, new boolean[] {}); 188 testReverse(new boolean[] {true}, new boolean[] {true}); 189 testReverse(new boolean[] {false, true}, new boolean[] {true, false}); 190 testReverse(new boolean[] {true, false, false}, new boolean[] {false, false, true}); 191 testReverse(new boolean[] {true, true, false, false}, new boolean[] {false, false, true, true}); 192 } 193 testReverse(boolean[] input, boolean[] expectedOutput)194 private static void testReverse(boolean[] input, boolean[] expectedOutput) { 195 input = Arrays.copyOf(input, input.length); 196 Booleans.reverse(input); 197 assertThat(input).isEqualTo(expectedOutput); 198 } 199 testReverse( boolean[] input, int fromIndex, int toIndex, boolean[] expectedOutput)200 private static void testReverse( 201 boolean[] input, int fromIndex, int toIndex, boolean[] expectedOutput) { 202 input = Arrays.copyOf(input, input.length); 203 Booleans.reverse(input, fromIndex, toIndex); 204 assertThat(input).isEqualTo(expectedOutput); 205 } 206 testReverseIndexed()207 public void testReverseIndexed() { 208 testReverse(new boolean[] {}, 0, 0, new boolean[] {}); 209 testReverse(new boolean[] {true}, 0, 1, new boolean[] {true}); 210 testReverse(new boolean[] {false, true}, 0, 2, new boolean[] {true, false}); 211 testReverse(new boolean[] {true, false, false}, 0, 2, new boolean[] {false, true, false}); 212 testReverse(new boolean[] {true, false, false}, 0, 1, new boolean[] {true, false, false}); 213 testReverse( 214 new boolean[] {true, true, false, false}, 1, 3, new boolean[] {true, false, true, false}); 215 } 216 testRotate(boolean[] input, int distance, boolean[] expectedOutput)217 private static void testRotate(boolean[] input, int distance, boolean[] expectedOutput) { 218 input = Arrays.copyOf(input, input.length); 219 Booleans.rotate(input, distance); 220 assertThat(input).isEqualTo(expectedOutput); 221 } 222 testRotate( boolean[] input, int distance, int fromIndex, int toIndex, boolean[] expectedOutput)223 private static void testRotate( 224 boolean[] input, int distance, int fromIndex, int toIndex, boolean[] expectedOutput) { 225 input = Arrays.copyOf(input, input.length); 226 Booleans.rotate(input, distance, fromIndex, toIndex); 227 assertThat(input).isEqualTo(expectedOutput); 228 } 229 testRotate()230 public void testRotate() { 231 testRotate(new boolean[] {}, -1, new boolean[] {}); 232 testRotate(new boolean[] {}, 0, new boolean[] {}); 233 testRotate(new boolean[] {}, 1, new boolean[] {}); 234 235 testRotate(new boolean[] {true}, -2, new boolean[] {true}); 236 testRotate(new boolean[] {true}, -1, new boolean[] {true}); 237 testRotate(new boolean[] {true}, 0, new boolean[] {true}); 238 testRotate(new boolean[] {true}, 1, new boolean[] {true}); 239 testRotate(new boolean[] {true}, 2, new boolean[] {true}); 240 241 testRotate(new boolean[] {true, false}, -3, new boolean[] {false, true}); 242 testRotate(new boolean[] {true, false}, -1, new boolean[] {false, true}); 243 testRotate(new boolean[] {true, false}, -2, new boolean[] {true, false}); 244 testRotate(new boolean[] {true, false}, 0, new boolean[] {true, false}); 245 testRotate(new boolean[] {true, false}, 1, new boolean[] {false, true}); 246 testRotate(new boolean[] {true, false}, 2, new boolean[] {true, false}); 247 testRotate(new boolean[] {true, false}, 3, new boolean[] {false, true}); 248 249 testRotate(new boolean[] {true, false, true}, -5, new boolean[] {true, true, false}); 250 testRotate(new boolean[] {true, false, true}, -4, new boolean[] {false, true, true}); 251 testRotate(new boolean[] {true, false, true}, -3, new boolean[] {true, false, true}); 252 testRotate(new boolean[] {true, false, true}, -2, new boolean[] {true, true, false}); 253 testRotate(new boolean[] {true, false, true}, -1, new boolean[] {false, true, true}); 254 testRotate(new boolean[] {true, false, true}, 0, new boolean[] {true, false, true}); 255 testRotate(new boolean[] {true, false, true}, 1, new boolean[] {true, true, false}); 256 testRotate(new boolean[] {true, false, true}, 2, new boolean[] {false, true, true}); 257 testRotate(new boolean[] {true, false, true}, 3, new boolean[] {true, false, true}); 258 testRotate(new boolean[] {true, false, true}, 4, new boolean[] {true, true, false}); 259 testRotate(new boolean[] {true, false, true}, 5, new boolean[] {false, true, true}); 260 261 testRotate( 262 new boolean[] {true, false, true, false}, -9, new boolean[] {false, true, false, true}); 263 testRotate( 264 new boolean[] {true, false, true, false}, -5, new boolean[] {false, true, false, true}); 265 testRotate( 266 new boolean[] {true, false, true, false}, -1, new boolean[] {false, true, false, true}); 267 testRotate( 268 new boolean[] {true, false, true, false}, 0, new boolean[] {true, false, true, false}); 269 testRotate( 270 new boolean[] {true, false, true, false}, 1, new boolean[] {false, true, false, true}); 271 testRotate( 272 new boolean[] {true, false, true, false}, 5, new boolean[] {false, true, false, true}); 273 testRotate( 274 new boolean[] {true, false, true, false}, 9, new boolean[] {false, true, false, true}); 275 276 testRotate( 277 new boolean[] {true, false, true, false, true}, 278 -6, 279 new boolean[] {false, true, false, true, true}); 280 testRotate( 281 new boolean[] {true, false, true, false, true}, 282 -4, 283 new boolean[] {true, true, false, true, false}); 284 testRotate( 285 new boolean[] {true, false, true, false, true}, 286 -3, 287 new boolean[] {false, true, true, false, true}); 288 testRotate( 289 new boolean[] {true, false, true, false, true}, 290 -1, 291 new boolean[] {false, true, false, true, true}); 292 testRotate( 293 new boolean[] {true, false, true, false, true}, 294 0, 295 new boolean[] {true, false, true, false, true}); 296 testRotate( 297 new boolean[] {true, false, true, false, true}, 298 1, 299 new boolean[] {true, true, false, true, false}); 300 testRotate( 301 new boolean[] {true, false, true, false, true}, 302 3, 303 new boolean[] {true, false, true, true, false}); 304 testRotate( 305 new boolean[] {true, false, true, false, true}, 306 4, 307 new boolean[] {false, true, false, true, true}); 308 testRotate( 309 new boolean[] {true, false, true, false, true}, 310 6, 311 new boolean[] {true, true, false, true, false}); 312 } 313 testRotateIndexed()314 public void testRotateIndexed() { 315 testRotate(new boolean[] {}, 0, 0, 0, new boolean[] {}); 316 317 testRotate(new boolean[] {true}, 0, 0, 1, new boolean[] {true}); 318 testRotate(new boolean[] {true}, 1, 0, 1, new boolean[] {true}); 319 testRotate(new boolean[] {true}, 1, 1, 1, new boolean[] {true}); 320 321 // Rotate the central 5 elements, leaving the ends as-is 322 testRotate( 323 new boolean[] {false, true, false, true, false, true, false}, 324 -6, 325 1, 326 6, 327 new boolean[] {false, false, true, false, true, true, false}); 328 testRotate( 329 new boolean[] {false, true, false, true, false, true, false}, 330 -1, 331 1, 332 6, 333 new boolean[] {false, false, true, false, true, true, false}); 334 testRotate( 335 new boolean[] {false, true, false, true, false, true, false}, 336 0, 337 1, 338 6, 339 new boolean[] {false, true, false, true, false, true, false}); 340 testRotate( 341 new boolean[] {false, true, false, true, false, true, false}, 342 5, 343 1, 344 6, 345 new boolean[] {false, true, false, true, false, true, false}); 346 testRotate( 347 new boolean[] {false, true, false, true, false, true, false}, 348 14, 349 1, 350 6, 351 new boolean[] {false, false, true, false, true, true, false}); 352 353 // Rotate the first three elements 354 testRotate( 355 new boolean[] {false, true, false, true, false, true, false}, 356 -2, 357 0, 358 3, 359 new boolean[] {false, false, true, true, false, true, false}); 360 testRotate( 361 new boolean[] {false, true, false, true, false, true, false}, 362 -1, 363 0, 364 3, 365 new boolean[] {true, false, false, true, false, true, false}); 366 testRotate( 367 new boolean[] {false, true, false, true, false, true, false}, 368 0, 369 0, 370 3, 371 new boolean[] {false, true, false, true, false, true, false}); 372 testRotate( 373 new boolean[] {false, true, false, true, false, true, false}, 374 1, 375 0, 376 3, 377 new boolean[] {false, false, true, true, false, true, false}); 378 testRotate( 379 new boolean[] {false, true, false, true, false, true, false}, 380 2, 381 0, 382 3, 383 new boolean[] {true, false, false, true, false, true, false}); 384 385 // Rotate the last four elements 386 testRotate( 387 new boolean[] {false, true, false, true, false, true, false}, 388 -6, 389 3, 390 7, 391 new boolean[] {false, true, false, true, false, true, false}); 392 testRotate( 393 new boolean[] {false, true, false, true, false, true, false}, 394 -5, 395 3, 396 7, 397 new boolean[] {false, true, false, false, true, false, true}); 398 testRotate( 399 new boolean[] {false, true, false, true, false, true, false}, 400 -4, 401 3, 402 7, 403 new boolean[] {false, true, false, true, false, true, false}); 404 testRotate( 405 new boolean[] {false, true, false, true, false, true, false}, 406 -3, 407 3, 408 7, 409 new boolean[] {false, true, false, false, true, false, true}); 410 testRotate( 411 new boolean[] {false, true, false, true, false, true, false}, 412 -2, 413 3, 414 7, 415 new boolean[] {false, true, false, true, false, true, false}); 416 testRotate( 417 new boolean[] {false, true, false, true, false, true, false}, 418 -1, 419 3, 420 7, 421 new boolean[] {false, true, false, false, true, false, true}); 422 testRotate( 423 new boolean[] {false, true, false, true, false, true, false}, 424 0, 425 3, 426 7, 427 new boolean[] {false, true, false, true, false, true, false}); 428 testRotate( 429 new boolean[] {false, true, false, true, false, true, false}, 430 1, 431 3, 432 7, 433 new boolean[] {false, true, false, false, true, false, true}); 434 testRotate( 435 new boolean[] {false, true, false, true, false, true, false}, 436 2, 437 3, 438 7, 439 new boolean[] {false, true, false, true, false, true, false}); 440 testRotate( 441 new boolean[] {false, true, false, true, false, true, false}, 442 3, 443 3, 444 7, 445 new boolean[] {false, true, false, false, true, false, true}); 446 } 447 testToArray()448 public void testToArray() { 449 // need explicit type parameter to avoid javac warning!? 450 List<Boolean> none = Arrays.<Boolean>asList(); 451 assertThat(Booleans.toArray(none)).isEqualTo(EMPTY); 452 453 List<Boolean> one = Arrays.asList(false); 454 assertThat(Booleans.toArray(one)).isEqualTo(ARRAY_FALSE); 455 456 boolean[] array = {false, false, true}; 457 458 List<Boolean> three = Arrays.asList(false, false, true); 459 assertThat(Booleans.toArray(three)).isEqualTo(array); 460 461 assertThat(Booleans.toArray(Booleans.asList(array))).isEqualTo(array); 462 } 463 testToArray_threadSafe()464 public void testToArray_threadSafe() { 465 // Only for booleans, we lengthen VALUES 466 boolean[] VALUES = BooleansTest.VALUES; 467 VALUES = Booleans.concat(VALUES, VALUES); 468 469 for (int delta : new int[] {+1, 0, -1}) { 470 for (int i = 0; i < VALUES.length; i++) { 471 List<Boolean> list = Booleans.asList(VALUES).subList(0, i); 472 Collection<Boolean> misleadingSize = Helpers.misleadingSizeCollection(delta); 473 misleadingSize.addAll(list); 474 boolean[] arr = Booleans.toArray(misleadingSize); 475 assertThat(arr).hasLength(i); 476 for (int j = 0; j < i; j++) { 477 assertThat(arr[j]).isEqualTo(VALUES[j]); 478 } 479 } 480 } 481 } 482 testToArray_withNull()483 public void testToArray_withNull() { 484 List<@Nullable Boolean> list = Arrays.asList(false, true, null); 485 try { 486 Booleans.toArray(list); 487 fail(); 488 } catch (NullPointerException expected) { 489 } 490 } 491 492 @SuppressWarnings({"CollectionIsEmptyTruth", "CollectionIsNotEmptyTruth"}) testAsListIsEmpty()493 public void testAsListIsEmpty() { 494 assertThat(Booleans.asList(EMPTY).isEmpty()).isTrue(); 495 assertThat(Booleans.asList(ARRAY_FALSE).isEmpty()).isFalse(); 496 } 497 498 @SuppressWarnings("CollectionSizeTruth") testAsListSize()499 public void testAsListSize() { 500 assertThat(Booleans.asList(EMPTY).size()).isEqualTo(0); 501 assertThat(Booleans.asList(ARRAY_FALSE).size()).isEqualTo(1); 502 assertThat(Booleans.asList(ARRAY_FALSE_TRUE).size()).isEqualTo(2); 503 } 504 505 @SuppressWarnings("BooleanArrayIndexOfBoolean") testAsListIndexOf()506 public void testAsListIndexOf() { 507 assertThat(Booleans.asList(EMPTY).indexOf((Object) "wrong type")).isEqualTo(-1); 508 assertThat(Booleans.asList(EMPTY).indexOf(true)).isEqualTo(-1); 509 assertThat(Booleans.asList(ARRAY_FALSE).indexOf(true)).isEqualTo(-1); 510 assertThat(Booleans.asList(ARRAY_FALSE).indexOf(false)).isEqualTo(0); 511 assertThat(Booleans.asList(ARRAY_FALSE_TRUE).indexOf(true)).isEqualTo(1); 512 } 513 testAsListLastIndexOf()514 public void testAsListLastIndexOf() { 515 assertThat(Booleans.asList(EMPTY).lastIndexOf((Object) "wrong type")).isEqualTo(-1); 516 assertThat(Booleans.asList(EMPTY).lastIndexOf(true)).isEqualTo(-1); 517 assertThat(Booleans.asList(ARRAY_FALSE).lastIndexOf(true)).isEqualTo(-1); 518 assertThat(Booleans.asList(ARRAY_FALSE_TRUE).lastIndexOf(true)).isEqualTo(1); 519 assertThat(Booleans.asList(ARRAY_FALSE_FALSE).lastIndexOf(false)).isEqualTo(1); 520 } 521 522 @SuppressWarnings({"BooleanArrayContainsBoolean", "CollectionDoesNotContainTruth"}) testAsListContains()523 public void testAsListContains() { 524 assertThat(Booleans.asList(EMPTY).contains((Object) "wrong type")).isFalse(); 525 assertThat(Booleans.asList(EMPTY).contains(true)).isFalse(); 526 assertThat(Booleans.asList(ARRAY_FALSE).contains(true)).isFalse(); 527 assertThat(Booleans.asList(ARRAY_TRUE).contains(true)).isTrue(); 528 assertThat(Booleans.asList(ARRAY_FALSE_TRUE).contains(false)).isTrue(); 529 assertThat(Booleans.asList(ARRAY_FALSE_TRUE).contains(true)).isTrue(); 530 } 531 testAsListEquals()532 public void testAsListEquals() { 533 assertThat(Booleans.asList(EMPTY).equals(Collections.emptyList())).isTrue(); 534 assertThat(Booleans.asList(ARRAY_FALSE).equals(Booleans.asList(ARRAY_FALSE))).isTrue(); 535 @SuppressWarnings("EqualsIncompatibleType") 536 boolean listEqualsArray = Booleans.asList(ARRAY_FALSE).equals(ARRAY_FALSE); 537 assertThat(listEqualsArray).isFalse(); 538 assertThat(Booleans.asList(ARRAY_FALSE).equals(null)).isFalse(); 539 assertThat(Booleans.asList(ARRAY_FALSE).equals(Booleans.asList(ARRAY_FALSE_TRUE))).isFalse(); 540 assertThat(Booleans.asList(ARRAY_FALSE_FALSE).equals(Booleans.asList(ARRAY_FALSE_TRUE))) 541 .isFalse(); 542 assertEquals(1, Booleans.asList(ARRAY_FALSE_TRUE).lastIndexOf(true)); 543 List<Boolean> reference = Booleans.asList(ARRAY_FALSE); 544 assertEquals(Booleans.asList(ARRAY_FALSE), reference); 545 // Explicitly call `equals`; `assertEquals` might return fast 546 assertThat(reference.equals(reference)).isTrue(); 547 } 548 testAsListHashcode()549 public void testAsListHashcode() { 550 assertThat(Booleans.asList(EMPTY).hashCode()).isEqualTo(1); 551 assertThat(Booleans.asList(ARRAY_FALSE).hashCode()) 552 .isEqualTo(Booleans.asList(ARRAY_FALSE).hashCode()); 553 List<Boolean> reference = Booleans.asList(ARRAY_FALSE); 554 assertThat(reference.hashCode()).isEqualTo(Booleans.asList(ARRAY_FALSE).hashCode()); 555 } 556 testAsListToString()557 public void testAsListToString() { 558 assertThat(Booleans.asList(ARRAY_FALSE).toString()).isEqualTo("[false]"); 559 assertThat(Booleans.asList(ARRAY_FALSE_TRUE).toString()).isEqualTo("[false, true]"); 560 } 561 testAsListSet()562 public void testAsListSet() { 563 List<Boolean> list = Booleans.asList(ARRAY_FALSE); 564 assertThat(list.set(0, true)).isFalse(); 565 assertThat(list.set(0, false)).isTrue(); 566 try { 567 list.set(0, null); 568 fail(); 569 } catch (NullPointerException expected) { 570 } 571 try { 572 list.set(1, true); 573 fail(); 574 } catch (IndexOutOfBoundsException expected) { 575 } 576 } 577 testAsListCanonicalValues()578 public void testAsListCanonicalValues() { 579 List<Boolean> list = Booleans.asList(true, false); 580 assertThat(list.get(0)).isSameInstanceAs(true); 581 assertThat(list.get(1)).isSameInstanceAs(false); 582 @SuppressWarnings("deprecation") 583 Boolean anotherTrue = new Boolean(true); 584 @SuppressWarnings("deprecation") 585 Boolean anotherFalse = new Boolean(false); 586 list.set(0, anotherTrue); 587 assertThat(list.get(0)).isSameInstanceAs(true); 588 list.set(1, anotherFalse); 589 assertThat(list.get(1)).isSameInstanceAs(false); 590 } 591 testCountTrue()592 public void testCountTrue() { 593 assertThat(Booleans.countTrue()).isEqualTo(0); 594 assertThat(Booleans.countTrue(false)).isEqualTo(0); 595 assertThat(Booleans.countTrue(true)).isEqualTo(1); 596 assertThat(Booleans.countTrue(false, true, false, true, false, true)).isEqualTo(3); 597 assertThat(Booleans.countTrue(false, false, true, false, false)).isEqualTo(1); 598 } 599 600 @J2ktIncompatible 601 @GwtIncompatible // NullPointerTester testNulls()602 public void testNulls() { 603 new NullPointerTester().testAllPublicStaticMethods(Booleans.class); 604 } 605 } 606