-
Notifications
You must be signed in to change notification settings - Fork 103
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Implement LocalDate.fromEpochDays #214
Conversation
NB: the |
That can happen on TC, because agents there are usually computationally weaker than dev laptops or workstations. |
I think we do want to test this thoroughly on a large range of values, because of the complexity of the code. A lot of things can go wrong there. In particular, it uses the notion of 400-year cycles in its implementation, and march-based years. I wouldn't dare to change anything there without being sure that every math operation there was exercised via brute force. |
I fixed the test—despite the comment in its beginning, it was invoking |
core/common/src/math.kt
Outdated
|
||
// org.threeten.bp.chrono.IsoChronology#isLeapYear | ||
internal fun isLeapYear(year: Int): Boolean { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This file contains common math functions, not specific to any date calculations. I suggest to find another file for these new ones, or introduce a new one, e.g. dateMath.kt/calendarMath.kt/IsoChronology.kt
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It does define some constants like internal const val HOURS_PER_DAY = 24
or NANOS_PER_DAY
already, so it's not just pure math here. I don't think it's worth it yet to split the file, because
- it's relatively short,
- when writing code, I like to look over the available constants, and seeing all of them in one place helps, whereas we would need to move, say,
HOURS_PER_DAY
into the date-specific-math file, keepingNANOS_PER_ONE
in the pure math one.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Now, when we've got two new functions, it's a good chance to group these constants together with them in a separate file.
NANOS_PER_ONE can also be seen as a time-related constant, not general math.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Peculiarly, trying to implement this refactoring slows down the code on JS considerably. The test for fromEpochDays
now fails, and checking on my machine, before the refactoring, it takes 1.2 ± 0.2 seconds, while after the refactoring, it takes 1.6 ± 0.3 seconds. I propose that we revert this change.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Can't confirm such effect, on the opposite the test runs faster for me on the latest commit than on the previous.
I compared generated JS code and didn't find anything suspicious in the difference.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
As the last resort, the timeout could be increased if it's essential to test all these values.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yeah, let's do that.
@@ -68,7 +68,7 @@ kotlin { | |||
nodejs { | |||
testTask { | |||
useMocha { | |||
timeout = "5s" | |||
timeout = "30s" |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The highest recorded test duration value was 8.6s, so probably 10-15 s should be fine
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Sure, I just don't see the point in this timeout at all. Don't understand what it brings to the table. So, I increased it to the point where it will most certainly not bother us. Do you have some ideas about why this limit could be useful? If so, maybe it makes sense to add it to the other targets as well?
Naming is up to discussion. See #210. For now, I'm for the name
fromEpochDays
because days-of-anything are most commonly numbered from 1.*EpochDays
, as opposed to*EpochDay
, helps highlight us using the number of days and not their 1-based ordinal.