package de.westnordost.streetcomplete.quests.opening_hours;
import junit.framework.TestCase;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
public class NumberSystemTest extends TestCase
{
public void testIllegal()
{
try
{
new NumberSystem(10,3);
fail();
}
catch(Exception e) {}
}
public void testGetSize()
{
NumberSystem s = new NumberSystem(5,10);
assertEquals(5,s.getSize(new CircularSection(2,9)));
assertEquals(1,s.getSize(new CircularSection(5,5)));
assertEquals(2,s.getSize(new CircularSection(5,6)));
assertEquals(6,s.getSize(new CircularSection(6,5)));
assertEquals(3,s.getSize(new CircularSection(9,5)));
}
public void testComplementNone()
{
NumberSystem s = new NumberSystem(0,10);
List<CircularSection> r = s.complemented(new ArrayList<CircularSection>());
assertEquals(1,r.size());
assertEquals(new CircularSection(0,10),r.get(0));
}
public void testComplementFull()
{
NumberSystem s = new NumberSystem(0,10);
List<CircularSection> r = s.complemented(Collections.singletonList(new CircularSection(0,10)));
assertTrue(r.isEmpty());
}
public void testComplementOneAtEnd()
{
NumberSystem s = new NumberSystem(0,10);
List<CircularSection> r = s.complemented(Collections.singletonList(new CircularSection(0,8)));
assertEquals(1,r.size());
assertEquals(new CircularSection(9,10),r.get(0));
}
public void testComplementSqueezeOneAtEnd()
{
NumberSystem s = new NumberSystem(0,10);
List<CircularSection> r = s.complemented(Collections.singletonList(new CircularSection(0,9)));
assertEquals(1,r.size());
assertEquals(new CircularSection(10,10),r.get(0));
}
public void testComplementOneAtStart()
{
NumberSystem s = new NumberSystem(0,10);
List<CircularSection> r = s.complemented(Collections.singletonList(new CircularSection(4,10)));
assertEquals(1,r.size());
assertEquals(new CircularSection(0,3),r.get(0));
}
public void testComplementSqueezeOneAtStart()
{
NumberSystem s = new NumberSystem(0,10);
List<CircularSection> r = s.complemented(Collections.singletonList(new CircularSection(1,10)));
assertEquals(1,r.size());
assertEquals(new CircularSection(0,0),r.get(0));
}
public void testComplementOneCenter()
{
NumberSystem s = new NumberSystem(0,10);
List<CircularSection> r = s.complemented(Arrays.asList(
new CircularSection(0, 3), new CircularSection(6, 10)));
assertEquals(1,r.size());
assertEquals(new CircularSection(4,5),r.get(0));
}
public void testComplementBothEnds()
{
NumberSystem s = new NumberSystem(0,10);
List<CircularSection> r = s.complemented(Collections.singletonList(new CircularSection(3, 8)));
assertEquals(1,r.size());
assertEquals(new CircularSection(9,2), r.get(0));
}
public void testComplementSwissCheese()
{
NumberSystem s = new NumberSystem(0,10);
List<CircularSection> r = s.complemented(Arrays.asList(
new CircularSection(-5, 1),
new CircularSection(3,3),
new CircularSection(7,8)
));
assertEquals(3,r.size());
assertTrue(r.containsAll(Arrays.asList(
new CircularSection(2,2),
new CircularSection(4,6),
new CircularSection(9,10)
)));
}
public void testComplementLoop()
{
NumberSystem s = new NumberSystem(0,10);
List<CircularSection> r = s.complemented(Collections.singletonList(new CircularSection(8, 5)));
assertEquals(1, r.size());
assertEquals(new CircularSection(6,7), r.get(0));
}
public void testNoComplementAtEnd()
{
NumberSystem s = new NumberSystem(0,10);
List<CircularSection> r = s.complemented(Arrays.asList(
new CircularSection(0,9),
new CircularSection(10,10)
));
assertTrue(r.isEmpty());
}
public void testMerge()
{
NumberSystem s = new NumberSystem(3,10);
List<CircularSection> sections = new ArrayList<>();
sections.add(new CircularSection(3,4));
sections.add(new CircularSection(9,10));
List<CircularSection> result = s.merged(sections);
assertEquals(1, result.size());
assertEquals(9,result.get(0).getStart());
assertEquals(4,result.get(0).getEnd());
}
}