Initial commit:

Added framework to generate DOT and png files of character map chart
from data folder.
Added all figures in the 1-2 chapters.
Added font file SimSum for render chart
This commit is contained in:
2024-09-02 04:59:36 +00:00
commit 8caf0ac3aa
36 changed files with 1236 additions and 0 deletions
+24
View File
@@ -0,0 +1,24 @@
package relationship
import "fmt"
type Relationship struct {
Src string `yaml:"source"`
Dst string `yaml:"destination"`
Description string `yaml:"description"`
Bidirection bool `yaml:"bidirection"`
}
func (r Relationship) IsSame(other Relationship) bool {
if r.Bidirection {
if r.Description != other.Description {
return false
}
return (r.Src == other.Src && r.Dst == other.Dst) || (r.Src == other.Dst && r.Dst == other.Src)
}
return r.Src == other.Src && r.Dst == other.Dst && r.Description == other.Description
}
func (r Relationship) GetKey() (string, string) {
return fmt.Sprintf("%s-%s", r.Src, r.Dst), fmt.Sprintf("%s-%s", r.Dst, r.Src)
}
+120
View File
@@ -0,0 +1,120 @@
package relationship_test
import (
"testing"
r "xyj-figures/pkg/relationship"
"github.com/stretchr/testify/assert"
)
func TestRelationship_IsSame(t *testing.T) {
tests := []struct {
name string
r r.Relationship
other r.Relationship
expected bool
}{
{
name: "Bidirectional relationships with same source and destination",
r: r.Relationship{
Src: "A",
Dst: "B",
Description: "friend",
Bidirection: true,
},
other: r.Relationship{
Src: "A",
Dst: "B",
Description: "friend",
Bidirection: true,
},
expected: true,
},
{
name: "Bidirectional relationships with swapped source and destination",
r: r.Relationship{
Src: "A",
Dst: "B",
Description: "friend",
Bidirection: true,
},
other: r.Relationship{
Src: "B",
Dst: "A",
Description: "friend",
Bidirection: true,
},
expected: true,
},
{
name: "Bidirectional relationships with different descriptions",
r: r.Relationship{
Src: "A",
Dst: "B",
Description: "friend",
Bidirection: true,
},
other: r.Relationship{
Src: "A",
Dst: "B",
Description: "enemy",
Bidirection: true,
},
expected: false,
},
{
name: "Unidirectional relationships with same source and destination",
r: r.Relationship{
Src: "A",
Dst: "B",
Description: "friend",
Bidirection: false,
},
other: r.Relationship{
Src: "A",
Dst: "B",
Description: "friend",
Bidirection: false,
},
expected: true,
},
{
name: "Unidirectional relationships with swapped source and destination",
r: r.Relationship{
Src: "A",
Dst: "B",
Description: "friend",
Bidirection: false,
},
other: r.Relationship{
Src: "B",
Dst: "A",
Description: "friend",
Bidirection: false,
},
expected: false,
},
{
name: "Unidirectional relationships with different descriptions",
r: r.Relationship{
Src: "A",
Dst: "B",
Description: "friend",
Bidirection: false,
},
other: r.Relationship{
Src: "A",
Dst: "B",
Description: "enemy",
Bidirection: false,
},
expected: false,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
assert.Equal(t, tt.expected, tt.r.IsSame(tt.other))
})
}
}