Created
April 30, 2016 14:38
-
-
Save ihfazhillah/c84364053c05f06912eed1b15ee51c75 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import unittest | |
class Aritmatik(object): | |
"""Aritmatik sederhana. | |
Penggunaan: | |
Buat instance dahulu dari objek Aritmatik, mempunyai value | |
optional berupa *initial_int* bila anda tidak berikan maka | |
default adalah 0 | |
>>> aritmatik = Aritmatik(100) | |
Misalkan, kita ingin mengerjakan: | |
(100 + 3 - 10) * 2 : 1 | |
cara pengerjaan: | |
>>> aritmatik.tambah(3).kurang(10).kali(2).bagi(1) | |
penjelasan: | |
Kita tidak perlu memberikan angka 100, karena kita sudah inisiasi | |
diawal. | |
""" | |
def __init__(self, initial_int=0): | |
self.initial_int = initial_int | |
self.result = initial_int | |
def __repr__(self): | |
return str(self.result) | |
def __add__(self, num): | |
return self.result + num | |
def __mul__(self, num): | |
return self.result * num | |
def __sub__(self, num): | |
return self.result - num | |
def __truediv__(self, num): | |
# pakai __div__ akan mereturn error unsupported opperand | |
# maka disarankan untuk menggunakan __truediv__ | |
# http://stackoverflow.com/questions/22948699/typeerror-unsupported-operand-types-for-instance-and-instance-and-tr | |
return self.result / num | |
def _copy(self): | |
import copy | |
return copy.deepcopy(self) | |
def tambah(self, num): | |
a = self._copy() | |
a.result += num | |
return a | |
def kali(self, num): | |
a = self._copy() | |
a.result *= num | |
return a | |
def kurang(self, num): | |
a = self._copy() | |
a.result -= num | |
return a | |
def bagi(self, num): | |
a = self._copy() | |
a.result //= num | |
return a | |
class AritmatikTestCase(unittest.TestCase): | |
def setUp(self): | |
self.iseng = Aritmatik(12) | |
def tearDown(self): | |
pass | |
def test_initial_int_is_12(self): | |
self.assertEqual(self.iseng.initial_int, 12) | |
def test_result_is_12(self): | |
self.assertEqual(self.iseng.result, 12) | |
def test_add_8_is_20(self): | |
result = self.iseng.tambah(8) | |
self.assertEqual(str(result), str(20)) | |
def test_add_then_multiply(self): | |
result = self.iseng.tambah(8).kali(2) | |
self.assertEqual(str(result), str(40)) | |
def test_tambah_kemudian_kurang(self): | |
result = self.iseng.tambah(4).kurang(5) | |
self.assertEqual(str(result), str(11)) | |
def test_tambah_kemudian_bagi(self): | |
result = self.iseng.tambah(4).bagi(8) | |
self.assertEqual(str(result), str(2)) | |
def test_kurang_kemudian_tambah(self): | |
result = self.iseng.kurang(2).tambah(5) | |
self.assertEqual(str(result), str(15)) | |
def test_kurang_kemudian_kali(self): | |
result = self.iseng.kurang(2).kali(50) | |
self.assertEqual(str(result), str(500)) | |
def test_kurang_kemudian_kurang(self): | |
result = self.iseng.kurang(10).kurang(2) | |
self.assertEqual(str(result), str(0)) | |
def test_kurang_kemudian_bagi(self): | |
result = self.iseng.kurang(2).bagi(2) | |
self.assertEqual(str(result), str(5)) | |
def test_kali_kemudian_tambah(self): | |
result = self.iseng.kali(2).tambah(6) | |
self.assertEqual(str(result), str(30)) | |
def test_hasil_ditambah_dengan_operator_tambah(self): | |
result = self.iseng.kali(1) + 2 | |
self.assertEqual(result, 14) | |
def test_hasil_dikali_dengan_operator_kali(self): | |
result = self.iseng.kurang(10) * 2 | |
self.assertEqual(result, 4) | |
def test_hasil_dikurang_dengan_operator_kurang(self): | |
result = self.iseng.bagi(6) - 1 | |
self.assertEqual(result, 1) | |
def test_hasil_dibagi_dengan_operator_bagi(self): | |
result = self.iseng.bagi(4) / 2 | |
self.assertEqual(result, 1.5) | |
# === shortcut === | |
aritmatik = Aritmatik() | |
if __name__ == "__main__": | |
a1 = aritmatik | |
a2 = aritmatik | |
print(a1.tambah(3) == a2.tambah(3)) | |
print("aritmatik mempunyai initial 0 " | |
"Kemudian untuk menambahkan dengan dua " | |
"maka menggunakan aritmatik.tambah(2) ") | |
print() | |
print("{initial} + {tambahan} = {hasil}".format( | |
initial=aritmatik, | |
tambahan=2, | |
hasil=aritmatik.tambah(2))) | |
unittest.main() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment