/** * @brief Perform tests on the academic calendar functions. * @return The number of errors detected. * * Runs through every day in the academic calendar checking that the term * number and week number functions are correct and that days are * consecutive when calculated using Academic_calendar::Academic. */ function PerformTests() { // Store the previous date so can see how many days have elapsed $prev_date = 0; $errors = 0; // Go through academic years for ($year = 2004; $year < 2012; ++$year) { // Go through all 6 academic terms for ($term_counter = 0; $term_counter < 6; ++$term_counter) { // Go through every week in the term $term_days = Academic_time::LengthOfAcademicTerm($year, $term_counter); $term_day = 0; $dow_counter = Academic_time::DayOfStartOfAcademicTerm($year, $term_counter) + 1; for ($week_counter = 1; $term_day < $term_days; ++$week_counter) { // Go through every day in the week for ($dow_counter = $dow_counter; $dow_counter <= 7 && $term_day < $term_days; ++$dow_counter) { // Create a date object from academic year/term/week/day_of_week $actime = $this->Academic($year, $term_counter, $week_counter, $dow_counter); // Create a date object from academic year/term/day_of_term $actime2 = $this->AcademicDayOfTerm($year, $term_counter, $term_day); // Detect any inconsistencies $error_detected = FALSE; // Do Academic and AcademicDayOfTerm give the same result? if ($actime != $actime2) { echo '!!Academic and AcademicDayOfTerm give different results!!<br/>'; ++$errors; $error_detected = TRUE; } // Has more than one day elapsed? if (0 !== $prev_date && 1 !== Academic_time::DaysBetweenTimestamps($prev_date->Timestamp(), $actime->Timestamp())) { echo '!!days not consecutive!!<br/>'; ++$errors; $error_detected = TRUE; } // Is the calculated academic year consistent? if ($year != $actime->AcademicYear()) { echo '!!year doesn\'t match!!<br/>'; ++$errors; $error_detected = TRUE; } // Is the calculated academic term consistent? if ($term_counter != $actime->AcademicTerm()) { echo '!!term doesn\'t match!!<br/>'; ++$errors; $error_detected = TRUE; } // Is the calculated academic week consistent? if ($week_counter != $actime->AcademicWeek()) { echo '!!week doesn\'t match!!<br/>'; ++$errors; $error_detected = TRUE; } if ($error_detected) { // an error has been detected so print date information if (0 !== $prev_date) { // starting with previous date echo ' prev date: ' . $prev_date->Format(DATE_RFC822) . '<br/>'; //*/ // elapsed days echo ' days between: ' . Academic_time::DaysBetweenTimestamps($prev_date->Timestamp(), $actime->Timestamp()) . '<br/>'; //*/; } // academic date input echo ' Year: ' . $year . ', Term: ' . $term_counter . ', Week: ' . $week_counter . ', Day of week: ' . $dow_counter . ', Day of term: ' . $term_day . '<br/>'; //*/ // standard date output echo ' date1: ' . $actime->Format(DATE_RFC822) . '<br/>'; //*/ echo ' date2: ' . $actime2->Format(DATE_RFC822) . '<br/>'; //*/ // gregorian & academic date output echo ' date: ' . $actime->DayOfMonth() . '/' . $actime->Month() . '/' . $actime->Year() . ': ' . $actime->AcademicWeek() . ',' . $actime->AcademicTermName() . ',' . $actime->AcademicYearName() . '<br/>'; //*/ // data from inside DaysBetweenTimestamps function // probably no longer required now its fixed echo ' Day of year of first: ' . (int) date('z', $prev_date->Timestamp()) . '<br/>'; echo ' Day of year of second: ' . (int) date('z', $actime->Timestamp()) . '<br/>'; $difference = (int) date('z', $actime->Timestamp()) - (int) date('z', $prev_date->Timestamp()); if ($difference < 0) { echo ' Days of year of first: ' . (365 + (int) date('L', $prev_date->Timestamp())) . '<br/>'; } // New line to seperate error dates echo '<br/>'; } $prev_date = $actime; ++$term_day; } $dow_counter = 1; } } } return $errors; }