# -*- coding: utf-8 -*-
import unittest

from test.picardtestcase import PicardTestCase

from picard.util.astrcmp import astrcmp_py


try:
    from picard.util.astrcmp import astrcmp_c
except ImportError:
    astrcmp_c = None


class AstrcmpBase(object):
    func = None

    def test_astrcmp(self):
        astrcmp = self.__class__.func
        self.assertAlmostEqual(0.0, astrcmp(u"", u""))
        self.assertAlmostEqual(0.0, astrcmp(u"a", u""))
        self.assertAlmostEqual(0.0, astrcmp(u"", u"a"))
        self.assertAlmostEqual(1.0, astrcmp(u"a", u"a"))
        self.assertAlmostEqual(0.0, astrcmp(u"a", u"b"))
        self.assertAlmostEqual(0.0, astrcmp(u"ab", u"ba"))
        self.assertAlmostEqual(0.7083333333333333, astrcmp(u"The Great Gig in the Sky", u"Great Gig In The sky"))


class AstrcmpCTest(AstrcmpBase, PicardTestCase):
    func = astrcmp_c

    @unittest.skipIf(astrcmp_c is None, "The _astrcmp C extension module has not been compiled")
    def test_astrcmp(self):
        super().test_astrcmp()


class AstrcmpPyTest(AstrcmpBase, PicardTestCase):
    func = astrcmp_py
