Package com.browseengine.bobo.util.test

Source Code of com.browseengine.bobo.util.test.SparseFloatArrayTest

/**
* Bobo Browse Engine - High performance faceted/parametric search implementation
* that handles various types of semi-structured data.  Written in Java.
*
* Copyright (C) 2005-2006  Spackle
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library 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
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
*
* To contact the project administrators for the bobo-browse project,
* please go to https://sourceforge.net/projects/bobo-browse/, or
* send mail to owner@browseengine.com.
*/
package com.browseengine.bobo.util.test;

import java.util.Random;

import junit.framework.TestCase;

import com.browseengine.bobo.util.SparseFloatArray;


/**
* @author spackle
*
*/
public class SparseFloatArrayTest extends TestCase {
  private static final long SEED = -1587797429870936371L;

  public void testSpeed() throws Throwable {
    try {
      float[] orig = new float[32*1024*1024];
      float density = 0.4f;
      Random rand = new Random(SEED);
      int idx = 0;
      while (rand.nextFloat() > density) {
        idx++;
      }
      int count = 0;
      while (idx < orig.length) {
        orig[idx] = rand.nextFloat();
        count++;
        idx += 1;
        while (rand.nextDouble() > density) {
          idx++;
        }
      }
      assertTrue("count was bad: "+count, count > 100 && count < orig.length/2);
      System.out.println("float array with "+count+" out of "+orig.length+" non-zero values");
     
      SparseFloatArray sparse = new SparseFloatArray(orig);
     
      for (int i = 0; i < orig.length; i++) {
        float o = orig[i];
        float s = sparse.get(i);
        assertTrue("orig "+o+" wasn't the same as sparse: "+s+" for i = "+i, o == s);
      }
      // things came out correct
     
      long markTime = System.currentTimeMillis();
      for (int i = 0; i < orig.length; i++) {
        float f = orig[i];
      }
      long elapsedTimeOrig = System.currentTimeMillis()-markTime;
     
      markTime = System.currentTimeMillis();
      for (int i = 0;i < orig.length; i++) {
        float f = sparse.get(i);
      }
      long elapsedTimeSparse = System.currentTimeMillis()-markTime;
     
      double ratio = (double)elapsedTimeSparse/(double)elapsedTimeOrig;
      System.out.println("fyi on speed, direct array access took "+elapsedTimeOrig+
          " millis, while sparse float access took "+elapsedTimeSparse+
          "; that's a "+ratio+
          " X slowdown by using the condensed memory model (smaller number is better)");
     
      System.out.println(getName()+" success!");
    } catch (Throwable t) {
      t.printStackTrace();
      System.err.println("fail: "+t);
      throw t;
    }
  }
}
TOP

Related Classes of com.browseengine.bobo.util.test.SparseFloatArrayTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.