Commits

jhwoodyatt  committed 6b0c3dd

Moving all the networking extensions into obsolete status. These functions
are now delivered in the OCaml NAE "Network Extensions" (Nx) library, sold
separately. The source code for the old functions is still delivered here,
as well, but not guaranteed to be maintained. They will be removed from
the distribution at the Cf-1.0 release.

  • Participants
  • Parent commits fe23cdc

Comments (0)

Files changed (3)

-cf_common_p.o: cf_common_p.c cf_common_p.h \
-  /usr/local/lib/ocaml/caml/alloc.h \
-  /usr/local/lib/ocaml/caml/compatibility.h \
-  /usr/local/lib/ocaml/caml/misc.h /usr/local/lib/ocaml/caml/config.h \
-  /usr/local/lib/ocaml/caml/mlvalues.h \
-  /usr/local/lib/ocaml/caml/callback.h /usr/local/lib/ocaml/caml/custom.h \
-  /usr/local/lib/ocaml/caml/fail.h /usr/local/lib/ocaml/caml/intext.h \
-  /usr/local/lib/ocaml/caml/memory.h /usr/local/lib/ocaml/caml/misc.h \
-  /usr/local/lib/ocaml/caml/mlvalues.h
 cf_tai64_p.o: cf_tai64_p.c cf_tai64_p.h cf_common_p.h \
   /usr/local/lib/ocaml/caml/alloc.h \
   /usr/local/lib/ocaml/caml/compatibility.h \
   /usr/local/lib/ocaml/caml/fail.h /usr/local/lib/ocaml/caml/intext.h \
   /usr/local/lib/ocaml/caml/memory.h /usr/local/lib/ocaml/caml/misc.h \
   /usr/local/lib/ocaml/caml/mlvalues.h
-cf_socket_p.o: cf_socket_p.c cf_socket_p.h cf_common_p.h \
-  /usr/local/lib/ocaml/caml/alloc.h \
-  /usr/local/lib/ocaml/caml/compatibility.h \
-  /usr/local/lib/ocaml/caml/misc.h /usr/local/lib/ocaml/caml/config.h \
-  /usr/local/lib/ocaml/caml/mlvalues.h \
-  /usr/local/lib/ocaml/caml/callback.h /usr/local/lib/ocaml/caml/custom.h \
-  /usr/local/lib/ocaml/caml/fail.h /usr/local/lib/ocaml/caml/intext.h \
-  /usr/local/lib/ocaml/caml/memory.h /usr/local/lib/ocaml/caml/misc.h \
-  /usr/local/lib/ocaml/caml/mlvalues.h
-cf_netif_p.o: cf_netif_p.c cf_netif_p.h cf_common_p.h \
-  /usr/local/lib/ocaml/caml/alloc.h \
-  /usr/local/lib/ocaml/caml/compatibility.h \
-  /usr/local/lib/ocaml/caml/misc.h /usr/local/lib/ocaml/caml/config.h \
-  /usr/local/lib/ocaml/caml/mlvalues.h \
-  /usr/local/lib/ocaml/caml/callback.h /usr/local/lib/ocaml/caml/custom.h \
-  /usr/local/lib/ocaml/caml/fail.h /usr/local/lib/ocaml/caml/intext.h \
-  /usr/local/lib/ocaml/caml/memory.h /usr/local/lib/ocaml/caml/misc.h \
-  /usr/local/lib/ocaml/caml/mlvalues.h
-cf_nameinfo_p.o: cf_nameinfo_p.c cf_nameinfo_p.h cf_socket_p.h \
-  cf_common_p.h /usr/local/lib/ocaml/caml/alloc.h \
-  /usr/local/lib/ocaml/caml/compatibility.h \
-  /usr/local/lib/ocaml/caml/misc.h /usr/local/lib/ocaml/caml/config.h \
-  /usr/local/lib/ocaml/caml/mlvalues.h \
-  /usr/local/lib/ocaml/caml/callback.h /usr/local/lib/ocaml/caml/custom.h \
-  /usr/local/lib/ocaml/caml/fail.h /usr/local/lib/ocaml/caml/intext.h \
-  /usr/local/lib/ocaml/caml/memory.h /usr/local/lib/ocaml/caml/misc.h \
-  /usr/local/lib/ocaml/caml/mlvalues.h
-cf_sock_dgram_p.o: cf_sock_dgram_p.c cf_sock_dgram_p.h cf_socket_p.h \
-  cf_common_p.h /usr/local/lib/ocaml/caml/alloc.h \
-  /usr/local/lib/ocaml/caml/compatibility.h \
-  /usr/local/lib/ocaml/caml/misc.h /usr/local/lib/ocaml/caml/config.h \
-  /usr/local/lib/ocaml/caml/mlvalues.h \
-  /usr/local/lib/ocaml/caml/callback.h /usr/local/lib/ocaml/caml/custom.h \
-  /usr/local/lib/ocaml/caml/fail.h /usr/local/lib/ocaml/caml/intext.h \
-  /usr/local/lib/ocaml/caml/memory.h /usr/local/lib/ocaml/caml/misc.h \
-  /usr/local/lib/ocaml/caml/mlvalues.h
-cf_sock_stream_p.o: cf_sock_stream_p.c cf_sock_stream_p.h cf_socket_p.h \
-  cf_common_p.h /usr/local/lib/ocaml/caml/alloc.h \
-  /usr/local/lib/ocaml/caml/compatibility.h \
-  /usr/local/lib/ocaml/caml/misc.h /usr/local/lib/ocaml/caml/config.h \
-  /usr/local/lib/ocaml/caml/mlvalues.h \
-  /usr/local/lib/ocaml/caml/callback.h /usr/local/lib/ocaml/caml/custom.h \
-  /usr/local/lib/ocaml/caml/fail.h /usr/local/lib/ocaml/caml/intext.h \
-  /usr/local/lib/ocaml/caml/memory.h /usr/local/lib/ocaml/caml/misc.h \
-  /usr/local/lib/ocaml/caml/mlvalues.h
-cf_ip_common_p.o: cf_ip_common_p.c cf_ip_common_p.h cf_ip4_addr_p.h \
-  cf_common_p.h /usr/local/lib/ocaml/caml/alloc.h \
-  /usr/local/lib/ocaml/caml/compatibility.h \
-  /usr/local/lib/ocaml/caml/misc.h /usr/local/lib/ocaml/caml/config.h \
-  /usr/local/lib/ocaml/caml/mlvalues.h \
-  /usr/local/lib/ocaml/caml/callback.h /usr/local/lib/ocaml/caml/custom.h \
-  /usr/local/lib/ocaml/caml/fail.h /usr/local/lib/ocaml/caml/intext.h \
-  /usr/local/lib/ocaml/caml/memory.h /usr/local/lib/ocaml/caml/misc.h \
-  /usr/local/lib/ocaml/caml/mlvalues.h cf_ip6_addr_p.h cf_socket_p.h
-cf_ip4_addr_p.o: cf_ip4_addr_p.c cf_ip4_addr_p.h cf_common_p.h \
-  /usr/local/lib/ocaml/caml/alloc.h \
-  /usr/local/lib/ocaml/caml/compatibility.h \
-  /usr/local/lib/ocaml/caml/misc.h /usr/local/lib/ocaml/caml/config.h \
-  /usr/local/lib/ocaml/caml/mlvalues.h \
-  /usr/local/lib/ocaml/caml/callback.h /usr/local/lib/ocaml/caml/custom.h \
-  /usr/local/lib/ocaml/caml/fail.h /usr/local/lib/ocaml/caml/intext.h \
-  /usr/local/lib/ocaml/caml/memory.h /usr/local/lib/ocaml/caml/misc.h \
-  /usr/local/lib/ocaml/caml/mlvalues.h
-cf_ip6_addr_p.o: cf_ip6_addr_p.c cf_ip6_addr_p.h cf_common_p.h \
-  /usr/local/lib/ocaml/caml/alloc.h \
-  /usr/local/lib/ocaml/caml/compatibility.h \
-  /usr/local/lib/ocaml/caml/misc.h /usr/local/lib/ocaml/caml/config.h \
-  /usr/local/lib/ocaml/caml/mlvalues.h \
-  /usr/local/lib/ocaml/caml/callback.h /usr/local/lib/ocaml/caml/custom.h \
-  /usr/local/lib/ocaml/caml/fail.h /usr/local/lib/ocaml/caml/intext.h \
-  /usr/local/lib/ocaml/caml/memory.h /usr/local/lib/ocaml/caml/misc.h \
-  /usr/local/lib/ocaml/caml/mlvalues.h cf_ip4_addr_p.h
-cf_ip4_proto_p.o: cf_ip4_proto_p.c cf_ip4_proto_p.h cf_ip_common_p.h \
-  cf_ip4_addr_p.h cf_common_p.h /usr/local/lib/ocaml/caml/alloc.h \
-  /usr/local/lib/ocaml/caml/compatibility.h \
-  /usr/local/lib/ocaml/caml/misc.h /usr/local/lib/ocaml/caml/config.h \
-  /usr/local/lib/ocaml/caml/mlvalues.h \
-  /usr/local/lib/ocaml/caml/callback.h /usr/local/lib/ocaml/caml/custom.h \
-  /usr/local/lib/ocaml/caml/fail.h /usr/local/lib/ocaml/caml/intext.h \
-  /usr/local/lib/ocaml/caml/memory.h /usr/local/lib/ocaml/caml/misc.h \
-  /usr/local/lib/ocaml/caml/mlvalues.h cf_ip6_addr_p.h cf_socket_p.h
-cf_ip6_proto_p.o: cf_ip6_proto_p.c cf_ip6_proto_p.h cf_ip_common_p.h \
-  cf_ip4_addr_p.h cf_common_p.h /usr/local/lib/ocaml/caml/alloc.h \
-  /usr/local/lib/ocaml/caml/compatibility.h \
-  /usr/local/lib/ocaml/caml/misc.h /usr/local/lib/ocaml/caml/config.h \
-  /usr/local/lib/ocaml/caml/mlvalues.h \
-  /usr/local/lib/ocaml/caml/callback.h /usr/local/lib/ocaml/caml/custom.h \
-  /usr/local/lib/ocaml/caml/fail.h /usr/local/lib/ocaml/caml/intext.h \
-  /usr/local/lib/ocaml/caml/memory.h /usr/local/lib/ocaml/caml/misc.h \
-  /usr/local/lib/ocaml/caml/mlvalues.h cf_ip6_addr_p.h cf_socket_p.h
 cf_scmonad.cmi: cf_cmonad.cmi 
 cf_tai64n.cmi: cf_tai64.cmi 
 cf_stdtime.cmi: cf_tai64.cmi 
 cf_regex.cmi: cf_seq.cmi cf_parser.cmi cf_flow.cmi cf_dfa.cmi 
 cf_lex.cmi: cf_seq.cmi cf_regex.cmi cf_parser.cmi 
 cf_scan_parser.cmi: cf_seq.cmi cf_parser.cmi 
-cf_nameinfo.cmi: cf_socket.cmi 
-cf_sock_common.cmi: cf_socket.cmi 
-cf_sock_dgram.cmi: cf_socket.cmi cf_sock_common.cmi 
-cf_sock_stream.cmi: cf_socket.cmi cf_sock_common.cmi 
-cf_ip_common.cmi: cf_socket.cmi 
-cf_ip4_addr.cmi: cf_seq.cmi 
-cf_ip6_addr.cmi: cf_ip4_addr.cmi 
-cf_ip4_proto.cmi: cf_socket.cmi cf_ip4_addr.cmi 
-cf_ip6_proto.cmi: cf_socket.cmi cf_ip6_addr.cmi cf_ip4_addr.cmi 
-cf_tcp4_socket.cmi: cf_sock_stream.cmi cf_ip4_proto.cmi 
-cf_tcp6_socket.cmi: cf_sock_stream.cmi cf_ip6_proto.cmi 
-cf_udp4_socket.cmi: cf_sock_dgram.cmi cf_ip4_proto.cmi 
-cf_udp6_socket.cmi: cf_sock_dgram.cmi cf_ip6_proto.cmi 
-cf_poll.cmi: cf_tai64n.cmi 
-cf_uri.cmi: cf_message.cmi cf_ip4_addr.cmi 
 cf_ordered.cmo: cf_ordered.cmi 
 cf_ordered.cmx: cf_ordered.cmi 
 cf_either.cmo: cf_either.cmi 
 cf_lex.cmx: cf_seq.cmx cf_regex.cmx cf_parser.cmx cf_lex.cmi 
 cf_scan_parser.cmo: cf_seq.cmi cf_parser.cmi cf_scan_parser.cmi 
 cf_scan_parser.cmx: cf_seq.cmx cf_parser.cmx cf_scan_parser.cmi 
-cf_socket.cmo: cf_socket.cmi 
-cf_socket.cmx: cf_socket.cmi 
-cf_netif.cmo: cf_netif.cmi 
-cf_netif.cmx: cf_netif.cmi 
-cf_nameinfo.cmo: cf_socket.cmi cf_nameinfo.cmi 
-cf_nameinfo.cmx: cf_socket.cmx cf_nameinfo.cmi 
-cf_sock_common.cmo: cf_socket.cmi cf_sock_common.cmi 
-cf_sock_common.cmx: cf_socket.cmx cf_sock_common.cmi 
-cf_sock_dgram.cmo: cf_socket.cmi cf_sock_common.cmi cf_sock_dgram.cmi 
-cf_sock_dgram.cmx: cf_socket.cmx cf_sock_common.cmx cf_sock_dgram.cmi 
-cf_sock_stream.cmo: cf_socket.cmi cf_sock_common.cmi cf_sock_stream.cmi 
-cf_sock_stream.cmx: cf_socket.cmx cf_sock_common.cmx cf_sock_stream.cmi 
-cf_ip_common.cmo: cf_socket.cmi cf_ip_common.cmi 
-cf_ip_common.cmx: cf_socket.cmx cf_ip_common.cmi 
-cf_ip4_addr.cmo: cf_seq.cmi cf_ip4_addr.cmi 
-cf_ip4_addr.cmx: cf_seq.cmx cf_ip4_addr.cmi 
-cf_ip6_addr.cmo: cf_ip4_addr.cmi cf_ip6_addr.cmi 
-cf_ip6_addr.cmx: cf_ip4_addr.cmx cf_ip6_addr.cmi 
-cf_ip4_proto.cmo: cf_socket.cmi cf_ip_common.cmi cf_ip4_addr.cmi \
-    cf_ip4_proto.cmi 
-cf_ip4_proto.cmx: cf_socket.cmx cf_ip_common.cmx cf_ip4_addr.cmx \
-    cf_ip4_proto.cmi 
-cf_ip6_proto.cmo: cf_socket.cmi cf_ip_common.cmi cf_ip6_addr.cmi \
-    cf_ip4_addr.cmi cf_ip6_proto.cmi 
-cf_ip6_proto.cmx: cf_socket.cmx cf_ip_common.cmx cf_ip6_addr.cmx \
-    cf_ip4_addr.cmx cf_ip6_proto.cmi 
-cf_tcp4_socket.cmo: cf_sock_stream.cmi cf_ip4_proto.cmi cf_tcp4_socket.cmi 
-cf_tcp4_socket.cmx: cf_sock_stream.cmx cf_ip4_proto.cmx cf_tcp4_socket.cmi 
-cf_tcp6_socket.cmo: cf_sock_stream.cmi cf_ip6_proto.cmi cf_tcp6_socket.cmi 
-cf_tcp6_socket.cmx: cf_sock_stream.cmx cf_ip6_proto.cmx cf_tcp6_socket.cmi 
-cf_udp4_socket.cmo: cf_sock_dgram.cmi cf_ip4_proto.cmi cf_udp4_socket.cmi 
-cf_udp4_socket.cmx: cf_sock_dgram.cmx cf_ip4_proto.cmx cf_udp4_socket.cmi 
-cf_udp6_socket.cmo: cf_sock_dgram.cmi cf_ip6_proto.cmi cf_udp6_socket.cmi 
-cf_udp6_socket.cmx: cf_sock_dgram.cmx cf_ip6_proto.cmx cf_udp6_socket.cmi 
-cf_poll.cmo: cf_tai64n.cmi cf_seq.cmi cf_sbheap.cmi cf_rbtree.cmi \
-    cf_ordered.cmi cf_deque.cmi cf_poll.cmi 
-cf_poll.cmx: cf_tai64n.cmx cf_seq.cmx cf_sbheap.cmx cf_rbtree.cmx \
-    cf_ordered.cmx cf_deque.cmx cf_poll.cmi 
-cf_uri.cmo: cf_seq.cmi cf_parser.cmi cf_message.cmi cf_lex.cmi \
-    cf_ip4_addr.cmi cf_flow.cmi cf_uri.cmi 
-cf_uri.cmx: cf_seq.cmx cf_parser.cmx cf_message.cmx cf_lex.cmx \
-    cf_ip4_addr.cmx cf_flow.cmx cf_uri.cmi 
-t/t_cf.cmo: cf_uri.cmi cf_tcp6_socket.cmi cf_tcp4_socket.cmi cf_tai64n.cmi \
-    cf_tai64.cmi cf_stdtime.cmi cf_state_gadget.cmi cf_seq.cmi cf_scmonad.cmi \
-    cf_scan_parser.cmi cf_regex.cmi cf_rbtree.cmi cf_poll.cmi cf_parser.cmi \
-    cf_ordered.cmi cf_message.cmi cf_lex.cmi cf_journal.cmi cf_ip_common.cmi \
-    cf_ip6_addr.cmi cf_ip4_addr.cmi cf_gregorian.cmi cf_gadget.cmi \
-    cf_flow.cmi cf_deque.cmi cf_cmonad.cmi 
-t/t_cf.cmx: cf_uri.cmx cf_tcp6_socket.cmx cf_tcp4_socket.cmx cf_tai64n.cmx \
-    cf_tai64.cmx cf_stdtime.cmx cf_state_gadget.cmx cf_seq.cmx cf_scmonad.cmx \
-    cf_scan_parser.cmx cf_regex.cmx cf_rbtree.cmx cf_poll.cmx cf_parser.cmx \
-    cf_ordered.cmx cf_message.cmx cf_lex.cmx cf_journal.cmx cf_ip_common.cmx \
-    cf_ip6_addr.cmx cf_ip4_addr.cmx cf_gregorian.cmx cf_gadget.cmx \
-    cf_flow.cmx cf_deque.cmx cf_cmonad.cmx 
+t/t_cf.cmo: cf_tai64.cmi cf_stdtime.cmi cf_state_gadget.cmi cf_seq.cmi \
+    cf_scmonad.cmi cf_scan_parser.cmi cf_regex.cmi cf_rbtree.cmi \
+    cf_parser.cmi cf_ordered.cmi cf_lex.cmi cf_journal.cmi cf_gregorian.cmi \
+    cf_gadget.cmi cf_flow.cmi cf_deque.cmi cf_cmonad.cmi 
+t/t_cf.cmx: cf_tai64.cmx cf_stdtime.cmx cf_state_gadget.cmx cf_seq.cmx \
+    cf_scmonad.cmx cf_scan_parser.cmx cf_regex.cmx cf_rbtree.cmx \
+    cf_parser.cmx cf_ordered.cmx cf_lex.cmx cf_journal.cmx cf_gregorian.cmx \
+    cf_gadget.cmx cf_flow.cmx cf_deque.cmx cf_cmonad.cmx 
 CF_YACC_ML_FILES = $(CF_YACC_MODULES:%=%.ml)
 CF_YACC_MLI_FILES = $(CF_YACC_MODULES:%=%.mli)
 
-CF_ADDR_MODULES = ip4 ip6
-CF_PROTO_MODULES = ip4 ip6
-
 CF_MODULES = \
     ordered either exnopt smonad cmonad scmonad tai64 tai64n gregorian \
 	stdtime journal seq deque flow heap pqueue map set sbheap rbtree \
 	gadget state_gadget machine unicode parser message dfa regex lex \
-	scan_parser socket netif nameinfo sock_common sock_dgram sock_stream \
-	ip_common $(CF_ADDR_MODULES:%=%_addr) $(CF_PROTO_MODULES:%=%_proto) \
-    tcp4_socket tcp6_socket udp4_socket udp6_socket poll uri
+	scan_parser
 
-CF_PRIMITIVES = \
-    common tai64 tai64n socket netif nameinfo sock_dgram sock_stream \
-	ip_common $(CF_ADDR_MODULES:%=%_addr) $(CF_PROTO_MODULES:%=%_proto)
+CF_PRIMITIVES = tai64 tai64n
+
+#CF_ADDR_MODULES = ip4 ip6
+#CF_PROTO_MODULES = ip4 ip6
+	
+#CF_MODULES += \
+#	socket netif nameinfo sock_common sock_dgram sock_stream \
+#	ip_common $(CF_ADDR_MODULES:%=%_addr) $(CF_PROTO_MODULES:%=%_proto) \
+#   tcp4_socket tcp6_socket udp4_socket udp6_socket poll uri
+
+#CF_PRIMITIVES += \
+#    common socket netif nameinfo sock_dgram sock_stream \
+#	ip_common $(CF_ADDR_MODULES:%=%_addr) $(CF_PROTO_MODULES:%=%_proto)
 
 CF_ML_FILES = $(CF_MODULES:%=cf_%.ml)
 CF_MLI_FILES = $(CF_MODULES:%=cf_%.mli)
 opt:: $(TEST_OPT_PROGRAMS)
 
 t.% : t/t_%.ml $(TEST_LIBS:%=%.cma)
-	$(OCAMLC) -o $@ $(CMO_OPT) $(DEBUG_OPT) $(TEST_LINKOPT) \
-        $(TEST_LIBS:%=%.cma) $<
+	$(OCAMLC) -o $@ $(CMO_OPT) $(TEST_LINKOPT) $(TEST_LIBS:%=%.cma) $<
 
 t-opt.% : t/t_%.ml $(TEST_LIBS:%=%.cmxa)
 	$(OCAMLOPT) -o $@ $(CMX_OPT) $(TEST_LINKOPT) $(TEST_LIBS:%=%.cmxa) $<

File cf/t/t_cf.ml

 end
 
 module T10 = struct
-    module V6 = Cf_ip6_addr
-    open Printf
-    
-    let v6_unicast_cases = [
-        "::DEAD:BEEF:D00D", V6.U_reserved;
-        "::1", V6.U_loopback;
-        "4000::1", V6.U_unassigned;
-        "::10.0.1.1", V6.U_v4compat;
-        "::FFFF:17.201.23.45", V6.U_v4mapped;
-        "2002::1", V6.U_global;
-        "FE80::203:93ff:feba:7eba", V6.U_link;
-        "FEC0::1", V6.U_site;
-        "::224.0.0.1", V6.U_reserved;
-    ]
-    
-    let v6_unicast_test () =
-        List.iter begin fun (addr, fmt) ->
-            match V6.pton addr with
-            | Some addr' ->
-                if fmt <> V6.unicast_format (V6.is_unicast addr') then
-                    failwith (sprintf "V6.unicast_format %s" addr)
-            | None ->
-                failwith (sprintf "unrecognized %s" addr)
-        end v6_unicast_cases
-    
-    let test () =
-        v6_unicast_test ()
-end
-
-module T11 = struct
-    let len = 10
-
-    let test () =
-        try
-            let bind =
-                (Cf_ip4_addr.loopback :> Cf_ip4_addr.opaque Cf_ip4_addr.t), 0
-            in
-            let listen = new Cf_tcp4_socket.listener bind in
-            listen#listen 1;
-            let bind = listen#getsockname in
-            let active = new Cf_tcp4_socket.initiator bind in
-            active#connect;
-            let a, _ = listen#accept in
-            let a = new Cf_tcp4_socket.endpoint a in
-            let b = new Cf_tcp4_socket.endpoint (active#socket) in
-            a#setsockopt Cf_ip_common.tcp_nodelay true;
-            b#setsockopt Cf_ip_common.tcp_nodelay true;
-            let laddr = a#getpeername and raddr = b#getsockname in
-            let lhost, lport = laddr in
-            let rhost, rport = raddr in
-            if lhost <> rhost then
-                failwith "T11 error: host a#getpeername <> b#getsockname";
-            if lport <> rport then
-                failwith "T11 error: port a#getpeername <> b#getsockname";
-            let laddr = a#getsockname and raddr = b#getpeername in
-            let lhost, lport = laddr in
-            let rhost, rport = raddr in
-            if lhost <> rhost then
-                failwith "T11 error: host a#getsockname <> b#getpeername";
-            if lport <> rport then
-                failwith "T11 error: port a#getsockname <> b#getpeername";
-            let tx = String.make len 'x' and rx = String.create len in
-            let n = a#send tx 0 len in
-            if n <> len then failwith "T11 error: tx incomplete!";
-            a#shutdown Unix.SHUTDOWN_SEND;
-            let n = b#recv rx 0 len in
-            if n <> len then failwith "T11 error: rx incomplete!";
-            if tx <> rx then failwith "T11 error: tx <> rx!";
-            a#close;
-            b#close;
-            listen#close
-        with
-        | Unix.Unix_error (e, fn, _) ->
-            failwith (Printf.sprintf "T11 error: %s in %s.\n"
-                (Unix.error_message e) fn)
-end
-
-module T12 = struct
-    let len = 10
-
-    let test () =
-        try
-            let bind =
-                (Cf_ip6_addr.loopback :> Cf_ip6_addr.opaque Cf_ip6_addr.t),
-                0, 0l
-            in
-            let listen = new Cf_tcp6_socket.listener bind in
-            listen#listen 1;
-            let bind = listen#getsockname in
-            let active = new Cf_tcp6_socket.initiator bind in
-            active#connect;
-            let a = new Cf_tcp6_socket.endpoint (active#socket) in
-            let b, _ = listen#accept in
-            let b = new Cf_tcp6_socket.endpoint b in
-            a#setsockopt Cf_ip_common.tcp_nodelay true;
-            b#setsockopt Cf_ip_common.tcp_nodelay true;
-            let laddr = a#getpeername and raddr = b#getsockname in
-            let lhost, lport, lscope = laddr in
-            let rhost, rport, rscope = raddr in
-            if lhost <> rhost then
-                failwith "T12 error: host a#getpeername <> b#getsockname";
-            if lport <> rport then
-                failwith "T12 error: port a#getpeername <> b#getsockname";
-            if lscope <> rscope then
-                failwith "T12 error: port a#getpeername <> b#getsockname";
-            let laddr = a#getsockname and raddr = b#getpeername in
-            let lhost, lport, lscope = laddr in
-            let rhost, rport, rscope = raddr in
-            if lhost <> rhost then
-                failwith "T12 error: host a#getsockname <> b#getpeername";
-            if lport <> rport then
-                failwith "T12 error: port a#getsockname <> b#getpeername";
-            if lscope <> rscope then
-                failwith "T12 error: port a#getsockname <> b#getpeername";
-            let tx = String.make len 'x' and rx = String.create len in
-            let n = a#send tx 0 len in
-            if n <> len then failwith "T12 error: tx incomplete!";
-            a#shutdown Unix.SHUTDOWN_SEND;
-            let n = b#recv rx 0 len in
-            if n <> len then failwith "T12 error: rx incomplete!";
-            if tx <> rx then failwith "T12 error: tx <> rx!";
-            a#close;
-            b#close;
-            listen#close
-        with
-        | Unix.Unix_error (e, fn, _) ->
-            failwith (Printf.sprintf "T12 error: %s in %s.\n"
-                (Unix.error_message e) fn)
-end
-
-module T13 = struct
-    open Cf_uri
-    
-    module L1 = struct
-        let test () = ()
-    end
-    
-    module L2 = struct
-    
-        (* http://a/b/c/d;p?q *)
-        let base = {
-            abs_scheme = "http";
-            abs_special = S_hier {
-                abs_hier_query = Some "q";
-                abs_hier_path = `Net {
-                    net_authority = A_server (Some {
-                        srv_user = None;
-                        srv_host = H_hostname "a";
-                        srv_port = None;
-                    });
-                    
-                    net_path = [
-                        { seg_name = "b"; seg_params = [] };
-                        { seg_name = "c"; seg_params = [] };
-                        { seg_name = "d"; seg_params = [ "p" ] };
-                    ];
-                };
-            };
-        }
-        
-        let basestr = Cf_message.contents (message_of_uri (A base))
-        
-        let resolve_list = [
-            "g:h"           , "g:h";
-            "g"             , "http://a/b/c/g";
-            "./g"           , "http://a/b/c/g";
-            "g/"            , "http://a/b/c/g/";
-            "/g"            , "http://a/g";
-            "//g"           , "http://g";
-            "?y"            , "http://a/b/c/?y";
-            "g?y"           , "http://a/b/c/g?y";
-            "#s"            , "http://a/b/c/d;p?q#s";
-            "g#s"           , "http://a/b/c/g#s";
-            "g?y#s"         , "http://a/b/c/g?y#s";
-            ";x"            , "http://a/b/c/;x";
-            "g;x"           , "http://a/b/c/g;x";
-            "g;x?y#s"       , "http://a/b/c/g;x?y#s";
-            "."             , "http://a/b/c/";
-            "./"            , "http://a/b/c/";
-            ".."            , "http://a/b/";
-            "../"           , "http://a/b/";
-            "../g"          , "http://a/b/g";
-            "../.."         , "http://a/";
-            "../../"        , "http://a/";
-            "../../g"       , "http://a/g";
-        ]
-        
-        let resolve (relstr, expectstr) =
-            let rel = Cf_message.create relstr in
-            let result = message_to_absolute_uri_reference ~base rel in
-            let resultstr =
-                Cf_message.contents (message_of_uri_reference result)
-            in
-            if resultstr <> expectstr then begin
-                let s = Printf.sprintf
-                    "reference URI resolution error \
-                    [rel=\"%s\" expect=\"%s\" result=\"%s\"\n"
-                    relstr expectstr resultstr
-                in
-                failwith s
-            end;
-            ignore (message_of_uri_reference result)
-        
-        let unresolved_list = [
-            "http://a", "../b";
-        ]
-        
-        let unresolved (basestr, relstr) =
-            let base = message_to_uri (Cf_message.create basestr) in
-            let rel = message_to_uri (Cf_message.create relstr) in
-            let base =
-                match base with
-                | A base -> base
-                | _ -> invalid_arg "base not absolute"
-            in
-            let rel =
-                match rel with
-                | R rel -> rel
-                | _ -> invalid_arg "rel not relative"
-            in
-            try
-                ignore (refer_to_base ~base ~rel);
-                failwith "expected to catch Rel_undefined."
-            with
-            | Rel_undefined ->
-                ()            
-        
-        let test () =
-            if basestr <> "http://a/b/c/d;p?q" then
-                failwith "base URI emit error";
-            List.iter resolve resolve_list;
-            List.iter unresolved unresolved_list
-    end
-
-    let test () =
-        L1.test ();
-        L2.test ();
-end
-
-module T14 = struct
 (*
 3fffe33e1b840309 365  Sun -1000000-12-31 23:59:59 +0000
 3fffe33e1b84030a 000  Mon -999999-01-01 00:00:00 +0000
     let test () = List.iter L1.y L1.x
 end
 
-module T15 = struct
+module T11 = struct
+    open Cf_scmonad.Op
+    
+    module String_set = Cf_rbtree.Set(String)
+    
+    (* val memoize: (string, string) Cf_flow.t *)
+    let memoize =
+        let rec loop () =
+            Cf_flow.readSC >>= fun s ->
+            Cf_scmonad.load >>= fun u ->
+            if String_set.member s u then
+                loop ()
+            else
+                let u = String_set.put s u in
+                Cf_scmonad.store u >>= fun () ->
+                Cf_flow.writeSC s >>= fun () ->
+                loop ()
+        in
+        Cf_flow.evalSC (loop ()) String_set.nil
+    
+    (* val uniq: string list -> string list *)
+    let uniq s =
+        let z = Cf_seq.of_list s in
+        let z = Cf_flow.commute memoize z in
+        Cf_seq.to_list z
+    
+    let test () =
+        let s1 = [ "Hello"; "World!"; "Hello"; "AGAIN!" ] in
+        let s2 = [ "Hello"; "World!"; "AGAIN!" ] in
+        let s2' = uniq s1 in
+        if s2 <> s2' then failwith "Error in uniq!"
+end
+
+module T12 = struct
+    open Cf_state_gadget
+    open Cf_cmonad.Op
+    
+    let gadget limit =
+        read >>= fun () ->
+        duplex >>= fun ((inRx, outTx), (outRx, inTx)) ->
+        let inRx = (inRx :> (unit, unit, unit) rx) in
+        let outTx = (outTx :> (unit, unit, unit) tx) in
+        let outRx = (outRx :> (unit, unit, unit) rx) in
+        let inTx = (inTx :> (unit, unit, unit) tx) in
+        inTx#put () >>= fun () ->
+        wrap inRx outTx Cf_flow.nop >>= fun () ->
+        let rec loop () =
+            guard begin
+                outRx#get begin fun () ->
+                    load >>= fun n ->
+                    if n < limit then begin
+                        (*
+                        if n mod 1000 = 0 then begin
+                            Printf.printf "n=%08u\n" n;
+                            flush stdout
+                        end;
+                        *)
+                        store (succ n) >>= fun () ->
+                        inTx#put () >>= loop
+                    end
+                    else
+                        Cf_cmonad.nil 
+                end
+            end
+        in
+        start (loop ()) 0
+    
+    let test () =
+        let limit = 10000 in
+        let gc = Gc.get () in
+        Gc.set { gc with Gc.stack_limit = 4 * 0x400 };
+        let w = eval (gadget limit) () in
+        match Lazy.force w with
+        | Cf_flow.Q f -> let _ = f () in Gc.set gc
+        | _ -> failwith "Cf_state_gadget not evaluated to Cf_flow.Q state."
+end
+
+module T13 = struct
+    module M = Cf_rbtree.Map (Cf_ordered.Int_order)
+
+    let test1a () =
+        let tree = M.of_list (List.map (fun a -> (a,())) [9;1;8;3;7;5;4]) in
+        let list = Cf_seq.to_list (Cf_seq.first (M.nearest_incr 6 tree)) in
+        match list with
+        | [ 7; 8; 9 ] -> ()
+        | _ ->
+            print_char '[';
+            List.iter (Printf.printf " %d;") list;
+            print_string " ]";
+            print_newline ();
+            failwith "Cf_rbtree.nearest_incr error [6]!"
+
+    let test1b () =
+        let tree = M.of_list (List.map (fun a -> (a,())) [9;1;8;3;7;5;4]) in
+        let list = Cf_seq.to_list (Cf_seq.first (M.nearest_incr 5 tree)) in
+        match list with
+        | [ 5; 7; 8; 9 ] -> ()
+        | _ ->
+            print_char '[';
+            List.iter (Printf.printf " %d;") list;
+            print_string " ]";
+            print_newline ();
+            failwith "Cf_rbtree.nearest_incr error [5]!"
+
+    let test2 n =
+        let tree = M.of_list (List.map (fun a -> (a,())) [9;1;8;3;7;5;4]) in
+        let list = Cf_seq.to_list (Cf_seq.first (M.nearest_decr n tree)) in
+        match list with
+        | [ 5; 4; 3; 1 ] -> ()
+        | _ ->
+            print_char '[';
+            List.iter (Printf.printf " %d;") list;
+            print_string " ]";
+            print_newline ();
+            jout#fail "Cf_rbtree.nearest_decr error [%d]!" n
+    
+    let test () =
+        test1a ();
+        test1b ();
+        test2 5;
+        test2 6
+end
+
+(*
+module T14 = struct
+    open Cf_gadget
+    open Cf_cmonad.Op
+    
+    let gadget limit =
+        read >>= fun () ->
+        duplex >>= fun ((inRx, outTx), (outRx, inTx)) ->
+        let inRx = (inRx :> (unit, unit, unit) rx) in
+        let outTx = (outTx :> (unit, unit, unit) tx) in
+        let outRx = (outRx :> (unit, unit, unit) rx) in
+        let inTx = (inTx :> (unit, unit, unit) tx) in
+        inTx#put () >>= fun () ->
+        wrap inRx outTx Cf_flow.nop >>= fun () ->
+        let rec loop () =
+            guard begin
+                outRx#get begin fun () ->
+                    load >>= fun n ->
+                    if n < limit then begin
+                        (*
+                        if n mod 1000 = 0 then begin
+                            Printf.printf "n=%08u\n" n;
+                            flush stdout
+                        end;
+                        *)
+                        store (succ n) >>= fun () ->
+                        inTx#put () >>= loop
+                    end
+                    else
+                        Cf_cmonad.nil 
+                end
+            end
+        in
+        start (loop ()) 0
+    
+    let test () =
+        let limit = 10000 in
+        let gc = Gc.get () in
+        Gc.set { gc with Gc.stack_limit = 4 * 0x400 };
+        let w = eval (gadget limit) () in
+        match Lazy.force w with
+        | Cf_flow.Q f -> let _ = f () in Gc.set gc
+        | _ -> failwith "Cf_state_gadget not evaluated to Cf_flow.Q state."
+end
+*)
+
+
+(*
+module Obsolete_1 = struct
+    module V6 = Cf_ip6_addr
+    open Printf
+    
+    let v6_unicast_cases = [
+        "::DEAD:BEEF:D00D", V6.U_reserved;
+        "::1", V6.U_loopback;
+        "4000::1", V6.U_unassigned;
+        "::10.0.1.1", V6.U_v4compat;
+        "::FFFF:17.201.23.45", V6.U_v4mapped;
+        "2002::1", V6.U_global;
+        "FE80::203:93ff:feba:7eba", V6.U_link;
+        "FEC0::1", V6.U_site;
+        "::224.0.0.1", V6.U_reserved;
+    ]
+    
+    let v6_unicast_test () =
+        List.iter begin fun (addr, fmt) ->
+            match V6.pton addr with
+            | Some addr' ->
+                if fmt <> V6.unicast_format (V6.is_unicast addr') then
+                    failwith (sprintf "V6.unicast_format %s" addr)
+            | None ->
+                failwith (sprintf "unrecognized %s" addr)
+        end v6_unicast_cases
+    
+    let test () =
+        v6_unicast_test ()
+end
+
+module Obsolete_2 = struct
+    let len = 10
+
+    let test () =
+        try
+            let bind =
+                (Cf_ip4_addr.loopback :> Cf_ip4_addr.opaque Cf_ip4_addr.t), 0
+            in
+            let listen = new Cf_tcp4_socket.listener bind in
+            listen#listen 1;
+            let bind = listen#getsockname in
+            let active = new Cf_tcp4_socket.initiator bind in
+            active#connect;
+            let a, _ = listen#accept in
+            let a = new Cf_tcp4_socket.endpoint a in
+            let b = new Cf_tcp4_socket.endpoint (active#socket) in
+            a#setsockopt Cf_ip_common.tcp_nodelay true;
+            b#setsockopt Cf_ip_common.tcp_nodelay true;
+            let laddr = a#getpeername and raddr = b#getsockname in
+            let lhost, lport = laddr in
+            let rhost, rport = raddr in
+            if lhost <> rhost then
+                failwith "O2 error: host a#getpeername <> b#getsockname";
+            if lport <> rport then
+                failwith "O2 error: port a#getpeername <> b#getsockname";
+            let laddr = a#getsockname and raddr = b#getpeername in
+            let lhost, lport = laddr in
+            let rhost, rport = raddr in
+            if lhost <> rhost then
+                failwith "O2 error: host a#getsockname <> b#getpeername";
+            if lport <> rport then
+                failwith "O2 error: port a#getsockname <> b#getpeername";
+            let tx = String.make len 'x' and rx = String.create len in
+            let n = a#send tx 0 len in
+            if n <> len then failwith "O2 error: tx incomplete!";
+            a#shutdown Unix.SHUTDOWN_SEND;
+            let n = b#recv rx 0 len in
+            if n <> len then failwith "O2 error: rx incomplete!";
+            if tx <> rx then failwith "O2 error: tx <> rx!";
+            a#close;
+            b#close;
+            listen#close
+        with
+        | Unix.Unix_error (e, fn, _) ->
+            failwith (Printf.sprintf "O2 error: %s in %s.\n"
+                (Unix.error_message e) fn)
+end
+
+module Obsolete_3 = struct
+    let len = 10
+
+    let test () =
+        try
+            let bind =
+                (Cf_ip6_addr.loopback :> Cf_ip6_addr.opaque Cf_ip6_addr.t),
+                0, 0l
+            in
+            let listen = new Cf_tcp6_socket.listener bind in
+            listen#listen 1;
+            let bind = listen#getsockname in
+            let active = new Cf_tcp6_socket.initiator bind in
+            active#connect;
+            let a = new Cf_tcp6_socket.endpoint (active#socket) in
+            let b, _ = listen#accept in
+            let b = new Cf_tcp6_socket.endpoint b in
+            a#setsockopt Cf_ip_common.tcp_nodelay true;
+            b#setsockopt Cf_ip_common.tcp_nodelay true;
+            let laddr = a#getpeername and raddr = b#getsockname in
+            let lhost, lport, lscope = laddr in
+            let rhost, rport, rscope = raddr in
+            if lhost <> rhost then
+                failwith "O3 error: host a#getpeername <> b#getsockname";
+            if lport <> rport then
+                failwith "O3 error: port a#getpeername <> b#getsockname";
+            if lscope <> rscope then
+                failwith "O3 error: port a#getpeername <> b#getsockname";
+            let laddr = a#getsockname and raddr = b#getpeername in
+            let lhost, lport, lscope = laddr in
+            let rhost, rport, rscope = raddr in
+            if lhost <> rhost then
+                failwith "O3 error: host a#getsockname <> b#getpeername";
+            if lport <> rport then
+                failwith "O3 error: port a#getsockname <> b#getpeername";
+            if lscope <> rscope then
+                failwith "O3 error: port a#getsockname <> b#getpeername";
+            let tx = String.make len 'x' and rx = String.create len in
+            let n = a#send tx 0 len in
+            if n <> len then failwith "O3 error: tx incomplete!";
+            a#shutdown Unix.SHUTDOWN_SEND;
+            let n = b#recv rx 0 len in
+            if n <> len then failwith "O3 error: rx incomplete!";
+            if tx <> rx then failwith "O3 error: tx <> rx!";
+            a#close;
+            b#close;
+            listen#close
+        with
+        | Unix.Unix_error (e, fn, _) ->
+            failwith (Printf.sprintf "O3 error: %s in %s.\n"
+                (Unix.error_message e) fn)
+end
+
+module Obsolete_4 = struct
+    open Cf_uri
+    
+    module L1 = struct
+        let test () = ()
+    end
+    
+    module L2 = struct
+    
+        (* http://a/b/c/d;p?q *)
+        let base = {
+            abs_scheme = "http";
+            abs_special = S_hier {
+                abs_hier_query = Some "q";
+                abs_hier_path = `Net {
+                    net_authority = A_server (Some {
+                        srv_user = None;
+                        srv_host = H_hostname "a";
+                        srv_port = None;
+                    });
+                    
+                    net_path = [
+                        { seg_name = "b"; seg_params = [] };
+                        { seg_name = "c"; seg_params = [] };
+                        { seg_name = "d"; seg_params = [ "p" ] };
+                    ];
+                };
+            };
+        }
+        
+        let basestr = Cf_message.contents (message_of_uri (A base))
+        
+        let resolve_list = [
+            "g:h"           , "g:h";
+            "g"             , "http://a/b/c/g";
+            "./g"           , "http://a/b/c/g";
+            "g/"            , "http://a/b/c/g/";
+            "/g"            , "http://a/g";
+            "//g"           , "http://g";
+            "?y"            , "http://a/b/c/?y";
+            "g?y"           , "http://a/b/c/g?y";
+            "#s"            , "http://a/b/c/d;p?q#s";
+            "g#s"           , "http://a/b/c/g#s";
+            "g?y#s"         , "http://a/b/c/g?y#s";
+            ";x"            , "http://a/b/c/;x";
+            "g;x"           , "http://a/b/c/g;x";
+            "g;x?y#s"       , "http://a/b/c/g;x?y#s";
+            "."             , "http://a/b/c/";
+            "./"            , "http://a/b/c/";
+            ".."            , "http://a/b/";
+            "../"           , "http://a/b/";
+            "../g"          , "http://a/b/g";
+            "../.."         , "http://a/";
+            "../../"        , "http://a/";
+            "../../g"       , "http://a/g";
+        ]
+        
+        let resolve (relstr, expectstr) =
+            let rel = Cf_message.create relstr in
+            let result = message_to_absolute_uri_reference ~base rel in
+            let resultstr =
+                Cf_message.contents (message_of_uri_reference result)
+            in
+            if resultstr <> expectstr then begin
+                let s = Printf.sprintf
+                    "reference URI resolution error \
+                    [rel=\"%s\" expect=\"%s\" result=\"%s\"\n"
+                    relstr expectstr resultstr
+                in
+                failwith s
+            end;
+            ignore (message_of_uri_reference result)
+        
+        let unresolved_list = [
+            "http://a", "../b";
+        ]
+        
+        let unresolved (basestr, relstr) =
+            let base = message_to_uri (Cf_message.create basestr) in
+            let rel = message_to_uri (Cf_message.create relstr) in
+            let base =
+                match base with
+                | A base -> base
+                | _ -> invalid_arg "base not absolute"
+            in
+            let rel =
+                match rel with
+                | R rel -> rel
+                | _ -> invalid_arg "rel not relative"
+            in
+            try
+                ignore (refer_to_base ~base ~rel);
+                failwith "expected to catch Rel_undefined."
+            with
+            | Rel_undefined ->
+                ()            
+        
+        let test () =
+            if basestr <> "http://a/b/c/d;p?q" then
+                failwith "base URI emit error";
+            List.iter resolve resolve_list;
+            List.iter unresolved unresolved_list
+    end
+
+    let test () =
+        L1.test ();
+        L2.test ();
+end
+
+module Obsolete_5 = struct
     open Cf_poll
     
     class clock n dt =
                 let tai, frac = Cf_tai64n.decompose epoch_ in
                 let utc = Cf_stdtime.utc_of_tai64 tai in
                 jout#info
-                    "T16.clock#service: %04u-%02u-%02u %02u:%02u:%02u.%06u "
+                    "O5.clock#service: %04u-%02u-%02u %02u:%02u:%02u.%06u "
                     utc.Cf_stdtime.year utc.Cf_stdtime.month utc.Cf_stdtime.day
                     utc.Cf_stdtime.hour utc.Cf_stdtime.minute
                     utc.Cf_stdtime.second frac;
         if !more <> Last then failwith "!Last";
         ignore (Unix.sigprocmask Unix.SIG_SETMASK save)
 end
-
-module T16 = struct
-    open Cf_scmonad.Op
-    
-    module String_set = Cf_rbtree.Set(String)
-    
-    (* val memoize: (string, string) Cf_flow.t *)
-    let memoize =
-        let rec loop () =
-            Cf_flow.readSC >>= fun s ->
-            Cf_scmonad.load >>= fun u ->
-            if String_set.member s u then
-                loop ()
-            else
-                let u = String_set.put s u in
-                Cf_scmonad.store u >>= fun () ->
-                Cf_flow.writeSC s >>= fun () ->
-                loop ()
-        in
-        Cf_flow.evalSC (loop ()) String_set.nil
-    
-    (* val uniq: string list -> string list *)
-    let uniq s =
-        let z = Cf_seq.of_list s in
-        let z = Cf_flow.commute memoize z in
-        Cf_seq.to_list z
-    
-    let test () =
-        let s1 = [ "Hello"; "World!"; "Hello"; "AGAIN!" ] in
-        let s2 = [ "Hello"; "World!"; "AGAIN!" ] in
-        let s2' = uniq s1 in
-        if s2 <> s2' then failwith "Error in uniq!"
-end
-
-module T17 = struct
-    open Cf_state_gadget
-    open Cf_cmonad.Op
-    
-    let gadget limit =
-        read >>= fun () ->
-        duplex >>= fun ((inRx, outTx), (outRx, inTx)) ->
-        let inRx = (inRx :> (unit, unit, unit) rx) in
-        let outTx = (outTx :> (unit, unit, unit) tx) in
-        let outRx = (outRx :> (unit, unit, unit) rx) in
-        let inTx = (inTx :> (unit, unit, unit) tx) in
-        inTx#put () >>= fun () ->
-        wrap inRx outTx Cf_flow.nop >>= fun () ->
-        let rec loop () =
-            guard begin
-                outRx#get begin fun () ->
-                    load >>= fun n ->
-                    if n < limit then begin
-                        (*
-                        if n mod 1000 = 0 then begin
-                            Printf.printf "n=%08u\n" n;
-                            flush stdout
-                        end;
-                        *)
-                        store (succ n) >>= fun () ->
-                        inTx#put () >>= loop
-                    end
-                    else
-                        Cf_cmonad.nil 
-                end
-            end
-        in
-        start (loop ()) 0
-    
-    let test () =
-        let limit = 10000 in
-        let gc = Gc.get () in
-        Gc.set { gc with Gc.stack_limit = 4 * 0x400 };
-        let w = eval (gadget limit) () in
-        match Lazy.force w with
-        | Cf_flow.Q f -> let _ = f () in Gc.set gc
-        | _ -> failwith "Cf_state_gadget not evaluated to Cf_flow.Q state."
-end
-
-module T18 = struct
-    module M = Cf_rbtree.Map (Cf_ordered.Int_order)
-
-    let test1a () =
-        let tree = M.of_list (List.map (fun a -> (a,())) [9;1;8;3;7;5;4]) in
-        let list = Cf_seq.to_list (Cf_seq.first (M.nearest_incr 6 tree)) in
-        match list with
-        | [ 7; 8; 9 ] -> ()
-        | _ ->
-            print_char '[';
-            List.iter (Printf.printf " %d;") list;
-            print_string " ]";
-            print_newline ();
-            failwith "Cf_rbtree.nearest_incr error [6]!"
-
-    let test1b () =
-        let tree = M.of_list (List.map (fun a -> (a,())) [9;1;8;3;7;5;4]) in
-        let list = Cf_seq.to_list (Cf_seq.first (M.nearest_incr 5 tree)) in
-        match list with
-        | [ 5; 7; 8; 9 ] -> ()
-        | _ ->
-            print_char '[';
-            List.iter (Printf.printf " %d;") list;
-            print_string " ]";
-            print_newline ();
-            failwith "Cf_rbtree.nearest_incr error [5]!"
-
-    let test2 n =
-        let tree = M.of_list (List.map (fun a -> (a,())) [9;1;8;3;7;5;4]) in
-        let list = Cf_seq.to_list (Cf_seq.first (M.nearest_decr n tree)) in
-        match list with
-        | [ 5; 4; 3; 1 ] -> ()
-        | _ ->
-            print_char '[';
-            List.iter (Printf.printf " %d;") list;
-            print_string " ]";
-            print_newline ();
-            jout#fail "Cf_rbtree.nearest_decr error [%d]!" n
-    
-    let test () =
-        test1a ();
-        test1b ();
-        test2 5;
-        test2 6
-end
-
-(*
-module T19 = struct
-    open Cf_gadget
-    open Cf_cmonad.Op
-    
-    let gadget limit =
-        read >>= fun () ->
-        duplex >>= fun ((inRx, outTx), (outRx, inTx)) ->
-        let inRx = (inRx :> (unit, unit, unit) rx) in
-        let outTx = (outTx :> (unit, unit, unit) tx) in
-        let outRx = (outRx :> (unit, unit, unit) rx) in
-        let inTx = (inTx :> (unit, unit, unit) tx) in
-        inTx#put () >>= fun () ->
-        wrap inRx outTx Cf_flow.nop >>= fun () ->
-        let rec loop () =
-            guard begin
-                outRx#get begin fun () ->
-                    load >>= fun n ->
-                    if n < limit then begin
-                        (*
-                        if n mod 1000 = 0 then begin
-                            Printf.printf "n=%08u\n" n;
-                            flush stdout
-                        end;
-                        *)
-                        store (succ n) >>= fun () ->
-                        inTx#put () >>= loop
-                    end
-                    else
-                        Cf_cmonad.nil 
-                end
-            end
-        in
-        start (loop ()) 0
-    
-    let test () =
-        let limit = 10000 in
-        let gc = Gc.get () in
-        Gc.set { gc with Gc.stack_limit = 4 * 0x400 };
-        let w = eval (gadget limit) () in
-        match Lazy.force w with
-        | Cf_flow.Q f -> let _ = f () in Gc.set gc
-        | _ -> failwith "Cf_state_gadget not evaluated to Cf_flow.Q state."
-end
 *)
 
 let main () =
     let tests = [
-        T1.test; T2.test; T3.test; T4.test; T5.test;
-        T6.test; T7.test; T8.test; T9.test; T10.test;
-        T11.test; T12.test; T13.test; T14.test; T15.test;
-        T16.test; T17.test; T18.test; (*; T19.test *)
+        T1.test; T2.test; T3.test; T4.test; T5.test; T6.test; T7.test;
+        T8.test; T9.test; T10.test; T11.test; T12.test; T13.test;
+        (*; T15.test *)
+        (*
+        Obsolete_1.test;
+        Obsolete_2.test;
+        Obsolete_3.test;
+        Obsolete_4.test;
+        Obsolete_5.test;
+        *)
     ] in
     Printf.printf "1..%d\n" (List.length tests);
     flush stdout;