@Override public T getValue() { return _nodes.get(_index); }
/** * Swap the elements at the two positions. * * @param i the index of the first element. * @param j the index of the second element. * @throws IndexOutOfBoundsException if {@code i < 0 || j >= length()}. */ public default void swap(final int i, final int j) { final T temp = get(i); set(i, get(j)); set(j, temp); }
@Test public void equals() { final MSeq<T> same = newEqualObjects(5); final Object that = same.get(0); for (int i = 1; i < same.length(); ++i) { final Object other = same.get(i); Assert.assertEquals(other, other); Assert.assertEquals(other, that); Assert.assertEquals(that, other); Assert.assertEquals(that.hashCode(), other.hashCode()); } }
@Test(dataProvider = "sequences") public void setAll(final MSeq<Integer> seq) { final long seed = random.seed(); final Random random = new Random(seed); final Integer v = random.nextInt(); seq.fill(() -> v); random.setSeed(seed); final Integer value = random.nextInt(); for (int i = 0; i < seq.length(); ++i) { Assert.assertEquals(seq.get(i), value); } }
@Test(dataProvider = "subSequences") public void immutable(final Named<MSeq<Integer>> parameter) { final MSeq<Integer> seq = parameter.value; final Integer second = seq.get(1); final ISeq<Integer> iseq = seq.toISeq(); Assert.assertEquals(iseq.get(1), second); final Integer newSecond = -22; seq.set(1, newSecond); Assert.assertEquals(seq.get(1), newSecond); Assert.assertEquals(iseq.get(1), second); }
@Test(dataProvider = "subSequences") public void subSeqImmutable(final Named<MSeq<Integer>> parameter) { final MSeq<Integer> seq = parameter.value; final Integer second = seq.get(1); final MSeq<Integer> slice = seq.subSeq(1); Assert.assertEquals(slice.get(0), second); final ISeq<Integer> islice = slice.toISeq(); Assert.assertEquals(islice.get(0), second); final Integer newSecond = -22; seq.set(1, newSecond); Assert.assertEquals(slice.get(0), newSecond); Assert.assertEquals(islice.get(0), second); }
private static <G extends Gene<?, G> & Mean<G>> MSeq<G> mean(final MSeq<G> a, final Seq<G> b) { for (int i = a.length(); --i >= 0;) { a.set(i, a.get(i).mean(b.get(i))); } return a; }
@Test(dataProvider = "sequences") public void set(final MSeq<Integer> seq) { final long seed = random.seed(); final Random random = new Random(seed); for (int i = 0; i < seq.length(); ++i) { seq.set(i, random.nextInt()); } random.setSeed(seed); for (int i = 0; i < seq.length(); ++i) { Assert.assertEquals(seq.get(i).intValue(), random.nextInt()); } }
@Test(dataProvider = "sequences") public void setAllIterator(final MSeq<Integer> seq) { final long seed = random.seed(); final Random random = new Random(seed); final Integer[] array = new Integer[seq.length()]; for (int i = 0; i < array.length; ++i) { array[i] = random.nextInt(); } seq.setAll(Arrays.asList(array).iterator()); random.setSeed(seed); for (int i = 0; i < seq.length(); ++i) { Assert.assertEquals(seq.get(i).intValue(), random.nextInt()); } }
@Test(dataProvider = "sequences") public void fill(final MSeq<Integer> seq) { final long seed = random.seed(); final Random random = new Random(seed); seq.fill(RandomInt(random)); random.setSeed(seed); for (int i = 0; i < seq.length(); ++i) { Assert.assertEquals(seq.get(i).intValue(), random.nextInt()); } }
@Override @SuppressWarnings("unchecked") public void swap(int start, int end, MSeq<T> other, int otherStart) { checkIndex(start, end, otherStart, other.length()); if (start < end) { for (int i = end - start; --i >= 0;) { final T temp = array.get(i + start); array.set(i + start, other.get(otherStart + i)); other.set(otherStart + i, temp); } } }
@Test public void ofIntegerStartEnd() { final PermutationChromosome<Integer> c = PermutationChromosome.ofInteger(100, 200); final MSeq<Integer> genes = c.getValidAlleles().copy(); Collections.sort(genes.asList()); for (int i = 0; i < c.length(); ++i) { Assert.assertEquals(genes.get(i).intValue(), i + 100); } }
@Test public void ofIntegerLength() { final PermutationChromosome<Integer> c = PermutationChromosome.ofInteger(100); final MSeq<Integer> genes = c.getValidAlleles().copy(); Collections.sort(genes.asList()); for (int i = 0; i < c.length(); ++i) { Assert.assertEquals(genes.get(i).intValue(), i); } }
@Test public void toArrayLong() { long seed = random.seed(); final Random random = new Random(seed); final MSeq<Long> proxy = MSeq.ofLength(1000); for (int i = 0; i < proxy.length(); ++i) { proxy.set(i, random.nextLong()); } final List<Long> list = new SeqList<>(proxy); final Long[] array = list.toArray(new Long[0]); for (int i = 0; i < array.length; ++i) { Assert.assertEquals(array[i], proxy.get(i)); } }
@Test public void swapSamePosition() { MSeq<BitGene> seqWithFalse = newSeq(1); seqWithFalse.set(0, BitGene.FALSE); MSeq<BitGene> seqWithTrue = newSeq(1); seqWithTrue.set(0, BitGene.TRUE); seqWithFalse.swap(0, seqWithTrue); Assert.assertTrue(seqWithFalse.get(0).booleanValue()); Assert.assertFalse(seqWithTrue.get(0).booleanValue()); }
@Test public void equalsAllele() { final MSeq<G> same = newEqualObjects(5); final G that = same.get(0); for (int i = 1; i < same.length(); ++i) { final G other = same.get(i); Assert.assertEquals(other.getAllele(), other.getAllele()); Assert.assertEquals(other.getAllele(), that.getAllele()); Assert.assertEquals(that.getAllele(), other.getAllele()); } }
@Test(dataProvider = "sequences") public void reverse(final MSeq<Integer> seq) { final ISeq<Integer> original = seq.toISeq(); seq.reverse(); Assert.assertNotEquals(seq, original); for (int i = 0; i < seq.length(); ++i) { Assert.assertEquals(seq.get(i), original.get(seq.length() - i - 1)); } Assert.assertEquals(original, seq.reverse()); }
@Override public AltererResult<G, C> alter( final Seq<Phenotype<G, C>> population, final long generation ) { final AltererResult<G, C> result = _adoptee.alter(population, generation); final MSeq<Phenotype<G, C>> pop = MSeq.of(population); for (int i = 0, n = pop.size(); i < n; ++i) { if (!pop.get(i).isValid()) { pop.set(i, repair(pop.get(i))); } } return AltererResult.of(pop.toISeq(), result.getAlterations()); }