/**
* Copyright 2015 Santhosh Kumar Tekuri
*
* The JLibs authors license this file to you 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 jlibs.core.graph.sequences;
import jlibs.core.graph.Sequence;
import jlibs.core.graph.SequenceUtil;
import org.testng.ITest;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
import java.util.LinkedList;
import java.util.List;
/**
* @author Santhosh Kumar T
*/
public class SequenceTest<E> implements ITest{
private Sequence<E> seq;
public SequenceTest(Sequence<E> seq){
this.seq = seq;
}
@Override
public String getTestName(){
return seq.getClass().getSimpleName();
}
@BeforeMethod
public void reset(){
seq = seq.copy();
}
@Test
public void testReset(){
List<E> list = SequenceUtil.addAll(new LinkedList<E>(), seq);
seq.reset();
for(E elem; (elem=seq.next())!=null;){
E prev = list.remove(0);
assert prev.equals(elem) : prev+"!="+elem;
}
}
@Test
public void testCopy(){
List<E> list = SequenceUtil.addAll(new LinkedList<E>(), seq);
seq = seq.copy();
for(E elem; (elem=seq.next())!=null;){
E prev = list.remove(0);
assert prev.equals(elem) : prev+"!="+elem;
}
}
@Test
public void testLength(){
int len = seq.length();
List<E> list = SequenceUtil.addAll(new LinkedList<E>(), seq);
assert list.size()==len : list.size()+"!="+len;
}
@Test
public void testHasNext(){
List<E> list = SequenceUtil.addAll(new LinkedList<E>(), seq);
assert !seq.hasNext() : "next()==null then hasNext()==false";
seq.reset();
E elem;
while(true){
boolean hasNext = seq.hasNext();
assert hasNext==seq.hasNext() : "seq.hasNext()==seq.hasNext()";
elem = seq.next();
assert hasNext==(elem!=null) : "hasNext() == next()!=null";
if(!hasNext)
return;
E prev = list.remove(0);
assert prev.equals(elem) : prev+"!="+elem;
}
}
}