Julio Biason
4 years ago
1 changed files with 169 additions and 0 deletions
@ -0,0 +1,169 @@ |
|||||||
|
#include <string.h> |
||||||
|
#include <stdlib.h> |
||||||
|
|
||||||
|
#include "check.h" |
||||||
|
#include "hours.h" |
||||||
|
#include "period.h" |
||||||
|
|
||||||
|
int main(int argc, char *argv[]) { |
||||||
|
describe("Hours", { |
||||||
|
context("new", { |
||||||
|
it("Create a structure if valid", { |
||||||
|
hours* test = hours_new("12:00"); |
||||||
|
check(test != NULL); |
||||||
|
hours_free(test); |
||||||
|
}); |
||||||
|
|
||||||
|
it("Fails on invalid hours", { |
||||||
|
hours* test = hours_new("25:00"); |
||||||
|
check(test == NULL); |
||||||
|
}); |
||||||
|
|
||||||
|
it("Fails on invalid minutes", { |
||||||
|
hours* test = hours_new("12:61"); |
||||||
|
check(test == NULL); |
||||||
|
}); |
||||||
|
|
||||||
|
it("Fails on invalid format", { |
||||||
|
hours* test = hours_new("1200"); |
||||||
|
check(test == NULL); |
||||||
|
}); |
||||||
|
}); |
||||||
|
|
||||||
|
context("sub", { |
||||||
|
it("Substracts times", { |
||||||
|
hours* first = hours_new("13:00"); |
||||||
|
hours* second = hours_new("15:00"); |
||||||
|
hours* diff = hours_sub(first, second); |
||||||
|
char *test = hours_display(diff); |
||||||
|
check(strcmp(test, "02:00") == 0); |
||||||
|
free(test); |
||||||
|
hours_free(diff); |
||||||
|
hours_free(second); |
||||||
|
hours_free(first); |
||||||
|
}); |
||||||
|
}); |
||||||
|
|
||||||
|
context("add", { |
||||||
|
it("Adds times", { |
||||||
|
hours* first = hours_new("01:30"); |
||||||
|
hours* second = hours_new("01:30"); |
||||||
|
hours* diff = hours_add(first, second); |
||||||
|
char *test = hours_display(diff); |
||||||
|
check(strcmp(test, "03:00") == 0); |
||||||
|
free(test); |
||||||
|
hours_free(diff); |
||||||
|
hours_free(second); |
||||||
|
hours_free(first); |
||||||
|
}); |
||||||
|
}); |
||||||
|
|
||||||
|
context("preceeds", { |
||||||
|
it("First time is earlier", { |
||||||
|
hours* first = hours_new("13:00"); |
||||||
|
hours* second = hours_new("15:00"); |
||||||
|
check(hours_preceed(first, second) == -1); |
||||||
|
hours_free(second); |
||||||
|
hours_free(first); |
||||||
|
}); |
||||||
|
|
||||||
|
it("Second time is earlier", { |
||||||
|
hours* first = hours_new("15:00"); |
||||||
|
hours* second = hours_new("13:00"); |
||||||
|
check(hours_preceed(first, second) == 1); |
||||||
|
hours_free(second); |
||||||
|
hours_free(first); |
||||||
|
}); |
||||||
|
}); |
||||||
|
}); |
||||||
|
|
||||||
|
describe("Periods", { |
||||||
|
context("So far", { |
||||||
|
it("Is in the morning", { |
||||||
|
hours* start = hours_new("08:00"); |
||||||
|
hours* going_lunch = hours_new("12:00"); |
||||||
|
hours* back_from_lunch = hours_new("13:00"); |
||||||
|
hours* now = hours_new("09:33"); |
||||||
|
|
||||||
|
hours* so_far = period_worked_so_far(start, going_lunch, back_from_lunch, now); |
||||||
|
char* display = hours_display(so_far); |
||||||
|
check(strcmp(display, "01:33") == 0); |
||||||
|
free(display); |
||||||
|
hours_free(so_far); |
||||||
|
|
||||||
|
hours_free(now); |
||||||
|
hours_free(back_from_lunch); |
||||||
|
hours_free(going_lunch); |
||||||
|
hours_free(start); |
||||||
|
}); |
||||||
|
|
||||||
|
it("Is in the lunch break", { |
||||||
|
hours* start = hours_new("08:10"); |
||||||
|
hours* going_lunch = hours_new("12:08"); |
||||||
|
hours* back_from_lunch = hours_new("13:00"); |
||||||
|
hours* now = hours_new("12:30"); |
||||||
|
|
||||||
|
hours* so_far = period_worked_so_far(start, going_lunch, back_from_lunch, now); |
||||||
|
char* display = hours_display(so_far); |
||||||
|
check(strcmp(display, "04:20") == 0); |
||||||
|
free(display); |
||||||
|
hours_free(so_far); |
||||||
|
|
||||||
|
hours_free(now); |
||||||
|
hours_free(back_from_lunch); |
||||||
|
hours_free(going_lunch); |
||||||
|
hours_free(start); |
||||||
|
}); |
||||||
|
|
||||||
|
it("Back from lunch", { |
||||||
|
hours* start = hours_new("08:20"); |
||||||
|
hours* going_lunch = hours_new("12:20"); |
||||||
|
hours* back_from_lunch = hours_new("13:40"); |
||||||
|
hours* now = hours_new("14:40"); |
||||||
|
|
||||||
|
hours* so_far = period_worked_so_far(start, going_lunch, back_from_lunch, now); |
||||||
|
char* display = hours_display(so_far); |
||||||
|
check(strcmp(display, "05:00") == 0); |
||||||
|
free(display); |
||||||
|
hours_free(so_far); |
||||||
|
|
||||||
|
hours_free(now); |
||||||
|
hours_free(back_from_lunch); |
||||||
|
hours_free(going_lunch); |
||||||
|
hours_free(start); |
||||||
|
}); |
||||||
|
}); |
||||||
|
|
||||||
|
context("Extra hours", { |
||||||
|
it("Still have to work", { |
||||||
|
hours* so_far = hours_new("07:20"); |
||||||
|
|
||||||
|
int extra; |
||||||
|
hours* remaining = period_calc_time(so_far, &extra); |
||||||
|
check(extra == 0); |
||||||
|
char* display = hours_display(remaining); |
||||||
|
check(strcmp(display, "01:28") == 0); |
||||||
|
free(display); |
||||||
|
hours_free(remaining); |
||||||
|
|
||||||
|
hours_free(so_far); |
||||||
|
}); |
||||||
|
|
||||||
|
it("Extra time", { |
||||||
|
hours* so_far = hours_new("09:00"); |
||||||
|
|
||||||
|
int extra; |
||||||
|
hours* extra_time = period_calc_time(so_far, &extra); |
||||||
|
check(extra == 1); |
||||||
|
char* display = hours_display(extra_time); |
||||||
|
check(strcmp(display, "00:12") == 0); |
||||||
|
free(display); |
||||||
|
hours_free(extra_time); |
||||||
|
|
||||||
|
hours_free(so_far); |
||||||
|
}); |
||||||
|
}); |
||||||
|
}); |
||||||
|
|
||||||
|
check_print_stats(); |
||||||
|
} |
Loading…
Reference in new issue