/* * Copyright (C) 2012 Jan Pokorsky * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package cz.cas.lib.proarc.webapp.shared.series; import cz.cas.lib.proarc.webapp.shared.series.RomanSeries.Roman; import static org.junit.Assert.*; import org.junit.Test; /** * * @author Jan Pokorsky */ public class RomanSeriesTest { public RomanSeriesTest() { } @Test public void testRomanSequence_1_inc1() { RomanSeries rs = new RomanSeries(1, 1, true); String[] expectations = {"I", "II", "III", "IV", "V", "VI"}; checkRomanSequence(expectations, rs); } @Test public void testRomanSequence_X_dec1() { RomanSeries rs = new RomanSeries("X", -1, false); String[] expectations = {"x", "ix", "viii", "vii", "vi", "v", "iv", "iii", "ii", "i", null}; checkRomanSequence(expectations, rs); } @Test public void testRomanSequence_MML_dec2() { RomanSeries rs = new RomanSeries("MML", -2, true); String[] expectations = {"MML", "MMXLVIII", "MMXLVI", "MMXLIV", "MMXLII", "MMXL"}; checkRomanSequence(expectations, rs); } private void checkRomanSequence(String[] expectations, RomanSeries rs) { for (String expectation : expectations) { assertEquals(expectation, rs.next()); } } @Test public void testRoman2Arabic() { assertEquals(1, Roman.toArabic("I")); assertEquals(1, Roman.toArabic("i")); assertEquals(9, Roman.toArabic("IX")); assertEquals(9, Roman.toArabic("Ix")); assertEquals(900, Roman.toArabic("CM")); assertEquals(1900, Roman.toArabic("MCM")); assertEquals(1997, Roman.toArabic("MCMXCVII")); } @Test(expected = IllegalArgumentException.class) public void testRoman2Arabic_Invalid_IM() { Roman.toArabic("IM"); } @Test(expected = IllegalArgumentException.class) public void testRoman2Arabic_Invalid_IIII() { Roman.toArabic("IIII"); } @Test(expected = IllegalArgumentException.class) public void testRoman2Arabic_Empty() { Roman.toArabic(""); } @Test(expected = IllegalArgumentException.class) public void testRoman2Arabic_Null() { Roman.toArabic(null); } @Test public void testArabic2Roman() { for (int i = 1; i < 10000; i++) { String roman = Roman.toRoman(i, true); int arabic = Roman.toArabic(roman); assertEquals(i, arabic); // assertEquals(String.format("%s, %s, %s\n", i, roman, arabic), i, arabic); } } @Test public void testValidRoman() { assertTrue(Series.validRoman("I")); assertTrue(Series.validRoman("i")); assertTrue(Series.validRoman("X")); assertTrue(Series.validRoman("x")); assertTrue(Series.validRoman("L")); assertTrue(Series.validRoman("l")); assertTrue(Series.validRoman("C")); assertTrue(Series.validRoman("c")); assertTrue(Series.validRoman("D")); assertTrue(Series.validRoman("d")); assertTrue(Series.validRoman("M")); assertTrue(Series.validRoman("m")); assertTrue(Series.validRoman("II")); assertTrue(Series.validRoman("III")); assertTrue(Series.validRoman("IV")); assertTrue(Series.validRoman("V")); assertTrue(Series.validRoman("VI")); assertTrue(Series.validRoman("VII")); assertTrue(Series.validRoman("VIII")); assertTrue(Series.validRoman("MMMM")); } @Test public void testInvalidRoman() { assertFalse(Series.validRoman("")); assertFalse(Series.validRoman(null)); assertFalse(Series.validRoman("a")); assertFalse(Series.validRoman("IA")); assertFalse(Series.validRoman("IIII")); assertFalse(Series.validRoman("CCCC")); assertFalse(Series.validRoman("IM")); assertFalse(Series.validRoman("IXM")); assertFalse(Series.validRoman("IXC")); assertFalse(Series.validRoman("IXD")); assertFalse(Series.validRoman("IXIX")); } }