Skip to content

Commit 96bc41c

Browse files
committed
feat(select): add test code to README
docs(concurrency): add code block to README test(concurrency): add test and benchmark for website checker
1 parent d2ce2d9 commit 96bc41c

File tree

3 files changed

+82
-6
lines changed

3 files changed

+82
-6
lines changed

concurrency/REAME.md

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,3 +6,43 @@
66

77
golang 採用 user level 的執行緒,並且由 goroutine scheduler 來分配執行任務給 os level 的執行序來執行
88

9+
## code
10+
11+
```golang
12+
func TestCheckWebsites(t *testing.T) {
13+
websites := []string{
14+
"http://google.com",
15+
"http://blog.gypsydave5.com",
16+
"waat://furhurerme.geds",
17+
}
18+
want := map[string]bool{
19+
"http://google.com": true,
20+
"http://blog.gypsydave5.com": true,
21+
"waat://furhurerme.geds": false,
22+
}
23+
24+
got := CheckWebsites(mockWebsiteChecker, websites)
25+
if !reflect.DeepEqual(want, got) {
26+
t.Fatalf("want %v, got %v", want, got)
27+
}
28+
}
29+
30+
func slowSubWebsiteChecker(_ string) bool {
31+
time.Sleep(20 * time.Millisecond)
32+
return true
33+
}
34+
35+
func BenchmarkCheckWebsites(b *testing.B) {
36+
urls := make([]string, 100)
37+
for i := 0; i < len(urls); i++ {
38+
urls[i] = "a url"
39+
}
40+
for b.Loop() {
41+
CheckWebsites(slowSubWebsiteChecker, urls)
42+
}
43+
}
44+
```
45+
46+
## This test would be add later
47+
48+
This is for test ai commit

select/README.md

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,3 +5,45 @@
55

66
這時可以透過 select 語法來最有效的等候多個 channel 的傳遞資訊
77

8+
## code
9+
10+
```golang
11+
func TestRacer(t *testing.T) {
12+
t.Run("compares speeds of servers, returning the url of the fastest one", func(t *testing.T) {
13+
slowServer := makeDelayServer(5 * time.Millisecond)
14+
fastServer := makeDelayServer(0 * time.Millisecond)
15+
defer slowServer.Close()
16+
defer fastServer.Close()
17+
slowURL := slowServer.URL
18+
fastURL := fastServer.URL
19+
want := fastURL
20+
got, err := Racer(slowURL, fastURL)
21+
if err != nil {
22+
t.Errorf("error should be nit")
23+
}
24+
if got != want {
25+
t.Errorf("got %q, want %q", got, want)
26+
}
27+
})
28+
t.Run("returns an error if a server doesn't respond within the specified time", func(t *testing.T) {
29+
server := makeDelayServer(25 * time.Millisecond)
30+
31+
defer server.Close()
32+
33+
_, err := ConfigurableRacer(server.URL, server.URL, 20*time.Millisecond)
34+
35+
if err == nil {
36+
t.Error("expected an error but didn't get one")
37+
}
38+
})
39+
}
40+
41+
func makeDelayServer(timeout time.Duration) *httptest.Server {
42+
return httptest.NewServer(http.HandlerFunc(
43+
func(w http.ResponseWriter, r *http.Request) {
44+
time.Sleep(timeout)
45+
w.WriteHeader(http.StatusOK)
46+
},
47+
))
48+
}
49+
```

select/select.go

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -22,12 +22,6 @@ func Racer(a, b string) (string, error) {
2222
return ConfigurableRacer(a, b, tenSecondTimeout)
2323
}
2424

25-
func measureResponseTime(url string) time.Duration {
26-
start := time.Now()
27-
http.Get(url)
28-
return time.Since(start)
29-
}
30-
3125
func ping(url string) chan struct{} {
3226
ch := make(chan struct{})
3327
go func() {

0 commit comments

Comments
 (0)