jdk-24/test/langtools/tools/javac/patterns/SimpleDeconstructionPattern.java
Jan Lahoda eaa80ad08c 8300543: Compiler Implementation for Pattern Matching for switch
8300545: Compiler Implementation for Record Patterns

Co-authored-by: Aggelos Biboudis <abimpoudis@openjdk.org>
Reviewed-by: vromero, mcimadamore
2023-05-22 04:24:06 +00:00

215 lines
6.6 KiB
Java

/**
* @test
* @compile/fail/ref=SimpleDeconstructionPatternOld.out --release 20 -XDrawDiagnostics SimpleDeconstructionPattern.java
* @compile SimpleDeconstructionPattern.java
* @run main SimpleDeconstructionPattern
*/
import java.util.ArrayList;
import java.util.Arrays;
import java.util.LinkedList;
import java.util.List;
public class SimpleDeconstructionPattern {
public static void main(String... args) throws Throwable {
if (!test2(new P(42))) {
throw new IllegalStateException();
}
if (test2(new P(41))) {
throw new IllegalStateException();
}
if (!test2a(new P(42))) {
throw new IllegalStateException();
}
if (test2a(new P(41))) {
throw new IllegalStateException();
}
if (!test4(new P2(new P(42), ""))) {
throw new IllegalStateException();
}
if (test4(new P2(new P(41), ""))) {
throw new IllegalStateException();
}
if (test4(new P2(new P(42), "a"))) {
throw new IllegalStateException();
}
if (!test5(new P(42))) {
throw new IllegalStateException();
}
if (test5(new P(41))) {
throw new IllegalStateException();
}
if (!test7(new P3(""))) {
throw new IllegalStateException();
}
if (test7(new P3("a"))) {
throw new IllegalStateException();
}
if (!test7a(new P3(""))) {
throw new IllegalStateException();
}
if (test7a(new P3("a"))) {
throw new IllegalStateException();
}
if (test8(new P4(""))) {
throw new IllegalStateException();
}
if (!test8(new P4(new P3("")))) {
throw new IllegalStateException();
}
if (!test8a(new P4(new P3("")))) {
throw new IllegalStateException();
}
if (test8(new P4(new P3("a")))) {
throw new IllegalStateException();
}
if (test8a(new P4(new P3("a")))) {
throw new IllegalStateException();
}
if (!test9(new P5(new ArrayList<String>(Arrays.asList(""))))) {
throw new IllegalStateException();
}
if (test9(new P5(new LinkedList<String>(Arrays.asList(""))))) {
throw new IllegalStateException();
}
if (testA(new P6(null))) {
throw new IllegalStateException();
}
if (!testA(new P6(new P3(null)))) {
throw new IllegalStateException();
}
if (testB(new P6(null))) {
throw new IllegalStateException();
}
if (!testB(new P6(new P3(null)))) {
throw new IllegalStateException();
}
if (testC(new P6(null))) {
throw new IllegalStateException();
}
if (!testC(new P6(new P3("")))) {
throw new IllegalStateException();
}
if (!testE(new P6(new P3(null)))) {
throw new IllegalStateException();
}
if (!testF(new P7(0, (short) 0))) {
throw new IllegalStateException();
}
if (testF(new P7(0, (short) 1))) {
throw new IllegalStateException();
}
if (testGen3(new GenRecord1<>(3L, ""))) {
throw new IllegalStateException();
}
if (!testGen3(new GenRecord1<>(3, ""))) {
throw new IllegalStateException();
}
if (!testGen3(new GenRecord1<>(3, ""))) {
throw new IllegalStateException();
}
if (!I.testInInterface(new P2(new P(0), ""))) {
throw new IllegalStateException();
}
}
private static void exp(Object o) throws Throwable {
if (o instanceof P(var i)) {
System.err.println("i=" + i);
}
}
private static boolean test2(Object o) throws Throwable {
return o instanceof P(var i) && i == 42;
}
private static boolean test2a(Object o) throws Throwable {
return o instanceof P(int i) && i == 42;
}
private static boolean test4(Object o) throws Throwable {
return o instanceof P2(P(var i), var s) && i == 42 && "".equals(s);
}
private static boolean test5(Object o) throws Throwable {
return o instanceof P(var i) && i == 42;
}
private static boolean test7(Object o) throws Throwable {
return o instanceof P3(var s) && "".equals(s);
}
private static boolean test7a(Object o) throws Throwable {
return o instanceof P3(String s) && "".equals(s);
}
private static boolean test8(Object o) throws Throwable {
return o instanceof P4(P3(var s)) && "".equals(s);
}
private static boolean test8a(Object o) throws Throwable {
return o instanceof P4(P3(String s)) && "".equals(s);
}
private static boolean test9(Object o) throws Throwable {
return o instanceof P5(ArrayList<String> l) && !l.isEmpty();
}
private static boolean testA(Object o) throws Throwable {
return o instanceof P6(P3(var s));
}
private static boolean testB(Object o) throws Throwable {
return o instanceof P6(P3(String s));
}
private static boolean testC(Object o) throws Throwable {
return o instanceof P6(P3(String s)) && s.isEmpty();
}
private static boolean testE(Object o) throws Throwable {
return o instanceof P6(P3(String s)) && s == null;
}
private static boolean testF(Object o) throws Throwable {
return o instanceof P7(int i, short s) && i == s;
}
private static boolean testGen3(Object o) throws Throwable {
return o instanceof GenRecord1<?, ?>(Integer i, var s) && i.intValue() == 3 && s.length() == 0;
}
private static boolean testGen4(GenBase<Integer, String> o) throws Throwable {
return o instanceof GenRecord1<Integer, String>(var i, var s) && i.intValue() == 3 && s.length() == 0;
}
interface I {
public static boolean testInInterface(Object o) {
return o instanceof P2(P(int i), var s) && i == 0;
}
}
public record P(int i) {
}
public record P2(P p, String s) {
}
public record P3(String s) {
}
public record P4(Object o) {}
public record P5(List<String> l) {}
public record P6(P3 p) {}
public record P7(int i, short s) {}
public interface Base {}
public record BaseUse(Base b) {}
public record BaseSubclass(int i) implements Base {}
public interface GenBase<T1, T2 extends CharSequence> {}
public record GenRecord1<T1, T2 extends CharSequence> (T1 i, T2 s) implements GenBase<T1, T2> {}
}