/**
* Copyright 2014 Alexey Ragozin
*
* 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.
*/
package org.gridkit.jvmtool.util;
import static org.assertj.core.api.Assertions.assertThat;
import org.junit.Assert;
import org.junit.Test;
public class BitMapTest {
@Test
public void simple_test() {
PagedBitMap pbm = new PagedBitMap();
int len = 4 << 20;
for(int i = 0; i != len; ++i) {
pbm.set(3 * i, true);
}
for(int i = 0; i != len; ++i) {
Assert.assertTrue(pbm.get(3 * i));
Assert.assertFalse(pbm.get(3 * i + 1));
Assert.assertFalse(pbm.get(3 * i + 2));
}
for(int i = len; i != 2 * len; ++i) {
Assert.assertFalse(pbm.get(3 * i));
Assert.assertFalse(pbm.get(3 * i + 1));
Assert.assertFalse(pbm.get(3 * i + 2));
}
long n = 0;
while(true) {
if (n == 31) {
new String();
}
long m = pbm.seekOne(n);
if (m < 0) {
Assert.assertTrue(n == 3 * len - 2);
break;
}
if (m == n) {
Assert.assertTrue(n == 0);
}
else {
Assert.assertTrue(m == n + 2);
}
n = m + 1;
}
for(int i = 0; i != len; ++i) {
pbm.set(1000l * len + 3 * i, true);
}
for(int i = 0; i != len; ++i) {
Assert.assertTrue(pbm.get(1000l * len + 3 * i));
Assert.assertFalse(pbm.get(1000l * len + 3 * i + 1));
Assert.assertFalse(pbm.get(1000l * len + 3 * i + 2));
}
}
@Test
public void delete_test() {
PagedBitMap pbm = new PagedBitMap();
pbm.set(20, true);
pbm.set(40, true);
pbm.set(60, true);
pbm.set(80, true);
pbm.set(100, true);
assertThat(pbm.get(20)).isTrue();
assertThat(pbm.get(40)).isTrue();
assertThat(pbm.get(60)).isTrue();
assertThat(pbm.get(80)).isTrue();
assertThat(pbm.get(100)).isTrue();
pbm.set(40, false);
assertThat(pbm.get(20)).isTrue();
assertThat(pbm.get(40)).isFalse();
assertThat(pbm.get(60)).isTrue();
assertThat(pbm.get(80)).isTrue();
assertThat(pbm.get(100)).isTrue();
assertThat(pbm.seekOne(0)).isEqualTo(20);
assertThat(pbm.seekOne(21)).isEqualTo(60);
assertThat(pbm.seekOne(41)).isEqualTo(60);
assertThat(pbm.seekOne(61)).isEqualTo(80);
assertThat(pbm.seekOne(81)).isEqualTo(100);
assertThat(pbm.seekOne(101)).isEqualTo(-1);
assertThat(pbm.getAndSet(60, false)).isTrue();
assertThat(pbm.getAndSet(40, true)).isFalse();
assertThat(pbm.get(40)).isTrue();
assertThat(pbm.get(60)).isFalse();
}
}