Package com.carrotsearch.hppc

Source Code of com.carrotsearch.hppc.ShortArrayDequeTest

package com.carrotsearch.hppc;

import static com.carrotsearch.hppc.TestUtils.*;
import static org.junit.Assert.*;

import java.util.*;

import org.junit.*;
import org.junit.rules.MethodRule;

import com.carrotsearch.hppc.cursors.ShortCursor;
import com.carrotsearch.hppc.mutables.IntHolder;
import com.carrotsearch.hppc.predicates.ShortPredicate;
import com.carrotsearch.hppc.procedures.ShortProcedure;

/**
* Unit tests for {@link ShortArrayDeque}.
*/
public class ShortArrayDequeTest
{
    /**
     * Per-test fresh initialized instance.
     */
    public ShortArrayDeque deque;

    /**
     * Require assertions for all tests.
     */
    @Rule
    public MethodRule requireAssertions = new RequireAssertionsRule();

    /**
     * Some sequence values for tests.
     */
    private ShortArrayList sequence = new ShortArrayList();

    /* replaceIf:applied. */  short  /* end */   key1 = 1;
    /* replaceIf:applied. */  short  /* end */   key2 = 2;
    /* replaceIf:applied. */  short  /* end */   key3 = 3;

    /* */
    @Before
    public void initialize()
    {
        deque = new ShortArrayDeque();

        sequence.clear();
        for (int i = 0; i < 10000; i++)
            sequence.add( (shorti);
    }

    @After
    public void checkTrailingSpaceUninitialized()
    {
        if (deque != null)
        {
            for (int i = deque.tail; i < deque.head; i = ShortArrayDeque.oneRight(i, deque.buffer.length))
                assertTrue(((short) 0) == deque.buffer[i]);
        }
    }

    /* */
    @Test
    public void testInitiallyEmpty()
    {
        assertEquals(0, deque.size());
    }

    /* */
    @Test
    public void testAddFirst()
    {
        deque.addFirst( (short1);
        deque.addFirst( (short2);
        deque.addFirst( (short3);
        assertListEquals(deque.toArray(), 3, 2, 1);
        assertEquals(3, deque.size());
    }

    /* */
    @Test
    public void testAddLast()
    {
        deque.addLast( (short1);
        deque.addLast( (short2);
        deque.addLast( (short3);
        assertListEquals(deque.toArray(), 1, 2, 3);
        assertEquals(3, deque.size());
    }
   
    /* */
    @Test
    public void testAddWithGrowth()
    {
        for (int i = 0; i < sequence.size(); i++)
        {
            deque.addFirst(sequence.buffer[i]);
        }

        assertListEquals(reverse(sequence.toArray()), deque.toArray());
    }

    /* */
    @Test
    public void testAddLastWithGrowth()
    {
        for (int i = 0; i < sequence.size(); i++)
            deque.addLast(sequence.buffer[i]);

        assertListEquals(sequence.toArray(), deque.toArray());
    }

    /* */
    @Test
    public void testAddAllFirst()
    {
        ShortArrayList list2 = new ShortArrayList();
        list2.add(newArray(list2.buffer, 0, 1, 2));

        deque.addFirst(list2);
        assertListEquals(deque.toArray(), 2, 1, 0);
        deque.addFirst(list2);
        assertListEquals(deque.toArray(), 2, 1, 0, 2, 1, 0);

        deque.clear();
        ShortArrayDeque deque2 = new ShortArrayDeque();
        deque2.addLast(newArray(deque2.buffer, 0, 1, 2));
        deque.addFirst(deque2);
        assertListEquals(deque.toArray(), 2, 1, 0);
    }

    /* */
    @Test
    public void testAddAllLast()
    {
        ShortArrayList list2 = new ShortArrayList();
        list2.add(newArray(list2.buffer, 0, 1, 2));

        deque.addLast(list2);
        assertListEquals(deque.toArray(), 0, 1, 2);
        deque.addLast(list2);
        assertListEquals(deque.toArray(), 0, 1, 2, 0, 1, 2);

        deque.clear();
        ShortArrayDeque deque2 = new ShortArrayDeque();
        deque2.addLast(newArray(deque2.buffer, 0, 1, 2));
        deque.addLast(deque2);
        assertListEquals(deque.toArray(), 0, 1, 2);
    }

    /* */
    @Test
    public void testRemoveFirst()
    {
        deque.addLast( (short1);
        deque.addLast( (short2);
        deque.addLast( (short3);

        deque.removeFirst();
        assertListEquals(deque.toArray(), 2, 3);
        assertEquals(2, deque.size());

        deque.addFirst( (short4);
        assertListEquals(deque.toArray(), 4, 2, 3);
        assertEquals(3, deque.size());

        deque.removeFirst();
        deque.removeFirst();
        deque.removeFirst();
        assertEquals(0, deque.toArray().length);
        assertEquals(0, deque.size());   
    }

    /* */
    @Test(expected = AssertionError.class)
    public void testRemoveFirstEmpty()
    {
        deque.removeFirst();
    }

    /* */
    @Test
    public void testRemoveLast()
    {
        deque.addLast( (short1);
        deque.addLast( (short2);
        deque.addLast( (short3);

        deque.removeLast();
        assertListEquals(deque.toArray(), 1, 2);
        assertEquals(2, deque.size());

        deque.addLast( (short4);
        assertListEquals(deque.toArray(), 1, 2, 4);
        assertEquals(3, deque.size());
       
        deque.removeLast();
        deque.removeLast();
        deque.removeLast();
        assertEquals(0, deque.toArray().length);
        assertEquals(0, deque.size());   
    }

    /* */
    @Test(expected = AssertionError.class)
    public void testRemoveLastEmpty()
    {
        deque.removeLast();
    }

    /* */
    @Test
    public void testGetFirst()
    {
        deque.addLast( (short1);
        deque.addLast( (short2);
        assertEquals2( (short1, deque.getFirst());
        deque.addFirst( (short3);
        assertEquals2( (short3, deque.getFirst());
    }

    /* */
    @Test(expected = AssertionError.class)
    public void testGetFirstEmpty()
    {
        deque.getFirst();
    }
   
    /* */
    @Test
    public void testGetLast()
    {
        deque.addLast( (short1);
        deque.addLast( (short2);
        assertEquals2( (short2, deque.getLast());
        deque.addLast( (short3);
        assertEquals2( (short3, deque.getLast());
    }

    /* */
    @Test(expected = AssertionError.class)
    public void testGetLastEmpty()
    {
        deque.getLast();
    }

    /* */
    @Test
    public void testRemoveFirstOccurrence()
    {
        int modulo = 10;
        int count = 10000;
        sequence.clear();
        for (int i = 0; i < count; i++)
        {
            deque.addLast( (short)  (i % modulo));
            sequence.add(  (short)  (i % modulo));
        }

        Random rnd = new Random(0x11223344);
        for (int i = 0; i < 500; i++)
        {
            /* replaceIf:applied. */  short  /* end */ k =
                 (shortrnd.nextInt(modulo);
            assertEquals(
                deque.removeFirstOccurrence(k) >= 0,
                sequence.removeFirstOccurrence(k) >= 0);
        }

        assertListEquals(deque.toArray(), sequence.toArray());

        assertTrue(0 > deque.removeFirstOccurrence( (short)  (modulo + 1)));
        deque.addLast( (short)  (modulo + 1));
        assertTrue(0 <= deque.removeFirstOccurrence( (short)  (modulo + 1)));
    }

    /* */
    @Test
    public void testRemoveLastOccurrence()
    {
        int modulo = 10;
        int count = 10000;
        sequence.clear();
        for (int i = 0; i < count; i++)
        {
            deque.addLast( (short)  (i % modulo));
            sequence.add(  (short)  (i % modulo));
        }

        Random rnd = new Random(0x11223344);
        for (int i = 0; i < 500; i++)
        {
            /* replaceIf:applied. */  short  /* end */ k =
                 (shortrnd.nextInt(modulo);
            assertEquals(
                deque.removeLastOccurrence(k) >= 0,
                sequence.removeLastOccurrence(k) >= 0);
        }

        assertListEquals(deque.toArray(), sequence.toArray());

        assertTrue(0 > deque.removeLastOccurrence( (short)  (modulo + 1)));
        deque.addFirst( (short)  (modulo + 1));
        assertTrue(0 <= deque.removeLastOccurrence( (short)  (modulo + 1)));
    }
   
    /* */
    @Test
    public void testRemoveAllOccurrences()
    {
        deque.addLast(newArray(deque.buffer, 0, 1, 2, 1, 0, 3, 0));
       
        assertEquals(0, deque.removeAllOccurrences( (short4));
        assertEquals(3, deque.removeAllOccurrences( (short0));
        assertListEquals(deque.toArray(), 1, 2, 1, 3);
        assertEquals(1, deque.removeAllOccurrences( (short3));
        assertListEquals(deque.toArray(), 1, 2, 1);
        assertEquals(2, deque.removeAllOccurrences( (short1));
        assertListEquals(deque.toArray(), 2);
        assertEquals(1, deque.removeAllOccurrences( (short2));
        assertEquals(0, deque.size());
    }

    /* */
    @Test
    public void testRemoveAllInLookupContainer()
    {
        deque.addLast(newArray(deque.buffer, 0, 1, 2, 1, 0));

        ShortOpenHashSet set = new ShortOpenHashSet();
        set.add(newArray(set.keys, 0, 2));

        assertEquals(3, deque.removeAll(set));
        assertEquals(0, deque.removeAll(set));

        assertListEquals(deque.toArray(), 1, 1);
    }

    /* */
    @Test
    public void testRemoveAllWithPredicate()
    {
        deque.addLast(newArray(deque.buffer, 0, key1, key2, key1, 4));

        assertEquals(3, deque.removeAll(new ShortPredicate()
        {
            public boolean apply(/* replaceIf:applied. */ short  /* end */ v)
            {
                return v == key1 || v == key2;
            };
        }));

        assertListEquals(deque.toArray(), 0, 4);
    }

    /* */
    @Test
    public void testRemoveAllWithPredicateInterrupted()
    {
        deque.addLast(newArray(deque.buffer, 0, key1, key2, key1, 4));

        final RuntimeException t = new RuntimeException();

        try
        {
            assertEquals(3, deque.removeAll(new ShortPredicate()
            {
                public boolean apply(/* replaceIf:applied. */ short  /* end */ v)
                {
                    if (v == key2) throw t;
                    return v == key1;
                };
            }));
            fail();
        }
        catch (RuntimeException e)
        {
            // Make sure it's really our exception...
            if (e != t) throw e;
        }

        // And check if the deque is in consistent state.
        assertListEquals(deque.toArray(), 0, key2, key1, 4);
        assertEquals(4, deque.size());
    }

    /* */
    @Test
    public void testClear()
    {
        deque.addLast( (short1);
        deque.addLast( (short2);
        deque.addFirst( (short3);
        deque.clear();
        assertEquals(0, deque.size());
        assertEquals(0, deque.head);
        assertEquals(0, deque.tail);

        deque.addLast( (short1);
        assertListEquals(deque.toArray(), 1);
    }
   
    /* */
    @Test
    public void testRelease()
    {
        deque.addLast( (short1);
        deque.addLast( (short2);
        deque.addFirst( (short3);
        deque.release();
        assertEquals(0, deque.size());
        assertEquals(0, deque.head);
        assertEquals(0, deque.tail);

        deque.addLast( (short1);
        assertListEquals(deque.toArray(), 1);
    }

    /* */
    @Test
    public void testIterable()
    {
        deque.addLast(sequence);

        int count = 0;
        for (ShortCursor cursor : deque)
        {
            assertEquals2(sequence.buffer[count], cursor.value);
            assertEquals2(deque.buffer[cursor.index], cursor.value);
            count++;
        }
        assertEquals(count, deque.size());
        assertEquals(count, sequence.size());

        count = 0;
        deque.clear();
        for (@SuppressWarnings("unused") ShortCursor cursor : deque)
        {
            count++;
        }
        assertEquals(0, count);
    }

    /* */
    @Test
    public void testIterator()
    {
        deque.addLast(newArray(deque.buffer, 0, 1, 2, 3));
       
        Iterator<ShortCursor> iterator = deque.iterator();
        int count = 0;
        while (iterator.hasNext())
        {
            iterator.hasNext();
            iterator.hasNext();
            iterator.hasNext();
            iterator.next();
            count++;
        }
        assertEquals(count, deque.size());

        deque.clear();
        assertFalse(deque.iterator().hasNext());
    }

    /* */
    @Test
    public void testDescendingIterator()
    {
        deque.addLast(sequence);

        int index = sequence.size() - 1;
        for (Iterator<ShortCursor> i = deque.descendingIterator(); i.hasNext(); )
        {
            ShortCursor cursor = i.next();
            assertEquals2(sequence.buffer[index], cursor.value);
            assertEquals2(deque.buffer[cursor.index], cursor.value);
            index--;
        }
        assertEquals(-1, index);

        deque.clear();
        assertFalse(deque.descendingIterator().hasNext());
    }

    /* */
    @Test
    /* removeIf:applied. */
    public void testForEachWithProcedure()
    {
        deque.addLast(sequence);

        final IntHolder count = new IntHolder();
        ((ShortArrayDeque) deque).forEach(new ShortProcedure() {
            int index = 0;
            public void apply(short v)
            {
                assertEquals2(sequence.buffer[index++], v);
                count.value++;
            }
        });
        assertEquals(count.value, deque.size());
    }

    /* */
    @Test
    /* removeIf:applied. */
    public void testDescendingForEachWithProcedure()
    {
        deque.addLast(sequence);

        final IntHolder count = new IntHolder();
        ((ShortArrayDeque) deque).descendingForEach(new ShortProcedure() {
            int index = sequence.size();
            public void apply(short v)
            {
                assertEquals2(sequence.buffer[--index], v);
                count.value++;
            }
        });
        assertEquals(count.value, deque.size());
    }

    /* removeIf:applied. */
   
    /* */
    @Test
    public void testHashCodeEquals()
    {
        ShortArrayDeque l0 = ShortArrayDeque.from();
        assertEquals(1, l0.hashCode());
        assertEquals(l0, ShortArrayDeque.from());

        ShortArrayDeque l1 = ShortArrayDeque.from(
             (short1,
             (short2,
             (short3);

        ShortArrayDeque l2 = ShortArrayDeque.from(
             (short1,
             (short2,
             (short3);

        assertEquals(l1.hashCode(), l2.hashCode());
        assertEquals(l1, l2);
    }
   
    /* removeIf:applied. */
TOP

Related Classes of com.carrotsearch.hppc.ShortArrayDequeTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.