]> granicus.if.org Git - jq/commitdiff
Add sqrt operator
authorMichael Daines <michael@mdaines.com>
Thu, 12 Sep 2013 00:22:56 +0000 (20:22 -0400)
committerMichael Daines <michael@mdaines.com>
Thu, 12 Sep 2013 00:24:41 +0000 (20:24 -0400)
builtin.c
docs/content/3.manual/manual.yml
tests/all.test

index 0bdb9356fa54c612e12284344fb9aedcdc61173b..a19855c08b6f2b883a65985bb45da24948b9614b 100644 (file)
--- a/builtin.c
+++ b/builtin.c
@@ -76,6 +76,15 @@ static jv f_floor(jv input) {
   return ret;
 }
 
+static jv f_sqrt(jv input) {
+  if (jv_get_kind(input) != JV_KIND_NUMBER) {
+    return type_error(input, "has no square root");
+  }
+  jv ret = jv_number(sqrt(jv_number_value(input)));
+  jv_free(input);
+  return ret;
+}
+
 static jv f_negate(jv input) {
   if (jv_get_kind(input) != JV_KIND_NUMBER) {
     return type_error(input, "cannot be negated");
@@ -491,6 +500,7 @@ static jv f_error(jv input, jv msg) {
 
 static const struct cfunction function_list[] = {
   {(cfunction_ptr)f_floor, "_floor", 1},
+  {(cfunction_ptr)f_sqrt, "_sqrt", 1},
   {(cfunction_ptr)f_plus, "_plus", 3},
   {(cfunction_ptr)f_negate, "_negate", 1},
   {(cfunction_ptr)f_minus, "_minus", 3},
@@ -576,6 +586,7 @@ static const char* const jq_builtins[] = {
   "def max_by(f): _max_by_impl(map([f]));",
   "def min_by(f): _min_by_impl(map([f]));",
   "def floor: _floor;",
+  "def sqrt: _sqrt;",
   "def add: reduce .[] as $x (null; . + $x);",
   "def del(f): delpaths([path(f)]);",
   "def _assign(paths; value): value as $v | reduce path(paths) as $p (.; setpath($p; $v));",
index 8f91e3811940683e5e2c7afe82b092a623b0f2ee..11dbad84023cb5ee1ecb20d4680c02edd787c791 100644 (file)
@@ -633,6 +633,16 @@ sections:
             input: '3.14159'
             output: ['3']
             
+      - title: `sqrt`
+        body: |
+
+          The `sqrt` function returns the square root of its numeric input.
+
+        examples:
+          - program: 'sqrt'
+            input: '9'
+            output: ['3']
+            
       - title: `tonumber`
         body: |
 
index af6f8a1c7abdcea1a2c096fe3a4599774dc3e3ce..7a46edb74222b5aba2adb85d89d4062f630a9ef7 100644 (file)
@@ -366,6 +366,10 @@ null
 [-1.1,1.1,1.9]
 [-2, 1, 1]
 
+[.[]|sqrt]
+[4,9]
+[2,3]
+
 def f(x): x | x; f([.], . + [42])
 [1,2,3]
 [[[1,2,3]]]