class AbstractStatMethodTests(TestCase):
    """Tests for the AbstractStatMethod class."""

    def setUp(self):
        """Define some sample data that will be used by the tests."""
        self.inst = AbstractStatMethod()

    def test_parse(self):
        """Test raises error."""
        self.assertRaises(NotImplementedError, self.inst.parse, 'foo')

    def test_parse_float(self):
        """Test parsing float strings."""
        obs = self.inst.parse_float('0.045')
        self.assertFloatEqual(obs, 0.045)

        obs = self.inst.parse_float('1.0')
        self.assertFloatEqual(obs, 1.0)

        obs = self.inst.parse_float('0')
        self.assertFloatEqual(obs, 0.0)

        obs = self.inst.parse_float('42')
        self.assertFloatEqual(obs, 42.0)

        obs = self.inst.parse_float('5', 0)
        self.assertFloatEqual(obs, 5.0)

        obs = self.inst.parse_float('-9', max_val=10)
        self.assertFloatEqual(obs, -9.0)

    def test_parse_float_invalid_input(self):
        """Test parsing invalid float strings raises errors."""
        self.assertRaises(ValueError, self.inst.parse_float, 'foo')
        self.assertRaises(ValueError, self.inst.parse_float, '5.0', 0, 1)
        self.assertRaises(ValueError, self.inst.parse_float, '-0.1', 0, 1)
        self.assertRaises(ValueError, self.inst.parse_float, '-0.1', 0)
        self.assertRaises(ValueError, self.inst.parse_float, '11.2',
                          max_val=10)
        self.assertRaises(TypeError, self.inst.parse_float, 'nan')

    def test_eq(self):
        """Test equality check."""
        self.assertTrue(Best() == Best())
        self.assertTrue(QiimeStatMethod() == QiimeStatMethod())
        self.assertFalse(Best() == Mantel())
        self.assertFalse(QiimeStatMethod() == Anosim())
        self.assertFalse(Anosim() == QiimeStatMethod())

    def test_ne(self):
        """Test inequality check."""
        self.assertFalse(Best() != Best())
        self.assertFalse(QiimeStatMethod() != QiimeStatMethod())
        self.assertTrue(Best() != Mantel())
        self.assertTrue(QiimeStatMethod() != Anosim())
        self.assertTrue(Anosim() != QiimeStatMethod())
 def setUp(self):
     """Define some sample data that will be used by the tests."""
     self.inst = AbstractStatMethod()