package main

import "swigtests/virtual_poly"

func main() {
	d := virtual_poly.NewNDouble(3.5)
	i := virtual_poly.NewNInt(2)

	// the copy methods return the right polymorphic types
	dc := d.Copy()
	ic := i.Copy()

	if d.Get() != dc.Get() {
		panic(0)
	}

	if i.Get() != ic.Get() {
		panic(0)
	}

	virtual_poly.Incr(ic)

	if (i.Get() + 1) != ic.Get() {
		panic(0)
	}

	dr := d.Ref_this()
	if d.Get() != dr.Get() {
		panic(0)
	}

	// 'narrowing' also works
	ddc := virtual_poly.NDoubleNarrow(d.Nnumber())
	if d.Get() != ddc.Get() {
		panic(0)
	}

	dic := virtual_poly.NIntNarrow(i.Nnumber())
	if i.Get() != dic.Get() {
		panic(0)
	}
}
