summaryrefslogtreecommitdiff
path: root/ipl/mprogs/cmpsum.icn
diff options
context:
space:
mode:
Diffstat (limited to 'ipl/mprogs/cmpsum.icn')
-rw-r--r--ipl/mprogs/cmpsum.icn106
1 files changed, 106 insertions, 0 deletions
diff --git a/ipl/mprogs/cmpsum.icn b/ipl/mprogs/cmpsum.icn
new file mode 100644
index 0000000..79fdf8f
--- /dev/null
+++ b/ipl/mprogs/cmpsum.icn
@@ -0,0 +1,106 @@
+############################################################################
+#
+# File: cmpsum.icn
+#
+# Subject: Program to tabulate comparisons
+#
+# Author: Ralph E. Griswold
+#
+# Date: September 27, 1994
+#
+############################################################################
+#
+# This file is in the public domain.
+#
+############################################################################
+#
+# This tool tabulates comparisons. It is called as
+#
+# cmpsum prog
+#
+# where prog is a program compiled under MT Icon whose events are to
+# be tabulated.
+#
+# The options supported are:
+#
+# -o s write output to file s; default &output.
+#
+# -t record time spent in monitoring.
+#
+############################################################################
+#
+# Requires: MT Icon and event monitoring.
+#
+############################################################################
+#
+# Links: evinit, options, procname
+#
+############################################################################
+#
+# Includes: evdefs.icn
+#
+############################################################################
+
+link evinit
+link options
+link procname
+
+$include "evdefs.icn"
+
+procedure main(args)
+ local opts, itime, output, succtbl, failtbl, cmask, rmask, cmplist, op
+ local greater, greatereq, noteql, eql, less, lesseq, valeql, valnoteql
+ local strgreater, strgreatereq, strnoteql, streql, strless, strlesseq
+
+ opts := options(args, "o:t")
+
+ output := open(\opts["o"], "w") | &output
+
+ if \opts["t"] then itime := &time
+
+ EvInit(args) | stop("*** cannot load program") # initialize interface
+
+ succtbl := table(0)
+ failtbl := table(0)
+
+ cmask := E_Ocall
+ rmask := E_Oret ++ E_Ofail
+
+ eql := proc("=", 2)
+ less := proc("<", 2)
+ lesseq := proc("<=", 2)
+ greater := proc(">", 2)
+ greatereq := proc(">=", 2)
+ noteql := proc("~=", 2)
+ streql := proc("==", 2)
+ strless := proc("<<", 2)
+ strlesseq := proc("<<=", 2)
+ strgreater := proc(">>", 2)
+ strgreatereq := proc(">>=", 2)
+ strnoteql := proc("~==", 2)
+ valeql := proc("===", 2)
+ valnoteql := proc("~===", 2)
+
+ while EvGet(cmask) do {
+ if (op := &eventvalue) === (
+ eql | less | lesseq | greater | greatereq | noteql |
+ streql | strless | strlesseq | strgreater | strgreatereq | strnoteql |
+ valeql | valnoteql
+ ) then {
+ EvGet(rmask)
+ if &eventcode === E_Oret then succtbl[op] +:= 1
+ else failtbl[op] +:= 1
+ }
+ }
+
+ write(output, "\nSuccessful comparisons:\n")
+ cmplist := sort(succtbl, 3)
+ while write(output, left(procname(get(cmplist)), 6), right(get(cmplist), 7))
+
+ write(output, "\nFailed comparisons:\n")
+ cmplist := sort(failtbl, 3)
+ while write(output, left(procname(get(cmplist)), 6), right(get(cmplist), 7))
+
+ write(output, "\nelapsed time: ", &time - \itime, "ms")
+
+end