import unittest from modpow import modpow, modinv class TestModpow(unittest.TestCase): def test_basic(self): self.assertEqual(modpow(2, 10, 1000), 24) self.assertEqual(modpow(5, 0, 7), 1) self.assertEqual(modpow(0, 5, 7), 0) def test_large(self): self.assertEqual(modpow(2, 100, 10**9 + 7), pow(2, 100, 10**9 + 7)) def test_negative_exp(self): self.assertEqual(modpow(3, -1, 11), 4) self.assertEqual(modpow(2, -3, 7), pow(2, -3, 7)) def test_mod_one(self): self.assertEqual(modpow(5, 3, 1), 0) def test_invalid_mod(self): with self.assertRaises(ValueError): modpow(2, 3, 0) with self.assertRaises(ValueError): modpow(2, 3, -5) def test_noninvertible_neg(self): with self.assertRaises(ValueError): modpow(2, -1, 4) def test_modinv(self): self.assertEqual(modinv(3, 11), 4) self.assertEqual((3 * modinv(3, 11)) % 11, 1) with self.assertRaises(ValueError): modinv(2, 4) def test_negative_base(self): self.assertEqual(modpow(-2, 3, 5), pow(-2, 3, 5)) if __name__ == "__main__": unittest.main()