Assert that the selection is somewhat random
[Sone.git] / src / test / java / net / pterodactylus / sone / template / ListAccessorTest.java
1 package net.pterodactylus.sone.template;
2
3 import static org.hamcrest.MatcherAssert.assertThat;
4 import static org.hamcrest.Matchers.allOf;
5 import static org.hamcrest.Matchers.greaterThanOrEqualTo;
6 import static org.hamcrest.Matchers.lessThanOrEqualTo;
7 import static org.hamcrest.Matchers.nullValue;
8 import static org.hamcrest.Matchers.sameInstance;
9
10 import java.util.Arrays;
11 import java.util.Collections;
12 import java.util.List;
13
14 import net.pterodactylus.util.template.Accessor;
15
16 import org.junit.Test;
17
18 /**
19  * Unit test for {@link ListAccessorTest}.
20  *
21  * @author <a href="mailto:bombe@pterodactylus.net">David ‘Bombe’ Roden</a>
22  */
23 public class ListAccessorTest {
24
25         private final Accessor accessor = new ListAccessor();
26
27         @Test
28         public void gettingARandomElementFromAnEmptyListReturnsNull() {
29                 assertThat(accessor.get(null, Collections.emptyList(), "random"), nullValue());
30         }
31
32         @Test
33         public void gettingARandomElementFromAListOfOneWillReturnTheOneElement() {
34                 Object object = new Object();
35                 assertThat(accessor.get(null, Arrays.asList(object), "random"), sameInstance(object));
36         }
37
38         @Test
39         public void gettingRandomElementsFromAListTwoElementsWillReturnBothWithSomeProportion() {
40                 Object first = new Object();
41                 Object second = new Object();
42                 List<?> objects = Arrays.asList(first, second);
43                 int gotFirst = 0;
44                 for (int i = 0; i < 10000; i++) {
45                         if (accessor.get(null, objects, "random") == first) {
46                                 gotFirst++;
47                         }
48                 }
49                 assertThat(gotFirst, allOf(greaterThanOrEqualTo(4000), lessThanOrEqualTo(6000)));
50         }
51
52 }