rewrite in go and compile to wasm
This commit is contained in:
+610
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -0,0 +1,29 @@
|
||||
{
|
||||
"p0": {
|
||||
"penalties": {
|
||||
"m": 0,
|
||||
"x": 1,
|
||||
"o": 2,
|
||||
"e": 1
|
||||
},
|
||||
"solutions": "test_affine_p0_sol"
|
||||
},
|
||||
"p1": {
|
||||
"penalties": {
|
||||
"m": 0,
|
||||
"x": 3,
|
||||
"o": 1,
|
||||
"e": 4
|
||||
},
|
||||
"solutions": "test_affine_p1_sol"
|
||||
},
|
||||
"p2": {
|
||||
"penalties": {
|
||||
"m": 0,
|
||||
"x": 5,
|
||||
"o": 3,
|
||||
"e": 2
|
||||
},
|
||||
"solutions": "test_affine_p2_sol"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,78 @@
|
||||
package tests
|
||||
|
||||
import (
|
||||
"bufio"
|
||||
"encoding/json"
|
||||
"os"
|
||||
"strconv"
|
||||
"strings"
|
||||
"testing"
|
||||
wfa "wfa/pkg"
|
||||
|
||||
"github.com/schollz/progressbar/v3"
|
||||
)
|
||||
|
||||
const testJsonPath = "tests.json"
|
||||
const testSequences = "sequences"
|
||||
|
||||
type TestPenalty struct {
|
||||
M int `json:"m"`
|
||||
X int `json:"x"`
|
||||
O int `json:"o"`
|
||||
E int `json:"e"`
|
||||
}
|
||||
|
||||
type TestCase struct {
|
||||
Penalties TestPenalty `json:"penalties"`
|
||||
Solutions string `json:"solutions"`
|
||||
}
|
||||
|
||||
func TestWFA(t *testing.T) {
|
||||
content, _ := os.ReadFile(testJsonPath)
|
||||
|
||||
var testMap map[string]TestCase
|
||||
json.Unmarshal(content, &testMap)
|
||||
|
||||
for k, v := range testMap {
|
||||
testName := k
|
||||
|
||||
testPenalties := wfa.Penalty{
|
||||
M: v.Penalties.M,
|
||||
X: v.Penalties.X,
|
||||
O: v.Penalties.O,
|
||||
E: v.Penalties.E,
|
||||
}
|
||||
|
||||
sequencesFile, _ := os.Open(testSequences)
|
||||
sequences := bufio.NewScanner(sequencesFile)
|
||||
solutionsFile, _ := os.Open(v.Solutions)
|
||||
solutions := bufio.NewScanner(solutionsFile)
|
||||
|
||||
bar := progressbar.Default(305, k)
|
||||
|
||||
idx := 0
|
||||
|
||||
for solutions.Scan() {
|
||||
solution := solutions.Text()
|
||||
expectedScore, _ := strconv.Atoi(strings.Split(solution, "\t")[0])
|
||||
|
||||
sequences.Scan()
|
||||
s1 := sequences.Text()
|
||||
s1 = s1[1:]
|
||||
|
||||
sequences.Scan()
|
||||
s2 := sequences.Text()
|
||||
s2 = s2[1:]
|
||||
|
||||
x := wfa.WFAlign(s1, s2, testPenalties, false)
|
||||
gotScore := x.Score
|
||||
|
||||
if gotScore != -1*expectedScore {
|
||||
t.Errorf(`test: %s#%d, s1: %s, s2: %s, got: %d, expected: %d\n`, testName, idx, s1, s2, gotScore, expectedScore)
|
||||
}
|
||||
|
||||
idx++
|
||||
bar.Add(1)
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user