Skip to content
Browse files

gh-69 Added a unit test for RandomByteIterator toArray() and toString…

…() methods.
  • Loading branch information...
1 parent d461c89 commit 448685cad440d3c14004b85964469a1cdadf88b7 m1ch1 committed Mar 3, 2012
View
6 core/pom.xml
@@ -26,6 +26,12 @@
<artifactId>jackson-core-asl</artifactId>
<version>${jackson.api.version}</version>
</dependency>
+ <dependency>
+ <groupId>org.testng</groupId>
+ <artifactId>testng</artifactId>
+ <version>6.1.1</version>
+ <scope>test</scope>
+ </dependency>
</dependencies>
</project>
View
157 core/src/main/java/com/yahoo/ycsb/RandomByteIterator.java
@@ -1,84 +1,87 @@
-/**
- * Copyright (c) 2010 Yahoo! Inc. All rights reserved.
- *
- * 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. See accompanying
- * LICENSE file.
+/**
+ * Copyright (c) 2010 Yahoo! Inc. All rights reserved.
+ *
+ * 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. See accompanying
+ * LICENSE file.
*/
package com.yahoo.ycsb;
+/**
+ * A ByteIterator that generates a random sequence of bytes.
+ */
public class RandomByteIterator extends ByteIterator {
- long len;
- long off;
- int buf_off;
- byte[] buf;
-
- @Override
- public boolean hasNext() {
- return (off + buf_off) < len;
- }
+ private long len;
+ private long off;
+ private int bufOff;
+ private byte[] buf;
+
+ @Override
+ public boolean hasNext() {
+ return (off + bufOff) < len;
+ }
+
+ private void fillBytesImpl(byte[] buffer, int base) {
+ int bytes = Utils.random().nextInt();
+ try {
+ buffer[base+0] = (byte)(((bytes) & 31) + ' ');
+ buffer[base+1] = (byte)(((bytes >> 5) & 31) + ' ');
+ buffer[base+2] = (byte)(((bytes >> 10) & 31) + ' ');
+ buffer[base+3] = (byte)(((bytes >> 15) & 31) + ' ');
+ buffer[base+4] = (byte)(((bytes >> 20) & 31) + ' ');
+ buffer[base+5] = (byte)(((bytes >> 25) & 31) + ' ');
+ } catch (ArrayIndexOutOfBoundsException e) { /* ignore it */ }
+ }
+
+ private void fillBytes() {
+ if(bufOff == buf.length) {
+ fillBytesImpl(buf, 0);
+ bufOff = 0;
+ off += buf.length;
+ }
+ }
+
+ public RandomByteIterator(long len) {
+ this.len = len;
+ this.buf = new byte[6];
+ this.bufOff = buf.length;
+ fillBytes();
+ this.off = 0;
+ }
+
+ public byte nextByte() {
+ fillBytes();
+ bufOff++;
+ return buf[bufOff-1];
+ }
- private void fillBytesImpl(byte[] buf, int base) {
- int bytes = Utils.random().nextInt();
- try {
- buf[base+0] = (byte)(((bytes ) & 31) + ' ');
- buf[base+1] = (byte)(((bytes >> 5 ) & 31) + ' ');
- buf[base+2] = (byte)(((bytes >> 10) & 31) + ' ');
- buf[base+3] = (byte)(((bytes >> 15) & 31) + ' ');
- buf[base+4] = (byte)(((bytes >> 20) & 31) + ' ');
- buf[base+5] = (byte)(((bytes >> 25) & 31) + ' ');
- } catch (ArrayIndexOutOfBoundsException e) { /* ignore it */ }
- }
-
- private void fillBytes() {
- if(buf_off == buf.length) {
- fillBytesImpl(buf, 0);
- buf_off = 0;
- off += buf.length;
- }
- }
-
- public RandomByteIterator(long len) {
- this.len = len;
- this.buf = new byte[6];
- this.buf_off = buf.length;
- fillBytes();
- this.off = 0;
- }
+ @Override
+ public int nextBuf(byte[] buffer, int bufferOffset) {
+ int ret;
+ if(len - off < buffer.length - bufferOffset) {
+ ret = (int)(len - off);
+ } else {
+ ret = buffer.length - bufferOffset;
+ }
+ int i;
+ for(i = 0; i < ret; i+=6) {
+ fillBytesImpl(buffer, i + bufferOffset);
+ }
+ off+=ret;
+ return ret + bufferOffset;
+ }
- public byte nextByte() {
- fillBytes();
- buf_off++;
- return buf[buf_off-1];
- }
- @Override
- public int nextBuf(byte[] b, int buf_off) {
- int ret;
- if(len - off < b.length - buf_off) {
- ret = (int)(len - off);
- } else {
- ret = b.length - buf_off;
- }
- int i;
- for(i = 0; i < ret; i+=6) {
- fillBytesImpl(b, i+buf_off);
- }
- off+=ret;
- return ret + buf_off;
- }
-
-
- @Override
- public long bytesLeft() {
- return len - off;
- }
+ @Override
+ public long bytesLeft() {
+ return len - off - bufOff;
+ }
}
View
22 core/src/test/java/com/yahoo/ycsb/TestByteIterator.java
@@ -0,0 +1,22 @@
+package com.yahoo.ycsb;
+
+import org.testng.annotations.Test;
+import static org.testng.AssertJUnit.*;
+
+public class TestByteIterator {
+ @Test
+ public void testRandomByteIterator() {
+ int size = 100;
+ ByteIterator itor = new RandomByteIterator(size);
+ assertTrue(itor.hasNext());
+ assertEquals(size, itor.bytesLeft());
+ assertEquals(size, itor.toString().getBytes().length);
+ assertFalse(itor.hasNext());
+ assertEquals(0, itor.bytesLeft());
+
+ itor = new RandomByteIterator(size);
+ assertEquals(size, itor.toArray().length);
+ assertFalse(itor.hasNext());
+ assertEquals(0, itor.bytesLeft());
+ }
+}

0 comments on commit 448685c

Please sign in to comment.
Something went wrong with that request. Please try again.