#include <iostream.h>
#include "bench.h"
#include "bench_impl.h"
#include <mico/os-misc.h>

//#define NESTED
#define STATIC

int
main (int argc, char *argv[])
{
    CORBA::ORB_var orb = CORBA::ORB_init (argc, argv, "mico-local-orb");
    CORBA::BOA_var boa = orb->BOA_init (argc, argv, "mico-local-boa");

#ifdef STATIC
    (void)new Bench_impl2;
#else
    Bench_ptr mybench = new Bench_impl;
#endif

    assert (argc == 2);
    CORBA::Object_var obj = orb->bind ("IDL:Bench:1.0", argv[1]);
    if (CORBA::is_nil (obj)) {
	cerr << "cannot bind to " << argv[1] << endl;
	return 1;
    }
    Bench_var bench = Bench::_narrow (obj);

#ifdef NESTED
    mybench->connect (bench, 2500);
    bench->connect (mybench, 2500);
#endif

    CORBA::Long t1, t2;

    t1 = OSMisc::gettime();
#ifdef NESTED
    bench->g ();
#else
    for (int i = 0; i < 5000; ++i) {
#ifdef STATIC
	CORBA::StaticRequest req (bench, "f");
	req.invoke ();
#else
	bench->f ();
#endif
    }
#endif
    t2 = OSMisc::gettime();

    cout << (double)(t2 - t1)/5000 << " ms per call" << endl;
    return 0;
}
