Skip to content

Instantly share code, notes, and snippets.

@ihfazhillah
Created April 30, 2016 14:38
Show Gist options
  • Save ihfazhillah/c84364053c05f06912eed1b15ee51c75 to your computer and use it in GitHub Desktop.
Save ihfazhillah/c84364053c05f06912eed1b15ee51c75 to your computer and use it in GitHub Desktop.
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