static bool ImplementationOfMethodForClassMayBeMethods(TestCompilerResults compiledResults, string methodToImplementName,
    string lookupClassName,
    string uptoClassName,
    params string[] expectedImplementationNames) {

      IMethodDefinition methodToImplement = compiledResults.FindMethodWithName(methodToImplementName);
      Assert.IsNotNull(methodToImplement, "Couldn't find method {0}", methodToImplementName);

      ITypeDefinition lookupClass = compiledResults.FindTypeWithName(lookupClassName);
      Assert.IsNotNull(lookupClass, "Couldn't find class {0}", lookupClassName);

      ITypeDefinition uptoClass = compiledResults.FindTypeWithName(uptoClassName);
      Assert.IsNotNull(uptoClass, "Couldn't find class {0}", uptoClassName);


      IMethodDefinition[] expectedImplementations = expectedImplementationNames.Select(name => {
        IMethodDefinition expectedImplementation = compiledResults.FindMethodWithName(name);
        Assert.IsNotNull(expectedImplementation, "Couldn't find method {0}", name);
        return expectedImplementation;
      }).ToArray();


      IMethodDefinition[] actualImplementations = ((IEnumerable<IMethodDefinition>)GarbageCollectHelper.Implements(lookupClass, uptoClass, methodToImplement)).ToArray();

      if (expectedImplementations.Count() == actualImplementations.Count()) {
        foreach (IMethodDefinition expectedImplementation in expectedImplementations) {
          if (!actualImplementations.Contains(expectedImplementation)) {
            return false;
          }
        }
      }
      else {
        return false;
      }

      return true;
    }