ClarkeRubber

Doomsday Unit Tests

Jun 5th, 2013
261
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.19 KB | None | 0 0
  1. // DDUTgen.c by Billy Chia
  2. // Dec 24, 2012
  3. // A script to generate all unit tests for a doomsday function
  4. // part of UNSW Computing 1 on openlearning.com
  5. // 7 posible doomsdays (Monday - Sunday)
  6. // leapYear && non-leapYear
  7. // 365 or 366 days in year
  8. // 7 * 2 * 365 + 7 = 5117 asserts
  9. // Thanks to David Klick for the idea
  10. // Yes, I know this isn't really a pramatic idea
  11. // I just thought it'd be a good challange for a new C coder
  12. // On a Unix-based system run "./DDUTgen > doomsdayUntiTests.h"
  13. // Freely licensed under Creative Commons CC-BY-3.0
  14.  
  15. #include <stdio.h>
  16. #include <stdlib.h>
  17. #include <assert.h>
  18.  
  19. #define THURSDAY  0
  20. #define FRIDAY    1
  21. #define SATURDAY  2
  22. #define SUNDAY    3
  23. #define MONDAY    4
  24. #define TUESDAY   5
  25. #define WEDNESDAY 6
  26.  
  27. typedef char * string;
  28.  
  29. int getDaysInMonth (int leapYear, int month);
  30. int getDayOfWeek (int leapYear, int doomsday,
  31.                   int month, int day, int dayOfWeek);
  32. void printAssert (int leapYear, int doomsday,
  33.                   int month, int day, int dayOfWeek);
  34.  
  35.  
  36. int main (int argc, char *argv[]) {
  37.  
  38.     int leapYear;
  39.     int doomsday;
  40.     int month;
  41.     int daysInMonth;
  42.     int day;
  43.     int dayOfWeek;
  44.  
  45.     //get leap and non-leap years
  46.     for (leapYear = 0; leapYear < 2; leapYear++) {
  47.         // get doomsdays for each day of the week
  48.         for (doomsday = 0; doomsday < 7; doomsday++) {
  49.             // for every month
  50.             for (month = 1; month <= 12; month++) {
  51.                 daysInMonth = getDaysInMonth (leapYear, month);
  52.                 // for each day of the month print an assert
  53.                 for (day = 1; day <= daysInMonth; day++) {
  54.                     dayOfWeek = getDayOfWeek (leapYear, doomsday,
  55.                                              month, day, dayOfWeek);
  56.                     printAssert(leapYear, doomsday,
  57.                                 month, day, dayOfWeek);
  58.                 }
  59.             }
  60.         }
  61.     }
  62.  
  63.     return EXIT_SUCCESS;
  64. }
  65.  
  66. int getDaysInMonth (int leapYear, int month) {
  67.  
  68.     int days[] = { 31, 28, 31, 30, 31, 30,
  69.                    31, 31, 30, 31, 30, 31 };
  70.  
  71.     int daysInMonth = days[month - 1];
  72.  
  73.     if (leapYear && month == 2) {
  74.         daysInMonth++;
  75.     }
  76.  
  77.     return daysInMonth;
  78. }
  79.  
  80. int getDayOfWeek (int leapYear, int doomsday,
  81.              int month, int day, int dayOfWeek) {
  82.  
  83.     if (month == 1 && day == 1 && leapYear) {
  84.         dayOfWeek = (doomsday + 4) % 7;
  85.     } else if (month == 1 && day == 1 && !leapYear) {
  86.         dayOfWeek = (doomsday + 5) % 7;
  87.     } else {
  88.         dayOfWeek = (dayOfWeek + 1) % 7;
  89.     }
  90.  
  91.     return dayOfWeek;
  92. }
  93.  
  94. void printAssert (int leapYear, int doomsday,
  95.             int month, int day, int dayOfWeek) {
  96.  
  97.     string days[7] = { "THURSDAY",
  98.                        "FRIDAY",
  99.                        "SATURDAY",
  100.                        "SUNDAY",
  101.                        "MONDAY",
  102.                        "TUESDAY",
  103.                        "WEDNESDAY" };
  104.  
  105.     string boolean[2] = { "FALSE", "TRUE" };
  106.  
  107.     printf("assert (dayOfWeek (%s, %s, %2d, %2d) == %s);\n",
  108.                     days[doomsday], boolean[leapYear], month,
  109.                     day, days[dayOfWeek]);
  110.  
  111.     return;
  112. }
Advertisement
Add Comment
Please, Sign In to add comment