github.com/vertgenlab/gonomics@v1.0.0/cmd/vcfFilter/vcfFilter_test.go (about) 1 package main 2 3 import ( 4 "github.com/vertgenlab/gonomics/exception" 5 "github.com/vertgenlab/gonomics/numbers" 6 "github.com/vertgenlab/gonomics/vcf" 7 "os" 8 "strings" 9 "testing" 10 ) 11 12 var VcfFilterTests = []struct { 13 inputFile string 14 tmpOutFile string 15 expectedOutputFile string 16 groupFile string 17 chrom string 18 minPos int 19 maxPos int 20 minQual float64 21 ref string 22 alt string 23 biAllelicOnly bool 24 substitutionsOnly bool 25 segregatingSitesOnly bool 26 removeNoAncestor bool 27 onlyPolarizableAncestors bool 28 weakToStrongOrStrongToWeakOnly bool 29 noWeakToStrongOrStrongToWeak bool 30 refWeakAltStrongOnly bool 31 refStrongAltWeakOnly bool 32 notRefStrongAltWeak bool 33 notRefWeakAltStrong bool 34 id string 35 subSet float64 36 minDaf float64 37 maxDaf float64 38 minDist int 39 setSeed int64 40 }{ 41 {"testdata/test.vcf", "testdata/tmp.Out.vcf", "testdata/expectedOut.vcf", "testdata/test.group", "chr3", 10, 1000, 0, "", "", true, true, true, false, false, false, false, false, false, false, false, "", 1, 0, 1, 0, 10}, 42 {"testdata/test_removeNoAncestor.vcf", "testdata/tmp.removeNoAncestor.vcf", "testdata/expected_removeNoAncestor.vcf", "", "", 0, 100, 0, "", "", false, false, false, true, false, false, false, false, false, false, false, "", 1, 0, 1, 0, 10}, 43 {"testdata/test_onlyPolarizable.vcf", "testdata/tmp.OnlyPolarizable.vcf", "testdata/expected_onlyPolarizable.vcf", "", "", 0, 100, 0, "", "", false, false, false, false, true, false, false, false, false, false, false, "", 1, 0, 1, 0, 10}, 44 {"testdata/test_weakToStrong.vcf", "testdata/tmp.weakToStrong.vcf", "testdata/expected_noWeakToStrongOrStrongToWeak.vcf", "", "", 0, 100, 0, "", "", false, false, false, false, false, false, true, false, false, false, false, "", 1, 0, 1, 0, 10}, 45 {"testdata/test_weakToStrong.vcf", "tmp.refWeakAltStrong.vcf", "testdata/expected_refWeakAltStrongOnly.vcf", "", "", 0, 100, 0, "", "", false, false, false, false, false, false, false, true, false, false, false, "", 1, 0, 1, 0, 10}, 46 {"testdata/test_id.vcf", "testdata/tmp.id.vcf", "testdata/expected_id.vcf", "testdata/test.group", "chr3", 10, 1000, 0, "", "", false, true, true, false, false, false, false, false, false, false, false, "TestingId", 1, 0, 1, 0, 10}, 47 {"testdata/test.vcf", "testdata/tmp.subset.vcf", "testdata/expectedSubSet.vcf", "", "chr3", 0, numbers.MaxInt, 0, "", "", false, false, false, false, false, false, false, false, false, false, false, "", 0.5, 0, 1, 0, 20}, 48 {"testdata/testDuplicatePos.vcf", "testdata/tmp.duplicatePos.vcf", "testdata/expectedDuplicatePos.vcf", "", "", 0, numbers.MaxInt, 0, "", "", true, false, false, false, false, false, false, false, false, false, false, "", 1, 0, 1, 0, 10}, 49 {"testdata/testDaf.vcf", "testdata/tmp.minMaxDaf.vcf", "testdata/expectedMinMaxDaf.vcf", "", "", 0, numbers.MaxInt, 0, "", "", false, false, false, false, false, false, false, false, false, false, false, "", 1, 0.25, 0.75, 0, 10}, 50 {"testdata/testMinDist.vcf", "testdata/tmp.minDist.vcf", "testdata/expectedMinDist.vcf", "", "", 0, numbers.MaxInt, 0, "", "", false, false, false, false, false, false, false, false, false, false, false, "", 1, 0, 1, 100, 10}, 51 } 52 53 func TestVcfFilter(t *testing.T) { 54 var err error 55 for _, v := range VcfFilterTests { 56 var altSlice []string 57 if v.alt != "" { 58 altSlice = strings.Split(v.alt, ",") 59 } 60 c := criteria{ 61 chrom: v.chrom, 62 groupFile: v.groupFile, 63 minPos: v.minPos, 64 maxPos: v.maxPos, 65 minQual: v.minQual, 66 ref: v.ref, 67 alt: altSlice, 68 biAllelicOnly: v.biAllelicOnly, 69 substitutionsOnly: v.substitutionsOnly, 70 segregatingSitesOnly: v.segregatingSitesOnly, 71 removeNoAncestor: v.removeNoAncestor, 72 onlyPolarizableAncestors: v.onlyPolarizableAncestors, 73 weakToStrongOrStrongToWeakOnly: v.weakToStrongOrStrongToWeakOnly, 74 noWeakToStrongOrStrongToWeak: v.noWeakToStrongOrStrongToWeak, 75 refWeakAltStrongOnly: v.refWeakAltStrongOnly, 76 refStrongAltWeakOnly: v.refStrongAltWeakOnly, 77 notRefStrongAltWeak: v.notRefStrongAltWeak, 78 notRefWeakAltStrong: v.notRefWeakAltStrong, 79 id: v.id, 80 minDaf: v.minDaf, 81 maxDaf: v.maxDaf, 82 subSet: v.subSet, 83 minDist: v.minDist, 84 } 85 86 vcfFilter(v.inputFile, v.tmpOutFile, c, v.groupFile, false, false, v.setSeed) 87 records, _ := vcf.Read(v.tmpOutFile) 88 expected, _ := vcf.Read(v.expectedOutputFile) 89 if !vcf.AllEqual(records, expected) { 90 t.Errorf("Error in vcfFilter. Tmp: %v. Expected: %v.", v.tmpOutFile, v.expectedOutputFile) 91 } else { 92 err = os.Remove(v.tmpOutFile) 93 } 94 exception.PanicOnErr(err) 95 } 96 }