package main import ( "testing" ) func TestStandardTuningAppearsForEMajor(t *testing.T) { query := ShapeQuery{ Shape: ShapeDefinition{"E major", []int{0, 2, 2, 1, 0, 0}}, TargetQuality: "major", TargetRoot: -1, RangeDown: 7, RangeUp: 7, } results, err := findCandidateTunings(query) if err != nil { t.Fatal(err) } std := []int{40, 45, 50, 55, 59, 64} found := false for _, r := range results { match := true for s := 0; s < 6; s++ { if r.tuningMIDI[s] != std[s] { match = false break } } if match { found = true break } } if !found { t.Error("Standard tuning not found for E major shape + major quality") } } func TestBStandardReturnsItself(t *testing.T) { // B standard = 5 semitones down from E standard bStd := []int{35, 40, 45, 50, 54, 59} // B1 E2 A2 D3 F#3 B3 query := ShapeQuery{ Shape: ShapeDefinition{"E major", []int{0, 2, 2, 1, 0, 0}}, TargetQuality: "major", TargetRoot: -1, BaseTuning: bStd, RangeDown: 3, RangeUp: 3, } results, err := findCandidateTunings(query) if err != nil { t.Fatal(err) } t.Logf("Total candidates: %d", len(results)) found := false for _, r := range results { match := true for s := 0; s < 6; s++ { if r.tuningMIDI[s] != bStd[s] { match = false break } } if match { found = true t.Logf("B standard found: root=%d midi=%v", r.root, r.tuningMIDI) break } } if !found { for i, r := range results { if i >= 10 { break } shifts := make([]int, 6) for s := 0; s < 6; s++ { shifts[s] = r.tuningMIDI[s] - bStd[s] } t.Logf(" root=%d midi=%v shifts=%v", r.root, r.tuningMIDI, shifts) } t.Error("B standard tuning not found when BaseTuning=B standard, range ±3") } }