Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Spesifikasi sesuai versi 0.2.0 #2

Draft
wants to merge 7 commits into
base: main
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
30 changes: 30 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,3 +6,33 @@ Repositori ini terdiri atas 2 cabang utama:

- `main`: berisi kode spesifikasi Gara untuk versi Gara yang telah dirilis untuk khalayak umum
- `lokal`: berisi kode spesifikasi untuk versi Gara yang sedang dalam tahap pengembangan

## Konvensi Penulisan

- Gunakan `sidang` dan kelas yang akan disidang
- Gunakan `tentang` dan metode/perilaku yang akan disidang
- Gunakan `saat` untuk menyidang perilaku yang sangat spesifik
- Gunakan `ia` untuk melakukan penyidangan tingkah laku sesuai kondisi
- Fungsi statis dideskripsikan dengan tanda `#`:

```gr
tentang("#dariKata/1", fn () {
ia("dapat berkata-kata", fn () {
// ...
})
})
```

- Fungsi instansi dideskripsikan dengan tanda "."
- Fungsi yang sedang dites perlu dideskripsikan aritasnya, misal: `#baru/1`, `.desimal/1`
- Untuk ekspektasi masalah, gunakan `coba` - `tahan` sebagai berikut:

```gr
tuntut coba {
sesuatuYangBermasalah()
salah
} tahan (e) {
tuntut e.pesan == "pesan"
} == benar
```
- Tes fungsi diurutkan secara alfabetis
2 changes: 1 addition & 1 deletion sidang_coba.gr
Original file line number Diff line number Diff line change
Expand Up @@ -95,7 +95,7 @@ sidang("Ekspresi coba", fn () {
}

tuntut masalah1.pesan() == "objek tipe Kelas tidak memiliki metode `baru` yang bisa dipanggil"
tuntut masalah2.pesan() == "hanya bisa dipanggil dengan 1 argumen"
tuntut masalah2.pesan() == "aripicu hanya bisa dipicu dengan 1 argumen"
})

ia("variabel pengenal pada blok penahan bisa shadowing variabel dengan pengenal yang sama", fn () {
Expand Down
2 changes: 1 addition & 1 deletion sidang_deret.gr
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ sidang(Deret, fn () {
[].awal(1)
} tahan (e) {
tuntut e itu MasalahArgumen
tuntut e.pesan().berisi?("`awal` hanya bisa dipanggil dengan tanpa argumen")
tuntut e.pesan().berisi?("`awal` hanya bisa dipicu dengan tanpa argumen")
benar
}

Expand Down
2 changes: 1 addition & 1 deletion sidang_fungsi.gr
Original file line number Diff line number Diff line change
Expand Up @@ -207,7 +207,7 @@ sidang(Fungsi, fn () {
salah
} tahan (e) {
tuntut e itu MasalahArgumen
tuntut e.pesan() == "hanya bisa dipanggil dengan 2 argumen"
tuntut e.pesan() == "aripicu hanya bisa dipicu dengan 2 argumen"
} == benar
})

Expand Down
39 changes: 39 additions & 0 deletions sidang_integer.gr
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,45 @@ sidang(Integer, fn () {
tuntut !(satu itu Kelas)
})

tentang("penggunaan tanda hubung `_`", fn () {
ia("bisa dilakukan ditengah angka", fn () {
tuntut 1_2 == 12
tuntut 123_000 == 123000
tuntut 123_0 == 1230
tuntut 123_456_789 == 123456789
})

ia("tidak bisa dilakukan diawal angka", fn () {
tuntut coba {
_123
salah
} tahan (e) {
tuntut e.pesan == "pengenal `_123` tidak ditemukan atau belum terdefinisikan"
benar
} == benar
})

ia("tidak bisa dilakukan diakhir angka", fn () {
tuntut coba {
eval!("123_")
salah
} tahan (e) {
tuntut e.pesan == "angka `123_` tidak dimengerti"
benar
} == benar
})

ia("tidak bisa bersambungan", fn () {
tuntut coba {
eval!("1__2")
salah
} tahan (e) {
tuntut e.pesan == "angka `1__2` tidak dimengerti"
benar
} == benar
})
})

ia(".mutlak() mengutus nilai non-negatif", fn () {
tuntut 5.mutlak() == 5
tuntut -5.mutlak() == 5
Expand Down
8 changes: 4 additions & 4 deletions sidang_kata.gr
Original file line number Diff line number Diff line change
Expand Up @@ -152,7 +152,7 @@ sidang(Kata, fn () {

ia(".cari(arg1) menemukan posisi dimana Kata dapat ditemukan dalam Kata untuk pertama kalinya", fn () {
tuntut coba { "".cari(1) } tahan (e) { e.pesan().berisi?("tidak dapat menerima Integer") }
tuntut coba { "".cari("1", "2") } tahan (e) { e.pesan().berisi?("`cari` hanya bisa dipanggil dengan 1 argumen") }
tuntut coba { "".cari("1", "2") } tahan (e) { e.pesan().berisi?("`cari` hanya bisa dipicu dengan 1 argumen") }

tuntut "foobar".cari("") == 0
tuntut "foobar".cari("foo") == 0
Expand Down Expand Up @@ -227,7 +227,7 @@ sidang(Kata, fn () {
})

ia(".kecil() menjadikan seluruh karakter berhuruf kecil", fn () {
tuntut coba { "".kecil(1) } tahan (e) { e.pesan().berisi?("`kecil` hanya bisa dipanggil dengan tanpa argumen") }
tuntut coba { "".kecil(1) } tahan (e) { e.pesan().berisi?("`kecil` hanya bisa dipicu dengan tanpa argumen") }

tuntut "ABC".kecil() == "abc"
tuntut "Abc".kecil() == "abc"
Expand Down Expand Up @@ -280,7 +280,7 @@ sidang(Kata, fn () {
})

ia(".panjang() memberi informasi jumlah karakter dalam kata", fn () {
tuntut coba { "".panjang(1) } tahan (e) { e.pesan().berisi?("`panjang` hanya bisa dipanggil dengan tanpa argumen") }
tuntut coba { "".panjang(1) } tahan (e) { e.pesan().berisi?("`panjang` hanya bisa dipicu dengan tanpa argumen") }

tuntut "".panjang() == 0
tuntut "1".panjang() == 1
Expand Down Expand Up @@ -309,7 +309,7 @@ sidang(Kata, fn () {
})

ia(".rapi() menghapus seluruh karakter spasi diawal dan diakhir Kata", fn () {
tuntut coba { "".rapi(1) } tahan (e) { e.pesan().berisi?("`rapi` hanya bisa dipanggil dengan tanpa argumen") }
tuntut coba { "".rapi(1) } tahan (e) { e.pesan().berisi?("`rapi` hanya bisa dipicu dengan tanpa argumen") }

tuntut " Gara ".rapi() == "Gara"
tuntut " G a r a ".rapi() == "G a r a"
Expand Down
53 changes: 51 additions & 2 deletions sidang_kelas.gr
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,42 @@ sidang(Kelas, fn () {
tuntut a.a == 12
})

tentang("sifat `tetap`", fn () {
ia("membuat kelas tidak bisa diperkaya setelah pendefinisian", fn () {
tidakAda!(fn () { A })

kelas tetap A {
ada a
}

ada a = A.baru
tuntut a.a == nil

tuntut coba {
kelas A { ada b }
salah
} tahan (e) {
tuntut e.pesan == "kelas `A` tidak dapat diperkaya karena telah bersifat tetap"
benar
} == benar
})

ia("tidak bisa disematkan pada kelas yang telah terdefinisikan", fn () {
tidakAda!(fn () { A })

kelas A {}
tuntut A.tetap? == salah

tuntut coba {
kelas tetap A {}
salah
} tahan (e) {
tuntut e.pesan == "dilarang menambahkan sifat tetap ke kelas `A` yang telah didefinisikan"
benar
} == benar
})
})

tentang("nama", fn () {
ia("harus diawali huruf kapital", fn () {
tuntut coba {
Expand Down Expand Up @@ -81,6 +117,19 @@ sidang(Kelas, fn () {
tuntut 1.kelas() != Angka
})

tentang(".tetap?", fn () {
ia("mengutus `benar` jika kelas bersifat tetap", fn () {
tidakAda!(fn () { A })
tidakAda!(fn () { B })

kelas tetap A {}
kelas B {}

tuntut A.tetap? == benar
tuntut B.tetap? == salah
})
})

tentang("metode", fn () {
ia("bisa dipanggil dengan ini", fn () {
tidakAda!(fn () { A })
Expand Down Expand Up @@ -1010,7 +1059,7 @@ sidang(Kelas, fn () {
salah
} tahan (e) {
tuntut e itu Masalah
tuntut e.pesan() == "`sapa` adalah metode pribadi kelas Penyapa yang hanya bisa dipanggil dari dalam"
tuntut e.pesan() == "`sapa` adalah metode pribadi kelas Penyapa yang hanya bisa dipicu dari dalam"
benar
} == benar

Expand Down Expand Up @@ -1045,7 +1094,7 @@ sidang(Kelas, fn () {
A.baru().b()
salah
} tahan (e) {
tuntut e.pesan() == "`a` adalah metode pribadi kelas A yang hanya bisa dipanggil dari dalam"
tuntut e.pesan() == "`a` adalah metode pribadi kelas A yang hanya bisa dipicu dari dalam"
benar
} == benar
})
Expand Down
36 changes: 33 additions & 3 deletions sidang_kelas_penurunan.gr
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,37 @@ sidang("Penurunan `kelas`", fn () {
tuntut A2.moyang.berisi?(Objek) == benar
})

tentang("kelas telah terdefinisikan", fn () {
ia("bisa bersifat tetap", fn () {
tidakAda!(fn () { A })
tidakAda!(fn () { B })

kelas A { ada a = "a" }
kelas tetap B -> A { ada b = "b" }

tuntut B.tetap?
ada b = B.baru
tuntut b.a == "a"
tuntut b.b == "b"
})

saat("menurun dari kelas yang bersifat tetap", fn () {
ia("tidak bisa dilakukan", fn () {
tidakAda!(fn () { A })
tidakAda!(fn () { B })

kelas tetap A {}

tuntut coba {
kelas B -> A {}
salah
} tahan (e) {
tuntut e.pesan == "kelas punca `A` tidak dapat diturunkan karena telah bersifat tetap"
benar
} == benar
})
})

saat("kelas telah terdefinisikan", fn () {
ia("bermasalah jika kelas punca berbeda", fn () {
tuntut coba {
kelas Masalah -> Riil {}
Expand Down Expand Up @@ -390,7 +420,7 @@ sidang("Penurunan `kelas`", fn () {
B.baru().a()
salah
} tahan (e) {
tuntut e.pesan == "`a` adalah metode pribadi kelas B yang hanya bisa dipanggil dari dalam"
tuntut e.pesan == "`a` adalah metode pribadi kelas B yang hanya bisa dipicu dari dalam"
benar
} == benar
})
Expand Down Expand Up @@ -547,7 +577,7 @@ sidang("Penurunan `kelas`", fn () {
B.a()
salah
} tahan (e) {
tuntut e.pesan == "`a` adalah fungsi statis bersifat pribadi kelas B yang hanya bisa dipanggil dari dalam"
tuntut e.pesan == "`a` adalah fungsi statis bersifat pribadi kelas B yang hanya bisa dipicu dari dalam"
benar
} == benar
})
Expand Down
4 changes: 2 additions & 2 deletions sidang_kelas_statis.gr
Original file line number Diff line number Diff line change
Expand Up @@ -664,7 +664,7 @@ sidang("Statis pada `kelas`", fn () {
A.b()
salah
} tahan (e) {
tuntut e.pesan() == "`b` adalah fungsi statis bersifat pribadi kelas A yang hanya bisa dipanggil dari dalam"
tuntut e.pesan() == "`b` adalah fungsi statis bersifat pribadi kelas A yang hanya bisa dipicu dari dalam"
benar
} == benar
})
Expand Down Expand Up @@ -745,7 +745,7 @@ sidang("Statis pada `kelas`", fn () {
A.baru()
salah
} tahan (e) {
tuntut e.pesan() == "`baru` adalah fungsi statis bersifat pribadi kelas A yang hanya bisa dipanggil dari dalam"
tuntut e.pesan() == "`baru` adalah fungsi statis bersifat pribadi kelas A yang hanya bisa dipicu dari dalam"
benar
} == benar
})
Expand Down
Loading