/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you 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 org.apache.jena.tdb.base.buffer; import java.nio.ByteBuffer; import org.apache.jena.atlas.junit.BaseTest ; import org.apache.jena.tdb.base.buffer.BufferException ; import org.apache.jena.tdb.base.buffer.PtrBuffer ; import org.apache.jena.tdb.sys.SystemTDB ; import org.junit.AfterClass ; import org.junit.BeforeClass; import org.junit.Test; public class TestPtrBuffer extends BaseTest { static boolean originalNullOut ; @BeforeClass static public void beforeClass() { originalNullOut = SystemTDB.NullOut ; SystemTDB.NullOut = true ; } @AfterClass static public void afterClass() { SystemTDB.NullOut = originalNullOut ; } // Testing the test framework! @Test public void ptrbuffer01() { PtrBuffer pb = make(4) ; contains(pb, 2, 4, 6, 8) ; } // No BinarySearch test // Shift at LHS @Test public void ptrbuffer03() { PtrBuffer pb = make(4,5) ; contains(pb, 2, 4, 6, 8) ; pb.shiftUp(0) ; pb.set(0, 99) ; contains(pb, 99, 2, 4, 6, 8) ; pb.shiftDown(0) ; contains(pb, 2, 4, 6, 8) ; } @Test public void ptrbuffer04() { PtrBuffer pb = make(4,5) ; contains(pb, 2, 4, 6, 8) ; pb.shiftDown(0) ; contains(pb, 4, 6, 8) ; pb.shiftUp(0) ; pb.set(0,1) ; contains(pb, 1, 4, 6, 8) ; } // Shift at middle @Test public void ptrbuffer05() { PtrBuffer pb = make(4,5) ; contains(pb, 2, 4, 6, 8) ; pb.shiftUp(2) ; pb.set(2, 0) ; contains(pb, 2, 4, 0, 6, 8) ; pb.shiftDown(2) ; contains(pb, 2, 4, 6, 8) ; } @Test public void ptrbuffer06() { PtrBuffer pb = make(4,5) ; contains(pb, 2, 4, 6, 8) ; pb.shiftDown(2) ; contains(pb, 2, 4, 8) ; pb.shiftUp(2) ; assertTrue(pb.isClear(2)) ; contains(pb, 2, 4, -1, 8) ; } // Shift RHS - out of bounds @Test public void ptrbuffer07() { PtrBuffer pb = make(4,5) ; contains(pb, 2, 4, 6, 8) ; pb.shiftUp(3) ; pb.set(3, 1) ; contains(pb, 2, 4, 6, 1, 8) ; pb.shiftDown(3) ; contains(pb, 2, 4, 6, 8) ; } @Test public void ptrbuffer08() { PtrBuffer pb = make(4,5) ; contains(pb, 2, 4, 6, 8) ; pb.shiftDown(3) ; contains(pb, 2, 4, 6) ; pb.shiftUp(2) ; contains(pb, 2, 4, -1, 6) ; } // Errors - IllegalArgumentException @Test(expected=BufferException.class) public void ptrbuffer09() { PtrBuffer pb = make(4,5) ; contains(pb, 2, 4, 6, 8) ; pb.shiftDown(4) ; } @Test(expected=BufferException.class) public void ptrbuffer10() { PtrBuffer pb = make(4,5) ; contains(pb, 2, 4, 6, 8) ; pb.shiftUp(4) ; } @Test(expected=BufferException.class) public void ptrbuffer11() { PtrBuffer pb = make(5,5) ; contains(pb, 2, 4, 6, 8, 10) ; pb.add(12) ; } // Copy, duplicate, clear @Test public void ptrbuffer12() { PtrBuffer pb = make(5,5) ; contains(pb, 2, 4, 6, 8, 10) ; PtrBuffer pb2 = pb.duplicate() ; pb2.set(1, 99) ; contains(pb, 2, 4, 6, 8, 10) ; contains(pb2, 2, 99, 6, 8, 10) ; } @Test public void ptrbuffer13() { PtrBuffer pb = make(5,5) ; contains(pb, 2, 4, 6, 8, 10) ; pb.clear(1, 3) ; contains(pb, 2, -1, -1, -1, 10) ; } @Test public void ptrbuffer14() { PtrBuffer pb = make(5,5) ; contains(pb, 2, 4, 6, 8, 10) ; PtrBuffer pb2 = make(5,5) ; contains(pb2, 2, 4, 6, 8, 10) ; pb.copy(0, pb2, 1, 4) ; contains(pb2, 2, 2, 4, 6, 8) ; } // Remove tests @Test public void ptrbuffer15() { PtrBuffer pb = make(5,5) ; contains(pb, 2, 4, 6, 8, 10) ; pb.removeTop() ; contains(pb, 2, 4, 6, 8) ; pb.remove(1) ; contains(pb, 2, 6, 8) ; pb.remove(2) ; contains(pb, 2, 6) ; pb.remove(0) ; contains(pb, 6) ; pb.remove(0) ; contains(pb) ; } @Test public void ptrbuffer20() { PtrBuffer pb1 = make(5,5) ; contains(pb1, 2, 4, 6, 8, 10) ; PtrBuffer pb2 = make(0,5) ; contains(pb2) ; pb1.shiftRight(pb2) ; contains(pb1, 2, 4, 6, 8) ; contains(pb2, 10) ; } @Test public void ptrbuffer21() { PtrBuffer pb1 = make(3,5) ; contains(pb1, 2, 4, 6) ; PtrBuffer pb2 = make(0,5) ; contains(pb2) ; pb1.shiftRight(pb2) ; contains(pb1, 2, 4) ; contains(pb2, 6) ; } @Test public void ptrbuffer22() { PtrBuffer pb1 = make(3,5) ; contains(pb1, 2, 4, 6) ; PtrBuffer pb2 = make(2,5) ; contains(pb2, 2, 4) ; pb1.shiftRight(pb2) ; contains(pb1, 2, 4) ; contains(pb2, 6, 2, 4) ; } @Test public void ptrbuffer24() { PtrBuffer pb1 = make(0,5) ; contains(pb1) ; PtrBuffer pb2 = make(5,5) ; contains(pb2, 2, 4, 6, 8, 10) ; pb1.shiftLeft(pb2) ; contains(pb1, 2) ; contains(pb2, 4, 6, 8, 10) ; } @Test public void ptrbuffer25() { PtrBuffer pb1 = make(0,5) ; contains(pb1) ; PtrBuffer pb2 = make(3,5) ; contains(pb2, 2, 4, 6) ; pb1.shiftLeft(pb2) ; contains(pb1, 2) ; contains(pb2, 4, 6) ; } @Test public void ptrbuffer26() { PtrBuffer pb1 = make(2,5) ; contains(pb1, 2, 4) ; PtrBuffer pb2 = make(3,5) ; contains(pb2, 2, 4, 6) ; pb1.shiftLeft(pb2) ; contains(pb1, 2, 4, 2) ; contains(pb2, 4, 6) ; } @Test public void ptrbuffer27() { PtrBuffer pb1 = make(2,4) ; PtrBuffer pb2 = make(2,4) ; pb1.copyToTop(pb2) ; contains(pb2, 2,4,2,4) ; } @Test public void ptrbuffer28() { PtrBuffer pb1 = make(0,5) ; PtrBuffer pb2 = make(2,4) ; pb1.copyToTop(pb2) ; contains(pb2, 2,4) ; } @Test public void ptrbuffer29() { PtrBuffer pb1 = make(0,5) ; PtrBuffer pb2 = make(2,4) ; pb2.copyToTop(pb1) ; contains(pb1, 2,4) ; } // ---- Support private static void contains(PtrBuffer pb, int... vals) { assertEquals("Length mismatch: ", vals.length, pb.size()) ; for ( int i = 0 ; i < vals.length ; i++ ) if ( vals[i] == -1 ) assertTrue(pb.isClear(i)) ; else assertEquals("Value mismatch: ", vals[i], pb.get(i)) ; } // Make : 2,4,6,8, .. private static PtrBuffer make(int n) { return make(n,n) ; } private static PtrBuffer make(int n, int len) { ByteBuffer bb = ByteBuffer.allocate(4*len) ; PtrBuffer pb = new PtrBuffer(bb, 0) ; for ( int i = 0 ; i < n ; i++ ) pb.add(2+2*i) ; return pb ; } }