# Copyright (c) Facebook, Inc. and its affiliates.
import unittest

from VisualBERT.mmf.utils.general import dict_to_string, get_overlap_score


class TestUtilsGeneral(unittest.TestCase):
    def test_dict_to_string(self):
        dictionary = {"one": 1, "two": 2, "three": 3}
        expected = "one: 1.0000, two: 2.0000, three: 3.0000"

        self.assertEqual(dict_to_string(dictionary), expected)

    # TODO: Move later to configuration tests
    # def test_nested_dict_update(self):
    #     # Updates value
    #     dictionary = {"level1": {"level2": {"levelA": 0, "levelB": 1}}}
    #     update = {"level1": {"level2": {"levelB": 10}}}
    #     expected = {"level1": {"level2": {"levelA": 0, "levelB": 10}}}
    #
    #     self.assertEqual(nested_dict_update(dictionary, update), expected)
    #
    #     # Adds new value
    #     dictionary = {"level1": {"level2": {"levelA": 0}}}
    #     update = {"level1": {"level2": {"levelB": 10}}}
    #     expected = {"level1": {"level2": {"levelA": 0, "levelB": 10}}}
    #
    #     self.assertEqual(nested_dict_update(dictionary, update), expected)

    def test_get_overlap_score(self):
        # Full overlap
        candidate = "pythia"
        target = "pythia"
        self.assertEqual(get_overlap_score(candidate, target), 1.0)

        # Partial overlap
        candidate = "pythia"
        target = "python"
        self.assertEqual(get_overlap_score(candidate, target), 2 / 3)

        # No overlap
        candidate = "pythia"
        target = "vqa"
        self.assertEqual(get_overlap_score(candidate, target), 0.0)
