summaryrefslogtreecommitdiff
path: root/tests/div.ur
diff options
context:
space:
mode:
authorGravatar Adam Chlipala <adam@chlipala.net>2011-12-03 09:44:07 -0500
committerGravatar Adam Chlipala <adam@chlipala.net>2011-12-03 09:44:07 -0500
commit7136358c17f8193173e8a0a9469821039212d879 (patch)
tree55e7ce9758b2233896d59392e6b86614abab533a /tests/div.ur
parentd35896d2f29d23c3cd4c180f9249e44ebf7ed208 (diff)
Catching integer divisions by zero
Diffstat (limited to 'tests/div.ur')
-rw-r--r--tests/div.ur43
1 files changed, 43 insertions, 0 deletions
diff --git a/tests/div.ur b/tests/div.ur
new file mode 100644
index 00000000..69a09275
--- /dev/null
+++ b/tests/div.ur
@@ -0,0 +1,43 @@
+functor Make(M : sig
+ type t
+ val read_t : read t
+ val show_t : show t
+ val num_t : num t
+ end) = struct
+ fun calculate (n1, n2) = return <xml><body>
+ {[readError n1 / readError n2 : M.t]}<br/>
+ {[readError n1 % readError n2 : M.t]}<br/>
+ </body></xml>
+
+ fun main () =
+ s1 <- source "";
+ s2 <- source "";
+ s3 <- source "";
+ s4 <- source "";
+ return <xml><body>
+ <h1>Client-side</h1>
+
+ <ctextbox source={s1}/> / <ctextbox source={s2}/>
+ <button value="=" onclick={n1 <- get s1;
+ n2 <- get s2;
+ set s3 (show (readError n1 / readError n2 : M.t));
+ set s4 (show (readError n1 % readError n2 : M.t))}/>
+ <dyn signal={n <- signal s3; return (txt n)}/>,
+ <dyn signal={n <- signal s4; return (txt n)}/>
+
+ <h1>Server-side</h1>
+
+ <form>
+ <textbox{#1}/> / <textbox{#2}/>
+ <submit value="=" action={calculate}/>
+ </form>
+ </body></xml>
+end
+
+structure Int = Make(struct type t = int end)
+structure Float = Make(struct type t = float end)
+
+fun main () : transaction page = return <xml><body>
+ <li><a link={Int.main ()}>Int</a></li>
+ <li><a link={Float.main ()}>Float</a></li>
+</body></xml>