// Path: src/main/java/de/danielbasedow/prospecter/core/document/Field.java
// public class Field {
//     protected final String name;
//     protected final List<Token> tokens;
// 
//     /**
//      * @param name   name of the field
//      * @param tokens List of tokens in the field
//      */
//     public Field(String name, List<Token> tokens) {
//         this.name = name;
//         this.tokens = tokens;
//     }
// 
//     public List<Token> getTokens() {
//         return tokens;
//     }
// 
//     public String getName() {
//         return name;
//     }
// 
// }
// 
// Path: src/main/java/de/danielbasedow/prospecter/core/index/FullTextIndex.java
// public class FullTextIndex extends AbstractFieldIndex {
//     private static final Logger LOGGER = LoggerFactory.getLogger(FullTextIndex.class);
// 
//     protected final TIntObjectHashMap<TLongList> index = new TIntObjectHashMap<TLongList>();
// 
//     private final Analyzer analyzer;
// 
//     public FullTextIndex(String name, Analyzer analyzer) {
//         super(name);
//         this.analyzer = analyzer;
//     }
// 
//     @Override
//     public void addPosting(Token token, Long posting) {
//         TLongList postingList;
//         if (index.containsKey((Integer) token.getToken())) {
//             postingList = index.get((Integer) token.getToken());
//         } else {
//             postingList = new TLongArrayList();
//             index.put((Integer) token.getToken(), postingList);
//         }
//         postingList.add(posting);
//     }
// 
//     @Override
//     public void removePosting(Token token, Long posting) {
//         TLongList postingList = index.get((Integer) token.getToken());
//         if (postingList != null && postingList.contains(posting)) {
//             LOGGER.debug("removing posting: " + String.valueOf(posting));
//             postingList.remove(posting);
//         }
//     }
// 
//     @Override
//     public FieldType getFieldType() {
//         return FieldType.FULL_TEXT;
//     }
// 
//     public TLongList getQueryPostingsForTermId(Token token) {
//         Integer t = (Integer) token.getToken();
//         if (index.containsKey(t)) {
//             return index.get(t);
//         }
//         return null;
//     }
// 
//     @Override
//     public void match(Field field, Matcher matcher) {
//         for (Token token : field.getTokens()) {
//             Integer t = (Integer) token.getToken();
//             TLongList additionalPostings = index.get(t);
//             if (additionalPostings != null) {
//                 matcher.addHits(additionalPostings);
//             }
//         }
//     }
// 
//     public Analyzer getAnalyzer() {
//         return analyzer;
//     }
// 
//     public void trim() {
//         for (Object list : index.values()) {
//             if (list instanceof ArrayList) {
//                 ((ArrayList) list).trimToSize();
//             }
//         }
//     }
// }
// 
// Path: src/main/java/de/danielbasedow/prospecter/core/query/QueryManager.java
// public class QueryManager {
//     protected final TIntIntHashMap bitCounts = new TIntIntHashMap();
//     protected final TIntObjectHashMap<QueryNegativeCounter> negativeCounts = new TIntObjectHashMap<QueryNegativeCounter>();
// 
//     public void addQuery(Query query) {
//         bitCounts.put(query.getQueryId(), query.getBits());
//         if (query.hasNegatives()) {
//             negativeCounts.put(query.getQueryId(), query.getNegativeMask());
//         }
// 
//     }
// 
//     public BitSet getMask(int queryId) {
//         BitSet set = new BitSet();
//         set.set(0, bitCounts.get(queryId), true);
//         return set;
//     }
// 
//     public void deleteQuery(int queryId) {
//         bitCounts.remove(queryId);
//     }
// 
//     public QueryNegativeCounter getQueryNegativeCounter(int queryId) {
//         return negativeCounts.get(queryId);
//     }
// }
// 
// Path: src/main/java/de/danielbasedow/prospecter/core/query/QueryPosting.java
// public class QueryPosting {
//     public static final int QUERY_ID_INDEX = 0;
//     public static final int QUERY_BIT_INDEX = 1;
//     public static final int QUERY_NOT_INDEX = 2;
// 
//     private final int queryId;
//     private final short queryBit;
// 
//     public QueryPosting(int queryId, short queryBit) {
//         this.queryId = queryId;
//         this.queryBit = queryBit;
//     }
// 
//     public int getQueryId() {
//         return queryId;
//     }
// 
//     public short getQueryBit() {
//         return queryBit;
//     }
// 
//     public long getPackedPosting() {
//         return pack(queryId, queryBit, false);
//     }
// 
//     public static long pack(int queryId, int queryBit, boolean notFlag) {
//         int not = notFlag ? 1 : 0;
// 
//         return (((long) queryId) << 32) | ((queryBit << 1 ) & 0xfffffffeL) | ((long) not & 0x00000001L);
//     }
// 
//     public static int[] unpack(long posting) {
//         return new int[]{
//                 (int) (posting >> 32),
//                 (int) ((posting) & 0xfffffffel) >> 1,
//                 (int) ((posting) & 0x00000001l)
//         };
//     }
// }


import de.danielbasedow.prospecter.core.document.Field;
import de.danielbasedow.prospecter.core.index.FullTextIndex;
import de.danielbasedow.prospecter.core.query.QueryManager;
import de.danielbasedow.prospecter.core.query.QueryPosting;
import junit.framework.TestCase;
import java.util.ArrayList;
package de.danielbasedow.prospecter.core;



public class MatcherTest extends TestCase {

    public void test() {
// Path: src/main/java/de/danielbasedow/prospecter/core/document/Field.java
// public class Field {
//     protected final String name;
//     protected final List<Token> tokens;
// 
//     /**
//      * @param name   name of the field
//      * @param tokens List of tokens in the field
//      */
//     public Field(String name, List<Token> tokens) {
//         this.name = name;
//         this.tokens = tokens;
//     }
// 
//     public List<Token> getTokens() {
//         return tokens;
//     }
// 
//     public String getName() {
//         return name;
//     }
// 
// }
// 
// Path: src/main/java/de/danielbasedow/prospecter/core/index/FullTextIndex.java
// public class FullTextIndex extends AbstractFieldIndex {
//     private static final Logger LOGGER = LoggerFactory.getLogger(FullTextIndex.class);
// 
//     protected final TIntObjectHashMap<TLongList> index = new TIntObjectHashMap<TLongList>();
// 
//     private final Analyzer analyzer;
// 
//     public FullTextIndex(String name, Analyzer analyzer) {
//         super(name);
//         this.analyzer = analyzer;
//     }
// 
//     @Override
//     public void addPosting(Token token, Long posting) {
//         TLongList postingList;
//         if (index.containsKey((Integer) token.getToken())) {
//             postingList = index.get((Integer) token.getToken());
//         } else {
//             postingList = new TLongArrayList();
//             index.put((Integer) token.getToken(), postingList);
//         }
//         postingList.add(posting);
//     }
// 
//     @Override
//     public void removePosting(Token token, Long posting) {
//         TLongList postingList = index.get((Integer) token.getToken());
//         if (postingList != null && postingList.contains(posting)) {
//             LOGGER.debug("removing posting: " + String.valueOf(posting));
//             postingList.remove(posting);
//         }
//     }
// 
//     @Override
//     public FieldType getFieldType() {
//         return FieldType.FULL_TEXT;
//     }
// 
//     public TLongList getQueryPostingsForTermId(Token token) {
//         Integer t = (Integer) token.getToken();
//         if (index.containsKey(t)) {
//             return index.get(t);
//         }
//         return null;
//     }
// 
//     @Override
//     public void match(Field field, Matcher matcher) {
//         for (Token token : field.getTokens()) {
//             Integer t = (Integer) token.getToken();
//             TLongList additionalPostings = index.get(t);
//             if (additionalPostings != null) {
//                 matcher.addHits(additionalPostings);
//             }
//         }
//     }
// 
//     public Analyzer getAnalyzer() {
//         return analyzer;
//     }
// 
//     public void trim() {
//         for (Object list : index.values()) {
//             if (list instanceof ArrayList) {
//                 ((ArrayList) list).trimToSize();
//             }
//         }
//     }
// }
// 
// Path: src/main/java/de/danielbasedow/prospecter/core/query/QueryManager.java
// public class QueryManager {
//     protected final TIntIntHashMap bitCounts = new TIntIntHashMap();
//     protected final TIntObjectHashMap<QueryNegativeCounter> negativeCounts = new TIntObjectHashMap<QueryNegativeCounter>();
// 
//     public void addQuery(Query query) {
//         bitCounts.put(query.getQueryId(), query.getBits());
//         if (query.hasNegatives()) {
//             negativeCounts.put(query.getQueryId(), query.getNegativeMask());
//         }
// 
//     }
// 
//     public BitSet getMask(int queryId) {
//         BitSet set = new BitSet();
//         set.set(0, bitCounts.get(queryId), true);
//         return set;
//     }
// 
//     public void deleteQuery(int queryId) {
//         bitCounts.remove(queryId);
//     }
// 
//     public QueryNegativeCounter getQueryNegativeCounter(int queryId) {
//         return negativeCounts.get(queryId);
//     }
// }
// 
// Path: src/main/java/de/danielbasedow/prospecter/core/query/QueryPosting.java
// public class QueryPosting {
//     public static final int QUERY_ID_INDEX = 0;
//     public static final int QUERY_BIT_INDEX = 1;
//     public static final int QUERY_NOT_INDEX = 2;
// 
//     private final int queryId;
//     private final short queryBit;
// 
//     public QueryPosting(int queryId, short queryBit) {
//         this.queryId = queryId;
//         this.queryBit = queryBit;
//     }
// 
//     public int getQueryId() {
//         return queryId;
//     }
// 
//     public short getQueryBit() {
//         return queryBit;
//     }
// 
//     public long getPackedPosting() {
//         return pack(queryId, queryBit, false);
//     }
// 
//     public static long pack(int queryId, int queryBit, boolean notFlag) {
//         int not = notFlag ? 1 : 0;
// 
//         return (((long) queryId) << 32) | ((queryBit << 1 ) & 0xfffffffeL) | ((long) not & 0x00000001L);
//     }
// 
//     public static int[] unpack(long posting) {
//         return new int[]{
//                 (int) (posting >> 32),
//                 (int) ((posting) & 0xfffffffel) >> 1,
//                 (int) ((posting) & 0x00000001l)
//         };
//     }
// }


// Path: src/test/java/de/danielbasedow/prospecter/core/MatcherTest.java
import de.danielbasedow.prospecter.core.document.Field;
import de.danielbasedow.prospecter.core.index.FullTextIndex;
import de.danielbasedow.prospecter.core.query.QueryManager;
import de.danielbasedow.prospecter.core.query.QueryPosting;
import junit.framework.TestCase;
import java.util.ArrayList;

package de.danielbasedow.prospecter.core;



public class MatcherTest extends TestCase {

    public void test() {
        FullTextIndex ft = new FullTextIndex("_all", null);