Loading the parity record
Fetching the measured run — the pinned upstream oracle, every symbol and every case.
Fetching the measured run — the pinned upstream oracle, every symbol and every case.
Parity / quartz
Every number on this page was produced by running both implementations over the same cases: the real org.quartz-scheduler:quartz package pinned at 2.5.0 answers first, and its answer is the expectation the Go port is held to. Nothing is a hand-written expectation, so a new upstream release re-scores the port on its own. See quartz for the port's own documentation. Source: github.com/malcolmston/quartz.
Not a generic diagram: every node below names an artefact of this harness — the pinned package it installed, the runner files it started, the case files it streamed, and the counts it wrote out.
| Case group | Cases | Match | Mismatch | Group parity |
|---|---|---|---|---|
| cron-parse | 55 | 36 | 19 | 65.5% |
| cron-next | 43 | 26 | 17 | 60.5% |
| calendar-interval-trigger | 29 | 17 | 12 | 58.6% |
| daily-time-interval-trigger | 26 | 21 | 5 | 80.8% |
| simple-trigger | 20 | 15 | 5 | 75.0% |
| cron-timezone | 19 | 16 | 3 | 84.2% |
| cron-satisfied | 16 | 12 | 4 | 75.0% |
| cron-trigger | 9 | 7 | 2 | 77.8% |
| misfire | 8 | 8 | 0 | 100.0% |
Every exported symbol of the upstream package, and what the port offers for it. The upstream list is derived mechanically, never from a README: Q=~/.m2/repository/org/quartz-scheduler/quartz/2.5.0/quartz-2.5.0.jar
every public top-level class in the jar (231 classes, 44 of them in org.quartz)
unzip -Z1 "$Q" '*.class' | grep -v '\$' | sed 's#/#.#g;s#\.class$##' | sort
every public member of the classes this harness targets
javap -cp "$Q" \
org.quartz.CronExpression org.quartz.Trigger org.quartz.CronTrigger \
org.quartz.SimpleTrigger org.quartz.CalendarIntervalTrigger \
org.quartz.DailyTimeIntervalTrigger org.quartz.TimeOfDay \
org.quartz.DateBuilder 'org.quartz.DateBuilder$IntervalUnit' \
org.quartz.impl.triggers.CronTriggerI…. A symbol with no case is untested, never a match.
| Upstream symbol | Go symbol | Status | Cases | Note |
|---|---|---|---|---|
| CronExpression(String) | quartz.ParseCron | differs | all 55 parse-* | full grammar; see divergences D1–D6 |
| CronExpression(CronExpression) | — | missing | — | no copy constructor |
| getNextValidTimeAfter(Date) | CronExpression.Next | differs | all 43 next-*, 19 tz-* | see D1–D8 |
| getNextInvalidTimeAfter(Date) | — | missing | — | not ported |
| isSatisfiedBy(Date) | CronExpression.IsSatisfiedBy | differs | 16 sat-* | see D2, D5, D6 |
| getTimeZone() / setTimeZone(TimeZone) | *(implicit: Next uses the instant's own *time.Location)* | differs | 19 tz-* | the port has no zone on the expression; the caller supplies one via time.Time.In |
| getCronExpression() | CronExpression.String | untested | — | source echo, compared only indirectly |
| toString() | CronExpression.String | untested | — | |
| isValidExpression(String) | — | missing | — | no boolean-returning validator (ParseCron returns error) |
| validateExpression(String) | quartz.ParseCron (error return) | match | all parse-* | accept/reject compared, message text not |
| getExpressionSummary() | — | missing | — | no field-set summary |
| getTimeAfter(Date) | CronExpression.Next | differs | next-* | public alias of getNextValidTimeAfter |
| getTimeBefore(Date) | — | missing | — | no backwards search |
| getFinalFireTime() | — | missing | — | not ported |
| MAX_YEAR | — | missing | — | no year field at all (D3) |
| clone() | — | missing | — | |
| — | quartz.MustParseCron | extra | — | panicking convenience wrapper |
| setCronExpression(String) | quartz.NewCronTrigger, NewCronTriggerWithKeys | differs | crontrig-bad-expression | grammar divergences propagate |
| setCronExpression(CronExpression) | — | missing | — | |
| getCronExpression() | CronTrigger.Expression | untested | — | returns the parsed value, not the source |
| getTimeZone() / setTimeZone(TimeZone) | CronTrigger.In | match | crontrig-zoned, crontrig-zoned-fall-back | |
| getStartTime() / setStartTime(Date) | CronTrigger.StartingAt | match | crontrig-after-before-start, crontrig-start-is-a-fire-time | |
| getEndTime() / setEndTime(Date) | CronTrigger.EndingAt | untested | — | exercised only through SimpleTrigger end-time cases |
| computeFirstFireTime(Calendar) | CronTrigger.ComputeFirstFireTime | differs | 9 crontrig-* | the port searches strictly after now; upstream searches from startTime-1s |
| getFireTimeAfter(Date) | *(no pure query; ComputeFirstFireTime + Triggered)* | differs | 9 crontrig-* | the port has no CronTrigger.FireTimeAfter |
| triggered(Calendar) | CronTrigger.Triggered | differs | 9 crontrig-* | signature differs (no org.quartz.Calendar argument) |
| getNextFireTime() / getPreviousFireTime() | NextFireTime, PreviousFireTime | match | crontrig-* | |
| setNextFireTime / setPreviousFireTime | — | missing | — | no state injection |
| mayFireAgain() | CronTrigger.WillFireAgain | untested | — | |
| willFireOn(Calendar[, boolean]) | — | missing | — | |
| updateAfterMisfire(Calendar) | CronTrigger.UpdateAfterMisfire | match | misfire-ignore-cron-* | see "Misfire" below |
| updateWithNewCalendar(Calendar, long) | — | missing | — | the port's CalendarTrigger decorator is a different design |
| getScheduleBuilder() / getTriggerBuilder() | quartz.CronSchedule builder | untested | — | builders not compared |
| MISFIRE_INSTRUCTION_FIRE_ONCE_NOW (1) | quartz.MisfireFireNow (1) | untested | — | numeric values coincide by accident |
| MISFIRE_INSTRUCTION_DO_NOTHING (2) | quartz.MisfireDoNothing (3) | differs | — | the port has its own enum, not Quartz's wire constants |
| getFireTimeAfter(Date) | SimpleTrigger.FireTimeAfter | differs | 20 simple-* | see D9, D10 |
| getStartTime() / setStartTime(Date) | NewSimpleTrigger (start arg), StartTime | match | simple-forever-* | |
| getEndTime() / setEndTime(Date) | WithEndTime | differs | simple-end-time-equals-fire, simple-end-time-before-start | D9, D10 |
| getRepeatCount() / setRepeatCount(int) | RepeatCount, NewSimpleTrigger | differs | simple-repeat-negative-2 | D10 |
| getRepeatInterval() / setRepeatInterval(long) | Interval, NewSimpleTrigger | differs | simple-interval-zero, simple-interval-negative | D10 |
| getTimesTriggered() / setTimesTriggered(int) | TimesTriggered (getter only) | untested | — | no setter in the port |
| computeFirstFireTime(Calendar) | ComputeFirstFireTime | match | misfire-ignore-simple-* | both return the start time verbatim |
| triggered(Calendar) | Triggered | untested | — | compared indirectly through FireTimeAfter |
| getFireTimeBefore(Date) | — | missing | — | |
| computeNumTimesFiredBetween(Date, Date) | — | missing | — | |
| mayFireAgain() | WillFireAgain | untested | — | |
| updateAfterMisfire(Calendar) | UpdateAfterMisfire | match | misfire-ignore-simple-* | |
| validate() | — | missing | — | the port validates nothing (D10) |
| REPEAT_INDEFINITELY (-1) | quartz.RepeatForever (-1) | match | simple-forever-* | |
| MISFIRE_INSTRUCTION_FIRE_NOW (1) | quartz.MisfireFireNow (1) | untested | — | |
| MISFIRE_INSTRUCTION_RESCHEDULE_NOW_WITH_EXISTING_REPEAT_COUNT (2) | — | missing | — | |
| MISFIRE_INSTRUCTION_RESCHEDULE_NOW_WITH_REMAINING_REPEAT_COUNT (3) | — | missing | — | |
| MISFIRE_INSTRUCTION_RESCHEDULE_NEXT_WITH_REMAINING_COUNT (4) | — | missing | — | |
| MISFIRE_INSTRUCTION_RESCHEDULE_NEXT_WITH_EXISTING_COUNT (5) | — | missing | — | |
| — | SimpleTrigger.String | extra | — | debug string |
| getFireTimeAfter(Date) | CalendarIntervalTrigger.FireTimeAfter | differs | 29 cal-* | see D11, D12 |
| getRepeatIntervalUnit() / setRepeatIntervalUnit(IntervalUnit) | Unit, NewCalendarIntervalTrigger | differs | cal-millisecond-unit | no MILLISECOND unit in the port |
| getRepeatInterval() / setRepeatInterval(int) | Count, NewCalendarIntervalTrigger | differs | cal-count-zero, cal-count-negative | D13 |
| getTimeZone() / setTimeZone(TimeZone) | In, Location | differs | 7 zoned cal-* | D12 |
| isPreserveHourOfDayAcrossDaylightSavings() / setter | PreserveWallClock | differs | cal-day-across-*-preserve | different default and different meaning (D12) |
| isSkipDayIfHourDoesNotExist() / setter | — | missing | cal-day-in-nonexistent-local-time | not ported |
| getStartTime() / setStartTime(Date) | StartTime | match | cal-after-before-start | |
| getEndTime() / setEndTime(Date) | WithEndTime | untested | — | |
| getTimesTriggered() / setter | TimesTriggered (getter only) | untested | — | |
| computeFirstFireTime(Calendar) | ComputeFirstFireTime | untested | — | |
| updateAfterMisfire(Calendar) | UpdateAfterMisfire | untested | — | not deterministically comparable (see "Misfire") |
| updateWithNewCalendar | — | missing | — | |
| MISFIRE_INSTRUCTION_FIRE_ONCE_NOW (1) | MisfireFireNow (1) | untested | — | |
| MISFIRE_INSTRUCTION_DO_NOTHING (2) | MisfireDoNothing (3) | differs | — | |
| — | PreviousFireTime, String | extra | — | |
| getFireTimeAfter(Date) | — (no pure query; ComputeFirstFireTime + Triggered) | differs | 26 dtit-* | see D14–D17 |
| getStartTimeOfDay() / setStartTimeOfDay(TimeOfDay) | StartTimeOfDay, NewDailyTimeIntervalTrigger | match | dtit-hourly-window-utc etc. | |
| getEndTimeOfDay() / setEndTimeOfDay(TimeOfDay) | EndTimeOfDay, NewDailyTimeIntervalTrigger | differs | dtit-inverted-window | D14 |
| getDaysOfWeek() / setDaysOfWeek(Set<Integer>) | DaysOfWeek, OnDaysOfWeek | match | dtit-monday-only, dtit-weekend-only, dtit-sunday-only | numbering differs (Calendar.SUNDAY==1 vs time.Sunday==0) but the harness maps names, and the resulting fire times agree |
| getRepeatIntervalUnit() / setter | Unit | differs | dtit-day-unit-unsupported | D15 |
| getRepeatInterval() / setter | Count | differs | dtit-count-zero | D13 |
| getRepeatCount() / setRepeatCount(int) | RepeatCount, WithRepeatCount | untested | — | |
| getStartTime() / setStartTime(Date) | StartingAt, StartTime | match | dtit-after-before-start, dtit-start-mid-window | |
| getEndTime() / setEndTime(Date) | EndingAt, EndTime | untested | — | |
| *(none — no per-trigger time zone in 2.5.0)* | In, Location | extra | 4 zoned dtit-* | upstream resolves the window against the JVM default zone; the runner installs the requested zone as the default to make the comparison possible |
| computeFirstFireTime(Calendar) | ComputeFirstFireTime | differs | 26 dtit-* | |
| triggered(Calendar) | Triggered | differs | 26 dtit-* | |
| REPEAT_INDEFINITELY (-1) | quartz.RepeatForever (-1) | match | — | shared sentinel |
| MISFIRE_INSTRUCTION_FIRE_ONCE_NOW / _DO_NOTHING | MisfireFireNow / MisfireDoNothing | differs | — | |
| TimeOfDay(int,int,int) | quartz.NewTimeOfDay | match | all dtit-* | |
| TimeOfDay(int,int) | — | missing | — | no two-arg form |
| hourMinuteAndSecondOfDay, hourAndMinuteOfDay | — | missing | — | static factories |
| getHour() / getMinute() / getSecond() | TimeOfDay.Hour/.Minute/.Second fields | match | all dtit-* | exported struct fields, not methods |
| before(TimeOfDay) | — | missing | — | |
| getTimeOfDayForDate(Date) | — | missing | — | |
| hourAndMinuteAndSecondFromDate([TimeZone]) | — | missing | — | |
| hourAndMinuteFromDate([TimeZone]) | — | missing | — | |
| IntervalUnit.MILLISECOND | — | missing | cal-millisecond-unit | |
| IntervalUnit.SECOND/MINUTE/HOUR/DAY/WEEK/MONTH/YEAR | quartz.IntervalSecond … IntervalYear | match | cal-second-45, cal-minute-90, cal-hour-6, cal-day-1, cal-week-1, cal-month-6, cal-year-1 | |
| Trigger.MISFIRE_INSTRUCTION_SMART_POLICY (0) | quartz.MisfireSmart (0) | untested | — | not comparable (see "Misfire") |
| Trigger.MISFIRE_INSTRUCTION_IGNORE_MISFIRE_POLICY (-1) | quartz.MisfireIgnore (2) | differs | misfire-ignore-* | the *behaviour* matches; the constant does not |
| Trigger.getKey/getJobKey/getDescription | Key, JobKey, Description | untested | — | identity only |
| Trigger.getPriority, getCalendarName, getJobDataMap | — | missing | — | not on the port's Trigger interface |
| Trigger.compareTo | — | missing | — | |
| — | quartz.CalendarTrigger / quartz.WithCalendar | extra | — | Go-only decorator replacing updateWithNewCalendar |
Every case the harness streamed to both runners, with the exact upstream symbol and Go symbol it exercised. A deliberate, documented difference is a deviation and is counted apart from a mismatch.
| Case | Group | Upstream symbol | Go symbol | Status | Note |
|---|---|---|---|---|---|
| cal-day-1 | calendar-interval-trigger | org.quartz.impl.triggers.CalendarIntervalTriggerImpl.getFireTimeAfter | quartz.CalendarIntervalTrigger.FireTimeAfter | match | |
| cal-day-3 | calendar-interval-trigger | org.quartz.impl.triggers.CalendarIntervalTriggerImpl.getFireTimeAfter | quartz.CalendarIntervalTrigger.FireTimeAfter | match | |
| cal-week-1 | calendar-interval-trigger | org.quartz.impl.triggers.CalendarIntervalTriggerImpl.getFireTimeAfter | quartz.CalendarIntervalTrigger.FireTimeAfter | match | |
| cal-week-2 | calendar-interval-trigger | org.quartz.impl.triggers.CalendarIntervalTriggerImpl.getFireTimeAfter | quartz.CalendarIntervalTrigger.FireTimeAfter | match | |
| cal-month-1-mid-month | calendar-interval-trigger | org.quartz.impl.triggers.CalendarIntervalTriggerImpl.getFireTimeAfter | quartz.CalendarIntervalTrigger.FireTimeAfter | match | |
| cal-month-1-from-jan-31 | calendar-interval-trigger | org.quartz.impl.triggers.CalendarIntervalTriggerImpl.getFireTimeAfter | quartz.CalendarIntervalTrigger.FireTimeAfter | mismatch | KNOWN PORT BUG: 2026-01-31 + 1 month must clamp to 2026-02-28 (java.util.Calendar.add(MONTH)); the port uses time.Time.AddDate, which overflows to 2026-03-03 |
| cal-month-1-from-mar-31 | calendar-interval-trigger | org.quartz.impl.triggers.CalendarIntervalTriggerImpl.getFireTimeAfter | quartz.CalendarIntervalTrigger.FireTimeAfter | mismatch | 31 -> April has 30 days |
| cal-month-1-from-jan-30-leap | calendar-interval-trigger | org.quartz.impl.triggers.CalendarIntervalTriggerImpl.getFireTimeAfter | quartz.CalendarIntervalTrigger.FireTimeAfter | mismatch | leap February has 29 days |
| cal-month-1-from-jan-29-leap | calendar-interval-trigger | org.quartz.impl.triggers.CalendarIntervalTriggerImpl.getFireTimeAfter | quartz.CalendarIntervalTrigger.FireTimeAfter | match | |
| cal-month-2-from-dec-31 | calendar-interval-trigger | org.quartz.impl.triggers.CalendarIntervalTriggerImpl.getFireTimeAfter | quartz.CalendarIntervalTrigger.FireTimeAfter | mismatch | |
| cal-month-6 | calendar-interval-trigger | org.quartz.impl.triggers.CalendarIntervalTriggerImpl.getFireTimeAfter | quartz.CalendarIntervalTrigger.FireTimeAfter | match | |
| cal-year-1-from-leap-day | calendar-interval-trigger | org.quartz.impl.triggers.CalendarIntervalTriggerImpl.getFireTimeAfter | quartz.CalendarIntervalTrigger.FireTimeAfter | mismatch | Feb 29 + 1 year must clamp to Feb 28 |
| cal-year-1 | calendar-interval-trigger | org.quartz.impl.triggers.CalendarIntervalTriggerImpl.getFireTimeAfter | quartz.CalendarIntervalTrigger.FireTimeAfter | match | |
| cal-hour-6 | calendar-interval-trigger | org.quartz.impl.triggers.CalendarIntervalTriggerImpl.getFireTimeAfter | quartz.CalendarIntervalTrigger.FireTimeAfter | match | |
| cal-minute-90 | calendar-interval-trigger | org.quartz.impl.triggers.CalendarIntervalTriggerImpl.getFireTimeAfter | quartz.CalendarIntervalTrigger.FireTimeAfter | match | |
| cal-second-45 | calendar-interval-trigger | org.quartz.impl.triggers.CalendarIntervalTriggerImpl.getFireTimeAfter | quartz.CalendarIntervalTrigger.FireTimeAfter | match | |
| cal-millisecond-unit | calendar-interval-trigger | org.quartz.DateBuilder.IntervalUnit.MILLISECOND | — | match | the port has no millisecond interval unit |
| cal-count-zero | calendar-interval-trigger | org.quartz.impl.triggers.CalendarIntervalTriggerImpl.setRepeatInterval | quartz.NewCalendarIntervalTrigger | mismatch | |
| cal-count-negative | calendar-interval-trigger | org.quartz.impl.triggers.CalendarIntervalTriggerImpl.setRepeatInterval | quartz.NewCalendarIntervalTrigger | mismatch | |
| cal-after-before-start | calendar-interval-trigger | org.quartz.impl.triggers.CalendarIntervalTriggerImpl.getFireTimeAfter | quartz.CalendarIntervalTrigger.FireTimeAfter | match | |
| cal-after-mid-interval | calendar-interval-trigger | org.quartz.impl.triggers.CalendarIntervalTriggerImpl.getFireTimeAfter | quartz.CalendarIntervalTrigger.FireTimeAfter | match | |
| cal-day-across-spring-forward | calendar-interval-trigger | org.quartz.impl.triggers.CalendarIntervalTriggerImpl.getFireTimeAfter | quartz.CalendarIntervalTrigger.FireTimeAfter | mismatch | 09:00 local on 2026-03-06; a calendar day step must keep 09:00 local across the 2026-03-08 transition |
| cal-day-across-spring-forward-preserve | calendar-interval-trigger | org.quartz.impl.triggers.CalendarIntervalTriggerImpl.getFireTimeAfter | quartz.CalendarIntervalTrigger.FireTimeAfter | match | |
| cal-day-across-fall-back | calendar-interval-trigger | org.quartz.impl.triggers.CalendarIntervalTriggerImpl.getFireTimeAfter | quartz.CalendarIntervalTrigger.FireTimeAfter | mismatch | 09:00 local on 2026-10-30 across the 2026-11-01 transition |
| cal-day-across-fall-back-preserve | calendar-interval-trigger | org.quartz.impl.triggers.CalendarIntervalTriggerImpl.getFireTimeAfter | quartz.CalendarIntervalTrigger.FireTimeAfter | match | |
| cal-week-across-dst-berlin | calendar-interval-trigger | org.quartz.impl.triggers.CalendarIntervalTriggerImpl.getFireTimeAfter | quartz.CalendarIntervalTrigger.FireTimeAfter | mismatch | crosses the 2026-03-29 European transition |
| cal-month-across-dst-ny | calendar-interval-trigger | org.quartz.impl.triggers.CalendarIntervalTriggerImpl.getFireTimeAfter | quartz.CalendarIntervalTrigger.FireTimeAfter | mismatch | |
| cal-hour-across-spring-forward | calendar-interval-trigger | org.quartz.impl.triggers.CalendarIntervalTriggerImpl.getFireTimeAfter | quartz.CalendarIntervalTrigger.FireTimeAfter | match | a sub-day unit is absolute and must simply add an hour |
| cal-day-in-nonexistent-local-time | calendar-interval-trigger | org.quartz.impl.triggers.CalendarIntervalTriggerImpl.getFireTimeAfter | quartz.CalendarIntervalTrigger.FireTimeAfter | mismatch | 02:30 local on 2026-03-07; the following day has no 02:30 |
| next-daily-noon | cron-next | org.quartz.CronExpression.getNextValidTimeAfter | quartz.CronExpression.Next | match | |
| next-daily-noon-from-noon | cron-next | org.quartz.CronExpression.getNextValidTimeAfter | quartz.CronExpression.Next | match | strictly-after semantics at an exact match |
| next-daily-noon-mid-second | cron-next | org.quartz.CronExpression.getNextValidTimeAfter | quartz.CronExpression.Next | match | |
| next-every-second | cron-next | org.quartz.CronExpression.getNextValidTimeAfter | quartz.CronExpression.Next | match | rolls minute, hour, day, month boundary |
| next-every-10-seconds | cron-next | org.quartz.CronExpression.getNextValidTimeAfter | quartz.CronExpression.Next | match | |
| next-second-list | cron-next | org.quartz.CronExpression.getNextValidTimeAfter | quartz.CronExpression.Next | match | |
| next-minute-range | cron-next | org.quartz.CronExpression.getNextValidTimeAfter | quartz.CronExpression.Next | match | |
| next-step-over-range | cron-next | org.quartz.CronExpression.getNextValidTimeAfter | quartz.CronExpression.Next | match | |
| next-step-from-value | cron-next | org.quartz.CronExpression.getNextValidTimeAfter | quartz.CronExpression.Next | match | |
| next-hour-list | cron-next | org.quartz.CronExpression.getNextValidTimeAfter | quartz.CronExpression.Next | match | |
| next-dom-31 | cron-next | org.quartz.CronExpression.getNextValidTimeAfter | quartz.CronExpression.Next | match | skips months without a 31st |
| next-dom-29-feb | cron-next | org.quartz.CronExpression.getNextValidTimeAfter | quartz.CronExpression.Next | match | leap-year-only date |
| next-dom-30-feb-impossible | cron-next | org.quartz.CronExpression.getNextValidTimeAfter | quartz.CronExpression.Next | match | never fires |
| next-month-names | cron-next | org.quartz.CronExpression.getNextValidTimeAfter | quartz.CronExpression.Next | match | |
| next-month-name-range | cron-next | org.quartz.CronExpression.getNextValidTimeAfter | quartz.CronExpression.Next | match | |
| next-month-numeric-list | cron-next | org.quartz.CronExpression.getNextValidTimeAfter | quartz.CronExpression.Next | match | |
| next-dow-name-monfri | cron-next | org.quartz.CronExpression.getNextValidTimeAfter | quartz.CronExpression.Next | match | weekday names must agree even though the numeric bases differ |
| next-dow-name-sun | cron-next | org.quartz.CronExpression.getNextValidTimeAfter | quartz.CronExpression.Next | match | |
| next-dow-name-sat | cron-next | org.quartz.CronExpression.getNextValidTimeAfter | quartz.CronExpression.Next | match | |
| next-dow-name-list | cron-next | org.quartz.CronExpression.getNextValidTimeAfter | quartz.CronExpression.Next | match | |
| next-dow-numeric-1 | cron-next | org.quartz.CronExpression.getNextValidTimeAfter | quartz.CronExpression.Next | mismatch | Quartz 1 == Sunday; Unix cron 1 == Monday |
| next-dow-numeric-2 | cron-next | org.quartz.CronExpression.getNextValidTimeAfter | quartz.CronExpression.Next | mismatch | Quartz 2 == Monday |
| next-dow-numeric-range | cron-next | org.quartz.CronExpression.getNextValidTimeAfter | quartz.CronExpression.Next | mismatch | Quartz 2-6 == Mon-Fri |
| next-dow-numeric-7 | cron-next | org.quartz.CronExpression.getNextValidTimeAfter | quartz.CronExpression.Next | mismatch | Quartz 7 == Saturday; Unix cron 7 == Sunday |
| next-dow-and-dom-both-star | cron-next | org.quartz.CronExpression.getNextValidTimeAfter | quartz.CronExpression.Next | mismatch | rejected by Quartz at parse time |
| next-dow-and-dom-both-set | cron-next | org.quartz.CronExpression.getNextValidTimeAfter | quartz.CronExpression.Next | mismatch | Quartz rejects; Unix cron ORs the two day fields |
| next-question-both-day-fields | cron-next | org.quartz.CronExpression.getNextValidTimeAfter | quartz.CronExpression.Next | mismatch | |
| next-l-last-day-of-month | cron-next | org.quartz.CronExpression.getNextValidTimeAfter | quartz.CronExpression.Next | mismatch | L is not implemented by the port |
| next-l-offset | cron-next | org.quartz.CronExpression.getNextValidTimeAfter | quartz.CronExpression.Next | mismatch | |
| next-lw-last-weekday | cron-next | org.quartz.CronExpression.getNextValidTimeAfter | quartz.CronExpression.Next | mismatch | |
| next-w-nearest-weekday | cron-next | org.quartz.CronExpression.getNextValidTimeAfter | quartz.CronExpression.Next | mismatch | |
| next-w-first-of-month | cron-next | org.quartz.CronExpression.getNextValidTimeAfter | quartz.CronExpression.Next | mismatch | |
| next-dow-last-friday | cron-next | org.quartz.CronExpression.getNextValidTimeAfter | quartz.CronExpression.Next | mismatch | |
| next-dow-third-friday | cron-next | org.quartz.CronExpression.getNextValidTimeAfter | quartz.CronExpression.Next | mismatch | |
| next-dow-first-monday-name | cron-next | org.quartz.CronExpression.getNextValidTimeAfter | quartz.CronExpression.Next | mismatch | |
| next-seven-field-year-bounded | cron-next | org.quartz.CronExpression.getNextValidTimeAfter | quartz.CronExpression.Next | mismatch | single-year expression fires exactly once |
| next-seven-field-year-range | cron-next | org.quartz.CronExpression.getNextValidTimeAfter | quartz.CronExpression.Next | mismatch | |
| next-yearly-specific | cron-next | org.quartz.CronExpression.getNextValidTimeAfter | quartz.CronExpression.Next | match | |
| next-from-year-end | cron-next | org.quartz.CronExpression.getNextValidTimeAfter | quartz.CronExpression.Next | match | |
| next-from-leap-day | cron-next | org.quartz.CronExpression.getNextValidTimeAfter | quartz.CronExpression.Next | match | |
| next-from-epoch | cron-next | org.quartz.CronExpression.getNextValidTimeAfter | quartz.CronExpression.Next | match | |
| next-from-1999 | cron-next | org.quartz.CronExpression.getNextValidTimeAfter | quartz.CronExpression.Next | match | |
| next-far-future | cron-next | org.quartz.CronExpression.getNextValidTimeAfter | quartz.CronExpression.Next | match | |
| parse-every-day-noon | cron-parse | org.quartz.CronExpression.<init> | quartz.ParseCron | match | |
| parse-question-in-dom | cron-parse | org.quartz.CronExpression.<init> | quartz.ParseCron | match | ? in day-of-month, * in day-of-week |
| parse-question-both-day-fields | cron-parse | org.quartz.CronExpression.<init> | quartz.ParseCron | mismatch | both day fields unspecified |
| parse-star-both-day-fields | cron-parse | org.quartz.CronExpression.<init> | quartz.ParseCron | mismatch | Quartz forbids specifying BOTH day-of-month and day-of-week |
| parse-numeric-both-day-fields | cron-parse | org.quartz.CronExpression.<init> | quartz.ParseCron | mismatch | Quartz forbids both restricted; Unix cron ORs them |
| parse-minute-list | cron-parse | org.quartz.CronExpression.<init> | quartz.ParseCron | match | |
| parse-minute-range | cron-parse | org.quartz.CronExpression.<init> | quartz.ParseCron | match | |
| parse-step-over-star | cron-parse | org.quartz.CronExpression.<init> | quartz.ParseCron | match | |
| parse-step-over-range | cron-parse | org.quartz.CronExpression.<init> | quartz.ParseCron | match | |
| parse-step-from-value | cron-parse | org.quartz.CronExpression.<init> | quartz.ParseCron | match | |
| parse-dom-step-from-value | cron-parse | org.quartz.CronExpression.<init> | quartz.ParseCron | match | |
| parse-month-names | cron-parse | org.quartz.CronExpression.<init> | quartz.ParseCron | match | |
| parse-month-name-range | cron-parse | org.quartz.CronExpression.<init> | quartz.ParseCron | match | |
| parse-month-names-lowercase | cron-parse | org.quartz.CronExpression.<init> | quartz.ParseCron | match | |
| parse-dow-name-range | cron-parse | org.quartz.CronExpression.<init> | quartz.ParseCron | match | |
| parse-dow-name-list | cron-parse | org.quartz.CronExpression.<init> | quartz.ParseCron | match | |
| parse-dow-numeric-1 | cron-parse | org.quartz.CronExpression.<init> | quartz.ParseCron | match | Quartz: 1 == Sunday |
| parse-dow-numeric-7 | cron-parse | org.quartz.CronExpression.<init> | quartz.ParseCron | match | Quartz: 7 == Saturday; Unix cron: 7 == Sunday |
| parse-dow-numeric-0 | cron-parse | org.quartz.CronExpression.<init> | quartz.ParseCron | mismatch | Quartz has no day 0 |
| parse-dow-numeric-8 | cron-parse | org.quartz.CronExpression.<init> | quartz.ParseCron | match | out of range on both sides |
| parse-seven-field-year | cron-parse | org.quartz.CronExpression.<init> | quartz.ParseCron | mismatch | 7-field form with a year field |
| parse-seven-field-year-range | cron-parse | org.quartz.CronExpression.<init> | quartz.ParseCron | mismatch | |
| parse-seven-field-year-star | cron-parse | org.quartz.CronExpression.<init> | quartz.ParseCron | mismatch | |
| parse-five-field | cron-parse | org.quartz.CronExpression.<init> | quartz.ParseCron | mismatch | Quartz requires 6 or 7 fields; the port also accepts the 5-field Unix form |
| parse-eight-field | cron-parse | org.quartz.CronExpression.<init> | quartz.ParseCron | match | |
| parse-three-field | cron-parse | org.quartz.CronExpression.<init> | quartz.ParseCron | match | |
| parse-empty | cron-parse | org.quartz.CronExpression.<init> | quartz.ParseCron | match | |
| parse-garbage | cron-parse | org.quartz.CronExpression.<init> | quartz.ParseCron | match |