import unittest

import ucdresolve
from ucdresolve import ucdmodel


class VectorModelUCDTest(unittest.TestCase):
	"""tests for VectorModelUCD's behaviour.
	"""
	def testNormalization(self):
		"""test for tokDicts being normalized.
		"""
		vu = ucdmodel.VectorModelUCD(["A", "B", "B", "B", "C", "C"], "empty.empty")
		self.assertAlmostEqual(sum(v*v for v in vu.docVec.values()), 1)


class MutableUCDTest(unittest.TestCase):
	"""tests for MutableUCD's behaviour.
	"""
	def testMerge(self):
		"""test for correct accounting of all tokens when merging VizUnits.
		"""
		vu1 = ucdmodel.MutableUCD(["A", "B", "B", "B", "C", "C"], "empty.empty")
		vu2 = ucdmodel.MutableUCD(["A", "A", "C", "D"], "empty.empty")
		vu1.merge(vu2)
		self.assertEqual(len([t for t in vu2 if t=="A"]), 2, 
			"merge doesn't leave other alone")
		self.assertEqual(len([t for t in vu1 if t=="A"]), 3, 
			"Tokens were not merged")

	def testMergeRejection(self):
		"""tests for error when merging incompatible VizUnits.
		"""
		vu1 = ucdmodel.MutableUCD(["A", "B", "B", "B", "C", "C"], "empty.empty")
		vu2 = ucdmodel.MutableUCD(["A", "A", "C", "D"], "foo.bar")
		self.assertRaises(ucdresolve.Error, vu1.merge, vu2)


if __name__=="__main__":
	unittest.main()
