@Test
public void tag_eviction() {

    int id1 = dic.intern(tags("A", "1"), encoder);
    int id2 = dic.intern(tags("A", "2"), encoder);
    int id3 = dic.intern(tags("B", "1", "A", "1", "A", "2"), encoder);
    int id11 = dic.intern(tags("A", "1"), encoder);
    int id4 = dic.intern(tags("B", "1", "A", "2", "C", "1"), encoder);
    int id5 = dic.intern(tags("C", "1", "B", "1"), encoder);
    assertThat(id1).isEqualTo(1);
    assertThat(id2).isEqualTo(2);
    assertThat(id3).isEqualTo(3);
    assertThat(id11).isEqualTo(1);
    assertThat(id4).isEqualTo(2); // id reused
    assertThat(id5).isEqualTo(1); // id reused, 3 was used as base so it survives
    assertThat(encoder.toString()).isEqualTo(
            "[1,0] +A:1! [2,0] +A:2! [3,1] +A:2 +B:1! [2,3] -A:1 +C:1! [1,2] -A!");
}