
if [ catch { load ./overload_simple[info sharedlibextension] Overload_simple} err_msg ] {
	puts stderr "Could not load shared object:\n$err_msg"
}

set f [new_Foo]
set b [new_Bar]
set v [malloc_void 32]

set x [foo 3]
if {$x != "foo:int"} {
   puts stderr "foo(int) test failed $x"
   exit 1
}

set x [foo 3.4]
if {$x != "foo:double"} {
   puts stderr "foo(double) test failed"
   exit 1
}

set x [foo hello]
if {$x != "foo:char *"} {
   puts stderr "foo(char *) test failed"
   exit 1
}

set x [foo $f]
if {$x != "foo:Foo *"} {
   puts stderr "foo(Foo *) test failed"
   exit 1
}

set x [foo $b]
if {$x != "foo:Bar *"} {
   puts stderr "foo(Bar *) test failed"
   exit 1
}

set x [foo $v]
if {$x != "foo:void *"} {
   puts stderr "foo(void *) test failed"
   exit 1
}

Spam s

set x [s foo 3]
if {$x != "foo:int"} {
   puts stderr "Spam::foo(int) test failed"
   exit 1
}

set x [s foo 3.4]
if {$x != "foo:double"} {
   puts stderr "Spam::foo(double) test failed"
   exit 1
}

set x [s foo hello]
if {$x != "foo:char *"} {
   puts stderr "Spam::foo(char *) test failed"
   exit 1
}

set x [s foo $f]
if {$x != "foo:Foo *"} {
   puts stderr "Spam::foo(Foo *) test failed"
   exit 1
}

set x [s foo $b]
if {$x != "foo:Bar *"} {
   puts stderr "Spam::foo(Bar *) test failed"
   exit 1
}

set x [s foo $v]
if {$x != "foo:void *"} {
   puts stderr "Spam::foo(void *) test failed"
   exit 1
}


set x [Spam_bar 3]
if {$x != "bar:int"} {
   puts stderr "Spam::bar(int) test failed"
   exit 1
}

set x [Spam_bar 3.4]
if {$x != "bar:double"} {
   puts stderr "Spam::bar(double) test failed"
   exit 1
}

set x [Spam_bar hello]
if {$x != "bar:char *"} {
   puts stderr "Spam::bar(char *) test failed"
   exit 1
}

set x [Spam_bar $f]
if {$x != "bar:Foo *"} {
   puts stderr "Spam::bar(Foo *) test failed"
   exit 1
}

set x [Spam_bar $b]
if {$x != "bar:Bar *"} {
   puts stderr "Spam::bar(Bar *) test failed"
   exit 1
}

set x [Spam_bar $v]
if {$x != "bar:void *"} {
   puts stderr "Spam::bar(void *) test failed"
   exit 1
}

Spam s
set x [s cget -type]
if {$x != "none"} {
    puts stderr "Spam() test failed"
}

Spam s 3
set x [s cget -type]
if {$x != "int"} {
    puts stderr "Spam(int) test failed"
}

Spam s 3.4
set x [s cget -type]
if {$x != "double"} {
    puts stderr "Spam(double) test failed"
}

Spam s hello
set x [s cget -type]
if {$x != "char *"} {
    puts stderr "Spam(char *) test failed"
}

Spam s $f
set x [s cget -type]
if {$x != "Foo *"} {
    puts stderr "Spam(Foo *) test failed"
}

Spam s $b
set x [s cget -type]
if {$x != "Bar *"} {
    puts stderr "Spam(Bar *) test failed"
}

Spam s $v
set x [s cget -type]
if {$x != "void *"} {
    puts stderr "Spam(void *) test failed"
}

free_void $v



