//-------------------------------------------------------------------------
        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));
        }
        private static Multimap <LocalDate, Curve> buildCurves(IDictionary <CurveName, LoadedCurveSettings> settingsMap, IDictionary <LoadedCurveKey, IList <LoadedCurveNode> > allNodes)
        {
            ImmutableMultimap.Builder <LocalDate, Curve> results = ImmutableMultimap.builder();

            foreach (KeyValuePair <LoadedCurveKey, IList <LoadedCurveNode> > entry in allNodes.SetOfKeyValuePairs())
            {
                LoadedCurveKey      key      = entry.Key;
                LoadedCurveSettings settings = settingsMap[key.CurveName];

                if (settings == null)
                {
                    throw new System.ArgumentException(Messages.format("Missing settings for curve: {}", key));
                }
                results.put(key.CurveDate, settings.createCurve(key.CurveDate, entry.Value));
            }
            return(results.build());
        }
        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]}");
        }