|
- package template_test
-
- import (
- _ "embed"
- "git.wtrh.nl/patterns/gopatterns/pkg/util"
- "math"
- "testing"
-
- "git.wtrh.nl/patterns/gopatterns/pkg/dimensions"
- "git.wtrh.nl/patterns/gopatterns/pkg/position"
- "git.wtrh.nl/patterns/gopatterns/pkg/position/testutil"
- "git.wtrh.nl/patterns/gopatterns/pkg/template"
- "git.wtrh.nl/patterns/gopatterns/pkg/vector"
- "github.com/stretchr/testify/require"
- "gopkg.in/yaml.v3"
- )
-
- //go:embed fixtures/absolute_points.yaml
- var absolutePoints []byte
-
- //go:embed fixtures/relative_points.yaml
- var relativePoints []byte
-
- //go:embed fixtures/between_points.yaml
- var betweenPoints []byte
-
- //go:embed fixtures/extend_points.yaml
- var extendPoints []byte
-
- //go:embed fixtures/polar_points.yaml
- var polarPoints []byte
-
- //go:embed fixtures/functions.yaml
- var functions []byte
-
- //go:embed fixtures/evaluation_functions.yaml
- var evaluationFunctions []byte
-
- //go:embed fixtures/references.yaml
- var references []byte
-
- func TestAbsolutePoint(t *testing.T) {
- temp := &template.Template{}
- require.NoError(t, yaml.Unmarshal(absolutePoints, temp))
-
- panel, err := temp.GetPanel(template.Request{
- Dims: dimensions.Dimensions{"test": dimensions.Dimension{
- Name: "Test",
- Value: 1.3,
- }},
- Panel: "body",
- })
- require.NoError(t, err)
-
- p1, ok := panel.Points["1"]
- require.True(t, ok)
- require.Equal(t, position.Position{
- Vector: vector.Vector{
- X: 1.3,
- Y: 14.3,
- },
- Rotation: 0,
- }, p1.Position())
-
- p2, ok := panel.Points["2"]
- require.True(t, ok)
- require.Equal(t, position.Position{
- Vector: vector.Vector{
- X: 2.6,
- Y: -3,
- },
- Rotation: 0,
- }, p2.Position())
- }
-
- func TestBetweenPoints(t *testing.T) {
- temp := &template.Template{}
- require.NoError(t, yaml.Unmarshal(betweenPoints, temp))
-
- panel, err := temp.GetPanel(template.Request{
- Dims: dimensions.Dimensions{"test": dimensions.Dimension{
- Name: "Test",
- Value: 0.5,
- }},
- Panel: "body",
- })
- require.NoError(t, err)
-
- p1, ok := panel.Points["1"]
- require.True(t, ok)
- testutil.EqualPosition(t, position.Position{
- Vector: vector.Vector{
- X: 4,
- Y: 14.3,
- },
- Rotation: 0,
- }, p1.Position(), 1e-10)
-
- p2, ok := panel.Points["2"]
- require.True(t, ok)
- testutil.EqualPosition(t, position.Position{
- Vector: vector.Vector{
- X: 6,
- Y: 11.3,
- },
- Rotation: 0,
- }, p2.Position(), 1e-10)
-
- p3, ok := panel.Points["3"]
- require.True(t, ok)
- testutil.EqualPosition(t, position.Position{
- Vector: vector.Vector{
- X: 5,
- Y: 12.8,
- },
- Rotation: math.Atan2(-3, 2) - math.Pi/2,
- }, p3.Position(), 1e-10)
- }
-
- func TestRelativePoints(t *testing.T) {
- temp := &template.Template{}
- require.NoError(t, yaml.Unmarshal(relativePoints, temp))
-
- panel, err := temp.GetPanel(template.Request{
- Dims: dimensions.Dimensions{"test": dimensions.Dimension{
- Name: "Test",
- Value: 1.3,
- }},
- Panel: "body",
- })
- require.NoError(t, err)
-
- p1, ok := panel.Points["1"]
- require.True(t, ok)
- testutil.EqualPosition(t, position.Position{
- Vector: vector.Vector{
- X: 1.3,
- Y: 14.3,
- },
- Rotation: 0,
- }, p1.Position(), 1e-10)
-
- p2, ok := panel.Points["2"]
- require.True(t, ok)
- testutil.EqualPosition(t, position.Position{
- Vector: vector.Vector{
- X: 3.9,
- Y: 11.3,
- },
- Rotation: 0,
- }, p2.Position(), 1e-10)
- }
-
- func TestExtendPoints(t *testing.T) {
- temp := &template.Template{}
- require.NoError(t, yaml.Unmarshal(extendPoints, temp))
-
- panel, err := temp.GetPanel(template.Request{
- Dims: dimensions.Dimensions{"test": dimensions.Dimension{
- Name: "Test",
- Value: 1.3,
- }},
- Panel: "body",
- })
- require.NoError(t, err)
-
- p1, ok := panel.Points["1"]
- require.True(t, ok)
- testutil.EqualPosition(t, position.Position{}, p1.Position(), 1e-10)
-
- p2, ok := panel.Points["2"]
- require.True(t, ok)
- testutil.EqualPosition(t, position.Position{
- Vector: vector.Vector{
- X: 4,
- Y: 3,
- },
- Rotation: 0,
- }, p2.Position(), 1e-10)
-
- p3, ok := panel.Points["3"]
- require.True(t, ok)
- testutil.EqualPosition(t, position.Position{
- Vector: vector.Vector{
- X: 8,
- Y: 6,
- },
- Rotation: math.Atan2(3, 4) - math.Pi/2,
- }, p3.Position(), 1e-10)
- }
-
- func TestPolarPoints(t *testing.T) {
- temp := &template.Template{}
- require.NoError(t, yaml.Unmarshal(polarPoints, temp))
-
- panel, err := temp.GetPanel(template.Request{
- Dims: dimensions.Dimensions{"test": dimensions.Dimension{
- Name: "Test",
- Value: 1.3,
- }},
- Panel: "body",
- })
- require.NoError(t, err)
-
- p1, ok := panel.Points["1"]
- require.True(t, ok)
- testutil.EqualPosition(t, position.Position{}, p1.Position(), 1e-10)
-
- p2, ok := panel.Points["2"]
- require.True(t, ok)
- testutil.EqualPosition(t, position.Position{
- Vector: vector.Vector{
- X: 1,
- Y: 0,
- },
- Rotation: 0,
- }, p2.Position(), 1e-10)
-
- p3, ok := panel.Points["3"]
- require.True(t, ok)
- testutil.EqualPosition(t, position.Position{
- Vector: vector.Vector{
- X: 1,
- Y: 1,
- },
- Rotation: math.Pi / 2,
- }, p3.Position(), 1e-10)
- }
-
- func TestFunctions(t *testing.T) {
- tests := map[string]struct {
- result float64
- }{
- "distance": {result: 5},
- "angle": {result: math.Atan2(3, 4)},
- "yDistance": {result: 3},
- "xDistance": {result: 4},
- "lineLength": {result: 12},
- "lineLength2": {result: 4},
- }
- temp := &template.Template{}
- require.NoError(t, yaml.Unmarshal(functions, temp))
-
- panel, err := temp.GetPanel(template.Request{Panel: "test"})
- require.NoError(t, err)
-
- for name, test := range tests {
- t.Run(name, func(t *testing.T) {
- p, ok := panel.Points[util.ID(name)]
- require.True(t, ok)
- require.InDelta(t, test.result, p.Vector().X, 1e-10)
- })
- }
- }
-
- func TestEvaluationFunctions(t *testing.T) {
- tests := map[string]struct {
- result float64
- }{
- "acos": {result: math.Acos(0.5)},
- "asin": {result: math.Asin(math.Pi / 2)},
- "atan2": {result: math.Atan2(1, 1)},
- "abs1": {result: math.Abs(-1.4)},
- "abs2": {result: math.Abs(3.5)},
- }
- temp := &template.Template{}
- require.NoError(t, yaml.Unmarshal(evaluationFunctions, temp))
-
- panel, err := temp.GetPanel(template.Request{Panel: "test"})
- require.NoError(t, err)
-
- for name, test := range tests {
- t.Run(name, func(t *testing.T) {
- p, ok := panel.Points[util.ID(name)]
- require.True(t, ok)
- require.InDelta(t, test.result, p.Vector().X, 1e-10)
- })
- }
- }
-
- func TestReferences(t *testing.T) {
- temp := &template.Template{}
- require.NoError(t, yaml.Unmarshal(references, temp))
-
- panel, err := temp.GetPanel(template.Request{Panel: "body"})
- require.NoError(t, err)
-
- _ = panel
- }
|