Files
Alessandro ScandoneandGitHub 5dfc34cd3c feat: feature flag syntax (#120)
* feat: feature flag syntax

* feat: change syntax

* feat: reject invalid features

* feat: add static check of unknown features

* feat: more defensive args handling

* fix: fix typo
2026-03-04 13:32:35 +00:00

96 lines
1.9 KiB
Go

package analysis_test
import (
"testing"
"github.com/formancehq/numscript/internal/analysis"
"github.com/stretchr/testify/require"
)
func TestResolveConcrete(t *testing.T) {
t1 := analysis.TAsset("USD")
out := t1.Resolve()
require.Equal(t, &t1, out)
}
func TestUnifyConcreteWhenNotSame(t *testing.T) {
t1 := analysis.TAsset("USD")
t2 := analysis.TAsset("EUR")
ok := analysis.Unify(&t1, &t2)
require.False(t, ok)
}
func TestUnifyConcreteWhenSame(t *testing.T) {
t1 := analysis.TAsset("USD")
t2 := analysis.TAsset("USD")
ok := analysis.Unify(&t1, &t2)
require.True(t, ok)
}
func TestUnifyItselfIsNoop(t *testing.T) {
t1 := &analysis.TVar{}
ok := analysis.Unify(t1, t1)
require.True(t, ok)
require.Same(t, t1.Resolve(), t1)
}
func TestResolveUnbound(t *testing.T) {
t1 := &analysis.TVar{}
require.Same(t, t1.Resolve(), t1)
}
func TestUnifyVarWithConcrete(t *testing.T) {
t1 := &analysis.TVar{}
t2 := analysis.TAsset("USD")
ok := analysis.Unify(t1, &t2)
require.True(t, ok)
require.Same(t, t1.Resolve(), &t2)
}
func TestUnifyTransitive(t *testing.T) {
t1 := &analysis.TVar{}
t2 := &analysis.TVar{}
t3 := &analysis.TVar{}
// t1->t2->t3
ok := analysis.Unify(t1, t2)
require.True(t, ok)
ok = analysis.Unify(t1, t3)
require.True(t, ok)
t4 := analysis.TAsset("USD")
ok = analysis.Unify(t1, &t4)
require.True(t, ok)
require.Same(t, t1.Resolve(), &t4)
require.Same(t, t2.Resolve(), &t4)
require.Same(t, t3.Resolve(), &t4)
}
func TestUnifyTransitiveInverse(t *testing.T) {
t1 := &analysis.TVar{}
t2 := &analysis.TVar{}
t3 := &analysis.TVar{}
// t1->t2->t3
ok := analysis.Unify(t1, t2)
require.True(t, ok)
ok = analysis.Unify(t1, t3)
require.True(t, ok)
t4 := analysis.TAsset("USD")
ok = analysis.Unify(t3, &t4)
require.True(t, ok)
require.Same(t, t1.Resolve(), &t4)
require.Same(t, t2.Resolve(), &t4)
require.Same(t, t3.Resolve(), &t4)
}