Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using LinearAlgebra # do operacji macierzowych i testowania
- using RandomNumbers.MersenneTwisters # do MT19937()
- using Printf
- # test na macierzach.
- # f: funkcja zwracającą wynik do przetestowania z testem
- # name: nazwa metody liczącej rząd macierzy
- # rng: generator liczb losowych. Można przekazać np. MT19937(<seed>) aby generować te same zestawy losowych danych
- # exact_f: funkcja do liczenia dokładnego wyniku, chyba że test zawiera pole `exact`, wtedy to ono jest użyte
- # equal_f: opcjonalne do porównywania wartości wyliczonej przez f() i exact_f() lub test.exact. Domyślnie: ==
- function test(f, f_name, exact_f; rng=nothing, equal_f=(x, y)->x==y)
- local _rand = rng==nothing ? rand : (args...)->rand(rng, args...) # custom rand if generator is set
- @printf(">>> Random test ID: [\e[1;35m%.16f\e[m]\n", _rand())
- function _do_test(test)
- local exact, computed = haskey(test, :exact) ? test.exact : exact_f(test.M), f(test.M)
- local success = equal_f(exact, computed)
- @printf("[%5s] [exact:\t%3d] [%s:\t%3d] <<< %s\n",
- success ? "\e[1;32mPASS\e[m" : "\e[1;31mFAIL\e[m", exact, f_name, computed, test.desc)
- end
- # test data
- local zero_100x100 = zeros(Float64, 100, 100)
- local Id_100x100 = Matrix{Float64}(I, 100, 100)
- # tests consist of fieds M=matrix, desc=description of test and exact=wanted
- local tests = [
- (M=zero_100x100, exact=0, desc="Zero 100x100 matrix")
- (M=Id_100x100, desc="Identity 100x100 matrix")
- ]
- @printf("> Hardcoded tests:\n")
- for test in tests
- _do_test(test)
- end
- flush(stdout)
- @printf(">>> TESTS END\n")
- end
Add Comment
Please, Sign In to add comment