[squeak-dev] clockPolicy (Re: The Inbox: Chronology-Tests-ul.15.mcz)
Chris Muller
asqueaker at gmail.com
Wed Jan 16 23:44:14 UTC 2019
I agree with #acceptPlatformTime as the default, but can't we keep the
others around? #monotonic *definitely* has a use-case (e.g,
unique-key), and they all sound useful depending on the circumstance
-- or, at least informative about the properties of #now...
On Mon, Jan 14, 2019 at 7:48 PM David T. Lewis <lewis at mail.msen.com> wrote:
>
> Thanks Levente for the test update.
>
> All:
>
> For background on Time class>>clockPolicy, below is the explanation from
> my original commit notice in the UTCDateAndTime repository.
>
> My personal preference would be to adopt #acceptPlatformTime (currently it
> is set to #monotonicForceNanosecondIncrement), and to remove the clock
> policy options entirely. I expect that others may have different opinions.
>
> Dave
>
>
> Name: Chronology-Core-dtl.14
> Author: dtl
> Time: 20 March 2016, 9:42:49.417923 pm
> UUID: 813fbf89-d8e0-4242-a5e5-9e665c9b8618
> Ancestors: Chronology-Core-ul.13
>
> Implement a variety of policies for incrementing the clock on repeated
> calls to DateAndTime class>>now. It is not clear which policy may be best,
> so provide four variants for experimentation and review. Presumably three
> of the four options can be removed at a later date.
>
> See Time class>>clockPolicy to select a policy. The current clock policy
> is set to #monotonicForceNanosecondIncrement.
>
> The four policies are:
>
> #acceptPlatformTime - Accept the time value provided by the system
> platform, even in this allows time to appear to move backwards when
> the clock is adjusted. Simple, fast, and no hidden side effects.
>
> #monotonicAllowDuplicates - Accept the time value provided by the
> system platform unless it is less that the last clock tick. This
> protects for system clock adjustments. Side effects unlikely. Does not
> ensure unique values on repeated calls.
>
> #monotonicForceMicrosecondIncrement - If the time value is less than or
> equal to the value from the last call, force increment by one microsecond.
> This ensures integral values of UTC time, but increments the time value
> by a full microsecond.
>
> #monotonicForceNanosecondIncrement - If the time value is less than or
> equal to the value from the last call, force increment by one nanosecond.
> This it functionally compatible with previous Squeak practice, but is
> computationally expensive and results in time values represented as
> fractions, which might be a problem for some database applications.
>
>
> On Mon, Jan 14, 2019 at 12:18:42PM +0000, commits at source.squeak.org wrote:
> > Levente Uzonyi uploaded a new version of Chronology-Tests to project The Inbox:
> > http://source.squeak.org/inbox/Chronology-Tests-ul.15.mcz
> >
> > ==================== Summary ====================
> >
> > Name: Chronology-Tests-ul.15
> > Author: ul
> > Time: 14 January 2019, 1:18:04.380862 pm
> > UUID: 31a3ca9d-4c54-4034-9d36-9967644e2d87
> > Ancestors: Chronology-Tests-dtl.14
> >
> > - updated DateAndTimeTest >> #testPrecision to be aware of Time's ClockPolicy
> >
> > =============== Diff against Chronology-Tests-dtl.14 ===============
> >
> > Item was changed:
> > ----- Method: DateAndTimeTest>>testPrecision (in category 'Tests') -----
> > testPrecision
> > "Verify that the clock is returning a value with accuracy of better than 1 second. For now it seems sufficient to get two values and verify they are not the same."
> >
> > + | originalClockPolicy |
> > + originalClockPolicy := Time clockPolicy.
> > + [
> > + #(
> > + "#acceptPlatformTime is not listed here, because it doesn't guarantee monotoncity."
> > + monotonicAllowDuplicates <=
> > + monotonicForceMicrosecondIncrement <
> > + monotonicForceNanosecondIncrement <
> > + ) pairsDo: [ :clockPolicy :comparator |
> > + | first second |
> > + Time clockPolicy: clockPolicy.
> > + first := DateAndTime now.
> > + second := DateAndTime now.
> > + self
> > + assert: (first perform: comparator with: second)
> > + description: ('Clock policy {1} didn''t compare with {2}' format: { clockPolicy. comparator }) ] ]
> > + ensure: [ Time clockPolicy: originalClockPolicy ]
> > - self
> > - assert: (DateAndTime now ~= DateAndTime now)
> > !
> >
> >
>
More information about the Squeak-dev
mailing list
|