2012-04-06 14 views
5

Próbuję użyć pakietu Go "time" do przetestowania funkcji w moim programie. Szukałem w pobliżu, a ludzie wydają się używać czasu.NanoSeconds() - ale myślę, że ta funkcja nie jest już w pakiecie czasu?Kod testu porównawczego za pomocą StopWatcha lub podobnego

Potrzebuję łatwego sposobu na uruchomienie i zatrzymanie stopera i wydrukowanie wartości.

+0

Wierzę, że funkcja jest teraz odpowiednikiem 'time.Now(). UnixNano()'. – Ashe

Odpowiedz

9

wykorzystać istniejącą funkcjonalność pakietu testing wewnątrz swojej * _test.go:

func BenchmarkMyFunc(b *testing.B) { 
    for i := 0; i < b.N; i++ { 
     myBecnhmarkedFunction() 
    } 
} 

i powołać go test -bench RE (RE jest wyrażeniem regularnym, aby wybrać ławki, jak B ponieważ oznacza *B*) typowo wewnątrz opakowania/tool directory

Albo jawnie z dowolnego miejsca w kodzie - użyj funkcji Benchmark.

+1

Dzięki za odpowiedź! Zanim przeczytałem twoją odpowiedź, znalazłem łatwy przykład, jak używać pakietu czasu Go, co było dla mnie wystarczające. Przyjrzę się również funkcji testu porównawczego. 't0: = time.Now() expensiveCall() t1: = time.Now() fmt.Printf (" Wywołanie zajęło% v. \ N ", t1.Sub (t0))' – shaz

+1

To podejście jest w porządku/dobrze/precyzyjnie wystarczy tylko dla 'expensiveCall()' wykonującego wystarczająco długo, jak w rządach wielkości razy dłuższych niż rozdzielczość czasu maszynowego. Pakiet testowy może obsłużyć dokładną synchronizację nanosekund poprzez adaptacyjną zmianę parametru b.N. – zzzz

+0

@shaz Możesz również użyć time.Since: t0: = time.Now(); expensiveCall(); println ("Time:", time.Since (t0)) – BurntSushi5