Fix some cases in value is_true()
@@ -142,8 +142,8 @@ impl ValueData {
match *self {
ValueData::Object(_, _) => true,
ValueData::String(ref s) if !s.is_empty() => true,
- ValueData::Number(n) if n >= 1.0 && n % 1.0 == 0.0 => true,
- ValueData::Integer(n) if n > 1 => true,
+ ValueData::Number(n) if n != 0.0 && !n.is_nan() => true,
+ ValueData::Integer(n) if n != 0 => true,
ValueData::Boolean(v) => v,
_ => false,
}
@@ -880,4 +880,21 @@ mod tests {
assert_eq!(obj.get_field_slice("foo").to_string(), "bar");
}
+ #[test]
+ fn check_integer_is_true() {
+ assert_eq!(1.to_value().is_true(), true);
+ assert_eq!(0.to_value().is_true(), false);
+ assert_eq!((-1).to_value().is_true(), true);
+ }
+
+ #[test]
+ fn check_number_is_true() {
+ assert_eq!(1.0.to_value().is_true(), true);
+ assert_eq!(0.1.to_value().is_true(), true);
+ assert_eq!(0.0.to_value().is_true(), false);
+ assert_eq!((-0.0).to_value().is_true(), false);
+ assert_eq!((-1.0).to_value().is_true(), true);
+ assert_eq!(NAN.to_value().is_true(), false);
+ }
+
}
