+template <class T>
+bool __equals(const T& actual, const T& expected)
+{
+ return actual == expected;
+}
+
+bool __equals(double actual, double expected)
+{
+ if (std::abs(actual - expected) < __EPSILON)
+ {
+ return true;
+ }
+ else
+ {
+ double minimum = std::min(expected * (1.0 - __EPSILON), expected * (1.0 + __EPSILON));
+ double maximum = std::max(expected * (1.0 - __EPSILON), expected * (1.0 + __EPSILON));
+ return actual > minimum && actual < maximum;
+ }
+}
+
+bool __equals(const std::vector<double>& actual, const std::vector<double>& expected)
+{
+ if (actual.size() != expected.size())
+ return false;
+
+ for (size_t i = 0; i < actual.size(); ++i)
+ if (!__equals(actual[i], expected[i]))
+ return false;
+
+ return true;
+}
+