public void Adding_3_monies_in_any_order_returns_the_same_result(SameCurrency <string> monies) { var(x, y, z) = monies; Assert.Equal(x + y + z, x + (y + z)); Assert.Equal(x.Add(y).Add(z), x.Add(y.Add(z))); }
public void Multiplying_the_sum_of_2_monies_is_the_same_as_multiplying_each_one_and_then_adding_the_result(decimal x, SameCurrency <string> monies) { var(y, z) = monies; Assert.Equal((y + z) * x, y * x + z * x); Assert.Equal(y.Add(z).Multiply(x), y.Multiply(x).Add(z.Multiply(x))); }
public void Adding_x_to_y_is_the_same_as_adding_y_to_x(SameCurrency <string> monies) { var(x, y) = monies; Assert.Equal(x + y, y + x); Assert.Equal(x.Add(y), y.Add(x)); }
public void Substracting_y_to_x_is_the_same_as_adding_opposite_of_y_to_x(SameCurrency <string> monies) { var(x, y) = monies; Assert.Equal(x - y, x + (-y)); Assert.Equal(x.Subtract(y), x.Add(y.Negate())); }
public void Substracting_x_to_y_is_opposite_of_substracting_y_to_x(SameCurrency <string> monies) { var(x, y) = monies; Assert.Equal(x - y, -(y - x)); Assert.Equal(x.Subtract(y), y.Subtract(x).Negate()); }
public void Multiplying_by_negative_reverses_order(NegativeInt x, SameCurrency <string> monies) { var(y, z) = monies; var x_ = (int)x; Assert.NotEqual(y > z, (y * x_) > (z * x_)); Assert.NotEqual(y > z, y.Multiply(x_) > z.Multiply(x_)); }
public void Multiplying_by_positive_preserves_order(PositiveInt x, SameCurrency <string> monies) { var(y, z) = monies; var x_ = (int)x; Assert.Equal(y > z, (y * x_) > (z * x_)); Assert.Equal(y > z, y.Multiply(x_) > z.Multiply(x_)); }
public void Dividing_the_sum_of_2_monies_is_the_same_as_dividing_each_and_then_adding_the_result(NonZeroInt x, SameCurrency <string> monies) { var(y, z) = monies; var x_ = (int)x; Assert.Equal((y + z) / x_, (y / x_) + (z / x_)); Assert.Equal(y.Add(z).Divide(x_), y.Divide(x_).Add(z.Divide(x_))); }
public void At_least_one_money_must_be_lt_or_eq_the_other(SameCurrency <T> monies) { var(x, y) = monies; Assert.True(x.CompareTo(y) <= 0 || y.CompareTo(x) <= 0); Assert.True(x.CompareTo((object)y) <= 0 || y.CompareTo((object)x) <= 0); Assert.True(x <= y || y <= x); Assert.True(x >= y || y >= x); }
public void If_x_lte_y_and_y_lte_z_then_x_lte_z(SameCurrency <T> monies) { var(x, y, z) = monies; if (x <= y && y <= z) { Assert.True(x <= z); Assert.True(x.CompareTo(z) <= 0); Assert.True(x.CompareTo((object)z) <= 0); } }
public void For_any_x_and_y_there_must_be_2_monies_that_turns_x_into_y(SameCurrency <string> monies) { var(x, y) = monies; var a = x - y; var b = x + y; Assert.Equal(y, x - a); Assert.Equal(y, x.Subtract(a)); Assert.Equal(y, b - x); Assert.Equal(y, b.Subtract(x)); }
public void If_both_are_lte_then_they_are_equal(SameCurrency <T> monies) { var(x, y) = monies; if (x <= y && y <= x) { Assert.True(x.Equals(y)); Assert.True(x.Equals((object)y)); Assert.True(x == y); Assert.False(x != y); Assert.Equal(0, x.CompareTo(y)); Assert.Equal(0, x.CompareTo((object)y)); } }
public void If_not_equal_then_x_to_y_is_opposite_than_y_to_x(SameCurrency <T> monies) { var(x, y) = monies; var r = x.CompareTo(y); if (r != 0) { var sign = Math.Sign(r) * -1; Assert.Equal(sign, Math.Sign(y.CompareTo(x))); Assert.Equal(sign, Math.Sign(y.CompareTo((object)x))); Assert.True(x < y != y < x); Assert.True(x <= y != y <= x); Assert.True(x > y != y > x); Assert.True(x >= y != y >= x); } }