// Copyright (C) 2012 - Will Glozer. All rights reserved. package com.lambdaworks.redis; import com.lambdaworks.redis.codec.Utf8StringCodec; import org.junit.*; import java.nio.ByteBuffer; import static org.junit.Assert.assertEquals; public class BitCommandTest extends AbstractCommandTest { protected RedisConnection<String, String> bitstring; @Before public final void openBitStringConnection() throws Exception { bitstring = client.connect(new BitStringCodec()); } @After public final void closeBitStringConnection() throws Exception { bitstring.close(); } @Test public void bitcount() throws Exception { assertEquals(0, (long) redis.bitcount(key)); redis.setbit(key, 0, 1); redis.setbit(key, 1, 1); redis.setbit(key, 2, 1); assertEquals(3, (long) redis.bitcount(key)); //assertEquals(2, (long) redis.bitcount(key, 1, 3)); assertEquals(0, (long) redis.bitcount(key, 3, -1)); } @Test public void bitopAnd() throws Exception { redis.setbit("foo", 0, 1); redis.setbit("bar", 1, 1); redis.setbit("baz", 2, 1); assertEquals(1, (long) redis.bitopAnd(key, "foo", "bar", "baz")); assertEquals(0, (long) redis.bitcount(key)); assertEquals("00000000", bitstring.get(key)); } @Test public void bitopNot() throws Exception { redis.setbit("foo", 0, 1); redis.setbit("foo", 2, 1); assertEquals(1, (long) redis.bitopNot(key, "foo")); assertEquals(6, (long) redis.bitcount(key)); assertEquals("11111010", bitstring.get(key)); } @Test public void bitopOr() throws Exception { redis.setbit("foo", 0, 1); redis.setbit("bar", 1, 1); redis.setbit("baz", 2, 1); assertEquals(1, (long) redis.bitopOr(key, "foo", "bar", "baz")); assertEquals("00000111", bitstring.get(key)); } @Test public void bitopXor() throws Exception { redis.setbit("foo", 0, 1); redis.setbit("bar", 0, 1); redis.setbit("baz", 2, 1); assertEquals(1, (long) redis.bitopXor(key, "foo", "bar", "baz")); assertEquals("00000100", bitstring.get(key)); } @Test public void getbit() throws Exception { assertEquals(0, (long) redis.getbit(key, 0)); redis.setbit(key, 0, 1); assertEquals(1, (long) redis.getbit(key, 0)); } @Test public void setbit() throws Exception { assertEquals(0, (long) redis.setbit(key, 0, 1)); assertEquals(1, (long) redis.setbit(key, 0, 0)); } static class BitStringCodec extends Utf8StringCodec { @Override public String decodeValue(ByteBuffer bytes) { StringBuilder bits = new StringBuilder(bytes.remaining() * 8); while (bytes.remaining() > 0) { byte b = bytes.get(); for (int i = 0; i < 8; i++) { bits.append(Integer.valueOf(b >>> i & 1)); } } return bits.toString(); } } }