diff options
Diffstat (limited to 'test/bench/k-nucleotide-parallel.go')
-rw-r--r-- | test/bench/k-nucleotide-parallel.go | 157 |
1 files changed, 0 insertions, 157 deletions
diff --git a/test/bench/k-nucleotide-parallel.go b/test/bench/k-nucleotide-parallel.go deleted file mode 100644 index 96c80d8f0..000000000 --- a/test/bench/k-nucleotide-parallel.go +++ /dev/null @@ -1,157 +0,0 @@ -/* -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - * Neither the name of "The Computer Language Benchmarks Game" nor the - name of "The Computer Language Shootout Benchmarks" nor the names of - its contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE -LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -POSSIBILITY OF SUCH DAMAGE. -*/ - -/* The Computer Language Benchmarks Game - * http://shootout.alioth.debian.org/ - * - * contributed by The Go Authors. - */ - -package main - -import ( - "bufio" - "bytes" - "fmt" - "io/ioutil" - "os" - "runtime" - "sort" -) - -func count(data string, n int) map[string]int { - counts := make(map[string]int) - top := len(data) - n - for i := 0; i <= top; i++ { - s := data[i : i+n] - counts[s]++ - } - return counts -} - -func countOne(data string, s string) int { - return count(data, len(s))[s] -} - -type kNuc struct { - name string - count int -} - -type kNucArray []kNuc - -func (kn kNucArray) Len() int { return len(kn) } -func (kn kNucArray) Swap(i, j int) { kn[i], kn[j] = kn[j], kn[i] } -func (kn kNucArray) Less(i, j int) bool { - if kn[i].count == kn[j].count { - return kn[i].name > kn[j].name // sort down - } - return kn[i].count > kn[j].count -} - -func sortedArray(m map[string]int) kNucArray { - kn := make(kNucArray, len(m)) - i := 0 - for k, v := range m { - kn[i] = kNuc{k, v} - i++ - } - sort.Sort(kn) - return kn -} - -func printKnucs(a kNucArray) { - sum := 0 - for _, kn := range a { - sum += kn.count - } - for _, kn := range a { - fmt.Printf("%s %.3f\n", kn.name, 100*float64(kn.count)/float64(sum)) - } - fmt.Print("\n") -} - -func main() { - runtime.GOMAXPROCS(4) - in := bufio.NewReader(os.Stdin) - three := []byte(">THREE ") - for { - line, err := in.ReadSlice('\n') - if err != nil { - fmt.Fprintln(os.Stderr, "ReadLine err:", err) - os.Exit(2) - } - if line[0] == '>' && bytes.Equal(line[0:len(three)], three) { - break - } - } - data, err := ioutil.ReadAll(in) - if err != nil { - fmt.Fprintln(os.Stderr, "ReadAll err:", err) - os.Exit(2) - } - // delete the newlines and convert to upper case - j := 0 - for i := 0; i < len(data); i++ { - if data[i] != '\n' { - data[j] = data[i] &^ ' ' // upper case - j++ - } - } - str := string(data[0:j]) - - var arr1, arr2 kNucArray - countsdone := make(chan bool) - go func() { - arr1 = sortedArray(count(str, 1)) - countsdone <- true - }() - go func() { - arr2 = sortedArray(count(str, 2)) - countsdone <- true - }() - - interests := []string{"GGT", "GGTA", "GGTATT", "GGTATTTTAATT", "GGTATTTTAATTTATAGT"} - results := make([]chan string, len(interests)) - for i, s := range interests { - ch := make(chan string) - results[i] = ch - go func(result chan string, ss string) { - result <- fmt.Sprintf("%d %s\n", countOne(str, ss), ss) - }(ch, s) - } - <-countsdone - <-countsdone - printKnucs(arr1) - printKnucs(arr2) - for _, rc := range results { - fmt.Print(<-rc) - } - -} |