from pybench import Test

class SimpleIntegerArithmetic(Test):

   version = 2.0
   operations = 5 * (3 + 5 + 5 + 3 + 3 + 3)
   rounds = 120000

   def test(self):

       for i in xrange(self.rounds):

           a = 2
           b = 3
           c = 3

           c = a + b
           c = b + c
           c = c + a
           c = a + b
           c = b + c

           c = c - a
           c = a - b
           c = b - c
           c = c - a
           c = b - c

           c = a / b
           c = b / a
           c = c / b

           c = a * b
           c = b * a
           c = c * b

           c = a / b
           c = b / a
           c = c / b

           a = 2
           b = 3
           c = 3

           c = a + b
           c = b + c
           c = c + a
           c = a + b
           c = b + c

           c = c - a
           c = a - b
           c = b - c
           c = c - a
           c = b - c

           c = a / b
           c = b / a
           c = c / b

           c = a * b
           c = b * a
           c = c * b

           c = a / b
           c = b / a
           c = c / b

           a = 2
           b = 3
           c = 3

           c = a + b
           c = b + c
           c = c + a
           c = a + b
           c = b + c

           c = c - a
           c = a - b
           c = b - c
           c = c - a
           c = b - c

           c = a / b
           c = b / a
           c = c / b

           c = a * b
           c = b * a
           c = c * b

           c = a / b
           c = b / a
           c = c / b

           a = 2
           b = 3
           c = 3

           c = a + b
           c = b + c
           c = c + a
           c = a + b
           c = b + c

           c = c - a
           c = a - b
           c = b - c
           c = c - a
           c = b - c

           c = a / b
           c = b / a
           c = c / b

           c = a * b
           c = b * a
           c = c * b

           c = a / b
           c = b / a
           c = c / b

           a = 2
           b = 3
           c = 3

           c = a + b
           c = b + c
           c = c + a
           c = a + b
           c = b + c

           c = c - a
           c = a - b
           c = b - c
           c = c - a
           c = b - c

           c = a / b
           c = b / a
           c = c / b

           c = a * b
           c = b * a
           c = c * b

           c = a / b
           c = b / a
           c = c / b

   def calibrate(self):

       for i in xrange(self.rounds):
           pass

class SimpleFloatArithmetic(Test):

   version = 2.0
   operations = 5 * (3 + 5 + 5 + 3 + 3 + 3)
   rounds = 120000

   def test(self):

       for i in xrange(self.rounds):

           a = 2.1
           b = 3.3332
           c = 3.14159

           c = a + b
           c = b + c
           c = c + a
           c = a + b
           c = b + c

           c = c - a
           c = a - b
           c = b - c
           c = c - a
           c = b - c

           c = a / b
           c = b / a
           c = c / b

           c = a * b
           c = b * a
           c = c * b

           c = a / b
           c = b / a
           c = c / b

           a = 2.1
           b = 3.3332
           c = 3.14159

           c = a + b
           c = b + c
           c = c + a
           c = a + b
           c = b + c

           c = c - a
           c = a - b
           c = b - c
           c = c - a
           c = b - c

           c = a / b
           c = b / a
           c = c / b

           c = a * b
           c = b * a
           c = c * b

           c = a / b
           c = b / a
           c = c / b

           a = 2.1
           b = 3.3332
           c = 3.14159

           c = a + b
           c = b + c
           c = c + a
           c = a + b
           c = b + c

           c = c - a
           c = a - b
           c = b - c
           c = c - a
           c = b - c

           c = a / b
           c = b / a
           c = c / b

           c = a * b
           c = b * a
           c = c * b

           c = a / b
           c = b / a
           c = c / b

           a = 2.1
           b = 3.3332
           c = 3.14159

           c = a + b
           c = b + c
           c = c + a
           c = a + b
           c = b + c

           c = c - a
           c = a - b
           c = b - c
           c = c - a
           c = b - c

           c = a / b
           c = b / a
           c = c / b

           c = a * b
           c = b * a
           c = c * b

           c = a / b
           c = b / a
           c = c / b

           a = 2.1
           b = 3.3332
           c = 3.14159

           c = a + b
           c = b + c
           c = c + a
           c = a + b
           c = b + c

           c = c - a
           c = a - b
           c = b - c
           c = c - a
           c = b - c

           c = a / b
           c = b / a
           c = c / b

           c = a * b
           c = b * a
           c = c * b

           c = a / b
           c = b / a
           c = c / b

   def calibrate(self):

       for i in xrange(self.rounds):
           pass

class SimpleIntFloatArithmetic(Test):

   version = 2.0
   operations = 5 * (3 + 5 + 5 + 3 + 3 + 3)
   rounds = 120000

   def test(self):

       for i in xrange(self.rounds):

           a = 2
           b = 3
           c = 3.14159

           c = a + b
           c = b + c
           c = c + a
           c = a + b
           c = b + c

           c = c - a
           c = a - b
           c = b - c
           c = c - a
           c = b - c

           c = a / b
           c = b / a
           c = c / b

           c = a * b
           c = b * a
           c = c * b

           c = a / b
           c = b / a
           c = c / b

           a = 2
           b = 3
           c = 3.14159

           c = a + b
           c = b + c
           c = c + a
           c = a + b
           c = b + c

           c = c - a
           c = a - b
           c = b - c
           c = c - a
           c = b - c

           c = a / b
           c = b / a
           c = c / b

           c = a * b
           c = b * a
           c = c * b

           c = a / b
           c = b / a
           c = c / b

           a = 2
           b = 3
           c = 3.14159

           c = a + b
           c = b + c
           c = c + a
           c = a + b
           c = b + c

           c = c - a
           c = a - b
           c = b - c
           c = c - a
           c = b - c

           c = a / b
           c = b / a
           c = c / b

           c = a * b
           c = b * a
           c = c * b

           c = a / b
           c = b / a
           c = c / b

           a = 2
           b = 3
           c = 3.14159

           c = a + b
           c = b + c
           c = c + a
           c = a + b
           c = b + c

           c = c - a
           c = a - b
           c = b - c
           c = c - a
           c = b - c

           c = a / b
           c = b / a
           c = c / b

           c = a * b
           c = b * a
           c = c * b

           c = a / b
           c = b / a
           c = c / b

           a = 2
           b = 3
           c = 3.14159

           c = a + b
           c = b + c
           c = c + a
           c = a + b
           c = b + c

           c = c - a
           c = a - b
           c = b - c
           c = c - a
           c = b - c

           c = a / b
           c = b / a
           c = c / b

           c = a * b
           c = b * a
           c = c * b

           c = a / b
           c = b / a
           c = c / b

   def calibrate(self):

       for i in xrange(self.rounds):
           pass


class SimpleLongArithmetic(Test):

   version = 2.0
   operations = 5 * (3 + 5 + 5 + 3 + 3 + 3)
   rounds = 60000

   def test(self):

       for i in xrange(self.rounds):

           a = 2220001L
           b = 100001L
           c = 30005L

           c = a + b
           c = b + c
           c = c + a
           c = a + b
           c = b + c

           c = c - a
           c = a - b
           c = b - c
           c = c - a
           c = b - c

           c = a / b
           c = b / a
           c = c / b

           c = a * b
           c = b * a
           c = c * b

           c = a / b
           c = b / a
           c = c / b

           a = 2220001L
           b = 100001L
           c = 30005L

           c = a + b
           c = b + c
           c = c + a
           c = a + b
           c = b + c

           c = c - a
           c = a - b
           c = b - c
           c = c - a
           c = b - c

           c = a / b
           c = b / a
           c = c / b

           c = a * b
           c = b * a
           c = c * b

           c = a / b
           c = b / a
           c = c / b

           a = 2220001L
           b = 100001L
           c = 30005L

           c = a + b
           c = b + c
           c = c + a
           c = a + b
           c = b + c

           c = c - a
           c = a - b
           c = b - c
           c = c - a
           c = b - c

           c = a / b
           c = b / a
           c = c / b

           c = a * b
           c = b * a
           c = c * b

           c = a / b
           c = b / a
           c = c / b

           a = 2220001L
           b = 100001L
           c = 30005L

           c = a + b
           c = b + c
           c = c + a
           c = a + b
           c = b + c

           c = c - a
           c = a - b
           c = b - c
           c = c - a
           c = b - c

           c = a / b
           c = b / a
           c = c / b

           c = a * b
           c = b * a
           c = c * b

           c = a / b
           c = b / a
           c = c / b

           a = 2220001L
           b = 100001L
           c = 30005L

           c = a + b
           c = b + c
           c = c + a
           c = a + b
           c = b + c

           c = c - a
           c = a - b
           c = b - c
           c = c - a
           c = b - c

           c = a / b
           c = b / a
           c = c / b

           c = a * b
           c = b * a
           c = c * b

           c = a / b
           c = b / a
           c = c / b

   def calibrate(self):

       for i in xrange(self.rounds):
           pass

class SimpleComplexArithmetic(Test):

   version = 2.0
   operations = 5 * (3 + 5 + 5 + 3 + 3 + 3)
   rounds = 80000

   def test(self):

       for i in xrange(self.rounds):

           a = 2 + 3j
           b = 2.5 + 4.5j
           c = 1.2 + 6.2j

           c = a + b
           c = b + c
           c = c + a
           c = a + b
           c = b + c

           c = c - a
           c = a - b
           c = b - c
           c = c - a
           c = b - c

           c = a / b
           c = b / a
           c = c / b

           c = a * b
           c = b * a
           c = c * b

           c = a / b
           c = b / a
           c = c / b

           a = 2 + 3j
           b = 2.5 + 4.5j
           c = 1.2 + 6.2j

           c = a + b
           c = b + c
           c = c + a
           c = a + b
           c = b + c

           c = c - a
           c = a - b
           c = b - c
           c = c - a
           c = b - c

           c = a / b
           c = b / a
           c = c / b

           c = a * b
           c = b * a
           c = c * b

           c = a / b
           c = b / a
           c = c / b

           a = 2 + 3j
           b = 2.5 + 4.5j
           c = 1.2 + 6.2j

           c = a + b
           c = b + c
           c = c + a
           c = a + b
           c = b + c

           c = c - a
           c = a - b
           c = b - c
           c = c - a
           c = b - c

           c = a / b
           c = b / a
           c = c / b

           c = a * b
           c = b * a
           c = c * b

           c = a / b
           c = b / a
           c = c / b

           a = 2 + 3j
           b = 2.5 + 4.5j
           c = 1.2 + 6.2j

           c = a + b
           c = b + c
           c = c + a
           c = a + b
           c = b + c

           c = c - a
           c = a - b
           c = b - c
           c = c - a
           c = b - c

           c = a / b
           c = b / a
           c = c / b

           c = a * b
           c = b * a
           c = c * b

           c = a / b
           c = b / a
           c = c / b

           a = 2 + 3j
           b = 2.5 + 4.5j
           c = 1.2 + 6.2j

           c = a + b
           c = b + c
           c = c + a
           c = a + b
           c = b + c

           c = c - a
           c = a - b
           c = b - c
           c = c - a
           c = b - c

           c = a / b
           c = b / a
           c = c / b

           c = a * b
           c = b * a
           c = c * b

           c = a / b
           c = b / a
           c = c / b

   def calibrate(self):

       for i in xrange(self.rounds):
           pass