package org.streaminer.stream.norm;
import java.util.List;
import org.apache.commons.lang.StringUtils;
import org.junit.Test;
import static org.junit.Assert.*;
import org.streaminer.stream.frequency.AMSSketch;
import org.streaminer.stream.frequency.RealCounting;
import org.streaminer.stream.frequency.StreamGenerator;
import org.streaminer.stream.frequency.util.CountEntry;
/**
*
* @author Maycon Viana Bordin <mayconbordin@gmail.com>
*/
public class StableSketchTest {
public StableSketchTest() {
}
@Test
public void testL2Norm() {
System.out.println("Testing L2 Norm");
int n = 1048575;
int range = 12345;
StableSketch sketch = new StableSketch(128,2.0,54211);
StreamGenerator gen = new StreamGenerator(0.8, n, range);
gen.generate();
gen.exact();
long[] stream = gen.stream;
long sumsq = gen.sumsq;
for (int i=1; i<=range; i++)
sketch.add((int) stream[i], 1.0);
double z = sketch.norm();
System.out.println("Exact L2: " + sumsq);
System.out.println("Estimated L2: " + (z*z));
System.out.println(StringUtils.repeat("-", 80));
}
@Test
public void testL1Norm() {
System.out.println("Testing L1 Norm");
int n = 1048575;
int range = 12345;
StableSketch sketch = new StableSketch(128,1.0,13461);
StreamGenerator gen = new StreamGenerator(0.8, n, range);
gen.generate();
gen.exact();
long[] stream = gen.stream;
long sumsq = gen.sumsq;
for (int i=1; i<=range; i++)
sketch.add((int) stream[i], 1.0);
double z = sketch.norm();
System.out.println("Exact L1: " + range);
System.out.println("Estimated L1: " + z);
System.out.println(StringUtils.repeat("-", 80));
}
@Test
public void testL0Norm() {
System.out.println("Testing L0 Norm");
int n = 1048575;
int range = 12345;
StableSketch sketch = new StableSketch(128,0.00001,13461);
StreamGenerator gen = new StreamGenerator(0.8, n, range);
gen.generate();
gen.exact();
long[] stream = gen.stream;
long distinct = gen.distinct;
for (int i=1; i<=range; i++)
sketch.add((int) stream[i], 1.0);
double z = sketch.norm()/1.43;
System.out.println("Exact L0: " + distinct);
System.out.println("Fast estimate L0: " + z);
sketch = new StableSketch(128,0.02,13461);
for (int i=1; i<=range; i++)
sketch.add((int) stream[i], 1.0);
z = sketch.norm()/1.43;
System.out.println("Slow estimate L0: " + z);
System.out.println(StringUtils.repeat("-", 80));
}
}