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  }