Пример #1
0
 def test_multiplication_tolerance_on_one_factor(self) -> None:
     """Multiply an instance of number by another instance of number,
     one of which has a defined tolerance."""
     number = pysigdig.Number('3600', tolerance=10) * pysigdig.Number(0.1)
     self.assertAlmostEqual(number.value, 360)
     self.assertEqual(number.tolerance, 1)
     self.assertEqual(number.sigdigs, 2)
     self.assertEqual(number.lsd, 10)
Пример #2
0
 def test_truedivide_tolerance_on_one_factor(self) -> None:
     """Divide an instance of number by another instance of number,
     one of which has a defined tolerance."""
     number = pysigdig.Number('3600', tolerance=10) / pysigdig.Number(0.1)
     self.assertAlmostEqual(number.value, 36000)
     self.assertEqual(number.tolerance, 100)
     self.assertEqual(number.sigdigs, 2)
     self.assertEqual(number.lsd, 1000)
Пример #3
0
 def test_floordivide_no_tolerance(self) -> None:
     """Floor division of an instance of number by another instance of
     number, both with no tolerance."""
     number = pysigdig.Number('98.87') // pysigdig.Number('78.5')
     self.assertAlmostEqual(number.value, 1)
     self.assertEqual(number.tolerance, None)
     self.assertEqual(number.sigdigs, 1)
     self.assertAlmostEqual(number.lsd, 1)
Пример #4
0
 def test_multiplication_no_tolerance(self) -> None:
     """Multiply an instance of number by another instance of number,
     both with no tolerance."""
     number = pysigdig.Number('98.87') * pysigdig.Number('78.5')
     self.assertAlmostEqual(number.value, 7760)
     self.assertEqual(number.tolerance, None)
     self.assertEqual(number.sigdigs, 3)
     self.assertAlmostEqual(number.lsd, 10)
Пример #5
0
 def test_subtraction_tolerance_on_one_term(self) -> None:
     """Subtract an instance of number from another instance of number,
     one of which has a defined tolerance."""
     number = pysigdig.Number('3600', tolerance=10) - pysigdig.Number(0.1)
     self.assertAlmostEqual(number.value, 3600)
     self.assertEqual(number.tolerance, 10)
     self.assertEqual(number.sigdigs, 2)
     self.assertEqual(number.lsd, 100)
Пример #6
0
 def test_subtraction_no_tolerance(self) -> None:
     """Subtract an instance of number from another instance of number,
     both with no tolerance."""
     number = pysigdig.Number('98.87') - pysigdig.Number('78.5')
     self.assertAlmostEqual(number.value, 20.4)
     self.assertEqual(number.tolerance, None)
     self.assertEqual(number.sigdigs, 3)
     self.assertAlmostEqual(number.lsd, 0.1)
Пример #7
0
 def test_modulodivide_no_tolerance(self) -> None:
     """Modulo division of an instance of number by another instance of
     number, both with no tolerance."""
     number = pysigdig.Number('98.87') % pysigdig.Number('78.5')
     self.assertAlmostEqual(number.value, 20.4)
     self.assertEqual(number.tolerance, None)
     self.assertEqual(number.sigdigs, 3)
     self.assertAlmostEqual(number.lsd, 0.1)
Пример #8
0
 def test_modulodivide_tolerance_on_one_factor(self) -> None:
     """Modulo division of an instance of number by another instance of
     number, one of which has a defined tolerance."""
     number = pysigdig.Number('3600', tolerance=10) % pysigdig.Number(0.1)
     self.assertAlmostEqual(number.value, 0.1)
     self.assertAlmostEqual(number.tolerance, 0)
     self.assertEqual(number.sigdigs, 2)
     self.assertEqual(number.lsd, 0.001)
Пример #9
0
 def test_addition_tolerance_on_one_addend(self) -> None:
     """Add an instance of number to another instance of number, one of
     which has a defined tolerance."""
     number = pysigdig.Number('3600', tolerance=10) + pysigdig.Number(0.1)
     self.assertAlmostEqual(number.value, 3600)
     self.assertEqual(number.tolerance, 10)
     self.assertEqual(number.sigdigs, 2)
     self.assertEqual(number.lsd, 100)
Пример #10
0
 def test_addition_no_tolerance(self) -> None:
     """Add an instance of number to another instance of number, both with
     no tolerance."""
     number = pysigdig.Number('98.87') + pysigdig.Number('78.5')
     self.assertAlmostEqual(number.value, 177.4)
     self.assertEqual(number.tolerance, None)
     self.assertEqual(number.sigdigs, 4)
     self.assertAlmostEqual(number.lsd, 0.1)
Пример #11
0
 def test_truedivide_no_tolerance(self) -> None:
     """Divide an instance of number by another instance of number,
     both with no tolerance."""
     number = pysigdig.Number('98.87') / pysigdig.Number('78.5')
     self.assertAlmostEqual(number.value, 1.26)
     self.assertEqual(number.tolerance, None)
     self.assertEqual(number.sigdigs, 3)
     self.assertAlmostEqual(number.lsd, 0.01)
Пример #12
0
 def test_subtraction_tolerance_on_both_terms(self) -> None:
     """Subtract an instance of number from another instance of number,
     both of which have a defined tolerance."""
     number = pysigdig.Number(1, tolerance=0.1) - \
         pysigdig.Number(2, tolerance=0.1)
     self.assertEqual(number.value, -1)
     self.assertEqual(number.tolerance, 0.2)
     self.assertEqual(number.sigdigs, 1)
     self.assertEqual(number.lsd, 1)
Пример #13
0
 def test_addition_tolerance_on_both_addends(self) -> None:
     """Add an instance of number to another instance of number, both of
     which have a defined tolerance."""
     number = pysigdig.Number(1, tolerance=0.1) + \
         pysigdig.Number(2, tolerance=0.1)
     self.assertEqual(number.value, 3)
     self.assertEqual(number.tolerance, 0.2)
     self.assertEqual(number.sigdigs, 1)
     self.assertEqual(number.lsd, 1)
Пример #14
0
 def test_multiplication_tolerance_on_both_factors(self) -> None:
     """Multiply an instance of number by another instance of number,
     both of which have a defined tolerance."""
     number = pysigdig.Number(1, tolerance=0.1) * \
         pysigdig.Number(2, tolerance=0.1)
     self.assertEqual(number.value, 2)
     self.assertAlmostEqual(number.tolerance, 0.31)
     self.assertEqual(number.sigdigs, 1)
     self.assertEqual(number.lsd, 1)
Пример #15
0
 def test_truedivide_tolerance_on_both_factors(self) -> None:
     """Divide an instance of number by another instance of number,
     both of which have a defined tolerance."""
     number = pysigdig.Number(1, tolerance=0.1) / \
         pysigdig.Number(2, tolerance=0.1)
     self.assertEqual(number.value, 0.5)
     self.assertAlmostEqual(number.tolerance, 0.078947368)
     self.assertEqual(number.sigdigs, 1)
     self.assertEqual(number.lsd, 0.1)
Пример #16
0
 def test_modulodivide_tolerance_on_both_factors(self) -> None:
     """Modulo division of an instance of number by another instance of
     number, both of which have a defined tolerance."""
     number = pysigdig.Number(1, tolerance=0.1) % \
         pysigdig.Number(2, tolerance=0.1)
     self.assertEqual(number.value, 1)
     self.assertAlmostEqual(number.tolerance, 0.1)
     self.assertEqual(number.sigdigs, 1)
     self.assertEqual(number.lsd, 1)
Пример #17
0
 def test_sigdig_override(self) -> None:
     """Check that number of sigdigs can be overridden with optional arg."""
     number = pysigdig.Number(1.0002003, sigdigs=5)
     self.assertAlmostEqual(number.value, 1.0002)
     self.assertEqual(number.tolerance, None)
     self.assertEqual(number.sigdigs, 5)
     self.assertAlmostEqual(number.lsd, 1e-4)
Пример #18
0
 def test_float(self) -> None:
     """Test constructor when a float is provided as value."""
     number = pysigdig.Number(1.2)
     self.assertAlmostEqual(number.value, 1.2)
     self.assertEqual(number.tolerance, None)
     self.assertEqual(number.sigdigs, float('inf'))
     self.assertEqual(number.lsd, float('-inf'))
Пример #19
0
 def test_integer(self) -> None:
     """Test constructor when an integer is provided as value."""
     number = pysigdig.Number(1)
     self.assertEqual(number.value, 1)
     self.assertEqual(number.tolerance, None)
     self.assertEqual(number.sigdigs, 1)
     self.assertEqual(number.lsd, 1)
Пример #20
0
 def test_string(self) -> None:
     """Test constructor when a string is provided as value."""
     number = pysigdig.Number('12.30')
     self.assertAlmostEqual(number.value, 12.3)
     self.assertEqual(number.tolerance, None)
     self.assertEqual(number.sigdigs, 4)
     self.assertAlmostEqual(number.lsd, 0.01)
Пример #21
0
 def test_lsd_override(self) -> None:
     """Check that the least significant digit can be overridden with
     optional argument."""
     number = pysigdig.Number(123.456789, sigdigs=90, lsd=0.001)
     self.assertAlmostEqual(number.value, 123.457)
     self.assertEqual(number.tolerance, None)
     self.assertEqual(number.sigdigs, 6)
     self.assertAlmostEqual(number.lsd, 0.001)
Пример #22
0
 def test_constant_subtraction(self) -> None:
     """Subtracting a float or int from  an instance of number is treated
     as subtraction of a constant with infinite significant digits."""
     number = pysigdig.Number('0.123', tolerance=0.1) - 5.333333333
     self.assertAlmostEqual(number.value, -5.21)
     self.assertEqual(number.tolerance, 0.1)
     self.assertEqual(number.sigdigs, 4)
     self.assertAlmostEqual(number.lsd, 0.001)
Пример #23
0
 def test_constant_multiplication(self) -> None:
     """Multiplying an instance of number by a float or int is treated
     as multiplication of a constant with infinite significant digits."""
     number = pysigdig.Number('0.123', tolerance=0.1) * 5.333333333
     self.assertAlmostEqual(number.value, 0.656)
     self.assertEqual(number.tolerance, 0.5333333333)
     self.assertEqual(number.sigdigs, 3)
     self.assertAlmostEqual(number.lsd, 0.001)
Пример #24
0
 def test_tolerance(self) -> None:
     """Check that a tolerance can be added when calling the
     constructor."""
     number = pysigdig.Number(84000, tolerance=10)
     self.assertAlmostEqual(number.value, 84000)
     self.assertEqual(number.tolerance, 10)
     self.assertEqual(number.sigdigs, 2)
     self.assertEqual(number.lsd, 1000)
Пример #25
0
 def test_truedivide_by_constant(self) -> None:
     """Dividing an instance of number by a float or int is treated
     as division by a constant with infinite significant digits."""
     number = pysigdig.Number('0.123', tolerance=0.1) / 5.333333333
     self.assertAlmostEqual(number.value, 0.0231)
     self.assertAlmostEqual(number.tolerance, 0.01875)
     self.assertEqual(number.sigdigs, 3)
     self.assertAlmostEqual(number.lsd, 0.0001)
Пример #26
0
 def test_constant_addition(self) -> None:
     """Adding an instance of number to integer or float is treated as
     addition to a constant with infinite significant digits."""
     number = pysigdig.Number('0.123', tolerance=0.1) + 5.333333333
     self.assertAlmostEqual(number.value, 5.456)
     self.assertEqual(number.tolerance, 0.1)
     self.assertEqual(number.sigdigs, 4)
     self.assertAlmostEqual(number.lsd, 0.001)
Пример #27
0
 def test_modulodivide_by_constant(self) -> None:
     """Modulo division of an instance of number by a float or int is
     treated as floor division by a constant with infinite significant
     digits."""
     number = pysigdig.Number('0.123', tolerance=0.1) % 5.333333333
     self.assertAlmostEqual(number.value, 0.123)
     self.assertAlmostEqual(number.tolerance, 0.1)
     self.assertEqual(number.sigdigs, 3)
     self.assertAlmostEqual(number.lsd, 0.001)
Пример #28
0
 def test_with_tolerance(self) -> None:
     """Test string cast on number with tolerance."""
     number = pysigdig.Number('1.23450000', tolerance=0.01)
     self.assertEqual(str(number), '1.23450000 ± 0.01')
Пример #29
0
 def test_no_fractional_part(self) -> None:
     """Test string cast on number with no fractional part."""
     number = pysigdig.Number('64000')
     self.assertEqual(str(number), '64000')
Пример #30
0
 def test_no_trailing_zeros(self) -> None:
     """Test string cast on number with no trailing zeros."""
     number = pysigdig.Number('1234.56789')
     self.assertEqual(str(number), '1234.56789')