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  }