//-------------------------------------------------------------------------
        public virtual void ofMultimap()
        {
            ImmutableMultimap <string, int> input = ImmutableMultimap.of("one", 1, "two", 2, "one", 3);

            assertThat(MapStream.of(input)).containsExactlyInAnyOrder(entry("one", 1), entry("two", 2), entry("one", 3));
            assertThat(MapStream.of(input).toMap(int?.sum)).containsOnly(entry("one", 4), entry("two", 2));
        }
        public virtual void test_of_multimap()
        {
            Multimap <string, string> keyValues = ImmutableMultimap.of("a", "x", "a", "y", "b", "z");
            PropertySet test = PropertySet.of(keyValues);

            assertEquals(test.Empty, false);
            assertEquals(test.contains("a"), true);
            assertThrowsIllegalArg(() => test.value("a"));
            assertEquals(test.valueList("a"), ImmutableList.of("x", "y"));
            assertEquals(test.contains("b"), true);
            assertEquals(test.value("b"), "z");
            assertEquals(test.valueList("b"), ImmutableList.of("z"));
            assertEquals(test.contains("c"), false);
            assertEquals(test.keys(), ImmutableSet.of("a", "b"));
            assertEquals(test.asMultimap(), ImmutableListMultimap.of("a", "x", "a", "y", "b", "z"));
            assertEquals(test.valueList("unknown"), ImmutableSet.of());

            assertThrowsIllegalArg(() => test.asMap());
            assertThrowsIllegalArg(() => test.value("unknown"));
            assertEquals(test.ToString(), "{a=[x, y], b=[z]}");
        }