Please review two corrections for java.time
Peter Levart
peter.levart at gmail.com
Tue Sep 10 06:43:53 UTC 2013
On 09/09/2013 09:42 PM, roger riggs wrote:
> Hi Peter,
>
> Right, max doesn't solve the issue but I'm not keen on a test that
> retries
> until it gets a better answer.
Hi Roger,
If java.time logic is correct, it should only ever retry once when
roll-over or DST jump-back happens, so the test could be made to fail if
it tries to retry the 2nd time, indicating unexpected behaviour. The
"jumps" in LocalTime should be very far-apart so the test should only
encounter one of them, if any.
>
> Adding nanosPerDay if the difference comes out negative would adjust
> for the crossing of midnight and not require looping on a more complex
> test condition.
That's ok for midnight roll-over, but what about DST jumps? They only
happen two times a year, so you expect the test will never encounter them?
Regards, Peter
>
> The longish delay in the now() method is due to first-time initialization
> that reads the timezone data file. Introducing the loop it would change
> the test condition so that it is not testing the 'cold' startup.
> However, the purpose of the test in not to measure the initialization
> overhead
> so adding an extra sampling of now(Clock) before the test will remove
> the first time
> initialization.
>
> Updated webrev at:
> http://cr.openjdk.java.net/~rriggs/webrev-localtime-now-8023639/
>
> Thanks, Roger
>
>
> On 9/9/2013 11:14 AM, Peter Levart wrote:
>>
>> On 09/09/2013 03:12 PM, roger riggs wrote:
>>> Hi Peter,
>>>
>>> The possible wrap-around caused by crossing midnight is handled by
>>> Math.max
>>> so a retry is not needed.
>>>
>>> Math.abs(test.toNanoOfDay() - expected.toNanoOfDay())
>>
>> Hi Roger,
>>
>> In case there is a wrap-around, the 'diff' is much more than
>> 500,000,000 ns (about 24*60*60*1,000,000,000 ns - delay), which fails
>> the test.
>>
>> But what do you think about testing before <= test <= after ? It
>> should not be timing dependent, like it is now. Does it test the same
>> thing?
>>
>> Regards, Peter
>>
>>>
>>> Thanks, Roger
>>>
>>>
>>>
>>>
>>> On 9/9/2013 2:14 AM, Peter Levart wrote:
>>>> On 09/06/2013 07:58 PM, roger riggs wrote:
>>>>> Please review for two corrections:
>>>>>
>>>>> - The java/time/tck/java/time/TCKLocalTime test failed on a slow
>>>>> machine;
>>>>> the test should be more lenient. The test is not appropriate
>>>>> for a conformance test
>>>>> and is moved to java/time/test/java/time/TestLocalTime.
>>>>>
>>>>> - The javadoc for the JapaneseEra.MEIJI era should indicate the
>>>>> start date is 1868-01-01
>>>>> to be consistent with java.util.Calendar. Note that java.time
>>>>> does not permit dates before Meiji 6
>>>>> to be created since the calendar is not clearly defined until then.
>>>>>
>>>>> Webrev:
>>>>> http://cr.openjdk.java.net/~rriggs/webrev-localtime-now-8023639/
>>>>>
>>>>> Thanks, Roger
>>>>>
>>>>>
>>>> Hi Roger,
>>>>
>>>> Although very in-probable, the test can fail when 'expected' is
>>>> sampled before and 'test' is sampled after midnight. I'm guessing
>>>> the test is trying to prove that LocalTime.now() is equivalent to
>>>> LocalTime.now(Clock.systemDefaultZone()), right?
>>>>
>>>> In that case, what about the following:
>>>>
>>>> public void now() {
>>>> LocalTime before, test, after;
>>>> do {
>>>> before = LocalTime.now(Clock.systemDefaultZone());
>>>> test = LocalTime.now();
>>>> after = LocalTime.now(Clock.systemDefaultZone());
>>>> // retry in case the samples were obtained around midnight
>>>> } while (before.compareTo(after) > 0);
>>>>
>>>> assertTrue(before.compareTo(test) <= 0 &&
>>>> test.compareTo(after) <= 0);
>>>> }
>>>>
>>>>
>>>> Regards, Peter
>>>>
>>>
>>
>
More information about the core-libs-dev
mailing list