David T. Lewis uploaded a new version of Chronology-Core to project The Treated Inbox:
http://source.squeak.org/treated/Chronology-Core-dtl.80.mcz
==================== Summary ====================
Name: Chronology-Core-dtl.80
Author: dtl
Time: 19 May 2022, 12:03:05.720962 pm
UUID: 1b1b97c4-bc35-408d-b548-f0d0376a0808
Ancestors: Chronology-Core-dtl.79
Change DateAndTime>>offset: to be compliant with the ANSI draft spec. The offset: method should answer an instance equivalent to the receiver, where equivalent means having the same UTC time.
Let #offset: adopt the prior behavior of #utcOffset: and let #utcOffset: be a compatibility synonym for #offset:. Add #asLocalAt: to the squeak protocol and let it implement the prior behavior of #offset: Change existing code and tests to use #asLocalAt: but otherwise retain existing behavior.
Issue reported at https://github.com/squeak-smalltalk/squeak-object-memory/issues/23
=============== Diff against Chronology-Core-dtl.79 ===============
Item was added:
+ ----- Method: DateAndTime>>asLocalAt: (in category 'squeak protocol') -----
+ asLocalAt: anOffset
+ "Answer a DateAndTime for a different time zone offset that has the same
+ year, month, day, hour, minute, and second as this instance, and with
+ printString that matches except for time zone offset."
+
+ | newOffset newMicros |
+ newOffset := anOffset asDuration asSeconds.
+ newMicros := localOffsetSeconds - newOffset * 1000000 + utcMicroseconds.
+ ^ self class utcMicroseconds: newMicros offset: newOffset
+ !
Item was changed:
----- Method: DateAndTime>>offset: (in category 'ansi protocol') -----
offset: anOffset
+ "Answer a <DateAndTime> equivalent to the receiver but with its local time
+ being offset from UTC by offset.
- "Answer a DateAndTime for a different time zone offset that has the same
- year, month, day, hour, minute, and second as this instance, and with
- printString that matches except for time zone offset."
+ See asLocalAt: for the earlier behavior of this method."
+
+ ^ self class
+ utcMicroseconds: utcMicroseconds
+ offset: anOffset asDuration asSeconds!
- | newOffset newMicros |
- newOffset := anOffset asDuration asSeconds.
- newMicros := localOffsetSeconds - newOffset * 1000000 + utcMicroseconds.
- ^ self class utcMicroseconds: newMicros offset: newOffset
- !
Item was changed:
----- Method: DateAndTime>>utcOffset: (in category 'squeak protocol') -----
utcOffset: anOffset
+ "Compatiblity. Answer a DateAndTime equivalent to the receiver but offset from UTC by anOffset."
+
+ ^ self offset: anOffset!
- "Answer a DateAndTime equivalent to the receiver but offset from UTC by anOffset"
- ^ self class
- utcMicroseconds: utcMicroseconds
- offset: anOffset asDuration asSeconds!
Item was changed:
----- Method: Timespan class>>current (in category 'squeak protocol') -----
current
+ ^ self starting: (DateAndTime now asLocalAt: self defaultOffset)!
- ^ self starting: (DateAndTime now offset: self defaultOffset)!
David T. Lewis uploaded a new version of Chronology-Tests to project The Treated Inbox:
http://source.squeak.org/treated/Chronology-Tests-lrnp.31.mcz
==================== Summary ====================
Name: Chronology-Tests-lrnp.31
Author: lrnp
Time: 3 March 2022, 12:46:42.775073 am
UUID: 437b3938-ef51-494d-9dee-ba89baa669bb
Ancestors: Chronology-Tests-ct.30
adjust margin of error for millisecond timing
Given that the shortest measurable interval is 1 ms, rounded, allow up to 2 milliseconds over or under for a combination of rounding and delays introduced by taking measurements.
This makes the busyWait test harder to pass unless the millisecond precision prescribed by Delay's comment applies to the current image. If the prescription applies, the test will pass more reliably in case of rounding errors.
=============== Diff against Chronology-Tests-ct.30 ===============
Item was changed:
----- Method: DurationTest>>testBusyWait (in category 'tests') -----
testBusyWait
| duration start elapsed |
duration := Duration milliSeconds: 1.
start := DateAndTime now.
1000 timesRepeat: [duration busyWait].
+ elapsed := DateAndTime now - start roundTo: duration.
- elapsed := DateAndTime now - start.
+ self assert: elapsed >= (duration * 998).
+ self assert: elapsed <= (duration * 1002).!
- self assert: elapsed >= (duration * 1000).
- self assert: elapsed <= (duration * 1000 * 2).!