From ef65c5dcc4be8be568576da8759d3147acc46b52 Mon Sep 17 00:00:00 2001 From: arfy slowy Date: Tue, 1 Oct 2024 01:54:33 +0700 Subject: [PATCH] fix: memperbaiki unittesting (#1) Signed-off-by: slowy07 --- CONTRIBUTING.md | 34 ++++++++++++++++++++++++++++++++++ config.nims | 49 +++++++++++++++++++++++++++++++++++++++++++++++++ math/abs.nim | 4 ++-- 3 files changed, 85 insertions(+), 2 deletions(-) create mode 100644 config.nims diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 0706768..103a8ec 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -18,6 +18,40 @@ Algoritma adalah satu atau lebih fungsi dan/atau kelas yang: - melakukan beberapa internal kalkulasi atau manipulasi data; - mengembalikan satu atau lebih nilai hasil; +## Unittesting + +Kami menggunakan kustom unittesting yang sudah terkonfigurasi di `config.nims` yang dimana tiap file kamu hanya menambahkan `suite test dari nim sebagai contoh` + +```nim + +# unittesting ini ditambahkan di akhir setelah inisialisasi +# fungsi sudah dibuat +# ketika file dijalankan sebagain main +when isMainModule: + # import lib unittest + import std/[unittest] + + suite "Testing Beberapa Kasus": + test "test fungsi pertama": + check: + testFungsiPertama(10) == 10 + testFungsiKedua(1) != 2 + + suite "Testing Kasus Lain": + test "test fungsi lain": + check: + testFungsiPertama(20) != 300 + + test "test fungsi jika valuenya lain": + doAssertRaises(ValueError): + discard testFungsiPertama(3.0) +``` +Setelah itu lakukan perintah +``` +nim config.nims +nim test +``` + ## Tambahan Perubahan Jika ingin menambahkan algoritma atau *script* Nim yang sederhana atau menambahkan kode yang sederhana, kamu bisa menambahkan perubahan di folder `other`. Jika terdapat beberapa *file*, sebaiknya *file-file* tersebut ke dalam folder sesuai dengan nama *script* tersebut sebagai contoh: diff --git a/config.nims b/config.nims new file mode 100644 index 0000000..c078d62 --- /dev/null +++ b/config.nims @@ -0,0 +1,49 @@ +if defined(release) or defined(danger): + --opt: speed + --passC: "-flto" + --passL: "-flto" + --passL: "-s" +else: + --checks: on + --assertions: on + --spellSuggest + --styleCheck: error + +--mm:arc + +import std/[os, sequtils] +from std/strutils import startsWith, endsWith +from std/strformat import `&` + +const IgnorePathPrefixes = ["."] + +func isIgnored(path: string): bool = + IgnorePathPrefixes.mapIt(path.startsWith(it)).anyIt(it) + +iterator modules(dir: string = getCurrentDir()): string = + for path in walkDirRec(dir, relative = true): + if not path.isIgnored() and path.endsWith(".nim"): + yield path + +############ Tasks +task test, "Test semuanya": + --warning: "BareExcept:off" + --hints: off + var failedUnits: seq[string] + + for path in modules(): + echo &"Testing {path}:" + try: selfExec(&"-f --warning[BareExcept]:off --hints:off r \"{path}\"") + except OSError: + failedUnits.add(path) + if failedUnits.len > 0: + echo "Test yang Gagal:" + for path in failedUnits: + echo &"- {path}" + quit(1) + else: + echo "Semua Test Berjalan dengan baik" + +task prettyfy, "Run nimpretty untuk semua file": + for path in modules(): + exec(&"nimpretty --indent:2 \"{path}\"") diff --git a/math/abs.nim b/math/abs.nim index 8a138f5..833dc03 100644 --- a/math/abs.nim +++ b/math/abs.nim @@ -13,7 +13,7 @@ func absVal*[T: SomeInteger](angka: T): Natural = (if angka < 0: -angka else: angka) func absMin*(x: openArray[int]): Natural {.raises: [ValueError].} = - # mengembalikan nilai element terkecil dari nilai absolute dalam sebuah sekuens + # mengembalkan nilai element terkecil dari nilai absolute dalam sebuah sekuens if x.len == 0: raise newException(ValueError, "Tidak bisa menemukan nilai absolut terkecil") result = absVal(x[0]) @@ -56,7 +56,7 @@ when isMainModule: test "test fungsi absMax": check: absMax(@[0, 5, 1, 11]) == 11 - absMax(@[-1, 2, -3]) = 3 + absMax(@[-1, 2, -3]) == 3 test "`absMax` jika sekuensnya kosong": doAssertRaises(ValueError):