From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail1-relais-roc.national.inria.fr (mail1-relais-roc.national.inria.fr [192.134.164.82]) by walapai.inria.fr (8.13.6/8.13.6) with ESMTP id pA8F3BY5006692 for ; Tue, 8 Nov 2011 16:03:11 +0100 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AngBAFJDuU7RVdK2mGdsb2JhbABDml6EQIMGAYdaCCIBAQEBAQgJDQcUJYILAhMZARseAxIJBz0gAREBBQFXnyGCXAqLYYJjhW49iHACBQqJIwSCWowZhS6NQT2DcQ X-IronPort-AV: E=Sophos;i="4.69,477,1315173600"; d="tgz'50?ml'50?scan'50,208,49,50";a="129191961" Received: from mail-iy0-f182.google.com ([209.85.210.182]) by mail1-smtp-roc.national.inria.fr with ESMTP/TLS/RC4-SHA; 08 Nov 2011 16:03:05 +0100 Received: by iabz21 with SMTP id z21so1110029iab.27 for ; Tue, 08 Nov 2011 07:03:04 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=mime-version:date:message-id:subject:from:to:content-type; bh=qwfID0pXpcw75YoMZ/D9kR5lYE7L9whLTL9kd2ukpVg=; b=agWV/8C60/mb86XnCRP3gT00ROzXB0IrOyS8Pv6ejvysr5LHKLvsR30SbFZFBwDi/9 iYGlWMJSHwJU0fqoAScG/m4/WvzKVtE8yJ1ZBWnOB8aNOSzh6Q139EROk7iXbBighz4o 3A50jurfwMOYdJstHfn8JQUaXB+g1nWmgVWGg= MIME-Version: 1.0 Received: by 10.42.154.7 with SMTP id o7mr52988328icw.48.1320764584589; Tue, 08 Nov 2011 07:03:04 -0800 (PST) Received: by 10.42.164.9 with HTTP; Tue, 8 Nov 2011 07:03:04 -0800 (PST) Date: Tue, 8 Nov 2011 16:03:04 +0100 Message-ID: From: Hans Ole Rafaelsen To: caml-list@inria.fr Content-Type: multipart/mixed; boundary=90e6ba1efd2ee5783704b13a775b Subject: [Caml-list] Include question --90e6ba1efd2ee5783704b13a775b Content-Type: multipart/alternative; boundary=90e6ba1efd2ee5783304b13a7759 --90e6ba1efd2ee5783304b13a7759 Content-Type: text/plain; charset=ISO-8859-1 Hi, I'm trying to create a mockup module to replace a network module when doing testing. The application consists of basically 3 parts. Some user interaction. This calls some logic of the application, and the logic module might need to call some other functions over the network. For testing I want to make a mockup of the network module, in addition to synthesize the user interaction. I want to test the logic module. The application has the following files: net_lib.ml: let util_fun a = a let foo a b = a + b let bar a b = a - b logic.ml: let state = ref 0 let get_state () = !state let do_op a b = incr state; (Net_lib.foo a b) * (Net_lib.bar (Net_lib.util_fun a) b ) main_appl.ml: let () = let a, b = Scanf.scanf "%d %d\n" (fun a b -> a,b) in Printf.printf "Foo %d %d\n%!" (Logic.get_state ()) (Logic.do_op a b) let () = let a, b = Scanf.scanf "%d %d\n" (fun a b -> a,b) in Printf.printf "Foo %d %d\n%!" (Logic.get_state ()) (Logic.do_op a b) For testing I have the following modules: net_lib_mockup.ml include Net_lib let foo a b = 1 let bar a b = 1 logic_mockup.ml: module Net_lib = Net_lib_mockup include Logic main_test.ml: module Logic = Logic_mockup let () = let a, b = (1, 1) in Printf.printf "Test %d %d\n%!" (Logic.get_state ()) (Logic.do_op a b) let () = let a, b = (10, 1) in Printf.printf "Test %d %d\n%!" (Logic.get_state ()) (Logic.do_op a b) The problem is that the "include Logic" has already 'bound' the functions in Logic to the Net_lib module and will not use the Net_lib_mockup that I try to use through a moudle alias. If i replace the 'include Logic' with the actual content of the logic.ml file, then the functions get bound to the Logic_mockup functions, and the test works as they should. Are there some trick to get the 'include Logic', in logic_mockup.ml, to use to the Net_lib_mockup module and not the Net_lib module, so that I don't have to do copy and paste between the two files? Regards, Hans Ole Rafaelsen --90e6ba1efd2ee5783304b13a7759 Content-Type: text/html; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Hi,

I'm trying to create a mockup module to replace a network mo= dule when doing testing.

The application consists of basically 3 par= ts. Some user interaction. This calls some logic of the application, and th= e logic module might need to call some other functions over the network. Fo= r testing I want to make a mockup of the network module, in addition to syn= thesize the user interaction. I want to test the logic module. The applicat= ion has the following files:

net_lib.ml:
let = util_fun a =3D a
let foo a b =3D a + b
let bar a b =3D a - b

<= a href=3D"http://logic.ml" target=3D"_blank">logic.ml:
let state =3D= ref 0
let get_state () =3D !state
let do_op a b =3D
=A0 incr state;
=A0 (Net_lib.foo a b) * (Net_lib.bar (Net_lib.util_fun a= ) b )

main_appl.ml= :
let () =3D
=A0 let a, b=A0 =3D Scanf.scanf=A0 "%d %d\n&qu= ot; (fun a b -> a,b) in
=A0 Printf.printf "Foo %d %d\n%!" (Logic.get_state ()) (Logic.do_= op a b)

let () =3D
=A0 let a, b=A0 =3D Scanf.scanf=A0 "%d %= d\n" (fun a b -> a,b) in
=A0 Printf.printf "Foo %d %d\n%!&q= uot; (Logic.get_state ()) (Logic.do_op a b)


For testing I have the following modules:
net_lib_mockup.ml
include Net_liblet foo a b =3D 1
let bar a b =3D 1

logic_mockup.ml:
module Net_lib =3D Net_lib_mockup
include Logic

main_test.ml:
module Logic =3D Logi= c_mockup

let () =3D
=A0 let a, b =3D (1, 1) in
=A0 Printf.pri= ntf "Test %d %d\n%!" (Logic.get_state ()) (Logic.do_op a b)

let () =3D
=A0 let a, b =3D (10, 1) in
=A0 Printf.printf "Te= st %d %d\n%!" (Logic.get_state ()) (Logic.do_op a b)

The proble= m is that the "include Logic" has already 'bound' the fun= ctions in Logic to the Net_lib module and will not use the Net_lib_mockup t= hat I try to use through a moudle alias. If i replace the 'include Logi= c' with the actual content of the logic.ml file, then the functions get bound to the Logic_mocku= p functions, and the test works as they should.

Are there some trick to get the 'include Logic', in logic_mockup.ml, to use to th= e Net_lib_mockup module and not the Net_lib module, so that I don't hav= e to do copy and paste between the two files?


Regards,

Hans Ole Rafaelsen

--90e6ba1efd2ee5783304b13a7759-- --90e6ba1efd2ee5783704b13a775b Content-Type: application/x-gzip; name="mockup.tgz" Content-Disposition: attachment; filename="mockup.tgz" Content-Transfer-Encoding: base64 X-Attachment-Id: f_gur0yzbv0 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 iu1XAFAAAA== --90e6ba1efd2ee5783704b13a775b--