1 #include <cgreen/cgreen.h>
2 #include <cgreen/constraint.h>
3 #include <stdlib.h>
4 
5 Ensure can_construct_and_destroy_an_want_constraint() {
6     Constraint *any_old_want = want(label, 37);
7     destroy_constraint(any_old_want);
8 }
9 
10 Ensure parameter_name_gives_true_if_matching() {
11     Constraint *any_old_want = want(label, 37);
12     assert_equal(is_constraint_parameter(any_old_want, "wrong_label"), 0);
13     assert_equal(is_constraint_parameter(any_old_want, "label"), 1);
14     destroy_constraint(any_old_want);
15 }
16 
17 Ensure equal_integers_compare_true_with_a_want_constraint() {
18     Constraint *want_37 = want(label, 37);
19     assert_equal(compare_constraint(want_37, 37), 1);
20     destroy_constraint(want_37);
21 }
22 
23 Ensure equal_pointers_compare_true_with_a_want_constraint() {
24     Constraint *want_pointed_at_37 = want(label, (void *)37);
25     assert_equal(compare_constraint(want_pointed_at_37, (void *)37), 1);
26     assert_equal(compare_constraint(want_pointed_at_37, (void *)36), 0);
27     destroy_constraint(want_pointed_at_37);
28 }
29 
30 Ensure can_construct_and_destroy_a_want_string_constraint() {
31     Constraint *any_old_string_want = want_string(label, "Hello");
32     destroy_constraint(any_old_string_want);
33 }
34 
35 Ensure can_compare_strings_as_equal() {
36     Constraint *want_hello = want_string(label, "Hello");
37     assert_equal(compare_constraint(want_hello, "Hello"), 1);
38     assert_equal(compare_constraint(want_hello, "Goodbye"), 0);
39     destroy_constraint(want_hello);
40 }
41 
42 Ensure can_compare_null_strings_as_well_as_real_ones() {
43     Constraint *want_hello = want_string(label, "Hello");
44     assert_equal(compare_constraint(want_hello, NULL), 0);
45     destroy_constraint(want_hello);
46 }
47 
48 Ensure can_expect_null_strings_as_well_as_real_ones() {
49     Constraint *want_hello = want_string(label, NULL);
50     assert_equal(compare_constraint(want_hello, NULL), 1);
51     assert_equal(compare_constraint(want_hello, "Hello"), 0);
52     destroy_constraint(want_hello);
53 }
54 
55 Ensure equal_doubles_compare_true_with_a_want_double_constraint() {
56     Constraint *want_37 = want_double(label, 37.0);
57     assert_equal(compare_constraint(want_37, box_double(37.0)), 1);
58     destroy_constraint(want_37);
59 }
60 
61 Ensure unequal_doubles_compare_false_with_a_want_double_constraint() {
62     Constraint *want_37 = want_double(label, 37.0);
63     assert_equal(compare_constraint(want_37, box_double(36.0)), 0);
64     destroy_constraint(want_37);
65 }
66 
67 Ensure constraints_on_doubles_respect_significant_figure_setting() {
68 	significant_figures_for_assert_double_are(2);
69     Constraint *want_337 = want_double(label, 337.0);
70     assert_equal(compare_constraint(want_337, box_double(339.0)), 1);
71 	significant_figures_for_assert_double_are(3);
72     assert_equal(compare_constraint(want_337, box_double(339.0)), 0);
73     destroy_constraint(want_337);
74 }
75 
76 typedef struct {
77 	char* value;
78 	unsigned int length;
79 } String;
80 
81 static int is_non_empty_string(const void* other) {
82 	String* our = (String*)other;
83 	return our->length != 0;
84 }
85 
86 Ensure unequal_structs_with_same_value_for_specific_field_compare_true() {
87     String name;
88     name.value = "bob";
89     name.length = 3;
90 
91     Constraint *string_constraint = with(name, is_non_empty_string);
92 
93     assert_equal(compare_constraint(string_constraint, is_non_empty_string), 1);
94 
95     destroy_constraint(string_constraint);
96 
97     name.value = "tim";
98     name.length = 3;
99 
100     string_constraint = with(name, is_non_empty_string);
101     assert_equal(compare_constraint(string_constraint, is_non_empty_string), 1);
102 
103     destroy_constraint(string_constraint);
104 }
105 
106 
107 TestSuite *constraint_tests() {
108     TestSuite *suite = create_test_suite();
109     add_test(suite, can_construct_and_destroy_an_want_constraint);
110     add_test(suite, parameter_name_gives_true_if_matching);
111     add_test(suite, equal_integers_compare_true_with_a_want_constraint);
112     add_test(suite, equal_pointers_compare_true_with_a_want_constraint);
113     add_test(suite, can_construct_and_destroy_a_want_string_constraint);
114     add_test(suite, can_compare_strings_as_equal);
115     add_test(suite, can_compare_null_strings_as_well_as_real_ones);
116     add_test(suite, can_expect_null_strings_as_well_as_real_ones);
117     add_test(suite, equal_doubles_compare_true_with_a_want_double_constraint);
118     add_test(suite, unequal_doubles_compare_false_with_a_want_double_constraint);
119     add_test(suite, constraints_on_doubles_respect_significant_figure_setting);
120     add_test(suite, unequal_structs_with_same_value_for_specific_field_compare_true);
121     return suite;
122 }
123