[LANG-722] Add BooleanUtils.and/or varargs methods to complement xor

git-svn-id: https://svn.apache.org/repos/asf/commons/proper/lang/trunk@1147511 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Matthew Jason Benson 2011-07-17 01:39:14 +00:00
parent 061a53be62
commit c808034989
2 changed files with 511 additions and 11 deletions

View File

@ -867,15 +867,150 @@ public static String toString(boolean bool, String trueString, String falseStrin
return bool ? trueString : falseString;
}
// xor methods
// logical operations
// ----------------------------------------------------------------------
/**
* <p>Performs an and on a set of booleans.</p>
*
* <pre>
* BooleanUtils.and(true, true) = true
* BooleanUtils.and(false, false) = false
* BooleanUtils.and(true, false) = false
* BooleanUtils.and(true, true, false) = false
* BooleanUtils.and(true, true, true) = true
* </pre>
*
* @param array an array of {@code boolean}s
* @return {@code true} if the and is successful.
* @throws IllegalArgumentException if {@code array} is {@code null}
* @throws IllegalArgumentException if {@code array} is empty.
*/
public static boolean and(boolean... array) {
// Validates input
if (array == null) {
throw new IllegalArgumentException("The Array must not be null");
}
if (array.length == 0) {
throw new IllegalArgumentException("Array is empty");
}
for (boolean element : array) {
if (!element) {
return false;
}
}
return true;
}
/**
* <p>Performs an and on an array of Booleans.</p>
*
* <pre>
* BooleanUtils.and(Boolean.TRUE, Boolean.TRUE) = Boolean.TRUE
* BooleanUtils.and(Boolean.FALSE, Boolean.FALSE) = Boolean.FALSE
* BooleanUtils.and(Boolean.TRUE, Boolean.FALSE) = Boolean.FALSE
* BooleanUtils.and(Boolean.TRUE, Boolean.TRUE, Boolean.TRUE) = Boolean.TRUE
* BooleanUtils.and(Boolean.FALSE, Boolean.FALSE, Boolean.TRUE) = Boolean.FALSE
* BooleanUtils.and(Boolean.TRUE, Boolean.FALSE, Boolean.TRUE) = Boolean.FALSE
* </pre>
*
* @param array an array of {@code Boolean}s
* @return {@code true} if the and is successful.
* @throws IllegalArgumentException if {@code array} is {@code null}
* @throws IllegalArgumentException if {@code array} is empty.
* @throws IllegalArgumentException if {@code array} contains a {@code null}
*/
public static Boolean and(Boolean... array) {
if (array == null) {
throw new IllegalArgumentException("The Array must not be null");
}
if (array.length == 0) {
throw new IllegalArgumentException("Array is empty");
}
try {
boolean[] primitive = ArrayUtils.toPrimitive(array);
return and(primitive) ? Boolean.TRUE : Boolean.FALSE;
} catch (NullPointerException ex) {
throw new IllegalArgumentException("The array must not contain any null elements");
}
}
/**
* <p>Performs an or on a set of booleans.</p>
*
* <pre>
* BooleanUtils.or(true, true) = true
* BooleanUtils.or(false, false) = false
* BooleanUtils.or(true, false) = true
* BooleanUtils.or(true, true, false) = true
* BooleanUtils.or(true, true, true) = true
* BooleanUtils.or(false, false, false) = false
* </pre>
*
* @param array an array of {@code boolean}s
* @return {@code true} if the or is successful.
* @throws IllegalArgumentException if {@code array} is {@code null}
* @throws IllegalArgumentException if {@code array} is empty.
*/
public static boolean or(boolean... array) {
// Validates input
if (array == null) {
throw new IllegalArgumentException("The Array must not be null");
}
if (array.length == 0) {
throw new IllegalArgumentException("Array is empty");
}
for (boolean element : array) {
if (element) {
return true;
}
}
return false;
}
/**
* <p>Performs an or on an array of Booleans.</p>
*
* <pre>
* BooleanUtils.or(Boolean.TRUE, Boolean.TRUE) = Boolean.TRUE
* BooleanUtils.or(Boolean.FALSE, Boolean.FALSE) = Boolean.FALSE
* BooleanUtils.or(Boolean.TRUE, Boolean.FALSE) = Boolean.TRUE
* BooleanUtils.or(Boolean.TRUE, Boolean.TRUE, Boolean.TRUE) = Boolean.TRUE
* BooleanUtils.or(Boolean.FALSE, Boolean.FALSE, Boolean.TRUE) = Boolean.TRUE
* BooleanUtils.or(Boolean.TRUE, Boolean.FALSE, Boolean.TRUE) = Boolean.TRUE
* BooleanUtils.or(Boolean.FALSE, Boolean.FALSE, Boolean.FALSE) = Boolean.FALSE
* </pre>
*
* @param array an array of {@code Boolean}s
* @return {@code true} if the or is successful.
* @throws IllegalArgumentException if {@code array} is {@code null}
* @throws IllegalArgumentException if {@code array} is empty.
* @throws IllegalArgumentException if {@code array} contains a {@code null}
*/
public static Boolean or(Boolean... array) {
if (array == null) {
throw new IllegalArgumentException("The Array must not be null");
}
if (array.length == 0) {
throw new IllegalArgumentException("Array is empty");
}
try {
boolean[] primitive = ArrayUtils.toPrimitive(array);
return or(primitive) ? Boolean.TRUE : Boolean.FALSE;
} catch (NullPointerException ex) {
throw new IllegalArgumentException("The array must not contain any null elements");
}
}
/**
* <p>Performs an xor on a set of booleans.</p>
*
* <pre>
* BooleanUtils.xor(new boolean[] { true, true }) = false
* BooleanUtils.xor(new boolean[] { false, false }) = false
* BooleanUtils.xor(new boolean[] { true, false }) = true
* BooleanUtils.xor(true, true) = false
* BooleanUtils.xor(false, false) = false
* BooleanUtils.xor(true, false) = true
* BooleanUtils.xor(true, true) = false
* BooleanUtils.xor(false, false) = false
* BooleanUtils.xor(true, false) = true
* </pre>
*
* @param array an array of {@code boolean}s
@ -932,13 +1067,12 @@ public static Boolean xor(Boolean... array) {
if (array.length == 0) {
throw new IllegalArgumentException("Array is empty");
}
boolean[] primitive = null;
try {
primitive = ArrayUtils.toPrimitive(array);
boolean[] primitive = ArrayUtils.toPrimitive(array);
return xor(primitive) ? Boolean.TRUE : Boolean.FALSE;
} catch (NullPointerException ex) {
throw new IllegalArgumentException("The array must not contain any null elements");
}
return xor(primitive) ? Boolean.TRUE : Boolean.FALSE;
}
}

View File

@ -611,4 +611,370 @@ public void testXor_object_validInput_3items() {
.booleanValue());
}
// testAnd
// -----------------------------------------------------------------------
@Test(expected = IllegalArgumentException.class)
public void testAnd_primitive_nullInput() {
BooleanUtils.and((boolean[]) null);
}
@Test(expected = IllegalArgumentException.class)
public void testAnd_primitive_emptyInput() {
BooleanUtils.and(new boolean[] {});
}
@Test
public void testAnd_primitive_validInput_2items() {
assertTrue(
"False result for (true, true)",
BooleanUtils.and(new boolean[] { true, true }));
assertTrue(
"True result for (false, false)",
! BooleanUtils.and(new boolean[] { false, false }));
assertTrue(
"True result for (true, false)",
! BooleanUtils.and(new boolean[] { true, false }));
assertTrue(
"True result for (false, true)",
! BooleanUtils.and(new boolean[] { false, true }));
}
@Test
public void testAnd_primitive_validInput_3items() {
assertTrue(
"True result for (false, false, true)",
! BooleanUtils.and(new boolean[] { false, false, true }));
assertTrue(
"True result for (false, true, false)",
! BooleanUtils.and(new boolean[] { false, true, false }));
assertTrue(
"True result for (true, false, false)",
! BooleanUtils.and(new boolean[] { true, false, false }));
assertTrue(
"False result for (true, true, true)",
BooleanUtils.and(new boolean[] { true, true, true }));
assertTrue(
"True result for (false, false)",
! BooleanUtils.and(new boolean[] { false, false, false }));
assertTrue(
"True result for (true, true, false)",
! BooleanUtils.and(new boolean[] { true, true, false }));
assertTrue(
"True result for (true, false, true)",
! BooleanUtils.and(new boolean[] { true, false, true }));
assertTrue(
"True result for (false, true, true)",
! BooleanUtils.and(new boolean[] { false, true, true }));
}
@Test(expected = IllegalArgumentException.class)
public void testAnd_object_nullInput() {
BooleanUtils.and((Boolean[]) null);
}
@Test(expected = IllegalArgumentException.class)
public void testAnd_object_emptyInput() {
BooleanUtils.and(new Boolean[] {});
}
@Test(expected = IllegalArgumentException.class)
public void testAnd_object_nullElementInput() {
BooleanUtils.and(new Boolean[] {null});
}
@Test
public void testAnd_object_validInput_2items() {
assertTrue(
"False result for (true, true)",
BooleanUtils
.and(new Boolean[] { Boolean.TRUE, Boolean.TRUE })
.booleanValue());
assertTrue(
"True result for (false, false)",
! BooleanUtils
.and(new Boolean[] { Boolean.FALSE, Boolean.FALSE })
.booleanValue());
assertTrue(
"True result for (true, false)",
! BooleanUtils
.and(new Boolean[] { Boolean.TRUE, Boolean.FALSE })
.booleanValue());
assertTrue(
"True result for (false, true)",
! BooleanUtils
.and(new Boolean[] { Boolean.FALSE, Boolean.TRUE })
.booleanValue());
}
@Test
public void testAnd_object_validInput_3items() {
assertTrue(
"True result for (false, false, true)",
! BooleanUtils
.and(
new Boolean[] {
Boolean.FALSE,
Boolean.FALSE,
Boolean.TRUE })
.booleanValue());
assertTrue(
"True result for (false, true, false)",
! BooleanUtils
.and(
new Boolean[] {
Boolean.FALSE,
Boolean.TRUE,
Boolean.FALSE })
.booleanValue());
assertTrue(
"True result for (true, false, false)",
! BooleanUtils
.and(
new Boolean[] {
Boolean.TRUE,
Boolean.FALSE,
Boolean.FALSE })
.booleanValue());
assertTrue(
"False result for (true, true, true)",
BooleanUtils
.and(new Boolean[] { Boolean.TRUE, Boolean.TRUE, Boolean.TRUE })
.booleanValue());
assertTrue(
"True result for (false, false)",
! BooleanUtils.and(
new Boolean[] {
Boolean.FALSE,
Boolean.FALSE,
Boolean.FALSE })
.booleanValue());
assertTrue(
"True result for (true, true, false)",
! BooleanUtils.and(
new Boolean[] {
Boolean.TRUE,
Boolean.TRUE,
Boolean.FALSE })
.booleanValue());
assertTrue(
"True result for (true, false, true)",
! BooleanUtils.and(
new Boolean[] {
Boolean.TRUE,
Boolean.FALSE,
Boolean.TRUE })
.booleanValue());
assertTrue(
"True result for (false, true, true)",
! BooleanUtils.and(
new Boolean[] {
Boolean.FALSE,
Boolean.TRUE,
Boolean.TRUE })
.booleanValue());
}
// testOr
// -----------------------------------------------------------------------
@Test(expected = IllegalArgumentException.class)
public void testOr_primitive_nullInput() {
BooleanUtils.or((boolean[]) null);
}
@Test(expected = IllegalArgumentException.class)
public void testOr_primitive_emptyInput() {
BooleanUtils.or(new boolean[] {});
}
@Test
public void testOr_primitive_validInput_2items() {
assertTrue(
"False result for (true, true)",
BooleanUtils.or(new boolean[] { true, true }));
assertTrue(
"True result for (false, false)",
! BooleanUtils.or(new boolean[] { false, false }));
assertTrue(
"False result for (true, false)",
BooleanUtils.or(new boolean[] { true, false }));
assertTrue(
"False result for (false, true)",
BooleanUtils.or(new boolean[] { false, true }));
}
@Test
public void testOr_primitive_validInput_3items() {
assertTrue(
"False result for (false, false, true)",
BooleanUtils.or(new boolean[] { false, false, true }));
assertTrue(
"False result for (false, true, false)",
BooleanUtils.or(new boolean[] { false, true, false }));
assertTrue(
"False result for (true, false, false)",
BooleanUtils.or(new boolean[] { true, false, false }));
assertTrue(
"False result for (true, true, true)",
BooleanUtils.or(new boolean[] { true, true, true }));
assertTrue(
"True result for (false, false)",
! BooleanUtils.or(new boolean[] { false, false, false }));
assertTrue(
"False result for (true, true, false)",
BooleanUtils.or(new boolean[] { true, true, false }));
assertTrue(
"False result for (true, false, true)",
BooleanUtils.or(new boolean[] { true, false, true }));
assertTrue(
"False result for (false, true, true)",
BooleanUtils.or(new boolean[] { false, true, true }));
}
@Test(expected = IllegalArgumentException.class)
public void testOr_object_nullInput() {
BooleanUtils.or((Boolean[]) null);
}
@Test(expected = IllegalArgumentException.class)
public void testOr_object_emptyInput() {
BooleanUtils.or(new Boolean[] {});
}
@Test(expected = IllegalArgumentException.class)
public void testOr_object_nullElementInput() {
BooleanUtils.or(new Boolean[] {null});
}
@Test
public void testOr_object_validInput_2items() {
assertTrue(
"False result for (true, true)",
BooleanUtils
.or(new Boolean[] { Boolean.TRUE, Boolean.TRUE })
.booleanValue());
assertTrue(
"True result for (false, false)",
! BooleanUtils
.or(new Boolean[] { Boolean.FALSE, Boolean.FALSE })
.booleanValue());
assertTrue(
"False result for (true, false)",
BooleanUtils
.or(new Boolean[] { Boolean.TRUE, Boolean.FALSE })
.booleanValue());
assertTrue(
"False result for (false, true)",
BooleanUtils
.or(new Boolean[] { Boolean.FALSE, Boolean.TRUE })
.booleanValue());
}
@Test
public void testOr_object_validInput_3items() {
assertTrue(
"False result for (false, false, true)",
BooleanUtils
.or(
new Boolean[] {
Boolean.FALSE,
Boolean.FALSE,
Boolean.TRUE })
.booleanValue());
assertTrue(
"False result for (false, true, false)",
BooleanUtils
.or(
new Boolean[] {
Boolean.FALSE,
Boolean.TRUE,
Boolean.FALSE })
.booleanValue());
assertTrue(
"False result for (true, false, false)",
BooleanUtils
.or(
new Boolean[] {
Boolean.TRUE,
Boolean.FALSE,
Boolean.FALSE })
.booleanValue());
assertTrue(
"False result for (true, true, true)",
BooleanUtils
.or(new Boolean[] { Boolean.TRUE, Boolean.TRUE, Boolean.TRUE })
.booleanValue());
assertTrue(
"True result for (false, false)",
! BooleanUtils.or(
new Boolean[] {
Boolean.FALSE,
Boolean.FALSE,
Boolean.FALSE })
.booleanValue());
assertTrue(
"False result for (true, true, false)",
BooleanUtils.or(
new Boolean[] {
Boolean.TRUE,
Boolean.TRUE,
Boolean.FALSE })
.booleanValue());
assertTrue(
"False result for (true, false, true)",
BooleanUtils.or(
new Boolean[] {
Boolean.TRUE,
Boolean.FALSE,
Boolean.TRUE })
.booleanValue());
assertTrue(
"False result for (false, true, true)",
BooleanUtils.or(
new Boolean[] {
Boolean.FALSE,
Boolean.TRUE,
Boolean.TRUE })
.booleanValue());
}
}