package main

import "strings"
import "swigtests/threads_exception"

func main() {
	t := threads_exception.NewTest()

	error := true
	func() {
		defer func() {
			error = recover() == nil
		}()
		t.Unknown()
	}()
	if error {
		panic(0)
	}

	error = true
	func() {
		defer func() {
			error = strings.Index(recover().(string), "int exception") == -1
		}()
		t.Simple()
	}()
	if error {
		panic(0)
	}

	error = true
	func() {
		defer func() {
			error = recover().(string) != "I died."
		}()
		t.Message()
	}()
	if error {
		panic(0)
	}

	error = true
	func() {
		defer func() {
			e := recover().(string)
			error = strings.Index(e, "Exc exception") == -1
		}()
		t.Hosed()
	}()
	if error {
		panic(0)
	}

	for i := 1; i < 4; i++ {
		error = true
		func() {
			defer func() {
				error = recover() == nil
			}()
			t.Multi(i)
		}()
		if error {
			panic(0)
		}
	}
}
