Beispiel #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)
Beispiel #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)
Beispiel #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)
Beispiel #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)
Beispiel #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)
Beispiel #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)
Beispiel #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)
Beispiel #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)
Beispiel #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)
Beispiel #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)
Beispiel #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)
Beispiel #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)
Beispiel #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)
Beispiel #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)
Beispiel #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)
Beispiel #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)
Beispiel #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)
Beispiel #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'))
Beispiel #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)
Beispiel #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)
Beispiel #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)
Beispiel #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)
Beispiel #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)
Beispiel #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)
Beispiel #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)
Beispiel #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)
Beispiel #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)
Beispiel #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')
Beispiel #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')
Beispiel #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')