public void ListedContractsMatchesCME(string ticker, string market, DateTime[] expectedListedExpiries) { // Test was created on 2021-01-11, we're using CME's data here to validate the test, hence the fixed date. var contractsListed = FuturesListings.ListedContracts(ticker, new DateTime(2021, 1, 11)); var contractsMissing = new HashSet <Symbol>(); foreach (var expectedExpiry in expectedListedExpiries) { var expectedFuture = Symbol.CreateFuture(ticker, market, expectedExpiry); if (!contractsListed.Contains(expectedFuture)) { contractsMissing.Add(expectedFuture); } } var missingContractsMessage = $"The following contracts are missing from the listed contracts: {string.Join("\n", contractsMissing.Select(s => " " + s.Value + " " + s.ID.Date.ToStringInvariant("yyyy-MM-dd")))}"; Assert.AreEqual(0, contractsMissing.Count, missingContractsMessage); Assert.AreEqual(expectedListedExpiries.Length, contractsListed.Count, $"The length of expected listed contracts does not match the returned contract count."); }