package org.nutz.lang; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; import static org.nutz.lang.Maths.bit; import static org.nutz.lang.Maths.isMask; import static org.nutz.lang.Maths.isMaskAll; import static org.nutz.lang.Maths.isNoMask; import java.util.HashSet; import java.util.Set; import org.junit.Test; public class MathsTest { private int[] nums = new int[]{12, 5, 26, 33, -4, 11, 8}; @Test public void testIsMask() { assertTrue(isMask(bit("100"), bit("110"))); assertFalse(isMask(bit("100"), bit("10010"))); } @Test public void testIsMaskAll() { assertFalse(isMaskAll(bit("100"), bit("110"))); assertTrue(isMaskAll(bit("100101111"), bit("001110"))); } @Test public void test_extract_int() { assertEquals(3, Maths.extract(7, 1, 3)); assertEquals(1, Maths.extract(7, 0, 1)); assertEquals(3, Maths.extract(255, 4, 6)); } @Test public void test_is_not_mask_all() { assertFalse(isNoMask(bit("0110"), bit("1100"))); assertFalse(isNoMask(bit("0100"), bit("1100"))); assertFalse(isNoMask(bit("1000"), bit("1100"))); assertTrue(isNoMask(bit("110011"), bit("1100"))); assertFalse(isNoMask(bit("111011"), bit("1100"))); } @Test public void test_max() throws Exception { assertEquals(Maths.max(nums), 33); } @Test public void test_min() throws Exception { assertEquals(Maths.min(nums), -4); } @Test public void test_permutation_length_is_zero() throws Exception { String[] slist = Maths.permutation(0, '1', '2', '3'); assertNull(slist); } @Test public void test_permutation_length_is_out() throws Exception { String[] slist = Maths.permutation(4, '1', '2', '3'); assertNull(slist); } @Test public void test_permutation_nums() throws Exception { String[] slist = Maths.permutation(new char[]{'1', '2', '3'}); assertTrue(slist.length == 6); assertFalse(hasSameString(slist)); assertTrue(hasString("123", slist)); assertTrue(hasString("132", slist)); assertTrue(hasString("321", slist)); assertFalse(hasString("221", slist)); assertFalse(hasString("223", slist)); assertFalse(hasString("323", slist)); } @Test public void test_permutation_chars() throws Exception { String[] slist = Maths.permutation(2, 'a', 'b', 'c', 'd'); assertTrue(slist.length == 12); assertFalse(hasSameString(slist)); assertTrue(hasString("ab", slist)); assertTrue(hasString("bd", slist)); assertTrue(hasString("cd", slist)); assertFalse(hasString("aa", slist)); assertFalse(hasString("be", slist)); assertFalse(hasString("d2", slist)); } public boolean hasSameString(String... arr) { Set<String> strSet = new HashSet<String>(); for (String astr : arr) { if (strSet.contains(astr)) { return true; } strSet.add(astr); } return false; } public boolean hasString(String vstr, String... arr) { for (String astr : arr) { if (vstr.equals(astr)) { return true; } } return false; } }