RFR (M) 8212959: Remove booleans from tests in vmTestbase

David Holmes david.holmes at oracle.com
Sun Jan 13 12:14:01 UTC 2019


On 13/01/2019 8:33 am, Chris Plummer wrote:
> Hi JC and David,
> 
> Sorry I'm late here. Was out most of the week. I assume by "implicit 
> boolean" that David means treating an int as a boolean when the the int 
> could potentially contain a value other than 0 or 1? So if we have:

The style guide [1] states:

"Do not use ints or pointers as booleans with &&, ||, if, while. 
Instead, compare explicitly != 0 or != NULL, etc. (See #8 above.)"

> 
>        int success;
>      ...
>        if (success != NSK_TRUE) {
> 
> You feel the check against NSK_TRUE is needed, and using !success would 
> potentially yield an incorrect evaluation of the "boolean".

No it isn't a correctness issue (though obviously you can use an int 
incorrectly in such a context) it's a style issue. We regularly 
eradicate implicit booleans so it is inappropriate to introduce them here.

David
-----

[1] https://wiki.openjdk.java.net/display/HotSpot/StyleGuide

  Well, if
> success is not 0 or 1, then let's say it is 2. You end up with 2 != 
> NSK_TRUE, which evaluations true. Compared with !2 which evaluations 
> false. So clearly there is a difference, but which would you consider 
> correct in this case? I'd consider the false evaluation correct. If 
> success is not 0, we want !success to be false. But if you compare 
> against NSK_TRUE, the evaluation only ends up being false when success 
> == 1. This doesn't seem right to me, so I would argue that "success != 
> NSK_TRUE" is not only clumsy coding, but also gives the wrong result for 
> values other than 0 or 1. In order to correct it,  you would use 
> "success == NSK_FALSE". But I don't understand the implicit boolean 
> concern with !success when the value is suppose to always be 0 or 1. 
> Where I would object to do something like this is with pointer types. 
> Using !ptr is bad. "ptr == NULL" should be used.
> 
> That being said, if JC prefers to clean this up at a later date as part 
> of changing success to a bool, that's fine by mean also.
> 
> thanks,
> 
> Chris
> 
> 
> On 1/10/19 9:20 PM, JC Beyler wrote:
>> Hi David,
>>
>> Fair enough. I looked a bit to doing it anyway  and it is 
>> self-contained in a lot of cases but a lot of times the work would be 
>> greatly simplified if we first factorized utility methods across test 
>> suites first and then (or at the same time) moved them to using bools 
>> and not doing the explicit tests.
>>
>> So, except if  anyone  objects, I'm closing this bug as won't fix and 
>> I created https://bugs.openjdk.java.net/browse/JDK-8216533 and 
>> https://bugs.openjdk.java.net/browse/JDK-8216534 for the 
>> events/hotswap tests which were the most cases of this anyway.
>>
>> Thanks for the hold up David :-),
>> Jc
>>
>> On Tue, Jan 8, 2019 at 11:14 PM David Holmes <david.holmes at oracle.com 
>> <mailto:david.holmes at oracle.com>> wrote:
>>
>>     On 9/01/2019 4:43 pm, JC Beyler wrote:
>>     > Hi David,
>>     >
>>     > I was not planning on doing it but we could. This change came
>>     from a
>>     > request to remove the booleans from tests for a prior webrev
>>     change.
>>     > I've seen previous conversations about wanting to test explicitly
>>     > against JNI_TRUE but thought this was a slightly different case.
>>
>>     The basic hotspot style rule is "avoid implicit booleans".
>>
>>     > Basically, from your comment, it seems I could go three ways for
>>     this
>>     > change:
>>     >    1) Not do it and close the bug as won't fix :-)
>>
>>     Certainly the path of least resistance. :)
>>
>>     >    2) Go the extra step and change the various variables being
>>     tested to
>>     > bool
>>     >
>>     > My preference is to do (2) as much as possible; any case that
>>     cannot be
>>     > put in a boolean form without having major changes to the code
>>     base, I'd
>>     > leave as is. And then call it a day for this subject.
>>     >
>>     > What do you think (ie in cases where the variable can be set to
>>     a bool,
>>     > do it and then have the test be an implicit test)?
>>
>>     It's really up to you. It seems a lot of work and I don't know if you
>>     can actually push this all the way through without needing some
>>     int<->bool conversion somewhere anyway.
>>
>>     Cheers,
>>     David
>>
>>     > Thanks!
>>     > Jc
>>     >
>>     > On Tue, Jan 8, 2019 at 10:31 PM David Holmes
>>     <david.holmes at oracle.com <mailto:david.holmes at oracle.com>
>>     > <mailto:david.holmes at oracle.com
>>     <mailto:david.holmes at oracle.com>>> wrote:
>>     >
>>     >     Hi Jc,
>>     >
>>     >     On 9/01/2019 4:12 pm, JC Beyler wrote:
>>     >      > Hi all,
>>     >      >
>>     >      > Fixing up the tests in vmTestbase to not be testing
>>     explicitly
>>     >     against
>>     >      > NSK_TRUE/NSK_FALSE. Here is the webrev to do that:
>>     >      >
>>     >      > Bug: https://bugs.openjdk.java.net/browse/JDK-8212959
>>     >      > Webrev:
>>     http://cr.openjdk.java.net/~jcbeyler/8212959/webrev.00/
>>     >
>>     >     Hold up! We don't do explicit tests when the variable is a
>>     bool/boolean
>>     >     but when it is an int, as here, we do.
>>     >
>>     >     Are you planning on converting everything to use bool?
>>     >
>>     >     Cheers,
>>     >     David
>>     >
>>     >      > Thanks,
>>     >      > Jc
>>     >
>>     >
>>     >
>>     > --
>>     >
>>     > Thanks,
>>     > Jc
>>
>>
>>
>> -- 
>>
>> Thanks,
>> Jc
> 
> 


More information about the serviceability-dev mailing list