package main

import . "overload_simple"

func main() {
	if Foo(3) != "foo:int" {
		panic("foo(int)")
	}

	if Foo(3.0) != "foo:double" {
		panic("foo(double)")
	}

	if Foo("hello") != "foo:char *" {
		panic("foo(char *)")
	}

	f := NewFoos()
	b := NewBar()

	if Foo(f) != "foo:Foo *" {
		panic("foo(Foo *)")
	}

	if Foo(b) != "foo:Bar *" {
		panic("foo(Bar *)")
	}

	v := Malloc_void(32)

	if Foo(v) != "foo:void *" {
		panic("foo(void *)")
	}
	s := NewSpam()

	if s.Foo(3) != "foo:int" {
		panic("Spam::foo(int)")
	}

	if s.Foo(3.0) != "foo:double" {
		panic("Spam::foo(double)")
	}

	if s.Foo("hello") != "foo:char *" {
		panic("Spam::foo(char *)")
	}

	if s.Foo(f) != "foo:Foo *" {
		panic("Spam::foo(Foo *)")
	}

	if s.Foo(b) != "foo:Bar *" {
		panic("Spam::foo(Bar *)")
	}

	if s.Foo(v) != "foo:void *" {
		panic("Spam::foo(void *)")
	}

	if SpamBar(3) != "bar:int" {
		panic("Spam::bar(int)")
	}

	if SpamBar(3.0) != "bar:double" {
		panic("Spam::bar(double)")
	}

	if SpamBar("hello") != "bar:char *" {
		panic("Spam::bar(char *)")
	}

	if SpamBar(f) != "bar:Foo *" {
		panic("Spam::bar(Foo *)")
	}

	if SpamBar(b) != "bar:Bar *" {
		panic("Spam::bar(Bar *)")
	}

	if SpamBar(v) != "bar:void *" {
		panic("Spam::bar(void *)")
	}

	// Test constructors

	s = NewSpam()
	if s.GetXtype() != "none" {
		panic("Spam()")
	}

	s = NewSpam(3)
	if s.GetXtype() != "int" {
		panic("Spam(int)")
	}

	s = NewSpam(3.4)
	if s.GetXtype() != "double" {
		panic("Spam(double)")
	}

	s = NewSpam("hello")
	if s.GetXtype() != "char *" {
		panic("Spam(char *)")
	}

	s = NewSpam(f)
	if s.GetXtype() != "Foo *" {
		panic("Spam(Foo *)")
	}

	s = NewSpam(b)
	if s.GetXtype() != "Bar *" {
		panic("Spam(Bar *)")
	}

	s = NewSpam(v)
	if s.GetXtype() != "void *" {
		panic("Spam(void *)")
	}

	Free_void(v)

	a := NewClassA()
	_ = a.Method1(1)
}
