// Path: src/main/java/com/insightfullogic/multiinherit/api/MultiModule.java
// public class MultiModule extends AbstractModule {
// 
// 	private final Class<?>[] classes;
// 	private final boolean useGeneration;
// 	private final boolean dumpClasses;
// 
// 	public MultiModule(final boolean useGeneration, final Class<?>... classes) {
// 		this(useGeneration, false, classes);
// 	}
// 
// 	public MultiModule(final boolean useGeneration, final boolean dumpClasses, final Class<?>... classes) {
// 		if (!useGeneration && dumpClasses) {
// 			throw new IllegalArgumentException("You cannot dump the generate class files if you're not generating class files");
// 		}
// 		this.classes = classes;
// 		this.useGeneration = useGeneration;
// 		this.dumpClasses = dumpClasses;
// 	}
// 
// 	@SuppressWarnings({ "rawtypes", "unchecked" })
// 	private void bindMulti(final Class<?>... classes) {
// 		if (useGeneration) {
// 			bind(MultiInjector.class).to(GenerationMultiInjector.class);
// 			bind(Boolean.class).annotatedWith(Names.named("dump")).toInstance(dumpClasses);
// 		} else {
// 			bind(MultiInjector.class).to(ReflectionMultiInjector.class);
// 		}
// 		for (final Class cls : classes) {
// 			bind(cls).toProvider(new MultiProvider(cls));
// 		}
// 	}
// 
// 	@Override
// 	protected void configure() {
// 		bindMulti(classes);
// 	}
// 
// }


import static junit.framework.Assert.assertEquals;
import static junit.framework.Assert.assertFalse;
import static junit.framework.Assert.assertTrue;
import org.junit.Test;
import com.google.inject.Guice;
import com.google.inject.Injector;
import com.google.inject.ProvisionException;
import com.insightfullogic.multiinherit.api.MultiModule;
		final NumberMulti num5 = injector.getInstance(NumberMulti.class), num6 = injector.getInstance(NumberMulti.class);
		num5.setVal(5);
		num6.setVal(6);
		final boolean sim = num5.isSimilar(num6);
		assertEquals(sim, !num5.isNotSimilar(num6));

		assertEquals(-1, num5.compare(num6));
		assertTrue(num5.lessThan(num6));
		assertFalse(num5.greaterThan(num6));
		assertFalse(num5.equalsOrd(num6));

		assertEquals(1, num6.compare(num5));
		assertFalse(num6.lessThan(num5));
		assertTrue(num6.greaterThan(num5));
		assertFalse(num6.equalsOrd(num5));

		assertEquals(0, num5.compare(num5));
		assertTrue(num5.equalsOrd(num5));
		assertFalse(num5.lessThan(num5));
		assertFalse(num5.greaterThan(num5));
	}

	@Test(expected = ProvisionException.class)
	public void testTraitCombinedWithInterface() {
		final Injector injector = Guice.createInjector(new MultiModule(true, FailSimilarity.class));
		injector.getInstance(FailSimilarity.class);
	}

	@Test(expected = ProvisionException.class)
	public void testTraitLackingImplementation() {
// Path: src/main/java/com/insightfullogic/multiinherit/api/MultiModule.java
// public class MultiModule extends AbstractModule {
// 
// 	private final Class<?>[] classes;
// 	private final boolean useGeneration;
// 	private final boolean dumpClasses;
// 
// 	public MultiModule(final boolean useGeneration, final Class<?>... classes) {
// 		this(useGeneration, false, classes);
// 	}
// 
// 	public MultiModule(final boolean useGeneration, final boolean dumpClasses, final Class<?>... classes) {
// 		if (!useGeneration && dumpClasses) {
// 			throw new IllegalArgumentException("You cannot dump the generate class files if you're not generating class files");
// 		}
// 		this.classes = classes;
// 		this.useGeneration = useGeneration;
// 		this.dumpClasses = dumpClasses;
// 	}
// 
// 	@SuppressWarnings({ "rawtypes", "unchecked" })
// 	private void bindMulti(final Class<?>... classes) {
// 		if (useGeneration) {
// 			bind(MultiInjector.class).to(GenerationMultiInjector.class);
// 			bind(Boolean.class).annotatedWith(Names.named("dump")).toInstance(dumpClasses);
// 		} else {
// 			bind(MultiInjector.class).to(ReflectionMultiInjector.class);
// 		}
// 		for (final Class cls : classes) {
// 			bind(cls).toProvider(new MultiProvider(cls));
// 		}
// 	}
// 
// 	@Override
// 	protected void configure() {
// 		bindMulti(classes);
// 	}
// 
// }


// Path: src/test/java/com/insightfullogic/multiinherit/traits/TestTraitCases.java
import static junit.framework.Assert.assertEquals;
import static junit.framework.Assert.assertFalse;
import static junit.framework.Assert.assertTrue;
import org.junit.Test;
import com.google.inject.Guice;
import com.google.inject.Injector;
import com.google.inject.ProvisionException;
import com.insightfullogic.multiinherit.api.MultiModule;

		final NumberMulti num5 = injector.getInstance(NumberMulti.class), num6 = injector.getInstance(NumberMulti.class);
		num5.setVal(5);
		num6.setVal(6);
		final boolean sim = num5.isSimilar(num6);
		assertEquals(sim, !num5.isNotSimilar(num6));

		assertEquals(-1, num5.compare(num6));
		assertTrue(num5.lessThan(num6));
		assertFalse(num5.greaterThan(num6));
		assertFalse(num5.equalsOrd(num6));

		assertEquals(1, num6.compare(num5));
		assertFalse(num6.lessThan(num5));
		assertTrue(num6.greaterThan(num5));
		assertFalse(num6.equalsOrd(num5));

		assertEquals(0, num5.compare(num5));
		assertTrue(num5.equalsOrd(num5));
		assertFalse(num5.lessThan(num5));
		assertFalse(num5.greaterThan(num5));
	}

	@Test(expected = ProvisionException.class)
	public void testTraitCombinedWithInterface() {
		final Injector injector = Guice.createInjector(new MultiModule(true, FailSimilarity.class));
		injector.getInstance(FailSimilarity.class);
	}

	@Test(expected = ProvisionException.class)
	public void testTraitLackingImplementation() {
		final Injector injector = Guice.createInjector(new MultiModule(true, FailNumber.class));