/*
* Copyright (C) 2011 Clearspring Technologies, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.streaminer.stream.frequency.util;
import static org.junit.Assert.*;
import java.util.List;
import org.junit.Before;
import org.junit.Test;
public class TestSampleSet
{
private SampleSet<String> set;
private String[] e;
/**
* @throws java.lang.Exception
*/
@Before
public void setUp() throws Exception
{
set = new SampleSet<String>();
e = new String[3];
for (int i = 0; i < e.length; i++)
{
e[i] = "Element_" + i;
}
}
@Test
public void testPeekK()
{
set.put(e[0]);
for (int i = 0; i < 2; i++)
{
set.put(e[1]);
}
for (int i = 0; i < 3; i++)
{
set.put(e[2]);
}
List<CountEntry<String>> top = null;
// Negative
boolean caught = false;
try
{
top = set.peek(-1);
}
catch (IllegalArgumentException e)
{
caught = true;
}
assertTrue(caught);
// 0
top = set.peek(0);
assertEquals(0, top.size());
// 1
top = set.peek(1);
assertEquals(1, top.size());
assertEquals(set.peek().getItem(), top.get(0).getItem());
// 2 (more than one but less than size)
top = set.peek(2);
assertEquals(2, top.size());
for (int i = 0; i < 2; i++)
{
assertEquals(e[2 - i], top.get(i).getItem());
}
// 3 (size)
top = set.peek(3);
assertEquals(3, top.size());
for (int i = 0; i < 3; i++)
{
assertEquals(e[2 - i], top.get(i).getItem());
}
// 4 (more than size)
top = set.peek(4);
assertEquals(3, top.size());
for (int i = 0; i < 3; i++)
{
assertEquals(e[2 - i], top.get(i).getItem());
}
}
@Test
public void testPut()
{
// Empty set
assertEquals(1L, set.put(e[0]));
assertEquals(e[0], set.peek().getItem());
assertEquals(e[0], ((SampleSet<String>) set).peekMin());
}
@Test
public void testPutWithIncrement()
{
// Empty set
assertEquals(10L, set.put(e[0], 10));
assertEquals(e[0], set.peek().getItem());
assertEquals(e[0], ((SampleSet<String>) set).peekMin());
}
@Test
public void testRemoveMin()
{
// Empty set
assertNull(set.removeMin());
assertEquals(0, set.size());
assertEquals(0L, set.count());
// Maintaining order
set.put(e[0]);
for (int i = 0; i < 2; i++)
{
set.put(e[1]);
}
for (int i = 0; i < 3; i++)
{
set.put(e[2]);
}
assertEquals(3, set.size());
assertEquals(6L, set.count());
assertEquals(e[0], set.removeMin());
assertEquals(2, set.size());
assertEquals(5L, set.count());
assertEquals(e[1], set.removeMin());
assertEquals(1, set.size());
assertEquals(3L, set.count());
assertEquals(e[2], set.removeMin());
assertEquals(0, set.size());
assertEquals(0L, set.count());
assertEquals(null, set.removeMin());
assertEquals(0, set.size());
assertEquals(0L, set.count());
}
}