From ae4778d7a3f4dacde39232b503bd134ce71444ee Mon Sep 17 00:00:00 2001 From: Karen Sargsyan Date: Mon, 23 May 2016 17:40:19 +0800 Subject: abs and floor added --- include/urweb/urweb_cpp.h | 2 ++ lib/js/urweb.js | 8 ++++++++ lib/ur/basis.urs | 2 ++ src/c/urweb.c | 8 ++++++++ src/settings.sml | 2 ++ tests/math.ur | 8 ++++++-- 6 files changed, 28 insertions(+), 2 deletions(-) diff --git a/include/urweb/urweb_cpp.h b/include/urweb/urweb_cpp.h index 588b363a..48cfa784 100644 --- a/include/urweb/urweb_cpp.h +++ b/include/urweb/urweb_cpp.h @@ -387,6 +387,7 @@ uw_Basis_float uw_Basis_floatFromInt(struct uw_context *, uw_Basis_int); uw_Basis_int uw_Basis_ceil(struct uw_context *, uw_Basis_float); uw_Basis_int uw_Basis_trunc(struct uw_context *, uw_Basis_float); uw_Basis_int uw_Basis_round(struct uw_context *, uw_Basis_float); +uw_Basis_int uw_Basis_floor(struct uw_context *, uw_Basis_float); uw_Basis_float uw_Basis_pow(struct uw_context *, uw_Basis_float, uw_Basis_float); uw_Basis_float uw_Basis_sqrt(struct uw_context *, uw_Basis_float); @@ -398,6 +399,7 @@ uw_Basis_float uw_Basis_asin(struct uw_context *, uw_Basis_float); uw_Basis_float uw_Basis_acos(struct uw_context *, uw_Basis_float); uw_Basis_float uw_Basis_atan(struct uw_context *, uw_Basis_float); uw_Basis_float uw_Basis_atan2(struct uw_context *, uw_Basis_float, uw_Basis_float); +uw_Basis_float uw_Basis_abs(struct uw_context *, uw_Basis_float); uw_Basis_string uw_Basis_atom(struct uw_context *, uw_Basis_string); uw_Basis_string uw_Basis_css_url(struct uw_context *, uw_Basis_string); diff --git a/lib/js/urweb.js b/lib/js/urweb.js index 55925df5..96a12637 100644 --- a/lib/js/urweb.js +++ b/lib/js/urweb.js @@ -151,6 +151,14 @@ function atan2(n, m){ return Math.atan2(n, m); } +function floor(n){ + return Math.floor(n); +} + +function abs(n){ + return Math.abs(n); +} + // Time, represented as counts of microseconds since the epoch var time_format = "%c"; diff --git a/lib/ur/basis.urs b/lib/ur/basis.urs index c1ee28b3..1163daed 100644 --- a/lib/ur/basis.urs +++ b/lib/ur/basis.urs @@ -152,6 +152,7 @@ val float : int -> float val ceil : float -> int val trunc : float -> int val round : float -> int +val floor : float -> int (** * Basic Math *) @@ -164,6 +165,7 @@ val asin : float -> float val acos : float -> float val atan : float -> float val atan2 : float -> float -> float +val abs: float -> float (** * Time *) diff --git a/src/c/urweb.c b/src/c/urweb.c index c6f6220c..6eb3c21c 100644 --- a/src/c/urweb.c +++ b/src/c/urweb.c @@ -4517,6 +4517,10 @@ uw_Basis_int uw_Basis_round(uw_context ctx, uw_Basis_float n) { return round(n); } +uw_Basis_int uw_Basis_floor(uw_context ctx, uw_Basis_float n) { + return floor(n); +} + uw_Basis_float uw_Basis_pow(uw_context ctx, uw_Basis_float n, uw_Basis_float m) { return pow(n,m); } @@ -4557,6 +4561,10 @@ uw_Basis_float uw_Basis_atan2(uw_context ctx, uw_Basis_float n, uw_Basis_float m return atan2(n, m); } +uw_Basis_float uw_Basis_abs(uw_context ctx, uw_Basis_float n) { + return fabs(n); +} + uw_Basis_string uw_Basis_atom(uw_context ctx, uw_Basis_string s) { char *p; diff --git a/src/settings.sml b/src/settings.sml index 4b326da8..b72789df 100644 --- a/src/settings.sml +++ b/src/settings.sml @@ -335,6 +335,7 @@ val jsFuncsBase = basisM [("alert", "alert"), ("ceil", "ceil"), ("trunc", "trunc"), ("round", "round"), + ("floor", "floor"), ("pow", "pow"), ("sqrt", "sqrt"), @@ -346,6 +347,7 @@ val jsFuncsBase = basisM [("alert", "alert"), ("acos", "acos"), ("atan", "atan"), ("atan2", "atan2"), + ("abs", "abs"), ("now", "now"), ("timeToString", "showTime"), diff --git a/tests/math.ur b/tests/math.ur index 5f8843de..964b73e6 100644 --- a/tests/math.ur +++ b/tests/math.ur @@ -17,6 +17,10 @@ fun main () = return {[(acos 0.1)]}