/* * 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.brooklyn.util.math; import java.math.BigInteger; import java.util.BitSet; import org.apache.brooklyn.util.math.BitList; import org.apache.brooklyn.util.math.BitUtils; import org.testng.Assert; import org.testng.annotations.Test; import com.google.common.primitives.Booleans; public class BitListTest { @Test public void checkBitListToNumber() { BitList bl; bl = BitList.newInstance(true); Assert.assertEquals(bl.asBytes(), new byte[] { 1 }); Assert.assertEquals(bl.asBigInteger(), BigInteger.valueOf(1)); Assert.assertEquals(BitList.newInstance(new boolean[0]).asBigInteger(), BigInteger.valueOf(0)); bl = BitList.newInstance(false, false, false, false, false, false, false, false, true, false); Assert.assertEquals(bl.asBytes(), new byte[] { 0, 1 }); Assert.assertEquals(bl.intValue(), 256); Assert.assertEquals(bl.longValue(), 256); Assert.assertEquals(bl.byteValue(), 0); Assert.assertEquals(BitList.newInstanceFromBytes(0, 1).resized(10), bl); Assert.assertEquals(""+bl, "00000000:10"); } @Test public void checkSimpleBitsToBytesAndBack() { BitSet bs = new BitSet(); bs.set(0); bs.set(2); //5 bs.set(8); bs.set(15); //129 (unsigned) bs.set(17); // 2 byte[] bytes = BitList.newInstance(bs, 24).asBytes(); Assert.assertEquals(bytes.length, 3); Assert.assertEquals(bytes[0], (byte)5); Assert.assertEquals(bytes[1], (byte)129); Assert.assertEquals(bytes[2], (byte)2); BitList bs2 = BitList.newInstance(bytes); Assert.assertEquals(bs2.asBitSet(), bs); } @Test public void checkBitsToUnsignedBytesAndBack() { BitSet bs = new BitSet(); bs.set(0); bs.set(2); //5 bs.set(8); bs.set(15); //129 (unsigned) bs.set(17); // 2 int[] bytes = BitList.newInstance(bs, 24).asUnsignedBytes(); Assert.assertEquals(bytes.length, 3); Assert.assertEquals(bytes[0], 5); Assert.assertEquals(bytes[1], 129); Assert.assertEquals(bytes[2], 2); BitList bs2 = BitList.newInstanceFromBytes(bytes); Assert.assertEquals(bs2.asBitSet(), bs); } @Test public void checkAsList() { BitList bl = BitList.newInstanceFromBytes(2, 129, 5); Assert.assertEquals(BitList.newInstance(bl.asBitSet(), bl.length), bl); Assert.assertEquals(BitList.newInstance(bl.asBytes()), bl); Assert.assertEquals(BitList.newInstance(bl.asArray()), bl); Assert.assertEquals(BitList.newInstance(bl.asList()), bl); Assert.assertEquals(BitList.newInstance(bl.asBigInteger()).resized(24), bl); } @Test public void checkReverseTiny() { BitList bl = BitList.newInstance(true, false); Assert.assertEquals(Booleans.asList(bl.reversed().asArray()), Booleans.asList(false, true)); Assert.assertEquals(bl.intValue(), 1); Assert.assertEquals(bl.reversed().intValue(), 2); Assert.assertEquals(bl.reversed().reversed(), bl); } @Test public void checkReverseNumbers() { BitList bl = BitList.newInstanceFromBytes(2, 129, 5); Assert.assertEquals(bl.reversed().asBytes(), new byte[] { (byte)160, (byte)129, (byte)64 }); Assert.assertEquals(BitUtils.reverseBitSignificance( bl.reversed().asBytes() ), new byte[] { 5, (byte)129, 2 }); } @Test public void checkCommonPrefixLength() { Assert.assertEquals(BitList.newInstance(false, true, false).commonPrefixLength(BitList.newInstance(true, false, false)), 0); Assert.assertEquals(BitList.newInstance(false, true, false).commonPrefixLength(BitList.newInstance(false, false, false)), 1); Assert.assertEquals(BitList.newInstance(false, true, false).commonPrefixLength(BitList.newInstance(false, true, true)), 2); Assert.assertEquals(BitList.newInstance(false, true, false).commonPrefixLength(BitList.newInstance(false, true, false)), 3); } }