/*
* Copyright (c) 2008-2012, Hazel Bilisim Ltd. 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.
*/
package com.hazelcast.query;
import com.hazelcast.impl.Record;
import com.hazelcast.impl.TestUtil;
import org.junit.Test;
import org.junit.runner.RunWith;
import java.util.Arrays;
import java.util.HashSet;
import java.util.concurrent.ConcurrentMap;
import static org.junit.Assert.*;
@RunWith(com.hazelcast.util.RandomBlockJUnit4ClassRunner.class)
public class IndexTest extends TestUtil {
@Test
public void testBasics() {
testIt(true);
testIt(false);
}
private void testIt(boolean ordered) {
Index index = new Index(null, ordered, 0);
assertEquals(0, index.getRecords(0L).size());
assertEquals(0, index.getSubRecordsBetween(0L, 1000L).size());
Record record5 = newRecord(5L);
assertEquals(5L, (Object) record5.getId());
index.index(55L, record5);
assertEquals(1, index.getRecordValues().size());
assertEquals(new Long(55L), index.getRecordValues().get(5L));
ConcurrentMap<Long, Record> records = index.getMapRecords().get(55L);
assertNotNull(records);
assertEquals(record5, records.get(5L));
Record record6 = newRecord(6L);
assertEquals(6L, (Object) record6.getId());
index.index(66L, record6);
assertEquals(2, index.getRecordValues().size());
assertEquals(new Long(66L), index.getRecordValues().get(6L));
records = index.getMapRecords().get(66L);
assertNotNull(records);
assertEquals(record6, records.get(6L));
index.index(555L, record5);
assertEquals(2, index.getRecordValues().size());
assertEquals(2, index.getMapRecords().size());
assertEquals(new Long(555L), index.getRecordValues().get(5L));
records = index.getMapRecords().get(555L);
assertNotNull(records);
assertEquals(record5, records.get(5L));
assertEquals(1, index.getRecords(555L).size());
assertEquals(2, index.getSubRecordsBetween(55L, 555L).size());
assertEquals(2, index.getSubRecordsBetween(66L, 555L).size());
assertEquals(1, index.getSubRecordsBetween(555L, 555L).size());
Record record50 = newRecord(50);
index.index(555L, record50);
assertEquals(3, index.getRecordValues().size());
assertEquals(2, index.getMapRecords().size());
assertEquals(new Long(555L), index.getRecordValues().get(5L));
assertEquals(new Long(555L), index.getRecordValues().get(50L));
records = index.getMapRecords().get(555L);
assertNotNull(records);
assertEquals(2, records.size());
assertEquals(record5, records.get(5L));
assertEquals(record50, records.get(50L));
assertEquals(2, index.getRecords(555L).size());
assertEquals(3, index.getSubRecordsBetween(55L, 555L).size());
assertEquals(3, index.getSubRecordsBetween(66L, 555L).size());
assertEquals(2, index.getSubRecordsBetween(555L, 555L).size());
assertEquals(0, index.getSubRecords(false, true, 66L).size());
assertEquals(1, index.getSubRecords(true, true, 66L).size());
assertEquals(1, index.getSubRecords(true, true, 67L).size());
assertEquals(2, index.getSubRecords(false, false, 66L).size());
assertEquals(3, index.getSubRecords(true, false, 66L).size());
assertEquals(3, index.getSubRecords(true, false, 61L).size());
assertEquals(3, index.getRecords(new HashSet<Long>(Arrays.asList(66L, 555L, 34234L))).size());
assertEquals(2, index.getRecords(new HashSet<Long>(Arrays.asList(555L, 34234L))).size());
record5.setActive(false);
index.index(-1L, record5);
assertEquals(2, index.getRecordValues().size());
assertEquals(2, index.getMapRecords().size());
assertEquals(new Long(555L), index.getRecordValues().get(50L));
assertEquals(null, index.getRecordValues().get(5L));
records = index.getMapRecords().get(555L);
assertNotNull(records);
assertEquals(null, records.get(5L));
assertEquals(record50, records.get(50L));
assertEquals(1, index.getRecords(555L).size());
assertEquals(2, index.getSubRecordsBetween(55L, 555L).size());
assertEquals(2, index.getSubRecordsBetween(66L, 555L).size());
assertEquals(1, index.getSubRecordsBetween(555L, 555L).size());
assertEquals(0, index.getSubRecords(false, true, 66L).size());
assertEquals(1, index.getSubRecords(true, true, 66L).size());
assertEquals(1, index.getSubRecords(true, true, 67L).size());
assertEquals(1, index.getSubRecords(false, false, 66L).size());
assertEquals(2, index.getSubRecords(true, false, 66L).size());
assertEquals(2, index.getSubRecords(true, false, 61L).size());
record50.setActive(false);
index.index(-1L, record50);
assertEquals(1, index.getRecordValues().size());
assertEquals(1, index.getMapRecords().size());
assertEquals(null, index.getRecordValues().get(50L));
records = index.getMapRecords().get(555L);
assertNull(records);
assertEquals(0, index.getRecords(555L).size());
assertEquals(1, index.getSubRecordsBetween(55L, 555L).size());
assertEquals(1, index.getSubRecordsBetween(66L, 555L).size());
assertEquals(0, index.getSubRecordsBetween(555L, 555L).size());
record6.setActive(false);
index.index(-1L, record6);
assertEquals(0, index.getRecordValues().size());
assertEquals(0, index.getMapRecords().size());
assertEquals(null, index.getRecordValues().get(6L));
assertNull(index.getMapRecords().get(66L));
assertEquals(0, index.getRecords(555L).size());
assertEquals(0, index.getSubRecordsBetween(55L, 555L).size());
assertEquals(0, index.getSubRecordsBetween(66L, 555L).size());
assertEquals(0, index.getSubRecordsBetween(555L, 555L).size());
}
}