/**
Copyright (C) SYSTAP, LLC DBA Blazegraph 2006-2016. All rights reserved.
Contact:
SYSTAP, LLC DBA Blazegraph
2501 Calvert ST NW #106
Washington, DC 20008
licenses@blazegraph.com
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; version 2 of the License.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
/*
* Created on Jan 8, 2007
*/
package com.bigdata.btree;
import com.bigdata.btree.raba.MutableKeyBuffer;
import com.bigdata.btree.raba.MutableValueBuffer;
/**
* Test suite for various utility methods, both static and instance, on
* {@link AbstractNode}.
*
* @todo review coverage now that so much has changed with respect to keys.
*
* @author <a href="mailto:thompsonbry@users.sourceforge.net">Bryan Thompson</a>
* @version $Id$
*/
public class TestUtilMethods extends AbstractBTreeTestCase {
/**
*
*/
public TestUtilMethods() {
}
/**
* @param name
*/
public TestUtilMethods(String name) {
super(name);
}
// public void test_keysAsString() {
//
// assertEquals("[1, 2, 3]", AbstractNode.keysAsString(1, new int[]{1,2,3}));
//
// assertEquals("[a, b, c]", AbstractNode.keysAsString(1, new char[]{'a','b','c'}));
//
// assertEquals("[{1, 2, 3}]", AbstractNode.keysAsString(3, new int[]{1,2,3}));
//
// assertEquals("[{1, 2, 3}, {4, 5, 6}]", AbstractNode.keysAsString(3, new int[]{1,2,3,4,5,6}));
//
// assertEquals("[{a, b, c}, {d, e, f}]", AbstractNode.keysAsString(3, new char[]{'a','b','c','d','e','f'}));
//
// }
//
// /**
// * @todo test routines to get and set individual keys. when stride gt 1 this
// * requires creating an array of values. i need to determine how to
// * handle stride == 1 which currently autoboxes, e.g., int to Integer
// * vs int to int[0].
// */
// public void test_getSetKey() {
// fail("write tests");
// }
// /**
// * test routines to copy a key from some index in a node or leaf to another
// * index in either the same or another node or leaf.
// *
// * @todo move this method and this test to {@link MutableKeyBuffer}?
// */
// public void test_copyKey() {
//
// final int m = 3;
// final int nkeys = 3;
// final BTree btree = getBTree(m);
//
// Leaf leaf1 = new Leaf(btree, 1L, m, nkeys, new int[] { 1, 2, 3,
// 0 }, new Integer[] { 1, 2, 3, 0 });
//
// Leaf leaf2 = new Leaf(btree, 1L, m, nkeys, new int[] { 4, 5, 6,
// 0 }, new Integer[] { 1, 2, 3, 0 });
//
// // original state.
// assertKeys(new int[] { 1, 2, 3 }, leaf1);
// assertKeys(new int[] { 4, 5, 6 }, leaf2);
//
// leaf1.copyKey(0, leaf2.keys, 0);
// assertKeys(new int[] { 4, 2, 3 }, leaf1);
// assertKeys(new int[] { 4, 5, 6 }, leaf2);
//
// leaf2.copyKey(0, leaf1.keys, 2);
// assertKeys(new int[] { 4, 2, 3 }, leaf1);
// assertKeys(new int[] { 3, 5, 6 }, leaf2);
//
// leaf1.copyKey(2, leaf2.keys, 1);
// assertKeys(new int[] { 4, 2, 5 }, leaf1);
// assertKeys(new int[] { 3, 5, 6 }, leaf2);
//
// }
/**
* Note: the arrays are dimensions to nkeys + 1 for a leaf to provide a slot
* for overflow during a split.
*/
public void test_assertKeysMonotonic() {
final int m = 3;
final int nkeys = 3;
final BTree btree = getBTree(m);
final Leaf leaf = new Leaf(btree, 1L, //
new MutableLeafData(//
new MutableKeyBuffer(nkeys,
// keys
new byte[][] {//
new byte[] { 1 }, //
new byte[] { 2 }, //
new byte[] { 3 },//
null }),//
// vals
new MutableValueBuffer(nkeys, //
// vals
new byte[][] { //
new byte[] { 1 },//
new byte[] { 2 },//
new byte[] { 3 },//
new byte[] { 0 }} //
),
null,// timestamps
null,// deleteMarkers
null // rawRecords
));
leaf.assertKeysMonotonic();
// access the byte[][].
final byte[][] keys = ((MutableKeyBuffer)leaf.getKeys()).keys;
// swap around two keys so that they are out of order.
final byte[] tmp = keys[0];
keys[0] = keys[1];
keys[1] = tmp;
try {
leaf.assertKeysMonotonic();
fail("Expecting " + AssertionError.class);
} catch (AssertionError ex) {
if(log.isInfoEnabled())
log.info("Ignoring expected exception: " + ex);
}
}
}