From 798bcbee01467ac48347d54405277104ccdedec5 Mon Sep 17 00:00:00 2001 From: Fabian Guerra Date: Tue, 17 Apr 2018 17:14:42 -0400 Subject: [ios, macos] Add log2 NSExpresssion operator. --- platform/darwin/src/NSExpression+MGLAdditions.mm | 10 ++++++++++ platform/darwin/test/MGLExpressionTests.mm | 7 +++++++ 2 files changed, 17 insertions(+) diff --git a/platform/darwin/src/NSExpression+MGLAdditions.mm b/platform/darwin/src/NSExpression+MGLAdditions.mm index e641c79628..46a463430b 100644 --- a/platform/darwin/src/NSExpression+MGLAdditions.mm +++ b/platform/darwin/src/NSExpression+MGLAdditions.mm @@ -74,6 +74,7 @@ const MGLExpressionInterpolationMode MGLExpressionInterpolationModeCubicBezier = INSTALL_METHOD(mgl_sin:); INSTALL_METHOD(mgl_atan:); INSTALL_METHOD(mgl_tan:); + INSTALL_METHOD(mgl_log2:); // Install functions that resemble control structures, taking arbitrary // numbers of arguments. Vararg aftermarket functions need to be declared @@ -145,6 +146,13 @@ const MGLExpressionInterpolationMode MGLExpressionInterpolationModeCubicBezier = return @(tan(number.doubleValue)); } +/** + Computes the logarithm base two of the value. + */ +- (NSNumber *)mgl_log2:(NSNumber *)number { + return @(log2(number.doubleValue)); +} + /** A placeholder for a method that evaluates an interpolation expression. */ @@ -729,6 +737,7 @@ NSArray *MGLSubexpressionsWithJSONObjects(NSArray *objects) { @"sin" : @"mgl_sin:", @"atan" : @"mgl_atan:", @"tan" : @"mgl_tan:", + @"log2" : @"mgl_log2:", @"floor": @"floor:", @"ceil": @"ceiling:", @"^": @"raise:toPower:", @@ -977,6 +986,7 @@ NSArray *MGLSubexpressionsWithJSONObjects(NSArray *objects) { @"mgl_sin:" : @"sin", @"mgl_atan:" : @"atan", @"mgl_tan:" : @"tan", + @"mgl_log2:" : @"log2", // Vararg aftermarket expressions need to be declared with an explicit and implicit first argument. @"MGL_LET": @"let", @"MGL_LET:": @"let", diff --git a/platform/darwin/test/MGLExpressionTests.mm b/platform/darwin/test/MGLExpressionTests.mm index 864310356c..d7c86ed07c 100644 --- a/platform/darwin/test/MGLExpressionTests.mm +++ b/platform/darwin/test/MGLExpressionTests.mm @@ -503,6 +503,13 @@ using namespace std::string_literals; XCTAssertEqualObjects(expression.mgl_jsonExpressionObject, jsonExpression); XCTAssertEqualObjects([NSExpression expressionWithMGLJSONObject:jsonExpression], expression); } + { + NSExpression *expression = [NSExpression expressionForFunction:@"mgl_log2:" arguments:@[MGLConstantExpression(@1024)]]; + NSArray *jsonExpression = @[@"log2", @1024]; + XCTAssertEqualObjects(expression.mgl_jsonExpressionObject, jsonExpression); + XCTAssertEqualObjects([expression expressionValueWithObject:nil context:nil], @10); + XCTAssertEqualObjects([NSExpression expressionWithMGLJSONObject:jsonExpression], expression); + } { NSExpression *expression = [NSExpression expressionForFunction:@"raise:toPower:" arguments:arguments]; NSArray *jsonExpression = @[@"^", @1, @1]; -- cgit v1.2.1