Package test.core.api

Source Code of test.core.api.TestDynamicArray

/*
* Copyright (c) 2010-2012 LinkedIn, Inc
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License. You may obtain a copy of
* the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations under
* the License.
*/

package test.core.api;

import org.junit.Test;

import test.AbstractTest;
import test.core.MemberDataUpdate;

import java.util.Random;

import krati.core.array.basic.DynamicConstants;
import krati.core.array.basic.DynamicIntArray;
import krati.core.array.basic.DynamicLongArray;
import krati.core.array.basic.DynamicShortArray;

/**
* TestDynamicArray
*
* @author jwu
*
*/
public class TestDynamicArray extends AbstractTest {
    static long scn = 0;
    static Random random = new Random(System.currentTimeMillis());
   
    int subArrayBits = DynamicConstants.SUB_ARRAY_BITS;
    int subArraySize = DynamicConstants.SUB_ARRAY_SIZE;
    int maxEntrySize = 1000;
    int maxEntries = 10;
   
    public TestDynamicArray() {
        super(TestDynamicArray.class.getCanonicalName());
    }
   
    @Test
    public void testDynamicIntArray() throws Exception {
        cleanTestOutput();
       
        // Create the first long array and do random updates
        DynamicIntArray array1 = new DynamicIntArray(maxEntrySize, maxEntries, TEST_OUTPUT_DIR);
       
        int memberIdStart = 0;
        MemberDataUpdate[] updates1 = MemberDataUpdate.generateUpdates(memberIdStart, subArraySize);
        memberIdStart += subArraySize;
        MemberDataUpdate[] updates2 = MemberDataUpdate.generateUpdates(memberIdStart, subArraySize);
        memberIdStart += subArraySize;
        MemberDataUpdate[] updates3 = MemberDataUpdate.generateUpdates(memberIdStart, subArraySize);
       
        // 1st batch of updates
        for (MemberDataUpdate u : updates1) {
            array1.set(u.getMemberId(), u.getData(), u.getScn());
        }
       
        int testIndex = 0;
        assertTrue("member " + testIndex + " is not in range", array1.hasIndex(testIndex));
        testIndex += subArraySize;
        assertTrue("member " + testIndex + " is in range", !array1.hasIndex(testIndex));
        assertTrue("incorrect array size", array1.length() == subArraySize);
       
        // 2nd batch of updates
        for (MemberDataUpdate u : updates2) {
            array1.set(u.getMemberId(), u.getData(), u.getScn());
        }
       
        assertTrue("member " + testIndex + " is not in range", array1.hasIndex(testIndex));
        testIndex += subArraySize;
        assertTrue("member " + testIndex + " is in range", !array1.hasIndex(testIndex));
        assertTrue("incorrect array size", array1.length() == subArraySize * 2);
       
        // 3rd batch of updates
        for (MemberDataUpdate u : updates3) {
            array1.set(u.getMemberId(), u.getData(), u.getScn());
        }
       
        assertTrue("member " + testIndex + " is not in range", array1.hasIndex(testIndex));
        testIndex += subArraySize;
        assertTrue("member " + testIndex + " is in range", !array1.hasIndex(testIndex));
        assertTrue("incorrect array size", array1.length() == subArraySize * 3);
       
        // Random-update the entire array
        MemberDataUpdate[] updates = MemberDataUpdate.generateUpdates(0, array1.length());

        for (MemberDataUpdate u : updates) {
            array1.set(u.getMemberId(), u.getData(), u.getScn());
        }
       
        for (MemberDataUpdate u : updates) {
            assertEquals(array1.get(u.getMemberId()), u.getData());
        }
       
        // Sync the first array
        array1.sync();
       
        // Create the second array, which should load data from cache
        DynamicIntArray array2 = new DynamicIntArray(maxEntrySize, maxEntries, TEST_OUTPUT_DIR);
        assertTrue("array2.getHWMark() is greater than array1.getHWMark()", array2.getHWMark() <= array1.getHWMark());
       
        int nonZeroCount = 0;
        for (int index = 0; index < array1.length(); index++) {
            if (array1.get(index) > 0) nonZeroCount++;
            assertEquals(array1.get(index), array2.get(index));
        }
       
        assertTrue("all zeros in array1", nonZeroCount > 0);
       
        cleanTestOutput();
    }
   
    @Test
    public void testDynamicLongArray() throws Exception {
        cleanTestOutput();
       
        // Create the first long array and do random updates
        DynamicLongArray array1 = new DynamicLongArray(maxEntrySize, maxEntries, TEST_OUTPUT_DIR);
       
        int memberIdStart = 0;
        MemberDataUpdate[] updates1 = MemberDataUpdate.generateUpdates(memberIdStart, subArraySize);
        memberIdStart += subArraySize;
        MemberDataUpdate[] updates2 = MemberDataUpdate.generateUpdates(memberIdStart, subArraySize);
        memberIdStart += subArraySize;
        MemberDataUpdate[] updates3 = MemberDataUpdate.generateUpdates(memberIdStart, subArraySize);
       
        // 1st batch of updates
        for (MemberDataUpdate u : updates1) {
            array1.set(u.getMemberId(), u.getData(), u.getScn());
        }
       
        int testIndex = 0;
        assertTrue("member " + testIndex + " is not in range", array1.hasIndex(testIndex));
        testIndex += subArraySize;
        assertTrue("member " + testIndex + " is in range", !array1.hasIndex(testIndex));
        assertTrue("incorrect array size", array1.length() == subArraySize);
       
        // 2nd batch of updates
        for (MemberDataUpdate u : updates2) {
            array1.set(u.getMemberId(), u.getData(), u.getScn());
        }
       
        assertTrue("member " + testIndex + " is not in range", array1.hasIndex(testIndex));
        testIndex += subArraySize;
        assertTrue("member " + testIndex + " is in range", !array1.hasIndex(testIndex));
        assertTrue("incorrect array size", array1.length() == subArraySize * 2);
       
        // 3rd batch of updates
        for (MemberDataUpdate u : updates3) {
            array1.set(u.getMemberId(), u.getData(), u.getScn());
        }
       
        assertTrue("member " + testIndex + " is not in range", array1.hasIndex(testIndex));
        testIndex += subArraySize;
        assertTrue("member " + testIndex + " is in range", !array1.hasIndex(testIndex));
        assertTrue("incorrect array size", array1.length() == subArraySize * 3);
       
        // Random-update the entire array
        MemberDataUpdate[] updates = MemberDataUpdate.generateUpdates(0, array1.length());

        for (MemberDataUpdate u : updates) {
            array1.set(u.getMemberId(), u.getData(), u.getScn());
        }
       
        for (MemberDataUpdate u : updates) {
            assertEquals(array1.get(u.getMemberId()), u.getData());
        }
       
        // Sync the first array
        array1.sync();
       
        // Create the second array, which should load data from cache
        DynamicLongArray array2 = new DynamicLongArray(maxEntrySize, maxEntries, TEST_OUTPUT_DIR);
        assertTrue("array3.getHWMark() is greater than array1.getHWMark()", array2.getHWMark() <= array1.getHWMark());
       
        int nonZeroCount = 0;
        for (int index = 0; index < array1.length(); index++) {
            if (array1.get(index) > 0) nonZeroCount++;
            assertEquals(array1.get(index), array2.get(index));
        }
       
        assertTrue("all zeros in array1", nonZeroCount > 0);
       
        cleanTestOutput();
    }
   
    @Test
    public void testDynamicShortArray() throws Exception {
        cleanTestOutput();
       
        // Create the first long array and do random updates
        DynamicShortArray array1 = new DynamicShortArray(maxEntrySize, maxEntries, TEST_OUTPUT_DIR);
       
        int memberIdStart = 0;
        MemberDataUpdate[] updates1 = MemberDataUpdate.generateUpdates(memberIdStart, subArraySize);
        memberIdStart += subArraySize;
        MemberDataUpdate[] updates2 = MemberDataUpdate.generateUpdates(memberIdStart, subArraySize);
        memberIdStart += subArraySize;
        MemberDataUpdate[] updates3 = MemberDataUpdate.generateUpdates(memberIdStart, subArraySize);
       
        // 1st batch of updates
        for (MemberDataUpdate u : updates1) {
            array1.set(u.getMemberId(), (short)u.getData(), u.getScn());
        }
       
        int testIndex = 0;
        assertTrue("member " + testIndex + " is not in range", array1.hasIndex(testIndex));
        testIndex += subArraySize;
        assertTrue("member " + testIndex + " is in range", !array1.hasIndex(testIndex));
        assertTrue("incorrect array size", array1.length() == subArraySize);
       
        // 2nd batch of updates
        for (MemberDataUpdate u : updates2) {
            array1.set(u.getMemberId(), (short)u.getData(), u.getScn());
        }
       
        assertTrue("member " + testIndex + " is not in range", array1.hasIndex(testIndex));
        testIndex += subArraySize;
        assertTrue("member " + testIndex + " is in range", !array1.hasIndex(testIndex));
        assertTrue("incorrect array size", array1.length() == subArraySize * 2);
       
        // 3rd batch of updates
        for (MemberDataUpdate u : updates3) {
            array1.set(u.getMemberId(), (short)u.getData(), u.getScn());
        }
       
        assertTrue("member " + testIndex + " is not in range", array1.hasIndex(testIndex));
        testIndex += subArraySize;
        assertTrue("member " + testIndex + " is in range", !array1.hasIndex(testIndex));
        assertTrue("incorrect array size", array1.length() == subArraySize * 3);
       
        // Random-update the entire array
        MemberDataUpdate[] updates = MemberDataUpdate.generateUpdates(0, array1.length());

        for (MemberDataUpdate u : updates) {
            array1.set(u.getMemberId(), (short)u.getData(), u.getScn());
        }
       
        for (MemberDataUpdate u : updates) {
            assertEquals(array1.get(u.getMemberId()), (short)u.getData());
        }
       
        // Sync the first array
        array1.sync();
       
        // Create the second array, which should load data from cache
        DynamicShortArray array2 = new DynamicShortArray(maxEntrySize, maxEntries, TEST_OUTPUT_DIR);
        assertTrue("array2.getHWMark() is greater than array1.getHWMark()", array2.getHWMark() <= array1.getHWMark());
       
        int nonZeroCount = 0;
        for (int index = 0; index < array1.length(); index++) {
            if (array1.get(index) > 0) nonZeroCount++;
            assertEquals(array1.get(index), array2.get(index));
        }
       
        assertTrue("all zeros in array1", nonZeroCount > 0);
       
        cleanTestOutput();
    }
}
TOP

Related Classes of test.core.api.TestDynamicArray

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.