73 lines
1.9 KiB
Go
73 lines
1.9 KiB
Go
|
package letter
|
||
|
|
||
|
import (
|
||
|
"reflect"
|
||
|
"testing"
|
||
|
)
|
||
|
|
||
|
// In the separate file frequency.go, you are given a function, Frequency(),
|
||
|
// to sequentially count letter frequencies in a single text.
|
||
|
// Perform this exercise on parallelism using Go concurrency features.
|
||
|
// Make concurrent calls to Frequency and combine results to obtain the answer.
|
||
|
|
||
|
func TestConcurrentFrequency(t *testing.T) {
|
||
|
seq := Frequency(euro + dutch + us)
|
||
|
con := ConcurrentFrequency([]string{euro, dutch, us})
|
||
|
if !reflect.DeepEqual(con, seq) {
|
||
|
t.Fatal("ConcurrentFrequency wrong result")
|
||
|
}
|
||
|
}
|
||
|
|
||
|
var (
|
||
|
euro = `Freude schöner Götterfunken
|
||
|
Tochter aus Elysium,
|
||
|
Wir betreten feuertrunken,
|
||
|
Himmlische, dein Heiligtum!
|
||
|
Deine Zauber binden wieder
|
||
|
Was die Mode streng geteilt;
|
||
|
Alle Menschen werden Brüder,
|
||
|
Wo dein sanfter Flügel weilt.`
|
||
|
dutch = `Wilhelmus van Nassouwe
|
||
|
ben ik, van Duitsen bloed,
|
||
|
den vaderland getrouwe
|
||
|
blijf ik tot in den dood.
|
||
|
Een Prinse van Oranje
|
||
|
ben ik, vrij, onverveerd,
|
||
|
den Koning van Hispanje
|
||
|
heb ik altijd geëerd.`
|
||
|
us = `O say can you see by the dawn's early light,
|
||
|
What so proudly we hailed at the twilight's last gleaming,
|
||
|
Whose broad stripes and bright stars through the perilous fight,
|
||
|
O'er the ramparts we watched, were so gallantly streaming?
|
||
|
And the rockets' red glare, the bombs bursting in air,
|
||
|
Gave proof through the night that our flag was still there;
|
||
|
O say does that star-spangled banner yet wave,
|
||
|
O'er the land of the free and the home of the brave?`
|
||
|
)
|
||
|
|
||
|
func BenchmarkConcurrentFrequency(b *testing.B) {
|
||
|
b.StopTimer()
|
||
|
var bTest []string
|
||
|
for i := 0; i < 5; i++ {
|
||
|
bTest = append(bTest, euro)
|
||
|
bTest = append(bTest, dutch)
|
||
|
bTest = append(bTest, us)
|
||
|
}
|
||
|
b.StartTimer()
|
||
|
ConcurrentFrequency(bTest)
|
||
|
b.StopTimer()
|
||
|
}
|
||
|
|
||
|
func BenchmarkMyConcurrentFrequency(b *testing.B) {
|
||
|
b.StopTimer()
|
||
|
var bTest []string
|
||
|
for i := 0; i < 5; i++ {
|
||
|
bTest = append(bTest, euro)
|
||
|
bTest = append(bTest, dutch)
|
||
|
bTest = append(bTest, us)
|
||
|
}
|
||
|
b.StartTimer()
|
||
|
MyConcurrentFrequency(bTest)
|
||
|
b.StopTimer()
|
||
|
}
|