// Note: This example assumes that namespaces are flattened
package main

import "swigtests/cpp_namespace"

func main() {
	n := cpp_namespace.Fact(4)
	if n != 24 {
		panic("Bad return value!")
	}

	if cpp_namespace.GetFoo() != 42 {
		panic("Bad variable value!")
	}

	t := cpp_namespace.NewTest()
	if t.Method() != "Test::method" {
		panic("Bad method return value!")
	}

	if cpp_namespace.Do_method(t) != "Test::method" {
		panic("Bad return value!")
	}

	if cpp_namespace.Do_method2(t) != "Test::method" {
		panic("Bad return value!")
	}

	cpp_namespace.Weird("hello", 4)

	cpp_namespace.DeleteTest(t)

	t2 := cpp_namespace.NewTest2()
	t3 := cpp_namespace.NewTest3()
	t4 := cpp_namespace.NewTest4()
	t5 := cpp_namespace.NewTest5()

	if cpp_namespace.Foo3(42) != 42 {
		panic("Bad return value!")
	}

	if cpp_namespace.Do_method3(t2, 40) != "Test2::method" {
		panic("Bad return value!")
	}

	if cpp_namespace.Do_method3(t3, 40) != "Test3::method" {
		panic("Bad return value!")
	}

	if cpp_namespace.Do_method3(t4, 40) != "Test4::method" {
		panic("Bad return value!")
	}

	if cpp_namespace.Do_method3(t5, 40) != "Test5::method" {
		panic("Bad return value!")
	}
}
