mirror of
https://github.com/vsariola/sointu.git
synced 2026-09-26 18:12:01 -04:00
refactor: move ConstructPatterns into compiler package
ConstructPatterns was never used except during compilation, so it makes sense to have it closer where it is used. We could consider making it even private function, as the pattern table construction is quite specific to how compiler compiles and probably not that reusable elsewhere.
This commit is contained in:
@@ -0,0 +1,92 @@
|
||||
package compiler_test
|
||||
|
||||
import (
|
||||
"reflect"
|
||||
"testing"
|
||||
|
||||
"github.com/vsariola/sointu"
|
||||
"github.com/vsariola/sointu/vm/compiler"
|
||||
)
|
||||
|
||||
func TestPatternReusing(t *testing.T) {
|
||||
song := sointu.Song{
|
||||
Score: sointu.Score{
|
||||
Length: 2,
|
||||
RowsPerPattern: 8,
|
||||
Tracks: []sointu.Track{{
|
||||
Patterns: []sointu.Pattern{{64, 1, 1, 1, 0, 0, 0, 0}, {72, 0, 0, 0, 0, 0, 0, 0}},
|
||||
Order: sointu.Order{0, 1},
|
||||
}, {
|
||||
Patterns: []sointu.Pattern{{64, 1, 1, 1, 0, 0, 0, 0}, {84, 0, 0, 0, 0, 0, 0, 0}},
|
||||
Order: sointu.Order{0, 1},
|
||||
}},
|
||||
},
|
||||
}
|
||||
patterns, sequences, err := compiler.ConstructPatterns(&song)
|
||||
if err != nil {
|
||||
t.Fatalf("erorr constructing patterns: %v", err)
|
||||
}
|
||||
expectedSequences := [][]byte{{0, 1}, {0, 2}}
|
||||
expectedPatterns := [][]byte{{64, 1, 1, 1, 0, 0, 0, 0}, {72, 0, 0, 0, 0, 0, 0, 0}, {84, 0, 0, 0, 0, 0, 0, 0}}
|
||||
if !reflect.DeepEqual(patterns, expectedPatterns) {
|
||||
t.Fatalf("got different patterns than expected. got: %v expected: %v", patterns, expectedPatterns)
|
||||
}
|
||||
if !reflect.DeepEqual(sequences, expectedSequences) {
|
||||
t.Fatalf("got different patterns than expected. got: %v expected: %v", patterns, expectedPatterns)
|
||||
}
|
||||
}
|
||||
|
||||
func TestUnnecessaryHolds(t *testing.T) {
|
||||
song := sointu.Song{
|
||||
Score: sointu.Score{
|
||||
Length: 2,
|
||||
RowsPerPattern: 8,
|
||||
Tracks: []sointu.Track{{
|
||||
Patterns: []sointu.Pattern{{64, 1, 1, 1, 0, 1, 0, 0}, {72, 0, 1, 0, 1, 0, 0, 0}},
|
||||
Order: []int{0, 1},
|
||||
}, {
|
||||
Patterns: []sointu.Pattern{{64, 1, 1, 1, 0, 0, 1, 0}, {84, 0, 0, 0, 1, 1, 0, 0}},
|
||||
Order: []int{0, 1},
|
||||
}}},
|
||||
}
|
||||
patterns, sequences, err := compiler.ConstructPatterns(&song)
|
||||
if err != nil {
|
||||
t.Fatalf("erorr constructing patterns: %v", err)
|
||||
}
|
||||
expectedSequences := [][]byte{{0, 1}, {0, 2}}
|
||||
expectedPatterns := [][]byte{{64, 1, 1, 1, 0, 0, 0, 0}, {72, 0, 0, 0, 0, 0, 0, 0}, {84, 0, 0, 0, 0, 0, 0, 0}}
|
||||
if !reflect.DeepEqual(patterns, expectedPatterns) {
|
||||
t.Fatalf("got different patterns than expected. got: %v expected: %v", patterns, expectedPatterns)
|
||||
}
|
||||
if !reflect.DeepEqual(sequences, expectedSequences) {
|
||||
t.Fatalf("got different patterns than expected. got: %v expected: %v", patterns, expectedPatterns)
|
||||
}
|
||||
}
|
||||
|
||||
func TestDontCares(t *testing.T) {
|
||||
song := sointu.Song{
|
||||
Score: sointu.Score{
|
||||
Length: 2,
|
||||
RowsPerPattern: 8,
|
||||
Tracks: []sointu.Track{{
|
||||
Patterns: []sointu.Pattern{{64, 1, 1, 1, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0}},
|
||||
Order: []int{0, 1},
|
||||
}, {
|
||||
Patterns: []sointu.Pattern{{64, 1, 1, 1, 1, 1, 1, 1}, {1, 1, 1, 0, 0, 0, 0, 0}},
|
||||
Order: []int{0, 1},
|
||||
}},
|
||||
},
|
||||
}
|
||||
patterns, sequences, err := compiler.ConstructPatterns(&song)
|
||||
if err != nil {
|
||||
t.Fatalf("erorr constructing patterns: %v", err)
|
||||
}
|
||||
expectedSequences := [][]byte{{0, 1}, {2, 1}}
|
||||
expectedPatterns := [][]byte{{64, 1, 1, 1, 0, 0, 0, 0}, {1, 1, 1, 0, 0, 0, 0, 0}, {64, 1, 1, 1, 1, 1, 1, 1}}
|
||||
if !reflect.DeepEqual(patterns, expectedPatterns) {
|
||||
t.Fatalf("got different patterns than expected. got: %v expected: %v", patterns, expectedPatterns)
|
||||
}
|
||||
if !reflect.DeepEqual(sequences, expectedSequences) {
|
||||
t.Fatalf("got different patterns than expected. got: %v expected: %v", patterns, expectedPatterns)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user