fix(if): Support resolving all number types 0 or below as false
This commit is contained in:
@@ -52,11 +52,7 @@ final class VariableExpression: Expression, CustomStringConvertible {
|
|||||||
truthy = !result.isEmpty
|
truthy = !result.isEmpty
|
||||||
} else if let result = result as? Bool {
|
} else if let result = result as? Bool {
|
||||||
truthy = result
|
truthy = result
|
||||||
} else if let result = result as? Int {
|
} else if let value = result, let result = toNumber(value: value) {
|
||||||
truthy = result > 0
|
|
||||||
} else if let result = result as? Float {
|
|
||||||
truthy = result > 0
|
|
||||||
} else if let result = result as? Double {
|
|
||||||
truthy = result > 0
|
truthy = result > 0
|
||||||
} else if result != nil {
|
} else if result != nil {
|
||||||
truthy = true
|
truthy = true
|
||||||
@@ -134,3 +130,40 @@ final class AndExpression: Expression, InfixOperator, CustomStringConvertible {
|
|||||||
return try rhs.evaluate(context: context)
|
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
|
||||||
|
}
|
||||||
|
|||||||
@@ -72,6 +72,11 @@ func testExpressions() {
|
|||||||
let context = Context(dictionary: ["value": Double(0)])
|
let context = Context(dictionary: ["value": Double(0)])
|
||||||
try expect(try expression.evaluate(context: context)).to.beFalse()
|
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") {
|
$0.describe("NotExpression") {
|
||||||
|
|||||||
Reference in New Issue
Block a user