package org.yamcs.utils; import static org.junit.Assert.*; import java.util.HashSet; import java.util.PrimitiveIterator; import java.util.Set; import org.junit.Ignore; import org.junit.Test; public class SortedIntArrayTest { @Test public void test1() { SortedIntArray s = new SortedIntArray(); assertEquals(0, s.size()); s.insert(2); assertEquals(1, s.size()); assertEquals(2, s.get(0)); s.insert(3); assertEquals(2, s.size()); assertEquals(2, s.get(0)); assertEquals(3, s.get(1)); s.insert(1); assertEquals(3, s.size()); assertEquals(1, s.get(0)); assertEquals(2, s.get(1)); assertEquals(3, s.get(2)); } @Test public void test2() { SortedIntArray s = new SortedIntArray(); assertEquals(0, s.size()); int n = 1000; for(int i =0; i<n/2; i++) { s.insert(i); } for(int i=n-1; i>=n/2; i--) { s.insert(i); } assertEquals(n, s.size()); for(int i=0;i<n;i++) { assertEquals(i, s.get(i)); } } @Test public void testEquals() { SortedIntArray s1 = new SortedIntArray(1, 3, 7); SortedIntArray s2 = new SortedIntArray(3, 1, 7); SortedIntArray s3 = new SortedIntArray(1, 3); assertEquals(s1.hashCode(), s2.hashCode()); assertTrue(s1.equals(s2)); assertTrue(s2.equals(s1)); assertFalse(s1.equals(s3)); assertFalse(s3.equals(s1)); assertFalse(s1.hashCode() == s3.hashCode()); } @Test public void testEncodeDecode() { SortedIntArray s1 = new SortedIntArray(1,5,20); byte[] encoded = s1.encodeToVarIntArray(); SortedIntArray s2 = SortedIntArray.decodeFromVarIntArray(encoded); assertTrue(s1.equals(s2)); } @Test public void testEncodeDecodeNegative() { SortedIntArray s1 = new SortedIntArray(-1, 5, 20); byte[] encoded = s1.encodeToVarIntArray(); SortedIntArray s2 = SortedIntArray.decodeFromVarIntArray(encoded); System.out.println("s2 encoded: "+s2); assertTrue(s1.equals(s2)); } @Test public void testEncodeDecodeZeroLength() { SortedIntArray s1 = new SortedIntArray(); byte[] encoded = s1.encodeToVarIntArray(); SortedIntArray s2 = SortedIntArray.decodeFromVarIntArray(encoded); assertTrue(s1.equals(s2)); assertTrue(s2.equals(s1)); } private void assertItEquals(PrimitiveIterator.OfInt it, int ...a) { for(int i=0; i<a.length;i++) { assertTrue(it.hasNext()); assertEquals(a[i], it.nextInt()); } assertFalse(it.hasNext()); } @Test public void testAscendingIterator() { SortedIntArray s1 = new SortedIntArray(1,3,4); PrimitiveIterator.OfInt it = s1.getAscendingIterator(0); assertItEquals(it, 1, 3, 4); it = s1.getAscendingIterator(1); assertItEquals(it, 1, 3, 4); it = s1.getAscendingIterator(2); assertItEquals(it, 3, 4); it = s1.getAscendingIterator(4); assertItEquals(it, 4); it = s1.getAscendingIterator(5); assertFalse(it.hasNext()); } @Test public void testDescendingIterator() { SortedIntArray s1 = new SortedIntArray(1, 3, 4); PrimitiveIterator.OfInt it = s1.getDescendingIterator(0); assertFalse(it.hasNext()); it = s1.getDescendingIterator(1); assertFalse(it.hasNext()); it = s1.getDescendingIterator(2); assertItEquals(it, 1); it = s1.getDescendingIterator(4); assertItEquals(it, 3, 1); it = s1.getDescendingIterator(5); assertItEquals(it, 4, 3, 1); } @Test public void testIteratorsEmptyArray() { SortedIntArray s1 = new SortedIntArray(); PrimitiveIterator.OfInt it = s1.getDescendingIterator(0); assertFalse(it.hasNext()); it = s1.getAscendingIterator(0); } @Ignore @Test public void testperf() { Runtime runtime = Runtime.getRuntime(); System.out.println("allocated memory (KB): "+runtime.totalMemory()/1024); int n = 10000000; SortedIntArray sia = new SortedIntArray(); long t0=System.currentTimeMillis(); for(int i =0; i<n; i++) { sia.insert(i); } System.out.println("Populate sortedintarray: "+(System.currentTimeMillis()-t0)+" ms"); System.out.println("allocated memory (KB): "+runtime.totalMemory()/1024); long t1=System.currentTimeMillis(); Set<Integer> set= new HashSet<Integer>(); for(int i=0;i<n;i++) { set.add(sia.get(i)); } System.out.println("Populate hashset: "+(System.currentTimeMillis()-t1)+" ms"); System.out.println("allocated memory (KB): "+runtime.totalMemory()/1024); for (int k=0; k<20; k++) { long t2=System.currentTimeMillis(); long sum =0; for(int i=0;i<n;i++) { if(sia.search(i)>=0) { sum+=i; } } System.out.println("sum: "+sum+" Search in sorted array: "+(System.currentTimeMillis()-t2)+" ms"); System.out.println("allocated memory (KB): "+runtime.totalMemory()/1024); long t3=System.currentTimeMillis(); sum =0; for(int i=0;i<n;i++) { if(set.contains(i)) { sum+=i; } } System.out.println("sum: "+sum+" Search in hashset: "+(System.currentTimeMillis()-t3)+" ms"); System.out.println("allocated memory (KB): "+runtime.totalMemory()/1024); } } }