@Test
    public void testMatchingWithPunctuation() {
        DefaultDescription desc = new DefaultDescription();
        EquivToTelescopeResult equivToTelescopeResult = EquivToTelescopeResult.create(
                "id",
                "publisher"
        );

        score(2, scorer.score(
                itemWithTitle("48 hrs"),
                of(itemWithTitle("48 HRS.")),
                desc,
                equivToTelescopeResult
        ));
        score(2, scorer.score(
                itemWithTitle("The 7:51"),
                of(itemWithTitle("The 7.51")),
                desc,
                equivToTelescopeResult
        ));
        score(2, scorer.score(
                itemWithTitle("Mr. & Mrs. Smith"),
                of(itemWithTitle("Mr & Mrs Smith")),
                desc,
                equivToTelescopeResult
        ));
        score(2, scorer.score(
                itemWithTitle("The way, way back"),
                of(itemWithTitle("The way way back")),
                desc,
                equivToTelescopeResult
        ));
        score(2, scorer.score(
                itemWithTitle("The weekend"),
                of(itemWithTitle("The week-end")),
                desc,
                equivToTelescopeResult
        ));
        score(2, scorer.score(
                itemWithTitle("'Allo 'Allo!"),
                of(itemWithTitle("Allo Allo")),
                desc,
                equivToTelescopeResult
        ));
    }

    @Test
    public void testMatchingTitlesWithYearsInTitles() {
        DefaultDescription desc = new DefaultDescription();
        EquivToTelescopeResult equivToTelescopeResult = EquivToTelescopeResult.create(
                "id",
                "publisher"
        );

        score(2, scorer.score(
                itemWithTitle("Cold Comes the Night (2013)"),
                of(itemWithTitle("Cold Comes the Night")),
                desc,
                equivToTelescopeResult
        ));
        score(2, scorer.score(
                itemWithTitle("Get Carter (2013)"),
                of(itemWithTitle("Get Carter")),
                desc,
                equivToTelescopeResult
        ));
        score(0, scorer.score(
                itemWithTitle("Space Odessey 2013"),
                of(itemWithTitle("Space Odessey")),
                desc,
                equivToTelescopeResult
        ));
    }


    @Test
    public void testMatchingWithApostropheWithinWord() {
        DefaultDescription desc = new DefaultDescription();
        //This test case covers cases when non-abbrivating apostrophe is used within a word
        // like Charlies Big Catch" with "Charlie's Big Catch"

        EquivToTelescopeResult equivToTelescopeResult = EquivToTelescopeResult.create(
                "id",
                "publisher"
        );

        score(2, scorer.score(
                itemWithTitle("Charlies Big Catch"),
                of(itemWithTitle("Charlie's Big Catch")),
                desc,
                equivToTelescopeResult
        ));
        score(2, scorer.score(
                itemWithTitle("Charlie's Big Catch"),
                of(itemWithTitle("Charlie's Big Catch")),
                desc,
                equivToTelescopeResult
        ));
        score(2, scorer.score(
                itemWithTitle("Charlie's Big Catch"),
                of(itemWithTitle("Charlies Big Catch")),
                desc,
                equivToTelescopeResult
        ));
        score(2, scorer.score(
                itemWithTitle("Charlies Big Catch"),
                of(itemWithTitle("Charlies Big Catch")),
                desc,
                equivToTelescopeResult
        ));
        score(2, scorer.score(
                itemWithTitle("C'harlies Big Catch"),
                of(itemWithTitle("Charlies Big Catch")),
                desc,
                equivToTelescopeResult
        ));
        score(2, scorer.score(
                itemWithTitle("Charlies Big Catch"),
                of(itemWithTitle("C'harlies Big Catch")),
                desc,
                equivToTelescopeResult
        ));
        score(2, scorer.score(
                itemWithTitle("C'harlies Big Catch"),
                of(itemWithTitle("C'harlies Big Catch")),
                desc,
                equivToTelescopeResult
        ));
        score(0, scorer.score(
                itemWithTitle("C'harlie Big Catch"),
                of(itemWithTitle("C'harlies Big Catch")),
                desc,
                equivToTelescopeResult
        ));
    }

    @Test
    public void testMatchingWithDifferentSpacing() {
        DefaultDescription desc = new DefaultDescription();
        EquivToTelescopeResult equivToTelescopeResult = EquivToTelescopeResult.create(
                "id",
                "publisher"
        );

        score(2, scorer.score(
                itemWithTitle("HouseBusters"),
                of(itemWithTitle("House Busters")),
                desc,
                equivToTelescopeResult
        ));
        score(2, scorer.score(
                itemWithTitle("House  Busters  "),
                of(itemWithTitle("  House Busters")),
                desc,
                equivToTelescopeResult
        ));
        score(2, scorer.score(
                itemWithTitle("Iron Man 3"),
                of(itemWithTitle("IronMan 3")),
                desc,
                equivToTelescopeResult
        ));
    }
    
    @Test
    public void testMachingWithDifferentNumberingSystem(){
        //do not change romans anywhere but the end of a sentence
        DefaultDescription desc = new DefaultDescription();
        EquivToTelescopeResult equivToTelescopeResult = EquivToTelescopeResult.create(
                "id",
                "publisher"
        );

        score(2, scorer.score(
                itemWithTitle("Iron Man 3"),
                of(itemWithTitle("Iron Man III")),
                desc,
                equivToTelescopeResult
        ));
        score(2, scorer.score(
                itemWithTitle("The world and I"),
                of(itemWithTitle("The world and one")),
                desc,
                equivToTelescopeResult
        )); //sideeffect
        score(0, scorer.score(
                itemWithTitle("V for vendetta"),
                of(itemWithTitle("Five for Vendetta")),
                desc,
                equivToTelescopeResult
        ));
        score(0, scorer.score(
                itemWithTitle("Three v Five"),
                of(itemWithTitle("Three Five Five")),
                desc,
                equivToTelescopeResult
        ));
    }
    
    @Test
    public void testMachingWithDifferentEnglish(){
        //american vs brisish english should match
        DefaultDescription desc = new DefaultDescription();
        score(2, scorer.score(
                itemWithTitle("British Harbor"),
                of(itemWithTitle("British Harbour")),
                desc,
                EquivToTelescopeResult.create("id", "publisher"))
        );
    }

    @Test
    public void testMatchingWithDifferentAccents() {
        DefaultDescription desc = new DefaultDescription();
        EquivToTelescopeResult equivToTelescopeResult = EquivToTelescopeResult.create(
                "id",
                "publisher"
        );

        score(2, scorer.score(
                itemWithTitle("En Equilibre"),
                of(itemWithTitle("En équilibre")),
                desc,
                equivToTelescopeResult
        ));
        score(2, scorer.score(
                itemWithTitle("Vie héroïque"),
                of(itemWithTitle("Vie heroique")),
                desc,
                equivToTelescopeResult
        ));
        score(2, scorer.score(
                itemWithTitle("<NAME>"),
                of(itemWithTitle("Francois Cluzet")),
                desc,
                equivToTelescopeResult
        ));
    }

    @Test
    public void testPartialMatchAfterSemicolon() {
        DefaultDescription desc = new DefaultDescription();
        EquivToTelescopeResult equivToTelescopeResult = EquivToTelescope