code: def testChangePercentage(self):
      self.assertEqual(utils.get_change_percentage(1, 1), 0)
      self.assertEqual(
          round(utils.get_change_percentage(1.1, 1), 2), 0.1
      )
      self.assertEqual(round(utils.get_change_percentage(2, 1), 2), 1)
      self.assertEqual(utils.get_change_percentage(1, 2), -0.5)
      self.assertEqual(utils.get_change_percentage(0, -1), 1)
      self.assertEqual(utils.get_change_percentage(1, -1), 2)
      self.assertEqual(utils.get_change_percentage(-2, -1), -1)
      self.assertEqual(utils.get_change_percentage(-1.5, -1), -0.5)
      with self.assertRaisesRegexp(Exception, "Invalid values"):
          utils.get_change_percentage(-1.5, 0)
  
imports: import datetime
  from six.moves import xrange
  from .None import common
  from pyalgotrade import utils
  from pyalgotrade.utils import collections
  from pyalgotrade.utils import dt
label_desc: Use image node_id 1 for calling the UtilsTestCase obj's underlying member method code with example usage: obj.testChangePercentage() without return types