diff --git a/.github/workflows/zig.yml b/.github/workflows/zig.yml
index b4c0c02..83b1d31 100644
--- a/.github/workflows/zig.yml
+++ b/.github/workflows/zig.yml
@@ -31,7 +31,7 @@ jobs:
run: sh runtest.sh
- name: testing kode zig di windows
- if: (startsWith(matrix.runs-on, 'windows')
+ if: (startsWith(matrix.runs-on, 'windows'))
run: ./runtest.cmd
linting-kode-zig:
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index dffe98a..7b63453 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -62,6 +62,47 @@ zig fmt --check .
zig test namaFile.zig
```
+## memasukkan file testing ke dalam ``build.zig``
+
+kamu bisa menambahkan beberapa contoh kode algoritma selain dari basic, tetapi kamu harus mengikuti beberapa langkah antara lain:
+- contoh dari kode kamu memiliki testing seperti contoh
+ ```zig
+ const std = @import("std");
+
+ // fungsi untuk menghitung faktorial secara rekursif
+ fn faktorialRekursif(comptime T: type, n: T) T {
+ if (n < 2 and n > 0) return 1 else return n * faktorial(T, n - 1);
+ }
+
+ // testing faktorial rekursif
+ test "faktorial rekursif" {
+ try std.testing.expectEqual(@as(c_int, 720), faktorialRekursif(u64, 7));
+ try std.testing.expectEqual(@as(u64, 5040), faktorialRekursif(u64, 7));
+ }
+ ```
+ memiliki testing yang dapat mengetest dari fungsi tersebut
+- kemudian menempatkan struktur folder benar sebagai contoh
+ ```
+ ├── math
+ │ ├── faktorial.zig
+ ```
+- kemudian masukan hasil yang sudah kamu buat ke dalam file ``build.zig`` agar melakukan testing semua file test
+ ```zig
+ if (std.mem.eql(u8, op, "kategori/nama_algo"))
+ buat_algo(b, .{
+ .optimize = optimize,
+ .target = target,
+ .name = "nama_file_yang_kamu_tambahkan.zig",
+ .category = "nama_folder",
+ })
+ ```
+- kemudian kamu bisa menambahkan running testingnya pada ``runtest.sh`` dengan menambahkan
+ ```sh
+ # runtest.sh
+ $ZIG_TEST_COMMAND -Dalgoritma=folder/nama_algo $argumen
+ ```
+
+
# *Pull Request*
***Pull request* yang baik**
diff --git a/README.md b/README.md
index 5204199..d457b66 100644
--- a/README.md
+++ b/README.md
@@ -1,6 +1,5 @@
Part of Bellshade Project, managed by WPU Discord Community and Kelas terbuka Discord Community
- WPU Community is the fastest growing software developer forum initiated by Mr. Sandhika Galih and Mr. Faqihza Mukhlish
Repositori ini berisi kumpulan berbagai macam _source code_ struktur data, algorithm, analisis matematika, serta tutorial yang diimplementasikan dengan menggunakan bahasa pemograman Zig
diff --git a/build.zig b/build.zig
index 8b12d3b..2d932c5 100644
--- a/build.zig
+++ b/build.zig
@@ -17,6 +17,16 @@ pub fn build(b: *std.Build) void {
.name = "gcd.zig",
.category = "math",
});
+
+ // memilih folder berdasarkan opsi algoritma
+ // jika opsi adalah 'math/faktorial' maka fungsi buat_algo dipanggil untuk membuat algoritma faktorial
+ if (std.mem.eql(u8, op, "math/faktorial"))
+ buat_algo(b, .{
+ .optimize = optimize,
+ .target = target,
+ .name = "faktorial.zig",
+ .category = "math",
+ });
}
// fungsi untuk membangun algoritma berdasarkan informasi yang diberikan
diff --git a/math/faktorial.zig b/math/faktorial.zig
new file mode 100644
index 0000000..349ecd7
--- /dev/null
+++ b/math/faktorial.zig
@@ -0,0 +1,33 @@
+const std = @import("std");
+
+// fungsi untuk menghitung faktorial secara iteratif
+fn faktorial(comptime T: type, n: T) T {
+ var hasil: T = @as(T, 1);
+ var i: T = @as(T, 2);
+ while (i <= n) : (i += 1) hasil *= i;
+ return hasil;
+}
+
+// fungsi untuk menghitung faktorial secara rekursif
+fn faktorialRekursif(comptime T: type, n: T) T {
+ if (n < 2 and n > 0) return 1 else return n * faktorial(T, n - 1);
+}
+
+// fungsi untuk menghitung faktorial pada waktu kompilasi
+pub fn faktorialWaktuKompilasi(comptime T: type, n: T) T {
+ comptime var i = @as(T, 0);
+ inline while (i < 12) : (i += 1) if (i == n) return comptime faktorial(T, i);
+ return 1;
+}
+
+// testing untuk menguji fungsi faktorial pada saat kompilasi
+test "faktorial pada waktu kompilasi" {
+ try std.testing.expectEqual(@as(u32, 120), faktorialWaktuKompilasi(u32, 5));
+ try std.testing.expectEqual(@as(usize, 362880), faktorialWaktuKompilasi(usize, 9));
+}
+
+// testing faktorial rekursif
+test "faktorial rekursif" {
+ try std.testing.expectEqual(@as(c_int, 720), faktorialRekursif(c_int, 6));
+ try std.testing.expectEqual(@as(u64, 5040), faktorialRekursif(u64, 7));
+}
diff --git a/runtest.sh b/runtest.sh
index e316e03..7cb36c2 100644
--- a/runtest.sh
+++ b/runtest.sh
@@ -18,4 +18,5 @@ argumen='--summary all -freference-trace'
# lakukan testing salah satu folder dengan menggunakan perintah
# yang sudah dibuat
$ZIG_TEST_COMMAND -Dalgoritma=math/gcd $argumen
+$ZIG_TEST_COMMAND -Dalgoritma=math/faktorial $argumen