@@ -0,0 +1,3250 @@
+package com.redhat.ceylon.compiler.java;%0A%0Aimport org.junit.Assert;%0Aimport org.junit.Test;%0A%0Aimport ceylon.language.Float;%0Aimport ceylon.language.Integer;%0Aimport ceylon.language.String;%0A%0Aimport com.redhat.ceylon.compiler.java.runtime.model.TypeDescriptor;%0A%0Apublic class TypeDescriptorTest %7B%0A    @Test%0A    public void testUnionDuplicates()%7B%0A        Assert.assertEquals(Integer.$TypeDescriptor$, TypeDescriptor.union(Integer.$TypeDescriptor$));%0A        Assert.assertEquals(Integer.$TypeDescriptor$, TypeDescriptor.union(Integer.$TypeDescriptor$, Integer.$TypeDescriptor$));%0A        Assert.assertEquals(TypeDescriptor.union(String.$TypeDescriptor$, Integer.$TypeDescriptor$), %0A                            TypeDescriptor.union(Integer.$TypeDescriptor$, String.$TypeDescriptor$, Integer.$TypeDescriptor$));%0A    %7D%0A%0A    @Test%0A    public void testIntersectionDuplicates()%7B%0A        Assert.assertEquals(Integer.$TypeDescriptor$, TypeDescriptor.intersection(Integer.$TypeDescriptor$));%0A        Assert.assertEquals(Integer.$TypeDescriptor$, TypeDescriptor.intersection(Integer.$TypeDescriptor$, Integer.$TypeDescriptor$));%0A        Assert.assertEquals(TypeDescriptor.intersection(String.$TypeDescriptor$, Integer.$TypeDescriptor$), %0A                            TypeDescriptor.intersection(Integer.$TypeDescriptor$, String.$TypeDescriptor$, Integer.$TypeDescriptor$));%0A    %7D%0A%0A    @Test%0A    public void testUnionIntersectionCommutativity()%7B%0A        Assert.assertEquals(TypeDescriptor.union(String.$TypeDescriptor$, Integer.$TypeDescriptor$), %0A                            TypeDescriptor.union(Integer.$TypeDescriptor$, String.$TypeDescriptor$));%0A        Assert.assertEquals(TypeDescriptor.union(Integer.$TypeDescriptor$, String.$TypeDescriptor$), %0A                            TypeDescriptor.union(Integer.$TypeDescriptor$, String.$TypeDescriptor$));%0A        Assert.assertEquals(TypeDescriptor.intersection(String.$TypeDescriptor$, Integer.$TypeDescriptor$), %0A                            TypeDescriptor.intersection(Integer.$TypeDescriptor$, String.$TypeDescriptor$));%0A        Assert.assertEquals(TypeDescriptor.intersection(Integer.$TypeDescriptor$, String.$TypeDescriptor$), %0A                            TypeDescriptor.intersection(Integer.$TypeDescriptor$, String.$TypeDescriptor$));%0A    %7D%0A%0A    @Test%0A    public void testUnionIntersectionEquality()%7B%0A        Assert.assertFalse(TypeDescriptor.union(String.$TypeDescriptor$, Integer.$TypeDescriptor$).equals(%0A                           TypeDescriptor.union(Float.$TypeDescriptor$, String.$TypeDescriptor$)));%0A        Assert.assertFalse(TypeDescriptor.union(String.$TypeDescriptor$, Integer.$TypeDescriptor$).equals(%0A                           TypeDescriptor.union(String.$TypeDescriptor$, Integer.$TypeDescriptor$, Float.$TypeDescriptor$)));%0A        Assert.assertFalse(TypeDescriptor.intersection(String.$TypeDescriptor$, Integer.$TypeDescriptor$).equals(%0A                           TypeDescriptor.intersection(Float.$TypeDescriptor$, String.$TypeDescriptor$)));%0A        Assert.assertFalse(TypeDescriptor.intersection(String.$TypeDescriptor$, Integer.$TypeDescriptor$).equals(%0A                           TypeDescriptor.intersection(String.$TypeDescriptor$, Integer.$TypeDescriptor$, Float.$TypeDescriptor$)));%0A    %7D%0A%7D%0A

Add test for #398: TypeDescriptor.union() and TypeDescriptor.intersection() very inefficient