diff --git a/Sources/Expression.swift b/Sources/Expression.swift index 45ea171..722f400 100644 --- a/Sources/Expression.swift +++ b/Sources/Expression.swift @@ -52,11 +52,7 @@ final class VariableExpression: Expression, CustomStringConvertible { truthy = !result.isEmpty } else if let result = result as? Bool { truthy = result - } else if let result = result as? Int { - truthy = result > 0 - } else if let result = result as? Float { - truthy = result > 0 - } else if let result = result as? Double { + } else if let value = result, let result = toNumber(value: value) { truthy = result > 0 } else if result != nil { truthy = true @@ -134,3 +130,40 @@ final class AndExpression: Expression, InfixOperator, CustomStringConvertible { return try rhs.evaluate(context: context) } } + + +func toNumber(value: Any) -> Float80? { + if let value = value as? Float { + return Float80(value) + } else if let value = value as? Double { + return Float80(value) + } else if let value = value as? UInt { + return Float80(value) + } else if let value = value as? Int { + return Float80(value) + } else if let value = value as? Int8 { + return Float80(value) + } else if let value = value as? Int16 { + return Float80(value) + } else if let value = value as? Int32 { + return Float80(value) + } else if let value = value as? Int64 { + return Float80(value) + } else if let value = value as? UInt8 { + return Float80(value) + } else if let value = value as? UInt16 { + return Float80(value) + } else if let value = value as? UInt32 { + return Float80(value) + } else if let value = value as? UInt64 { + return Float80(value) + } else if let value = value as? Float80 { + return value + } else if let value = value as? Float64 { + return Float80(value) + } else if let value = value as? Float32 { + return Float80(value) + } + + return nil +} diff --git a/Tests/StencilTests/ExpressionSpec.swift b/Tests/StencilTests/ExpressionSpec.swift index 466f924..0ffc9b3 100644 --- a/Tests/StencilTests/ExpressionSpec.swift +++ b/Tests/StencilTests/ExpressionSpec.swift @@ -72,6 +72,11 @@ func testExpressions() { let context = Context(dictionary: ["value": Double(0)]) try expect(try expression.evaluate(context: context)).to.beFalse() } + + $0.it("evaluates to false when uint is 0") { + let context = Context(dictionary: ["value": UInt(0)]) + try expect(try expression.evaluate(context: context)).to.beFalse() + } } $0.describe("NotExpression") {