Re: svn commit: r1532031 - /commons/proper/lang/trunk/src/main/java/org/apache/commons/lang3/BooleanUtils.java
In this case we should perhaps provide a #oneTrue(boolean...) method to preserve the availability of the current behavior, which may also occasionally have its place. Matt On Mon, Oct 14, 2013 at 11:10 PM, Henri Yandell flame...@gmail.com wrote: I think we treat it as a bug and fix. The code is fine for the explained use of an array of length 2, but fails when you move to larger chains. Given the common meaning of the name, I think people would have noticed if they'd needed xor to work for arrays 2 and it didn't. So a) I think we can fix and b) I suspect it's not a highly used method. So rather than the note, I'm +1 to fixing the code. Hen On Mon, Oct 14, 2013 at 12:22 PM, Benedikt Ritter brit...@apache.org wrote: Thoughts? Maybe this should be renamed to isOneTrue(boolean...) in the next major release?! -- Forwarded message -- From: brit...@apache.org Date: 2013/10/14 Subject: svn commit: r1532031 - /commons/proper/lang/trunk/src/main/java/org/apache/commons/lang3/BooleanUtils.java To: comm...@commons.apache.org Author: britter Date: Mon Oct 14 19:21:02 2013 New Revision: 1532031 URL: http://svn.apache.org/r1532031 Log: Document (wrong?) behavior of xor methods Modified: commons/proper/lang/trunk/src/main/java/org/apache/commons/lang3/BooleanUtils.java Modified: commons/proper/lang/trunk/src/main/java/org/apache/commons/lang3/BooleanUtils.java URL: http://svn.apache.org/viewvc/commons/proper/lang/trunk/src/main/java/org/apache/commons/lang3/BooleanUtils.java?rev=1532031r1=1532030r2=1532031view=diff == --- commons/proper/lang/trunk/src/main/java/org/apache/commons/lang3/BooleanUtils.java (original) +++ commons/proper/lang/trunk/src/main/java/org/apache/commons/lang3/BooleanUtils.java Mon Oct 14 19:21:02 2013 @@ -1028,6 +1028,14 @@ public class BooleanUtils { * BooleanUtils.xor(true, false) = true * /pre * + * pNote that this method behaves different from using the binary XOR operator (^). Instead of combining the given + * booleans using the XOR operator from left to right, this method counts the appearances of true in the given + * array. It will only return true if exactly one boolean in the given array is true:/p + * pre + * true ^ true ^ false ^ true = true + * BooleanUtils.xor(true, true, false, true) = false + * /pre + * * @param array an array of {@code boolean}s * @return {@code true} if the xor is successful. * @throws IllegalArgumentException if {@code array} is {@code null} @@ -1069,6 +1077,9 @@ public class BooleanUtils { * BooleanUtils.xor(new Boolean[] { Boolean.TRUE, Boolean.FALSE }) = Boolean.TRUE * /pre * + * pNote that this method behaves different from using the binary XOR operator (^). See + * {@link #xor(boolean...)}./p + * * @param array an array of {@code Boolean}s * @return {@code true} if the xor is successful. * @throws IllegalArgumentException if {@code array} is {@code null} -- http://people.apache.org/~britter/ http://www.systemoutprintln.de/ http://twitter.com/BenediktRitter http://github.com/britter
Re: svn commit: r1532031 - /commons/proper/lang/trunk/src/main/java/org/apache/commons/lang3/BooleanUtils.java
Another alternative: preserve the current #xor() method with documentation, and implement the ^ analogue as #binaryXor(). Matt On Tue, Oct 15, 2013 at 9:05 AM, Matt Benson gudnabr...@gmail.com wrote: In this case we should perhaps provide a #oneTrue(boolean...) method to preserve the availability of the current behavior, which may also occasionally have its place. Matt On Mon, Oct 14, 2013 at 11:10 PM, Henri Yandell flame...@gmail.comwrote: I think we treat it as a bug and fix. The code is fine for the explained use of an array of length 2, but fails when you move to larger chains. Given the common meaning of the name, I think people would have noticed if they'd needed xor to work for arrays 2 and it didn't. So a) I think we can fix and b) I suspect it's not a highly used method. So rather than the note, I'm +1 to fixing the code. Hen On Mon, Oct 14, 2013 at 12:22 PM, Benedikt Ritter brit...@apache.org wrote: Thoughts? Maybe this should be renamed to isOneTrue(boolean...) in the next major release?! -- Forwarded message -- From: brit...@apache.org Date: 2013/10/14 Subject: svn commit: r1532031 - /commons/proper/lang/trunk/src/main/java/org/apache/commons/lang3/BooleanUtils.java To: comm...@commons.apache.org Author: britter Date: Mon Oct 14 19:21:02 2013 New Revision: 1532031 URL: http://svn.apache.org/r1532031 Log: Document (wrong?) behavior of xor methods Modified: commons/proper/lang/trunk/src/main/java/org/apache/commons/lang3/BooleanUtils.java Modified: commons/proper/lang/trunk/src/main/java/org/apache/commons/lang3/BooleanUtils.java URL: http://svn.apache.org/viewvc/commons/proper/lang/trunk/src/main/java/org/apache/commons/lang3/BooleanUtils.java?rev=1532031r1=1532030r2=1532031view=diff == --- commons/proper/lang/trunk/src/main/java/org/apache/commons/lang3/BooleanUtils.java (original) +++ commons/proper/lang/trunk/src/main/java/org/apache/commons/lang3/BooleanUtils.java Mon Oct 14 19:21:02 2013 @@ -1028,6 +1028,14 @@ public class BooleanUtils { * BooleanUtils.xor(true, false) = true * /pre * + * pNote that this method behaves different from using the binary XOR operator (^). Instead of combining the given + * booleans using the XOR operator from left to right, this method counts the appearances of true in the given + * array. It will only return true if exactly one boolean in the given array is true:/p + * pre + * true ^ true ^ false ^ true = true + * BooleanUtils.xor(true, true, false, true) = false + * /pre + * * @param array an array of {@code boolean}s * @return {@code true} if the xor is successful. * @throws IllegalArgumentException if {@code array} is {@code null} @@ -1069,6 +1077,9 @@ public class BooleanUtils { * BooleanUtils.xor(new Boolean[] { Boolean.TRUE, Boolean.FALSE }) = Boolean.TRUE * /pre * + * pNote that this method behaves different from using the binary XOR operator (^). See + * {@link #xor(boolean...)}./p + * * @param array an array of {@code Boolean}s * @return {@code true} if the xor is successful. * @throws IllegalArgumentException if {@code array} is {@code null} -- http://people.apache.org/~britter/ http://www.systemoutprintln.de/ http://twitter.com/BenediktRitter http://github.com/britter
Re: svn commit: r1532031 - /commons/proper/lang/trunk/src/main/java/org/apache/commons/lang3/BooleanUtils.java
I have created LANG-921 and am currently working on this. I prefer to make the behavior correct as Hen has suggested and add two new method isOneTrue and isOneFalse. 2013/10/15 Matt Benson gudnabr...@gmail.com Another alternative: preserve the current #xor() method with documentation, and implement the ^ analogue as #binaryXor(). Matt On Tue, Oct 15, 2013 at 9:05 AM, Matt Benson gudnabr...@gmail.com wrote: In this case we should perhaps provide a #oneTrue(boolean...) method to preserve the availability of the current behavior, which may also occasionally have its place. Matt On Mon, Oct 14, 2013 at 11:10 PM, Henri Yandell flame...@gmail.com wrote: I think we treat it as a bug and fix. The code is fine for the explained use of an array of length 2, but fails when you move to larger chains. Given the common meaning of the name, I think people would have noticed if they'd needed xor to work for arrays 2 and it didn't. So a) I think we can fix and b) I suspect it's not a highly used method. So rather than the note, I'm +1 to fixing the code. Hen On Mon, Oct 14, 2013 at 12:22 PM, Benedikt Ritter brit...@apache.org wrote: Thoughts? Maybe this should be renamed to isOneTrue(boolean...) in the next major release?! -- Forwarded message -- From: brit...@apache.org Date: 2013/10/14 Subject: svn commit: r1532031 - /commons/proper/lang/trunk/src/main/java/org/apache/commons/lang3/BooleanUtils.java To: comm...@commons.apache.org Author: britter Date: Mon Oct 14 19:21:02 2013 New Revision: 1532031 URL: http://svn.apache.org/r1532031 Log: Document (wrong?) behavior of xor methods Modified: commons/proper/lang/trunk/src/main/java/org/apache/commons/lang3/BooleanUtils.java Modified: commons/proper/lang/trunk/src/main/java/org/apache/commons/lang3/BooleanUtils.java URL: http://svn.apache.org/viewvc/commons/proper/lang/trunk/src/main/java/org/apache/commons/lang3/BooleanUtils.java?rev=1532031r1=1532030r2=1532031view=diff == --- commons/proper/lang/trunk/src/main/java/org/apache/commons/lang3/BooleanUtils.java (original) +++ commons/proper/lang/trunk/src/main/java/org/apache/commons/lang3/BooleanUtils.java Mon Oct 14 19:21:02 2013 @@ -1028,6 +1028,14 @@ public class BooleanUtils { * BooleanUtils.xor(true, false) = true * /pre * + * pNote that this method behaves different from using the binary XOR operator (^). Instead of combining the given + * booleans using the XOR operator from left to right, this method counts the appearances of true in the given + * array. It will only return true if exactly one boolean in the given array is true:/p + * pre + * true ^ true ^ false ^ true = true + * BooleanUtils.xor(true, true, false, true) = false + * /pre + * * @param array an array of {@code boolean}s * @return {@code true} if the xor is successful. * @throws IllegalArgumentException if {@code array} is {@code null} @@ -1069,6 +1077,9 @@ public class BooleanUtils { * BooleanUtils.xor(new Boolean[] { Boolean.TRUE, Boolean.FALSE }) = Boolean.TRUE * /pre * + * pNote that this method behaves different from using the binary XOR operator (^). See + * {@link #xor(boolean...)}./p + * * @param array an array of {@code Boolean}s * @return {@code true} if the xor is successful. * @throws IllegalArgumentException if {@code array} is {@code null} -- http://people.apache.org/~britter/ http://www.systemoutprintln.de/ http://twitter.com/BenediktRitter http://github.com/britter -- http://people.apache.org/~britter/ http://www.systemoutprintln.de/ http://twitter.com/BenediktRitter http://github.com/britter
Re: svn commit: r1532031 - /commons/proper/lang/trunk/src/main/java/org/apache/commons/lang3/BooleanUtils.java
Feels like the new method is a more general Array one. Not sure if we have it already. ArrayUtils.countMatching(array, value) == 1 Note also that 'isOneTrue' doesn't mean the same as 'isOnlyOneTrue'. Hen On Tuesday, October 15, 2013, Benedikt Ritter wrote: I have created LANG-921 and am currently working on this. I prefer to make the behavior correct as Hen has suggested and add two new method isOneTrue and isOneFalse. 2013/10/15 Matt Benson gudnabr...@gmail.com Another alternative: preserve the current #xor() method with documentation, and implement the ^ analogue as #binaryXor(). Matt On Tue, Oct 15, 2013 at 9:05 AM, Matt Benson gudnabr...@gmail.com wrote: In this case we should perhaps provide a #oneTrue(boolean...) method to preserve the availability of the current behavior, which may also occasionally have its place. Matt On Mon, Oct 14, 2013 at 11:10 PM, Henri Yandell flame...@gmail.com wrote: I think we treat it as a bug and fix. The code is fine for the explained use of an array of length 2, but fails when you move to larger chains. Given the common meaning of the name, I think people would have noticed if they'd needed xor to work for arrays 2 and it didn't. So a) I think we can fix and b) I suspect it's not a highly used method. So rather than the note, I'm +1 to fixing the code. Hen On Mon, Oct 14, 2013 at 12:22 PM, Benedikt Ritter brit...@apache.org wrote: Thoughts? Maybe this should be renamed to isOneTrue(boolean...) in the next major release?! -- Forwarded message -- From: brit...@apache.org Date: 2013/10/14 Subject: svn commit: r1532031 - /commons/proper/lang/trunk/src/main/java/org/apache/commons/lang3/BooleanUtils.java To: comm...@commons.apache.org Author: britter Date: Mon Oct 14 19:21:02 2013 New Revision: 1532031 URL: http://svn.apache.org/r1532031 Log: Document (wrong?) behavior of xor methods Modified: commons/proper/lang/trunk/src/main/java/org/apache/commons/lang3/BooleanUtils.java Modified: commons/proper/lang/trunk/src/main/java/org/apache/commons/lang3/BooleanUtils.java URL: http://svn.apache.org/viewvc/commons/proper/lang/trunk/src/main/java/org/apache/commons/lang3/BooleanUtils.java?rev=1532031r1=1532030r2=1532031view=diff == --- commons/proper/lang/trunk/src/main/java/org/apache/commons/lang3/BooleanUtils.java (original) +++ commons/proper/lang/trunk/src/main/java/org/apache/commons/lang3/BooleanUtils.java Mon Oct 14 19:21:02 2013 @@ -1028,6 +1028,14 @@ public class BooleanUtils { * BooleanUtils.xor(true, false) = true * /pre *
Re: svn commit: r1532031 - /commons/proper/lang/trunk/src/main/java/org/apache/commons/lang3/BooleanUtils.java
I think we treat it as a bug and fix. The code is fine for the explained use of an array of length 2, but fails when you move to larger chains. Given the common meaning of the name, I think people would have noticed if they'd needed xor to work for arrays 2 and it didn't. So a) I think we can fix and b) I suspect it's not a highly used method. So rather than the note, I'm +1 to fixing the code. Hen On Mon, Oct 14, 2013 at 12:22 PM, Benedikt Ritter brit...@apache.orgwrote: Thoughts? Maybe this should be renamed to isOneTrue(boolean...) in the next major release?! -- Forwarded message -- From: brit...@apache.org Date: 2013/10/14 Subject: svn commit: r1532031 - /commons/proper/lang/trunk/src/main/java/org/apache/commons/lang3/BooleanUtils.java To: comm...@commons.apache.org Author: britter Date: Mon Oct 14 19:21:02 2013 New Revision: 1532031 URL: http://svn.apache.org/r1532031 Log: Document (wrong?) behavior of xor methods Modified: commons/proper/lang/trunk/src/main/java/org/apache/commons/lang3/BooleanUtils.java Modified: commons/proper/lang/trunk/src/main/java/org/apache/commons/lang3/BooleanUtils.java URL: http://svn.apache.org/viewvc/commons/proper/lang/trunk/src/main/java/org/apache/commons/lang3/BooleanUtils.java?rev=1532031r1=1532030r2=1532031view=diff == --- commons/proper/lang/trunk/src/main/java/org/apache/commons/lang3/BooleanUtils.java (original) +++ commons/proper/lang/trunk/src/main/java/org/apache/commons/lang3/BooleanUtils.java Mon Oct 14 19:21:02 2013 @@ -1028,6 +1028,14 @@ public class BooleanUtils { * BooleanUtils.xor(true, false) = true * /pre * + * pNote that this method behaves different from using the binary XOR operator (^). Instead of combining the given + * booleans using the XOR operator from left to right, this method counts the appearances of true in the given + * array. It will only return true if exactly one boolean in the given array is true:/p + * pre + * true ^ true ^ false ^ true = true + * BooleanUtils.xor(true, true, false, true) = false + * /pre + * * @param array an array of {@code boolean}s * @return {@code true} if the xor is successful. * @throws IllegalArgumentException if {@code array} is {@code null} @@ -1069,6 +1077,9 @@ public class BooleanUtils { * BooleanUtils.xor(new Boolean[] { Boolean.TRUE, Boolean.FALSE }) = Boolean.TRUE * /pre * + * pNote that this method behaves different from using the binary XOR operator (^). See + * {@link #xor(boolean...)}./p + * * @param array an array of {@code Boolean}s * @return {@code true} if the xor is successful. * @throws IllegalArgumentException if {@code array} is {@code null} -- http://people.apache.org/~britter/ http://www.systemoutprintln.de/ http://twitter.com/BenediktRitter http://github.com/britter