1 module fluentasserts.core.operations.lessOrEqualTo;
2 
3 import fluentasserts.core.results;
4 import fluentasserts.core.evaluation;
5 
6 import fluentasserts.core.lifecycle;
7 
8 import std.conv;
9 import std.datetime;
10 
11 version(unittest) {
12   import fluentasserts.core.expect;
13 }
14 
15 ///
16 IResult[] lessOrEqualTo(T)(ref Evaluation evaluation) @safe nothrow {
17   evaluation.message.addText(".");
18 
19   T expectedValue;
20   T currentValue;
21 
22   try {
23     expectedValue = evaluation.expectedValue.strValue.to!T;
24     currentValue = evaluation.currentValue.strValue.to!T;
25   } catch(Exception e) {
26     return [ new MessageResult("Can't convert the values to " ~ T.stringof) ];
27   }
28 
29   auto result = currentValue <= expectedValue;
30 
31   if(evaluation.isNegated) {
32     result = !result;
33   }
34 
35   if(result) {
36     return [];
37   }
38 
39   evaluation.message.addText(" ");
40   evaluation.message.addValue(evaluation.currentValue.niceValue);
41 
42   IResult[] results = [];
43 
44   if(evaluation.isNegated) {
45     evaluation.message.addText(" is less or equal to ");
46     results ~= new ExpectedActualResult("greater than " ~ evaluation.expectedValue.niceValue, evaluation.currentValue.niceValue);
47   } else {
48     evaluation.message.addText(" is greater than ");
49     results ~= new ExpectedActualResult("less or equal to " ~ evaluation.expectedValue.niceValue, evaluation.currentValue.niceValue);
50   }
51 
52   evaluation.message.addValue(evaluation.expectedValue.niceValue);
53   evaluation.message.addText(".");
54 
55   return results;
56 }