github.com/vertgenlab/gonomics@v1.0.0/fileio/easyio_test.go (about) 1 package fileio 2 3 import ( 4 "fmt" 5 "io" 6 "os" 7 "testing" 8 9 "github.com/vertgenlab/gonomics/exception" 10 ) 11 12 // example going straight to file. 13 func writeDnaFile(file *os.File) { 14 var fakeDna string = "ACGTACGTACGTACGTACGTACGTACGTACGTACGTACGT" 15 var err error 16 _, err = fmt.Fprintf(file, "%s\n", fakeDna) 17 exception.PanicOnErr(err) 18 } 19 20 // example using io.Writer. 21 func writeDnaIo(file io.Writer) { 22 var fakeDna string = "ACGTACGTACGTACGTACGTACGTACGTACGTACGTACGT" 23 var err error 24 _, err = fmt.Fprintf(file, "%s\n", fakeDna) 25 exception.PanicOnErr(err) 26 } 27 28 // example using fileio.EasyWriter. 29 func writeDnaFileio(file *EasyWriter) { 30 var fakeDna string = "ACGTACGTACGTACGTACGTACGTACGTACGTACGTACGT" 31 var err error 32 _, err = fmt.Fprintf(file, "%s\n", fakeDna) 33 exception.PanicOnErr(err) 34 } 35 36 // used to uncompress the file in the repo. 37 func copyFile(inputFilename string, outputFilename string) { 38 var er *EasyReader 39 var ew *EasyWriter 40 var line string 41 var done bool 42 var err error 43 44 er = EasyOpen(inputFilename) 45 defer er.Close() 46 ew = EasyCreate(outputFilename) 47 defer ew.Close() 48 49 for line, done = EasyNextLine(er); !done; line, done = EasyNextLine(er) { 50 _, err = fmt.Fprintf(ew, "%s\n", line) 51 exception.PanicOnErr(err) 52 } 53 } 54 55 func BenchmarkRead(b *testing.B) { 56 copyFile("testdata/big.fa.gz", "testdata/big.fa") 57 b.ResetTimer() 58 for n := 0; n < b.N; n++ { 59 var er *EasyReader 60 var done bool 61 62 er = EasyOpen("testdata/big.fa") 63 64 for _, done = EasyNextLine(er); !done; _, done = EasyNextLine(er) { 65 } 66 er.Close() 67 } 68 } 69 70 func BenchmarkReadGz(b *testing.B) { 71 for n := 0; n < b.N; n++ { 72 var er *EasyReader 73 var done bool 74 75 er = EasyOpen("testdata/big.fa.gz") 76 77 for _, done = EasyNextLine(er); !done; _, done = EasyNextLine(er) { 78 } 79 er.Close() 80 } 81 } 82 83 func BenchmarkWriteFileio(b *testing.B) { 84 for n := 0; n < b.N; n++ { 85 var ew *EasyWriter = EasyCreate("testdata/testWrite.dna") 86 87 for i := 0; i < 10000; i++ { 88 writeDnaFileio(ew) 89 } 90 ew.Close() 91 } 92 } 93 94 func BenchmarkWriteFileioGz(b *testing.B) { 95 for n := 0; n < b.N; n++ { 96 var ew *EasyWriter = EasyCreate("testdata/testWrite.dna.gz") 97 98 for i := 0; i < 10000; i++ { 99 writeDnaFileio(ew) 100 } 101 ew.Close() 102 } 103 } 104 105 func BenchmarkWriteIo(b *testing.B) { 106 for n := 0; n < b.N; n++ { 107 var ew *EasyWriter = EasyCreate("testdata/testWrite.dna") 108 109 for i := 0; i < 10000; i++ { 110 writeDnaIo(ew) 111 } 112 ew.Close() 113 } 114 } 115 116 func BenchmarkWriteIoGz(b *testing.B) { 117 for n := 0; n < b.N; n++ { 118 var ew *EasyWriter = EasyCreate("testdata/testWrite.dna.gz") 119 120 for i := 0; i < 10000; i++ { 121 writeDnaIo(ew) 122 } 123 ew.Close() 124 } 125 } 126 127 func BenchmarkWriteFile(b *testing.B) { 128 for n := 0; n < b.N; n++ { 129 osf, err := os.Create("testdata/testWrite.dna") 130 exception.PanicOnErr(err) 131 132 for i := 0; i < 10000; i++ { 133 writeDnaFile(osf) 134 } 135 osf.Close() 136 } 137 } 138 139 var testfile2 string = "testdata/smallTest" 140 var line4 string = "#shhhh this line is a secret" 141 var line5 string = "Hello World" 142 var line6 string = "I am a gopher" 143 144 func TestRead(t *testing.T) { 145 file := Read(testfile2) 146 if file[0] != line5 { 147 t.Errorf("problem with read") 148 } 149 if file[1] != line6 { 150 t.Errorf("problem with read") 151 } 152 } 153 154 func TestWrite(t *testing.T) { 155 var createdFile string 156 var err error 157 createdFile = "test.txt" 158 var fileContent []string = []string{line4, line5, line6} 159 Write(createdFile, fileContent) 160 if !AreEqual(testfile, createdFile) { 161 t.Errorf("problem with fileio.Write()") 162 } else { 163 err = os.Remove("test.txt") 164 exception.PanicOnErr(err) 165 } 166 }