aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar Karen Sargsyan <karsar@ibms.sinica.edu.tw>2016-05-23 17:40:19 +0800
committerGravatar Karen Sargsyan <karsar@ibms.sinica.edu.tw>2016-05-23 17:40:19 +0800
commitae4778d7a3f4dacde39232b503bd134ce71444ee (patch)
tree7c7b838d73689bd6180ba532accde984c7e2d420
parent87a6ab4f9ac7b2b2c0438a724bfe971ec9231714 (diff)
abs and floor added
-rw-r--r--include/urweb/urweb_cpp.h2
-rw-r--r--lib/js/urweb.js8
-rw-r--r--lib/ur/basis.urs2
-rw-r--r--src/c/urweb.c8
-rw-r--r--src/settings.sml2
-rw-r--r--tests/math.ur8
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 <xml><body>
{[(acos 0.1)]}
<button value="atan of 0.1!" onclick={fn _ => alert (show (atan 0.1))}/>
{[(atan 0.1)]}
- <button value="atan2 of 0.1 and -0.2!" onclick={fn _ => alert (show (atan2 0.1 -0.2))}/>
- {[(atan2 0.1 -0.2)]}
+ <button value="atan2 of 0.1 and -0.2!" onclick={fn _ => alert (show (atan2 0.1 (-0.2)))}/>
+ {[(atan2 0.1 (-0.2))]}
+ <button value="floor of 34.5!" onclick={fn _ => alert (show (floor 34.5))}/>
+ {[(floor 34.5)]}
+ <button value="abs of -10.0!" onclick={fn _ => alert (show (abs (-10.0)))}/>
+ {[(abs (-10.0))]}
</body></xml>