content: /*************************************************************************
  *                                                                        *
  *  This file is part of the 20n/act project.                             *
  *  20n/act enables DNA prediction for synthetic biology/bioengineering.  *
  *  Copyright (C) 2017 20n Labs, Inc.                                     *
  *                                                                        *
  *  Please direct all queries to act@20n.com.                             *
  *                                                                        *
  *  This program is free software: you can redistribute it and/or modify  *
  *  it under the terms of the GNU General Public License as published by  *
  *  the Free Software Foundation, either version 3 of the License, or     *
  *  (at your option) any later version.                                   *
  *                                                                        *
  *  This program is distributed in the hope that it will be useful,       *
  *  but WITHOUT ANY WARRANTY; without even the implied warranty of        *
  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
  *  GNU General Public License for more details.                          *
  *                                                                        *
  *  You should have received a copy of the GNU General Public License     *
  *  along with this program.  If not, see <http://www.gnu.org/licenses/>. *
  *                                                                        *
  *************************************************************************/
  
  package com.act.lcms.v2.fullindex;
  
  import com.act.utils.MockRocksDBAndHandles;
  import org.apache.commons.lang3.tuple.Pair;
  import org.apache.commons.lang3.tuple.Triple;
  import org.junit.Before;
  import org.junit.Test;
  
  import java.util.Arrays;
  import java.util.List;
  
  import static org.junit.Assert.assertEquals;
  
  public class SearcherTest {
    public static final double FP_TOLERANCE = 0.000001;
  
    Searcher searcher;
  
    @Before
    public void setup() throws Exception {
      // Most of the work is done in the DB construction.  TODO: supply our own test data to use.
      MockRocksDBAndHandles<ColumnFamilies> fakeDB = BuilderTest.populateTestDB();
      searcher = new Searcher(fakeDB);
      searcher.init();
    }
  
    @Test
    public void searchIndexInRange() throws Exception {
      List<TMzI> actual = searcher.searchIndexInRange(Pair.of(100.004, 100.016), Pair.of(1.5, 3.5));
  
      List<Triple<Float, Double, Float>> expected = Arrays.asList(
          Triple.of(2.0F, 100.005, 10.0F),
          Triple.of(2.0F, 100.010, 20.0F),
          Triple.of(2.0F, 100.015, 30.0F),
          Triple.of(3.0F, 100.010, 100.0F),
          Triple.of(3.0F, 100.015, 200.0F)
      );
  
      assertEquals("Searcher returned expected number of TMzI tuples", expected.size(), actual.size());
      for (int i = 0; i < expected.size(); i++) {
        Triple<Float, Double, Float> e = expected.get(i);
        TMzI a = actual.get(i);
        assertEquals("Time matches expected", e.getLeft(), a.getTime(), FP_TOLERANCE);
        assertEquals("M/z matches expected", e.getMiddle(), a.getMz(), FP_TOLERANCE);
        assertEquals("Intensity matches expected", e.getRight(), a.getIntensity(), FP_TOLERANCE);
      }
    }
  }
  