From 5984fdec1451d485d2fc4d329944980f4c056891 Mon Sep 17 00:00:00 2001 From: Fabian Guerra Date: Thu, 13 Dec 2018 16:43:39 -0800 Subject: [ios, macos] Fix number conversions when expressions cast to large numbers. --- platform/darwin/src/MGLConversion.h | 4 ++-- platform/darwin/test/MGLPredicateTests.mm | 9 +++++++++ 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/platform/darwin/src/MGLConversion.h b/platform/darwin/src/MGLConversion.h index 9057ed7824..7050b4febf 100644 --- a/platform/darwin/src/MGLConversion.h +++ b/platform/darwin/src/MGLConversion.h @@ -85,7 +85,7 @@ public: static optional toNumber(const Holder& holder) { const id value = holder.value; if (_isNumber(value)) { - return ((NSNumber *)value).floatValue; + return ((NSNumber *)value).doubleValue; } else { return {}; } @@ -119,7 +119,7 @@ public: return { *toString(holder) }; } else if (_isNumber(value)) { // Need to cast to a double here as the float is otherwise considered a bool... - return { static_cast(*toNumber(holder)) }; + return { *toDouble(holder) }; } else { return {}; } diff --git a/platform/darwin/test/MGLPredicateTests.mm b/platform/darwin/test/MGLPredicateTests.mm index ed92c920f6..2ed18d48fc 100644 --- a/platform/darwin/test/MGLPredicateTests.mm +++ b/platform/darwin/test/MGLPredicateTests.mm @@ -224,6 +224,15 @@ NSPredicate *forwardPredicateAfter = [NSPredicate mgl_predicateWithFilter:forwardFilter]; XCTAssertEqualObjects(predicateAfter, forwardPredicateAfter); } + { + NSArray *expected = @[@"match", @[@"to-number", @[@"id"]], @[@3002970001, @3004140052, @3002950027, @3002970033], @YES, @NO]; + NSPredicate *predicate = [NSPredicate predicateWithFormat:@"CAST($featureIdentifier, 'NSNumber') IN { 3002970001, 3004140052, 3002950027, 3002970033 }"]; + XCTAssertEqualObjects(predicate.mgl_jsonExpressionObject, expected); + NSPredicate *predicateAfter = [NSPredicate predicateWithFormat:@"MGL_MATCH(CAST($featureIdentifier, 'NSNumber'), { 3002950027, 3002970001, 3002970033, 3004140052 }, YES, NO) == YES"]; + auto forwardFilter = [NSPredicate predicateWithMGLJSONObject:expected].mgl_filter; + NSPredicate *forwardPredicateAfter = [NSPredicate mgl_predicateWithFilter:forwardFilter]; + XCTAssertEqualObjects(predicateAfter, forwardPredicateAfter); + } { NSArray *expected = @[@"!", @[@"match", @[@"get", @"x"], @[@6, @5, @4, @3], @YES, @NO]]; NSPredicate *predicate = [NSPredicate predicateWithFormat:@"NOT x IN { 6, 5, 4, 3}"]; -- cgit v1.2.1