diff options
Diffstat (limited to 'tests')
1136 files changed, 83907 insertions, 0 deletions
diff --git a/tests/ajcTestSuite.dtd b/tests/ajcTestSuite.dtd new file mode 100644 index 000000000..4bee878e4 --- /dev/null +++ b/tests/ajcTestSuite.dtd @@ -0,0 +1,48 @@ +<!-- this defines a DOCTYPE for a suite of ajc tests -->
+<!-- element-component mappings are in org.aspectj.testing.xml.AjcSpecXmlReader -->
+<!-- element names are determined by the component XMLNAME static variable -->
+
+ <!ELEMENT suite (ajc-test+)>
+ <!ATTLIST suite suiteDir CDATA #IMPLIED >
+
+ <!ELEMENT ajc-test (compile, (compile | inc-compile | run)*)>
+ <!ATTLIST ajc-test title CDATA #REQUIRED >
+ <!ATTLIST ajc-test dir CDATA #REQUIRED >
+ <!ATTLIST ajc-test pr CDATA #IMPLIED >
+ <!ATTLIST ajc-test keywords CDATA #IMPLIED >
+ <!ATTLIST ajc-test comment CDATA #IMPLIED >
+
+ <!ELEMENT compile (dir-changes*,file*,message*)>
+ <!ATTLIST compile staging CDATA #IMPLIED >
+ <!ATTLIST compile files CDATA #IMPLIED >
+ <!ATTLIST compile argfiles CDATA #IMPLIED >
+ <!ATTLIST compile aspectpath CDATA #IMPLIED >
+ <!ATTLIST compile options CDATA #IMPLIED >
+
+ <!ELEMENT inc-compile (dir-changes*,message*)>
+ <!ATTLIST inc-compile tag CDATA #REQUIRED >
+
+ <!ELEMENT run (dir-changes*,message*)>
+ <!ATTLIST run class CDATA #REQUIRED >
+ <!ATTLIST run skipTester CDATA #IMPLIED >
+ <!ATTLIST run vm CDATA #IMPLIED >
+ <!ATTLIST run options CDATA #IMPLIED >
+
+ <!ELEMENT file (#PCDATA)>
+ <!ATTLIST file path CDATA #IMPLIED >
+
+ <!ELEMENT message (#PCDATA)>
+ <!ATTLIST message kind (error | warning | info | Xlint) #REQUIRED >
+ <!ATTLIST message line CDATA #REQUIRED >
+ <!ATTLIST message text CDATA #IMPLIED >
+ <!ATTLIST message file CDATA #IMPLIED >
+
+ <!ELEMENT dir-changes (#PCDATA)>
+ <!ATTLIST dir-changes dirToken (classes | run) #IMPLIED >
+ <!ATTLIST dir-changes defaultSuffix (.class) #IMPLIED >
+ <!ATTLIST dir-changes added CDATA #IMPLIED >
+ <!ATTLIST dir-changes removed CDATA #IMPLIED >
+ <!ATTLIST dir-changes updated CDATA #IMPLIED >
+ <!ATTLIST dir-changes unchanged CDATA #IMPLIED >
+ <!ATTLIST dir-changes expDir CDATA #IMPLIED >
+
diff --git a/tests/ajcTests.xml b/tests/ajcTests.xml new file mode 100644 index 000000000..07d8033ed --- /dev/null +++ b/tests/ajcTests.xml @@ -0,0 +1,5250 @@ + +<!DOCTYPE suite SYSTEM "../tests/ajcTestSuite.dtd"> + +<!-- + known keywords: + + purejava + broken-test ?? + messages-vary one of many (usually two) test specs that differ only in + messages expected by the different compilers + new-messages-vary ?? to split like messages-vary + + fail-{...} test fails in some configuration + fail-unimplmented eajc throwing "unimplemented" exception + fail-commandLine fails in ajc on command line (move to ajcTestsBroken.xml) + fail-in-eclipse fail when harness in run from inside eclipse + fail-publicType now fixed - no longer presenting error for public type in wrong file + + from-{file} from original {file}.txt for file in + java, bigjava, resolved_1*, 14tests, ng, errors, design, base... + + --> + +<suite> + <ajc-test dir="base/test100" + title="static and non-static before methods -- one file" + keywords="from-base"> + <compile files="Driver.java"/> + <run class="Driver"/> + </ajc-test> + + <ajc-test dir="base/test101" + title="static and non-static before methods -- many files" + keywords="from-base"> + <compile files="Driver.java,Foo.java,Bar.java,Pos.java"/> + <run class="Driver"/> + </ajc-test> + + <ajc-test dir="base/test102" + title="this redirection in non-static before methods" keywords="from-base"> + <compile files="Driver.java"/> + <run class="Driver"/> + </ajc-test> + + <ajc-test dir="base/test103" title="DEPRECATED: introductions" + keywords="from-base"> + <compile files="Driver.java"/> + <run class="Driver"/> + </ajc-test> + + <ajc-test dir="base/test104" title="before constructors -- one file" + keywords="from-base"> + <compile files="Driver.java"/> + <run class="Driver"/> + </ajc-test> + + <ajc-test dir="base/test105" + title="advise weaves find methods typed to builtins or non-woven classes" + keywords="from-base"> + <compile files="Driver.java"/> + <run class="Driver"/> + </ajc-test> + + <ajc-test dir="base/test106" + title="make sure new weaves work inside of packages" keywords="from-base"> + <compile files="Driver.java,pkg/Obj.java"/> + <run class="Driver"/> + </ajc-test> + + <ajc-test dir="base/test107" + title="make sure new weaves work inside of packages (again)" + keywords="from-base"> + <compile + files="Driver.java,C1.java,C2.java,pack1/Foo.java,pack2/Foo.java,pack3/Foo.java"/> + <run class="Driver"/> + </ajc-test> + + <ajc-test dir="base/test108" + title="Inheritance of class and aspect vars in weaves" + keywords="from-base"> + <compile files="Driver.java"/> + <run class="Driver"/> + </ajc-test> + + <ajc-test dir="base/test109" + title="Accessibility of class and aspect members from inside weaves" + keywords="from-base"> + <compile files="Driver.java,Aspect.java,Foo.java"/> + <run class="Driver"/> + </ajc-test> + + <ajc-test dir="base/test110" + title="Packaged aspects referring to packaged classes" + keywords="from-base"> + <compile files="Driver.java,pAspect/Aspect.java,pClass/Class.java"/> + <run class="Driver"/> + </ajc-test> + + <ajc-test dir="base/test111" + title="Inheritance of methods advised by aspects" keywords="from-base"> + <compile + files="Driver.java,SubClass.java,SuperClass.java,SuperAspect.java"/> + <run class="Driver"/> + </ajc-test> + + <ajc-test dir="base/test112" title="Inherited weaves on constructor" + keywords="from-base"> + <compile files="Driver.java"/> + <run class="Driver"/> + </ajc-test> + + <ajc-test dir="base/test113" title="Initializers in Aspect and Class Bodies" + keywords="from-base"> + <compile files="Driver.java"/> + <run class="Driver"/> + </ajc-test> + + <ajc-test dir="base/test114" + title="Weaver Resolution of method names in method calls passed as args" + keywords="from-base"> + <compile files="Driver.java"/> + <run class="Driver"/> + </ajc-test> + + <ajc-test dir="base/test115" + title="DEPRECATED: Introduce constructor with class inheritance" + keywords="from-base"> + <compile files="Driver.java"/> + <run class="Driver"/> + </ajc-test> + + <ajc-test dir="base/test116" + title="empty and singular patterns on modifiers and throws" + keywords="from-base"> + <compile files="Driver.java"/> + <run class="Driver"/> + </ajc-test> + + <!-- we're not implementing static inter-type fields on interfaces in 1.1 --> + <ajc-test dir="base/test117" title="DEPRECATED: introduce of variables" + keywords="from-base,knownLimitation"> + <compile files="Driver.java"/> + <run class="Driver"/> + </ajc-test> + + <ajc-test dir="base/test118" title="DEPRECATED: Introduce of constructors" + keywords="from-base"> + <compile files="Driver.java"/> + <run class="Driver"/> + </ajc-test> + + <ajc-test dir="base/test119" title="Local declarations in advise bodies" + keywords="from-base"> + <compile files="Driver.java"/> + <run class="Driver"/> + </ajc-test> + + <ajc-test dir="base/test120" title="unicodes and literals" + keywords="from-base,purejava"> + <compile files="Driver.java"/> + <run class="Driver"/> + </ajc-test> + + <ajc-test dir="base/test121" + title="advises on introduced methods and constructors" + keywords="from-base"> + <compile files="Driver.java"/> + <run class="Driver"/> + </ajc-test> + + <ajc-test dir="base/test122" + title="DEPRECATED: Method introduction into interface implemented by abstract class" + keywords="from-base"> + <compile files="Driver.java"/> + <run class="Driver"/> + </ajc-test> + + <ajc-test dir="base/test123" title="Crossing super calls in constructors" + keywords="from-base"> + <compile files="Driver.java"/> + <run class="Driver"/> + </ajc-test> + + <ajc-test dir="base/test124" title="empty modifier pattern" + keywords="from-base"> + <compile files="Driver.java"/> + <run class="Driver"/> + </ajc-test> + + <ajc-test dir="base/test125" + title="Alpha conversion of argument names in designators" + keywords="from-base"> + <compile files="Driver.java"/> + <run class="Driver"/> + </ajc-test> + + <ajc-test dir="base/test126" title="For Statement" + keywords="from-base,purejava"> + <compile files="Driver.java"/> + <run class="Driver"/> + </ajc-test> + + <ajc-test dir="base/test127" + title="advice uses its own formals to get actuals" keywords="from-base"> + <compile files="Driver.java"/> + <run class="Driver"/> + </ajc-test> + + <ajc-test dir="base/test128" + title="DEPRECATED: introduce weaves can use this" keywords="from-base"> + <compile files="Driver.java"/> + <run class="Driver"/> + </ajc-test> + + <ajc-test dir="base/test129" + title="DEPRECATED: introduce of abstract methods works" + keywords="from-base"> + <compile files="Driver.java"/> + <run class="Driver"/> + </ajc-test> + + <ajc-test dir="base/test130" + title="multiple arounds successfully intercept and return own values" + keywords="from-base"> + <compile files="Driver.java"/> + <run class="Driver"/> + </ajc-test> + + <ajc-test dir="base/test132" + title="proper matching of overloaded constructors" keywords="from-base"> + <compile files="Driver.java"/> + <run class="Driver"/> + </ajc-test> + + <ajc-test dir="base/test133" + title="correct super call lookup for method().name()" + keywords="from-base,purejava"> + <compile files="Driver.java"/> + <run class="Driver"/> + </ajc-test> + + <ajc-test dir="base/test134" + title="proper handling of formals in catch advice" keywords="from-base"> + <compile files="Driver.java"/> + <run class="Driver"/> + </ajc-test> + + <ajc-test dir="base/test135" + title="proper values for thisJoinPoint attributes" keywords="from-base"> + <compile + files="Driver.java,JoinPointFields.java,TopFoo.java,pack/PackFoo.java,pack/JoinPointFields.java,pack/PackJoinPointFields.java"/> + <run class="test135.Driver"/> + </ajc-test> + + <ajc-test dir="base/test136" title="supers, supers, supers" + keywords="from-base"> + <compile files="Driver.java"/> + <run class="Driver"/> + </ajc-test> + + <ajc-test dir="base/test137" + title="operations on private and protected aspect members (++, -- in partciular)" + keywords="from-base"> + <compile files="Driver.java"/> + <run class="Driver"/> + </ajc-test> + + <ajc-test dir="base/test138" title="only register things once" + keywords="from-base"> + <compile files="Driver.java"/> + <run class="Driver"/> + </ajc-test> + + <ajc-test dir="base/test139" title="inner aspects and around" + keywords="from-base"> + <compile files="Driver.java"/> + <run class="Driver"/> + </ajc-test> + + <ajc-test dir="base/test140" + title="aspect inheritance and advice, introduction" keywords="from-base"> + <compile files="Driver.java"/> + <run class="Driver"/> + </ajc-test> + + <ajc-test dir="base/test141" title="thisResultObject for primitives" + keywords="from-base"> + <compile files="Driver.java"/> + <run class="Driver"/> + </ajc-test> + + <ajc-test dir="base/test142" title="introductions calling super." + keywords="from-base"> + <compile files="Driver.java"/> + <run class="Driver"/> + </ajc-test> + + <ajc-test dir="base" pr="384" + title="allow one argument calls even when there's a comma in the arglist" + keywords="from-base"> + <compile files="OneArgCallsIsOkay.java"/> + <run class="OneArgCallsIsOkay"/> + </ajc-test> + + <ajc-test dir="new" + title="advice on calls to static methods even works when called on super" + keywords="from-base"> + <compile files="SuperStaticCallJoinPoint.java"/> + <run class="SuperStaticCallJoinPoint"/> + </ajc-test> + + <ajc-test dir="new" pr="99" + title="combined logic expression (handling coericions vs. parens)" + keywords="from-java,purejava"> + <compile files="CombinedLogic.java"/> + <run class="CombinedLogic"/> + </ajc-test> + + <ajc-test dir="new" pr="99" + title="comment after class closes (with no new line at end)" + keywords="from-java,purejava"> + <compile files="CommentAfterClass.java"/> + <run class="CommentAfterClass"/> + </ajc-test> + + <ajc-test dir="new" title="handle multiple nested inner classes" + keywords="from-java"> + <compile files="InnerHell.java"/> + <run class="InnerHell"/> + </ajc-test> + + <ajc-test dir="new" pr="108" title="multi-dimensional array initializers" + keywords="from-java,purejava"> + <compile files="MultiArrays.java"/> + <run class="MultiArrays"/> + </ajc-test> + + <ajc-test dir="new" pr="125" + title="probelm with the generated names of exceptions" + keywords="from-java,purejava"> + <compile files="ExceptionNames.java"/> + <run class="ExceptionNames"/> + </ajc-test> + + <ajc-test dir="new" pr="109" + title="checks if the class field can be used on all of the primitive types" + keywords="from-java,purejava"> + <compile files="ClassFieldOnPrimitiveType.java"/> + <run class="ClassFieldOnPrimitiveType"/> + </ajc-test> + + <ajc-test dir="new/volatileKeyword" pr="151" + title="advice on a static method" keywords="from-java"> + <compile files="Driver.java"/> + <run class="Driver"/> + </ajc-test> + + <ajc-test dir="new/innerConsSyntax" pr="192" + title="inner constructor syntax causes compile error" keywords="from-java"> + <compile files="Driver.java"/> + <run class="Driver"/> + </ajc-test> + + <ajc-test dir="new/paramWidening" pr="195" + title="widening of method parameters to match javac" keywords="from-java"> + <compile files="Driver.java"/> + <run class="Driver"/> + </ajc-test> + + <ajc-test dir="pureJava/equalsMethOnStr" pr="214" + title="equals method on quoted strings" keywords="from-java"> + <compile files="Driver.java"/> + <run class="Driver"/> + </ajc-test> + + <ajc-test dir="new" pr="313" + title="parenthesized string literals matching primitive type names" + keywords="from-java"> + <compile files="ParenPrimitive.java"/> + <run class="ParenPrimitive"/> + </ajc-test> + + <ajc-test dir="pureJava/anonInnerClass" pr="294" + title="anonymous inner class" keywords="from-java"> + <compile files="Driver.java"/> + <run class="Driver"/> + </ajc-test> + + <ajc-test dir="new" title="simple type coercions tests" keywords="from-java"> + <compile files="TypeCoercions.java"/> + <run class="TypeCoercions"/> + </ajc-test> + + <ajc-test dir="new" title="order of type declarations shouldn't matter" + keywords="from-java"> + <compile files="OrderOfTypes.java"/> + <run class="OrderOfTypes"/> + </ajc-test> + + <ajc-test dir="pureJava" + title="parsing of parenthesized 'this' (in returns)" keywords="from-java"> + <compile files="ReturnThis.java"/> + <run class="ReturnThis"/> + </ajc-test> + + <ajc-test dir="new" title="Scanner non recognizing strictfp." + keywords="from-java"> + <compile files="StrictFp.java"/> + <run class="StrictFp"/> + </ajc-test> + + <ajc-test dir="pureJava" title="Strings are folded and interned correctly" + keywords="from-java"> + <compile files="StringFold.java"/> + <run class="StringFold"/> + </ajc-test> + + <ajc-test dir="pureJava" title="Cast binds tighter than equality tests" + keywords="from-java"> + <compile files="CastAndBinary.java"/> + <run class="CastAndBinary"/> + </ajc-test> + + <ajc-test dir="pureJava" title="Boundary base values can be parsed" + keywords="from-java"> + <compile files="BoundaryNums.java"/> + <run class="BoundaryNums"/> + </ajc-test> + + <ajc-test dir="pureJava" + title="State is passed correctly across nested annonymous inners" + keywords="from-java"> + <compile files="NestedInners.java"/> + <run class="NestedInners"/> + </ajc-test> + + <ajc-test dir="pureJava" + title="?: expressions should typecheck in interesting ways" + keywords="from-java"> + <compile files="TriTestTypecheck.java"/> + <run class="TriTestTypecheck"/> + </ajc-test> + + <ajc-test dir="pureJava" + title="cast expressions should allow casts to/from interfaces at compile-time." + keywords="from-java"> + <compile files="InterfaceCast.java"/> + <run class="InterfaceCast"/> + </ajc-test> + + <ajc-test dir="pureJava" + title="various anonymous inner classes plus super types tests" + keywords="from-java"> + <compile files="InnerSuper.java"/> + <run class="InnerSuper"/> + </ajc-test> + + <ajc-test dir="new" + title="Doesn't parse an array-returning method that throws an exception" + keywords="from-java,purejava"> + <compile files="ArrayMethod.java"/> + <run class="ArrayMethod"/> + </ajc-test> + + <ajc-test dir="new" + title="Crashes when a lot of zeros are in front of a double variable [!!! purejava]" + keywords="from-java"> + <compile files="Zeros.java"/> + <run class="Zeros"/> + </ajc-test> + + <ajc-test dir="pureJava" title="Various comment syntaxes should be handled." + keywords="from-java"> + <compile files="CommentSyntax.java"/> + <run class="CommentSyntax"/> + </ajc-test> + + <ajc-test dir="pureJava/abstractInner" + title="Abstract inner classes across package boundaries" + keywords="from-java"> + <compile files="C.java,pkg/A.java"/> + <run class="C"/> + </ajc-test> + + <ajc-test dir="pureJava" + title="inner classes accessing outers and some more inner class names" + keywords="from-java"> + <compile files="InnerAccess.java"/> + <run class="InnerAccess"/> + </ajc-test> + + <ajc-test dir="pureJava" + title="remember to cast folded values down to the proper types." + keywords="from-java"> + <compile files="CastingFoldedValues.java"/> + <run class="CastingFoldedValues"/> + </ajc-test> + + <ajc-test dir="pureJava" + title="inner classes can be built using protected constructors in super" + keywords="from-java"> + <compile files="VariousConstructors.java"/> + <run class="VariousConstructors"/> + </ajc-test> + + <ajc-test dir="pureJava" + title="check that nested constructions of local classes work" + keywords="from-java,purejava"> + <compile files="NestedConstructionsOfLocalClasses.java"/> + <run class="NestedConstructionsOfLocalClasses"/> + </ajc-test> + + <ajc-test dir="pureJava" + title="Make sure anonymous classes can have non-nullary constructors" + keywords="from-java,purejava"> + <compile files="NonNullaryAnonymous.java"/> + <run class="NonNullaryAnonymous"/> + </ajc-test> + + <ajc-test dir="new" pr="417" + title="Full names are dropped from inner interfaces" + keywords="from-java,purejava"> + <compile files="PR417a.java"/> + <run class="PR417a"/> + </ajc-test> + + <ajc-test dir="new" pr="417" + title="Making sure full names stay on static inner classes" + keywords="from-java,purejava"> + <compile files="PR417b.java"/> + <run class="PR417b"/> + </ajc-test> + + <ajc-test dir="pureJava" pr="401" + title="The current AspectJ compiler cannot parse qualified superclass constructor invocations" + keywords="from-java"> + <compile files="QualifiedSuperClassConstructorInvocations_PR401.java"/> + <run class="QualifiedSuperClassConstructorInvocations_PR401"/> + </ajc-test> + + <ajc-test dir="pureJava" pr="421" + title="More thourough test of static members using full names" + keywords="from-java"> + <compile + files="Statics.java,StaticMembers_PR421.java,p1/C1.java,p1/P1Statics.java,p1/subp1/SubC1.java,p1/p2/P1P2Statics.java"/> + <run class="StaticMembers_PR421"/> + </ajc-test> + + <ajc-test dir="pureJava" pr="421" + title="More thourough test of static members using imports" + keywords="from-java"> + <compile + files="Statics.java,StaticMembersImports_PR421.java,p1/C1.java,p1/P1Statics.java,p1/subp1/SubC1.java,p1/p2/P1P2Statics.java"/> + <run class="StaticMembersImports_PR421"/> + </ajc-test> + + <ajc-test dir="pureJava/conflictingPackageNames" pr="437" + title="Looking in class Java for java.lang.String WITH separate compilation" + keywords="from-java"> + <compile files="Java.java"/> + <compile files="Main.java"/> + <run class="Main"/> + </ajc-test> + + <ajc-test dir="pureJava/conflictingPackageNames" pr="437" + title="Looking in class Java for java.lang.String WITHOUT separate compilation" + keywords="from-java"> + <compile files="Main.java,Java.java"/> + <run class="Main"/> + </ajc-test> + + <ajc-test dir="pureJava/conflictingPackageNamesWithPackages" pr="437" + title="Looking in class Java for java.lang.String WITH separate compilation with packages" + keywords="from-java"> + <compile files="Java.java"/> + <compile files="Main.java"/> + <run class="conflictingPackageNamesWithPackages.Main"/> + </ajc-test> + + <ajc-test dir="pureJava/conflictingPackageNamesWithPackages" pr="437" + title="Looking in class Java for java.lang.String WITHOUT separate compilation with packages" + keywords="from-java"> + <compile files="Main.java,Java.java"/> + <run class="conflictingPackageNamesWithPackages.Main"/> + </ajc-test> + + <ajc-test dir="pureJava" title="Testing ternary operations." + keywords="from-java"> + <compile files="MultiTernaryOps.java"/> + <run class="MultiTernaryOps"/> + </ajc-test> + + <ajc-test dir="pureJava" title="Lifting locals in switch statements." + keywords="from-java"> + <compile files="SwitchStmtLocals.java"/> + <run class="SwitchStmtLocals"/> + </ajc-test> + + <ajc-test dir="pureJava" + title="Getting confused when looking up method signatures" + keywords="from-java"> + <compile files="MethodSigs.java"/> + <run class="MethodSigs"/> + </ajc-test> + + <ajc-test dir="pureJava" + title="Not recognizing the chars '\0', '\1', '\2', '\3', '\4', '\5', '\6', '\7'" + keywords="from-java"> + <compile files="Chars.java"/> + <run class="Chars"/> + </ajc-test> + + <ajc-test dir="pureJava" + title="Test chars '\0', '\1', '\2', '\3', '\4', '\5', '\6', '\7' with a case statement" + keywords="from-java"> + <compile files="CaseClauses.java"/> + <run class="CaseClauses"/> + </ajc-test> + + <ajc-test dir="pureJava" + title="Checking character values with all the unicode chars." + keywords="from-java"> + <compile files="CharsUnicode.java"/> + <run class="CharsUnicode"/> + </ajc-test> + + <ajc-test dir="pureJava" + title="Trouble finding methods with the same name and different parameter types" + keywords="from-java"> + <compile files="MethodsWithTheSameName.java"/> + <run class="MethodsWithTheSameName"/> + </ajc-test> + + <ajc-test dir="pureJava" + title="Binding non-public static inner classes of interfaces in other packages" + keywords="from-java"> + <compile + files="StaticClassesInInterfaces.java,anotherPackage/AnotherPackageInterface.java"/> + <run class="StaticClassesInInterfaces"/> + </ajc-test> + + <ajc-test dir="pureJava" + title="Not recognizing the octal chars '\0', '\1', '\2', '\3', '\4', '\5', '\6', '\7'" + keywords="from-java"> + <compile files="OctalChars.java"/> + <run class="OctalChars"/> + </ajc-test> + + <ajc-test dir="pureJava" + title="Members with the same name as their package cause confusion with fully-qualified names." + keywords="from-java"> + <compile files="samenames/Main.java,samenames/Other.java"/> + <run class="samenames.Main"/> + </ajc-test> + + <ajc-test dir="pureJava" + title="Fully-qual'ed names with same start as variable names" + keywords="from-java"> + <compile files="FullNames.java"/> + <run class="FullNames"/> + </ajc-test> + + <ajc-test dir="pureJava" + title="Fully qualifying inner classes within annonymous classes causes problems." + keywords="from-java"> + <compile files="InnerClassesInAnnonymousClasses.java"/> + <run class="InnerClassesInAnnonymousClasses"/> + </ajc-test> + + <ajc-test dir="pureJava" + title="Calls to methods in outer annonymous classes are being qual's incorrectly with 'this'" + keywords="from-java"> + <compile files="MisplacedThisInAnnonymousInnerClasses.java"/> + <run class="MisplacedThisInAnnonymousInnerClasses"/> + </ajc-test> + + <ajc-test dir="pureJava/innersFromSourceAndBytecode" + title="Reading inner classes from source and bytecode (1) -- was failing" + keywords="from-java"> + <compile files="C.java,D.java"/> + <compile files="Main.java,C.java"/> + <run class="Main"/> + </ajc-test> + + <ajc-test dir="pureJava/innersFromSourceAndBytecode" + title="Reading inner classes from source and bytecode (2)" + keywords="from-java"> + <compile files="Main.java,C.java,D.java"/> + <run class="Main"/> + </ajc-test> + + <ajc-test dir="pureJava/innersFromSourceAndBytecode" + title="Reading inner classes from source and bytecode (3)" + keywords="from-java"> + <compile files="C.java,D.java"/> + <compile files="Main.java,C.java,D.java"/> + <run class="Main"/> + </ajc-test> + + <ajc-test dir="pureJava" + title="Not lifting types correctly with bytes and shorts with ternary ops" + keywords="from-java"> + <compile files="TernaryPrimitiveOps.java"/> + <run class="TernaryPrimitiveOps"/> + </ajc-test> + + <ajc-test dir="pureJava" + title="Not looking up methods inside of anonymous declarations correctly." + keywords="from-java"> + <compile files="AnonymousMethodLookup.java"/> + <run class="AnonymousMethodLookup"/> + </ajc-test> + + <ajc-test dir="pureJava" + title="Resolving extended classes with array parameters" + keywords="from-java"> + <compile files="ResolvingArrayParameters.java"/> + <run class="ResolvingArrayParameters"/> + </ajc-test> + + <ajc-test dir="pureJava" + title="Assignments as second arguments in ternary operators." + keywords="from-java"> + <compile files="TernaryAssignments.java"/> + <run class="TernaryAssignments"/> + </ajc-test> + + <ajc-test dir="pureJava" title="Using 'aspect' as identifier is legal TODO" + keywords="from-java,purejava"> + <compile files="KeywordAspect.java"/> + <run class="KeywordAspect"/> + </ajc-test> + + <ajc-test dir="pureJava" + title="Using 'pointcut' as identifier is legal TODO" + keywords="from-java,purejava"> + <compile files="KeywordPointcut.java"/> + <run class="KeywordPointcut"/> + </ajc-test> + + <ajc-test dir="pureJava" title="Conflicting inner classes with interfaces." + keywords="from-java"> + <compile files="PR413.java"/> + <run class="PR413"/> + </ajc-test> + + <ajc-test dir="new" pr="408" + title="Not binding constructor when using more than one compilation" + keywords="from-java,purejava"> + <compile files="OuterAbstract_PR408.java"/> + <compile files="ExtendsOuterAbstract_PR408.java"/> + <compile files="ConstructorNotFound_PR408.java"/> + <run class="ConstructorNotFound_PR408"/> + </ajc-test> + + <ajc-test dir="pureJava" title="confusions of casts and parens" + keywords="from-java"> + <compile files="CastVsParen.java"/> + <run class="CastVsParen"/> + </ajc-test> + + <ajc-test dir="pureJava" + title="default constructors seen by inner classes subtyping outers" + keywords="from-java"> + <compile files="DefaultConsAndInner.java"/> + <run class="DefaultConsAndInner"/> + </ajc-test> + + <ajc-test dir="pureJava" + title="folding fields set to anonymous instances containing self-references" + keywords="from-java"> + <compile files="AnonFolding.java"/> + <run class="AnonFolding"/> + </ajc-test> + + <ajc-test dir="pureJava" + title="finally at the end of a method that needs to return" + keywords="from-java"> + <compile files="FinallyAndReturns.java"/> + <run class="FinallyAndReturns"/> + </ajc-test> + + <ajc-test dir="pureJava" title="return;;; is not really legal" + keywords="from-java,purejava"> + <compile files="ReachableEmpty.java"> + <message kind="error" line="5"/> + <message kind="error" line="9"/> + <message kind="error" line="13"/> + <message kind="error" line="17"/> + </compile> + </ajc-test> + + <ajc-test dir="new" + title="ajc treating Throwable as checked, issuing error if not found" + keywords="from-java,purejava"> + <compile files="FalseThrowsCE.java"/> + <run class="FalseThrowsCE"/> + </ajc-test> + + <ajc-test dir="pureJava" + title="overriding methods from object in interfaces and multiple-inheritance" + keywords="from-java"> + <compile files="InterfaceAndObject.java"/> + <run class="InterfaceAndObject"/> + </ajc-test> + + <ajc-test dir="pureJava" + title="private fields in an outer class accessed by an inner which also extends the outer" + keywords="from-java"> + <compile files="PrivateFields.java"/> + <run class="PrivateFields"/> + </ajc-test> + + <ajc-test dir="pureJava" + title="breaking out of a labeled block inside of an if" + keywords="from-java"> + <compile files="Breaks.java"/> + <run class="Breaks"/> + </ajc-test> + + <ajc-test dir="pureJava" + title="abstractifying a method and getting it back through super" + keywords="from-java"> + <compile files="Abstracts.java"/> + <run class="Abstracts"/> + </ajc-test> + + <ajc-test dir="new" pr="328" + title="package protected classes becoming public" + keywords="from-java,purejava"> + <compile files="PR328.java"/> + <run class="PR328"/> + </ajc-test> + + <ajc-test dir="pureJava" + title="Packages and static classes with the same name produce compile errors." + keywords="from-java"> + <compile files="PackagesAndStaticClassesWithTheSameName.java"/> + <run class="PackagesAndStaticClassesWithTheSameName"/> + </ajc-test> + + <ajc-test dir="pureJava/innerTypeModifiers" + title="Inner types must generate classfiles with only Public/Default access flags." + keywords="from-java"> + <compile files="pkg1/Main.java,pkg2/Foo.java"/> + <run class="pkg1.Main"/> + </ajc-test> + + <ajc-test dir="pureJava/innerDefaultConstructors" + title="Default constructors have same access as their enclosing type" + keywords="from-java"> + <compile files="pkg1/Main.java,pkg2/Foo.java"> + <message kind="error" line="6"/> + </compile> + </ajc-test> + + <ajc-test dir="pureJava" + title="Returning primitive values matching method return type (minimal)" + keywords="from-java"> + <compile files="ReturnTypes.java"/> + <run class="ReturnTypes"/> + </ajc-test> + + <ajc-test dir="pureJava" title="Flow analysis and if(true)" + keywords="from-java"> + <compile files="Flow.java"/> + <run class="Flow"/> + </ajc-test> + + <ajc-test dir="pureJava" + title="packages and generated inner types (for I.class)" + keywords="from-java"> + <compile files="InterfaceAndClass.java"/> + <run class="p.InterfaceAndClass"/> + </ajc-test> + + <ajc-test dir="pureJava" title="A.this exprs match by exact type matching" + keywords="from-java"> + <compile files="QualifiedThisMatchesExactly.java"> + <message kind="error" line="14"/> + </compile> + </ajc-test> + + <ajc-test dir="pureJava" + title="Implicit this for new inner instance must be avaliable" + keywords="from-java"> + <compile files="ImplicitThisMissing.java"> + <message kind="error" line="4"/> + </compile> + </ajc-test> + + <ajc-test dir="pureJava" + title="Inners can reference protected fields of their outer's super." + keywords="from-java"> + <compile + files="protectedFieldRefInInner/Main.java,protectedFieldRefInInner/p1/C.java"/> + <run class="protectedFieldRefInInner.Main"/> + </ajc-test> + + <ajc-test dir="new" title="IOException on windows if nul used as identifier" + keywords="from-java,purejava"> + <compile files="NulIOException.java"> + <message kind="error" line="12"/> + <message kind="error" line="14"/> + <message kind="error" line="17"/> + </compile> + </ajc-test> + + <ajc-test dir="new" + title="NullPointerException (not compiler error) when extending non-static inner class" + keywords="from-java,purejava"> + <compile files="ExtendInnerCE.java"> + <message kind="error" line="3"/> + </compile> + </ajc-test> + + <ajc-test dir="new" + title="compiler flags final static variable as indefinite in member assignment." + keywords="from-java,purejava"> + <compile files="DefiniteStatic.java"/> + <run class="DefiniteStatic"/> + </ajc-test> + + <ajc-test dir="new" + title="confirm no IOException on windows if nul used as identifier" + keywords="from-java,purejava"> + <compile files="NulIOException2.java"/> + <run class="NulIOException2"/> + </ajc-test> + + <ajc-test dir="pureJava" + title="Primitives that special case for a constant arm should work" + keywords="from-java"> + <compile files="OneArmedPrimitiveTests.java"/> + <run class="OneArmedPrimitiveTests"/> + </ajc-test> + + <ajc-test dir="pureJava" title="Parenthesized true and false don't parse" + keywords="from-java"> + <compile files="ParenKeywords.java"/> + <run class="ParenKeywords"/> + </ajc-test> + + <ajc-test dir="pureJava" + title="Field sets to public fields of private fields of enclosing types" + keywords="from-java"> + <compile files="InnerFieldRef.java"/> + <run class="InnerFieldRef"/> + </ajc-test> + + <ajc-test dir="pureJava" + title="Constant values should be stored with the correct type of their fields" + keywords="from-java"> + <compile files="ConstantValueConversion.java"/> + <run class="ConstantValueConversion"/> + </ajc-test> + + <ajc-test dir="pureJava" + title="Local variables in initializers should not be treated as blank final fields" + keywords="from-java"> + <compile files="LocalInitializerVariableNotBlank.java"/> + <run class="LocalInitializerVariableNotBlank"/> + </ajc-test> + + <ajc-test dir="pureJava" + title="Binops aren't allowed as update stmts in for loops" + keywords="from-java"> + <compile files="NonStmtInFor.java"> + <message kind="error" line="3"/> + </compile> + </ajc-test> + + <ajc-test dir="pureJava" + title="Can't avoid doing division in case of div by zero" + keywords="from-java"> + <compile files="DivOpMustHappen.java"/> + <run class="DivOpMustHappen"/> + </ajc-test> + + <ajc-test dir="pureJava" + title="Testing frames w/greater than FF locals and 7F incs (i.e., WIDE instruction)" + keywords="from-java"> + <compile files="BigFrameTest.java"/> + <run class="BigFrameTest"/> + </ajc-test> + + <ajc-test dir="pureJava" title="correct numeric literals" + keywords="from-java"> + <compile files="LiteralsCp.java"/> + <run class="LiteralsCp"/> + </ajc-test> + + <ajc-test dir="pureJava" title="invalid numeric literals" + keywords="from-java"> + <compile files="LiteralsCf.java"> + <message kind="error" line="8"/> + <message kind="error" line="9"/> + <message kind="error" line="10"/> + <message kind="error" line="11"/> + <message kind="error" line="12"/> + <message kind="error" line="17"/> + <message kind="error" line="18"/> + <message kind="error" line="19"/> + <message kind="error" line="20"/> + <message kind="error" line="21"/> + <message kind="error" line="22"/> + <message kind="error" line="23"/> + <message kind="error" line="25"/> + <message kind="error" line="27"/> + <message kind="error" line="28"/> + <message kind="error" line="29"/> + <message kind="error" line="30"/> + <message kind="error" line="32"/> + </compile> + </ajc-test> + + <ajc-test dir="pureJava" pr="538" + title="inner types can't have the same simple name as an enclosing type" + keywords="from-java"> + <compile files="InnerNameConflictsCf.java"> + <message kind="error" line="9"/> + <message kind="error" line="14"/> + <message kind="error" line="20"/> + <message kind="error" line="21"/> + </compile> + </ajc-test> + + <ajc-test dir="pureJava" + title="test the unops and binops with various values" keywords="from-java"> + <compile files="BigOps.java"/> + <run class="BigOps"/> + </ajc-test> + + <ajc-test dir="pureJava" + title="test + and += for strings and variously typed values" + keywords="from-java"> + <compile files="BigString.java"/> + <run class="BigString"/> + </ajc-test> + + <ajc-test dir="pureJava" title="test try/catch/finally statements" + keywords="from-java"> + <compile files="TryCatchFinally.java"/> + <run class="TryCatchFinally"/> + </ajc-test> + + + <ajc-test dir="pureJava" pr="547" + title="local types can be bound in the signatures of other local types" + keywords="from-resolved_10rc3,from-java"> + <compile files="LocalInners.java"/> + <run class="LocalInners"/> + </ajc-test> + + <ajc-test dir="new" + title="final constructor parameter causes incorrect compiler error" + keywords="from-java,purejava"> + <compile files="FinalConstructorParm.java"/> + <run class="FinalConstructorParm"/> + </ajc-test> + + <ajc-test dir="new" title="Error expected for field of type void" + keywords="from-java,purejava"> + <compile files="VoidField.java"> + <message kind="error" line="2"/> + <message kind="error" line="4"/> + <message kind="error" line="6"/> + </compile> + </ajc-test> + + <ajc-test dir="new" title="Error expected for constructor in interfaces" + keywords="from-java"> + <compile files="InterfaceConstructor.java"> + <message kind="error" line="2"/> + <message kind="error" line="6"/> + <message kind="error" line="8"/> + </compile> + </ajc-test> + + <ajc-test dir="new" pr="558" + title="class name for identifier as String should provoke error" + keywords="from-java,purejava"> + <compile files="PR558.java"> + <message kind="error" line="4"/> + </compile> + </ajc-test> + + <ajc-test dir="new" pr="567" + title="cyclic interface inheritance not detected if no classes implement the interfaces" + keywords="from-java,purejava,messages-vary"> + <compile files="CyclicInterfaceInheritance.java" + options="!eclipse"> + <message kind="error" line="14"/> + <message kind="error" line="15"/> + </compile> + </ajc-test> + + <ajc-test dir="new" pr="567" title="cyclic class inheritance" + keywords="from-java,purejava"> + <compile files="CyclicClassInheritance.java"> + <message kind="error" line="11"/> + <message kind="error" line="12"/> + </compile> + </ajc-test> + + <ajc-test dir="pureJava" title="Type names are not expressions on their own" + keywords="from-java,purejava"> + <compile files="TypeExprErrors.java"> + <message kind="error" line="10"/> + <message kind="error" line="17"/> + <message kind="error" line="18"/> + <message kind="error" line="19"/> + <message kind="error" line="20"/> + <message kind="error" line="21"/> + <message kind="error" line="22"/> + <message kind="error" line="23"/> + <message kind="error" line="24"/> + <message kind="error" line="25"/> + <message kind="error" line="26"/> + <message kind="error" line="27"/> + <message kind="error" line="28"/> + <message kind="error" line="29"/> + <message kind="error" line="30"/> + <message kind="error" line="31"/> + <message kind="error" line="32"/> + <message kind="error" line="33"/> + <message kind="error" line="34"/> + <message kind="error" line="36"/> + <message kind="error" line="37"/> + </compile> + </ajc-test> + + <ajc-test dir="pureJava/nameConflicts" + title="type and package name conflicts are resolved happily (1a)" + keywords="from-java,purejava"> + <compile files="p1/Main1.java,p1/Foo.java,p1/p2.java"/> + <run class="p1.Main1"/> + </ajc-test> + + <ajc-test dir="pureJava/nameConflicts" + title="(fails in USEJAVAC) type and package name conflicts are resolved happily (1b)" + keywords="from-java,purejava"> + <compile files="p1.java,p1/p2/Foo.java"/> + <compile files="p1/Main1.java,p1/Foo.java,p1/p2.java"/> + <run class="p1.Main1"/> + </ajc-test> + + <ajc-test dir="pureJava/nameConflicts" + title="type and package name conflicts are resolved happily (2)" + keywords="from-java"> + <compile files="p1/Main2.java,p1/p2/Foo.java"/> + <run class="p1.Main2"/> + </ajc-test> + + <ajc-test dir="pureJava/nameConflicts" + title="type and package name conflicts caught as errors (1)" + keywords="from-java,purejava"> + <compile files="p1/p2.java,p1/Main1.java,p1/Foo.java,p1/p2/Foo.java"> + <message kind="error" line="3"/> + </compile> + </ajc-test> + + <ajc-test dir="pureJava" + title="flow analysis where final variable set in another constructor" + keywords="from-java,purejava"> + <compile files="ConstructorFlow.java"/> + <run class="ConstructorFlow"/> + </ajc-test> + + <ajc-test dir="new" pr="584" + title="Can construct inner classes using qualified expressions" + keywords="from-java,purejava"> + <compile files="PR584.java"/> + <run class="PR584"/> + </ajc-test> + + <ajc-test dir="new/protectedStatic" pr="585" + title="subclass unable to access protected static methods using type-qualified references" + keywords="from-java,purejava"> + <compile files="SubClass.java,pack/SuperClass.java"/> + <run class="SubClass"/> + </ajc-test> + + <ajc-test dir="new" pr="588" title="Undefined inner class constructor" + keywords="from-java,purejava"> + <compile files="UndefinedInner.java"> + <message kind="error" line="6"/> + </compile> + </ajc-test> + + <ajc-test dir="pureJava" + title="try statements work sorta like scoped items for exception flow control" + keywords="from-java"> + <compile files="TryWorksLikeEnvironment.java"/> + <run class="TryWorksLikeEnvironment"/> + </ajc-test> + + <ajc-test dir="pureJava" + title="qualified this must work exactly, not based on subtypes" + keywords="from-java"> + <compile files="QualifiedThisExactness.java"> + <message kind="error" line="6"/> + </compile> + </ajc-test> + + <ajc-test dir="new/packagePrefix" pr="574" + title="classes that are package prefixes are illegal" + keywords="from-java,purejava,messages-vary"> + <compile files="p/prefix.java,p/prefix/SomeClass.java" + options="!eclipse"> + <message kind="error" line="2"/> + </compile> + </ajc-test> + + <ajc-test dir="new/introTypeMissing" + title="valid type expressions for introduced type testing" + keywords="from-java,purejava"> + <compile files="TargetClass.java,Util.java"/> + <run class="TargetClass"/> + </ajc-test> + + <ajc-test dir="new/introTypeMissing" + title="CF expected when enclosing class superclass used as this qualifier in inner class" + keywords="from-java"> + <compile files="TargetClassCF.java,Util.java"> + <message kind="error" line="22"/> + <message kind="error" line="23"/> + <message kind="error" line="27"/> + <message kind="error" line="28"/> + </compile> + </ajc-test> + + <ajc-test dir="new/introTypeMissing" + title="enclosing class may be used as this qualifier in inner class" + keywords="from-java"> + <compile files="TargetClassCP.java,Util.java"/> + <run class="TargetClassCP"/> + </ajc-test> + + <ajc-test dir="new" + title="PR591 compiler error expected when directly calling unimplemented abstract method using super" + keywords="from-java,purejava"> + <compile files="AbstractMethodCall.java"> + <message kind="error" line="10"/> + </compile> + </ajc-test> + + <ajc-test dir="pureJava" + title="suggested by Jacks 15.28-qualified-namestr tests" + keywords="from-java,purejava,messages-vary"> + <compile files="NonConstants.java" + options="!eclipse"> + <message kind="error" line="13"/> + <message kind="error" line="14"/> + <message kind="error" line="15"/> + <message kind="error" line="16"/> + <message kind="error" line="17"/> + </compile> + </ajc-test> + + <ajc-test dir="pureJava" + title="nested finally blocks have interesting frame location problems" + keywords="from-java"> + <compile files="NestedFinally.java"/> + <run class="NestedFinally"/> + </ajc-test> + + <ajc-test dir="pureJava" + title="suggested by jacks 3.7-15 all comments must be closed" + keywords="from-java,purejava"> + <compile files="OpenComment.java"> + <message kind="error" line="7"/> + </compile> + </ajc-test> + + <ajc-test dir="pureJava" pr="601" + title="nested synchronized blocks have interesting frame location problems" + keywords="from-java"> + <compile files="NestedSynchronized.java"/> + <run class="NestedSynchronized"/> + </ajc-test> + + <ajc-test dir="new/classaccess" + title="package class access not enforced outside of package" + keywords="from-java,purejava"> + <compile files="main/Main.java,pack1/Target.java"> + <message kind="error" line="7"/> + </compile> + </ajc-test> + + <ajc-test dir="new" pr="631" title="expecting CE for ambiguous reference" + keywords="from-java,purejava"> + <compile files="AmbiguousClassReference.java"> + <message kind="error" line="11"/> + </compile> + </ajc-test> + + <ajc-test dir="new" pr="643" title="try without catch or finally" + keywords="from-java,purejava,message-vary"> + <compile files="TryNoCatchCE.java" + options="!eclipse"> + <message kind="error" line="6"/> + </compile> + </ajc-test> + + <ajc-test dir="new" pr="642" title="invalid floating-point constant" + keywords="from-java,purejava,messages-vary"> + <compile files="ParsingFloatCE.java" + options="!eclipse"> + <message kind="error" line="5"/> + </compile> + </ajc-test> + + <ajc-test dir="pureJava" title="anonymous inner classes with inner types" + keywords="from-java"> + <compile files="AnonymousWithInner.java"/> + <run class="AnonymousWithInner"/> + </ajc-test> + + <ajc-test dir="pureJava" pr="651" title="qualified super call expr" + keywords="from-java"> + <compile files="QualifiedSuperCall.java"/> + <run class="QualifiedSuperCall"/> + </ajc-test> + + <ajc-test dir="new/subaspects" pr="647" + title="concrete aspect unable to access abstract package-private method in parent for overriding" + keywords="from-java,purejava,messages-vary" + comment="XXX fix source - package-private"> + <compile files="parent/ParentMethodCE.java,child/ChildMethodCE.java" + options="!eclipse"> + <message kind="warning" line="28"/> + <message kind="error" line="27"/> + </compile> + </ajc-test> + + <ajc-test dir="new" + title="super reference used to disambiguate names of different but compatible types" + keywords="from-java,purejava"> + <compile files="SuperDisambiguatingType.java"/> + <run class="SuperDisambiguatingType"/> + </ajc-test> + + <ajc-test dir="pureJava" title="anonymous explicit inner constructors" + keywords="from-java,purejava"> + <compile files="QualifiedNewCP.java"/> + <run class="QualifiedNewCP"/> + </ajc-test> + + <ajc-test dir="pureJava" pr="680" + title="interfaces with non-explicitly static inner classes" + keywords="from-java"> + <compile files="InterfaceAndInnerHelper.java"/> + <compile files="InterfaceAndInner.java"/> + <run class="InterfaceAndInner"/> + </ajc-test> + + <ajc-test dir="pureJava" + title="Overruning the lineStarts buffer, DO NOT EDIT THIS FILE!!!!" + keywords="from-java,purejava"> + <compile files="AJError.java"/> + <run class="AJError"/> + </ajc-test> + + <ajc-test dir="new" pr="701" title="no CE for unambiguous type reference" + keywords="from-java,purejava"> + <compile files="UnambiguousClassReference3CP.java"/> + <run class="UnambiguousClassReference3CP"/> + </ajc-test> + + <ajc-test dir="new" pr="701" + title="CE for ambiguous type reference (imports)" + keywords="from-java,purejava"> + <compile files="AmbiguousClassReference2CE.java"> + <message kind="error" line="2"/> + <message kind="error" line="10"/> + </compile> + </ajc-test> + + <ajc-test dir="new" pr="701" + title="CE for ambiguous type reference (two type declarations)" + keywords="from-java,purejava,messages-vary"> + <compile files="AmbiguousClassReference3CE.java" + options="!eclipse"> + <message kind="error" line="10"/> + </compile> + </ajc-test> + + <ajc-test dir="new" pr="701" + title="CE for ambiguous type reference (two inner types)" + keywords="from-java,purejava,messages-vary"> + <compile files="AmbiguousClassReference4CE.java" + options="!eclipse"> + <message kind="error" line="10"/> + </compile> + </ajc-test> + + <ajc-test dir="new" pr="709" title="final assignment in loop" + keywords="from-java,purejava"> + <compile files="FinalInLoop.java"/> + <run class="FinalInLoop"/> + </ajc-test> + + <ajc-test dir="pureJava" title="private super access in inners" + keywords="from-java,purejava"> + <compile files="PrivateSuperInnerAccess.java"/> + <run class="PrivateSuperInnerAccess"/> + </ajc-test> + + <ajc-test dir="pureJava" + title="nested interface does not require new qualifier (8)" + keywords="from-java,purejava"> + <compile files="InvalidNewQualifier8CE.java"> + <message kind="error" line="8"/> + </compile> + </ajc-test> + + <ajc-test dir="pureJava" + title="nested interface does not require new qualifier (9)" + keywords="from-java,purejava"> + <compile files="InvalidNewQualifier9CE.java"> + <message kind="error" line="9"/> + </compile> + </ajc-test> + + <ajc-test dir="pureJava" + title="nested interface does not require new qualifier (10)" + keywords="from-java,purejava"> + <compile files="InvalidNewQualifier10CE.java"> + <message kind="error" line="10"/> + </compile> + </ajc-test> + + <ajc-test dir="pureJava" + title="nested interface does not require new qualifier (14)" + keywords="from-java,purejava"> + <compile files="InvalidNewQualifier14CE.java"> + <message kind="error" line="14"/> + </compile> + </ajc-test> + + <ajc-test dir="pureJava" + title="nested interface does not require new qualifier (15)" + keywords="from-java,purejava"> + <compile files="InvalidNewQualifier15CE.java"> + <message kind="error" line="15"/> + </compile> + </ajc-test> + + <ajc-test dir="pureJava" + title="nested interface does not require new qualifier (16)" + keywords="from-java,purejava"> + <compile files="InvalidNewQualifier16CE.java"> + <message kind="error" line="16"/> + </compile> + </ajc-test> + + <ajc-test dir="pureJava" title="Operands work correctly" + keywords="from-bigjava"> + <compile files="Ops.java"/> + <run class="Ops"/> + </ajc-test> + + <ajc-test dir="errors" + title="reasonable error for crosscut reference with no formals specified" + keywords="from-errors"> + <compile files="NoFormalsCrosscut.java"> + <message kind="error" line="6"/> + <message kind="error" line="7"/> + <message kind="error" line="8"/> + </compile> + </ajc-test> + + <ajc-test dir="errors" + title="reasonable error for introduction on type whose source isn't found" + keywords="from-errors"> + <compile files="NoSource.java"> + <message kind="error" line="4"/> + </compile> + </ajc-test> + + <ajc-test dir="errors" + title="check that constructor name's match the enclosing type" + keywords="from-errors,purejava"> + <compile files="BadConstructorName.java"> + <message kind="error" line="4"/> + </compile> + </ajc-test> + + <ajc-test dir="errors" + title="handle errors in crosscut designators, insist that they end with a semicolon" + keywords="from-errors"> + <compile files="BadDesignator.java"> + <message kind="error" line="4"/> + </compile> + </ajc-test> + + <ajc-test dir="errors" + title="errors for not applicable or accessible methods" + keywords="from-errors,purejava"> + <compile files="MethodsNotFound.java"> + <message kind="error" line="4"/> + <message kind="error" line="8"/> + <message kind="error" line="12"/> + </compile> + </ajc-test> + + <ajc-test dir="errors" + title="try to return from a before, after, after throwing and after returning" + keywords="from-errors"> + <compile files="InvalidReturn.java"> + <message kind="error" line="12"/> + <message kind="error" line="16"/> + <message kind="error" line="19"/> + <message kind="error" line="22"/> + </compile> + </ajc-test> + + <ajc-test dir="errors" pr="130" + title="the designator has a wildcard for method name but no return type specified" + keywords="from-errors"> + <compile files="NoReturnTypeInDesignator.java"> + <message kind="error" line="6"/> + </compile> + </ajc-test> + + <ajc-test dir="errors" + title="the designator for the introduction has no type after the | charcter" + keywords="from-errors"> + <compile files="BadIntroductionDesignator.java"> + <message kind="error" line="6"/> + </compile> + </ajc-test> + + <ajc-test dir="errors" pr="140" title="crosscut signature does not match" + keywords="from-errors"> + <compile files="BadCCutSig.java"> + <message kind="error" line="8"/> + </compile> + </ajc-test> + + <ajc-test dir="errors" + title="proper exit conditions when errors fall through to javac" + keywords="from-errors"> + <compile files="FromJavac.java"> + <message kind="error" line="11"/> + </compile> + </ajc-test> + + <ajc-test dir="errors" pr="213" + title="mismatched parens on advice (wasn't binding Tester)" + keywords="from-errors"> + <compile files="MismatchedParens.java"> + <message kind="error" line="16"/> + <message kind="error" line="17"/> + </compile> + </ajc-test> + + <ajc-test dir="errors" pr="209" title="Non-static advice silently ignored" + keywords="from-errors"> + <compile files="BadPointcutName.java"> + <message kind="error" line="15"/> + </compile> + </ajc-test> + + <ajc-test dir="errors" pr="218" + title="import statement within class body crashes compiler" + keywords="from-errors"> + <compile files="ImportWithinClassBody.java"> + <message kind="error" line="8"/> + </compile> + </ajc-test> + + <ajc-test dir="errors" pr="219" title="extra closing brace" + keywords="from-errors"> + <compile files="ExtraClosingBrace.java"> + <message kind="error" line="9"/> + <message kind="error" line="10"/> + </compile> + </ajc-test> + + <ajc-test dir="errors" pr="244" + title="decent errors for around return type not matching target point" + keywords="from-errors"> + <compile files="AroundReturnType.java"> + <message kind="error" line="16"/> + <message kind="error" line="21"/> + </compile> + </ajc-test> + + <ajc-test dir="errors" title="eachobject: can't call new on an aspect of" + keywords="from-errors"> + <compile files="CantCallConstructorOnAspects.java"> + <message kind="error" line="4"/> + </compile> + </ajc-test> + + <ajc-test dir="errors" + title="eachobject: only zero-argument constructors allowed in an aspect" + keywords="from-errors,fail-unimplemented"> + <compile files="AspectsCantHaveYesArgumentConstructors.java"> + <message kind="error" line="8"/> + </compile> + </ajc-test> + + <ajc-test dir="errors" title="eachobject: can't extend a concrete aspect" + keywords="from-errors,fail-unimplemented"> + <compile files="SubAspectsCantExtendNonAbstractAspects.java"> + <message kind="error" line="14"/> + </compile> + </ajc-test> + + <ajc-test dir="errors" pr="271" title="instanceof used without a class" + keywords="from-errors"> + <compile files="InstanceofWithoutClass.java"> + <message kind="error" line="14"/> + </compile> + </ajc-test> + + <ajc-test dir="errors" pr="280" title="wildcard used for returns clause" + keywords="from-errors"> + <compile files="WildcardForReturns.java"> + <message kind="error" line="17"/> + </compile> + </ajc-test> + + <ajc-test dir="errors" pr="280" title="no return statement in around advice" + keywords="from-errors,new-messages-vary"> + <compile files="NoReturnStatement.java"> + <message kind="error" line="15"/> + </compile> + </ajc-test> + + <ajc-test dir="errors" pr="286" + title="inner aspects must be static (no longer matches PR#286)" + keywords="from-errors,fail-unimplemented"> + <compile files="AbstractAspectOf.java"> + <message kind="error" line="12"/> + </compile> + </ajc-test> + + <ajc-test dir="errors" + title="Casting class declarations as interfaces" + keywords="from-errors"> + <compile files="InterfaceCast.java"> + <message kind="error" line="14"/> + </compile> + </ajc-test> + + <ajc-test dir="errors" + title="omits a variable name and crashes with a null pointer" + keywords="from-errors"> + <compile files="BindingNullPointer.java"> + <message kind="error" line="7"/> + </compile> + </ajc-test> + + <ajc-test dir="errors" + title="Not generating an error for using new as a method name" + keywords="from-errors"> + <compile files="New.java"> + <message kind="error" line="12"/> + </compile> + </ajc-test> + + <ajc-test dir="errors" title="ClassCastException on the int literal" + keywords="from-errors"> + <compile files="IntLiteral.java"> + <message kind="error" line="17"/> + </compile> + </ajc-test> + + <ajc-test dir="new" + title="Wrong strictfp keyword usage in interface function prototype [TODO: move to errors]" + keywords="from-errors"> + <compile files="StrictFpCErr1.java"> + <message kind="error" line="3"/> + </compile> + </ajc-test> + + <ajc-test dir="new" + title="Wrong strictfp keyword usage in field declaration [TODO: move to errors]" + keywords="from-errors"> + <compile files="StrictFpCErr2.java"> + <message kind="error" line="3"/> + </compile> + </ajc-test> + + <ajc-test dir="new" + title="Wrong strictfp keyword usage in constructor declaration [TODO: move to errors]" + keywords="from-errors"> + <compile files="StrictFpCErr3.java"> + <message kind="error" line="3"/> + </compile> + </ajc-test> + + <ajc-test dir="errors" + title="Incorrect static casts to primitively foldable arguments should not crash the compiler." + keywords="from-errors"> + <compile files="BadStaticCast.java"> + <message kind="error" line="5"/> + </compile> + </ajc-test> + + <ajc-test dir="errors" title="Dominates with commas should signal an error." + keywords="from-errors"> + <compile files="DominatesWithCommas.java"> + <message kind="error" line="9"/> + </compile> + </ajc-test> + + <ajc-test dir="errors" + title="Accessing instance fields and instance methods statically." + keywords="from-errors,purejava"> + <compile files="AccessingInstanceFieldsStatically.java"> + <message kind="error" line="15"/> + <message kind="error" line="16"/> + <message kind="error" line="17"/> + <message kind="error" line="18"/> + <message kind="error" line="26"/> + <message kind="error" line="27"/> + <message kind="error" line="30"/> + <message kind="error" line="38"/> + <message kind="error" line="39"/> + </compile> + </ajc-test> + + <ajc-test dir="errors" pr="95" + title="stack overflow with recursive crosscut specifier" + keywords="from-errors"> + <compile files="RecursiveCCutSpecifier.java"> + <message kind="error" line="10"/> + </compile> + </ajc-test> + + <ajc-test dir="errors" + title="Throwing a NullPointerException when formals can't be bound in named pointcut" + keywords="from-errors"> + <compile files="BadFormalsToCalls.java"> + <message kind="error" line="22"/> + </compile> + </ajc-test> + + <ajc-test dir="errors" pr="385" + title="disallow defining more than one pointcut with the same name" + keywords="from-errors,fail-unimplemented"> + <compile files="OverloadedPointcuts.java"> + <message kind="error" line="5"/> + </compile> + </ajc-test> + + <ajc-test dir="errors" + title="pre 0.7 introduction form outside aspect body causes an EmptyStackException" + keywords="from-errors"> + <compile files="BadIntroduction.java"> + <message kind="error" line="10"/> + </compile> + </ajc-test> + + <ajc-test dir="errors" title="a class can't extend an aspect" + keywords="from-errors,fail-unimplemented"> + <compile files="ClassExtendingAspect.java"> + <message kind="error" line="19"/> + </compile> + </ajc-test> + + <ajc-test dir="errors" + title="a before() clause at the class-level causes an EmptyStackException" + keywords="from-errors"> + <compile files="TopLevelBefore.java"> + <message kind="error" line="9"/> + </compile> + </ajc-test> + + <ajc-test dir="errors" + title="an after() clause at the class-level causes an EmptyStackException" + keywords="from-errors"> + <compile files="TopLevelAfter.java"> + <message kind="error" line="9"/> + </compile> + </ajc-test> + + <ajc-test dir="errors" + title="an around() clause at the class-level causes an EmptyStackException" + keywords="from-errors"> + <compile files="TopLevelAround.java"> + <message kind="error" line="9"/> + </compile> + </ajc-test> + + <ajc-test dir="errors" title="Crashes when a cast is within another cast" + keywords="from-errors,purejava"> + <compile files="CastInCast.java"> + <message kind="error" line="9"/> + </compile> + </ajc-test> + + <ajc-test dir="errors" title="Crashes when a cast of the form )int) appears" + keywords="from-errors,purejava,messages-vary"> + <compile files="BadCast.java" + options="!eclipse"> + <message kind="error" line="9"/> + <message kind="error" line="10"/> + </compile> + </ajc-test> + + <ajc-test dir="errors" title="Crashes when the closing brace is reversed" + keywords="from-errors,purejava,messages-vary"> + <compile files="ClosingBrace.java" + options="!eclipse"> + <message kind="error" line="11"/> + </compile> + </ajc-test> + + <ajc-test dir="errors" + title="Crashes when a method name is missing in a call -- e.g. 'System.out.();'" + keywords="from-errors,purejava"> + <compile files="NoMethodName.java"> + <message kind="error" line="9"/> + </compile> + </ajc-test> + + <ajc-test dir="errors" title="Crashes when a bad r-value appears." + keywords="from-errors,purejava"> + <compile files="BadValue.java"> + <message kind="error" line="9"/> + </compile> + </ajc-test> + + <ajc-test dir="errors" title="Two underscores as a variables causes a crash" + keywords="from-errors,purejava"> + <compile files="BadVar.java"> + <message kind="error" line="9"/> + </compile> + </ajc-test> + + <ajc-test dir="errors" + title="Crashes when assigning to a final static in an intializer and declaration" + keywords="from-errors,purejava"> + <compile files="FinalStatic.java"> + <message kind="error" line="13"/> + </compile> + </ajc-test> + + <ajc-test dir="errors" title="Crashes when two dots appear instead of one" + keywords="from-errors,purejava"> + <compile files="TwoDots.java"> + <message kind="error" line="9"/> + </compile> + </ajc-test> + + <ajc-test dir="errors" title="Crashes when there're stray dots" + keywords="from-errors,purejava"> + <compile files="StrayDot.java"> + <message kind="error" line="9"/> + </compile> + </ajc-test> + + <ajc-test dir="errors" title="Stray characters cause a crash" + comment="XXX public class in wrong file" + keywords="from-errors,purejava"> + <compile files="StraySlash.java"> + <message kind="error" line="9"/> + </compile> + </ajc-test> + + <ajc-test dir="errors" title="Colon instead of a semi-colon causes a crash" + comment="XXX public class in wrong file" + keywords="from-errors,purejava"> + <compile files="Colon.java"> + <message kind="error" line="9"/> + </compile> + </ajc-test> + + <ajc-test dir="errors" + title="type error in initializer caught by ajc, not javac" + keywords="from-errors,purejava"> + <compile files="ArrayInitializerType.java"> + <message kind="error" line="2"/> + </compile> + </ajc-test> + + <ajc-test dir="errors" + title="Circular inheritance with classes causes a stack overflow." + keywords="from-errors,purejava"> + <compile files="CircularExtends.java"> + <message kind="error" line="7"/> + </compile> + </ajc-test> + + <ajc-test dir="errors" title="Doesn't detect cyclic inheritance of aspects." + keywords="from-errors"> + <compile files="CircularExtendsAspect.java"> + <message kind="error" line="18"/> + </compile> + </ajc-test> + + <ajc-test dir="errors" + title="Binds the pointcut formals to member variables instead of pointcut formals." + keywords="from-errors"> + <compile files="PointcutFormals.java" options="-Xlint:warning"> + <message kind="error" line="14"/> + <message kind="error" line="15"/> + <message kind="warning" line="16"/> + <message kind="warning" line="17"/> + </compile> + </ajc-test> + + <ajc-test dir="errors" title="ambiguous formal in formals pattern" + keywords="from-errors"> + <compile files="AmbiguousFormal.java"> + <message kind="error" line="6"/> + </compile> + </ajc-test> + + <ajc-test dir="errors" title="Missing ;" keywords="from-errors,purejava"> + <compile files="PR405.java"> + <message kind="error" line="15"/> + </compile> + </ajc-test> + + <ajc-test dir="errors" + title="cast expressions should not allow casts between ifaces and array types" + keywords="from-errors,purejava"> + <compile files="InterfaceArrayCast.java"> + <message kind="error" line="9"/> + <message kind="error" line="10"/> + </compile> + </ajc-test> + + <ajc-test dir="errors" + title="parsing errors for various bad forms of NewArrayExprs." + keywords="from-errors,purejava"> + <compile files="BadNewArrayExprs.java"> + <message kind="error" line="4"/> + <message kind="error" line="5"/> + <message kind="error" line="6"/> + <message kind="error" line="7"/> + </compile> + </ajc-test> + + <ajc-test dir="errors" + title="good error for field name instead of type name" + keywords="from-errors"> + <compile files="BadTypeName.java"> + <message kind="error" line="2"/> + <message kind="error" line="4"/> + <message kind="error" line="6"/> + <message kind="error" line="8"/> + <message kind="error" line="10"/> + <message kind="error" line="12"/> + </compile> + </ajc-test> + + <ajc-test dir="errors" + title="good error for bad field and inner class references" + keywords="from-errors,purejava"> + <compile files="BadReferences.java"> + <message kind="error" line="3"/> + <message kind="error" line="5"/> + </compile> + </ajc-test> + + <ajc-test dir="errors" title="errors in aspect inheritance - 1" + keywords="from-errors"> + <compile files="AspectInheritance1.java"> + <message kind="error" line="17"/> + </compile> + </ajc-test> + + <ajc-test dir="errors" title="errors in aspect inheritance - 2" + keywords="from-errors" + comment="XXX error now is confusing methods with pointcuts"> + <compile files="AspectInheritance2.java"> + <message kind="error" line="15"/> + <message kind="error" line="20"/> + <message kind="error" line="26"/> + <message kind="error" line="30"/> + </compile> + </ajc-test> + + <ajc-test dir="errors" title="errors in aspect inheritance - 3" + keywords="from-errors"> + <compile files="AspectInheritance3.java"> + <message kind="error" line="19"/> + <message kind="error" line="24"/> + </compile> + </ajc-test> + + <ajc-test dir="errors" title="errors in aspect inheritance - 4" + keywords="from-errors"> + <compile files="AspectInheritance4.java"> + <message kind="error" line="17"/> + </compile> + </ajc-test> + + <ajc-test dir="errors" + title="Implementing a non-interface used to crash the compiler." + keywords="from-errors,purejava"> + <compile files="PR333.java"> + <message kind="error" line="6"/> + </compile> + </ajc-test> + + <ajc-test dir="errors" + title="circular dominates leading to irresolvable advice precedence" + keywords="from-errors"> + <compile files="CircularDominates.java"> + <message kind="error" line="12"/> + <message kind="error" line="16"/> + <message kind="error" line="20"/> + </compile> + </ajc-test> + + <ajc-test dir="errors" + title="Should issue an error for using 'class' instead of 'aspect'" + keywords="from-errors"> + <compile files="NoAspect.java"> + <message kind="error" line="12"/> + </compile> + </ajc-test> + + <ajc-test dir="errors" + title="Should signal an error when we need an exposed value but don't provide it" + keywords="from-errors"> + <compile files="MissingExposure.java"> + <message kind="error" line="13"/> + </compile> + </ajc-test> + + <ajc-test dir="errors" + title="StackOverFlowException with circular +implements's." + keywords="from-errors"> + <compile files="CircularPlusImplementsIntros.java"> + <message kind="error" line="19"/> + </compile> + </ajc-test> + + <ajc-test dir="errors" + title="Introducing protected methods is causing a crash" + keywords="from-errors"> + <compile files="ProtectedIntro.java"> + <message kind="error" line="14"/> + </compile> + </ajc-test> + + <ajc-test dir="errors" + title="Introducing protected fields is causing a crash" + keywords="from-errors"> + <compile files="ProtectedFieldIntro.java"> + <message kind="error" line="14"/> + </compile> + </ajc-test> + + <ajc-test dir="errors" pr="388" + title="two classes with the same fully-qualified names [eachjvm]" + keywords="from-errors" + comment="XXX error not flagging initial type"> + <compile files="DuplicatedNames.java"> + <message kind="error" line="3"/> + <message kind="error" line="5"/> + <message kind="error" line="7"/> + <message kind="error" line="9"/> + </compile> + </ajc-test> + + <ajc-test dir="errors" pr="396" + title="Undefined pointcuts were throwing exceptions in 07b11 [callsto]" + keywords="from-errors"> + <compile files="UndefinedPointCut_PR396.java"> + <message kind="error" line="8"/> + </compile> + </ajc-test> + + <ajc-test dir="errors" pr="240" title="advice on abstract pointcuts" + keywords="from-errors"> + <compile files="StaticAdviceOnAbstract.java"> + <message kind="error" line="17"/> + </compile> + </ajc-test> + + <ajc-test dir="errors" + title="Whoops, I forgot to put a class in the field access PCD." + keywords="from-errors"> + <compile files="BadGetPCD.java"> + <message kind="error" line="5"/> + </compile> + </ajc-test> + + <ajc-test dir="errors" pr="138" + title=", PR#139 the arounds return something but there is no returns statement" + keywords="from-errors"> + <compile files="MissingReturns.java"> + <message kind="error" line="14"/> + <message kind="error" line="20"/> + </compile> + </ajc-test> + + <ajc-test dir="pureJava" title="simple tests of throws and for stmt typing" + keywords="from-errors"> + <compile files="SimpleSpec.java"> + <message kind="error" line="4"/> + <message kind="error" line="7"/> + </compile> + </ajc-test> + + <!-- we're not implementing this error check in 1.1 --> + <ajc-test dir="errors" + title="checking the contra-variant errors for typing of proceed" + keywords="from-errors,knownLimitations"> + <compile files="BadAround.java"> + <message kind="error" line="12"/> + <message kind="error" line="15"/> + <message kind="error" line="18"/> + <message kind="error" line="19"/> + <message kind="error" line="22"/> + </compile> + </ajc-test> + + <ajc-test dir="errors" + title="error of no return statement detected not by ajc but by javac (line 4)" + keywords="from-errors,purejava"> + <compile files="NoReturnStatementSimple.java"> + <message kind="error" line="4"/> + </compile> + </ajc-test> + + <ajc-test dir="errors" title="class and interface extension" + keywords="from-errors,purejava,messages-vary"> + <compile files="BadExtension.java" + options="!eclipse"> + <message kind="error" line="7"/> + <message kind="error" line="9"/> + <message kind="error" line="16"/> + <message kind="error" line="17"/> + <message kind="error" line="18"/> + <message kind="error" line="19"/> + <message kind="error" line="21"/> + <message kind="error" line="35"/> + <message kind="error" line="38"/> + </compile> + </ajc-test> + + <ajc-test dir="errors" title="multiple conflicting introductions" + keywords="from-errors"> + <compile files="MultipleIntros.java"> + <message kind="error" line="16"/> + <message kind="error" line="18"/> + <message kind="error" line="19"/> + <message kind="error" line="22"/> + <message kind="error" line="27"/> + <message kind="error" line="30"/> + </compile> + </ajc-test> + + <ajc-test dir="errors" title="types in throws clauses" + keywords="from-errors,purejava"> + <compile files="ThrowsClause.java"> + <message kind="error" line="2"/> + <message kind="error" line="4"/> + <message kind="error" line="13"/> + </compile> + </ajc-test> + + <ajc-test dir="errors" + title="referencing non-static pointcuts in outer aspects" + keywords="from-errors"> + <compile files="StaticPointcutRefs.java"> + <message kind="error" line="8"/> + </compile> + </ajc-test> + + <ajc-test dir="errors" title="bad switch syntax" + keywords="from-errors,purejava"> + <compile files="Switch.java"> + <message kind="error" line="4"/> + </compile> + </ajc-test> + + <ajc-test dir="new" + title="javac correct compiler error if there is no return in around returning result" + keywords="from-errors"> + <compile files="NoReturnInProceed.java"> + <message kind="error" line="17"/> + </compile> + </ajc-test> + + <ajc-test dir="errors" + title="should give an error for introducing two members with the same name" + keywords="from-errors"> + <compile files="TwoIntros.java"> + <message kind="error" line="14"/> + <message kind="error" line="16"/> + </compile> + </ajc-test> + + <ajc-test dir="errors" + title="wimpy test for undeclared and uncaught exceptions" + keywords="from-errors"> + <compile files="UndeclaredThrows.java"> + <message kind="error" line="12"/> + <message kind="error" line="18"/> + </compile> + </ajc-test> + + <ajc-test dir="pureJava" title="test for not folding circular constants" + keywords="from-errors"> + <compile files="CircularFolding.java"> + <message kind="error" line="6"/> + <message kind="error" line="7"/> + <message kind="error" line="8"/> + </compile> + </ajc-test> + + <ajc-test dir="pureJava" title="continue targets must be continuable" + keywords="from-errors"> + <compile files="BadContinueTarget.java"> + <message kind="error" line="6"/> + </compile> + </ajc-test> + + <ajc-test dir="pureJava" + title="qualified this to non-inner should be caught" + keywords="from-errors"> + <compile files="BadQualifiedNew.java"> + <message kind="error" line="4"/> + </compile> + </ajc-test> + + <ajc-test dir="pureJava" + title="Referencing various things from static contexts" + keywords="from-errors,purejava"> + <compile files="StaticContexts.java"> + <message kind="error" line="11"/> + <message kind="error" line="18"/> + <message kind="error" line="19"/> + <message kind="error" line="20"/> + <message kind="error" line="21"/> + <message kind="error" line="27"/> + <message kind="error" line="28"/> + <message kind="error" line="31"/> + <message kind="error" line="35"/> + <message kind="error" line="36"/> + </compile> + </ajc-test> + + <ajc-test dir="new" + title="Given non-matching TypePattern, CE flags use of non-introduced method rather than failure to introduce" + keywords="from-errors"> + <compile + files="typepatternmatch/pack1/IntroErrorLocation.java,typepatternmatch/pack2/TargetClass.java"> + <message kind="error" line="28" + text="typepatternmatch/pack1/IntroErrorLocation.java:28"/> + <message kind="warning" line="33" + text="typepatternmatch/pack1/IntroErrorLocation.java:33"/> + <message kind="error" line="39" + text="typepatternmatch/pack1/IntroErrorLocation.java:39"/> + </compile> + </ajc-test> + + <ajc-test dir="new" pr="457" + title="Compiler should suggest using aspect when advice, pointcuts, or introduction is in a class" + keywords="from-errors"> + <compile files="RecognizeAspectCE.java"> + <message kind="error" line="6" text="RecognizeAspectCE.java:6"/> + </compile> + </ajc-test> + + <ajc-test dir="errors" + title="Some expressions are illegal expression statements" + keywords="from-errors,purejava"> + <compile files="BadExpressionStatement.java"> + <message kind="error" line="3"/> + </compile> + </ajc-test> + + <ajc-test dir="pureJava" title="illegal forward reference" + keywords="from-errors,purejava"> + <compile files="IllegalForwardReference.java"> + <message kind="error" line="9"/> + </compile> + </ajc-test> + + <ajc-test dir="errors" + title="declare error working with pointcut and-not (amp,amp,bang)" + keywords="from-errors"> + <compile files="DeclareError.java"> + <message kind="error" line="5"/> + <message kind="error" line="19"/> + </compile> + </ajc-test> + + <ajc-test dir="errors" title="protected accessibility" + keywords="from-errors,purejava"> + <compile files="protectedAccess/Main.java,protectedAccess/p1/C1.java"> + <message kind="error" line="26"/> + <message kind="error" line="28"/> + <message kind="error" line="29"/> + <message kind="error" line="31"/> + <message kind="error" line="37"/> + <message kind="error" line="45"/> + <message kind="error" line="46"/> + <message kind="error" line="54"/> + <message kind="error" line="55"/> + </compile> + </ajc-test> + + <ajc-test dir="errors" title="parse-time illegal modifiers" + keywords="from-errors,purejava"> + <compile files="Modifiers1.java"> + <message kind="error" line="2"/> + <message kind="error" line="3"/> + <message kind="error" line="6"/> + </compile> + </ajc-test> + + <ajc-test dir="errors" title="check-time illegal modifiers" + keywords="from-errors,purejava"> + <compile files="Modifiers.java"> + <message kind="error" line="2"/> + <message kind="error" line="3"/> + <message kind="error" line="4"/> + <message kind="error" line="6"/> + <message kind="error" line="7"/> + <message kind="error" line="8"/> + <message kind="error" line="9"/> + <message kind="error" line="11"/> + </compile> + </ajc-test> + + <ajc-test dir="errors" title="illegal synchronized stmts" + keywords="from-errors,purejava,messages-vary"> + <compile files="BadSynchronized.java" + options="!eclipse"> + <message kind="error" line="6"/> + </compile> + </ajc-test> + + <ajc-test dir="pureJava" title="modifiers on interface members" + keywords="from-errors,purejava"> + <compile files="InterfaceMembers.java"> + <message kind="error" line="2"/> + <message kind="error" line="3"/> + <message kind="error" line="4"/> + <message kind="error" line="5"/> + <message kind="error" line="7"/> + <message kind="error" line="8"/> + <message kind="error" line="9"/> + <message kind="error" line="10"/> + </compile> + </ajc-test> + + <ajc-test dir="new" pr="534" + title="aspect as member of interface (private and protected)" + keywords="from-errors"> + <compile files="AspectInInterfaceCF.java"> + <message kind="error" line="11"/> + <message kind="error" line="14"/> + </compile> + </ajc-test> + + <ajc-test dir="errors" + title="good errors (and not too many) for missing members" + comment="XXX import of class in default package" + + keywords="from-errors,purejava"> + <compile files="NotFound.java"> + <message kind="error" line="1"/> + <message kind="error" line="2"/> + <message kind="error" line="6"/> + <message kind="error" line="9"/> + <message kind="error" line="10"/> + <message kind="error" line="14"/> + <message kind="error" line="16"/> + </compile> + </ajc-test> + + <ajc-test dir="new" pr="536" + title="expecting compile failures with subclass narrowing scope of superclass methods or accessing private superclass variables" + keywords="from-errors,purejava"> + <compile files="RestrictingVisibilityCF.java"> + <message kind="error" line="27"/> + <message kind="error" line="29"/> + <message kind="error" line="31"/> + <message kind="error" line="39"/> + <message kind="error" line="41"/> + <message kind="error" line="46"/> + <message kind="error" line="48"/> + <message kind="error" line="53"/> + </compile> + </ajc-test> + + <ajc-test dir="new" pr="494" + title="introduced inner interfaces - compile should fail to bind interface name outside of Aspect or if implementing method is not public" + keywords="from-errors"> + <compile files="IntroduceInnerInterfaceCF.java" options="-Xlint:ignore"> + <message kind="error" line="18"/> + <message kind="error" line="19"/> + <message kind="error" line="20"/> + <message kind="error" line="24"/> + <message kind="error" line="42"/> + <message kind="error" line="45"/> + <message kind="error" line="48"/> + <message kind="error" line="50"/> + <message kind="error" line="58"/> + </compile> + </ajc-test> + + <ajc-test dir="errors" + title="aspects may not implement Serializable or Cloneable" + keywords="from-errors"> + <compile files="AspectInterfaces.java"> + <message kind="error" line="4"/> + <message kind="error" line="5"/> + <message kind="error" line="9"/> + </compile> + </ajc-test> + + <ajc-test dir="errors" + title="inner classes may not have static non-constant members" + keywords="from-errors,purejava"> + <compile files="InnerMembers.java"> + <message kind="error" line="8"/> + <message kind="error" line="9"/> + <message kind="error" line="10"/> + <message kind="error" line="11"/> + <message kind="error" line="16"/> + <message kind="error" line="17"/> + </compile> + </ajc-test> + + <ajc-test dir="errors" + title="explicit constructor calls can throw exceptions" + keywords="from-errors"> + <compile files="ExplicitConstructorThrows.java"> + <message kind="error" line="3"/> + <message kind="error" line="12"/> + <message kind="error" line="18"/> + </compile> + </ajc-test> + + <ajc-test dir="pureJava" title="flow analysis with local types" + keywords="from-errors,purejava"> + <compile files="InnerFlow.java"> + <message kind="error" line="5"/> + </compile> + </ajc-test> + + <ajc-test dir="errors" pr="664" title="bad proceed args good error messages" + keywords="from-errors"> + <compile files="ProceedArgsCE.java"> + <message kind="error" line="13"/> + <message kind="error" line="16"/> + <message kind="error" line="19"/> + </compile> + </ajc-test> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <ajc-test dir="design/intro" + title="initial tests for new introduction style" keywords="from-design"> + <compile files="Simple.java"/> + <run class="Simple"/> + </ajc-test> + + <ajc-test dir="design/intro" + title="overriding of introduced methods and accessibility" + keywords="from-design"> + <compile files="Overriding.java"/> + <run class="Overriding"/> + </ajc-test> + + <ajc-test dir="design/intro" + title="within and introductions behaves correctly" keywords="from-design"> + <compile files="Within.java"/> + <run class="Within"/> + </ajc-test> + + + <!-- we're not implementing static inter-type fields on interfaces in 1.1 --> + <ajc-test dir="design/intro" + title="introduction of static methods and fields on classes and interfaces" + keywords="from-design,knownLimitation"> + <compile files="Statics.java"/> + <run class="Statics"/> + </ajc-test> + + <ajc-test dir="design/intro" pr="570" + title="correct inheritance of multiple concrete methods" + keywords="from-design"> + <compile files="MultiInheritCP.java"/> + <run class="MultiInheritCP"/> + </ajc-test> + + <ajc-test dir="design/intro" pr="570" + title="errors in inheritance of multiple concrete methods" + keywords="from-design"> + <compile files="MultiInheritCF.java"> + <message kind="error" line="21"/> + <message kind="error" line="41"/> + <message kind="error" line="42"/> + <message kind="error" line="43"/> + <message kind="error" line="45"/> + <message kind="error" line="46"/> + </compile> + </ajc-test> + + <ajc-test dir="design/reflect" + title="Joinpoint is not created for foo(String) when before() advice is present." + keywords="from-design"> + <compile files="SimpleAround1.java"/> + <run class="SimpleAround1"/> + </ajc-test> + + <ajc-test dir="design/eachobject" + title="more tests of eachobject with some difficult typing issues" + keywords="from-design"> + <compile files="Tricky3.java"/> + <run class="Tricky3"/> + </ajc-test> + + <ajc-test dir="design/eachobject" + title="eachobject: eachobject(receptions(...)) [eachobject]" + keywords="from-design"> + <compile files="Tricky1.java"/> + <run class="Tricky1"/> + </ajc-test> + + <ajc-test dir="design/reflect" title="Checking new joinpoints" + keywords="from-design"> + <compile files="Coverage.java"/> + <run class="Coverage"/> + </ajc-test> + + <ajc-test dir="design/eachobject" + title="eachobject: simple test [eachobject] (still)" + keywords="from-design"> + <compile files="Simple.java"/> + <run class="Simple"/> + </ajc-test> + + <ajc-test dir="design/intro" + title="scope issues with introduction (needs more work)" + keywords="from-design"> + <compile files="p1/ScopeIssues.java,p1/C1.java"/> + <run class="p1.ScopeIssues"/> + </ajc-test> + + + + + + + + + + + + + + + <ajc-test dir="new" + title="properly make choice between cast and parenthesis in parser" + keywords="from-resolved_10x"> + <compile files="JoinPointFields.java"/> + <run class="JoinPointFields"/> + </ajc-test> + + <ajc-test dir="new" pr="96" + title="field from implemented interface not found in advice" + keywords="from-resolved_10x"> + <compile files="FieldFromImplementsNotFound.java"/> + <run class="FieldFromImplementsNotFound"/> + </ajc-test> + + <ajc-test dir="new" + title="make sure advice affects introduced methods and constructors" + keywords="from-resolved_10x"> + <compile files="AdviceOnIntroduced.java"/> + <run class="AdviceOnIntroduced"/> + </ajc-test> + + <ajc-test dir="new" title="new around construct" + keywords="from-resolved_10x"> + <compile files="AroundAdvice.java"/> + <run class="AroundAdvice"/> + </ajc-test> + + <ajc-test dir="new" pr="65" title="aspect redefines a parameter" + keywords="from-resolved_10x"> + <compile files="AspectRedefinesParam.java"/> + <run class="AspectRedefinesParam"/> + </ajc-test> + + <ajc-test dir="new" title="introducing extends and implements" + keywords="from-resolved_10x"> + <compile files="HierarchyIntroductions.java"/> + <run class="HierarchyIntroductions"/> + </ajc-test> + + <ajc-test dir="new" pr="104" title="(related) aspect on interface" + keywords="from-resolved_10x"> + <compile files="AspectOnInterface.java"/> + <run class="AspectOnInterface"/> + </ajc-test> + + <ajc-test dir="new" pr="106" title="advice and package visibility" + keywords="from-resolved_10x"> + <compile + files="packagevisibility/PackagesAndAdvice.java,packagevisibility/testPackage/Class1.java,packagevisibility/testPackage/Class2.java"/> + <run class="packagevisibility.PackagesAndAdvice"/> + </ajc-test> + + <ajc-test dir="new" title="advice on implied empty constructor" + keywords="from-resolved_10x"> + <compile files="AdviceOnEmptyConstructor.java"/> + <run class="AdviceOnEmptyConstructor"/> + </ajc-test> + + <ajc-test dir="new" title="advice on * *(..) not mapping to initializers" + keywords="from-resolved_10x"> + <compile files="InitializerAdvice.java"/> + <run class="InitializerAdvice"/> + </ajc-test> + + <ajc-test dir="new" + title="three type declarations in the scope of an advice" + keywords="from-resolved_10x"> + <compile files="TypeDeclInAdvice.java"/> + <run class="TypeDeclInAdvice"/> + </ajc-test> + + <ajc-test dir="new" pr="129" + title="introduction fails on class with an inner class that extends or implements something" + keywords="from-resolved_10x"> + <compile files="IntroductionFailsWithInnerClass.java"/> + <run class="IntroductionFailsWithInnerClass"/> + </ajc-test> + + <ajc-test dir="new" pr="126" + title="checks that methods are introduced on the topmost class implemented" + keywords="from-resolved_10x"> + <compile files="TopmostImplements.java"/> + <run class="TopmostImplements"/> + </ajc-test> + + <ajc-test dir="new/arndAdvRet" pr="140" + title="a couple different returns from around advice" + keywords="from-resolved_10x"> + <compile files="Driver.java"/> + <run class="Driver"/> + </ajc-test> + + <ajc-test dir="new" + title="member finally advice paired with signature advice" + keywords="from-resolved_10x"> + <compile files="TryErrors.java"/> + <run class="TryErrors"/> + </ajc-test> + + <ajc-test dir="new" title="aspect of eachobject(instanceof(Interface))" + keywords="from-resolved_10x"> + <compile files="AspectOfInterface.java"/> + <run class="AspectOfInterface"/> + </ajc-test> + + <ajc-test dir="new/finalMemInit" pr="162" + title="final member initialization broken with JDK before 1.1.8" + keywords="from-resolved_10x"> + <compile files="Driver.java"/> + <run class="Driver"/> + </ajc-test> + + <ajc-test dir="new/packageNameClash" pr="205" + title="same package and var name clash in preprocessed code when aspectOf is used" + keywords="from-resolved_10x"> + <compile files="otherpkg/Driver.java,pkg/Aspect1.java,pkg/Class1.java"/> + <run class="otherpkg.Driver"/> + </ajc-test> + + <ajc-test dir="new/adviceOnStaticMeth" pr="221" + title="and PR#201 advice on static methods fails javac compile with this" + keywords="from-resolved_10x"> + <compile files="Driver.java"/> + <run class="Driver"/> + </ajc-test> + + <ajc-test dir="new" + title="non-static advice on inner class defined inside of method body" + keywords="from-resolved_10x"> + <compile files="MethodInner.java"/> + <run class="MethodInner"/> + </ajc-test> + + <ajc-test dir="new" + title="simple single-threaded eachcflow test (includes aspectOf)" + keywords="from-resolved_10x"> + <compile files="Client.java"/> + <run class="Client"/> + </ajc-test> + + <ajc-test dir="new/scopeTypingBug" pr="191" + title="bad type resolution when var reassigned in same scope" + keywords="from-resolved_10x"> + <compile files="Driver.java"/> + <run class="Driver"/> + </ajc-test> + + <ajc-test dir="new" pr="242" + title="generating the right throws clause for call-site advice (and around)" + keywords="from-resolved_10x"> + <compile files="ComputedThrows.java"/> + <run class="ComputedThrows"/> + </ajc-test> + + <ajc-test dir="new" pr="246" + title="advice on calls to static methods using several syntax" + keywords="from-resolved_10x"> + <compile files="StaticCalls.java"/> + <run class="StaticCalls"/> + </ajc-test> + + <ajc-test dir="new" pr="248" + title=", PR#249, PR#250 advice on constructor sites" + keywords="from-resolved_10x"> + <compile files="NewSiteAdvice.java"/> + <run class="NewSiteAdvice"/> + </ajc-test> + + <ajc-test dir="new" title="test after throwing advice in several ways" + keywords="from-resolved_10x"> + <compile files="AfterThrowing.java"/> + <run class="AfterThrowing"/> + </ajc-test> + + <ajc-test dir="new" title="fancy name patterns for method names" + keywords="from-resolved_10x"> + <compile files="WildNames.java"/> + <run class="WildNames"/> + </ajc-test> + + <ajc-test dir="design/calls" title="calls: calls(...)" + keywords="from-resolved_10x"> + <compile files="Simple.java"/> + <run class="Simple"/> + </ajc-test> + + <ajc-test dir="new/extraThrows" pr="259" + title="throws Exception clause is unnecessarily added to Driver.main method" + keywords="from-resolved_10x"> + <compile files="Driver.java"/> + <run class="Driver"/> + </ajc-test> + + <ajc-test dir="new/thisUsedInMain" pr="262" + title="javac fails when this is referenced in the static main method" + keywords="from-resolved_10x"> + <compile files="Driver.java"/> + <run class="Driver"/> + </ajc-test> + + <ajc-test dir="new/badCast" pr="275" + title="and 276 cast error generated by ajc when type not in signature" + keywords="from-resolved_10x"> + <compile files="Driver.java"/> + <run class="Driver"/> + </ajc-test> + + <ajc-test dir="new" pr="285" + title="calls to methods to which we don't have source" + keywords="from-resolved_10x"> + <compile files="ExternalCalls.java"/> + <run class="ExternalCalls"/> + </ajc-test> + + <ajc-test dir="new/beforeNotRun" pr="265" title="more aspect inheritance" + keywords="from-resolved_10x"> + <compile files="Driver.java"/> + <run class="Driver"/> + </ajc-test> + + <ajc-test dir="new" pr="310" + title="around and calls with both calling and called this params" + keywords="from-resolved_10x"> + <compile files="AroundAndCalls.java"/> + <run class="AroundAndCalls"/> + </ajc-test> + + <ajc-test dir="new/pointcutParameter" pr="290" + title="compiler crashes with eachobject and named pointcuts with parameters" + keywords="from-resolved_10x"> + <compile files="Driver.java"/> + <run class="Driver"/> + </ajc-test> + + <ajc-test dir="new/unqualifiedPointcutName" pr="304" + title="lookup rules for unqualified pointcut names" + keywords="from-resolved_10x"> + <compile files="Driver.java"/> + <run class="Driver"/> + </ajc-test> + + <ajc-test dir="new" pr="321" + title="eachcflow only instantiated if the aspect has some advice in it" + keywords="from-resolved_10x"> + <compile files="CFlowNoAdvice.java"/> + <run class="CFlowNoAdvice"/> + </ajc-test> + + <ajc-test dir="new" pr="309" + title="(DESIGN QUESTION) aspect of eachJVM advising its own initializer" + keywords="from-resolved_10x"> + <compile files="EachJVMOnSelf.java"/> + <run class="EachJVMOnSelf"/> + </ajc-test> + + <ajc-test dir="new" pr="302" + title="after returning advice on calls to constructors" + keywords="from-resolved_10x"> + <compile files="AfterConstructorCalls.java"/> + <run class="AfterConstructorCalls"/> + </ajc-test> + + <ajc-test dir="new" + title="Does annotating 'new' with a type work as desired?" + keywords="from-resolved_10x"> + <compile files="ConstructorSignatures.java"/> + <run class="ConstructorSignatures"/> + </ajc-test> + + <ajc-test dir="new" + title="Referring to inner classes as {super}.{inner} confused ajc." + keywords="from-resolved_10x"> + <compile files="InnerClassNaming.java"/> + <run class="InnerClassNaming"/> + </ajc-test> + + <ajc-test dir="new" title="Advice on advice" keywords="from-resolved_10x"> + <compile files="AdviceOnAdvice.java"/> + <run class="AdviceOnAdvice"/> + </ajc-test> + + <ajc-test dir="new" title="Introductions on other introductions" + keywords="from-resolved_10x"> + <compile files="IntroOnIntro.java"/> + <run class="IntroOnIntro"/> + </ajc-test> + + <ajc-test dir="new" title="Putting advice on array constructors." + keywords="from-resolved_10x"> + <compile files="Orleans.java"/> + <run class="Orleans"/> + </ajc-test> + + <ajc-test dir="new" + title="call points within block inner classes are doubled" + keywords="from-resolved_10x"> + <compile files="DoubledCalls.java"/> + <run class="DoubledCalls"/> + </ajc-test> + + <ajc-test dir="new" title="Gets and sets with other advice" + keywords="from-resolved_10x"> + <compile files="Counting3.java"/> + <run class="Counting3"/> + </ajc-test> + + <ajc-test dir="new" title="Compiler can compile correct strictfp modifiers" + keywords="from-resolved_10x"> + <compile files="StrictFpCompile.java"/> + <run class="StrictFpCompile"/> + </ajc-test> + + <ajc-test dir="new" title="basic test of callsto pointcuts" + keywords="from-resolved_10x"> + <compile files="CallsTo.java"/> + <run class="CallsTo"/> + </ajc-test> + + <ajc-test dir="new" title="package wildcards in packages" + keywords="from-resolved_10x"> + <compile files="pack/PackageWildcards.java"/> + <run class="pack.PackageWildcards"/> + </ajc-test> + + <ajc-test dir="new" title="advice on catch clauses" + keywords="from-resolved_10x"> + <compile files="CatchAdvice.java"/> + <run class="CatchAdvice"/> + </ajc-test> + + <ajc-test dir="new" + title="around advice on calls and receptions with lots of context" + keywords="from-resolved_10x"> + <compile files="AroundCalls.java"/> + <run class="AroundCalls"/> + </ajc-test> + + <ajc-test dir="new" pr="208" + title="! modifier and char in pointcut (no longer an error)" + keywords="from-resolved_10x"> + <compile files="NotCharInPointcut.java"/> + <run class="NotCharInPointcut"/> + </ajc-test> + + <ajc-test dir="new" pr="308" + title="right number of aspect instances per cflow" + keywords="from-resolved_10x"> + <compile files="CFlowObjects.java"/> + <run class="CFlowObjects"/> + </ajc-test> + + <ajc-test dir="new" pr="310" title="many this's into around advice on calls" + keywords="from-resolved_10x"> + <compile files="AroundCallsArgs.java"/> + <run class="AroundCallsArgs"/> + </ajc-test> + + <ajc-test dir="new" + title="Ensures introduction methods can have advice placed on them" + keywords="from-resolved_10x"> + <compile files="Dominates.java"/> + <run class="Dominates"/> + </ajc-test> + + <ajc-test dir="new" pr="355" + title="No boolean appearing in the 'if' clause for around advice with eachJVM()" + keywords="from-resolved_10x"> + <compile files="PR355.java"/> + <run class="PR355"/> + </ajc-test> + + <ajc-test dir="new" title="Order of super introductions." + keywords="from-resolved_10x"> + <compile files="OrderOfExtendsPlusAndImplementsPlus.java"/> + <run class="OrderOfExtendsPlusAndImplementsPlus"/> + </ajc-test> + + <ajc-test dir="new" title="Ensuring backdoor methods are produced." + keywords="from-resolved_10x"> + <compile files="BackdoorMethods.java"/> + <run class="BackdoorMethods"/> + </ajc-test> + + <ajc-test dir="new" + title="no duplicate advice methods in abstract aspects" + keywords="from-resolved_10x"> + <compile + files="GeneratingDuplicateNamedAdviceMethodsInAbstractAspects.java"/> + <run class="GeneratingDuplicateNamedAdviceMethodsInAbstractAspects"/> + </ajc-test> + + <ajc-test dir="new" + title="no duplicate advice methods in abstract aspects extended" + keywords="from-resolved_10x"> + <compile + files="GeneratingDuplicateNamedAdviceMethodsInAbstractAspectsWithExtendedAspect.java"/> + <run class="GeneratingDuplicateNamedAdviceMethodsInAbstractAspectsWithExtendedAspect" + /> + </ajc-test> + + <ajc-test dir="new" + title="Putting after-constructor advice on the wrong types implementing the same interface." + keywords="from-resolved_10x"> + <compile files="AfterAdviceOnConstructorsOnTheWrongType.java"/> + <run class="AfterAdviceOnConstructorsOnTheWrongType"/> + </ajc-test> + + <ajc-test dir="new" + title="Instantiating non-static inner classes in advice." + keywords="from-resolved_10x"> + <compile files="NonstaticInnerClassesInAspects.java"/> + <run class="NonstaticInnerClassesInAspects"/> + </ajc-test> + + <ajc-test dir="new" pr="316" title="Referring to pointcut in of clauses" + keywords="from-resolved_10x"> + <compile files="ReferringToPointcutsInAspect_PR316.java"/> + <run class="ReferringToPointcutsInAspect_PR316"/> + </ajc-test> + + <ajc-test dir="new" pr="191" + title="Confused referring to instance variables and locals" + keywords="from-resolved_10x"> + <compile files="ScopesAndFields_PR191.java"/> + <run class="ScopesAndFields_PR191"/> + </ajc-test> + + <ajc-test dir="new" + title="Parsing C+ expressions without parens in super introductions." + keywords="from-resolved_10x"> + <compile files="ParsingSubtypesIntroductions.java"/> + <run class="ParsingSubtypesIntroductions"/> + </ajc-test> + + <ajc-test dir="new" + title="Introducing methods on classes that implements inner-interfaces with +implements." + keywords="from-resolved_10x"> + <compile files="IntroducingMethodsOnPlusImplementedInterfaces.java"/> + <run class="IntroducingMethodsOnPlusImplementedInterfaces"/> + </ajc-test> + + <ajc-test dir="new" pr="464" + title="Methods with the same name are generated when abstract aspects extend another abstract aspect." + keywords="from-resolved_10x"> + <compile + files="AbstractAspectsExtendingAbstractAspectsGeneratesMethodsWithTheSameName_PR464.java"/> + <run class="AbstractAspectsExtendingAbstractAspectsGeneratesMethodsWithTheSameName_PR464" + /> + </ajc-test> + + <ajc-test dir="new" title="Making sure final variables stay final." + keywords="from-resolved_10x"> + <compile files="RemovingFinals.java"/> + <run class="RemovingFinals"/> + </ajc-test> + + <ajc-test dir="new" + title="Problem resolving meta-joinpoint names with around advice on methods called from around advice." + keywords="from-resolved_10x"> + <compile files="AroundAdviceOnMethodsCalledInAroundAdvice.java"/> + <run class="AroundAdviceOnMethodsCalledInAroundAdvice"/> + </ajc-test> + + <ajc-test dir="new" + title="Make sure that names of lifted local classes are right when referenced in call-site advice" + keywords="from-resolved_10x"> + <compile files="CallsAndLocalClasses.java"/> + <run class="CallsAndLocalClasses"/> + </ajc-test> + + <ajc-test dir="new" title="matching for throws clause" + keywords="from-resolved_10x"> + <compile files="ThrowsMatching.java"/> + <run class="ThrowsMatching"/> + </ajc-test> + + <ajc-test dir="new" title="holding onto proceed calls in a closure-like way" + keywords="from-resolved_10x"> + <compile files="HoldProceed.java"/> + <run class="HoldProceed"/> + </ajc-test> + + <ajc-test dir="new" title="basic test of declare soft" + keywords="from-resolved_10x"> + <compile files="DeclareSoft.java"/> + <run class="DeclareSoft"/> + </ajc-test> + + <ajc-test dir="new" + title="advice on calls to constructors of anonymous inners and access to context" + keywords="from-resolved_10x"> + <compile files="NewAnonymous.java"/> + <run class="NewAnonymous"/> + </ajc-test> + + <ajc-test dir="new" title="Cannot bind a name." keywords="from-resolved_10x"> + <compile files="CannotReferenceSuper.java"/> + <run class="CannotReferenceSuper"/> + </ajc-test> + + <ajc-test dir="new/innerAspectAccess" pr="211" + title="inner aspects can't access outer pointcuts" + keywords="from-resolved_10x"> + <compile files="Driver.java"/> + <run class="Driver"/> + </ajc-test> + + <ajc-test dir="new" + title="implements and extends are introduced before methods and fields" + keywords="from-resolved_10x"> + <compile files="IntroOrder.java"/> + <run class="IntroOrder"/> + </ajc-test> + + <ajc-test dir="new" + title="a static/inner aspect of a inner class of an aspect is pulled to the top level as static" + keywords="from-resolved_10x"> + <compile files="StaticInnerAspect.java"/> + <run class="StaticInnerAspect"/> + </ajc-test> + + <ajc-test dir="new" title="Crashes with privileged aspect." + keywords="from-resolved_10x"> + <compile files="Privileged.java"/> + <run class="Privileged"/> + </ajc-test> + + <ajc-test dir="new" + title="join points exist in the execution of field initializers" + keywords="from-resolved_10x"> + <compile files="FieldInitializerJoinPoints.java"/> + <run class="FieldInitializerJoinPoints"/> + </ajc-test> + + <ajc-test dir="new/privilegedAspects" title="privileged aspects" + keywords="from-resolved_10x"> + <compile + files="main/Main.java,fish/PrivateClass.java,fish/B.java,fowl/C.java,fowl/D.java"/> + <run class="main.Main"/> + </ajc-test> + + <ajc-test dir="new" title="advice on field gets in privileged aspects" + keywords="from-resolved_10x"> + <compile files="AdviceOnPrivileged.java"/> + <run class="AdviceOnPrivileged"/> + </ajc-test> + + <ajc-test dir="new" title="Two anonymous classes in the same scope" + keywords="from-resolved_10x"> + <compile files="TwoAnonymous.java"/> + <run class="TwoAnonymous"/> + </ajc-test> + + <ajc-test dir="new" + title="basic tests for initializer and staticinitializer PCDs" + keywords="from-resolved_10x"> + <compile files="InitializerTest.java"/> + <run class="InitializerTest"/> + </ajc-test> + + <ajc-test dir="new" pr="98" + title="introduction of an initializer into a class" + keywords="from-resolved_10x"> + <compile files="IntroductionOfInitializer.java"/> + <run class="IntroductionOfInitializer"/> + </ajc-test> + + <ajc-test dir="new/access" + title="some method accessibility tests, particularly package-protected and inheritance" + keywords="from-resolved_10x"> + <compile files="Test1.java,pc/C.java,psub/SubC.java,psub/A.java"/> + <run class="Test1"/> + </ajc-test> + + <ajc-test dir="new" + title="fairly monotonous (and non-covering) tests for expanded dot patterns" + keywords="from-resolved_10x"> + <compile files="ExpandedDotDotPattern.java"/> + <run class="ExpandedDotDotPattern"/> + </ajc-test> + + <ajc-test dir="new" title="field patterns and subtyping" + keywords="from-resolved_10x"> + <compile files="FieldPatterns.java"/> + <run class="FieldPatterns"/> + </ajc-test> + + <ajc-test dir="new" + title="Checking formal matching as in Roeder's bug in 0.7b10" + keywords="from-resolved_10x"> + <compile files="FormalMatching.java"/> + <run class="FormalMatching"/> + </ajc-test> + + <ajc-test dir="new" title="Introducing synchronized methods on interfaces." + keywords="from-resolved_10x"> + <compile files="SynchronizedMethodsOnInterfaces.java"/> + <run class="SynchronizedMethodsOnInterfaces"/> + </ajc-test> + + <ajc-test dir="new" + title="The pointcut params (..,int..) is not recognizing (Object,int,Object)." + keywords="from-resolved_10x"> + <compile files="Params.java"/> + <run class="Params"/> + </ajc-test> + + <ajc-test dir="new" + title="calls advice on array objects causes error in code generation" + keywords="from-resolved_10x"> + <compile files="CallsToArray.java"/> + <run class="CallsToArray"/> + </ajc-test> + + <ajc-test dir="new" + title="join points in field initializers aren't showing up." + keywords="from-resolved_10x"> + <compile files="NonexistentFieldInitializers.java"/> + <run class="NonexistentFieldInitializers"/> + </ajc-test> + + <ajc-test dir="new" pr="318" title="Handlers problem" + keywords="from-resolved_10x"> + <compile files="PR318.java"/> + <run class="PR318"/> + </ajc-test> + + <ajc-test dir="new" + title="work nicely with inner class method look-up rules and call-site advice" + keywords="from-resolved_10x"> + <compile files="InnerMethods.java"/> + <run class="InnerMethods"/> + </ajc-test> + + <ajc-test dir="new" title="strictfp modifier allowed on advice" + keywords="from-resolved_10x"> + <compile files="StrictFPAdvice.java"/> + <run class="StrictFPAdvice"/> + </ajc-test> + + <ajc-test dir="new" pr="415" + title="No argthis was being created for calls advice." + keywords="from-resolved_10x"> + <compile files="PR415.java"/> + <run class="PR415"/> + </ajc-test> + + <ajc-test dir="new" + title="Ensuring no advice with instanceof(..) is run on static methods." + keywords="from-resolved_10x"> + <compile files="StaticMethodsShouldNotReceiveInstanceofAdvice.java"/> + <run class="StaticMethodsShouldNotReceiveInstanceofAdvice"/> + </ajc-test> + + <ajc-test dir="new" + title="Null pointer on gets advice showing the case causing the error" + keywords="from-resolved_10x"> + <compile files="NullPointerOnGetsSimple.java"/> + <run class="NullPointerOnGetsSimple"/> + </ajc-test> + + <ajc-test dir="new" + title="try to make sure that dynamic JoinPoint objects aren't generated when used inside of if (false) { ... }" + keywords="from-resolved_10x"> + <compile files="IfdefsAndAdvice.java"/> + <run class="IfdefsAndAdvice"/> + </ajc-test> + + <ajc-test dir="new" + title="within and withincode (doesn't all work due to local class name issues)" + keywords="from-resolved_10x"> + <compile files="WithinInners.java"/> + <run class="WithinInners"/> + </ajc-test> + + <ajc-test dir="new" + title="around advice on calls within inner classes (including protected method calls)" + keywords="from-resolved_10x"> + <compile files="AroundInnerCalls.java"/> + <run class="AroundInnerCalls"/> + </ajc-test> + + <ajc-test dir="new" title="Arguments to runNext should be final when needed" + keywords="from-resolved_10x"> + <compile files="Finals.java"/> + <run class="Finals"/> + </ajc-test> + + <ajc-test dir="new" title="Method introductions" + keywords="from-resolved_10x"> + <compile files="MethodIntroductions.java"/> + <run class="MethodIntroductions"/> + </ajc-test> + + <ajc-test dir="new" title="Putting an introduced method on each interface" + keywords="from-resolved_10x"> + <compile files="IntroducedMethodsOnEachInterface.java"/> + <run class="IntroducedMethodsOnEachInterface"/> + </ajc-test> + + <ajc-test dir="new" title="Extending interfaces" + keywords="from-resolved_10x"> + <compile files="BindingInterfaces.java"/> + <run class="BindingInterfaces"/> + </ajc-test> + + <ajc-test dir="new" title="Introducing private methods on interfaces" + keywords="from-resolved_10x"> + <compile files="IntroducingPrivateMethodsOnInterfaces.java"/> + <run class="IntroducingPrivateMethodsOnInterfaces"/> + </ajc-test> + + <ajc-test dir="new" + title="Issuing errors for assigning variables thisJoinPoint -- not assigning thisJoinPoint." + keywords="from-resolved_10x"> + <compile files="ThisJoinPointAssignments.java"/> + <run class="ThisJoinPointAssignments"/> + </ajc-test> + + <ajc-test dir="new" + title="Static references inside of introduced bodies get bound correctly." + keywords="from-resolved_10x"> + <compile files="StaticIntroducedReferences.java"/> + <run class="StaticIntroducedReferences"/> + </ajc-test> + + <ajc-test dir="new/cflowObjectCreations" pr="307" + title="cflow and object creations [of eachcflow]" + keywords="from-resolved_10x"> + <compile files="Driver.java"/> + <run class="Driver"/> + </ajc-test> + + <ajc-test dir="new/twofiles" + title="Doesn't import MightHaveAspect when compiling with more than 1 file. [eachobject]" + keywords="from-resolved_10x"> + <compile files="TheObject.java,TheAspect.java"/> + <run class="TheObject"/> + </ajc-test> + + <ajc-test dir="new" pr="436" + title="test binding to formals in calls to constructors (binding to null) (eachobject !!! now misnamed)" + keywords="from-resolved_10x"> + <compile files="BindingThisInsteadOfFormal.java"/> + <run class="BindingThisInsteadOfFormal"/> + </ajc-test> + + <ajc-test dir="new" + title="After advice isn't being woven into after throwing advice" + keywords="from-resolved_10x"> + <compile files="AfterThrowingNotWoven.java"/> + <run class="AfterThrowingNotWoven"/> + </ajc-test> + + <ajc-test dir="new" title="Throwing an EmptyStackException." + keywords="from-resolved_10x"> + <compile files="EmptyStack.java"/> + <run class="EmptyStack"/> + </ajc-test> + + <ajc-test dir="new" + title="check that MightHaveAspect interface is created correctly for an aspect in deep package" + keywords="from-resolved_10x"> + <compile files="EachObjectTarget.java,EachObjectInDeepPackage.java"/> + <run class="EachObjectTarget"/> + </ajc-test> + + <ajc-test dir="new" title="Defines clfow$ajc0 more once. [eachcflow]" + keywords="from-resolved_10x"> + <compile files="Binkley.java"/> + <run class="Binkley"/> + </ajc-test> + + <ajc-test dir="new" + title="Various calls, receptions, and callsto tests [callsto]" + keywords="from-resolved_10x"> + <compile files="CallsReceptionsCallsto.java"/> + <run class="CallsReceptionsCallsto"/> + </ajc-test> + + <ajc-test dir="new" pr="320" + title="Was throwing exception, now just an error. [eachobject]" + keywords="from-resolved_10x"> + <compile files="PR320.java"/> + <run class="PR320"/> + </ajc-test> + + <ajc-test dir="new" + title="different version of aspect inheritance, particularly empty pointcuts and abstract cflows [eachcflow]" + keywords="from-resolved_10x,fail-unimplemented"> + <compile files="AspectInheritance.java"/> + <run class="AspectInheritance"/> + </ajc-test> + + <ajc-test dir="new" pr="339" + title="set advice on member initing throwing exception [eachobject]" + keywords="from-resolved_10x"> + <compile files="PR339.java"/> + <run class="PR339"/> + </ajc-test> + + <ajc-test dir="new" pr="417" + title="Testing class names with same name's with difference case as package. [eachobject]" + keywords="from-resolved_10x"> + <compile files="test/TraceAspect.java,test/Test.java"/> + <run class="test.Test"/> + </ajc-test> + + <ajc-test dir="new" + title="Null pointer on gets advice with coverage [painful]" + keywords="from-resolved_10x"> + <compile files="NullPointerOnGets.java"/> + <run class="NullPointerOnGets"/> + </ajc-test> + + <ajc-test dir="new" title="Basic test for cflow pointcuts [eachcflow]" + keywords="from-resolved_10x"> + <compile files="CFlowPoints.java"/> + <run class="CFlowPoints"/> + </ajc-test> + + <ajc-test dir="new" + title="Crashing when looking up the type of array members." + keywords="from-resolved_10x"> + <compile files="ArrayCasts.java"/> + <run class="ArrayCasts"/> + </ajc-test> + + <ajc-test dir="new" + title="PostfixExprs to various synthetic things are fixed correctly [eachobject]" + keywords="from-resolved_10x"> + <compile files="Fixes.java"/> + <run class="Fixes"/> + </ajc-test> + + <ajc-test dir="new" + title="Dave Binkley's problem with eachcflowroot. [eachcflow]" + keywords="from-resolved_10x"> + <compile files="Binkley2.java"/> + <run class="Binkley2"/> + </ajc-test> + + <ajc-test dir="new" pr="105" title="advice on an inherited method" + keywords="from-resolved_10x"> + <compile files="AdviceOnInheritedMethod.java"/> + <run class="AdviceOnInheritedMethod"/> + </ajc-test> + + <ajc-test dir="new" pr="114" + title=", PR#115 checks the ordering of catch clauses" + keywords="from-resolved_10x"> + <compile files="OrderOfCatches.java"/> + <run class="OrderOfCatches"/> + </ajc-test> + + <ajc-test dir="new" title="various declared exception permutations" + keywords="from-resolved_10x"> + <compile files="DeclaredExcs.java"/> + <run class="DeclaredExcs"/> + </ajc-test> + + <ajc-test dir="new" + title="ordering of advice kinds as well as cflow and dominates" + keywords="from-resolved_10x"> + <compile files="AdviceOrdering.java"/> + <run class="AdviceOrdering"/> + </ajc-test> + + <ajc-test dir="new" pr="241" + title="advice on default constructor for a class only referenced via reflection" + keywords="from-resolved_10x"> + <compile files="OddConstructors.java"/> + <run class="OddConstructors"/> + </ajc-test> + + <ajc-test dir="new" pr="289" + title="calling and called this params in calls points" + keywords="from-resolved_10x"> + <compile files="CallsParams.java"/> + <run class="CallsParams"/> + </ajc-test> + + <ajc-test dir="new" pr="322" + title="primitive parameters coercable to Object just like return values are" + keywords="from-resolved_10x"> + <compile files="ObjectForInt.java"/> + <run class="ObjectForInt"/> + </ajc-test> + + <ajc-test dir="new" + title="Does the matrix coverage thing for the new method signatures" + keywords="from-resolved_10x"> + <compile files="MethodSignatures.java"/> + <run class="MethodSignatures"/> + </ajc-test> + + <ajc-test dir="new" + title="join points in static/dynamic initializers aren't showing up." + keywords="from-resolved_10x"> + <compile files="NonexistentInitializers.java"/> + <run class="NonexistentInitializers"/> + </ajc-test> + + <ajc-test dir="new" + title="Gets and sets on a number of variables (field access ???)" + keywords="from-resolved_10x"> + <compile files="Gets.java"/> + <run class="Gets"/> + </ajc-test> + + <ajc-test dir="new" title="correct types of parameters at call-sites" + keywords="from-resolved_10x"> + <compile files="CallTypes.java"/> + <run class="CallTypes"/> + </ajc-test> + + <ajc-test dir="new" + title="Joinpoints are showing up on intermediate call sites" + keywords="from-resolved_10x"> + <compile files="Counting1.java"/> + <run class="Counting1"/> + </ajc-test> + + <ajc-test dir="new" title="Reception based on strictfp modifier" + keywords="from-resolved_10x"> + <compile files="StrictFpReceptions.java"/> + <run class="StrictFpReceptions"/> + </ajc-test> + + <ajc-test dir="new" pr="353" + title="Subclasses that do not redefine a method are not being handled correctly" + keywords="from-resolved_10x"> + <compile files="PR353b.java"/> + <run class="PR353b"/> + </ajc-test> + + <ajc-test dir="new" + title="making sure that super calls are bound to the right methods" + keywords="from-resolved_10x"> + <compile files="SupersAndInterfaces.java"/> + <run class="SupersAndInterfaces"/> + </ajc-test> + + <ajc-test dir="new" pr="317" + title="inheritance, around advice and abstract pointcuts [eachobject] (still)" + keywords="from-resolved_10x"> + <compile files="OverridingPointcuts.java"/> + <run class="OverridingPointcuts"/> + </ajc-test> + + <ajc-test dir="new/foemmel" + title="Priviledged aspect methods are missing for privates. [eachobject]" + keywords="from-resolved_10x"> + <compile files="TheAspect.java,TheObject.java"> + <message kind="warning" line="7" text="TheAspect.java:7"/> + </compile> + <run class="TheObject"/> + </ajc-test> + + <ajc-test dir="new" + title="exceptions thrown and caught in advice, particularly try+proceed" + keywords="from-resolved_10x"> + <compile files="TryAndProceed.java"/> + <run class="TryAndProceed"/> + </ajc-test> + + <ajc-test dir="new" title="Not and And operators in pointcuts not working" + keywords="from-resolved_10x"> + <compile files="NotAndPointcut.java"/> + <run class="NotAndPointcut"/> + </ajc-test> + + <ajc-test dir="new" + title="Member initializers should run before the current class constructor" + keywords="from-resolved_10x"> + <compile files="MemberInitializationsAfterExplicitConstructorCalls.java"/> + <run class="MemberInitializationsAfterExplicitConstructorCalls"/> + </ajc-test> + + <ajc-test dir="new" + title="Coverage tests for Member initializers should run before the current class constructor and after super" + keywords="from-resolved_10x"> + <compile + files="MemberInitializationsAfterExplicitConstructorCallsCoverage.java"/> + <run class="MemberInitializationsAfterExplicitConstructorCallsCoverage"/> + </ajc-test> + + <ajc-test dir="new" + title="thisJoinPoint{Static} not visible in if() pcd of named pointcut" + keywords="from-resolved_10x"> + <compile files="IfPCDExprJoinPointVisibleCE.java"/> + <run class="IfPCDExprJoinPointVisibleCE"/> + </ajc-test> + + <ajc-test dir="new" + title="pcd if() expression visibility at compile-time (minimal operation)" + keywords="from-resolved_10x"> + <compile files="IfPCDExprVisibility.java" options="-Xlint:ignore"/> + <run class="IfPCDExprVisibility"/> + </ajc-test> + + <ajc-test dir="new" + title="pcd if() NPE in compiler when unwinding assignment in pcd if(expr)" + keywords="from-resolved_10x"> + <compile files="IfPCDExprAssignUnparseFailure.java"/> + <run class="IfPCDExprAssignUnparseFailure"/> + </ajc-test> + + <ajc-test dir="new" + title="pcd if() dup methods produced when pointcut after advice etc (javac)" + keywords="from-resolved_10x"> + <compile files="IfPCDDupMethod.java"/> + <run class="IfPCDDupMethod"/> + </ajc-test> + + <ajc-test dir="new" + title="pcd if() variants: [anonymous, named] x [execution, call, callTyped, get, set, initializations] x [before, after, around]" + keywords="from-resolved_10x"> + <compile files="IfPCDAdviceMethods.java"/> + <run class="IfPCDAdviceMethods"/> + </ajc-test> + + <ajc-test dir="new/pr456" pr="456" title="advice on advice in usejavac mode" + keywords="from-resolved_10x"> + <compile options="-usejavac" + files="Test_AroundVarBug.java,AroundVarBug.java"/> + <run class="Test_AroundVarBug"/> + </ajc-test> + + <ajc-test dir="new" pr="476" title="initialization order with this" + keywords="from-resolved_10x"> + <compile files="InitializationOrder.java"/> + <run class="InitializationOrder"/> + </ajc-test> + + <ajc-test dir="new" pr="496" + title="!within and !this handling for callee-side call points" + keywords="from-resolved_10x"> + <compile files="NotThis.java"/> + <run class="NotThis"/> + </ajc-test> + + <ajc-test dir="new/innerInterfaces" pr="494" + title="private inner interfaces and bytecode visibility" + keywords="from-resolved_10x"> + <compile files="p/Driver.java,p/InnerTest.java,other/Test.java"/> + <run class="p.Driver"/> + </ajc-test> + + <ajc-test dir="new" pr="490" + title="elaborated into testing of around on all join points" + keywords="from-resolved_10x"> + <compile files="AroundAll.java"/> + <run class="AroundAll"/> + </ajc-test> + + <ajc-test dir="new" + title="type name hygiene when code comes from aspects in different packages" + keywords="from-resolved_10x"> + <compile + files="typeNameConflicts/Driver.java,typeNameConflicts/p1/C.java,typeNameConflicts/aspects/A.java"/> + <run class="typeNameConflicts.Driver"/> + </ajc-test> + + <ajc-test dir="new" title="cflowbelow dependencies (from Chris Dutchyn)" + keywords="from-resolved_10x"> + <compile files="CflowBelowTest.java"/> + <run class="CflowBelowTest"/> + </ajc-test> + + <ajc-test dir="new" + title="target type matching with messy interface hierarchies" + keywords="from-resolved_10x"> + <compile files="CallTypesI.java"/> + <run class="CallTypesI"/> + </ajc-test> + + <ajc-test dir="new" pr="490" + title="PR#458 Compiler was incorrectly flagging error in advice on initialization and static initialization" + keywords="from-resolved_10x"> + <compile files="StaticInitCE.java"/> + <run class="StaticInitCE"/> + </ajc-test> + + <ajc-test dir="new" pr="493" + title="Compiler incorrectly flagging *1 (non-alphabetic start to signature pattern)" + keywords="from-resolved_10x"> + <compile files="NonAlphaSignaturePatternCE.java"/> + <run class="NonAlphaSignaturePatternCE"/> + </ajc-test> + + <ajc-test dir="new" + title="Unable to bind privately-introduced field name from introduced method in the same aspect" + keywords="from-resolved_10x"> + <compile files="IntroducedFieldsNotBinding.java"/> + <run class="IntroducedFieldsNotBinding"/> + </ajc-test> + + <ajc-test dir="new/anonInnerClass" pr="297" + title="anonymous inner class with aspect" keywords="from-resolved_10x"> + <compile files="Driver.java"/> + <run class="Driver"/> + </ajc-test> + + <ajc-test dir="new" pr="335" + title="Arguments are not being passed in to calls advice" + keywords="from-resolved_10x"> + <compile files="PR335.java"/> + <run class="PR335"/> + </ajc-test> + + <ajc-test dir="design/intro" title="interfaces as mixins with introduction" + keywords="from-resolved_10x"> + <compile files="Interfaces.java"/> + <run class="Interfaces"/> + </ajc-test> + + <ajc-test dir="new" + title="functional modifiers work correctly with introduced members" + keywords="from-resolved_10x"> + <compile files="IntroducedModifiers.java"/> + <run class="IntroducedModifiers"/> + </ajc-test> + + <ajc-test dir="new" + title="ExceptionInInitializerError accessing cflow in aspect initialization - before variants" + keywords="from-resolved_10x"> + <compile files="CflowInitInAspectVariantsBefore.java"/> + <run class="CflowInitInAspectVariantsBefore"/> + </ajc-test> + + <ajc-test dir="new" + title="NoClassDefFoundError accessing cflow in aspect initialization - after variants" + keywords="from-resolved_10x"> + <compile files="CflowInitInAspectVariantsAfter.java"/> + <run class="CflowInitInAspectVariantsAfter"/> + </ajc-test> + + <ajc-test dir="new" title="InternalCompilerError in JpPlan when args alone" + keywords="from-resolved_10x"> + <compile files="ArgsAlone.java"/> + <run class="ArgsAlone"/> + </ajc-test> + + <ajc-test dir="new" pr="527" + title="compile error using pcd if() with advice on introduced methods." + keywords="from-resolved_10x"> + <compile files="PR527.java"/> + <run class="PR527"/> + </ajc-test> + + <ajc-test dir="new" pr="528" + title="compile errors boolean using cflow and unimplemented method using around advice on methods introduced by interface" + keywords="from-resolved_10x"> + <compile files="PR528.java"/> + <run class="PR528"/> + </ajc-test> + + <ajc-test dir="new" pr="534" title="aspect as member of interface" + keywords="from-resolved_10x"> + <compile files="AspectInInterfaceCP.java"/> + <run class="AspectInInterfaceCP"/> + </ajc-test> + + <ajc-test dir="new" pr="535" + title="missing method name to synthetic invocation" + keywords="from-resolved_10x,new-messages-vary"> + <compile files="PR535.java"/> + <run class="PR535"/> + </ajc-test> + + <ajc-test dir="new" pr="536" + title="protected subclass impl of superclass method with default access and variants" + keywords="from-resolved_10x"> + <compile files="RestrictingVisibilityCP.java"/> + <run class="RestrictingVisibilityCP"/> + </ajc-test> + + <ajc-test dir="new" pr="519" title="Exception planning advice" + keywords="from-resolved_10x"> + <compile files="PR519.java"/> + <run class="PR519"/> + </ajc-test> + + <ajc-test dir="new" pr="521" + title="unreproduced bug with advice - probably UTR" + keywords="from-resolved_10x"> + <compile files="PR520.java"/> + <run class="PR520"/> + </ajc-test> + + <ajc-test dir="new" pr="494" + title="introduced inner interfaces accessible inside aspect" + keywords="from-resolved_10x"> + <compile files="IntroduceInnerInterfaceCP.java"/> + <run class="IntroduceInnerInterfaceCP"/> + </ajc-test> + + <ajc-test dir="new" pr="525" + title="validate (enclosing) join point and source locations" + keywords="from-resolved_10x"> + <compile files="NegativeSourceLocation.java"/> + <run class="NegativeSourceLocation"/> + </ajc-test> + + <ajc-test dir="new" pr="544" + title="advice formals are just like method formals" + keywords="from-resolved_10x"> + <compile files="AdviceFormalsCp.java"/> + <run class="AdviceFormalsCp"/> + </ajc-test> + + <ajc-test dir="new" pr="544" + title="advice formals produce errors just like method formals" + keywords="from-resolved_10x"> + <compile files="AdviceFormalsCf.java"> + <message kind="error" line="28"/> + <message kind="error" line="29"/> + <message kind="error" line="36"/> + <message kind="error" line="37"/> + </compile> + </ajc-test> + + <ajc-test dir="new" + title="advice throws clauses must be compatible with joinpoints they apply to" + keywords="from-resolved_10x"> + <compile files="AdviceThrowsCp.java"/> + <run class="AdviceThrowsCp"/> + </ajc-test> + + <ajc-test dir="new" + title="incompatible advice throws clause are a compile-time error" + keywords="from-resolved_10x"> + <compile files="AdviceThrowsCf.java"> + <message kind="error" line="70"/> + <message kind="error" line="74"/> + <message kind="error" line="76"/> + <message kind="error" line="78"/> + </compile> + </ajc-test> + + <ajc-test dir="new" pr="570" + title="potential method conflicts with introductions and interfaces and PR#561" + keywords="from-resolved_10x"> + <compile files="MethodConflictsCP.java"/> + <run class="MethodConflictsCP"/> + </ajc-test> + + <ajc-test dir="new" pr="570" + title="illegal method conflicts with introductions and interfaces and PR#561" + keywords="from-resolved_10x"> + <compile files="MethodConflictsCF.java"> + <message kind="error" line="8"/> + </compile> + </ajc-test> + + <ajc-test dir="new" title="AspectOf available for different aspect types" + keywords="from-resolved_10x"> + <compile files="AspectOf.java"/> + <run class="AspectOf"/> + </ajc-test> + + <ajc-test dir="new/privilegedAspects" + title="access to all members of class and inner class from privileged aspect" + keywords="from-resolved_10x"> + <compile + files="driver/PrivilegedAspect.java,util/Util.java,pack/DefaultTarget.java,pack/PublicTarget.java"/> + <run class="driver.PrivilegedAspect"/> + </ajc-test> + + <ajc-test dir="new" + title="cflow alone with around produces compiler bcg StackOverflowError" + keywords="from-resolved_10x"> + <compile files="CflowAlone.java"/> + <run class="CflowAlone"/> + </ajc-test> + + <ajc-test dir="new" + title="get/set join points run for complex assignment operators (+=, etc.) (working)" + keywords="from-resolved_10x"> + <compile files="AssignOps.java"/> + <run class="AssignOps"/> + </ajc-test> + + <ajc-test dir="new/introTypeMissing" + title="this available in introduced field initializers" + keywords="from-resolved_10x"> + <compile files="ThisInIntroFieldInit.java"/> + <run class="ThisInIntroFieldInit"/> + </ajc-test> + + <ajc-test dir="new/introTypeMissing" + title="Introduced type unavailable to cast expressions in introduced methods" + keywords="from-resolved_10x"> + <compile files="Cast.java,TargetClass.java,Util.java"/> + <run class="Cast"/> + </ajc-test> + + <ajc-test dir="new/introTypeMissing" + title="Introduced type unavailable to qualified new expressions in introduced methods" + keywords="from-resolved_10x"> + <compile files="Inner.java,TargetClass.java,Util.java"/> + <run class="Inner"/> + </ajc-test> + + <ajc-test dir="new/introTypeMissing" + title="Introduced type unavailable to cast expressions in introduced field initializers" + keywords="from-resolved_10x"> + <compile files="CastInFieldInit.java,TargetClass.java,Util.java"/> + <run class="CastInFieldInit"/> + </ajc-test> + + <ajc-test dir="new/introTypeMissing" + title="Aspect type unavailable to qualified new expressions in body of introduced methods" + keywords="from-resolved_10x"> + <compile files="AspectInIntroducedMethod.java"/> + <run class="AspectInIntroducedMethod"/> + </ajc-test> + + <ajc-test dir="new/introTypeMissing" + title="Introduced type unavailable to instanceof expressions in introduced methods" + keywords="from-resolved_10x"> + <compile files="InstanceOf.java,TargetClass.java,Util.java"> + <message kind="error" line="19"/> + <message kind="error" line="20"/> + <message kind="error" line="21"/> + <message kind="error" line="22"/> + <message kind="error" line="23"/> + <message kind="error" line="24"/> + <message kind="error" line="25"/> + <message kind="error" line="26"/> + </compile> + </ajc-test> + + <ajc-test dir="new/introTypeMissing" + title="Introduced type unavailable to qualified new expressions in introduced field initializers" + keywords="from-resolved_10x"> + <compile files="InnerInFieldInit.java,TargetClass.java,Util.java"/> + <run class="InnerInFieldInit"/> + </ajc-test> + + <ajc-test dir="new" pr="595" + title="variable slots and finally/catch causing verify errors" + keywords="from-resolved_10final,from-resolved_10x"> + <compile files="AfterFinally.java"/> + <run class="AfterFinally"/> + </ajc-test> + + <ajc-test dir="new" + title="enclosing join point not exported properly in pre-initialization join point" + keywords="from-resolved_10x"> + <compile files="PreInitialization.java"/> + <run class="PreInitialization"/> + </ajc-test> + + <ajc-test dir="new" pr="590" + title="after advice on static method with pcd if() using result" + keywords="from-resolved_10x"> + <compile files="PR590.java"> + <message kind="error" line="20"/> + <message kind="error" line="23"/> + </compile> + </ajc-test> + + <ajc-test dir="new" pr="590" + title="after advice on static method with pcd if() using result through pointcut" + keywords="from-resolved_10x"> + <compile files="PR590a.java"> + <message kind="error" line="29"/> + <message kind="error" line="31"/> + </compile> + </ajc-test> + + <ajc-test dir="new/PR600" pr="600" + title="AbstractMethodError for introduced methods (order 1)" + keywords="from-resolved_10x"> + <compile files="Main.java,My_error.java,A.java,B.java,C.java"/> + <run class="Main"/> + </ajc-test> + + <ajc-test dir="new/PR600" pr="600" + title="AbstractMethodError for introduced methods (order 2)" + keywords="from-resolved_10x"> + <compile files="Main.java,My_error.java,C.java,A.java,B.java"/> + <run class="Main"/> + </ajc-test> + + <ajc-test dir="new/PR600" pr="600" + title="AbstractMethodError for introduced methods (order 3)" + keywords="from-resolved_10x"> + <compile files="My_error.java,A.java,B.java,C.java,Main.java"/> + <run class="Main"/> + </ajc-test> + + <ajc-test dir="new/PR600" pr="600" + title="AbstractMethodError for introduced methods (order 4)" + keywords="from-resolved_10x"> + <compile files="A.java,B.java,C.java,Main.java,My_error.java"/> + <run class="Main"/> + </ajc-test> + + <ajc-test dir="new/PR600" pr="600" + title="AbstractMethodError for introduced methods (order 5)" + keywords="from-resolved_10x"> + <compile files="A.java,B.java,Main.java,C.java,My_error.java"/> + <run class="Main"/> + </ajc-test> + + <ajc-test dir="new" title="declare error and abstract pointcuts" + keywords="from-resolved_10x"> + <compile files="AbstractDeclare.java"> + <message kind="error" line="3"/> + <message kind="error" line="4"/> + </compile> + </ajc-test> + + <ajc-test dir="new/runtime" + title="Exercise runtime classes (optionally in 1.1 VM)" + keywords="from-resolved_10x"> + <compile files="AllRuntime.java,TesterDriver.java"/> + <run class="TesterDriver"/> + </ajc-test> + + <ajc-test dir="new" + title="VerifyError after around advice falls off end of tryCatch" + keywords="from-resolved_10x"> + <compile files="TryOffEnd.java"> + <message kind="warning" line="13"/> + <message kind="warning" line="21"/> + </compile> + <run class="TryOffEnd"/> + </ajc-test> + + <ajc-test dir="new" pr="635" title="Named within pointcuts failing" + keywords="from-resolved_10x"> + <compile files="NamedWithinPointcuts.java"/> + <run class="NamedWithinPointcuts"/> + </ajc-test> + + <ajc-test dir="new/subaspects" pr="647" + title="aspect with private abstract pointcut" + keywords="from-resolved_10x,fail-unimplemented"> + <compile files="PrivatePointcutCE.java"> + <message kind="error" line="5"/> + </compile> + </ajc-test> + + <ajc-test dir="new/subaspects" pr="647" + title="concrete aspect unable to access abstract package-private pointcut in parent for overriding" + keywords="from-resolved_10x" + comment="XXX getting error - confirm line numbers"> + <compile files="parent/ParentCE.java,child/ChildCE.java"> + <message kind="error" line="27"/> + </compile> + </ajc-test> + + <ajc-test dir="new/subaspects" pr="647" + title="inner, outer, and outside-package subaspects of an aspect with abstract protected-, public-, and default-access pointcuts" + keywords="from-resolved_10x"> + <compile + files="parent/SubAspectVisibility.java,parent/ForeignChildHelper.java,child/ForeignChildAspect.java"/> + <run class="parent.SubAspectVisibility"/> + </ajc-test> + + <ajc-test dir="new/subaspects" pr="647" + title="inner subaspects of an aspect with private pointcut" + keywords="from-resolved_10x"> + <compile files="parent/PrivatePointcut.java"/> + <run class="parent.PrivatePointcut"/> + </ajc-test> + + <ajc-test dir="new/subaspects" pr="647" + title="outer subaspects of an aspect with private pointcut" + keywords="from-resolved_10x"> + <compile files="parent/PrivatePointcutOuterClass.java"/> + <run class="parent.PrivatePointcutOuterClass"/> + </ajc-test> + + <ajc-test dir="new/subaspects" pr="647" + title="abstract aspect used statically should not cause instantiation of advice or pointcut" + keywords="from-resolved_10x"> + <compile files="AbstractAspectUsedStatically.java"/> + <run class="AbstractAspectUsedStatically"/> + </ajc-test> + + <ajc-test dir="new" + title="private inner interface accessible in scope when declared on outer class" + keywords="from-resolved_10x"> + <compile files="DeclareAccess.java"/> + <run class="DeclareAccess"/> + </ajc-test> + + <ajc-test dir="new" + title="accessing protected superclass members in and outside CCC from body of method introduction" + keywords="from-resolved_10x"> + <compile files="SuperInIntroduction.java"/> + <run class="SuperInIntroduction"/> + </ajc-test> + + <ajc-test dir="new" + title="accessing private superclass members from body of method introduction" + keywords="from-resolved_10x"> + <compile files="SuperInIntroductionCE.java"> + <message kind="error" line="25"/> + <message kind="error" line="26"/> + </compile> + </ajc-test> + + <ajc-test dir="new" title="simple test for around and casting" + keywords="from-resolved_10x"> + <compile files="AroundCasting.java"/> + <run class="AroundCasting"/> + </ajc-test> + + <ajc-test dir="new/aroundinner" pr="620" + title="aroundInner 1 - around advice inner Thread subclass running proceed but not writing field" + keywords="from-resolved_10x"> + <compile files="ThreadNoField.java,Common.java"/> + <run class="ThreadNoField"/> + </ajc-test> + + <ajc-test dir="new/aroundinner" pr="620" + title="aroundInner 2 - around advice inner Runnable running proceed and writing method-final proxy" + keywords="from-resolved_10x"> + <compile files="Proxy.java,Common.java"/> + <run class="Proxy"/> + </ajc-test> + + <ajc-test dir="new/aroundinner" pr="620" + title="aroundInner 3 - around advice inner class running proceed and writing field" + keywords="from-resolved_10x"> + <compile files="Minimal.java,Common.java"/> + <run class="Minimal"/> + </ajc-test> + + <ajc-test dir="new/aroundinner" pr="620" + title="aroundInner 4 - around advice inner Thread subclass running proceed and writing field" + keywords="from-resolved_10x"> + <compile files="ThreadSub.java,Common.java"/> + <run class="ThreadSub"/> + </ajc-test> + + <ajc-test dir="new/aroundinner" pr="620" + title="aroundInner 5 - around advice inner Runnable (subinterface) running proceed and writing field introduced on subinterface" + keywords="from-resolved_10x"> + <compile files="RunnableSub.java,Common.java"/> + <run class="RunnableSub"/> + </ajc-test> + + <ajc-test dir="new" pr="636" + title="Named local class closing over proceed invocation" + keywords="from-resolved_10x"> + <compile files="LocalClassClosingOverProceed.java"/> + <run class="LocalClassClosingOverProceed"/> + </ajc-test> + + <ajc-test dir="new" + title="can't apply around advice to the execution of around advice" + keywords="from-resolved_10x"> + <compile files="CflowCycles.java"/> + <run class="CflowCycles"/> + </ajc-test> + + <ajc-test dir="new" + title="beautiful recursive computation of factorial with around is now supported" + keywords="from-resolved_10x"> + <compile files="CircularAdvice.java"/> + <run class="CircularAdvice"/> + </ajc-test> + + <ajc-test dir="new" pr="632" + title="multi-dispatch not used for named pcd references" + keywords="from-resolved_10x"> + <compile files="MultiDispatchCf.java"> + <message kind="error" line="54"/> + <message kind="error" line="57"/> + <message kind="error" line="60"/> + <message kind="error" line="71"/> + </compile> + </ajc-test> + + <ajc-test dir="new" pr="632" + title="multi-dispatch implemented through around + args" + keywords="from-resolved_10x"> + <compile files="MultiDispatchCp.java"/> + <run class="MultiDispatchCp"/> + </ajc-test> + + <ajc-test dir="new" + title="unrecognized aspect should not net Cloneable and Serializable warnings" + keywords="from-resolved_10x"> + <compile files="UnrecognizedAspectCE.java"> + <message kind="error" line="3"/> + </compile> + </ajc-test> + + <ajc-test dir="new" + title="unreachable code generated by around advice on the execution of void methods" + keywords="from-resolved_10x"> + <compile files="AroundVoid.java"/> + <run class="AroundVoid"/> + </ajc-test> + + <ajc-test dir="new" pr="654" + title="Overriding method implementations using introduction on interfaces" + keywords="from-resolved_10x,fail-unimplemented"> + <compile files="IntroductionsOverriding.java"/> + <run class="IntroductionsOverriding"/> + </ajc-test> + + <ajc-test dir="new" pr="654" + title="more coverage for around and concrete methods on interfaces" + keywords="from-resolved_10x"> + <compile files="MultiAndAround.java"/> + <run class="MultiAndAround"/> + </ajc-test> + + <ajc-test dir="new" title="invalid number and type of proceed arguments" + keywords="from-resolved_10x"> + <compile files="InvalidProceedArgsCE.java"> + <message kind="error" line="10"/> + <message kind="error" line="15"/> + <message kind="error" line="17"/> + <message kind="error" line="20"/> + <message kind="error" line="22"/> + <message kind="error" line="27"/> + <message kind="error" line="29"/> + <message kind="error" line="31"/> + <message kind="error" line="37"/> + <message kind="error" line="39"/> + <message kind="error" line="43"/> + <message kind="error" line="46"/> + </compile> + </ajc-test> + + <ajc-test dir="new" pr="694" title="after returning advice order" + keywords="from-resolved_10x"> + <compile files="Cricket.java"/> + <run class="Cricket"/> + </ajc-test> + + <ajc-test dir="new" pr="694" title="after returning advice param" + keywords="from-resolved_10x"> + <compile files="AfterReturningParam.java"> + <message kind="warning" line="35"/> + <message kind="warning" line="38"/> + <message kind="warning" line="41"/> + <message kind="warning" line="65"/> + </compile> + <run class="AfterReturningParam"/> + </ajc-test> + + <ajc-test dir="new" pr="695" + title="! and declaring types with callee-side call join points" + keywords="from-resolved_10x"> + <compile files="NotAndDeclaringTypes.java"/> + <run class="NotAndDeclaringTypes"/> + </ajc-test> + + <ajc-test dir="new" pr="479" + title=". Binding the wrong arguments in withincode(..)." + keywords="from-resolved_10x"> + <compile files="BindingArgumentsInWithincode.java"/> + <run class="BindingArgumentsInWithincode"/> + </ajc-test> + + <ajc-test dir="new" pr="479" + title=". Matching arguments in cflow correctly." + keywords="from-resolved_10x"> + <compile files="MatchingArgumentsInCflow.java"/> + <run class="MatchingArgumentsInCflow"/> + </ajc-test> + + <ajc-test dir="new" pr="480" + title=". Binding variables with numbers in their name with pertarget(..)'s." + keywords="from-resolved_10x"> + <compile files="PerTargetAndVariablesWithNumbersInTheirNames.java"/> + <run class="PerTargetAndVariablesWithNumbersInTheirNames"/> + </ajc-test> + + <ajc-test dir="new" pr="554" + title="second arg in formal on shared joinpoint with pcd if() causes verify error ??" + keywords="from-resolved_10rc3"> + <compile files="PR554.java"/> + <run class="PR554"/> + </ajc-test> + + <ajc-test dir="new/privilegedAspects" pr="555" + title="access to private members from privileged aspect" + keywords="from-resolved_10rc3"> + <compile + files="driver/PR555.java,util/Util.java,pack/DefaultTarget.java"/> + <run class="driver.PR555"/> + </ajc-test> + + <ajc-test dir="new" pr="555" + title="inner classes of privileged aspects cannot see target class private members" + keywords="from-resolved_10rc3"> + <compile files="InnerClassInPrivilegedAspect.java"/> + <run class="InnerClassInPrivilegedAspect"/> + </ajc-test> + + <ajc-test dir="new/packageAccessPR556" pr="556" + title="aspects should get package access outside the file" + keywords="from-resolved_10rc3"> + <compile files="base1/p/C1.java,base2/p/C2.java"/> + <run class="p.C1"/> + </ajc-test> + + <ajc-test dir="new" pr="559" + title="subclass advice not run for join points selected by superclass cflow-based pointcuts" + keywords="from-resolved_10rc3"> + <compile files="PR559.java"/> + <run class="PR559"/> + </ajc-test> + + <ajc-test dir="new" pr="559" + title="more issues with abstract aspects and cflow pointcuts" + keywords="from-resolved_10rc3,fail-unimplemented"> + <compile files="AbstractCflows.java"/> + <run class="AbstractCflows"/> + </ajc-test> + + <ajc-test dir="new" pr="560" + title="compile fails for aspect derived from percflow base aspect unless pointcut excludes base aspect and subaspects" + keywords="from-resolved_10rc3"> + <compile files="PR560.java"/> + <run class="PR560"/> + </ajc-test> + + <ajc-test dir="new" pr="568" title="cyclic pointcut definitions" + keywords="from-resolved_10rc3"> + <compile files="CyclicPointcuts.java"> + <message kind="error" line="11"/> + <message kind="error" line="14"/> + <message kind="error" line="18"/> + <message kind="error" line="32"/> + <message kind="error" line="43"/> + </compile> + </ajc-test> + + <ajc-test dir="new" pr="573" + title="pertarget stack overflow getting name of anonymous (Interface) class" + keywords="from-resolved_10rc3"> + <compile files="PR573.java"> + <message kind="warning" line="21"/> + </compile> + <run class="PR573"/> + </ajc-test> + + <ajc-test dir="new" pr="573" + title="pertarget stack overflow getting name of anonymous (Object) class" + keywords="from-resolved_10rc3"> + <compile files="PR573_1.java"> + <message kind="warning" line="20"/> + </compile> + <run class="PR573_1"/> + </ajc-test> + + <ajc-test dir="new" pr="573" + title="pertarget runtime stack overflow (getting name of anonymous (Object) class?)" + keywords="from-resolved_10rc3"> + <compile files="PR573_2.java"/> + <run class="PR573_2"/> + </ajc-test> + + <ajc-test dir="new" + title="PR584 Can construct inner classes using qualified expressions" + keywords="from-resolved_10rc3,purejava"> + <compile files="PR584.java"/> + <run class="PR584"/> + </ajc-test> + + <ajc-test dir="new" pr="685" + title="subaspect method declaration on superaspect inner interface (names)" + keywords="from-resolved_104"> + <compile files="InnerInterfaceNames.java"/> + <run class="InnerInterfaceNames"/> + </ajc-test> + + <ajc-test dir="new" pr="685" + title="subaspect method declaration on superaspect inner interface (access)" + keywords="from-resolved_104"> + <compile files="InnerInterfaceAccess.java"/> + <run class="InnerInterfaceAccess"/> + </ajc-test> + + <ajc-test dir="new" pr="685" + title="subaspect method declaration on superaspect inner interface (types)" + keywords="from-resolved_104"> + <compile files="InnerInterfaceTypes.java,InnerInterfaceTypesHelper.java"/> + <run class="InnerInterfaceTypes"/> + </ajc-test> + + <ajc-test dir="new" pr="691" title="around AST type XXX" + keywords="from-resolved_104"> + <compile files="PR691.java"/> + <run class="PR691"/> + </ajc-test> + + <ajc-test dir="new" pr="687" + title="around all execution with double assignment in initializer (simple)" + keywords="from-resolved_104"> + <compile files="AroundDoubleAssignment.java"/> + <run class="AroundDoubleAssignment"/> + </ajc-test> + + <ajc-test dir="new" pr="687" + title="around all execution with double assignment in initializer (coverage)" + keywords="from-resolved_104"> + <compile files="AroundDoubleAssignmentC.java"/> + <run class="AroundDoubleAssignmentC"/> + </ajc-test> + + <ajc-test dir="new" + title="changing this in around's proceed reported by Rich Price" + keywords="from-resolved_104"> + <compile files="AroundChangeThis.java"/> + <run class="AroundChangeThis"/> + </ajc-test> + + <ajc-test dir="new" pr="548" + title="default package for aspect introductions is not the current package" + keywords="from-resolved_10rc3,from-resolved_104"> + <compile + files="introductionPackage/two/C.java,introductionPackage/one/C.java,introductionPackage/one/Aspect.java,introductionPackage/one/TestAspect.java"/> + <run class="one.TestAspect"/> + </ajc-test> + + <ajc-test dir="new/PR569" pr="569" + title="anon class written to wrong directory" + keywords="from-resolved_104,from-resolved_104"> + <compile files="a/IntroAnon.java,a/MyInterface.java,b/Dest.java"/> + <run class="a.IntroAnon"/> + </ajc-test> + + <ajc-test dir="new" pr="603" + title="unqualified transitive pointcut references not resolved" + keywords="from-resolved_104"> + <compile files="PointcutQualification.java"/> + <run class="PointcutQualification"/> + </ajc-test> + + <ajc-test dir="new" pr="603" + title="unqualified transitive pointcut references not resolved - 2" + keywords="from-resolved_104"> + <compile files="PointcutQualification2.java"/> + <run class="PointcutQualification2"/> + </ajc-test> + + <ajc-test dir="new" pr="619" + title="direct use outside aspect of defined abstract pointcut" + keywords="from-resolved_104"> + <compile files="AbstractPointcutAccess.java"/> + <run class="AbstractPointcutAccess"/> + </ajc-test> + + <ajc-test dir="new" pr="619" + title="direct use outside aspect of undefined abstract pointcut" + keywords="from-resolved_104"> + <compile files="AbstractPointcutAccessCE.java"> + <message kind="error" line="9"/> + </compile> + </ajc-test> + + <ajc-test dir="new" pr="619" + title="indirect use outside aspect of undefined abstract pointcut" + keywords="from-resolved_104"> + <compile files="AbstractPointcutIndirectCE.java"> + <message kind="error" line="9"/> + <message kind="error" line="4"/> + </compile> + </ajc-test> + + <ajc-test dir="new" pr="658" + title="simple call join point tests for JoinPoint SourceLocation context" + keywords="from-resolved_104"> + <compile files="SourceLocationCall.java"/> + <run class="SourceLocationCall"/> + </ajc-test> + + <ajc-test dir="new" pr="661" + title="!target with second advice on casted call" + keywords="from-resolved_104"> + <compile files="CallNotTarget.java"/> + <run class="CallNotTarget"/> + </ajc-test> + + <ajc-test dir="new" pr="666" title="name binding in around cflow" + keywords="from-resolved_104"> + <compile files="AroundCall.java"/> + <run class="AroundCall"/> + </ajc-test> + + <ajc-test dir="new" pr="660" title="name binding in around cflow - 2" + keywords="from-resolved_104"> + <compile files="ArgsInCflow2.java"/> + <run class="ArgsInCflow2"/> + </ajc-test> + + <ajc-test dir="new" pr="660" title="illegal name binding in around cflow" + keywords="from-resolved_104"> + <compile files="ArgsInCflowCf.java"> + <message kind="error" line="19"/> + <message kind="error" line="29"/> + <message kind="error" line="35"/> + </compile> + </ajc-test> + + <ajc-test dir="new" pr="677" + title="around name-binding in cflows using factorial" + keywords="from-resolved_104"> + <compile files="FactorialCflow.java"/> + <run class="FactorialCflow"/> + </ajc-test> + + <ajc-test dir="new" pr="715" title="incrementing objects, arrays - 2" + keywords="from-resolved_104,purejava"> + <compile files="ArrayInc2CE.java"> + <message kind="error" line="12"/> + <message kind="error" line="13"/> + <message kind="error" line="14"/> + <message kind="error" line="15"/> + </compile> + </ajc-test> + + <ajc-test dir="new" pr="715" title="incrementing objects, arrays CE" + keywords="from-resolved_104,purejava,messages-vary"> + <compile files="ArrayIncCE.java" + options="!eclipse"> + <message kind="error" line="15"/> + <message kind="error" line="16"/> + <message kind="error" line="17"/> + <message kind="error" line="18"/> + <message kind="error" line="19"/> + </compile> + </ajc-test> + + <ajc-test dir="new" pr="715" title="incrementing objects, arrays - 3" + keywords="from-resolved_104,purejava"> + <compile files="ArrayInc3CE.java"> + <message kind="error" line="15"/> + <message kind="error" line="16"/> + <message kind="error" line="17"/> + <message kind="error" line="18"/> + <message kind="error" line="19"/> + </compile> + </ajc-test> + + <ajc-test dir="new" pr="715" title="incrementing objects, arrays" + keywords="from-resolved_104,purejava"> + <compile files="ArrayInc.java"/> + <run class="ArrayInc"/> + </ajc-test> + + <ajc-test dir="new" title="replacing this or target in around advice" + keywords="from-resolved_104"> + <compile files="TargetObjectReplacement.java"/> + <run class="TargetObjectReplacement"/> + </ajc-test> + + <ajc-test dir="new" + title="after returning from initialization and after executing constructor" + keywords="from-resolved_104"> + <compile files="ConstructorExecInit.java"/> + <run class="ConstructorExecInit"/> + </ajc-test> + + <ajc-test dir="new" pr="659" + title="name binding in before cflow containing cflowbelow" + keywords="from-resolved_104"> + <compile files="ArgsInCflow.java" options="!eclipse"> + <message kind="error" line="29"/> + <message kind="error" line="32"/> + </compile> + </ajc-test> + + + <ajc-test dir="pureJava" pr="737" + title="no circularity errors simply because of inners (1)" + keywords="from-resolved_105,purejava"> + <compile files="circle/Test1CP.java"/> + <run class="circle.Test1CP"/> + </ajc-test> + + <ajc-test dir="pureJava" pr="737" + title="no circularity errors simply because of inners (2)" + keywords="from-resolved_105,purejava"> + <compile files="circle/Test2CP.java"/> + <run class="circle.Test2CP"/> + </ajc-test> + + <ajc-test dir="pureJava" pr="737" + title="should have circular inheritance errors (1)" + keywords="from-resolved_105,purejava,messages-vary"> + <compile files="circle/Test1CF.java" + options="!eclipse"> + <message kind="error" line="7"/> + <message kind="error" line="15"/> + <message kind="error" line="17"/> + </compile> + </ajc-test> + + <ajc-test dir="pureJava" pr="737" + title="should have circular inheritance errors (2)" + keywords="from-resolved_105,purejava,messages-vary"> + <compile files="circle/Test2CF.java" + options="!eclipse"> + <message kind="error" line="6"/> + <message kind="error" line="10"/> + <message kind="error" line="15"/> + </compile> + </ajc-test> + + <ajc-test dir="new/pr728" pr="728" title="file order in type searching" + keywords="from-resolved_105"> + <compile files="AnotherClass.java,Interface.java"/> + <run class="AnotherClass"/> + </ajc-test> + + <ajc-test dir="pureJava" pr="728" + title="interface using preceding subinterface in its definition" + keywords="from-resolved_105,purejava"> + <compile files="ParentUsingChild.java"/> + <run class="ParentUsingChild"/> + </ajc-test> + + <ajc-test dir="new" pr="645" + title="Parent interface using public inner interface of child in same file" + keywords="from-resolved_105,purejava"> + <compile files="ParentInterfaceUsingChildInnerInterface.java"/> + <run class="ParentInterfaceUsingChildInnerInterface"/> + </ajc-test> + + <ajc-test dir="errors" + title="a type is not allowed to extend or implement its own innner type" + keywords="from-resolved_105,purejava"> + <compile files="NestedInterfaceTest.java"> + <message kind="error" line="1"/> + </compile> + </ajc-test> + + <ajc-test dir="pureJava" title="try requires block JLS 14.19" + keywords="from-resolved_105,purejava,messages-vary"> + <compile files="TryBlockRequiredCE.java" + options="!eclipse"> + <message kind="error" line="6"/> + </compile> + </ajc-test> + + <ajc-test dir="pureJava" pr="722" title="loop expressions not declarations" + keywords="from-resolved_105,purejava,messages-vary"> + <compile files="DeclarationsInLoopsCE.java" + options="!eclipse"> + <message kind="error" line="7"/> + </compile> + </ajc-test> + + + + + + + + + <ajc-test dir="new" pr="663" + title="no error when public class is in file of a different name" + keywords="from-resolved_105,purejava"> + <compile options="-strict" files="PublicClassWrongFilename.java"> + <message kind="error" line="3"/> + </compile> + </ajc-test> + + <ajc-test dir="pureJava" pr="739" + title="local variables must be final to be accessed from inner class" + keywords="from-resolved_105,purejava"> + <compile files="LocalsFromInnerCE.java"> + <message kind="error" line="6"/> + <message kind="error" line="13"/> + <message kind="error" line="19"/> + <message kind="error" line="25"/> + <message kind="error" line="32"/> + <message kind="error" line="40"/> + <message kind="error" line="51"/> + <message kind="error" line="61"/> + <message kind="error" line="67"/> + <message kind="error" line="75"/> + <message kind="error" line="81"/> + </compile> + </ajc-test> + + <ajc-test dir="pureJava" pr="739" + title="final local variables may be accessed from inner class" + keywords="from-resolved_105,purejava"> + <compile files="LocalsFromInnerCP.java"/> + <run class="LocalsFromInnerCP"/> + </ajc-test> + + + <ajc-test dir="pureJava" pr="723" title="missing package identifier" + keywords="from-resolved_105,purejava"> + <compile files="MissingPackageCE.java"> + <message kind="error" line="2"/> + </compile> + </ajc-test> + + <ajc-test dir="pureJava" pr="721" + title="interface declaration not permitted in local method scope" + keywords="from-resolved_105"> + <compile files="LocalInterfaceCE.java"> + <message kind="error" line="5"/> + <message kind="error" line="8"/> + <message kind="error" line="11"/> + <message kind="error" line="15"/> + </compile> + </ajc-test> + + <ajc-test dir="new" title="simple declare warning (NPE)" + keywords="from-resolved_105"> + <compile files="DeclareWarningMain.java"> + <message kind="warning" line="4"/> + </compile> + <run class="DeclareWarningMain"/> + </ajc-test> + + <ajc-test dir="new" + title="package typepattern with no packages (in default package)" + keywords="from-resolved_105"> + <compile options="-Xlint" files="TypeNames.java"> + <message kind="warning" line="34"/> + <message kind="warning" line="39"/> + <message kind="warning" line="43"/> + <message kind="warning" line="47"/> + </compile> + <run class="TypeNames"/> + </ajc-test> + + <ajc-test dir="new" pr="701" + title="CE for ambiguous type reference (two files in package)" + keywords="from-resolved_105,purejava"> + <compile + files="ambiguousClass/AmbiguousReferent.java,ambiguousClass/AmbiguousClassReference.java"> + <message kind="error" line="5"/> + </compile> + </ajc-test> + + + <ajc-test dir="new" + title="initializer can throw so long as all constructors declare so" + keywords="from-resolved_105,purejava"> + <compile files="InitializerWithThrow.java"/> + <run class="InitializerWithThrow"/> + </ajc-test> + + <ajc-test dir="pureJava" + title="interfaces may not contain initializers (bug found by jacks)" + keywords="from-resolved_105,purejava"> + <compile files="InterfaceMembersCf.java"> + <message kind="error" line="2"/> + <message kind="error" line="3"/> + </compile> + </ajc-test> + + + + + + + + <ajc-test dir="new" pr="755" + title="ajc dies on cflow into field init anon class see knownbugs.txt" + keywords="from-resolved_105"> + <compile files="CflowOfFieldInitAnonMethods.java" options="!eclipse"> + </compile> + <run class="CflowOfFieldInitAnonMethods" options="!eclipse"/> + </ajc-test> + + <ajc-test dir="pureJava" + title="initializers must be able to complete normally (found by jacks)" + keywords="from-resolved_105,purejava,messages-vary"> + <compile files="InitializerFlowCf.java" + options="!eclipse"> + <message kind="error" line="2"/> + <message kind="error" line="4"/> + </compile> + </ajc-test> + + <ajc-test dir="new" pr="757" title="Incrementing interface-introduced field" + keywords="from-resolved_105"> + <compile files="IntroducedFieldInc.java"/> + <run class="IntroducedFieldInc"/> + </ajc-test> + + + <ajc-test dir="pureJava" title="more tests of super alone" + keywords="from-resolved_105,purejava"> + <compile files="SuperIsWeird.java"> + <message kind="error" line="9"/> + <message kind="error" line="13"/> + <message kind="error" line="20"/> + <message kind="error" line="21"/> + </compile> + </ajc-test> + + <ajc-test dir="new" + title="The dynamic type, not the static one, should be used in if pcds" + keywords="from-resolved_105"> + <compile files="StaticTypeInIf.java"/> + <run class="StaticTypeInIf"/> + </ajc-test> + + <ajc-test dir="new" + title="bad interaction with after returning, around and void methods (from Rich Price)" + keywords="from-resolved_105"> + <compile files="AfterReturningResult.java"/> + <run class="AfterReturningResult"/> + </ajc-test> + + <ajc-test dir="new" + title="type pattern matching for inner classes (from Ken Horn)" + keywords="from-resolved_105"> + <compile files="TypePat.java"/> + <run class="test.TypePat"/> + </ajc-test> + + <ajc-test dir="new" pr="771" title="static initializer member name" + keywords="from-resolved_105"> + <compile files="StaticInitName.java"/> + <run class="StaticInitName"/> + </ajc-test> + + <ajc-test dir="new" pr="770" title="cflow pcd syntax error" + keywords="from-resolved_105"> + <compile files="IllegalCflowCE.java"> + <message kind="error" line="4"/> + </compile> + </ajc-test> + + <ajc-test dir="new" pr="764" + title="binding args with indeterminate prefix and suffix" + keywords="from-resolved_105"> + <compile files="IndeterminateArgs.java"/> + <run class="IndeterminateArgs"/> + </ajc-test> + + <ajc-test dir="new" pr="764" + title="flag errors when binding args with indeterminate prefix and suffix" + keywords="from-resolved_105"> + <compile files="IndeterminateArgsCE.java"> + <message kind="error" line="67"/> + <message kind="error" line="68"/> + <message kind="error" line="70"/> + <message kind="error" line="72"/> + </compile> + </ajc-test> + + <ajc-test dir="new" pr="764" + title="check arg types with indeterminate prefix and suffix" + keywords="from-resolved_105"> + <compile files="IndeterminateArgType.java"/> + <run class="IndeterminateArgType"/> + </ajc-test> + + <ajc-test dir="new" pr="764" + title="testing and binding args with single indeterminate prefix and suffix" + keywords="from-resolved_105"> + <compile files="IndeterminateArg.java"/> + <run class="IndeterminateArg"/> + </ajc-test> + + <ajc-test dir="new" pr="764" + title="binding handler args with indeterminate prefix and suffix" + keywords="from-resolved_105"> + <compile files="IndeterminateHandlerArg.java"/> + <run class="IndeterminateHandlerArg"/> + </ajc-test> + + + <ajc-test dir="pureJava" + title="Locals inside other locals, ordering of processing [eh]" + keywords="from-resolved_105"> + <compile files="LocalInners2.java"/> + <run class="LocalInners2"/> + </ajc-test> + + <ajc-test dir="pureJava" pr="752" + title="subclass access to enclosing super class private members" + keywords="from-resolved_105,purejava,fail-unimplemented"> + <compile files="SubclassAccessToEnclosingSuperClassPrivate.java"/> + <run class="SubclassAccessToEnclosingSuperClassPrivate"/> + </ajc-test> + + <ajc-test dir="new/nolang" pr="762" + title="Compiling java.lang.Object with ajc yields non-verifying bytecode" + keywords="from-resolved_105" + comment="XXX weak/bad test"> + <compile files="java/lang/Object.java,java/lang/String.java"> + </compile> + </ajc-test> + + <ajc-test dir="new" + title="method-local class defined in around return statement" + keywords="from-resolved_105"> + <compile files="MethodLocalAroundReturns.java"/> + <run class="MethodLocalAroundReturns"/> + </ajc-test> + + <ajc-test dir="new" title="CE expected for assignment to arg in if pcd" + keywords="from-resolved_105"> + <compile files="IfPCDAssignmentCE.java"> + <message kind="error" line="16"/> + <message kind="error" line="20"/> + </compile> + </ajc-test> + + <ajc-test dir="new" title="advising field get/sets when accessing via super" + keywords="from-resolved_105"> + <compile files="SuperField.java"/> + <run class="SuperField"/> + </ajc-test> + + <ajc-test dir="new" title="accessing private members in outer types" + keywords="from-resolved_105"> + <compile files="FieldInnerAccess.java"/> + <run class="FieldInnerAccess"/> + </ajc-test> + + <ajc-test dir="pureJava" title="various tests of switch bounds" + keywords="from-resolved_106,purejava"> + <compile files="SwitchBounds.java"/> + <run class="SwitchBounds"/> + </ajc-test> + + <ajc-test dir="new" pr="601" + title="VerifyError if nested sync returning result" + comment="XXX inconsistent behavior?" + keywords="from-resolved_10final,purejava"> + <compile files="NestedSyncWithResult.java"/> + <run class="NestedSyncWithResult"/> + </ajc-test> + + <ajc-test dir="new" pr="853" + title="declare interface extends class"> + <compile files="DeclareInterfaceExtendsClass.java"> + <message kind="error" line="10"/> + </compile> + </ajc-test> + + <ajc-test dir="new" pr="853" + title="declare interface implements class"> + <compile files="DeclareInterfaceImplementsClass.java"> + <message kind="error" line="10"/> + </compile> + </ajc-test> + + <ajc-test dir="pureJava" title="assert flow" + keywords="from-14tests,purejava"> + <compile options="-source14" files="AssertsCF.java"> + <message kind="error" line="8"/> + <message kind="error" line="11"/> + </compile> + </ajc-test> + + <ajc-test dir="pureJava" title="assert flow - 2" + keywords="from-14tests,purejava"> + <compile options="-source14" files="AssertsCF2.java"> + <message kind="error" line="6"/> + </compile> + </ajc-test> + + <ajc-test dir="pureJava" title="assert typing" + keywords="from-14tests,purejava,fail-publicType"> + <compile options="-source14" files="AssertsCF1.java"> + <message kind="error" line="5"/> + </compile> + </ajc-test> + + <ajc-test dir="pureJava" title="asserts" keywords="from-14tests"> + <compile options="-source14" files="Asserts.java"/> + <run class="Asserts" vm="1.4"/> + </ajc-test> + + + <ajc-test dir="pureJava" title="assert coverage tests [requires 1.4]" + keywords="from-14tests,purejava"> + <compile options="-source14" files="AssertsCv.java"/> + <run class="AssertsCv" vm="1.4"/> + </ajc-test> + + <ajc-test dir="pureJava" + title="assert coverage tests in one package [requires 1.4]" + keywords="from-14tests,purejava,fail-unimplemented"> + <compile options="-source14" files="AssertInOnePackage.java"/> + <run class="AssertInOnePackage" vm="1.4"/> + </ajc-test> + + <ajc-test dir="new" title="assert tests in introduction [requires 1.4]" + keywords="from-14tests,fail-unimplemented"> + <compile options="-source14" files="AssertInIntro.java"/> + <run class="AssertInIntro" vm="1.4"/> + </ajc-test> + + <ajc-test dir="pureJava" title="compiling asserts in methods" + keywords="from-14tests,purejava"> + <compile options="-source14,-usejavac" files="AssertInMethod.java"/> + <run class="AssertInMethod" vm="1.4"/> + </ajc-test> + + <ajc-test dir="pureJava" pr="725" + title="asserts in aspect and declared methods [requires 1.4]" + keywords="from-14tests,purejava"> + <compile options="-source14,-usejavac" + files="IntroducedAssertion.java"/> + <run class="IntroducedAssertion" vm="1.4"/> + </ajc-test> + + <ajc-test dir="design/around" + title="around and return types + inlining optimizations" + comment="XXX not a 1.4 test, but source uses 1.4 APIs" + keywords="from-14tests"> + <compile options="-XOcodeSize,-source14" + files="ReturnCastProceed.java,StackChecker.java"> + <message kind="warning" line="68"/> + </compile> + <run class="ReturnCastProceed" vm="1.4"/> + </ajc-test> + + + <ajc-test dir="base/test131" + title="various forms of package name pattern matching work" + keywords="from-broken14usejavac"> + <compile files="Driver.java,p1/C1.java,p1/p2/C2.java"/> + <run class="Driver"/> + </ajc-test> + + <ajc-test dir="new" pr="134" + title="import of a class in the default package" + keywords="from-broken14usejavac,purejava"> + <compile files="ImportFromUnnamed.java,DeclaredExcs.java"/> + <run class="ImportFromUnnamed"/> + </ajc-test> + + <ajc-test dir="pureJava" pr="386" + title="Referencing static interfaces with import statements" + keywords="from-broken14usejavac,purejava"> + <compile files="ClassWithStaticInnerInterfaces.java"/> + <compile files="ImportingStaticInnerInterfaces_PR386.java"/> + <run class="ImportingStaticInnerInterfaces_PR386"/> + </ajc-test> + + <ajc-test dir="pureJava" pr="386" + title="Referencing static interfaces with import statements stars" + keywords="purejava,from-broken14usejavac"> + <compile files="ClassWithStaticInnerInterfaces.java"/> + <compile files="ImportingStaticInnerInterfacesStars_PR386.java"/> + <run class="ImportingStaticInnerInterfacesStars_PR386"/> + </ajc-test> + + <ajc-test dir="pureJava" pr="386" + title="Referencing static interfaces with import statements stars 2" + keywords="purejava,from-broken14usejavac"> + <compile files="ClassWithStaticInnerInterfaces.java"/> + <compile files="ImportingStaticInnerInterfacesStars2_PR386.java"/> + <run class="ImportingStaticInnerInterfacesStars2_PR386"/> + </ajc-test> + + <ajc-test dir="pureJava" pr="386" + title="Referencing static interfaces with import statements stars 3" + keywords="purejava,from-broken14usejavac"> + <compile files="ClassWithStaticInnerInterfaces.java"/> + <compile files="ImportingStaticInnerInterfacesStars3_PR386.java"/> + <run class="ImportingStaticInnerInterfacesStars3_PR386"/> + </ajc-test> + + <ajc-test dir="pureJava" pr="386" + title="Referencing interfaces with import statements" + keywords="purejava,from-broken14usejavac"> + <compile + files="ClassWithInnerInterfaces.java,ImportingInnerInterfaces_PR386.java"/> + <run class="ImportingInnerInterfaces_PR386"/> + </ajc-test> + + <ajc-test dir="pureJava" pr="386" + title="Referencing interfaces with import statements stars" + keywords="purejava,from-broken14usejavac"> + <compile + files="ClassWithInnerInterfaces.java,ImportingInnerInterfacesStars_PR386.java"/> + <run class="ImportingInnerInterfacesStars_PR386"/> + </ajc-test> + + <ajc-test dir="pureJava" pr="386" + title="Referencing interfaces with import statements stars 2" + keywords="purejava,from-broken14usejavac"> + <compile + files="ClassWithInnerInterfaces.java,ImportingInnerInterfacesStars2_PR386.java"/> + <run class="ImportingInnerInterfacesStars2_PR386"/> + </ajc-test> + + <ajc-test dir="pureJava" pr="386" + title="Referencing interfaces with import statements stars 3" + keywords="purejava,from-broken14usejavac"> + <compile + files="ClassWithInnerInterfaces.java,ImportingInnerInterfacesStars3_PR386.java"/> + <run class="ImportingInnerInterfacesStars3_PR386"/> + </ajc-test> + + <ajc-test dir="new" pr="657" + title="assert statement in advice coverage [requires 1.4]" + keywords="from-14tests,fail-in-eclipse"> + <compile options="-source14" files="AssertInAdvice.java"/> + <run class="AssertInAdvice" vm="1.4"/> + </ajc-test> + + <ajc-test dir="new" pr="657" + title="assert statement in advice [requires 1.4]" + keywords="from-14tests,fail-in-eclipse"> + <compile options="-source14" files="AssertInAdviceBug.java"/> + <run class="AssertInAdviceBug" vm="1.4"/> + </ajc-test> + + <ajc-test dir="pureJava" pr="866" + title="non-constant static final fields marked as final in .class"> + <compile files="FinalStaticField.java"/> + <run class="FinalStaticField"/> + </ajc-test> + + <ajc-test dir="new" pr="883" + title="signature of handler join point"> + <compile files="HandlerSignature.java"/> + <run class="HandlerSignature"/> + </ajc-test> + + <ajc-test dir="new" pr="885" + title="source locations within expressions"> + <compile files="SourceLocationWithinExpr.java"/> + <run class="SourceLocationWithinExpr"/> + </ajc-test> + + <ajc-test dir="new" pr="888" + title="crashes given method in declared method"> + <compile files="DeclareMethodCE.java"> + <message kind="error" line="8"/> + </compile> + </ajc-test> + + <ajc-test dir="new" pr="889" + title="after returning advice on interface constructor"> + <compile files="AfterReturningInterfaceConstructor.java"/> + <run class="AfterReturningInterfaceConstructor"/> + </ajc-test> + + <!-- .................................... option tests --> + <!-- .................................... -warn tests --> + <ajc-test dir="options" + title="options -warn:deprecation"> + <compile files="WarnDeprecated.java" + options="!eclipse,-warn:deprecation"> + <message kind="warning" line="10"/> + </compile> + </ajc-test> + + <!-- .................................... -Xlint tests --> + <!-- ............... positive -Xlint tests --> + <ajc-test dir="options" + title="options -Xlint args()" + keywords="lint"> + <compile files="XLintTypeArgsPCD.java" + options="!Xlint"> + <message kind="warning" line="10"/> + </compile> + </ajc-test> + + <ajc-test dir="options" + title="options declare field on bad type"> + <compile files="XLintTypeDeclareField.java" options="!eclipse"> + <message kind="error" line="10"/> + </compile> + </ajc-test> + + <ajc-test dir="options" + title="options declare method on bad type"> + <compile files="XLintTypeDeclareMethod.java" options="!eclipse"> + <message kind="error" line="10"/> + </compile> + </ajc-test> + + <ajc-test dir="options" + title="options -Xlint declare parent" + keywords="lint"> + <compile files="XLintTypeDeclareParent.java" + options="!Xlint"> + <message kind="warning" line="10"/> + </compile> + </ajc-test> + + <ajc-test dir="options" + title="options -Xlint target()" + keywords="lint"> + <compile files="XLintTypeTargetPCD.java" + options="!Xlint"> + <message kind="warning" line="10"/> + </compile> + </ajc-test> + + <ajc-test dir="options" + title="options -Xlint this()" + keywords="lint"> + <compile files="XLintTypeThisPCD.java" + options="!Xlint"> + <message kind="warning" line="10"/> + </compile> + </ajc-test> + + <!-- ............... negative -Xlint tests --> + <ajc-test dir="options" + title="options negative -Xlint args()" + keywords="lint"> + <compile files="XLintTypeArgsPCD.java" options="-Xlint:ignore"/> + </ajc-test> + + <ajc-test dir="options" + title="options negative -Xlint declare parent" + keywords="lint"> + <compile files="XLintTypeDeclareParent.java" options="-Xlint:ignore"/> + </ajc-test> + + <ajc-test dir="options" + title="options negative -Xlint target()" + keywords="lint"> + <compile files="XLintTypeTargetPCD.java" options="-Xlint:ignore"/> + </ajc-test> + + <ajc-test dir="options" + title="options negative -Xlint this()" + keywords="lint"> + <compile files="XLintTypeThisPCD.java" options="-Xlint:ignore"/> + </ajc-test> + + + <!-- .................................... -injars tests --> + + <ajc-test dir="options/injars/simple" + title="source for options -injars"> + <compile files="Simple.java,Main.java"/> + <run class="Main"/> + </ajc-test> + + <ajc-test dir="options/injars/simple" + title="options -injars"> + <compile files="Simple.java,main.jar" + options="!eclipse"/> + <run class="Main"/> + </ajc-test> + + <!-- .................................... aspectpath tests --> + <ajc-test dir="new/options11" + comment="XXX not validated correct yet" + title="testing new options"> + <compile files="Main.java,inJar.jar,Aspect.java" + aspectpath="aspectlib1.jar,aspectlib2.jar"/> + <run class="Main"/> + </ajc-test> + +</suite> diff --git a/tests/ajcTests10.xml b/tests/ajcTests10.xml new file mode 100644 index 000000000..8a493e486 --- /dev/null +++ b/tests/ajcTests10.xml @@ -0,0 +1,248 @@ + +<!DOCTYPE suite SYSTEM "../tests/ajcTestSuite.dtd"> + + +<suite> + <ajc-test dir="jacks" + title="14.20-label-11 The break is interrupted by the try-finally" + keywords="from-stricttests"> + <compile options="-strict" files="FinallyReturns.java"> + <message kind="error" line="11"/> + </compile> + </ajc-test> + + <ajc-test dir="jacks" + title="14.20-catch-14 The throw is interrupted by the inner finally" + keywords="from-stricttests"> + <compile options="-strict" files="FinallyReturnsThrows.java"> + <message kind="error" line="10"/> + </compile> + </ajc-test> + + <ajc-test dir="jacks" + title="14.20-label-12 The break is interrupted by the try-finally" + keywords="from-stricttests"> + <compile options="-strict" files="FinallyReturnsBreakInCatch.java"> + <message kind="error" line="10"/> + </compile> + </ajc-test> + + <!-- strict-only tests treated as 1.0 tests --> + + <!-- ajc-only tests treated as 1.0 tests --> + <ajc-test dir="new" pr="567" + title="cyclic interface inheritance not detected if no classes implement the interfaces" + keywords="from-java,purejava,messages-vary"> + <compile files="CyclicInterfaceInheritance.java" + options="!ajc"> + <message kind="error" line="14"/> + </compile> + </ajc-test> + + <ajc-test dir="new/packagePrefix" pr="574" + title="classes that are package prefixes are illegal" + keywords="from-java,purejava,messages-vary"> + <compile files="p/prefix.java,p/prefix/SomeClass.java" + options="!ajc"> + <message kind="error" line="3"/> + </compile> + </ajc-test> + + <ajc-test dir="pureJava" + title="suggested by Jacks 15.28-qualified-namestr tests" + keywords="from-java,purejava,messages-vary"> + <compile files="NonConstants.java" + options="!ajc"> + <message kind="error" line="14"/> + <message kind="error" line="15"/> + <message kind="error" line="16"/> + </compile> + </ajc-test> + + <ajc-test dir="new" pr="643" title="try without catch or finally" + keywords="from-java,purejava,message-vary"> + <compile files="TryNoCatchCE.java" + options="!ajc"> + <message kind="error" line="5"/> + </compile> + </ajc-test> + + <ajc-test dir="new" pr="642" title="invalid floating-point constant" + keywords="from-java,purejava,messages-vary"> + <compile files="ParsingFloatCE.java" + options="!ajc"> + <message kind="error" line="5"/> + <message kind="error" line="6"/> + </compile> + </ajc-test> + + <ajc-test dir="new/subaspects" pr="647" + title="concrete aspect unable to access abstract package-private method in parent for overriding" + keywords="from-java,purejava,messages-vary"> + <compile files="parent/ParentMethodCE.java,child/ChildMethodCE.java" + options="!ajc"> + <message kind="error" line="27"/> + </compile> + </ajc-test> + + <ajc-test dir="new" pr="701" + title="CE for ambiguous type reference (two type declarations)" + keywords="from-java,purejava,messages-vary"> + <compile files="AmbiguousClassReference3CE.java" + options="!ajc"> + <message kind="error" line="9"/> + <message kind="error" line="10"/> + </compile> + </ajc-test> + + <ajc-test dir="new" pr="701" + title="CE for ambiguous type reference (two inner types)" + keywords="from-java,purejava,messages-vary"> + <compile files="AmbiguousClassReference4CE.java" + options="!ajc"> + <message kind="error" line="9"/> + <message kind="error" line="10"/> + </compile> + </ajc-test> + + <ajc-test dir="errors" title="Crashes when a cast of the form )int) appears" + keywords="from-errors,purejava,messages-vary"> + <compile files="BadCast.java" + options="!ajc"> + <message kind="error" line="9"/> + </compile> + </ajc-test> + + <ajc-test dir="errors" title="Crashes when the closing brace is reversed" + keywords="from-errors,purejava,messages-vary"> + <compile files="ClosingBrace.java" + options="!ajc"> + <message kind="error" line="14"/> + </compile> + </ajc-test> + + <ajc-test dir="errors" title="class and interface extension" + keywords="from-errors,purejava,messages-vary"> + <compile files="BadExtension.java" + options="!ajc"> + <message kind="error" line="9"/> + <message kind="error" line="16"/> + <message kind="error" line="17"/> + <message kind="error" line="18"/> + <message kind="error" line="19"/> + <message kind="error" line="21"/> + <message kind="error" line="35"/> + <message kind="error" line="38"/> + </compile> + </ajc-test> + + <ajc-test dir="errors" title="illegal synchronized stmts" + keywords="from-errors,purejava,messages-vary"> + <compile files="BadSynchronized.java" + options="!ajc"> + <message kind="error" line="3"/> + <message kind="error" line="4"/> + <message kind="error" line="5"/> + <message kind="error" line="6"/> + </compile> + </ajc-test> + + <ajc-test dir="new" pr="715" title="incrementing objects, arrays CE" + keywords="from-resolved_104,purejava,messages-vary"> + <compile files="ArrayIncCE.java" + options="!ajc"> + <message kind="error" line="15"/> + <message kind="error" line="16"/> + <message kind="error" line="17"/> + <message kind="error" line="18"/> + <message kind="error" line="19"/> + <message kind="error" line="20"/> + <message kind="error" line="21"/> + </compile> + </ajc-test> + + <ajc-test dir="pureJava" pr="737" + title="should have circular inheritance errors (1)" + keywords="from-resolved_105,purejava,messages-vary"> + <compile files="circle/Test1CF.java" + options="!ajc"> + <message kind="error" line="7"/> + </compile> + </ajc-test> + + <ajc-test dir="pureJava" pr="737" + title="should have circular inheritance errors (2)" + keywords="from-resolved_105,purejava,messages-vary"> + <compile files="circle/Test2CF.java" + options="!ajc"> + <message kind="error" line="6"/> + </compile> + </ajc-test> + + <ajc-test dir="pureJava" title="try requires block JLS 14.19" + keywords="from-resolved_105,purejava,messages-vary"> + <compile files="TryBlockRequiredCE.java" + options="!ajc"> + <message kind="error" line="6"/> + <message kind="error" line="7"/> + <message kind="error" line="8"/> + </compile> + </ajc-test> + + <ajc-test dir="pureJava" pr="722" title="loop expressions not declarations" + keywords="from-resolved_105,purejava,messages-vary"> + <compile files="DeclarationsInLoopsCE.java" + options="!ajc"> + <message kind="error" line="7"/> + <message kind="error" line="8"/> + <message kind="error" line="9"/> + </compile> + </ajc-test> + + <ajc-test dir="ng" + title="array initializers can't have random commas" + keywords="from-resolved_105,purejava,messages-vary"> + <compile files="ArrayInitError.java" + options="!ajc,^lenient"> + <message kind="error" line="6"/> + <message kind="error" line="7"/> + </compile> + </ajc-test> + + <ajc-test dir="ng" + title="array initializers can't have random commas" + keywords="from-resolved_105,purejava,messages-vary"> + <compile files="ArrayInitError.java" + options="!ajc,!lenient"> + <message kind="error" line="6"/> + </compile> + </ajc-test> + + <ajc-test dir="ng" + title="try stmt must be block [parser, different lines from javac]" + keywords="from-resolved_105,purejava,messages-vary"> + <compile files="NonBlockTryStmt.java" + options="!ajc"> + <message kind="error" line="8"/> + <message kind="error" line="10"/> + <message kind="error" line="12"/> + <message kind="error" line="14"/> + </compile> + </ajc-test> + + <ajc-test dir="pureJava" + title="initializers must be able to complete normally (found by jacks)" + keywords="from-resolved_105,purejava,messages-vary"> + <compile files="InitializerFlowCf.java" + options="!ajc"> + <message kind="error" line="1"/> + </compile> + </ajc-test> + + <ajc-test dir="new" pr="884" keywords="v1.0" + title="declare constructor on interface subclasses" > + <compile options="!ajc" files="DeclareInterfaceConstructor.java"/> + <run class="DeclareInterfaceConstructor"/> + </ajc-test> + +</suite> diff --git a/tests/ajcTestsAttic.xml b/tests/ajcTestsAttic.xml new file mode 100644 index 000000000..e6cbf3bae --- /dev/null +++ b/tests/ajcTestsAttic.xml @@ -0,0 +1,374 @@ + +<!DOCTYPE suite SYSTEM "../tests/ajcTestSuite.dtd"> + + +<suite> + <ajc-test dir="tom" + title="The classes which implement the conflict sets pattern from CPJ(2e). There should be no errors." + keywords="from-tomtests"> + <compile files="Assertions.java,conflict_sets/*.java"/> + <run class="Main"/> + </ajc-test> + + <ajc-test dir="tom" + title="The Classes which implement the Joint Actions protocols from CPJ(2e). There should be no errors." + keywords="from-tomtests"> + <compile files="Assertions.java,joint_actions/*.java"/> + <run class="Main"/> + </ajc-test> + + <ajc-test dir="tom" title="Subject/Observer Pattern. no errors" + keywords="from-tomtests"> + <compile files="Assertions.java,subject_observer/*.java"/> + <run class="Main"/> + </ajc-test> + + <ajc-test dir="tom" title="Method Confinement. no errors" + keywords="from-tomtests"> + <compile files="Assertions.java,confinement/*.java"/> + <run class="Main"/> + </ajc-test> + + <ajc-test dir="tom" title="Double Check policy. no errors" + keywords="from-tomtests"> + <compile files="Assertions.java,double_check/*.java"/> + <run class="Main"/> + </ajc-test> + + <ajc-test dir="tom" title="A Rollback strategy. no errors" + keywords="from-tomtests"> + <compile files="Assertions.java,rollback/*.java"/> + <run class="Main"/> + </ajc-test> + + <ajc-test dir="tom" title="An impl of the Futures pattern. no errors" + keywords="from-tomtests"> + <compile files="Assertions.java,futures/*.java"/> + <run class="Main"/> + </ajc-test> + + <ajc-test dir="tom" title="The Guards policy. no errors" + keywords="from-tomtests"> + <compile files="Assertions.java,guards/*.java"/> + <run class="Main"/> + </ajc-test> + + <ajc-test dir="tom" title="Using State Variables. no errors" + keywords="from-tomtests"> + <compile files="Assertions.java,state_variables/*.java"/> + <run class="Main"/> + </ajc-test> + + <ajc-test dir="tom" title="A guards example. no errors" + keywords="from-tomtests"> + <compile files="Assertions.java,waiting_stack/*.java"/> + <run class="Main"/> + </ajc-test> + + <ajc-test dir="tom" title="Demonstrates resource sharing. no errors" + keywords="from-tomtests"> + <compile files="Assertions.java,printer_example/*.java"/> + <run class="Main"/> + </ajc-test> + + <ajc-test dir="errors" title="Should fail because two aspects are public" + keywords="from-opentests"> + <compile files="TwoPublics.java"> + <message kind="error" line="1"/> + </compile> + </ajc-test> + + <ajc-test dir="new" title="illegal forward reference using introduction" + keywords="from-opentests"> + <compile files="IllegalForwardReference.java"/> + <run class="IllegalForwardReference"/> + </ajc-test> + + <ajc-test dir="new" pr="396" + title="Not binding static inner interfaces. ( )" keywords="from-opentests"> + <compile files="StaticInnerInterfaces_PR386.java"/> + <run class="StaticInnerInterfaces_PR386"/> + </ajc-test> + + <ajc-test dir="new" pr="396" + title="Not binding non-static inner interfaces. ( )" + keywords="from-opentests"> + <compile files="NonStaticInnerInterfaces_PR386.java"/> + <run class="NonStaticInnerInterfaces_PR386"/> + </ajc-test> + + <ajc-test dir="errors" title="Ambiguous interface should produce error" + keywords="from-opentests"> + <compile files="AmbiguousInterface.java"> + <message kind="error" line="13"/> + </compile> + </ajc-test> + + <ajc-test dir="errors" + title="Parser shouldn't accept 'const' as a variable name." + keywords="from-opentests"> + <compile files="Const.java"> + <message kind="error" line="9"/> + <message kind="error" line="10"/> + <message kind="error" line="15"/> + <message kind="error" line="19"/> + </compile> + </ajc-test> + + <ajc-test dir="errors" + title="Parser shouldn't accept 'goto' as a variable name." + keywords="from-opentests"> + <compile files="Goto.java"> + <message kind="error" line="4"/> + <message kind="error" line="9"/> + <message kind="error" line="10"/> + <message kind="error" line="14"/> + </compile> + </ajc-test> + + <ajc-test dir="errors" + title="Over-boundary base values cause compile-time errors" + keywords="from-opentests"> + <compile files="BoundaryNums.java"> + <message kind="error" line="22"/> + </compile> + </ajc-test> + + <ajc-test dir="new" + title="creates two a.java files when two classes have the same name in different cases (will not fail)" + keywords="from-badtests"> + <compile files="LowerAndUpper.java"/> + <run class="LowerAndUpper"/> + </ajc-test> + + <ajc-test dir="new" pr="312" + title="don't make each object when there's no this (should take this out)" + keywords="from-badtests"> + <compile files="EachObjectNoThis.java"/> + <run class="EachObjectNoThis"/> + </ajc-test> + + <ajc-test dir="new" pr="652" + title="declare parent accepting interface for extension" + keywords="from-badtests"> + <compile files="DeclareParentsNonsenseCE.java"> + <message kind="error" line="4"/> + <message kind="error" line="6"/> + </compile> + </ajc-test> + + <ajc-test dir="new" title="Using hasaspect. [eachobject] (still)" + keywords="from-08tests"> + <compile files="HasAspect.java"/> + <run class="HasAspect"/> + </ajc-test> + + <ajc-test dir="new" + title="(DESIGN QUESTION) aspects of eachobject and serialization (still)" + keywords="from-08tests"> + <compile files="SerializedOf.java"/> + <run class="SerializedOf"/> + </ajc-test> + + <ajc-test dir="new" + title="around advice interacting with checked exceptions, with callsto (still)" + keywords="from-08tests"> + <compile files="AroundExceptions.java"/> + <run class="AroundExceptions"/> + </ajc-test> + + <ajc-test dir="pureJava" + title="TriTestExprs interact with constant folding and name binding" + keywords="from-knownbugs"> + <compile files="TriTestMethodLookup.java"/> + <run class="TriTestMethodLookup"/> + </ajc-test> + + <ajc-test dir="pureJava" + title="Assignment to final fields w/initializers should _always_ be errors" + keywords="from-knownbugs"> + <compile files="UnderIfFalse.java"> + <message kind="error" line="11"/> + </compile> + </ajc-test> + + <ajc-test dir="new" + title="FAILING errors in unwoven advice not detected at compile time" + keywords="from-knownbugs"> + <compile files="UnwovenAdviceNotCheckedCE.java"> + <message kind="error" line="13"/> + </compile> + </ajc-test> + + <ajc-test dir="new/pr626" pr="626" + title="declared parent not defined in scope of target class declaration (CE in -usejavac only)" + keywords="from-knownbugs"> + <compile options="-usejavac" files="a/Outer.java,b/Foo.java"/> + <run class="a.Outer"/> + </ajc-test> + + <ajc-test dir="new" pr="694" + title="after returning advice on handler join points" + keywords="from-knownbugs"> + <compile files="AfterReturningHandler.java"/> + <run class="AfterReturningHandler"/> + </ajc-test> + + <ajc-test dir="new" pr="745" + title="stack overflow expected when advice recurses into itself" + keywords="from-knownbugs"> + <compile files="AdviceOnAdviceRecursion.java"/> + <run class="AdviceOnAdviceRecursion"/> + </ajc-test> + + <ajc-test dir="new" pr="755" + title="ajc dies on cflow into field init anon class" + keywords="from-knownbugs"> + <compile files="CflowOfFieldInitAnonMethods.java"/> + <run class="CflowOfFieldInitAnonMethods"/> + </ajc-test> + + <ajc-test dir="pureJava" + title="Losing information about initializers before checking their control flow" + keywords="from-knownbugs"> + <compile files="InitializerFlowCf.java"> + <message kind="error" line="2"/> + <message kind="error" line="4"/> + </compile> + </ajc-test> + + <ajc-test dir="new" + title="the way we do privileged access for ++, etc, messes up floats" + keywords="from-knownbugs"> + <compile files="FloatPrivilegedRoundoff.java"/> + <run class="FloatPrivilegedRoundoff"/> + </ajc-test> + + <ajc-test dir="pureJava" + title="nested interface does not require new qualifier (7) [extra error message]" + keywords="from-knownbugs,purejava"> + <compile files="InvalidNewQualifier7CE.java"> + <message kind="error" line="7"/> + </compile> + </ajc-test> + + <ajc-test dir="ng" title="interface inheritance should merge throws clauses" + keywords="from-knownbugs,purejava"> + <compile files="ConflictingThrowsInheritance.java"/> + <run class="ConflictingThrowsInheritance"/> + </ajc-test> + + <ajc-test dir="pureJava" + title="Locals inside other locals, ordering of processing, name-binding" + keywords="from-knownbugs"> + <compile files="LocalInners3.java"/> + <run class="LocalInners3"/> + </ajc-test> + + <ajc-test dir="new" pr="774" + title="interface self-reference in anonymous instance" + keywords="from-knownbugs"> + <compile files="AnonymousSelfReference.java"/> + <run class="AnonymousSelfReference"/> + </ajc-test> + + <ajc-test dir="new" pr="776" + title="self-reference from (aspect-declared) method-local class" + keywords="from-knownbugs"> + <compile files="MethodSelfReference.java"/> + <run class="MethodSelfReference"/> + </ajc-test> + + <ajc-test dir="new" title="declaring type in signature of anonymous class" + keywords="from-knownbugs"> + <compile files="AnonymousClassName.java"/> + <run class="AnonymousClassName"/> + </ajc-test> + + <ajc-test dir="new" + title="VM ClassFormatError on windows if nul used as class name (todo NOTOURBUG, so nul class not loaded in test) (will not fail)" + keywords="from-knownissues,purejava"> + <compile files="NulIOException3.java"/> + <run class="NulIOException3"/> + </ajc-test> + + <ajc-test dir="new" pr="602" + title="LIMITATION no deprecation warnings (regardless of -deprecation flag)" + keywords="from-knownissues,purejava"> + <compile options="-deprecation" files="DeprecationWarning.java"> + <message kind="warning" line="11"/> + </compile> + <run class="DeprecationWarning"/> + </ajc-test> + + <ajc-test dir="new" + title="around, before, after advice on handler join points" + keywords="from-knownissues"> + <compile files="AroundHandler.java"/> + <run class="AroundHandler"/> + </ajc-test> + + <ajc-test dir="new" + title="compiler limitation on asserts when using -usejavac" + keywords="from-knownissues"> + <compile options="-usejavac,-source,1.4" files="AssertInInnerIntro.java"/> + <run class="AssertInInnerIntro"/> + </ajc-test> + + <ajc-test dir="new" + title="binding parameters in a ! pcd lexically is always an error" + keywords="from-knownissues"> + <compile files="BindingInNotCf.java"> + <message kind="error" line="9"/> + <message kind="error" line="11"/> + <message kind="error" line="13"/> + </compile> + </ajc-test> + + <ajc-test dir="new" pr="704" + title="RFE mark generated static fields as transient" + keywords="from-knownissues"> + <compile files="GeneratedStaticAsTransient.java"/> + <run class="GeneratedStaticAsTransient"/> + </ajc-test> + + <ajc-test dir="new" pr="706" + title="compiling large concatenated string [bug also in javac]" + keywords="from-knownissues,purejava"> + <compile files="LongStringAjc.java"/> + <run class="LongStringAjc"/> + </ajc-test> + + <ajc-test dir="new" + title="rfe: SourceLocationImpl should implement toString as filename:column" + keywords="from-knownissues"> + <compile files="SourceLocationToString.java"/> + <run class="SourceLocationToString"/> + </ajc-test> + + <ajc-test dir="new" pr="740" + title="pointcut references with incorrect args should prompt compiler errors" + keywords="from-knownissues"> + <compile files="PCDeclarationArgsCE.java"> + <message kind="error" line="29"/> + <message kind="error" line="30"/> + <message kind="error" line="31"/> + <message kind="error" line="32"/> + <message kind="error" line="33"/> + <message kind="error" line="34"/> + <message kind="error" line="35"/> + <message kind="error" line="37"/> + <message kind="error" line="38"/> + <message kind="error" line="39"/> + <message kind="error" line="40"/> + <message kind="error" line="42"/> + <message kind="error" line="44"/> + <message kind="error" line="45"/> + <message kind="error" line="46"/> + <message kind="error" line="47"/> + <message kind="error" line="49"/> + <message kind="error" line="50"/> + <message kind="error" line="53"/> + </compile> + </ajc-test> +</suite> diff --git a/tests/ajcTestsBroken.xml b/tests/ajcTestsBroken.xml new file mode 100644 index 000000000..6fc14b27f --- /dev/null +++ b/tests/ajcTestsBroken.xml @@ -0,0 +1,71 @@ + +<!DOCTYPE suite SYSTEM "../tests/ajcTestSuite.dtd"> + + +<suite> + + <ajc-test dir="new" pr="223" + title="duplicate class names should be signalled by ajc, not javac" + keywords="from-errors,fail-commandLine" + comment="XXX harness does not handle per-file errors any more"> + <compile files="DoubleClass1.java,DoubleClass2.java"> + <message kind="error" line="3" text="DoubleClass1.java:3"/> + <message kind="error" line="3" text="DoubleClass2.java:3"/> + </compile> + </ajc-test> + + <ajc-test dir="design/around" title="around and return types" + keywords="from-design,fail-commandLine"> + <compile files="ReturnCastProceed.java,StackChecker.java"/> + <run class="ReturnCastProceed"/> + </ajc-test> + + <ajc-test dir="new/privilegedAspects" + title="access to all members of class and inner class from unprivileged aspect" + keywords="from-resolved_10x,fail-commandLine"> + <compile + files="driver/UnprivilegedAspect.java,util/Util.java,pack/DefaultTarget.java,pack/PublicTarget.java"> + <message kind="error" line="32"/> + <message kind="error" line="33"/> + <message kind="error" line="34"/> + <message kind="error" line="37"/> + <message kind="error" line="38"/> + <message kind="error" line="39"/> + <message kind="error" line="41"/> + <message kind="error" line="42"/> + <message kind="error" line="43"/> + <message kind="error" line="54"/> + <message kind="error" line="55"/> + <message kind="error" line="56"/> + <message kind="error" line="60"/> + <message kind="error" line="61"/> + <message kind="error" line="62"/> + <message kind="error" line="64"/> + <message kind="error" line="65"/> + <message kind="error" line="66"/> + <message kind="error" line="76"/> + <message kind="error" line="77"/> + <message kind="error" line="78"/> + <message kind="error" line="79"/> + <message kind="error" line="80"/> + <message kind="error" line="81"/> + <message kind="error" line="82"/> + <message kind="error" line="83"/> + <message kind="error" line="84"/> + <message kind="error" line="85"/> + <message kind="error" line="86"/> + <message kind="error" line="87"/> + <message kind="error" line="88"/> + <message kind="error" line="96"/> + <message kind="error" line="98"/> + <message kind="error" line="99"/> + <message kind="error" line="100"/> + <message kind="error" line="101"/> + <message kind="error" line="102"/> + <message kind="error" line="103"/> + <message kind="error" line="103"/> + </compile> + </ajc-test> + + +</suite> diff --git a/tests/ajcTestsFailing.xml b/tests/ajcTestsFailing.xml new file mode 100644 index 000000000..01bf6505a --- /dev/null +++ b/tests/ajcTestsFailing.xml @@ -0,0 +1,219 @@ + +<!DOCTYPE suite SYSTEM "../tests/ajcTestSuite.dtd"> + + +<suite> + <ajc-test dir="new" pr="774" + title="interface self-reference in anonymous instance (correct test in knownbugs)" + keywords="tofix" + comment="correct behavior for 1.0 is good error message, see real test in knownbugs"> + <compile files="AnonymousSelfReference.java"> + <message kind="error" line="17"/> + </compile> + </ajc-test> + + <ajc-test dir="new" pr="776" + title="self-reference from (aspect-declared) method-local class (correct test in knownbugs)" + keywords="tofix" + comment="correct behavior for 1.0 is good error message, see real test in knownbugs"> + <compile files="MethodSelfReference.java"> + <message kind="error" line="16"/> + </compile> + </ajc-test> + + <ajc-test dir="ng" + title="parenthesized type name as qualifying expr is illegal (in j2sdk1.4.1beta)" + keywords="tofix"> + <compile files="Parens1.java"> + <message kind="error" line="3"/> + </compile> + </ajc-test> + + <ajc-test dir="new" title="expect CE for unterminated declare error" + keywords="tofix"> + <compile files="UnterminatedDeclareErrorCE.java"> + <message kind="error" line="7"/> + </compile> + </ajc-test> + + <ajc-test dir="new" + title="expect CE for declaration collision between subaspects instead of domination order" + keywords="tofix"> + <compile files="DeclarationCollisionCE.java"> + <message kind="error" line="28"/> + </compile> + </ajc-test> + + <ajc-test dir="new" + title="subtype pattern in dominates should pick out aspect subtypes" + keywords="tofix"> + <compile files="DominatesTypePattern.java"/> + <run class="DominatesTypePattern"/> + </ajc-test> + + <ajc-test dir="ng" + title="long-standing bug in javac and ajc about non-verifiable try stmt" + keywords="tofix"> + <compile files="TryVerification.java"/> + <run class="TryVerification"/> + </ajc-test> + + <ajc-test dir="new" + title="unmatched type name in a declare parents should result in a warning in -Xlint mode" + keywords="tofix"> + <compile options="-Xlint" files="MissingTypeInDeclareParents.java"> + <message kind="warning" line="20"/> + </compile> + <run class="MissingTypeInDeclareParents"/> + </ajc-test> + + <ajc-test dir="new" pr="804" + title="aspect static initializers should run before instance constructed" + keywords="tofix"> + <compile files="AspectStaticInit.java"/> + <run class="AspectStaticInit"/> + </ajc-test> + + <ajc-test dir="new" pr="827" + title="after returning advice on interface and implementation constructor" + keywords="tofix"> + <compile files="AfterReturningConstructor.java"/> + <run class="AfterReturningConstructor"/> + </ajc-test> + + <ajc-test dir="new" pr="832" + title="after throwing advice with non-throwable formal" + keywords="tofix"> + <compile files="AfterThrowingNonThrowable.java"/> + <run class="AfterThrowingNonThrowable"/> + </ajc-test> + + <ajc-test dir="new" pr="823" + title="declaring a private method on an inner interface" + keywords="tofix"> + <compile files="PrivateMethodOnInnerInterface.java"/> + <run class="PrivateMethodOnInnerInterface"/> + </ajc-test> + + <ajc-test dir="new" pr="829" + title="CE expected when declaring fields on arrays" keywords="tofix"> + <compile files="ArrayFieldDeclarationCE.java"> + <message kind="error" line="14"/> + </compile> + </ajc-test> + + <ajc-test dir="new" pr="829" title="declare array field using postfix" + keywords="tofix"> + <compile files="ArrayFieldDeclaration.java"/> + <run class="ArrayFieldDeclaration"/> + </ajc-test> + + <ajc-test dir="new" pr="838" + title="checking around join point for advice return type - numeric" + keywords="tofix" comment="may need to fix error line when bug is fixed"> + <compile files="AroundNumericCastCE.java"> + <message kind="error" line="17"/> + </compile> + </ajc-test> + + <ajc-test dir="new" pr="836" title="void around advice without proceed" + keywords="tofix"> + <compile files="VoidAround.java"/> + <run class="VoidAround"/> + </ajc-test> + + <ajc-test dir="new" pr="851" + title="prohibit declaring new aspect constructor with arguments"> + <compile files="DeclareAspectConstructorCE.java"> + <message kind="error" line="10"/> + </compile> + </ajc-test> + + <ajc-test dir="new" pr="851" + title="prohibit declaring only aspect constructor with arguments"> + <compile files="DeclareOnlyAspectConstructorCE.java"> + <message kind="error" line="10"/> + </compile> + </ajc-test> + + <ajc-test dir="new/PR852" pr="852" + title="declaring method on superclass and subclass"> + <compile files="aspect/Aspect.java,target/SubClass.java,target/SuperClass.java"> + <dir-changes added="target.SubClass,target.SuperClass"/> + </compile> + <run class="aspect.Aspect"/> + </ajc-test> + + <ajc-test dir="new" pr="853" + title="declare class extends interface"> + <compile files="DeclareClassExtendsInterface.java"> + <message kind="error" line="10"/> + </compile> + </ajc-test> + + <ajc-test dir="new" pr="853" + title="declare class implements class"> + <compile files="DeclareClassImplementsClass.java"> + <message kind="error" line="10"/> + </compile> + </ajc-test> + + <ajc-test dir="new" pr="853" + title="declare interface implements interface"> + <compile files="DeclareInterfaceImplementsInterface.java"> + <message kind="error" line="10"/> + </compile> + </ajc-test> + + <ajc-test dir="new/PR862" pr="862" + title="import any inner from interface implementor" + keywords="purejava"> + <compile files="pack/ImportInnerFromInterfaceImplementor.java"> + <dir-changes added="pack.ImportInnerFromInterfaceImplementor"/> + </compile> + <run class="pack.ImportInnerFromInterfaceImplementor"/> + </ajc-test> + + <ajc-test dir="ng" + title="wrong scope for inner class creation expression"> + <compile files="InnerClassCreate.java"/> + <run class="InnerClassCreate"/> + </ajc-test> + + <ajc-test dir="ng" + title="definite unassignment versus try-finally"> + <compile files="DefiniteUnassignmentTry.java"/> + <run class="DefiniteUnassignmentTry"/> + </ajc-test> + + <ajc-test dir="ng" + title="definite assignment with constant subexpression in control-flow ops"> + <compile files="DefiniteAssignmentControlFlow.java"> + <dir-changes added="DefiniteAssignmentControlFlow"/> + </compile> + <run class="DefiniteAssignmentControlFlow"/> + </ajc-test> + + <ajc-test dir="ng" + title="conversion from null"> + <compile files="ConvertFromNull.java"> + <message kind="error" line="8"/> + </compile> + </ajc-test> + + <ajc-test dir="ng" + title="conflicting throws on inherited abstract methods"> + <compile files="ConflictingThrows.java"/> + <run class="ConflictingThrows"/> + </ajc-test> + + <ajc-test dir="new" + title="if and cflow arg binding"> + <compile files="CflowBinding.java"> + <message kind="error" line="13"/> + </compile> + </ajc-test> + + + +</suite> diff --git a/tests/ajde/examples/figures-cacm/Test_Figures_CACM.jpx b/tests/ajde/examples/figures-cacm/Test_Figures_CACM.jpx new file mode 100644 index 000000000..a17994a55 --- /dev/null +++ b/tests/ajde/examples/figures-cacm/Test_Figures_CACM.jpx @@ -0,0 +1,26 @@ +<?xml version="1.0" encoding="UTF-8"?>
+
+<!--JBuilder XML Project-->
+<project>
+ <property category="runtime.0" name="RunnableType" value="com.borland.jbuilder.runtime.ApplicationRunner" />
+ <property category="runtime.0" name="application.class" value="figures.Main" />
+ <property category="sys" name="BackupPath" value="bak" />
+ <property category="sys" name="CheckStable" value="1" />
+ <property category="sys" name="Company" value="" />
+ <property category="sys" name="Copyright" value="Copyright (c) 2001" />
+ <property category="sys" name="Description" value="" />
+ <property category="sys" name="DocPath" value="." />
+ <property category="sys" name="ExcludeClassEnabled" value="0" />
+ <property category="sys" name="JDK" value="java 1.3.0_02" />
+ <property category="sys" name="LastTag" value="0" />
+ <property category="sys" name="Libraries" value="" />
+ <property category="sys" name="MakeStable" value="0" />
+ <property category="sys" name="OutPath" value="." />
+ <property category="sys" name="SourcePath" value="." />
+ <property category="sys" name="Title" value="" />
+ <property category="sys" name="Version" value="1.0" />
+ <property category="sys" name="WorkingDirectory" value="." />
+ <node type="Package" name="figures" />
+ <file path="Vanilla.lst" />
+</project>
+
diff --git a/tests/ajde/examples/figures-cacm/figures/Display.java b/tests/ajde/examples/figures-cacm/figures/Display.java new file mode 100644 index 000000000..5857d719f --- /dev/null +++ b/tests/ajde/examples/figures-cacm/figures/Display.java @@ -0,0 +1,9 @@ + +package figures; + +class Display { + + static void needsRepaint() { } + +} + diff --git a/tests/ajde/examples/figures-cacm/figures/DisplayUpdating.java b/tests/ajde/examples/figures-cacm/figures/DisplayUpdating.java new file mode 100644 index 000000000..7feade6ee --- /dev/null +++ b/tests/ajde/examples/figures-cacm/figures/DisplayUpdating.java @@ -0,0 +1,15 @@ + +package figures; + +aspect DisplayUpdating { + + pointcut moves(): call(void FigureElement.moveBy(int, int)) || + call(void Point.setX(int)) || + call(void Point.setY(int)) || + call(void Line.setP1(Point)) || + call(void Line.setP2(Point)); + + after(): moves() { + Display.needsRepaint(); + } +} diff --git a/tests/ajde/examples/figures-cacm/figures/FactoryEnforcement.java b/tests/ajde/examples/figures-cacm/figures/FactoryEnforcement.java new file mode 100644 index 000000000..a5ff5b5ec --- /dev/null +++ b/tests/ajde/examples/figures-cacm/figures/FactoryEnforcement.java @@ -0,0 +1,12 @@ + +package figures; + +aspect FactoryEnforcement { + + pointcut illegalNewFigElt(): call(FigureElement+.new(..)) && + !withincode(* Figure.make*(..)); + + declare error: illegalNewFigElt(): + "Illegal figure element constructor call."; + +} diff --git a/tests/ajde/examples/figures-cacm/figures/Figure.java b/tests/ajde/examples/figures-cacm/figures/Figure.java new file mode 100644 index 000000000..0516e4d1e --- /dev/null +++ b/tests/ajde/examples/figures-cacm/figures/Figure.java @@ -0,0 +1,23 @@ + +package figures; + +import java.util.List; +import java.util.LinkedList; + + +class Figure { + + List elements = new LinkedList(); + + Point makePoint(int x, int y) { + Point p = new Point(x, y); + elements.add(p); + return p; + } + + Line makeLine(Point p1, Point p2) { + Line l = new Line(p1, p2); + elements.add(l); + return l; + } +} diff --git a/tests/ajde/examples/figures-cacm/figures/FigureElement.java b/tests/ajde/examples/figures-cacm/figures/FigureElement.java new file mode 100644 index 000000000..591359e11 --- /dev/null +++ b/tests/ajde/examples/figures-cacm/figures/FigureElement.java @@ -0,0 +1,8 @@ + +package figures; + +interface FigureElement { + + public void moveBy(int dx, int dy); + +} diff --git a/tests/ajde/examples/figures-cacm/figures/Line.java b/tests/ajde/examples/figures-cacm/figures/Line.java new file mode 100644 index 000000000..3e8f6582d --- /dev/null +++ b/tests/ajde/examples/figures-cacm/figures/Line.java @@ -0,0 +1,23 @@ + +package figures; + +class Line { + private Point p1, p2; + + Line(Point p1, Point p2) { + super(); + this.p1 = p1; + this.p2 = p2; + } + + Point getP1() { return p1; } + Point getP2() { return p2; } + + void setP1(Point p1) { this.p1 = p1; } + void setP2(Point p2) { this.p2 = p2; } + + void moveBy(int dx, int dy) { + getP1().moveBy(dx, dy); + getP2().moveBy(dx, dy); + } +} diff --git a/tests/ajde/examples/figures-cacm/figures/Main.java b/tests/ajde/examples/figures-cacm/figures/Main.java new file mode 100644 index 000000000..b38e1fcdb --- /dev/null +++ b/tests/ajde/examples/figures-cacm/figures/Main.java @@ -0,0 +1,17 @@ + +package figures; + +class Main { + + public static void main(String [] args) { + System.out.println("> starting figures. . . " + 0); +// Figure fig = new Figure(); + Point p1 = new Point(2, 2); + p1.setX(10); + p1.setX(20); + System.out.println("> p1.x: " + p1.getX()); +// Point p2 = fig.makePoint(4, 4); +// System.out.println("> finished."); + } +} + diff --git a/tests/ajde/examples/figures-cacm/figures/Point.java b/tests/ajde/examples/figures-cacm/figures/Point.java new file mode 100644 index 000000000..322c23cca --- /dev/null +++ b/tests/ajde/examples/figures-cacm/figures/Point.java @@ -0,0 +1,33 @@ + +package figures; + +class Point { + private int x = 0, y = 0; + + Point(int x, int y) { + super(); + this.x = x; + this.y = y; + } + + int getX() { + return x; + } + + int getY() { + return y; + } + + void setX(int x) { + this.x = x; + } + + void setY(int y) { + this.y = y; + } + + void moveBy(int dx, int dy) { + setX(getX() + dx); + setY(getY() + dy); + } +} diff --git a/tests/ajde/examples/figures-cacm/figures/PointBoundsChecking.java b/tests/ajde/examples/figures-cacm/figures/PointBoundsChecking.java new file mode 100644 index 000000000..9338b26b7 --- /dev/null +++ b/tests/ajde/examples/figures-cacm/figures/PointBoundsChecking.java @@ -0,0 +1,13 @@ + +package figures; + +aspect PointBoundsChecking { + + pointcut tracePoints(): call(void Point.setX(int)) || + call(void Point.setY(int)); + + before(): tracePoints() { + System.out.println("Entering:" + thisJoinPoint); + } +} + diff --git a/tests/ajde/examples/figures-cacm/figures/SimpleTracing.java b/tests/ajde/examples/figures-cacm/figures/SimpleTracing.java new file mode 100644 index 000000000..d65eb158a --- /dev/null +++ b/tests/ajde/examples/figures-cacm/figures/SimpleTracing.java @@ -0,0 +1,13 @@ + +package figures; + +aspect SimpleTracing { + + pointcut tracePoints(): call(void Point.setX(int)) || + call(void Point.setY(int)); + + before(): tracePoints() { + System.out.println("Entering:" + thisJoinPoint); + } +} + diff --git a/tests/ajde/examples/figures-coverage/Test_Figures_Coverage.jpr b/tests/ajde/examples/figures-coverage/Test_Figures_Coverage.jpr new file mode 100644 index 000000000..3019853b1 --- /dev/null +++ b/tests/ajde/examples/figures-coverage/Test_Figures_Coverage.jpr @@ -0,0 +1,25 @@ +;JBuilder -- PROJECT FILE VERSION {2.00} - do not alter this line!
+#0=Test_Figures_Coverage.jpr
+#2=figures
+#3=editor
+sys[0].BackupPath=bak
+sys[0].CheckStable=1
+sys[0].Company=
+sys[0].Copyright=Copyright (c) 2001
+sys[0].DefaultPackage=test_figures_coverage
+sys[0].Description=
+sys[0].DocPath=doc
+sys[0].ExcludeClassEnabled=0
+sys[0].JDK=java 1.3.0-C
+sys[0].LastTag=3
+sys[0].Libraries=
+sys[0].MakeStable=0
+sys[0].OutPath=.
+sys[0].SourcePath=.
+sys[0].Title=
+sys[0].Version=1.0
+sys[0].WorkingDirectory=.
+sys[2].Parent=0
+sys[2].Type=Package
+sys[3].Parent=0
+sys[3].Type=Package
diff --git a/tests/ajde/examples/figures-coverage/Test_Figures_Coverage.jpx b/tests/ajde/examples/figures-coverage/Test_Figures_Coverage.jpx new file mode 100644 index 000000000..fee70a8d0 --- /dev/null +++ b/tests/ajde/examples/figures-coverage/Test_Figures_Coverage.jpx @@ -0,0 +1,37 @@ +<?xml version="1.0" encoding="UTF-8"?>
+<!--JBuilder XML Project-->
+<project>
+ <property category="ajde" name="ajc.flags" value="-deprecation "/>
+ <property category="ajde" name="browser.associations" value="introduces on;uses pointcut;affects methods;affects method call sites;affects constructions;affects handlers;affects initializers;"/>
+ <property category="idl" name="ProcessIDL" value="false"/>
+ <property category="runtime.0" name="RunnableType" value="com.borland.jbuilder.runtime.ApplicationRunner"/>
+ <property category="runtime.0" name="application.class" value="figures.Main"/>
+ <property category="sys" name="AuthorLabel" value="@author"/>
+ <property category="sys" name="BackupPath" value="../temp"/>
+ <property category="sys" name="CheckStable" value="1"/>
+ <property category="sys" name="Company" value=""/>
+ <property category="sys" name="CompanyLabel" value="Company:"/>
+ <property category="sys" name="CompileOnRun" value="0"/>
+ <property category="sys" name="Copyright" value="Copyright (c) 2001"/>
+ <property category="sys" name="CopyrightLabel" value="Copyright:"/>
+ <property category="sys" name="Description" value=""/>
+ <property category="sys" name="DescriptionLabel" value="Description:"/>
+ <property category="sys" name="DocPath" value="."/>
+ <property category="sys" name="ExcludeClassEnabled" value="0"/>
+ <property category="sys" name="JDK" value="java 1.3.0_02"/>
+ <property category="sys" name="LastTag" value="0"/>
+ <property category="sys" name="Libraries" value=""/>
+ <property category="sys" name="MakeStable" value="0"/>
+ <property category="sys" name="OutPath" value="classes"/>
+ <property category="sys" name="SourcePath" value="."/>
+ <property category="sys" name="Title" value=""/>
+ <property category="sys" name="TitleLabel" value="Title:"/>
+ <property category="sys" name="Version" value="1.0"/>
+ <property category="sys" name="VersionLabel" value="@version"/>
+ <property category="sys" name="WorkingDirectory" value="../temp"/>
+ <property category="sys" name="enable.auto.packages" value="false"/>
+ <node name="figures" type="Package"/>
+ <file path="Probe.lst"/>
+ <file path="Test_Figures_Coverage.lst"/>
+ <file path="Trace.aj"/>
+</project>
diff --git a/tests/ajde/examples/figures-coverage/Trace.aj b/tests/ajde/examples/figures-coverage/Trace.aj new file mode 100644 index 000000000..81fd1c739 --- /dev/null +++ b/tests/ajde/examples/figures-coverage/Trace.aj @@ -0,0 +1,4 @@ +
+aspect Trace {
+
+}
diff --git a/tests/ajde/examples/figures-coverage/_JoinpointProbe.java b/tests/ajde/examples/figures-coverage/_JoinpointProbe.java new file mode 100644 index 000000000..52507042d --- /dev/null +++ b/tests/ajde/examples/figures-coverage/_JoinpointProbe.java @@ -0,0 +1,3 @@ +aspect JoinpointProbe { +before(): null +{ } }
\ No newline at end of file diff --git a/tests/ajde/examples/figures-coverage/editor/Editor.java b/tests/ajde/examples/figures-coverage/editor/Editor.java new file mode 100644 index 000000000..99e2b5d5b --- /dev/null +++ b/tests/ajde/examples/figures-coverage/editor/Editor.java @@ -0,0 +1,4 @@ + +package editor; + +class Editor { } diff --git a/tests/ajde/examples/figures-coverage/figures/Debug.java b/tests/ajde/examples/figures-coverage/figures/Debug.java new file mode 100644 index 000000000..01e895abc --- /dev/null +++ b/tests/ajde/examples/figures-coverage/figures/Debug.java @@ -0,0 +1,7 @@ + +package figures; + +aspect Debug { + +} + diff --git a/tests/ajde/examples/figures-coverage/figures/Figure.java b/tests/ajde/examples/figures-coverage/figures/Figure.java new file mode 100644 index 000000000..78aae3a37 --- /dev/null +++ b/tests/ajde/examples/figures-coverage/figures/Figure.java @@ -0,0 +1,78 @@ + +package figures; + +//import figures.primitives.planar.Point; + +aspect Figure { + //pointcut sendSuccess(): cflow(setX()) && !handler(Exception); + + public String Point.getName() { + return Point.name; + } + + public int Point.DEFAULT_X = 0; + + public pointcut constructions(): call(Point.new(int, int)) || call(SolidPoint.new(int, int, int)); + + public pointcut moves(FigureElement fe): target(fe) && + (call(String Point.getName()) || + call(void FigureElement.incrXY(int, int)) || + call(void Point.setX(int)) || + call(void Point.setY(int)) || + call(void SolidPoint.setZ(int))); + + pointcut mainExecution(): execution(void main(*)); + pointcut runtimeHandlers(): mainExecution() || handler(RuntimeException); + public pointcut mumble(): runtimeHandlers(); + + before(): constructions() { + System.out.println("> before construction, jp: " + thisJoinPoint.getSignature()); + } + + before(FigureElement fe): moves(fe) { + System.out.println("> about to move FigureElement at X-coord: "); + } + + after(): initialization(Point.new(..)) || staticinitialization(Point) { + System.out.println("> Point initialized"); + } + + // should be around + after(): mumble() { + System.err.println(">> in after advice..."); + //proceed(); + } + + after(FigureElement fe): target(fe) && + (call(void FigureElement.incrXY(int, int)) || + call(void Point.setX(int)) || + call(void Point.setY(int)) || + call(void SolidPoint.setZ(int))) { + System.out.println("> yo."); + } + + after(FigureElement fe): + target(fe) && + (call(void FigureElement.incrXY(int, int)) || + call(void Line.setP1(Point)) || + call(void Line.setP2(Point)) || + call(void Point.setX(int)) || + call(void Point.setY(int))) { } + + declare parents: Point extends java.io.Serializable; + + declare parents: Point implements java.util.Observable; + + declare soft: Point: call(* *(..)); +} + +aspect Checks { + pointcut illegalNewFigElt(): call(FigureElement+.new(..)) && + !withincode(* Main.main(..)); + + declare error: illegalNewFigElt(): + "Illegal figure element constructor call."; + + declare warning: illegalNewFigElt(): + "Illegal figure element constructor call."; +} diff --git a/tests/ajde/examples/figures-coverage/figures/FigureElement.java b/tests/ajde/examples/figures-coverage/figures/FigureElement.java new file mode 100644 index 000000000..d2ce9eb82 --- /dev/null +++ b/tests/ajde/examples/figures-coverage/figures/FigureElement.java @@ -0,0 +1,9 @@ + +package figures; + +public interface FigureElement extends Element { + + public void incrXY(int dx, int dy); +} + +interface Element { } diff --git a/tests/ajde/examples/figures-coverage/figures/Main.java b/tests/ajde/examples/figures-coverage/figures/Main.java new file mode 100644 index 000000000..b1e8520d4 --- /dev/null +++ b/tests/ajde/examples/figures-coverage/figures/Main.java @@ -0,0 +1,48 @@ + +package figures; + +import figures.primitives.planar.Point; +import figures.primitives.solid.SolidPoint; + +class Main { + + private static Point startPoint; + + public static void main(String[] args) { + try { + System.out.println("> starting..."); + + startPoint = makeStartPoint(); + //startPoint.setX(3); new Point(0, 0); +// SolidPoint sp1 = new SolidPoint(1, 3, 3); + +// sp1.setZ(1); +// p1.incrXY(3, 3); + } catch (RuntimeException re) { + re.printStackTrace(); + } + System.out.println("> finished."); + } + + /** @deprecated use something else */ + public static Point makeStartPoint() { + //return new Point(1, 2); + return null; + } + + /** This should produce a deprecation warning with JDK > 1.2 */ + static class TestGUI extends javax.swing.JFrame { + TestGUI() { + this.disable(); + } + } + + /** This should produce a porting-deprecation warning. */ + //static pointcut mainExecution(): execution(void main(*)); +} + +privileged aspect Test { + before(Point p, int newval): target(p) && set(int Point.xx) && args(newval) { + System.err.println("> new value of x is: " + p.x + ", setting to: " + newval); + } +} diff --git a/tests/ajde/examples/figures-coverage/figures/Trace.aj b/tests/ajde/examples/figures-coverage/figures/Trace.aj new file mode 100644 index 000000000..81fd1c739 --- /dev/null +++ b/tests/ajde/examples/figures-coverage/figures/Trace.aj @@ -0,0 +1,4 @@ +
+aspect Trace {
+
+}
diff --git a/tests/ajde/examples/figures-coverage/figures/composites/Line.java b/tests/ajde/examples/figures-coverage/figures/composites/Line.java new file mode 100644 index 000000000..1f7ee5dc8 --- /dev/null +++ b/tests/ajde/examples/figures-coverage/figures/composites/Line.java @@ -0,0 +1,6 @@ + +package figures.composites; + +class Line { } + +class BoundedLine extends Line { } diff --git a/tests/ajde/examples/figures-coverage/figures/composites/Square.java b/tests/ajde/examples/figures-coverage/figures/composites/Square.java new file mode 100644 index 000000000..8ba3825d6 --- /dev/null +++ b/tests/ajde/examples/figures-coverage/figures/composites/Square.java @@ -0,0 +1,6 @@ + +package figures.composites; + +class Square { + private String name = "Square"; +} diff --git a/tests/ajde/examples/figures-coverage/figures/primitives/planar/Point.java b/tests/ajde/examples/figures-coverage/figures/primitives/planar/Point.java new file mode 100644 index 000000000..6a745a540 --- /dev/null +++ b/tests/ajde/examples/figures-coverage/figures/primitives/planar/Point.java @@ -0,0 +1,65 @@ + +package figures.primitives.planar; + +import figures.*; +import java.util.Collection; + +public class Point implements FigureElement { + + static int xx = -1; + private int x; + private int y; + transient int currVal = 0; + public static String name; + + int c; int b; int a; + { + x = 0; + y = 0; + } + + static { + Point.name = "2-Dimensional Point"; + } + + public Point(int x, int y) { + this.x = x; + this.y = y; + } + + int getCurrVal() { + return currVal; + } + + /** + * @see Figure#moves + */ + public int getX() { return x; } + + public int getY() { return y; } + + public void setX(int x) { this.x = x; } + + public void setY(int x) { this.y = x; } + + public void incrXY(int dx, int dy) { + setX(getX() + dx); + setY(getY() + dy); + } + public void check(int dx, int dy) + throws ArithmeticException, PointBoundsException { + if (dx < 0 || dy < 0) throw new PointBoundsException(); + } +} + +class PointBoundsException extends Exception { } + +class BoundedPoint extends Point { + public BoundedPoint(int x, int y) { super(x, y); } +} + +class StrictlyBoundedPoint extends BoundedPoint { + public StrictlyBoundedPoint(int x, int y) { super(x, y); } +} + + diff --git a/tests/ajde/examples/figures-coverage/figures/primitives/solid/SolidPoint.java b/tests/ajde/examples/figures-coverage/figures/primitives/solid/SolidPoint.java new file mode 100644 index 000000000..80c1fc1ca --- /dev/null +++ b/tests/ajde/examples/figures-coverage/figures/primitives/solid/SolidPoint.java @@ -0,0 +1,24 @@ + +package figures.primitives.solid; + +import java.util.Collection; +import java.lang.String; +import figures.primitives.planar.*; + +public class SolidPoint extends Point { + private int z; + + public SolidPoint(int x, int y, int z) { + super(x, y); + this.z = z; + } + + public int getZ() { return z; } + + public void setZ(int z) { this.z = z; } + + public void incrXY(int dx, int dy) { + super.incrXY(dx, dy); + setZ(getZ() + dx + dy); + } +} diff --git a/tests/ajde/examples/observer-gof/Test_Observer.jpx b/tests/ajde/examples/observer-gof/Test_Observer.jpx new file mode 100644 index 000000000..1474caaf0 --- /dev/null +++ b/tests/ajde/examples/observer-gof/Test_Observer.jpx @@ -0,0 +1,25 @@ +<?xml version="1.0" encoding="UTF-8"?>
+
+<!--JBuilder XML Project-->
+<project>
+ <property category="runtime.0" name="application.class" value="" />
+ <property category="sys" name="BackupPath" value="bak" />
+ <property category="sys" name="CheckStable" value="1" />
+ <property category="sys" name="Company" value="" />
+ <property category="sys" name="Copyright" value="Copyright (c) 2001" />
+ <property category="sys" name="Description" value="" />
+ <property category="sys" name="DocPath" value="." />
+ <property category="sys" name="ExcludeClassEnabled" value="0" />
+ <property category="sys" name="JDK" value="java 1.3.0_02" />
+ <property category="sys" name="LastTag" value="0" />
+ <property category="sys" name="Libraries" value="" />
+ <property category="sys" name="MakeStable" value="0" />
+ <property category="sys" name="OutPath" value="." />
+ <property category="sys" name="SourcePath" value="." />
+ <property category="sys" name="Title" value="" />
+ <property category="sys" name="Version" value="1.0" />
+ <property category="sys" name="WorkingDirectory" value="." />
+ <node type="Package" name="clock" />
+ <file path="../figures-coverage/Test_Figures_Coverage.lst" />
+</project>
+
diff --git a/tests/ajde/examples/observer-gof/clock/AnalogClock.java b/tests/ajde/examples/observer-gof/clock/AnalogClock.java new file mode 100644 index 000000000..b60d45e51 --- /dev/null +++ b/tests/ajde/examples/observer-gof/clock/AnalogClock.java @@ -0,0 +1,12 @@ + +package clock; +public class AnalogClock implements Clock { + public AnalogClock(ClockTimer subject) { + super(); + } + public void update(ClockTimer subject, Object args) { + } + + public void draw() { + } +}
\ No newline at end of file diff --git a/tests/ajde/examples/observer-gof/clock/Clock.java b/tests/ajde/examples/observer-gof/clock/Clock.java new file mode 100644 index 000000000..7fc150a4d --- /dev/null +++ b/tests/ajde/examples/observer-gof/clock/Clock.java @@ -0,0 +1,5 @@ + +package clock; +interface Clock { + void update(ClockTimer subject, Object args); +}
\ No newline at end of file diff --git a/tests/ajde/examples/observer-gof/clock/ClockTimer.java b/tests/ajde/examples/observer-gof/clock/ClockTimer.java new file mode 100644 index 000000000..b0fa08461 --- /dev/null +++ b/tests/ajde/examples/observer-gof/clock/ClockTimer.java @@ -0,0 +1,33 @@ + +package clock; +import java.util.*; + +public class ClockTimer extends Observable { + List observers; + public int getHour() { + return 0; + } + + public int getMinute() { + return 0; + } + + public int getSeconds() { + return 0; + } + + public void addObserver(Object observer) { + this.observers.add(observer); + } + + public void tick() { + this.notifyObservers(); + } + + public ClockTimer() { + super(); + { + this.observers = new ArrayList(); + } + } +}
\ No newline at end of file diff --git a/tests/ajde/examples/observer-gof/clock/DigitalClock.java b/tests/ajde/examples/observer-gof/clock/DigitalClock.java new file mode 100644 index 000000000..1d56055a2 --- /dev/null +++ b/tests/ajde/examples/observer-gof/clock/DigitalClock.java @@ -0,0 +1,26 @@ + +package clock; + +public class DigitalClock implements Clock { + private ClockTimer subject; + + public DigitalClock(ClockTimer subject) { + super(); + this.subject = subject; + this.subject.addObserver(this); + } + public void removeObserver(Object observer) { + this.subject.observers.remove(observer); + } + + public void update(ClockTimer subject, Object args) { + if (this.subject == subject) { + this.draw(); + } + } + + public void draw() { + int hour = this.subject.getHour(); + int minute = this.subject.getMinute(); + } +}
\ No newline at end of file diff --git a/tests/ajde/examples/observer-gof/clock/Main.java b/tests/ajde/examples/observer-gof/clock/Main.java new file mode 100644 index 000000000..7b5436164 --- /dev/null +++ b/tests/ajde/examples/observer-gof/clock/Main.java @@ -0,0 +1,14 @@ + +package clock; + +import java.util.Observer; +import java.util.Observable; + +public class Main { + + public static void main(String[] args) { + ClockTimer clockTimer = new ClockTimer(); + DigitalClock digitalClock = new DigitalClock(clockTimer); + AnalogClock analogClock = new AnalogClock(clockTimer); + } +}
\ No newline at end of file diff --git a/tests/ajde/examples/observer-gof/clock/MonitorObservation.java b/tests/ajde/examples/observer-gof/clock/MonitorObservation.java new file mode 100644 index 000000000..6d3028ecb --- /dev/null +++ b/tests/ajde/examples/observer-gof/clock/MonitorObservation.java @@ -0,0 +1,9 @@ +package clock; + +aspect MonitorObservation { + + before(): call(void Clock.update(..)) + || execution(void *.addObserver(..)) + || execution(void *.removeObserver(..)) { + } +} diff --git a/tests/ajde/examples/observer/Test_Observer.jpx b/tests/ajde/examples/observer/Test_Observer.jpx new file mode 100644 index 000000000..cdccdd53a --- /dev/null +++ b/tests/ajde/examples/observer/Test_Observer.jpx @@ -0,0 +1,23 @@ +<?xml version="1.0" encoding="UTF-8"?>
+
+<!--JBuilder XML Project-->
+<project>
+ <property category="sys" name="BackupPath" value="bak" />
+ <property category="sys" name="CheckStable" value="1" />
+ <property category="sys" name="Company" value="" />
+ <property category="sys" name="Copyright" value="Copyright (c) 2001" />
+ <property category="sys" name="Description" value="" />
+ <property category="sys" name="DocPath" value="." />
+ <property category="sys" name="ExcludeClassEnabled" value="0" />
+ <property category="sys" name="JDK" value="java 1.3.0_02" />
+ <property category="sys" name="LastTag" value="0" />
+ <property category="sys" name="Libraries" value="" />
+ <property category="sys" name="MakeStable" value="0" />
+ <property category="sys" name="OutPath" value="." />
+ <property category="sys" name="SourcePath" value="." />
+ <property category="sys" name="Title" value="" />
+ <property category="sys" name="Version" value="1.0" />
+ <property category="sys" name="WorkingDirectory" value="." />
+ <node type="Package" name="clock" />
+</project>
+
diff --git a/tests/ajde/examples/observer/clock/AnalogueClock.java b/tests/ajde/examples/observer/clock/AnalogueClock.java new file mode 100644 index 000000000..898b96d6b --- /dev/null +++ b/tests/ajde/examples/observer/clock/AnalogueClock.java @@ -0,0 +1,21 @@ + +package clock; + +import java.util.Observer; +import java.util.Observable; + +public class AnalogueClock implements Observer { + + public AnalogueClock (ClockTimer subject) { + + } + + public void update(Observable theChangedSubject, Object args) { + + } + + public void draw() { + + } +} + diff --git a/tests/ajde/examples/observer/clock/ClockTimer.java b/tests/ajde/examples/observer/clock/ClockTimer.java new file mode 100644 index 000000000..ffd9c905d --- /dev/null +++ b/tests/ajde/examples/observer/clock/ClockTimer.java @@ -0,0 +1,23 @@ + +package clock; + +import java.util.Observable; + +public class ClockTimer extends Observable { + + public void tick () { + notifyObservers(); + } + + public int getHour() { + return 0; + } + + public int getMinute() { + return 0; + } + + public int getSeconds() { + return 0; + } +} diff --git a/tests/ajde/examples/observer/clock/DigitalClock.java b/tests/ajde/examples/observer/clock/DigitalClock.java new file mode 100644 index 000000000..346f824ec --- /dev/null +++ b/tests/ajde/examples/observer/clock/DigitalClock.java @@ -0,0 +1,30 @@ + +package clock; + +import java.util.Observer; +import java.util.Observable; + +public class DigitalClock implements Observer { + + private ClockTimer subject; + + public DigitalClock (ClockTimer subject) { + this.subject = subject; + this.subject.addObserver(this); + } + + public void removeObserver() { + subject.deleteObserver(this); + } + + public void update(Observable theChangedSubject, Object args) { + if (theChangedSubject == subject) { + draw(); + } + } + + public void draw () { + int hour = subject.getHour(); + int minute = subject.getMinute(); + } +} diff --git a/tests/ajde/examples/observer/clock/Main.java b/tests/ajde/examples/observer/clock/Main.java new file mode 100644 index 000000000..90cd1d4bf --- /dev/null +++ b/tests/ajde/examples/observer/clock/Main.java @@ -0,0 +1,15 @@ +package clock; + +import java.util.Observer; +import java.util.Observable; + +public class Main { + + public static void main(String[] args) { + System.err.println("> starting clock..."); + ClockTimer clockTimer = new ClockTimer(); + DigitalClock digitalClock = new DigitalClock(clockTimer); + AnalogueClock analogueClock = new AnalogueClock(clockTimer); + } +} + diff --git a/tests/ajde/examples/observer/clock/MonitorObservation.java b/tests/ajde/examples/observer/clock/MonitorObservation.java new file mode 100644 index 000000000..12cfb1f74 --- /dev/null +++ b/tests/ajde/examples/observer/clock/MonitorObservation.java @@ -0,0 +1,14 @@ +package clock; + +import java.util.Observer; +import java.util.Observable; + +aspect MonitorObserveration { + before(): + (call(void Observer.update(Observable, Object)) + || call(void Observable.addObserver(Observer)) + || call(void Observable.removeObserver(Observer))) { + + } +} + diff --git a/tests/ajde/examples/spacewar/Test_Spacewar.jpx b/tests/ajde/examples/spacewar/Test_Spacewar.jpx new file mode 100644 index 000000000..351bb3588 --- /dev/null +++ b/tests/ajde/examples/spacewar/Test_Spacewar.jpx @@ -0,0 +1,28 @@ +<?xml version="1.0" encoding="UTF-8"?>
+
+<!--JBuilder XML Project-->
+<project>
+ <property category="ajde" name="ajc.flags" value="" />
+ <property category="runtime.0" name="RunnableType" value="com.borland.jbuilder.runtime.ApplicationRunner" />
+ <property category="runtime.0" name="application.class" value="spacewar.Game" />
+ <property category="sys" name="BackupPath" value="bak" />
+ <property category="sys" name="CheckStable" value="1" />
+ <property category="sys" name="Company" value="" />
+ <property category="sys" name="Copyright" value="Copyright (c) 2001" />
+ <property category="sys" name="Description" value="" />
+ <property category="sys" name="DocPath" value="." />
+ <property category="sys" name="ExcludeClassEnabled" value="0" />
+ <property category="sys" name="JDK" value="java 1.3.0_02" />
+ <property category="sys" name="LastTag" value="0" />
+ <property category="sys" name="Libraries" value="" />
+ <property category="sys" name="MakeStable" value="0" />
+ <property category="sys" name="OutPath" value="." />
+ <property category="sys" name="SourcePath" value="." />
+ <property category="sys" name="Title" value="" />
+ <property category="sys" name="Version" value="1.0" />
+ <property category="sys" name="WorkingDirectory" value="." />
+ <node type="Package" name="coordination" />
+ <node type="Package" name="spacewar" />
+ <file path="Release.lst" />
+</project>
+
diff --git a/tests/ajde/examples/spacewar/coordination/Condition.java b/tests/ajde/examples/spacewar/coordination/Condition.java new file mode 100644 index 000000000..30fb84bfe --- /dev/null +++ b/tests/ajde/examples/spacewar/coordination/Condition.java @@ -0,0 +1,20 @@ + +package coordination; + + +/** + * Interface for pre-conditions that are passed to guardedEntry methods of + * Coordinator. + * Conditions should be passed as anonymous classes that simply implement + * the checkit method. + * + */ +public interface Condition { + + /** + * This method is called automatically by Coordinator.guardedEntry(...) + * and it's called everytime the coordination state changes. + */ + + public boolean checkit(); +} diff --git a/tests/ajde/examples/spacewar/coordination/CoordinationAction.java b/tests/ajde/examples/spacewar/coordination/CoordinationAction.java new file mode 100644 index 000000000..627b64e9f --- /dev/null +++ b/tests/ajde/examples/spacewar/coordination/CoordinationAction.java @@ -0,0 +1,20 @@ + +package coordination; + + +/** + * Interface for coordination actions that are passed to guardedEntry methods of + * Coordinator. + * Coordination actions should be passed as anonymous classes that simply + * implement the doit method. + * + */ +public interface CoordinationAction { + /** + * This method is called by Coordinator.guardedEntry(...) and + * Coordinator.guardedExit(...). Use it for changing coordination state + * upon entering and exiting methods. + */ + + public void doit(); +} diff --git a/tests/ajde/examples/spacewar/coordination/Coordinator.java b/tests/ajde/examples/spacewar/coordination/Coordinator.java new file mode 100644 index 000000000..69830c138 --- /dev/null +++ b/tests/ajde/examples/spacewar/coordination/Coordinator.java @@ -0,0 +1,432 @@ + +package coordination; + +import java.util.*; //!!! + +/** + * The Coordinator class provides the basic functionality for synchronizing + * and coordinating different threads upon entering and exiting methods. + * It can be used in two different ways: + * 1) by instantiating regular coordinator objects that are used by aspects; or + * 2) by extending it (sub-classing) with coordinator aspects. + * <P> + * Method invocations are the smallest units for defining critical sections + * and pre-conditions. The use of coordinators, either regular objects or aspect + * instances, should always end up by invoking guardedEntry(...) in a + * before weave and guardedExit(...) in an after weave for all methods that + * need coordination. guardedEntry and guardedExit are the methods that + * actually manage the synchronization and coordination constraints given + * by their parameters and by pre-existent exclusion markers. + * <P> + * The synchronization of threads for the execution of critical section + * methods in an object is done by marking those methods as self- and/or + * mutually-exclusive (addSelfex, addMutex). + * Just by itself, addSelfex("M") does not enforce the self-exclusion + * of method M - enforcement is done by invoking guardedEntry before + * M is executed. Similarly, addMutex(new String[] {"M1", "M2"}) does + * not enforce the mutual exclusion between methods M1 and M2. + * <P> + * A guardedEntry on a method that has been marked as self-exclusive + * ensures that the method is executed in the invoked object by only one thread + * at a time. A guardedEntry on a method that has been marked has mutually- + * exclusive with other methods ensures that the execution of that method + * by a thread in the invoked object temporarily blocks the execution by + * other threads of the methods that are in the same mutex set. + * <P> + * The coordination of threads, i.e. their explicit suspension and + * resumption, is done through the use of pre-conditions and coordination + * actions that are passed as parameters to guardedEntry and guardedExit + * with the form of anonymous classes. + */ +public abstract aspect Coordinator { + private Hashtable methods = null; + private Vector exclusions = null; + + abstract protected pointcut synchronizationPoint(); + + public Coordinator() { + methods = new Hashtable(); + exclusions = new Vector(5); + } + + before (): synchronizationPoint() { + this.guardedEntry(thisJoinPointStaticPart.getSignature().getName()); + } + + after (): synchronizationPoint() { + this.guardedExit(thisJoinPointStaticPart.getSignature().getName()); + } + + /** + * Takes a multi-part method name (eg "BoundedBuffer.put") + * and marks that method as self-exclusive. + * No checks are made with respect to the existence of the method + * whose name is given. + */ + public synchronized void addSelfex(String methName) { + Selfex sex = new Selfex (methName); + + // update db of all exclusions in this coordinator + exclusions.addElement(sex); + + // update local info in method + Method aMeth = getOrSetMethod(methName); + aMeth.addExclusion(sex); + } + + /** + * Takes a multi-part method name (e.g. "BoundedBuffer.put") + * and removes that method from the list of self-exclusive methods. + */ + public synchronized void removeSelfex(String methName) { + for (int i = 0; i < exclusions.size(); i++) { + Exclusion sex = (Exclusion)exclusions.elementAt(i); + if ((sex instanceof Selfex) && + (((Selfex)sex).methodName.equals(methName))) { + + // update db of all exclusions in this coordinator + exclusions.removeElementAt(i); + + // update local info in method + Method aMeth = getOrSetMethod(methName); + aMeth.removeExclusion(sex); + } + } + } + + /** + * Takes an array of multi-part method names and marks those + * methods as mutually exclusive. + * No checks are made with respect to the existence of the methods + * whose names are given. + */ + public synchronized void addMutex(String[] methNames) { + Mutex mux = new Mutex(methNames); + + // update db of all exclusions in this coordinator + exclusions.addElement(mux); + + // update local info in each method + for (int i = 0; i < methNames.length; i++) { + Method aMeth = getOrSetMethod(methNames[i]); + aMeth.addExclusion(mux); + } + } + + /** + * Takes an array of multi-part method names that correspond + * to an existing mutex set and remove the mutual exclusion constraint. + * If the given mutex set does not exist, removeMutex does nothing. + */ + public synchronized void removeMutex(String[] methNames) { + for (int i = 0; i < exclusions.size(); i++) { + Exclusion mux = (Exclusion)exclusions.elementAt(i); + if (mux instanceof Mutex) { + boolean same = true; + for (int j = 0; j < methNames.length; j++) + if (!methNames[j].equals(((Mutex)mux).methodNames[j])) + same = false; + if (same) { + // update db of all exclusions in this coordinator + exclusions.removeElementAt(i); + + // update local info in each method involved + for (int j = 0; j < methNames.length; j++) { + Method aMeth = getOrSetMethod(methNames[j]); + aMeth.removeExclusion(mux); + } + } + } + } + } + + /** + * This method is the guard for enforcing all synchronization and + * coordination constraints of a given method, and it should be called + * just before the method is executed. + * In this form, only the method name is given. The only constraints + * checked are the exclusion constraints. + * If the method was previousely marked as selfex (through addSelfex), + * guardedEntry ensures that the method is executed only when no other + * thread is executing it. + * If the method was previousely marked as being in one or more mutex + * sets, guardedEntry ensures that the method is executed only when no other + * thread is executing any of the methods with which the give method is + * mutexed. + */ + public synchronized void guardedEntry(String methName) { + guardedEntry(methName, new Condition() { + public boolean checkit() { + return true; + } + }, null); + } + + /** + * Just like guardedEntry(String methName), but the given method is executed + * only when the given condition is true. + * guardedEntry is the guard for enforcing all synchronization and + * coordination constraints of a given method, and it should be called + * just before the method is executed. + * In this form, the method name is given along with a condition. + * The constraints checked are the exclusion constraints and whether + * the given condition is true. + * If the method was previousely marked as selfex (through addSelfex), + * guardedEntry ensures that the method is executed only when no other + * thread is executing it. + * If the method was previousely marked as being in one or more mutex + * sets, guardedEntry ensures that the method is executed only when no other + * thread is executing any of the methods with which the give method is + * mutexed. + * If the condition is false, guardedEntry suspends the current thread. + * That thread remains suspended until the condition becomes true, in + * which case all constraints are rechecked before the method is executed. + * When all exclusion constraints are checked and the given condition is + * true, the given method is executed. + */ + public synchronized void guardedEntry(String methName, Condition condition) { + guardedEntry(methName, condition, null); + } + + /** + * Just like guardedEntry(String methName), but with an additional + * coordination action that is executed before the given method is + * executed. + * guardedEntry is the guard for enforcing all synchronization and + * coordination constraints of a given method, and it should be called + * just before the method is executed. + * In this form, the method name is given along with a coordination action. + * The only constraints checked are the exclusion constraints. + * If the method was previousely marked as selfex (through addSelfex), + * guardedEntry ensures that the method is executed only when no other + * thread is executing it. + * If the method was previousely marked as being in one or more mutex + * sets, guardedEntry ensures that the method is executed only when no other + * thread is executing any of the methods with which the give method is + * mutexed. + * The given coordination action is executed just before the given method + * is executed. + */ + public synchronized void guardedEntry(String methName, + CoordinationAction action) { + guardedEntry(methName, new Condition() { + public boolean checkit() { + return true; + } + }, + action); + } + + /** + * Just like guardedEntry(String methName), but the given method is executed + * only when the given condition is true; the additional + * coordination action that is executed before the given method is + * executed. + * guardedEntry is the guard for enforcing all synchronization and + * coordination constraints of a given method, and it should be called + * just before the method is executed. + * In this form, the method name is given along with a condition and + * a coordination action. + * The constraints checked are the exclusion constraints and whether the + * given condition is true. + * If the method was previousely marked as selfex (through addSelfex), + * guardedEntry ensures that the method is executed only when no other + * thread is executing it. + * If the method was previousely marked as being in one or more mutex + * sets, guardedEntry ensures that the method is executed only when no other + * thread is executing any of the methods with which the give method is + * mutexed. + * If the condition is false, guardedEntry suspends the current thread. + * That thread remains suspended until the condition becomes true, in + * which case all constraints are rechecked before the method is executed. + * When all exclusion constraints are checked and the given condition is + * true, the given method is executed. + * The given coordination action is executed just before the given method + * is executed. + */ + public synchronized void guardedEntry(String methName, + Condition condition, + CoordinationAction action) { + Method aMeth = getOrSetMethod(methName); + boolean canGo = false; + + // test pre-conditions for entering the method + while (!canGo) { + canGo = true; + for (int i = 0; i < aMeth.exes.size() && canGo; i++) + if (!((Exclusion)aMeth.exes.elementAt(i)).testExclusion(aMeth.name)) { + canGo = false; + } + if (canGo && !condition.checkit()) { + canGo = false; + } + if (!canGo) + try { + wait(); + } catch (InterruptedException e) { } + } + + // OK. + enterMethod(aMeth, action); + } + + /** + * This method is similar to guardedEntry, but it takes + * an additional parameter - the milliseconds after which any suspension + * will abort with a timeout. + */ + public synchronized void guardedEntryWithTimeout(String methName, + long millis) + throws TimeoutException { + guardedEntryWithTimeout(methName, new Condition() { + public boolean checkit() { + return true; + } + }, null, millis); + } + + /** + * This method is similar to guardedEntry, but it takes + * an additional parameter - the milliseconds after which any suspension + * will abort with a timeout. + */ + public synchronized void guardedEntryWithTimeout(String methName, + Condition condition, + long millis) + throws TimeoutException { + guardedEntryWithTimeout(methName, condition, null, millis); + } + + /** + * This method is similar to guardedEntry, but it takes + * an additional parameter - the milliseconds after which any suspension + * will abort with a timeout. + */ + public synchronized void guardedEntryWithTimeout(String methName, + CoordinationAction action, + long millis) + throws TimeoutException { + guardedEntryWithTimeout(methName, new Condition() { + public boolean checkit() { + return true; + } + }, action, millis); + } + + /** + * This method is similar to guardedEntry, but it takes + * an additional parameter - the milliseconds after which any suspension + * will abort with a timeout. + */ + public synchronized void guardedEntryWithTimeout(String methName, + Condition condition, + CoordinationAction action, + long millis) + throws TimeoutException { + + Method aMeth = getOrSetMethod(methName); + boolean canGo = false; + long waitTime = millis; + long startTime = System.currentTimeMillis(); + + // test pre-conditions for entering the method + while (!canGo) { + canGo = true; + for (int i = 0; i < aMeth.exes.size() && canGo; i++) + if ((!((Exclusion)aMeth.exes.elementAt(i)).testExclusion(aMeth.name)) || + (!condition.checkit())) { + canGo = false; + } + if (!canGo) { + try { + wait(waitTime); + } catch (InterruptedException e) {} + + long now = System.currentTimeMillis(); + long timeSoFar = now - startTime; + if (timeSoFar >= millis) // timeout! + throw new TimeoutException(timeSoFar); + else // adjust time + waitTime = millis - timeSoFar; + } + } + + // OK. + enterMethod(aMeth, action); + } + + /** + * This method provides the means for updating all synchronization and + * coordination state after the execution of a given method, and it should be + * called after the method is executed. + * In this form, only the method name is given. + * The synchronization state for self- and mutual-exclusion is + * automatically upadted. + */ + public synchronized void guardedExit(String methName) { + guardedExit(methName, null); + } + + /** + * Just like guardedExit(String methName) but with an additional + * coordination action that is executed. + * guardedExit provides the means for updating all synchronization and + * coordination state after the execution of a given method, and it should be + * called after the method is executed. + * In this form, the method name is given along with a coordination action. + * The synchronization state for self- and mutual-exclusion is + * automatically upadted. + * The given coordination action is executed. + */ + public synchronized void guardedExit(String methName, + CoordinationAction action) { + Method aMeth = getOrSetMethod(methName); + + for (int i = 0; i < aMeth.exes.size(); i++) + ((Exclusion)aMeth.exes.elementAt(i)).exitExclusion(methName); + if (action != null) action.doit(); + notifyAll(); + } + + private Method getOrSetMethod(String methName) { + Method aMeth = null; + if (!methods.containsKey(methName)) { + methods.put(methName, (aMeth = new Method(methName))); + } + else { + aMeth = (Method) methods.get(methName); + } + return aMeth; + } + + private void enterMethod(Method aMeth, CoordinationAction action) { + for (int i = 0; i < aMeth.exes.size(); i++) + ((Exclusion)aMeth.exes.elementAt(i)).enterExclusion(aMeth.name); + + if (action != null) action.doit(); + } + + + +} + +class Method { + String name; + Vector exes = new Vector(3); + + Method(String n) { + name = n; + } + + void addExclusion(Exclusion ex) { + exes.addElement(ex); + } + + void removeExclusion(Exclusion ex) { + for (int i = 0; i < exes.size(); i++) { + if (exes.elementAt(i) == ex) + exes.removeElementAt(i); + } + } +} + diff --git a/tests/ajde/examples/spacewar/coordination/Exclusion.java b/tests/ajde/examples/spacewar/coordination/Exclusion.java new file mode 100644 index 000000000..db2ffe0e5 --- /dev/null +++ b/tests/ajde/examples/spacewar/coordination/Exclusion.java @@ -0,0 +1,16 @@ + +package coordination; + + +interface Exclusion { + + boolean testExclusion(String methodName); + + void enterExclusion(String methodName); + + void exitExclusion(String methodName); + + // for debug !!! + void printNames(); +} + diff --git a/tests/ajde/examples/spacewar/coordination/MethodState.java b/tests/ajde/examples/spacewar/coordination/MethodState.java new file mode 100644 index 000000000..d823f26de --- /dev/null +++ b/tests/ajde/examples/spacewar/coordination/MethodState.java @@ -0,0 +1,28 @@ + +package coordination; + +import java.util.Vector; +import java.util.Enumeration; + + +class MethodState { + + Vector threads=new Vector(); + + void enterInThread (Thread t) { + threads.addElement(t); + } + + void exitInThread(Thread t) { + threads.removeElement(t); + } + + boolean hasOtherThreadThan(Thread t) { + Enumeration e = threads.elements(); + while (e.hasMoreElements()) + if (e.nextElement() != t) + return(true); + return (false); + } + +} diff --git a/tests/ajde/examples/spacewar/coordination/Mutex.java b/tests/ajde/examples/spacewar/coordination/Mutex.java new file mode 100644 index 000000000..04ed900d8 --- /dev/null +++ b/tests/ajde/examples/spacewar/coordination/Mutex.java @@ -0,0 +1,69 @@ + +package coordination; + +import java.lang.String; + + +class Mutex implements Exclusion { + String[] methodNames; + MethodState[] methodStates; + + String prettyName; + + Mutex (String[] _methodNames) { + methodNames = _methodNames; + methodStates = new MethodState[methodNames.length]; + for (int i = 0; i < methodNames.length; i++) { + methodStates[i] = new MethodState(); + } + } + + private boolean isMethodIn (String _methodName) { + for (int i = 0; i < methodNames.length; i++) { + if (_methodName.equals(methodNames[i])) + return(true); + } + return(false); + } + + private MethodState getMethodState (String _methodName) { + for (int i = 0; i < methodNames.length; i++) { + if (_methodName.equals(methodNames[i])) + return(methodStates[i]); + } + return(null); + } + + public boolean testExclusion (String _methodName) { + Thread ct = Thread.currentThread(); + // + // Loop through each of the other methods in this exclusion set, to be sure + // that no other thread is running them. Note that we have to be careful + // about selfex. + // + for (int i = 0; i < methodNames.length; i++) { + if (!_methodName.equals(methodNames[i])) { + if (methodStates[i].hasOtherThreadThan(ct)) + return(false); + } + } + return (true); + } + + public void enterExclusion (String _methodName) { + MethodState methodState = getMethodState(_methodName); + methodState.enterInThread(Thread.currentThread()); + } + + public void exitExclusion (String _methodName) { + MethodState methodState = getMethodState(_methodName); + methodState.exitInThread(Thread.currentThread()); + } + + public void printNames() { + System.out.print("Mutex names: "); + for (int i = 0; i < methodNames.length; i++) + System.out.print(methodNames[i] + " "); + System.out.println(); + } +} diff --git a/tests/ajde/examples/spacewar/coordination/Selfex.java b/tests/ajde/examples/spacewar/coordination/Selfex.java new file mode 100644 index 000000000..0a28e4499 --- /dev/null +++ b/tests/ajde/examples/spacewar/coordination/Selfex.java @@ -0,0 +1,38 @@ + +package coordination; + + +import java.lang.String; + +class Selfex implements Exclusion { + String methodName; + Thread thread; + int count = 0; + + Selfex (String _methodName) { + methodName = _methodName; + } + + public boolean testExclusion (String _methodName) { + if (count == 0) + return(true); + return (thread == Thread.currentThread()); + } + + public void enterExclusion (String _methodName) { + count++; + thread = Thread.currentThread(); // note that if count wasn't 0 + // we aren't changing thread + } + + public void exitExclusion (String _methodName) { + count--; + if (count == 0) // not stricly necessary, but... + thread = null; + } + + public void printNames() { + System.out.println("Selfex name: " + methodName); + } + +} diff --git a/tests/ajde/examples/spacewar/coordination/TimeoutException.java b/tests/ajde/examples/spacewar/coordination/TimeoutException.java new file mode 100644 index 000000000..3bfddef57 --- /dev/null +++ b/tests/ajde/examples/spacewar/coordination/TimeoutException.java @@ -0,0 +1,10 @@ + +package coordination; + + +public class TimeoutException extends Exception { + long time; + TimeoutException(long _time) { + time = _time; + } +} diff --git a/tests/ajde/examples/spacewar/spacewar/Bullet.java b/tests/ajde/examples/spacewar/spacewar/Bullet.java new file mode 100644 index 000000000..0e2a88fb3 --- /dev/null +++ b/tests/ajde/examples/spacewar/spacewar/Bullet.java @@ -0,0 +1,27 @@ + +package spacewar; + +class Bullet extends SpaceObject { + + static private final int SIZE = 3; //Can't be changed for now!!! + static private int LIFETIME = 50; + + private int lifeLeft; + + Bullet (Game theGame, double xP, double yP, double xV, double yV) { + super(theGame, xP, yP, xV, yV); + lifeLeft = LIFETIME; + } + + int getSize() { return SIZE; } + + void handleCollision(SpaceObject obj) { + die(); + } + + void clockTick() { + if (--lifeLeft == 0) + die(); + super.clockTick(); + } +} diff --git a/tests/ajde/examples/spacewar/spacewar/Debug.java b/tests/ajde/examples/spacewar/spacewar/Debug.java new file mode 100644 index 000000000..d65b7de48 --- /dev/null +++ b/tests/ajde/examples/spacewar/spacewar/Debug.java @@ -0,0 +1,199 @@ + +package spacewar; + +import java.awt.Menu; +import java.awt.CheckboxMenuItem; +import java.awt.Frame; +import java.awt.TextArea; +import java.awt.Dimension; + +/** + * This aspect specifies debugging information to be output to the + * information window. + * + * When the debug aspect is compiled in the Frame menu has several checkbox + * items that can be used to control the amount of tracing information + * displayed. (By default the first three are off, because they generate + * so much information.) + * + * There are two reasons to gather all this debugging code into an aspect + * like this: + * + * (1) It makes it easier to understand when it is all in one place. + * + * (2) It means that we can "plug and debug". We can enable/disable + * the debugging code simply by weaving or not weaving this + * aspect in. + * + * All in all, this is a lot better than the usual practice of writing + * complex debugging code and then deleting it when the bug is found, + * only to regret it a month later when a related bug surfaces. (Or even + * the same bug!) + * + * This file also defines a class InfoWin, which it uses to display all the + * debugging information. + */ +aspect Debug { + + private static InfoWin infoWin = new InfoWin(); + + private static Menu menu = new Menu("Debug"); + + private static CheckboxMenuItem traceConstructors = + new CheckboxMenuItem("trace constructors", false); + private static CheckboxMenuItem traceInitializations = + new CheckboxMenuItem("trace initializations", false); + private static CheckboxMenuItem traceMethods = + new CheckboxMenuItem("trace methods", false); + private static CheckboxMenuItem traceClockTick = + new CheckboxMenuItem("trace clock tick", false); + private static CheckboxMenuItem traceRegistry = + new CheckboxMenuItem("trace registry", true); + private static CheckboxMenuItem traceFireCollideDamage = + new CheckboxMenuItem("trace fire, collide, damage", true); + + after() returning (SWFrame frame): call(SWFrame+.new(..)) { + menu.add(traceConstructors); + menu.add(traceInitializations); + menu.add(traceMethods); + menu.add(traceClockTick); + menu.add(traceRegistry); + menu.add(traceFireCollideDamage); + frame.getMenuBar().add(menu); + } + + /* + * all constructors + */ + pointcut allConstructorsCut(): + call((spacewar.* && !(Debug+ || InfoWin+)).new(..)); + + before(): allConstructorsCut() { + if (traceConstructors.getState()) { + infoWin.println("begin constructing " + thisJoinPoint.getSignature()); + } + } + + after(): allConstructorsCut() { + if (traceConstructors.getState()) { + infoWin.println("done constructing " + thisJoinPoint.getSignature()); + } + } + + /* + * All dynamic initializations + */ + pointcut allInitializationsCut(): + initialization((spacewar.* && !(Debug+ || InfoWin+)).new(..)); + + before(): allInitializationsCut() { + if (traceConstructors.getState()) { + infoWin.println("begin initializing " + thisJoinPoint.getSignature()); + } + } + after(): allInitializationsCut() { + if (traceConstructors.getState()) { + infoWin.println("done initializing " + thisJoinPoint.getSignature()); + } + } + + /* + * all methods + */ + pointcut allMethodsCut(): + execution(* (spacewar.* && !(Debug+ || InfoWin+)).*(..)); + + before(): allMethodsCut() { + if (traceMethods.getState()) { + infoWin.println("entering " + thisJoinPoint.getSignature()); + } + } + after(): allMethodsCut() { + if (traceMethods.getState()) { + infoWin.println("exiting " + thisJoinPoint.getSignature()); + } + } + + /* + * clock ticks + */ + after(Object obj): + (target(obj) && (target(Game) || + target(Registry) || + target(SpaceObject))) + && call(void clockTick()) { + if (traceClockTick.getState()) + infoWin.println("ticking " + obj); + } + + /* + * registry contents + */ + after(Registry registry): + target(registry) && (call(void register(..)) || + call(void unregister(..))) { + if (traceRegistry.getState()) + infoWin.println(registry.getTable().size() + + " space objects in the registry."); + } + + /* + * fire, collide, damage + */ + after(): call(void Ship.fire()) { + if (traceFireCollideDamage.getState()) + infoWin.println("firing"); + } + + after(Ship ship, SpaceObject obj): + call(void Ship.handleCollision(SpaceObject)) && target(ship) && args(obj) { + if (traceFireCollideDamage.getState()) + infoWin.println(ship + " collides with " + obj); + } + + after(Ship shipA, Ship shipB): + execution(void Ship.bounce(Ship, Ship)) && args(shipA, shipB) { + if (traceFireCollideDamage.getState()) + infoWin.println(shipA + " bounces with " + shipB); + } + + before(Ship ship, double amount): + call(void Ship.inflictDamage(double)) && target(ship) && args(amount) { + if (traceFireCollideDamage.getState()) + if (amount > 0) + infoWin.println(ship + "gets " + + amount + " damage (" + + ship.getDamage() + ")"); + } + +} + +class InfoWin { + private Frame frame; + private TextArea info; + + InfoWin() { + frame = new Frame("debugging info for spacewar game"); + info = new TextArea(); + info.setEditable(false); + + Dimension screenSize = frame.getToolkit().getScreenSize(); + frame.setSize(250, 600); + frame.setLocation(screenSize.width - 250, 0); + frame.add(info); + frame.show(); + frame.toFront(); + } + + void clear() { + info.setText(""); + } + + void println(String line) { + info.append(line + "\n"); + } + + void print(String line) { + info.append(line); + } +} diff --git a/tests/ajde/examples/spacewar/spacewar/Display.java b/tests/ajde/examples/spacewar/spacewar/Display.java new file mode 100644 index 000000000..0097c02fb --- /dev/null +++ b/tests/ajde/examples/spacewar/spacewar/Display.java @@ -0,0 +1,146 @@ + +package spacewar; + +import java.util.Vector; +import java.util.Enumeration; +import java.awt.Graphics; +import java.awt.Canvas; +import java.awt.Image; +import java.awt.event.KeyListener; + +/** + * The display aspects capture the look and feel of the Game in modular + * pluggable units. + * + * The model is that constructing a concrete subclass of Display attaches that + * kind of display to the game. It will Display the game as it goes along. + * A game can have any number of displays. Any of the displays will accept + * keyboard input. + * + */ + +class Display extends Canvas { + + private static Vector DISPLAYS = new Vector(2); + private static Vector PLAYERS = new Vector(2); + private static Pilot pilot1, pilot2; + + Game game; + SWFrame frame; + Image offImage; + Graphics offGraphics; + + Game getGame() { return game; } + static Pilot getPilot1() { return pilot1; } + static Pilot getPilot2() { return pilot2; } + + Display(Game g) { + super(); + game = g; + + frame = new SWFrame(game, this); + DISPLAYS.addElement(this); + } + + + void noticeSizeChange() { + initializeOffImage(); + } + + private void initializeOffImage () { + int w = getSize().width; + int h = getSize().height; + if ( w > 0 & h > 0) { + offImage = createImage(w, h); + offGraphics = offImage.getGraphics(); + } + } + + /* + * In our double buffering scheme, painting just means copying the buffer + * to the screen. The Display aspect draws into the buffer. + */ + public void paint(Graphics g) { + if (offImage != null) + g.drawImage(offImage, 0, 0, null); + } + + public void update(Graphics g) { + /* + * There are 4 steps to this: + * - clear the double buffer + * - paint the objects into the double buffer + * - paint the status into the double buffer + * - paint the doublebuffer into the buffer + */ + offGraphics.setColor(getBackground()); + offGraphics.fillRect(0, 0, getBounds().width, getBounds().height); + paintObjects(offGraphics); + paintStatus(offGraphics); + g.drawImage(offImage, 0, 0, null); + } + + void paintObjects(Graphics g) { } + void paintStatus(Graphics g) {} + + static aspect DisplayAspect { + + after (String mode) returning (Game game): call(Game+.new(String)) && args(mode) { + new Display1(game); +// new Display2(game); + + if ( mode.equals("1") ) { + pilot1 = game.newPlayer(1); + } + else if ( mode.equals("2") ) { + pilot1 = game.newPlayer(1); + pilot2 = game.newPlayer(2); + } + else if (mode. equals("demo")) { + pilot1 = game.newRobot(1); + pilot2 = game.newRobot(2); + } else { + game.error("Invalid mode: " + mode); + game.quit(); + } + } + + + /* + * I'm not really sure this belongs here. + * + * Being here what it does is makes the Display aspect + * responsible for having the Players couple up to it. That's + * kind of nice, but its a bit incomplete, since Player is + * really part of the GUI, not part of the core Game. + * + * In a future re-factoring this will get worked out better. + * What will happen is that GUI will be an aspect that has the + * core GUI. Each of the different kinds of displays will be + * aspects that tie themselves in. + */ + after () returning (Player player): call(Player+.new(..)) { + Enumeration elements = DISPLAYS.elements(); + while ( elements.hasMoreElements() ) { + Display display = (Display)elements.nextElement(); + display.addKeyListener(player); + } + } + + after() returning (Display display): call(Display+.new(..)) { + display.noticeSizeChange(); + } + + after(Display display) returning (): call(void setSize(..)) && target(display) { + display.noticeSizeChange(); + } + + after(): call(void Game.clockTick()) { + Enumeration elements = DISPLAYS.elements(); + while ( elements.hasMoreElements() ) { + Display display = (Display)elements.nextElement(); + display.repaint(); + } + } + } +} diff --git a/tests/ajde/examples/spacewar/spacewar/Display1.java b/tests/ajde/examples/spacewar/spacewar/Display1.java new file mode 100644 index 000000000..1050cacf3 --- /dev/null +++ b/tests/ajde/examples/spacewar/spacewar/Display1.java @@ -0,0 +1,183 @@ + +package spacewar; + + +import java.util.Vector; +import java.util.Enumeration; +import java.awt.Graphics; +import java.awt.Color; +import java.util.Random; + +/** + * This is the standard display aspect. + */ +class Display1 extends Display { + /* + * Here's the color scheme for the game. No other places in this file + * should say Color.xxx. Instead, that color should be given a symbolic + * name here. + */ + private static Color backgroundColor = Color.black; + private static Color player1ShipColor = Color.white; + private static Color player2ShipColor = Color.gray; + private static Color robotShipColor = new Color(0xa00000); + private static Color flameColor = Color.red; + private static Color shipExplosionColor = Color.red; + private static Color bulletColor = Color.green; + private static Color energyPacketOuterColor = Color.blue; + private static Color energyPacketInnerColor = new Color(0x7070FF); + private static Color statusLabelsColor = Color.white; + private static Color statusMeterBorderColor = Color.white; + private static Color energyStatusMeterColor = Color.blue; + private static Color damageStatusMeterColor = Color.red; + + + Display1(Game game) { + super(game); + frame.setLocation(20, 20); + } + + void noticeSizeChange() { + super.noticeSizeChange(); + setBackground(backgroundColor); + } + + void paintObjects(Graphics g) { + SpaceObject[] objects = game.getRegistry().getObjects(); + final int len = objects.length; + for (int i = 0; i < len; i++) { + objects[i].paint(g); + } + } + + static aspect SpaceObjectPainting { + + abstract private void SpaceObject.paint(Graphics g); + + /* + * Ships are by far and away the most complex of the space Objects + * to paint. First off, we need to set the color when the ship + * is made. + */ + private Color Ship.color; + + after(Pilot pilot) returning (Ship ship): call(Ship Game.newShip(Pilot)) && args(pilot) { + if (pilot.getNumber() == 1) + ship.color = player1ShipColor; + else if (pilot.getNumber() == 2) + ship.color = player2ShipColor; + else + ship.color = robotShipColor; + } + + private void Ship.paint(Graphics g) { + final double PI = Math.PI; + int[] radius = {15, 12, -4, 12, -9, -15, -9}; + double[] angle = {0, PI * 3/4, 0, -PI * 3/4, PI/8, 0, -PI/8}; + int[] x; + int[] y; + + Random random = new Random(); + + if (this.getDamage() >= this.MAX_DAMAGE) { + int lines = 20; + x = new int[lines]; + y = new int[lines]; + g.setColor(shipExplosionColor); + for (int i = 0; i < lines; i++) { + x[i] = (int)(this.getXPos()) + random.nextInt() % 20; + y[i] = (int)(this.getYPos()) + random.nextInt() % 20; + } + for (int i = 0; i < lines; i++) + g.drawLine(x[i], y[i], x[(i + 1) % lines], y[(i + 1) % lines]); + } else { + x = new int[7]; + y = new int[7]; + + g.setColor(this.color); + + radius[5] += random.nextInt() % 3; + // convert coordinates from polar to cartesian + for (int i = 0; i < 7; i++) { + x[i] = (int) + (this.getXPos() + + Math.cos(this.getOrientation() + angle[i]) * radius[i]); + y[i] = (int) + (this.getYPos() + + Math.sin(this.getOrientation() + angle[i]) * radius[i]); + } + + // draw the body as a polygon + g.drawPolygon(x, y, 4); + + // if the ship is accelerating, draw in a flame + if (this.getRAcc() != 0) { + g.setColor(flameColor); + g.drawLine(x[4], y[4], x[5], y[5]); + g.drawLine(x[5], y[5], x[6], y[6]); + } + } + } + + /* + * Bullets + */ + private void Bullet.paint(Graphics g) { + g.setColor(bulletColor); + g.fillOval((int)this.getXPos() - 1, + (int)this.getYPos() - 1, + 3, + 3); + } + + /* + * energy packets + */ + private void EnergyPacket.paint(Graphics g) { + g.setColor(energyPacketOuterColor); + g.fillOval((int)this.getXPos() - 5, + (int)this.getYPos() - 5, + 10, 10); + g.setColor(energyPacketInnerColor); + g.fillOval((int)this.getXPos() - 2, + (int)this.getYPos() - 2, + 3, 3); + } + } + + + void paintStatus(Graphics g) { + int left1 = 60; + int top1 = 0; + + int left2 = 200; + int top2 = 0; + + g.setColor(statusLabelsColor); + g.drawString("energy:", 5, top1 + 15); + g.drawString("damage:", 5, top1 + 30); + + if (getPilot1() != null) + paintLevels(g, getPilot1().getShip(), top1, left1); + if (getPilot2() != null) + paintLevels(g, getPilot2().getShip(), top2, left2); + } + + static void paintLevels(Graphics g, Ship ship, int top, int left) { + if (ship == null) + return; + else if (ship.isAlive()) { + g.setColor(statusMeterBorderColor); + g.drawRect(left, top + 6, 101, 10); + g.drawRect(left, top + 21, 101, 10); + g.setColor(energyStatusMeterColor); + g.fillRect(left + 1, top + 7, (int)(ship.getEnergyLevel()*100), 9); + g.setColor(damageStatusMeterColor); + g.fillRect(left + 1, top + 22, (int)(ship.getDamageLevel()*100), 9); + } + else { + g.setColor(damageStatusMeterColor); + g.drawString("Ship is destroyed", left+1, top+15); + } + } +} diff --git a/tests/ajde/examples/spacewar/spacewar/Display2.java b/tests/ajde/examples/spacewar/spacewar/Display2.java new file mode 100644 index 000000000..ee20151f0 --- /dev/null +++ b/tests/ajde/examples/spacewar/spacewar/Display2.java @@ -0,0 +1,118 @@ + +package spacewar; + + +import java.util.Vector; +import java.util.Enumeration; +import java.awt.Graphics; +import java.awt.Color; + + +/** + * This is the cheap Display aspect. + */ +class Display2 extends Display { + + Display2(Game game) { + super(game); + frame.setLocation(540, 20); + } + + void noticeSizeChange() { + super.noticeSizeChange(); + setBackground(Color.darkGray); + } + + void paintObjects(Graphics g) { + SpaceObject[] objects = game.getRegistry().getObjects(); + final int len = objects.length; + for (int i = 0; i < len; i++) { + objects[i].paint(g); + } + } + + static aspect SpaceObjectPainting { + + abstract private void SpaceObject.paint(Graphics g); + + /* + * Ships are by far and away the most complex of the space Objects + * to paint. + */ + private Color Ship.color; + + after(Pilot pilot) returning (Ship ship): call(Ship Game.newShip(Pilot)) && args(pilot) { + if (pilot.getNumber() == 1) + ship.color = Color.white; + else if (pilot.getNumber() == 2) + ship.color = Color.gray; + else + ship.color = new Color(0xa00000); + } + + private void Ship.paint(Graphics g) { + if (this.getDamage() < this.MAX_DAMAGE) { + double x = this.getXPos(); + double y = this.getYPos(); + double sinTheta = Math.sin(this.getOrientation()); + double cosTheta = Math.cos(this.getOrientation()); + + g.setColor(color); + g.drawLine((int)(x + 8*cosTheta), (int)(y + 8*sinTheta), + (int)(x - 8*cosTheta), (int)(y - 8*sinTheta)); + + // if the ship is accelerating, draw thruster + if (this.getRAcc() != 0) { + g.setColor(Color.red); + g.fillOval((int)(x - 8*cosTheta), (int)(y - 8*sinTheta), 6, 6); + } + } + } + + private void Bullet.paint(Graphics g) { + g.setColor(Color.green); + g.fillOval((int)this.getXPos() - 1, + (int)this.getYPos() - 1, + 3, + 3); + } + + private void EnergyPacket.paint(Graphics g) { + g.setColor(Color.white); + g.fillOval((int)this.getXPos() - 5, + (int)this.getYPos() - 5, + 10, + 10); + } + } + + void paintStatus(Graphics g) { + int left1 = 60; + int top1 = 0; + + int left2 = 200; + int top2 = 0; + + g.setColor(Color.white); + g.drawString("energy:", 5, top1 + 15); + g.drawString("damage:", 5, top1 + 30); + + if (getPilot1() != null) + paintLevels(g, getPilot1().getShip(), top1, left1); + if (getPilot2() != null) + paintLevels(g, getPilot2().getShip(), top2, left2); + } + + void paintLevels(Graphics g, Ship ship, int top, int left) { + if (ship == null) + return; + else if (ship.isAlive()) { + g.drawString(Float.toString(ship.getEnergyLevel()*100), left+1, top+15); + g.drawString(Float.toString(ship.getDamageLevel()*100), left+1, top+30); + } + else { + g.setColor(Color.red); + g.drawString("Ship is destroyed", left+1, top+15); + } + } +} diff --git a/tests/ajde/examples/spacewar/spacewar/EnergyPacket.java b/tests/ajde/examples/spacewar/spacewar/EnergyPacket.java new file mode 100644 index 000000000..33fd06051 --- /dev/null +++ b/tests/ajde/examples/spacewar/spacewar/EnergyPacket.java @@ -0,0 +1,23 @@ + +package spacewar; + + +class EnergyPacket extends SpaceObject { + + static private final int SIZE = 5; //Can't be changed for now!!! + int getSize() { return SIZE; } + + private double energy; + + double getEnergy() { return energy; } + + EnergyPacket(Game theGame, + double xP, double yP, double xV, double yV, double e) { + super(theGame, xP, yP, xV, yV); + energy = e; + } + + void handleCollision(SpaceObject obj) { + die(); + } +} diff --git a/tests/ajde/examples/spacewar/spacewar/EnergyPacketProducer.java b/tests/ajde/examples/spacewar/spacewar/EnergyPacketProducer.java new file mode 100644 index 000000000..c13f1ed3d --- /dev/null +++ b/tests/ajde/examples/spacewar/spacewar/EnergyPacketProducer.java @@ -0,0 +1,40 @@ + +package spacewar; + + +class EnergyPacketProducer extends Thread { + private final static int MIN = -20; + private final static int MAX = 80; + private final static int EXPECTEDINTERVAL = 15; + + private Game game; + + Game getGame() { return game; } + + EnergyPacketProducer(Game theGame) { + super("EnergyPacketProducer"); + game = theGame; + } + + public void run() { + while(true) { + produceAPacket(); + waitForABit(); + } + } + + void waitForABit() { + try { Thread.sleep((int)(Math.random() * EXPECTEDINTERVAL * 2000)); } + catch (InterruptedException e) {} + } + + void produceAPacket() { + EnergyPacket pkt = + new EnergyPacket(game, + Math.random() * getGame().getWidth(), + Math.random() * getGame().getHeight(), + Math.random() * 2 - 1, + Math.random() * 2 - 1, + Math.random() * (MAX - MIN) + MIN); + } +} diff --git a/tests/ajde/examples/spacewar/spacewar/EnsureShipIsAlive.java b/tests/ajde/examples/spacewar/spacewar/EnsureShipIsAlive.java new file mode 100644 index 000000000..8daab4a0d --- /dev/null +++ b/tests/ajde/examples/spacewar/spacewar/EnsureShipIsAlive.java @@ -0,0 +1,15 @@ + +package spacewar; + +/** + * This aspect makes sure that the ship is alive before performing any console + * commands. + * + */ +aspect EnsureShipIsAlive { + void around (Ship ship): Ship.helmCommandsCut(ship) { + if ( ship.isAlive() ) { + proceed(ship); + } + } +} diff --git a/tests/ajde/examples/spacewar/spacewar/Game.java b/tests/ajde/examples/spacewar/spacewar/Game.java new file mode 100644 index 000000000..6b7cf6da9 --- /dev/null +++ b/tests/ajde/examples/spacewar/spacewar/Game.java @@ -0,0 +1,172 @@ + +package spacewar; + +import java.awt.Dimension; + +/** + * The Game class is the root of the spacewar game. To start a spacewar + * game, you can either call the main method, or instantiate this class + * directly. + * + * Synchronization is done by the GameSynchronization aspect. + */ +public class Game extends Thread { + + /** + * To run the game from top level, simply say Java Game, as usual. Passing + * an argument makes the game run in demo mode. Without an argument it runs + * in the normal player mode. + */ + public static void main(String[] args) { + if ( args.length == 0 ) + new Game("1").run(); + new Game(args[0]).run(); + } + + + private Timer timer; + private EnergyPacketProducer ePP; + + private Registry registry; + private Pilot pilot1, pilot2; + + private Dimension screenSize = new Dimension(500, 500); + + Registry getRegistry() { return registry; } + Pilot getPilot1() { return pilot1; } + Pilot getPilot2() { return pilot2; } + + int getWidth() { return screenSize.width; } + int getHeight() { return screenSize.height; } + + /** + * To run the game, simply instantiate this class. It runs in its own + * thread. You can instantiate multiple games at once. For the time being + * the only way to end the game is to exit from the Java VM. + * + * @param isDemo Controls whether the game runs in demo mode or not. True + * means it is a demo, false means it runs in normal 2 player mode. + */ + public Game(String mode) { + timer = new Timer(this); + ePP = new EnergyPacketProducer(this); + registry = new Registry(this); + } + + public void run() { + timer.start(); + ePP.start(); + + while(true) { + try { + newRobot(3); + Thread.sleep(15000); + } + catch (InterruptedException e) {} + } + } + + + + /* + * These are the menu commands. + */ + void addRobot() { + newRobot(3); + } + + void resetShips() { + Ship[] ships = registry.getShips(); + + for (int i = 0; i < ships.length; i++) { + Ship ship = ships[i]; + Pilot pilot = ship.getPilot(); + newShip(pilot); + } + } + + void quit() { + System.exit(0); + } + + void error(Object o) { + System.err.println(o); + } + + + /* + * These three methods are the ONLY ways to make a Player a Robot or a Ship. + * The structural invariant is that there should be no calls to new of one + * of these three classes outside these three methods. + */ + Player newPlayer(int number) { + Player player = new Player(this, number); + newShip(player); + return player; + } + + Robot newRobot(int number) { + Robot robot = new Robot(this, number); + newShip(robot); + robot.start(); + return robot; + } + + Ship newShip(Pilot pilot) { + // + // If there is an old ship (we're doing a reset), then remove it from + // the registry. + // + Ship oldShip = pilot.getShip(); + if (! (oldShip == null)) + oldShip.die(); + + Ship newShip = new Ship(this, + Math.random() * getWidth(), + Math.random() * getHeight(), + Math.random() * Math.PI * 2); + pilot.setShip(newShip); + newShip.setPilot(pilot); + + return newShip; + } + + void clockTick() { + registry.clockTick(); + handleCollisions(); + } + + // collision detection + + void handleCollisions() { + SpaceObject[] objects = registry.getObjects(); + + SpaceObject objI, objJ; + for (int i = 0; i < objects.length; i++) { + objI = objects[i]; + for (int j = i + 1; j < objects.length; j++) { + objJ = objects[j]; + if (objI instanceof Bullet && objJ instanceof Bullet) + continue; + if (isCollision(objI, objJ)) { + if (objI instanceof Ship && objJ instanceof Ship) + Ship.bounce((Ship)(objI), (Ship)(objJ)); + else { + objI.handleCollision(objJ); + objJ.handleCollision(objI); + } + } + } + } + } + + /* + * Is the distance between the two centers less than the sum of the two + * radii. This is a cheap and dirty (i.e. wrong) implementation of this. + */ + static boolean isCollision(SpaceObject a, SpaceObject b) { + return (Math.abs(a.getXPos() - b.getXPos()) + + Math.abs(a.getYPos() - b.getYPos())) < + (a.getSize()/2 + b.getSize()/2); + } +} diff --git a/tests/ajde/examples/spacewar/spacewar/GameSynchronization.java b/tests/ajde/examples/spacewar/spacewar/GameSynchronization.java new file mode 100644 index 000000000..18f5cbd33 --- /dev/null +++ b/tests/ajde/examples/spacewar/spacewar/GameSynchronization.java @@ -0,0 +1,33 @@ + +package spacewar; + +import coordination.Coordinator; + +/** + * This aspect ensures synchronized access to methods of the Game in the + * presence of several threads. + * + * It uses the Coordinator class, from the AspectJ coordination library. + * (This case is right on the borderline of being too simple to use the + * coordination library, but we use it anyways to keep the similarity + * with the RegistrySynchronizer.) + * + * It uses a per-Game coordination scheme, so there is one instance of + * this class for each instance of the Game class. When this class is + * constructed, it registers appropriate mutexes and selfexes using + * the behavior inherited from Coordinator. + * + * The coordination constraints for the Game are simple. We just need to + * make sure that newShip and handleCollisions are mutually exclusive. That + * ensures that they we can't destroy a ship that has just been replaced. + */ +aspect GameSynchronization extends Coordinator perthis(this(Game)) { + + protected pointcut synchronizationPoint(): + call(void Game.handleCollisions(..)) || call(Ship Game.newShip(..)); + + public GameSynchronization() { + addMutex(new String[] {"handleCollisions", "newShip"}); + } + +} diff --git a/tests/ajde/examples/spacewar/spacewar/Pilot.java b/tests/ajde/examples/spacewar/spacewar/Pilot.java new file mode 100644 index 000000000..833001762 --- /dev/null +++ b/tests/ajde/examples/spacewar/spacewar/Pilot.java @@ -0,0 +1,26 @@ + +package spacewar; + + +/** + * Pilot is the abstract superclass of Player and Robot. + * + */ + +abstract class Pilot { + private Game game; + private int number; + protected Ship ship = null; + + Game getGame() { return game; } + int getNumber() { return number; } + Ship getShip() { return ship; } + + void setShip(Ship s) { ship = s; } + + Pilot (Game g, int n) { + super(); + game = g; + number = n; + } +} diff --git a/tests/ajde/examples/spacewar/spacewar/Player.java b/tests/ajde/examples/spacewar/spacewar/Player.java new file mode 100644 index 000000000..e7655aa10 --- /dev/null +++ b/tests/ajde/examples/spacewar/spacewar/Player.java @@ -0,0 +1,101 @@ + +package spacewar; + +import java.util.Enumeration; +import java.awt.event.KeyListener; +import java.awt.event.KeyEvent; + +class Player extends Pilot implements KeyListener { + + private KeyMapping keyMapping; + + private int rotation_direction = Ship.STOP; // current rotation key + private boolean thrust_on = false; // current thrust + + Player(Game theGame, int number) { + super(theGame,number); + + if (getNumber() == 1) + keyMapping = KeyMapping.keyMapping1; + else if (getNumber() == 2) + keyMapping = KeyMapping.keyMapping2; + + } + + public void keyPressed(KeyEvent e) { + int keyCode = e.getKeyCode(); + boolean consumed = true; + + if (keyCode == keyMapping.fire) { + ship.fire(); + } + else if (keyCode == keyMapping.thrust && !thrust_on) { + ship.thrust(true); + thrust_on = true; + } + else if (keyCode == keyMapping.right && + rotation_direction != Ship.COUNTERCLOCKWISE) { + //start rotating clockwise unless already rotating in the + //opposite direction + rotation_direction = Ship.CLOCKWISE; + ship.rotate(Ship.CLOCKWISE); + } + else if (keyCode == keyMapping.left && + rotation_direction != Ship.CLOCKWISE) { + //start rotating counterclockwise unless already rotating in the + //opposite direction + rotation_direction = Ship.COUNTERCLOCKWISE; + ship.rotate(Ship.COUNTERCLOCKWISE); + } + else { + consumed = false; + } + + if (consumed) e.consume(); + } + + public void keyReleased(KeyEvent e) { + int keyCode = e.getKeyCode(); + + if (keyCode == keyMapping.thrust) { + ship.thrust(false); //engine off + thrust_on = false; + } + else if (keyCode == keyMapping.right && + rotation_direction == Ship.CLOCKWISE + || + keyCode == keyMapping.left && + rotation_direction == Ship.COUNTERCLOCKWISE) { + ship.rotate(Ship.STOP); //stop rotation + rotation_direction = Ship.STOP; + } + } + + public void keyTyped(KeyEvent e) { + // have to implement this because it's in KeyListener + } +} + +class KeyMapping { + + static final KeyMapping keyMapping1 = + new KeyMapping(KeyEvent.VK_LEFT, + KeyEvent.VK_RIGHT, + KeyEvent.VK_UP, + KeyEvent.VK_SPACE); + + static final KeyMapping keyMapping2 = + new KeyMapping(KeyEvent.VK_X, + KeyEvent.VK_V, + KeyEvent.VK_D, + KeyEvent.VK_ALT); + + int left, right, thrust, fire; + + KeyMapping(int k_left, int k_right, int k_thrust, int k_fire) { + left = k_left; + right = k_right; + thrust = k_thrust; + fire = k_fire; + } +} diff --git a/tests/ajde/examples/spacewar/spacewar/Registry.java b/tests/ajde/examples/spacewar/spacewar/Registry.java new file mode 100644 index 000000000..b7e3f1a7d --- /dev/null +++ b/tests/ajde/examples/spacewar/spacewar/Registry.java @@ -0,0 +1,105 @@ + +package spacewar; + +import java.util.Vector; +import java.util.Hashtable; +import java.util.Enumeration; + +/** + * The Registry keeps track of all the space objects that are floating around. + * It basically supports register, unregister and contents type operations. + * + * The synchronization is done by the RegistrySynchronization aspect. + */ + +class Registry { + + private Hashtable table; + private Game game; + + Game getGame() { return game; } + + Registry (Game theGame) { + game = theGame; + table = new Hashtable(); + } + + + void register(SpaceObject object) { + table.put(object, object); + } + + void unregister(SpaceObject object) { + table.remove(object); + } + + /* + * It is an invariant of the design that only two points in SpaceObject + * should call register and unregister. This aspect enforces that. + * + * Unfortunately, in the current compiler, we get a static warning when + * there are no illegal calls that this advice has no targets. That will + * be fixed in a future release. For the time being the dummy method + * just below this fixes that. + */ + static aspect RegistrationProtection { + after() returning(): + (call(void Registry.register(SpaceObject)) || + call(void Registry.unregister(SpaceObject))) && + !(within(SpaceObject) && (withincode(new(..)) || + withincode(void die()))) { + throw new IllegalAccessError( + "This is an illegal call to " + thisJoinPoint + "\n" + + "Only the constructor and the die() on SpaceObject\n" + + "should call the primitive registry operations."); + } + } + + void dummy() { // see comment above + register(getObjects()[0]); + unregister(getObjects()[0]); + } + + + SpaceObject[] getObjects() { + SpaceObject[] allObjects = new SpaceObject[table.size()]; + Enumeration elements = table.elements(); + for(int i = 0; elements.hasMoreElements(); i++) { + allObjects[i] = (SpaceObject)(elements.nextElement()); + } + return allObjects; + } + + Ship[] getShips() { + // + // First we have to put just the Ships into a vector, then we can put + // them into an array of exactly the right length. + // + Ship[] arrayOfShips; + Vector vectorOfShips = new Vector(); + Enumeration elements = table.elements(); + while (elements.hasMoreElements()) { + Object object = elements.nextElement(); + if (object instanceof Ship) { + vectorOfShips.addElement(object); + } + } + + arrayOfShips = new Ship[(vectorOfShips.size())]; + vectorOfShips.copyInto(arrayOfShips); + return arrayOfShips; + } + + Hashtable getTable() { return table; } + + // + // The protocol for clockTick is that it automatically cascades. + // + void clockTick() { + Enumeration elements = table.elements(); + while (elements.hasMoreElements()) { + ((SpaceObject)elements.nextElement()).clockTick(); + } + } +} + diff --git a/tests/ajde/examples/spacewar/spacewar/RegistrySynchronization.java b/tests/ajde/examples/spacewar/spacewar/RegistrySynchronization.java new file mode 100644 index 000000000..0612bd672 --- /dev/null +++ b/tests/ajde/examples/spacewar/spacewar/RegistrySynchronization.java @@ -0,0 +1,37 @@ + +package spacewar; + +import coordination.Coordinator; + + +/** + * This aspect ensures synchronized access to methods of the Registry in + * the presence of several threads. + * + * It uses the Coordinator class, from the AspectJ coordination library. + * + * It uses a per-Registry coordination scheme, so there is one instance of + * this class for each instance of the Registry class. When this class is + * constructed, it registers appropriate mutexes and selfexes using the + * behavior inherited from Coordinator. + * + * The mutating methods (register and unregister) should be self-exclusive. + * Each reader method should be mutually exclusive with the mutating + * methods. But the readers can run concurrently. */ +aspect RegistrySynchronization extends Coordinator perthis(this(Registry)) { + + protected pointcut synchronizationPoint(): + call(void Registry.register(..)) || + call(void Registry.unregister(..)) || + call(SpaceObject[] Registry.getObjects(..)) || + call(Ship[] Registry.getShips(..)); + + public RegistrySynchronization() { + addSelfex("register"); + addSelfex("unregister"); + + addMutex(new String[] {"register", "unregister", "getObjects"}); + addMutex(new String[] {"register", "unregister", "getShips"}); + } + +} diff --git a/tests/ajde/examples/spacewar/spacewar/Robot.java b/tests/ajde/examples/spacewar/spacewar/Robot.java new file mode 100644 index 000000000..5a4901f10 --- /dev/null +++ b/tests/ajde/examples/spacewar/spacewar/Robot.java @@ -0,0 +1,179 @@ +package spacewar; + +import java.util.Random; + +/** + * Robot is an automatic pilot that now has quite a bit of intelligence. + * So, beware ! + */ +class Robot extends Pilot implements Runnable { + + private static final int FIRE_INTERVAL = 60; + private static final int REBIRTH_DELAY = 900; + + private final Random random = new Random(); + + private Thread runner; + private boolean runnable = true; + + Robot(Game theGame, int number) { + super(theGame, number); + } + + void start() { + if (runner == null) { + runner = new Thread(this); + runner.start(); + } + } + + void destroy() { + if (runner != null) { + runnable = false; + runner = null; + } + } + + + // A Robot tracks User-controlled ships and fires at them + public void run() { + Ship target = null; + + while(runnable) { + // find target ship + do { + Ship[] potentials = getGame().getRegistry().getShips(); + if(potentials.length != 0) + target = potentials[Math.abs(random.nextInt() % potentials.length)]; + sleepForABit(25); + } while (target == ship); + // main loop + int currentRotation = Ship.STOP; + int time; + boolean currentlyAccelerating = false; + double dx, dy, angleA, angleB, theta, dtheta, d, + targetVel, a, b, c, targetXVel, targetYVel; + + while(true) { + sleepForABit(FIRE_INTERVAL); + + // if my ship is destroyed, give me a new one + if (!ship.isAlive()) { + sleepForABit(REBIRTH_DELAY); + getGame().newShip(this); + } + + // find direction and distance from target to me + dx = ship.getXPos() - target.getXPos(); + if (dx < - getGame().getWidth() / 2) + dx += getGame().getWidth(); + if (dx > getGame().getWidth() / 2) + dx -= getGame().getWidth(); + dy = ship.getYPos() - target.getYPos(); + if (dy < - getGame().getHeight() / 2) + dy += getGame().getHeight(); + if (dy > getGame().getHeight() / 2) + dy -= getGame().getHeight(); + d = Math.sqrt(dx * dx + dy * dy); + angleA = Math.atan(dy / dx); + if (dx < 0) + angleA += Math.PI; + + // find relative velocity and trajectory of target + targetXVel = target.getXVel() - ship.getXVel(); + targetYVel = target.getYVel() - ship.getYVel(); + targetVel = Math.sqrt(targetXVel * targetXVel + + targetYVel * targetYVel); + angleB = Math.atan(targetYVel / targetXVel); + if (targetXVel < 0) + angleB+=Math.PI; + + // find angle between line to target and taget's direction of travel + theta = (angleA - angleB) % (2 * Math.PI); + if (theta < -Math.PI) + theta += 2 * Math.PI; + if (theta > Math.PI) + theta -= 2 * Math.PI; + + // calculate time to bullet impact using law of cosines + a = targetVel * targetVel + Ship.BULLET_SPEED * Ship.BULLET_SPEED; + b = d * targetVel * Math.cos(theta); + c = - d * d; + time = (int)((-b + Math.sqrt(b * b - 4 * a * c)) / 2 / a); + + // calculate angle and distance to bullet impact location + dx = targetXVel * time - dx; + dy = targetYVel * time - dy; + theta = Math.atan(dy / dx); + if(dx < 0) + theta += Math.PI; + + // find desired change in rotation + dtheta = (theta - ship.getOrientation()) % (2 * Math.PI); + // find the shortest path to the desired orientation; + if(dtheta < - Math.PI) + dtheta += 2 * Math.PI; + if(dtheta > Math.PI) + dtheta -= 2 * Math.PI; + + // turn if nessecary + if (dtheta > Ship.DEFAULT_ANGULAR_VELOCITY / 2) { + if (currentRotation != Ship.CLOCKWISE) + ship.rotate(currentRotation = Ship.CLOCKWISE); + } + else if (dtheta < -Ship.DEFAULT_ANGULAR_VELOCITY / 2) { + if (currentRotation != Ship.COUNTERCLOCKWISE) + ship.rotate(currentRotation = Ship.COUNTERCLOCKWISE); + } // otherwise, fire, maybe even a burst + else { + if(currentRotation != Ship.STOP) + ship.rotate(currentRotation = Ship.STOP); + if (random.nextInt() % 40 == 0) { + ship.fire(); + } + } + + // randomly accelerate + if (currentlyAccelerating && random.nextInt() % 2 == 0) + ship.thrust(currentlyAccelerating = false); + else { + if (ship.getXVel() == 0) + angleA = 0; + else + angleA = Math.atan(ship.getYVel() / ship.getXVel()); + + if (ship.getXVel() < 0) + angleA+=Math.PI; + angleB = (angleA - ship.getOrientation()) % (2 * Math.PI); + if (angleB < -Math.PI) + angleB += 2 * Math.PI; + if (angleB > Math.PI) + angleB -= 2 * Math.PI; + angleB = Math.abs(angleB); + + // angleB now represents the angle between the ship's + // orientation and velocity vector. This will be used to + // determine the probably that the ship will thrust to + // prevent ships from accelerating too much in one direction + if (random.nextInt() % (int)(12 * (Math.PI - angleB) + 1) == 0) + ship.thrust(currentlyAccelerating = true); + } + + // switch targets if current one has been destroyed + if (target.getDamage() == 100) + break; + + // randomly switch targets + if (random.nextInt() % 4000 == 0) + break; + } + } + } + + void sleepForABit (int time) { + try { + runner.sleep(time); + } + catch (InterruptedException e) {} + } +} diff --git a/tests/ajde/examples/spacewar/spacewar/SWFrame.java b/tests/ajde/examples/spacewar/spacewar/SWFrame.java new file mode 100644 index 000000000..7161aa6b8 --- /dev/null +++ b/tests/ajde/examples/spacewar/spacewar/SWFrame.java @@ -0,0 +1,71 @@ + +package spacewar; + +import java.awt.Frame; +import java.awt.Menu; +import java.awt.MenuBar; +import java.awt.MenuItem; +import java.awt.MenuShortcut; +import java.awt.Dimension; +import java.awt.Insets; + +import java.awt.event.ActionListener; +import java.awt.event.ActionEvent; + +class SWFrame extends Frame implements ActionListener { + private Game game; + private Display display; + private Menu menu; + + Game getGame() { return game; } + Display getDisplay() { return display; } + Menu getMenu() { return menu; } + + SWFrame(Game theGame, Display d) { + super("Space War!"); + + game = theGame; + + display = d; + add(display); + + // create menu + menu = new Menu("Game"); + MenuItem item1 = new MenuItem("Add Robot", new MenuShortcut('a')); + MenuItem item2 = new MenuItem("Reset Ships", new MenuShortcut('r')); + MenuItem item3 = new MenuItem("Quit", new MenuShortcut('q')); + item1.setActionCommand("Add Robot"); + item2.setActionCommand("Reset Ships"); + item3.setActionCommand("Quit"); + menu.add(item1); + menu.add(item2); + menu.add(item3); + menu.addActionListener(this); + + setMenuBar(new MenuBar()); + getMenuBar().add(menu); + + Dimension screenSize = new Dimension(500, 500); + setSize(screenSize); + setVisible(true); + toFront(); + + Insets inset = getInsets(); + int displayWidth = screenSize.width - inset.left - inset.right; + int displayHeight = screenSize.height - inset.top - inset.bottom; + display.setSize(displayWidth, displayHeight); + } + + public void actionPerformed(ActionEvent e) { + String s = e.getActionCommand(); + if (s.equals("Add Robot")) { + getGame().addRobot(); + } + else if (s.equals("Reset Ships")) { + getGame().resetShips(); + } + else if (s.equals("Quit")) { + getGame().quit(); + } + } +} diff --git a/tests/ajde/examples/spacewar/spacewar/Ship.java b/tests/ajde/examples/spacewar/spacewar/Ship.java new file mode 100644 index 000000000..3f22b0949 --- /dev/null +++ b/tests/ajde/examples/spacewar/spacewar/Ship.java @@ -0,0 +1,260 @@ + +package spacewar; + +class Ship extends SpaceObject { + + pointcut helmCommandsCut(Ship ship): + target(ship) && ( call(void rotate(int)) || + call(void thrust(boolean)) || + call(void fire()) ); + + + /** + * Energy and Damage are key values in the state of a ship. Energy is + * basically about fuel, and damage is about how bad a shape we are in. + * + * The energy related values are: + * MAX_ENERGY + * BULLET_ENERGY + * ACCELERATION_ENERGY_FACTOR + * energy + * + * The damage related values are: + * MAX_DAMAGE + * BULLET_DAMAGE + * COLLISION_DAMAGE_FACTOR + * damage + * + * Finally, REPAIR_RATE is the rate at which energy is consumed to fix + * damage. + * + */ + private static final int MAX_ENERGY = 100; + private static final int BULLET_ENERGY= 2; + private static final double ACCELERATION_COST_FACTOR = 0.05; + + //XXX was private + static final int MAX_DAMAGE = 100; + private static final int BULLET_DAMAGE = 15; + private static final double COLLISION_DAMAGE_FACTOR = 0.1; + + private static final double REPAIR_RATE = 0.08; + + + private static final int EXPLOSION_LENGTH = 10; + + static final int BULLET_SPEED = 10; + + static final int CLOCKWISE = 1; + static final int STOP = 0; + static final int COUNTERCLOCKWISE = (-1); + + static final double DEFAULT_ANGULAR_VELOCITY = 0.2; + static final double DEFAULT_ACCELERATION = .4; + + static private final int SIZE = 30; //Can't be changed for now!!! + + private double energy; // range: 0 to MAX_ENERGY + private double damage; // range: 0 to MAX_DAMAGE + private double orientation; // in degrees + private double angularVel; // in ??? + private double xAcc, yAcc, rAcc; // + private int countdown; // remaining explosion time + + private Pilot pilot; + + Ship(Game theGame, double xPos, double yPos, double orientation) { + super(theGame, xPos, yPos, 0, 0); + xAcc = 0; + yAcc = 0; + this.orientation = orientation; + angularVel = 0; + + energy = MAX_ENERGY; + damage = 0; + countdown = EXPLOSION_LENGTH; + } + + + int getSize() { return SIZE; } + + double getEnergy() { return energy; } + double getDamage() { return damage; } + double getOrientation() { return orientation; } + double getRAcc() { return rAcc; } + + Pilot getPilot() { return pilot; } + void setPilot (Pilot p) { pilot = p; } + + float getEnergyLevel() { + return (float)energy / (float)MAX_ENERGY; + } + float getDamageLevel() { + return (float)damage / (float)MAX_DAMAGE; + } + + // returns false if energy is out, otherwise decrements energy by amount + // and returns true + boolean expendEnergy(double amount) { + if (amount <= energy) { + energy -= amount; + return true; + } + else + return false; + } + + // increments damage by amount and handles the destruction of a ship if + // damage reaches MAX_DAMAGE. + void inflictDamage(double amount) { + if (amount < 0) // shouldn't happen + return; + damage = Math.min(MAX_DAMAGE, damage + amount); + if (damage == MAX_DAMAGE) + setIsAlive(false); + } + + void repairDamage(double amount) { + if (amount < 0) // shouldn't happen + return; + if (damage == 0) + return; + damage = Math.max(0, damage - amount); + } + + public void clockTick() { + if (! isAlive()) { + // + // If we aren't alive, but we are still in the registry, it means + // we are exploding. countdown counts the length of the explosion. + // + if (--countdown == 0) + die(); + } + else { + if (angularVel != 0) { + orientation += angularVel; + xAcc = rAcc * Math.cos(orientation); + yAcc = rAcc * Math.sin(orientation); + } + setXVel(getXVel() + xAcc); + setYVel(getYVel() + yAcc); + + //expend energy + if (!expendEnergy(rAcc * ACCELERATION_COST_FACTOR)) + rAcc = xAcc = yAcc = 0; + + // fix damage + if (energy > 10 && damage > REPAIR_RATE) { + expendEnergy(REPAIR_RATE); + repairDamage(REPAIR_RATE); + } + } + super.clockTick(); + } + + /** + * First check to make sure we have enough energy to accelerate. If + * we do, then go ahead and do so. Acceleration is in the direction + * we are already facing (i.e. orientation). + */ + void setAcceleration(double acc) { + if (acc * ACCELERATION_COST_FACTOR <= energy) { + rAcc = acc; + xAcc = rAcc * Math.cos(orientation); + yAcc = rAcc * Math.sin(orientation); + } + } + + void setAngularVelocity(double omega) { + // changing direction of rotation takes energy + if (!expendEnergy(Math.abs(omega - angularVel) / 2)) + return; + //sets amount of degree rotation per clock tick, in radians; + //clockwise is positive + angularVel = omega; + } + + void rotate(int direction) { + setAngularVelocity( + direction == CLOCKWISE ? DEFAULT_ANGULAR_VELOCITY : + direction == COUNTERCLOCKWISE ? -DEFAULT_ANGULAR_VELOCITY : + 0); + } + + void thrust(boolean onOff) { + setAcceleration(onOff ? DEFAULT_ACCELERATION : 0); + } + + void fire() { + // firing a shot takes energy + if (!expendEnergy(BULLET_ENERGY)) + return; + + //create a bullet object so it doesn't hit the ship that's firing it + double xV = getXVel() + BULLET_SPEED * (Math.cos(orientation)); + double yV = getYVel() + BULLET_SPEED * (Math.sin(orientation)); + + // create the actual bullet + new Bullet( + getGame(), + (getXPos() + ((getSize()/2 + 2) * (Math.cos(orientation))) + xV), + (getYPos() + ((getSize()/2 + 2) * (Math.sin(orientation))) + yV), + xV, + yV); + } + + + void handleCollision(SpaceObject obj) { + if (obj instanceof Ship) { + // should never be called. ship - ship collisions are handled in + // Ship.bounce(Ship shipA, Ship shipB) + } + else if (obj instanceof Bullet) { + inflictDamage(BULLET_DAMAGE); + } + else if (obj instanceof EnergyPacket) { + double packetEnergy = ((EnergyPacket)obj).getEnergy(); + energy = Math.max(0, Math.min(energy + packetEnergy, MAX_ENERGY)); + } + else { + System.err.println("collision with UFO!"); + } + } + + static void bounce(Ship shipA, Ship shipB) { + double dx, dy, denominator, + xAccA, yAccA, xAccB, yAccB, damage, + xComp, yComp, dvx, dvy; + + dx = Math.abs(shipA.getXPos() - shipB.getXPos()); + dy = Math.abs(shipA.getYPos() - shipB.getYPos()); + denominator = Math.sqrt(dx * dx + dy * dy); + xComp = dx / denominator; + yComp = dy / denominator; + xAccA = shipB.getXVel() * xComp + shipA.getXVel() * (1 - xComp) - + shipA.getXVel(); + yAccA = shipB.getYVel() * yComp + shipA.getYVel() * (1 - yComp) - + shipA.getYVel(); + xAccB = shipA.getXVel() * xComp + shipB.getXVel() * (1 - xComp) - + shipB.getXVel(); + yAccB = shipA.getYVel() * yComp + shipB.getYVel() * (1 - yComp) - + shipB.getYVel(); + shipA.accelerate(xAccA, yAccA); + shipB.accelerate(xAccB, yAccB); + dvx = shipA.getXVel() - shipB.getXVel(); + dvy = shipA.getYVel() - shipA.getYVel(); + damage = COLLISION_DAMAGE_FACTOR * (dvx * dvx + dvy * dvy); + shipA.inflictDamage(damage); + shipB.inflictDamage(damage); + + // !!! + // !!! poopers! this does a local time warp. this has to be a + // !!! violation of the clockTick protocol + // !!! + while (Game.isCollision(shipA, shipB)) { + shipA.clockTick(); + shipB.clockTick(); + } + } +} diff --git a/tests/ajde/examples/spacewar/spacewar/SpaceObject.java b/tests/ajde/examples/spacewar/spacewar/SpaceObject.java new file mode 100644 index 000000000..b02b219d9 --- /dev/null +++ b/tests/ajde/examples/spacewar/spacewar/SpaceObject.java @@ -0,0 +1,81 @@ + +package spacewar; + + +/** + * SpaceObjects are objects that float around in space. They support the + * minimal SpaceObject protocol, having to do with position, velocity, + * size and liveness. They are constructed with game, position, velocity + * and size. When constructed, a spaceobject adds itself to the registry. + * + * When it dies, a spaceobject removes itself from the registry. But note + * that it doesn't decide when to die, subclasses do that. + * + * The display aspects actually draw the space object on the screen and say + * how much space it takes up there. + */ +abstract class SpaceObject { + + private Game game; + private double xPos, yPos, oldXPos, oldYPos, xVel, yVel; + private boolean alive; + + SpaceObject (Game theGame, double xP, double yP, double xV, double yV) { + game = theGame; + xPos = xP; + yPos = yP; + oldXPos = xP; + oldYPos = yP; + xVel = xV; + yVel = yV; + + alive = true; + getGame().getRegistry().register(this); + } + + Game getGame() { return game; } + + double getXPos() { return xPos; } + double getYPos() { return yPos; } + + double getOldXPos() { return oldXPos; } + double getOldYPos() { return oldYPos; } + + double getXVel() { return xVel; } + double getYVel() { return yVel; } + + void setXVel (double n) { xVel = n; } + void setYVel (double n) { yVel = n; } + + boolean isAlive() { return alive; } + void setIsAlive(boolean n) { alive = n; } + + + /** + * Move 1 unit of time's worth of distance. I.e. increment xPos by xVel + * and yPos by yVel. If we move off an edge of the screen move us back + * in the opposite edge. + */ + void clockTick() { + oldXPos = xPos; + oldYPos = yPos; + xPos = (xPos + xVel) % getGame().getWidth(); + if(xPos < 0) + xPos += getGame().getWidth(); + yPos = (yPos + yVel) % getGame().getHeight(); + if(yPos < 0) + yPos += getGame().getHeight(); + } + + void accelerate(double dXVel, double dYVel) { + xVel += dXVel; + yVel += dYVel; + } + + void die() { + getGame().getRegistry().unregister(this); + } + + abstract int getSize(); + abstract void handleCollision(SpaceObject obj); +} diff --git a/tests/ajde/examples/spacewar/spacewar/Timer.java b/tests/ajde/examples/spacewar/spacewar/Timer.java new file mode 100644 index 000000000..63b9eab1b --- /dev/null +++ b/tests/ajde/examples/spacewar/spacewar/Timer.java @@ -0,0 +1,32 @@ + +package spacewar; + + +class Timer extends Thread { + + private final static int TICK_PERIOD = 40; // time between ticks in millis + + private Game game; + + Game getGame() { return game; } + + Timer (Game theGame) { + super("Timer"); + game = theGame; + } + + public void run() { + long t1, tdiff; + while (true) { + t1 = System.currentTimeMillis(); + getGame().clockTick(); + tdiff = System.currentTimeMillis() - t1; + if (tdiff < TICK_PERIOD) { + try { + sleep (Math.max(0 , TICK_PERIOD - tdiff)); + } + catch (InterruptedException e) { } + } + } + } +} diff --git a/tests/ajde/script.html b/tests/ajde/script.html new file mode 100644 index 000000000..edc42b815 --- /dev/null +++ b/tests/ajde/script.html @@ -0,0 +1,291 @@ +<html> + +<head> +<meta http-equiv="Content-Language" content="en-us"> +<meta http-equiv="Content-Type" content="text/html; charset=windows-1252"> +<meta name="GENERATOR" content="Microsoft FrontPage 5.0"> +<meta name="ProgId" content="FrontPage.Editor.Document"> +<title>AJDE Browser</title> +<STYLE TYPE="text/css"> +<!-- + + /* FOR THE SDA PAGE */ + + /* + BODY {margin-top: 15px; margin-left: 15px; margin-right: 15px;} + */ + + A:link { + color:#4756AC; + } + A:visited { + color:#60657B; + } + A:hover { + color:red + } + + INPUT {font:12px "Courier New", sans-serif;} + + H2 { + font:18px/18px Verdana, Arial, Helvetica, sans-serif; + color:black; + font-weight:bold; + margin-left: 10px; + line-height:110%; + } + H3 { + font:18px/18px Verdana, Arial, Helvetica, sans-serif; + color:black; + font-weight:bold; + margin-left: 10px; + line-height:110%; + } + H4 { + font:15px/16px Verdana, Arial, Helvetica, sans-serif; + color:black; + font-weight:bold; + margin-left: 10px; + line-height:140%; + } + P { + font:13px/13px Verdana, Arial, Helvetica, sans-serif; + margin-right: 10px; + margin-left: 10px; + line-height:130%; + } + .paragraph { + font:13px/13px Verdana, Arial, Helvetica, sans-serif; + margin-right: 10px; + margin-left: 10px; + line-height:130%; + } + .smallParagraph { + font:11px/11px Verdana, Arial, Helvetica, sans-serif; + margin-right: 10px; + margin-left: 10px; + line-height:130%; + } + LI { + font:13px/13px Verdana, Arial, Helvetica, sans-serif; + text-align:justify; + margin-right: 10px; + margin-left: 15px; + line-height:120%; + } + /* + UL { + font:13px/13px Verdana, Arial, Helvetica, sans-serif; + text-align:justify; + margin-right: 10px; + margin-left: 15px; + line-height:120%; + }*/ + CODE { + font:11px/11px Courier New, Courier, sans-serif; + text-align:justify; + margin-right: 10px; + margin-left: 15px; + line-height:120%; + } + + DL { + font:13px/13px Verdana, Arial, Helvetica, sans-serif; + text-align:justify; + margin-right: 10px; + margin-left: 15px; + line-height:120%; + } + .footer { + font:10px/10px Verdana, Arial, Helvetica, sans-serif; + color:#888888; + text-align:left + } + .figureTitle { + font:13px/13px Verdana, Arial, Helvetica, sans-serif; + text-align:justify; + text-align:center + } + .copyrightNotice { + font:10px/10px Verdana, Arial, Helvetica, sans-serif; + color:#999999; + line-height:110%; + } + .smallHeading { + font:13px/13px Verdana, Arial, Helvetica, sans-serif; + font-weight:bold; + line-height:110%; + } + .tinyHeading { + font:11px/11px Verdana, Arial, Helvetica, sans-serif; + font-weight:bold; + line-height:120%; + } + .newsText { + font:11px/11px Verdana, Arial, Helvetica, sans-serif; + line-height:130%; + } + .smallParagraph { + font:11px/11px Verdana, Arial, Helvetica, sans-serif; + line-height:130%; + } + .fancyHeading { + font:20px/20px Chantilly, Arial, Helvetica, sans-serif; + margin-right: 10px; + color:#6f7a92; + margin-left: 10px; + line-height:130%; + } + +--> +</STYLE> +</head> + +<BODY BGCOLOR="white"> + +<h3 align="center">AJDE Test Script</h3> + +<p><b>AJBrowser Script</b></p> + + +<p>Steps 3-6 apply should be re-tested in JBuilder and Forte seperately. </p> + + +<ol> + <li>launch browser & manipulate config file set<ul> + <li>with no config file passed as command line parameter: error message</li> + <li>open config file by browsing filesystem<ul> + <li>browse and add</li> + <li>close config</li> + <li>close config: silent fail</li> + <li>compile: error message</li> + </ul> + </li> + <li>with multiple config files passed as command line parameters<ul> + <li>a file specified by its full path</li> + <li>a file specified by its relative path</li> + <li>non ".lst" file: file not added to configs list</li> + <li>a file with an incorrect suffix: not added to list</li> + </ul> + </li> + </ul> + </li> + <li><font color="#000080">run</font><ul> + <li><font color="#000080">with no class selected: error dialog</font></li> + <li><font color="#000080">with a non-main class selected: error dialog</font></li> + <li><font color="#000080">with a correct main class selected</font></li> + </ul> + </li> + <li><font color="#000080">debug</font><ul> + <li><font color="#000080">with no class selected: error dialog</font></li> + <li><font color="#000080">with a non-main class selected: error dialog</font></li> + <li><font color="#000080">with a correct main class selected</font></li> + </ul> + </li> + <li>compile<ul> + <li>no config file present: error message</li> + <li>non-existing config file: error message</li> + <li>invalid config file: error dialog<ul> + <li><font color="#008080">incorrect entry: error message seeks to + corresponding line</font></li> + <li><font color="#008080">non-existing file: error message seeks to + corresponding line</font></li> + </ul> + </li> + <li>compile error-generating code: compiler error, failed build reported<ul> + <li>seek to compiler message</li> + <li>recompile: messages pane disappears</li> + </ul> + </li> + <li>compile warning-generating code: compiler warning, successful build + reported</li> + <li><font color="#008080">compile and generate compiler error: error message</font></li> + <li><font color="#008080">compile and generate OutOfMemoryError: error + message</font></li> + <li><font color="#008080">compile and abort: aborted build reported</font></li> + <li>compile valid code: successful build reported</li> + </ul> + </li> + <li>browse structure (expand this section)<ul> + <li>test modes<ul> + <li>global view</li> + <li>file view</li> + <li>split views</li> + </ul> + </li> + <li>expand/collapse tree levels using slider</li> + <li>close and re-launch browser: previously saved structure tree should be + present</li> + </ul> + </li> + <li><font color="#008080">edit ".lst" file</font><ul> + <li><font color="#008080">select for editing and verify integrity of package/file structure</font></li> + <li><font color="#008080">select/deselect nodes and save</font></li> + <li><font color="#008080">verify saves committed to disk</font></li> + <li><font color="#008080">break ".lst" file on disk: error dialog</font></li> + <li><font color="#008080">coverage: when compilation breaks</font></li> + <li><font color="#008080">coverage: when aspectjrt.jar not present on + classpath</font></li> + </ul> + </li> + <li>user preferences<ul> + <li>set options in "Properties" window</li> + <li>close and re-launch browser</li> + <li>verify properties<ul> + <li>Build Options<ul> + <li>non-standard options</li> + </ul> + </li> + </ul> + </li> + </ul> + </li> + <li>error handler<ul> + <li>verify that the error handler shows stack trace</li> + </ul> + </li> +</ol> + + +<p><b>AJDE/JBuilder</b></p> +<ol> + <li>launch<ul> + <li>AJDE startup message appears</li> + <li>no AJDE listeners are enabled until AJDE started (whitebox)</li> + </ul> + </li> + <li>make new project<ul> + <li>*any* combination of parameters to the new project wizard should work</li> + <li>add packages</li> + <li>add single files</li> + </ul> + </li> + <li>start AJDE</li> + <li>repeat AJBrowser tests</li> + <li>inline annotations<ul> + <li>line with a single annotation</li> + <li>line with multiple annotations</li> + </ul> + </li> +</ol> +<p><b>AJDE/Forte</b></p> +<ol> + <li>launch<ul> + <li>AJDE startup message appears</li> + <li>no AJDE listeners are enabled until AJDE started (whitebox)</li> + </ul> + </li> + <li>make new project<ul> + <li>*any* combination of parameters to the new project wizard should work</li> + <li>add packages</li> + <li>add single files</li> + </ul> + </li> + <li>start AJDE</li> + <li>repeat AJBrowser tests</li> +</ol> + + +</body> + +</html>
\ No newline at end of file diff --git a/tests/ajdoc/JavadocCompareClassMode.java b/tests/ajdoc/JavadocCompareClassMode.java new file mode 100644 index 000000000..2ec00490b --- /dev/null +++ b/tests/ajdoc/JavadocCompareClassMode.java @@ -0,0 +1,200 @@ + +import java.io.*; +import java.util.*; +import common.OutputComparator; +//import org.aspectj.testing.Tester; + +public class JavadocCompareClassMode { + + /** wait a minimum (of 1 second) for processes to complete */ + static final int MIN_SECS = 1; + /** wait a maximum (of 4 hours) for processes to complete */ + static final int MAX_SECS = 4*60*60; + + static final String INPUT_FILES = "input/applesJava/*.java"; + static final String FILE_1 = "Apple.html"; + static final String FILE_2 = "AppleCrate.html"; + static final String OUTPUT_DIR = "output"; + static final String AJDOC_DIR = OUTPUT_DIR + File.separator + "ajdoc"; + static final String JAVADOC_DIR = OUTPUT_DIR + File.separator + "javadoc"; + static final String AJDOC_CALL = "java org.aspectj.tools.ajdoc.Main -d " + AJDOC_DIR + " " + INPUT_FILES; + static final String JAVADOC_CALL = "javadoc -package -d " + JAVADOC_DIR + " " + INPUT_FILES; + + public static void main(String[] args) { test(System.out); } + + public static boolean ensureDir(String dirPath, StringBuffer errSink) { + boolean result = false; + if (dirPath != null) { + try { + File dir = new File(dirPath); + if (!dir.exists()) { + dir.mkdir(); + } + result = (dir.exists() && dir.isDirectory()); + } catch (SecurityException e) { + if (null != errSink) { + errSink.append(e.getClass().getName()); + errSink.append(" ensuring directory "); + errSink.append(dirPath); + errSink.append(": "); + errSink.append(e.getMessage()); + } + } + } + return result; + } // ensureDir + + /** + * This implements a basic three-step test: + * <UL> + * <LI>step 1: exec ajdoc as a command on INPUT_FILES + * <LI>step 2: exec javadoc in the same way + * <LI>step 3: find differences in files FILE_1 and FILE_2 + * </UL> + */ + public static void test(PrintStream sink) { + OutputComparator outputComparator = new OutputComparator(); + + sink.println("> Setup directories"); + StringBuffer errSink = new StringBuffer(); + if (! ensureDir(OUTPUT_DIR, errSink)) { + sink.println("Error: " + errSink.toString()); + return; + } + if (! ensureDir(AJDOC_DIR, errSink)) { + sink.println("Error: " + errSink.toString()); + return; + } + if (! ensureDir(JAVADOC_DIR, errSink)) { + sink.println("Error: " + errSink.toString()); + return; + } + + String toolName = "> ajdoc"; + sink.println(toolName + " running "); + int result = runCommand(AJDOC_CALL); + sink.println(toolName + " result " + result); + + toolName = "> javadoc"; + sink.println(toolName + " running "); + result = runCommand(JAVADOC_CALL); + sink.println(toolName + " result " + result); + + toolName = "> compare"; + sink.println(toolName + " running "); + String[] files = new String[] { FILE_1, FILE_2 }; + Vector diffs = null; + result = -2; + for (int i = 0; i < files.length; i++) { + String file = files[i]; + String ajdocFile = AJDOC_DIR + "/" + file; + String javadocFile = JAVADOC_DIR + "/" + file; + try { + diffs = outputComparator.compareFilesByLine(ajdocFile, javadocFile); + if (diffs == null) { + sink.println("No differences in file " + file); + result = 0; + } else { + result = diffs.size(); + sink.println("Start of Differences in file " + FILE_1); + sink.println(diffs.toString()); + sink.println("end of Differences in file " + FILE_1); + } + } catch (IOException e) { + sink.println("Exception comparing: " + file); + e.printStackTrace(sink); + result = -1; + } + } + sink.println(toolName + " result " + result); + } + + /** write in to out */ + static void writeStream(InputStream in, PrintStream out) { + if ((null == in) || (null == out)) { + return; + } + try { + BufferedReader lines = new BufferedReader(new InputStreamReader(in)); + String line; + while (null != (line = lines.readLine())) { + out.println(line); + } + } catch (IOException e) { + e.printStackTrace(out); + } + } + + /** + * Complete a running process, handling timeout and streams appropriately. + * @param process the Process to run + * @param secsToWait an int for the number of seconds to wait before timing out + * - use Integer.MAXVALUE to mean no timeout (otherwise, + * IllegalArgumentException unless (MIN_SECS <= secsToWait <= MAX_SECS)) + * @param outSink the PrintStream sink for the process output stream + * (use null to ignore process output stream). + * @param errSink the PrintStream sink for the process error stream + * (use null to ignore process error stream). + * @returns Integer.MIN_VALUE if interrupted while waiting for process to complete, + * Integer.MAX_VALUE if timed out, + * or the int returned by <code>Process.waitFor()</code> otherwise. + * @throws IllegalArgumentException if any parms are null or invalid + */ + public static int completeProcess(final Process process, int secsToWait, + PrintStream outSink, + PrintStream errSink) { + if (null == process) throw new IllegalArgumentException("null process"); + if ((Integer.MAX_VALUE != secsToWait) + && ((MIN_SECS > secsToWait) || ((MAX_SECS < secsToWait)))) { + throw new IllegalArgumentException("invalid time: " + secsToWait); + } + // setup timeout + TimerTask task = null; + if (Integer.MAX_VALUE != secsToWait) { + Timer t = new Timer(true); + task = new TimerTask() { + public void run() { + process.destroy(); + } + }; + t.schedule(task, secsToWait*1000l); + } + + // try to wait for the process + int status = Integer.MAX_VALUE; + try { + status = process.waitFor(); + } catch (InterruptedException ie) { + status = Integer.MIN_VALUE; // ignore + } + finally { + if (null != task) task.cancel(); + if (errSink != null) writeStream(process.getErrorStream(), errSink); + // misnamed API: the "input" stream is our input from the process output + if (outSink != null) writeStream(process.getInputStream(), outSink); + } + return status; + } // completeProcess + + /** + * Run command, delegating process handling to runProcess. + * @param command the String passed to Runtime.exec + * @return the int returned from process.waitFor(); + */ + public static int runCommand(String command) { + int result = -1; + try { + System.out.println("Running " + command); + Process process = Runtime.getRuntime().exec(command); + System.out.println("waiting for Result.." ); + final int seconds = 60; + result = completeProcess(process, seconds, System.out, System.err); + System.out.println("Result: " + result + " for " + command); + } catch (Exception e) { + throw new RuntimeException("could not execute: " + command + + ", " + e.getMessage() ); + } + return result; + } + +} diff --git a/tests/ajdoc/JavadocComparePackageMode.java b/tests/ajdoc/JavadocComparePackageMode.java new file mode 100644 index 000000000..3d4efbf6b --- /dev/null +++ b/tests/ajdoc/JavadocComparePackageMode.java @@ -0,0 +1,64 @@ + +import java.io.IOException; +import java.util.Vector; +import common.OutputComparator; +import org.aspectj.testing.Tester; + +public class JavadocComparePackageMode { + + static final String INPUT_FILES = "-classpath input/pkgExample aPack bPack.cPack"; + static final String FILE_1 = "aPack/Class2.html"; + static final String FILE_2 = "bPack/cPack/Class3.html"; + static final String AJDOC_DIR = "output/packageMode1"; + static final String JAVADOC_DIR = "output/packageMode2"; + static final String AJDOC_CALL = "java org.aspectj.tools.ajdoc.Main -d " + AJDOC_DIR + " " + INPUT_FILES; + static final String JAVADOC_CALL = "javadoc -package -d " + JAVADOC_DIR + " " + INPUT_FILES; + + public static void main(String[] args) { test(); } + + /** + * <UL> + * <LI>step 1: run ajdoc as a command + * <LI>step 2: run javadoc + * <LI>step 3: compare differences + * </UL> + */ + public static void test() { + OutputComparator outputComparator = new OutputComparator(); + + System.out.println("> running ajdoc"); + runCommand(AJDOC_CALL); + System.out.println("> running javadoc"); + runCommand(JAVADOC_CALL); + + Vector diffs1 = null; + Vector diffs2 = null; + try { + diffs1 = outputComparator.compareFilesByLine(AJDOC_DIR + "/" + FILE_1, + JAVADOC_DIR + "/" + FILE_1); + diffs2 = outputComparator.compareFilesByLine(AJDOC_DIR + "/" + FILE_1, + JAVADOC_DIR + "/" + FILE_1); + } + catch (IOException ioe) { + System.out.println("Couldn't compare files: " + ioe.getMessage()); + } + String result1 = ""; + String result2 = ""; + if (diffs1 != null) result1 = diffs1.toString(); + if (diffs2 != null) result2 = diffs2.toString(); + Tester.checkEqual(result1, "", "diffs from: " + FILE_1); + Tester.checkEqual(result2, "", "diffs from: " + FILE_2); + } + + public static void runCommand(String command) { + try { + Runtime runtime = Runtime.getRuntime(); + Process result = runtime.exec(command); + } + catch ( Exception ioe ) { + throw new RuntimeException("could not execute: " + command + + ", " + ioe.getMessage() ); + } + } + +} diff --git a/tests/ajdoc/RegressionComparePackageMode.java b/tests/ajdoc/RegressionComparePackageMode.java new file mode 100644 index 000000000..1f1546120 --- /dev/null +++ b/tests/ajdoc/RegressionComparePackageMode.java @@ -0,0 +1,66 @@ + +import java.io.IOException; +import java.util.Vector; +import common.OutputComparator; +import org.aspectj.testing.Tester; + +public class RegressionComparePackageMode { + + static final String CORRECT_RESULTS_DIR = "output/regression1"; + static final String RUN_RESULTS_DIR = "output/regression2"; + static final String[] FILES_TO_COMPARE = { "/bPack/cPack/Class3.html", + "/coordination/Coordinator.html", + "/spacewar/Ship.html", + "/spacewar/Debug.html" } ; + static final String[] AJDOC_ARGS = { "-d", + RUN_RESULTS_DIR, + "-sourcepath", + "input;input/pkgExample", + "spacewar", + "coordination", + "bPack.cPack" }; + + + + public static void main(String[] args) { test(); } + + /** + * <UL> + * <LI>step 1: run ajdoc as a command + * <LI>step 2: run javadoc + * <LI>step 3: compare differences + * </UL> + */ + public static void test() { + OutputComparator outputComparator = new OutputComparator(); + + System.out.println("> running ajdoc"); + org.aspectj.tools.ajdoc.Main.main( AJDOC_ARGS ); + + for ( int i = 0; i < FILES_TO_COMPARE.length; i++ ) { + Vector diffs = null; + try { + diffs = outputComparator.compareFilesByLine(CORRECT_RESULTS_DIR + FILES_TO_COMPARE[i], + RUN_RESULTS_DIR + FILES_TO_COMPARE[i]); + } + catch (IOException ioe) { + System.out.println("Couldn't compare files: " + ioe.getMessage()); + } + String result = ""; + if (diffs != null) result = diffs.toString(); + Tester.checkEqual(result, "", "diffs from: " + FILES_TO_COMPARE[i]); + } + } + + public static void runCommand(String command) { + try { + Runtime runtime = Runtime.getRuntime(); + Process result = runtime.exec(command); + } + catch ( Exception ioe ) { + throw new RuntimeException("could not execute: " + command + + ", " + ioe.getMessage() ); + } + } + +} diff --git a/tests/ajdoc/common/OutputComparator.java b/tests/ajdoc/common/OutputComparator.java new file mode 100644 index 000000000..130f4d857 --- /dev/null +++ b/tests/ajdoc/common/OutputComparator.java @@ -0,0 +1,35 @@ +package common; + +import java.io.*; +import java.util.Vector; + +public class OutputComparator +{ + /** + * Ignores lines that contain "Generated by javadoc on". + * + * @return the lines that don't match in the two files as a Vector of Strings, + * or null if they are the same. + */ + public Vector compareFilesByLine(String file1, String file2) throws IOException { + Vector diffLines = new Vector(); + BufferedReader reader1 = new BufferedReader(new FileReader(file1)); + BufferedReader reader2 = new BufferedReader(new FileReader(file2)); + String line1 = reader1.readLine(); + String line2 = reader2.readLine(); + while (line1 != null && line2 != null) { + if (!line1.trim().equals(line2.trim()) && + line1.indexOf("Generated by javadoc on") == -1 ) { + diffLines.addElement(line1 + " != " + line2); + } + line1 = reader1.readLine(); + line2 = reader2.readLine(); + } + if (diffLines.size() == 0) { + return null; + } + else { + return diffLines; + } + } +} diff --git a/tests/ajdoc/input/applesAspectJ/Apple.java b/tests/ajdoc/input/applesAspectJ/Apple.java new file mode 100644 index 000000000..2b817b7ad --- /dev/null +++ b/tests/ajdoc/input/applesAspectJ/Apple.java @@ -0,0 +1,119 @@ + +import java.io.Serializable; +import java.io.IOException; + +/** + * This class represents an apple that has the following two attributes + * <UL> + * <LI>a variety (i.e. "Macintosh" or "Granny Smith") + * <LI>a brusing factor represnting how badly bruised the apple is + * </UL> + * + * @author Mik Kersten + * @version $Version$ + */ + +public class Apple implements Serializable +{ + private String variety = null; + private int bruising = 0; + + /** + * Default constructor. + * + * @param newVariety the type of variety for this apple + */ + public Apple( String newVariety ) + { + variety = newVariety; + } + + /** + * This inner class represents apple seeds. + */ + public class AppleSeed { + private int weight = 0; + private SeedContents seedContents = null; + + /** + * Crosscut Apple serialization methods. + */ + crosscut seedCrosscut(): Apple && void writeObject( java.io.ObjectOutputStream out ); + + /** + * This is how you get poison from the apple. + */ + public void getArsenic() { + System.out.println( ">> getting arsenic" ); + } + + /** + * Reperesents the contents of the seeds. + */ + public class SeedContents { + public String core = null; + public String shell = null; + } + } + + /** + * Sets the bruising factor of the apple. + * + * @param bruiseFactor the new bruising factor + */ + public void bruise( int bruiseFactor ) + { + bruising = bruising + bruiseFactor; + + if ( bruising > 100 ) bruising = 100; + if ( bruising < 0 ) bruising = 0; + } + + + /** + * Returns the bruising factor. + * + * @return bruising the bruising factor associated with the apple + */ + public int getBruising() + { + return bruising; + } + + + /** + * Serializes the apple object. + * + * @param oos stream that the object is written to + */ + private void writeObject( java.io.ObjectOutputStream oos ) + throws IOException + { + // TODO: implement + } + + + /** + * Reads in the apple object. + * + * @param ois stream that the object is read from + */ + private void readObject( java.io.ObjectInputStream ois ) + throws IOException, ClassNotFoundException + { + // TODO: implement + } +} + +/** + * Stub class to represent apple peeling. + */ +class ApplePealer +{ + /** + * Stub for peeling the apple. + */ + public void peelApple() { + System.out.println( ">> peeling the apple..." ); + } +} diff --git a/tests/ajdoc/input/applesAspectJ/AppleCrate.java b/tests/ajdoc/input/applesAspectJ/AppleCrate.java new file mode 100644 index 000000000..fb9457006 --- /dev/null +++ b/tests/ajdoc/input/applesAspectJ/AppleCrate.java @@ -0,0 +1,52 @@ + +import java.io.Serializable; +import java.io.IOException; + +/** + * This class represents an apple crate that is used for transporting apples. + * The apples are contained in an array of <CODE>Apple</CODE> objects. + * + * @author Mik Kersten + * @version $Version$ + * + * @see Apple + */ + +public class AppleCrate implements Serializable +{ + Apple[] crateContents = null; + + /** + * Default constructor. + * + * @param newCrateContents an array of <CODE>Apple</CODE> objects + */ + public AppleCrate( Apple[] newCrateContents ) + { + crateContents = newCrateContents; + } + + /** + * A crate is sellable if the apples are bruised 50% or less on average. + * + * @return <CODE>true</CODE> if the the apples can be sold + */ + public boolean isSellable() + { + int bruising = 0; + for ( int i = 0; i < crateContents.length; i++ ) + { + bruising = bruising + crateContents[i].getBruising(); + } + + if ( (bruising/crateContents.length) > 50 ) + { + return false; + } + else + { + return true; + } + } + +}
\ No newline at end of file diff --git a/tests/ajdoc/input/applesAspectJ/BigRigAspect.java b/tests/ajdoc/input/applesAspectJ/BigRigAspect.java new file mode 100644 index 000000000..32b1577be --- /dev/null +++ b/tests/ajdoc/input/applesAspectJ/BigRigAspect.java @@ -0,0 +1,22 @@ + +/** + * This aspect represents upacking apples after an airplane trip. + * + * @author Mik Kersten + * @version $Version$ + */ + +public class BigRigAspect extends TransportAspect +{ + /** + * Bruise apples with a bruising factor of 15 after unpacking. + */ + static advice unpackCrosscut() { + after { + bruise( 40 ); + } + before { + bruise( 10 ); + } + } +} diff --git a/tests/ajdoc/input/applesAspectJ/TransportAspect.java b/tests/ajdoc/input/applesAspectJ/TransportAspect.java new file mode 100644 index 000000000..1e9ac2eda --- /dev/null +++ b/tests/ajdoc/input/applesAspectJ/TransportAspect.java @@ -0,0 +1,44 @@ + +/** + * This aspect crosscuts the process of shipping apples. + * + * @author Mik Kersten + * @version $Version$ + */ + +public class TransportAspect +{ + private introduction AppleCrate + { + + /** + * Represents the name of the given crate. Initialized to be + * a placeholder. + */ + private String crateName = "temp crate"; + + /** + * Bruises each apple in the crate according to the bruise facor. The bruise + * factor is an integer that is passed as a parameter. + */ + private void bruiser( int bruiseFactor ) + { + for ( int i = 0; i < crateContents.length; i++ ) + { + crateContents[i].bruise( bruiseFactor ); + } + } + } + + /** + * Crosscut <CODE>Apple</CODE> serialization methods. This can be used for bruising + * apples and doing other silly things when the apples are being packed. + */ + crosscut packCrosscut(): Apple && void writeObject( java.io.ObjectOutputStream out ); + + /** + * Crosscut <CODE>Apple</CODE> de-serialization methods. This can be used for doing + * silly things. It is to be used when the apples are unpacked. + */ + crosscut unpackCrosscut(): Apple && void readObject( java.io.ObjectInputStream in ); +} diff --git a/tests/ajdoc/input/applesJava/Apple.java b/tests/ajdoc/input/applesJava/Apple.java new file mode 100644 index 000000000..08a4724ca --- /dev/null +++ b/tests/ajdoc/input/applesJava/Apple.java @@ -0,0 +1,114 @@ + +import java.io.Serializable; +import java.io.IOException; + +/** + * This class represents an apple that has the following two attributes + * <UL> + * <LI>a variety (i.e. "Macintosh" or "Granny Smith") + * <LI>a brusing factor represnting how badly bruised the apple is + * </UL> + * + * @author Mik Kersten + * @version $Version$ + */ + +public class Apple implements Serializable +{ + private String variety = null; + private int bruising = 0; + + /** + * Default constructor. + * + * @param newVariety the type of variety for this apple + */ + public Apple( String newVariety ) + { + variety = newVariety; + } + + /** + * This inner class represents apple seeds. + */ + public class AppleSeed { + private int weight = 0; + private SeedContents seedContents = null; + + /** + * This is how you get poison from the apple. + */ + public void getArsenic() { + System.out.println( ">> getting arsenic" ); + } + + /** + * Reperesents the contents of the seeds. + */ + public class SeedContents { + public String core = null; + public String shell = null; + } + } + + /** + * Sets the bruising factor of the apple. + * + * @param bruiseFactor the new bruising factor + */ + public void bruise( int bruiseFactor ) + { + bruising = bruising + bruiseFactor; + + if ( bruising > 100 ) bruising = 100; + if ( bruising < 0 ) bruising = 0; + } + + + /** + * Returns the bruising factor. + * + * @return bruising the bruising factor associated with the apple + */ + public int getBruising() + { + return bruising; + } + + + /** + * Serializes the apple object. + * + * @param oos stream that the object is written to + */ + private void writeObject( java.io.ObjectOutputStream oos ) + throws IOException + { + // TODO: implement + } + + + /** + * Reads in the apple object. + * + * @param ois stream that the object is read from + */ + private void readObject( java.io.ObjectInputStream ois ) + throws IOException, ClassNotFoundException + { + // TODO: implement + } +} + +/** + * Stub class to represent apple peeling. + */ +class ApplePealer +{ + /** + * Stub for peeling the apple. + */ + public void peelApple() { + System.out.println( ">> peeling the apple..." ); + } +} diff --git a/tests/ajdoc/input/applesJava/AppleCrate.java b/tests/ajdoc/input/applesJava/AppleCrate.java new file mode 100644 index 000000000..fb9457006 --- /dev/null +++ b/tests/ajdoc/input/applesJava/AppleCrate.java @@ -0,0 +1,52 @@ + +import java.io.Serializable; +import java.io.IOException; + +/** + * This class represents an apple crate that is used for transporting apples. + * The apples are contained in an array of <CODE>Apple</CODE> objects. + * + * @author Mik Kersten + * @version $Version$ + * + * @see Apple + */ + +public class AppleCrate implements Serializable +{ + Apple[] crateContents = null; + + /** + * Default constructor. + * + * @param newCrateContents an array of <CODE>Apple</CODE> objects + */ + public AppleCrate( Apple[] newCrateContents ) + { + crateContents = newCrateContents; + } + + /** + * A crate is sellable if the apples are bruised 50% or less on average. + * + * @return <CODE>true</CODE> if the the apples can be sold + */ + public boolean isSellable() + { + int bruising = 0; + for ( int i = 0; i < crateContents.length; i++ ) + { + bruising = bruising + crateContents[i].getBruising(); + } + + if ( (bruising/crateContents.length) > 50 ) + { + return false; + } + else + { + return true; + } + } + +}
\ No newline at end of file diff --git a/tests/ajdoc/input/applesJava/BigRigAspect.java b/tests/ajdoc/input/applesJava/BigRigAspect.java new file mode 100644 index 000000000..05be8a5e7 --- /dev/null +++ b/tests/ajdoc/input/applesJava/BigRigAspect.java @@ -0,0 +1,15 @@ + +/** + * This aspect represents upacking apples after an airplane trip. + * + * @author Mik Kersten + * @version $Version$ + */ + +public class BigRigAspect extends TransportAspect +{ + /** + * Default constructor + */ + public BigRigAspect() {} +} diff --git a/tests/ajdoc/input/applesJava/TransportAspect.java b/tests/ajdoc/input/applesJava/TransportAspect.java new file mode 100644 index 000000000..b9256998f --- /dev/null +++ b/tests/ajdoc/input/applesJava/TransportAspect.java @@ -0,0 +1,24 @@ + +/** + * This aspect crosscuts the process of shipping apples. + * + * @author Mik Kersten + * @version $Version$ + */ + +public class TransportAspect +{ + private String crateName = "temp crate"; + + /** + * Bruises each apple in the crate according to the bruise facor. The bruise + * factor is an integer that is passed as a parameter. + */ + private void bruiser( int bruiseFactor ) + { + for ( int i = 0; i < 5; i++ ) + { + System.out.println( "bruising" ); + } + } +} diff --git a/tests/ajdoc/input/pkgExample/Class1.java b/tests/ajdoc/input/pkgExample/Class1.java new file mode 100644 index 000000000..f551cea93 --- /dev/null +++ b/tests/ajdoc/input/pkgExample/Class1.java @@ -0,0 +1,16 @@ + +import aPack.I1; + +public class Class1 implements aPack.I1 +{ + public void method1() { + } + + private void method2() { + } +} + +class Class1A +{ + static final String FOO = "foo"; +}
\ No newline at end of file diff --git a/tests/ajdoc/input/pkgExample/aPack/Class2.java b/tests/ajdoc/input/pkgExample/aPack/Class2.java new file mode 100644 index 000000000..335cd239b --- /dev/null +++ b/tests/ajdoc/input/pkgExample/aPack/Class2.java @@ -0,0 +1,7 @@ + +package aPack; + +class Class2 +{ + static final String BAR = "bar"; +} diff --git a/tests/ajdoc/input/pkgExample/aPack/I1.java b/tests/ajdoc/input/pkgExample/aPack/I1.java new file mode 100644 index 000000000..0c0f6bdf1 --- /dev/null +++ b/tests/ajdoc/input/pkgExample/aPack/I1.java @@ -0,0 +1,7 @@ + +package aPack; + +public interface I1 +{ + public void method1(); +} diff --git a/tests/ajdoc/input/pkgExample/bPack/cPack/Class3.java b/tests/ajdoc/input/pkgExample/bPack/cPack/Class3.java new file mode 100644 index 000000000..6c4169a90 --- /dev/null +++ b/tests/ajdoc/input/pkgExample/bPack/cPack/Class3.java @@ -0,0 +1,12 @@ +package bPack.cPack; + +public class Class3 +{ + /** + * Nothing doing. + */ + public void doNothingAtAll() + { + + } +} diff --git a/tests/ajdoc/package.html b/tests/ajdoc/package.html new file mode 100644 index 000000000..1b1c9799f --- /dev/null +++ b/tests/ajdoc/package.html @@ -0,0 +1,18 @@ +<html> +<body> +This is an incomplete attempt to write regression tests for ajdoc by +comparison with javadoc. It aims to run both tools against the +same pure-java sources and compare the output line-by-line, assuming +they should be the same where non-AspectJ elements are concerned. +<p> +It relies entirely on CLASSPATH and PATH being set correctly, and it +generates output directory in the current working directory. +<p> +General example of how to run: +<li>Compile the sources</li> +<li>Setup CLASSPATH, including compiled sources and JDK tools.jar (for javadoc)</li> +<li>Setup PATH, so that "java" invokes a 1.2 or later java vm </li> +<li>Invoke from the directory with input/ as a subdirectory: +<br><code>java JavadocCompareClassMode</code></li> +</body> +</html> diff --git a/tests/ant/etc/ajc.xml b/tests/ant/etc/ajc.xml new file mode 100644 index 000000000..c261837c8 --- /dev/null +++ b/tests/ant/etc/ajc.xml @@ -0,0 +1,406 @@ +<project name="ajc.test" basedir="." default="init"> + + <!-- caller should define compile.classpath and ajc.taskdef.classpath --> + <property file="${basedir}/local.properties"/> + <property name="ant.test.src.dir" value="../src" /> + + <target name="init"> + <tstamp/> + <taskdef name="ajc" classname="org.aspectj.tools.ant.taskdefs.Ajc" + classpath="${ajc.taskdef.classpath}"/> + </target> + + <target name="all" depends="init"> + <antcall target="test1"/> + <antcall target="test2"/> + <antcall target="test3"/> + <antcall target="test4"/> + <antcall target="test4b"/> + <antcall target="test5"/> + <antcall target="test5b"/> + <antcall target="test6"/> + <antcall target="test8"/> + <antcall target="test9"/> + <antcall target="test10"/> + <antcall target="test11"/> + <antcall target="test12"/> + <antcall target="test13"/> + <antcall target="test14"/> +<!-- todo failures are killing the run at this time + <antcall target="fail1" /> + <antcall target="fail2" /> + <antcall target="fail3" /> +--> + </target> + + <target name="test1" depends="init"> + <mkdir dir="${ant.test.classes}"/> + <ajc srcdir="${ant.test.src.dir}" + destdir="${ant.test.classes}" + includes="One.java" + classpath="${compile.classpath}" + /> + + </target> + + <target name="test2" depends="init"> + <mkdir dir="${ant.test.classes}"/> + <ajc srcdir="${ant.test.src.dir}" + destdir="${ant.test.classes}" + includes="One.java,Two.java" + classpath="${compile.classpath}" + /> + </target> + + <target name="test3" depends="init"> + <mkdir dir="${ant.test.classes}"/> + <ajc srcdir="${ant.test.src.dir}" + destdir="${ant.test.classes}" + includes="*" + classpath="${compile.classpath}" + /> + </target> + + <target name="test4" depends="init"> + <mkdir dir="${ant.test.classes}"/> + <ajc srcdir="${ant.test.src.dir}" + destdir="${ant.test.classes}" + argfiles="${ant.test.src.dir}/files1.lst" + classpath="${compile.classpath}" + /> + </target> + + <target name="test4b" depends="init"> + <mkdir dir="${ant.test.classes}"/> + <ajc + destdir="${ant.test.classes}" + argfiles="${ant.test.src.dir}/files1.lst" + classpath="${compile.classpath}" + /> + </target> + + <target name="test5" depends="init"> + <mkdir dir="${ant.test.classes}"/> + <ajc srcdir="${ant.test.src.dir}" + destdir="${ant.test.classes}" + argfiles="${ant.test.src.dir}/files2.lst" + classpath="${compile.classpath}" + /> + </target> + + <target name="test5b" depends="init"> + <mkdir dir="${ant.test.classes}"/> + <ajc + destdir="${ant.test.classes}" + argfiles="${ant.test.src.dir}/files2.lst" + classpath="${compile.classpath}" + /> + </target> + + <target name="test6" depends="init"> + <mkdir dir="${ant.test.classes}"/> + <ajc srcdir="${ant.test.src.dir}" + destdir="${ant.test.classes}" + argfiles="${ant.test.src.dir}/files3.lst" + classpath="${compile.classpath}" + /> + </target> + + <target name="test6b" depends="init"> + <mkdir dir="${ant.test.classes}"/> + <ajc + destdir="${ant.test.classes}" + argfiles="${ant.test.src.dir}/files3.lst" + classpath="${compile.classpath}" + /> + </target> + + <target name="test8" depends="init"> + <mkdir dir="${ant.test.classes}"/> + <ajc srcdir="${ant.test.src.dir}" + destdir="${ant.test.classes}" + excludes="Two.java" + argfiles="${ant.test.src.dir}/files2.lst" + classpath="${compile.classpath}" + /> + </target> + + <target name="test9" depends="init"> + <mkdir dir="${ant.test.classes}"/> + <ajc srcdir="${ant.test.src.dir}" + destdir="${ant.test.classes}" + includes="One.java" + threads="1" + classpath="${compile.classpath}" + /> + </target> + + <target name="test10" depends="init"> + <mkdir dir="${ant.test.classes}"/> + <ajc srcdir="${ant.test.src.dir}" + destdir="${ant.test.classes}" + includes="One.java" + nocomments="yes" + classpath="${compile.classpath}" + /> + </target> + + <target name="test11" depends="init"> + <mkdir dir="${ant.test.classes}"/> + <ajc srcdir="${ant.test.src.dir}" + destdir="${ant.test.classes}" + includes="One.java" + nosymbols="yes" + classpath="${compile.classpath}" + /> + </target> + + <target name="test12" depends="init"> + <mkdir dir="${ant.test.classes}"/> + <ajc srcdir="${ant.test.src.dir}" + destdir="${ant.test.classes}" + includes="One.java" + preprocess="yes" + classpath="${compile.classpath}" + /> + </target> + + <target name="test13" depends="init"> + <mkdir dir="${ant.test.classes}"/> + <ajc srcdir="${ant.test.src.dir}" + destdir="${ant.test.classes}" + includes="One.java" + workingdir="ajworkingdir" + classpath="${compile.classpath}" + /> + </target> + <target name="test14" depends="init" + description="TestCase for PR#557 (NPE when logging if no optional destdir)"> + <mkdir dir="${ant.test.classes}"/> + <ajc srcdir="${ant.test.src.dir}" + includes="One.java" + classpath="${compile.classpath}" + /> + </target> + + + <target name="fail1" depends="init"> + <mkdir dir="${ant.test.classes}"/> + <ajc + destdir="${ant.test.classes}" + includes="One.java" + classpath="${compile.classpath}" + failonerror="no" + /> + </target> + + <target name="fail2" depends="init"> + <mkdir dir="${ant.test.classes}"/> + <ajc + destdir="${ant.test.classes}" + excludes="One.java" + classpath="${compile.classpath}" + failonerror="no" + /> + </target> + + <target name="fail3" depends="init"> + <mkdir dir="${ant.test.classes}"/> + <ajc + destdir="${ant.test.classes}" + includes="Two.java" + excludes="One.java" + classpath="${compile.classpath}" + /> + </target> + + <!-- forked --> + + <target name="test1_fork" depends="init"> + <mkdir dir="${ant.test.classes}"/> + <ajc srcdir="${ant.test.src.dir}" + destdir="${ant.test.classes}" + includes="One.java" + fork="yes" + classpath="${compile.classpath}" + /> + </target> + + <target name="test2_fork" depends="init"> + <mkdir dir="${ant.test.classes}"/> + <ajc srcdir="${ant.test.src.dir}" + destdir="${ant.test.classes}" + includes="One.java,Two.java" + fork="yes" + classpath="${compile.classpath}" + /> + </target> + + <target name="test3_fork" depends="init"> + <mkdir dir="${ant.test.classes}"/> + <ajc srcdir="${ant.test.src.dir}" + destdir="${ant.test.classes}" + includes="*" + fork="yes" + classpath="${compile.classpath}" + /> + </target> + + <target name="test4_fork" depends="init"> + <mkdir dir="${ant.test.classes}"/> + <ajc srcdir="${ant.test.src.dir}" + destdir="${ant.test.classes}" + argfiles="${ant.test.src.dir}/files1.lst" + classpath="${compile.classpath}" + fork="yes" + /> + </target> + + <target name="test4b_fork" depends="init"> + <mkdir dir="${ant.test.classes}"/> + <ajc + destdir="${ant.test.classes}" + argfiles="${ant.test.src.dir}/files1.lst" + fork="yes" + classpath="${compile.classpath}" + /> + </target> + + <target name="test5_fork" depends="init"> + <mkdir dir="${ant.test.classes}"/> + <ajc srcdir="${ant.test.src.dir}" + destdir="${ant.test.classes}" + argfiles="${ant.test.src.dir}/files2.lst" + fork="yes" + classpath="${compile.classpath}" + /> + </target> + + <target name="test5b_fork" depends="init"> + <mkdir dir="${ant.test.classes}"/> + <ajc + destdir="${ant.test.classes}" + argfiles="${ant.test.src.dir}/files2.lst" + fork="yes" + classpath="${compile.classpath}" + /> + </target> + + <target name="test6_fork" depends="init"> + <mkdir dir="${ant.test.classes}"/> + <ajc srcdir="${ant.test.src.dir}" + destdir="${ant.test.classes}" + argfiles="${ant.test.src.dir}/files3.lst" + fork="yes" + classpath="${compile.classpath}" + /> + </target> + + <target name="test6b_fork" depends="init"> + <mkdir dir="${ant.test.classes}"/> + <ajc + destdir="${ant.test.classes}" + argfiles="${ant.test.src.dir}/files3.lst" + fork="yes" + classpath="${compile.classpath}" + /> + </target> + + <target name="test8_fork" depends="init"> + <mkdir dir="${ant.test.classes}"/> + <ajc srcdir="${ant.test.src.dir}" + destdir="${ant.test.classes}" + excludes="Two.java" + argfiles="${ant.test.src.dir}/files2.lst" + fork="yes" + classpath="${compile.classpath}" + /> + </target> + + <target name="test9_fork" depends="init"> + <mkdir dir="${ant.test.classes}"/> + <ajc srcdir="${ant.test.src.dir}" + destdir="${ant.test.classes}" + includes="One.java" + threads="1" + fork="yes" + classpath="${compile.classpath}" + /> + </target> + + <target name="test10_fork" depends="init"> + <mkdir dir="${ant.test.classes}"/> + <ajc srcdir="${ant.test.src.dir}" + destdir="${ant.test.classes}" + includes="One.java" + nocomments="yes" + fork="yes" + classpath="${compile.classpath}" + /> + </target> + + <target name="test11_fork" depends="init"> + <mkdir dir="${ant.test.classes}"/> + <ajc srcdir="${ant.test.src.dir}" + destdir="${ant.test.classes}" + includes="One.java" + nosymbols="yes" + fork="yes" + classpath="${compile.classpath}" + /> + </target> + + <target name="test12_fork" depends="init"> + <mkdir dir="${ant.test.classes}"/> + <ajc srcdir="${ant.test.src.dir}" + destdir="${ant.test.classes}" + includes="One.java" + preprocess="yes" + fork="yes" + classpath="${compile.classpath}" + /> + </target> + + <target name="test13_fork" depends="init"> + <mkdir dir="${ant.test.classes}"/> + <ajc srcdir="${ant.test.src.dir}" + destdir="${ant.test.classes}" + includes="One.java" + workingdir="ajworkingdir" + fork="yes" + classpath="${compile.classpath}" + /> + </target> + + <target name="fail1_fork" depends="init"> + <mkdir dir="${ant.test.classes}"/> + <ajc + destdir="${ant.test.classes}" + includes="One.java" + fork="yes" + classpath="${compile.classpath}" + /> + </target> + + <target name="fail2_fork" depends="init"> + <mkdir dir="${ant.test.classes}"/> + <ajc + destdir="${ant.test.classes}" + excludes="One.java" + fork="yes" + classpath="${compile.classpath}" + /> + </target> + + <target name="fail3_fork" depends="init"> + <mkdir dir="${ant.test.classes}"/> + <ajc + destdir="${ant.test.classes}" + includes="Two.java" + excludes="One.java" + fork="yes" + classpath="${compile.classpath}" + /> + </target> + +</project> diff --git a/tests/ant/etc/ajc2.xml b/tests/ant/etc/ajc2.xml new file mode 100644 index 000000000..283dd509b --- /dev/null +++ b/tests/ant/etc/ajc2.xml @@ -0,0 +1,201 @@ +<project name="ajc2.test" basedir="." default="init"> + + <property name="ant.test.src.dir" value="../src" /> + <property name="ant.test.classes" value="test-classes"/> + + <target name="init"> + <tstamp/> + <taskdef name="ajc" classname="org.aspectj.tools.ant.taskdefs.Ajc2" + classpath="${ajc.taskdef.classpath}" /> + </target> + + <target name="all" depends="init"> + <antcall target="test1"/> + <antcall target="test2"/> + <antcall target="test3"/> + <antcall target="test4"/> + <antcall target="test4b"/> + <antcall target="test5"/> + <antcall target="test5b"/> + <antcall target="test6"/> + <antcall target="test8"/> + <antcall target="test9"/> + <antcall target="test10"/> + <antcall target="test11"/> + <antcall target="test12"/> + <antcall target="test13"/> + <antcall target="fail1"/> + <antcall target="fail2"/> + <antcall target="fail3"/> + </target> + + <target name="test1" depends="init"> + <mkdir dir="${ant.test.classes}"/> + <ajc srcdir="${ant.test.src.dir}" + destdir="${ant.test.classes}" + includes="One.java" + classpath="${compile.classpath}" + /> + </target> + + <target name="test2" depends="init"> + <mkdir dir="${ant.test.classes}"/> + <ajc srcdir="${ant.test.src.dir}" + destdir="${ant.test.classes}" + includes="One.java,Two.java" + classpath="${compile.classpath}" + /> + </target> + + <target name="test3" depends="init"> + <mkdir dir="${ant.test.classes}"/> + <ajc srcdir="${ant.test.src.dir}" + destdir="${ant.test.classes}" + includes="*" + classpath="${compile.classpath}" + /> + </target> + + <target name="test4" depends="init"> + <mkdir dir="${ant.test.classes}"/> + <ajc srcdir="${ant.test.src.dir}" + destdir="${ant.test.classes}" + argfiles="${ant.test.src.dir}/files1.lst" + classpath="${compile.classpath}" + /> + </target> + + <target name="test4b" depends="init"> + <mkdir dir="${ant.test.classes}"/> + <ajc + destdir="${ant.test.classes}" + argfiles="${ant.test.src.dir}/files1.lst" + classpath="${compile.classpath}" + /> + </target> + + <target name="test5" depends="init"> + <mkdir dir="${ant.test.classes}"/> + <ajc srcdir="${ant.test.src.dir}" + destdir="${ant.test.classes}" + argfiles="${ant.test.src.dir}/files2.lst" + classpath="${compile.classpath}" + /> + </target> + + <target name="test5b" depends="init"> + <mkdir dir="${ant.test.classes}"/> + <ajc + destdir="${ant.test.classes}" + argfiles="${ant.test.src.dir}/files2.lst" + classpath="${compile.classpath}" + /> + </target> + + <target name="test6" depends="init"> + <mkdir dir="${ant.test.classes}"/> + <ajc srcdir="${ant.test.src.dir}" + destdir="${ant.test.classes}" + argfiles="${ant.test.src.dir}/files3.lst" + classpath="${compile.classpath}" + /> + </target> + + <target name="test6b" depends="init"> + <mkdir dir="${ant.test.classes}"/> + <ajc + destdir="${ant.test.classes}" + argfiles="${ant.test.src.dir}/files3.lst" + classpath="${compile.classpath}" + /> + </target> + + <target name="test8" depends="init"> + <mkdir dir="${ant.test.classes}"/> + <ajc srcdir="${ant.test.src.dir}" + destdir="${ant.test.classes}" + excludes="Two.java" + argfiles="${ant.test.src.dir}/files2.lst" + classpath="${compile.classpath}" + /> + </target> + + <target name="test9" depends="init"> + <mkdir dir="${ant.test.classes}"/> + <ajc srcdir="${ant.test.src.dir}" + destdir="${ant.test.classes}" + includes="One.java" + threads="1" + classpath="${compile.classpath}" + /> + </target> + + <target name="test10" depends="init"> + <mkdir dir="${ant.test.classes}"/> + <ajc srcdir="${ant.test.src.dir}" + destdir="${ant.test.classes}" + includes="One.java" + nocomments="yes" + classpath="${compile.classpath}" + /> + </target> + + <target name="test11" depends="init"> + <mkdir dir="${ant.test.classes}"/> + <ajc srcdir="${ant.test.src.dir}" + destdir="${ant.test.classes}" + includes="One.java" + nosymbols="yes" + classpath="${compile.classpath}" + /> + </target> + + <target name="test12" depends="init"> + <mkdir dir="${ant.test.classes}"/> + <ajc srcdir="${ant.test.src.dir}" + destdir="${ant.test.classes}" + includes="One.java" + preprocess="yes" + classpath="${compile.classpath}" + /> + </target> + + <target name="test13" depends="init"> + <mkdir dir="${ant.test.classes}"/> + <ajc srcdir="${ant.test.src.dir}" + destdir="${ant.test.classes}" + includes="One.java" + workingdir="ajworkingdir" + classpath="${compile.classpath}" + /> + </target> + + <target name="fail1" depends="init"> + <mkdir dir="${ant.test.classes}"/> + <ajc + destdir="${ant.test.classes}" + includes="One.java" + classpath="${compile.classpath}" + /> + </target> + + <target name="fail2" depends="init"> + <mkdir dir="${ant.test.classes}"/> + <ajc + destdir="${ant.test.classes}" + excludes="One.java" + classpath="${compile.classpath}" + /> + </target> + + <target name="fail3" depends="init"> + <mkdir dir="${ant.test.classes}"/> + <ajc + destdir="${ant.test.classes}" + includes="Two.java" + excludes="One.java" + classpath="${compile.classpath}" + /> + </target> + +</project> diff --git a/tests/ant/etc/ajclean.xml b/tests/ant/etc/ajclean.xml new file mode 100644 index 000000000..e3c893c26 --- /dev/null +++ b/tests/ant/etc/ajclean.xml @@ -0,0 +1,318 @@ +<project name="ajc.test" basedir="." default="init"> + + <property name="ant.test.sources" value="../src" /> + <property name="ant.test.classes" value="test-classes"/> + + <target name="init"> + <tstamp/> + <taskdef name="ajc" classname="org.aspectj.tools.ant.taskdefs.Ajc"/> + <taskdef name="ajclean" classname="org.aspectj.tools.ant.taskdefs.Ajclean"/> + </target> + + <target name="test1" depends="init"> + <ajc srcdir="${ant.test.sources}" + destdir="${ant.test.classes}" + includes="One.java" + /> + <ajclean srcdir="${ant.test.sources}" + destdir="${ant.test.classes}" + includes="One.java" + /> + </target> + + <target name="test2" depends="init"> + <ajc srcdir="${ant.test.sources}" + destdir="${ant.test.classes}" + includes="One.java,Two.java" + /> + <ajclean srcdir="${ant.test.sources}" + destdir="${ant.test.classes}" + includes="One.java,Two.java" + /> + </target> + + <target name="test3" depends="init"> + <ajc srcdir="${ant.test.sources}" + destdir="${ant.test.classes}" + includes="*" + /> + <ajclean srcdir="${ant.test.sources}" + destdir="${ant.test.classes}" + includes="*" + /> + </target> + + <target name="test4" depends="init"> + <ajc srcdir="${ant.test.sources}" + destdir="${ant.test.classes}" + argfiles="${ant.test.sources}/files1.lst" + /> + <ajclean srcdir="${ant.test.sources}" + destdir="${ant.test.classes}" + argfiles="${ant.test.sources}/files1.lst" + /> + </target> + + <target name="test4b" depends="init"> + <ajc + destdir="${ant.test.classes}" + argfiles="${ant.test.sources}/files1.lst" + /> + <ajclean + destdir="${ant.test.classes}" + argfiles="${ant.test.sources}/files1.lst" + /> + </target> + + <target name="test5" depends="init"> + <ajc srcdir="${ant.test.sources}" + destdir="${ant.test.classes}" + argfiles="${ant.test.sources}/files2.lst" + /> + <ajclean srcdir="${ant.test.sources}" + destdir="${ant.test.classes}" + argfiles="${ant.test.sources}/files2.lst" + /> + </target> + + <target name="test5b" depends="init"> + <ajc + destdir="${ant.test.classes}" + argfiles="${ant.test.sources}/files2.lst" + /> + <ajclean + destdir="${ant.test.classes}" + argfiles="${ant.test.sources}/files2.lst" + /> + </target> + + <target name="test6" depends="init"> + <ajc srcdir="${ant.test.sources}" + destdir="${ant.test.classes}" + argfiles="${ant.test.sources}/files3.lst" + /> + <ajclean srcdir="${ant.test.sources}" + destdir="${ant.test.classes}" + argfiles="${ant.test.sources}/files3.lst" + /> + </target> + + <target name="test6b" depends="init"> + <ajc + destdir="${ant.test.classes}" + argfiles="${ant.test.sources}/files3.lst" + /> + <ajclean + destdir="${ant.test.classes}" + argfiles="${ant.test.sources}/files3.lst" + /> + </target> + + <target name="test8" depends="init"> + <ajc srcdir="${ant.test.sources}" + destdir="${ant.test.classes}" + excludes="Two.java" + argfiles="${ant.test.sources}/files2.lst" + /> + <ajclean srcdir="${ant.test.sources}" + destdir="${ant.test.classes}" + excludes="Two.java" + argfiles="${ant.test.sources}/files2.lst" + /> + </target> + + <target name="test9" depends="init"> + <ajc srcdir="${ant.test.sources}" + destdir="${ant.test.classes}" + includes="One.java" + threads="1" + /> + <ajclean srcdir="${ant.test.sources}" + destdir="${ant.test.classes}" + includes="One.java" + threads="1" + /> + </target> + + <target name="test10" depends="init"> + <ajc srcdir="${ant.test.sources}" + destdir="${ant.test.classes}" + includes="One.java" + nocomments="yes" + /> + <ajclean srcdir="${ant.test.sources}" + destdir="${ant.test.classes}" + includes="One.java" + nocomments="yes" + /> + </target> + + <target name="test11" depends="init"> + <ajc srcdir="${ant.test.sources}" + destdir="${ant.test.classes}" + includes="One.java" + nosymbols="yes" + /> + <ajclean srcdir="${ant.test.sources}" + destdir="${ant.test.classes}" + includes="One.java" + nosymbols="yes" + /> + </target> + + <target name="test12" depends="init"> + <ajc srcdir="${ant.test.sources}" + destdir="${ant.test.classes}" + includes="One.java" + preprocess="yes" + /> + <ajclean srcdir="${ant.test.sources}" + destdir="${ant.test.classes}" + includes="One.java" + preprocess="yes" + /> + </target> + + <target name="test13" depends="init"> + <ajc srcdir="${ant.test.sources}" + destdir="${ant.test.classes}" + includes="One.java" + workingdir="ajworkingdir" + /> + <ajclean srcdir="${ant.test.sources}" + destdir="${ant.test.classes}" + includes="One.java" + workingdir="ajworkingdir" + /> + </target> + + + <!-- Everything --> + + <target name="test1star" depends="init"> + <ajc srcdir="${ant.test.sources}" + destdir="${ant.test.classes}" + includes="One.java" + /> + <ajclean srcdir="${ant.test.sources}"/> + </target> + + <target name="test2star" depends="init"> + <ajc srcdir="${ant.test.sources}" + destdir="${ant.test.classes}" + includes="One.java,Two.java" + /> + <ajclean srcdir="${ant.test.sources}"/> + </target> + + <target name="test3star" depends="init"> + <ajc srcdir="${ant.test.sources}" + destdir="${ant.test.classes}" + includes="*" + /> + <ajclean srcdir="${ant.test.sources}"/> + </target> + + <target name="test4star" depends="init"> + <ajc srcdir="${ant.test.sources}" + destdir="${ant.test.classes}" + argfiles="${ant.test.sources}/files1.lst" + /> + <ajclean srcdir="${ant.test.sources}"/> + </target> + + <target name="test4bstar" depends="init"> + <ajc + destdir="${ant.test.classes}" + argfiles="${ant.test.sources}/files1.lst" + /> + <ajclean srcdir="${ant.test.sources}"/> + </target> + + <target name="test5star" depends="init"> + <ajc srcdir="${ant.test.sources}" + destdir="${ant.test.classes}" + argfiles="${ant.test.sources}/files2.lst" + /> + <ajclean srcdir="${ant.test.sources}"/> + </target> + + <target name="test5bstar" depends="init"> + <ajc + destdir="${ant.test.classes}" + argfiles="${ant.test.sources}/files2.lst" + /> + <ajclean srcdir="${ant.test.sources}"/> + </target> + + <target name="test6star" depends="init"> + <ajc srcdir="${ant.test.sources}" + destdir="${ant.test.classes}" + argfiles="${ant.test.sources}/files3.lst" + /> + <ajclean srcdir="${ant.test.sources}"/> + </target> + + <target name="test6bstar" depends="init"> + <ajc + destdir="${ant.test.classes}" + argfiles="${ant.test.sources}/files3.lst" + /> + <ajclean srcdir="${ant.test.sources}"/> + </target> + + <target name="test8star" depends="init"> + <ajc srcdir="${ant.test.sources}" + destdir="${ant.test.classes}" + excludes="Two.java" + argfiles="${ant.test.sources}/files2.lst" + /> + <ajclean srcdir="${ant.test.sources}"/> + </target> + + <target name="test9star" depends="init"> + <ajc srcdir="${ant.test.sources}" + destdir="${ant.test.classes}" + includes="One.java" + threads="1" + /> + <ajclean srcdir="${ant.test.sources}"/> + </target> + + <target name="test10star" depends="init"> + <ajc srcdir="${ant.test.sources}" + destdir="${ant.test.classes}" + includes="One.java" + nocomments="yes" + /> + <ajclean srcdir="${ant.test.sources}"/> + </target> + + <target name="test11star" depends="init"> + <ajc srcdir="${ant.test.sources}" + destdir="${ant.test.classes}" + includes="One.java" + nosymbols="yes" + /> + <ajclean srcdir="${ant.test.sources}"/> + </target> + + <target name="test12star" depends="init"> + <ajc srcdir="${ant.test.sources}" + destdir="${ant.test.classes}" + includes="One.java" + preprocess="yes" + /> + <ajclean srcdir="${ant.test.sources}"/> + </target> + + <target name="test13star" depends="init"> + <ajc srcdir="${ant.test.sources}" + destdir="${ant.test.classes}" + includes="One.java" + workingdir="ajworkingdir" + /> + <ajclean srcdir="${ant.test.sources}"/> + </target> + +</project> diff --git a/tests/ant/etc/ajdoc.xml b/tests/ant/etc/ajdoc.xml new file mode 100644 index 000000000..58803bb8a --- /dev/null +++ b/tests/ant/etc/ajdoc.xml @@ -0,0 +1,545 @@ +<project name="ajdoc.test" basedir="." default="test"> + + <!-- this file defines ant.test.src.dir, ant.test.doc.dir todo remove local defs--> + <property file="${basedir}/local.properties"/> + + <target name="init"> + <tstamp/> + <taskdef name="ajdoc" classname="org.aspectj.tools.ant.taskdefs.Ajdoc" + classpath="${ajc.taskdef.classpath}" /> + </target> + +<!-- fail998 ,fail999 --> + <target name="test" + depends="test985 + ,test986 + ,test987 + ,test988 + ,test989 + ,test990 + ,test991 + ,test992 + ,test993 + ,test994 + ,test995 + ,test996 + ,test997 + ,test998 + ,test999 + ,test_author_no + ,test_author_yes + ,test_bottom + ,test_doctitle + ,test_footer + ,test_header + ,test_helpfile + ,test_nodeprecated_no + ,test_nodeprecated_yes + ,test_nodeprecatedlist_no + ,test_nodeprecatedlist_yes + ,test_nohelp_no + ,test_nohelp_yes + ,test_noindex_no + ,test_noindex_yes + ,test_notree_no + ,test_notree_yes + ,test_package_no + ,test_package_yes + ,test_private_no + ,test_private_yes + ,test_protected_no + ,test_protected_yes + ,test_public_no + ,test_public_yes + ,test_splitindex_no + ,test_splitindex_yes + ,test_stylesheetfile + ,test_use_no + ,test_use_yes + ,test_standard_no + ,test_standard_yes + ,test_windowtitle"/> + + <target name="fail998" depends="init"> + <mkdir dir="${ant.test.doc.dir}"/> + <ajdoc sourcepath="${ant.test.src.dir}" + sourcefiles="One.java" + classpath="${compile.classpath}" + /> + </target> + + <target name="fail999" depends="init"> + <mkdir dir="${ant.test.doc.dir}"/> + <ajdoc + destdir="${ant.test.doc.dir}" + sourcefiles="One.java" + classpath="${compile.classpath}" + /> + </target> + + <target name="test_stylesheetfile" depends="init"> + <mkdir dir="${ant.test.doc.dir}"/> + <ajdoc sourcepath="${ant.test.src.dir}" + destdir="${ant.test.doc.dir}" + sourcefiles="One.java" + stylesheetfile="${ant.test.src.dir}/mystylesheet.css" + classpath="${compile.classpath}" + /> + </target> + + <target name="test_helpfile" depends="init"> + <mkdir dir="${ant.test.doc.dir}"/> + <ajdoc sourcepath="${ant.test.src.dir}" + destdir="${ant.test.doc.dir}" + sourcefiles="One.java" + helpfile="${ant.test.src.dir}/myhelp.html" + classpath="${compile.classpath}" + /> + </target> + + <target name="test_nodeprecatedlist_no" depends="init"> + <mkdir dir="${ant.test.doc.dir}"/> + <ajdoc sourcepath="${ant.test.src.dir}" + destdir="${ant.test.doc.dir}" + sourcefiles="One.java" + nodeprecatedlist="no" + classpath="${compile.classpath}" + /> + </target> + + <target name="test_nodeprecatedlist_yes" depends="init"> + <mkdir dir="${ant.test.doc.dir}"/> + <ajdoc sourcepath="${ant.test.src.dir}" + destdir="${ant.test.doc.dir}" + sourcefiles="One.java" + nodeprecatedlist="yes" + classpath="${compile.classpath}" + /> + </target> + + <target name="test_nodeprecated_no" depends="init"> + <mkdir dir="${ant.test.doc.dir}"/> + <ajdoc sourcepath="${ant.test.src.dir}" + destdir="${ant.test.doc.dir}" + sourcefiles="One.java" + nodeprecated="no" + classpath="${compile.classpath}" + /> + </target> + + <target name="test_nodeprecated_yes" depends="init"> + <mkdir dir="${ant.test.doc.dir}"/> + <ajdoc sourcepath="${ant.test.src.dir}" + destdir="${ant.test.doc.dir}" + sourcefiles="One.java" + nodeprecated="yes" + classpath="${compile.classpath}" + /> + </target> + + <target name="test_use_no" depends="init"> + <mkdir dir="${ant.test.doc.dir}"/> + <ajdoc sourcepath="${ant.test.src.dir}" + destdir="${ant.test.doc.dir}" + sourcefiles="One.java" + use="no" + classpath="${compile.classpath}" + /> + </target> + + <target name="test_use_yes" depends="init"> + <mkdir dir="${ant.test.doc.dir}"/> + <ajdoc sourcepath="${ant.test.src.dir}" + destdir="${ant.test.doc.dir}" + sourcefiles="One.java" + use="yes" + classpath="${compile.classpath}" + /> + </target> + + <target name="test_standard_yes" depends="init"> + <mkdir dir="${ant.test.doc.dir}"/> + <ajdoc sourcepath="${ant.test.src.dir}" + destdir="${ant.test.doc.dir}" + sourcefiles="One.java" + standard="yes" + classpath="${compile.classpath}" + /> + </target> + + <target name="test_standard_no" depends="init"> + <mkdir dir="${ant.test.doc.dir}"/> + <ajdoc sourcepath="${ant.test.src.dir}" + destdir="${ant.test.doc.dir}" + sourcefiles="One.java" + standard="no" + classpath="${compile.classpath}" + /> + </target> + + <target name="test_author_no" depends="init"> + <mkdir dir="${ant.test.doc.dir}"/> + <ajdoc sourcepath="${ant.test.src.dir}" + destdir="${ant.test.doc.dir}" + sourcefiles="One.java" + author="no" + classpath="${compile.classpath}" + /> + </target> + + <target name="test_author_yes" depends="init"> + <mkdir dir="${ant.test.doc.dir}"/> + <ajdoc sourcepath="${ant.test.src.dir}" + destdir="${ant.test.doc.dir}" + sourcefiles="One.java" + author="yes" + classpath="${compile.classpath}" + /> + </target> + + <target name="test_public_no" depends="init"> + <mkdir dir="${ant.test.doc.dir}"/> + <ajdoc sourcepath="${ant.test.src.dir}" + destdir="${ant.test.doc.dir}" + sourcefiles="One.java" + public="no" + classpath="${compile.classpath}" + /> + </target> + + <target name="test_public_yes" depends="init"> + <mkdir dir="${ant.test.doc.dir}"/> + <ajdoc sourcepath="${ant.test.src.dir}" + destdir="${ant.test.doc.dir}" + sourcefiles="One.java" + public="yes" + classpath="${compile.classpath}" + /> + </target> + + <target name="test_package_no" depends="init"> + <mkdir dir="${ant.test.doc.dir}"/> + <ajdoc sourcepath="${ant.test.src.dir}" + destdir="${ant.test.doc.dir}" + sourcefiles="One.java" + package="no" + classpath="${compile.classpath}" + /> + </target> + + <target name="test_package_yes" depends="init"> + <mkdir dir="${ant.test.doc.dir}"/> + <ajdoc sourcepath="${ant.test.src.dir}" + destdir="${ant.test.doc.dir}" + sourcefiles="One.java" + package="yes" + classpath="${compile.classpath}" + /> + </target> + + <target name="test_protected_no" depends="init"> + <mkdir dir="${ant.test.doc.dir}"/> + <ajdoc sourcepath="${ant.test.src.dir}" + destdir="${ant.test.doc.dir}" + sourcefiles="One.java" + protected="no" + classpath="${compile.classpath}" + /> + </target> + + <target name="test_protected_yes" depends="init"> + <mkdir dir="${ant.test.doc.dir}"/> + <ajdoc sourcepath="${ant.test.src.dir}" + destdir="${ant.test.doc.dir}" + sourcefiles="One.java" + protected="yes" + classpath="${compile.classpath}" + /> + </target> + + <target name="test_private_no" depends="init"> + <mkdir dir="${ant.test.doc.dir}"/> + <ajdoc sourcepath="${ant.test.src.dir}" + destdir="${ant.test.doc.dir}" + sourcefiles="One.java" + private="no" + classpath="${compile.classpath}" + /> + </target> + + <target name="test_private_yes" depends="init"> + <mkdir dir="${ant.test.doc.dir}"/> + <ajdoc sourcepath="${ant.test.src.dir}" + destdir="${ant.test.doc.dir}" + sourcefiles="One.java" + private="yes" + classpath="${compile.classpath}" + /> + </target> + + <target name="test_splitindex_no" depends="init"> + <mkdir dir="${ant.test.doc.dir}"/> + <ajdoc sourcepath="${ant.test.src.dir}" + destdir="${ant.test.doc.dir}" + sourcefiles="One.java" + splitindex="no" + classpath="${compile.classpath}" + /> + </target> + + <target name="test_splitindex_yes" depends="init"> + <mkdir dir="${ant.test.doc.dir}"/> + <ajdoc sourcepath="${ant.test.src.dir}" + destdir="${ant.test.doc.dir}" + sourcefiles="One.java" + splitindex="yes" + classpath="${compile.classpath}" + /> + </target> + + <target name="test_windowtitle" depends="init"> + <mkdir dir="${ant.test.doc.dir}"/> + <ajdoc sourcepath="${ant.test.src.dir}" + destdir="${ant.test.doc.dir}" + sourcefiles="One.java" + windowtitle="Window Title" + classpath="${compile.classpath}" + /> + </target> + + <target name="test_doctitle" depends="init"> + <mkdir dir="${ant.test.doc.dir}"/> + <ajdoc sourcepath="${ant.test.src.dir}" + destdir="${ant.test.doc.dir}" + sourcefiles="One.java" + doctitle="<H1>Doc Title</H1>" + classpath="${compile.classpath}" + /> + </target> + + <target name="test_bottom" depends="init"> + <mkdir dir="${ant.test.doc.dir}"/> + <ajdoc sourcepath="${ant.test.src.dir}" + destdir="${ant.test.doc.dir}" + sourcefiles="One.java" + bottom="<H1>Bottom</H1>" + classpath="${compile.classpath}" + /> + </target> + + <target name="test_footer" depends="init"> + <mkdir dir="${ant.test.doc.dir}"/> + <ajdoc sourcepath="${ant.test.src.dir}" + destdir="${ant.test.doc.dir}" + sourcefiles="One.java" + footer="<H1>Footer</H1>" + classpath="${compile.classpath}" + /> + </target> + + <target name="test_header" depends="init"> + <mkdir dir="${ant.test.doc.dir}"/> + <ajdoc sourcepath="${ant.test.src.dir}" + destdir="${ant.test.doc.dir}" + sourcefiles="One.java" + header="<H1>Header</H1>" + classpath="${compile.classpath}" + /> + </target> + + <target name="test_nohelp_no" depends="init"> + <mkdir dir="${ant.test.doc.dir}"/> + <ajdoc sourcepath="${ant.test.src.dir}" + destdir="${ant.test.doc.dir}" + sourcefiles="One.java" + nohelp="no" + classpath="${compile.classpath}" + /> + </target> + + <target name="test_nohelp_yes" depends="init"> + <mkdir dir="${ant.test.doc.dir}"/> + <ajdoc sourcepath="${ant.test.src.dir}" + destdir="${ant.test.doc.dir}" + sourcefiles="One.java" + nohelp="yes" + classpath="${compile.classpath}" + /> + </target> + + <target name="test_noindex_no" depends="init"> + <mkdir dir="${ant.test.doc.dir}"/> + <ajdoc sourcepath="${ant.test.src.dir}" + destdir="${ant.test.doc.dir}" + sourcefiles="One.java" + noindex="no" + classpath="${compile.classpath}" + /> + </target> + + <target name="test_noindex_yes" depends="init"> + <mkdir dir="${ant.test.doc.dir}"/> + <ajdoc sourcepath="${ant.test.src.dir}" + destdir="${ant.test.doc.dir}" + sourcefiles="One.java" + noindex="yes" + classpath="${compile.classpath}" + /> + </target> + + <target name="test_notree_no" depends="init"> + <mkdir dir="${ant.test.doc.dir}"/> + <ajdoc sourcepath="${ant.test.src.dir}" + destdir="${ant.test.doc.dir}" + sourcefiles="One.java" + notree="no" + classpath="${compile.classpath}" + /> + </target> + + <target name="test_notree_yes" depends="init"> + <mkdir dir="${ant.test.doc.dir}"/> + <ajdoc sourcepath="${ant.test.src.dir}" + destdir="${ant.test.doc.dir}" + sourcefiles="One.java" + notree="yes" + classpath="${compile.classpath}" + /> + </target> + + <target name="test985" depends="init"> + <mkdir dir="${ant.test.doc.dir}"/> + <ajdoc sourcepath="${ant.test.src.dir}" + destdir="${ant.test.doc.dir}" + packagelist="${ant.test.src.dir}/pkgs4.lst" + classpath="${compile.classpath}" + /> + </target> + + <target name="test986" depends="init"> + <mkdir dir="${ant.test.doc.dir}"/> + <ajdoc sourcepath="${ant.test.src.dir}" + destdir="${ant.test.doc.dir}" + packagelist="${ant.test.src.dir}/pkgs3.lst" + classpath="${compile.classpath}" + /> + </target> + + <target name="test987" depends="init"> + <mkdir dir="${ant.test.doc.dir}"/> + <ajdoc sourcepath="${ant.test.src.dir}" + destdir="${ant.test.doc.dir}" + packagelist="${ant.test.src.dir}/pkgs2.lst" + classpath="${compile.classpath}" + /> + </target> + + <target name="test988" depends="init"> + <mkdir dir="${ant.test.doc.dir}"/> + <ajdoc sourcepath="${ant.test.src.dir}" + destdir="${ant.test.doc.dir}" + packagelist="${ant.test.src.dir}/pkgs1.lst" + classpath="${compile.classpath}" + /> + </target> + + <target name="test989" depends="init"> + <mkdir dir="${ant.test.doc.dir}"/> + <ajdoc sourcepath="${ant.test.src.dir}" + destdir="${ant.test.doc.dir}" + packagenames="p1.*,p2.*" + classpath="${compile.classpath}" + /> + </target> + + <target name="test990" depends="init"> + <mkdir dir="${ant.test.doc.dir}"/> + <ajdoc sourcepath="${ant.test.src.dir}" + destdir="${ant.test.doc.dir}" + packagenames="p1,p1.pp1,p2,p2.pp2" + classpath="${compile.classpath}" + /> + </target> + + <target name="test991" depends="init"> + <mkdir dir="${ant.test.doc.dir}"/> + <ajdoc sourcepath="${ant.test.src.dir}" + destdir="${ant.test.doc.dir}" + packagenames="p1,p1.pp1,p2" + classpath="${compile.classpath}" + /> + </target> + + <target name="test992" depends="init"> + <mkdir dir="${ant.test.doc.dir}"/> + <ajdoc sourcepath="${ant.test.src.dir}" + destdir="${ant.test.doc.dir}" + packagenames="p1,p2" + classpath="${compile.classpath}" + /> + </target> + + <target name="test993" depends="init"> + <mkdir dir="${ant.test.doc.dir}"/> + <ajdoc sourcepath="${ant.test.src.dir}" + destdir="${ant.test.doc.dir}" + packagenames="p1,p1.pp1" + classpath="${compile.classpath}" + /> + </target> + + <target name="test994" depends="init"> + <mkdir dir="${ant.test.doc.dir}"/> + <ajdoc sourcepath="${ant.test.src.dir}" + destdir="${ant.test.doc.dir}" + packagenames="p1.*" + classpath="${compile.classpath}" + /> + </target> + + <target name="test995" depends="init"> + <mkdir dir="${ant.test.doc.dir}"/> + <ajdoc sourcepath="${ant.test.src.dir}" + destdir="${ant.test.doc.dir}" + packagenames="p1" + classpath="${compile.classpath}" + /> + </target> + + <target name="test996" depends="init"> + <mkdir dir="${ant.test.doc.dir}"/> + <ajdoc sourcepath="${ant.test.src.dir}" + destdir="${ant.test.doc.dir}" + argfiles="${ant.test.src.dir}/files2.lst" + classpath="${compile.classpath}" + /> + </target> + + <target name="test997" depends="init"> + <mkdir dir="${ant.test.doc.dir}"/> + <ajdoc sourcepath="${ant.test.src.dir}" + destdir="${ant.test.doc.dir}" + argfiles="${ant.test.src.dir}/files1.lst" + classpath="${compile.classpath}" + /> + </target> + + <target name="test998" depends="init"> + <mkdir dir="${ant.test.doc.dir}"/> + <ajdoc sourcepath="${ant.test.src.dir}" + destdir="${ant.test.doc.dir}" + sourcefiles="One.java,Two.java" + classpath="${compile.classpath}" + /> + </target> + + <target name="test999" depends="init"> + <mkdir dir="${ant.test.doc.dir}"/> + <ajdoc sourcepath="${ant.test.src.dir}" + destdir="${ant.test.doc.dir}" + sourcefiles="One.java" + classpath="${compile.classpath}" + /> + </target> + +</project> diff --git a/tests/ant/filecompare/fileCompareTestDirs.zip b/tests/ant/filecompare/fileCompareTestDirs.zip Binary files differnew file mode 100644 index 000000000..f882d6005 --- /dev/null +++ b/tests/ant/filecompare/fileCompareTestDirs.zip diff --git a/tests/ant/filecompare/makeTestDir.sh b/tests/ant/filecompare/makeTestDir.sh new file mode 100644 index 000000000..815a14907 --- /dev/null +++ b/tests/ant/filecompare/makeTestDir.sh @@ -0,0 +1,49 @@ +#!/bin/sh
+# awkward script to generate test case for filecompare of 2 different dirs
+
+catExpected() {
+ cat<<EOF
+1a2
+> \a1\a1
+12d12
+< \b1\b1
+23,24d22
+< \c1\added
+< \c1\c1
+424,425d421
+< dir.zip!dir/a1/
+< dir.zip!dir/a1/a1
+468a465
+> dir.zip!dir/c1/added
+EOF
+}
+
+abc="a b c d e f g h i j k l m n o p q r s"
+n123="0 1 2 3 4 5 6 7 8 9"
+mkdir dir
+cd dir
+for a in ${abc}; do
+ mkdir "$a"
+ for n in ${n123} ; do
+ echo "$abc $n "
+ mkdir "${a}${n}"
+ echo "$a$n " > "${a}${n}/${a}${n}"
+ done > "$a/$a"
+done
+cd ..
+cp -r dir subdir
+mv subdir dir/
+cp -r dir dir2
+zip -rq one.zip dir/*
+# create some differences
+rm -rf dir/a1
+rm dir2/b1/b1
+rm dir2/c1/c1
+echo added > dir/c1/added
+zip -rq two.zip dir/*
+mv one.zip dir/c2/dir.zip
+mv two.zip dir2/c2/dir.zip
+
+# save expected and wrap up for checkin
+catExpected > expected
+zip -qr fileCompareTestDirs.zip expected dir/* dir2/*
diff --git a/tests/ant/src/One.java b/tests/ant/src/One.java new file mode 100644 index 000000000..56aa7c620 --- /dev/null +++ b/tests/ant/src/One.java @@ -0,0 +1,3 @@ +public class One { + int i1; +} diff --git a/tests/ant/src/Three.java b/tests/ant/src/Three.java new file mode 100644 index 000000000..ec6ef629d --- /dev/null +++ b/tests/ant/src/Three.java @@ -0,0 +1,3 @@ +public class Three { + int i3; +} diff --git a/tests/ant/src/Two.java b/tests/ant/src/Two.java new file mode 100644 index 000000000..d1d2a4e0f --- /dev/null +++ b/tests/ant/src/Two.java @@ -0,0 +1,3 @@ +public class Two { + int i2; +} diff --git a/tests/ant/src/myhelp.html b/tests/ant/src/myhelp.html new file mode 100644 index 000000000..e69de29bb --- /dev/null +++ b/tests/ant/src/myhelp.html diff --git a/tests/ant/src/mystylesheet.css b/tests/ant/src/mystylesheet.css new file mode 100644 index 000000000..e69de29bb --- /dev/null +++ b/tests/ant/src/mystylesheet.css diff --git a/tests/base/OneArgCallsIsOkay.java b/tests/base/OneArgCallsIsOkay.java new file mode 100644 index 000000000..c0e7916a7 --- /dev/null +++ b/tests/base/OneArgCallsIsOkay.java @@ -0,0 +1,7 @@ +//allow one argument calls even when there's a comma in the arglist (PR#384) + +public class OneArgCallsIsOkay { + public static void main(String[] args) {} + static void foo(int x, int y) {} + pointcut cut(): call(void OneArgCallsIsOkay.foo(int, int)); +} diff --git a/tests/base/test100/Driver.java b/tests/base/test100/Driver.java new file mode 100644 index 000000000..cc2315377 --- /dev/null +++ b/tests/base/test100/Driver.java @@ -0,0 +1,73 @@ +import org.aspectj.testing.Tester; + +public class Driver { + public static void main(String[] args) { test(); } + + public static void test() { + + Pos p1 = new Pos(); + Pos p2 = new Pos(); + Pos p3 = new Pos(); + + Foo f1 = Foo.aspectOf(p1); + Foo f2 = Foo.aspectOf(p2); + Foo f3 = Foo.aspectOf(p3); + + p1.move(1, 2); + Tester.checkEqual(p1.getX(), 1, "p1.x"); + Tester.checkEqual(p1.getY(), 2, "p1.y"); + + p2.move(1, 2); + Tester.checkEqual(p2.getX(), 1, "p2.x"); + Tester.checkEqual(p2.getY(), 2, "p2.y"); + + p3.move(1, 2); + Tester.checkEqual(p3.getX(), 1, "p3.x"); + Tester.checkEqual(p3.getY(), 2, "p3.y"); + + Tester.checkEqual(f1.count, 3, "f1.count"); + Tester.checkEqual(f2.count, 3, "f2.count"); + Tester.checkEqual(f3.count, 3, "f3.count"); + Tester.checkEqual(Bar.countx, 9, "Bar.countx"); + } +} + +class Pos { + + int x = 0; + int y = 0; + + int getX() { + return(x); + } + + int getY() { + return(y); + } + + void move(int newX, int newY) { + x=newX; + y=newY; + } +} + +aspect Foo pertarget(target(Pos)) { + int count = 0; + + before (): ( call(* getX(..)) || + call(* getY(..)) || + call(* move(..)) ) { + count++; + } +} + +aspect Bar { + static int countx = 0; + + /*static*/ before (): target(Pos) && + ( call(* getX(..)) || + call(* getY(..)) || + call(* move(..)) ) { + countx++; + } +} diff --git a/tests/base/test100/Readme.txt b/tests/base/test100/Readme.txt new file mode 100644 index 000000000..4befd80f4 --- /dev/null +++ b/tests/base/test100/Readme.txt @@ -0,0 +1,6 @@ +Mode: vm run +Title: before methods, count++ + +A simple test of before methods weaving, in both the static and +non-static cases. In this test, all the classes and aspects are in +the same file. (Keep test101 in synch with this one.) diff --git a/tests/base/test101/Bar.java b/tests/base/test101/Bar.java new file mode 100644 index 000000000..99b516a40 --- /dev/null +++ b/tests/base/test101/Bar.java @@ -0,0 +1,11 @@ + +aspect Bar { + static int count = 0; + + before (): target(Pos) && + ( call(* getX(..)) || + call(* getY(..)) || + call(* move(..)) ) { + count++; + } +} diff --git a/tests/base/test101/Driver.java b/tests/base/test101/Driver.java new file mode 100644 index 000000000..9964538f3 --- /dev/null +++ b/tests/base/test101/Driver.java @@ -0,0 +1,33 @@ +import org.aspectj.testing.Tester; + +public class Driver { + public static void main(String[] args) { test(); } + + public static void test() { + + Pos p1 = new Pos(); + Pos p2 = new Pos(); + Pos p3 = new Pos(); + + Foo f1 = Foo.aspectOf(p1); + Foo f2 = Foo.aspectOf(p2); + Foo f3 = Foo.aspectOf(p3); + + p1.move(1, 2); + Tester.checkEqual(p1.getX(), 1, "p1.x"); + Tester.checkEqual(p1.getY(), 2, "p1.y"); + + p2.move(1, 2); + Tester.checkEqual(p2.getX(), 1, "p2.x"); + Tester.checkEqual(p2.getY(), 2, "p2.y"); + + p3.move(1, 2); + Tester.checkEqual(p3.getX(), 1, "p3.x"); + Tester.checkEqual(p3.getY(), 2, "p3.y"); + + Tester.checkEqual(f1.count, 3, "f1.count"); + Tester.checkEqual(f2.count, 3, "f2.count"); + Tester.checkEqual(f3.count, 3, "f3.count"); + Tester.checkEqual(Bar.count, 9, "Bar.count"); + } +} diff --git a/tests/base/test101/Foo.java b/tests/base/test101/Foo.java new file mode 100644 index 000000000..79097078a --- /dev/null +++ b/tests/base/test101/Foo.java @@ -0,0 +1,11 @@ + +aspect Foo pertarget(target(Pos)) { + int count = 0; + + before (): ( call(* getX(..)) || + call(* getY(..)) || + call(* move(..)) ) { + count++; + } +} + diff --git a/tests/base/test101/Pos.java b/tests/base/test101/Pos.java new file mode 100644 index 000000000..b6a70e6ba --- /dev/null +++ b/tests/base/test101/Pos.java @@ -0,0 +1,19 @@ + +class Pos { + + int x = 0; + int y = 0; + + int getX() { + return(x); + } + + int getY() { + return(y); + } + + void move(int newX, int newY) { + x=newX; + y=newY; + } +} diff --git a/tests/base/test101/README b/tests/base/test101/README new file mode 100644 index 000000000..445e688b1 --- /dev/null +++ b/tests/base/test101/README @@ -0,0 +1,4 @@ +Mode: vm run
+Title: before methods, count++, multiple files
+
+Exactly like test001, except this one uses multiple files.
diff --git a/tests/base/test102/Driver.java b/tests/base/test102/Driver.java new file mode 100644 index 000000000..6d5cf27cd --- /dev/null +++ b/tests/base/test102/Driver.java @@ -0,0 +1,34 @@ +import org.aspectj.testing.Tester; + +public class Driver { + static Object objectFromClass; + static Object objectFromAspect; + + static String stringFromClass; + static String stringFromAspect; + + public static void main(String[] args) { test(); } + + static public void test() { + Driver obj = new Driver(); + + obj.doit(); + + Tester.check(objectFromClass == objectFromAspect, + "this matches this"); + Tester.check(stringFromClass.equals(stringFromAspect), + "this.toString() matches this.toString()"); + } + + void doit() { + objectFromClass = this; + stringFromClass = this.toString(); + } +} + +aspect DriverAspect pertarget(target(Driver)) { + before (Driver d): target(d) && call(* doit(..)) { + d.objectFromAspect = d; + d.stringFromAspect = d.toString(); + } +} diff --git a/tests/base/test102/Readme.txt b/tests/base/test102/Readme.txt new file mode 100644 index 000000000..14bcca6a9 --- /dev/null +++ b/tests/base/test102/Readme.txt @@ -0,0 +1,4 @@ +Mode: vm run +Title: this redirection in non-static before methods + +A simple test of whether this redirection works in before methods. diff --git a/tests/base/test103/Driver.java b/tests/base/test103/Driver.java new file mode 100644 index 000000000..68961d801 --- /dev/null +++ b/tests/base/test103/Driver.java @@ -0,0 +1,56 @@ +// -*- Mode: java; -*- +import org.aspectj.testing.Tester; + +public class Driver { + + public static void main(String[] args) { test(); } + + public static void test() { + MagicKey key = new MagicKey(); + + Pos p1 = new Pos(key); + + Tester.checkEqual(p1.getOther(), 1, "introduced value"); + } +} +class Pos { + + int _x = 0; + int _y = 0; + + public int getX() { + return(_x); + } + + public int getY() { + return(_y); + } + + public void move(int x, int y) { + _x = x; + _y = y; + } +} + +aspect Foo { + // this has been declared illegal syntax as of 4/19/99, see below for fix + // introduce public int Pos.id = 1, Pos.other; + + //introduction Pos { + //XXX might want to test for this in the future + //public int Pos.id=1, Pos.other; + public int Pos.id=1; + public int Pos.other; + + int Pos.getOther() { + return other; + } + + Pos.new(MagicKey key) { + other = id; + id = getOther(); + } + //} +} + +class MagicKey {} diff --git a/tests/base/test103/Readme.txt b/tests/base/test103/Readme.txt new file mode 100644 index 000000000..15dbc7353 --- /dev/null +++ b/tests/base/test103/Readme.txt @@ -0,0 +1,7 @@ +Mode: vm run +Title: a simple test of new fields, methods and constructors + +A simple test of new fields, methods and constructors, +using introduce. This is deprecated as of 0.7, but we +still need to test the deprecated stuff until we kill +it completely. -eh diff --git a/tests/base/test104/Driver.java b/tests/base/test104/Driver.java new file mode 100644 index 000000000..5cc2f9079 --- /dev/null +++ b/tests/base/test104/Driver.java @@ -0,0 +1,88 @@ +import org.aspectj.testing.Tester; + +public aspect Driver { + + static boolean point, line, circle; + + public static void main(String[] args) { test(); } + + public static void test() { + Point p = new Point(); + Line l = new Line(); + Circle c = new Circle(); + + Tester.check(point, "point"); + Tester.check(line, "line"); + Tester.check(circle, "circle"); + } + + before (): target(Point) && execution(new(..)) { + point = true; + } + + before (): target(Line) && execution(new(..)) { + line = true; + } + + // the * thrown in just for fun + before (): target(*) && target(Circle) && execution(new()) { + circle = true; + } +} + +class Point { + int _x = 0; + int _y = 0; + + Point() {} + + void set (int x, int y) { + _x = x; _y = y; + } + + void setX (int x) { _x = x; } + void setY (int y) { _y = y; } + + int getX() { return _x; } + int getY() { return _y; } +} + +class Line { + int _x1, _y1, _x2, _y2; + + Line() {} + + void set (int x1, int y1, int x2, int y2) { + _x1 = x1; _y1 = y1; _x2 = x2; _y2 = y2; + } + + void setX1 (int x1) { _x1 = x1; } + void setY1 (int y1) { _y1 = y1; } + void setX2 (int x2) { _x2 = x2; } + void setY2 (int y2) { _y2 = y2; } + + int getX1() { return _x1; } + int getY1() { return _y1; } + int getX2() { return _x2; } + int getY2() { return _y2; } +} + +class Circle { + int _x = 0; + int _y = 0; + int _r = 0; + + Circle() {} + + void set (int x, int y, int r) { + _x = x; _y = y; _r = r; + } + + void setX (int x) { _x = x; } + void setY (int y) { _y = y; } + void setR (int r) { _r = r; } + + int getX() { return _x; } + int getY() { return _y; } + int getR() { return _r; } +} diff --git a/tests/base/test104/Readme.txt b/tests/base/test104/Readme.txt new file mode 100644 index 000000000..411a8a957 --- /dev/null +++ b/tests/base/test104/Readme.txt @@ -0,0 +1,5 @@ +Mode: vm run +Title: before constructors + +A simple test of before methods on constructors. In this test, all +the classes and aspects are in the same file. diff --git a/tests/base/test105/Driver.java b/tests/base/test105/Driver.java new file mode 100644 index 000000000..5578c84f8 --- /dev/null +++ b/tests/base/test105/Driver.java @@ -0,0 +1,46 @@ +import org.aspectj.testing.Tester; + +public aspect Driver { + + static boolean t1, t2, t3, t4; + + public static void main(String[] args) { test(); } + + public static void test() { + + Foo f1 = new Foo(); + + f1.m1("foo"); + f1.m2(1); + f1.m3("foo"); + f1.m3(1); + + Tester.check(t1, "finding m1(String)"); + Tester.check(t2, "finding m2(int)"); + Tester.check(t3, "finding m3(String)"); + Tester.check(t4, "finding m3(int)"); + } + + before(String x): target(Foo) && call(void m1(String)) && args(x) { + t1 = true; + } + + before(int x): target(Foo) && call(void m2(int)) && args(x) { + t2 = true; + } + + before(String x): target(Foo) && call(void m3(String)) && args(x) { + t3 = true; + } + + before(int x): target(Foo) && call(void m3(int)) && args(x) { + t4 = true; + } +} + +class Foo { + void m1(String x) { } + void m2(int x) { } + void m3(String x) { } + void m3(int x) { } +} diff --git a/tests/base/test105/Readme.txt b/tests/base/test105/Readme.txt new file mode 100644 index 000000000..54e21223e --- /dev/null +++ b/tests/base/test105/Readme.txt @@ -0,0 +1,5 @@ +Mode: vm run +Title: advise weaves find methods typed to builtins or non-woven classes + +A simple test to make sure advise weaves find methods typed to +built-ins or on classes that aren't being woven. diff --git a/tests/base/test106/Driver.java b/tests/base/test106/Driver.java new file mode 100644 index 000000000..a1c8a51d4 --- /dev/null +++ b/tests/base/test106/Driver.java @@ -0,0 +1,11 @@ +import pkg.*; +import org.aspectj.testing.Tester; + +public class Driver { + public static void main(String[] args) { test(); } + + public static void test() { + Obj obj = new Obj(); + Tester.checkEqual(obj.m(), 3, "obj.m()"); + } +} diff --git a/tests/base/test106/Readme.txt b/tests/base/test106/Readme.txt new file mode 100644 index 000000000..b9261b99e --- /dev/null +++ b/tests/base/test106/Readme.txt @@ -0,0 +1,4 @@ +Mode: vm run +Title: make sure new weaves work inside of packages + +A simple test to make sure new weaves work inside of packages. diff --git a/tests/base/test106/pkg/Obj.java b/tests/base/test106/pkg/Obj.java new file mode 100644 index 000000000..3886c2bd3 --- /dev/null +++ b/tests/base/test106/pkg/Obj.java @@ -0,0 +1,13 @@ +package pkg; + +public class Obj { + public int m() { + return 2; + } +} + +aspect Asp { + int around(): target(Obj) && execution(int m()) { + return 3; + } +} diff --git a/tests/base/test107/C1.java b/tests/base/test107/C1.java new file mode 100644 index 000000000..1393cb85c --- /dev/null +++ b/tests/base/test107/C1.java @@ -0,0 +1,8 @@ + +import pack1.Foo; + +public class C1 { + int m() { + return 999; + } +} diff --git a/tests/base/test107/C2.java b/tests/base/test107/C2.java new file mode 100644 index 000000000..aea80e6f5 --- /dev/null +++ b/tests/base/test107/C2.java @@ -0,0 +1,7 @@ +import pack2.Foo; + +public class C2 { + int m() { + return 998; + } +} diff --git a/tests/base/test107/Driver.java b/tests/base/test107/Driver.java new file mode 100644 index 000000000..2079b820d --- /dev/null +++ b/tests/base/test107/Driver.java @@ -0,0 +1,33 @@ + +import pack3.Foo; +import org.aspectj.testing.Tester; + +public class Driver { + public static void main(String[] args) { test(); } + + public static void test() { + C1 c1 = new C1(); + C2 c2 = new C2(); + C3 c3 = new C3(); + + Tester.checkEqual(c1.m(), 3, "c1.m()"); + Tester.checkEqual(c2.m(), 3, "c2.m()"); + Tester.checkEqual(c3.m(), 3, "c3.m()"); + } +} + +class C3 { + int m () { + Foo f = new Foo(); + return f.hello(); + } +} + +aspect Test { + int around(): ( target(C1) || + target(C2) ) && + call(int m()) { + Foo f = new Foo(); + return f.hello(); + } +} diff --git a/tests/base/test107/Readme.txt b/tests/base/test107/Readme.txt new file mode 100644 index 000000000..b9261b99e --- /dev/null +++ b/tests/base/test107/Readme.txt @@ -0,0 +1,4 @@ +Mode: vm run +Title: make sure new weaves work inside of packages + +A simple test to make sure new weaves work inside of packages. diff --git a/tests/base/test107/pack1/Foo.java b/tests/base/test107/pack1/Foo.java new file mode 100644 index 000000000..4694a8edc --- /dev/null +++ b/tests/base/test107/pack1/Foo.java @@ -0,0 +1,6 @@ + +package pack1; + +public class Foo { + public int hello() { return 1; } +} diff --git a/tests/base/test107/pack2/Foo.java b/tests/base/test107/pack2/Foo.java new file mode 100644 index 000000000..fb065349b --- /dev/null +++ b/tests/base/test107/pack2/Foo.java @@ -0,0 +1,6 @@ + +package pack2; + +public class Foo { + public int hello() { return 2; } +} diff --git a/tests/base/test107/pack3/Foo.java b/tests/base/test107/pack3/Foo.java new file mode 100644 index 000000000..e4065dee4 --- /dev/null +++ b/tests/base/test107/pack3/Foo.java @@ -0,0 +1,6 @@ + +package pack3; + +public class Foo { + public int hello() { return 3; } +} diff --git a/tests/base/test108/Driver.java b/tests/base/test108/Driver.java new file mode 100644 index 000000000..30af86fd7 --- /dev/null +++ b/tests/base/test108/Driver.java @@ -0,0 +1,40 @@ + +import org.aspectj.testing.Tester; +/** + * This does accessibility of class and class variables, both inherited + * and non-inherited, in the body of a weave. + */ + +public class Driver { + public static void main(String[] args) { test(); } + public static void test() { + Tester.checkEqual((new Bar()).m(), 10, "Bar.m"); + } +} + +class Foo { + int fooVar = 1; + public int getFooVar( ) { return fooVar; } +} + +class Bar extends Foo { + int barVar = 2; + int ans = 0; + public int getBarVar() { return barVar; } + public void setAns( int newAns ) { ans = newAns; } + int m() { + return ans; + } +} + +abstract aspect A { + static int aVar = 3; +} + +aspect B extends A { + static int bVar = 4; + + before(Bar b): target(b) && call(* m(..)) { + b.setAns(b.getFooVar() + b.getBarVar() + aVar + bVar); + } +} diff --git a/tests/base/test108/Readme.txt b/tests/base/test108/Readme.txt new file mode 100644 index 000000000..e0665b4bf --- /dev/null +++ b/tests/base/test108/Readme.txt @@ -0,0 +1,6 @@ +Mode: vm run +Title: Inheritance of class and aspect vars in weaves. + +This checks accessibility of class and aspect variables, both inherited +and non-inherited, in the body of a weave. + diff --git a/tests/base/test109/Aspect.java b/tests/base/test109/Aspect.java new file mode 100644 index 000000000..4e77df375 --- /dev/null +++ b/tests/base/test109/Aspect.java @@ -0,0 +1,28 @@ +aspect Aspect pertarget(target(Foo)) { + + public String toString() {return "The Aspect";} + + before (Foo f): target(f) && call(* foo(..)) { + // do some incrementing and reading of f's variables: + // f.PRIVATECONST; + // f.privateClassVar++; + // f.privateInstanceVar++; + f.protectedClassVar++; + f.protectedInstanceVar++; + f.publicClassVar++; + f.publicInstanceVar++; + f.ClassVar++; + f.InstanceVar++; + + // do some calling of f's methods + + //f.privateClassMethod(); + //f.privateInstanceMethod(); + f.protectedClassMethod(); + f.protectedInstanceMethod(); + f.publicClassMethod(); + f.publicInstanceMethod(); + f.ClassMethod(); + f.InstanceMethod(); + } +} diff --git a/tests/base/test109/Driver.java b/tests/base/test109/Driver.java new file mode 100644 index 000000000..c68725a19 --- /dev/null +++ b/tests/base/test109/Driver.java @@ -0,0 +1,9 @@ + +public class Driver { + public static void main(String[] args) { test(); } + + public static void test() { + Foo f = new Foo(); + f.foo(); + } +} diff --git a/tests/base/test109/Foo.java b/tests/base/test109/Foo.java new file mode 100644 index 000000000..8a2a3de38 --- /dev/null +++ b/tests/base/test109/Foo.java @@ -0,0 +1,56 @@ + +public class Foo { + private String _name; + private static final int PRIVATECONST = 1; + private static int privateClassVar = 2; + private int privateInstanceVar = 3; + + protected static int protectedClassVar = 4; + protected int protectedInstanceVar = 5; + + public static int publicClassVar = 6; + public int publicInstanceVar = 7; + + public static int ClassVar = 8; + public int InstanceVar = 9; + + public void foo() { + // System.out.println("running " + this + ".foo()"); + } + + private static void privateClassMethod() { + // System.out.println("in " + "Foo.privateClassMethod()"); + } + + private void privateInstanceMethod() { + // System.out.println("in " + this + ".privateInstanceMethod()"); + } + + protected static void protectedClassMethod() { + // System.out.println("in " + "Foo.protectedClassMethod()"); + } + + protected void protectedInstanceMethod() { + // System.out.println("in " + this + ".protectedInstanceMethod()"); + } + + public static void publicClassMethod() { + // System.out.println("in " + "Foo.publicClassMethod()"); + } + + public void publicInstanceMethod() { + // System.out.println("in " + this + ".publicInstanceMethod()"); + } + + static void ClassMethod() { + // System.out.println("in " + "Foo.ClassMethod()"); + } + + void InstanceMethod() { + // System.out.println("in " + this + ".InstanceMethod()"); + } + + +} + + diff --git a/tests/base/test109/Readme.txt b/tests/base/test109/Readme.txt new file mode 100644 index 000000000..a524b5485 --- /dev/null +++ b/tests/base/test109/Readme.txt @@ -0,0 +1,13 @@ +Mode: VM run +Title: Accessibility of class and aspect members from inside weaves + + Code inside a weave does the full cross-product of the + following things: + + read a var of the class private static + set a var X X protected X non-static + call a method public + default + + +Both the aspect and the class are in the default (unnamed) package. diff --git a/tests/base/test110/Driver.java b/tests/base/test110/Driver.java new file mode 100644 index 000000000..5a9a717f9 --- /dev/null +++ b/tests/base/test110/Driver.java @@ -0,0 +1,14 @@ + +import pClass.Class; +import pAspect.Aspect; +import org.aspectj.testing.Tester; + +public class Driver { + public static void main(String[] args) { test(); } + + public static void test() { + Class f = new Class(); + f.foo(); + Tester.check(Aspect.ranAdvice, "advice on class in different package"); + } +} diff --git a/tests/base/test110/Readme.txt b/tests/base/test110/Readme.txt new file mode 100644 index 000000000..fb53602f0 --- /dev/null +++ b/tests/base/test110/Readme.txt @@ -0,0 +1,9 @@ +Mode: VM run +Title: Packaged aspects referring to packaged classes + +This test case has an aspect and a class, each in a separate +package. The test is to check if the weaver generates the correct +names for the class and the aspect in the woven code. + + + diff --git a/tests/base/test110/pAspect/Aspect.java b/tests/base/test110/pAspect/Aspect.java new file mode 100644 index 000000000..e7733f5a6 --- /dev/null +++ b/tests/base/test110/pAspect/Aspect.java @@ -0,0 +1,9 @@ +package pAspect; + +public aspect Aspect { + public static boolean ranAdvice = false; + + before (): target(pClass.Class) && call(* foo(..)) { + ranAdvice = true; + } +} diff --git a/tests/base/test110/pClass/Class.java b/tests/base/test110/pClass/Class.java new file mode 100644 index 000000000..98653c7fb --- /dev/null +++ b/tests/base/test110/pClass/Class.java @@ -0,0 +1,9 @@ +package pClass; + +public class Class { + public void foo() { + // nothing to do here. + } +} + + diff --git a/tests/base/test111/Driver.java b/tests/base/test111/Driver.java new file mode 100644 index 000000000..00ec6c33c --- /dev/null +++ b/tests/base/test111/Driver.java @@ -0,0 +1,11 @@ +import org.aspectj.testing.Tester; + +public class Driver { + public static void main(String[] args) { test(); } + + public static void test() { + SubClass sub = new SubClass(3); + //System.out.println("Invoking SubClass's getX method"); + Tester.checkEqual(sub.getX(), 3+42, "x value"); + } +} diff --git a/tests/base/test111/Readme.txt b/tests/base/test111/Readme.txt new file mode 100644 index 000000000..3995ae7bf --- /dev/null +++ b/tests/base/test111/Readme.txt @@ -0,0 +1,6 @@ +Mode: VM Run +Title: Inheritance of methods advised by aspects + +A subclass SubClass inherits a super-class SuperClass's method getX +which is affected by the aspect SuperAspect. + diff --git a/tests/base/test111/SubClass.java b/tests/base/test111/SubClass.java new file mode 100644 index 000000000..2aadb8d3f --- /dev/null +++ b/tests/base/test111/SubClass.java @@ -0,0 +1,5 @@ +public class SubClass extends SuperClass { + public SubClass(int _x) { + super(_x); + } +} diff --git a/tests/base/test111/SuperAspect.java b/tests/base/test111/SuperAspect.java new file mode 100644 index 000000000..df97973b8 --- /dev/null +++ b/tests/base/test111/SuperAspect.java @@ -0,0 +1,12 @@ +import org.aspectj.testing.Tester; + +public aspect SuperAspect { + before(SuperClass s): target(s) && call(* getX(..)) { + Tester.checkEqual(thisJoinPoint.getSignature().getName(), "getX", "method name"); + //!!! It's unclear what they value of this really should be + //Tester.checkEqual(thisJoinPoint.className, "SubClass", "class name"); + // make a change to prove this is run + //x = x+42; + s.setX( s.checkX()+42 ); + } +} diff --git a/tests/base/test111/SuperClass.java b/tests/base/test111/SuperClass.java new file mode 100644 index 000000000..3e57e0473 --- /dev/null +++ b/tests/base/test111/SuperClass.java @@ -0,0 +1,8 @@ +public class SuperClass { + int x; + + public SuperClass(int _x) { x = _x; } + public int getX() { return x; } + public int checkX() { return x; } + public void setX( int newX ) { x = newX; } +} diff --git a/tests/base/test112/Driver.java b/tests/base/test112/Driver.java new file mode 100644 index 000000000..6e8a757c9 --- /dev/null +++ b/tests/base/test112/Driver.java @@ -0,0 +1,28 @@ +import org.aspectj.testing.Tester; + +public class Driver { + public static int constructorCount = 0; + + public static void main(String[] args) { test(); } + + public static void test() { + SubClass sub1 = new SubClass(); + // only one constructor has been called + Tester.checkEqual(constructorCount, 1, "constructor called"); + } +} + + +class SuperClass { + public SuperClass() {} +} + +class SubClass extends SuperClass { + public SubClass() {} +} + +aspect SuperAspect { + after () returning(): call(SuperClass+.new(..)) { + Driver.constructorCount += 1; + } +} diff --git a/tests/base/test112/Readme.txt b/tests/base/test112/Readme.txt new file mode 100644 index 000000000..ad7c9c1a2 --- /dev/null +++ b/tests/base/test112/Readme.txt @@ -0,0 +1,8 @@ +Mode: VM Run +Title: Inherited weaves on constructor + +SubClass picks up the weave specified by SuperAspect on SuperClass's +constructor. The weave runs only once, but only after +returning advice can have this property. + + diff --git a/tests/base/test113/Driver.java b/tests/base/test113/Driver.java new file mode 100644 index 000000000..3431da405 --- /dev/null +++ b/tests/base/test113/Driver.java @@ -0,0 +1,38 @@ +import org.aspectj.testing.Tester; + +public class Driver { + public static boolean classStaticInitRan, classInitRan; + + public static boolean aspectStaticInitRan, aspectInitRan; + + public static void main(String[] args) { test(); } + + public static void test() { + Class c = new Class(); + Tester.check(classStaticInitRan, "ran class's static initializer"); + Tester.check(classInitRan, "ran class's initializer"); + Tester.check(aspectStaticInitRan, "ran aspect's static initializer"); + Tester.check(aspectInitRan, "ran aspect's initializer"); + + } +} + +class Class { + static { + Driver.classStaticInitRan = true; + } + + { + Driver.classInitRan = true; + } +} + +aspect Aspect pertarget(target(Class)) { + static { + Driver.aspectStaticInitRan = true; + } + // non-static initializer + { + Driver.aspectInitRan = true; + } +} diff --git a/tests/base/test113/Readme.txt b/tests/base/test113/Readme.txt new file mode 100644 index 000000000..dc76983f4 --- /dev/null +++ b/tests/base/test113/Readme.txt @@ -0,0 +1,5 @@ +Mode: VM Run +Title: Initializers in Aspect and Class Bodies + +This test ensures that initializers (static or non-static) work inside +bodies of aspects and classes. diff --git a/tests/base/test114/Driver.java b/tests/base/test114/Driver.java new file mode 100644 index 000000000..456f8d899 --- /dev/null +++ b/tests/base/test114/Driver.java @@ -0,0 +1,31 @@ +import org.aspectj.testing.Tester; + +public class Driver { + public static void main(String[] args) { test(); } + + public static void test() { + Class c = new Class(); + + c.foo(5); + } +} + +class Class { + void foo(int x) { + //System.out.println(x); + } + int baz(int y) { + return 2; + } +} + +aspect Aspect pertarget(target(Class)) { + int bar(int x) { return 5;} + + after (Class c, int z): target(c) && call(* foo(int)) && args(z) { + // calls a class method whose argument is an class method call + Tester.check(c.baz(bar(6)) == 2, "didn't run class method"); + // calls an class method whose argument is a class method call + Tester.check(bar(c.baz(4)) == 5, "Didn't run aspect method"); + } +} diff --git a/tests/base/test114/Readme.txt b/tests/base/test114/Readme.txt new file mode 100644 index 000000000..791f1256b --- /dev/null +++ b/tests/base/test114/Readme.txt @@ -0,0 +1,6 @@ +Mode: VM Run +Title: Weaver Resolution of method names in method calls passed as args. + +This test ensures that method names are properly resolved when they +are used in method calls that are passed as arguments in other method calls. + diff --git a/tests/base/test115/Driver.java b/tests/base/test115/Driver.java new file mode 100644 index 000000000..a15967fc0 --- /dev/null +++ b/tests/base/test115/Driver.java @@ -0,0 +1,25 @@ +import org.aspectj.testing.Tester; + +public class Driver { + public static void main(String[] args) { test(); } + + static public void test() { + SubClass s = new SubClass(0); + Tester.checkEqual(Aspect.count, 2, "introduced constructors"); + } +} + +class Class {} + +class SubClass extends Class {} + +// this should introduce a unary constructor for +// Class and SubClass + +aspect Aspect { + static int count = 0; + //introduction subtypes(Class) { + Class.new(int i) {count++;} + SubClass.new(int i) {super(2); count++;} + //} +} diff --git a/tests/base/test115/Readme.txt b/tests/base/test115/Readme.txt new file mode 100644 index 000000000..b8451bd8c --- /dev/null +++ b/tests/base/test115/Readme.txt @@ -0,0 +1,11 @@ +Mode: VM Run +Title: Introduce constructor with class inheritance + +This test ensures that when a constructor is introduced in a type (class) +then that constructor is introduced with the same formal parameter +structure and body in all classes and subclasses implementing the +type. + +Deprecated -eh + + diff --git a/tests/base/test116/Driver.java b/tests/base/test116/Driver.java new file mode 100644 index 000000000..b1dc67d7d --- /dev/null +++ b/tests/base/test116/Driver.java @@ -0,0 +1,60 @@ +import org.aspectj.testing.Tester; + +public class Driver { + public static void main(String[] args) { test(); } + + public static void test() { + Class c = new Class(); + + c.l(); + c.l(2); + c.m(3); + + Tester.checkEqual(Aspect.c1, 3, "Aspect.c1"); + Tester.checkEqual(Aspect.c2, 2, "Aspect.c2"); + Tester.checkEqual(Aspect.c3, 1, "Aspect.c3"); + Tester.checkEqual(Aspect.c4, 2, "Aspect.c4"); + } +} + +class Class { + + public void l() throws Error { + //System.out.println("public void l() throws Error"); + //throw(new Error ()); + } + + void l(int x) { + //System.out.println(" void l(int)"); + } + + public void m(int x) throws Error { + //System.out.println("public void m(int) throws Error"); + // throw(new Error ()); + } + +} + +aspect Aspect { + static int c1, c2, c3, c4 = 0; + + before(): target(Class) && call(void *(..)) { + //System.out.println("before Class.*(..)"); + c1++; + } + + before(int x): target(Class) && call(void *(int))&& args(x) { + //System.out.println("before Class.*(int)"); + c2++; + } + + before(int x): target(Class) && call(public void *(int)) && args(x){ + //System.out.println("before public Class.*(int)"); + c3++; + } + + before(): target(Class) && call(void *(..) throws Error) { + //System.out.println("before Class.*(..) throws Error"); + c4++; + } +} diff --git a/tests/base/test116/Readme.txt b/tests/base/test116/Readme.txt new file mode 100644 index 000000000..03ae9bc44 --- /dev/null +++ b/tests/base/test116/Readme.txt @@ -0,0 +1,21 @@ +Mode: VM Run +Title: empty and singular patterns on modifiers and throws + +This test identifies sets of methods based on the patterns on +modifiers and throws. + +If the modifier pattern is empty, then the constraint on +methods means "quantify over methods that may or may not have any +modifier". + +If the modifier pattern is a single value, +then the constraint means "quantify over methods that have that +modifier value". + +The same rule applies for pattern in the throws clause. + + + + + + diff --git a/tests/base/test117/Driver.java b/tests/base/test117/Driver.java new file mode 100644 index 000000000..9abfb1789 --- /dev/null +++ b/tests/base/test117/Driver.java @@ -0,0 +1,126 @@ +import org.aspectj.testing.Tester; + +public class Driver { + public static void main(String[] args) { test(); } + + public static void test() { + C1 c1 = new C1(); + C11 c11 = new C11(); + C111 c111 = new C111(); + C12 c12 = new C12(); + Cleaf1 cleaf1 = new Cleaf1(); + Cleaf11 cleaf11 = new Cleaf11(); + Cleaf111 cleaf111 = new Cleaf111(); + Cleaf12 cleaf12 = new Cleaf12(); + + Tester.checkEqual(c1.a, 0, "c1.a"); + Tester.checkEqual(c11.a, 0, "c11.a"); + Tester.checkEqual(c111.a, 0, "c111.a"); + Tester.checkEqual(c12.a, 0, "c12.a"); + + Tester.checkEqual(cleaf1.a, 0, "cleaf1.a"); + Tester.checkEqual(cleaf11.a, 0, "cleaf11.a"); + Tester.checkEqual(cleaf111.a, 0, "cleaf111.a"); + Tester.checkEqual(cleaf12.a, 0, "cleaf12.a"); + + Tester.checkEqual(c1.b, 0, "c1.b"); + Tester.checkEqual(cleaf1.b, 0, "cleaf1.b"); + + Tester.checkEqual(I1.c, 5, "I1.c"); + + Tester.checkEqual(c1.d, 1, "c1.d"); + Tester.checkEqual(c11.d, 1, "c11.d"); + Tester.checkEqual(c111.d, 1, "c111.d"); + Tester.checkEqual(c12.d, 1, "c12.d"); + + Tester.checkEqual(c1.e, 2, "c1.e"); + Tester.checkEqual(cleaf1.e, 2, "cleaf1.e"); + + Tester.checkEqual(C1.f, 4, "C1.f"); + Tester.checkEqual(cleaf1.f, 4, "cleaf1.f"); + Tester.checkEqual(c1.f, 4, "c1.f"); + + Tester.checkEqual(c1.getF(), 4, "c1.getF()"); + } +} + +interface I1 { } +interface I11 extends I1 { } +interface I111 extends I11 { } +interface I12 extends I1 { } + +class C1 implements I1 { } +class C11 implements I11 { } +class C111 implements I111 { } +class C12 implements I12 { } + +class Cleaf1 extends C1 { } +class Cleaf11 extends C11 { } +class Cleaf111 extends C111 { } +class Cleaf12 extends C12 { } + +// For this class structure: here is the "directly implements" relation +// C1 directly implements I1 +// C11 directly implements I11 +// C11 directly implements I1 +// C111 directly implements I111 +// C111 directly implements I11 +// C111 directly implements I1 +// C12 directly implements I12 +// C12 directly implements I1 + + + +// introducing a bunch of variables (almost all non-static). +aspect A1 { + + // Variable Introductions: + // without initializer X designator is interface + // with initializer X designator is class + + // with initializer, interface also has the two cases of presence or + // absence of the modifiers. + + // introduce on initializer without initializer + // should introduce into: + // C1, C11, C111, C12 + int I1.a; + + // introduce on interface with initializer but no Mods + // should introduce into: + // C1, C11, C111, C12 + int I1.d = 1; + + // introduce on interface with initializer and Mods + // should introduce into: + // I1 + public static final int I1.c = 5; + + // introduce on class + // should introduce into + // C1 + int C1.b; + int C1.e = 2; + + // introduce on class with static modifier + // should introduce into + // C1 + static int C1.f = 2; + + int C1.getF() { return 2; } +} + +aspect A2 { + declare dominates: A2, A1; + + int around() : set(int C1.f) && within(A1) { + return C1.f = 3; + } + + after (): staticinitialization(C1) { + C1.f = 4; + } + + // this should override the introduction from A1 + int C1.getF() { return 4; } +} diff --git a/tests/base/test117/Readme.txt b/tests/base/test117/Readme.txt new file mode 100644 index 000000000..51d75a7c3 --- /dev/null +++ b/tests/base/test117/Readme.txt @@ -0,0 +1,12 @@ +Mode: vm run +Title: introduce of variables + +This tests if variable introductions happen at all the places that +they are supposed to happen in the presence of interfaces, +subinterfaces, classes and inheritance. It tests rule 2 partly, (the +non-error causing cases only). + +It DOES NOT test if variable introductions do not happen at all the +places they should not happen. (That will be a separate test.) + + diff --git a/tests/base/test118/Driver.java b/tests/base/test118/Driver.java new file mode 100644 index 000000000..5d0db8c15 --- /dev/null +++ b/tests/base/test118/Driver.java @@ -0,0 +1,75 @@ +import org.aspectj.testing.Tester; + +public class Driver { + public static void main(String[] args) { test(); } + + public static void test() { + C1 c1 = new C1(); + C11 c11 = new C11(); + C111 c111 = new C111(); + C12 c12 = new C12(); + Cleaf1 cleaf1 = new Cleaf1(); + Cleaf11 cleaf11 = new Cleaf11(); + Cleaf111 cleaf111 = new Cleaf111(); + Cleaf12 cleaf12 = new Cleaf12(); + } +} + + +interface I1 { } +interface I11 extends I1 { } +interface I111 extends I11 { } +interface I12 extends I1 { } + +class C1 implements I1 { C1(String s) {} } +class C11 implements I11 { } +class C111 implements I111 { } +class C12 implements I12 { } + +class Cleaf1 extends C1 { } +class Cleaf11 extends C11 { } +class Cleaf111 extends C111 { } +class Cleaf12 extends C12 { } + +// For this class structure: here is the "directly implements" relation +// C1 directly implements I1 +// C11 directly implements I11 +// C11 directly implements I1 +// C111 directly implements I111 +// C111 directly implements I11 +// C111 directly implements I1 +// C12 directly implements I12 +// C12 directly implements I1 + + + +aspect A1 { + static int i1Count, c1Count, c1IntCount = 0; + // interface + before(): initialization(I1.new(..)) { + i1Count++; + } + + + C1.new() { + c1Count++; + } + C1.new(int x) { + c1IntCount++; + } + } + +aspect Verify { + + // In the current model, introduces on constructors !don't! work their way + // down the inheritance. With the given hierarchy, the number of + // invocations of the introduced constructors should match the + // numbers below. + + after(): within(Driver) && execution(static void test(..)) { + Tester.checkEqual(A1.i1Count, 8, "A1.i1Count"); + Tester.checkEqual(A1.c1Count, 2, "A1.c1Count"); + Tester.checkEqual(A1.c1IntCount, 0, "A1.c1IntCount"); + } +} + diff --git a/tests/base/test118/Readme.txt b/tests/base/test118/Readme.txt new file mode 100644 index 000000000..3df50ec2b --- /dev/null +++ b/tests/base/test118/Readme.txt @@ -0,0 +1,12 @@ +Mode: VM run +Title: Introduce of constructors + +This tests if constructor introductions happen at all the places that +they are supposed to happen in the presence of interfaces, +subinterfaces, classes and inheritance. + +It DOES NOT test if constructor introductions do not happen at all the +places they should not happen. (That will be a separate test.) Nor +does it test for the special cases when the constructors with the +signatures used in the introductions already exist. (That should be a +separate test.) diff --git a/tests/base/test119/Driver.java b/tests/base/test119/Driver.java new file mode 100644 index 000000000..b2e971845 --- /dev/null +++ b/tests/base/test119/Driver.java @@ -0,0 +1,34 @@ +import org.aspectj.testing.Tester; + +public class Driver { + public static void main(String[] args) { test(); } + + public static void test() { + Foo foo = new Foo(); + foo.m(); + } +} + +aspect A { + //static advice(): Foo && (void m(..) || new(..)) { + //!!!no around advice allowed on constructors right now + void around(): target(Foo) && call(void m(..)) { + class Internal { + int val() { return 1; } + } + int i = 1; + Internal j = new Internal(); + proceed(); + Tester.checkEqual(i, 1, "i"); + Tester.checkEqual(j.val(), 1, "j.val()"); + } +} + +class Foo { + Foo() { + // System.out.println("constructor Foo()"); + } + void m() { + // System.out.println("method m()"); + } +} diff --git a/tests/base/test119/Readme.txt b/tests/base/test119/Readme.txt new file mode 100644 index 000000000..77f93fa4c --- /dev/null +++ b/tests/base/test119/Readme.txt @@ -0,0 +1,12 @@ +Mode: VM run +Title: Local declarations in advise bodies + +This tests local declarations in the body of advises. Local +declarations help the weaves inside advises to share variables between +them. These variables should be resolved in the context of the +methods being advised. + +The syntax supports local variable as well as class declrations. But +the weaver can't handle inner classes yet, so only the local variable +declaration case is tested. + diff --git a/tests/base/test120/Driver.java b/tests/base/test120/Driver.java new file mode 100644 index 000000000..14bf33201 --- /dev/null +++ b/tests/base/test120/Driver.java @@ -0,0 +1,53 @@ +public \u0063l\u0061ss Driver { + + public static void main(String[] args) { test(); } + + public static void test() { + + // integer literals + int dec = 5; + long longDec = 5; + long longDecL = 5L; + + int hex = 0xAbcdE; + long longHex = 0xAbcdE; + long longHexL = 0xAbcdEL; + + int oct = 0762; + long longOct = 0762; + long longOctL = 0762L; + + // boolean literals + boolean btrue = true; + boolean bfalse = false; + + // float literals + float f1 = 1e1f, f2 = 2.f, f3 = .3f, f4 = 3.14f, f5 = 6.023e+23f; + + // character literals + char + // c1 = '\u2352', + c2 = '\u0063'; // 'c' + // c3 = '\u0007'; + + // string literals + String \u0063 = "c"; // String c = "c"; + String s1 = ""; + String s2 = "\u0063"; // the string "c"; + // String s3 = "\u3333"; // uncommenting this will break weaver + + // string literals with escapes + String bs = "\b"; + String ht = "\t"; + String lf = "\n"; + String cr = "\r"; + String dq = "\""; + String sq = "\'"; + String backslash = "\\"; + String oes = "\u0000"; // octal escape smallest + String oeb = "\u00ff"; // octal escape biggest + String ctrlg = ""; // this turns into "\u0007" by the time it is parsed. + String random = "\u3333"; + } +} + diff --git a/tests/base/test120/Readme.txt b/tests/base/test120/Readme.txt new file mode 100644 index 000000000..351d8d6e5 --- /dev/null +++ b/tests/base/test120/Readme.txt @@ -0,0 +1,9 @@ +Mode: VM run +Title: unicodes and literals + +This test checks if the weaver correctly handles all forms of Java +literal expressions and unicodes. See bugs b076 and b077. + + + + diff --git a/tests/base/test121/Driver.java b/tests/base/test121/Driver.java new file mode 100644 index 000000000..ff9fffb28 --- /dev/null +++ b/tests/base/test121/Driver.java @@ -0,0 +1,95 @@ +import org.aspectj.testing.Tester; +public class Driver { + + public static void main(String[] args) { test(); } + + public static void test() { + Foo.staticMethod(); + Foo.introducedStaticMethod(); + + Foo foo = new Foo(10); + + foo.nonStaticMethod(); + foo.introducedNonStaticMethod(); + + Tester.checkEqual(A.fooStaticCounter, 1, "A.fooStaticCounter"); + Tester.checkEqual(A.fooCounter, 1, "A.fooCounter"); + Tester.checkEqual(A.aStaticCounter, 1, "A.aStaticCounter"); + Tester.checkEqual(A.aCounter, 1, "A.aCounter"); + // these is only one constructor call, for Foo + Tester.checkEqual(A.constructorCounter, 1, "constructor calls"); + // one for Foo, one for A + Tester.checkEqual(A.initializationCounter, 2, "initializations"); + Tester.check(A.ranIntroducedConstructor, + "no overriding of the real thing"); + } +} + +class Foo { + + static void staticMethod() { } + void nonStaticMethod() { } +} + +aspect A0_8beta1 { + after() returning(): /*target(*) &&*/ call(new(int)) { + A.constructorCounter++; + } + after() returning(): /*target(*) &&*/ initialization(new(..)) && !within(A0_8beta1) { + System.out.println("init at " + thisJoinPoint); + A.initializationCounter++; + } + + before(): within(Foo) && execution(static * Foo.*(..)) { + A.fooStaticCounter++; + } + + before(): within(A) && execution(static * Foo.*(..)) { + A.aStaticCounter++; + } + + before(): within(A) && execution(!static * Foo.*(..)) { + A.aCounter++; + System.out.println("external before advise on " + thisJoinPoint); + } +} + +aspect A pertarget(target(Foo)){ + + static int constructorCounter = 0; + static int initializationCounter = 0; + static int aStaticCounter = 0; + static int aCounter = 0; + static int fooStaticCounter = 0; + static int fooCounter = 0; + + static boolean ranIntroducedConstructor = false; + + //introduction Foo { + static void Foo.introducedStaticMethod() { + // System.out.println(thisJoinPoint.className +"."+ + // thisJoinPoint.methodName); + } + void Foo.introducedNonStaticMethod() { + // System.out.println(thisJoinPoint.className +"."+ + // thisJoinPoint.methodName); + } + Foo.new(int n) { ranIntroducedConstructor = true; } + + // make sure advice doesn't go on the toString() method + // this would result in an infinite recursion + before(): within(Foo) && execution(!static * Foo.*(..)) { + fooCounter++; + //System.out.println("before advise on " + + //thisJoinPoint.className +"."+ thisJoinPoint.methodName); + } + + public A() { System.err.println("creating: " + this); } + + //XXX moved to other aspect, need to think about this... + //before(): within(A) && executions(!static * Foo.*(..)) { + //aCounter++; + //System.out.println("before advise on " + thisJoinPoint); + //} +} + diff --git a/tests/base/test121/Readme.txt b/tests/base/test121/Readme.txt new file mode 100644 index 000000000..957fe1c44 --- /dev/null +++ b/tests/base/test121/Readme.txt @@ -0,0 +1,8 @@ +Mode: VM run +Title: advises on introduced methods + +This test checks three things: + + - ! pattern in modifiers + - advice can apply to introduced methods + diff --git a/tests/base/test122/Driver.java b/tests/base/test122/Driver.java new file mode 100644 index 000000000..87c31350c --- /dev/null +++ b/tests/base/test122/Driver.java @@ -0,0 +1,24 @@ +import org.aspectj.testing.Tester; + +public class Driver { + public static void main(String[] args) { test(); } + + public static void test() { + I i = new C4(); + Tester.checkEqual(i.m(), 42, "i.m()"); + } +} + + +interface I {} +abstract class C1 implements I{} +class C2 extends C1 implements I {} +class C3 extends C1 {} +class C4 extends C2 {} + + +aspect Aspect { + //introduction I { + public int I.m() {return 42;} + //} +} diff --git a/tests/base/test122/Readme.txt b/tests/base/test122/Readme.txt new file mode 100644 index 000000000..307a93744 --- /dev/null +++ b/tests/base/test122/Readme.txt @@ -0,0 +1,5 @@ +Mode: VM Run +Title: Method introduction into interface implemented by abstract class + +This tests the implementation of method introductions into interfaces +which are implemented by abstract class. diff --git a/tests/base/test123/Driver.java b/tests/base/test123/Driver.java new file mode 100644 index 000000000..41d099c07 --- /dev/null +++ b/tests/base/test123/Driver.java @@ -0,0 +1,48 @@ +import org.aspectj.testing.Tester; + +public class Driver { + public static void main(String[] args) { test(); } + + public static void test() { + C1 c1 = new C1(333); + Tester.checkEqual(c1.afterAdvises, 0, "C1(int)"); + c1 = new C1("asdfasdf"); + Tester.checkEqual(c1.afterAdvises, 1, "C1(String)"); + C2 c2 = new C2(333); + Tester.checkEqual(c2.afterAdvises, 0, "C2(int) -> C1(String)"); + c2 = new C2("foo"); + Tester.checkEqual(c2.afterAdvises, 1, "C2(String) -> C1(int)"); + c2 = new C2("foo", 42); + Tester.checkEqual(c2.afterAdvises, 1, "C2(String,int) -> C1(String)"); + } +} + +class C1 { + public int afterAdvises = 0; + + C1() { } + C1(int i) { } + C1(String s) { } +} + +class C2 extends C1 { + + C2(int i) { + super("asdf"); + } + + C2(String s) { + super(42); + } + + C2(String s, int i) { + super(s); + } +} + +aspect A { + after(/*C1 c1*/) returning(C1 c1): /*target(c1) && */ + call(new(String, ..)) { + c1.afterAdvises += 1; + } +} diff --git a/tests/base/test123/Readme.txt b/tests/base/test123/Readme.txt new file mode 100644 index 000000000..0de4cc836 --- /dev/null +++ b/tests/base/test123/Readme.txt @@ -0,0 +1,5 @@ +Mode: VM Run +Title: Crossing super calls in constructors. + +This tests how crossing super calls work with reception +advice in constructors. diff --git a/tests/base/test124/Driver.java b/tests/base/test124/Driver.java new file mode 100644 index 000000000..3c9e058b3 --- /dev/null +++ b/tests/base/test124/Driver.java @@ -0,0 +1,29 @@ +import org.aspectj.testing.Tester; + +public class Driver { + public static void main(String[] args) { test(); } + + public static void test() { + Driver.m(4); + Tester.checkEqual(Trace.enterCount, 2, "befores"); + // The after for this method hasn't been run yet + Tester.checkEqual(Trace.exitCount, 1, "afters"); + } + + static int m(int x) { + return 0; + } +} + +aspect Trace { + public static int enterCount, exitCount; + // notice the absence of any modifiers in the advise + before(): within(Driver) && (execution(void test()) || + execution(* m(..))) { + enterCount++; + } + after(): within(Driver) && (execution(void test()) || + execution(* m(..))) { + exitCount++; + } +} diff --git a/tests/base/test124/Readme.txt b/tests/base/test124/Readme.txt new file mode 100644 index 000000000..bca6d2360 --- /dev/null +++ b/tests/base/test124/Readme.txt @@ -0,0 +1,6 @@ +Mode: VM run +Title: empty modifier pattern + +An advise specifies an empty modifier pattern which functions like a +wildcard on modifiers. + diff --git a/tests/base/test125/Driver.java b/tests/base/test125/Driver.java new file mode 100644 index 000000000..171c2370b --- /dev/null +++ b/tests/base/test125/Driver.java @@ -0,0 +1,45 @@ +import java.io.*; +import org.aspectj.testing.Tester; + +public class Driver { + public static void main(String[] args) { test(); } + + public static void test() { + Point p = new Point(); + p.setX(3); + } +} + +class Point { + int _x = 0; + int _y = 0; + + Point() {} + + void set (int x, int y) { + _x = x; _y = y; + } + + void setX (int x) { _x = x; } + void setY (int y) { _y = y; } + + int getX() { return _x; } + int getY() { return _y; } +} + +aspect Trace { + static int oldvalue; + + before(Point p, int newvalue): target(p) && args(newvalue) && + (call(void setX(int)) || + call(void setY(int))) { + oldvalue = p.getX(); + } + after(Point p, int newvalue): target(p) && args(newvalue) && + (call(void setX(int)) || + call(void setY(int))) { + + Tester.checkEqual(oldvalue,0, "oldvalue"); + Tester.checkEqual(newvalue,3, "newvalue"); + } +} diff --git a/tests/base/test125/Readme.txt b/tests/base/test125/Readme.txt new file mode 100644 index 000000000..49428a896 --- /dev/null +++ b/tests/base/test125/Readme.txt @@ -0,0 +1,6 @@ +Mode: VM run +Title: Alpha conversion of argument names in designators + + +This tests if parameter names in designators are alpha-converted to +the parameter names used in the definition of the method. diff --git a/tests/base/test126/Driver.java b/tests/base/test126/Driver.java new file mode 100644 index 000000000..e855c5781 --- /dev/null +++ b/tests/base/test126/Driver.java @@ -0,0 +1,18 @@ +public class Driver { + public static void main(String[] args) { test(); } + + public static void test() { + + // local variable declaration in the init part of a for + for (int i = 0, j = 0; j < 10 ; i++, j++) { + j++; + } + int m, n, j = 0; + + // init part without local var declaration + for (m = 0, n = 0; j < 10 ; m++, n++) { + j++; + m++; + } + } +} diff --git a/tests/base/test126/Readme.txt b/tests/base/test126/Readme.txt new file mode 100644 index 000000000..b4b666098 --- /dev/null +++ b/tests/base/test126/Readme.txt @@ -0,0 +1,7 @@ +Mode: VM run +Title: For Statement + +This tests the weaving of For statements. More variants of the for +statement can be added to the test. The current test only checks for +variation in the init part of the for loop. + diff --git a/tests/base/test127/Driver.java b/tests/base/test127/Driver.java new file mode 100644 index 000000000..c72e10327 --- /dev/null +++ b/tests/base/test127/Driver.java @@ -0,0 +1,21 @@ +import org.aspectj.testing.Tester; + +public class Driver { + public static void main(String[] args) { test(); } + + public static void test() { + new C().foo("hello"); + } +} + +class C { + void foo(String s) { + Tester.checkEqual(s, "hello", "in method body"); + } +} + +aspect A { + before(String str): target(C) && call(void foo(String)) && args(str) { + Tester.checkEqual(str, "hello", "in advice body"); + } +} diff --git a/tests/base/test127/Readme.txt b/tests/base/test127/Readme.txt new file mode 100644 index 000000000..4f2d0e349 --- /dev/null +++ b/tests/base/test127/Readme.txt @@ -0,0 +1,6 @@ +Mode: vm compile +Title: advice uses its own formals to get actuals + +A simple test to be sure that when an advice uses a different formal +than the actual member does that proper re-naming happens. + diff --git a/tests/base/test128/Driver.java b/tests/base/test128/Driver.java new file mode 100644 index 000000000..12d966638 --- /dev/null +++ b/tests/base/test128/Driver.java @@ -0,0 +1,19 @@ +import org.aspectj.testing.Tester; + +public class Driver { + public static void main(String[] args) { test(); } + + public static void test() { + C c = new C(); + Tester.check(c == c.foo(), "this wasn't this"); + } +} + +class C { } + +aspect A { + //introduction C { + C C.foo() { return this; } + //} +} + diff --git a/tests/base/test128/Readme.txt b/tests/base/test128/Readme.txt new file mode 100644 index 000000000..744b68df7 --- /dev/null +++ b/tests/base/test128/Readme.txt @@ -0,0 +1,6 @@ +Mode: vm compile +Title: introduce weaves can use this + +A simple test to be sure that introduce weaves are allowed to use +this. + diff --git a/tests/base/test129/Driver.java b/tests/base/test129/Driver.java new file mode 100644 index 000000000..6a2f7c04b --- /dev/null +++ b/tests/base/test129/Driver.java @@ -0,0 +1,34 @@ +import org.aspectj.testing.Tester; + +public class Driver { + public static void main(String[] args) { test(); } + + public static void test() { + AbstractC aC = new C(); + Tester.checkEqual(aC.foo(), 42, "introduced abstract"); + Tester.checkEqual(((I)aC).bar(), 12, "introduced on interface"); + } +} + +interface I { +} + +abstract class AbstractC implements I { +} + +class C extends AbstractC { +} + +aspect A { + //introduction AbstractC { + abstract int AbstractC.foo(); + //} + + //introduction C { + int C.foo() { return 42; } + //} + + //introduction I { + public int I.bar() { return 12; } + //} +} diff --git a/tests/base/test130/Driver.java b/tests/base/test130/Driver.java new file mode 100644 index 000000000..06b0184ab --- /dev/null +++ b/tests/base/test130/Driver.java @@ -0,0 +1,31 @@ +import org.aspectj.testing.Tester; + +public class Driver { + public static void main(String[] args) { test(); } + public static void test() { + C c = new C(); + + Tester.checkEqual(c.basic(), 4, "basic()"); + Tester.checkEqual(c.exceptional(), 3, "exceptional()"); + } +} + +class C { + public int basic() { + return 1; + } + + public int exceptional() { + return 1; + } +} + +aspect B { + int around(): target(C) && call(int basic()) { + return 4; + } + int around(): target(C) && call(int exceptional()) { + return 3; + } +} + diff --git a/tests/base/test131/Driver.java b/tests/base/test131/Driver.java new file mode 100644 index 000000000..752224626 --- /dev/null +++ b/tests/base/test131/Driver.java @@ -0,0 +1,44 @@ +// various forms of package name pattern matching work + +import org.aspectj.testing.Tester; + +import p1.C1; +import p1.p2.C2; + +public class Driver { + public static void test() { + Top t = new Top(); + p1.C1 c1 = new p1.C1(); + p1.p2.C2 c2 = new p1.p2.C2(); + + Tester.checkEqual(t.bar(), 11, "top.bar()"); + + Tester.checkEqual(c1.bar(), 1111, "c1.bar()"); + + Tester.checkEqual(c2.bar(), 1011, "c2.bar()"); + } + public static void main(String[] args) { test(); } +} + +class Top { + public int bar() { + return 1; + } +} + +aspect TopAdvice { + int around(): target(*) && call(int *()) { + int result = proceed(); + return result+10; + } + + int around(): target(p1.*) && call(int *()) { + int result = proceed(); + return result+100; + } + + int around(): target(p1..*) && call(int *()) { + int result = proceed(); + return result+1000; + } +} diff --git a/tests/base/test131/p1/C1.java b/tests/base/test131/p1/C1.java new file mode 100644 index 000000000..b7557b5c0 --- /dev/null +++ b/tests/base/test131/p1/C1.java @@ -0,0 +1,5 @@ +package p1; + +public class C1 { + public int bar() { return 1; } +} diff --git a/tests/base/test131/p1/p2/C2.java b/tests/base/test131/p1/p2/C2.java new file mode 100644 index 000000000..e2d6b2fe5 --- /dev/null +++ b/tests/base/test131/p1/p2/C2.java @@ -0,0 +1,5 @@ +package p1.p2; + +public class C2 { + public int bar() { return 1; } +} diff --git a/tests/base/test132/Driver.java b/tests/base/test132/Driver.java new file mode 100644 index 000000000..5ed0292ca --- /dev/null +++ b/tests/base/test132/Driver.java @@ -0,0 +1,26 @@ +// proper matching of overloaded constructors + +import org.aspectj.testing.Tester; + +public aspect Driver { + public static void main(String[] args) { test(); } + after(/*Foo f,*/ String aspectName) returning(Foo f): + /*target(f) &&*/ call(new(String)) && args(aspectName) { + f.name = aspectName+"-ADVISED"; + } + + public static void test() { + Foo foo = new Foo("NAME"); + Tester.checkEqual(foo.name, "NAME-ADVISED", "new Foo(name)"); + foo = new Foo(); + Tester.checkEqual(foo.name, "NONE", "new Foo()"); + } +} + +class Foo { + public String name = "NONE"; + public Foo() { } + public Foo(String name) { + this.name = name; + } +} diff --git a/tests/base/test133/Driver.java b/tests/base/test133/Driver.java new file mode 100644 index 000000000..1f1b1f7ab --- /dev/null +++ b/tests/base/test133/Driver.java @@ -0,0 +1,24 @@ +// PUREJAVA: Corrrect supercall lookup for method().name() +import org.aspectj.testing.Tester; + +public class Driver { + private Foo foo = new Foo(); + + public static void main(String[] args) { test(); } + + public Foo getFoo() { return foo; } + + public String bar() { + return getFoo().bar(); + } + + public static void test() { + Tester.checkEqual(new Driver().bar(), "Foo", "getFoo().bar()"); + } +} + +class Foo { + public String bar() { + return "Foo"; + } +} diff --git a/tests/base/test134/Driver.java b/tests/base/test134/Driver.java new file mode 100644 index 000000000..ac5d54e5e --- /dev/null +++ b/tests/base/test134/Driver.java @@ -0,0 +1,26 @@ +import org.aspectj.testing.Tester; + +public class Driver { + public static void main(String[] args) { test(); } + public int divide(int x, int y) { + return x/y; + } + + public static void test() { + Tester.checkEqual(new Driver().divide(6, 3), 2, "divide(6, 3)"); + Tester.checkEqual(new Driver().divide(6, 0), -1, "divide(6, 0)"); + } +} + +aspect CatchArithmetic { + int around(): target(*) && call(int *(..)) { + int x; + try { + x = proceed(); + } + catch (ArithmeticException e) { + return -1; + } + return x; + } +} diff --git a/tests/base/test135/Driver.java b/tests/base/test135/Driver.java new file mode 100644 index 000000000..7c2b0b5e2 --- /dev/null +++ b/tests/base/test135/Driver.java @@ -0,0 +1,50 @@ +// proper values for thisJoinPoint attributes +// Currently there is a bug (?) in that the parameters value +// of the joinpoint seems to always be null. +package test135; + +import org.aspectj.testing.Tester; + +public class Driver { + public static void main(String[] args) { test(); } + + public static void test() { + + TopFoo foo = new TopFoo(); + JoinPointFields jpf = JoinPointFields.aspectOf(); + + foo.bar(1, "one"); + + Tester.checkEqual(jpf.className, "test135.TopFoo", "className"); + Tester.checkEqual(jpf.methodName, "bar", "methodName"); + Tester.checkEqual(jpf.parameterNames, + new String[] {"intParam", "stringParam"}, + "parameterNames"); + Tester.checkEqual(jpf.parameterTypes, + new Class[] {Integer.TYPE, String.class}, + "parameterTypes"); + //System.out.println(jpf.parameters); + Tester.checkEqual(jpf.parameters, + new Object[] {new Integer(1), "one"}, + "parameters"); //!!! + + test135.pack.PackFoo foo1 = new test135.pack.PackFoo(); + test135.pack.PackJoinPointFields jpf1 = + test135.pack.PackJoinPointFields.aspectOf(); + + foo1.bar(2, "two"); + Tester.checkEqual(jpf1.className, "test135.pack.PackFoo", "className"); + Tester.checkEqual(jpf1.methodName, "bar", "methodName"); + Tester.checkEqual(jpf1.parameterNames, + new String[] {"packIntParam", "packStringParam"}, + "parameterNames"); + Tester.checkEqual(jpf1.parameterTypes, + new Class[] {Integer.TYPE, String.class}, + "parameterTypes"); + Tester.checkEqual(jpf1.parameters, + new Object[] {new Integer(2), "two"}, + "parameters"); + } +} + + diff --git a/tests/base/test135/JoinPointFields.java b/tests/base/test135/JoinPointFields.java new file mode 100644 index 000000000..dd83e7969 --- /dev/null +++ b/tests/base/test135/JoinPointFields.java @@ -0,0 +1,7 @@ +package test135; + +public aspect JoinPointFields extends test135.pack.JoinPointFields issingleton() { //of eachJVM() { + protected pointcut onTypes(): target(*); + + private int x = protectedField; +} diff --git a/tests/base/test135/TopFoo.java b/tests/base/test135/TopFoo.java new file mode 100644 index 000000000..f2d98f40e --- /dev/null +++ b/tests/base/test135/TopFoo.java @@ -0,0 +1,6 @@ +package test135; + +class TopFoo { + public void bar(int intParam, String stringParam) { + } +} diff --git a/tests/base/test135/pack/JoinPointFields.java b/tests/base/test135/pack/JoinPointFields.java new file mode 100644 index 000000000..c541ba2a4 --- /dev/null +++ b/tests/base/test135/pack/JoinPointFields.java @@ -0,0 +1,35 @@ +package test135.pack; + +import org.aspectj.lang.*; +import org.aspectj.lang.reflect.*; + +// a first try at a library class in the test suite +public abstract aspect JoinPointFields { + public String className; + public String methodName; + public String[] parameterNames; + public Class[] parameterTypes; + public Object[] parameters; + + protected int protectedField = 42; + + abstract protected pointcut onTypes(); + + before(): call(!static * *(..)) && onTypes() && !within(JoinPointFields+) { + System.out.println(thisJoinPoint); + + Signature sig = thisJoinPoint.getSignature(); + CodeSignature codeSig = (CodeSignature) sig; + //ReceptionJoinPoint rjp = (ReceptionJoinPoint) thisJoinPoint; + + className = sig.getDeclaringType().getName(); + System.out.println(className); + + methodName = sig.getName(); + parameterNames = codeSig.getParameterNames(); + parameterTypes = codeSig.getParameterTypes(); + //parameters = rjp.getParameters(); + parameters = thisJoinPoint.getArgs(); + System.out.println("DONE: " + thisJoinPoint); + } +} diff --git a/tests/base/test135/pack/PackFoo.java b/tests/base/test135/pack/PackFoo.java new file mode 100644 index 000000000..f00eee490 --- /dev/null +++ b/tests/base/test135/pack/PackFoo.java @@ -0,0 +1,6 @@ +package test135.pack; + +public class PackFoo { + public void bar(int packIntParam, String packStringParam) { + } +} diff --git a/tests/base/test135/pack/PackJoinPointFields.java b/tests/base/test135/pack/PackJoinPointFields.java new file mode 100644 index 000000000..bd6bf46e3 --- /dev/null +++ b/tests/base/test135/pack/PackJoinPointFields.java @@ -0,0 +1,6 @@ +package test135.pack; + +public aspect PackJoinPointFields + extends JoinPointFields issingleton() { /*of eachJVM() {*/ + protected pointcut onTypes(): target(test135.pack.PackFoo); +} diff --git a/tests/base/test136/Driver.java b/tests/base/test136/Driver.java new file mode 100644 index 000000000..aca8e2dcc --- /dev/null +++ b/tests/base/test136/Driver.java @@ -0,0 +1,119 @@ +import org.aspectj.testing.Tester; + +public class Driver { + public static void main(String[] args) { test(); } + + public static void test() { + C0 c = new C2(); + c.m1(2, 2); + Tester.checkEqual(A.C0_m1_calls, 1, "C2.m1 -- C0 calls"); + Tester.checkEqual(A.C2_m1_calls, 1, "C2.m1 -- C2 calls"); + Tester.checkEqual(A.m1_afters, 1, "C2.m1 -- after advice"); + A.clearCounts(); + + c.m2(c); + Tester.checkEqual(A.C0_m1_calls, 1, "C2.m2 -- C0.m1 calls"); + Tester.checkEqual(A.C2_m1_calls, 0, "C2.m2 -- C2.m1 calls"); + Tester.checkEqual(A.m1_afters, 0, "C2.m2 -- after m1 advice"); + Tester.checkEqual(A.C0_m2_calls, 1, "C2.m2 -- C0.m2 calls"); + Tester.checkEqual(A.C2_m2_calls, 1, "C2.m2 -- C2.m2 calls"); + Tester.checkEqual(A.m2_afters, 1, "C2.m2 -- after m2 advice"); + + c.m3("hi"); + Tester.checkEqual(A.C0_m3_calls, 1, "C2.m3 -- C0 calls"); + Tester.checkEqual(A.C1_m3_calls, 1, "C2.m3 -- C1 calls"); + Tester.checkEqual(A.C2_m3_calls, 1, "C2.m3 -- C2 calls"); + } +} + +class C0 { + public C0() { + } + + void m1(int x, double y) { + A.C0_m1_calls += 1; + } + + void m2(C0 c0) { + A.C0_m2_calls += 1; + } + void m3(String s) { + A.C0_m3_calls += 1; + } + +} + +class C1 extends C0 { + void m3(String s) { + super.m3(s); + A.C1_m3_calls += 1; + } +} + +class C2 extends C1 { + public boolean C2_after_called = false; + + public void setC2_after_called( boolean newVal ) { + C2_after_called = newVal; + } + + public C2() { + super(); + } + + void m1(int x, double y) { + A.C2_m1_calls += 1; + super.m1(x*2, x+y); + } + + void m2(C0 c0) { + A.C2_m2_calls += 1; + super.m1(2, 2); + super.m2(this); + } + void m3(String s) { + super.m3(s); + A.C2_m3_calls += 1; + } +} + +aspect A { + public static int C0_m1_calls = 0; + public static int C2_m1_calls = 0; + public static int C0_m2_calls = 0; + public static int C2_m2_calls = 0; + public static int C0_m3_calls = 0; + public static int C1_m3_calls = 0; + public static int C2_m3_calls = 0; + public static int m1_afters = 0; + public static int m2_afters = 0; + + public static void clearCounts() { + C0_m1_calls = 0; + C2_m1_calls = 0; + C0_m2_calls = 0; + C2_m2_calls = 0; + C0_m3_calls = 0; + C1_m3_calls = 0; + C2_m3_calls = 0; + m1_afters = 0; + m2_afters = 0; + } + + after(): target(C0+) && call(void m1(int, double)) { + m1_afters += 1; + } + after(): target(C0+) && call(* m2(..)) { + m2_afters += 1; + } + + after(): target(C0+) && call(* m3(..)) { + int x = 22; + } + + after(C2 c2) returning(): + target(c2) && call(new()) { + c2.setC2_after_called( true ); + } +} + diff --git a/tests/base/test137/Driver.java b/tests/base/test137/Driver.java new file mode 100644 index 000000000..1358e2ac6 --- /dev/null +++ b/tests/base/test137/Driver.java @@ -0,0 +1,87 @@ +// operations on private && protected aspect members (++, -- in partciular) + +import org.aspectj.testing.Tester; + +public class Driver { + public static void main(String[] args) { test(); } + + public static void test() { + Foo foo = new Foo(); + + foo.foo(); + + Tester.checkEqual(Aspect.getPrivateAspectVar(), 23); + Tester.checkEqual(Aspect.aspectOf().getPrivateAspectInstanceVar(), 23); + } +} + +class Foo { + public void foo() { + } +} + +//XXX need to put some of eachobject back into this some day + +aspect Aspect { + private static final int PRIVATEASPECTCONST = 10; + private static int privateAspectVar = 20; + + protected static int protectedAspectVar = 40; + + public static int getPrivateAspectVar() { + return privateAspectVar; + } + + private int privateAspectInstanceVar = 30; + protected int protectedAspectInstanceVar = 50; + + public int getPrivateAspectInstanceVar() { + return privateAspectInstanceVar; + } + + + + pointcut onFoo(): target(Foo) && call(void foo()); + + before(): onFoo() { + privateAspectVar = 21; + privateAspectVar = 1 + privateAspectVar; + Tester.checkEqual(privateAspectVar, 22); + Tester.checkEqual(privateAspectVar += 1, 23); + Tester.checkEqual(privateAspectVar++, 23); + Tester.checkEqual(privateAspectVar, 24); + Tester.checkEqual(privateAspectVar--, 24); + Tester.checkEqual(privateAspectVar, 23); + Tester.checkEqual(++privateAspectVar, 24); + Tester.checkEqual(privateAspectVar, 24); + Tester.checkEqual(--privateAspectVar, 23); + } + + before(): onFoo() { + privateAspectVar = 21; + privateAspectVar = 1 + privateAspectVar; + Tester.checkEqual(privateAspectVar, 22); + Tester.checkEqual(privateAspectVar += 1, 23); + Tester.checkEqual(privateAspectVar++, 23); + Tester.checkEqual(privateAspectVar, 24); + Tester.checkEqual(privateAspectVar--, 24); + Tester.checkEqual(privateAspectVar, 23); + Tester.checkEqual(++privateAspectVar, 24); + Tester.checkEqual(privateAspectVar, 24); + Tester.checkEqual(--privateAspectVar, 23); + Tester.checkEqual(privateAspectVar, 23); + + privateAspectInstanceVar = 21; + privateAspectInstanceVar = 1 + privateAspectInstanceVar; + Tester.checkEqual(privateAspectInstanceVar, 22); + Tester.checkEqual(privateAspectInstanceVar += 1, 23); + Tester.checkEqual(privateAspectInstanceVar++, 23); + Tester.checkEqual(privateAspectInstanceVar, 24); + Tester.checkEqual(privateAspectInstanceVar--, 24); + Tester.checkEqual(privateAspectInstanceVar, 23); + Tester.checkEqual(++privateAspectInstanceVar, 24); + Tester.checkEqual(privateAspectInstanceVar, 24); + Tester.checkEqual(--privateAspectInstanceVar, 23); + Tester.checkEqual(privateAspectInstanceVar, 23); + } +} diff --git a/tests/base/test138/Driver.java b/tests/base/test138/Driver.java new file mode 100644 index 000000000..f61d360af --- /dev/null +++ b/tests/base/test138/Driver.java @@ -0,0 +1,34 @@ +//only register things once. + +import org.aspectj.testing.Tester; + +public class Driver { + public static void test() { + A a = new A(); + B b = new B(); + + // instances of A, B are created (the instanceof Aspect isn't counted for timing reasons) + Tester.checkEqual(Aspect.count, 2, "instance count"); + } + + public static void main(String[] args) { test(); } +} + + +class A { + public A() {} + public void foo() {} +} + +class B extends A { + public B() {} + public void bar() {} +} + +aspect Aspect { + public static int count = 0; + + after() returning(): /*target(*) &&*/ call(new()) { + count++; + } +} diff --git a/tests/base/test139/Driver.java b/tests/base/test139/Driver.java new file mode 100644 index 000000000..10553e90a --- /dev/null +++ b/tests/base/test139/Driver.java @@ -0,0 +1,36 @@ +// inner aspects and around + +import org.aspectj.testing.Tester; + +public class Driver { + public static void test() { + C2 c2 = new C2(); + + Tester.checkEqual(c2.foo(), 142, "modified c2.foo()"); + } + + public static void main(String[] args) { test(); } +} + + +class C1 { + private int myInteger = 100; + + static aspect A { + int around(C2 c2): + target(c2) && call(int foo()) { + int result = proceed(c2); + return result + c2.getC1().myInteger; + } + } +} + +class C2 { + public C1 getC1() { + return new C1(); + } + int foo() { + return 42; + } +} + diff --git a/tests/base/test140/Driver.java b/tests/base/test140/Driver.java new file mode 100644 index 000000000..db03998ae --- /dev/null +++ b/tests/base/test140/Driver.java @@ -0,0 +1,68 @@ +import org.aspectj.testing.Tester; + +// aspect inheritance and advice, introduction + +public class Driver { + public static void test() { + C1 c1 = new C1(); + + Tester.checkEqual(c1.foo(), "from A2", "sub-aspects"); + Tester.checkEqual(c1.bar(), + "from A0 #2", + "sub-aspects and position"); + + // the around advice lexically in A1 runs twice, once for each concrete + // sub-aspects. putting advice on a concrete pointcut in an abstract + // aspect will always have this odd behavior, and possibly should be illegal + Tester.checkEqual(c1.getString(), + ":A2:A1:A1:C1", + "multiple arounds"); + } + + public static void main(String[] args) { test(); } +} + +class C1 { + String getString() { + return ":C1"; + } +} + +abstract aspect A1 { + String C1.foo() { + return "from A1"; + } + + String C1.bar() { + return "from A1"; + } + + String around(): + call(String C1.getString()) { + return ":A1" + proceed(); + } +} + +aspect A2 extends A1 { + String C1.foo() { + return "from A2"; + } + + String around(): + call(String C1.getString()) { + return ":A2" + proceed(); + } + +} + +aspect A0 extends A1 { + // multiple conflicting declarations in the same aspect are now an error + //String C1.bar() { + // return "from A0 #1"; + //} + + String C1.bar() { + return "from A0 #2"; + } +} + diff --git a/tests/base/test141/Driver.java b/tests/base/test141/Driver.java new file mode 100644 index 000000000..0bf61f906 --- /dev/null +++ b/tests/base/test141/Driver.java @@ -0,0 +1,60 @@ +// thisResultObject for primitives +// I think this is a bad test. Is there a way to do this? -eh + +import org.aspectj.testing.Tester; + +public class Driver { + public static void test() { + C1 c1 = new C1(); + + c1.getInteger(); + c1.getDouble(); + c1.getVoid(); + c1.getString(); + c1.getBoolean(); + } + + public static void main(String[] args) { test(); } +} + +class C1 { + int getInteger() { + return 1; + } + + double getDouble() { + return 3.14; + } + + void getVoid() { + } + + String getString() { + return "Hello World"; + } + + boolean getBoolean() { + return true; + } +} + +aspect A1 { + // don't advise the finalize reception, or weird interactions with GC can happen + after() returning (Object result): + target(C1) && call(* *()) && !call(void finalize()) { + if (result == null) { + Tester.checkEqual(thisJoinPoint.getSignature().getName(), + "getVoid", + "void method"); + } + else { + String resultClassName = result.getClass().getName(); + + Tester.checkEqual("java.lang." + + thisJoinPoint.getSignature().getName().substring(3), + resultClassName, + "result object type"); + } + } +} + diff --git a/tests/base/test142/Driver.java b/tests/base/test142/Driver.java new file mode 100644 index 000000000..5e95eb8ee --- /dev/null +++ b/tests/base/test142/Driver.java @@ -0,0 +1,32 @@ +// introductions calling super. + +import org.aspectj.testing.Tester; + +public class Driver { + public static void test() { + C2 c2 = new C2("FooBar"); + + Tester.checkEqual(c2.name, "FooBar", "C2's name"); + } + + public static void main(String[] args) { test(); } +} + +class C1 { + public String name = null; + + public C1(String name) { + this.name = name; + } +} + +class C2 extends C1 { + C2() { super("dummy"); } +} + +aspect A { + C2.new(String name) { + super(name); + } +} + diff --git a/tests/debugger/AJDBThreads.java b/tests/debugger/AJDBThreads.java new file mode 100644 index 000000000..c3cc5e2e6 --- /dev/null +++ b/tests/debugger/AJDBThreads.java @@ -0,0 +1,51 @@ +//package debugger; + +public class AJDBThreads { + public static void main(String[] args) { + new ThreadForker().go(); + } + public static String currentThread = "none"; +} + +class ThreadForker { + public void go() { + fork(1000); + fork(500); + fork(200); + fork(100); + } + + void fork(long sleep) { + new NamedThread(sleep).start(); + } +} + +class NamedThread implements Runnable { + private long sleep; + private String name; + private Thread thread; + private int num = 0; + + public NamedThread(long sleep) { + this.sleep = sleep; + } + + public void start() { + if (thread == null) { + thread = new Thread(this); + name = thread.getName(); + thread.start(); + } + } + + public void run() { + while (true) { + AJDBThreads.currentThread = name; + System.out.println("\n********** " + AJDBThreads.currentThread + ":" + (num++) + "\n"); + try { + Thread.sleep(sleep); + } catch (Exception e) { + } + } + } +} diff --git a/tests/debugger/ArgumentTester.java b/tests/debugger/ArgumentTester.java new file mode 100644 index 000000000..ade62baa7 --- /dev/null +++ b/tests/debugger/ArgumentTester.java @@ -0,0 +1,65 @@ +//package debugger; + +import com.sun.jdi.*; +import com.sun.jdi.event.*; +import com.sun.jdi.request.*; +import java.io.*; +import java.util.*; +import org.aspectj.tools.debugger.*; + +public class ArgumentTester extends Tester { + + public static void main(String[] args) { + new Main(new ArgumentTester(false), args); + } + + public ArgumentTester(boolean b) { + super(b); + } + + public String getClassName() { + return "Arguments"; + } + + public boolean test() { + db(); + try { + setRunArgs("0 1 2"); + stopon(19); + stop(3); + startTest(); + setRunArgs("0 1 2 3 4 5 6"); + stopon(19); + stop(7); + startTest(); + quit(); + return true; + } catch (DebuggerException de) { + de.printStackTrace(); + } + return false; + } + + protected void stop(final int max) { + d.addStopListener(new StopAdapter() { + int times = -1; + public void breakpointEvent(BreakpointEvent e) { + try { + String value = print("s") + ""; + String str = "\"" + times + "\""; + if ((times++) != -1) { + check(value.equals(str), value + "!=" + str); + } + if (times < max) { + cont(); + } else { + clear(19); + d.removeStopListener(this); + } + } catch (DebuggerException de) { + de(de); + } + } + }); + } +} diff --git a/tests/debugger/Arguments.java b/tests/debugger/Arguments.java new file mode 100644 index 000000000..3cb6c3ff2 --- /dev/null +++ b/tests/debugger/Arguments.java @@ -0,0 +1,22 @@ +//package debugger; + +public class Arguments { + String[] args; + + public static void main(String[] args) { + new Arguments(args).go(); + } + + Arguments(String[] args) { + this.args = args; + } + + void go () { + int i = -1; + String s = ""; + while ((++i) < args.length) { + s = args[i]; + System.out.println("[" + i + "] " + s); + } + } +} diff --git a/tests/debugger/BreakpointTester.java b/tests/debugger/BreakpointTester.java new file mode 100644 index 000000000..89275acd6 --- /dev/null +++ b/tests/debugger/BreakpointTester.java @@ -0,0 +1,85 @@ + +//package debugger; + +import com.sun.jdi.*; +import com.sun.jdi.event.*; +import com.sun.jdi.request.*; +import java.io.*; +import java.util.*; +import org.aspectj.tools.debugger.*; + +/** + * BreakpointTester.java + * + * + * Created: Wed Sep 06 15:53:29 2000 + * + * @author <a href="mailto:palm@parc.xerox.com"Jeffrey Palm</a> + */ + +public class BreakpointTester extends Tester { + + public static void main(String[] args) { + new Main(new BreakpointTester(false), args); + } + + public BreakpointTester(boolean d) { + super(d); + } + + public String getClassName() { + return "TestClass"; + } + + public boolean test() { + db(); + Vector locals = new Vector(); + Vector names = new Vector(); + names.add(""); + names.add("system"); + names.add("main"); + IntVector sizes = new IntVector(); + sizes.add(4); + sizes.add(3); + sizes.add(1); + Vector cases = new Vector(); + + try { + stopin("main"); + stopin("a"); + stopin("b"); + //stopat("TestClassAspect", 41); + stopin("c"); + stopat("TestClassAspect", 54); + + int i = 0; + locals = new Vector(); + locals.add("args"); + cases.add(new Case(PCKG + "TestClass.main", 5, 1, locals, names, sizes, (i++))); + + locals = new Vector(); + cases.add(new Case(PCKG + "TestClass.a", -2, 3, locals, names, sizes, (i++))); + + locals = new Vector(); + cases.add(new Case(PCKG + "TestClass.b", -2, 5, locals, names, sizes, (i++))); + +// locals = new Vector(); +// locals.add("thisJoinPoint"); +// cases.add(new Case(PCKG + "TestClassAspect:41", 41, 6, locals, names, sizes, (i++))); + + locals = new Vector(); + cases.add(new Case(PCKG + "TestClass.c", -2, 7, locals, names, sizes, (i++))); + + locals = new Vector(); + locals.add("thisJoinPoint"); + cases.add(new Case(PCKG + "TestClassAspect:54", 54, 8, locals, names, sizes, (i++))); + + stop(cases); + startTest(); + + return true; + } catch (DebuggerException de) { de.printStackTrace(out); + } + return false; + } +} diff --git a/tests/debugger/Main.java b/tests/debugger/Main.java new file mode 100644 index 000000000..fd3dadb37 --- /dev/null +++ b/tests/debugger/Main.java @@ -0,0 +1,74 @@ + +//package debugger; + +/** + * Main.java + * + * + * Created: Wed Sep 06 15:54:41 2000 + * + * @author <a href="mailto:palm@parc.xerox.com"Jeffrey Palm</a> + */ + +public class Main { + + public Main(Tester tester, String[] args) { + String classPath = getArg(args, "-classpath"); + String root = getArg(args, "-root"); + String verbose = getSwitch(args, "-verbose"); + String dbg = getSwitch(args, "-debug"); + boolean debug = !dbg.equals(""); + Tester.setClassPath(classPath); + Tester.setRoot(root); + if (verbose.equals("true")) { + Tester.setVerbose(true); + } + if (dbg.equals("true")) { + Tester.setDebug(true); + } + if (!root.equals("")) { + Tester.setRoot(root); + } + tester.go(args); +// new BreakpointTester(debug).go(args); +// new ThreadTester(debug).go(args); +// new ArgumentTester(debug).go(args); + } + + static void fail(Object o) { + System.err.println("ERROR: " + o); + System.exit(1); + } + + public static String getSwitch(String[] args, String arg) { + return getArg(args, arg, false); + } + + public static String getArg(String[] args, String arg) { + return getArg(args, arg, true); + } + + public static String getArg(String[] args, String arg, boolean needArg) { + String s = ""; + for (int i = 0; i < args.length; i++) { + if (args[i].equals(arg)) { + try { + s = args[i+1]; + break; + } catch (Exception e) { + if (needArg) { + e.printStackTrace(); + fail("Need to set a value for switch " + arg); + } + } + if (needArg) { + return s; + } else { + return "true"; + } + } + } + return ""; + + } +} diff --git a/tests/debugger/Makefile b/tests/debugger/Makefile new file mode 100644 index 000000000..f17cf5bdd --- /dev/null +++ b/tests/debugger/Makefile @@ -0,0 +1,70 @@ +SHELL = bash
+
+### Fill these in #######################
+aspectj = C:/aspectj
+root = C:/aspectj/tests
+your_classpath = C:/aspectj/tests/lib#C:/classes
+tools_jar = C:/apps/jdk1.3/lib/tools.jar
+aspectj_lib = C:/aspectj/lib
+##########################################
+
+aspectj_src = $(aspectj)/src
+jar_path = C:/apps/aspectj0.7/lib
+aspectj_jars = $(jar_path)/aspectjrt.jar;$(jar_path)/aspectjtools.jar
+path = debugger
+tests = $(aspectj)/tests
+d = $(tests)/lib
+lib = $(d)/$(path)
+srcpath = $(tests)
+classpath = "$(d);$(your_classpath);$(aspectj_lib);$(tools_jar)"
+javac_opts = -d $(d) $(g) -sourcepath $(srcpath) -classpath $(classpath)
+javac_compile = javac $(javac_opts)
+java_ex = Main
+java_main = debugger.$(java_ex)
+java_main_class = $(java_ex).class
+java_opts = -classpath $(classpath)
+java_args =
+g = -g
+ajc_compile = ajc $(g) -d $(your_classpath) -workingdir $(root)/ajworkingdir
+javac_names = \
+ Main\
+ Tester\
+ BreakpointTester\
+ ThreadTester
+javac_srcs = $(foreach name, $(javac_names), $(name).java)
+javac_classes = $(foreach name, $(javac_names), $(d)/$(path)/$(name).class)
+
+ajc_names = \
+ TestClass\
+ AJDBThreads
+ajc_srcs = $(foreach name, $(ajc_names), $(name).java)
+ajc_classes = $(foreach name, $(ajc_names), $(d)/$(path)/$(name).class)
+test_args = -classpath "$(your_classpath);$(aspectj_jars)" -root $(root)
+
+.SUFFIXES: .java .class
+
+all: classes aspects
+
+classes:
+ $(javac_compile) $(javac_srcs)
+
+aspects:
+ $(ajc_compile) $(ajc_srcs)
+
+run:
+ java $(java_opts) $(java_main) $(java_args)
+
+clean:
+ rm -Rf *~* $(lib)/*.class
+
+srcclean:
+ rm -Rf *~* *.ajsym #*
+
+db:
+ make -C ../../debugger
+
+test:
+ java $(java_opts) $(java_main) $(test_args)
+
+.java.class:
+ $(javac_compile) $?
diff --git a/tests/debugger/TestClass.java b/tests/debugger/TestClass.java new file mode 100644 index 000000000..712244e6c --- /dev/null +++ b/tests/debugger/TestClass.java @@ -0,0 +1,56 @@ +//package debugger; + +public class TestClass { + public static void main(String[] args) { + new TestClass().go(); + } + + void go() { + String s = "s"; + String ss = "ss"; + String sss = "sss"; + a(); + } + + void a() { + int i3 = 3; + b(); + } + + void b() { + int i1 = 1; + int i2 = 2; + c(); + } + + void c() { + String c = "c"; + System.out.println(c); + } + +} + +aspect TestClassAspect of eachobject(instanceof(TestClass)) { + pointcut a(): receptions(* a(..)) && instanceof(TestClass); + pointcut b(): receptions(* b(..)) && instanceof(TestClass); + pointcut c(): receptions(* c(..)) && instanceof(TestClass); + before(): a() { + System.out.println("before a"); + } + before(): b() { + System.out.println("before b"); + } + before(): c() { + System.out.println("before c"); + } + after(): a() { + long l = 123; + System.out.println("after a"); + } + after(): b() { + System.out.println("after b"); + } + after(): c() { + System.out.println("after c"); + } +} diff --git a/tests/debugger/Tester.java b/tests/debugger/Tester.java new file mode 100644 index 000000000..770c04c44 --- /dev/null +++ b/tests/debugger/Tester.java @@ -0,0 +1,459 @@ +//package debugger; + +import com.sun.jdi.*; +import com.sun.jdi.event.*; +import com.sun.jdi.request.*; +import java.io.*; +import java.util.*; +import org.aspectj.tools.debugger.*; + +/** + * Tester.java + * + * + * Created: Wed Sep 06 15:53:29 2000 + * + * @author <a href="mailto:palm@parc.xerox.com"Jeffrey Palm</a> + */ + +public abstract class Tester extends DebuggerAdapter implements DebuggerListener { + + public abstract boolean test(); + public abstract String getClassName(); + + public static String ROOT = "."; //"C:/aspectj/tests/debugger"; + public final static String PCKG = ""; //"debugger."; + public final static String PATH = ""; //"debugger/"; + public String FILE = getClassName() + ".java"; + public String CLASS = PCKG + getClassName(); + public static String classPath = ".."; + public int time = 0; + public static boolean verboseSuccess = false; //true; + protected AJDebugger d; + protected PrintStream out = System.out; + protected PrintStream err = System.err; + protected boolean mutex; + protected boolean good = true; + protected Vector failures = new Vector(); + + protected static boolean debug = false; //true; + public static void setDebug(boolean _debug) { + debug = _debug; + } + + protected final static String errFile = "err.txt"; + + public Tester(boolean debug) { + this.debug = debug; + this.classPath = classPath; + if (debug()) { + outln("Testing..." + getClassName()); + } + setErr(); + } + + public Tester() { + this(false); + } + + public void go(String[] args){ + good &= test(); + sd(); + if (!good) { + outln("The test failed with the following:\n" + d.iter(failures)); + } + } + + public boolean debug() { + return debug | false; + } + + public static void setClassPath(String _classPath) { + classPath = _classPath; + } + + public static void setRoot(String root) { + ROOT = root; + } + + public static void setVerbose(boolean _verboseSuccess) { + verboseSuccess = _verboseSuccess; + } + + /****************************** Tests ******************************/ + + protected HashMap breaks = new HashMap(); + + static class IntVector extends Vector { + public void add(int i) { + super.add(new Integer(i)); + } + } + + protected void quit() throws DebuggerException { + db("Quitting tester..." + getClassName()); + d.quitCommand(); + //d.exit(false); + d = null; + db("Quit."); + } + + protected Value print(Object obj) throws DebuggerException { + return d.printCommand(obj); + } + + protected void stopin(String method) throws DebuggerException { + stopin(getClassName(), method); + } + + protected void stopin(String className, String method) throws DebuggerException { + d.stopInCommand(PCKG + className, method); + } + + protected void stopat(int line) throws DebuggerException { + stopat(CLASS, line); + } + + protected void stopat(String className, int line) throws DebuggerException { + d.stopAtCommand(PCKG + className, line); + } + + protected void stopon(int line) throws DebuggerException { + d.stopOnCommand(PATH + FILE, line); + } + + protected void clear(int line) throws DebuggerException { + d.clearOnCommand(PATH + FILE, line); + } + + protected void clear(String className, int line) throws DebuggerException { + d.clearAtCommand(PCKG + className, line); + } + + protected void clear(String method) throws DebuggerException { + clear(CLASS, method); + } + + protected void clear(String className, String method) throws DebuggerException { + d.clearInCommand(PCKG + className, method); + } + + protected void step() throws DebuggerException { + d.stepCommand(); + } + + protected void stepi() throws DebuggerException { + d.stepiCommand(); + } + + protected void stepup() throws DebuggerException { + d.stepUpCommand(); + } + + protected void next() throws DebuggerException { + d.nextCommand(); + } + + protected void de(Throwable de) { + de.printStackTrace(); + good = false; + } + + static class Case { + String msg; + int line; + int frames; + List locals; + List names; + List sizes; + int time; + public Case(String msg, int line, int frames, List locals, List names, List sizes, int time) { + this.msg = msg; + this.line = line; + this.frames = frames; + this.locals = locals; + this.names = names; + this.sizes = sizes; + this.time = time; + } + public String toString() { + return + "msg=" + msg + + " line=" + line + + " frames=" + frames + + " locals=" + locals + + " names=" + names + + " sizes=" + sizes + + " time=" + time; + } + } + + protected void stop(final Vector cases) { + d.addStopListener(new StopAdapter() { + public void breakpointEvent(BreakpointEvent e) { + try { + if (cases.size() > time) { + Case caze = (Case) cases.get(time); + //System.out.println(caze); + //System.out.println(d.format(e)); + String msg = caze.msg; + int line = caze.line; + int frames = caze.frames; + List locals = caze.locals; + List names = caze.names; + List sizes = caze.sizes; + int caseTime = caze.time; + check(time == caseTime, "Out of sync " + time + ":" + caseTime); + int lineNumber = d.lineNumber(e.location()); + String methodName = d.methodName(e); + if (lineNumber > 0) { + check(lineNumber == line, "Lines don't match " + + lineNumber + ":" + line); + } else { + check(msg.endsWith(methodName), + "Method '" + msg + "' does not match '" + methodName + "'."); + } + msg(msg + ": " + d.format(e)); + threads(names, sizes); + where("", frames); + locals(locals); + cont(); + } + } catch (/*Debugger*/Exception de) { + de.printStackTrace(out); + good = false; + } + time++; + }}); + } + + protected boolean locals(List locals) throws DebuggerException { + List vars = d.localsCommand(); + boolean allGood = true; + for (int i = 0; i < locals.size(); i++) { + boolean there = false; + if (vars != null) { + for (int j = 0; j < vars.size(); j++) { + LocalVariable lv = (LocalVariable) vars.get(j); + if (lv.name().equals(locals.get(i))) { + there = true; + } + } + } + allGood &= check(there, "The local variable '" + locals.get(i) + + "' was not found in\n" + d.locals(vars)); + } + return allGood; + } + + protected void threads(List names, List sizes) throws DebuggerException { + for (int i = 0; i < names.size(); i++) { + List threads = d.threadsCommand(names.get(i) + ""); + check(threads.size() == ((Integer) sizes.get(i)).intValue(), + "need " + sizes.get(i) + " thread(s) in '" + names.get(i) + "':\n" + d.threads(threads)); + } + } + + protected void where(String name, int frames) throws DebuggerException { + try { + List stack = d.whereCommand(name); + check(stack.size() == frames, + "need " + frames + " frame(s) in '" + name + "':\n" + d.frames(stack)); + } catch (WhereRequest.BadThreadStateException e) { + //TODO + } + } + + /****************************** DebuggerListener ******************************/ + + public void requestSetEvent(RequestEvent re) { + msg("Set " + re.getRequest()); + } + public void requestClearEvent(RequestEvent re) { + msg("Cleared " + re.getRequest()); + } + public void requestDeferredEvent(RequestEvent re) { + + } + public void requestFailedEvent(RequestEvent re) { + msg("Unable to set " + re.getRequest() + " : " + re.getErrorMessage()); + } + + + /****************************** Misc. ******************************/ + + protected void setErr() { + try { + err = new PrintStream(new BufferedOutputStream(new FileOutputStream(errFile)), true) { + public void write(int b) { + super.write(b); + } + }; + } catch (IOException ioe) { + } + System.setErr(err); + } + + protected void setOut() { + PrintStream redirect = new PrintStream(new OutputStream() { + public void write(int b) {} + }); + System.setOut(redirect); + } + + protected void down() { + mutex = true; + } + + protected void up() { + mutex = false; + } + + protected void stall() { + stall(getMaxStallTime()); + } + + protected long getMaxStallTime() { + return (long) 20000; + } + + protected void stall(long time) { + long start = System.currentTimeMillis(); + while (mutex) { + if ((System.currentTimeMillis() - start) > time) { + errln("Stalled for too long"); + break; + } + } + } + + protected void cont() { + try { + d.contCommand(); + } catch (DebuggerException de) { + } + } + + protected void sd() { + if (d != null) { + d.shutDown(); + } + d = null; + } + + protected void db(Object o) { + if (debug()) { + System.out.println(o); + } + } + + protected void db() { + sd(); + d = new AJDebugger(this, false); + d.addDebuggerListener(this); + ex("use " + ROOT); + } + + protected void stop() { + stop(5000); + } + + protected void stop(long time) { + long start = System.currentTimeMillis(); + while (!d.isAtBreakpoint()) { + if ((System.currentTimeMillis() - start) > time) { + errln("Stopped for too long"); + break; + } + } + } + + protected Object ex(String command) { + return d.execute(command); + } + + public void outln(Object o) { + if ((o+"").startsWith("Initializing ajdb...")) { + return; + } + out(o); + out("\n"); + } + + protected void out(Object o) { + out.print(o); + out.flush(); + } + + protected void err(Object o) { + err.print(o); + err.flush(); + } + + protected void errln(Object o) { + err(o); + err("\n"); + } + + protected boolean check(boolean b, String msg) { + if (!b) { + outln("<<FAIL>> " + msg); + good = false; + failures.add(msg); + } else if (verboseSuccess) { + outln("<<SUCESS>> " + msg); + } + return b; + } + + protected boolean check(Object o, String msg) { + return check(o != null, msg); + } + + protected void msg(Object o) { + if (debug()) { + outln(o); + } else { + err.println(o); + } + } + + private String runArgs = ""; + public String getRunArgs() { + return runArgs; + } + public void setRunArgs(String runArgs) { + this.runArgs = runArgs; + } + + private final String _getArgs() { + String args = getRunArgs(); + if (args != null && !args.equals("") && !args.startsWith(" ")) { + args = " " + args; + } + return args; + } + + protected void startTest() { + String cmd = "run " + classPath() + " " + CLASS + _getArgs(); + startTest(cmd); + } + + protected static String classPath() { + if (classPath == null || classPath.equals("")) { + return ""; + } + return "-classpath \"" + classPath + "\""; + } + + protected void startTest(String cmd) { + d.addVMListener(new VMAdapter() { + public void vmDisconnectEvent(VMDisconnectEvent e) { + msg("Done"); + up(); + }}); + ex(cmd); + down(); + stall(); + } +} diff --git a/tests/debugger/ThreadTester.java b/tests/debugger/ThreadTester.java new file mode 100644 index 000000000..bb7c27000 --- /dev/null +++ b/tests/debugger/ThreadTester.java @@ -0,0 +1,105 @@ + +//package debugger; + +import com.sun.jdi.*; +import com.sun.jdi.event.*; +import com.sun.jdi.request.*; +import java.io.*; +import java.util.*; +import org.aspectj.tools.debugger.*; + +/** + * ThreadTester.java + * + * + * Created: Wed Sep 27 13:56:44 2000 + * + * @author <a href="mailto:palm@parc.xerox.com"Jeffrey Palm</a> + */ + +public class ThreadTester extends Tester { + + public static void main(String[] args) { + new Main(new ThreadTester(false), args); + } + + public ThreadTester(boolean d) { + super(d); + } + + public String getClassName() { + return "AJDBThreads"; + } + + public boolean test() { + db(); + try { + stopon(43); + stop1(); + startTest(); + quit(); + return true; + } catch (DebuggerException de) { + de.printStackTrace(); + } + return false; + } + + protected void stop1() { + d.addStopListener(new StopAdapter() { + + int times = 0; + int stopTimes = 0; + int max = 5; + int stopMax = 3; + String thread = ""; + Pair[] pairs = new Pair[max]; + + class Pair { + String thread; + int time; + Pair(String thread, int time) { + this.thread = thread; + this.time = time; + } + } + + public void breakpointEvent(BreakpointEvent e) { + try { + String threadName = d.getDefaultThread().name(); + msg("stop times=" + times + " thread=" + threadName); + if ((++times) < max) { + thread = threadName; + Pair pair = new Pair(thread, times); + pairs[times] = pair; + step(); + } else { + quit(); + } + } catch (DebuggerException de) { + de(de); + } + } + + public void stepEvent(StepEvent se) { + try { + ThreadReference threadRef = d.getDefaultThread(); + check(pairs[times].thread.equals(thread), "Should step in *one* thread"); + msg("\ttimes=" + times + ":" + stopTimes + " thread=" + threadRef.name()); + if ((++stopTimes) < stopMax) { + step(); + } else { + stopTimes = 0; + cont(); + } + } catch (DebuggerException de) { + de(de); + } + } + }); + } + + protected long getMaxStallTime() { + return (long) 3 * super.getMaxStallTime(); + } +} diff --git a/tests/design/around/FakeStackChecker.java b/tests/design/around/FakeStackChecker.java new file mode 100644 index 000000000..f66cab919 --- /dev/null +++ b/tests/design/around/FakeStackChecker.java @@ -0,0 +1,6 @@ +import org.aspectj.testing.Tester; + +public class FakeStackChecker { + public static void setBaseDepth() { } + public static void checkDepth(int expectedDepth, String message) { } +} diff --git a/tests/design/around/ReturnCastProceed.java b/tests/design/around/ReturnCastProceed.java new file mode 100644 index 000000000..4141a8e98 --- /dev/null +++ b/tests/design/around/ReturnCastProceed.java @@ -0,0 +1,83 @@ +import org.aspectj.testing.Tester; + + +public class ReturnCastProceed extends Helper { + + public static void main(String[] args) { + StackChecker.setBaseDepth(); + + Tester.checkEqual(mInt(), 3, "mInt is 3"); + Tester.checkAndClearEvents( new String[] { "advice" } ); + + mVoid(); + Tester.checkAndClearEvents(new String[] {"advice", "void body" }); + + Tester.checkEqual(mString(), "I'm a string", "mString is right"); + Tester.checkAndClearEvents(new String[] { "advice" }); + + Tester.checkEqual(mInteger().intValue(), 5555, "mInteger is boxed 5555"); + Tester.checkAndClearEvents(new String[] { "advice" }); + + Tester.check(mRunnable() instanceof Runnable, "mRunnable returns a Runnable"); + Tester.checkAndClearEvents(new String[] { "advice" }); + + Tester.check(mObject() == f, "mObject returns f"); + Tester.checkAndClearEvents(new String[] { "advice" }); + + } +} + +class Helper { + static Float f = new Float(37.8); + + static int mInt() { + //StackChecker.checkDepth(2, "mInt"); + return 3; + } + + static void mVoid() { + StackChecker.checkDepth(2, "mVoid"); + Tester.event("void body"); + } + + static String mString() { + StackChecker.checkDepth(2, "mString"); + return "I'm a string"; + } + static Integer mInteger() { + StackChecker.checkDepth(2, "mInteger"); + return new Integer(5555); + } + + static Runnable mRunnable() { + //StackChecker.checkDepth(2, "mRunnable"); + return new Runnable() { + public void run() { + Tester.event("i'm running"); // not used yet. + } + }; + } + + static Object mObject() { + StackChecker.checkDepth(2, "mObject"); + return f; + } +} + +aspect A { + Object around(): execution(static * Helper.*(..)) { + Tester.event("advice"); + return (Object) proceed(); + } + +// Object around(): execution(static * ReturnCastProceed.*(..)) { +// Object ret = proceed(); +// System.err.println("doing stuff"); +// return ret; +// } + +// Object around(): execution(static * ReturnCastProceed.*(..)) { +// return proceed(); +// } + +} diff --git a/tests/design/around/StackChecker.java b/tests/design/around/StackChecker.java new file mode 100644 index 000000000..e55c64055 --- /dev/null +++ b/tests/design/around/StackChecker.java @@ -0,0 +1,16 @@ +import org.aspectj.testing.Tester; + +public class StackChecker { + static int baseStackDepth = 0; + + public static void setBaseDepth() { + int depth = new Throwable().getStackTrace().length - 2; // XXX 1.4 only + baseStackDepth = depth; + } + + + public static void checkDepth(int expectedDepth, String message) { + int depth = new Throwable().getStackTrace().length - 1 - baseStackDepth; + Tester.checkEqual(depth, expectedDepth, message); + } +} diff --git a/tests/design/calls/Simple.java b/tests/design/calls/Simple.java new file mode 100644 index 000000000..f1277bde0 --- /dev/null +++ b/tests/design/calls/Simple.java @@ -0,0 +1,173 @@ +import org.aspectj.testing.Tester; + +import java.lang.reflect.*; + +public class Simple { + public static void main(String[] args) { + new Simple().fromInstanceMethod("a1", 1); + //Tester.printEvents(); + Tester.checkAndClearEvents(new String[] { + "this(simple)", + "call(C.*)", + "args(..,a1)", + "C.toStaticMethod(a1)", + + "this(simple)", + "call(SubC.*)", + "args(..,a1)", + "SubC.toStaticMethod(a1)", + + "this(simple)&&target(c)", + "target(c)", + "this(simple)", + "call(C.*)", + "args(..,a1)", + "C.toInstanceMethod(a1)", + + "this(simple)&&target(subc)", + "target(subc)", + "this(simple)", + "call(C.*)", + "call(C.*)&&target(SubC)", + "args(..,a1)", + "SubC.toInstanceMethod(a1)", + + "this(simple)&&target(subc)", + "target(subc)", + "this(simple)", + "call(C.*)", + "call(SubC.*)", + "call(SubC.*)&&target(C)", + "call(C.*)&&target(SubC)", + "args(..,a1)", + "SubC.toInstanceMethod(a1)", + + //??? these events are not expected because advice on call join points + // isn't run when the calls are made reflectively -- Change from 1.0 to 1.1 + //"call(C.*)", + //"call(C.*)&&target(SubC)", + //"args(..,a1)", + "SubC.toInstanceMethod(a1)", + }); + Simple.fromStaticMethod("a2"); + //Tester.printEvents(); + Tester.checkAndClearEvents(new String[] { + "call(C.*)", + "args(..,a2)", + "C.toStaticMethod(a2)", + + "call(SubC.*)", + "args(..,a2)", + "SubC.toStaticMethod(a2)", + + "target(c)", + "call(C.*)", + "args(..,a2)", + "C.toInstanceMethod(a2)", + + "target(subc)", + "call(C.*)", + "call(C.*)&&target(SubC)", + "args(..,a2)", + "SubC.toInstanceMethod(a2)", + + "target(subc)", + "call(C.*)", + "call(C.*)&&target(SubC)", + "SubC.toInstanceMethod(2)", + }); + } + + public static void fromStaticMethod(String s) { + C.toStaticMethod(s); + SubC.toStaticMethod(s); + C c = new C(); + c.toInstanceMethod(0, s); + c = new SubC(); + c.toInstanceMethod(0, s); + c.toInstanceMethod(0, new Integer(2)); + } + + public void fromInstanceMethod(String s, int v) { + C.toStaticMethod(s); + SubC.toStaticMethod(s); + C c = new C(); + c.toInstanceMethod(v, s); + c = new SubC(); + c.toInstanceMethod(v, s); + SubC subc = new SubC(); + subc.toInstanceMethod(v, s); + doReflectiveCall(subc, v, s); + } + + void doReflectiveCall(C c, int v, String s) { + try { + Method m = + C.class.getMethod("toInstanceMethod", + new Class[] {Integer.TYPE, Object.class}); + m.invoke(c, new Object[] {new Integer(v), s}); + } catch (Exception e) { + Tester.event("unexpected exception: " + e); + } + } + + public String toString() { return "simple"; } +} + + +class C { + public static void toStaticMethod(Object s) { + Tester.event("C.toStaticMethod("+s+")"); + } + + public void toInstanceMethod(int value, Object str) { + Tester.event("C.toInstanceMethod("+str+")"); + } + public String toString() { return "c"; } +} + +class SubC extends C { + public static void toStaticMethod(Object s) { + Tester.event("SubC.toStaticMethod("+s+")"); + } + + public void toInstanceMethod(int x, Object str) { + Tester.event("SubC.toInstanceMethod("+str+")"); + } + public String toString() { return "subc"; } +} + +aspect A { + before(C c, Simple s): this(s) && target(c) { + Tester.event("this("+s+")&&target("+c+")"); + } + + before(C c): target(c) && within(Simple) { + Tester.event("target("+c+")"); + } + + before(Simple s): this(s) && call(* C+.*(..)) { + Tester.event("this("+s+")"); + } + + before(): call(* C.*(..)) { + Tester.event("call(C.*)"); + } + + before(): call(* SubC.*(..)) { + Tester.event("call(SubC.*)"); + } + + before(): call(* SubC.*(..)) && target(C) { + Tester.event("call(SubC.*)&&target(C)"); + } + + before(): call(* C.*(..)) && target(SubC) { + Tester.event("call(C.*)&&target(SubC)"); + } + + before(String s): args(.., s) && call(* C+.*(..)) { + //System.out.println(thisJoinPoint); + Tester.event("args(..,"+s+")"); + } +} diff --git a/tests/design/calls/Tricky1.java b/tests/design/calls/Tricky1.java new file mode 100644 index 000000000..99f14f395 --- /dev/null +++ b/tests/design/calls/Tricky1.java @@ -0,0 +1,33 @@ +public class Tricky1 { + public static void main(String[] args) { + Product1 p1, p2, p3; + p1 = Product1.create(); + p2 = Product1.create(); + p3 = Product1.create(); + System.out.println("p1: " + p1 + ", p2: " + p2 + ", p3: " + p3); + } +} + + +class Product1 { + public static Product1 create() { + return new Product1(); + } +} + +aspect MakeProduct1Singleton { + private static Product1 singletonProduct1 = null; + + // all calls to the Product1.create() method + pointcut creationCut(): calls(Product1, new(..)); //Product1 create()); + + // all calls to the above that don't happen in this aspect + pointcut externalCreationCut(): !within(MakeProduct1Singleton) && creationCut(); + + static around () returns Product1: externalCreationCut() { + if (singletonProduct1 == null) { + singletonProduct1 = new Product1(); //Product1.create(); + } + return singletonProduct1; + } +} diff --git a/tests/design/eachobject/Simple.java b/tests/design/eachobject/Simple.java new file mode 100644 index 000000000..8ffe3e934 --- /dev/null +++ b/tests/design/eachobject/Simple.java @@ -0,0 +1,83 @@ +import org.aspectj.testing.Tester; +import org.aspectj.lang.NoAspectBoundException; + +public class Simple { + public static void main(String[] args) { + C c = new C(); + c.m(); + // aspect A is bound to the base class C + Tester.checkEqual(c.history.toString(), "A.before, C.m, ", "C"); + + SubC1 subc1 = new SubC1(); + subc1.m(); + // aspect A is also bound to the subclass SubC1 + Tester.checkEqual(subc1.history.toString(), "A.before, SubC1.m, C.m, ", "SubC1"); + + SubC2 subc2 = new SubC2(); + subc2.m(); + // aspect A is overriden by SubA on the class SubC2 + Tester.checkEqual(subc2.history.toString(), "SubA2.before, A.before, A.before, C.m, ", "SubC2"); + + + Tester.check(SubA1.aspectOf(subc2) instanceof SubA1, "SubA1.aspectOf(subc2) instanceof SubA1"); + + // retrieving the SubA aspect using its own aspectOf method + Tester.check(SubA2.aspectOf(subc2) instanceof SubA2, "Sub2A.aspectOf(subc2) instanceof SubA2"); + + try { + // trying to retrieve a SubA aspect where only an A aspect is present + SubA2 subA = SubA2.aspectOf(c); + Tester.checkFailed("SubA2.aspectOf(c) should throw an exception"); + } catch (NoAspectBoundException nae) { + Tester.note("NoAspectException caught"); + } + + Tester.check("NoAspectException caught"); + } +} + + +class C { + // records what methods are called and advice are run + public StringBuffer history = new StringBuffer(); + + public void m() { + history.append("C.m, "); + } +} + +class SubC1 extends C { + public void m() { + history.append("SubC1.m, "); + super.m(); + } +} + +class SubC2 extends C { +} + + +abstract aspect A pertarget(targets()) { + abstract pointcut targets(); + StringBuffer history = null; + after (C c) returning (): target(c) && initialization(new(..)) { + //System.out.println(thisJoinPoint); + history = c.history; + } + + before (): call(void m()) { + history.append("A.before, "); + } +} + +aspect SubA1 extends A { + pointcut targets(): target(C); +} + + +aspect SubA2 extends A { + pointcut targets(): target(SubC2); + before (): call(void m()) { + history.append("SubA2.before, "); + } +} diff --git a/tests/design/eachobject/Tricky1.java b/tests/design/eachobject/Tricky1.java new file mode 100644 index 000000000..7359ceaa3 --- /dev/null +++ b/tests/design/eachobject/Tricky1.java @@ -0,0 +1,95 @@ +import org.aspectj.testing.Tester; + +/** + * test time of creation and existence of aspect of eachobject(P) + * where P is not instanceof + */ +public class Tricky1 { + public static void main(String[] args) { + // the ReceptionAspect isn't created until just before the m message is received + C c = new C(); + c.foo(); + c.m(); + Tester.checkEqual(c.history.toString(), "C.foo, SubReceptionAspect1.before, C.m, "); + Tester.check(!SubReceptionAspect2.hasAspect(c), "!Sub2.hasAspect"); + + // if m1 is called first, then a single SubReceptionAspect is created instead + // no matter how many times m1 is called + c = new C(); + c.m1(); + c.m1(); + Tester.checkEqual(c.history.toString(), + "SubReceptionAspect2.before, C.m1, SubReceptionAspect2.before, C.m1, "); + Tester.check(!SubReceptionAspect1.hasAspect(c), "!Sub1.hasAspect"); + + + // calling both m and m1 should prduce one of each aspect + c = new C(); + c.m(); + c.m1(); + Tester.check(SubReceptionAspect1.hasAspect(c), "Sub1.hasAspect"); + Tester.check(SubReceptionAspect2.hasAspect(c), "Sub2.hasAspect"); + + + // be sure nothing unexpected happens on subtypes + c = new SubC(); + c.foo(); + c.m(); + Tester.checkEqual(c.history.toString(), "C.foo, SubReceptionAspect1.before, SubC.m, "); + + } +} + +class C { + // records what methods are called and advice are run + public StringBuffer history = new StringBuffer(); + + public void m() { + history.append("C.m, "); + } + public void m1() { + history.append("C.m1, "); + } + + public void foo() { + history.append("C.foo, "); + } +} + +class SubC extends C { + public void m() { + history.append("SubC.m, "); + } +} + + +abstract aspect ReceptionAspect perthis(targets()) { + abstract pointcut targets(); + + protected void noteBefore(C c) { + c.history.append("ReceptionAspect.before, "); + } + + before (C c): target(c) && execution(* *(..)) { + noteBefore(c); + } +} + + +aspect SubReceptionAspect1 extends ReceptionAspect { + pointcut targets(): execution(void m()); + + protected void noteBefore(C c) { + c.history.append("SubReceptionAspect1.before, "); + } +} + + + +aspect SubReceptionAspect2 extends ReceptionAspect { + pointcut targets(): execution(void m1()); + + protected void noteBefore(C c) { + c.history.append("SubReceptionAspect2.before, "); + } +} diff --git a/tests/design/eachobject/Tricky2.java b/tests/design/eachobject/Tricky2.java new file mode 100644 index 000000000..1f7ca9a36 --- /dev/null +++ b/tests/design/eachobject/Tricky2.java @@ -0,0 +1,77 @@ +import org.aspectj.testing.Tester; +import org.aspectj.runtime.NoAspectException; + +public class Simple { + public static void main(String[] args) { + C c = new C(); + c.m(); + // aspect A is bound to the base class C + Tester.checkEqual(c.history.toString(), "A.before, C.m, ", "C"); + + SubC1 subc1 = new SubC1(); + subc1.m(); + // aspect A is also bound to the subclass SubC1 + //Tester.checkEqual(subc1.history.toString(), "A.before, SubC1.m, C.m, ", "SubC1"); + + SubC2 subc2 = new SubC2(); + subc2.m(); + // aspect A is overriden by SubA on the class SubC2 + //Tester.checkEqual(subc2.history.toString(), "SubA.before, A.before, C.m, ", "SubC2"); + + + // retrieving the SubA aspect using its super's aspectOf static method + //Tester.check(A.aspectOf(subc2) instanceof SubA, "A.aspectOf(subc2) instanceof SubA"); + + // retrieving the SubA aspect using its own aspectOf method + //Tester.check(SubA.aspectOf(subc2) instanceof SubA, "SubA.aspectOf(subc2) instanceof SubA"); + + try { + // trying to retrieve a SubA aspect where only an A aspect is present + SubA subA = SubA.aspectOf(c); + Tester.checkFailed("SubA.aspectOf(c) should throw an exception"); + } catch (NoAspectException nae) { + Tester.note("NoAspectException caught"); + } + + Tester.check("NoAspectException caught"); + } +} + + +class C { + // records what methods are called and advice are run + public StringBuffer history = new StringBuffer(); + + public void m() { + history.append("C.m, "); + } +} + +class SubC1 extends C { + public void m() { + history.append("SubC1.m, "); + super.m(); + } +} + +class SubC2 extends C { +} + + +abstract aspect A { + //StringBuffer history = null; + after (Object object) returning (): instanceof(object) && receptions(new(..)) { + //history = c.history; + System.out.println("created a: " + object + " on a " + this); + } + + abstract pointcut targets(); + + before (): targets() { + System.out.println("A.before, "); + } +} + +aspect SubA extends A of eachobject(instanceof(C)) { + pointcut targets(): receptions(void m()); +} diff --git a/tests/design/eachobject/Tricky3.java b/tests/design/eachobject/Tricky3.java new file mode 100644 index 000000000..9f03a0369 --- /dev/null +++ b/tests/design/eachobject/Tricky3.java @@ -0,0 +1,32 @@ +import org.aspectj.testing.Tester; + +public class Tricky3 { + public static void main(String[] args) { + C c = new SubC(); + } +} + +class C { +} + +class SubC extends C { + void m() { } +} + +aspect A1 pertarget(target(SubC)) { + after() returning (SubC sub): call(new(..)) { + System.out.println("new " + sub); + } +} + +aspect A2 pertarget(call(void SubC.*())) { + after() returning (SubC sub): call(new(..)) { + System.out.println("new " + sub); + } +} + +aspect A3 pertarget(call(void m())) { + after() returning (SubC sub): call(new(..)) { + System.out.println("new " + sub); + } +} diff --git a/tests/design/intro/Interfaces.java b/tests/design/intro/Interfaces.java new file mode 100644 index 000000000..67ca0f684 --- /dev/null +++ b/tests/design/intro/Interfaces.java @@ -0,0 +1,98 @@ +import org.aspectj.testing.Tester; + +import java.util.*; + +import org.aspectj.lang.reflect.*; + +public class Interfaces { + public static void main(String[] args) { + String v = I.staticField; + Tester.checkEqual(notes, "I.staticField", "static init of I"); + Tester.checkEqual(v, "I.staticField"); + clearNotes(); + + I i = (I)new C(); + Tester.checkEqual(notes, + "initialize-I instanceField-A* I.instanceField privateField-A* I.privateField-from-A privateField-A* I.privateField-from-B", + "inst init of I"); + Tester.checkEqual(i.instanceField, "I.instanceField"); + clearNotes(); + + v = SubI.staticField; + Tester.checkEqual(notes, "SubI.staticField", "static init of SubI"); + Tester.checkEqual(v, "SubI.staticField"); + clearNotes(); + + SubI si = (SubI)new SubC(); + Tester.checkEqual(notes, + "initialize-I instanceField-A* I.instanceField privateField-A* I.privateField-from-A privateField-A* I.privateField-from-B SubI.instanceField", + "inst init of SubI"); + Tester.checkEqual(si.instanceField, "SubI.instanceField"); + clearNotes(); + + + i.instanceField += "-XXX"; + Tester.checkEqual(notes, "I.instanceField-!I||A*", "I.instanceField set"); + Tester.checkEqual(i.instanceField, "I.instanceField-XXX"); + } + + private static List notes = new LinkedList(); + + public static void clearNotes() { + notes = new LinkedList(); + //System.out.println("***********************************************"); + } + + public static String note(String note) { + notes.add(note); + //System.out.println(note); + return note; + } +} + +class C implements I { + String instanceField = "C.instanceField"; +} + +class SubC extends C implements SubI { + String instanceField = "SubC.instanceField"; +} + +interface I { + // must follow standard Java rules + String staticField = Interfaces.note("I.staticField"); +} + +interface SubI extends I { + String staticField = Interfaces.note("SubI.staticField"); +} + + + +aspect A1 { + public String SubI.instanceField = Interfaces.note("SubI.instanceField"); + + public String I.instanceField = Interfaces.note("I.instanceField"); + private String I.privateField = Interfaces.note("I.privateField-from-A"); +} + +aspect A2 { + private String I.privateField = Interfaces.note("I.privateField-from-B"); +} + +aspect A3 { + before(I i): !within(I||A*) && set(String I.*) && target(i) { + Interfaces.note(thisJoinPoint.getSignature().toShortString()+"-!I||A*"); // +"::" + thisJoinPoint.getSourceLocation().getWithinType()); + } + + before(I i): within(I) && set(String I.*) && target(i) { + Interfaces.note(thisJoinPoint.getSignature().getName()+"-I"); //toShortString()); + } + before(I i): within(A*) && set(String I.*) && target(i) { + Interfaces.note(thisJoinPoint.getSignature().getName()+"-A*"); //toShortString()); + } + + before(I i): initialization(I.new(..)) && target(i) { + Interfaces.note("initialize-I"); + } +} diff --git a/tests/design/intro/MultiInheritCF.java b/tests/design/intro/MultiInheritCF.java new file mode 100644 index 000000000..cd9be4b91 --- /dev/null +++ b/tests/design/intro/MultiInheritCF.java @@ -0,0 +1,47 @@ +import org.aspectj.testing.Tester; + +public class MultiInheritCF { + public static void main(String[] args) { + C c = new C(); + Tester.checkEqual(c.fromRoot(), "Root"); + Tester.checkEqual(c.toString(), "I1"); + Tester.checkEqual(c.fromI2(), "I2"); + Tester.checkEqual(c.fromIRoot0(), "IRoot"); + Tester.checkEqual(c.fromIRoot1(), "I1"); + Tester.checkEqual(c.fromIRoot2(), "I2"); + } +} + +abstract class Root { + public String fromRoot() { return "Root"; } + public abstract String fromI2(); + public String toString() { return "Root"; } +} + +class C extends Root implements I1, I2 { +} + +interface IRoot { +} + +interface I1 extends IRoot { + public String fromRoot(); +} + +interface I2 extends IRoot { +} + + +aspect A { + public String IRoot.fromIRoot0() { return "IRoot"; } + public String IRoot.fromIRoot1() { return "IRoot"; } + public String IRoot.fromIRoot2() { return "IRoot"; } + + + public String I1.toString() { return "I1"; } //ERR: conflicts with Root + public abstract int I2.toString(); //ERR: conflicts with Root and I1 + String I2.fromI2() { return "I2"; } //ERR: weaker than Root + + public String I1.fromIRoot1() { return "I1"; } + public String I2.fromIRoot1() { return "I1"; } //ERR: conflicts with I1 +} diff --git a/tests/design/intro/MultiInheritCP.java b/tests/design/intro/MultiInheritCP.java new file mode 100644 index 000000000..704041086 --- /dev/null +++ b/tests/design/intro/MultiInheritCP.java @@ -0,0 +1,46 @@ +import org.aspectj.testing.Tester; + +public class MultiInheritCP { + public static void main(String[] args) { + C c = new C(); + Tester.checkEqual(c.fromRoot(), "Root"); + Tester.checkEqual(c.toString(), "I1"); + Tester.checkEqual(c.fromI2(), "I2"); + Tester.checkEqual(c.fromIRoot0(), "IRoot"); + Tester.checkEqual(c.fromIRoot1(), "I1"); + Tester.checkEqual(c.fromIRoot2(), "I2"); + } +} + +abstract class Root { + public String fromRoot() { return "Root"; } + public abstract String fromI2(); +} + +class C extends Root implements I1, I2 { +} + +interface IRoot { +} + +interface I1 extends IRoot { + public String fromRoot(); +} + +interface I2 extends IRoot { +} + + +aspect A { + public String IRoot.fromIRoot0() { return "IRoot"; } + public String IRoot.fromIRoot1() { return "IRoot"; } + public String IRoot.fromIRoot2() { return "IRoot"; } + + + public String I1.toString() { return "I1"; } + public abstract String I2.toString(); + public String I2.fromI2() { return "I2"; } + + public String I1.fromIRoot1() { return "I1"; } + public String I2.fromIRoot2() { return "I2"; } +} diff --git a/tests/design/intro/Overriding.java b/tests/design/intro/Overriding.java new file mode 100644 index 000000000..7e8412eac --- /dev/null +++ b/tests/design/intro/Overriding.java @@ -0,0 +1,82 @@ +import org.aspectj.testing.Tester; + +public class Overriding { + public static void main(String[] args) { + SuperC sc = new C(); + + Tester.checkEqual(sc.m(), "A2"); + Tester.checkEqual(A3.getMi(sc), "A3.I2"); + Tester.checkEqual(A4.getMi(sc), "A4.I2"); + Tester.checkEqual(A3.getM2(sc), "A3.Inner"); + Tester.checkEqual(A4.getM2(sc), "A4.Inner"); + } +} + +abstract class SuperC { } +class C extends SuperC {} +class SubC extends C {} + +aspect A1 { + abstract String SuperC.m(); +} + + +aspect A2 { + String C.m() { + return "A2"; + } +} + +class A3 { + static aspect I1 { + private abstract String SuperC.mi(); + } + + static aspect I2 { + private String C.mi() { + return "A3.I2"; + } + } + + public static String getMi(SuperC sc) { + return sc.mi(); + } + + + static aspect Inner { + private abstract String SuperC.m2(); + private String C.m2() { + return "A3.Inner"; + } + } + public static String getM2(SuperC sc) { + return sc.m2(); + } +} + +class A4 { + static aspect I1 { + private abstract String SuperC.mi(); + } + + static aspect I2 { + private String C.mi() { + return "A4.I2"; + } + } + + public static String getMi(SuperC sc) { + return sc.mi(); + } + + static aspect Inner { + private abstract String SuperC.m2(); + private String C.m2() { + return "A4.Inner"; + } + } + public static String getM2(SuperC sc) { + return sc.m2(); + } + +} diff --git a/tests/design/intro/Simple.java b/tests/design/intro/Simple.java new file mode 100644 index 000000000..cd995d993 --- /dev/null +++ b/tests/design/intro/Simple.java @@ -0,0 +1,80 @@ +import org.aspectj.testing.Tester; + +public class Simple { + public static void main(String[] args) { + C c = new C(); + I i = (I)new C("hi"); + Tester.checkEqual(c.foo(), "foo:bar"); + Tester.checkEqual(i.mumble(), "mumble:foo:bar"); + + Tester.checkEqual(A.Cm(), "from A"); + Tester.checkEqual(B.Cm(), "from B"); + + c.idata = "c-mumble"; + Tester.checkEqual(c.idata, "c-mumble"); + Tester.checkEqual(i.idata, "mumble"); + + Tester.check("new A.C"); + Tester.check("new B.C"); + } +} + +class C { + public C() { super(); } + public String bar() {return "bar"; } +} + +interface I { + String foo(); + String bar(); +} + + +aspect A { + private String C.data = "foo"; + private String C.data1 = this.data; + + public String I.idata = "mumble"; + + public String C.foo() { + String s = this.data; + Tester.checkEqual(s, data1); + return data + ":" + bar(); + } + + declare parents: C implements I; + + public String I.mumble() { + return idata + ":" + foo(); + } + + private String C.m() { + return "from A"; + } + + public static String Cm() { + return new C(2).m(); + } + + public C.new(String s) { } + + private C.new(int i) { + Tester.note("new A.C"); + } +} + +aspect B { + private String C.data = "B"; + + private String C.m() { + return "from " + data; + } + + public static String Cm() { + return new C(2).m(); + } + + private C.new(int i) { + Tester.note("new B.C"); + } +} diff --git a/tests/design/intro/Statics.java b/tests/design/intro/Statics.java new file mode 100644 index 000000000..183e96be9 --- /dev/null +++ b/tests/design/intro/Statics.java @@ -0,0 +1,56 @@ +import org.aspectj.testing.Tester; + +public class Statics { + public static void main(String[] args) { + new C(); + Tester.checkEqual(C.getCount(), 1, "C.getCount()"); + Tester.checkEqual(SubC.getCount(), 0, "SubC.getCount()"); + new SubC(); + Tester.checkEqual(C.getCount(), 1, "C.getCount()"); + Tester.checkEqual(SubC.getCount(), 1, "SubC.getCount()"); + new SubC(); + Tester.checkEqual(C.getCount(), 1, "C.getCount()"); + Tester.checkEqual(SubC.getCount(), 2, "SubC.getCount()"); + + I.count += 1; + Tester.checkEqual(I.getCount(), 1, "I.getCount()"); + + Tester.checkEqual(I1.count, 10, "I1.count"); + Tester.checkEqual(SubI.count, 20, "SubI.count"); + Tester.checkEqual(SubI.getCount(), 1, "SubI.getCount()"); + } +} + + +class C { } + +class SubC extends C {} + +interface I {} + +interface I1 { + int N = -1; + Object o = new Integer(2); +} + +interface SubI extends I, I1 { } + +aspect Counter { + private static int C.instanceCount = 0; + private void C.incCount() { instanceCount++; } + static int C.getCount() { return instanceCount; } + private static int SubC.instanceCount = 0; + private void SubC.incCount() { instanceCount++; } + static int SubC.getCount() { return instanceCount; } + + static int I.count = 0; + static int I.getCount() { return count; } + + static int I1.count = 10; + + static int SubI.count = 20; + + after() returning (C c) : call(C+.new(..)) { + c.incCount(); + } +} diff --git a/tests/design/intro/Within.java b/tests/design/intro/Within.java new file mode 100644 index 000000000..49021c1f0 --- /dev/null +++ b/tests/design/intro/Within.java @@ -0,0 +1,64 @@ +import org.aspectj.testing.Tester; + +public class Within { + public static void main(String[] args) { + C c = new C(); + c.mi(); + + Tester.check("I.mi within A1"); + Tester.check("I.mi instanceof C"); + Tester.check("I.mi instanceof I"); + + c.mc(); + } +} + + +class C { + void mc() {} +} + +interface I {} + +aspect A1 { + void I.mi() {} +} + +aspect A2 { + declare parents: C implements I; +} + + + +aspect Test { + before (): execution(* I.*(..)) && within(C) { + Tester.checkFailed(thisJoinPoint + " I.* within C"); + } + before (): execution(* I.*(..)) && within(I) { + Tester.checkFailed(thisJoinPoint + " I.* within I"); + } + before (): execution(* I.*(..)) && within(A1) { + Tester.checkEqual(thisJoinPoint.getSignature().getName(), "mi", + thisJoinPoint + " I.* within A1"); + Tester.note("I.mi within A1"); + } + before (): execution(* I.*(..)) && within(A2) { + } + + before (): execution(* I.*(..)) && this(C) { + Tester.checkEqual(thisJoinPoint.getSignature().getName(), "mi", + thisJoinPoint + " I.* instanceof C"); + Tester.note("I.mi instanceof C"); + } + before (): execution(* I.*(..)) && this(I) { + Tester.checkEqual(thisJoinPoint.getSignature().getName(), "mi", + thisJoinPoint + " I.* instanceof I"); + Tester.note("I.mi instanceof I"); + } + before (): execution(* I.*(..)) && this(A1) { + Tester.checkFailed(thisJoinPoint + " I.* instanceof A1"); + } + before (): execution(* I.*(..)) && this(A2) { + Tester.checkFailed(thisJoinPoint + " I.* instanceof A2"); + } +} diff --git a/tests/design/intro/p1/C1.java b/tests/design/intro/p1/C1.java new file mode 100644 index 000000000..f7d7bd081 --- /dev/null +++ b/tests/design/intro/p1/C1.java @@ -0,0 +1,11 @@ +package p1; + +import java.util.*; + +public class C1 { + Map map = new HashMap(); +} + +class Helper { + List l = new LinkedList(); +} diff --git a/tests/design/intro/p1/ScopeIssues.java b/tests/design/intro/p1/ScopeIssues.java new file mode 100644 index 000000000..2aa2add92 --- /dev/null +++ b/tests/design/intro/p1/ScopeIssues.java @@ -0,0 +1,16 @@ +package p1; + +import org.aspectj.testing.Tester; + +import java.math.*; + +public aspect ScopeIssues { + public static void main(String[] args) { + Tester.checkEqual(C1.bi, BigInteger.ONE); + + Tester.checkEqual(Helper.bi, BigInteger.ONE); + } + + private static BigInteger C1.bi = BigInteger.ONE; + private static BigInteger Helper.bi = BigInteger.ONE; +} diff --git a/tests/design/pcds/If.java b/tests/design/pcds/If.java new file mode 100644 index 000000000..8d843e36d --- /dev/null +++ b/tests/design/pcds/If.java @@ -0,0 +1,52 @@ +public class If { + public static void main(String[] args) { + C c = new C(); + c.m(true); + c.m(false); + c.m(true); + c.m(false); + } +} + +class C { + static boolean test() { return value; } + + static boolean value = false; + + void m(boolean b) { + value = b; + System.out.println("C.m(" + b + ")"); + } +} + +aspect A { + static boolean testA() { return true; } + boolean itestA() { return true; } + + boolean t = true; + + before(): call(void m(boolean)) && if(C.test()) { + System.out.println(thisJoinPoint); + } + before(boolean x): call(void m(boolean)) && args(x) && if(x) && if(testA()) && if(this.t) && + if(thisJoinPoint.getSignature().getName().equals("m")) && if(itestA()) { + System.out.println(x + ": " + thisJoinPoint); + } + + pointcut cut(boolean a): call(void m(boolean)) && args(a) && if(a) && if(this.itestA()) && if(t); + + before(boolean x): cut(x) { + System.out.println(x); + } + + before(Object t): target(t) && call(void m(boolean)) && if(t instanceof C) { + System.out.println(t); + } + before(Object t): target(t) && call(void m(boolean)) && if(t instanceof String) { + System.out.println(t); + } + + before(C c): target(c) && call(void m(boolean)) && if(c.value) { + System.out.println(thisJoinPoint); + } +} diff --git a/tests/design/pcds/Simple.java b/tests/design/pcds/Simple.java new file mode 100644 index 000000000..e6051799a --- /dev/null +++ b/tests/design/pcds/Simple.java @@ -0,0 +1,80 @@ +package pcds; + +import org.aspectj.testing.Tester; + +public class Simple { + public static void main(String[] args) { + C c = new C(); + c.m("hi"); + + C subc = new SubC(); + subc.m("hi"); + subc.m(new Integer(1)); + + SubC subc1 = new SubC(); + subc1.m("bye"); + + subc.hashCode(); + } +} + +class C { + void m(Object o) { + System.out.println("C.m(" + o + ")"); + } + + static pointcut meths(C c): call(void m(Object)) && target(c); +} + +class SubC extends C { + SubC(int x) { + System.out.println("x: " + x); + } + + SubC(String s) { + this(2*2); + System.out.println("s: " + s); + int x = 10; + } + + SubC() { + this("hi"); + System.out.println("no args"); + } +} + + +aspect A { + before(Object o): C.meths(o) { + System.out.println("static named pointcut"); + } + + before(): call(void m(..)) && target(SubC) && args(String) { + System.out.println("dmatches: " + thisJoinPoint); + } + before(): call(void SubC.m(String)) { + System.out.println("!smatches: " + thisJoinPoint); + } + before(Object o, String s): call(void C.m(Object)) && target(SubC) && args(s) && args(o) { + System.out.println("smatches: " + thisJoinPoint +", " + s +", " + o); + } + + before(): initialization(SubC.new(..)) { + System.out.println(thisJoinPoint + "new SubC"); + } + void around(): initialization(SubC.new(..)) { + proceed(); + } + + before(): execution(SubC.new(..)) { + System.out.println(thisJoinPoint + "new SubC"); + } + + before(): call(int Object.hashCode()) { + System.out.println("hashCode()"); + } + before(): call(int Object.hashCode()) && target(C) { + System.out.println("hashCode() on C"); + } +} + diff --git a/tests/design/privileged/Simple.java b/tests/design/privileged/Simple.java new file mode 100644 index 000000000..5311d32ed --- /dev/null +++ b/tests/design/privileged/Simple.java @@ -0,0 +1,31 @@ +import org.aspectj.testing.Tester; + +public class Simple { + public static void main(String[] args) { + new C().foo(); + } +} + +class C { + private int privateField = 1; + + private int privateMethod() { + return 42; + } + + public void foo() { + System.out.println("f: " + privateField); + } +} + +privileged aspect A { + static before (C c): instanceof(c) && receptions(void foo()) { + System.out.println("from A: " + c.privateField); + c.privateField += 1; + System.out.println("from A: " + c.privateField); + System.out.println("from A: " + ++c.privateField); + System.out.println("from A: " + c.privateField++); + System.out.println("from A: " + c.privateField); + System.out.println("from A: " + c.privateMethod()); + } +} diff --git a/tests/design/reflect/Coverage.java b/tests/design/reflect/Coverage.java new file mode 100644 index 000000000..7de997909 --- /dev/null +++ b/tests/design/reflect/Coverage.java @@ -0,0 +1,270 @@ +import org.aspectj.testing.Tester; +import org.aspectj.lang.*; +import org.aspectj.lang.reflect.*; +import java.util.*; + +public class Coverage extends Args { + public static void main(String[] args) { + Args.args = args; + Args.c = new C(); + Args.c.x += 1; + Args.c.mumble("foo"); + } +} + +class C { + public int x; + void mumble(String arg1) { + Args.arg1 = arg1; + try { + throw new Exception("test"); + } catch (Exception e) { + } + } +} + +class Args { + public static String[] args; + public static String arg1; + public static C c; +} + +class SubC { +} + +aspect JoinPoints extends Helper { + + before(): set(* C.*) { + JoinPoint jp = thisJoinPoint; + p("sets", jp); + a(jp.getKind(),"field-set"); + Integer integer = null; + Object o = null; + try { + o = jp.getTarget().getClass().getField + (jp.getSignature().getName()).get(jp.getTarget()); + } catch (Exception e) { a(e); return; } + + try { + integer = (Integer)o; + } catch (ClassCastException cce) { + a(ni(o, Integer.class, "set-1")); + return; + } + a(integer.intValue() == 0, "set value i != 0"); + o = jp.getArgs()[0]; + try { + integer = (Integer) o; + } catch (ClassCastException cce) { + a(ni(o, Integer.class, "set-2")); + return; + } + a(integer.intValue() == 1, "set newvalue i != 1"); + Object ex = jp.getThis(); + JoinPoint.StaticPart sp = jp.getStaticPart(); + FieldSignature fs = null; + Signature sig = jp.getSignature(); + try { + fs = (FieldSignature)sig; + } catch (ClassCastException cce) { + a(ni(sig, FieldSignature.class, "set-1")); + + } + } + + before(): get(* C.*) { + JoinPoint jp = thisJoinPoint; + p("gets", jp); + a(jp.getKind(),"field-get"); + Integer integer = null; + Object o = null; + try { + o = jp.getTarget().getClass().getField + (jp.getSignature().getName()).get(jp.getTarget()); + } catch (Exception e) { a(e); } + try { + integer = (Integer) o; + } catch (ClassCastException cce) { + a(ni(o, Integer.class, "get")); + return; + } + a(integer.intValue() == 0, "get value i != 0"); + Object ex = jp.getThis(); + JoinPoint.StaticPart sp = jp.getStaticPart(); + FieldSignature fs = null; + Signature sig = jp.getSignature(); + try { + fs = (FieldSignature)sig; + } catch (ClassCastException cce) { + a(ni(sig, FieldSignature.class, "get")); + return; + } + } + + before(): execution(* C.*(..)) { + JoinPoint jp = thisJoinPoint; + p("executions", jp); + a(jp.getKind(), "method-execution"); + Signature sig = jp.getSignature(); + CodeSignature cs = null; + try { + cs = (CodeSignature)sig; + } catch (ClassCastException cce) { + a(ni(sig, CodeSignature.class, "execution")); + } + String name = cs.getName(); + got(name + ".execution"); + if (name.equals("mumble")) { + Object[] params = jp.getArgs(); + Object target = jp.getThis(); + String arg1 = null; + try { + arg1 = (String) params[0]; + } catch (ArrayIndexOutOfBoundsException ae) { + a("params.size < 1"); + return; + } catch (ClassCastException cce) { + a(ni(params[0], String.class)); + return; + } + a(target == Args.c, target + " != " + Args.c + ", should be c - 2"); + } + } + before(): call(C.new(..)) { + JoinPoint jp = thisJoinPoint; + p("calls", jp); + a(jp.getKind(),"constructor-call"); + Signature sig = jp.getSignature(); + ConstructorSignature cs = null; + try { + cs = (ConstructorSignature)sig; + } catch (ClassCastException cce) { + a(ni(cs, ConstructorSignature.class)); + } + Object[] params = jp.getArgs(); + Object target = jp.getThis(); + String name = cs.getName(); + a(name, "<init>"); + a(new Integer(params.length), new Integer(0)); + a(target == Args.c, target + " != " + Args.c + ", should be c - 3"); + } + before(): execution(C.new(..)) { + JoinPoint jp = thisJoinPoint; + p("executions", jp); + a(jp.getKind(),"constructor-execution"); + Signature sig = jp.getSignature(); + ConstructorSignature cs = null; + try { + cs = (ConstructorSignature)sig; + } catch (ClassCastException cce) { + a(ni(sig, ConstructorSignature.class)); + } + Object[] params = jp.getArgs(); + Object target = jp.getThis(); + String name = cs.getName(); + a(name, "<init>"); + a(new Integer(params.length), new Integer(0)); + } + before(): handler(*) && !within(JoinPoints) { + JoinPoint jp = thisJoinPoint; + p("handle", jp); + a(jp.getKind(),"exception-handler"); + Signature sig = jp.getSignature(); + CatchClauseSignature ccs = null; + try { + ccs = (CatchClauseSignature)sig; + } catch (ClassCastException cce) { + a(ni(sig, CatchClauseSignature.class)); + } + Throwable t = null; + try { + t = (Throwable)jp.getArgs()[0]; + } catch (ArrayIndexOutOfBoundsException _) { + a("handlers out of bounds"); + } catch (ClassCastException __) { + a(ni(jp.getArgs()[0], Throwable.class, "handlers")); + } + a(t.getMessage(), "test"); + Object ex = jp.getThis(); + a(ex, Args.c); + JoinPoint.StaticPart sp = jp.getStaticPart(); + } +} + +abstract aspect Helper { + + final static String[] strings = { + "mumble.execution", + "calls", + "executions", + "gets", + "sets", + "executions", + "handle", + }; + + static Map hash = new HashMap(); + static List names = new Vector(); + static { + for (int i = 0; i < strings.length; i++) { + need(strings[i]); + } + } + + after(): execution(* main(..)) { + checkAll(); + } + + static void checkAll() { + Iterator iter = names.iterator(); + while (iter.hasNext()) { + Object method = iter.next(); + Object call = hash.get(method); + a(call != null, method + " was not called"); + } + } + + static void got(Object method) { + hash.put(method, method); + } + + static void need(Object method) { + names.add(method); + } + + static void a(Object o1, Object o2) { + String msg = "" + o1 + " != " + o2; + a(o1, o2, msg); + } + static void a(Object o1, Object o2, String msg) { + if (o1 != null) a(o1.equals(o2), msg); + else if (o2 != null) a(o2.equals(o1), msg); + } + static void a(boolean b, Object o) { + Tester.check(b, o + ""); + } + static void a(Object o) { + a(false, o); + } + static String ni(Object o, Class c, String s) { + return ni("(" + s + ") " + o, c); + } + static String ni(Object o, Class c) { + return o + + (o == null ? " is null " : " is a " + o.getClass()) + + " is not a " + c; + } + static boolean verbose = false; + static void p(Object o) { + if (verbose) System.out.println(o); + } + static void p(Object o, JoinPoint jp) { + got(o); + } + static void po(Object o) { + boolean ov = verbose; + verbose = true; + p(o); + verbose = ov; + } +} diff --git a/tests/design/reflect/Point.java b/tests/design/reflect/Point.java new file mode 100644 index 000000000..b5d4fc913 --- /dev/null +++ b/tests/design/reflect/Point.java @@ -0,0 +1,10 @@ +package org.aspectj.examples; + +public class Point { + public int x, y; + + public Point(int _x, int _y) { this.x = _x; this.y = _y; } + + public void move(int dx, int dy) { x += dx; y += dy; } +} + diff --git a/tests/design/reflect/Simple.java b/tests/design/reflect/Simple.java new file mode 100644 index 000000000..59a5b7ffe --- /dev/null +++ b/tests/design/reflect/Simple.java @@ -0,0 +1,28 @@ +import org.aspectj.lang.reflect.*; + +public class Simple { + public static void main(String[] args) { + new Simple().foo("hi"); + } + + void foo(String s) { + System.out.println("foo(" + s + ")"); + } + + char ch = 'a'; + int i = 0; +} + +aspect A { + before(): execution(* *.*(..)) { + System.out.println(thisJoinPoint+ ", " + thisEnclosingJoinPointStaticPart); + } + before(): call(* *.*(..)) && !within(A) { + System.out.println("call: " + thisJoinPoint.getThis()+ ", " + thisEnclosingJoinPointStaticPart); + } + + before(): set(* Simple.*) { + //Object old = ((FieldAccessJoinPoint)thisJoinPoint).getValue(); + System.out.println(thisJoinPoint +", " + thisJoinPoint.getArgs()); + } +} diff --git a/tests/design/reflect/SimpleAround.java b/tests/design/reflect/SimpleAround.java new file mode 100644 index 000000000..842a6e720 --- /dev/null +++ b/tests/design/reflect/SimpleAround.java @@ -0,0 +1,30 @@ +import org.aspectj.lang.reflect.*; + +public class SimpleAround { + public static void main(String[] args) { + new SimpleAround().foo("hi"); + } + + void foo(String s) { + System.out.println("foo(" + s + ")"); + } +} + +aspect A { + static around(String x) returns void: executions(void *.foo(x)) { + System.out.println("calling foo with: " + x +", " + thisStaticJoinPoint); + proceed(x); + System.out.println("returning from: " + thisJoinPoint); //((CallJoinPoint)thisJoinPoint).getParameters()[0]); + } + + static before(): executions(void *.foo(String)) { + System.out.println("entering: " + thisJoinPoint); + } + + //static around() returns void: calls(void *.foo(String)) { + //System.out.println(thisStaticJoinPoint); + //proceed(); + //} + + +} diff --git a/tests/design/reflect/SimpleAround1.java b/tests/design/reflect/SimpleAround1.java new file mode 100644 index 000000000..92234ac04 --- /dev/null +++ b/tests/design/reflect/SimpleAround1.java @@ -0,0 +1,39 @@ +import org.aspectj.testing.*; +import org.aspectj.lang.*; +import org.aspectj.lang.reflect.*; +import java.util.*; + +public class SimpleAround1 { + public static void main(String[] args) { + new SimpleAround1().go(); + Tester.checkEqual(A.ran, "foo:goo:boo:", "advice didn't run"); + } + void go() { + foo("1"); + goo("2"); + boo("3"); + + } + void foo(String s) { new Integer(2).toString(); } + + void goo(String s) { } + + void boo(String s) { } +} + +aspect A { + + void around(String s): execution(void *.*oo(String)) && args(s){ + proceed(s); + JoinPoint jp = thisJoinPoint; + ran += jp.getSignature().getName()+":"; + } + + static String ran = ""; + + // When this advice is here no joinpoint is constructed in foo(String) + before(): execution(void *.foo(String)) { } + before(): execution(void *.goo(String)) {thisJoinPoint.getThis(); } + + before(): call(* Integer.*(..)) {thisJoinPoint.getThis(); } +} diff --git a/tests/design/reflect/Strings.java b/tests/design/reflect/Strings.java new file mode 100644 index 000000000..fa8ec04d2 --- /dev/null +++ b/tests/design/reflect/Strings.java @@ -0,0 +1,32 @@ +import org.aspectj.testing.Tester; +import org.aspectj.lang.*; +import org.aspectj.lang.reflect.*; +import java.util.*; +import org.aspectj.examples.Point; + +public class Strings { + public static void main(String[] args) { + Point p = new Point(1,1); + p.x += 10; + p.move(20, 20); + + try { + throw new UnsupportedOperationException("test"); + } catch (UnsupportedOperationException e) { + } + + } +} + +aspect JoinPoints { + static before(): within(Strings) || instanceof(Point) && !receptions(new(..)) { + System.out.println("tjp-short : " + thisJoinPoint.toShortString()); + System.out.println("tjp-default: " + thisJoinPoint); + System.out.println("tjp-long : " + thisJoinPoint.toLongString()); + System.out.println(); + System.out.println("sig-short : " + thisJoinPoint.getSignature().toShortString()); + System.out.println("sig-default: " + thisJoinPoint.getSignature()); + System.out.println("sig-long : " + thisJoinPoint.getSignature().toLongString()); + System.out.println("--------------------------------------------------------------------------"); + } +} diff --git a/tests/eajc/suite.xml b/tests/eajc/suite.xml new file mode 100644 index 000000000..fc5aa747f --- /dev/null +++ b/tests/eajc/suite.xml @@ -0,0 +1,2 @@ + +<!-- this directory is for tests requiring eajc -->
\ No newline at end of file diff --git a/tests/errors/AbstractAspectOf.java b/tests/errors/AbstractAspectOf.java new file mode 100644 index 000000000..85cb14f99 --- /dev/null +++ b/tests/errors/AbstractAspectOf.java @@ -0,0 +1,14 @@ +import org.aspectj.testing.Tester; + +// PR#286 aspect of abstract class + +public class AbstractAspectOf { } + +abstract aspect AbstractAspect /*of eachobject(instanceof(AbstractError))*/ { } + + + +class C { + aspect InnerAspect { + } +} diff --git a/tests/errors/AccessingInstanceFieldsStatically.java b/tests/errors/AccessingInstanceFieldsStatically.java new file mode 100644 index 000000000..11a090890 --- /dev/null +++ b/tests/errors/AccessingInstanceFieldsStatically.java @@ -0,0 +1,42 @@ +public class AccessingInstanceFieldsStatically { + public static void main(String[] args) { + new AccessingInstanceFieldsStatically().realMain(args); + } + public void realMain(String[] args) { + } +} + +class T { + public void printIt() {} + + public int getJ() { return -1; } + + public static void m() { + Object o = this; //ERROR static reference to this + this.clay++; //ERROR static reference to instance field + clay++; //ERROR static reference to instance field + printIt(); //ERROR static reference to instance method + } + + public T(int i, int j) { + clay = i; + } + + public T() { + this(clay, //ERROR static reference to instance field + getJ()); //ERROR static reference to instance method + clay++; + getJ(); + 1+1; //ERROR not a legal statement + } +} + +aspect TAspect { + int T.clay = 0; + void around (T tt): + target(tt) && call(void printIt()) { + T.clay = 1; // ERROR static reference to instance field + T.getJ(); //ERROR static reference to instance method + } +} + diff --git a/tests/errors/AmbiguousFormal.java b/tests/errors/AmbiguousFormal.java new file mode 100644 index 000000000..d101c3daa --- /dev/null +++ b/tests/errors/AmbiguousFormal.java @@ -0,0 +1,9 @@ +public class AmbiguousFormal { + public void m(int x, int y) {} +} + +aspect A { + before(int n): execution(void *.m(.., n, ..)) { + System.out.println(n); + } +} diff --git a/tests/errors/AmbiguousInterface.java b/tests/errors/AmbiguousInterface.java new file mode 100644 index 000000000..323b5f78d --- /dev/null +++ b/tests/errors/AmbiguousInterface.java @@ -0,0 +1,14 @@ +public class AmbiguousInterface { + public static void main(String[] args) { + org.aspectj.testing.Tester.check(false, "shouldn't have compiled"); + } +} +interface Outer { + interface Inner extends Outer { + interface Questionable {} + } + interface Questionable extends Inner {} +} +interface Another extends Outer, Outer.Questionable { + interface AnotherInner extends Questionable {} +} diff --git a/tests/errors/AroundReturnType.java b/tests/errors/AroundReturnType.java new file mode 100644 index 000000000..ef0356c36 --- /dev/null +++ b/tests/errors/AroundReturnType.java @@ -0,0 +1,26 @@ +public class AroundReturnType { + public static void main(String[] args){ + new AroundReturnType().go(); + } + + void go(){ + System.out.println("... "+ s() ); + } + + static Integer s() { + return new Integer(1); + } +} + +aspect A { + void around(): within(AroundReturnType) && call(Integer AroundReturnType.s()){ + System.out.println("s - advice"); + proceed(); + } + + Integer around(): within(AroundReturnType) && execution(* *(..)) { + proceed(); + return new Integer(3); + } + +} diff --git a/tests/errors/ArrayInitializerType.java b/tests/errors/ArrayInitializerType.java new file mode 100644 index 000000000..c759bd953 --- /dev/null +++ b/tests/errors/ArrayInitializerType.java @@ -0,0 +1,3 @@ +class ArrayInitializerType { + int i[] = {3, "xxx"}; +} diff --git a/tests/errors/AspectInheritance1.java b/tests/errors/AspectInheritance1.java new file mode 100644 index 000000000..18413139f --- /dev/null +++ b/tests/errors/AspectInheritance1.java @@ -0,0 +1,20 @@ +public class AspectInheritance1 { + public static void main(String[] args) { + } +} + + +abstract aspect Base { + abstract pointcut targets(int i, C c); + + after(int i, C c): targets(i, c) { + // + } +} + +aspect EmptyConcrete extends Base { + // this would match everything, but we declare it a syntax error + pointcut targets(int i, C c): ; +} + +class C {} diff --git a/tests/errors/AspectInheritance2.java b/tests/errors/AspectInheritance2.java new file mode 100644 index 000000000..eb443ff2d --- /dev/null +++ b/tests/errors/AspectInheritance2.java @@ -0,0 +1,39 @@ +public class AspectInheritance2 { + public static void main(String[] args) { + } +} + + +abstract aspect Base { + abstract pointcut targets(int i, C c); + + after(int i, C c): targets(i, c) { + // + } +} + +aspect FullConcrete extends Base { + pointcut targets(int i, SubC subc): //ERROR param types must match exactly + call(void SubC.m(double)) && target(subc) && args(i); +} + +aspect ForgetfulConcrete extends Base { //ERROR must concretize abstracts +} + +aspect ExplictAbstractConcrete extends Base { + pointcut targets(int i, C c); + + abstract pointcut newTargets(); //ERROR no abstracts allowed in concrete +} + +aspect PrivateConcrete extends Base { + private pointcut targets(int i, C c): //ERROR can't reduce visibility of decs + call(void C.m(int)) && target(c) && args(i); +} + + +class C { + public void m(int i) { } +} + +class SubC extends C {} diff --git a/tests/errors/AspectInheritance3.java b/tests/errors/AspectInheritance3.java new file mode 100644 index 000000000..142de669c --- /dev/null +++ b/tests/errors/AspectInheritance3.java @@ -0,0 +1,32 @@ +public class AspectInheritance3 { + public static void main(String[] args) { + } +} + + +abstract aspect Base { + abstract pointcut targets(int i, C c); + + after(int i, C c): targets(i, c) { + // + } +} +aspect GoodConcrete extends Base { + pointcut targets(int i, C c); +} + +// this aspect is illegal because concrete-concrete extension is illegal +aspect DoubleConcrete extends GoodConcrete { +} + +aspect OtherAspect { + // can't reference an abstract pointcut using a static reference + before(): Base.targets(int, C) { } +} + + +class C { + public void m(int i) { } +} + +class SubC extends C {} diff --git a/tests/errors/AspectInheritance4.java b/tests/errors/AspectInheritance4.java new file mode 100644 index 000000000..c31aec153 --- /dev/null +++ b/tests/errors/AspectInheritance4.java @@ -0,0 +1,25 @@ +public class AspectInheritance4 { + public static void main(String[] args) { + } +} + + +abstract aspect Base { + abstract pointcut targets(int i, C c); + + after(int i, C c): targets(i, c) { + // + } +} + +aspect OtherAspect { + // can't reference an abstract pointcut using a static reference + before(): Base.targets(int, C) { } +} + + +class C { + public void m(int i) { } +} + +class SubC extends C {} diff --git a/tests/errors/AspectInterfaces.java b/tests/errors/AspectInterfaces.java new file mode 100644 index 000000000..0bccb0593 --- /dev/null +++ b/tests/errors/AspectInterfaces.java @@ -0,0 +1,9 @@ +public class AspectInterfaces { +} + +aspect SerAspect implements java.io.Serializable {} //ERR: can't implement Ser +aspect CloneAspect implements Cloneable {} //ERR: can't implement Clone + +class C implements java.io.Serializable { } + +aspect Ser1Aspect extends C {} //ERR: can't extend a class that implements Ser diff --git a/tests/errors/AspectsCantHaveYesArgumentConstructors.java b/tests/errors/AspectsCantHaveYesArgumentConstructors.java new file mode 100644 index 000000000..9c3a029cd --- /dev/null +++ b/tests/errors/AspectsCantHaveYesArgumentConstructors.java @@ -0,0 +1,9 @@ +public class AspectsCantHaveYesArgumentConstructors { + public static void main(String[] args) { + } +} + +aspect A /*of eachobject(instanceof(CompileError2))*/ { + //ERROR: only zero argument constructors allowed in an aspect + public A(String s) {} +} diff --git a/tests/errors/BadAround.java b/tests/errors/BadAround.java new file mode 100644 index 000000000..79e564557 --- /dev/null +++ b/tests/errors/BadAround.java @@ -0,0 +1,25 @@ +public class BadAround { + +} + +class C { + public String m(String s) { return "hi"; } + public int mi() { return 2; } +} + +aspect A { + Object around(): call(String C.m(..)) { + return new Integer(2); + } + Object around(Object a): call(String C.m(..)) && args(a) { + return proceed(new Integer(2)); + } + + Object around(): call(int C.mi()) { + return "2"; + } + + int around(): call(String C.m(..)) { // ERR, return type mismatch + return 2; + } +} diff --git a/tests/errors/BadCCutSig.java b/tests/errors/BadCCutSig.java new file mode 100644 index 000000000..96011cee9 --- /dev/null +++ b/tests/errors/BadCCutSig.java @@ -0,0 +1,10 @@ +package errors; + +aspect BadCCutSig { + int bar(int a, int b, int c) { return 0; } + + pointcut cut(BadCCutSig b): target(b) && call(int bar(int, int, int)); + + before(BadCCutSig b): cut() { // SHOULD BE: cut(b) + } +} diff --git a/tests/errors/BadCast.java b/tests/errors/BadCast.java new file mode 100644 index 000000000..7cd40466c --- /dev/null +++ b/tests/errors/BadCast.java @@ -0,0 +1,12 @@ +import org.aspectj.testing.*; + +public class BadCast { + public static void main(String[] args) { + new BadCast().realMain(args); + } + + public void realMain(String[] args) { + int i = )int) 13; + Tester.check(false, "shouldn't have compiled"); + } +} diff --git a/tests/errors/BadConstructorName.java b/tests/errors/BadConstructorName.java new file mode 100644 index 000000000..8a10aaf16 --- /dev/null +++ b/tests/errors/BadConstructorName.java @@ -0,0 +1,6 @@ +import org.aspectj.testing.Tester; + +class BadConstructorName { + public FooBar() {} +} + diff --git a/tests/errors/BadDesignator.java b/tests/errors/BadDesignator.java new file mode 100644 index 000000000..adaf95a2e --- /dev/null +++ b/tests/errors/BadDesignator.java @@ -0,0 +1,11 @@ +import org.aspectj.testing.Tester; + +class BadDesignator { + pointcut cc(): BadDesignator && * void f(); + + BadDesignator() {} + + void f() {} +} + + diff --git a/tests/errors/BadExpressionStatement.java b/tests/errors/BadExpressionStatement.java new file mode 100644 index 000000000..95c505590 --- /dev/null +++ b/tests/errors/BadExpressionStatement.java @@ -0,0 +1,6 @@ +public class BadExpressionStatement { + public static void main(String[] args) { + System.out; + } +} + diff --git a/tests/errors/BadExtension.java b/tests/errors/BadExtension.java new file mode 100644 index 000000000..32bfe8e9c --- /dev/null +++ b/tests/errors/BadExtension.java @@ -0,0 +1,38 @@ +public class BadExtension { } + +abstract class Super { + public final void finalPublic() {} + + public void justPublic() {} + public int intPublic() {} + + public abstract void abstractWithBody() {} //ERROR shouldn't have a body + + public abstract void abstractPublic(); + + public static final void staticFinalPublic() {} +} + +class Sub extends Super { //ERROR must implement abstractPublic + public void finalPublic() {} //ERROR can't override final + void justPublic() {} //ERROR can't override with weaker access + public void intPublic() {} //ERROR can't change the return type + + public static void staticFinalPublic() {} //ERROR can't even override static finals +} + + + +interface I1 { + void m(); +} + +interface I2 { + int m(); +} + +class C12 implements I1, I2 { + public void m() {} //ERROR incompatible return types with I2.m() +} + +interface I12 extends I1, I2 {} //ERROR I1.m() and I2.m() are not compatible diff --git a/tests/errors/BadFormalsToCalls.java b/tests/errors/BadFormalsToCalls.java new file mode 100644 index 000000000..17559bbe0 --- /dev/null +++ b/tests/errors/BadFormalsToCalls.java @@ -0,0 +1,26 @@ +import org.aspectj.testing.Tester; +public class BadFormalsToCalls { + + static boolean noargsCalled = false; + + public static void main(String[] args) { + new BadFormalsToCalls().go(); + } + + void go() { + new B().noargs(); + Tester.check(noargsCalled, "noargs wasn't called"); + } + + class B { + public void noargs() { + } + } +} + +aspect CallsNoArgsAspect { + pointcut noargs(BadFormalsToCalls.B b): call(void noargs()); + void around(BadFormalsToCalls.B b): noargs(b) { + proceed(b); + } +} diff --git a/tests/errors/BadGetPCD.java b/tests/errors/BadGetPCD.java new file mode 100644 index 000000000..d2c907f17 --- /dev/null +++ b/tests/errors/BadGetPCD.java @@ -0,0 +1,7 @@ +public abstract class BadGetPCD { +} + +aspect A { + pointcut foo(): get(void i)[]; +} + diff --git a/tests/errors/BadIntroduction.java b/tests/errors/BadIntroduction.java new file mode 100644 index 000000000..b4bdf5740 --- /dev/null +++ b/tests/errors/BadIntroduction.java @@ -0,0 +1,11 @@ +import org.aspectj.testing.Tester; + +public class BadIntroduction { + public static void main(String[] args) { + String s; + Tester.check(false, "the compiler should have given an error"); + } +} + +introduction (String) { +} diff --git a/tests/errors/BadIntroductionDesignator.java b/tests/errors/BadIntroductionDesignator.java new file mode 100644 index 000000000..9b97d4aae --- /dev/null +++ b/tests/errors/BadIntroductionDesignator.java @@ -0,0 +1,11 @@ +package errors; + +// PR#129 + +public class BadIntroductionDesignator { + introduction (M||) { + public boolean m_foo; + } +} + +class M {} diff --git a/tests/errors/BadNewArrayExprs.java b/tests/errors/BadNewArrayExprs.java new file mode 100644 index 000000000..138b89ca6 --- /dev/null +++ b/tests/errors/BadNewArrayExprs.java @@ -0,0 +1,51 @@ +class BadNewArrayExprs { + static Object o; + public static void main(String[] args) { + o = new Test[][3]; + o = new Test[][]; + o = new Test[]; + o = new Test[3] { }; + } +} +/* + +abstract class C { +} +class D extends C { +} + +class M {} + +class X { + abstract void foo(); +} + +class Y extends X { + + void foo(M m) { + new C().m(m); + } + + static aspect XXX { + abstract private void C.m(M m); + + private void D.m(M m) { + System.out.println("I'm in XXX " + m); + } + } +} + +class Z extends X { + void foo(M m) { + new C().m(m); + } + + static aspect XXX { + abstract private void C.m(M m); + + private void D.m(M m) { + System.out.println("I'm in YYY " + m); + } + } +} +*/ diff --git a/tests/errors/BadPointcutName.java b/tests/errors/BadPointcutName.java new file mode 100644 index 000000000..943f49554 --- /dev/null +++ b/tests/errors/BadPointcutName.java @@ -0,0 +1,17 @@ + +import org.aspectj.testing.Tester; + +// PR#209 + +public aspect BadPointcutName { + private static java.util.Vector v = new java.util.Vector(); + + public static void main(String[] args) { test(); } + + public static void test() { + Tester.check(true, ""); + } + + /*static*/ after() returning (): noSuchCut() {} +} + diff --git a/tests/errors/BadReferences.java b/tests/errors/BadReferences.java new file mode 100644 index 000000000..0125a447b --- /dev/null +++ b/tests/errors/BadReferences.java @@ -0,0 +1,25 @@ +aspect BadReferences { + public void main(String[] args) { + int x = C.x; + + Object o = new C.Inner(); + } +} + + +class C implements I1, I2 { +} + +interface I1 { + public static int x = 1; + + public static class Inner { + } +} +interface I2 { + public static int x = 2; + + public static class Inner { + } +} + diff --git a/tests/errors/BadStaticCast.java b/tests/errors/BadStaticCast.java new file mode 100644 index 000000000..6fbe3b1e3 --- /dev/null +++ b/tests/errors/BadStaticCast.java @@ -0,0 +1,8 @@ +// Incorrect static casts to primitively foldable arguments should not +// crash the compiler. +public class BadStaticCast { + public static int foo() { + return 3 + (int)true; + } +} + diff --git a/tests/errors/BadSynchronized.java b/tests/errors/BadSynchronized.java new file mode 100644 index 000000000..3e3ee9311 --- /dev/null +++ b/tests/errors/BadSynchronized.java @@ -0,0 +1,8 @@ +public class BadSynchronized { + public void m() { + synchronized(2) {} + synchronized(false) {} + synchronized(null) {} + synchronized(""); + } +} diff --git a/tests/errors/BadTypeName.java b/tests/errors/BadTypeName.java new file mode 100644 index 000000000..3f8d2fcdd --- /dev/null +++ b/tests/errors/BadTypeName.java @@ -0,0 +1,18 @@ +aspect BadTypeName { + static pointcut prints(Foo f): call(void System.out.println(..)); + + Foo x = null; + + a.b.c.Foo y = null; + + System.Inner i = null; + + Object o = a.b.c.Foo.field; + + Object o1 = C.privateField; +} + + +class C { + private int privateField; +} diff --git a/tests/errors/BadValue.java b/tests/errors/BadValue.java new file mode 100644 index 000000000..08f6b063c --- /dev/null +++ b/tests/errors/BadValue.java @@ -0,0 +1,13 @@ +import org.aspectj.testing.*; + +public class BadValue { + public static void main(String[] args) { + new BadValue().realMain(args); + } + + public void realMain(String[] args) { + int i = ,; + //String s = ,; + Tester.check(false, "Shouldn't have compiled"); + } +} diff --git a/tests/errors/BadVar.java b/tests/errors/BadVar.java new file mode 100644 index 000000000..044ef93a5 --- /dev/null +++ b/tests/errors/BadVar.java @@ -0,0 +1,12 @@ +import org.aspectj.testing.*; + +public class BadVar { + public static void main(String[] args) { + new BadVar().realMain(args); + } + + public void realMain(String[] args) { + int _ _ = 13; + Tester.check(false, "Shouldn't have compiled"); + } +} diff --git a/tests/errors/BindingNullPointer.java b/tests/errors/BindingNullPointer.java new file mode 100644 index 000000000..06ec48c6d --- /dev/null +++ b/tests/errors/BindingNullPointer.java @@ -0,0 +1,17 @@ +import org.aspectj.testing.*; + +public class BindingNullPointer { + boolean ran = false; + final String s1 = new String("s1"); + Runnable r1 = new Runnable() { + public void run() {String = s1; ran = true;} + }; + void go() { + r1.run(); + Tester.check(ran, "r1.run did not run"); + } + + public static void main(String[] args) { + new BindingNullPointer().go(); + } +} diff --git a/tests/errors/BoundaryNums.java b/tests/errors/BoundaryNums.java new file mode 100644 index 000000000..c5027d368 --- /dev/null +++ b/tests/errors/BoundaryNums.java @@ -0,0 +1,34 @@ +//Over-boundary base values cause compile-time errors +public class BoundaryNums { + public static void main(String[] args) { + byte minByte = -129; + byte maxByte = 128; + byte minByteHex = -0x81; + byte maxByteHex = 0x80; + + short minShort = -32769; + short maxShort = 32768; + short minShortHex = -0x8001; + short maxShortHex = 0x8000; + + char maxChar = 65536; + char maxCharHex = 0x10000; + char maxCharChar = '\u10000'; + + int minInt = -2147483649; + int maxInt = 2147483648; + int minIntHex = -0x80000001; + int maxIntHex = 0x80000000; + + long minLong = -9223372036854775810L; + long maxLong = 9223372036854775809L; + long minLongHex = -0x8000000000000001L; + long maxLongHex = 0x8000000000000000L; + + float minPosFloat = 1.0e-46f; + float maxPosFloat = 1.0e+39f; + + double minPosDouble = 1.0e-325; + double maxPosDouble = 1.0e+309; + } +} diff --git a/tests/errors/CantCallConstructorOnAspects.java b/tests/errors/CantCallConstructorOnAspects.java new file mode 100644 index 000000000..02b5d260a --- /dev/null +++ b/tests/errors/CantCallConstructorOnAspects.java @@ -0,0 +1,12 @@ +public class CantCallConstructorOnAspects { + public static void main(String[] args) { + //ERROR: can't call new on an aspect/of + A a = new A(); + } +} + +class C { +} + +aspect A /*of eachobject(instanceof(C))*/ { +} diff --git a/tests/errors/CastInCast.java b/tests/errors/CastInCast.java new file mode 100644 index 000000000..a8ae749b1 --- /dev/null +++ b/tests/errors/CastInCast.java @@ -0,0 +1,12 @@ +import org.aspectj.testing.*; + +public class CastInCast { + public static void main(String[] args) { + new CastInCast().realMain(args); + } + + public void realMain(String[] args) { + int i = ((int) int) 13; + Tester.check(false, "Shouldn't have compiled"); + } +} diff --git a/tests/errors/CircularDominates.java b/tests/errors/CircularDominates.java new file mode 100644 index 000000000..3db4b691e --- /dev/null +++ b/tests/errors/CircularDominates.java @@ -0,0 +1,33 @@ +import org.aspectj.testing.Tester; + +class C { + public void a() { + T.add("a"); + } +} + +aspect A1 { declare dominates: A1, A2; + pointcut cut(): target(C) && execution(void a()); + + before(): A1.cut() { T.add("A1"); } +} + +aspect A2 { declare dominates: A2, A3; + before(): A1.cut() { T.add("A2"); } +} + +aspect A3 { declare dominates: A3, A1; + before(): A1.cut() { T.add("A3"); } +} + + +class T { + private static StringBuffer order = new StringBuffer(); + public static void add(String s) { order.append(s); order.append(':'); } + public static void reset() { order = new StringBuffer(); } + + public static void checkAndReset(String expectedValue) { + Tester.checkEqual(order.toString(), expectedValue); + order.setLength(0); + } +} diff --git a/tests/errors/CircularExtends.java b/tests/errors/CircularExtends.java new file mode 100644 index 000000000..9bd09bf6c --- /dev/null +++ b/tests/errors/CircularExtends.java @@ -0,0 +1,15 @@ +import org.aspectj.testing.Tester; + +/** + * @errors 7 + * @warnings + */ +public class CircularExtends extends CircularExtends { + public static void main(String[] args) { + new CircularExtends().realMain(args); + } + + public void realMain(String[] args) { + Tester.check(false, "shouldn't have compiled"); + } +} diff --git a/tests/errors/CircularExtendsAspect.java b/tests/errors/CircularExtendsAspect.java new file mode 100644 index 000000000..fdeb7020f --- /dev/null +++ b/tests/errors/CircularExtendsAspect.java @@ -0,0 +1,19 @@ +import org.aspectj.testing.Tester; + +/** + * @errors 18 + * @warnings + */ + +public class CircularExtendsAspect { + public static void main(String[] args) { + new CircularExtendsAspect().realMain(args); + } + + public void realMain(String[] args) { + Tester.check(false, "shouldn't have compiled"); + } +} + +aspect Aspect extends Aspect { +} diff --git a/tests/errors/CircularPlusImplementsIntros.java b/tests/errors/CircularPlusImplementsIntros.java new file mode 100644 index 000000000..a9dde722c --- /dev/null +++ b/tests/errors/CircularPlusImplementsIntros.java @@ -0,0 +1,20 @@ +public class CircularPlusImplementsIntros { + public static void main(String[] args) { + org.aspectj.testing.Tester.check(false, "shouldn't have compiled!"); + } +} + +interface I {} +interface J {} + +class C { + { + I i = new I() {}; + J j = new J() {}; + } +} + +aspect A { + declare parents: I implements J; + declare parents: J implements I; +} diff --git a/tests/errors/ClassExtendingAspect.java b/tests/errors/ClassExtendingAspect.java new file mode 100644 index 000000000..deced1ac1 --- /dev/null +++ b/tests/errors/ClassExtendingAspect.java @@ -0,0 +1,22 @@ +import org.aspectj.testing.*; + +public class ClassExtendingAspect { + public static void main(String[] args) { + new ClassExtendingAspect().go(args); + } + + void go(String[] args) { + Extends e = new Extends(); + Tester.check(false, "shouldn't have compiled!"); + } + +} + +aspect Aspect { + +} + +class Extends extends Aspect { + pointcut p(): call(* *()); +} + diff --git a/tests/errors/ClosingBrace.java b/tests/errors/ClosingBrace.java new file mode 100644 index 000000000..ad975bf5f --- /dev/null +++ b/tests/errors/ClosingBrace.java @@ -0,0 +1,12 @@ +import org.aspectj.testing.*; + +public class ClosingBrace { + public static void main(String[] args) { + new ClosingBrace().realMain(args); + } + + public void realMain(String[] args) { + Tester.check(false, "Shouldn't have compiled"); + } + { + diff --git a/tests/errors/Colon.java b/tests/errors/Colon.java new file mode 100644 index 000000000..ffa00b609 --- /dev/null +++ b/tests/errors/Colon.java @@ -0,0 +1,13 @@ +import org.aspectj.testing.*; + +public class Colon { + public static void main(String[] args) { + new Colon().realMain(args); + } + + public void realMain(String[] args) { + int i = 13: + Tester.check(false, "Shouldn't have compiled"); + } +} + diff --git a/tests/errors/Const.java b/tests/errors/Const.java new file mode 100644 index 000000000..103e4972b --- /dev/null +++ b/tests/errors/Const.java @@ -0,0 +1,21 @@ +import org.aspectj.testing.*; + +public class Const { + public static void main(String[] args) { + new Const().realMain(args); + } + + public void realMain(String[] args) { + int const = 2; + int i = const * 2; + Tester.check(false, "shouldn't have compiled"); + } + + public static void testme1() { + int i = const + 1; + } + + public static void testme2() { + int j = Const.const + 1; + } +} diff --git a/tests/errors/ConstantOneOverZero.java b/tests/errors/ConstantOneOverZero.java new file mode 100644 index 000000000..b9ac43198 --- /dev/null +++ b/tests/errors/ConstantOneOverZero.java @@ -0,0 +1,4 @@ +class ConstantOneOverZero { + int i = 1 / 0; + int j = 1 % 0; + } diff --git a/tests/errors/DeclareError.java b/tests/errors/DeclareError.java new file mode 100644 index 000000000..7ad6cd1e3 --- /dev/null +++ b/tests/errors/DeclareError.java @@ -0,0 +1,28 @@ +import org.aspectj.testing.Tester; + +public class DeclareError { + public static void main(String[] args) { + new C().bad(); + } +} + +class C { + public void m() { + new C().bad(); + } + + public void bad() { } +} + +class D { + public void m() { + new C().bad(); + } +} + + +aspect A { + declare error: call(void C.bad()) && !within(C): + "can only call bad from C"; +} + diff --git a/tests/errors/DominatesWithCommas.java b/tests/errors/DominatesWithCommas.java new file mode 100644 index 000000000..14d17ae12 --- /dev/null +++ b/tests/errors/DominatesWithCommas.java @@ -0,0 +1,11 @@ +public class DominatesWithCommas { + public static void main(String[] args) { + new DominatesWithCommas().realMain(args); + } + public void realMain(String[] args) { + } +} + +aspect A dominates B,C{} +aspect B {} +aspect C {} diff --git a/tests/errors/DuplicatedNames.java b/tests/errors/DuplicatedNames.java new file mode 100644 index 000000000..4e8cc2bdc --- /dev/null +++ b/tests/errors/DuplicatedNames.java @@ -0,0 +1,9 @@ +public class DuplicatedNames { } + +interface DuplicatedNames { } + +class DuplicatedNames { } + +aspect DuplicatedNames { } + +aspect DuplicatedNames of eachJVM() { } diff --git a/tests/errors/ExplicitConstructorThrows.java b/tests/errors/ExplicitConstructorThrows.java new file mode 100644 index 000000000..09474f703 --- /dev/null +++ b/tests/errors/ExplicitConstructorThrows.java @@ -0,0 +1,24 @@ +import java.io.IOException; + +public class ExplicitConstructorThrows extends Base { //ERR: default constructor throws IOException +} + +class Base { + Base() throws IOException { } +} + +class Sub1 extends Base { + Sub1() { + super(); //ERR: throws IOException + } +} + +class Sub2 extends Base { + Sub2(String s) { + this(); //ERR: throws IOException + } + + Sub2() throws IOException { + super(); + } +} diff --git a/tests/errors/ExtraClosingBrace.java b/tests/errors/ExtraClosingBrace.java new file mode 100644 index 000000000..0a46739af --- /dev/null +++ b/tests/errors/ExtraClosingBrace.java @@ -0,0 +1,10 @@ +package errors; + +//PR#219 + +public aspect ExtraClosingBrace { + public void doIt() { + + }} +} +} diff --git a/tests/errors/FinalStatic.java b/tests/errors/FinalStatic.java new file mode 100644 index 000000000..055e3ecd4 --- /dev/null +++ b/tests/errors/FinalStatic.java @@ -0,0 +1,14 @@ +import org.aspectj.testing.*; + +public class FinalStatic { + public static void main(String[] args) { + new FinalStatic().realMain(args); + } + + public void realMain(String[] args) { + Tester.check(false, "Shouldn't have compiled"); + } + + final static int i = -1; + { i = 13; } +} diff --git a/tests/errors/FromJavac.java b/tests/errors/FromJavac.java new file mode 100644 index 000000000..93f9eeb44 --- /dev/null +++ b/tests/errors/FromJavac.java @@ -0,0 +1,14 @@ +/** + * this class tries to contain an error that ajc will miss, and that will + * fall through to javac. + * this will need to be steadily updated as ajc catches more things + * the test is to be sure this isn't a silent error + */ + +public class FromJavac { + public static void foo() { + int x; + int y = x; + } +} + diff --git a/tests/errors/Goto.java b/tests/errors/Goto.java new file mode 100644 index 000000000..a597eb789 --- /dev/null +++ b/tests/errors/Goto.java @@ -0,0 +1,16 @@ +import org.aspectj.testing.*; +public class Goto { + public static void main(String[] args) { + int goto = 13; + Tester.check(false, "shouldn't have compiled"); + } + + public static void testme1() { + int i = goto + 1; + int j = Goto.goto + 1; + } + + public static void testme2() { + int j = Goto.goto + 1; + } +} diff --git a/tests/errors/ImportWithinClassBody.java b/tests/errors/ImportWithinClassBody.java new file mode 100644 index 000000000..24d1f45cd --- /dev/null +++ b/tests/errors/ImportWithinClassBody.java @@ -0,0 +1,13 @@ + +import org.aspectj.testing.Tester; + +// PR#218 + +public class ImportWithinClassBody { + + import java.util.Vector; + + public static void test() { + Tester.check("".equals(""), ""); + } +} diff --git a/tests/errors/InnerMembers.java b/tests/errors/InnerMembers.java new file mode 100644 index 000000000..35bebb8ef --- /dev/null +++ b/tests/errors/InnerMembers.java @@ -0,0 +1,20 @@ +public class InnerMembers { + static class StaticI { + static int x; + static String foo() { return "foo"; } + } + class Inner { + static final int CONST=10; + static final int NOT_CONST=new Integer(10).intValue(); //ERR: non-constant static in inner + static int x; //ERR: non-constant static in inner + static String foo() { return "foo"; }//ERR: non-constant static in inner + interface I {}//ERR: non-constant static in inner + } + public static void m() { + class Inner { + static final int CONST=10; + static int x; //ERR: non-constant static in inner + static String foo() { return "foo"; }//ERR: non-constant static in inner + } + } +} diff --git a/tests/errors/InstanceofWithoutClass.java b/tests/errors/InstanceofWithoutClass.java new file mode 100644 index 000000000..cd9266e77 --- /dev/null +++ b/tests/errors/InstanceofWithoutClass.java @@ -0,0 +1,15 @@ + +import org.aspectj.testing.Tester; + +// PR#271 instanceof used without a class + +public class InstanceofWithoutClass { + + public static void main(String[] args){ + new InstanceofWithoutClass().go(); + } + + void go() { } + + pointcut t(): this() && call(void go()); +} diff --git a/tests/errors/IntLiteral.java b/tests/errors/IntLiteral.java new file mode 100644 index 000000000..bf12a6609 --- /dev/null +++ b/tests/errors/IntLiteral.java @@ -0,0 +1,18 @@ +import org.aspectj.testing.*; + +public class IntLiteral { + public static void main(String[] args) { + new IntLiteral().go(); + org.aspectj.testing.Tester.check(goRan, "Method go did not run"); + } + + static boolean goRan = false; + + void go() { + goRan = true; + } +} + +aspect A { + pointcut p1(int i) : execution(* *(5)); +} diff --git a/tests/errors/InterfaceArrayCast.java b/tests/errors/InterfaceArrayCast.java new file mode 100644 index 000000000..0e4442582 --- /dev/null +++ b/tests/errors/InterfaceArrayCast.java @@ -0,0 +1,13 @@ +class A {} +interface I {} + +public class InterfaceArrayCast { + + public static void main(String[] args) {} + + void foo(A[] as, I i) { + A[] as1 = (A[])i; + I i1 = (I)as; + } +} + diff --git a/tests/errors/InterfaceCast.java b/tests/errors/InterfaceCast.java new file mode 100644 index 000000000..769730496 --- /dev/null +++ b/tests/errors/InterfaceCast.java @@ -0,0 +1,15 @@ +/* + 73 addDirectSuperType(getSuperClassDec()); + 74 for (Iterator i = getSuperInterfaceDecs().iterator(); i.hasNext(); ) { + 75 InterfaceDec superInterface = (InterfaceDec)i.next(); + 76 addDirectSuperType(superInterface); + 77 } +*/ + +public class InterfaceCast { + public static void main(String[] args) { + + } +} +class A implements B {} +class B {} diff --git a/tests/errors/InvalidReturn.java b/tests/errors/InvalidReturn.java new file mode 100644 index 000000000..9ff3eb335 --- /dev/null +++ b/tests/errors/InvalidReturn.java @@ -0,0 +1,24 @@ +package errors; + +public class InvalidReturn { + public int doNothing() { return 0; } + public static void test() {} +} + +aspect C { + pointcut iCut(): this(*) && call(int *(..)); + + before(): iCut() { + return -1; + } + + after(): iCut() { + return 1; + } + after() returning (): iCut() { + return 1; + } + after() throwing (ArithmeticException e): iCut() { + return -1; + } +} diff --git a/tests/errors/MethodsNotFound.java b/tests/errors/MethodsNotFound.java new file mode 100644 index 000000000..2a7547814 --- /dev/null +++ b/tests/errors/MethodsNotFound.java @@ -0,0 +1,18 @@ + +public class MethodsNotFound { + public void foo() { + "a".bar(); + } + + public void foo(int x) { + new Ha().foo(); + } + + public void bar() { + new MethodsNotFound().foo("hi"); + } +} + +class Ha { + private void foo() {} +} diff --git a/tests/errors/MismatchedParens.java b/tests/errors/MismatchedParens.java new file mode 100644 index 000000000..f39c9718e --- /dev/null +++ b/tests/errors/MismatchedParens.java @@ -0,0 +1,17 @@ + +import org.aspectj.testing.Tester; + +// PR#213 + +public class MismatchedParens { + + public static void main(String[] args) { test(); } + + public static void test() { + org.aspectj.testing.Tester.check(true, ""); + } +} + +aspect A { + /*static*/ before(): foocut( +} diff --git a/tests/errors/MissingExposure.java b/tests/errors/MissingExposure.java new file mode 100644 index 000000000..372845c3c --- /dev/null +++ b/tests/errors/MissingExposure.java @@ -0,0 +1,15 @@ +public class MissingExposure { + public static void main(String[] args) { + C c = new C(); + org.aspectj.testing.Tester.check(false, "shouldn't have compiled"); + } +} + +class C { + int _int = 13; +} + +aspect Aspect { + pointcut crash(byte _new): set(int C._int) && args(int); + before(byte _new): crash(_new) {} +} diff --git a/tests/errors/MissingReturns.java b/tests/errors/MissingReturns.java new file mode 100644 index 000000000..a5a9e2c5b --- /dev/null +++ b/tests/errors/MissingReturns.java @@ -0,0 +1,22 @@ + +import org.aspectj.testing.Tester; + +// PR#138, PR#139 +// error message could be more informatinve (PR#139) + +aspect MissingReturns { + + int baz(int a) { return 1; } + + void around(): this(MissingReturns) && call(int baz(int)) { + // SHOULD BE: + // static advice() returns int: MissingReturns && int baz(int) { + return proceed(); + } + + pointcut cut(): this(MissingReturns) && call(int baz(int)); + void around(): cut() { + proceed(); + return 2; + } +} diff --git a/tests/errors/Modifiers.java b/tests/errors/Modifiers.java new file mode 100644 index 000000000..dd58dc8c8 --- /dev/null +++ b/tests/errors/Modifiers.java @@ -0,0 +1,14 @@ +public abstract class Modifiers { + public private void foo1() { } + public protected void foo2() { } + protected private void foo4() { } + + abstract void foo6() { } + abstract static void foo7(); + abstract synchronized void foo8(); + abstract private void foo9(); + + abstract strictfp void foo10(); + + abstract static class A { } +} diff --git a/tests/errors/Modifiers1.java b/tests/errors/Modifiers1.java new file mode 100644 index 000000000..192eba9cd --- /dev/null +++ b/tests/errors/Modifiers1.java @@ -0,0 +1,10 @@ +public abstract class Modifiers1 { + private private void foo5() { } + public public void foo3() { } +} + +private class C {} + +class D { + abstract static class A { } +} diff --git a/tests/errors/MultipleIntros.java b/tests/errors/MultipleIntros.java new file mode 100644 index 000000000..1dc1f330d --- /dev/null +++ b/tests/errors/MultipleIntros.java @@ -0,0 +1,32 @@ +public class MultipleIntros { + public static void main(String[] args) { new C().publicM(); } +} + +class C { + private void privateM() {} + public void publicM() { System.out.println("from C"); } + + private int privateF; + public int publicF; +} + + +aspect A { + private int C.privateF; // should be okay + public int C.publicF; //ERROR conflicts with existing field + + private int C.privateFA; + private int C.privateFA; //ERROR conflicts with the above + + private void C.privateM() {} // should be okay + public void C.publicM() { System.out.println("from A"); } //ERROR conflicts with existing method +} + +aspect AO { + static aspect AI1 { + private int C.privateFA; + } + static aspect AI2 { + private int C.privateFA; //ERROR conflicts with field from AI1 + } +} diff --git a/tests/errors/NestedInterfaceTest.java b/tests/errors/NestedInterfaceTest.java new file mode 100644 index 000000000..b3aa83ff2 --- /dev/null +++ b/tests/errors/NestedInterfaceTest.java @@ -0,0 +1,5 @@ +class NestedInterfaceTest implements NestedInterfaceTest.Const { + interface Const { + int A = 42; + } +} diff --git a/tests/errors/New.java b/tests/errors/New.java new file mode 100644 index 000000000..a2c23a069 --- /dev/null +++ b/tests/errors/New.java @@ -0,0 +1,15 @@ +public class New { + public static void main(String[] args) { + new New().go(); + } + + void go() { + + } +} + +aspect A { + pointcut p(): call(* *.new(..)) && this(*); + before(): p() { + } +} diff --git a/tests/errors/NoAspect.java b/tests/errors/NoAspect.java new file mode 100644 index 000000000..c735fd27a --- /dev/null +++ b/tests/errors/NoAspect.java @@ -0,0 +1,14 @@ +public class NoAspect { + public static void main(String[] args) { + new NoAspect().go(); + } + + void go() { + } +} + +class A { + static pointcut p(): target(*) && call(* go(..)); + before(): p() { + } +} diff --git a/tests/errors/NoFormalsCrosscut.java b/tests/errors/NoFormalsCrosscut.java new file mode 100644 index 000000000..d37d80391 --- /dev/null +++ b/tests/errors/NoFormalsCrosscut.java @@ -0,0 +1,12 @@ +import org.aspectj.testing.Tester; + +aspect NoFormalsCrosscut { + public void foo() {} + + pointcut xcut1(): * *(..); + pointcut xcut2(): NoFormalsCrosscut; + before(): xcut1 && xcut2() { + System.out.println("before"); + } +} + diff --git a/tests/errors/NoMethodName.java b/tests/errors/NoMethodName.java new file mode 100644 index 000000000..c2eefd990 --- /dev/null +++ b/tests/errors/NoMethodName.java @@ -0,0 +1,12 @@ +import org.aspectj.testing.*; + +public class NoMethodName { + public static void main(String[] args) { + new NoMethodName().realMain(args); + } + + public void realMain(String[] args) { + System.out.(); + Tester.check(false, "Shouldn't have compiled"); + } +} diff --git a/tests/errors/NoNew_PR398.java b/tests/errors/NoNew_PR398.java new file mode 100644 index 000000000..d3603fc55 --- /dev/null +++ b/tests/errors/NoNew_PR398.java @@ -0,0 +1,23 @@ +import org.aspectj.testing.Tester; +/** + * PR#398 + */ +class NoNew { + + public static void main(String[] args) { + try { + new NoNew().thrower(); + } catch (Exception e) { + } + } + void thrower() throws Exception { + throw /*new*/ Exception("exception"); // missing new + } +} + +aspect AspectTest of eachJVM() { + + pointcut pc3(): executions(void thrower()); + before(): pc3() { + } +} diff --git a/tests/errors/NoReturnStatement.java b/tests/errors/NoReturnStatement.java new file mode 100644 index 000000000..b60d4fc46 --- /dev/null +++ b/tests/errors/NoReturnStatement.java @@ -0,0 +1,23 @@ +import org.aspectj.testing.Tester; + +// PR#280 return statement not present in around with returns + +public aspect NoReturnStatement { + public static void main(String[] args) { test(); } + + public static void test() { + Tester.check(true, "passed"); + } + + public int m() { return 1; } + + int around(C t): target(t) && call(int m()) { + int x = proceed(t); + // uncomment this to make code compile: + // return x; + } +} + +class C { + public int m() { return 1; } +} diff --git a/tests/errors/NoReturnStatementSimple.java b/tests/errors/NoReturnStatementSimple.java new file mode 100644 index 000000000..e6f7787c8 --- /dev/null +++ b/tests/errors/NoReturnStatementSimple.java @@ -0,0 +1,6 @@ + +/** error falls to javac to detect - confirm detected in ajc */ +public class NoReturnStatementSimple { + static String noReturn() { } // compile error here detected by javac + public static void main(String[] args) { } +} diff --git a/tests/errors/NoReturnTypeInDesignator.java b/tests/errors/NoReturnTypeInDesignator.java new file mode 100644 index 000000000..1549015aa --- /dev/null +++ b/tests/errors/NoReturnTypeInDesignator.java @@ -0,0 +1,12 @@ + +// PR#130 + +public aspect NoReturnTypeInDesignator +{ + static after(): this(Point) && call(!static *(..)) { + System.out.println( "after" ); + } + +} + +class Point {} diff --git a/tests/errors/NoSource.java b/tests/errors/NoSource.java new file mode 100644 index 000000000..31549fd77 --- /dev/null +++ b/tests/errors/NoSource.java @@ -0,0 +1,7 @@ +import org.aspectj.testing.Tester; + +class NoSource { + introduction String { + public void foo() {} + } +} diff --git a/tests/errors/NotFound.java b/tests/errors/NotFound.java new file mode 100644 index 000000000..2960b29f1 --- /dev/null +++ b/tests/errors/NotFound.java @@ -0,0 +1,19 @@ +import foo.bar.Bax; //ERR: can't find type foo.bar.Bax +import a.b.c.*; //ERR: can't find package a.b.c + +public class NotFound { + public static void main(String[] args) { + g(). //ERR: method g() not found + bar(); + + Mumble m = //ERR: type Mumble not found + new Mumble(); //ERR: type Mumble not found + + m.go(); + + Mumble m2 = null; //ERR: type Mumble not found + + CONST //ERR: CONST not found + .m(1); + } +} diff --git a/tests/errors/NullWithFormals.java b/tests/errors/NullWithFormals.java new file mode 100644 index 000000000..1dc5cb229 --- /dev/null +++ b/tests/errors/NullWithFormals.java @@ -0,0 +1,39 @@ +import java.awt.*; +import java.awt.event.*; +import javax.swing.*; + +public class NullWithFormals { + + public void realMain(String[] args) { + new InnerWindowAdapter().windowClosing(null); + } + + static class InnerWindowAdapter extends WindowAdapter { + public void windowClosing(WindowEvent we) { + } + } + + public static void main(String[] args) { + new NullWithFormals().realMain(args); + } +} + + +aspect AspectW { + + pointcut pc0(WindowEvent we, String str) : instanceof(WindowAdapter) && executions(void windowClosing(we)); + static before(WindowEvent we, String str): pc0(we, str) { + System.out.println(thisJoinPoint); + } + + pointcut pc1(String str, WindowEvent we) : instanceof(WindowAdapter) && executions(void windowClosing(we)); + static before(String str, WindowEvent we): pc1(str, we) { + System.out.println(thisJoinPoint); + } + + pointcut pc2(WindowEvent we) : instanceof(WindowAdapter) && executions(void windowClosing(we)); + static before(WindowEvent we): pc2(we) { + System.out.println(thisJoinPoint); + } + +} diff --git a/tests/errors/OverloadedPointcuts.java b/tests/errors/OverloadedPointcuts.java new file mode 100644 index 000000000..00d58785a --- /dev/null +++ b/tests/errors/OverloadedPointcuts.java @@ -0,0 +1,6 @@ +//disallow defining more than one pointcut with the same name (PR#385) +aspect OverloadedPointcuts { + static void foo(int i) {} + pointcut fooCut(): execution(void OverloadedPointcuts.foo(int)); + pointcut fooCut(int i): execution(void OverloadedPointcuts.foo(int)) && args(i); +} diff --git a/tests/errors/PR320.java b/tests/errors/PR320.java new file mode 100644 index 000000000..d0d2cb256 --- /dev/null +++ b/tests/errors/PR320.java @@ -0,0 +1,14 @@ +public class PR320 { + public static void main(String[] args) { + //org.aspectj.testing.Tester.check(false, "Shouldn't have compiled!"); + org.aspectj.testing.Tester.check(true, "OK to compile by 08b1!"); + } +} +class Product1 {} +aspect Product1Aspect pertarget(target(Product1)){ + + pointcut instance(Product1 p): target(p); + before(Product1 p): instance(p) { + System.out.println("Im am instance of product1"); + } +} diff --git a/tests/errors/PR333.java b/tests/errors/PR333.java new file mode 100644 index 000000000..d7fc4beff --- /dev/null +++ b/tests/errors/PR333.java @@ -0,0 +1,7 @@ +public class PR333 { + public static void main(String[] args) { + org.aspectj.testing.Tester.check(false, "Shouldn't have compiled"); + } +} +class A implements B {} +class B {} diff --git a/tests/errors/PR348.java b/tests/errors/PR348.java new file mode 100644 index 000000000..7d2c0c3b0 --- /dev/null +++ b/tests/errors/PR348.java @@ -0,0 +1,17 @@ +public class Mark { + public static void main(String[] args) { + new Mark().realMain(args); + } + public void realMain(String[] args) { + new Bug().go(null); + org.aspectj.testing.Tester.check(false, "shouldn't have compiled"); + } +} + +class Bug { + void go(String s){} +} +aspect A { + pointcut p1(String s, int y): calls (* *.go(s)) && within(*); + before(String y2, int y): p1(y2, int) {} +} diff --git a/tests/errors/PR405.java b/tests/errors/PR405.java new file mode 100644 index 000000000..3c143e37e --- /dev/null +++ b/tests/errors/PR405.java @@ -0,0 +1,16 @@ +import org.aspectj.testing.Tester; +public class PR405 { + public static void main(String[] args) { + new PR405().realMain(args); + } + public void realMain(String[] args) { + Tester.check(false, "Shouldn't have compiled"); + } + + public PR405() { + } +} + +class C { + int foo(){ return 1 } +} diff --git a/tests/errors/PlusEqualsCantAssignToObject.java b/tests/errors/PlusEqualsCantAssignToObject.java new file mode 100644 index 000000000..c974cba87 --- /dev/null +++ b/tests/errors/PlusEqualsCantAssignToObject.java @@ -0,0 +1,6 @@ +class PlusEqualsCantAssignToObject { + public static void main(String[] args) { + Object o = "hello"; + o += "bye"; + } +} diff --git a/tests/errors/PointcutFormals.java b/tests/errors/PointcutFormals.java new file mode 100644 index 000000000..1892513c9 --- /dev/null +++ b/tests/errors/PointcutFormals.java @@ -0,0 +1,27 @@ +import org.aspectj.testing.Tester; + +public class PointcutFormals { + public static void main(String[] args) { + new PointcutFormals().call(0); + Tester.check(false, "Shouldn't have compiled!"); + } + void call(int i) {} +} + +aspect Aspect { + int n; + + pointcut calls_pc1 (int n): call(void *.call(n)); + pointcut calls_pc2 (int n): call(void *.call(..)); + pointcut calls_pc (): call(void *.call(n)); + pointcut executions_pc(): execution(void *(n)); + + before(): calls_pc () { } + before(): executions_pc() { } + + after(): calls_pc () { } + after(): executions_pc() { } + + void around(): calls_pc () { } + void around(): executions_pc() { } +} diff --git a/tests/errors/ProceedArgsCE.java b/tests/errors/ProceedArgsCE.java new file mode 100644 index 000000000..02224847d --- /dev/null +++ b/tests/errors/ProceedArgsCE.java @@ -0,0 +1,21 @@ +public class ProceedArgsCE { + public static void main(String[] args){ + new ProceedArgsCE().go(); + } + + void go() { + System.out.println("... "); + } +} + +aspect A { + void around(Object o): this(o) { + proceed(); // CE + } + void around(Object o): this(o) { + proceed(2); // CE + } + void around(Object o): this(o) { + proceed("hi", 2); //CE + } +} diff --git a/tests/errors/ProtectedFieldIntro.java b/tests/errors/ProtectedFieldIntro.java new file mode 100644 index 000000000..2d83b636e --- /dev/null +++ b/tests/errors/ProtectedFieldIntro.java @@ -0,0 +1,15 @@ +public class ProtectedFieldIntro { + public static void main(String[] args) { + new ProtectedFieldIntro().realMain(args); + } + public void realMain(String[] args) { + org.aspectj.testing.Tester.check(false, "shouldn't have compiled"); + } + + public ProtectedFieldIntro() { + } +} +class C {} +aspect A { + protected int C.i = 13; // can't do this +} diff --git a/tests/errors/ProtectedIntro.java b/tests/errors/ProtectedIntro.java new file mode 100644 index 000000000..ea693ad36 --- /dev/null +++ b/tests/errors/ProtectedIntro.java @@ -0,0 +1,15 @@ +public class ProtectedIntro { + public static void main(String[] args) { + new ProtectedIntro().realMain(args); + } + public void realMain(String[] args) { + org.aspectj.testing.Tester.check(false, "shouldn't have compiled"); + } + + public ProtectedIntro() { + } +} +class C {} +aspect A { + protected void C.foo() {}; // can't do this +} diff --git a/tests/errors/RecursiveCCutSpecifier.java b/tests/errors/RecursiveCCutSpecifier.java new file mode 100644 index 000000000..049dca63a --- /dev/null +++ b/tests/errors/RecursiveCCutSpecifier.java @@ -0,0 +1,19 @@ +package errors; + +import org.aspectj.testing.Tester; + +/** + * Test for: PR #95 + */ + +aspect RecursiveCCutSpecifier { + pointcut setFile(LocalFile f): receptions(* *(..)) || setFile(f) && instanceof(f); + + /*static*/ before(LocalFile f): setFile(f) { + // nop + } +} + +class LocalFile { + public LocalFile() {} +} diff --git a/tests/errors/StaticAdviceOnAbstract.java b/tests/errors/StaticAdviceOnAbstract.java new file mode 100644 index 000000000..4975bd482 --- /dev/null +++ b/tests/errors/StaticAdviceOnAbstract.java @@ -0,0 +1,20 @@ +abstract aspect StaticAdviceOnAbstract { + abstract pointcut i(); + + pointcut j(): + i() + && !this(StaticAdviceOnAbstract) + && call(new(..)) ; +} + +aspect Concrete { + // static advice indirectly on an abstract pointcut + after() returning(Object o): StaticAdviceOnAbstract.j() { + System.out.println("we have"+o); + } + + // a simple case of directly on abstract pointcut + after() returning(Object o): StaticAdviceOnAbstract.i() { + System.out.println("we have"+o); + } +} diff --git a/tests/errors/StaticPointcutRefs.java b/tests/errors/StaticPointcutRefs.java new file mode 100644 index 000000000..3d8a75774 --- /dev/null +++ b/tests/errors/StaticPointcutRefs.java @@ -0,0 +1,10 @@ +public class StaticPointcutRefs { +} + +abstract aspect A1 { + abstract pointcut ocut(); //: call(* *(..)); + + static aspect AI { + before(): ocut() {} //ERROR static reference to abstract PCD + } +} diff --git a/tests/errors/StrayDot.java b/tests/errors/StrayDot.java new file mode 100644 index 000000000..d918b0957 --- /dev/null +++ b/tests/errors/StrayDot.java @@ -0,0 +1,19 @@ +import org.aspectj.testing.*; + +public class StrayDot { + public static void main(String[] args) { + new StrayDot().realMain(args); + } + + public void realMain(String[] args) { + .int i = 13; + int. z = 13; + int .j = 13; + int k. = 13; + int l .= 13; + int m =. 13; + int n = .13; + Tester.check(false, "Shouldn't have compiled"); + } +} + diff --git a/tests/errors/StraySlash.java b/tests/errors/StraySlash.java new file mode 100644 index 000000000..e5323326a --- /dev/null +++ b/tests/errors/StraySlash.java @@ -0,0 +1,23 @@ +import org.aspectj.testing.*; + +public class StraySlash { + public static void main(String[] args) { + new StraySlash().realMain(args); + } + + public void realMain(String[] args) { + \ + / + & + * + ( + ) + @ + # + $ + % + ^ + Tester.check(false, "Shouldn't have compiled"); + } +} + diff --git a/tests/errors/SubAspectsCantExtendNonAbstractAspects.java b/tests/errors/SubAspectsCantExtendNonAbstractAspects.java new file mode 100644 index 000000000..e97e89fe8 --- /dev/null +++ b/tests/errors/SubAspectsCantExtendNonAbstractAspects.java @@ -0,0 +1,15 @@ +public class SubAspectsCantExtendNonAbstractAspects { + public static void main(String[] args) { + } +} + +class C {} + +aspect A /*of eachobject(instanceof(C))*/ { + before(): call(* *(..)) {} +} + + +//ERROR: can't extend a concrete aspect +aspect SubA extends A { +} diff --git a/tests/errors/Switch.java b/tests/errors/Switch.java new file mode 100644 index 000000000..404db1d80 --- /dev/null +++ b/tests/errors/Switch.java @@ -0,0 +1,8 @@ +public class Switch { + public void m() { + switch(2) { + int j = 0; + case 1: + } + } +} diff --git a/tests/errors/ThrowsClause.java b/tests/errors/ThrowsClause.java new file mode 100644 index 000000000..ca919b6e6 --- /dev/null +++ b/tests/errors/ThrowsClause.java @@ -0,0 +1,14 @@ +class C { + public void m() throws Integer { } //ERROR Integer is not a Throwable + + public C() throws C { } //ERROR C is not a Throwable +} + + +class Sup { + public void m() {} +} + +class Sub extends Sup { + public void m() throws Exception {} +} diff --git a/tests/errors/TopLevelAfter.java b/tests/errors/TopLevelAfter.java new file mode 100644 index 000000000..7db612660 --- /dev/null +++ b/tests/errors/TopLevelAfter.java @@ -0,0 +1,9 @@ +import org.aspectj.testing.Tester; + +public class TopLevelAfter { + public static void main(String[] args) { + Tester.check(false, "should not have compiled"); + } +} + +after(): {} diff --git a/tests/errors/TopLevelAround.java b/tests/errors/TopLevelAround.java new file mode 100644 index 000000000..52beae80e --- /dev/null +++ b/tests/errors/TopLevelAround.java @@ -0,0 +1,9 @@ +import org.aspectj.testing.Tester; + +public class TopLevelAround { + public static void main(String[] args) { + Tester.check(false, "should not have compiled"); + } +} + +around(): {} // CE 9 diff --git a/tests/errors/TopLevelBefore.java b/tests/errors/TopLevelBefore.java new file mode 100644 index 000000000..4341e6941 --- /dev/null +++ b/tests/errors/TopLevelBefore.java @@ -0,0 +1,9 @@ +import org.aspectj.testing.Tester; + +public class TopLevelBefore { + public static void main(String[] args) { + Tester.check(false, "should not have compiled"); + } +} + +before(): {} diff --git a/tests/errors/TwoDots.java b/tests/errors/TwoDots.java new file mode 100644 index 000000000..e6589c508 --- /dev/null +++ b/tests/errors/TwoDots.java @@ -0,0 +1,17 @@ +import org.aspectj.testing.*; + +public class TwoDots { + public static void main(String[] args) { + new TwoDots().realMain(args); + } + + public void realMain(String[] args) { + this..foo(); + //this..i = 14; + Tester.check(false, "Shouldn't have compiled"); + } + + int i = 13; + void foo() {} +} + diff --git a/tests/errors/TwoIntros.java b/tests/errors/TwoIntros.java new file mode 100644 index 000000000..e9766ad5f --- /dev/null +++ b/tests/errors/TwoIntros.java @@ -0,0 +1,17 @@ +import org.aspectj.testing.Tester; + +public class TwoIntros { + public static void main(String[] args) { + Tester.check(false, "shouldn't compile!"); + + } +} + +class A { +} + +aspect Aspect { + int A.i; + + String A.i; +} diff --git a/tests/errors/TwoPublics.java b/tests/errors/TwoPublics.java new file mode 100644 index 000000000..e31b8f477 --- /dev/null +++ b/tests/errors/TwoPublics.java @@ -0,0 +1,10 @@ +public class TwoPublics { + public static void main(String[] args) { + new TwoPublics().go(); + } + void go() { + } +} + +public aspect A {} +public aspect B {} diff --git a/tests/errors/UndeclaredThrows.java b/tests/errors/UndeclaredThrows.java new file mode 100644 index 000000000..352341cf8 --- /dev/null +++ b/tests/errors/UndeclaredThrows.java @@ -0,0 +1,20 @@ +import java.io.*; + +public class UndeclaredThrows { + +} + +class C { + public void m() throws Exception { + } + + public void m1() { + m(); + } + + public void m2() { + try { + m1(); + } catch (IOException ioe) { } + } +} diff --git a/tests/errors/UndefinedPointCut_PR396.java b/tests/errors/UndefinedPointCut_PR396.java new file mode 100644 index 000000000..786ffde24 --- /dev/null +++ b/tests/errors/UndefinedPointCut_PR396.java @@ -0,0 +1,10 @@ +class UndefinedPointCut_PR396 { + public static void main(String[] args) { + org.aspectj.testing.Tester.check(false, "Shouldn't have compiled"); + } +} + +aspect AspectTest { //of eachJVM() { + pointcut pc4(): callsto(pc2()); //pc2 is undefined + before(): pc4() {} +} diff --git a/tests/errors/WildcardForReturns.java b/tests/errors/WildcardForReturns.java new file mode 100644 index 000000000..e330b474f --- /dev/null +++ b/tests/errors/WildcardForReturns.java @@ -0,0 +1,21 @@ + +import org.aspectj.testing.Tester; + + + + + +/** @testcase PR#280 wildcard used for returns clause */ +public class WildcardForReturns { + public static void main(String[] args) { + new WildcardForReturns().m(); + } + + public void m() { } + + static aspect A { + * around (WildcardForReturns t): this(t) && call(* m()) { // CE 17 + // bad test - return null; //return proceed(t); + } + } +} diff --git a/tests/errors/protectedAccess/Main.java b/tests/errors/protectedAccess/Main.java new file mode 100644 index 000000000..39ba8307c --- /dev/null +++ b/tests/errors/protectedAccess/Main.java @@ -0,0 +1,62 @@ +package protectedAccess; + +import org.aspectj.testing.Tester; +import protectedAccess.p1.C1; + +public class Main { + public static void main(String[] args) { + SubC1 subc1 = new SubC1(); + subc1.m(subc1, subc1); + } +} + +class SubC1 extends C1 { + public void m(SubC1 subc1, C1 c1) { + Tester.checkEqual(this.s, "protected"); + Tester.checkEqual(this.m(), "protected"); + + Tester.checkEqual(s, "protected"); + Tester.checkEqual(m(), "protected"); + + Tester.checkEqual(subc1.s, "protected"); + Tester.checkEqual(subc1.m(), "protected"); + + C1 c1a = new C1() { }; + + C1 c1b = new C1(); //ERROR: illegal protected access + + Tester.checkEqual(c1.s, "protected"); //ERROR: illegal protected access + Tester.checkEqual(c1.m(), "protected"); //ERROR: illegal protected access + + Tester.checkEqual(c1.m(), "protected"); //ERROR: illegal protected access + } + + class SubI1 extends I1 { + public void m(SubC1 subc1, C1 c1, I1 i1) { + Tester.checkEqual(s, "protected"); + Tester.checkEqual(m(), "protected"); //ERROR: method not found + + Tester.checkEqual(SubC1.this.s, "protected"); + Tester.checkEqual(SubC1.this.m(), "protected"); + + Tester.checkEqual(subc1.s, "protected"); + Tester.checkEqual(subc1.m(), "protected"); + + Tester.checkEqual(c1.s, "protected"); //ERROR: illegal protected access + Tester.checkEqual(c1.m(), "protected"); //ERROR: illegal protected access + + Tester.checkEqual(si, "ip"); + Tester.checkEqual(mi(), "ip"); + + Tester.checkEqual(this.si, "ip"); + Tester.checkEqual(this.mi(), "ip"); + + Tester.checkEqual(i1.si, "ip"); //ERROR: illegal protected access + Tester.checkEqual(i1.mi(), "ip"); //ERROR: illegal protected access + } + } + + protected String mString(Object o) { + return o.toString(); + } +} diff --git a/tests/errors/protectedAccess/p1/C1.java b/tests/errors/protectedAccess/p1/C1.java new file mode 100644 index 000000000..976c8e7c6 --- /dev/null +++ b/tests/errors/protectedAccess/p1/C1.java @@ -0,0 +1,17 @@ +package protectedAccess.p1; + + +public class C1 { + protected C1() { } + + protected String s = "protected"; + + protected String m() { return "protected"; } + + protected String mString(String s) { return s; } + + protected static class I1 { + protected String si = "ip"; + protected String mi() { return "ip"; } + } +} diff --git a/tests/harness/ErrorTest.java b/tests/harness/ErrorTest.java new file mode 100644 index 000000000..6adc5f891 --- /dev/null +++ b/tests/harness/ErrorTest.java @@ -0,0 +1,9 @@ + + +public class ErrorTest { + static Integer i() { return Integer.valueOf("0"); } + int i = i(); // CE 5 always + int j = i(); // CE 6 always +} + + diff --git a/tests/harness/ErrorWarning.java b/tests/harness/ErrorWarning.java new file mode 100644 index 000000000..0719f2993 --- /dev/null +++ b/tests/harness/ErrorWarning.java @@ -0,0 +1,22 @@ +import org.aspectj.testing.Tester; + +public class ErrorWarning { + public static void main (String[] args) { + boolean passed = true; + try { ok(); } + catch (Error e) { passed = false; } + Tester.check(passed, "did not catch error"); + } // end of main () + + public static void ok() { + try { + throw new Error();; // CE 13 unless -lenient + } catch(Error e) { } // CW 14 per aspect + } + static aspect A { + declare warning : withincode(void ErrorWarning.ok()) + && (handler(Error)) : "warning"; + } +} + + diff --git a/tests/harness/LenientTest.java b/tests/harness/LenientTest.java new file mode 100644 index 000000000..798f4439a --- /dev/null +++ b/tests/harness/LenientTest.java @@ -0,0 +1,11 @@ + +import org.aspectj.testing.Tester; + +public class LenientTest { + public void m() { + return;; // CE 6 in -lenient only + } + public static void main(String[] args) { + Tester.check(null != new LenientTest(), "no test"); + } +} diff --git a/tests/harness/Messages.java b/tests/harness/Messages.java new file mode 100644 index 000000000..22d034382 --- /dev/null +++ b/tests/harness/Messages.java @@ -0,0 +1,16 @@ + +public class Messages { + public static void main (String[] args) { + new C().run(); + } +} + +class C { + void run() { + } +} + +aspect A { + pointcut f() : receptions(void C.run()); // ME 14 + around() returns void : f() { } // ME 15 +} diff --git a/tests/harness/TestNoTester.java b/tests/harness/TestNoTester.java new file mode 100644 index 000000000..c411c1514 --- /dev/null +++ b/tests/harness/TestNoTester.java @@ -0,0 +1,5 @@ + +public class TestNoTester { + public static void main (String[] args) { + } +} diff --git a/tests/harness/TestTester.events b/tests/harness/TestTester.events new file mode 100644 index 000000000..41aa6a4a9 --- /dev/null +++ b/tests/harness/TestTester.events @@ -0,0 +1,2 @@ +event 1
+event 2
diff --git a/tests/harness/TestTester.java b/tests/harness/TestTester.java new file mode 100644 index 000000000..29c9d500b --- /dev/null +++ b/tests/harness/TestTester.java @@ -0,0 +1,31 @@ + +import org.aspectj.testing.Tester; + +public class TestTester { + public static void main (String[] args) { + Tester.event("1"); + Tester.note("note 1"); + Tester.note("note 2"); + int i = 1; + Tester.check("note " + (i++)); + Tester.check("note " + (i++), "second note failed"); + new TestTester().run(); + Tester.checkAllEvents(); // does this empty + // now check(String[]) + Tester.clear(); + Tester.event("one"); + Tester.event("two"); + Tester.checkEvents(new String[] { "one", "two"}); + } + static { + Tester.expectEvent("1"); + Tester.expectEvent("2"); + } + public void run() { + Tester.event("2"); + Tester.check(true, "no failure"); + Tester.checkEqual("1", "1", "no failure"); + Tester.checkEqual("1", "1"); + } + +} diff --git a/tests/harness/TestTesterFail.java b/tests/harness/TestTesterFail.java new file mode 100644 index 000000000..a2eb7ef64 --- /dev/null +++ b/tests/harness/TestTesterFail.java @@ -0,0 +1,26 @@ + +import org.aspectj.testing.Tester; +import org.aspectj.testing.Tester; + +public class TestTesterFail { + public static void main (String[] args) { + Tester.event("1"); + Tester.event("event 1"); + new TestTesterFail().run(); + Tester.checkAllEvents(); // does not include events + Tester.checkEventsFromFile("TestTester.events"); // should fail if FNF + } + static { + Tester.expectEvent("1"); + Tester.expectEvent("2"); // fail here - misentered below + Tester.expectEvent("3"); // fail here - expected but not found + } + public void run() { + Tester.event("2 "); // + Tester.event("event2"); // fail here - space + Tester.check(false, "failure"); // fail here - explicitly + Tester.checkEqual("1", "1 ", "failure"); // fail here - space + Tester.checkEqual("", "1"); // fail here + } + +} diff --git a/tests/harness/TestTesterFile.java b/tests/harness/TestTesterFile.java new file mode 100644 index 000000000..4e008d6b1 --- /dev/null +++ b/tests/harness/TestTesterFile.java @@ -0,0 +1,14 @@ + +import org.aspectj.testing.Tester; + +public class TestTesterFile { + public static void main (String[] args) { + Tester.event("event 1"); // in TestTester.events + new TestTesterFile().run(); + Tester.checkEventsFromFile("TestTester.events"); + } + public void run() { + Tester.event("event 2"); // in TestTester.events + } + +} diff --git a/tests/harness/TesterNotesFail.java b/tests/harness/TesterNotesFail.java new file mode 100644 index 000000000..61c8ace63 --- /dev/null +++ b/tests/harness/TesterNotesFail.java @@ -0,0 +1,10 @@ + +import org.aspectj.testing.Tester; + +/** @testcase fail when note not found */ +public class TesterNotesFail { + public static void main (String[] args) { + Tester.note("note "); + Tester.check("note"); // fail + } +} diff --git a/tests/harness/ajctest/Aspect.java b/tests/harness/ajctest/Aspect.java new file mode 100644 index 000000000..dddacf69a --- /dev/null +++ b/tests/harness/ajctest/Aspect.java @@ -0,0 +1,11 @@ + +import org.aspectj.lang.*; +import org.aspectj.lang.reflect.*; + +aspect Aspect { + before() : execution(public * (!java..*).*(..)) { + SourceLocation sl = thisJoinPointStaticPart.getSourceLocation(); + String s = thisJoinPoint + "@" + sl.getFileName() + ":" + sl.getLine(); + System.err.println(s); + } +} diff --git a/tests/harness/ajctest/CompilerError.java b/tests/harness/ajctest/CompilerError.java new file mode 100644 index 000000000..94c7ad210 --- /dev/null +++ b/tests/harness/ajctest/CompilerError.java @@ -0,0 +1,2 @@ + +compiler error diff --git a/tests/harness/ajctest/Driver.java b/tests/harness/ajctest/Driver.java new file mode 100644 index 000000000..dca23a717 --- /dev/null +++ b/tests/harness/ajctest/Driver.java @@ -0,0 +1,21 @@ + + +/** Drive normal, system.exit, error or exception result from main */ +public class Driver { + + /** + * @param args {[-exit <number>|[-error|-exception] <string>]} + */ + public static void main (String[] args) throws Exception { + for (int i = 0; i < args.length; i++) { + String arg = args[i]; + if ("-exit".equals(arg)) { + System.exit(Integer.valueOf(args[i+1]).intValue()); + } else if ("-error".equals(arg)) { + throw new Error(args[i+1]); + } else if ("-exception".equals(arg)) { + throw new RuntimeException(args[i+1]); + } + } + } +} diff --git a/tests/harness/directTester.sh b/tests/harness/directTester.sh new file mode 100644 index 000000000..5315ceae6 --- /dev/null +++ b/tests/harness/directTester.sh @@ -0,0 +1,77 @@ +#!/bin/sh
+# syntax: <mainFile> {file}...
+# info: compile files and run mainFile class (with Tester classes)
+# requires JDKDIR and build output be available
+
+[ -n "$DEBUG" ] && set -vx
+pathtojava() {
+ echo "$1" | sed 's|/cygdrive/\(c\)/|\1:/|' # todo
+}
+errMssg() {
+ echo "## $0 Error: $1"
+ if [ -n "$2" ] ; then exit "$2" ; fi
+}
+
+sourcesRunningInNew() {
+ cat<<EOF
+InnerInterfaceNames.java
+InnerInterfaceAccess.java
+PR691.java
+AroundDoubleAssignment.java
+AroundDoubleAssignmentC.java
+AroundChangeThis.java
+PointcutQualification.java
+PointcutQualification2.java
+AbstractPointcutAccess.java
+SourceLocationCall.java
+CallNotTarget.java
+AroundCall.java
+ArgsInCflow2.java
+FactorialCflow.java
+ArrayInc.java
+TargetObjectReplacement.java
+EOF
+}
+
+runAjc() {
+ "$JDKDIR/bin/java" -classpath "$compilerJar" org.aspectj.tools.ajc.Main \
+ -d "$classesDir" -classpath "$rtJar${PS}$clientJar" "${@}"
+}
+runJava() {
+ "$JDKDIR/bin/java" -classpath "$rtJar${PS}$clientJar${PS}$classesDir" "${@}"
+}
+
+if [ -n "$PS" ] ; then
+ case `uname` in
+ CYGWIN* ) PS=";" ;;
+ * ) PS=":" ;;
+ esac
+fi
+
+scriptDir=`dirname "$0"`
+scriptDir=`cd "$scriptDir"; pwd`
+java="$JDKDIR/bin/java"
+[ -x "$java" ] || errMssg "no java=$java"
+ajJarsDir=`cd "$scriptDir/../../../aj-build-modules/jars"; pwd`
+ajJarsDirJ=`pathtojava "$ajJarsDir"`
+
+clientJar="$ajJarsDirJ/testing-client.jar"
+compilerJar="${compilerJar:-ajJarsDirJ/alltesting.jar}"
+rtJar="$ajJarsDirJ/runtime.jar"
+classesDir=cl
+[ -f "$clientJar" ] || errMssg "no clientJar=$clientJar" 4
+[ -f "$rtJar" ] || errMssg "no rtJar=$rtJar" 4
+
+cd "$scriptDir/../new" || errMssg "no new directory" 4
+mkdir "$classesDir"
+sources="${@:-`sourcesRunningInNew`}"
+for srcFile in $sources ; do
+ [ -f "$srcFile" ] || errMssg "no srcFile=$srcFile" 4
+ className=`echo "$srcFile" | sed 's|\/|.|g;s|\.java||'`
+ [ -n "$className" ] || errMssg "no className" 4
+ rm -rf "$classesDir"/*
+ runAjc "${srcFile}"
+ runJava $className || echo '<<<< FAIL '"$srcFile"
+done
+rm -rf "$classesDir"
+
diff --git a/tests/harnessErrors.txt b/tests/harnessErrors.txt new file mode 100644 index 000000000..962154745 --- /dev/null +++ b/tests/harnessErrors.txt @@ -0,0 +1,69 @@ +######### these should be abort the harness as errors + +###### bad test specifications +bad arguments passed to ajc +new -badArgument +TestTester.java +TestTester + +no such file - report as error (run specification) +new +NoSuchFile.java +NoSuchFile + +no such file - report as error (!compile specification) +new +NoSuchFile.java +!compile +4 + +no such directory - report as error (run specification) +noSuchDir +NoSuchFile.java +NoSuchFile + +no such directory - report as error (!compile specification) +noSuchDir +NoSuchFile.java +!compile + +1 error and 1 warning, with warning line wrong +harness -strict +ErrorWarning.java +!compile +ErrorWarning.java:13 +ErrorWarning.java:15 + +1 error and 1 warning, with error line wrong +harness -strict +ErrorWarning.java +!compile +ErrorWarning.java:12 +ErrorWarning.java:14 + +1 error and 1 warning, with both lines wrong +harness -strict +ErrorWarning.java +!compile +ErrorWarning.java:12 +ErrorWarning.java:15 + +1 error and 1 warning, with extra error line specified (same as warning line) +harness -strict +ErrorWarning.java +!compile +13 14 +ErrorWarning.java:15 + +1 error and 1 warning, with extra warning line specified (same as error line) +harness -strict +ErrorWarning.java +!compile +13 +13 14 + +1 error and 1 warning, with no warning line specified +harness -strict +ErrorWarning.java +!compile +13 diff --git a/tests/harnessFails.txt b/tests/harnessFails.txt new file mode 100644 index 000000000..166b46ea7 --- /dev/null +++ b/tests/harnessFails.txt @@ -0,0 +1,13 @@ +######### these should be reported as failing test cases + +##### testing Tester client interface +checks and events, expecting 6 fails +harness +TestTesterFail.java +TestTesterFail + +one missing note +harness +TesterNotesFail.java +TesterNotesFail + diff --git a/tests/harnessPasses.txt b/tests/harnessPasses.txt new file mode 100644 index 000000000..3a7171edb --- /dev/null +++ b/tests/harnessPasses.txt @@ -0,0 +1,91 @@ + +# these should be reported as passing test cases + +########################## testing reader of test cases, error/warning evaluation +## error X filename +2 error, no filename +harness +ErrorTest.java +!compile +5 6 + +2 error, filename, argument (strict) todo find strict-specific +harness -strict +ErrorTest.java +!compile +ErrorTest.java:6 ErrorTest.java:5 + +compiles under -lenient-only +harness -strict +ErrorTest.java +!compile +ErrorTest.java:6 ErrorTest.java:5 + +## error,warning X filename +1 error and 1 warning, without filename, with args (strict) +harness -strict +ErrorWarning.java +!compile +13 +14 + +1 error and 1 warning, with filenames +harness -strict +ErrorWarning.java +!compile +ErrorWarning.java:13 +ErrorWarning.java:14 + +messages treated as errors +harness +Messages.java +!compile +14 15 + +## non-error warning cases +0 error and 1 warning, without filename +harness -lenient +ErrorWarning.java +ErrorWarning +warnings: 14 + +0 error and 1 warning, with filename +harness -lenient +ErrorWarning.java +ErrorWarning +warnings: ErrorWarning.java:14 + +compiles under -lenient-only - compile/run +harness -lenient +LenientTest.java +LenientTest + +compiles under -lenient-only - fail by default +harness +LenientTest.java +!compile +6 + +compiles under -lenient-only - fail with -strict +harness -strict +LenientTest.java +!compile +6 + +########################## testing Tester client interface +checks and events, all should pass +harness +TestTester.java +TestTester + +event files +harness +TestTesterFile.java +TestTesterFile + +compile and run, no tester required +harness +TestNoTester.java +TestNoTester + + diff --git a/tests/incr/incr1/Incr__0.java b/tests/incr/incr1/Incr__0.java new file mode 100644 index 000000000..e1cd22b32 --- /dev/null +++ b/tests/incr/incr1/Incr__0.java @@ -0,0 +1,9 @@ +import org.aspectj.testing.Tester; + +public class Incr { + public static void main(String[] args) { + Tester.checkCurrentRun(0,1); + Tester.checkWasRecompiled(0,"Incr"); + Tester.checkWasRecompiled(1,"Incr"); + } +} diff --git a/tests/incr/incr1/Incr__2.java b/tests/incr/incr1/Incr__2.java new file mode 100644 index 000000000..9e6abf566 --- /dev/null +++ b/tests/incr/incr1/Incr__2.java @@ -0,0 +1,9 @@ +import org.aspectj.testing.Tester; + +public class Incr { + public static void main(String[] args) { + Tester.checkCurrentRun(2,3); + Tester.checkWasRecompiled(2,"Incr"); + Tester.checkWasNotRecompiled(3,"Incr"); + } +} diff --git a/tests/incr/incr1/Incr__4.java b/tests/incr/incr1/Incr__4.java new file mode 100644 index 000000000..91d37863f --- /dev/null +++ b/tests/incr/incr1/Incr__4.java @@ -0,0 +1,8 @@ +import org.aspectj.testing.Tester; + +public class Incr { + public static void main(String[] args) { + Tester.checkCurrentRun(4); + Tester.checkWasRecompiled(4,"Incr"); + } +} diff --git a/tests/jimTests.xml b/tests/jimTests.xml new file mode 100644 index 000000000..581a5bb80 --- /dev/null +++ b/tests/jimTests.xml @@ -0,0 +1,85 @@ +<!DOCTYPE suite SYSTEM "../tests/ajcTestSuite.dtd"> +<suite> + <ajc-test dir="new" pr="764" + title="binding handler args with indeterminate prefix and suffix" + keywords="from-resolved_105"> + <compile files="IndeterminateHandlerArg.java"/> + <run class="IndeterminateHandlerArg"/> + </ajc-test> + + <!-- + <ajc-test dir="base/test129" + title="DEPRECATED: introduce of abstract methods works" + keywords="from-base"> + <compile files="Driver.java"/> + <run class="Driver"/> + </ajc-test> + + <ajc-test dir="new" title="advising field get/sets when accessing via super" + keywords="from-resolved_105"> + <compile files="SuperField.java"/> + <run class="SuperField"/> + </ajc-test> + + <ajc-test dir="new" pr="568" title="cyclic pointcut definitions" + keywords="from-resolved_10rc3"> + <compile files="CyclicPointcuts.java"> + <message kind="error" line="11"/> + <message kind="error" line="14"/> + <message kind="error" line="18"/> + <message kind="error" line="32"/> + <message kind="error" line="43"/> + </compile> + </ajc-test> + + + + <ajc-test dir="new" pr="457" + title="Compiler should suggest using aspect when advice, pointcuts, or introduction is in a class" + keywords="from-errors"> + <compile files="RecognizeAspectCE.java"> + <message kind="error" line="6" text="RecognizeAspectCE.java:6"/> + </compile> + </ajc-test> + + + <ajc-test dir="new/privilegedAspects" pr="555" + title="access to private members from privileged aspect" + keywords="from-resolved_10rc3"> + <compile + files="driver/PR555.java,util/Util.java,pack/DefaultTarget.java"/> + <run class="driver.PR555"/> + </ajc-test> + + + <ajc-test dir="new/packageAccessPR556" pr="556" + title="aspects should get package access outside the file" + keywords="from-resolved_10rc3"> + <compile files="base1/p/C1.java,base2/p/C2.java"/> + <run class="p.C1"/> + </ajc-test> + + <ajc-test dir="new" pr="560" + title="compile fails for aspect derived from percflow base aspect unless pointcut excludes base aspect and subaspects" + keywords="from-resolved_10rc3"> + <compile files="PR560.java"/> + <run class="PR560"/> + </ajc-test> + + <ajc-test dir="new" + title="Does the matrix coverage thing for the new method signatures" + keywords="from-resolved_10x"> + <compile files="MethodSignatures.java"/> + <run class="MethodSignatures"/> + </ajc-test> + + <ajc-test dir="base/test117" title="DEPRECATED: introduce of variables" + keywords="from-base"> + <compile files="Driver.java"/> + <run class="Driver"/> + </ajc-test> + + + --> + +</suite>
\ No newline at end of file diff --git a/tests/jsrc/AroundAll.java b/tests/jsrc/AroundAll.java new file mode 100644 index 000000000..fadb9d4c2 --- /dev/null +++ b/tests/jsrc/AroundAll.java @@ -0,0 +1,11 @@ +aspect AroundAll { + pointcut targets(Object o) returns Object: + executions(!abstract !native * *(..)) && instanceof(o) && (within(java..*) || within(javax..*) || within(org.aspectj..*)); + + around(Object thisObj) returns Object: targets(thisObj) { + if (true) { + throw new RuntimeException("not meant to run"); + } + return proceed(thisObj); + } +} diff --git a/tests/jsrc/FindShowError.java b/tests/jsrc/FindShowError.java new file mode 100644 index 000000000..39fe6258d --- /dev/null +++ b/tests/jsrc/FindShowError.java @@ -0,0 +1,25 @@ +import org.aspectj.compiler.base.ast.*; + + + +aspect Wins { + + pointcut showError(ASTObject ast, String msg): target(ast) && call(void showError(msg)); + + void around(ASTObject ast, String msg): showError(ast, msg) { + System.out.println("hi"); + proceed(ast, msg); + } +} + +aspect Loses { + + pointcut showError(ASTObject ast, String msg): + within(org.aspectj.compiler..*) && target(ast) && call(void AST.showError(msg)); + + void around(ASTObject ast, String msg): showError(ast, msg) { + System.out.println("hi"); + proceed(ast, msg); + } +} + diff --git a/tests/jsrc/Trace.java b/tests/jsrc/Trace.java new file mode 100644 index 000000000..13f36d61d --- /dev/null +++ b/tests/jsrc/Trace.java @@ -0,0 +1,32 @@ +import java.io.Serializable; + +abstract aspect Trace { + abstract pointcut targets(); + + before (): targets() { + System.out.println("entering " + thisJoinPoint); + } + after (): targets() { + System.out.println("exiting " + + thisStaticJoinPoint); + } + + after () throwing (Throwable t): targets() { + System.out.println("throwing " + t); + } + + after () throwing (java.io.IOException ioe): targets() { + System.out.println("throwing " + ioe); + } + + after () returning (Object o): targets() { + System.out.println("returning " + o); + } + + + private static int initCounter() { + return 0; + } + + //private int Serializable.counter = initCounter(); +} diff --git a/tests/jsrc/TraceAll.java b/tests/jsrc/TraceAll.java new file mode 100644 index 000000000..b46c99d2c --- /dev/null +++ b/tests/jsrc/TraceAll.java @@ -0,0 +1,3 @@ +aspect TraceAll extends Trace of eachJVM() { + pointcut targets(): receptions(!native * *(..)) && (instanceof(java..*|| javax..* || org.aspectj..*)); +} diff --git a/tests/jsrc/TraceCalls.java b/tests/jsrc/TraceCalls.java new file mode 100644 index 000000000..4a0fa5db8 --- /dev/null +++ b/tests/jsrc/TraceCalls.java @@ -0,0 +1,5 @@ +aspect TraceCalls extends Trace of eachJVM() { + pointcut targets(): + (within(java..*) || within(javax..*) || within(org.aspectj..*)) && + (calls(* *(..)) || calls(new(..))); +} diff --git a/tests/jsrc/TraceInstance.java b/tests/jsrc/TraceInstance.java new file mode 100644 index 000000000..3a30e94bf --- /dev/null +++ b/tests/jsrc/TraceInstance.java @@ -0,0 +1,3 @@ +aspect TraceAll extends Trace { + pointcut targets(): receptions(!native * *(..)) && (instanceof(java..* || javax..*)); +} diff --git a/tests/jsrc/TraceMembers.java b/tests/jsrc/TraceMembers.java new file mode 100644 index 000000000..9f62a9129 --- /dev/null +++ b/tests/jsrc/TraceMembers.java @@ -0,0 +1,5 @@ +aspect TraceMembers extends Trace of eachJVM() { + pointcut targets(): + (within(java..*) || within(javax..*) || within(org.aspectj..*)) && + executions(!abstract !native * *(..)); +} diff --git a/tests/jsrc/TraceSets.java b/tests/jsrc/TraceSets.java new file mode 100644 index 000000000..306d2486f --- /dev/null +++ b/tests/jsrc/TraceSets.java @@ -0,0 +1,5 @@ +aspect TraceSets extends Trace of eachJVM() { + pointcut targets(): + (within(java..*) || within(javax..*) || within(org.aspectj..*)) && + sets(* *..*.*); +} diff --git a/tests/new/.cvsignore b/tests/new/.cvsignore new file mode 100644 index 000000000..168aa3113 --- /dev/null +++ b/tests/new/.cvsignore @@ -0,0 +1 @@ +ajworkingdir diff --git a/tests/new/AJDBClass.java b/tests/new/AJDBClass.java new file mode 100644 index 000000000..7dd1b3e24 --- /dev/null +++ b/tests/new/AJDBClass.java @@ -0,0 +1,110 @@ +public class AJDBClass { + + public int publicInt = 0; + protected int protectedInt = 1; + private int privateInt = 2; + /*package*/ int packageInt = 3; + + public AJDBClass() {} + /*package*/ AJDBClass(int i) {} + protected AJDBClass(byte b) {} + private AJDBClass(String s) {} + + { + publicInt = 13; + } + + public static void main(String[] args) { + System.out.println("Starting..."); + new AJDBClass().go(); + System.out.println("Done."); + } + + void go() { + int j = 1; + String string = "string"; + byte b = (byte)9; + long l = 123123123; + double d = 123.123; + short s = (short)4; + char c = 'c'; + Object o = null; + Integer integer = new Integer(13); + a(); + b(); + c(); + d(); + } + + public void a() { + System.out.println("a"); + } + + protected void b() { + System.out.println("b"); + } + + private void c() { + System.out.println("c"); + } + + void d() { + System.out.println("d"); + } +} + +aspect Aspect { + pointcut ours(): instanceof(AJDBClass); + pointcut allReceptions(): receptions(void *(..)) && ours(); + pointcut allExecutions(): executions(void *(..)) && within(AJDBClass); + pointcut allCalls(): calls(void AJDBClass.*(..)); + pointcut allCallsTo(): callsto(receptions(void *(..)) && instanceof(AJDBClass)); + + static before(): allReceptions() { + System.out.println("before receptions: " + thisJoinPoint); + } + static after(): allReceptions() { + System.out.println("after receptions: " + thisJoinPoint); + } + static around() returns void: allReceptions() { + System.out.println("around before receptions: " + thisJoinPoint); + proceed(); + System.out.println("around after receptions: " + thisJoinPoint); + } + + static before(): allExecutions() { + System.out.println("before executions: " + thisJoinPoint); + } + static after(): allExecutions() { + System.out.println("after executions: " + thisJoinPoint); + } + static around() returns void: allExecutions() { + System.out.println("around before executions: " + thisJoinPoint); + proceed(); + System.out.println("around after executions: " + thisJoinPoint); + } + + static before(): allCalls() { + System.out.println("before calls: " + thisJoinPoint); + } + static after(): allCalls() { + System.out.println("after calls: " + thisJoinPoint); + } + static around() returns void: allCalls() { + System.out.println("around before calls: " + thisJoinPoint); + proceed(); + System.out.println("around after calls: " + thisJoinPoint); + } + + static before(): allCallsTo() { + System.out.println("before callsTo: " + thisJoinPoint); + } + static after(): allCallsTo() { + System.out.println("after callsTo: " + thisJoinPoint); + } + static around() returns void: allCallsTo() { + System.out.println("around before callsTo: " + thisJoinPoint); + proceed(); + System.out.println("around after callsTo: " + thisJoinPoint); + } +} diff --git a/tests/new/AJDBTest.java b/tests/new/AJDBTest.java new file mode 100644 index 000000000..197539fe1 --- /dev/null +++ b/tests/new/AJDBTest.java @@ -0,0 +1,188 @@ +import org.aspectj.tools.ajdb.Main; +import org.aspectj.debugger.tty.CommandLineDebugger; +import org.aspectj.debugger.base.*; +import com.sun.jdi.*; +import com.sun.jdi.event.*; +import java.io.*; +import java.util.*; +import org.aspectj.testing.Tester; + +public class AJDBTest implements StopListener, VMListener { + + String classpath; + { + classpath = "\"" + Tester.outputDir(); + String javaClasspath = System.getProperty("java.class.path"); + if (javaClasspath != null) { + classpath += ";" + javaClasspath; + } + classpath += "\""; + } + + protected String[] stringCommands() { + return new String[] { + "workingdir " + Tester.workingDir(), + "use " + "./new", + "stop on AJDBClass.java:24", + "run -classpath " + classpath + " AJDBClass", + }; + } + protected String getSourceName() { + return "AJDBClass.java"; + } + + // Methods for VMListener + protected void death(VMDeathEvent e) { + System.out.println("*** Death: " + e); + } + protected void disconnect(VMDisconnectEvent e) { + System.out.println("*** Disconnect: " + e); + } + protected void start(VMStartEvent e) { + System.out.println("*** Start: " + e); + } + + // Methods for StopListener + protected void access(AccessWatchpointEvent e) { + } + protected void breakpoint(BreakpointEvent e) { + checkLines((List) ex("where"), "next"); + } + protected void exception(ExceptionEvent e) { + } + protected void modification(ModificationWatchpointEvent e) { + } + protected void step(StepEvent e) { + List lines = (List) ex("where"); + checkLines(lines); + try { + StackFrame frame = (StackFrame) lines.get(0); + Location loc = frame.location(); + if (loc.sourceName().equals("Thread.java") && + loc.method().name().equals("exit")) { + isRunning = false; + } + } catch (Throwable t) {} + ex("next"); + + } + + public void checkLines(Collection lines, Object then) { + checkLines(lines); + if (then != null) ex(then); + } + + public void checkLines(Collection lines) { + Iterator iter = lines.iterator(); + while (iter.hasNext()) { + StackFrame frame = (StackFrame) iter.next(); + String source = "no.source"; + try { + source = debugger.sourceName(frame.location()); + } catch (Throwable t) {} + int line = debugger.lineNumber(frame.location()); + if (source.equals(getSourceName())) { + Tester.check(line>0, "non-mapping line for " + frame); + } + } + } + + // VMListener + public void vmDeathEvent(VMDeathEvent e) { + death(e); + } + public void vmDisconnectEvent(VMDisconnectEvent e) { + disconnect(e); + } + public void vmStartEvent(VMStartEvent e) { + start(e); + } + + // StopListener + public final void accessWatchpointEvent(AccessWatchpointEvent e) { + access(e); + } + public final void breakpointEvent(BreakpointEvent e) { + breakpoint(e); + } + public final void exceptionEvent(ExceptionEvent e) { + exception(e); + } + public final void modificationWatchpointEvent(ModificationWatchpointEvent e) { + modification(e); + } + public final void stepEvent(StepEvent e) { + step(e); + } + + AJDebugger debugger; + CommandLineDebugger ajdb; + + public void realMain(String[] args) { + String fileName = null; + String[] newArgs = args; + if (args.length > 0) { + fileName = args[0]; + newArgs = new String[args.length-1]; + System.arraycopy(args, 1, newArgs, 0, newArgs.length); + } + realMain(fileName, newArgs); + } + + private void realMain(String fileName, String[] args) { + debugger = (ajdb = new Main().debug(args)).getDebugger(); + debugger.addStopListener(this); + debugger.addVMListener(this); + ex(fileName == null ? commands() : commands(fileName)); + while (isRunning) { + //System.out.println(">>>>>>>> " + debugger.isRunning()); + } + } + private boolean isRunning = true; + + public final Collection commands() { + Collection list = new Vector(); + String[] commands = stringCommands(); + for (int i = 0; i < commands.length; i++) { + list.add(commands[i]); + } + return list; + } + + Object ex(Object command) { + return ajdb.executeCommand(command+""); + } + + void ex(Collection list) { + Iterator iter = list.iterator(); + while (iter.hasNext()) { + ex(iter.next()); + } + } + + final static String COMMENT = "#"; + final static String FILENAME = "script.txt"; + Collection commands(String fileName) { + Collection list = new Vector(); + try { + BufferedReader in = new BufferedReader(new FileReader(fileName)); + String line; + while ((line = in.readLine()) != null) { + line = line.trim(); + if (line.startsWith(COMMENT)) { + continue; + } + list.add(line); + } + in.close(); + } catch (IOException ioe) { + ioe.printStackTrace(); + System.exit(-1); + } + return list; + } + + public static void main(String[] args) { + new AJDBTest().realMain(args); + } +} diff --git a/tests/new/AbstractAspectsExtendingAbstractAspectsGeneratesMethodsWithTheSameName_PR464.java b/tests/new/AbstractAspectsExtendingAbstractAspectsGeneratesMethodsWithTheSameName_PR464.java new file mode 100644 index 000000000..a16c1e86b --- /dev/null +++ b/tests/new/AbstractAspectsExtendingAbstractAspectsGeneratesMethodsWithTheSameName_PR464.java @@ -0,0 +1,52 @@ +import org.aspectj.testing.Tester; +public class AbstractAspectsExtendingAbstractAspectsGeneratesMethodsWithTheSameName_PR464 { + public static void main(String[] args) { + new AbstractAspectsExtendingAbstractAspectsGeneratesMethodsWithTheSameName_PR464().realMain(args); + } + public void realMain(String[] args) { + new C().c(); + // No tests to actually run. The point is that all advice is abstract! + //Tester.checkAllEvents(); + } + static { + //Tester.expectEventsInString("AspectA.star,AspectA.c"); + //Tester.expectEventsInString("AspectB.star,AspectB.c"); + //Tester.expectEventsInString("AspectC.star,AspectC.c"); + } +} + +class C { + public void c() {} +} + +abstract aspect AspectA { + before() : execution(* *(..)) { + Tester.event("AspectA.star"); + } + + before() : execution(* c(..)) { + Tester.event("AspectA.c"); + } +} + +abstract aspect AspectB extends AspectA { + + before() : execution(* *(..)) { + Tester.event("AspectB.star"); + } + + before() : execution(* c(..)) { + Tester.event("AspectB.c"); + } +} + +abstract aspect AspectC extends AspectB { + before() : execution(* *(..)) { + Tester.event("AspectC.star"); + } + + before() : execution(* c(..)) { + Tester.event("AspectC.c"); + } +} + diff --git a/tests/new/AbstractCflows.java b/tests/new/AbstractCflows.java new file mode 100644 index 000000000..25d21a9be --- /dev/null +++ b/tests/new/AbstractCflows.java @@ -0,0 +1,90 @@ +import org.aspectj.testing.Tester; + +public class AbstractCflows { + public static void main(String[] args) { + C c = new C(); + c.enter(1, 2); + c.enter1(3); + Tester.checkEvents(expected); + } + private static final String[] expected = { + "enter(1, 2)", + "CflowX: call(void C.body()); i = 1", + "CflowY: call(void C.body()); i = 2", + "PerCflowX: call(void C.body())", + "PerCflowY: call(void C.body())", + "BODY", + "CflowX: call(void C.body()); i = 1", + "CflowY: call(void C.body()); i = 2", + "PerCflowX: call(void C.body())", + "PerCflowY: call(void C.body())", + "BODY", + "enter1(3)", + "Cflow3: call(void C.body()); i = 3", + "PerCflow3: call(void C.body())", + "BODY", + }; +} + +class C { + public void enter(int x, int y) { + Tester.event("enter(" + x + ", " + y + ")"); + body(); + body(); + } + + public void enter1(int i) { + Tester.event("enter1(" + i + ")"); + body(); + } + + public void body() { + Tester.event("BODY"); + } +} + +abstract aspect CflowBase { + abstract pointcut entry(int i); + pointcut flow(int x): cflow(entry(x)); + + pointcut body(): call(* body()); + + before(int i): body() && flow(i) { + Tester.event(this.getClass().getName() + ": " + thisJoinPoint + "; i = " + i); + } +} + +aspect CflowY extends CflowBase { + pointcut entry(int y): args(*, y) && call(void enter(int, int)); +} + +aspect CflowX extends CflowBase { + pointcut entry(int x): args(x, *) && call(void enter(int, int)); +} + +aspect Cflow3 extends CflowBase { + pointcut entry(int i): args(i) && call(void enter1(int)); +} + +abstract aspect PerCflowBase percflow(entry(int)) { + abstract pointcut entry(int i); + + pointcut body(): call(* body()); + + before(): body() { + Tester.event(this.getClass().getName() + ": " + thisJoinPoint); + } +} + +aspect PerCflowY extends PerCflowBase { + pointcut entry(int y): args(*, y) && call(void enter(int, int)); +} + +aspect PerCflowX extends PerCflowBase { + pointcut entry(int x): args(x, *) && call(void enter(int, int)); +} + +aspect PerCflow3 extends PerCflowBase { + pointcut entry(int i): args(i) && call(void enter1(int)); +} + diff --git a/tests/new/AbstractDeclare.java b/tests/new/AbstractDeclare.java new file mode 100644 index 000000000..6f3859913 --- /dev/null +++ b/tests/new/AbstractDeclare.java @@ -0,0 +1,31 @@ +public class AbstractDeclare { + public static void main(String[] args) { + new C().m(); + int y = new C().x; + } +} + +class C { + int x; + + void m() {} +} + + +abstract aspect BaseErr { + abstract pointcut acid(); + abstract pointcut base(); + + declare error: acid() && base(): + "acid's and base's don't mix"; +} + +aspect CallErr extends BaseErr { + pointcut acid(): within(AbstractDeclare); + pointcut base(): call(* C.*()); +} + +aspect GetErr extends BaseErr { + pointcut acid(): within(AbstractDeclare); + pointcut base(): get(* C.*); +} diff --git a/tests/new/AbstractMethodCall.java b/tests/new/AbstractMethodCall.java new file mode 100644 index 000000000..8803faba0 --- /dev/null +++ b/tests/new/AbstractMethodCall.java @@ -0,0 +1,18 @@ + + +abstract class AbstractClass { + public abstract void abstractMethod (); +} + +public class AbstractMethodCall extends AbstractClass { + /** @testcase PR591 PUREJAVA compiler error expected when directly calling unimplemented abstract method using super */ + public void abstractMethodCall () { + super.abstractMethod (); // expecting compiler error: cannot access directly + } + public void abstractMethod() {} + public static void main(String[] args) { + new AbstractMethodCall().abstractMethodCall(); + } +} + + diff --git a/tests/new/AbstractPointcutAccess.java b/tests/new/AbstractPointcutAccess.java new file mode 100644 index 000000000..83846dfea --- /dev/null +++ b/tests/new/AbstractPointcutAccess.java @@ -0,0 +1,25 @@ +import org.aspectj.testing.Tester; + +/** @testcase PR#619 direct use outside aspect of defined abstract pointcut */ +public abstract aspect AbstractPointcutAccess { + public static void main (String[] args) { + Tester.event("main"); + Tester.checkAllEvents(); + } + static { + Tester.expectEvent("main"); + Tester.expectEvent("used"); + } + + abstract pointcut abstractPointcut(); +} +aspect ConcretePointcutAccess extends AbstractPointcutAccess { + pointcut abstractPointcut() : execution(void main(..)); +} + +aspect AbstractPointcutUser { + before () : ConcretePointcutAccess.abstractPointcut() { + Tester.event("used"); + } +} + diff --git a/tests/new/AbstractPointcutAccessCE.java b/tests/new/AbstractPointcutAccessCE.java new file mode 100644 index 000000000..fe032a9d0 --- /dev/null +++ b/tests/new/AbstractPointcutAccessCE.java @@ -0,0 +1,11 @@ + +/** @testcase PR#619 direct use outside aspect of undefined abstract pointcut */ +abstract aspect AbstractPointcutAccessCE { + abstract pointcut abstractPointcut(); +} + +aspect AbstractPointcutUser { + before () + : AbstractPointcutAccessCE.abstractPointcut() { } // CE +} + diff --git a/tests/new/AbstractPointcutIndirectCE.java b/tests/new/AbstractPointcutIndirectCE.java new file mode 100644 index 000000000..3f3b5df76 --- /dev/null +++ b/tests/new/AbstractPointcutIndirectCE.java @@ -0,0 +1,12 @@ + +/** @testcase PR#619 indirect use outside aspect of undefined abstract pointcut */ +abstract aspect AbstractPointcutIndirectCE { + abstract pointcut abstractPointcut(); + pointcut pc() : abstractPointcut(); +} + +aspect AbstractPointcutUser { + before () + : AbstractPointcutIndirectCE.pc() { } // CE +} + diff --git a/tests/new/AddObjectMethodProblem.java b/tests/new/AddObjectMethodProblem.java new file mode 100644 index 000000000..d218f77af --- /dev/null +++ b/tests/new/AddObjectMethodProblem.java @@ -0,0 +1,48 @@ +import org.aspectj.testing.Tester; + +public class AddObjectMethodProblem { + + // Uncommenting this and changing addObject -> doAddObject in the advice + // works around the bug 0.5beta1 + //public void doAddObject(Class1 o) { + // addObject(o); + //} + + public static void main(String[] args) { test(); } + + crosscut ccut(Class1 c1): c1 && void process(); + + advice(Class1 c1): ccut(c1) { + before { + if (c1.getElement() != null) addObject(c1.getElement()); + c1.setProcessedAndAdvised(true); + } + } + + public static void test() { + AddObjectMethodProblem a = new AddObjectMethodProblem(); + Class1 c1 = new Class1(); + Class1 c2 = new Class1(); + c1.element = c2; + a.addObject(c1); + c1.process(); + Tester.check(c1.processedAndAdvised, "advice on top"); + Tester.check(c2.processedAndAdvised, "advice on element"); + } +} + +class Class1 { + public Class1 element; + public boolean processedAndAdvised = false; + + public Class1 getElement() { return element; } + + public void setProcessedAndAdvised( boolean val ) { + processedAndAdvised = val; + } + + public void process() { + if (element != null) element.process(); + } +} + diff --git a/tests/new/AddObjectOnAbstract.java b/tests/new/AddObjectOnAbstract.java new file mode 100644 index 000000000..1aff55215 --- /dev/null +++ b/tests/new/AddObjectOnAbstract.java @@ -0,0 +1,36 @@ + +import org.aspectj.testing.Tester; + +public class AddObjectOnAbstract { + + advice (I1 i1): i1 && String process() { + before { + i1.addA(); + } + } + + public static void main(String[] args) { test(); } + + public static void test() { + AddObjectOnAbstract a = new AddObjectOnAbstract(); + ConcreteC1 c1 = new ConcreteC1(); + a.addObject(c1); + Tester.checkEqual(c1.process(), "ab", ""); + } +} + +abstract class I1 { + public String s = ""; + public abstract void addA(); + public abstract String process(); +} + +class ConcreteC1 extends I1 { + public void addA() { + s += "a"; + } + public String process() { + s += "b"; + return s; + } +}
\ No newline at end of file diff --git a/tests/new/AdviceFormalsCf.java b/tests/new/AdviceFormalsCf.java new file mode 100644 index 000000000..f68540582 --- /dev/null +++ b/tests/new/AdviceFormalsCf.java @@ -0,0 +1,44 @@ +import org.aspectj.testing.Tester; + +/** + * PR#544 the formals passed to advice should behave just like + * any other method formal + */ + +public class AdviceFormalsCf { + public static void main(String[] args) { + Tester.checkEqual(new C().m("bye"), "foo"); + Tester.checkEqual(new C().mi(2.), 1); + } +} + +class C { + public String m(Object p) { + return "foo"; + } + + public int mi(double p) { + return 1; + } +} + + +aspect A { + after(final Object p) returning(final Object o): call(* C.m*(*)) && args(p) { + p = Boolean.TRUE; //ERR: p is final + o = Boolean.TRUE; //ERR: o is final + Tester.checkEqual(p, Boolean.TRUE); + Tester.checkEqual(o, Boolean.TRUE); + } + + Object around(final Object p, final Object o): call(* C.m*(*)) && args(p) && target(o) { + Object ret = proceed(p, o); + p = Boolean.TRUE; //ERR: p is final + o = Boolean.TRUE; //ERR: o is final + Tester.checkEqual(p, Boolean.TRUE); + Tester.checkEqual(o, Boolean.TRUE); + return ret; + } + + +} diff --git a/tests/new/AdviceFormalsCp.java b/tests/new/AdviceFormalsCp.java new file mode 100644 index 000000000..245d7d500 --- /dev/null +++ b/tests/new/AdviceFormalsCp.java @@ -0,0 +1,44 @@ +import org.aspectj.testing.Tester; + +/** + * PR#544 the formals passed to advice should behave just like + * any other method formal + */ + +public class AdviceFormalsCp { + public static void main(String[] args) { + Tester.checkEqual(new C().m("bye"), "foo"); + Tester.checkEqual(new C().mi(2.), 1); + } +} + +class C { + public String m(Object p) { + return "foo"; + } + + public int mi(double p) { + return 1; + } +} + + +aspect A { + after(Object p) returning(Object o): call(* C.m*(*)) && args(p) { + p = Boolean.TRUE; + o = Boolean.TRUE; + Tester.checkEqual(p, Boolean.TRUE); + Tester.checkEqual(o, Boolean.TRUE); + } + + Object around(Object p, Object o): call(* C.m*(*)) && args(p) && target(o) { + Object ret = proceed(p, o); + p = Boolean.TRUE; + o = Boolean.TRUE; + Tester.checkEqual(p, Boolean.TRUE); + Tester.checkEqual(o, Boolean.TRUE); + return ret; + } + + +} diff --git a/tests/new/AdviceOnAdvice.java b/tests/new/AdviceOnAdvice.java new file mode 100644 index 000000000..174e489e3 --- /dev/null +++ b/tests/new/AdviceOnAdvice.java @@ -0,0 +1,42 @@ + +/* + * To test some stuff + */ + +import org.aspectj.testing.*; + +public class AdviceOnAdvice { + public static void main(String[] args) { + new Class1().a(); + Tester.check(Class1.calledB, "Aspect2 did not get advice"); + } +} + +class Class1 { + public void a() { } + public void b() { } + public static boolean calledA = false; + public static boolean calledB = false; +} + + +aspect Aspect1 { + pointcut a(Class1 c1) : + target(c1) && call(public void a()); + + void around(Class1 c1) : a(c1) { + proceed(c1); + c1.b(); + } +} + + +aspect Aspect2b { + + pointcut b() : + call(public void Class1.b()) && within(Aspect1); + + after () : b() { + Class1.calledB = true; + } +} diff --git a/tests/new/AdviceOnAdviceRecursion.java b/tests/new/AdviceOnAdviceRecursion.java new file mode 100644 index 000000000..fe0752d20 --- /dev/null +++ b/tests/new/AdviceOnAdviceRecursion.java @@ -0,0 +1,32 @@ + +import org.aspectj.testing.*; + +/** PR#745 stack overflow expected when advice recurses into itself */ +public class AdviceOnAdviceRecursion { // XXX n-aspect variant? + public static void main (String[] args) { + boolean passed = false; + Throwable ex = null; + try { + C.m(); + } catch (StackOverflowError e) { + passed = true; + } catch (Throwable e) { + ex = e; + } + Tester.check(passed, "expected StackOverflowError, got " + ex); + } +} + +class C { + static void m() { ; } +} + +aspect A { + before() : within(C) || within(B) { + C.m(); + } +} + +aspect B { + before() : call(void m()) { } +} diff --git a/tests/new/AdviceOnEmptyConstructor.java b/tests/new/AdviceOnEmptyConstructor.java new file mode 100644 index 000000000..04b2ed99f --- /dev/null +++ b/tests/new/AdviceOnEmptyConstructor.java @@ -0,0 +1,33 @@ +import org.aspectj.testing.Tester; + +public aspect AdviceOnEmptyConstructor { + public static void main(String[] args) { test(); } + + public static void test() { + // C has an implied empty constructor so should be advised + Tester.checkEqual(new C().value, "afterInit:foo", "new C"); + + // C1 has no implied empty constructor (make sure we aren't cheating) + Tester.checkEqual(new C1(0).value, "foo", "new C1"); + } + + /*static*/ after() returning (C c): + //this(c) && + call(C.new()) { + c.value = "afterInit:" + c.value; + } + /*static*/ after() returning(C1 c1): + //this(c1) && + call(C1.new()) { + c1.value = "afterInit:" + c1.value; + } +} + +class C { + public String value = "foo"; +} + +class C1 { + public String value = "foo"; + public C1(int dummy) {} +} diff --git a/tests/new/AdviceOnInheritedMethod.java b/tests/new/AdviceOnInheritedMethod.java new file mode 100644 index 000000000..2733250a3 --- /dev/null +++ b/tests/new/AdviceOnInheritedMethod.java @@ -0,0 +1,64 @@ + +import org.aspectj.testing.Tester; + +import org.aspectj.lang.*; + +public aspect AdviceOnInheritedMethod { + public static void main(String[] args) { test(); } + + public static void test() { + SuperC sc = new SubC(); + Tester.checkEqual(sc.doIt(":foo"), + ":foo:beforeDoIt:inSubC:foo:beforeDoIt1:inSubC:doIt1", + "SubC.doIt"); + Tester.checkEqual(new SuperC().doIt(":foo"), + ":foo:beforeDoIt1:inSuperC:doIt1", + "SuperC.doIt"); + Tester.checkEqual(new SubC().packageDoIt(":foo"), + ":foo:beforePackageDoIt:inSubC:foo", + "SubC.packageDoIt"); + } + + String getTargetName(JoinPoint thisJoinPoint) { + return thisJoinPoint.getTarget().getClass().getName(); + } + + String around(String a): + target(*) && call(String packageDoIt(String)) && args(a) + { + return a+ + ":beforePackageDoIt:in"+getTargetName(thisJoinPoint) + + proceed(a); + } + String around(String a): + target(SubC) && call(String doIt(String)) && args(a) { + return a+ + ":beforeDoIt:in"+getTargetName(thisJoinPoint) + + proceed(a); + } + String around(String a): + target(SuperC) && call(String doIt1(String)) && args(a) { + return a+ + ":beforeDoIt1:in"+getTargetName(thisJoinPoint) + + proceed(a); + } +} + +class SuperC { + public String doIt(String arg) { + return doIt1(arg); + } + protected String doIt1(String arg) { + return ":doIt1"; + } + String packageDoIt(String arg) { + return arg; + } +} + +class SubC extends SuperC { + public String doIt(String arg) { + return super.doIt(arg); + } +} + diff --git a/tests/new/AdviceOnIntroduced.java b/tests/new/AdviceOnIntroduced.java new file mode 100644 index 000000000..4da93f0ca --- /dev/null +++ b/tests/new/AdviceOnIntroduced.java @@ -0,0 +1,26 @@ +import org.aspectj.testing.Tester; + +public aspect AdviceOnIntroduced { + public static void main(String[] args) { test(); } + + public static void test() { + Tester.checkEqual(new Foo(10).foo(5), 6, "foo"); + } + + int Foo.foo(int n) { return n; } + Foo.new(int w) {} + + int around(int n): + within(AdviceOnIntroduced) && + (args(n) && execution(int foo(int))) { + int result = proceed(n); + return result+1; + } + + before(): within(Foo) && execution(new(..)) { + //System.out.println("before new"); + } +} + +class Foo { +} diff --git a/tests/new/AdviceOnPrivileged.java b/tests/new/AdviceOnPrivileged.java new file mode 100644 index 000000000..1aa66dc85 --- /dev/null +++ b/tests/new/AdviceOnPrivileged.java @@ -0,0 +1,33 @@ +import org.aspectj.testing.Tester; + +public class AdviceOnPrivileged { + public static void main(String[] args) { + C c1 = new C(); + c1.getX(); + + Tester.check(!c1.gotXOutsideC, "normal field access"); + + C c2 = new C(); + ExposeC.getX(c2); + + Tester.check(c2.gotXOutsideC, "privileged field access"); + } +} + +class C { + public boolean gotXOutsideC = false; + + private int x=1; + public int getX() { return x; } +} + +aspect WatchGets { + before(C c): get(int C.x) && target(c) && !within(C) { + System.out.println("got C.x"); + c.gotXOutsideC = true; + } +} + +privileged aspect ExposeC { + public static int getX(C c) { return c.x; } +} diff --git a/tests/new/AdviceOrdering.java b/tests/new/AdviceOrdering.java new file mode 100644 index 000000000..a67dc57c6 --- /dev/null +++ b/tests/new/AdviceOrdering.java @@ -0,0 +1,125 @@ +import org.aspectj.testing.*; + +public class AdviceOrdering { + public static void main(String[] args) { test(); } + + public static void test() { + new C().m(); + T.checkAndReset("before:aroundStart:m:aroundEnd:after:afterReturning"); + + new C().recur(2); + T.checkAndReset("P&&!cflowbelow(P):P:recur-2:P:recur-1:P:recur-0"); + + new C().a(); + T.checkAndReset("C1:C2:C3:C4:A3:A4:A1:A2:B1:a"); + } +} + + +class T { + private static StringBuffer order = new StringBuffer(); + public static void add(String s) { + if (order.length() > 0) { order.append(':'); } + order.append(s); + } + public static void reset() { order = new StringBuffer(); } + + public static void checkAndReset(String expectedValue) { + Tester.checkEqual(order.toString(), expectedValue); + order.setLength(0); + } +} + +class C { + public void m() { T.add("m"); } + public void a() { T.add("a"); } + public void b() { T.add("b"); } + public void c() { T.add("c"); } + + public void recur(int n) { + T.add("recur-"+n); + if (n > 0) recur(n-1); + } +} + +aspect A { + pointcut cut() : target(C) && call(void m()); + + before(): cut() { T.add("before"); } + void around(): cut() { + T.add("aroundStart"); + proceed(); + T.add("aroundEnd"); + } + + after(): cut() { T.add("after"); } + after() returning(): cut() { T.add("afterReturning"); } + +} + +//check that P && !cflow(P) never matches anything regardless of ordering issues +aspect FlowCheck { + pointcut cut() : target(C) && call(void recur(int)); + + before(): cut() && !cflow(cut()) { + // should never run + T.add("P&&!cflow(P)"); + } + before(): cut() && !cflowbelow(cut()) { + // should run once + T.add("P&&!cflowbelow(P)"); + } + + before(): cut() && cflow(cut() && !cflow(cut())) { + // should never run + T.add("cflow(P&&!cflow(P))"); + } + + before(): cut() { + T.add("P"); + } +} + + + +// This cluster of aspects checks that the partial order rules work +//aspect A1 dominates A2, B1 { +aspect A1 { declare dominates: A1, A2 || B1; + pointcut cut() : target(C) && call(void a()); + + before(): A1.cut() { T.add("A1"); } +} + +aspect A2 { declare dominates: A2, B1; + before(): A1.cut() { T.add("A2"); } +} + +aspect A3 { declare dominates: A3, A4, A1; + before(): A1.cut() { T.add("A3"); } +} + +aspect A4 { declare dominates: A4, A1; + before(): A1.cut() { T.add("A4"); } +} + +aspect B1 { + before(): A1.cut() { T.add("B1"); } +} + + + +//aspect C1 dominates C2, C3 { +aspect C1 { declare dominates: C1, C2 || C3; + before(): A1.cut() { T.add("C1"); } +} +aspect C2 { declare dominates: C2, C3; + before(): A1.cut() { T.add("C2"); } +} +aspect C3 { declare dominates: C3, C4; + before(): A1.cut() { T.add("C3"); } +} +//aspect C4 dominates A1, A2, A3, A4, B1 { +aspect C4 { declare dominates: C4, (A1 || A2 || A3 || A4 || B1); + before(): A1.cut() { T.add("C4"); } +} + diff --git a/tests/new/AdviceThrowsCf.java b/tests/new/AdviceThrowsCf.java new file mode 100644 index 000000000..f8564d979 --- /dev/null +++ b/tests/new/AdviceThrowsCf.java @@ -0,0 +1,80 @@ +import org.aspectj.testing.Tester; +import java.io.IOException; + +public class AdviceThrowsCf { + public static void main(String[] args) { + try { + new C().m1(); + Tester.checkFailed("m1"); + } catch (CheckedExc ce) { + Tester.checkEqual("b1", ce.getMessage(), "m1"); + } + try { + new C().m2(); + Tester.checkFailed("m2"); + } catch (UncheckedExc ce) { + Tester.checkEqual("b3", ce.getMessage(), "m2"); + } + try { + new C().m3(); + Tester.checkFailed("m3"); + } catch (CheckedExc ce) { + Tester.checkEqual("b1", ce.getMessage(), "m3"); + } catch (Exception e) { + Tester.checkFailed("IOException"); + System.out.println("m3: " + e); + } + try { + new C().m4(); + Tester.checkFailed("m4"); + } catch (UncheckedExc ce) { + Tester.checkEqual("b3", ce.getMessage(), "m4"); + } + } + + +} + +class CheckedExc extends Exception { + CheckedExc(String m) { super(m); } +} + +class UncheckedExc extends RuntimeException { + UncheckedExc(String m) { super(m); } +} + + +class C { + int x=0; + public void m1() throws CheckedExc { + x += 1; + } + + public void m2() throws UncheckedExc { + } + + public void m3() throws IOException, CheckedExc { + } + + public void m4() { + } +} + +aspect A { + pointcut canThrowChecked(): call(* C.m1()) || call(* C.m3()); + pointcut canThrowChecked1(): call(* C.m*() throws CheckedExc); + + pointcut canThrowUnchecked(): call(* C.m*()); + + + before() throws CheckedExc: canThrowUnchecked() { // ERR: m2 and m4 + throw new CheckedExc("b1"); + } + + before() throws CheckedExc: get(int C.x) { //ERR: all gets + } + before() throws CheckedExc: set(int C.x) { //ERR: all sets + } + before() throws CheckedExc: staticinitialization(C) { //ERR: can't throw + } +} diff --git a/tests/new/AdviceThrowsCp.java b/tests/new/AdviceThrowsCp.java new file mode 100644 index 000000000..40e33f046 --- /dev/null +++ b/tests/new/AdviceThrowsCp.java @@ -0,0 +1,97 @@ +import org.aspectj.testing.Tester; +import java.io.IOException; + +public class AdviceThrowsCp { + public static void main(String[] args) { + try { + new C().m1(); + Tester.checkFailed("m1"); + } catch (CheckedExc ce) { + Tester.checkEqual("b1", ce.getMessage(), "m1"); + } + try { + new C().m2(); + Tester.checkFailed("m2"); + } catch (UncheckedExc ce) { + Tester.checkEqual("b3", ce.getMessage(), "m2"); + } + try { + new C().m3(); + Tester.checkFailed("m3"); + } catch (CheckedExc ce) { + Tester.checkEqual("b1", ce.getMessage(), "m3"); + } catch (Exception e) { + Tester.checkFailed("IOException"); + System.out.println("m3: " + e); + } + try { + new C().m4(); + Tester.checkFailed("m4"); + } catch (UncheckedExc ce) { + Tester.checkEqual("b3", ce.getMessage(), "m4"); + } + } + + +} + +class CheckedExc extends Exception { + CheckedExc(String m) { super(m); } +} + +class UncheckedExc extends RuntimeException { + UncheckedExc(String m) { super(m); } +} + + +class C { + public void m1() throws CheckedExc { + } + + public void m2() throws UncheckedExc { + } + + public void m3() throws IOException, CheckedExc { + } + + public void m4() { + } +} + +aspect A { + pointcut canThrowChecked(): call(* C.m1()) || call(* C.m3()); + pointcut canThrowChecked1(): call(* C.m*() throws CheckedExc); + + pointcut canThrowUnchecked(): call(* C.m*()); + + + before() throws CheckedExc: canThrowChecked() { + throw new CheckedExc("b1"); + } + before() throws CheckedExc: canThrowChecked1() { + throw new CheckedExc("b2"); + } + + before() throws UncheckedExc: canThrowUnchecked() { + throw new UncheckedExc("b3"); + } + + before(): canThrowUnchecked() { + throw new UncheckedExc("b4"); + } + + void around() throws CheckedExc: canThrowChecked() { + throw new CheckedExc("a1"); + } + void around() throws CheckedExc: canThrowChecked1() { + throw new CheckedExc("a2"); + } + + void around() throws UncheckedExc: canThrowUnchecked() { + throw new UncheckedExc("a3"); + } + + void around(): canThrowUnchecked() { + throw new UncheckedExc("a4"); + } +} diff --git a/tests/new/AfterAdviceOnConstructorsOnTheWrongType.java b/tests/new/AfterAdviceOnConstructorsOnTheWrongType.java new file mode 100644 index 000000000..e29ee974a --- /dev/null +++ b/tests/new/AfterAdviceOnConstructorsOnTheWrongType.java @@ -0,0 +1,29 @@ +import org.aspectj.testing.Tester; +public class AfterAdviceOnConstructorsOnTheWrongType { + public static void main(String[] args) { + new AfterAdviceOnConstructorsOnTheWrongType().realMain(args); + } + public void realMain(String[] args) { + new C().c(); + new D().d(); + Tester.checkAllEvents(); + } + static { + Tester.clearEvents(); + // new(..) for both class and interface + Tester.expectEventsInString("after-c,after-c,c,after-d,after-d,d"); + } +} + +interface I {} +class C implements I { public void c() { Tester.event("c"); } } +class D implements I { public void d() { Tester.event("d"); } } + +aspect A { + after(C c): target(c) && execution(new(..)) { + Tester.event("after-c"); + } + after(D d): target(d) && execution(new(..)) { + Tester.event("after-d"); + } +} diff --git a/tests/new/AfterConstructorCalls.java b/tests/new/AfterConstructorCalls.java new file mode 100644 index 000000000..80f5dcb62 --- /dev/null +++ b/tests/new/AfterConstructorCalls.java @@ -0,0 +1,24 @@ +import org.aspectj.testing.Tester; + +public class AfterConstructorCalls { + public static void main(String[] args) { + new Foo().bar(); + } +} + +class Foo { + int bar() { return 0; } +} + +aspect A { + pointcut nimboCut() : + call(Foo.new(..)); + + /*static*/ after() returning (Object o): nimboCut() { + Tester.check(o != null && o instanceof Foo, o + " !instanceof Foo"); + } + + /*static*/ after() returning (int i): call(int Foo.*(..)) { + Tester.checkEqual(i, 0); + } +} diff --git a/tests/new/AfterFinally.java b/tests/new/AfterFinally.java new file mode 100644 index 000000000..aec60fbe8 --- /dev/null +++ b/tests/new/AfterFinally.java @@ -0,0 +1,46 @@ +import org.aspectj.testing.Tester; + +import java.util.*; + +public class AfterFinally { + public static void main(String[] args) { + new AfterFinally().m("hi"); + } + + private String getX() { return "X"; } + + public Collection m(String key) { + String x = null; + ArrayList y = new ArrayList(); + Iterator i = null; + try { + x = this.getX(); + Collection personList = new ArrayList(); + + y.add("foo"); + //prepStmt.setString(1, name); + i = y.iterator(); + + while (i.hasNext()) { + personList.add(new String(i.next() + " foo")); + } + return personList; + } catch (Exception e) { + throw new RuntimeException("bad:" + e); + } finally { + x.toString(); + y.toString(); + i.toString(); + } + } +} + + +aspect A { + before(): execution(* *(..)) && within(AfterFinally) { + System.out.println(thisJoinPoint); + } + after(): execution(* *(..)) && within(AfterFinally) { + System.out.println(thisJoinPoint); + } +} diff --git a/tests/new/AfterReturningConstructor.java b/tests/new/AfterReturningConstructor.java new file mode 100644 index 000000000..8e70b0eca --- /dev/null +++ b/tests/new/AfterReturningConstructor.java @@ -0,0 +1,60 @@ + +import org.aspectj.testing.Tester; + +/** @testcase PR#827 after returning advice on interface and implementation constructor */ +public class AfterReturningConstructor { + public static void main(String[] args) { + U.ee(U.before + U.ijp); + U.ee(U.afterReturning + U.ijp); + U.ee(U.before + U.cjp); + U.ee(U.c); + U.ee(U.afterReturning + U.cjp); + U.ee("done"); + new C(); + U.e("done"); + Tester.checkAllEvents(); + } +} + +class C implements I { + C() { U.e("C()"); } + public void run() { } +} + +interface I { + void run(); +} + +class U { + static final String before = "before(): "; + static final String after = "after(): "; + static final String afterReturning = "after() returning(): "; + static final String afterThrowing = "after() throwing(): "; + static final String c = "C()"; + static final String i = "I()"; + static final String cjp = "execution(" + c + ")"; + static final String ijp = "execution(" + i + ")"; + + static void e(String event) { + //System.err.println("act event: " + event); // XXX + Tester.event(event); + } + static void ee(String event) { + //System.err.println("exp event: " + event); // XXX + Tester.expectEvent(event); + } +} + +aspect A { + /** must pick out both interface and implementor constructor execution */ + pointcut pc(): execution(new(..)); + + before(): pc() { + U.e(U.before + thisJoinPoint); + } + + after() returning(): pc() { + U.e(U.afterReturning + thisJoinPoint); + } +} + diff --git a/tests/new/AfterReturningHandler.java b/tests/new/AfterReturningHandler.java new file mode 100644 index 000000000..d6ba60bdc --- /dev/null +++ b/tests/new/AfterReturningHandler.java @@ -0,0 +1,60 @@ +import org.aspectj.testing.Tester; + +public class AfterReturningHandler { + public static void main(String[] args) { + + AfterReturningHandler p = new AfterReturningHandler(); + p.mIntThrowing(); + Tester.checkAndClearEvents(new String[] {"returned null" }); // will probably say "returned null" for all below + p.mVoidThrowing(); + Tester.checkAndClearEvents(new String[] { }); + p.mIntThrowingReturning(); + Tester.checkAndClearEvents(new String[] { }); + p.mVoidThrowingReturning(); + Tester.checkAndClearEvents(new String[] { }); + + + + } + + public void mVoidThrowing() { + try { throw new RuntimeException(); } + catch (RuntimeException e) { + } + } + + public int mIntThrowing() { + try { throw new RuntimeException(); } + catch (RuntimeException e) { + } + return 3; + } + public void mVoidThrowingReturning() { + try { throw new RuntimeException(); } + catch (RuntimeException e) { + return; + } + } + + public int mIntThrowingReturning() { + try { if (true) throw new RuntimeException(); } + catch (RuntimeException e) { + return 3; + } + return 999999; + } + + AfterReturningHandler() { + } +} + + +aspect A { + private void callEvent(String s, Object o) { + Tester.event(s + " " + o); + } + + after() returning (Object o) : handler(RuntimeException) { + callEvent("returned ", o); + } +} diff --git a/tests/new/AfterReturningInterfaceConstructor.java b/tests/new/AfterReturningInterfaceConstructor.java new file mode 100644 index 000000000..71e851867 --- /dev/null +++ b/tests/new/AfterReturningInterfaceConstructor.java @@ -0,0 +1,30 @@ + +import org.aspectj.testing.Tester; + +/** @testcase PR#889 after returning advice on interface constructor */ +public class AfterReturningInterfaceConstructor { + public static void main (String[] args) { + Tester.expectEvent("constructor"); + Tester.expectEvent("advice"); + new C(); + Tester.checkAllEvents(); + } +} + +interface I {} + +class C implements I { + C() { + Tester.event("constructor"); + } +} + +aspect A { + int I.i; + I.new() { + i = 2; + } + after() returning: execution(I.new()) { + Tester.event("advice"); + } +} diff --git a/tests/new/AfterReturningParam.java b/tests/new/AfterReturningParam.java new file mode 100644 index 000000000..4010bf058 --- /dev/null +++ b/tests/new/AfterReturningParam.java @@ -0,0 +1,68 @@ +import org.aspectj.testing.Tester; + +public class AfterReturningParam { + public static void main(String[] args) { + + AfterReturningParam p = new AfterReturningParam(); + Tester.checkAndClearEvents(new String[] { "constr exec as Object null" }); + + p.mInt(); + Tester.checkAndClearEvents(new String[] { "int as Object 2" }); + + p.mObject(); + Tester.checkAndClearEvents(new String[] { "Object as Object ning", + "Object (that is String) as String ning" }); + + p.mVoid(); + Tester.checkAndClearEvents(new String[] { "void as Object null" }); + + } + + public int mInt() { return 2; } + public Object mObject() { return "ning"; } + public void mVoid() { return; } + + AfterReturningParam() { + } +} + + +aspect A { + private void callEvent(String s, Object o) { + Tester.event(s + " " + o); + } + + after() returning (AfterReturningParam o) : execution(AfterReturningParam.new()) { // CW 35 in 1.0.4, no match + callEvent("constr exec as constd object", o); + } + after() returning (Object o) : execution(AfterReturningParam.new()) { // CW 38 in 1.0.4, does match + callEvent("constr exec as Object", o); + } + after() returning (String o) : execution(AfterReturningParam.new()) { // CW 41 in 1.0.4, no match + callEvent("constr exec as String", o); + } + + after() returning (Object o) : execution(int AfterReturningParam.mInt()) { // match + callEvent("int as Object", o); + } + after() returning (String o) : execution(int AfterReturningParam.mInt()) { // no match + callEvent("int as String", o); + } + after() returning (Integer o) : execution(int AfterReturningParam.mInt()) { // no match + callEvent("int as Integer", o); + } + + after() returning (Object o) : execution(Object AfterReturningParam.mObject()) { // match + callEvent("Object as Object", o); + } + after() returning (String o) : execution(Object AfterReturningParam.mObject()) { // match (interesting, matching by instanceof) + callEvent("Object (that is String) as String", o); + } + + after() returning (Object o) : execution(void AfterReturningParam.mVoid()) { // match + callEvent("void as Object", o); + } + after() returning (String o) : execution(void AfterReturningParam.mVoid()) { // CW 65 warning in 1.0.4 no match + callEvent("void as String", o); + } +} diff --git a/tests/new/AfterReturningResult.java b/tests/new/AfterReturningResult.java new file mode 100644 index 000000000..6d963cd64 --- /dev/null +++ b/tests/new/AfterReturningResult.java @@ -0,0 +1,32 @@ +public class AfterReturningResult { + public static void main (String[] args) { + new CFCommandProcessor().run(); + } +} + +class CFCommand { + void handleResponse() {} + void updateCache() { System.err.println("updating cache");} } + +class CFCommandProcessor { + public void run() { + new CFCommand().handleResponse(); + } +} + +aspect A { + pointcut response(CFCommand cmd) : within(CFCommandProcessor) && + target(cmd) && + call(void CFCommand.handleResponse (..)); + + after(CFCommand cmd) returning: response(cmd) { + cmd.updateCache(); + } +} + + +aspect B { + Object around(): execution(void run()) { + return proceed(); + } +} diff --git a/tests/new/AfterThrowing.java b/tests/new/AfterThrowing.java new file mode 100644 index 000000000..69e5306a7 --- /dev/null +++ b/tests/new/AfterThrowing.java @@ -0,0 +1,92 @@ +import org.aspectj.testing.Tester; + +import java.util.*; + +public class AfterThrowing { + public static void main(String[] args) { test(); } + + public static void test() { + throwException(true); + Tester.check("Throwable:throwException"); + Tester.check("Exception:throwException"); + + throwRuntimeException(true); + Tester.check("Throwable:throwRuntimeException"); + Tester.check("RuntimeException:throwRuntimeException"); + + throwError(true); + Tester.check("Throwable:throwError"); + + throwMyException(true); + Tester.check("Throwable:throwMyException"); + Tester.check("Exception:throwMyException"); + Tester.check("MyException:throwMyException"); + } + + static void throwNothing(boolean b) { } + + static void throwException(boolean b) throws Exception { + if (b) throw new Exception(); + throwError(false); + } + + static void throwRuntimeException(boolean b) { + if (b) throw new RuntimeException(); + } + + static String throwError(boolean b) { + int[] i = new int[10]; + // this line is to make sure ajc doesn't think it needs to worry about a + // CloneNotSupportedException when arrays are cloned + i = (int[])i.clone(); + + if (b) throw new Error(); + return "foo"; + } + + static Object throwMyException(boolean b) throws MyException { + if (b) throw new MyException(); + return new Integer(10); + } + + public static class MyException extends Exception { } +} + + +aspect A { + pointcut throwerCut(): within(AfterThrowing) && execution(* *(boolean)); + + + after () throwing (Throwable t): throwerCut() { + Tester.note("Throwable:" + thisJoinPointStaticPart.getSignature().getName()); + } + + after () throwing (Exception t): throwerCut() { + Tester.note("Exception:" + thisJoinPoint.getSignature().getName()); + } + + after () throwing (RuntimeException t): throwerCut() { + Tester.note("RuntimeException:" + thisJoinPointStaticPart.getSignature().getName()); + } + + after () throwing (AfterThrowing.MyException t): throwerCut() { + Tester.note("MyException:" + thisJoinPoint.getSignature().getName()); + } + + pointcut catchThrowsFrom(): + within(AfterThrowing) && call(* AfterThrowing.*(boolean)); + + + declare soft: Throwable: catchThrowsFrom(); + + Object around(): catchThrowsFrom() { + try { + return proceed(); + } catch (Throwable t) { + //System.out.println("caught " + t); + return null; + } + } +} + + diff --git a/tests/new/AfterThrowingNonThrowable.java b/tests/new/AfterThrowingNonThrowable.java new file mode 100644 index 000000000..108d2cd7a --- /dev/null +++ b/tests/new/AfterThrowingNonThrowable.java @@ -0,0 +1,44 @@ + +import org.aspectj.testing.Tester; +import java.util.*; + +/** @testcase PR#832 after throwing advice with non-throwable formal */ +public class AfterThrowingNonThrowable { + + public static void main(String[] args) { + U.ee("after() throwing (Object o) : call(void C.run())"); + U.ee("run()"); + C c = new C(); + boolean gotError = false; + try { + c.run(); + } catch (Error e) { + gotError = true; + } + Tester.check(gotError, "failed to get error"); + Tester.checkAllEvents(); + } +} + +class C { + public void run() { + U.e("run()"); + throw new Error(""); + } +} + +class U { + static void e(String event) { + //System.err.println(event); + Tester.event(event); + } + static void ee(String event) { + Tester.expectEvent(event); + } +} + +aspect A { + after() throwing (Object o) : call(void C.run()) { + U.e("after() throwing (Object o) : call(void C.run())"); + } +} diff --git a/tests/new/AfterThrowingNotWoven.java b/tests/new/AfterThrowingNotWoven.java new file mode 100644 index 000000000..4b583e890 --- /dev/null +++ b/tests/new/AfterThrowingNotWoven.java @@ -0,0 +1,50 @@ +import org.aspectj.testing.*; + +public class AfterThrowingNotWoven { + public static void main(String[] args) { + try { + new Server().doSomething(); + } catch (FaultException fe) { + Tester.event("caught-in-main"); + } + Tester.checkAllEvents(); + } + static { + Tester.expectEvent("caught"); + Tester.expectEvent("caught-in-main"); + } +} + +class Server { + public void doSomething() { + System.out.println("Doing something."); + throw new FaultException(); + } +} + +class DisabledException extends RuntimeException {} +class FaultException extends RuntimeException {} + +aspect FaultHandler { + + private boolean Server.disabled = false; + + private void reportFault() { + System.out.println("Failure! Please fix it."); + } + + public static void fixServer(Server s) { + s.disabled = false; + } + + pointcut service(Server s): target(s) && call(public * *(..)); + + before(Server s): service(s) { + if (s.disabled) throw new DisabledException(); + } + + after(Server s) throwing (FaultException e): service(s) { + s.disabled = true; + Tester.event("caught"); + } +} diff --git a/tests/new/AmbiguousClassReference.java b/tests/new/AmbiguousClassReference.java new file mode 100644 index 000000000..5b34f57fe --- /dev/null +++ b/tests/new/AmbiguousClassReference.java @@ -0,0 +1,15 @@ +import java.sql.*; +import java.lang.reflect.*; + +/** support mail from Dave Trombley */ +public class AmbiguousClassReference { + + /** @testcase PR#631 PUREJAVA expecting CE for ambiguous reference */ + public static void main(String[] args) { + int[] gh; + gh = new int[5]; + Array.getLength(gh); + throw new Error("Expecting compiler error, not compile/run"); + } +} + diff --git a/tests/new/AmbiguousClassReference2CE.java b/tests/new/AmbiguousClassReference2CE.java new file mode 100644 index 000000000..5c1884226 --- /dev/null +++ b/tests/new/AmbiguousClassReference2CE.java @@ -0,0 +1,14 @@ +import java.sql.Array; +import java.lang.reflect.Array; // ERR: importing same name different types + +public class AmbiguousClassReference2CE { + + /** @testcase PR#701 PUREJAVA CE for ambiguous type reference (imports) + * see also testcase PR#631 */ + public static void main(String[] args) { + int[] gh = new int[5]; + Array.getLength(gh); // bug: expect ~ambiguous~ not "no method getLength..." + throw new Error("Expecting compiler error, not compile/run"); + } +} + diff --git a/tests/new/AmbiguousClassReference3CE.java b/tests/new/AmbiguousClassReference3CE.java new file mode 100644 index 000000000..35c5f95ff --- /dev/null +++ b/tests/new/AmbiguousClassReference3CE.java @@ -0,0 +1,14 @@ +public class AmbiguousClassReference3CE { + + /** @testcase PR#701 PUREJAVA CE for ambiguous type reference (two type declarations) + * see also testcase PR#631 */ + public static void main(String[] args) { + throw new Error("Expecting compiler error, not compile/run"); + } +} +class Foo {} // expect: "duplicate type name" +interface Foo {} // expect: "duplicate type name" +class Bar { + Foo f; +} + diff --git a/tests/new/AmbiguousClassReference4CE.java b/tests/new/AmbiguousClassReference4CE.java new file mode 100644 index 000000000..f37f5155d --- /dev/null +++ b/tests/new/AmbiguousClassReference4CE.java @@ -0,0 +1,12 @@ + +public class AmbiguousClassReference4CE { + + /** @testcase PR#701 PUREJAVA CE for ambiguous type reference (two inner types) + * see also testcase PR#631 */ + public static void main(String[] args) { + throw new Error("Expecting compiler error, not compile/run"); + } + static class Foo {} // CE: "duplicate type name" + static interface Foo {} // CE: "duplicate type name" +} + diff --git a/tests/new/AnonymousClassName.java b/tests/new/AnonymousClassName.java new file mode 100644 index 000000000..e3a894876 --- /dev/null +++ b/tests/new/AnonymousClassName.java @@ -0,0 +1,79 @@ + +import org.aspectj.testing.Tester; +import org.aspectj.lang.*; +import org.aspectj.lang.reflect.*; + +/** @testcase declaring type in signature of anonymous class */ +public class AnonymousClassName { + public static void main(String[] args) { + Tester.expectEvent("run()"); + new Runnable(){ + public void run() { + Tester.event("run()"); + } + }.run(); + Tester.checkAllEvents(); + } +} + +aspect A { + static { + Tester.expectEvent("before constructRunnable"); + Tester.expectEvent("before callRun"); + Tester.expectEvent("before executeRun"); + Tester.expectEvent("before initRunnable"); + Tester.expectEvent("around constructRunnable"); + Tester.expectEvent("around callRun"); + Tester.expectEvent("around executeRun"); + Tester.expectEvent("around initRunnable"); + Tester.expectEvent("after constructRunnable"); + Tester.expectEvent("after callRun"); + Tester.expectEvent("after executeRun"); + Tester.expectEvent("after initRunnable"); + } + static final int Runnable+.provokeStaticInit = 1; + + pointcut constructRunnable () : call(Runnable+.new()); + pointcut initRunnable () : staticinitialization(Runnable+); + pointcut callRun () : target(Runnable) && call(void run()); + pointcut executeRun () : target(Runnable) && execution(void run()); + before () : constructRunnable() { check("before constructRunnable", thisJoinPoint); } + before () : callRun() { check("before callRun", thisJoinPoint); } + before () : executeRun() { check("before executeRun", thisJoinPoint); } + before () : initRunnable() { check("before initRunnable", thisJoinPoint); } + Object around () : constructRunnable() { + check("around constructRunnable", thisJoinPoint); + return proceed(); + } + Object around () : callRun() { + check("around callRun", thisJoinPoint); + return proceed(); + } + Object around () : executeRun() { + check("around executeRun", thisJoinPoint); + return proceed(); + } + Object around () : initRunnable() { + check("around initRunnable", thisJoinPoint); + return proceed(); + } + + after () : constructRunnable() { check("after constructRunnable", thisJoinPoint); } + after () : callRun() { check("after callRun", thisJoinPoint); } + after () : executeRun() { check("after executeRun", thisJoinPoint); } + after () : initRunnable() { check("after initRunnable", thisJoinPoint); } + + void check(String event, JoinPoint jp) { + Tester.event(event); + //System.err.println(event + ": " + jp.toLongString()); + Signature sig = jp.getSignature(); + Class c = sig.getDeclaringType(); + Tester.check(null != c, event + " null class"); + Tester.check(ClassNotFoundException.class != c, + event + " got: " + c); + String name = "" + sig; + Tester.check(-1 != name.indexOf("AnonymousClassName"), + event + " expecting AnonymousClassName..: " + name); + } +} + diff --git a/tests/new/AnonymousSelfReference.java b/tests/new/AnonymousSelfReference.java new file mode 100644 index 000000000..5a910622f --- /dev/null +++ b/tests/new/AnonymousSelfReference.java @@ -0,0 +1,23 @@ +import org.aspectj.testing.Tester; + +/** @testcase PR#774 interface self-reference by anonymous instance */ +public class AnonymousSelfReference { + public static void main (String[] args) { + Tester.expectEvent("run"); + Tester.expectEvent("im"); + I it = new I() { public void im() { Tester.event("im");} }; + it.runnable.run(); + Tester.checkAllEvents(); + } +} + +interface I { public void im(); } + +aspect A { + Runnable I.runnable = new Runnable() { + public void run() { + im(); // comment out to avoid VerifyError + Tester.event("run"); + } + }; +} diff --git a/tests/new/ArgsAlone.java b/tests/new/ArgsAlone.java new file mode 100644 index 000000000..89b3736d6 --- /dev/null +++ b/tests/new/ArgsAlone.java @@ -0,0 +1,31 @@ +import org.aspectj.testing.Tester; + +public class ArgsAlone { + public static void main(String[] args) { + Tester.expectEvent("within 2 method-call"); + Tester.expectEvent("within 2 method-execution"); + new TargetClass().callInt(2); + Tester.checkAllEvents(); + } +} + +class TargetClass { + void callInt(int i) { + while (i > 0) { --i; } + } + +} + +aspect Aspect { + pointcut pc () + : (call(void TargetClass.callInt(int)) + || execution(void TargetClass.callInt(int))); + + before(int i) + : !target(Aspect) && args(i) + //&& pc() // uncomment to avoid InternalCompilerError + { + Tester.event("within " + i + + " " + thisJoinPointStaticPart.getKind()); + } +} diff --git a/tests/new/ArgsInCflow.java b/tests/new/ArgsInCflow.java new file mode 100644 index 000000000..2ee5c7e3a --- /dev/null +++ b/tests/new/ArgsInCflow.java @@ -0,0 +1,35 @@ + +import org.aspectj.testing.*; + +/** PR#659 name binding in around cflow containing cflowbelow */ +public class ArgsInCflow { + public static void main(String[] args) { + Tester.check(6==fact(3), "6==fact(3)"); + Tester.checkAllEvents(); + } + + static int fact(int x) { + if (x<0) x = -x; + if (x==0) return 1; + else return x*fact(x-1); + } + static { + Tester.expectEvent("3-2"); + Tester.expectEvent("3-1"); + Tester.expectEvent("3-0"); + } +} + +aspect Test { + + // picks any calls to fact. + pointcut factCall(int n) : call(int fact(int)) && args(n); + + // picks parameter to the first and current fact calls + before(int n, int firstN, int dummy) : + factCall(n) + && cflow(factCall(firstN) + && !cflowbelow(factCall(dummy))) { + Tester.event(firstN + "-" + n); + } +} diff --git a/tests/new/ArgsInCflow2.java b/tests/new/ArgsInCflow2.java new file mode 100644 index 000000000..a2ddf1eb8 --- /dev/null +++ b/tests/new/ArgsInCflow2.java @@ -0,0 +1,25 @@ + +import org.aspectj.testing.*; + +/** PR#660 name binding in around cflow */ +public class ArgsInCflow2 { + public static void main(String[] args) { + Tester.check(3==foo(1), "3==foo(1)"); + Tester.checkAllEvents(); + } + static int foo(int x) {return bar(x+1);} + static int bar(int x) {return x+1;} + + static { + Tester.expectEvent("1-2"); + } +} + +aspect Test { + int around(final int x, final int y) : + cflow(call(int foo(int)) && args(x)) + && call(int bar(int)) && args(y) { + Tester.event(x + "-" + y); + return proceed(x,y); + } +} diff --git a/tests/new/ArgsInCflowCf.java b/tests/new/ArgsInCflowCf.java new file mode 100644 index 000000000..21ec256b6 --- /dev/null +++ b/tests/new/ArgsInCflowCf.java @@ -0,0 +1,37 @@ + +import org.aspectj.testing.*; + +/** PR#660 name binding in around cflow */ +public class ArgsInCflowCf { + public static void main(String[] args) { + Tester.check(3==foo(1), "3==foo(1)"); + Tester.checkAllEvents(); + } + static int foo(int x) {return bar(x+1);} + static int bar(int x) {return x+1;} + + static { + Tester.expectEvent("1-2"); + } +} + +aspect Test { + int around(int x, int y) : // ERR not final + cflow(call(int foo(int)) && args(x)) + && call(int bar(int)) && args(y) { + Tester.event(x + "-" + y); + return proceed(x,y); + } + int around(final int x, int y) : + cflow(call(int foo(int)) && args(x)) + && call(int bar(int)) && args(y) { + Tester.event(x + "-" + y); + return proceed(y,y); // ERR simple refs + } + int around(final int x, int y) : + cflow(call(int foo(int)) && args(x)) + && call(int bar(int)) && args(y) { + Tester.event(x + "-" + y); + return proceed(x+1,y+1); // ERR simple refs + } +} diff --git a/tests/new/AroundAdvice.java b/tests/new/AroundAdvice.java new file mode 100644 index 000000000..bc6778326 --- /dev/null +++ b/tests/new/AroundAdvice.java @@ -0,0 +1,37 @@ +import org.aspectj.testing.Tester; + +public aspect AroundAdvice { + public static void main(String[] args) { test(); } + + public static void test() { + Tester.checkEqual(new Foo().foo(5), 1+2+3+4+5, "sum"); + Tester.checkEqual(new Foo().bar(), "overridden", "bar()"); + } + + pointcut fooCut(int n): target(Foo) && call(int foo(int)) && args(n); + + int around(int n): fooCut(n) { + int N = n; + int sum = 0; + for(int i=0; i<N; i++) { + n = i; + int ret = proceed(n); + sum += ret; + } + return sum; + } + + String around(): within(AroundAdvice) && call(String bar()) { + return "overridden"; + } +} + +class Foo { + public int foo(int x) { + //System.out.println("foo("+x+")"); + return x+1; + } + public String bar() { + return "bar()"; + } +} diff --git a/tests/new/AroundAdviceOnMethodsCalledInAroundAdvice.java b/tests/new/AroundAdviceOnMethodsCalledInAroundAdvice.java new file mode 100644 index 000000000..1068d9159 --- /dev/null +++ b/tests/new/AroundAdviceOnMethodsCalledInAroundAdvice.java @@ -0,0 +1,150 @@ +import org.aspectj.testing.Tester; + +public class AroundAdviceOnMethodsCalledInAroundAdvice { + public static void main(String[] args) { + new AroundAdviceOnMethodsCalledInAroundAdvice().realMain(args); + } + public void realMain(String[] args) { + Expect.expect(); + new C().g(); + new C().f("AroundMetaJoinpoints.realMain"); + new C("C.package.constructor"); + new C(123); + new D().g(); + new D("D.package.constructor"); + new D(123); + Tester.checkAllEvents(); + } +} + + + +aspect A { + + Object around(): call(public Object f(String)) { + jp(thisJoinPoint); + return proceed(); + } + + private void jp (Object join) {} + + void around(): call(* jp(..)) { + proceed(); + } + +} + +class D { + Object o = new C().f("D.o"); + public D() { new C().f("D.public.constructor"); } + D(String f) { new C().f(f); } + protected D(int i) { new C().f("D.protected.constructor"); } + private D(Integer i) { new C().f("D.private.constructor"); } + { new C().f("D.init"); } + static { + new D(new Integer(123)); + new C().f("D.static"); + } + public void g() { + Tester.event("D.g"); + new C().f("D.g"); + } +} + +class C { + public C() { f("C.public.constructor"); } + C(String f) { f(f); } + protected C(int i) { f("C.protected.constructor"); } + private C(Integer i) { f("C.private.constructor"); } + Object o = f("C.o"); + static { new C(new Integer(123)).f("C.static"); } + { f("C.init"); } + public void g() { + Tester.event("C.g"); + f("C.g"); + } + public Object f(String f) { + Tester.event("C.f-"+f); + return null; + } +} +class Expect { + static void expect() { + Tester.expectEvent("C.f-C.o"); + Tester.expectEvent("C.f-C.init"); + Tester.expectEvent("C.f-C.private.constructor"); + Tester.expectEvent("C.f-C.static"); + Tester.expectEvent("C.f-C.o"); + Tester.expectEvent("C.f-C.init"); + Tester.expectEvent("C.f-C.public.constructor"); + Tester.expectEvent("C.g"); + Tester.expectEvent("C.f-C.g"); + Tester.expectEvent("C.f-C.o"); + Tester.expectEvent("C.f-C.init"); + Tester.expectEvent("C.f-C.public.constructor"); + Tester.expectEvent("C.f-AroundMetaJoinpoints.realMain"); + Tester.expectEvent("C.f-C.o"); + Tester.expectEvent("C.f-C.init"); + Tester.expectEvent("C.f-C.package.constructor"); + Tester.expectEvent("C.f-C.o"); + Tester.expectEvent("C.f-C.init"); + Tester.expectEvent("C.f-C.protected.constructor"); + Tester.expectEvent("C.f-C.o"); + Tester.expectEvent("C.f-C.init"); + Tester.expectEvent("C.f-C.public.constructor"); + Tester.expectEvent("C.f-D.o"); + Tester.expectEvent("C.f-C.o"); + Tester.expectEvent("C.f-C.init"); + Tester.expectEvent("C.f-C.public.constructor"); + Tester.expectEvent("C.f-D.init"); + Tester.expectEvent("C.f-C.o"); + Tester.expectEvent("C.f-C.init"); + Tester.expectEvent("C.f-C.public.constructor"); + Tester.expectEvent("C.f-D.private.constructor"); + Tester.expectEvent("C.f-C.o"); + Tester.expectEvent("C.f-C.init"); + Tester.expectEvent("C.f-C.public.constructor"); + Tester.expectEvent("C.f-D.static"); + Tester.expectEvent("C.f-C.o"); + Tester.expectEvent("C.f-C.init"); + Tester.expectEvent("C.f-C.public.constructor"); + Tester.expectEvent("C.f-D.o"); + Tester.expectEvent("C.f-C.o"); + Tester.expectEvent("C.f-C.init"); + Tester.expectEvent("C.f-C.public.constructor"); + Tester.expectEvent("C.f-D.init"); + Tester.expectEvent("C.f-C.o"); + Tester.expectEvent("C.f-C.init"); + Tester.expectEvent("C.f-C.public.constructor"); + Tester.expectEvent("C.f-D.public.constructor"); + Tester.expectEvent("D.g"); + Tester.expectEvent("C.f-C.o"); + Tester.expectEvent("C.f-C.init"); + Tester.expectEvent("C.f-C.public.constructor"); + Tester.expectEvent("C.f-D.g"); + Tester.expectEvent("C.f-C.o"); + Tester.expectEvent("C.f-C.init"); + Tester.expectEvent("C.f-C.public.constructor"); + Tester.expectEvent("C.f-D.o"); + Tester.expectEvent("C.f-C.o"); + Tester.expectEvent("C.f-C.init"); + Tester.expectEvent("C.f-C.public.constructor"); + Tester.expectEvent("C.f-D.init"); + Tester.expectEvent("C.f-C.o"); + Tester.expectEvent("C.f-C.init"); + Tester.expectEvent("C.f-C.public.constructor"); + Tester.expectEvent("C.f-D.package.constructor"); + Tester.expectEvent("C.f-C.o"); + Tester.expectEvent("C.f-C.init"); + Tester.expectEvent("C.f-C.public.constructor"); + Tester.expectEvent("C.f-D.o"); + Tester.expectEvent("C.f-C.o"); + Tester.expectEvent("C.f-C.init"); + Tester.expectEvent("C.f-C.public.constructor"); + Tester.expectEvent("C.f-D.init"); + Tester.expectEvent("C.f-C.o"); + Tester.expectEvent("C.f-C.init"); + Tester.expectEvent("C.f-C.public.constructor"); + Tester.expectEvent("C.f-D.protected.constructor"); + } +} diff --git a/tests/new/AroundAll.java b/tests/new/AroundAll.java new file mode 100644 index 000000000..48d1263c8 --- /dev/null +++ b/tests/new/AroundAll.java @@ -0,0 +1,165 @@ +import java.util.*; +import org.aspectj.testing.Tester; + +public class AroundAll { + public static void main(String[] args) { + new C(); + new C("9"); + //A.printLog(); + A.checkLog(); + } +} + +class C extends SuperC { + static final int i; + final int x; + + int y = 42; + + static { + i = 23; + } + + C(String s) { + this(Integer.valueOf(s).intValue()); + A.log("C(" + s + ")"); + A.log("y = " + y); + } + + C(int i) { + super(i); + x = i; + i = i+1; + //System.out.println(i + 1); + A.log("x = " + x); + } + + C() { + this("2"); + A.log("C()"); + } +} + +class SuperC { + SuperC(int x) { + A.log("SuperC(" + x + ")"); + } +} + +aspect A { + static String[] expectedSteps = new String[] { + "enter staticinitialization(AroundAll.<clinit>)", + "exit staticinitialization(AroundAll.<clinit>)", + "enter execution(void AroundAll.main(String[]))", + "enter call(C())", + "enter staticinitialization(SuperC.<clinit>)", + "exit staticinitialization(SuperC.<clinit>)", + "enter staticinitialization(C.<clinit>)", + "enter set(int C.i)", + "exit set(int C.i)", + "exit staticinitialization(C.<clinit>)", + "enter call(Integer java.lang.Integer.valueOf(String))", + "exit call(Integer java.lang.Integer.valueOf(String))", + "enter call(int java.lang.Integer.intValue())", + "exit call(int java.lang.Integer.intValue())", + "enter initialization(SuperC(int))", + "enter execution(SuperC.<init>)", + "exit execution(SuperC.<init>)", + "enter execution(SuperC(int))", + "SuperC(2)", + "exit execution(SuperC(int))", + "exit initialization(SuperC(int))", + "enter initialization(C())", + "enter execution(C.<init>)", + "enter set(int C.y)", + "exit set(int C.y)", + "exit execution(C.<init>)", + "enter execution(C(int))", + "enter set(int C.x)", + "exit set(int C.x)", + "enter get(int C.x)", + "exit get(int C.x)", + "x = 2", + "exit execution(C(int))", + "enter execution(C(String))", + "C(2)", + "enter get(int C.y)", + "exit get(int C.y)", + "y = 42", + "exit execution(C(String))", + "exit initialization(C())", + "enter execution(C())", + "C()", + "exit execution(C())", + "exit call(C())", + "enter call(C(String))", + "enter call(Integer java.lang.Integer.valueOf(String))", + "exit call(Integer java.lang.Integer.valueOf(String))", + "enter call(int java.lang.Integer.intValue())", + "exit call(int java.lang.Integer.intValue())", + "enter initialization(SuperC(int))", + "enter execution(SuperC.<init>)", + "exit execution(SuperC.<init>)", + "enter execution(SuperC(int))", + "SuperC(9)", + "exit execution(SuperC(int))", + "exit initialization(SuperC(int))", + "C.new(9)", + "enter initialization(C(String))", + "enter execution(C.<init>)", + "enter set(int C.y)", + "exit set(int C.y)", + "exit execution(C.<init>)", + "enter execution(C(int))", + "enter set(int C.x)", + "exit set(int C.x)", + "enter get(int C.x)", + "exit get(int C.x)", + "x = 9", + "exit execution(C(int))", + "enter execution(C(String))", + "C(91)", + "enter get(int C.y)", + "exit get(int C.y)", + "y = 42", + "exit execution(C(String))", + "exit initialization(C(String))", + "exit call(C(String))", + }; + + static List logList = new ArrayList(); + + static void printLog() { + for (Iterator i = logList.iterator(); i.hasNext(); ) { + System.out.println(" \"" + i.next() + "\", "); + } + } + + static void checkLog() { + Tester.checkEqual(expectedSteps, A.logList.toArray(), "steps"); + Tester.checkEqual(A.logList, expectedSteps, "steps"); + } + + static void log(String s) { + logList.add(s); + } + + static boolean test() { return true; } + + //before(): initialization(C.new(String)) { } + + void around(String s): initialization(C.new(String)) && args(s) && if(s.equals("9")) { + log("C.new(9)"); + proceed(s+"1"); + } + + Object around(): //initialization(C.new(String)) { + if(test()) && !within(A) && !call(* A.*(..)) { + A.log("enter " + thisJoinPoint); + Object ret = proceed(); + A.log("exit " + thisJoinPoint); + //proceed(); + //System.err.println("run twice"); + return ret; + } +} diff --git a/tests/new/AroundAndCalls.java b/tests/new/AroundAndCalls.java new file mode 100644 index 000000000..2b77e8e4c --- /dev/null +++ b/tests/new/AroundAndCalls.java @@ -0,0 +1,30 @@ +import org.aspectj.testing.Tester; + +public class AroundAndCalls { + public static void main(String[] args) { + Tester.checkEqual(new CL().go(), "basic-advised"); + } +} + +aspect MustAspect /*of eachobject(instanceof(CL))*/ { + + pointcut parseCalls(CP cp, String cmd): + (args(cmd) && target(cp) && call(String CP.parse(String))) && + within(CL); + + String around(CP cp, String cmd): parseCalls(cp, cmd) { + return proceed(cp, cmd + "-advised"); + } +} + +class CL { + String go() { + return new CP().parse("basic"); + } +} + +class CP { + String parse(String cmd) { + return cmd; + } +} diff --git a/tests/new/AroundCall.java b/tests/new/AroundCall.java new file mode 100644 index 000000000..1a6905493 --- /dev/null +++ b/tests/new/AroundCall.java @@ -0,0 +1,28 @@ +import org.aspectj.testing.*; + +public class AroundCall { + void a(int nullm) { b(); } + void b() { + Tester.check(false, "around failed"); + } + + public static void main(String[] args) { + AroundCall t = new AroundCall(); + t.a(42); + Tester.checkAllEvents(); + } + static { + Tester.expectEvent("around"); + } +} + +aspect TestAspect { + /** @testcase PR#666 name binding in around cflow */ + void around(final int n) : // no bug if before advice + cflow(execution(void AroundCall.a(int)) && args(n)) // no bug if no args + && target(AroundCall) + { + Tester.event("around"); + if (n > 100) proceed(n); // some bugs hidden without call to proceed + } +} diff --git a/tests/new/AroundCalls.java b/tests/new/AroundCalls.java new file mode 100644 index 000000000..0dd2960e1 --- /dev/null +++ b/tests/new/AroundCalls.java @@ -0,0 +1,42 @@ +import org.aspectj.testing.Tester; + +public class AroundCalls { + public static void main(String[] args) { test(); } + + public static void test() { + //Tester.checkEqual(new C().m(), "abc:2", "many arounds"); + Tester.checkEqual(new C().m(), "acb:2", "many arounds"); + } +} + +class C { + public String m() { + return new D().m1("a", 0); + } +} + +class D { + public String m1(String s, int x) { return s + ":" + x; } +} + +aspect A { + String around(D d, String as, int ax): + call(String D.m1(String,int)) && + args(as,ax) && + target(d) + //receptions(String d.m1(as, ax)) + + { + //System.out.println(as + " : " + d + " : " + ax); + return proceed(d, as + "c", ax + 1); + } + + String around(String as/*, C c1*/, D d1, int ax): + within(C) && + target(d1) && call(String m1(String,int)) && args(as,ax) + //instanceof(c1) && callsto(instanceof(d1) && receptions(String m1(as, ax))) + { + //System.out.println(as + " : " + c1 + " : " + d1 + " : " + ax); + return proceed(as + "b", /*c1,*/ d1, ax + 1); + } +} diff --git a/tests/new/AroundCallsArgs.java b/tests/new/AroundCallsArgs.java new file mode 100644 index 000000000..6056a59ac --- /dev/null +++ b/tests/new/AroundCallsArgs.java @@ -0,0 +1,40 @@ +import org.aspectj.testing.Tester; + +public class AroundCallsArgs { + public static void main(String[] args) { + new CL().go(); + //Tester.checkEqual(A.data, "CL:CP(hello)"); + Tester.checkEqual(A.data, "CP(hello)"); + } +} + +aspect A /*of eachobject(instanceof(CL))*/ { + public static String data = ""; + + //pointcut parseCalls(CL cl, CP cp, String cmd): + pointcut parseCalls(CP cp, String cmd): + //calls(void cp1.parse(cmd1)) && within(cl1); + (target(cp) && args(cmd) && call(void CP.parse(String))) && + within(CL); + + //void around(CL cl, CP cp, String cmd): + void around(CP cp, String cmd): + //parseCalls(cl, cp, cmd) { + parseCalls(cp, cmd) { + //data = cl.getClass().getName()+":"+cp.getClass().getName()+"("+cmd+")"; + data = cp.getClass().getName()+"("+cmd+")"; + //proceed(cl, cp, cmd); + proceed(cp, cmd); + } +} + +class CL { + void go() { + new CP().parse("hello"); + } +} + +class CP { + void parse(String cmd) { + } +} diff --git a/tests/new/AroundCasting.java b/tests/new/AroundCasting.java new file mode 100644 index 000000000..8fbc98bf6 --- /dev/null +++ b/tests/new/AroundCasting.java @@ -0,0 +1,24 @@ +import org.aspectj.testing.Tester; + +public class AroundCasting { + public static void main(String[] args) { + Tester.checkEqual(x = 3, 1003); + Tester.checkEqual(x, 3); + Tester.checkEvents(new String[] { "enter main" }); + } + static int x; +} + + +aspect A { + static boolean test() { return true; } + + int around(): if (test()) && set(int AroundCasting.x) { + return proceed() + 1000; + } + + void around(): execution(void AroundCasting.main(String[])) { + Tester.event("enter main"); + proceed(); + } +} diff --git a/tests/new/AroundChangeThis.java b/tests/new/AroundChangeThis.java new file mode 100644 index 000000000..bf96cdd9b --- /dev/null +++ b/tests/new/AroundChangeThis.java @@ -0,0 +1,61 @@ +import org.aspectj.testing.Tester; + +public class AroundChangeThis { + public static void main(String[] args) { + C c1 = new C("c1"); + C c2 = new C("c2"); + SubC sc = new SubC("sc"); + + c1.m(c2); + Tester.checkAndClearEvents(new String[] { "c1.m(c2)", "c2.m(c1)" }); + + c1.m(sc); + Tester.checkAndClearEvents(new String[] { "c1.m(sc)", "sc.m(c1)" }); + + sc.m(c1); + Tester.checkAndClearEvents(new String[] { "sc.m(c1)", "c1.m(sc)" }); + + try { + sc.m1(c1); + } catch (ClassCastException e) { + Tester.event("ClassCastException"); + } + Tester.checkAndClearEvents(new String[] { "ClassCastException" }); + + Tester.printEvents(); + } +} + +class C { + private String name; + + public C(String name) { this.name = name; } + + public String toString() { return name; } + + public void m(Object other) { + Tester.event(this + ".m(" + other + ")"); + } +} + +class SubC extends C { + public SubC(String name) { super(name); } + + public void m1(Object other) { + Tester.event(this + ".m1(" + other + ")"); + } +} + + +aspect A { + /* Swaps this with arg for calls of C.m(C) */ + void around(C thisC, C argC): execution(void m*(*)) && this(thisC) && args(argC) { + proceed(argC, thisC); + proceed(thisC, argC); + } + + + void around(C thisC, C argC): call(void m*(*)) && target(thisC) && args(argC) { + proceed(argC, thisC); + } +} diff --git a/tests/new/AroundDoubleAssignment.java b/tests/new/AroundDoubleAssignment.java new file mode 100644 index 000000000..b8ef0d27c --- /dev/null +++ b/tests/new/AroundDoubleAssignment.java @@ -0,0 +1,26 @@ +import org.aspectj.testing.*; + +/** + * with -usejavac: cannot resolve symbol + * without -usejavac: VerifyError + */ +public aspect AroundDoubleAssignment { + public static void main( String[] args ){ + Tester.expectEvent("test"); + Tester.expectEvent("proceed"); + StaticSet.test(); + Tester.checkAllEvents(); + } + Object around() : execution( * StaticSet.*() ) { + Tester.event("proceed"); + return proceed(); + } +} + +class StaticSet { + /** @testcase PR#687 around all execution with double assignment in initializer (simple) */ + public static void test(){ + String s = s = "test"; + Tester.event("test"); + } +} diff --git a/tests/new/AroundDoubleAssignmentC.java b/tests/new/AroundDoubleAssignmentC.java new file mode 100644 index 000000000..f1b13d630 --- /dev/null +++ b/tests/new/AroundDoubleAssignmentC.java @@ -0,0 +1,117 @@ +import org.aspectj.testing.*; + +/** + * with -usejavac: cannot resolve symbol + * without -usejavac: VerifyError + */ +public aspect AroundDoubleAssignmentC { + public static void main( String[] args ){ + //---------- passing tests + // field init + Tester.expectEvent("proceed-fieldinit"); + new FieldInit(); + + // field set + Tester.expectEvent("fieldset"); + Tester.expectEvent("proceed-fieldset"); + new FieldSet().test(); + + + //---------- failing tests + // static method, field set + Tester.expectEvent("staticfieldset-test"); + Tester.expectEvent("proceed-staticset"); + StaticSet.staticTest(); + + // static initializer + Tester.expectEvent("staticinit"); + Tester.expectEvent("proceed-staticinit"); + Class c2 = StaticInit.class.getClass(); + Tester.check("test".equals(StaticInit.string), + "\"test\".equals(StaticInit.string)"); + + // instance initializer + Tester.expectEvent("init"); + Tester.expectEvent("proceed-init"); + String s = new Init().string; + Tester.check("test".equals(s), + "\"test\".equals(new Init().string)"); + Tester.checkAllEvents(); + } // main + + Object around() : within(FieldInit) && execution( * *() ) { + Tester.event("proceed-fieldinit"); + return proceed(); + } + + Object around() : execution( * FieldSet.*() ) { + Tester.event("proceed-fieldset"); + return proceed(); + } + + // static method + Object around() : execution( * StaticSet.*() ) { + Tester.event("proceed-staticset"); + return proceed(); + } + + // static initializer + Object around() : staticinitialization(StaticInit) { + Tester.event("proceed-staticinit"); + return proceed(); + } + + // instance initializer + Object around() : initialization(Init.new(..)) { + Tester.event("proceed-init"); + return proceed(); + } +} + +class FieldInit { + /** @testcase PR#687 around all execution with double assignment in initializer (fieldinit) */ + String s = s = getString(); + String getString() { return "test".toString(); } +} + +class FieldSet { + + /** @testcase PR#687 around all execution with double assignment in initializer (fieldset) */ + String s; + public void test(){ + s = s = "test"; // not initializer, so... + Tester.event("fieldset"); + } +} + +class StaticSet { + /** @testcase PR#687 around all execution with double assignment in initializer (staticfieldset) */ + static String string; + public static void staticTest(){ + String s = s = "test"; + string = s; + Tester.event("staticfieldset-" + string); + } +} + +/** @testcase PR#687 around all execution with double assignment in initializer (staticinitialization) */ +class StaticInit { + static String string; + static { + String s = s = getString(); + Tester.event("staticinit"); + string = s; + } + static String getString() { return "test"; } +} + +/** @testcase PR#687 around all execution with double assignment in initializer (instance initialization) */ +class Init { + String string; + Init() { + String s = s = "test"; + Tester.event("init"); + string = s; + } +} + diff --git a/tests/new/AroundExceptions.java b/tests/new/AroundExceptions.java new file mode 100644 index 000000000..81bb1e445 --- /dev/null +++ b/tests/new/AroundExceptions.java @@ -0,0 +1,40 @@ +import org.aspectj.testing.Tester; +import java.io.IOException; + +public class AroundExceptions { + public static void main(String[] args) { + new SubC().m(); + Tester.checkAndClear("around-reception caught-IOException", "subc.m"); + + new C().m(); + Tester.checkAndClear("around-reception", "c.m"); + } +} + +class C { + public void m() throws IOException { + } +} + +class SubC extends C { + public void m() throws IOException { + throw new IOException(); + } +} + + + +aspect A { + void around (): call(void C.m()) { + Tester.note("around-reception"); + proceed(); + } + + void around(): call(void C+.m()) { + try { + proceed(); + } catch (IOException ioe) { + Tester.note("caught-IOException"); + } + } +} diff --git a/tests/new/AroundHandler.java b/tests/new/AroundHandler.java new file mode 100644 index 000000000..ac9e9e2e1 --- /dev/null +++ b/tests/new/AroundHandler.java @@ -0,0 +1,192 @@ + +import org.aspectj.testing.Tester; +import org.aspectj.testing.Tester; + +/* + These test advice on handlers: + 1) can use before advice to skip handler by throwing Error + 2) can use after advice after running handler and throw Error + 3) can use around advice [skip | run] X [ throw Error or complete normally ] + a) skip without throwing error + b) skip with throwing error + c) run without throwing error + d) run with throwing error + + Rather than overload advice at join points, + there is one method and one advice for each of the 6 test cases. + */ +/** @testcase VerifyError after around advice falls off end of tryCatch */ +public class AroundHandler { + /** if true, then run the around test cases */ + public static final boolean TEST_AROUND = true ; + public static void main(String[] args) { + Target target = new Target(); + /** @testcase before advice skips handler by throwing Error */ + Tester.check(target.skipBeforeErrorHandler(), "target.skipBeforeErrorHandler()"); + /** @testcase after advice runs handler, throws Error */ + Tester.check(target.runAfterErrorHandler(), "target.runAfterErrorHandler()"); + if (TEST_AROUND) { + /** @testcase around advice skips handler, no Error thrown */ + Tester.check(target.skipErrorHandler(), "target.skipErrorHandler()"); + /** @testcase around advice runs handler, no Error thrown */ + Tester.check(target.runErrorHandler(), "target.runErrorHandler()"); + /** @testcase around advice skips handler, throws exception from around advice */ + Tester.expectEvent("skipErrorHandlerGotError"); + try { + target.skipErrorHandlerThrowError(); + Tester.check(false, "expecting Error thrown by around"); + } catch (Error e) { + Target.isERR(e); + Tester.event("skipErrorHandlerGotError"); + } + /** @testcase around advice runs handler, throws exception from around advice */ + Tester.expectEvent("runErrorHandlerThrowError"); + Tester.expectEvent("runErrorHandlerGotError"); + try { + target.runErrorHandlerThrowError(); + Tester.check(false, "expecting Error thrown by around"); + } catch (Error e) { + Target.isERR(e); + Tester.event("runErrorHandlerGotError"); + } + } // TEST_AROUND + } +} +class OuterError extends Error { + public OuterError(String s) { super(s); } +} +class Target { + public static String ERR = "goto Error"; + public static void isERR(Throwable throwable) { + String message = (null == throwable ? "" : throwable.getMessage()); + Tester.check(Target.ERR.equals(message), + "\"" + ERR + "\".equals(\"" + message + "\")"); + } + + /** advised by before */ + public boolean skipBeforeErrorHandler() { + boolean ranHandler = false; + boolean ranOuterHandler = false; + try { + try { throw new Error(ERR); } + catch (Error t) { ranHandler = true; } + } catch (OuterError t) { ranOuterHandler = true; } + Tester.check(!ranHandler, "!ranHandler"); + Tester.check(ranOuterHandler, "ranOuterHandler"); + return (!ranHandler && ranOuterHandler); + } + + /** advised by after */ + public boolean runAfterErrorHandler() { + boolean ranHandler = false; + boolean ranOuterHandler = false; + try { + try { throw new Error(ERR); } + catch (Error t) { ranHandler = true; } + } catch (OuterError t) { ranOuterHandler = true; } + Tester.check(ranHandler, "!ranHandler"); + Tester.check(ranOuterHandler, "ranOuterHandler"); + return (ranHandler && ranOuterHandler); + } + + //---------------- remainder all advised using around + public boolean skipErrorHandler() { + boolean ranHandler = false; + try { throw new Error(ERR); } + catch (Error t) { ranHandler = true; } + Tester.check(!ranHandler, "!ranHandler"); + return !ranHandler; + } + + public boolean runErrorHandler() { + boolean ranHandler = false; + try { throw new Error(ERR); } + catch (Error t) { ranHandler = true; } + Tester.check(ranHandler, "ranHandler"); + return ranHandler; + } + + public boolean skipErrorHandlerThrowError() { + try { throw new Error(ERR); } + catch (Error t) { + Tester.check(false, "skipErrorHandlerThrowError ran handler"); + } + return false; // should never get here - Error thrown + } + + public boolean runErrorHandlerThrowError() { + try { throw new Error(ERR); } + catch (Error t) { + Tester.event("runErrorHandlerThrowError"); + } + return false; // should never get here - Error thrown + } +} + +aspect A { + /** @testcase use before to skip handler by throwing Error from advice */ + before(Error error) + : withincode(boolean Target.skipBeforeErrorHandler()) + && handler(Error) && args(error) + { + Target.isERR(error); + throw new OuterError(Target.ERR); + } + + /** @testcase use after to run handler but throw Error from advice */ + after(Error error) + : withincode(boolean Target.runAfterErrorHandler()) + && handler(Error) && args(error) + { + Target.isERR(error); + throw new OuterError(Target.ERR); + } + + // -------------------- around advice + + /** @testcase use around, run handler */ + Object around(Error error) + : withincode(boolean Target.runErrorHandler()) + && handler(Error) && args(error) + && if(AroundHandler.TEST_AROUND) + { + Target.isERR(error); + return proceed(error); + } + + /** @testcase use around to skip handler, throw no Error from around */ + Object around(Error error) + : withincode(boolean Target.skipErrorHandler()) + && handler(Error) && args(error) + && if(AroundHandler.TEST_AROUND) + { + Target.isERR(error); + //Object ignore = proceed(error); + //throw new Error(Target.ERR); + return null; + } + + /** @testcase use around to skip handler, but throw Error from around */ + Object around(Error error) + : withincode(boolean Target.skipErrorHandlerThrowError()) + && handler(Error) && args(error) + && if(AroundHandler.TEST_AROUND) + { + Target.isERR(error); + //Object ignore = proceed(error); + throw new OuterError(Target.ERR); + //return null; + } + + /** @testcase use around, run handler, but throw Error from around */ + Object around(Error error) + : withincode(boolean Target.runErrorHandlerThrowError()) + && handler(Error) && args(error) + && if(AroundHandler.TEST_AROUND) + { + Target.isERR(error); + Object result = proceed(error); + throw new OuterError(Target.ERR); + // return result; + } +} diff --git a/tests/new/AroundInnerCalls.java b/tests/new/AroundInnerCalls.java new file mode 100644 index 000000000..6cdd966a1 --- /dev/null +++ b/tests/new/AroundInnerCalls.java @@ -0,0 +1,56 @@ +import org.aspectj.testing.Tester; + +public class AroundInnerCalls { + public static void main(String[] args) { + new Outer().foo(); + + Tester.check("Outer.foo() calls Outer.Inner.mi()"); + Tester.check("Outer.foo() calls Outer.InnerRandom.nextHook(..)"); + Tester.check("Outer.InnerRandom.nextHook(..) calls Random.next(..)"); + Tester.check("Outer.Inner.mi() calls PrintStream.println(..)"); + + Tester.check("X.toString()"); + Tester.check("Outer.foo() calls Random.nextInt(..)"); + } +} + +class Outer { + private class Inner extends Object { + public void mi() { + System.out.println("."); + } + } + + public void foo() { + new Inner().mi(); + new InnerRandom().nextHook(2); + + new java.util.Random() { public String toString() { Tester.note("X.toString()"); return "X"; } }.nextInt(2); + } + + private class InnerRandom extends java.util.Random { + public int nextHook(int bits) { + return next(bits); + } + } +} + +aspect A { + Object around(): call(* *(..)) && !within(A) { + //System.out.println + Tester.note + (thisEnclosingJoinPointStaticPart.getSignature().toShortString() + + " calls " + thisJoinPointStaticPart.getSignature().toShortString()); + return proceed(); + } + + before(Object caller, Object callee): + this(caller) && target(callee) && call(* *(..)) && !within(A) + { + System.out.println(thisEnclosingJoinPointStaticPart.getSignature().toShortString() + + " calls " + thisJoinPointStaticPart.getSignature().toShortString()); + System.out.println + (caller + "." + thisEnclosingJoinPointStaticPart.getSignature().getName() + + " calls " + callee + "." + thisJoinPoint.getSignature().getName()); + } +} diff --git a/tests/new/AroundNumericCastCE.java b/tests/new/AroundNumericCastCE.java new file mode 100644 index 000000000..4e357ebd3 --- /dev/null +++ b/tests/new/AroundNumericCastCE.java @@ -0,0 +1,26 @@ + +import org.aspectj.testing.Tester; + +/** @testcase PR#838 checking around join point for advice return type - numeric */ +public class AroundNumericCastCE { + + public static double doubleMethod(int total){ + return (double) total; + } + + public static int intMethod(int total){ + return total; + } + + public static aspect Selector{ + // expect CE "illegal return value" from execution(int intMethod(int)) + double around(int i) : execution(* *Method(int)) && args(i) { // CE 17 + return proceed(i); + } + } + public static void main(String[] args){ + double result = doubleMethod(1000); + Tester.check(result != 0, "calculatePayment(1000)"); + } +} + diff --git a/tests/new/AroundVoid.java b/tests/new/AroundVoid.java new file mode 100644 index 000000000..8d4393c9d --- /dev/null +++ b/tests/new/AroundVoid.java @@ -0,0 +1,66 @@ +import org.aspectj.testing.Tester; + +public class AroundVoid { + public static void main(String[] args) { + C c = new C(); + try { + c.m1(); + } catch (RuntimeException exc) { + Tester.event("caught RuntimeException"); + } + c.m2(); + c.m3(true); + c.m4(true); + try { + c.m5(); + } catch (ArithmeticException exc) { + Tester.event("caught ArithmeticException"); + } + c.m6(); + + //Tester.printEvents(); + Tester.checkEventsFromFile("AroundVoid.out"); + } +} + +class C { + void m1() { + throw new RuntimeException("m1"); + } + + void m2() { + Tester.event("m2"); + } + + void m3(boolean test) { + if (test) { + return; + } else { + return; + } + } + + void m4(boolean test) { + if (test) { + return; + } else { + Tester.event("false"); + } + } + + void m5() { + while (true) { + int x = 0; + int y = 2/x; + } + } + + void m6() {} +} + +aspect A { + Object around(): execution(void C.m*(..)) { + Tester.event(thisJoinPoint.toShortString()); + return proceed(); + } +} diff --git a/tests/new/AroundVoid.out b/tests/new/AroundVoid.out new file mode 100644 index 000000000..729a36cc3 --- /dev/null +++ b/tests/new/AroundVoid.out @@ -0,0 +1,9 @@ +execution(C.m1())
+caught RuntimeException
+execution(C.m2())
+m2
+execution(C.m3(..))
+execution(C.m4(..))
+execution(C.m5())
+caught ArithmeticException
+execution(C.m6())
diff --git a/tests/new/ArrayCasts.java b/tests/new/ArrayCasts.java new file mode 100644 index 000000000..b92dd5dbf --- /dev/null +++ b/tests/new/ArrayCasts.java @@ -0,0 +1,40 @@ +import org.aspectj.testing.Tester; + +public class ArrayCasts { + public static void main(String[] args) { + new ArrayCasts().realMain(args); + } + + int[] ints = new int[1]; + int[][] intss = new int[2][]; + int[][][] intsss = new int[3][][]; + + Integer[] integers = new Integer[4]; + Integer[][] integerss = new Integer[5][]; + Integer[][][] integersss = new Integer[6][][]; + + public void realMain(String[] args) { + + ints = (int[]) new ArrayCasts().ints.clone(); + intss = (int[][]) new ArrayCasts().intss.clone(); + intsss = (int[][][])new ArrayCasts().intsss.clone(); + + integers = (Integer[]) new ArrayCasts().integers.clone(); + integerss = (Integer[][]) new ArrayCasts().integerss.clone(); + integersss = (Integer[][][])new ArrayCasts().integersss.clone(); + + Tester.checkEqual(ints.length, 1); + Tester.checkEqual(intss.length, 2); + Tester.checkEqual(intsss.length, 3); + + Tester.checkEqual(integers.length, 4); + Tester.checkEqual(integerss.length, 5); + Tester.checkEqual(integersss.length, 6); + } +} + +aspect A { + //pointcut callstoSets(): callsto(receptions(void set*(..)) && instanceof(ArrayCasts)); + pointcut callstoSets(): call(void set*(..)) && target(ArrayCasts); + before() : callstoSets() {} +} diff --git a/tests/new/ArrayFieldDeclaration.java b/tests/new/ArrayFieldDeclaration.java new file mode 100644 index 000000000..fec447fb1 --- /dev/null +++ b/tests/new/ArrayFieldDeclaration.java @@ -0,0 +1,18 @@ + +import org.aspectj.testing.Tester; +import java.util.*; + +/** @testcase PR#829 declare array field using postfix */ +public class ArrayFieldDeclaration { + + public static void main(String[] args) { + Tester.check(null != new C().f[0], "null != new C().f[0]"); + } +} + +class C { +} + +aspect A { + Object C.f[] = new Object[] { "hello" }; +} diff --git a/tests/new/ArrayFieldDeclarationCE.java b/tests/new/ArrayFieldDeclarationCE.java new file mode 100644 index 000000000..e49ba740f --- /dev/null +++ b/tests/new/ArrayFieldDeclarationCE.java @@ -0,0 +1,15 @@ + + +/** @testcase PR#829 CE expected when declaring fields on arrays */ +public class ArrayFieldDeclarationCE { + + public static void main(String[] args) { + throw new Error("should not run"); + } +} + +class C { } + +aspect A { + public int C[].foo; // CE 14 cannot declare fields on arrays +} diff --git a/tests/new/ArrayInc.java b/tests/new/ArrayInc.java new file mode 100644 index 000000000..b54de4e84 --- /dev/null +++ b/tests/new/ArrayInc.java @@ -0,0 +1,53 @@ + + +import org.aspectj.testing.Tester; +/** + * @testcase PR#715 PUREJAVA incrementing array + */ +public class ArrayInc { + private static void testCheck(boolean b, String s) { + Tester.check(b,s); + //if (!b) System.err.println("error: " + s); + } + + private static int[] IRA=new int[]{0,1,2}; + static int[] getIRA() { return IRA; } + static int[] throwError() { throw new Error(""); } + + public static void main(String[] args) { + ArrayInc me = new ArrayInc(); + me.testArrayExpressionOrdering(); + me.testArrayExpression(); + } + + public void testArrayExpression() { + IRA = new int[]{0}; + String[] sra = new String[] {""}; + sra[0] += "1"; + sra[0] += "string concat"; + testCheck(0==getIRA()[0], + "0==getIRA()[0]: " + IRA[0]); + testCheck(0==IRA[0]++, "0==IRA[0]++: " + IRA[0]); + testCheck(1==IRA[0], "1==IRA[0]: " + IRA[0]); + testCheck(2==++getIRA()[0], + "2==++getIRA()[0]: " + IRA[0]);; + testCheck(2==IRA[0], "2==IRA[0]: " + IRA[0]); + } + + public void testArrayExpressionOrdering() { + boolean gotError = false; + int i = 0; + try { int k = throwError()[++i]; } + catch (Error e) { gotError = true; } + testCheck(i==0, "i=" + i); + testCheck(gotError, "no error"); + + i = 0; + gotError = false; + try { int k = throwError()[i++]; } + catch (Error e) { gotError = true; } + testCheck(i==0, "i++ !=0: " + i); + testCheck(gotError, "no error"); + } +} + diff --git a/tests/new/ArrayInc1CE.java b/tests/new/ArrayInc1CE.java new file mode 100644 index 000000000..5ebd86112 --- /dev/null +++ b/tests/new/ArrayInc1CE.java @@ -0,0 +1,29 @@ + +/** + * @testcase PR#715 PUREJAVA incrementing objects, arrays + */ +public class ArrayIncCE { + private static int[] IRA = new int[]{0,1,2}; + private static Object OBJECT = new Object(); + static int[] getIRA() { return IRA; } + static Object getObject() { return null; } + + public void testObjectIncrementingCE() { + int i = 0; + Object object = new Object(); + String[] sra = new String[]{""}; + //++getIRA(); // CE prefix ++ not applied to int[] + //++getObject(); // CE prefix ++ not applied to Object + //getIRA()++; // CE postfix ++ not applied to int[] + //getObject()++; // CE postfix ++ not applied to Object + IRA += 1; // CE + not applied to int[], int + //getIRA() += 1; // CE + not applied to int[], int + object += 1; // CE + not applied to Object, int + //getObject() += 1; // CE + not applied to Object, int + i = +IRA; // CE unary + not applied to int[] + i = +getIRA(); // CE unary + not applied to int[] + sra += "bad concat"; // CE string + not applied to String[], String + //"1" += sra[0]; // CE no literal on lhs + } +} + diff --git a/tests/new/ArrayInc2CE.java b/tests/new/ArrayInc2CE.java new file mode 100644 index 000000000..ce31617e7 --- /dev/null +++ b/tests/new/ArrayInc2CE.java @@ -0,0 +1,18 @@ + +/** + * @testcase PR#715 PUREJAVA incrementing objects, arrays + */ +public class ArrayInc2CE { + + public void testObjectIncrementingCE() { + boolean b; + int i = 0; + Object object = new Object(); + int[] ra = new int[]{}; + ++ra; // CE prefix ++ cannot be applied to int[] + ++object; // CE prefix ++ cannot be applied to Object + ra++; // CE postfix ++ cannot be applied to int[] + object++; // CE postfix ++ cannot be applied to Object + } +} + diff --git a/tests/new/ArrayInc3CE.java b/tests/new/ArrayInc3CE.java new file mode 100644 index 000000000..17f7fa9e0 --- /dev/null +++ b/tests/new/ArrayInc3CE.java @@ -0,0 +1,22 @@ + +/** + * @testcase PR#715 PUREJAVA incrementing objects, arrays + */ +public class ArrayInc3CE { + private static int[] IRA = new int[]{0,1,2}; + private static Object OBJECT = new Object(); + static int[] getIRA() { return IRA; } + static Object getObject() { return null; } + + public void testObjectIncrementingCE() { + int i = 0; + Object object = new Object(); + String[] sra = new String[]{""}; + IRA += 1; // CE + not applied to int[], int + object += 1; // CE + not applied to Object, int + i = +IRA; // CE unary + not applied to int[] + i = +getIRA(); // CE unary + not applied to int[] + sra += "bad concat"; // CE string + not applied to String[], String + } +} + diff --git a/tests/new/ArrayIncCE.java b/tests/new/ArrayIncCE.java new file mode 100644 index 000000000..0f809a0dc --- /dev/null +++ b/tests/new/ArrayIncCE.java @@ -0,0 +1,24 @@ + +/** + * @testcase PR#715 PUREJAVA incrementing objects, arrays + */ +public class ArrayIncCE { + private static int[] IRA = new int[]{0,1,2}; + private static Object OBJECT = new Object(); + static int[] getIRA() { return IRA; } + static Object getObject() { return null; } + + public void testObjectIncrementingCE() { + int i = 0; + Object object = new Object(); + String[] sra = new String[]{""}; + ++getIRA(); // CE prefix ++ not applied to int[] + ++getObject(); // CE prefix ++ not applied to Object + getIRA()++; // CE postfix ++ not applied to int[] + getObject()++; // CE postfix ++ not applied to Object + getIRA() += 1; // CE + not applied to int[], int + getObject() += 1; // CE + not applied to Object, int + "1" += sra[0]; // CE no literal on lhs + } +} + diff --git a/tests/new/ArrayMethod.java b/tests/new/ArrayMethod.java new file mode 100644 index 000000000..5018e992d --- /dev/null +++ b/tests/new/ArrayMethod.java @@ -0,0 +1,27 @@ +import org.aspectj.testing.*; + +public class ArrayMethod { + public static void main(String[] args) { + new ArrayMethod().go(); + Tester.check(true, "compiled"); + } + + void go() { + try { + int[] array1 = array1(); + int[] array2 = array2(); + for (int i = 0; i < array1.length; i++) { + Tester.checkEqual(array1[i],i); + Tester.checkEqual(array2[i],i); + } + } catch (Exception e) { + } + } + + int array1()[] throws Exception { + return new int[] {0,1,2}; + } + int[] array2() throws Exception { + return new int[] {0,1,2}; + } +} diff --git a/tests/new/Aspect.java b/tests/new/Aspect.java new file mode 100644 index 000000000..16257d4fd --- /dev/null +++ b/tests/new/Aspect.java @@ -0,0 +1,3 @@ +aspect Aspect of eachobject(instanceof(Clazz)) { + +} diff --git a/tests/new/AspectInInterfaceCF.java b/tests/new/AspectInInterfaceCF.java new file mode 100644 index 000000000..dbba0473a --- /dev/null +++ b/tests/new/AspectInInterfaceCF.java @@ -0,0 +1,17 @@ + +import org.aspectj.testing.Tester; +public class AspectInInterfaceCF { + public static void main(String[] args) { + Tester.checkEvents("before"); + } +} + +interface HasPrivateAspect { + /** @testcase PR#534 static aspect in interface causes CE if - usejavac */ + private static aspect Inner { + before(): execution(* main(..)) { Tester.event("before"); } + } + protected static aspect Inner1 { + before(): execution(* main(..)) { Tester.event("before"); } + } +} diff --git a/tests/new/AspectInInterfaceCP.java b/tests/new/AspectInInterfaceCP.java new file mode 100644 index 000000000..520fc2381 --- /dev/null +++ b/tests/new/AspectInInterfaceCP.java @@ -0,0 +1,14 @@ + +import org.aspectj.testing.Tester; +public class AspectInInterfaceCP { + public static void main(String[] args) { + Tester.checkEvents("before"); + } +} + +interface HasPrivateAspect { + /** @testcase PR#534 static aspect in interface causes CE if - usejavac */ + static aspect Inner { + before(): execution(* main(..)) { Tester.event("before"); } + } +} diff --git a/tests/new/AspectInheritance.java b/tests/new/AspectInheritance.java new file mode 100644 index 000000000..92289a5e9 --- /dev/null +++ b/tests/new/AspectInheritance.java @@ -0,0 +1,57 @@ +import org.aspectj.testing.Tester; +import java.util.*; + +public class AspectInheritance { + public static void main(String[] args) { + new C().m(2); + + Tester.checkEqual(Base.aspectNames, "FullConcrete ConcreteFlow", "names"); + } +} + + +abstract aspect Base { + public static Set aspectNames = new HashSet(); + + abstract pointcut targets(int i, C c); + + after(int i, C c): targets(i, c) { + Base.aspectNames.add(this.getClass().getName()); + } +} + +aspect EmptyConcrete extends Base { + pointcut targets(int i, C c); +} + +aspect FullConcrete extends Base { + pointcut targets(int i, C c): target(c) && call(void C.m(int)) && args(i); +} + +abstract aspect Flow percflow(entries()) { + abstract pointcut entries(); + + { + Base.aspectNames.add(this.getClass().getName()); + } +} + +abstract aspect MainFlow extends Flow { + pointcut entries(): execution(void C.m(..)); +} + +aspect ConcreteFlow extends MainFlow { } + + + +abstract aspect AbstractWorld { + before(): execution(void C.m(..)) { + System.out.println("before C.m"); + } +} + + + +class C { + public void m(int i) { } +} diff --git a/tests/new/AspectOf.java b/tests/new/AspectOf.java new file mode 100644 index 000000000..fe0b1b798 --- /dev/null +++ b/tests/new/AspectOf.java @@ -0,0 +1,76 @@ + +import org.aspectj.testing.Tester; +import org.aspectj.testing.Tester; + +public class AspectOf { + public static void main(String[] args) { + Tester.expectEvent("IsSingleton before AspectOf.run()"); + Tester.expectEvent("PerCFlow before AspectOf.run()"); + Tester.expectEvent("PerTarget before AspectOf.run()"); + Tester.expectEvent("PerThis before AspectOf.run()"); + Tester.expectEvent("PerCFlowBelow before AspectOf.subrun()"); + Tester.expectEvent("run()"); + Tester.expectEvent("subrun()"); + new AspectOf().run(); + Tester.checkAllEvents(); + } + public void subrun() { + Object aspect = PerCFlowBelow.aspectOf(); + Tester.check(null != aspect, "PerCFlowBelow.aspectOf()"); + Tester.event("subrun()"); + } + public void run() { + Object aspect = null; + + aspect = IsSingleton.aspectOf(); + Tester.check(null != aspect, "IsSingleton.aspectOf()"); + aspect = PerThis.aspectOf(this); + Tester.check(null != aspect, "PerThis.aspectOf(this)"); + aspect = PerTarget.aspectOf(this); + Tester.check(null != aspect, "PerTarget.aspectOf(this)"); + aspect = PerCFlow.aspectOf(); + Tester.check(null != aspect, "PerCFlow.aspectOf()"); + Tester.event("run()"); + subrun(); + } + public static void log(String s) { + Tester.event(s); + //System.out.println(s); + } +} + +aspect IsSingleton { + before() : execution(void AspectOf.run()) { + AspectOf.log("IsSingleton before AspectOf.run()"); + } +} + +aspect PerThis perthis(pc()) { + pointcut pc() : execution(void AspectOf.run()) ; + before() : pc() { + AspectOf.log("PerThis before AspectOf.run()"); + } +} +aspect PerTarget pertarget(pc()) { + pointcut pc() : execution(void AspectOf.run()) ; + before() : pc() { + AspectOf.log("PerTarget before AspectOf.run()"); + } +} + +aspect PerCFlow percflow(pc()) { + pointcut pc() : execution(void AspectOf.run()); + before() : pc() { + AspectOf.log("PerCFlow before AspectOf.run()"); + } +} + +aspect PerCFlowBelow percflowbelow(pc()) { + pointcut pc() : execution(void AspectOf.run()); + before() : execution(void AspectOf.subrun()) { + AspectOf.log("PerCFlowBelow before AspectOf.subrun()"); + } +} + + + diff --git a/tests/new/AspectOfInterface.java b/tests/new/AspectOfInterface.java new file mode 100644 index 000000000..82c7ae38e --- /dev/null +++ b/tests/new/AspectOfInterface.java @@ -0,0 +1,25 @@ +import org.aspectj.testing.Tester; + +public class AspectOfInterface { + public static void main(String[] args) { test(); } + + public static boolean ranAdvice = false; + public static void test() { + new C().foo(); + Tester.check(ranAdvice, "advice on interface"); + } +} + +interface I { + public void foo(); +} + +class C implements I { + public void foo() { } //System.out.println("foo"); } +} + +aspect A /*of eachobject(instanceof(I))*/ { + before(): call(* *(..)) { + AspectOfInterface.ranAdvice = true; //System.out.println("before"); + } +} diff --git a/tests/new/AspectOnInterface.java b/tests/new/AspectOnInterface.java new file mode 100644 index 000000000..7e4bdf358 --- /dev/null +++ b/tests/new/AspectOnInterface.java @@ -0,0 +1,27 @@ +import org.aspectj.testing.Tester; + +public aspect AspectOnInterface /*of eachobject(instanceof(I1))*/ { + before (I1 i1): target(i1) && call(String process()) { + i1.addToS("-advised"); + } + + public static void main(String[] args) { test(); } + + public static void test() { + ConcreteC1 c1 = new ConcreteC1(); + Tester.checkEqual(c1.process(), "foo-advised-processed", ""); + } +} + +interface I1 { + public void addToS(String newS); + public String process(); +} + +class ConcreteC1 implements I1 { + String s = "foo"; + public void addToS(String newS) { s += newS; } + public String process() { + return s + "-processed"; + } +} diff --git a/tests/new/AspectRedefinesParam.java b/tests/new/AspectRedefinesParam.java new file mode 100644 index 000000000..11de62a0a --- /dev/null +++ b/tests/new/AspectRedefinesParam.java @@ -0,0 +1,28 @@ + +import org.aspectj.testing.Tester; + +/** + * Test for: PR #65 + */ + +public aspect AspectRedefinesParam { + public static void main(String[] args) { test(); } + + public static void test() { + Tester.checkEqual(new Foo().b("a"), "a", "b('a')"); + } + + pointcut ccut(String s): this(Foo) && call(String b(String)) && args(s); + + before(String methodString): ccut(methodString) { + String s; + s = "b"; + methodString += s; + } +} + +class Foo { + String b( String s ) { + return s; + } +} diff --git a/tests/new/AspectStaticInit.java b/tests/new/AspectStaticInit.java new file mode 100644 index 000000000..2a7e2a87b --- /dev/null +++ b/tests/new/AspectStaticInit.java @@ -0,0 +1,16 @@ + +import org.aspectj.testing.Tester; + +/** @testcase PR#804 aspect static initializers should run before instance constructed */ +public class AspectStaticInit { + public static void main(String[] args) { + Tester.check(A.i == 1, "1 != A.i=" + A.i); + } +} +// XXX need tests for other instantiations besides issingleton +aspect A { + static int i = 1; + A() { + Tester.check(i == 1, "1 != i=" + i); + } +} diff --git a/tests/new/AssertInAdvice.java b/tests/new/AssertInAdvice.java new file mode 100644 index 000000000..8dc6fcc55 --- /dev/null +++ b/tests/new/AssertInAdvice.java @@ -0,0 +1,90 @@ + +import org.aspectj.testing.Tester; + +/** @testcase PR#657 PUREJAVA assert statement in advice coverage [requires 1.4] */ +public class AssertInAdvice { + public static void main(String[] args) { + AssertInAdvice.class.getClassLoader().setClassAssertionStatus("Test", true); + AssertInAdvice.class.getClassLoader().setClassAssertionStatus("AssertInAdvice", false); + + boolean expectAssert = false; + boolean gotit = false; + do { + Test.throwAssert = expectAssert; + gotit = false; + // 6 cases - separate join point for advice below + // call + try { call1(); } catch (AssertionError e) { gotit = true; } + Tester.check(gotit == expectAssert, "call1"+expectAssert); gotit = false; + try { call2(); } catch (AssertionError e) { gotit = true; } + Tester.check(gotit == expectAssert, "call2"+expectAssert); gotit = false; + try { call3(); } catch (AssertionError e) { gotit = true; } + Tester.check(gotit == expectAssert, "call3"+expectAssert); gotit = false; + try { call4(); } catch (AssertionError e) { gotit = true; } + Tester.check(gotit == expectAssert, "call4"+expectAssert); gotit = false; + try { call5(); } catch (AssertionError e) { gotit = true; } + Tester.check(gotit == expectAssert, "call5"+expectAssert); gotit = false; + try { call6(); } catch (AssertionError e) { gotit = true; } + Tester.check(gotit == expectAssert, "call6"+expectAssert); gotit = false; + // execution + try { execution1(); } catch (AssertionError e) { gotit = true; } + Tester.check(gotit == expectAssert, "execution1"+expectAssert); gotit = false; + try { execution2(); } catch (AssertionError e) { gotit = true; } + Tester.check(gotit == expectAssert, "execution2"+expectAssert); gotit = false; + try { execution3(); } catch (AssertionError e) { gotit = true; } + Tester.check(gotit == expectAssert, "execution3"+expectAssert); gotit = false; + try { execution4(); } catch (AssertionError e) { gotit = true; } + Tester.check(gotit == expectAssert, "execution4"+expectAssert); gotit = false; + try { execution5(); } catch (AssertionError e) { gotit = true; } + Tester.check(gotit == expectAssert, "execution5"+expectAssert); gotit = false; + try { execution6(); } catch (AssertionError e) { gotit = true; } + Tester.check(gotit == expectAssert, "execution6"+expectAssert); + + // run for false, true + if (expectAssert) break; + expectAssert = true; + } while (true); + } + public static void call1() {} + public static void call2() {} + public static void call3() {} + public static void call4() {} + public static void call5() {} + public static void call6() {} + public static void execution1() {} + public static void execution2() {} + public static void execution3() {} + public static void execution4() {} + public static void execution5() {} + public static void execution6() {} +} + +aspect Test { + // todo: convert to 1.3 test? + public static boolean throwAssert; + public static boolean throwAssert() { return throwAssert; } + public static final AssertionError EXPECTED = new AssertionError("expected"); + public static void testAssert() { + //if (throwAssert) throw EXPECTED; + assert !throwAssert() ; + } + // call + after() returning : call(void AssertInAdvice.call1() ) { + assert !throwAssert(); + } + after() : call(void AssertInAdvice.call2() ) { + assert !throwAssert(); + } + before() : call(void AssertInAdvice.call3() ) { testAssert(); } + void around() : call(void AssertInAdvice.call4() ) { testAssert(); } + void around() : call(void AssertInAdvice.call5() ) { proceed(); testAssert(); } + void around() : call(void AssertInAdvice.call6() ) { testAssert(); proceed(); } + + // execution + after() returning : execution(void AssertInAdvice.execution1() ) { testAssert(); } + after() : execution(void AssertInAdvice.execution2() ) { testAssert(); } + before() : execution(void AssertInAdvice.execution3() ) { testAssert(); } + void around() : execution(void AssertInAdvice.execution4() ) { testAssert(); } + void around() : execution(void AssertInAdvice.execution5() ) { proceed(); testAssert(); } + void around() : execution(void AssertInAdvice.execution6() ) { testAssert(); proceed(); } +} diff --git a/tests/new/AssertInAdviceBug.java b/tests/new/AssertInAdviceBug.java new file mode 100644 index 000000000..e74ffe9e5 --- /dev/null +++ b/tests/new/AssertInAdviceBug.java @@ -0,0 +1,78 @@ +import org.aspectj.testing.Tester; + +aspect Test { + public static boolean invariant() { return true ; } + after() returning : call(static void AssertInAdviceBug.call() ) { + assert !invariant() ; + } + + void around(): call(static void call1()) { + assert !invariant(); + } + + static void AssertInAdviceBug.call2() { + assert !invariant(); + } +} + + +/** @testcase PR#657 PUREJAVA assert statement in advice [requires 1.4] */ +public class AssertInAdviceBug { + private static boolean useJavacMode = false; + + public static void main(String[] args) { + AssertInAdviceBug.class.getClassLoader().setClassAssertionStatus("Test", true); + AssertInAdviceBug.class.getClassLoader().setClassAssertionStatus("AssertInAdviceBug", false); + boolean gotAssert = false; + try { + call(); + } catch (AssertionError e) { + gotAssert = true; + StackTraceElement[] stack = e.getStackTrace(); + + // this test should only run when we're not in -usejavac mode + if (stack[0].getFileName().endsWith("AssertInAdviceBug.java")) { + Tester.checkEqual(stack[0].getLineNumber(), 6, "bad line for assert"); + } else { + useJavacMode = true; + System.err.println("!!!!!!!!!!!!!!!!!!!!!!!IN JAVAC MODE!!!!!!!!!!!!!!!!!!!!1"); + } + } + Tester.check(gotAssert, "no assert"); + + gotAssert = false; + try { + call1(); + } catch (AssertionError e) { + gotAssert = true; + StackTraceElement[] stack = e.getStackTrace(); + + // this test should only run when we're not in -usejavac mode + if (!useJavacMode) { + Tester.checkEqual(stack[0].getLineNumber(), 10, "bad line for assert"); + } + } + Tester.check(gotAssert, "no assert on call1"); + + gotAssert = false; + try { + call2(); + } catch (AssertionError e) { + gotAssert = true; + StackTraceElement[] stack = e.getStackTrace(); + //e.printStackTrace(); + + // this test should only run when we're not in -usejavac mode + if (!useJavacMode) { + Tester.checkEqual(stack[0].getLineNumber(), 14, "bad line for assert"); + } + } + Tester.check(gotAssert, "no assert on call1"); + } + + + public static void call() {} + + public static void call1() {} +} + diff --git a/tests/new/AssertInInnerIntro.java b/tests/new/AssertInInnerIntro.java new file mode 100644 index 000000000..aaf13ccf8 --- /dev/null +++ b/tests/new/AssertInInnerIntro.java @@ -0,0 +1,33 @@ +// compile this guy with -usejavac to show warning + +public class AssertInInnerIntro { + + public static void main(String[] args) { + turnOnAssertions(); + runTests(); + } + + static void turnOnAssertions() { + ClassLoader cl = AssertInInnerIntro.class.getClassLoader(); + cl.setClassAssertionStatus("C", false); + cl.setClassAssertionStatus("A", true); + } + + static void runTests() { + // should throw assertion error, will not + C.foo(); + } +} + +class C { +} + +aspect A { + static void C.foo() { + new Runnable() { + public void run() { + assert false; + } + }.run(); + } +} diff --git a/tests/new/AssertInIntro.java b/tests/new/AssertInIntro.java new file mode 100644 index 000000000..395eaa0d4 --- /dev/null +++ b/tests/new/AssertInIntro.java @@ -0,0 +1,45 @@ +import org.aspectj.testing.Tester; + +public class AssertInIntro { + + public static void main(String[] args) { + turnOnAssertions(); + runTests(); + } + + static void turnOnAssertions() { + ClassLoader cl = AssertInIntro.class.getClassLoader(); + cl.setClassAssertionStatus("C", false); + cl.setClassAssertionStatus("A", true); + } + + static void runTests() { + boolean failed = false; + try { + C.foo(); + } catch (AssertionError e) { + failed = true; + } + Tester.check(failed, "introduced assertions improperly off"); + + failed = false; + try { + C.goo(); + } catch (AssertionError e) { + failed = true; + } + Tester.check(!failed, "non-introduced assertions improperly on"); + } +} + +class C { + static void goo() { + assert false; + } +} + +aspect A { + static void C.foo() { + assert false; + } +} diff --git a/tests/new/AssignOps.java b/tests/new/AssignOps.java new file mode 100644 index 000000000..f33d1dd05 --- /dev/null +++ b/tests/new/AssignOps.java @@ -0,0 +1,152 @@ +import org.aspectj.testing.Tester; +import org.aspectj.testing.Tester; + +aspect A { + static boolean start = false; + static int bset; + static int bget; + static int siset; + static int siget; + static int iset; + static int iget; + static void start() { + siset = siget = iset = iget = 0; + start = true; + } + static String p() { + return + " siset=" + siset + + " siget=" + siget + + " iset=" + iset + + " iget=" + iget ; + } + before() : get(int AssignOps.staticInt) { + signal(AssignOps.sigetStr+ siget++); + check(siget == (1+siset), "siget == (1+siset)" + p()); + } + before() : set(int AssignOps.staticInt) { + signal(AssignOps.sisetStr + siset++); + check(siget == siset, "siget == siset" + p()); + } + before() : get(int AssignOps.instanceInt) { + signal(AssignOps.igetStr + iget++); + check(iget == (1+iset), "iget == (1+iset)" + p()); + } + before() : set(int AssignOps.instanceInt) { + signal(AssignOps.isetStr + iset++); + check(iget == iset, "iget == iset" + p()); + } + before() : get(boolean AssignOps.bool) { + signal(AssignOps.bgetStr + bget++); + check(bget == (1+bset), "bget == (1+bset)" + p()); + } + before() : set(boolean AssignOps.bool) { + signal(AssignOps.bsetStr + bset++); + check(bget == bset, "bget == bset" + p()); + } + static void check(boolean b, String s) { + if (start) Tester.check(b, s); + } + static void signal(String s) { + if (start) Tester.event(s); + } +} + +/** @testcase operators ++ += etc. result in a get and set join point */ +public class AssignOps { + static int staticInt; + int instanceInt; + boolean bool; + static final String sisetStr = "before() : set(int AssignOps.staticInt)"; + static final String sigetStr = "before() : get(int AssignOps.staticInt)"; + static final String isetStr = "before() : set(int AssignOps.instanceInt)"; + static final String igetStr = "before() : get(int AssignOps.instanceInt)"; + static final String bsetStr = "before() : set(boolean AssignOps.bool)"; + static final String bgetStr = "before() : get(boolean AssignOps.bool)"; + public static void main(String[] args) { + new AssignOps(3).run(); + Tester.checkAllEvents(); + } + static void t(String s) { Tester.expectEvent(s); } + AssignOps(int i) { instanceInt = i; } + void run() { + A.start(); + t(igetStr + "0"); + t(isetStr + "0"); + instanceInt++; + t(sigetStr + "0"); + t(sisetStr + "0"); + staticInt++; + t(igetStr + "1"); + t(isetStr + "1"); + instanceInt += 2; + t(sigetStr + "1"); + t(sisetStr + "1"); + staticInt += 2; + + t(igetStr + "2"); + t(isetStr + "2"); + instanceInt--; + t(sigetStr + "2"); + t(sisetStr + "2"); + staticInt--; + t(igetStr + "3"); + t(isetStr + "3"); + instanceInt -= 2; + t(sigetStr + "3"); + t(sisetStr + "3"); + staticInt -= 2; + + t(igetStr + "4"); + t(isetStr + "4"); + instanceInt *= 2; + t(sigetStr + "4"); + t(sisetStr + "4"); + staticInt *= 2; + + t(igetStr + "5"); + t(isetStr + "5"); + instanceInt /= 2; + t(sigetStr + "5"); + t(sisetStr + "5"); + staticInt /= 2; + + t(igetStr + "6"); + t(isetStr + "6"); + instanceInt %= 2; + t(sigetStr + "6"); + t(sisetStr + "6"); + staticInt %= 2; + + t(igetStr + "7"); + t(isetStr + "7"); + instanceInt >>= 2; + t(sigetStr + "7"); + t(sisetStr + "7"); + staticInt >>= 2; + + t(igetStr + "8"); + t(isetStr + "8"); + instanceInt <<= 2; + t(sigetStr + "8"); + t(sisetStr + "8"); + staticInt <<= 2; + + t(igetStr + "9"); + t(isetStr + "9"); + instanceInt >>>= 2; + t(sigetStr + "9"); + t(sisetStr + "9"); + staticInt >>>= 2; + + t(bgetStr + "0"); + t(bsetStr + "0"); + bool &= true; + t(bgetStr + "1"); + t(bsetStr + "1"); + bool |= false; + t(bgetStr + "2"); + t(bsetStr + "2"); + bool ^= false; + } +} diff --git a/tests/new/BackdoorMethods.java b/tests/new/BackdoorMethods.java new file mode 100644 index 000000000..64f5ec450 --- /dev/null +++ b/tests/new/BackdoorMethods.java @@ -0,0 +1,62 @@ +import org.aspectj.testing.Tester; +import org.aspectj.testing.Tester; +public class BackdoorMethods { + public static void main(String[] args) { + new BackdoorMethods().realMain(args); + } + public void realMain(String[] args) { + new _A().a(); + new _B().a(); + new _C().a(); + new _D().a(); + Tester.checkAllEvents(); + } + static { + for (char c = 'A'; c <= 'D'; c++) { + String n = "_"+c+"."; + Tester.expectEvent(n+"a"); + if (c != 'D') Tester.expectEvent(n+"f"); + Tester.expectEvent(n+"g"); + Tester.expectEvent("before."+n+"a"); + if (c != 'D') Tester.expectEvent("before."+n+"g"); + } + } +} + +class O { + public void a() { Tester.event(n("a")); } + protected String n() { return getClass().getName() + "."; } + protected String n(Object s) { return n() + s; } +} +class A extends O { public void f() { Tester.event(n("f")); } } +class B extends O { void f() { Tester.event(n("f")); } } +class C extends O { protected void f() { Tester.event(n("f")); } } +class D extends O { private void f() { Tester.event(n("f")); } } + +class _A extends O { public void g() { Tester.event(n("g")); } } +class _B extends O { void g() { Tester.event(n("g")); } } +class _C extends O { protected void g() { Tester.event(n("g")); } } +class _D extends O { private void g() { Tester.event(n("g")); } } + +privileged aspect Aspect { + + declare parents: _A extends A; + declare parents: _B extends B; + declare parents: _C extends C; + declare parents: _D extends D; + + before(_A o): target(o) && call(void g()) { o.f(); n(o,"g"); } + before(_B o): target(o) && call(void g()) { o.f(); n(o,"g"); } + before(_C o): target(o) && call(void g()) { o.f(); n(o,"g"); } + + before(_A o): target(o) && call(void a()) { o.g(); n(o,"a"); } + before(_B o): target(o) && call(void a()) { o.g(); n(o,"a"); } + before(_C o): target(o) && call(void a()) { o.g(); n(o,"a"); } + before(_D o): target(o) && call(void a()) { o.g(); n(o,"a"); } + + private static void n(Object o, String m) { + Tester.event("before." + o.getClass().getName() + "." + m); + } +} + + diff --git a/tests/new/BindingArgumentsInWithincode.java b/tests/new/BindingArgumentsInWithincode.java new file mode 100644 index 000000000..ffa696dfa --- /dev/null +++ b/tests/new/BindingArgumentsInWithincode.java @@ -0,0 +1,32 @@ +import java.util.*; + +/** + * PR#479 + * A variant of Hunter Kelly's bug PR#479. This + * doesn't get his desired, but should compile. + */ +public class BindingArgumentsInWithincode { + public static void main(String[] args) { + org.aspectj.testing.Tester.check(true, "compiled"); + } +} + +class C { + public void someMethod(String s) { + new ArrayList().add(s+":"+s); + } +} +aspect A { + + pointcut top(String s): + withincode(void someMethod(String)) && args(s); + + pointcut method(Object o): + call(* java.util.List.add(Object)) && args(o); + + /* + * Won't capture what we're after + * but it should compile + */ + before(String s, Object o): top(s) && method(o) {} +} diff --git a/tests/new/BindingInNotCf.java b/tests/new/BindingInNotCf.java new file mode 100644 index 000000000..5c414fef9 --- /dev/null +++ b/tests/new/BindingInNotCf.java @@ -0,0 +1,14 @@ +/** + * AspectJ should have a rule that binding parameters lexically + * within a ! is always an error. These test some of the most + * obvious forms of that. + */ +public aspect BindingInNotCf { + pointcut pc1(Object o): this(o); + + pointcut pc2(Object o): !this(o); //CE + + pointcut pc3(Object o): !pc2(o); //CE + + pointcut pc4(Object o): !!pc1(o); //CE +} diff --git a/tests/new/BindingInterfaces.java b/tests/new/BindingInterfaces.java new file mode 100644 index 000000000..73d5e3517 --- /dev/null +++ b/tests/new/BindingInterfaces.java @@ -0,0 +1,40 @@ +import org.aspectj.testing.Tester; +import java.util.*; +public class BindingInterfaces { + public static void main(String[] args) { + new BindingInterfaces().realMain(args); + } + public void realMain(String[] args) { + + I i0 = new I(){}; Tester.checkEqual(str(i0), "I", "i0"); + I ij = new J(){}; Tester.checkEqual(str(ij), "JI", "ij"); + I ik = new K(){}; Tester.checkEqual(str(ik), "KJI", "ik"); + + J j0 = new J(){}; Tester.checkEqual(str(j0), "JI", "j0"); + J jk = new K(){}; Tester.checkEqual(str(jk), "KJI", "jk"); + + K k0 = new K(){}; Tester.checkEqual(str(k0), "KJI", "k0"); + } + + private String str(Object o) { + return str(o.getClass().getInterfaces()[0]); + } + + private String str(Class c) { + String str = c.getName(); + Class[] is = c.getInterfaces(); + for (int i = 0; i < is.length; i++) { + str += str(is[i]); + } + return str; + } +} + +interface I {} +interface J {} //extends I {} +interface K {} //extends J {} + +aspect Aspect { + declare parents: J implements I; + declare parents: K implements J; +} diff --git a/tests/new/BindingNullPointer.java b/tests/new/BindingNullPointer.java new file mode 100644 index 000000000..06ec48c6d --- /dev/null +++ b/tests/new/BindingNullPointer.java @@ -0,0 +1,17 @@ +import org.aspectj.testing.*; + +public class BindingNullPointer { + boolean ran = false; + final String s1 = new String("s1"); + Runnable r1 = new Runnable() { + public void run() {String = s1; ran = true;} + }; + void go() { + r1.run(); + Tester.check(ran, "r1.run did not run"); + } + + public static void main(String[] args) { + new BindingNullPointer().go(); + } +} diff --git a/tests/new/BindingThisInsteadOfFormal.java b/tests/new/BindingThisInsteadOfFormal.java new file mode 100644 index 000000000..0f7efd4a3 --- /dev/null +++ b/tests/new/BindingThisInsteadOfFormal.java @@ -0,0 +1,57 @@ +import org.aspectj.testing.*; + +public class BindingThisInsteadOfFormal { + public static void main(String[] args) { + Caller c = new Caller(); + c.goo(); + Tester.checkAllEvents(); + } + + static { + Tester.expectEvent("before-string"); + Tester.expectEvent("before-go"); + Tester.expectEvent("before-static"); + Tester.expectEvent("before-c"); + } +} + +class Caller { + void goo() { + go(); + staticGo(); + } + void go() { + String string = new String("string"); + C c = new C(); + } + + static void staticGo() { + } +} + +class C { + +} + +aspect Aspect perthis(this(Caller)) { + pointcut stringCtors(): call(String.new(String)); + before(): stringCtors() { + Tester.event("before-string"); + } + + pointcut cCtors(): call(C.new()); + before(): cCtors() { + Tester.event("before-c"); + } + + pointcut goCalls(Caller caller): call(void go()) && target(caller); + before(Caller caller): goCalls(caller) { + Tester.event("before-go"); + Tester.check(caller != null, "instance method"); + } + + pointcut goStaticCalls(): call(void Caller.staticGo()); + before(): goStaticCalls() { + Tester.event("before-static"); + } +} diff --git a/tests/new/Binkley.java b/tests/new/Binkley.java new file mode 100644 index 000000000..7ab515de5 --- /dev/null +++ b/tests/new/Binkley.java @@ -0,0 +1,16 @@ +import org.aspectj.testing.Tester; + +public class Binkley { + public static void main(String[] args) { + new Binkley().realMain(args); + } + public void realMain(String[] args) { + Tester.check(true, "compiled!"); + } +} + +aspect A percflow(pc()) +{ + pointcut pc() : within(Binkley); + before(): cflow(pc()) && !(call (new())) && !within(A) { } +} diff --git a/tests/new/Binkley2.java b/tests/new/Binkley2.java new file mode 100644 index 000000000..cc2c51323 --- /dev/null +++ b/tests/new/Binkley2.java @@ -0,0 +1,87 @@ +import java.util.*; +import org.aspectj.lang.*; +import org.aspectj.lang.reflect.*; +import org.aspectj.testing.*; + +public class Binkley2 { + public static void main(String[] args) { + // catch the static init early + C c = new C(); + + Art.enable = true; + Ar.enable = false; + new C().foo(); + + Art.enable = false; + Ar.enable = true; + new C().foo(); + Post.checkAll(); + } +} + +class C { + public int x = 0; + public void foo() + { + x = 1; + x = 2; + } + +} + +class Post { + static List haves = new Vector(); + static String[] wants = new String[] { + "initialization(C())-Ar-0", + "execution(C.<init>)-Ar-0", + "set(C.x)-Ar-0", + "execution(C())-Ar-0", + "execution(C.foo())-Ar-0", + "set(C.x)-Ar-0", + "set(C.x)-Ar-0", + + "initialization(C())-Art-0", + "execution(C.<init>)-Art-1", + "set(C.x)-Art-2", + "execution(C())-Art-3", + "execution(C.foo())-Art-0", + "set(C.x)-Art-1", + "set(C.x)-Art-2", + }; + + static void post(JoinPoint jp, String name, int num) { + haves.add(jp.toShortString() + "-" + name + "-" + num); + } + static void checkAll() { + Tester.checkEqual(haves, wants, "haves != wants"); + } +} + +aspect Ar percflow(pc()){ + pointcut pc() : within(C) ; + int count = 0; + static boolean enable = false; + before(): pc() { + if ( enable ) { + Post.post(thisJoinPoint, "Ar", count++); + } + } +} + +/* + * I'm trying to simulate eachcflowrootop. + */ +aspect Art percflow(Art.pc() && !cflowbelow(Art.pc())) +{ + pointcut pc() : within(C) ; + //pointcut pctop(): pc() && !cflow(pc()); (see above) + int count = 0; + static boolean enable = false; + + before(): pc() { + if ( enable ) { + Post.post(thisJoinPoint, "Art", count++); + } + } +} + diff --git a/tests/new/CFlowNoAdvice.java b/tests/new/CFlowNoAdvice.java new file mode 100644 index 000000000..b491866f0 --- /dev/null +++ b/tests/new/CFlowNoAdvice.java @@ -0,0 +1,21 @@ +import org.aspectj.testing.Tester; + +public class CFlowNoAdvice { + public static void main(String[] args) { + new Foo().bar(); + new Foo().bar(); + } +} + +class Foo { + void bar() { + Tester.check(CFlowAspect.aspectOf() != null, "cflow created"); + } +} + + + + +aspect CFlowAspect percflow(CFlowAspect.contexts()) { + pointcut contexts(): target(Foo) && call(void bar()); +} diff --git a/tests/new/CFlowObjects.java b/tests/new/CFlowObjects.java new file mode 100644 index 000000000..598cab2c3 --- /dev/null +++ b/tests/new/CFlowObjects.java @@ -0,0 +1,35 @@ +import org.aspectj.testing.Tester; + +public class CFlowObjects { + public static void main(String[] args){ + new Test().go(); + Tester.checkEqual(Test.cflowObjects, 1, "1st cflow"); + Tester.checkEqual(Test.callsPerCFlow, 1, "1 call for each cflow"); + + new Test().go(); + Tester.checkEqual(Test.cflowObjects, 2, "2nd cflow"); + Tester.checkEqual(Test.callsPerCFlow, 1, "1 call for each cflow"); + } +} + +class Test { + static int cflowObjects = 0; + static int callsPerCFlow = 0; + + void go(){ + foo(); + } + + void foo(){} +} + +aspect A percflow(target(Test) && call(void go())) { + + { Test.cflowObjects++; } + { Test.callsPerCFlow = 0; } + + //before(): instanceof(Test) && calls(void Object.*()){ Test.callsPerCFlow++; } + before(): within(Test) && call(void Object+.*(..)) { + Test.callsPerCFlow++; + } +} diff --git a/tests/new/CFlowPoints.java b/tests/new/CFlowPoints.java new file mode 100644 index 000000000..f81660a39 --- /dev/null +++ b/tests/new/CFlowPoints.java @@ -0,0 +1,62 @@ +import org.aspectj.testing.Tester; + +public class CFlowPoints { + public static void main(String[] args){ + new Test().go(2); + Tester.checkEqual(Test.callsPerCFlow, 2+1, "3 call for each cflow"); + + Test.callsPerCFlow = 0; + + new Test().go(3); + Tester.checkEqual(Test.callsPerCFlow, 3+2+1, "6 call for each cflow"); + + try { + Each.aspectOf(); + Tester.checkFailed("should have thrown exception"); + } catch (org.aspectj.lang.NoAspectBoundException exc) { + // this is what we want + } + } +} + +class Test { + static int cflowObjects = 0; + static int callsPerCFlow = 0; + + Object lastEachCFlow = null; + + void go(int n) { + for (int i=0; i<n; i++) foo("i", "i"); + + if (n >= 0) go(n-1); + + Tester.check(Each.aspectOf() != lastEachCFlow, "unique eachcflows"); + + lastEachCFlow = Each.aspectOf(); + } + + void foo(String s1, String s2){} +} + +aspect A { + pointcut root(int x): target(Test) && call(void go(int)) && args(x); + + pointcut flow(int x): cflow(root(x)); + + before(): root(int) && !cflow(root(int)) { + Tester.checkEqual(Test.callsPerCFlow, 0, "top call"); + } + + before(String s1, int y, String s2): + flow(y) && target(Test) && target(Object) + && call(void *(String,String)) + && args(s1,s2) + { + Test.callsPerCFlow++; + Tester.checkEqual(s1, s2, "extra parameters"); + } +} + +aspect Each percflow(flowCut()) { + pointcut flowCut(): target(Test) && call(void go(int)); +} diff --git a/tests/new/CFlowThreads.java b/tests/new/CFlowThreads.java new file mode 100644 index 000000000..3f6220e0a --- /dev/null +++ b/tests/new/CFlowThreads.java @@ -0,0 +1,106 @@ +class CFlowThreads implements Runnable { + private static final int MAX_VALUE = 100; + + public static void main(String[] argv) { + // Create a lot of threads + int x = 0; + while (x++ < 100) { + new Thread(new CFlowThreads()).start(); + try { + Thread.sleep((long)(Math.random()*100)); + } catch (Exception e) {} + } + } + + public boolean gotOne(int x) { +// System.out.println("Succeeded, x = "+x); + return true; + } + + public boolean methodA(int x) { + if (x % 2 == 0) return methodB(x+3); + else return methodC(x/2); + } + + public boolean methodB(int x) { + if (x % 3 == 0) return methodC(x+4); + else return methodA(x/3); + } + + public boolean methodC(int x) { + if (x > 2) return methodB(x-3); + else return gotOne(x); + } + + public boolean startIt(int x) { + return methodA(x); + } + + public void run() { + startIt((int)(Math.random()*MAX_VALUE)); + } + + static aspect OriginalValue of eachcflow(OriginalValue.entrypoints(int)) { + int recursioncount = 0; + int original; + + pointcut entrypoints(int x): + instanceof(CFlowThreads) && receptions(boolean startIt(x)); + + before(int x): entrypoints(x) { + original = x; + } + + pointcut successes(int x): + instanceof(CFlowThreads) && receptions(boolean gotOne(x)); + + pointcut recursiveCalls(int x): + instanceof(CFlowThreads) && + receptions(boolean *(x)) && !receptions(boolean gotOne(x)); + + after(int x) returning (boolean s): successes(x) { +// System.out.println("Started at "+original+", used "+recursioncount+" hops"); + } + + boolean fail(int x) { +// System.out.println("Never gonna make it from "+original); + return false; + } + + around(int x) returns boolean: recursiveCalls(x) { + if (recursioncount++ > 50) { + return fail(x); + } else { + return(proceed(x)); + } + } + } + static aspect CheckValues { + static int[] hops = new int[MAX_VALUE]; + static after(int x, OriginalValue a) returning (boolean s): + OriginalValue.successes(x) && hasaspect(a) { + synchronized (hops) { + if (hops[a.original] != 0) { + if (hops[a.original] != a.recursioncount) { + System.out.println("Error: "+a.original+" takes "+ + hops[a.original]+", not "+ + a.recursioncount+" hops."); + } + } else { + hops[a.original] = a.recursioncount; + } + } + } + static after(int x, OriginalValue a) returning (boolean s): + instanceof(a) && receptions(boolean fail(x)) { + synchronized (hops) { + if (hops[a.original] != 0 &&&& hops[a.original] != -1) { + System.out.println("Error: "+a.original+" takes "+ + hops[a.original]+" hops, doesn't fail"); + } else { + hops[a.original] = -1; + } + } + } + } +} diff --git a/tests/new/CallNotTarget.java b/tests/new/CallNotTarget.java new file mode 100644 index 000000000..c710e2b60 --- /dev/null +++ b/tests/new/CallNotTarget.java @@ -0,0 +1,53 @@ + +import org.aspectj.testing.*; + +/** @testcase PR#661 !target with second advice on casted call */ +public class CallNotTarget { + public static void main (String args []) { + //new B().go(); // remove cast to avoid bug + ((I) new B()).go(); + Tester.checkAllEvents(); + + doit(new B()); + doit(new A()); + } + static { + Tester.expectEvent("A.before"); + Tester.expectEvent("A.before-not"); + Tester.expectEvent("A*.before-not"); + Tester.expectEvent("go"); + } + + static void doit(I i) { + Tester.check(i != null, "null i"); + //System.out.println(i); + } +} + +interface I { public void go (); } + +class A implements I { + public void go () { Tester.check(false, "A"); } +} +class B implements I { + public void go () { Tester.event("go"); } +} + +aspect Aspect { + + pointcut pc() : call(void I.go()); // same result if pointcut not named + + before () : pc() { // remove this advice to avoid bug + Tester.event("A.before"); + } + before () : pc() && !target (A) { // change to !target(String) to avoid bug + Tester.event("A.before-not"); + } + before () : pc() && !target (A*) { // change to !target(String) to avoid bug + Tester.event("A*.before-not"); + } + +// before(): call(void doit(I)) && !args(A) { +// System.out.println("doit !A"); +// } +} diff --git a/tests/new/CallTypes.java b/tests/new/CallTypes.java new file mode 100644 index 000000000..95ff05602 --- /dev/null +++ b/tests/new/CallTypes.java @@ -0,0 +1,116 @@ +import org.aspectj.testing.Tester; +import java.util.*; + +public class CallTypes { + public static void main(String[] args) { + C1 c1 = new C1(); + + preTest("c1.foo()"); + c1.foo(); + test("static c, static c1, instanceof c, instanceof c1, "); + + C c = c1; + + preTest("(C c = c1).foo()"); + c.foo(); + test("static c, instanceof c, instanceof c1, "); + + c = new C(); + + preTest("new C().foo()"); + c.foo(); + test("static c, instanceof c, "); + + C2 c2 = new C2(); + + preTest("new C2().foo()"); + c2.foo(); + test("static c, static c2, instanceof c, instanceof c2, "); + + preTest("c1.foo1()"); + c1.foo1(); + test("", "static c1, instanceof c, instanceof c1, "); + } + + public static void preTest(String str) { + A.noteAdvice = A.noteAdviceStar = ""; + msg = str; + } + + static String msg; + public static void test(String t1) { + test(t1, t1); + } + + public static void test(String baseString, String starString) { + Tester.checkEqual(sort(A.noteAdvice), sort(baseString), "base: "+msg); + Tester.checkEqual(sort(A.noteAdviceStar), sort(starString), "star: "+msg); + } + private final static Collection sort(String str) { + SortedSet sort = new TreeSet(); + for (StringTokenizer t = new StringTokenizer(str, ",", false); + t.hasMoreTokens();) { + String s = t.nextToken().trim(); + if (s.length() > 0) sort.add(s); + } + return sort; + } +} + +class C { + public void foo() { } +} +class C1 extends C { + public void foo1() { } +} +class C2 extends C { + public void foo() { } +} + +aspect A { + static String noteAdvice = ""; + static String noteAdviceStar = ""; + + before(C c): target(c) && call(void C.foo()) { + noteAdvice += "static c, "; + } + before(C1 c1): target(c1) && call(void C1.foo()) { + noteAdvice += "static c1, "; + } + before(C2 c2): target(c2) && call(void C2.foo()) { + noteAdvice += "static c2, "; + } + + + before(C c): target(c) && call(void foo()) { + noteAdvice += "instanceof c, "; + } + before(C1 c1): target(c1) && call(void foo()) { + noteAdvice += "instanceof c1, "; + } + before(C2 c2): target(c2) && call(void foo()) { + noteAdvice += "instanceof c2, "; + } + + + before(C c): target(c) && call(void C.foo*()) { + noteAdviceStar += "static c, "; + } + before(C1 c1): target(c1) && call(void C1.foo*()) { + noteAdviceStar += "static c1, "; + } + before(C2 c2): target(c2) && call(void C2.foo*()) { + noteAdviceStar += "static c2, "; + } + + + before(C c): target(c) && call(void foo*()) { + noteAdviceStar += "instanceof c, "; + } + before(C1 c1): target(c1) && call(void foo*()) { + noteAdviceStar += "instanceof c1, "; + } + before(C2 c2): target(c2) && call(void foo*()) { + noteAdviceStar += "instanceof c2, "; + } +} diff --git a/tests/new/CallTypesI.java b/tests/new/CallTypesI.java new file mode 100644 index 000000000..7ab225106 --- /dev/null +++ b/tests/new/CallTypesI.java @@ -0,0 +1,100 @@ +import org.aspectj.testing.Tester; +import java.util.*; + +public class CallTypesI { + public static void main(String[] args) { + C1a c1a = new C1a(); + + preTest("c1a.mI()"); + c1a.mI(); + test("static c1a, static i0, static i1a, instanceof c0, instanceof c1a, instanceof i0, instanceof i1a, "); + + preTest("c1a.mC()"); + c1a.mC(); + test("static c0, static c1a, instanceof c0, instanceof c1a, instanceof i0, instanceof i1a, "); + + C0 c0 = c1a; + + preTest("(C c = c1a).mC()"); + c0.mC(); + test("static c0, instanceof c0, instanceof c1a, instanceof i0, instanceof i1a, "); + } + + public static void preTest(String str) { + A.noteAdvice = A.noteAdviceStar = ""; + msg = str; + } + + static String msg; + public static void test(String t1) { + test(t1, t1); + } + + public static void test(String baseString, String starString) { + Tester.checkEqual(sort(A.noteAdvice), sort(baseString), "base: "+msg); + //Tester.checkEqual(sort(A.noteAdviceStar), sort(starString), "star: "+msg); + } + private final static Collection sort(String str) { + SortedSet sort = new TreeSet(); + for (StringTokenizer t = new StringTokenizer(str, ",", false); + t.hasMoreTokens();) { + String s = t.nextToken().trim(); + if (s.length() > 0) sort.add(s); + } + return sort; + } +} + +interface I0 { + public void mI(); +} + +interface I1a extends I0 { } + +interface I1b extends I0 { } + +interface I2 extends I1a, I1b {} + + +class C0 { + public void mC() { } +} + +class C1a extends C0 implements I1a { + public void mI() { } +} +class C1b extends C0 implements I1b { + public void mI() { } +} + +aspect A { + static String noteAdvice = ""; + static String noteAdviceStar = ""; + + before(): call(void C0.mC()) { + noteAdvice += "static c0, "; + } + before(): call(void C1a.mC()) || call(void C1a.mI()) { + noteAdvice += "static c1a, "; + } + before(): call(void C1b.mC()) || call(void C1b.mI()) { + noteAdvice += "static c1b, "; + } + + before(): call(void I0.mI()) { + noteAdvice += "static i0, "; + } + before(): call(void I1a.mI()) { + noteAdvice += "static i1a, "; + } + before(): call(void I1b.mI()) { + noteAdvice += "static i1b, "; + } + + before(): target(C0) && call(* *(..)) { noteAdvice += "instanceof c0, "; } + before(): target(C1a) && call(* *(..)) { noteAdvice += "instanceof c1a, "; } + before(): target(C1b) && call(* *(..)) { noteAdvice += "instanceof c1b, "; } + before(): target(I0) && call(* *(..)) { noteAdvice += "instanceof i0, "; } + before(): target(I1a) && call(* *(..)) { noteAdvice += "instanceof i1a, "; } + before(): target(I1b) && call(* *(..)) { noteAdvice += "instanceof i1b, "; } +} diff --git a/tests/new/CallsAndLocalClasses.java b/tests/new/CallsAndLocalClasses.java new file mode 100644 index 000000000..f807605b1 --- /dev/null +++ b/tests/new/CallsAndLocalClasses.java @@ -0,0 +1,47 @@ +import org.aspectj.testing.Tester; + +public class CallsAndLocalClasses { + public static void main(String[] args) { + Runnable r = new Outer().makeRunnable(); + r.run(); + + Outer o = new Outer(); + o.toString(); + ((Comparable)o).toString(); + + Tester.check("run from Outer"); + Tester.check("m"); + Tester.check("before run"); + Tester.check("before m"); + } +} + + +class Outer implements Comparable { + public int compareTo(Object other) { Tester.note("m"); return 0; } + + public Runnable makeRunnable() { + return new Runnable() { + public void run() { + Tester.note("run from Outer"); + compareTo(this); + } + }; + } +} + +final class Foo { + public String toString() { return "Foo"; } +} + +aspect A { + before(): call(void Runnable.run()) { + Tester.note("before run"); + } + before(): call(int compareTo(Object)) { + Tester.note("before m"); + } + before(): call(String Object.toString()) { + System.out.println("before toString"); + } +} diff --git a/tests/new/CallsParams.java b/tests/new/CallsParams.java new file mode 100644 index 000000000..cf58bbdcb --- /dev/null +++ b/tests/new/CallsParams.java @@ -0,0 +1,44 @@ +import org.aspectj.testing.Tester; +import java.util.*; + +public class CallsParams { + public static void main(String[] args) { + Test t = new Test(); + t.go(); + + //Tester.checkEqual(Test.calls, ", Test.go->Test.foo, Test.foo->java.io.PrintStream.println"); + Tester.checkEqual(Test.calls, ", Test.go->foo, Test.foo->println"); + } +} + + +class Test { + static String calls = ""; + + void go(){ + foo(); + } + + void foo(){ + System.out.println(""); + } +} + +aspect SeqCut percflow(call(* Test.go(..))) { + //before(Object s, Object r) : !instanceof(SeqCut) && instanceof(s) && calls(* r.*(..)) { + before(Object s, Object r) : !this(SeqCut) && this(s) && + //callsto(receptions(* *(..)) && instanceof(r)) { + call(* *(..)) && target(r) { + Test.calls += ", " + s.getClass().getName() + "." + + //thisJoinPoint.getEnclosingExecutionJoinPoint().getSignature().getName() + + thisEnclosingJoinPointStaticPart.getSignature().getName() + + "->" /*+ r.getClass().getName() + "."*/ + thisJoinPoint.getSignature().getName(); + // IBM's VM doesn't have a java.io.PrintStream :) + } + + before(Object s) : !this(SeqCut) && this(s) && call(* *..*.*(..)) { + // no output + //System.out.println(", " + s.getClass().getName() + "." + thisStaticJoinPoint.getSignature().getName()); + } +} + diff --git a/tests/new/CallsReceptionsCallsto.java b/tests/new/CallsReceptionsCallsto.java new file mode 100644 index 000000000..790b8de59 --- /dev/null +++ b/tests/new/CallsReceptionsCallsto.java @@ -0,0 +1,85 @@ +// lifted directly from Mark's email + +import org.aspectj.testing.Tester; + +public class CallsReceptionsCallsto { + + static final String desiredString = + "(calls) (callsto) (receptions) G.foo(A) G.foo(D) (calls) (callsto) (receptions) G.foo(A) G.foo(D) "; + + static StringBuffer buffer; + + public static void main(String[] args) { + buffer = new StringBuffer(); + new C().go(); + String foundString = buffer.toString(); + Tester.checkEqual(foundString, desiredString); + } + + + +} + +class C { + A a = new A(); + D d = new D(); + G g = new G(); + + void go(){ + g.foo(a); + g.foo(d); + bar(g); + bash(g); + } + + void bar(I i){ + i.foo(a); + } + + void bash(J j){ + j.foo(d); + } +} + +aspect Q { + + pointcut pc2(): /*calls*/ within(C) && call(void I.foo(*)); + pointcut pc1(): /*receptions*/ call(void I.foo(*)); + pointcut pc3(): /*callsto*/ call(* I.foo(*)); + + before (): pc2() { + CallsReceptionsCallsto.buffer.append("(calls) "); + } + + before(): pc3(){ + CallsReceptionsCallsto.buffer.append("(callsto) "); + } + + before(): pc1() { + CallsReceptionsCallsto.buffer.append("(receptions) "); + } +} + + +class A {} + + +class D {} + + +interface I { + void foo(A a); +} + +interface J { + void foo(D d); +} + +class G implements I, J { + public void foo(A a){ + CallsReceptionsCallsto.buffer.append("G.foo(A) "); + } + public void foo(D d){ + CallsReceptionsCallsto.buffer.append("G.foo(D) "); + } +} diff --git a/tests/new/CallsTo.java b/tests/new/CallsTo.java new file mode 100644 index 000000000..a4bedb983 --- /dev/null +++ b/tests/new/CallsTo.java @@ -0,0 +1,96 @@ +import org.aspectj.testing.Tester; + +public class CallsTo { + public static void main(String[] args) { + Tester.clearNotes(); + //System.out.println("cleared events"); + //Tester.printEvents(); + C c = new C(); + Tester.checkAndClear + ("ca-newC", + "new C"); + c.m("a"); + Tester.checkAndClear + ("re-all re-C ca-all ca-C ", + "c.m"); + c.m_C("b"); + Tester.checkAndClear + ("re-all re-C ca-all ca-C ", + "c.m_C"); + + c = new SubC(); + Tester.checkAndClear + ("ca-newC", + "new SubC"); + c.m("c"); + Tester.checkAndClear + ("re-all re-C re-SubC ca-all ca-C ca-SubC ca-inst(SubC)", + "subc.m"); + c.m_C("d"); + Tester.checkAndClear + ("re-all re-C re-SubC ca-all ca-C ca-SubC ca-inst(SubC)", + "subc.m_C"); + + SubC subC = new SubC(); + Tester.checkAndClear + ("ca-newC", + "new SubC"); + subC.m("e"); + Tester.checkAndClear + ("re-all re-C re-SubC ca-all ca-C ca-SubC ca-inst(SubC)", + "subc.m"); + subC.m_C("f"); + Tester.checkAndClear + ("re-all re-C re-SubC ca-all ca-C ca-SubC ca-inst(SubC)", + "subc.m_C"); + subC.m_SubC(); + Tester.checkAndClear + ("re-all re-SubC ca-all ca-SubC", + "subc.m_SubC"); + } +} + +class C { + public void m(String s1) {} + public void m_C(String s2) {} +} + +class SubC extends C { + public void m(String s3) {} + public void m_SubC() {} +} + +aspect A { +// pointcut allReceptions(): receptions(void *(..)) && instanceof(C); +// pointcut receptionsInC(String s): receptions(void C.*(s)); +// pointcut receptionsInSubC(): receptions(void SubC.*(..)); + + pointcut allcall(): call(void *(..)) && target(C+); + pointcut callInC(String s): call(void C+.*(String)) && args(s); + pointcut callInSubC(): call(void *(..)) && target(SubC); + + before(): allcall() { note("re-all"); } + before(String s): callInC(s) { note("re-C"); } + before(): callInSubC() { note("re-SubC"); } + + before(): allcall() { note("ca-all"); } + before(String s): callInC(s) { note("ca-C"); } + before(): callInSubC() { note("ca-SubC"); } + + + before(): call(void C.*(..)) && target(SubC) { note("ca-inst(SubC)"); } + + // not implemented +// before(OnSubC o): call(void C.*(..)) && (hasaspect(OnSubC) && target(o)) { +// note("ca-asp(SubC)"); +// } + + before(): call(C+.new(..)) { note("ca-newC"); } + + private final static void note(String msg) { + Tester.note(msg); + } +} + +aspect OnSubC /**of eachobject(instanceof(SubC))*/ { +} diff --git a/tests/new/CallsToArray.java b/tests/new/CallsToArray.java new file mode 100644 index 000000000..dfa8ba019 --- /dev/null +++ b/tests/new/CallsToArray.java @@ -0,0 +1,29 @@ +import org.aspectj.testing.Tester; + +public class CallsToArray { + public static void main(String[] args) { + byte[] a = new byte[] {0, 1}; + byte[] b = (byte[])a.clone(); + + Tester.check(a != b, "cloned array is different"); + Tester.check(a[0] == b[0] && a[1] == b[1], "but compares equal"); + + Tester.check(A.returnedClone == b, "advice did right thing"); + } + +} + + +aspect A { + static Object returnedClone; + after () returning(Object cloned): call(Object Object.clone()) { + System.out.println("running advice"); + A.returnedClone = cloned; + } + /* + static after () returning(Object cloned): calls(Object .clone()) { + System.out.println("running advice on byte[]"); + A.returnedClone = cloned; + } + */ +} diff --git a/tests/new/CallsVRec.java b/tests/new/CallsVRec.java new file mode 100644 index 000000000..bb3140cd7 --- /dev/null +++ b/tests/new/CallsVRec.java @@ -0,0 +1,43 @@ +import org.aspectj.compiler.base.ast.*; + +public class CallsVRec { + public static void main(String[] args) { + new CallsVRec().realMain(args); + } + public void realMain(String[] args) { + org.aspectj.testing.Tester.check(true, "Compiled!"); + } + + public CallsVRec() { + } +} + + + + +aspect Wins { + + pointcut showError(ASTObject ast, String msg): + target(ast) + && call(void ASTObject.showError(String)) + && args(msg); + + void around(ASTObject ast, String msg): showError(ast, msg) { + System.out.println("hi"); + proceed(ast, msg); + } +} + +aspect Loses { + + pointcut showError(ASTObject ast, String msg): + target(ast) + && call/*s*/(void ASTObject.showError(String)) + && args(msg); + + void around(ASTObject ast, String msg): showError(ast, msg) { + System.out.println("hi"); + proceed(ast, msg); + } +} + diff --git a/tests/new/CannotReferenceSuper.java b/tests/new/CannotReferenceSuper.java new file mode 100644 index 000000000..3ce4e04d0 --- /dev/null +++ b/tests/new/CannotReferenceSuper.java @@ -0,0 +1,34 @@ +import org.aspectj.testing.*; +public class CannotReferenceSuper { + + public static void main(String[] args) { + new CannotReferenceSuper().go(); + } + + static { + Tester.expectEventsInString("a.go,aa.go,b.go,bb.go"); + } + + void go() { + new A().go(); + new B().go(); + Tester.checkAllEvents(); + } + + class A { + class AA extends A { + void go() { Tester.event("aa.go"); } + } + void go() { Tester.event("a.go"); new AA().go(); } + } + + class B extends A { + class BB extends AA { + void go() { Tester.event("bb.go"); } + } + void go() { Tester.event("b.go"); new BB().go(); } + + } +} + + diff --git a/tests/new/CatchAdvice.java b/tests/new/CatchAdvice.java new file mode 100644 index 000000000..8d0b247f7 --- /dev/null +++ b/tests/new/CatchAdvice.java @@ -0,0 +1,52 @@ +import org.aspectj.testing.Tester; + +import org.aspectj.lang.reflect.*; + +public aspect CatchAdvice { + public static void main(String[] args) { test(); } + + public static void test() { + new C().foo(); + Tester.check(ranAdvice1, "advice on *'s"); + Tester.check(ranAdvice2, "advice on C"); + Tester.check(!ranAdvice3, "advice on C and Error"); + } + + private static boolean ranAdvice1 = false; + before(Throwable t): handler(Throwable+) && args(t){ + //int n = thisJoinPoint.parameters.length; + //System.out.println("caught "+t+" "+n+" params"); + Tester.check(((CatchClauseSignature)thisJoinPoint.getSignature()). + getParameterType() == ArithmeticException.class, + "right catch clause"); + ranAdvice1 = true; + } + after(Throwable t): handler(Throwable+) && args(t) { + //System.out.println("after catch"); + } + + static boolean ranAdvice2 = false; + after(ArithmeticException t): + this(C) && handler(ArithmeticException) && args(t) { + //System.out.println("(in C) caught "+t); + ranAdvice2 = true; + } + + static boolean ranAdvice3 = false; + after(Error e): + within(C) && handler(Error+) && args(e){ + //System.out.println("(in C) caught "+e); + ranAdvice3 = true; + } +} + +class C { + public void foo() { + int x=0; + try { + int y = 1/x; + } catch (ArithmeticException e) { + //System.out.println("caught arithmetic exception"); + } + } +} diff --git a/tests/new/CflowAlone.java b/tests/new/CflowAlone.java new file mode 100644 index 000000000..19cdc035d --- /dev/null +++ b/tests/new/CflowAlone.java @@ -0,0 +1,29 @@ + +import org.aspectj.testing.Tester; +import org.aspectj.testing.Tester; + +public class CflowAlone { + public static void main(String[] args){ + new testclass1(); + Tester.check(0 < Filteraspect.i, + "0 < Filteraspect.i: " + Filteraspect.i); + } +} +class testclass1 {} +class testclass2 {} +aspect Filteraspect { + static int i; + // all these variants fail + //pointcut goCut(): cflow(this(testclass2)); + //pointcut goCut(): cflow(target(testclass2)); + //pointcut goCut(): cflow(args(testclass2)); + //pointcut goCut(): cflow(!within(FilterAspect)); + //pointcut goCut(): cflow(within(FilterAspect)); + //pointcut goCut(): cflow(within(testclass1)); + pointcut goCut(): !within(Filteraspect) && cflow(within(testclass1)); + // works ok + //pointcut goCut(): within(Filteraspect); + Object around(): goCut() { i++; return proceed(); } + // no bug when using before or after + //after(): goCut() { int i = 1; System.getProperties().put("foo", "bar");} +} diff --git a/tests/new/CflowBelowTest.java b/tests/new/CflowBelowTest.java new file mode 100644 index 000000000..f6c7e07a7 --- /dev/null +++ b/tests/new/CflowBelowTest.java @@ -0,0 +1,44 @@ +import org.aspectj.testing.Tester; + +import java.util.*; + +/** + * Inspired by aspect sandbox and submitted by Chris Dutchyn + */ +public class CflowBelowTest { + static final String[] expectedSteps = new String[] { + "Num.fact(4) within Num.fact(5) within another Num.fact(6)", + "Num.fact(3) within Num.fact(4) within another Num.fact(5)", + "Num.fact(2) within Num.fact(3) within another Num.fact(4)", + "Num.fact(1) within Num.fact(2) within another Num.fact(3)", + }; + + static List steps = new ArrayList(); + + static public void main( String[] args ) { + Tester.checkEqual(new Num().fact(6), 720); + + Tester.checkEqual(steps.toArray(), expectedSteps, "steps"); + } +} + + +class Num { + int fact(int x) { + if (x == 1) + return 1; + return x * fact(x - 1); + } +} + +// check that cflows of nested calls obtain correct parameters +aspect CflowBelow01 { + before (int x1, int x2, int x3) : + call(int Num.fact(int)) && args(x1) + && cflowbelow(call(int Num.fact(int)) && args(x2) + && cflowbelow(call(int Num.fact(int)) && args(x3))) { + CflowBelowTest.steps.add("Num.fact(" + x1 + + ") within Num.fact(" + x2 + + ") within another Num.fact(" + x3 + ")"); + } +} diff --git a/tests/new/CflowBinding.java b/tests/new/CflowBinding.java new file mode 100644 index 000000000..0b4b4478c --- /dev/null +++ b/tests/new/CflowBinding.java @@ -0,0 +1,16 @@ +public class CflowBinding { + public static void main(String[] args) { + } + + public void m1() {} + public void m2() { m1(); } +} + +aspect A { + public static Object foo = null; + + before(final Object t): execution(void m1()) && this(t) && + cflow(execution(void m2()) && if(t == foo)) //CE + { + } +} diff --git a/tests/new/CflowCycles.java b/tests/new/CflowCycles.java new file mode 100644 index 000000000..5b48bf76f --- /dev/null +++ b/tests/new/CflowCycles.java @@ -0,0 +1,39 @@ +import org.aspectj.testing.Tester; + +/** @testcase cflow cycles in advice from different aspects */ +public class CflowCycles { + public static void main( String args[] ) { + Tester.expectEvent("target A1"); + Tester.expectEvent("target A2"); + new Target().run(); + Tester.checkAllEventsIgnoreDups(); + } +} + +class Target { + public void run(){ } +} + +aspect A1 { + pointcut TargetRunFlow () + // ok if no cflow: within(Target) && execution(* *(..)) && !within(A1+); + : !within(A1+) //cflow(within(Target) && execution(* *(..))) && !within(A1+) + ; + Object around () : TargetRunFlow() { + Tester.event("target A1"); + return proceed(); + } + // ok if in the same class +} + +aspect A2 { + pointcut TargetRun () + : within(Target) && execution(* *(..)) && !within(A2+); + ; + Object around () : TargetRun() { + Tester.event("target A2"); + return proceed(); + } +} + + diff --git a/tests/new/CflowInitInAspectVariantsAfter.java b/tests/new/CflowInitInAspectVariantsAfter.java new file mode 100644 index 000000000..51093d86c --- /dev/null +++ b/tests/new/CflowInitInAspectVariantsAfter.java @@ -0,0 +1,36 @@ +import org.aspectj.testing.Tester; + +public class CflowInitInAspectVariantsAfter { + public static void main(String[] args) { + new C().a(); + Tester.checkAllEventsIgnoreDups(); + } + static { + Tester.expectEvent("cflow after pc()"); + Tester.expectEvent("cflow after execution(void C.a())"); + Tester.expectEvent("cflowbelow after pc()"); + Tester.expectEvent("cflowbelow after execution(void C.a())"); + } +} +class C { + void a() {b();} + private void b() {int i = 1;} // avoid later optimizations +} + +aspect A { + + pointcut safety() : !within(A); + pointcut pc() : execution(void C.a()); + after() : safety() && cflow(pc()) { + Tester.event("cflow after pc()"); + } + after() : safety() && cflow(execution(void C.a())) { + Tester.event("cflow after execution(void C.a())"); + } + after() : safety() && cflowbelow(pc()) { + Tester.event("cflowbelow after pc()"); + } + after() : safety() && cflowbelow(execution(void C.a())) { + Tester.event("cflowbelow after execution(void C.a())"); + } +} diff --git a/tests/new/CflowInitInAspectVariantsBefore.java b/tests/new/CflowInitInAspectVariantsBefore.java new file mode 100644 index 000000000..953cfa7d9 --- /dev/null +++ b/tests/new/CflowInitInAspectVariantsBefore.java @@ -0,0 +1,57 @@ +import org.aspectj.testing.Tester; + +public class CflowInitInAspectVariantsBefore { + public static void main(String[] args) { + new C().a(); + Tester.checkAllEventsIgnoreDups(); + } + static { + Tester.expectEvent("cflow before pc()"); + Tester.expectEvent("cflow before execution(void C.a())"); + Tester.expectEvent("cflowbelow before pc()"); + Tester.expectEvent("cflowbelow before execution(void C.a())"); + } +} +class C { + void a() {b();} + private void b() {int i = 1;} // avoid later optimizations +} + +aspect A { + + pointcut pc() : execution(void C.a()); + // ---- works + pointcut safety() : !within(A) ; + // ---- cannot use cflow to exclude itself - reference thereto fails + //pointcut safety() : !(within(A) && cflow(pc())); + // ---- cannot use dynamic calculation, because before call happens first? + //pointcut safety() : !within(A) || (within(A) && if(touched)) ; + static boolean touched = false; + // ---- does not address the before advice methods advising themselves + //pointcut safety() : !(initialization(A.new(..)) || staticinitialization(A)); + // ---- worse way of saying !within(A) + //pointcut safety() : this(C) || this(CflowInitInAspectVariantsBefore) || this(null); + //pointcut safety() : this(C) || this(CflowInitInAspectVariantsBefore) || this(null); + + // no bug if ": within(C) && ..." + // @testTarget cflow.before.namedpc + before() : safety() && cflow(pc()) { + if (!touched) touched = true; + Tester.event("cflow before pc()"); + } + // @testTarget cflow.before.anonpc + before() : safety() && cflow(execution(void C.a())) { + if (!touched) touched = true; + Tester.event("cflow before execution(void C.a())"); + } + // @testTarget cflowbelow.before.namedpc + before() : safety() && cflowbelow(pc()) { + if (!touched) touched = true; + Tester.event("cflowbelow before pc()"); + } + // @testTarget cflowbelow.before.anonpc + before() : safety() && cflowbelow(execution(void C.a())) { + if (!touched) touched = true; + Tester.event("cflowbelow before execution(void C.a())"); + } +} diff --git a/tests/new/CflowOfFieldInitAnonMethods.java b/tests/new/CflowOfFieldInitAnonMethods.java new file mode 100644 index 000000000..1cfe6a2d0 --- /dev/null +++ b/tests/new/CflowOfFieldInitAnonMethods.java @@ -0,0 +1,46 @@ + +import org.aspectj.testing.Tester; + +/** @testcase PR#755 ajc dies on cflow into field init anon class */ +public class CflowOfFieldInitAnonMethods { + public static void main(String[] args) { + new CflowOfFieldInitAnonMethods().r.run(); // field initializer + // no bug on static field initializers or with non-anonymous class + // or when not calling another method + //XXX test should check, but that's for leter + //Tester.checkAllEvents(); + } + + Runnable r = new Runnable() { + public void run() { calc(1); } + public void calc(int i) {} + }; +} + +aspect ThreadTracer { + pointcut safe(): !within(ThreadTracer); + + before(): safe() && cflow(call(void Runnable.run())) { + Tester.event("before(): cflow(call(void Runnable.run()))"); + } + before(): safe() && cflowbelow(call(void Runnable.run())) { + Tester.event("before(): cflowbelow(call(void Runnable.run()))"); + } + before(): safe() && cflow(execution(void Runnable.run())) { + Tester.event("before(): cflow(execution(void Runnable.run()))"); + } + before(): safe() && cflowbelow(execution(void Runnable.run())) { + Tester.event("before(): cflowbelow(execution(void Runnable.run()))"); + } + before(): execution(void Runnable.run()) { // no bug here + Tester.event("before(): execution(void Runnable.run())"); + } + static { + Tester.expectEvent("before(): cflow(call(void Runnable.run()))"); + Tester.expectEvent("before(): cflowbelow(call(void Runnable.run()))"); + Tester.expectEvent("before(): cflow(execution(void Runnable.run()))"); + Tester.expectEvent("before(): cflowbelow(execution(void Runnable.run()))"); + Tester.expectEvent("before(): execution(void Runnable.run())"); + } +} + diff --git a/tests/new/CircularAdvice.java b/tests/new/CircularAdvice.java new file mode 100644 index 000000000..176d9a001 --- /dev/null +++ b/tests/new/CircularAdvice.java @@ -0,0 +1,24 @@ +import org.aspectj.testing.Tester; + +public class CircularAdvice { + public static void main(String[] args) { + Tester.checkEqual(m(5), 5*4*3*2*1, "factorial with advice"); + } + + public static long m(long l) { + return -1; + } +} + +aspect FactorialViaAround { + // this advice uses recursive calls within its body to compute factorial + // on an otherwise innocent method + long around (long l): call(long m(long)) && args(l) { + if (l == 0) { + return 1; + } else { + return l * CircularAdvice.m(l - 1); + } + } +} + diff --git a/tests/new/ClassAndInterface.java b/tests/new/ClassAndInterface.java new file mode 100644 index 000000000..262be4705 --- /dev/null +++ b/tests/new/ClassAndInterface.java @@ -0,0 +1,8 @@ +import org.aspectj.testing.Tester; +public class ClassAndInterface { + public static void main(String[] args) { + Tester.check(false, "shouldn't have compiled"); + } +} +class I {} +interface I {} diff --git a/tests/new/ClassFieldOnPrimitiveType.java b/tests/new/ClassFieldOnPrimitiveType.java new file mode 100644 index 000000000..81d2a0877 --- /dev/null +++ b/tests/new/ClassFieldOnPrimitiveType.java @@ -0,0 +1,71 @@ + +import org.aspectj.testing.Tester; + +public class ClassFieldOnPrimitiveType +{ + public static void main(String[] args) { test(); } + + public static void test() { + Tester.checkEqual(checkBoolean(), "boolean", "boolean"); + Tester.checkEqual(checkChar(), "char", "char"); + Tester.checkEqual(checkByte(), "byte", "byte"); + Tester.checkEqual(checkShort(), "short", "short"); + Tester.checkEqual(checkLong(), "long", "long"); + Tester.checkEqual(checkFloat(), "float", "float"); + Tester.checkEqual(checkDouble(), "double", "double"); + Tester.checkEqual(checkIntArray(), "[Z", "boolean[]"); + checkIntArray(); + } + + public static String checkVoid() { + Class c = void.class; + return c.getName(); + } + + public static String checkBoolean() { + Class c = boolean.class; + Tester.check(c.isPrimitive(), "check isPrimitive"); + return c.getName(); + } + + public static String checkChar() { + Class c = char.class; + return c.getName(); + } + + public static String checkByte() { + Class c = byte.class; + return c.getName(); + } + + public static String checkShort() { + Class c = short.class; + return c.getName(); + } + + public static String checkInt() { + Class c = int.class; + Tester.check( c == Integer.TYPE, "check Type field"); + return c.getName(); + } + + public static String checkLong() { + Class c = long.class; + return c.getName(); + } + + public static String checkFloat() { + Class c = float.class; + return c.getName(); + } + + public static String checkDouble() { + Class c = double.class; + return c.getName(); + } + + public static String checkIntArray() { + Class c = boolean[].class; + return c.getName(); + } +} diff --git a/tests/new/ClassImplementsClass.java b/tests/new/ClassImplementsClass.java new file mode 100644 index 000000000..aa49ef3f7 --- /dev/null +++ b/tests/new/ClassImplementsClass.java @@ -0,0 +1,11 @@ + + +/** @testcase PR853 declare class implements class CE */ + +class C {} + +class B {} + +aspect A { + declare C implements B; // CE 10 +}
\ No newline at end of file diff --git a/tests/new/ClassMethods.java b/tests/new/ClassMethods.java new file mode 100644 index 000000000..c614f05ea --- /dev/null +++ b/tests/new/ClassMethods.java @@ -0,0 +1,133 @@ +import org.aspectj.testing.Tester; + +import java.lang.reflect.*; +import java.util.*; + +public class ClassMethods { + public static void main(String[] args) { + new ClassMethods().realMain(args); + } + final static Object[] tuples = new Object[] { + "clone", null, null, + "equals", new Class[]{Object.class}, new Object[]{""}, + "finalize", null, null, + "getClass", null, null, + "hashCode", null, null, + "notify", null, null, + "notifyAll", null, null, + "toString", null, null, + "wait", null, null, + "waitL", new Class[]{long.class}, new Object[]{new Long(3L)}, + "waitLI", new Class[]{long.class, int.class}, new Object[]{new Long(4L), new Integer(5)}, + }; + final List list = new Vector(); + { + for (int i = 0; i < tuples.length; i += 3) { + List tuple = new Vector(); + tuple.add(tuples[i]+ "New"); + tuple.add(tuples[i+1] == null ? new Class[]{} : tuples[i+1]); + tuple.add(tuples[i+2] == null ? new Object[]{} : tuples[i+2]); + list.add(tuple); + } + } + public void realMain(String[] argv) { + Iterator iter = list.iterator(); + while (iter.hasNext()) { + List tuple = (List) iter.next(); + String name = (String) tuple.get(0); + Class[] params = (Class[]) tuple.get(1); + Object[] args = (Object[]) tuple.get(2); + boolean ran = false; + Throwable caught = null; + try { + Object o = new SomeType(); + o.getClass().getMethod(name, params).invoke(o, args); + ran = true; + } catch (Throwable t) { + caught = t; + } finally { + Tester.check(ran, name + " didn't run" + (caught != null ? ":"+caught : "")); + } + } + } +} + +class SomeType { +// public Object cloneNew() { try { return clone(); } catch (Throwable t) {} return null; } +// public boolean equalsNew(Object o) { return equals(o); } +// public void finalizeNew() { try { finalize(); } catch (Throwable t) {} } +// public Class getClassNew() { return getClass(); } +// public int hashCodeNew() { return hashCode(); } +// public void notifyNew() { try { notify(); } catch (Throwable t) {} } +// public void notifyAllNew() { try { notifyAll(); } catch (Throwable t) {} } +// public String toStringNew() { return toString(); } +// public void waitNew() { try { wait(); } catch (Throwable t) {} } +// public void waitLNew(long l) { try { wait(l); } catch (Throwable t) {} } +// public void waitLINew(long l, int i) { try { wait(l,i); } catch (Throwable t) {} } +} + +aspect AspectToIntroduce_clone { + introduction SomeType { + public Object cloneNew() { try { return clone(); } catch (Throwable t) {} return null; } + } +} + +aspect AspectToIntroduce_equals { + introduction SomeType { + public boolean equalsNew(Object o) { return equals(o); } + } +} + +aspect AspectToIntroduce_finalize { + introduction SomeType { + public void finalizeNew() { try { finalize(); } catch (Throwable t) {} } + } +} + +aspect AspectToIntroduce_getClass { + introduction SomeType { + public Class getClassNew() { return getClass(); } + } +} + +aspect AspectToIntroduce_hashCode { + introduction SomeType { + public int hashCodeNew() { return hashCode(); } + } +} + +aspect AspectToIntroduce_notify { + introduction SomeType { + public void notifyNew() { try { notify(); } catch (Throwable t) {} } + } +} + +aspect AspectToIntroduce_notifyAll { + introduction SomeType { + public void notifyAllNew() { try { notifyAll(); } catch (Throwable t) {} } + } +} + +aspect AspectToIntroduce_toString { + introduction SomeType { + public String toStringNew() { return toString(); } + } +} + +aspect AspectToIntroduce_wait { + introduction SomeType { + public void waitNew() { try { wait(); } catch (Throwable t) {} } + } +} + +aspect AspectToIntroduce_waitL { + introduction SomeType { + public void waitLNew(long l) { try { wait(l); } catch (Throwable t) {} } + } +} + +aspect AspectToIntroduce_waitLI { + introduction SomeType { + public void waitLINew(long l, int i) { try { wait(l,i); } catch (Throwable t) {} } + } +} diff --git a/tests/new/Clazz.java b/tests/new/Clazz.java new file mode 100644 index 000000000..2e2af67a7 --- /dev/null +++ b/tests/new/Clazz.java @@ -0,0 +1,6 @@ +import org.aspectj.testing.*; +class Clazz { + public static void main(String[] args) { + Tester.check(true, "compiled"); + } +} diff --git a/tests/new/Client.java b/tests/new/Client.java new file mode 100644 index 000000000..312520dba --- /dev/null +++ b/tests/new/Client.java @@ -0,0 +1,109 @@ +import org.aspectj.testing.Tester; + +aspect ClientFlow percflow(entries(Client)) { + pointcut entries(Client c): + this(c) && (call(void Server.doService1(Object)) || + call(void Server.doService2())); + + Client client; + before (Client c): entries(c) { client = c; } + + pointcut workPoints(): + (this(ServiceWorker1) && call(void doWorkItemA())) || + (this(ServiceWorker2) && call(void doWorkItemB())) || + (this(ServiceWorker3) && call(void doWorkItemC())) || + (this(ServiceWorker4) && call(void doWorkItemD())); + + Object around(): workPoints() { + //System.out.println("at work: " + thisJoinPoint.methodName); + client.count++; + return proceed(); + //return; + } + + void util(Client c) { + c.count++; + client.count++; + } +} + + +public class Client { + public static void main(String[] args) { test(); } + public static void test() { + Client c = new Client(); + Server s = new Server(); + + c.requestServices(s); + + Tester.checkEqual(c.count, 5, "A+B+C+2*D"); + + Tester.check("WorkA"); + Tester.check("WorkB"); + Tester.check("WorkC"); + Tester.check("WorkD"); + } + + int count; + + public void requestServices(Server s) { + s.doService1("foo"); + s.doService2(); + } +} + +class Server { + + ServiceWorker1 worker1 = new ServiceWorker1(); + ServiceWorker2 worker2 = new ServiceWorker2(); + + public void doService1(Object data) { + worker1.doYourPart(); + } + + public void doService2() { + worker2.doYourPart(); + } +} + +class ServiceWorker1 { + void doYourPart() { + doWorkItemA(); + } + + void doWorkItemA() { Tester.note("WorkA");} +} + +class ServiceWorker2 { + ServiceWorker3 worker3 = new ServiceWorker3(); + ServiceWorker4 worker4 = new ServiceWorker4(); + + void doYourPart() { + worker3.doYourPart(); + worker4.doYourPart(); + doWorkItemB(); + } + + void doWorkItemB() { Tester.note("WorkB");} + +} + +class ServiceWorker3 { + void doYourPart() { + doWorkItemC(); + } + + void doWorkItemC() { Tester.note("WorkC"); } +} + +class ServiceWorker4 { + void doYourPart() { + doWorkItemD(); + } + + void doWorkItemD() { + // charge extra for 'd' "by hand" + ClientFlow.aspectOf().client.count++; + Tester.note("WorkD"); + } +} diff --git a/tests/new/CombinedLogic.java b/tests/new/CombinedLogic.java new file mode 100644 index 000000000..948649280 --- /dev/null +++ b/tests/new/CombinedLogic.java @@ -0,0 +1,21 @@ +import org.aspectj.testing.Tester; + +/** + * Test for: PR #99 + */ + +public class CombinedLogic { + public static void main(String[] args) { test(); } + + public static void test() { + Object foo = null; + int baz = 1; + int foobaz = baz; + + if ((null == foo) && (baz != foobaz)) { + Tester.check(false, "better not"); + } else { + Tester.check(true, "it better be true"); + } + } +} diff --git a/tests/new/CommentAfterClass.java b/tests/new/CommentAfterClass.java new file mode 100644 index 000000000..5bebac797 --- /dev/null +++ b/tests/new/CommentAfterClass.java @@ -0,0 +1,13 @@ +import org.aspectj.testing.Tester; + +/** + * Test for: PR #99 + */ + +public class CommentAfterClass { + public static void main(String[] args) { test(); } + + public static void test() { + Tester.check(true, "it better be true"); + } +}//extra comment
\ No newline at end of file diff --git a/tests/new/Comments.java b/tests/new/Comments.java new file mode 100644 index 000000000..ca76512d0 --- /dev/null +++ b/tests/new/Comments.java @@ -0,0 +1,8 @@ +/**/ +import java.util.Iterator; + +/** + * Javadoc comment for this class + */ +public class MyIterator implements Iterator { +} diff --git a/tests/new/ComputedThrows.java b/tests/new/ComputedThrows.java new file mode 100644 index 000000000..fbaf33888 --- /dev/null +++ b/tests/new/ComputedThrows.java @@ -0,0 +1,28 @@ +import org.aspectj.testing.Tester; + +public class ComputedThrows { + public static void main(String[] args) { test(); } + public static void test() { + new ComputedThrows().bar(); + Tester.check("ran bar"); + Tester.check("caught Exception"); + } + void bar() throws Exception { + Tester.note("ran bar"); + throw new Exception(); + } +} + +aspect Aspect { + pointcut Foo(): within(ComputedThrows) && call(* ComputedThrows.bar(..)); + + declare soft: Exception: Foo(); + + void around(): Foo() { + try { + proceed(); + } catch (Exception e) { + Tester.note("caught Exception"); + } + } +} diff --git a/tests/new/ConstructorExecInit.java b/tests/new/ConstructorExecInit.java new file mode 100644 index 000000000..337fbbda3 --- /dev/null +++ b/tests/new/ConstructorExecInit.java @@ -0,0 +1,26 @@ +import org.aspectj.testing.*; + +/** + * -usejavac mode: no error + * not -usejavac mode: VerifyError + */ +public class ConstructorExecInit { + public static void main(String[] args) { + new ConstructorExecInit(); + Tester.checkAllEvents(); + } + static { + Tester.expectEvent("execution"); + Tester.expectEvent("initialization"); + } +} + +/** @testcase after returning from initialization and after executing constructor */ +aspect A { + after (Object target) : execution(*.new(..)) && target(target) { + Tester.event("execution"); + } + after () returning (Object target) : initialization(new(..)) { + Tester.event("initialization"); + } +} diff --git a/tests/new/ConstructorNotFound_PR408.java b/tests/new/ConstructorNotFound_PR408.java new file mode 100644 index 000000000..9a673ca75 --- /dev/null +++ b/tests/new/ConstructorNotFound_PR408.java @@ -0,0 +1,11 @@ +import org.aspectj.testing.*; +public class ConstructorNotFound_PR408 { + public static void main(String[] args) { + new ExtendsOuterAbstract_PR408().go(); + new OuterAbstract_PR408() {}.go(); + Tester.checkAllEvents(); + } + static { + Tester.expectEventsInString("ExtendsOuterAbstract_PR408.go,InnerAbstract.go,OuterAbstract_PR408.go"); + } +} diff --git a/tests/new/ConstructorSignatures.java b/tests/new/ConstructorSignatures.java new file mode 100644 index 000000000..cfb2a575a --- /dev/null +++ b/tests/new/ConstructorSignatures.java @@ -0,0 +1,39 @@ +// Does annotating 'new' with a type work as desired? + +import org.aspectj.testing.Tester; + +public class ConstructorSignatures { + public static void main(String[] args) { + new A1(); + Tester.checkEqual(A.a0, 2, "A0 advice overcalled"); + Tester.checkEqual(A.a1, 1, "A1 advice overcalled"); + Tester.checkEqual(A.b, 0, "B advice overcalled"); + A.a0 = A.a1 = A.b = 0; + + new B(); + Tester.checkEqual(A.a0, 0, "-A0 advice overcalled"); + Tester.checkEqual(A.a1, 0, "-A1 advice overcalled"); + Tester.checkEqual(A.b, 1, "-B advice overcalled"); + } +} + +class A0 { } + +class A1 extends A0 { } + +class B {} + +aspect A { + static int a0, a1, b; + /*static*/ before(): execution(A0+.new()) { //added + + a0++; + } + + /*static*/ before(): execution(A1.new()) { + a1++; + } + + /*static*/ before(): execution(B.new()) { + b++; + } +} diff --git a/tests/new/Counting1.java b/tests/new/Counting1.java new file mode 100644 index 000000000..d57789612 --- /dev/null +++ b/tests/new/Counting1.java @@ -0,0 +1,156 @@ +import java.util.Vector; +import org.aspectj.testing.*; + +public class Counting1 { + public static void main(String[] args) { + + Point pt1 = new Point(0, 0); + Point pt2 = new Point(4, 4); + Line ln1 = new Line(pt1, pt2); + + System.out.println(MoveTracking.testAndClear()); + ln1.translate(3, 6); + System.out.println(MoveTracking.testAndClear()); + + System.out.println(pt1.getX()); + Mobility.disableMoves(); + ln1.translate(3, 6); + System.out.println(pt1.getX()); + + } + + static class System { + static O out = new O(); + static class O { + public void println(Object o) {} + public void println(int i) {} + public void println(boolean b) {} + } + } +} + +class FigureEditor { + //... +} + +class Figure { + Vector elements = new Vector(); + //... +} + + + +interface FigureElement { + public void translate(int dx, int dy); + //... +} + +class Point implements FigureElement { + private int _x = 0, _y = 0; + + Point(int x, int y) { + _x = x; + _y = y; + } + + public void translate(int dx, int dy) { + setX(getX() + dx); + setY(getY() + dy); + } + + int getX() { return _x; } + int getY() { return _y; } + + void setX(int x) { _x = x; } + void setY(int y) { _y = y; } + + //... +} + +class Line implements FigureElement { + private Point _p1, _p2; + + Line (Point p1, Point p2) { + _p1 = p1; + _p2 = p2; + } + + public void translate(int dx, int dy) { + _p1.translate(dx, dy); + _p2.translate(dx, dy); + } + + Point getP1() { return _p1; } + Point getP2() { return _p2; } + + void setP1(Point p1) { _p1 = p1; } + void setP2(Point p2) { _p2 = p2; } + + //... +} + +aspect JoinPointCounting { + + static int n = 0; + static boolean enable = true; + + pointcut points(): + /* + instanceof(*) && + !(receptions(* *.new(..)) || + executions(* *.new(..))); + */ + + call(* *.*(..)) || + //receptions(* *.*(..)) || + execution(* *.*(..));/* || + gets(* *.*) || + sets(* *.*); + */ + + + before(): points() && !within(JoinPointCounting) { + if ( enable ) { + String s = thisJoinPoint + ""; + Tester.check(s.indexOf("$") == -1, s + " contains a $"); + } + } +} + + +aspect MoveTracking { + + static boolean flag = false; + + static boolean testAndClear() { + boolean result = flag; + flag = false; + return result; + } + + pointcut moves(): + call(void FigureElement.translate(int, int)) || + call(void Line.setP1(Point)) || + call(void Line.setP2(Point)) || + call(void Point.setX(int)) || + call(void Point.setY(int)); + + after(): moves() { + flag = true; + } + } + +aspect Mobility { declare dominates: Mobility, MoveTracking; + private static boolean enableMoves = true; + + static void enableMoves() { enableMoves = true; } + static void disableMoves() { enableMoves = false; } + + void around(): MoveTracking.moves() { + if ( enableMoves ) + proceed(); //!!! in versions prior to 0.7b10 runNext is a + //!!! method on the join point object, so the + //!!! syntax of this call is slightly different + //!!! than in the paper + } +} diff --git a/tests/new/Counting3.java b/tests/new/Counting3.java new file mode 100644 index 000000000..7c3486fea --- /dev/null +++ b/tests/new/Counting3.java @@ -0,0 +1,51 @@ +import java.util.Vector; +import org.aspectj.testing.*; + +public class Counting3 { + public static void main(String[] args) { + Testing.start(); + new Counting3().f(); + Testing.finish(); + } + int j; + void f() { + j = 13; + int i = j; + } +} + +class Testing { + static void start() { + // - e main - - ca f() - - ex f() - - set j --------- - get j --------- + Tester.expectEventsInString("e,egs,cegs,c,cgs,cegs,e,egs,cegs,s,gs,cgs,egs,cegs,g,gs,cgs,egs,cegs"); + // Tester.expectEventsInString("g,s,gs,c,e,cgs,egs,cegs"); // old, incorrect (matching dups) + } + static void finish() { + Tester.checkAllEvents(); + } +} + +aspect JoinPointCounting { + + pointcut g(): get(* *.*) && within(Counting3); + before(): g() { a("g"); } + + pointcut s(): set(* *.*) && within(Counting3); + before(): s() { a("s"); } + + pointcut gs(): g() || s(); + before(): gs() { a("gs"); } + + pointcut c(): call(* *.*(..)) && within(Counting3) && ! call(* Testing.*()); + before(): c() { a("c"); } + pointcut e(): execution(* *.*(..)) && within(Counting3); + before(): e() { a("e"); } + + pointcut cgs(): c() || gs(); before(): cgs() { a("cgs"); } + pointcut egs(): e() || gs(); before(): egs() { a("egs"); } + + pointcut cegs(): c() || e() || gs(); before(): cegs() { a("cegs"); } + + static void a(String s) { Tester.event(s); } + +} diff --git a/tests/new/Cricket.java b/tests/new/Cricket.java new file mode 100644 index 000000000..33c1849e1 --- /dev/null +++ b/tests/new/Cricket.java @@ -0,0 +1,50 @@ +import org.aspectj.testing.Tester; + +public class Cricket { + public static void main(String[] args) { + Lib l = new Lib(); + Tester.event("call stringMethod"); + l.stringMethod(2); + Tester.event("call voidMethod"); + l.voidMethod(2); + Tester.checkEventsFromFile("Cricket.out"); + } +} + + +class Lib { + public void voidMethod(int count) { + if (count == 0) return; + else voidMethod(count - 1); + } + + public String stringMethod(int count) { + if (count == 0) return "0"; + else return count + "-" + stringMethod(count-1); + } +} + + +aspect Trace { + pointcut entry(): target(Lib) && call(* *(..)); + pointcut topEntry(): entry() && !cflowbelow(entry()); + + before(): topEntry() { + Tester.event("->top entry: " + thisJoinPoint); + } + + after(): entry() { + Tester.event("->exit: " + thisJoinPoint); + } + + after() returning (Object o): entry() { + Tester.event("->exit: " + thisJoinPoint + " with " + o); + } + after(): topEntry() { + Tester.event("->top exit: " + thisJoinPoint); + } + + after() returning (Object o): topEntry() { + Tester.event("->top exit: " + thisJoinPoint + " with " + o); + } +} diff --git a/tests/new/Cricket.out b/tests/new/Cricket.out new file mode 100644 index 000000000..30d28a050 --- /dev/null +++ b/tests/new/Cricket.out @@ -0,0 +1,20 @@ +call stringMethod
+->top entry: call(String Lib.stringMethod(int))
+->exit: call(String Lib.stringMethod(int))
+->exit: call(String Lib.stringMethod(int)) with 0
+->exit: call(String Lib.stringMethod(int))
+->exit: call(String Lib.stringMethod(int)) with 1-0
+->exit: call(String Lib.stringMethod(int))
+->exit: call(String Lib.stringMethod(int)) with 2-1-0
+->top exit: call(String Lib.stringMethod(int))
+->top exit: call(String Lib.stringMethod(int)) with 2-1-0
+call voidMethod
+->top entry: call(void Lib.voidMethod(int))
+->exit: call(void Lib.voidMethod(int))
+->exit: call(void Lib.voidMethod(int)) with null
+->exit: call(void Lib.voidMethod(int))
+->exit: call(void Lib.voidMethod(int)) with null
+->exit: call(void Lib.voidMethod(int))
+->exit: call(void Lib.voidMethod(int)) with null
+->top exit: call(void Lib.voidMethod(int))
+->top exit: call(void Lib.voidMethod(int)) with null
\ No newline at end of file diff --git a/tests/new/CyclicClassInheritance.java b/tests/new/CyclicClassInheritance.java new file mode 100644 index 000000000..c5cd0d7c0 --- /dev/null +++ b/tests/new/CyclicClassInheritance.java @@ -0,0 +1,12 @@ + +/** @testcase PR#567 no error for cyclic class inheritance if no classes implement the interfaces */ +public class CyclicClassInheritance { + + public static void main( String args[] ) { + throw new Error("not to be run - error case "); + } +} + + +class A extends B { A(); void a(){} } +class B extends A { B(); void b(){} } diff --git a/tests/new/CyclicInterfaceInheritance.java b/tests/new/CyclicInterfaceInheritance.java new file mode 100644 index 000000000..69e27d99a --- /dev/null +++ b/tests/new/CyclicInterfaceInheritance.java @@ -0,0 +1,15 @@ + +/** @testcase PR#567 no error for cyclic interface inheritance if no classes implement the interfaces */ +public class CyclicInterfaceInheritance { + + public static void main( String args[] ) { + throw new Error("not to be run - error case "); + } +} +// no bug if any class implements the interfaces +class C { + void a() { } + void b() { } +} +interface A extends B { void a(); } //ERR: A <- B <- A +interface B extends A { void b(); } //ERR: B <- A <- B diff --git a/tests/new/CyclicPointcuts.java b/tests/new/CyclicPointcuts.java new file mode 100644 index 000000000..9f5fc41b8 --- /dev/null +++ b/tests/new/CyclicPointcuts.java @@ -0,0 +1,73 @@ + +import org.aspectj.testing.Tester; + + + +/** PR#568 cyclic pointcut definitions */ +public class CyclicPointcuts { + + static aspect A { + /* @testcase pointcut depends on itself */ + pointcut p(): p(); // CE 11 recursion not permitted + + /* @testcase two pointcuts depends on each other */ + pointcut p1(): p2(); // CE 14 recursion not permitted + pointcut p2(): p1(); // line 15 + + /* @testcase three pointcuts depends on each other */ + pointcut pa(): pb(); // CE 18 recursion not permitted + pointcut pb(): pc(); // line 19 + pointcut pc(): pa(); // line 20 + } +} + +/** @testcase three pointcuts in different classes in a cycle */ +aspect One { + pointcut p() : Two.p(); // line 26 +} +aspect Two { + pointcut p() : Three.p(); // line 29 +} +aspect Three { + pointcut p() : One.p(); // CE 32 recursion not permitted +} + +/** @testcase three pointcuts in different classes (sub, super, other) in a cycle */ +abstract aspect Base { + pointcut base() : A.p(); // line 37 +} +aspect A { + pointcut p() : Derived.p(); // line 40 +} +aspect Derived extends Base { + pointcut p() : base(); // CE 43 recursion not permitted +} + +aspect Driver { + // error test, but... + static { + Tester.expectEvent("Derived.p()"); + Tester.expectEvent("Three.p()"); + Tester.expectEvent("CyclicPointcuts.A.p()"); + Tester.expectEvent("CyclicPointcuts.A.p1()"); + Tester.expectEvent("CyclicPointcuts.A.()"); + } + before() : Derived.p() { + Tester.event("Derived.p()"); + } + before() : Three.p() { + Tester.event("Three.p()"); + } + before() : CyclicPointcuts.A.p() { + Tester.event("CyclicPointcuts.A.p()"); + } + before() : CyclicPointcuts.A.p1() { + Tester.event("CyclicPointcuts.A.p1()"); + } + before() : CyclicPointcuts.A.pa() { + Tester.event("CyclicPointcuts.A.pa()"); + } + +} + + diff --git a/tests/new/DeclarationCollisionCE.java b/tests/new/DeclarationCollisionCE.java new file mode 100644 index 000000000..3ad4f4f16 --- /dev/null +++ b/tests/new/DeclarationCollisionCE.java @@ -0,0 +1,31 @@ + +/** @testcase expect CE for declaration collision between subaspects instead of domination order */ +public class DeclarationCollisionCE { + public static void main (String[] args) { + C s = new C(); + System.err.println("title: " + s.title()); + } +} + +class C {} + +// bug: dominates clause prevents collision error +abstract aspect AA dominates B { + // same result if this line is uncommented + //public String C.title() { return "[AA] C.title()"; } +} + +aspect A extends AA { // implicitly dominates AA + // dominates AA's declaration, overriding Super.title + public String C.title() { // CE 21 collision with B declaration + return "[A] C.title()" ; + } +} + +aspect B extends AA { // explicitly dominated by AA ?? --> and hence by A?? + // B fails to dominate AA's declaration, overriding Super.title + public String C.title() { // CE 28 collision with A declaration + return "[B] C.title()" ; + } +} + diff --git a/tests/new/DeclareAccess.java b/tests/new/DeclareAccess.java new file mode 100644 index 000000000..a57363d52 --- /dev/null +++ b/tests/new/DeclareAccess.java @@ -0,0 +1,37 @@ +import org.aspectj.testing.*; + +public class DeclareAccess { + public static void main (String[] args) { + Tester.event("main"); + Target t = new Target(); + Aspect a = Aspect.aspectOf(); + a.tryPI(t); + Tester.checkAllEvents(); + } + + static { + Tester.expectEvent("run"); + Tester.expectEvent("main"); + Tester.expectEvent("value"); + } +} + +class Target { + public String value() { + Tester.event("run"); + return "value"; + } +} + +/** @testcase private inner interface accessible in scope when declared on outer class */ +aspect Aspect { + private interface PI { + public String value(); + } + public void tryPI(Target t) { + PI pi = (PI) t; + Tester.event(pi.value()); + } + /** @testcase private interface declared on Target */ + declare parents: Target implements PI; +} diff --git a/tests/new/DeclareAspectConstructorCE.java b/tests/new/DeclareAspectConstructorCE.java new file mode 100644 index 000000000..864d5f097 --- /dev/null +++ b/tests/new/DeclareAspectConstructorCE.java @@ -0,0 +1,11 @@ + + +/** @testcase PR851 declaring an aspect constructor with argument should be prohibited */ + +aspect A { + A() {} +} + +aspect B { + A.new(int i) {} // CE 10 +} diff --git a/tests/new/DeclareClassExtendsInterface.java b/tests/new/DeclareClassExtendsInterface.java new file mode 100644 index 000000000..8b5454cec --- /dev/null +++ b/tests/new/DeclareClassExtendsInterface.java @@ -0,0 +1,11 @@ + + + + +/** @testcase PR853 declare class extends interface */ + +class C {} + +aspect A { + declare parents: C extends java.io.Serializable; // CE 10 +}
\ No newline at end of file diff --git a/tests/new/DeclareClassImplementsClass.java b/tests/new/DeclareClassImplementsClass.java new file mode 100644 index 000000000..f10c574cb --- /dev/null +++ b/tests/new/DeclareClassImplementsClass.java @@ -0,0 +1,11 @@ + + +/** @testcase PR853 declare class implements class CE */ + +class C {} + +class B {} + +aspect A { + declare parents: C implements B; // CE 10 +}
\ No newline at end of file diff --git a/tests/new/DeclareInterfaceConstructor.java b/tests/new/DeclareInterfaceConstructor.java new file mode 100644 index 000000000..a823faf5d --- /dev/null +++ b/tests/new/DeclareInterfaceConstructor.java @@ -0,0 +1,22 @@ + +import org.aspectj.testing.Tester; + +/** @testcase PR#884 declare constructor on interface subclasses */ +public class DeclareInterfaceConstructor { + public static void main(String[] args) { + X x = new Z(1); + if (1 != x.i) { + Tester.check(false, "bad constructor initialization"); + } + } +} + +interface X {} + +class Z implements X {} + +aspect Y { + public int X.i; + public X+.new(final int i) {this.i = i;} +} + diff --git a/tests/new/DeclareInterfaceExtendsClass.java b/tests/new/DeclareInterfaceExtendsClass.java new file mode 100644 index 000000000..cb255d26c --- /dev/null +++ b/tests/new/DeclareInterfaceExtendsClass.java @@ -0,0 +1,11 @@ + + +/** @testcase PR853 declare interface extends class CE */ + +interface I {} + +class C {} + +aspect A { + declare parents: I extends C; // CE 10 +}
\ No newline at end of file diff --git a/tests/new/DeclareInterfaceImplementsClass.java b/tests/new/DeclareInterfaceImplementsClass.java new file mode 100644 index 000000000..9e4841624 --- /dev/null +++ b/tests/new/DeclareInterfaceImplementsClass.java @@ -0,0 +1,11 @@ + + +/** @testcase PR853 declare interface implements class CE */ + +interface I {} + +class B {} + +aspect A { + declare parents: I implements B; // CE 10 - XXX error says "extends" - weak +}
\ No newline at end of file diff --git a/tests/new/DeclareInterfaceImplementsInterface.java b/tests/new/DeclareInterfaceImplementsInterface.java new file mode 100644 index 000000000..c8b21ddd8 --- /dev/null +++ b/tests/new/DeclareInterfaceImplementsInterface.java @@ -0,0 +1,11 @@ + + +/** @testcase PR853 declare interface implements interface CE */ + +interface I {} + +interface I2 {} + +aspect A { + declare parents: I implements I2; // CE 10 +}
\ No newline at end of file diff --git a/tests/new/DeclareMethodCE.java b/tests/new/DeclareMethodCE.java new file mode 100644 index 000000000..ded55022f --- /dev/null +++ b/tests/new/DeclareMethodCE.java @@ -0,0 +1,11 @@ + + +/** PR#888 ajc crashes given method in declared method */ +class B {} + +aspect A { + void B.n() { + void n() { // CE 8 method declared in method + } + } +} diff --git a/tests/new/DeclareOnlyAspectConstructorCE.java b/tests/new/DeclareOnlyAspectConstructorCE.java new file mode 100644 index 000000000..11bde660b --- /dev/null +++ b/tests/new/DeclareOnlyAspectConstructorCE.java @@ -0,0 +1,11 @@ + + + +/** @testcase PR851 declaring an aspect constructor with argument should be prohibited - sole constructor */ + +aspect A { +} + +aspect B { + A.new(int i) {} // CE 10 +} diff --git a/tests/new/DeclareParentsNonsenseCE.java b/tests/new/DeclareParentsNonsenseCE.java new file mode 100644 index 000000000..bf567d595 --- /dev/null +++ b/tests/new/DeclareParentsNonsenseCE.java @@ -0,0 +1,8 @@ + +public class DeclareParentsNonsenseCE { } +aspect A { + /** @testcase PR#652 declare parent accepting interface for extension */ + declare parents: DeclareParentsNonsenseCE extends java.io.Serializable; // CE here + /** @testcase PR#652 declare parent accepting class for implementation */ + declare parents: DeclareParentsNonsenseCE implements java.util.Observable; // CE here +} diff --git a/tests/new/DeclareSoft.java b/tests/new/DeclareSoft.java new file mode 100644 index 000000000..095963f5b --- /dev/null +++ b/tests/new/DeclareSoft.java @@ -0,0 +1,84 @@ +import org.aspectj.testing.Tester; +import java.io.*; +import org.aspectj.lang.*; + +public class DeclareSoft { + public static void main(String[] args) { + new C().m1(); + try { + new C().m2(); + } catch (SoftException se) { + Tester.note("m2-soft"); + } + + try { + new C().m3(); + } catch (SoftException se) { + Tester.check(false, "already caught"); + } + + try { + new C().throwIt(); + } catch (SoftException se) { + Tester.note("throwIt-soft"); + } catch (Throwable t) { + Tester.check(false, "should have been softened: " + t); + } + + try { + new C().pretendsToThrow(); + } catch (IOException ioe) { + Tester.check(false, "bad IO"); + } + + Tester.check("m2-soft"); + Tester.check("around-m3"); + } +} + +class C { + public void throwIt() throws Throwable { + throw makeThrowable(); + } + + public void pretendsToThrow() throws IOException, ClassNotFoundException { + + } + + private Throwable makeThrowable() { + return new Exception("make me soft"); + } + + + public void m1() { + } + + public void m2() { + new File("___hi").getCanonicalPath(); + new FileInputStream("___bye"); + } + + public void m3() { + new FileInputStream("___bye"); + new File("___hi").getCanonicalPath(); + } +} + +aspect B { + declare soft: Exception: execution(* C.throwIt()); + + declare soft: ClassNotFoundException: call(* C.pretendsToThrow()); +} + + +aspect A { + declare soft: IOException: execution(* C.*(..)); + + void around(): execution(void C.m3()) { + try { + proceed(); + } catch (IOException ioe) { + Tester.note("around-m3"); + } + } +} diff --git a/tests/new/DeclareSoft2.java b/tests/new/DeclareSoft2.java new file mode 100644 index 000000000..26248898c --- /dev/null +++ b/tests/new/DeclareSoft2.java @@ -0,0 +1,21 @@ +import java.io.IOException; + +class DeclareSoft2 { + public static void main(String[] x) { + foo(); + } + + static void foo() throws IOException { + throw new IOException(); + } + +} + +aspect A { + + void around(): call(void foo()) { + try { proceed(); } + catch (IOException e) {} + } + declare soft: IOException: call(void foo()); +} diff --git a/tests/new/DeclareWarningMain.java b/tests/new/DeclareWarningMain.java new file mode 100644 index 000000000..243a4668b --- /dev/null +++ b/tests/new/DeclareWarningMain.java @@ -0,0 +1,19 @@ +import org.aspectj.testing.*; + +public class DeclareWarningMain { + public static void main (String[] args) { // DW 5 main + Tester.checkAllEvents(); + } + static { + Tester.expectEvent("before"); + } +} + +aspect Warnings { + declare warning : execution(static void main(String[])) : "main"; // for DW 5 main + + // just to show that pointcut is valid - works if warning removed + before() : execution(static void main(String[])) { + Tester.event("before"); + } +} diff --git a/tests/new/DeclaredExcs.java b/tests/new/DeclaredExcs.java new file mode 100644 index 000000000..21b1f1009 --- /dev/null +++ b/tests/new/DeclaredExcs.java @@ -0,0 +1,97 @@ +import org.aspectj.testing.Tester; + +public class DeclaredExcs { + public static void main(String[] args) { test(); } + + public static void test() { + Foo foo = new Foo(); + + Tester.checkEqual(foo.foo(), "success", "foo()"); + try { + foo.bar(false); + } catch (Exception e) { + Tester.check(false, "shouldn't catch"); + } + + try { + Bar bar = new Bar(false); + } catch (MyException e) { + Tester.check(false, "shouldn't catch"); + } + + try { + Bar bar = Bar.getNewBar(true); + Tester.check(false, "shouldn't get here"); + } catch (MyException e) { + Tester.check(true, "should catch"); + } + } +} + +class Foo { + public void bar(boolean throwIt) throws Exception { + if (throwIt) { + throw new MyException("you asked for it"); + } + } + + public String foo() { + try { + bar(false); + } catch (Exception exc) { + Tester.check(false, "shouldn't catch anything"); + } + + try { + bar(true); + } catch (MyException exc) { + return "success"; + } catch (Exception e1) { + return "failure"; + } + + return "failure"; + } +} + +class Bar { + String value; + + public static Bar getNewBar(boolean throwIt) throws MyException { + return new Bar(throwIt); + } + + public Bar(boolean throwIt) throws MyException { + if (throwIt) { + throw new MyException("you asked for it from constructor"); + } + value = "boolean"; + } + + public Bar(String value) { + this.value = value; + } +} + + +class MyException extends Exception { + public MyException(String label) { + super(label); + } +} + +aspect A { + before (): this(*) && execution(* *(..)) || execution(new(..)) { + //System.out.println("entering: "+thisJoinPoint); + } + after (): this(*) && execution(* *(..)) || execution(new(..)) { + //System.out.println("exiting: "+thisJoinPoint); + } + + Object around(): this(*) && call(* *(..)) { + //System.out.println("start around: "+thisJoinPoint); + Object ret = proceed(); + //System.out.println("end around: "+thisJoinPoint); + return ret; + } +} diff --git a/tests/new/DefiniteStatic.java b/tests/new/DefiniteStatic.java new file mode 100644 index 000000000..7f9db6a12 --- /dev/null +++ b/tests/new/DefiniteStatic.java @@ -0,0 +1,11 @@ + +class Type { } + +class bat { + public static final Type SOURCE = new Type(); +} +public class DefiniteStatic { + protected static final Type SINK = bat.SOURCE; + public Type sink = SINK; // incorrect CE: field SINK might not have a value + public static void main(String[] args) { } +} diff --git a/tests/new/DeprecationWarning.java b/tests/new/DeprecationWarning.java new file mode 100644 index 000000000..0748132d1 --- /dev/null +++ b/tests/new/DeprecationWarning.java @@ -0,0 +1,18 @@ + +import org.aspectj.testing.Tester; +import org.aspectj.testing.Tester; +import java.rmi.RMISecurityException; // deprecated class + +/** @testcase PR#602 PUREJAVA no deprecation warnings (regardless of -deprecation flag) */ +public class DeprecationWarning { + public static void main(String[] args) { + boolean result = false; + try { + if (!result) throw new RMISecurityException("ok"); // CW 11 deprecated class + } catch (RMISecurityException e) { + result = true; + } + Tester.check(result, "no RMISecurityException"); + } + +} diff --git a/tests/new/Dominates.java b/tests/new/Dominates.java new file mode 100644 index 000000000..c232c4258 --- /dev/null +++ b/tests/new/Dominates.java @@ -0,0 +1,144 @@ +import org.aspectj.testing.*; + +/****************************** +Full_Name: Eelco Rommes +Version: ajc version 0.7beta7 (built Oct 6, 2000 4:03 PM PST) running on java 1.3.0 +OS: Win 98 +Submission from: mede.serc.nl (192.87.7.62) + + +I have one aspect using introduction to make some classes +implement certain interfaces. In another aspect, these +introductions are used to define pointcuts. The compiler +warns me, however, that the advice coupled to these pointcuts +have no target. This, because it apparently does not see +how the introduction-aspect changes the class-hierarchy. +I have tried to use 'dominates' to force aspectJ to evaluate +the introduction-aspect first, but it doesn't work. +******************************/ + +public class Dominates { + public static void main(String[] args) { + new Dominates().go(args); + } + + void go(String[] args) { + new A().run(); + new ExtendsA().run(); + new ExtendsRunnable().run(); + Tester.check(Flags.run1, "Flags.run1"); + Tester.check(Flags.run2, "Flags.run2"); + Tester.check(Flags.run3, "Flags.run3"); + Tester.check(Flags.run4, "Flags.run4"); + Tester.check(ExtendsFlags.run1, "ExtendsFlags.run1"); + Tester.check(ExtendsFlags.run2, "ExtendsFlags.run2"); + Tester.check(ExtendsFlags.run3, "ExtendsFlags.run3"); + Tester.check(ExtendsFlags.run4, "ExtendsFlags.run4"); + Tester.check(ExtendsFlags.run5, "ExtendsFlags.run5"); + Tester.check(ExtendsFlags.run6, "ExtendsFlags.run6"); + } +} + +class A { + +} + +class Flags { + public static boolean run1 = false; + public static boolean run2 = false; + public static boolean run3 = false; + public static boolean run4 = false; +} + +aspect Aspect0 { + pointcut run(): call(* run(..)) && target(A); + before(): run() { + Flags.run1 = true; + } +} + +aspect Aspect00 { + pointcut run(): call(* run(..)) && target(Runnable+); + before(): run() { + Flags.run4 = true; + } +} + +aspect Aspect1 { + declare parents: A implements Runnable; + public void A.run() {} +} + +aspect Aspect2 { + pointcut run(): call(* run(..)) && target(A); + before(): run() { + Flags.run2 = true; + } +} + +aspect Aspect3 { + pointcut run(): call(* run(..)) && target(Runnable+); + before(): run() { + Flags.run3 = true; + } +} + +// ------------------------------ + +class ExtendsA { + +} + +class ExtendsRunnable { + public void run() {} +} + +class ExtendsFlags { + public static boolean run1 = false; + public static boolean run2 = false; + public static boolean run3 = false; + public static boolean run4 = false; + public static boolean run5 = false; + public static boolean run6 = false; +} + +aspect AspectExtends0 { + pointcut run(): call(* run(..)) && target(ExtendsA); + before(): run() { + ExtendsFlags.run1 = true; + } +} + +aspect AspectExtends00 { + pointcut run(ExtendsRunnable r): call(* run(..)) && target(r); + before(ExtendsRunnable r): run(r) { + if (r instanceof ExtendsA) { + ExtendsFlags.run5 = true; + } else { + ExtendsFlags.run6 = true; + } + } +} + +aspect AspectExtends1 { + declare parents: ExtendsA extends ExtendsRunnable; + public void ExtendsA.run() {} +} + +aspect AspectExtends2 { + pointcut run(): call(* run(..)) && target(ExtendsA); + before(): run() { + ExtendsFlags.run2 = true; + } +} + +aspect AspectExtends3 { + pointcut run(ExtendsRunnable r): call(* run(..)) && target(r); + before(ExtendsRunnable r): run(r) { + if (r instanceof ExtendsA) { + ExtendsFlags.run3 = true; + } else { + ExtendsFlags.run4 = true; + } + } +} diff --git a/tests/new/DominatesTypePattern.java b/tests/new/DominatesTypePattern.java new file mode 100644 index 000000000..5cfa55761 --- /dev/null +++ b/tests/new/DominatesTypePattern.java @@ -0,0 +1,21 @@ +import org.aspectj.testing.Tester; + +/** @testcase subtype pattern in dominates should pick out aspect subtypes */ +public class DominatesTypePattern { + public static void main (String[] args) { + String s = new C().method(); + Tester.check("pass".equals(s), + "\"pass\".equals(\"" + s + "\")"); + } +} + +class C {} + +// works if A is specified explicitly +abstract aspect AA dominates AA+ { // error: should dominate A + public String C.method() { return "pass"; } +} + +aspect A extends AA { + public String C.method() { return "fail"; } +} diff --git a/tests/new/DoubleClass1.java b/tests/new/DoubleClass1.java new file mode 100644 index 000000000..de9fa76df --- /dev/null +++ b/tests/new/DoubleClass1.java @@ -0,0 +1,7 @@ + +// PR#223 +class DoubleClass {} +public class DoubleClass1 { + public static void main(String[] ignored) { + } +} diff --git a/tests/new/DoubleClass2.java b/tests/new/DoubleClass2.java new file mode 100644 index 000000000..de1b99e49 --- /dev/null +++ b/tests/new/DoubleClass2.java @@ -0,0 +1,3 @@ + +// PR#223 +class DoubleClass {} diff --git a/tests/new/DoubledCalls.java b/tests/new/DoubledCalls.java new file mode 100644 index 000000000..3757f1d86 --- /dev/null +++ b/tests/new/DoubledCalls.java @@ -0,0 +1,20 @@ +import org.aspectj.testing.Tester; + +public class DoubledCalls { + public static void main(String[] args) { + new Runnable() { + public void run() { + new Integer(1).intValue(); + } + }.run(); + Tester.check(A.calledInteger, "A.calledInteger"); + } +} + +aspect A { + static boolean calledInteger = false; + + /*static*/ before(): call(* Integer.*(..)) { + A.calledInteger = true; + } +} diff --git a/tests/new/EachCFlow0.java b/tests/new/EachCFlow0.java new file mode 100644 index 000000000..c25a4547d --- /dev/null +++ b/tests/new/EachCFlow0.java @@ -0,0 +1,10 @@ +import org.aspectj.testing.Tester; +public class EachCFlowRoot0 { + public static void main(String[] args) { + Tester.check(true, "compiled"); + } +} +aspect A of eachcflow(A.pc() && !cflow(A.pc())) { + pointcut pc() : within(C) ; +} +class C {} diff --git a/tests/new/EachCFlowRoot0.java b/tests/new/EachCFlowRoot0.java new file mode 100644 index 000000000..c25a4547d --- /dev/null +++ b/tests/new/EachCFlowRoot0.java @@ -0,0 +1,10 @@ +import org.aspectj.testing.Tester; +public class EachCFlowRoot0 { + public static void main(String[] args) { + Tester.check(true, "compiled"); + } +} +aspect A of eachcflow(A.pc() && !cflow(A.pc())) { + pointcut pc() : within(C) ; +} +class C {} diff --git a/tests/new/EachCFlowRoot1.java b/tests/new/EachCFlowRoot1.java new file mode 100644 index 000000000..dfac549a8 --- /dev/null +++ b/tests/new/EachCFlowRoot1.java @@ -0,0 +1,11 @@ +import org.aspectj.testing.Tester; +public class EachCFlowRoot1 { + public static void main(String[] args) { + Tester.check(true, "compiled"); + } +} +aspect A of eachcflow(A.pctop()) { + pointcut pc() : within(C) ; + pointcut pctop(): pc() && !cflow(pc()); +} +class C {} diff --git a/tests/new/EachCFlowRoot2.java b/tests/new/EachCFlowRoot2.java new file mode 100644 index 000000000..90c2361ef --- /dev/null +++ b/tests/new/EachCFlowRoot2.java @@ -0,0 +1,13 @@ +import org.aspectj.testing.Tester; +public class EachCFlowRoot2 { + public static void main(String[] args) { + Tester.check(true, "compiled"); + } +} +aspect A of eachcflow(B.pctop()) { + pointcut pc() : within(C) ; +} +aspect B { + pointcut pctop(): within(C) && !cflow(within(C)); +} +class C {} diff --git a/tests/new/EachJVMOnSelf.java b/tests/new/EachJVMOnSelf.java new file mode 100644 index 000000000..cbbd1eeae --- /dev/null +++ b/tests/new/EachJVMOnSelf.java @@ -0,0 +1,20 @@ +import org.aspectj.testing.Tester; + +public class EachJVMOnSelf { + public static void main(String[] args) { + new C(); + + Tester.checkEqual(A.aspectOf().advisedNewClass, "C"); + } +} + +aspect A issingleton() { + String advisedNewClass = null; + + after () returning (): this(*) && execution(new(..)) { + advisedNewClass = thisJoinPoint.getSourceLocation().getWithinType().getName(); + } +} + +class C { +} diff --git a/tests/new/EachObjectInDeepPackage.java b/tests/new/EachObjectInDeepPackage.java new file mode 100644 index 000000000..9e52b4d08 --- /dev/null +++ b/tests/new/EachObjectInDeepPackage.java @@ -0,0 +1,9 @@ +package the.deep.pkg; + +import org.aspectj.testing.Tester; + +aspect Aspect pertarget(target(EachObjectTarget)) { + before(): call(void foo(..)) { + Tester.check(true, "Dummy test"); + } +} diff --git a/tests/new/EachObjectNoThis.java b/tests/new/EachObjectNoThis.java new file mode 100644 index 000000000..306df8944 --- /dev/null +++ b/tests/new/EachObjectNoThis.java @@ -0,0 +1,23 @@ +import org.aspectj.testing.Tester; + +public class EachObjectNoThis { + public static void main(String[] args) { + new C().foo(); + } +} + +class C { + public void foo() { + } +} + +aspect A /*of eachobject(!instanceof(Object))*/ { + { + // This doesn't appy + //Tester.checkFailed("this aspect shouldn't exist"); + } + before(): !target(Object) && call(* *(..)) { + Tester.checkFailed("this aspect shouldn't exist"); + } +} + diff --git a/tests/new/EachObjectTarget.java b/tests/new/EachObjectTarget.java new file mode 100644 index 000000000..9c5052342 --- /dev/null +++ b/tests/new/EachObjectTarget.java @@ -0,0 +1,12 @@ +import org.aspectj.testing.Tester; + +public class EachObjectTarget { + public static void main(String[] args) { + EachObjectTarget o = new EachObjectTarget(); + o.foo(); + } + + void foo() { + Tester.check(true, "Dummy test"); + } +} diff --git a/tests/new/EmptyStack.java b/tests/new/EmptyStack.java new file mode 100644 index 000000000..464b8e4c8 --- /dev/null +++ b/tests/new/EmptyStack.java @@ -0,0 +1,36 @@ +import org.aspectj.lang.*; +import org.aspectj.testing.*; +import java.io.*; + +public class EmptyStack{ + public static void main(String[] args){ + try { + EmptyStackAspect.InnerEmptyStackAspect a = EmptyStackAspect.InnerEmptyStackAspect.aspectOf(); + } catch (java.util.EmptyStackException ese) { + String msg = ""; + class PW extends PrintWriter { + PW() { super((Writer)null); } + String msg = ""; + public void write(int c) { msg += c; } + } + PW pw = new PW(); + ese.printStackTrace(pw); + Tester.check(false, pw.msg); + } catch (NoAspectBoundException nae) { + Tester.note("caught NoAspectBound"); + } + + Tester.check("caught NoAspectBound"); + } +} + +abstract aspect EmptyStackAspect { + pointcut testCut(); + + public static aspect InnerEmptyStackAspect percflow(testCut()){ + } +} + +aspect MyEmptyStackAspect extends EmptyStackAspect issingleton() { + pointcut testCut(): call(void EmptyStack.test(..)) ; +} diff --git a/tests/new/ExceptionNames.java b/tests/new/ExceptionNames.java new file mode 100644 index 000000000..ba628bda4 --- /dev/null +++ b/tests/new/ExceptionNames.java @@ -0,0 +1,26 @@ + +import org.aspectj.testing.Tester; + +// PR#125 + +public class ExceptionNames { + + public static void main(String[] args) { test(); } + + public static void test() { + String exception = ""; + java.lang.reflect.Method liveRoutine = null; + try { + liveRoutine.invoke(null,null); + } + catch (java.lang.reflect.InvocationTargetException e) { + System.out.println(" " + e.getTargetException()); + exception = e.getClass().toString(); + } + catch (Exception e) { + exception = e.getClass().toString(); + } + Tester.checkEqual(exception, "class java.lang.NullPointerException", "exception handled"); + } + private void foo() {} +} diff --git a/tests/new/ExpandedDotDotPattern.java b/tests/new/ExpandedDotDotPattern.java new file mode 100644 index 000000000..34531abdd --- /dev/null +++ b/tests/new/ExpandedDotDotPattern.java @@ -0,0 +1,138 @@ +import org.aspectj.testing.Tester; + +public class ExpandedDotDotPattern { + public static void main(String[] args) { + new A().foo(); + new B().foo(3); + new C().foo(3, 3); + new D().foo(3, 3, 3); + new E().foo(3, 3, 3, 3); + new F().foo(3, 3, 3, 3, 3); + Tester.checkEqual(A.count, 1 + 1 + 1 + 1 + 1, "not enough 0-ary"); + Tester.checkEqual(B.count, 0 + 2 + 3 + 4 + 5, "not enough 1-ary"); + Tester.checkEqual(C.count, 0 + 1 + 4 + 7 + 11, "not enough 2-ary"); + Tester.checkEqual(D.count, 0 + 1 + 3 + 8 + 15, "not enough 3-ary"); + Tester.checkEqual(E.count, 0 + 1 + 3 + 7 + 16, "not enough 4-ary"); + Tester.checkEqual(F.count, 0 + 1 + 3 + 7 + 15, "not enough 5-ary"); + } +} + +interface I { + void inc(); +} + +class A implements I { + static int count = 0; + public void inc() { count++; } + void foo() {} +} +class B implements I { + static int count = 0; + public void inc() { count++; } + void foo(int a) {} +} +class C implements I { + static int count = 0; + public void inc() { count++; } + void foo(int a, int b) {} +} +class D implements I { + static int count = 0; + public void inc() { count++; } + void foo(int a, int b, int c) {} +} +class E implements I { + static int count = 0; + public void inc() { count++; } + void foo(int a, int b, int c, int d) {} +} +class F implements I { + static int count = 0; + public void inc() { count++; } + void foo(int a, int b, int c, int d, int e) {} +} + + +aspect Aspect { + // zero + before(I i): this(i) && execution(void foo()) { + System.out.println(thisJoinPoint); + i.inc(); + } + + // one + before(I i): this(i) && execution(void foo( ..)) { i.inc(); } + + before(I i): this(i) && execution(void foo(int)) { + System.out.println("(int)" + thisJoinPoint); + i.inc(); + } + + // two + before(I i): this(i) && execution(void foo( .., ..)) { + System.out.println("(.., ..)" + thisJoinPoint); + i.inc(); + } + + before(I i): this(i) && execution(void foo(int, ..)) { i.inc(); } + + before(I i): this(i) && execution(void foo( .., int)) { + System.out.println("(.., int)" + thisJoinPoint); + i.inc(); + } + + before(I i): this(i) && execution(void foo(int, int)) { i.inc(); } + + // three + before(I i): this(i) && execution(void foo( .., .., ..)) { i.inc(); } + + before(I i): this(i) && execution(void foo( .., .., int)) { i.inc(); } + + before(I i): this(i) && execution(void foo( .., int, ..)) { i.inc(); } + + before(I i): this(i) && execution(void foo( .., int, int)) { i.inc(); } + + before(I i): this(i) && execution(void foo(int, .., ..)) { i.inc(); } + + before(I i): this(i) && execution(void foo(int, .., int)) { i.inc(); } + + before(I i): this(i) && execution(void foo(int, int, ..)) { i.inc(); } + + before(I i): this(i) && execution(void foo(int, int, int)) { i.inc(); } + + // four + + before(I i): this(i) && execution(void foo( .., .., .., ..)) { i.inc(); } + + before(I i): this(i) && execution(void foo( .., .., .., int)) { i.inc(); } + + before(I i): this(i) && execution(void foo( .., .., int, ..)) { i.inc(); } + + before(I i): this(i) && execution(void foo( .., .., int, int)) { i.inc(); } + + before(I i): this(i) && execution(void foo( .., int, .., ..)) { i.inc(); } + + before(I i): this(i) && execution(void foo( .., int, .., int)) { i.inc(); } + + before(I i): this(i) && execution(void foo( .., int, int, ..)) { i.inc(); } + + before(I i): this(i) && execution(void foo( .., int, int, int)) { i.inc(); } + + + before(I i): this(i) && execution(void foo(int, .., .., ..)) { i.inc(); } + + before(I i): this(i) && execution(void foo(int, .., .., int)) { i.inc(); } + + before(I i): this(i) && execution(void foo(int, .., int, ..)) { i.inc(); } + + before(I i): this(i) && execution(void foo(int, .., int, int)) { i.inc(); } + + before(I i): this(i) && execution(void foo(int, int, .., ..)) { i.inc(); } + + before(I i): this(i) && execution(void foo(int, int, .., int)) { i.inc(); } + + before(I i): this(i) && execution(void foo(int, int, int, ..)) { i.inc(); } + + before(I i): this(i) && execution(void foo(int, int, int, int)) { i.inc(); } + +} diff --git a/tests/new/ExpandedMethodSigs.java b/tests/new/ExpandedMethodSigs.java new file mode 100644 index 000000000..8fc1c57d0 --- /dev/null +++ b/tests/new/ExpandedMethodSigs.java @@ -0,0 +1,59 @@ +import org.aspectj.testing.Tester; + +public class ExpandedMethodSigs { + public static void main(String[] args) { + C0 c0 = new C0(); + c0.mI(); + c0.mI1(); + c0.mI2(); + c0.mC(); + + I1 i1 = new C0(); + i1.mI(); + i1.mI1(); + + C1 c1 = new C1(); + c1.mI(); + c1.mC1(); + } +} + +class C0 implements I1, I2 { + public void mI() { System.out.println("mI"); } + public void mI1() { System.out.println("mI1"); } + public void mI2() { System.out.println("mI2"); } + + public void mC() { System.out.println("mC"); } +} + +class C1 extends C0 { + public void mC() { System.out.println("mC from C1"); } + public void mC1() { System.out.println("mC1"); } +} + +interface I1 { + public void mI(); + public void mI1(); +} + +interface I2 { + public void mI(); + public void mI2(); +} + +aspect A { + static before(I1 i1): calls(void i1.*()) { System.out.println(">I1.* " + i1); } + static before(): calls(void I2.*()) { System.out.println(">I2.*"); } + static before(): calls(void C0.*()) { System.out.println(">C0.*"); } + static before(): calls(void C1.*()) { System.out.println(">C1.*"); } + + static before(): receptions(void I1.*()) { System.out.println("-I1.*"); } + static before(): receptions(void I2.*()) { System.out.println("-I2.*"); } + static before(): receptions(void C0.*()) { System.out.println("-C0.*"); } + + static after() returning(): receptions(I1.new()) { System.out.println("-I1.new"); } + static after() returning(): receptions(C0.new()) { System.out.println("-C0.new"); } + + static after() returning(): calls(C0, I1.new()) { System.out.println(">I1.new"); } + static after() returning(): calls(C0, C0.new()) { System.out.println(">C0.new"); } +} diff --git a/tests/new/ExtendInnerCE.java b/tests/new/ExtendInnerCE.java new file mode 100644 index 000000000..cddc98551 --- /dev/null +++ b/tests/new/ExtendInnerCE.java @@ -0,0 +1,8 @@ +/** @testcase TestCase PUREJAVA NullPointerException (not compiler error) when extending non-static inner class */ +public class ExtendInnerCE { } +class TargetClass Outer.Inner { } // s.b. error: Outer.this. is not accessible + +class Outer { + class Inner { + } +} diff --git a/tests/new/ExtendsOuterAbstract_PR408.java b/tests/new/ExtendsOuterAbstract_PR408.java new file mode 100644 index 000000000..335c7cd98 --- /dev/null +++ b/tests/new/ExtendsOuterAbstract_PR408.java @@ -0,0 +1,8 @@ +import org.aspectj.testing.*; +public class ExtendsOuterAbstract_PR408 extends OuterAbstract_PR408 { + public void go() { + InnerAbstract inner = new InnerAbstract("string") {}; + inner.go(); + Tester.event("ExtendsOuterAbstract_PR408.go"); + } +} diff --git a/tests/new/ExternalCalls.java b/tests/new/ExternalCalls.java new file mode 100644 index 000000000..d8d22c651 --- /dev/null +++ b/tests/new/ExternalCalls.java @@ -0,0 +1,22 @@ +import org.aspectj.testing.Tester; + +public class ExternalCalls { + public static void main(String[] args){ + Tester.checkEqual(new Test().go(), 1003); + + Tester.checkEqual(Math.max(1, 3), 3); + } +} + +class Test { + int go(){ + return Math.max(1, 3); + } +} + +aspect A percflow(this(Test) && execution(* go(..))) { + // ! call(* Test.go()) shouldn't do anything + int around(): call(int Math.*(..)) && ! call(* Test.go()) { + return proceed() + 1000; + } +} diff --git a/tests/new/FactorialCflow.java b/tests/new/FactorialCflow.java new file mode 100644 index 000000000..63c2723f3 --- /dev/null +++ b/tests/new/FactorialCflow.java @@ -0,0 +1,48 @@ + + +public class FactorialCflow { + static int fact(int i) { + return (i == 0 ? 1 : i * fact(i-1)); + } + public static void main(String args[]) { + System.err.println(expect); + System.err.println("---------- actual "); + System.err.println(720 == fact(6) ? "pass" : "fail"); + } + + static final String expect = "---------- expect " + // most-recent + + "\n5-6" + + "\n4-5" + + "\n3-4" + + "\n2-3" + + "\n1-2" + + "\n0-1" + // top + + "\n5@6" + + "\n4@6" + + "\n3@6" + + "\n2@6" + + "\n1@6" + + "\n0@6" + ; +} + +aspect A { + pointcut f(int i) : call(int fact(int)) && args(i); + + // most-recent + int around(int i, final int j) : f(i) && cflowbelow(f(j)) { + System.err.println(i + "-" + j); + int r = proceed(i, j); + return r; + } + + // top + int around(int i, final int j) : f(i) + && cflowbelow(cflow(f(j)) && !cflowbelow(f(int))) { + System.err.println(i + "@" + j); + int r = proceed(i, j); + return r; + } +} diff --git a/tests/new/FalseThrowsCE.java b/tests/new/FalseThrowsCE.java new file mode 100644 index 000000000..89fb3c21d --- /dev/null +++ b/tests/new/FalseThrowsCE.java @@ -0,0 +1,15 @@ +import org.aspectj.testing.Tester; + +/** + * @testTarget compilerErrors.false.exceptions Throwable treated as checked, false compiler error + */ +public class FalseThrowsCE { + public static void main(String[] args) { + try { + System.getProperty("").toString(); // potential NPE, SecurityException + } catch (Throwable e) { // (false) CE: Throwable never thrown + String s = "got " + e; + } + Tester.check(true,"ok - compiled without error"); + } +} diff --git a/tests/new/FieldFromImplementsNotFound.java b/tests/new/FieldFromImplementsNotFound.java new file mode 100644 index 000000000..e6662e281 --- /dev/null +++ b/tests/new/FieldFromImplementsNotFound.java @@ -0,0 +1,30 @@ +import org.aspectj.testing.Tester; +import java.io.*; + +// PR#96 + +interface HttpConstants { + static final String s = "s"; +} + +public aspect FieldFromImplementsNotFound implements HttpConstants { + public static void main(String[] args) { test(); } + + pointcut sendHeader(): + call(void LocalFile.sendHeader()); + + static String aspectField = "t"; + /*static*/ before(): sendHeader() { + aspectField += s; + } + + public static void test() { + new LocalFile().sendHeader(); + Tester.checkEqual(aspectField, "ts", "field + constant"); + } +} + +class LocalFile { + void sendHeader() { + } +} diff --git a/tests/new/FieldInitializerJoinPoints.java b/tests/new/FieldInitializerJoinPoints.java new file mode 100644 index 000000000..b8bfdad5a --- /dev/null +++ b/tests/new/FieldInitializerJoinPoints.java @@ -0,0 +1,61 @@ +// This test verifies that join points exist in the execution of field initializers. + +import org.aspectj.testing.Tester; + +public class FieldInitializerJoinPoints { + + static int jcount = 0; + static int kcount = 0; + static int lcount = 0; + static int mcount = 0; + + static int ncount = 0; + static int ocount = 0; + static int pcount = 0; + static int qcount = 0; + + static final int j = 99; // not even a set join point here. + static int k = 98; // a set join point + final int l = 97; // not a join point (NEW) + int m = 96; // yet another set join point + + static int n() { return 95; } + static int o() { return 94; } + static int p() { return 93; } + static int q() { return 92; } + + static final int n = n(); // a call join point + static int o = o(); // a call join point + final int p = p(); // a call join point + int q = q(); // a call join point + + public static void main(String[] args) { + new FieldInitializerJoinPoints(); + new FieldInitializerJoinPoints(); + + Tester.checkEqual(jcount, 0, "jcount"); + Tester.checkEqual(kcount, 1, "kcount"); + Tester.checkEqual(lcount, 0, "lcount"); + Tester.checkEqual(mcount, 2, "mcount"); + + Tester.checkEqual(ncount, 1, "ncount"); + Tester.checkEqual(ocount, 1, "ocount"); + Tester.checkEqual(pcount, 2, "pcount"); + Tester.checkEqual(qcount, 2, "qcount"); + } + +} + + +aspect A { + before(): set(int FieldInitializerJoinPoints.j) { FieldInitializerJoinPoints.jcount++; } + before(): set(int FieldInitializerJoinPoints.k) { FieldInitializerJoinPoints.kcount++; } + before(): set(int FieldInitializerJoinPoints.l) { FieldInitializerJoinPoints.lcount++; } + before(): set(int FieldInitializerJoinPoints.m) { FieldInitializerJoinPoints.mcount++; } + + before(): call(int FieldInitializerJoinPoints.n()) { FieldInitializerJoinPoints.ncount++; } + before(): call(int FieldInitializerJoinPoints.o()) { FieldInitializerJoinPoints.ocount++; } + before(): call(int FieldInitializerJoinPoints.p()) { FieldInitializerJoinPoints.pcount++; } + before(): call(int FieldInitializerJoinPoints.q()) { FieldInitializerJoinPoints.qcount++; } +} + diff --git a/tests/new/FieldInnerAccess.java b/tests/new/FieldInnerAccess.java new file mode 100644 index 000000000..f7a0c034f --- /dev/null +++ b/tests/new/FieldInnerAccess.java @@ -0,0 +1,47 @@ +import org.aspectj.testing.Tester; + +public class FieldInnerAccess { + public static void main(String[] args) { + Derived d = new Derived(); + d.m(); + Tester.checkAndClearEvents(new String[] {"lock: 1"}); + + d.mi(); + Tester.checkAndClearEvents(new String[] {"lock: 1"}); + + d.mib(); + Tester.checkAndClearEvents(new String[] {"lock: foo"}); + } +} + +class Base { + private static String lock = "foo"; + + public void mib() { + Runnable r = new Runnable() { + public void run() { + Tester.event("lock: " + lock); + } + }; + + r.run(); + } +} + +class Derived extends Base { + private static Object lock = new Integer(1); + + public void m() { + Tester.event("lock: " + lock); + } + + public void mi() { + Runnable r = new Runnable() { + public void run() { + Tester.event("lock: " + lock); + } + }; + + r.run(); + } +} diff --git a/tests/new/FieldPatterns.java b/tests/new/FieldPatterns.java new file mode 100644 index 000000000..e64f24c57 --- /dev/null +++ b/tests/new/FieldPatterns.java @@ -0,0 +1,50 @@ +import org.aspectj.testing.Tester; + +public class FieldPatterns { + public static void main(String[] args) { + SuperC sc = new SuperC(); + C c = new C(); + SubC subc = new SubC(); + + Tester.checkEqual(sc.name, "SuperC"); + Tester.checkEqual(sc.count, 1, "SuperC"); + + Tester.checkEqual(c.name, "C"); + Tester.checkEqual(c.count, 1, "C"); + + Tester.checkEqual(subc.name, "C"); + Tester.checkEqual(subc.count, 1, "SubC"); + + Tester.checkEqual(((SuperC)c).name, "SuperC"); + Tester.checkEqual(c.count, 2, "C as SuperC"); + + c.name = null; + } +} + + +class SuperC { + int count = 0; + String name = "SuperC"; +} + +class C extends SuperC { + String name = "C"; +} + +class SubC extends C { +} + +aspect A { + before(SuperC sc): get(String SuperC.name) && target(sc){ + sc.count++; + } + before(C c): get(String C.name) && target(c) { + c.count++; + } + + before(): set(String C.name) { + } +} + + diff --git a/tests/new/FinalConstructorParm.java b/tests/new/FinalConstructorParm.java new file mode 100644 index 000000000..e86afe6c0 --- /dev/null +++ b/tests/new/FinalConstructorParm.java @@ -0,0 +1,12 @@ +import org.aspectj.testing.Tester; +public class FinalConstructorParm { + int i; + public FinalConstructorParm(final int i) { // bad compiler error here - not in 10b1 + this.i = i; + } + public int lessOne() { return i-1;} + public static void main(String[] args) { + Tester.check(1== (new FinalConstructorParm(2)).lessOne(), + "final failed"); + } +} diff --git a/tests/new/FinalInLoop.java b/tests/new/FinalInLoop.java new file mode 100644 index 000000000..a2b2ed9de --- /dev/null +++ b/tests/new/FinalInLoop.java @@ -0,0 +1,16 @@ +import org.aspectj.testing.Tester; + +public class FinalInLoop { + /** @testcase PR#709 PUREJAVA final assignment in loop */ + public static void main (String[] args) { + for (int i = 0; i < 1; i++) { + final String s; + if (true) { + s = "true"; + } else { + s = "false"; + } + Tester.check("true".equals(s), "s not true"); + } + } +} diff --git a/tests/new/Finals.java b/tests/new/Finals.java new file mode 100644 index 000000000..9ee0d5e77 --- /dev/null +++ b/tests/new/Finals.java @@ -0,0 +1,42 @@ +import org.aspectj.testing.*; +public class Finals { + public static void main(String[] args) { + new Finals().go(args); + Tester.checkAllEvents(); + } + + static { + Tester.expectEventsInString("go,i1,i2"); + } + + void go(String[] args) { + Tester.event("go"); + } +} + +interface I { + public void i(); +} +aspect Aspect { + pointcut p1(): call(void go(..)) && target(Finals); + void around(): p1() { + new I() { + public void i() { + a("i1"); + proceed(); + } + }.i(); + } + + pointcut p2(String[] argss): call(void go(String[])) && args(argss) && target(Finals); + void around(final String[] argss): p2(argss) { + new I() { + public void i() { + a("i2"); + proceed(argss); + } + }.i(); + } + + static void a(String s) { Tester.event(s); } +} diff --git a/tests/new/FirstLineGuessOverRun.java b/tests/new/FirstLineGuessOverRun.java new file mode 100644 index 000000000..d0a0caeeb --- /dev/null +++ b/tests/new/FirstLineGuessOverRun.java @@ -0,0 +1,500 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +public class AJError +{ +/* + + + + + + + + + + + + + + + { + + + } + + + { + + { + + } + + + { + + + + + + + + { + + + + + + + + + + + + + + { + + + + + + + + + + + + + + + + + { + + + } + } + + } + + + + + + + { + + + + { + + + { + + + { + + } + + { + + } + } + + { + + } + } + } + + + + + + + + + + + + } + + { + + } + + { + + } + + { + + } + + { + + } + } + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + { + + } + + + { + + } +*/ + + + /* + + { + + + + { + + } + + + { + + + + + + } + } + + + { + + + + + } + + + + { + + + + + + { + + } + + + + + } + + + { + + + + + + { + + + + + + + } + + + } + + + { + + + } + + + { + + { + + } + + { + + + + } + + + { + + } + + } + + + + { + + } + + + { + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +*/ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +}
\ No newline at end of file diff --git a/tests/new/Fixes.java b/tests/new/Fixes.java new file mode 100644 index 000000000..1922506e7 --- /dev/null +++ b/tests/new/Fixes.java @@ -0,0 +1,67 @@ +import org.aspectj.testing.Tester; + +public class Fixes { + public static void main(String[] args) { new Fixes().realMain(args); } + public void realMain(String[] args) { + new TheObject().go(); + } +} + +class TheObject { + private int private_int; + void go () {} +} + +privileged aspect TheAspect pertarget(target(TheObject)) { + private TheObject theObject; + after() returning(TheObject obj): call(new()) { + theObject = obj; + } + after() returning(): call(* realMain(..)) { + start(); + postinc(); + preinc(); + postdec(); + predec(); + } + + void start() { + theObject.private_int = 3; + } + + void postinc() { + enter("postinc"); + a(theObject.private_int,3); + theObject.private_int++; + a(theObject.private_int,4); + } + + void preinc() { + enter("preinc"); + a(theObject.private_int,4); + ++theObject.private_int; + a(theObject.private_int,5); + } + + void postdec() { + enter("postdec"); + a(theObject.private_int,5); + theObject.private_int--; + a(theObject.private_int,4); + } + + void predec() { + enter("predec"); + a(theObject.private_int,4); + --theObject.private_int; + a(theObject.private_int,3); + } + + private String msg; + void enter(String msg) { + this.msg = msg; + } + void a(int a, int b) { + Tester.checkEqual(a,b,msg); + } +} diff --git a/tests/new/FloatPrivilegedRoundoff.java b/tests/new/FloatPrivilegedRoundoff.java new file mode 100644 index 000000000..9859c167c --- /dev/null +++ b/tests/new/FloatPrivilegedRoundoff.java @@ -0,0 +1,16 @@ +import org.aspectj.testing.Tester; + +public class FloatPrivilegedRoundoff { + private static float f = 0.3f; + + public static void main(String[] args) { + Tester.check(A.foo() == 0.3f, "didn't return original"); + Tester.check(f == 0.3f + 1, "didn't increment"); + } +} + +privileged aspect A { + static float foo() { + return (FloatPrivilegedRoundoff.f)++; + } +} diff --git a/tests/new/Foo.java b/tests/new/Foo.java new file mode 100644 index 000000000..a601d8625 --- /dev/null +++ b/tests/new/Foo.java @@ -0,0 +1,27 @@ +class Foo { + + public static void main(String[] args) { + (new Foo()).m1(); + System.out.println("---"); + (new Bar()).m1(); + } + + public void m1() { } +} + +class Bar extends Foo { + public void m1() { super.m1(); } +} + +aspect A { + static before(): instanceof(Foo) && executions(public * *(..)) { + System.out.println("executions"); + } + + + static before(): instanceof(Foo) && receptions(public * *(..)) { + System.out.println("receptions"); + } + +} + diff --git a/tests/new/FormalMatching.java b/tests/new/FormalMatching.java new file mode 100644 index 000000000..37c485e71 --- /dev/null +++ b/tests/new/FormalMatching.java @@ -0,0 +1,52 @@ +import org.aspectj.lang.*; +import org.aspectj.testing.*; + +public class FormalMatching { + public static void main(String[] args) { + new FormalMatching().realMain(args); + } + public void realMain(String[] args) { + call_v(); + call_vI(0); + call_vII(0,1); + call_i(); + call_iI(0); + call_iII(0,1); + Tester.checkAllEvents(); + } + + static String[] methods = { + "call_v", "call_vI", "call_vII", + "call_i", "call_iI", "call_iII", + }; + static { + for (int i = 0; i < methods.length; i++) { + Tester.expectEvent(methods[i]); + Tester.expectEvent(methods[i] + "-advice"); + } + } + + void call_v () { Tester.event("call_v"); } + void call_vI (int i0) { Tester.event("call_vI"); } + void call_vII(int i0, int i1) { Tester.event("call_vII"); } + + int call_i () { Tester.event("call_i"); return 0; } + int call_iI (int i0) { Tester.event("call_iI"); return 0; } + int call_iII(int i0, int i1) { Tester.event("call_iII"); return 0; } +} + +aspect Aspect { + pointcut args0(Object o): call(* call*()) && target(o); + pointcut args1(Object o, int i0): call(* call*(int)) && target(o) && args(i0); + pointcut args2(Object o, int i0, int i1): call(* call*(int,int)) && target(o) && args(i0, i1); + + before(Object o): args0(o) { a(thisJoinPoint); } + before(Object o, int i0): args1(o,i0) { a(thisJoinPoint); } + before(Object o, int i0, int i1): args2(o,i0,i1) { a(thisJoinPoint); } + + static void a(JoinPoint jp) { + Tester.event(jp.getSignature().getName() + "-advice"); + } +} + + diff --git a/tests/new/GeneratedStaticAsTransient.java b/tests/new/GeneratedStaticAsTransient.java new file mode 100644 index 000000000..d91a92d27 --- /dev/null +++ b/tests/new/GeneratedStaticAsTransient.java @@ -0,0 +1,69 @@ + +import org.aspectj.testing.*; +import java.lang.reflect.*; + +// XXX incomplete - find all cases of generated static fields +/** @testcase PR#704 mark generated static fields transient */ +public class GeneratedStaticAsTransient { + public static void main (String[] args) { + new GeneratedStaticAsTransient().callRun(); + checkStatic(GeneratedStaticAsTransient.class, false); + Tester.checkAllEvents(); + } + public void callRun() { run(); } + + public void run() { + Tester.event("run"); + Tester.check(null != A.aspectOf(this),"null != A.hasAspect(this)"); + Tester.check(null != C.aspectOf(this),"null != C.hasAspect(this)"); + Tester.check(null != B.aspectOf(),"null != B.hasAspect()"); + } + static { + Tester.expectEvent("after returning - target"); + Tester.expectEvent("after returning - this"); + Tester.expectEvent("after returning - cflow"); + Tester.expectEvent("run"); + } + public static void checkStatic(Class c, boolean requireStatic) { + boolean gotStatic = false; + Field[] fields = c.getFields(); + for (int i = 0; i < fields.length; i++) { + int mods = fields[i].getModifiers(); + //System.err.println("checking " + fields[i]); + if (Modifier.isStatic(mods)) { + //System.err.println(" static " + fields[i]); + if (!gotStatic) gotStatic = true; + if (!Modifier.isTransient(mods)) { + String m = "field " + i + " " + + c.getName() + "." + fields[i].getName() + + " is static but not transient. mods=" + mods; + //System.err.println(m); + Tester.check(false, m); + } + } + } + if (requireStatic) { + Tester.check(gotStatic, c + "no static field"); + } + } +} + +aspect A pertarget(callRun()) { + pointcut callRun() : call(void GeneratedStaticAsTransient.run()); + after () returning : callRun() { + Tester.event("after returning - target"); + GeneratedStaticAsTransient.checkStatic(A.class, false); + } +} +aspect B percflow(A.callRun()) { + after () returning : A.callRun() { + Tester.event("after returning - cflow"); + GeneratedStaticAsTransient.checkStatic(B.class, true); + } +} +aspect C perthis(A.callRun()) { + after () returning : A.callRun() { + Tester.event("after returning - this"); + GeneratedStaticAsTransient.checkStatic(C.class, false); + } +} diff --git a/tests/new/GeneratingDuplicateNamedAdviceMethodsInAbstractAspects.java b/tests/new/GeneratingDuplicateNamedAdviceMethodsInAbstractAspects.java new file mode 100644 index 000000000..e14c700bc --- /dev/null +++ b/tests/new/GeneratingDuplicateNamedAdviceMethodsInAbstractAspects.java @@ -0,0 +1,36 @@ +import org.aspectj.testing.Tester; +import org.aspectj.testing.Tester; + +public class GeneratingDuplicateNamedAdviceMethodsInAbstractAspects { + public static void main(String[] args) { + new GeneratingDuplicateNamedAdviceMethodsInAbstractAspects().realMain(args); + } + public void realMain(String[] args) { + new C().c(); + Tester.checkAllEvents(); + } + static { + Tester.expectEvent("c"); + } +} + +class C { + public void c() { Tester.event("c"); } +} + +abstract aspect A { + pointcut c(): call(void C.c()); + protected static void a(String str, Object o) { + Class c = o.getClass(); + Tester.event(str); + Tester.check(!A.class.equals(c), "A is abstract!"); + Tester.check(Inner.class.equals(c), "Inner must equal "+c); + } + after(): c() { a("after1", this); } + after(): c() { a("after2", this); } + before(): c() { a("before1", this); } + before(): c() { a("before2", this); } + void around(): c() { a("around1", this); proceed(); } + void around(): c() { a("around2", this); proceed(); } + static aspect Inner {} +} diff --git a/tests/new/GeneratingDuplicateNamedAdviceMethodsInAbstractAspectsWithExtendedAspect.java b/tests/new/GeneratingDuplicateNamedAdviceMethodsInAbstractAspectsWithExtendedAspect.java new file mode 100644 index 000000000..5c561cc75 --- /dev/null +++ b/tests/new/GeneratingDuplicateNamedAdviceMethodsInAbstractAspectsWithExtendedAspect.java @@ -0,0 +1,46 @@ +import org.aspectj.testing.Tester; +import org.aspectj.testing.Tester; + +public class + GeneratingDuplicateNamedAdviceMethodsInAbstractAspectsWithExtendedAspect +{ + public static void main(String[] args) { + new GeneratingDuplicateNamedAdviceMethodsInAbstractAspectsWithExtendedAspect().realMain(args); + } + public void realMain(String[] args) { + new C().c(); + Tester.checkAllEvents(); + } + static { + Tester.expectEvent("c"); + String[] strs = {"before","after","around"}; + for (int i = 0; i < strs.length; i++) { + int[] is = new int[] {1,2}; + for (int j = 0; j < is.length; j++) { + Tester.expectEvent(strs[i]+is[j]); + } + } + + } +} + +class C { + public void c() { Tester.event("c"); } +} + +abstract aspect A { + pointcut c(): call(void C.c()); + protected static void a(String str, Object o) { + Class c = o.getClass(); + Tester.event(str); + Tester.check(!A.class.equals(c), "A is abstract!"); + Tester.check(Inner.class.equals(c), "Inner must equal "+c); + } + after(): c() { a("after1", this); } + after(): c() { a("after2", this); } + before(): c() { a("before1", this); } + before(): c() { a("before2", this); } + void around(): c() { a("around1", this); proceed(); } + void around(): c() { a("around2", this); proceed(); } + static aspect Inner extends A {} +} diff --git a/tests/new/Gets.java b/tests/new/Gets.java new file mode 100644 index 000000000..f03a9689a --- /dev/null +++ b/tests/new/Gets.java @@ -0,0 +1,935 @@ +import org.aspectj.testing.*; + +public class Gets { + public static void main(String[] args) { + new Gets().go(); + } + + public int nums0 = 5; + public int nums1 = 5; + public int nums2 = 5; + public int nums3 = 5; + public int nums4 = 20; + public int nums5 = 9; + public int nums6 = 11; + public int nums7 = 9; + public int nums8 = 11; + public int nums9 = 5; + + void go() { + nums0 = 10; + nums1 += 5; + nums2 -= -5; + nums3 *= 2; + nums4 /= 2; + nums5++; + nums6--; + ++nums7; + --nums8; + nums9 = nums0; + + { int i = nums0; } + { int i = nums1; } + { int i = nums2; } + { int i = nums3; } + { int i = nums4; } + { int i = nums5; } + { int i = nums6; } + { int i = nums7; } + { int i = nums8; } + { int i = nums9; } + + Tester.check(GetAspect.bstar, + "Advice wasn't run for GetAspect.star"); + Tester.check(GetAspect.b0, + "Advice wasn't run for GetAspect.nums0"); + Tester.check(GetAspect.b1, + "Advice wasn't run for GetAspect.nums1"); + Tester.check(GetAspect.b2, + "Advice wasn't run for GetAspect.nums2"); + Tester.check(GetAspect.b3, + "Advice wasn't run for GetAspect.nums3"); + Tester.check(GetAspect.b4, + "Advice wasn't run for GetAspect.nums4"); + Tester.check(GetAspect.b5, + "Advice wasn't run for GetAspect.nums5"); + Tester.check(GetAspect.b6, + "Advice wasn't run for GetAspect.nums6"); + Tester.check(GetAspect.b7, + "Advice wasn't run for GetAspect.nums7"); + Tester.check(GetAspect.b8, + "Advice wasn't run for GetAspect.nums8"); + Tester.check(GetAspect.b9, + "Advice wasn't run for GetAspect.nums9"); + +// Tester.check(GetAspectOfEach.bstar, +// "Advice wasn't run for GetAspectOfEach.star"); +// Tester.check(GetAspectOfEach.b0, +// "Advice wasn't run for GetAspectOfEach.nums0"); +// Tester.check(GetAspectOfEach.b1, +// "Advice wasn't run for GetAspectOfEach.nums1"); +// Tester.check(GetAspectOfEach.b2, +// "Advice wasn't run for GetAspectOfEach.nums2"); +// Tester.check(GetAspectOfEach.b3, +// "Advice wasn't run for GetAspectOfEach.nums3"); +// Tester.check(GetAspectOfEach.b4, +// "Advice wasn't run for GetAspectOfEach.nums4"); +// Tester.check(GetAspectOfEach.b5, +// "Advice wasn't run for GetAspectOfEach.nums5"); +// Tester.check(GetAspectOfEach.b6, +// "Advice wasn't run for GetAspectOfEach.nums6"); +// Tester.check(GetAspectOfEach.b7, +// "Advice wasn't run for GetAspectOfEach.nums7"); +// Tester.check(GetAspectOfEach.b8, +// "Advice wasn't run for GetAspectOfEach.nums8"); +// Tester.check(GetAspectOfEach.b9, +// "Advice wasn't run for GetAspectOfEach.nums9"); + +// Tester.check(GetAspectWithBrackets.bstar, +// "Advice wasn't run for GetAspectWithBrackets.star"); +// Tester.check(GetAspectWithBrackets.b0, +// "Advice wasn't run for GetAspectWithBrackets.nums0"); +// Tester.check(GetAspectWithBrackets.b1, +// "Advice wasn't run for GetAspectWithBrackets.nums1"); +// Tester.check(GetAspectWithBrackets.b2, +// "Advice wasn't run for GetAspectWithBrackets.nums2"); +// Tester.check(GetAspectWithBrackets.b3, +// "Advice wasn't run for GetAspectWithBrackets.nums3"); +// Tester.check(GetAspectWithBrackets.b4, +// "Advice wasn't run for GetAspectWithBrackets.nums4"); +// Tester.check(GetAspectWithBrackets.b5, +// "Advice wasn't run for GetAspectWithBrackets.nums5"); +// Tester.check(GetAspectWithBrackets.b6, +// "Advice wasn't run for GetAspectWithBrackets.nums6"); +// Tester.check(GetAspectWithBrackets.b7, +// "Advice wasn't run for GetAspectWithBrackets.nums7"); +// Tester.check(GetAspectWithBrackets.b8, +// "Advice wasn't run for GetAspectWithBrackets.nums8"); +// Tester.check(GetAspectWithBrackets.b9, +// "Advice wasn't run for GetAspectWithBrackets.nums9"); + +// Tester.check(SetAspect.bstar, +// "Advice wasn't run for SetAspect.star"); +// Tester.check(SetAspect.b0, +// "Advice wasn't run for SetAspect.nums0"); +// Tester.check(SetAspect.b1, +// "Advice wasn't run for SetAspect.nums1"); +// Tester.check(SetAspect.b2, +// "Advice wasn't run for SetAspect.nums2"); +// Tester.check(SetAspect.b3, +// "Advice wasn't run for SetAspect.nums3"); +// Tester.check(SetAspect.b4, +// "Advice wasn't run for SetAspect.nums4"); +// Tester.check(SetAspect.b5, +// "Advice wasn't run for SetAspect.nums5"); +// Tester.check(SetAspect.b6, +// "Advice wasn't run for SetAspect.nums6"); +// Tester.check(SetAspect.b7, +// "Advice wasn't run for SetAspect.nums7"); +// Tester.check(SetAspect.b8, +// "Advice wasn't run for SetAspect.nums8"); +// Tester.check(SetAspect.b9, +// "Advice wasn't run for SetAspect.nums9"); + + Tester.check(SetAspect2.bstar, + "Advice wasn't run for SetAspect2.star"); + Tester.check(SetAspect2.b0, + "Advice wasn't run for SetAspect2.nums0"); + Tester.check(SetAspect2.b1, + "Advice wasn't run for SetAspect2.nums1"); + Tester.check(SetAspect2.b2, + "Advice wasn't run for SetAspect2.nums2"); + Tester.check(SetAspect2.b3, + "Advice wasn't run for SetAspect2.nums3"); + Tester.check(SetAspect2.b4, + "Advice wasn't run for SetAspect2.nums4"); + Tester.check(SetAspect2.b5, + "Advice wasn't run for SetAspect2.nums5"); + Tester.check(SetAspect2.b6, + "Advice wasn't run for SetAspect2.nums6"); + Tester.check(SetAspect2.b7, + "Advice wasn't run for SetAspect2.nums7"); + Tester.check(SetAspect2.b8, + "Advice wasn't run for SetAspect2.nums8"); + Tester.check(SetAspect2.b9, + "Advice wasn't run for SetAspect2.nums9"); + +// Tester.check(SetAspect3.bstar, +// "Advice wasn't run for SetAspect3.star"); +// Tester.check(SetAspect3.b0, +// "Advice wasn't run for SetAspect3.nums0"); +// Tester.check(SetAspect3.b1, +// "Advice wasn't run for SetAspect3.nums1"); +// Tester.check(SetAspect3.b2, +// "Advice wasn't run for SetAspect3.nums2"); +// Tester.check(SetAspect3.b3, +// "Advice wasn't run for SetAspect3.nums3"); +// Tester.check(SetAspect3.b4, +// "Advice wasn't run for SetAspect3.nums4"); +// Tester.check(SetAspect3.b5, +// "Advice wasn't run for SetAspect3.nums5"); +// Tester.check(SetAspect3.b6, +// "Advice wasn't run for SetAspect3.nums6"); +// Tester.check(SetAspect3.b7, +// "Advice wasn't run for SetAspect3.nums7"); +// Tester.check(SetAspect3.b8, +// "Advice wasn't run for SetAspect3.nums8"); +// Tester.check(SetAspect3.b9, +// "Advice wasn't run for SetAspect3.nums9"); + +// Tester.check(SetAspect4.bstar, +// "Advice wasn't run for SetAspect4.star"); +// Tester.check(SetAspect4.b0, +// "Advice wasn't run for SetAspect4.nums0"); +// Tester.check(SetAspect4.b1, +// "Advice wasn't run for SetAspect4.nums1"); +// Tester.check(SetAspect4.b2, +// "Advice wasn't run for SetAspect4.nums2"); +// Tester.check(SetAspect4.b3, +// "Advice wasn't run for SetAspect4.nums3"); +// Tester.check(SetAspect4.b4, +// "Advice wasn't run for SetAspect4.nums4"); +// Tester.check(SetAspect4.b5, +// "Advice wasn't run for SetAspect4.nums5"); +// Tester.check(SetAspect4.b6, +// "Advice wasn't run for SetAspect4.nums6"); +// Tester.check(SetAspect4.b7, +// "Advice wasn't run for SetAspect4.nums7"); +// Tester.check(SetAspect4.b8, +// "Advice wasn't run for SetAspect4.nums8"); +// Tester.check(SetAspect4.b9, +// "Advice wasn't run for SetAspect4.nums9"); + +// Tester.check(GetAspectOfEachWithBrackets.bstar, +// "Advice wasn't run for GetAspectOfEachWithBrackets.star"); +// Tester.check(GetAspectOfEachWithBrackets.b0, +// "Advice wasn't run for GetAspectOfEachWithBrackets.nums0"); +// Tester.check(GetAspectOfEachWithBrackets.b1, +// "Advice wasn't run for GetAspectOfEachWithBrackets.nums1"); +// Tester.check(GetAspectOfEachWithBrackets.b2, +// "Advice wasn't run for GetAspectOfEachWithBrackets.nums2"); +// Tester.check(GetAspectOfEachWithBrackets.b3, +// "Advice wasn't run for GetAspectOfEachWithBrackets.nums3"); +// Tester.check(GetAspectOfEachWithBrackets.b4, +// "Advice wasn't run for GetAspectOfEachWithBrackets.nums4"); +// Tester.check(GetAspectOfEachWithBrackets.b5, +// "Advice wasn't run for GetAspectOfEachWithBrackets.nums5"); +// Tester.check(GetAspectOfEachWithBrackets.b6, +// "Advice wasn't run for GetAspectOfEachWithBrackets.nums6"); +// Tester.check(GetAspectOfEachWithBrackets.b7, +// "Advice wasn't run for GetAspectOfEachWithBrackets.nums7"); +// Tester.check(GetAspectOfEachWithBrackets.b8, +// "Advice wasn't run for GetAspectOfEachWithBrackets.nums8"); +// Tester.check(GetAspectOfEachWithBrackets.b9, +// "Advice wasn't run for GetAspectOfEachWithBrackets.nums9"); + +// Tester.check(SetAspectOfEach.bstar, +// "Advice wasn't run for SetAspectOfEach.star"); +// Tester.check(SetAspectOfEach.b0, +// "Advice wasn't run for SetAspectOfEach.nums0"); +// Tester.check(SetAspectOfEach.b1, +// "Advice wasn't run for SetAspectOfEach.nums1"); +// Tester.check(SetAspectOfEach.b2, +// "Advice wasn't run for SetAspectOfEach.nums2"); +// Tester.check(SetAspectOfEach.b3, +// "Advice wasn't run for SetAspectOfEach.nums3"); +// Tester.check(SetAspectOfEach.b4, +// "Advice wasn't run for SetAspectOfEach.nums4"); +// Tester.check(SetAspectOfEach.b5, +// "Advice wasn't run for SetAspectOfEach.nums5"); +// Tester.check(SetAspectOfEach.b6, +// "Advice wasn't run for SetAspectOfEach.nums6"); +// Tester.check(SetAspectOfEach.b7, +// "Advice wasn't run for SetAspectOfEach.nums7"); +// Tester.check(SetAspectOfEach.b8, +// "Advice wasn't run for SetAspectOfEach.nums8"); +// Tester.check(SetAspectOfEach.b9, +// "Advice wasn't run for SetAspectOfEach.nums9"); + +// Tester.check(SetAspectOfEach2.bstar, +// "Advice wasn't run for SetAspectOfEach2.star"); +// Tester.check(SetAspectOfEach2.b0, +// "Advice wasn't run for SetAspectOfEach2.nums0"); +// Tester.check(SetAspectOfEach2.b1, +// "Advice wasn't run for SetAspectOfEach2.nums1"); +// Tester.check(SetAspectOfEach2.b2, +// "Advice wasn't run for SetAspectOfEach2.nums2"); +// Tester.check(SetAspectOfEach2.b3, +// "Advice wasn't run for SetAspectOfEach2.nums3"); +// Tester.check(SetAspectOfEach2.b4, +// "Advice wasn't run for SetAspectOfEach2.nums4"); +// Tester.check(SetAspectOfEach2.b5, +// "Advice wasn't run for SetAspectOfEach2.nums5"); +// Tester.check(SetAspectOfEach2.b6, +// "Advice wasn't run for SetAspectOfEach2.nums6"); +// Tester.check(SetAspectOfEach2.b7, +// "Advice wasn't run for SetAspectOfEach2.nums7"); +// Tester.check(SetAspectOfEach2.b8, +// "Advice wasn't run for SetAspectOfEach2.nums8"); +// Tester.check(SetAspectOfEach2.b9, +// "Advice wasn't run for SetAspectOfEach2.nums9"); + +// Tester.check(SetAspectOfEach3.bstar, +// "Advice wasn't run for SetAspectOfEach3.star"); +// Tester.check(SetAspectOfEach3.b0, +// "Advice wasn't run for SetAspectOfEach3.nums0"); +// Tester.check(SetAspectOfEach3.b1, +// "Advice wasn't run for SetAspectOfEach3.nums1"); +// Tester.check(SetAspectOfEach3.b2, +// "Advice wasn't run for SetAspectOfEach3.nums2"); +// Tester.check(SetAspectOfEach3.b3, +// "Advice wasn't run for SetAspectOfEach3.nums3"); +// Tester.check(SetAspectOfEach3.b4, +// "Advice wasn't run for SetAspectOfEach3.nums4"); +// Tester.check(SetAspectOfEach3.b5, +// "Advice wasn't run for SetAspectOfEach3.nums5"); +// Tester.check(SetAspectOfEach3.b6, +// "Advice wasn't run for SetAspectOfEach3.nums6"); +// Tester.check(SetAspectOfEach3.b7, +// "Advice wasn't run for SetAspectOfEach3.nums7"); +// Tester.check(SetAspectOfEach3.b8, +// "Advice wasn't run for SetAspectOfEach3.nums8"); +// Tester.check(SetAspectOfEach3.b9, +// "Advice wasn't run for SetAspectOfEach3.nums9"); + +// Tester.check(SetAspectOfEach4.bstar, +// "Advice wasn't run for SetAspectOfEach4.star"); +// Tester.check(SetAspectOfEach4.b0, +// "Advice wasn't run for SetAspectOfEach4.nums0"); +// Tester.check(SetAspectOfEach4.b1, +// "Advice wasn't run for SetAspectOfEach4.nums1"); +// Tester.check(SetAspectOfEach4.b2, +// "Advice wasn't run for SetAspectOfEach4.nums2"); +// Tester.check(SetAspectOfEach4.b3, +// "Advice wasn't run for SetAspectOfEach4.nums3"); +// Tester.check(SetAspectOfEach4.b4, +// "Advice wasn't run for SetAspectOfEach4.nums4"); +// Tester.check(SetAspectOfEach4.b5, +// "Advice wasn't run for SetAspectOfEach4.nums5"); +// Tester.check(SetAspectOfEach4.b6, +// "Advice wasn't run for SetAspectOfEach4.nums6"); +// Tester.check(SetAspectOfEach4.b7, +// "Advice wasn't run for SetAspectOfEach4.nums7"); +// Tester.check(SetAspectOfEach4.b8, +// "Advice wasn't run for SetAspectOfEach4.nums8"); +// Tester.check(SetAspectOfEach4.b9, +// "Advice wasn't run for SetAspectOfEach4.nums9"); + } + } + +aspect GetAspect { + static boolean bstar = false; + after(): get(int Gets.*) { + bstar = true; + } + static boolean b0 = false; + after(): get(int Gets.nums0) { + b0 = true; + } + static boolean b1 = false; + after(): get(int Gets.nums1) { + b1 = true; + } + static boolean b2 = false; + after(): get(int Gets.nums2) { + b2 = true; + } + static boolean b3 = false; + after(): get(int Gets.nums3) { + b3 = true; + } + static boolean b4 = false; + after(): get(int Gets.nums4) { + b4 = true; + } + static boolean b5 = false; + after(): get(int Gets.nums5) { + b5 = true; + } + static boolean b6 = false; + after(): get(int Gets.nums6) { + b6 = true; + } + static boolean b7 = false; + after(): get(int Gets.nums7) { + b7 = true; + } + static boolean b8 = false; + after(): get(int Gets.nums8) { + b8 = true; + } + static boolean b9 = false; + after(): get(int Gets.nums9) { + b9 = true; + } +} + +// aspect GetAspectWithBrackets { +// static boolean bstar = false; +// after(int n): get(int Gets.*)[n] { +// bstar = true; +// } +// static boolean b0 = false; +// after(int n): get(int Gets.nums0)[n] { +// b0 = true; +// } +// static boolean b1 = false; +// after(int n): get(int Gets.nums1)[n] { +// b1 = true; +// } +// static boolean b2 = false; +// after(int n): get(int Gets.nums2)[n] { +// b2 = true; +// } +// static boolean b3 = false; +// after(int n): get(int Gets.nums3)[n] { +// b3 = true; +// } +// static boolean b4 = false; +// after(int n): get(int Gets.nums4)[n] { +// b4 = true; +// } +// static boolean b5 = false; +// after(int n): get(int Gets.nums5)[n] { +// b5 = true; +// } +// static boolean b6 = false; +// after(int n): get(int Gets.nums6)[n] { +// b6 = true; +// } +// static boolean b7 = false; +// after(int n): get(int Gets.nums7)[n] { +// b7 = true; +// } +// static boolean b8 = false; +// after(int n): get(int Gets.nums8)[n] { +// b8 = true; +// } +// static boolean b9 = false; +// after(int n): get(int Gets.nums9)[n] { +// b9 = true; +// } +// } + +// aspect SetAspect { +// static boolean bstar = false; +// after(int d, int n): set(int Gets.*)[d][n] && withincode(void go()) { +// Tester.check(n == 10, "nums should be 10, not " + d + " for SetAspect"); +// bstar = true; +// } +// static boolean b0 = false; +// after(int d, int n): set(int Gets.nums0)[d][n] && withincode(void go()) { +// Tester.check(n == 10, "num0 should be 10, not " + d + " for SetAspect"); +// b0 = true; +// } +// static boolean b1 = false; +// after(int d, int n): set(int Gets.nums1)[d][n] && withincode(void go()) { +// Tester.check(n == 10, "num1 should be 10, not " + d + " for SetAspect"); +// b1 = true; +// } +// static boolean b2 = false; +// after(int d, int n): set(int Gets.nums2)[d][n] && withincode(void go()) { +// Tester.check(n == 10, "num2 should be 10, not " + d + " for SetAspect"); +// b2 = true; +// } +// static boolean b3 = false; +// after(int d, int n): set(int Gets.nums3)[d][n] && withincode(void go()) { +// Tester.check(n == 10, "num3 should be 10, not " + d + " for SetAspect"); +// b3 = true; +// } +// static boolean b4 = false; +// after(int d, int n): set(int Gets.nums4)[d][n] && withincode(void go()) { +// Tester.check(n == 10, "num4 should be 10, not " + d + " for SetAspect"); +// b4 = true; +// } +// static boolean b5 = false; +// after(int d, int n): set(int Gets.nums5)[d][n] && withincode(void go())// { +// Tester.check(n == 10, "num5 should be 10, not " + d + " for SetAspect"); +// b5 = true; +// } +// static boolean b6 = false; +// after(int d, int n): set(int Gets.nums6)[d][n] && withincode(void go()) { +// Tester.check(n == 10, "num6 should be 10, not " + d + " for SetAspect"); +// b6 = true; +// } +// static boolean b7 = false; +// after(int d, int n): set(int Gets.nums7)[d][n] && withincode(void go()) { +// Tester.check(n == 10, "num7 should be 10, not " + d + " for SetAspect"); +// b7 = true; +// } +// static boolean b8 = false; +// after(int d, int n): set(int Gets.nums8)[d][n] && withincode(void go()) { +// Tester.check(n == 10, "num8 should be 10, not " + d + " for SetAspect"); +// b8 = true; +// } +// static boolean b9 = false; +// after(int d, int n): set(int Gets.nums9)[d][n] && withincode(void go()) { +// Tester.check(n == 10, "num9 should be 10, not " + d + " for SetAspect"); +// b9 = true; +// } + +// } + +aspect SetAspect2 { + static boolean bstar = false; + after(): set(int Gets.*) { + bstar = true; + } + static boolean b0 = false; + after(): set(int Gets.nums0) { + b0 = true; + } + static boolean b1 = false; + after(): set(int Gets.nums1) { + b1 = true; + } + static boolean b2 = false; + after(): set(int Gets.nums2) { + b2 = true; + } + static boolean b3 = false; + after(): set(int Gets.nums3) { + b3 = true; + } + static boolean b4 = false; + after(): set(int Gets.nums4) { + b4 = true; + } + static boolean b5 = false; + after(): set(int Gets.nums5) { + b5 = true; + } + static boolean b6 = false; + after(): set(int Gets.nums6) { + b6 = true; + } + static boolean b7 = false; + after(): set(int Gets.nums7) { + b7 = true; + } + static boolean b8 = false; + after(): set(int Gets.nums8) { + b8 = true; + } + static boolean b9 = false; + after(): set(int Gets.nums9) { + b9 = true; + } + +} + +// aspect SetAspect3 { +// static boolean bstar = false; +// after(int d): set(int Gets.*)[d][] { +// bstar = true; +// } +// static boolean b0 = false; +// after(int d): set(int Gets.nums0)[d][] { +// b0 = true; +// } +// static boolean b1 = false; +// after(int d): set(int Gets.nums1)[d][] { +// b1 = true; +// } +// static boolean b2 = false; +// after(int d): set(int Gets.nums2)[d][] { +// b2 = true; +// } +// static boolean b3 = false; +// after(int d): set(int Gets.nums3)[d][] { +// b3 = true; +// } +// static boolean b4 = false; +// after(int d): set(int Gets.nums4)[d][] { +// b4 = true; +// } +// static boolean b5 = false; +// after(int d): set(int Gets.nums5)[d][] { +// b5 = true; +// } +// static boolean b6 = false; +// after(int d): set(int Gets.nums6)[d][] { +// b6 = true; +// } +// static boolean b7 = false; +// after(int d): set(int Gets.nums7)[d][] { +// b7 = true; +// } +// static boolean b8 = false; +// after(int d): set(int Gets.nums8)[d][] { +// b8 = true; +// } +// static boolean b9 = false; +// after(int d): set(int Gets.nums9)[d][] { +// b9 = true; +// } + +// } + +// aspect SetAspect4 { +// static boolean bstar = false; +// after(int n): set(int Gets.*)[][n] && withincode(void go()) { +// Tester.checkEqual(n, 10, "nums should be 10 for SetAspect4"); +// bstar = true; +// } +// static boolean b0 = false; +// after(int n): set(int Gets.nums0)[][n] && withincode(void go()) { +// Tester.checkEqual(n, 10, "num0 should be 10 for SetAspect4"); +// b0 = true; +// } +// static boolean b1 = false; +// after(int n): set(int Gets.nums1)[][n] && withincode(void go()) { +// Tester.checkEqual(n, 10, "num1 should be 10 for SetAspect4"); +// b1 = true; +// } +// static boolean b2 = false; +// after(int n): set(int Gets.nums2)[][n] && withincode(void go()) { +// Tester.checkEqual(n, 10, "num2 should be 10 for SetAspect4"); +// b2 = true; +// } +// static boolean b3 = false; +// after(int n): set(int Gets.nums3)[][n] && withincode(void go()) { +// Tester.checkEqual(n, 10, "num3 should be 10 for SetAspect4"); +// b3 = true; +// } +// static boolean b4 = false; +// after(int n): set(int Gets.nums4)[][n] && withincode(void go()) { +// Tester.checkEqual(n, 10, "num4 should be 10 for SetAspect4"); +// b4 = true; +// } +// static boolean b5 = false; +// after(int n): set(int Gets.nums5)[][n] && withincode(void go()) { +// Tester.checkEqual(n, 10, "num5 should be 10 for SetAspect4"); +// b5 = true; +// } +// static boolean b6 = false; +// after(int n): set(int Gets.nums6)[][n] && withincode(void go()) { +// Tester.checkEqual(n, 10, "num6 should be 10 for SetAspect4"); +// b6 = true; +// } +// static boolean b7 = false; +// after(int n): set(int Gets.nums7)[][n] && withincode(void go()) { +// Tester.checkEqual(n, 10, "num7 should be 10 for SetAspect4"); +// b7 = true; +// } +// static boolean b8 = false; +// after(int n): set(int Gets.nums8)[][n] && withincode(void go()) { +// Tester.checkEqual(n, 10, "num8 should be 10 for SetAspect4"); +// b8 = true; +// } +// static boolean b9 = false; +// after(int n): set(int Gets.nums9)[][n] && withincode(void go()) { +// Tester.checkEqual(n, 10, "num9 should be 10 for SetAspect4"); +// b9 = true; +// } + +// } + +// aspect GetAspectOfEach of eachobject(instanceof(Gets)) { +// static boolean bstar = false; +// after(): get(int Gets.*) { +// bstar = true; +// } +// static boolean b0 = false; +// after(): get(int Gets.nums0) { +// b0 = true; +// } +// static boolean b1 = false; +// after(): get(int Gets.nums1) { +// b1 = true; +// } +// static boolean b2 = false; +// after(): get(int Gets.nums2) { +// b2 = true; +// } +// static boolean b3 = false; +// after(): get(int Gets.nums3) { +// b3 = true; +// } +// static boolean b4 = false; +// after(): get(int Gets.nums4) { +// b4 = true; +// } +// static boolean b5 = false; +// after(): get(int Gets.nums5) { +// b5 = true; +// } +// static boolean b6 = false; +// after(): get(int Gets.nums6) { +// b6 = true; +// } +// static boolean b7 = false; +// after(): get(int Gets.nums7) { +// b7 = true; +// } +// static boolean b8 = false; +// after(): get(int Gets.nums8) { +// b8 = true; +// } +// static boolean b9 = false; +// after(): get(int Gets.nums9) { +// b9 = true; +// } + +// } + +// aspect GetAspectOfEachWithBrackets of eachobject(instanceof(Gets)) { +// static boolean bstar = false; +// after(int n): get(int Gets.*)[n] { +// bstar = true; +// } +// static boolean b0 = false; +// after(int n): get(int Gets.nums0)[n] { +// b0 = true; +// } +// static boolean b1 = false; +// after(int n): get(int Gets.nums1)[n] { +// b1 = true; +// } +// static boolean b2 = false; +// after(int n): get(int Gets.nums2)[n] { +// b2 = true; +// } +// static boolean b3 = false; +// after(int n): get(int Gets.nums3)[n] { +// b3 = true; +// } +// static boolean b4 = false; +// after(int n): get(int Gets.nums4)[n] { +// b4 = true; +// } +// static boolean b5 = false; +// after(int n): get(int Gets.nums5)[n] { +// b5 = true; +// } +// static boolean b6 = false; +// after(int n): get(int Gets.nums6)[n] { +// b6 = true; +// } +// static boolean b7 = false; +// after(int n): get(int Gets.nums7)[n] { +// b7 = true; +// } +// static boolean b8 = false; +// after(int n): get(int Gets.nums8)[n] { +// b8 = true; +// } +// static boolean b9 = false; +// after(int n): get(int Gets.nums9)[n] { +// b9 = true; +// } +// } + +// aspect SetAspectOfEach of eachobject(instanceof(Gets)) { +// static boolean bstar = false; +// after(int d, int n): set(int Gets.*)[d][n] && withincode(void go()) { +// Tester.check(n == 10, "nums should be 10, not " + d + " for SetAspectOfEach"); +// bstar = true; +// } +// static boolean b0 = false; +// after(int d, int n): set(int Gets.nums0)[d][n] && withincode(void go()) { +// Tester.check(n == 10, "num0 should be 10, not " + d + " for SetAspectOfEach"); +// b0 = true; +// } +// static boolean b1 = false; +// after(int d, int n): set(int Gets.nums1)[d][n] && withincode(void go()) { +// Tester.check(n == 10, "num1 should be 10, not " + d + " for SetAspectOfEach"); +// b1 = true; +// } +// static boolean b2 = false; +// after(int d, int n): set(int Gets.nums2)[d][n] && withincode(void go()) { +// Tester.check(n == 10, "num2 should be 10, not " + d + " for SetAspectOfEach"); +// b2 = true; +// } +// static boolean b3 = false; +// after(int d, int n): set(int Gets.nums3)[d][n] && withincode(void go()) { +// Tester.check(n == 10, "num3 should be 10, not " + d + " for SetAspectOfEach"); +// b3 = true; +// } +// static boolean b4 = false; +// after(int d, int n): set(int Gets.nums4)[d][n] && withincode(void go()) { +// Tester.check(n == 10, "num4 should be 10, not " + d + " for SetAspectOfEach"); +// b4 = true; +// } +// static boolean b5 = false; +// after(int d, int n): set(int Gets.nums5)[d][n] && withincode(void go()) { +// Tester.check(n == 10, "num5 should be 10, not " + d + " for SetAspectOfEach"); +// b5 = true; +// } +// static boolean b6 = false; +// after(int d, int n): set(int Gets.nums6)[d][n] && withincode(void go()) { +// Tester.check(n == 10, "num6 should be 10, not " + d + " for SetAspectOfEach"); +// b6 = true; +// } +// static boolean b7 = false; +// after(int d, int n): set(int Gets.nums7)[d][n] && withincode(void go()) { +// Tester.check(n == 10, "num7 should be 10, not " + d + " for SetAspectOfEach"); +// b7 = true; +// } +// static boolean b8 = false; +// after(int d, int n): set(int Gets.nums8)[d][n] && withincode(void go()) { +// Tester.check(n == 10, "num8 should be 10, not " + d + " for SetAspectOfEach"); +// b8 = true; +// } +// static boolean b9 = false; +// after(int d, int n): set(int Gets.nums9)[d][n] && withincode(void go()) { +// Tester.check(n == 10, "num9 should be 10, not " + d + " for SetAspectOfEach"); +// b9 = true; +// } + +// } + +// aspect SetAspectOfEach2 of eachobject(instanceof(Gets)) { +// static boolean bstar = false; +// after(): set(int Gets.*) { +// bstar = true; +// } +// static boolean b0 = false; +// after(): set(int Gets.nums0) { +// b0 = true; +// } +// static boolean b1 = false; +// after(): set(int Gets.nums1) { +// b1 = true; +// } +// static boolean b2 = false; +// after(): set(int Gets.nums2) { +// b2 = true; +// } +// static boolean b3 = false; +// after(): set(int Gets.nums3) { +// b3 = true; +// } +// static boolean b4 = false; +// after(): set(int Gets.nums4) { +// b4 = true; +// } +// static boolean b5 = false; +// after(): set(int Gets.nums5) { +// b5 = true; +// } +// static boolean b6 = false; +// after(): set(int Gets.nums6) { +// b6 = true; +// } +// static boolean b7 = false; +// after(): set(int Gets.nums7) { +// b7 = true; +// } +// static boolean b8 = false; +// after(): set(int Gets.nums8) { +// b8 = true; +// } +// static boolean b9 = false; +// after(): set(int Gets.nums9) { +// b9 = true; +// } + +// } + +// aspect SetAspectOfEach3 of eachobject(instanceof(Gets)) { +// static boolean bstar = false; +// after(int d): set(int Gets.*)[d][] { +// bstar = true; +// } +// static boolean b0 = false; +// after(int d): set(int Gets.nums0)[d][] { +// b0 = true; +// } +// static boolean b1 = false; +// after(int d): set(int Gets.nums1)[d][] { +// b1 = true; +// } +// static boolean b2 = false; +// after(int d): set(int Gets.nums2)[d][] { +// b2 = true; +// } +// static boolean b3 = false; +// after(int d): set(int Gets.nums3)[d][] { +// b3 = true; +// } +// static boolean b4 = false; +// after(int d): set(int Gets.nums4)[d][] { +// b4 = true; +// } +// static boolean b5 = false; +// after(int d): set(int Gets.nums5)[d][] { +// b5 = true; +// } +// static boolean b6 = false; +// after(int d): set(int Gets.nums6)[d][] { +// b6 = true; +// } +// static boolean b7 = false; +// after(int d): set(int Gets.nums7)[d][] { +// b7 = true; +// } +// static boolean b8 = false; +// after(int d): set(int Gets.nums8)[d][] { +// b8 = true; +// } +// static boolean b9 = false; +// after(int d): set(int Gets.nums9)[d][] { +// b9 = true; +// } + +// } + +// aspect SetAspectOfEach4 of eachobject(instanceof(Gets)) { +// static boolean bstar = false; +// after(int n): set(int Gets.*)[][n] && withincode(void go()) { +// Tester.checkEqual(n, 10, "nums should be 10 for SetAspectOfEach4"); +// bstar = true; +// } +// static boolean b0 = false; +// after(int n): set(int Gets.nums0)[][n] && withincode(void go()) { +// Tester.checkEqual(n, 10, "num0 should be 10 for SetAspectOfEach4"); +// b0 = true; +// } +// static boolean b1 = false; +// after(int n): set(int Gets.nums1)[][n] && withincode(void go()) { +// Tester.checkEqual(n, 10, "num1 should be 10 for SetAspectOfEach4"); +// b1 = true; +// } +// static boolean b2 = false; +// after(int n): set(int Gets.nums2)[][n] && withincode(void go()) { +// Tester.checkEqual(n, 10, "num2 should be 10 for SetAspectOfEach4"); +// b2 = true; +// } +// static boolean b3 = false; +// after(int n): set(int Gets.nums3)[][n] && withincode(void go()) { +// Tester.checkEqual(n, 10, "num3 should be 10 for SetAspectOfEach4"); +// b3 = true; +// } +// static boolean b4 = false; +// after(int n): set(int Gets.nums4)[][n] && withincode(void go()) { +// Tester.checkEqual(n, 10, "num4 should be 10 for SetAspectOfEach4"); +// b4 = true; +// } +// static boolean b5 = false; +// after(int n): set(int Gets.nums5)[][n] && withincode(void go()) { +// Tester.checkEqual(n, 10, "num5 should be 10 for SetAspectOfEach4"); +// b5 = true; +// } +// static boolean b6 = false; +// after(int n): set(int Gets.nums6)[][n] && withincode(void go()) { +// Tester.checkEqual(n, 10, "num6 should be 10 for SetAspectOfEach4"); +// b6 = true; +// } +// static boolean b7 = false; +// after(int n): set(int Gets.nums7)[][n] && withincode(void go()) { +// Tester.checkEqual(n, 10, "num7 should be 10 for SetAspectOfEach4"); +// b7 = true; +// } +// static boolean b8 = false; +// after(int n): set(int Gets.nums8)[][n] && withincode(void go()) { +// Tester.checkEqual(n, 10, "num8 should be 10 for SetAspectOfEach4"); +// b8 = true; +// } +// static boolean b9 = false; +// after(int n): set(int Gets.nums9)[][n] && withincode(void go()) { +// Tester.checkEqual(n, 10, "num9 should be 10 for SetAspectOfEach4"); +// b9 = true; +// } + +// } diff --git a/tests/new/HandlerSignature.java b/tests/new/HandlerSignature.java new file mode 100644 index 000000000..22100a911 --- /dev/null +++ b/tests/new/HandlerSignature.java @@ -0,0 +1,56 @@ + +import org.aspectj.testing.Tester; +import java.util.*; + +/** @testcase PR#883 Getting signature from handler join point */ +public class HandlerSignature { + + public static void main(String[] args) { + C c = new C(); + U.ee("caught"); + try { + c.run(); + } catch (Error e) { + U.e("caught"); + } + Tester.checkAllEvents(); + } + static { + // U.ee("X"); + } +} + +class C { + public void run() { + throw new Error(""); + } +} + +class U { + static void e(String event) { + System.err.println(event); + Tester.event(event); + } + static void ee(String event) { + Tester.expectEvent(event); + } +} + +aspect A { + static { + U.ee("before handler"); + U.ee("after handler"); + } + + before() : handler(*) { + thisJoinPoint.getSignature().getModifiers(); + U.e("before handler"); + } + /* + after returning join points not implemented + after() returning: handler(*) { + thisJoinPoint.getSignature().getModifiers(); + U.e("after handler"); + } + */ +} diff --git a/tests/new/HasAspect.java b/tests/new/HasAspect.java new file mode 100644 index 000000000..f335e6d05 --- /dev/null +++ b/tests/new/HasAspect.java @@ -0,0 +1,48 @@ +import org.aspectj.testing.*; + +public class HasAspect { + static boolean p = false; + public static void main(String[] args) { + HasAspect c = new HasAspect(); + c.someMethod(); + Tester.check(p, "p advice was not run"); + + Tester.check(A.aspectOf(c).advised, "hasaspect(A)"); + Tester.check(B.aspectOf().advised, "hasaspect(B)"); + Tester.check(C.aspectOf().advised, "hasaspect(C)"); + } + + public void someMethod() {} +} + +aspect A pertarget(target(HasAspect)) { + boolean advised = false; + + pointcut p(): call(void someMethod()) && hasaspect(A); + //pointcut p(): receptions(void someMethod()) && instanceof(HasAspect); + + before() : p() { + HasAspect.p = true; + } +} + +aspect B issingleton() { + boolean advised = false; +} + +aspect C percflow(entries()) { + pointcut entries(): executions(void HasAspect.main(String[])); + + boolean advised = false; +} + + +aspect TestAspect { + before(A a, B b, C c) : call(void someMethod()) + && hasaspect(a) && hasaspect(b) && hasaspect(c) + { + a.advised = true; + b.advised = true; + c.advised = true; + } +} diff --git a/tests/new/Hello.java b/tests/new/Hello.java new file mode 100644 index 000000000..473ee5251 --- /dev/null +++ b/tests/new/Hello.java @@ -0,0 +1,6 @@ +public class Hello { + public static void main(String[] args) { + System.out.println("hello world"); + if (args.length > 1) throw new Error("e"); + } +} diff --git a/tests/new/HierarchyIntroductions.java b/tests/new/HierarchyIntroductions.java new file mode 100644 index 000000000..d01f8651d --- /dev/null +++ b/tests/new/HierarchyIntroductions.java @@ -0,0 +1,52 @@ +//!!! ugly test case + +public class HierarchyIntroductions { + public static void main(String[] args) { test(); } + + static public void test() { + C1 c1 = new C1(); + I1 i1 = c1; + C2 c2 = new C2(); + c2.foo(); + c1 = c2; + I4 i4 = c2; + I2 i2 = c1; + } +} + + +aspect Hierarchy { + //introduction C1 { + declare parents: C1 implements I1; + declare parents: C1 implements I2; + //} + + //introduction C2 { + declare parents: C2 extends C1; + //} + + //introduction C4 { + declare parents: C4 extends C3; + //} + //introduction C5 { + declare parents: C5 extends C3a; + //} + + //introduction I2 { + declare parents: I2 extends I3, I4, I5; + //} +} + + +class C1 { public void foo() { } } +class C2 {} +class C3 {} +class C3a extends C3 {} +class C4 extends C3 {} +class C5 extends C3 {} + +interface I1 {} +interface I2 {} +interface I3 {} +interface I4 {} +interface I5 {} diff --git a/tests/new/HoldProceed.java b/tests/new/HoldProceed.java new file mode 100644 index 000000000..1f14060d7 --- /dev/null +++ b/tests/new/HoldProceed.java @@ -0,0 +1,67 @@ +import org.aspectj.testing.Tester; +import java.util.*; + + +public class HoldProceed { + public static void main(String[] args) { + C c = new C(); + c.m1(); c.m2(); c.m1(); + Tester.check("m"); + Tester.checkEqual(A.buf.toString(), ""); + A.runProceeds(); + Tester.checkEqual(A.buf.toString(), "m1:b:m2:m1:"); + A.runProceeds(); + Tester.checkEqual(A.buf.toString(), "m1:b:m2:m1:m1:b:m2:m1:"); + + try { + c.m3(); + } catch (Exception e) { + Tester.check(false, "shouldn't throw anything"); + } + + try { + A.runProceeds(); + } catch (Error err) { //??? this is an odd test for the fact that Exception is wrapped + Tester.note("caught err"); + } + Tester.check("caught err"); + } +} + +class C { + public void m1() {A. buf.append("m1:"); } + public void m2() {A. buf.append("m2:"); } + public void m3() throws Exception { throw new Exception("from m3"); } +} + +aspect A { + static StringBuffer buf = new StringBuffer(); + + static List heldProceeds = new LinkedList(); + + int cnt = 0; + + void around (): call(void C.m*()) { + heldProceeds.add(new Runnable() { public void run() { proceed(); cnt++; } }); + + class MyRun implements Runnable { + public void run() { System.out.println("run"); } + public void m() { Tester.note("m"); } + } + + MyRun mr = new MyRun(); + mr.m(); + } + + before(): call(void C.m2()) { + new Runnable() { + public void run() { buf.append("b:"); } + }.run(); + } + + public static void runProceeds() { + for (Iterator i = heldProceeds.iterator(); i.hasNext(); ) { + ((Runnable)i.next()).run(); + } + } +} diff --git a/tests/new/IfPCDAdviceMethods.java b/tests/new/IfPCDAdviceMethods.java new file mode 100644 index 000000000..121032dd2 --- /dev/null +++ b/tests/new/IfPCDAdviceMethods.java @@ -0,0 +1,320 @@ + +import org.aspectj.testing.Tester; +import org.aspectj.testing.Tester; + +class TestContext { + public static void signal(String event) { + Tester.event(event); + } + public static void expectSignal(String event) { + Tester.expectEvent(event); + } + public static void startTest() { + } + public static void endTest() { + Tester.checkAllEventsIgnoreDups(); + } + public static void testFailed(String failureMessage) { + Tester.check(false,failureMessage); + } +} + +class BaseApp { + int i; + int get() { return i; } + void set(int i) { this.i = i; } + void uncountedCall() { } + // permits call to be restricted to within(BaseApp) + void callFromOutside(int i) { + call(i); + } + private void call(int i) { TestContext.signal("call(int)"); } +} + +/** + * Test touching pcd if() variants: + * <table> + * <tr><td>pcd if(expr)</td><td>anonymous, named</td></tr> + * <tr><td>pcd combination</td><td>execution, call, callTyped,initialization,set,get</td></tr> + * <tr><td>advice</td><td></td>before, after, around</tr> + * </table> + * (callTyped is probably not a relevant difference). + * Currently passing. + * @author wes + * History + * 8/20/01 initial draft + * 8/21/01 fixed namedIf call, added initializations + * Todo + * + */ +public class IfPCDAdviceMethods { + public static void main(String[] args) { + TestContext.startTest(); + BaseApp target = new BaseApp(); + target.callFromOutside(0); + target.uncountedCall(); + target.set(1); + if (!(1 == target.get())) { + TestContext.testFailed("1 != target.get()"); + } + TestContext.endTest(); + } + static { + // variants of advice defined below + String[] cuts = { "call_pc", "callType_pc", "execution_pc", + "get_pc", "set_pc", "initialization_pc" } ; + String[] kinds = { "before", "after", "around" }; + String[] ifs = { "if(true)", "namedIf()", "anonymous" }; + for (int i = 0; i < cuts.length; i++) { + for (int j = 0; j < kinds.length; j++) { + for (int k = 0; k < ifs.length; k++) { + TestContext.expectSignal(kinds[j] + "." + cuts[i] + "." + ifs[k]); + } + } + } + // ensure BaseApp method was called + TestContext.expectSignal("call(int)"); + + // Aspect namedIf delegate should have been called this many times + // (todo: only checks for at-least, not for extra calls) + final int namedIfCalls = 2*cuts.length * (ifs.length-1); // -1 for anonymous, 2* for two calls + for (int i = 0; i < namedIfCalls; i++) { + TestContext.expectSignal("executedNamedIf:"+i); + } + } +} + +/** Catch test failures using aspects - mainly to surface caller/join point easily */ +aspect TestSignals { + /** identify methods that should never be called */ + pointcut errorIfCalled () : call(boolean *..executedNamedIfNever(..)); + /** signal failure if method that wasn't supposed to be called is in fact invoked */ + after () : errorIfCalled() { + // todo: will StaticPart will always have null for source ? + StringBuffer sb = new StringBuffer(); + sb.append("TestSignals.after() : errorIfCalled()"); + org.aspectj.lang.JoinPoint.StaticPart sp = thisJoinPointStaticPart; + if (null == sp) { + sb.append("null thisJoinPointStaticPart"); + } else { + sb.append(" kind=" + sp.getKind()); + sb.append(" signature=" + sp.getSignature()); + sb.append(" source=" + sp.getSourceLocation()); + } + TestContext.testFailed(sb.toString()); + } +} + +/** named pointcuts including if(expr) - call, execution only */ +aspect Aspect { + static int namedIfCounter; + static int namedIfNeverCounter; + static int i; + static boolean executedNamedIf() { + a("executedNamedIf:"+namedIfCounter++); + return true; + } + static boolean executedNamedIfNever() { + a("executedNamedIfNever:"+namedIfNeverCounter++); + return true; + } + + /** + * should not short-circuit, but instead call executedNamedIf + * @testTarget ifpcd.run.expr.java.group no short-circuit of false "or" + * @testTarget ifpcd.run.expr.java.group method invocation in if-expression + */ + pointcut namedIf () + : !within(Aspect) && if( ((1 == 0) || executedNamedIf()) ) ; + + /** + * should short-circuit, never calling executedNamedIfNever + * @testTarget ifpcd.run.expr.java.group short-circuit of false "and" + * @testTarget ifpcd.run.expr.java.group assignment in if-expression + */ + pointcut namedIfNever () // should short-circuit, never calling executedNamedIfNever + : if( ((1 == 1) && executedNamedIfNever()) ) ; + + /** + * @testTarget ifpcd.run.expr.literal literal operations not optimized away fyi + */ + pointcut ifTrue () : if(true); + + /** + * @testTarget ifpcd.run.expr.literal literal operations not optimized away fyi + */ + pointcut ifFalse () : if(false); + + // ------------------------------------- pointcuts + /** @testTarget ifpcd.compile.pcds.named.set */ + pointcut set_pc (): if (true) && set(int BaseApp.i) ; + /** @testTarget ifpcd.compile.pcds.named.get */ + pointcut get_pc (): if (true) && get(int BaseApp.i) ; + /** @testTarget ifpcd.compile.pcds.named.call */ + pointcut call_pc (): if (true) && call(void *.call(int)) && within(BaseApp); + /** @testTarget ifpcd.compile.pcds.named.call with Type */ + pointcut callType_pc(): if(true) && call(void BaseApp.call(int)); + /** @testTarget ifpcd.compile.pcds.named.execution */ + pointcut execution_pc(): if(true) && within(BaseApp) && execution(void *(int)); + /** @testTarget ifpcd.compile.pcds.named.initialization */ + pointcut initialization_pc(): if(true) && initialization(BaseApp.new(..)); + // currently broken + /** @testTarget ifpcd.compile.pcds.named.initialization */ + //pointcut staticinitialization_pc(): if(true) && staticinitialization(BaseApp); + + /** @testTarget ifpcd.compile.pcds.namedIf.set */ + pointcut named_set_pc (): namedIf() && set(int BaseApp.i) ; + /** @testTarget ifpcd.compile.pcds.namedIf.get */ + pointcut named_get_pc (): namedIf() && get(int BaseApp.i) ; + /** @testTarget ifpcd.compile.pcds.namedIf.call if pcd by name composition */ + pointcut named_call_pc() : namedIf() && call(void *.call(int)) && within(BaseApp); + /** @testTarget ifpcd.compile.pcds.namedIf.call with Type, if pcd by name composition */ + pointcut named_callType_pc() : namedIf() && call(void BaseApp.call(int)) && within(BaseApp);; + /** @testTarget ifpcd.compile.pcds.namedIf.execution if pcd by name composition */ + pointcut named_execution_pc(): namedIf() && execution(void *(int)); + /** @testTarget ifpcd.compile.pcds.namedIf.initialization */ + pointcut named_initialization_pc(): namedIf() && initialization(BaseApp.new(..)); + + before(): set_pc () { a("before.set_pc.if(true)"); } + before(): get_pc () { a("before.get_pc.if(true)"); } + before(): call_pc () { a("before.call_pc.if(true)"); } + before(): callType_pc() { a("before.callType_pc.if(true)"); } + before(): execution_pc() { a("before.execution_pc.if(true)"); } + before(): initialization_pc() { a("before.initialization_pc.if(true)"); } + //before(): staticinitialization_pc() { a("before.staticinitialization_pc.if(true)"); } + + before(): named_set_pc () { a("before.set_pc.namedIf()"); } + before(): named_get_pc () { a("before.get_pc.namedIf()"); } + before(): named_call_pc () { a("before.call_pc.namedIf()"); } + before(): named_callType_pc() { a("before.callType_pc.namedIf()"); } + before(): named_execution_pc() { a("before.execution_pc.namedIf()"); } + before(): named_initialization_pc() { a("before.initialization_pc.namedIf()"); } + + int around() : set_pc () { a("around.set_pc.if(true)"); return proceed(); } + int around() : get_pc () { a("around.get_pc.if(true)"); return proceed(); } + void around() : call_pc () { a("around.call_pc.if(true)"); proceed(); } + void around() : callType_pc() { a("around.callType_pc.if(true)"); proceed(); } + void around() : execution_pc() { a("around.execution_pc.if(true)"); proceed(); } + void around() : initialization_pc() { a("around.initialization_pc.if(true)"); proceed(); } + + int around() : named_set_pc () { a("around.set_pc.namedIf()"); return proceed(); } + int around() : named_get_pc () { a("around.get_pc.namedIf()"); return proceed(); } + void around() : named_call_pc () { a("around.call_pc.namedIf()"); proceed(); } + void around() : named_callType_pc() { a("around.callType_pc.namedIf()"); proceed(); } + void around() : named_execution_pc() { a("around.execution_pc.namedIf()"); proceed(); } + void around() : named_initialization_pc() { a("around.initialization_pc.namedIf()"); proceed(); } + + // ------------------------------------- after + after(): set_pc () { a("after.set_pc.if(true)"); } + after(): get_pc () { a("after.get_pc.if(true)"); } + after(): call_pc () { a("after.call_pc.if(true)"); } + after(): callType_pc() { a("after.callType_pc.if(true)"); } + after(): execution_pc() { a("after.execution_pc.if(true)"); } + after(): initialization_pc() { a("after.initialization_pc.if(true)"); } + //after(): staticinitialization_pc() { a("after.staticinitialization_pc.if(true)"); } + + after(): named_set_pc () { a("after.set_pc.namedIf()"); } + after(): named_get_pc () { a("after.get_pc.namedIf()"); } + after(): named_call_pc () { a("after.call_pc.namedIf()"); } + after(): named_callType_pc() { a("after.callType_pc.namedIf()"); } + after(): named_execution_pc() { a("after.execution_pc.namedIf()"); } + after(): named_initialization_pc() { a("after.initialization_pc.namedIf()"); } + + static void a(String msg) { + TestContext.signal(msg); + } +} + +/** anonymous pointcuts including if(expr) - call, execution only */ +aspect Aspect2 { + + /** @testTarget ifpcd.compile.pcds.unnamed.set.before */ + before() : if(true) && set(int BaseApp.i) { + a("before.set_pc.anonymous"); + } + /** @testTarget ifpcd.compile.pcds.unnamed.get.before */ + before() : if(true) && get(int BaseApp.i) { + a("before.get_pc.anonymous"); + } + /** @testTarget ifpcd.compile.pcds.unnamed.call.before */ + before() : if(true) && call(void *.uncountedCall()) { + a("before.call_pc.anonymous"); + } + /** @testTarget ifpcd.compile.pcds.unnamed.call.before with Type */ + before() : if(true) && call(void BaseApp.uncountedCall()) { + a("before.callType_pc.anonymous"); + } + /** @testTarget ifpcd.compile.pcds.unnamed.execution.before */ + before() : if(true) && execution(void BaseApp.uncountedCall()) { + a("before.execution_pc.anonymous"); + } + /** @testTarget ifpcd.compile.pcds.unnamed.initialization.before */ + before() : if(true) && initialization(BaseApp.new(..)) { + a("before.initialization_pc.anonymous"); + } + + /** @testTarget ifpcd.compile.pcds.unnamed.set.around */ + int around() : if(true) && set(int BaseApp.i) { + a("around.set_pc.anonymous"); + return proceed(); + } + /** @testTarget ifpcd.compile.pcds.unnamed.get.around */ + int around() : if(true) && get(int BaseApp.i) { + a("around.get_pc.anonymous"); + return proceed(); + } + /** @testTarget ifpcd.compile.pcds.unnamed.call.around */ + void around() : if(true) && call(void *.uncountedCall()) { + a("around.call_pc.anonymous"); + proceed(); + } + /** @testTarget ifpcd.compile.pcds.unnamed.call.around with Type */ + void around() : if(true) && call(void BaseApp.uncountedCall()) { + a("around.callType_pc.anonymous"); + proceed(); + } + /** @testTarget ifpcd.compile.pcds.unnamed.execution.around */ + void around() : if(true) && execution(void BaseApp.uncountedCall()) { + a("around.execution_pc.anonymous"); + proceed(); + } + /** @testTarget ifpcd.compile.pcds.unnamed.initialization.around */ + void around() : if(true) && initialization(BaseApp.new(..)) { + a("around.initialization_pc.anonymous"); + proceed(); + } + + /** @testTarget ifpcd.compile.pcds.unnamed.set.after */ + after() : if(true) && set(int BaseApp.i) { + a("after.set_pc.anonymous"); + } + + /** @testTarget ifpcd.compile.pcds.unnamed.get.after */ + after() : if(true) && get(int BaseApp.i) { + a("after.get_pc.anonymous"); + } + + /** @testTarget ifpcd.compile.pcds.unnamed.call.after */ + after() : if(true) && call(void *.uncountedCall()) { + a("after.call_pc.anonymous"); + } + + /** @testTarget ifpcd.compile.pcds.unnamed.call.after with Type */ + after() : if(true) && call(void BaseApp.uncountedCall()) { + a("after.callType_pc.anonymous"); + } + + /** @testTarget ifpcd.compile.pcds.unnamed.execution.after */ + after() : if(true) && execution(void BaseApp.uncountedCall()) { + a("after.execution_pc.anonymous"); + } + /** @testTarget ifpcd.compile.pcds.unnamed.initialization.after */ + after() : if(true) && initialization(BaseApp.new(..)) { + a("after.initialization_pc.anonymous"); + } + + + static void a(String msg) { + TestContext.signal(msg); + } +} diff --git a/tests/new/IfPCDAssignmentCE.java b/tests/new/IfPCDAssignmentCE.java new file mode 100644 index 000000000..fa0b1dae6 --- /dev/null +++ b/tests/new/IfPCDAssignmentCE.java @@ -0,0 +1,26 @@ + +public class IfPCDAssignmentCE { + public static void main (String[] args) { + foo(new C()); + } + static void foo(C a) {} +} + +class C { + static boolean doit() { return true; } + static boolean doit(C a) { return true; } +} + +aspect A { + before(C c) : args(c) && call(void foo(C)) + && if ((c=new C()).doit()) { // CE 16 + } + + before(C c) : args(c) && call(void foo(C)) + && if (C.doit(c = new C())) { // CE 20 + } +} +/* + Expecting compiler error on attempts to assign bound variable + in if() PCD. Currently getting compiler stack trace. + */ diff --git a/tests/new/IfPCDDupMethod.java b/tests/new/IfPCDDupMethod.java new file mode 100644 index 000000000..de771d536 --- /dev/null +++ b/tests/new/IfPCDDupMethod.java @@ -0,0 +1,25 @@ + +/** + * Ajc produces duplicated methods, and javac complains: + * <pre>..\ajworkingdir\AlreadyDefined.java:51: + * signal$method_call10(java.lang.String) is already defined in AlreadyDefined + * private void signal$method_call10(final String msg) </pre> + */ +public class IfPCDDupMethod { + public static void main(String[] args) { } +} + +aspect AlreadyDefined { + + before(): ifFalse(Object) { signal(""); } + // must come second + pointcut ifFalse (Object t) : this(t) && if(t instanceof Runnable ) ; + + // same result for execution or call or withincode + after() : withincode(static void IfPCDDupMethod.main(String[])) { + signal(""); + } + + static void signal(String msg) { + } +} diff --git a/tests/new/IfPCDExprAssignUnparseFailure.java b/tests/new/IfPCDExprAssignUnparseFailure.java new file mode 100644 index 000000000..48e2da1fd --- /dev/null +++ b/tests/new/IfPCDExprAssignUnparseFailure.java @@ -0,0 +1,27 @@ +import org.aspectj.testing.Tester; + +/** + * @author wes + */ +public class IfPCDExprAssignUnparseFailure { + public static void main(String[] args) { + Tester.check(true, "compiler test"); + } +} + +/** + * NPE unwinding assignment in if pcd expression: + * <pre> + * unexpected exception: + * org.aspectj.compiler.base.InternalCompilerError + * java.lang.NullPointerException + * at org.aspectj.compiler.base.ast.AssignExpr.unparse(AssignExpr.java:78) + * <pre> + * in revision 1.26 of AssignExpr.java. + */ +aspect AspectFor { + static int i; + pointcut namedIf () + : if(0 == (i = 2)) ; // NPE unwinding assignment in if + +} diff --git a/tests/new/IfPCDExprJoinPointVisibleCE.java b/tests/new/IfPCDExprJoinPointVisibleCE.java new file mode 100644 index 000000000..7e315aa86 --- /dev/null +++ b/tests/new/IfPCDExprJoinPointVisibleCE.java @@ -0,0 +1,25 @@ + + +aspect AspectForIfPCDExprJoinPointVisibleCE { + // todo: derives from more general binding problems with named pointcuts + pointcut errorAccessingThisJoinPointStaticPart () + : if (thisJoinPointStaticPart != null); // CE: can't bind name thisJoinPointStaticPart + pointcut errorAccessingThisJoinPoint () + : if (thisJoinPoint != null) && if(thisJoinPoint.getSignature() != null); // CE: can't bind name thisJoinPoint + + before () + : within(IfPCDExprJoinPointVisibleCE) + && errorAccessingThisJoinPoint() { + System.err.println("before thisJoinPoint"); + } + before () + : within(IfPCDExprJoinPointVisibleCE) + && errorAccessingThisJoinPointStaticPart() { + System.err.println("before thisJoinPointStaticPart"); + } +} +public class IfPCDExprJoinPointVisibleCE { + public static void main(String[] args) { + System.err.println("ok - main running after "); + } +} diff --git a/tests/new/IfPCDExprVisibility.java b/tests/new/IfPCDExprVisibility.java new file mode 100644 index 000000000..c94dcd432 --- /dev/null +++ b/tests/new/IfPCDExprVisibility.java @@ -0,0 +1,109 @@ + +aspect AspectForIfPCDExprVisibility { + // See IfPCDExprJoinPoint* for join-point error cases + + pointcut stringLArgs(String[] args) + : args (args); + pointcut targetTarget(IfPCDExprVisibility target) + : target(target); + pointcut thisItem(IfPCDExprVisibility thisItem) + : this(thisItem); + + pointcut callDo() + : call(void IfPCDExprVisibility()); + + pointcut callMain(String[] args) + : args(args) && call(static void *..main(String[])) ; + + // ok: anonymous pointcut + /** + *@testTarget ifpcd.compile.visibility.tjp + *@testTarget ifpcd.compile.visibility.tjpsp + */ + before () + : if (thisJoinPoint != null) + && if (thisJoinPointStaticPart != null) + && call(void IfPCDExprJoinPointVisibleCE.main(..)) { + System.err.println("before main + " + thisJoinPoint); + } + // ok: anonymous pointcut, name composition, arg state + /** + */ + before (String[] args) + : if (thisJoinPointStaticPart != null) + && if (null != args) + && callMain (args){ + String m = "before main" + + " join point: " + thisJoinPoint + + " args: " + args ; + System.err.println(m); + if (null == thisJoinPointStaticPart) + throw new Error("impossible null thisJoinPointStaticPart"); + // actually, it is possible to directly invoke main with null args... + if (null == args) throw new Error("null args"); + } + /** + *@testTarget ifpcd.compile.visibility.args.named + *@testTarget ifpcd.compile.visibility.this.named + *@testTarget ifpcd.compile.visibility.target.named + */ + Object around (String[] _args + , IfPCDExprVisibility _target + , IfPCDExprVisibility _thisItem) + : targetTarget(_target) + && thisItem(_thisItem) + && call(* IfPCDExprVisibility.exec(..)) + && args(_args) + && if(null != _args) + && if(null != _target) + && if(null != _thisItem) + { + String m = "around main - start " + + " join point: " + thisJoinPoint + + " static join point: " + thisJoinPointStaticPart + + " this: " + _thisItem + + " target: " + _target + + " args: " + _args + ; + System.err.println(m); + // note: no compile error unless around is actually woven in + proceed(_args, _target, _thisItem); + m = "around main - end " + + " join point: " + thisJoinPoint + + " static join point: " + thisJoinPointStaticPart + + " this: " + _thisItem + + " target: " + _target + + " args: " + _args + ; + System.err.println(m); + return null; + } +} + +/** + * @author wes + */ +public class IfPCDExprVisibility { + void exec(String[] args) { + if (null == args) { + System.err.println("exec running with null args"); + } else { + System.err.println("exec running with args: " + args); + System.err.println("exec calling itself with null args: " + args); + // only this call is captured by around - from/to this object + exec(null); + } + } + public static void main(String[] args) { + if (null != args) { + System.err.println("main calling itself with null args"); + new IfPCDExprVisibility().main(null); // self-call + System.err.println("main done calling itself with null args"); + + new IfPCDExprVisibility().exec(args); + } else { + System.err.println("ok - main running with null args"); + } + } +} + diff --git a/tests/new/IfdefsAndAdvice.java b/tests/new/IfdefsAndAdvice.java new file mode 100644 index 000000000..620070e26 --- /dev/null +++ b/tests/new/IfdefsAndAdvice.java @@ -0,0 +1,92 @@ +/* We would like to use some performance benchmarking as a way to determine + if ajc is or is not generating the code for dynamic join points in all + cases except for m4(). However, HotSpot is too smart for us today, and + manages to optimize this away. Since the point of this code is that + such an optimization is possible, I'm not sure that we can write a test case + for this... + + So, this test case doesn't do all that good a job. +*/ + +import org.aspectj.testing.Tester; + +public class IfdefsAndAdvice { + public static void main(String[] args) { + double t1 = timeIt(1); + double t2 = timeIt(2); + double t3 = timeIt(3); + double t4 = timeIt(4); + + //System.out.println(t1 + ":" + t2 + ":" + t3 + ":" + t4); + } + + public static double timeIt(int m) { + callIt(m); + callIt(m); + + final int N = 1000; + + long startTime = System.currentTimeMillis(); + for (int i = 0; i < N; i++) { callIt(m); } + long stopTime = System.currentTimeMillis(); + + return (stopTime - startTime)/1000.0; + } + + public static void callIt(int m) { + switch(m) { + case 1: m1(1,2,3,4,5,6,7,8,9,10); + case 2: m2(1,2,3,4,5,6,7,8,9,10); + case 3: m3(1,2,3,4,5,6,7,8,9,10); + case 4: m4(1,2,3,4,5,6,7,8,9,10); + } + } + + + public static int m1(int i1, int i2, int i3, int i4, int i5, int i6, int i7, int i8, int i9, int i10) { + return i1+i2+i3+i4+i5+i6+i7+i8+i9+i10; + } + public static int m2(int i1, int i2, int i3, int i4, int i5, int i6, int i7, int i8, int i9, int i10) { + return i1+i2+i3+i4+i5+i6+i7+i8+i9+i10; + } + public static int m3(int i1, int i2, int i3, int i4, int i5, int i6, int i7, int i8, int i9, int i10) { + return i1+i2+i3+i4+i5+i6+i7+i8+i9+i10; + } + public static int m4(int i1, int i2, int i3, int i4, int i5, int i6, int i7, int i8, int i9, int i10) { + return i1+i2+i3+i4+i5+i6+i7+i8+i9+i10; + } +} + +aspect A { + static final boolean DEBUG = false; + + before (): execution(int m1(..)) { + if (DEBUG) { + Object args = thisJoinPoint.getThis(); + } else { + String sig = thisJoinPoint.toString(); + } + } + + before (): execution(int m2(..)) { + if (DEBUG) { + Object args = thisJoinPoint.getThis(); + } + } + + before (): execution(int m3(..)) { + if (!DEBUG) { + String sig = thisJoinPoint.toString(); + } else { + Object args = thisJoinPoint.getThis(); + } + } + + before (): execution(int m4(..)) { + if (!DEBUG) { + Object args = thisJoinPoint.getThis(); + } else { + String sig = thisJoinPoint.toString(); + } + } +} diff --git a/tests/new/IllegalCflowCE.java b/tests/new/IllegalCflowCE.java new file mode 100644 index 000000000..dabf71082 --- /dev/null +++ b/tests/new/IllegalCflowCE.java @@ -0,0 +1,5 @@ + +/** @testcase PR#770 cflow pcd syntax error */ +aspect IllegalCflowCE { + pointcut badCflow() : cflow(*.new(..)); // CE 4 +} diff --git a/tests/new/IllegalForwardReference.java b/tests/new/IllegalForwardReference.java new file mode 100644 index 000000000..0a578bc77 --- /dev/null +++ b/tests/new/IllegalForwardReference.java @@ -0,0 +1,17 @@ +import org.aspectj.testing.Tester; + +public class IllegalForwardReference { + public static void main(String[] args) { + System.out.println(new Aspect.InnerClass().j + ", " + new Aspect.InnerClass().i); + Tester.check(true, "compiled!"); + } +} + +aspect Aspect { + //int InnerClass.i = 13; + + static class InnerClass { + int j = i; + int i = 13; + } +} diff --git a/tests/new/ImportFromUnnamed.java b/tests/new/ImportFromUnnamed.java new file mode 100644 index 000000000..c1f45f58d --- /dev/null +++ b/tests/new/ImportFromUnnamed.java @@ -0,0 +1,14 @@ + +import org.aspectj.testing.Tester; +import DeclaredExcs; + +// PR#134 + +public class ImportFromUnnamed { + public static void main(String[] args) { test(); } + + public static void test() { + DeclaredExcs a = new DeclaredExcs(); + Tester.checkEqual(a.getClass().getName(), "DeclaredExcs", "class name"); + } +} diff --git a/tests/new/ImportInnerFromInterfaceImplementor.java b/tests/new/ImportInnerFromInterfaceImplementor.java new file mode 100644 index 000000000..e69de29bb --- /dev/null +++ b/tests/new/ImportInnerFromInterfaceImplementor.java diff --git a/tests/new/IndeterminateArg.events b/tests/new/IndeterminateArg.events new file mode 100644 index 000000000..271cb8ed1 --- /dev/null +++ b/tests/new/IndeterminateArg.events @@ -0,0 +1,294 @@ +call(SClass()) []: none()
+SClass()
+call(SClass(java.lang.String)) [java.lang.String]: o1()
+call(SClass(java.lang.String)) [java.lang.String]: s1()
+call(SClass(java.lang.String)) [java.lang.String]: bo1()
+call(SClass(java.lang.String)) [java.lang.String]: bs1()
+SClass(s1)
+call(SClass(java.lang.String, java.lang.String)) [java.lang.String, java.lang.String]: o2()
+call(SClass(java.lang.String, java.lang.String)) [java.lang.String, java.lang.String]: o1Start()
+call(SClass(java.lang.String, java.lang.String)) [java.lang.String, java.lang.String]: o1End()
+call(SClass(java.lang.String, java.lang.String)) [java.lang.String, java.lang.String]: s2()
+call(SClass(java.lang.String, java.lang.String)) [java.lang.String, java.lang.String]: s1Start()
+call(SClass(java.lang.String, java.lang.String)) [java.lang.String, java.lang.String]: s1End()
+call(SClass(java.lang.String, java.lang.String)) [java.lang.String, java.lang.String]: bo2()
+call(SClass(java.lang.String, java.lang.String)) [java.lang.String, java.lang.String]: bo1Start()
+call(SClass(java.lang.String, java.lang.String)) [java.lang.String, java.lang.String]: bo1End()
+call(SClass(java.lang.String, java.lang.String)) [java.lang.String, java.lang.String]: bs2()
+call(SClass(java.lang.String, java.lang.String)) [java.lang.String, java.lang.String]: bs1Start()
+call(SClass(java.lang.String, java.lang.String)) [java.lang.String, java.lang.String]: bs1End()
+SClass(s1, s2)
+call(SClass(java.lang.String, java.lang.String, java.lang.String)) [java.lang.String, java.lang.String, java.lang.String]: o3()
+call(SClass(java.lang.String, java.lang.String, java.lang.String)) [java.lang.String, java.lang.String, java.lang.String]: o2Start()
+call(SClass(java.lang.String, java.lang.String, java.lang.String)) [java.lang.String, java.lang.String, java.lang.String]: o2End()
+call(SClass(java.lang.String, java.lang.String, java.lang.String)) [java.lang.String, java.lang.String, java.lang.String]: s3()
+call(SClass(java.lang.String, java.lang.String, java.lang.String)) [java.lang.String, java.lang.String, java.lang.String]: s2Start()
+call(SClass(java.lang.String, java.lang.String, java.lang.String)) [java.lang.String, java.lang.String, java.lang.String]: s2End()
+call(SClass(java.lang.String, java.lang.String, java.lang.String)) [java.lang.String, java.lang.String, java.lang.String]: bo3()
+call(SClass(java.lang.String, java.lang.String, java.lang.String)) [java.lang.String, java.lang.String, java.lang.String]: bo2Start()
+call(SClass(java.lang.String, java.lang.String, java.lang.String)) [java.lang.String, java.lang.String, java.lang.String]: bo2End()
+call(SClass(java.lang.String, java.lang.String, java.lang.String)) [java.lang.String, java.lang.String, java.lang.String]: bs3()
+call(SClass(java.lang.String, java.lang.String, java.lang.String)) [java.lang.String, java.lang.String, java.lang.String]: bs2Start()
+call(SClass(java.lang.String, java.lang.String, java.lang.String)) [java.lang.String, java.lang.String, java.lang.String]: bs2End()
+SClass(s1, s2, s3)
+call(void SClass.f()) []: none()
+SClass.f()
+call(void SClass.f(java.lang.String)) [java.lang.String]: o1()
+call(void SClass.f(java.lang.String)) [java.lang.String]: s1()
+call(void SClass.f(java.lang.String)) [java.lang.String]: bo1()
+call(void SClass.f(java.lang.String)) [java.lang.String]: bs1()
+SClass.f(s1)
+call(void SClass.f(java.lang.String, java.lang.String)) [java.lang.String, java.lang.String]: o2()
+call(void SClass.f(java.lang.String, java.lang.String)) [java.lang.String, java.lang.String]: o1Start()
+call(void SClass.f(java.lang.String, java.lang.String)) [java.lang.String, java.lang.String]: o1End()
+call(void SClass.f(java.lang.String, java.lang.String)) [java.lang.String, java.lang.String]: s2()
+call(void SClass.f(java.lang.String, java.lang.String)) [java.lang.String, java.lang.String]: s1Start()
+call(void SClass.f(java.lang.String, java.lang.String)) [java.lang.String, java.lang.String]: s1End()
+call(void SClass.f(java.lang.String, java.lang.String)) [java.lang.String, java.lang.String]: bo2()
+call(void SClass.f(java.lang.String, java.lang.String)) [java.lang.String, java.lang.String]: bo1Start()
+call(void SClass.f(java.lang.String, java.lang.String)) [java.lang.String, java.lang.String]: bo1End()
+call(void SClass.f(java.lang.String, java.lang.String)) [java.lang.String, java.lang.String]: bs2()
+call(void SClass.f(java.lang.String, java.lang.String)) [java.lang.String, java.lang.String]: bs1Start()
+call(void SClass.f(java.lang.String, java.lang.String)) [java.lang.String, java.lang.String]: bs1End()
+SClass.f(s1, s2)
+call(void SClass.f(java.lang.String, java.lang.String, java.lang.String)) [java.lang.String, java.lang.String, java.lang.String]: o3()
+call(void SClass.f(java.lang.String, java.lang.String, java.lang.String)) [java.lang.String, java.lang.String, java.lang.String]: o2Start()
+call(void SClass.f(java.lang.String, java.lang.String, java.lang.String)) [java.lang.String, java.lang.String, java.lang.String]: o2End()
+call(void SClass.f(java.lang.String, java.lang.String, java.lang.String)) [java.lang.String, java.lang.String, java.lang.String]: s3()
+call(void SClass.f(java.lang.String, java.lang.String, java.lang.String)) [java.lang.String, java.lang.String, java.lang.String]: s2Start()
+call(void SClass.f(java.lang.String, java.lang.String, java.lang.String)) [java.lang.String, java.lang.String, java.lang.String]: s2End()
+call(void SClass.f(java.lang.String, java.lang.String, java.lang.String)) [java.lang.String, java.lang.String, java.lang.String]: bo3()
+call(void SClass.f(java.lang.String, java.lang.String, java.lang.String)) [java.lang.String, java.lang.String, java.lang.String]: bo2Start()
+call(void SClass.f(java.lang.String, java.lang.String, java.lang.String)) [java.lang.String, java.lang.String, java.lang.String]: bo2End()
+call(void SClass.f(java.lang.String, java.lang.String, java.lang.String)) [java.lang.String, java.lang.String, java.lang.String]: bs3()
+call(void SClass.f(java.lang.String, java.lang.String, java.lang.String)) [java.lang.String, java.lang.String, java.lang.String]: bs2Start()
+call(void SClass.f(java.lang.String, java.lang.String, java.lang.String)) [java.lang.String, java.lang.String, java.lang.String]: bs2End()
+SClass.f(s1, s2, s3)
+call(OClass()) []: none()
+OClass()
+call(OClass(java.lang.Object)) [OObject]: o1()
+call(OClass(java.lang.Object)) [OObject]: bo1()
+OClass(o1)
+call(OClass(java.lang.Object)) [java.lang.String]: o1()
+call(OClass(java.lang.Object)) [java.lang.String]: s1()
+call(OClass(java.lang.Object)) [java.lang.String]: bo1()
+call(OClass(java.lang.Object)) [java.lang.String]: bs1()
+OClass(s1)
+call(OClass(java.lang.Object, java.lang.Object)) [OObject, OObject]: o2()
+call(OClass(java.lang.Object, java.lang.Object)) [OObject, OObject]: o1Start()
+call(OClass(java.lang.Object, java.lang.Object)) [OObject, OObject]: o1End()
+call(OClass(java.lang.Object, java.lang.Object)) [OObject, OObject]: bo2()
+call(OClass(java.lang.Object, java.lang.Object)) [OObject, OObject]: bo1Start()
+call(OClass(java.lang.Object, java.lang.Object)) [OObject, OObject]: bo1End()
+OClass(o1, o2)
+call(OClass(java.lang.Object, java.lang.Object)) [OObject, java.lang.String]: o2()
+call(OClass(java.lang.Object, java.lang.Object)) [OObject, java.lang.String]: o1Start()
+call(OClass(java.lang.Object, java.lang.Object)) [OObject, java.lang.String]: o1End()
+call(OClass(java.lang.Object, java.lang.Object)) [OObject, java.lang.String]: s1End()
+call(OClass(java.lang.Object, java.lang.Object)) [OObject, java.lang.String]: bo2()
+call(OClass(java.lang.Object, java.lang.Object)) [OObject, java.lang.String]: bo1Start()
+call(OClass(java.lang.Object, java.lang.Object)) [OObject, java.lang.String]: bo1End()
+call(OClass(java.lang.Object, java.lang.Object)) [OObject, java.lang.String]: bs1End()
+OClass(o1, s2)
+call(OClass(java.lang.Object, java.lang.Object)) [java.lang.String, OObject]: o2()
+call(OClass(java.lang.Object, java.lang.Object)) [java.lang.String, OObject]: o1Start()
+call(OClass(java.lang.Object, java.lang.Object)) [java.lang.String, OObject]: o1End()
+call(OClass(java.lang.Object, java.lang.Object)) [java.lang.String, OObject]: s1Start()
+call(OClass(java.lang.Object, java.lang.Object)) [java.lang.String, OObject]: bo2()
+call(OClass(java.lang.Object, java.lang.Object)) [java.lang.String, OObject]: bo1Start()
+call(OClass(java.lang.Object, java.lang.Object)) [java.lang.String, OObject]: bo1End()
+call(OClass(java.lang.Object, java.lang.Object)) [java.lang.String, OObject]: bs1Start()
+OClass(s1, o2)
+call(OClass(java.lang.Object, java.lang.Object)) [java.lang.String, java.lang.String]: o2()
+call(OClass(java.lang.Object, java.lang.Object)) [java.lang.String, java.lang.String]: o1Start()
+call(OClass(java.lang.Object, java.lang.Object)) [java.lang.String, java.lang.String]: o1End()
+call(OClass(java.lang.Object, java.lang.Object)) [java.lang.String, java.lang.String]: s2()
+call(OClass(java.lang.Object, java.lang.Object)) [java.lang.String, java.lang.String]: s1Start()
+call(OClass(java.lang.Object, java.lang.Object)) [java.lang.String, java.lang.String]: s1End()
+call(OClass(java.lang.Object, java.lang.Object)) [java.lang.String, java.lang.String]: bo2()
+call(OClass(java.lang.Object, java.lang.Object)) [java.lang.String, java.lang.String]: bo1Start()
+call(OClass(java.lang.Object, java.lang.Object)) [java.lang.String, java.lang.String]: bo1End()
+call(OClass(java.lang.Object, java.lang.Object)) [java.lang.String, java.lang.String]: bs2()
+call(OClass(java.lang.Object, java.lang.Object)) [java.lang.String, java.lang.String]: bs1Start()
+call(OClass(java.lang.Object, java.lang.Object)) [java.lang.String, java.lang.String]: bs1End()
+OClass(s1, s2)
+call(OClass(java.lang.Object, java.lang.Object, java.lang.Object)) [OObject, OObject, OObject]: o3()
+call(OClass(java.lang.Object, java.lang.Object, java.lang.Object)) [OObject, OObject, OObject]: o2Start()
+call(OClass(java.lang.Object, java.lang.Object, java.lang.Object)) [OObject, OObject, OObject]: o2End()
+call(OClass(java.lang.Object, java.lang.Object, java.lang.Object)) [OObject, OObject, OObject]: bo3()
+call(OClass(java.lang.Object, java.lang.Object, java.lang.Object)) [OObject, OObject, OObject]: bo2Start()
+call(OClass(java.lang.Object, java.lang.Object, java.lang.Object)) [OObject, OObject, OObject]: bo2End()
+OClass(o1, o2, o3)
+call(OClass(java.lang.Object, java.lang.Object, java.lang.Object)) [OObject, OObject, java.lang.String]: o3()
+call(OClass(java.lang.Object, java.lang.Object, java.lang.Object)) [OObject, OObject, java.lang.String]: o2Start()
+call(OClass(java.lang.Object, java.lang.Object, java.lang.Object)) [OObject, OObject, java.lang.String]: o2End()
+call(OClass(java.lang.Object, java.lang.Object, java.lang.Object)) [OObject, OObject, java.lang.String]: bo3()
+call(OClass(java.lang.Object, java.lang.Object, java.lang.Object)) [OObject, OObject, java.lang.String]: bo2Start()
+call(OClass(java.lang.Object, java.lang.Object, java.lang.Object)) [OObject, OObject, java.lang.String]: bo2End()
+OClass(o1, o2, s3)
+call(OClass(java.lang.Object, java.lang.Object, java.lang.Object)) [OObject, java.lang.String, OObject]: o3()
+call(OClass(java.lang.Object, java.lang.Object, java.lang.Object)) [OObject, java.lang.String, OObject]: o2Start()
+call(OClass(java.lang.Object, java.lang.Object, java.lang.Object)) [OObject, java.lang.String, OObject]: o2End()
+call(OClass(java.lang.Object, java.lang.Object, java.lang.Object)) [OObject, java.lang.String, OObject]: bo3()
+call(OClass(java.lang.Object, java.lang.Object, java.lang.Object)) [OObject, java.lang.String, OObject]: bo2Start()
+call(OClass(java.lang.Object, java.lang.Object, java.lang.Object)) [OObject, java.lang.String, OObject]: bo2End()
+OClass(o1, s2, o3)
+call(OClass(java.lang.Object, java.lang.Object, java.lang.Object)) [OObject, java.lang.String, java.lang.String]: o3()
+call(OClass(java.lang.Object, java.lang.Object, java.lang.Object)) [OObject, java.lang.String, java.lang.String]: o2Start()
+call(OClass(java.lang.Object, java.lang.Object, java.lang.Object)) [OObject, java.lang.String, java.lang.String]: o2End()
+call(OClass(java.lang.Object, java.lang.Object, java.lang.Object)) [OObject, java.lang.String, java.lang.String]: s2End()
+call(OClass(java.lang.Object, java.lang.Object, java.lang.Object)) [OObject, java.lang.String, java.lang.String]: bo3()
+call(OClass(java.lang.Object, java.lang.Object, java.lang.Object)) [OObject, java.lang.String, java.lang.String]: bo2Start()
+call(OClass(java.lang.Object, java.lang.Object, java.lang.Object)) [OObject, java.lang.String, java.lang.String]: bo2End()
+call(OClass(java.lang.Object, java.lang.Object, java.lang.Object)) [OObject, java.lang.String, java.lang.String]: bs2End()
+OClass(o1, s2, s3)
+call(OClass(java.lang.Object, java.lang.Object, java.lang.Object)) [java.lang.String, OObject, OObject]: o3()
+call(OClass(java.lang.Object, java.lang.Object, java.lang.Object)) [java.lang.String, OObject, OObject]: o2Start()
+call(OClass(java.lang.Object, java.lang.Object, java.lang.Object)) [java.lang.String, OObject, OObject]: o2End()
+call(OClass(java.lang.Object, java.lang.Object, java.lang.Object)) [java.lang.String, OObject, OObject]: bo3()
+call(OClass(java.lang.Object, java.lang.Object, java.lang.Object)) [java.lang.String, OObject, OObject]: bo2Start()
+call(OClass(java.lang.Object, java.lang.Object, java.lang.Object)) [java.lang.String, OObject, OObject]: bo2End()
+OClass(s1, o2, o3)
+call(OClass(java.lang.Object, java.lang.Object, java.lang.Object)) [java.lang.String, OObject, java.lang.String]: o3()
+call(OClass(java.lang.Object, java.lang.Object, java.lang.Object)) [java.lang.String, OObject, java.lang.String]: o2Start()
+call(OClass(java.lang.Object, java.lang.Object, java.lang.Object)) [java.lang.String, OObject, java.lang.String]: o2End()
+call(OClass(java.lang.Object, java.lang.Object, java.lang.Object)) [java.lang.String, OObject, java.lang.String]: bo3()
+call(OClass(java.lang.Object, java.lang.Object, java.lang.Object)) [java.lang.String, OObject, java.lang.String]: bo2Start()
+call(OClass(java.lang.Object, java.lang.Object, java.lang.Object)) [java.lang.String, OObject, java.lang.String]: bo2End()
+OClass(s1, o2, s3)
+call(OClass(java.lang.Object, java.lang.Object, java.lang.Object)) [java.lang.String, java.lang.String, OObject]: o3()
+call(OClass(java.lang.Object, java.lang.Object, java.lang.Object)) [java.lang.String, java.lang.String, OObject]: o2Start()
+call(OClass(java.lang.Object, java.lang.Object, java.lang.Object)) [java.lang.String, java.lang.String, OObject]: o2End()
+call(OClass(java.lang.Object, java.lang.Object, java.lang.Object)) [java.lang.String, java.lang.String, OObject]: s2Start()
+call(OClass(java.lang.Object, java.lang.Object, java.lang.Object)) [java.lang.String, java.lang.String, OObject]: bo3()
+call(OClass(java.lang.Object, java.lang.Object, java.lang.Object)) [java.lang.String, java.lang.String, OObject]: bo2Start()
+call(OClass(java.lang.Object, java.lang.Object, java.lang.Object)) [java.lang.String, java.lang.String, OObject]: bo2End()
+call(OClass(java.lang.Object, java.lang.Object, java.lang.Object)) [java.lang.String, java.lang.String, OObject]: bs2Start()
+OClass(s1, s2, o3)
+call(OClass(java.lang.Object, java.lang.Object, java.lang.Object)) [java.lang.String, java.lang.String, java.lang.String]: o3()
+call(OClass(java.lang.Object, java.lang.Object, java.lang.Object)) [java.lang.String, java.lang.String, java.lang.String]: o2Start()
+call(OClass(java.lang.Object, java.lang.Object, java.lang.Object)) [java.lang.String, java.lang.String, java.lang.String]: o2End()
+call(OClass(java.lang.Object, java.lang.Object, java.lang.Object)) [java.lang.String, java.lang.String, java.lang.String]: s3()
+call(OClass(java.lang.Object, java.lang.Object, java.lang.Object)) [java.lang.String, java.lang.String, java.lang.String]: s2Start()
+call(OClass(java.lang.Object, java.lang.Object, java.lang.Object)) [java.lang.String, java.lang.String, java.lang.String]: s2End()
+call(OClass(java.lang.Object, java.lang.Object, java.lang.Object)) [java.lang.String, java.lang.String, java.lang.String]: bo3()
+call(OClass(java.lang.Object, java.lang.Object, java.lang.Object)) [java.lang.String, java.lang.String, java.lang.String]: bo2Start()
+call(OClass(java.lang.Object, java.lang.Object, java.lang.Object)) [java.lang.String, java.lang.String, java.lang.String]: bo2End()
+call(OClass(java.lang.Object, java.lang.Object, java.lang.Object)) [java.lang.String, java.lang.String, java.lang.String]: bs3()
+call(OClass(java.lang.Object, java.lang.Object, java.lang.Object)) [java.lang.String, java.lang.String, java.lang.String]: bs2Start()
+call(OClass(java.lang.Object, java.lang.Object, java.lang.Object)) [java.lang.String, java.lang.String, java.lang.String]: bs2End()
+OClass(s1, s2, s3)
+call(void OClass.f()) []: none()
+OClass.f()
+call(void OClass.f(java.lang.Object)) [OObject]: o1()
+call(void OClass.f(java.lang.Object)) [OObject]: bo1()
+OClass.f(o1)
+call(void OClass.f(java.lang.Object)) [java.lang.String]: o1()
+call(void OClass.f(java.lang.Object)) [java.lang.String]: s1()
+call(void OClass.f(java.lang.Object)) [java.lang.String]: bo1()
+call(void OClass.f(java.lang.Object)) [java.lang.String]: bs1()
+OClass.f(s1)
+call(void OClass.f(java.lang.Object, java.lang.Object)) [OObject, OObject]: o2()
+call(void OClass.f(java.lang.Object, java.lang.Object)) [OObject, OObject]: o1Start()
+call(void OClass.f(java.lang.Object, java.lang.Object)) [OObject, OObject]: o1End()
+call(void OClass.f(java.lang.Object, java.lang.Object)) [OObject, OObject]: bo2()
+call(void OClass.f(java.lang.Object, java.lang.Object)) [OObject, OObject]: bo1Start()
+call(void OClass.f(java.lang.Object, java.lang.Object)) [OObject, OObject]: bo1End()
+OClass.f(o1, o2)
+call(void OClass.f(java.lang.Object, java.lang.Object)) [OObject, java.lang.String]: o2()
+call(void OClass.f(java.lang.Object, java.lang.Object)) [OObject, java.lang.String]: o1Start()
+call(void OClass.f(java.lang.Object, java.lang.Object)) [OObject, java.lang.String]: o1End()
+call(void OClass.f(java.lang.Object, java.lang.Object)) [OObject, java.lang.String]: s1End()
+call(void OClass.f(java.lang.Object, java.lang.Object)) [OObject, java.lang.String]: bo2()
+call(void OClass.f(java.lang.Object, java.lang.Object)) [OObject, java.lang.String]: bo1Start()
+call(void OClass.f(java.lang.Object, java.lang.Object)) [OObject, java.lang.String]: bo1End()
+call(void OClass.f(java.lang.Object, java.lang.Object)) [OObject, java.lang.String]: bs1End()
+OClass.f(o1, s2)
+call(void OClass.f(java.lang.Object, java.lang.Object)) [java.lang.String, OObject]: o2()
+call(void OClass.f(java.lang.Object, java.lang.Object)) [java.lang.String, OObject]: o1Start()
+call(void OClass.f(java.lang.Object, java.lang.Object)) [java.lang.String, OObject]: o1End()
+call(void OClass.f(java.lang.Object, java.lang.Object)) [java.lang.String, OObject]: s1Start()
+call(void OClass.f(java.lang.Object, java.lang.Object)) [java.lang.String, OObject]: bo2()
+call(void OClass.f(java.lang.Object, java.lang.Object)) [java.lang.String, OObject]: bo1Start()
+call(void OClass.f(java.lang.Object, java.lang.Object)) [java.lang.String, OObject]: bo1End()
+call(void OClass.f(java.lang.Object, java.lang.Object)) [java.lang.String, OObject]: bs1Start()
+OClass.f(s1, o2)
+call(void OClass.f(java.lang.Object, java.lang.Object)) [java.lang.String, java.lang.String]: o2()
+call(void OClass.f(java.lang.Object, java.lang.Object)) [java.lang.String, java.lang.String]: o1Start()
+call(void OClass.f(java.lang.Object, java.lang.Object)) [java.lang.String, java.lang.String]: o1End()
+call(void OClass.f(java.lang.Object, java.lang.Object)) [java.lang.String, java.lang.String]: s2()
+call(void OClass.f(java.lang.Object, java.lang.Object)) [java.lang.String, java.lang.String]: s1Start()
+call(void OClass.f(java.lang.Object, java.lang.Object)) [java.lang.String, java.lang.String]: s1End()
+call(void OClass.f(java.lang.Object, java.lang.Object)) [java.lang.String, java.lang.String]: bo2()
+call(void OClass.f(java.lang.Object, java.lang.Object)) [java.lang.String, java.lang.String]: bo1Start()
+call(void OClass.f(java.lang.Object, java.lang.Object)) [java.lang.String, java.lang.String]: bo1End()
+call(void OClass.f(java.lang.Object, java.lang.Object)) [java.lang.String, java.lang.String]: bs2()
+call(void OClass.f(java.lang.Object, java.lang.Object)) [java.lang.String, java.lang.String]: bs1Start()
+call(void OClass.f(java.lang.Object, java.lang.Object)) [java.lang.String, java.lang.String]: bs1End()
+OClass.f(s1, s2)
+call(void OClass.f(java.lang.Object, java.lang.Object, java.lang.Object)) [OObject, OObject, OObject]: o3()
+call(void OClass.f(java.lang.Object, java.lang.Object, java.lang.Object)) [OObject, OObject, OObject]: o2Start()
+call(void OClass.f(java.lang.Object, java.lang.Object, java.lang.Object)) [OObject, OObject, OObject]: o2End()
+call(void OClass.f(java.lang.Object, java.lang.Object, java.lang.Object)) [OObject, OObject, OObject]: bo3()
+call(void OClass.f(java.lang.Object, java.lang.Object, java.lang.Object)) [OObject, OObject, OObject]: bo2Start()
+call(void OClass.f(java.lang.Object, java.lang.Object, java.lang.Object)) [OObject, OObject, OObject]: bo2End()
+OClass.f(o1, o2, o3)
+call(void OClass.f(java.lang.Object, java.lang.Object, java.lang.Object)) [OObject, OObject, java.lang.String]: o3()
+call(void OClass.f(java.lang.Object, java.lang.Object, java.lang.Object)) [OObject, OObject, java.lang.String]: o2Start()
+call(void OClass.f(java.lang.Object, java.lang.Object, java.lang.Object)) [OObject, OObject, java.lang.String]: o2End()
+call(void OClass.f(java.lang.Object, java.lang.Object, java.lang.Object)) [OObject, OObject, java.lang.String]: bo3()
+call(void OClass.f(java.lang.Object, java.lang.Object, java.lang.Object)) [OObject, OObject, java.lang.String]: bo2Start()
+call(void OClass.f(java.lang.Object, java.lang.Object, java.lang.Object)) [OObject, OObject, java.lang.String]: bo2End()
+OClass.f(o1, o2, s3)
+call(void OClass.f(java.lang.Object, java.lang.Object, java.lang.Object)) [OObject, java.lang.String, OObject]: o3()
+call(void OClass.f(java.lang.Object, java.lang.Object, java.lang.Object)) [OObject, java.lang.String, OObject]: o2Start()
+call(void OClass.f(java.lang.Object, java.lang.Object, java.lang.Object)) [OObject, java.lang.String, OObject]: o2End()
+call(void OClass.f(java.lang.Object, java.lang.Object, java.lang.Object)) [OObject, java.lang.String, OObject]: bo3()
+call(void OClass.f(java.lang.Object, java.lang.Object, java.lang.Object)) [OObject, java.lang.String, OObject]: bo2Start()
+call(void OClass.f(java.lang.Object, java.lang.Object, java.lang.Object)) [OObject, java.lang.String, OObject]: bo2End()
+OClass.f(o1, s2, o3)
+call(void OClass.f(java.lang.Object, java.lang.Object, java.lang.Object)) [OObject, java.lang.String, java.lang.String]: o3()
+call(void OClass.f(java.lang.Object, java.lang.Object, java.lang.Object)) [OObject, java.lang.String, java.lang.String]: o2Start()
+call(void OClass.f(java.lang.Object, java.lang.Object, java.lang.Object)) [OObject, java.lang.String, java.lang.String]: o2End()
+call(void OClass.f(java.lang.Object, java.lang.Object, java.lang.Object)) [OObject, java.lang.String, java.lang.String]: s2End()
+call(void OClass.f(java.lang.Object, java.lang.Object, java.lang.Object)) [OObject, java.lang.String, java.lang.String]: bo3()
+call(void OClass.f(java.lang.Object, java.lang.Object, java.lang.Object)) [OObject, java.lang.String, java.lang.String]: bo2Start()
+call(void OClass.f(java.lang.Object, java.lang.Object, java.lang.Object)) [OObject, java.lang.String, java.lang.String]: bo2End()
+call(void OClass.f(java.lang.Object, java.lang.Object, java.lang.Object)) [OObject, java.lang.String, java.lang.String]: bs2End()
+OClass.f(o1, s2, s3)
+call(void OClass.f(java.lang.Object, java.lang.Object, java.lang.Object)) [java.lang.String, OObject, OObject]: o3()
+call(void OClass.f(java.lang.Object, java.lang.Object, java.lang.Object)) [java.lang.String, OObject, OObject]: o2Start()
+call(void OClass.f(java.lang.Object, java.lang.Object, java.lang.Object)) [java.lang.String, OObject, OObject]: o2End()
+call(void OClass.f(java.lang.Object, java.lang.Object, java.lang.Object)) [java.lang.String, OObject, OObject]: bo3()
+call(void OClass.f(java.lang.Object, java.lang.Object, java.lang.Object)) [java.lang.String, OObject, OObject]: bo2Start()
+call(void OClass.f(java.lang.Object, java.lang.Object, java.lang.Object)) [java.lang.String, OObject, OObject]: bo2End()
+OClass.f(s1, o2, o3)
+call(void OClass.f(java.lang.Object, java.lang.Object, java.lang.Object)) [java.lang.String, OObject, java.lang.String]: o3()
+call(void OClass.f(java.lang.Object, java.lang.Object, java.lang.Object)) [java.lang.String, OObject, java.lang.String]: o2Start()
+call(void OClass.f(java.lang.Object, java.lang.Object, java.lang.Object)) [java.lang.String, OObject, java.lang.String]: o2End()
+call(void OClass.f(java.lang.Object, java.lang.Object, java.lang.Object)) [java.lang.String, OObject, java.lang.String]: bo3()
+call(void OClass.f(java.lang.Object, java.lang.Object, java.lang.Object)) [java.lang.String, OObject, java.lang.String]: bo2Start()
+call(void OClass.f(java.lang.Object, java.lang.Object, java.lang.Object)) [java.lang.String, OObject, java.lang.String]: bo2End()
+OClass.f(s1, o2, s3)
+call(void OClass.f(java.lang.Object, java.lang.Object, java.lang.Object)) [java.lang.String, java.lang.String, OObject]: o3()
+call(void OClass.f(java.lang.Object, java.lang.Object, java.lang.Object)) [java.lang.String, java.lang.String, OObject]: o2Start()
+call(void OClass.f(java.lang.Object, java.lang.Object, java.lang.Object)) [java.lang.String, java.lang.String, OObject]: o2End()
+call(void OClass.f(java.lang.Object, java.lang.Object, java.lang.Object)) [java.lang.String, java.lang.String, OObject]: s2Start()
+call(void OClass.f(java.lang.Object, java.lang.Object, java.lang.Object)) [java.lang.String, java.lang.String, OObject]: bo3()
+call(void OClass.f(java.lang.Object, java.lang.Object, java.lang.Object)) [java.lang.String, java.lang.String, OObject]: bo2Start()
+call(void OClass.f(java.lang.Object, java.lang.Object, java.lang.Object)) [java.lang.String, java.lang.String, OObject]: bo2End()
+call(void OClass.f(java.lang.Object, java.lang.Object, java.lang.Object)) [java.lang.String, java.lang.String, OObject]: bs2Start()
+OClass.f(s1, s2, o3)
+call(void OClass.f(java.lang.Object, java.lang.Object, java.lang.Object)) [java.lang.String, java.lang.String, java.lang.String]: o3()
+call(void OClass.f(java.lang.Object, java.lang.Object, java.lang.Object)) [java.lang.String, java.lang.String, java.lang.String]: o2Start()
+call(void OClass.f(java.lang.Object, java.lang.Object, java.lang.Object)) [java.lang.String, java.lang.String, java.lang.String]: o2End()
+call(void OClass.f(java.lang.Object, java.lang.Object, java.lang.Object)) [java.lang.String, java.lang.String, java.lang.String]: s3()
+call(void OClass.f(java.lang.Object, java.lang.Object, java.lang.Object)) [java.lang.String, java.lang.String, java.lang.String]: s2Start()
+call(void OClass.f(java.lang.Object, java.lang.Object, java.lang.Object)) [java.lang.String, java.lang.String, java.lang.String]: s2End()
+call(void OClass.f(java.lang.Object, java.lang.Object, java.lang.Object)) [java.lang.String, java.lang.String, java.lang.String]: bo3()
+call(void OClass.f(java.lang.Object, java.lang.Object, java.lang.Object)) [java.lang.String, java.lang.String, java.lang.String]: bo2Start()
+call(void OClass.f(java.lang.Object, java.lang.Object, java.lang.Object)) [java.lang.String, java.lang.String, java.lang.String]: bo2End()
+call(void OClass.f(java.lang.Object, java.lang.Object, java.lang.Object)) [java.lang.String, java.lang.String, java.lang.String]: bs3()
+call(void OClass.f(java.lang.Object, java.lang.Object, java.lang.Object)) [java.lang.String, java.lang.String, java.lang.String]: bs2Start()
+call(void OClass.f(java.lang.Object, java.lang.Object, java.lang.Object)) [java.lang.String, java.lang.String, java.lang.String]: bs2End()
+OClass.f(s1, s2, s3)
diff --git a/tests/new/IndeterminateArg.java b/tests/new/IndeterminateArg.java new file mode 100644 index 000000000..db54c82de --- /dev/null +++ b/tests/new/IndeterminateArg.java @@ -0,0 +1,193 @@ + +import org.aspectj.testing.Tester; +import org.aspectj.lang.*; +import org.aspectj.lang.reflect.*; + +import java.util.Arrays; + +/** @testcase PR#764 binding args with single indeterminate prefix and suffix */ +public class IndeterminateArg { + public static void main (String[] args) { + Object o1 = new OObject("o1"); + Object o2 = new OObject("o2"); + Object o3 = new OObject("o3"); + String s1 = "s1"; + String s2 = "s2"; + String s3 = "s3"; + + SClass c; + c = new SClass(); + c = new SClass(s1); + c = new SClass(s1, s2); + c = new SClass(s1, s2, s3); + c.f(); + c.f(s1); + c.f(s1, s2); + c.f(s1, s2, s3); + + OClass o; + o = new OClass(); + o = new OClass(o1); + o = new OClass(s1); + o = new OClass(o1, o2); + o = new OClass(o1, s2); + o = new OClass(s1, o2); + o = new OClass(s1, s2); + o = new OClass(o1, o2, o3); + o = new OClass(o1, o2, s3); + o = new OClass(o1, s2, o3); + o = new OClass(o1, s2, s3); + o = new OClass(s1, o2, o3); + o = new OClass(s1, o2, s3); + o = new OClass(s1, s2, o3); + o = new OClass(s1, s2, s3); + + o.f(); + o.f(o1); + o.f(s1); + o.f(o1, o2); + o.f(o1, s2); + o.f(s1, o2); + o.f(s1, s2); + o.f(o1, o2, o3); + o.f(o1, o2, s3); + o.f(o1, s2, o3); + o.f(o1, s2, s3); + o.f(s1, o2, o3); + o.f(s1, o2, s3); + o.f(s1, s2, o3); + o.f(s1, s2, s3); + + Tester.checkEventsFromFile("IndeterminateArg.events"); + } +} + +class OObject { + final String s; + OObject(String s) { this.s = s; } + public String toString() { return s; } +} + +class T { + static void e(String s) { + Tester.event(s); + } +} + +interface C {} +class SClass implements C { + SClass() { T.e("SClass()"); } + SClass(String s1) { T.e("SClass(" + s1 + ")"); } + SClass(String s1, String s2) { T.e("SClass(" + s1 + ", " + s2 + ")"); } + SClass(String s1, String s2, String s3) { T.e("SClass(" + s1 + ", " + s2 + ", " + s3 + ")"); } + + void f() { T.e("SClass.f()"); } + void f(String s1) { T.e("SClass.f(" + s1 + ")"); } + void f(String s1, String s2) { T.e("SClass.f(" + s1 + ", " + s2 + ")"); } + void f(String s1, String s2, String s3) { T.e("SClass.f(" + s1 + ", " + s2 + ", " + s3 + ")"); } +} + +class OClass implements C { + OClass() { T.e("OClass()"); } + OClass(Object s1) { T.e("OClass(" + s1 + ")"); } + OClass(Object s1, Object s2) { T.e("OClass(" + s1 + ", " + s2 + ")"); } + OClass(Object s1, Object s2, Object s3) { T.e("OClass(" + s1 + ", " + s2 + ", " + s3 + ")"); } + + void f() { T.e("OClass.f()"); } + void f(Object s1) { T.e("OClass.f(" + s1 + ")"); } + void f(Object s1, Object s2) { T.e("OClass.f(" + s1 + ", " + s2 + ")"); } + void f(Object s1, Object s2, Object s3) { T.e("OClass.f(" + s1 + ", " + s2 + ", " + s3 + ")"); } +} + +aspect A { + + String actualTypes(JoinPoint jp) { // XXX gather as utility + Object[] types = jp.getArgs(); + StringBuffer sb = new StringBuffer(); + sb.append("["); + for (int i = 0; i < types.length; i++) { + sb.append(types[i].getClass().getName()); + if ((1+i) < types.length) { + sb.append(", "); + } + } + sb.append("]"); + return sb.toString(); + } + void check(String pc, JoinPoint jp) { + Class[] types = ((CodeSignature) jp.getSignature()).getParameterTypes(); + String name = jp.toLongString() + " " + actualTypes(jp) + ": " + pc; + T.e(name); + } + + pointcut safe() : (call(C+.new(..)) || call(* C+.*(..))); + // XXX should encode slots, range: a0o1 = args(Object); a3o2Start = args(Object, Object, *) + pointcut none() : args(); + pointcut o1() : args(Object); + pointcut o2() : args(Object, Object); + pointcut o3() : args(Object, Object, Object); + pointcut o1Start() : args(Object,*); + pointcut o1End() : args(*,Object); + pointcut o2Start() : args(Object, Object,*); + pointcut o2End() : args(*,Object, Object); + + pointcut s1() : args(String); + pointcut s2() : args(String, String); + pointcut s3() : args(String, String, String); + pointcut s1Start() : args(String,*); + pointcut s1End() : args(*,String); + pointcut s2Start() : args(String, String,*); + pointcut s2End() : args(*,String, String); + + // bind + pointcut bo1(Object o1) : args(o1); + pointcut bo2(Object o1, Object o2) : args(o1, o2); + pointcut bo3(Object o1, Object o2, Object o3) : args(o1, o2, o3); + pointcut bo1Start(Object o1) : args(o1,*); + pointcut bo1End(Object o1) : args(*,o1); + pointcut bo2Start(Object o1, Object o2) : args(o1, o2,*); + pointcut bo2End(Object o1, Object o2) : args(*,o1, o2); + + pointcut bs1(String s1) : args(s1); + pointcut bs2(String s1, String s2) : args(s1, s2); + pointcut bs3(String s1, String s2, String s3) : args(s1, s2, s3); + pointcut bs1Start(String s1) : args(s1,*); + pointcut bs1End(String s1) : args(*,s1); + pointcut bs2Start(String s1, String s2) : args(s1, s2,*); + pointcut bs2End(String s1, String s2) : args(*,s1, s2); + + before() : safe() && none() { check ("none()", thisJoinPoint); } + before() : safe() && o1() { check ("o1()", thisJoinPoint); } + before() : safe() && o2() { check ("o2()", thisJoinPoint); } + before() : safe() && o3() { check ("o3()", thisJoinPoint); } + before() : safe() && o1Start() { check ("o1Start()", thisJoinPoint); } + before() : safe() && o1End() { check ("o1End()", thisJoinPoint); } + before() : safe() && o2Start() { check ("o2Start()", thisJoinPoint); } + before() : safe() && o2End() { check ("o2End()", thisJoinPoint); } + + before() : safe() && s1() { check ("s1()", thisJoinPoint); } + before() : safe() && s2() { check ("s2()", thisJoinPoint); } + before() : safe() && s3() { check ("s3()", thisJoinPoint); } + before() : safe() && s1Start() { check ("s1Start()", thisJoinPoint); } + before() : safe() && s1End() { check ("s1End()", thisJoinPoint); } + before() : safe() && s2Start() { check ("s2Start()", thisJoinPoint); } + before() : safe() && s2End() { check ("s2End()", thisJoinPoint); } + + before(Object o1) : safe() && bo1(o1) { check ("bo1()", thisJoinPoint); } + before(Object o1, Object o2) : safe() && bo2(o1, o2) { check ("bo2()", thisJoinPoint); } + before(Object o1, Object o2, Object o3) : safe() && bo3(o1, o2, o3) { check ("bo3()", thisJoinPoint); } + before(Object o1) : safe() && bo1Start(o1) { check ("bo1Start()", thisJoinPoint); } + before(Object o1) : safe() && bo1End(o1) { check ("bo1End()", thisJoinPoint); } + before(Object o1, Object o2) : safe() && bo2Start(o1, o2) { check ("bo2Start()", thisJoinPoint); } + before(Object o1, Object o2) : safe() && bo2End(o1, o2) { check ("bo2End()", thisJoinPoint); } + + before(String s1) : safe() && bs1(s1) { check ("bs1()", thisJoinPoint); } + before(String s1, String s2) : safe() && bs2(s1, s2) { check ("bs2()", thisJoinPoint); } + before(String s1, String s2, String s3) : safe() && bs3(s1, s2, s3) { check ("bs3()", thisJoinPoint); } + before(String s1) : safe() && bs1Start(s1) { check ("bs1Start()", thisJoinPoint); } + before(String s1) : safe() && bs1End(s1) { check ("bs1End()", thisJoinPoint); } + before(String s1, String s2) : safe() && bs2Start(s1, s2) { check ("bs2Start()", thisJoinPoint); } + before(String s1, String s2) : safe() && bs2End(s1, s2) { check ("bs2End()", thisJoinPoint); } +} + + diff --git a/tests/new/IndeterminateArgType.events b/tests/new/IndeterminateArgType.events new file mode 100644 index 000000000..716ce215a --- /dev/null +++ b/tests/new/IndeterminateArgType.events @@ -0,0 +1,60 @@ +call(STarget(java.lang.String)) [java.lang.String]: o1Start()
+call(STarget(java.lang.String)) [java.lang.String]: o1End()
+call(STarget(java.lang.String)) [java.lang.String]: s1Start()
+call(STarget(java.lang.String)) [java.lang.String]: s1End()
+call(STarget(java.lang.String, java.lang.String)) [java.lang.String, java.lang.String]: o1Start()
+call(STarget(java.lang.String, java.lang.String)) [java.lang.String, java.lang.String]: o1End()
+call(STarget(java.lang.String, java.lang.String)) [java.lang.String, java.lang.String]: s1Start()
+call(STarget(java.lang.String, java.lang.String)) [java.lang.String, java.lang.String]: s1End()
+call(STarget(java.lang.String, java.lang.String, java.lang.String)) [java.lang.String, java.lang.String, java.lang.String]: o1Start()
+call(STarget(java.lang.String, java.lang.String, java.lang.String)) [java.lang.String, java.lang.String, java.lang.String]: o1End()
+call(STarget(java.lang.String, java.lang.String, java.lang.String)) [java.lang.String, java.lang.String, java.lang.String]: s1Start()
+call(STarget(java.lang.String, java.lang.String, java.lang.String)) [java.lang.String, java.lang.String, java.lang.String]: s1End()
+call(void STarget.f(java.lang.String)) [java.lang.String]: o1Start()
+call(void STarget.f(java.lang.String)) [java.lang.String]: o1End()
+call(void STarget.f(java.lang.String)) [java.lang.String]: s1Start()
+call(void STarget.f(java.lang.String)) [java.lang.String]: s1End()
+call(void STarget.f(java.lang.String, java.lang.String)) [java.lang.String, java.lang.String]: o1Start()
+call(void STarget.f(java.lang.String, java.lang.String)) [java.lang.String, java.lang.String]: o1End()
+call(void STarget.f(java.lang.String, java.lang.String)) [java.lang.String, java.lang.String]: s1Start()
+call(void STarget.f(java.lang.String, java.lang.String)) [java.lang.String, java.lang.String]: s1End()
+call(void STarget.f(java.lang.String, java.lang.String, java.lang.String)) [java.lang.String, java.lang.String, java.lang.String]: o1Start()
+call(void STarget.f(java.lang.String, java.lang.String, java.lang.String)) [java.lang.String, java.lang.String, java.lang.String]: o1End()
+call(void STarget.f(java.lang.String, java.lang.String, java.lang.String)) [java.lang.String, java.lang.String, java.lang.String]: s1Start()
+call(void STarget.f(java.lang.String, java.lang.String, java.lang.String)) [java.lang.String, java.lang.String, java.lang.String]: s1End()
+call(OTarget(java.lang.Object)) [java.lang.String]: o1Start()
+call(OTarget(java.lang.Object)) [java.lang.String]: o1End()
+call(OTarget(java.lang.Object)) [java.lang.String]: s1Start()
+call(OTarget(java.lang.Object)) [java.lang.String]: s1End()
+call(OTarget(java.lang.Object, java.lang.Object)) [java.lang.String, java.lang.String]: o1Start()
+call(OTarget(java.lang.Object, java.lang.Object)) [java.lang.String, java.lang.String]: o1End()
+call(OTarget(java.lang.Object, java.lang.Object)) [java.lang.String, java.lang.String]: s1Start()
+call(OTarget(java.lang.Object, java.lang.Object)) [java.lang.String, java.lang.String]: s1End()
+call(OTarget(java.lang.Object, java.lang.Object, java.lang.Object)) [java.lang.String, java.lang.String, java.lang.String]: o1Start()
+call(OTarget(java.lang.Object, java.lang.Object, java.lang.Object)) [java.lang.String, java.lang.String, java.lang.String]: o1End()
+call(OTarget(java.lang.Object, java.lang.Object, java.lang.Object)) [java.lang.String, java.lang.String, java.lang.String]: s1Start()
+call(OTarget(java.lang.Object, java.lang.Object, java.lang.Object)) [java.lang.String, java.lang.String, java.lang.String]: s1End()
+call(void OTarget.f(java.lang.Object)) [java.lang.String]: o1Start()
+call(void OTarget.f(java.lang.Object)) [java.lang.String]: o1End()
+call(void OTarget.f(java.lang.Object)) [java.lang.String]: s1Start()
+call(void OTarget.f(java.lang.Object)) [java.lang.String]: s1End()
+call(void OTarget.f(java.lang.Object, java.lang.Object)) [java.lang.String, java.lang.String]: o1Start()
+call(void OTarget.f(java.lang.Object, java.lang.Object)) [java.lang.String, java.lang.String]: o1End()
+call(void OTarget.f(java.lang.Object, java.lang.Object)) [java.lang.String, java.lang.String]: s1Start()
+call(void OTarget.f(java.lang.Object, java.lang.Object)) [java.lang.String, java.lang.String]: s1End()
+call(void OTarget.f(java.lang.Object, java.lang.Object, java.lang.Object)) [java.lang.String, java.lang.String, java.lang.String]: o1Start()
+call(void OTarget.f(java.lang.Object, java.lang.Object, java.lang.Object)) [java.lang.String, java.lang.String, java.lang.String]: o1End()
+call(void OTarget.f(java.lang.Object, java.lang.Object, java.lang.Object)) [java.lang.String, java.lang.String, java.lang.String]: s1Start()
+call(void OTarget.f(java.lang.Object, java.lang.Object, java.lang.Object)) [java.lang.String, java.lang.String, java.lang.String]: s1End()
+call(OTarget(java.lang.Object)) [java.lang.Object]: o1Start()
+call(OTarget(java.lang.Object)) [java.lang.Object]: o1End()
+call(OTarget(java.lang.Object, java.lang.Object)) [java.lang.Object, java.lang.Object]: o1Start()
+call(OTarget(java.lang.Object, java.lang.Object)) [java.lang.Object, java.lang.Object]: o1End()
+call(OTarget(java.lang.Object, java.lang.Object, java.lang.Object)) [java.lang.Object, java.lang.Object, java.lang.Object]: o1Start()
+call(OTarget(java.lang.Object, java.lang.Object, java.lang.Object)) [java.lang.Object, java.lang.Object, java.lang.Object]: o1End()
+call(void OTarget.f(java.lang.Object)) [java.lang.Object]: o1Start()
+call(void OTarget.f(java.lang.Object)) [java.lang.Object]: o1End()
+call(void OTarget.f(java.lang.Object, java.lang.Object)) [java.lang.Object, java.lang.Object]: o1Start()
+call(void OTarget.f(java.lang.Object, java.lang.Object)) [java.lang.Object, java.lang.Object]: o1End()
+call(void OTarget.f(java.lang.Object, java.lang.Object, java.lang.Object)) [java.lang.Object, java.lang.Object, java.lang.Object]: o1Start()
+call(void OTarget.f(java.lang.Object, java.lang.Object, java.lang.Object)) [java.lang.Object, java.lang.Object, java.lang.Object]: o1End()
diff --git a/tests/new/IndeterminateArgType.java b/tests/new/IndeterminateArgType.java new file mode 100644 index 000000000..4beb1301e --- /dev/null +++ b/tests/new/IndeterminateArgType.java @@ -0,0 +1,113 @@ + +import org.aspectj.testing.Tester; +import org.aspectj.lang.*; +import org.aspectj.lang.reflect.*; + +import java.util.Arrays; + +/** @testcase PR#764 check arg types with indeterminate prefix and suffix */ +public class IndeterminateArgType { + public static void main (String[] args) { + OTarget o; + STarget c; + // both pointcuts pick out args 1..3; neither picks out args 0 + // both actual Object and String match + c = new STarget(); + c = new STarget("s1"); + c = new STarget("s1", "s2"); + c = new STarget("s1", "s2", "s3"); + c.f(); + c.f("s1"); + c.f("s1", "s2"); + c.f("s1", "s2", "s3"); + // String pointcut should match even though declared type is Object + o = new OTarget(); + o = new OTarget("o1"); + o = new OTarget("o1", "o2"); + o = new OTarget("o1", "o2", "o3"); + o.f(); + o.f("o1"); + o.f("o1", "o2"); + o.f("o1", "o2", "o3"); + + // only actual Object types match these + Object input = new Object(); + o = new OTarget(); + o = new OTarget(input); + o = new OTarget(input, input); + o = new OTarget(input, input, input); + o.f(); + o.f(input); + o.f(input, input); + o.f(input, input, input); + + Tester.checkEventsFromFile("IndeterminateArgType.events"); + } +} + +interface Safe {} +class OTarget implements Safe { + OTarget() { } + OTarget(Object s1) { } + OTarget(Object s1, Object s2) { } + OTarget(Object s1, Object s2, Object s3) { } + + void f() { } + void f(Object s1) { } + void f(Object s1, Object s2) { } + void f(Object s1, Object s2, Object s3) { } +} + +class STarget implements Safe { + STarget() { } + STarget(String s1) { } + STarget(String s1, String s2) { } + STarget(String s1, String s2, String s3) { } + + void f() { } + void f(String s1) { } + void f(String s1, String s2) { } + void f(String s1, String s2, String s3) { } +} + +class T { + static void e(String s) { + Tester.event(s); + } +} + +aspect A { + + String actualTypes(JoinPoint jp) { // XXX gather as utility + Object[] types = jp.getArgs(); + StringBuffer sb = new StringBuffer(); + sb.append("["); + for (int i = 0; i < types.length; i++) { + sb.append(types[i].getClass().getName()); + if ((1+i) < types.length) { + sb.append(", "); + } + } + sb.append("]"); + return sb.toString(); + } + void check(String pc, JoinPoint jp) { + Class[] types = ((CodeSignature) jp.getSignature()).getParameterTypes(); + String name = jp.toLongString() + " " + actualTypes(jp) + ": " + pc; + T.e(name); + } + + pointcut safe() : call(Safe+.new(..)) || call(* Safe+.*(..)); + + pointcut o1End() : args(.., Object); + pointcut s1End() : args(.., String); + pointcut o1Start() : args(Object, ..); + pointcut s1Start() : args(String, ..); + + before() : safe() && o1Start() { check ("o1Start()", thisJoinPoint); } + before() : safe() && o1End() { check ("o1End()", thisJoinPoint); } + before() : safe() && s1Start() { check ("s1Start()", thisJoinPoint); } + before() : safe() && s1End() { check ("s1End()", thisJoinPoint); } +} + + diff --git a/tests/new/IndeterminateArgs.events b/tests/new/IndeterminateArgs.events new file mode 100644 index 000000000..cba748f78 --- /dev/null +++ b/tests/new/IndeterminateArgs.events @@ -0,0 +1,56 @@ +C()
+C(s1)
+C(s1, s2)
+C(s1, s2, s3)
+f()
+o1(): [class java.lang.String]
+o1Start(): [class java.lang.String]
+o1End(): [class java.lang.String]
+s1(): [class java.lang.String]
+s1Start(): [class java.lang.String]
+s1End(): [class java.lang.String]
+bo1(): [class java.lang.String]
+bo1Start(): [class java.lang.String]
+bo1End(): [class java.lang.String]
+bs1(): [class java.lang.String]
+bs1Start(): [class java.lang.String]
+bs1End(): [class java.lang.String]
+f(s1)
+o2(): [class java.lang.String, class java.lang.String]
+o1Start(): [class java.lang.String, class java.lang.String]
+o1End(): [class java.lang.String, class java.lang.String]
+o2Start(): [class java.lang.String, class java.lang.String]
+o2End(): [class java.lang.String, class java.lang.String]
+s2(): [class java.lang.String, class java.lang.String]
+s1Start(): [class java.lang.String, class java.lang.String]
+s1End(): [class java.lang.String, class java.lang.String]
+s2Start(): [class java.lang.String, class java.lang.String]
+s2End(): [class java.lang.String, class java.lang.String]
+bo2(): [class java.lang.String, class java.lang.String]
+bo1Start(): [class java.lang.String, class java.lang.String]
+bo1End(): [class java.lang.String, class java.lang.String]
+bo2Start(): [class java.lang.String, class java.lang.String]
+bo2End(): [class java.lang.String, class java.lang.String]
+bs2(): [class java.lang.String, class java.lang.String]
+bs1Start(): [class java.lang.String, class java.lang.String]
+bs1End(): [class java.lang.String, class java.lang.String]
+bs2Start(): [class java.lang.String, class java.lang.String]
+bs2End(): [class java.lang.String, class java.lang.String]
+f(s1, s2)
+o1Start(): [class java.lang.String, class java.lang.String, class java.lang.String]
+o1End(): [class java.lang.String, class java.lang.String, class java.lang.String]
+o2Start(): [class java.lang.String, class java.lang.String, class java.lang.String]
+o2End(): [class java.lang.String, class java.lang.String, class java.lang.String]
+s1Start(): [class java.lang.String, class java.lang.String, class java.lang.String]
+s1End(): [class java.lang.String, class java.lang.String, class java.lang.String]
+s2Start(): [class java.lang.String, class java.lang.String, class java.lang.String]
+s2End(): [class java.lang.String, class java.lang.String, class java.lang.String]
+bo1Start(): [class java.lang.String, class java.lang.String, class java.lang.String]
+bo1End(): [class java.lang.String, class java.lang.String, class java.lang.String]
+bo2Start(): [class java.lang.String, class java.lang.String, class java.lang.String]
+bo2End(): [class java.lang.String, class java.lang.String, class java.lang.String]
+bs1Start(): [class java.lang.String, class java.lang.String, class java.lang.String]
+bs1End(): [class java.lang.String, class java.lang.String, class java.lang.String]
+bs2Start(): [class java.lang.String, class java.lang.String, class java.lang.String]
+bs2End(): [class java.lang.String, class java.lang.String, class java.lang.String]
+f(s1, s2, s3)
diff --git a/tests/new/IndeterminateArgs.java b/tests/new/IndeterminateArgs.java new file mode 100644 index 000000000..2a7cfb828 --- /dev/null +++ b/tests/new/IndeterminateArgs.java @@ -0,0 +1,109 @@ + +import org.aspectj.testing.Tester; +import org.aspectj.lang.*; +import org.aspectj.lang.reflect.*; + +import java.util.Arrays; + +/** @testcase PR#764 binding args with indeterminate prefix and suffix */ +public class IndeterminateArgs { + public static void main (String[] args) { + C c; + c = new C(); + c = new C("s1"); + c = new C("s1", "s2"); + c = new C("s1", "s2", "s3"); + c.f(); + c.f("s1"); + c.f("s1", "s2"); + c.f("s1", "s2", "s3"); + Tester.checkEventsFromFile("IndeterminateArgs.events"); + } +} +class T { + static void e(String s) { + Tester.event(s); + } + static void ee(String s) { Tester.expectEvent(s); } +} + +class C { + C() { T.e("C()"); } + C(String s1) { T.e("C(" + s1 + ")"); } + C(String s1, String s2) { T.e("C(" + s1 + ", " + s2 + ")"); } + C(String s1, String s2, String s3) { T.e("C(" + s1 + ", " + s2 + ", " + s3 + ")"); } + + void f() { T.e("f()"); } + void f(String s1) { T.e("f(" + s1 + ")"); } + void f(String s1, String s2) { T.e("f(" + s1 + ", " + s2 + ")"); } + void f(String s1, String s2, String s3) { T.e("f(" + s1 + ", " + s2 + ", " + s3 + ")"); } +} + +aspect A { + + void check(String pc, JoinPoint jp) { + Class[] types = ((CodeSignature) jp.getSignature()).getParameterTypes(); + T.e(pc + ": " + Arrays.asList(types)); + } + + pointcut safe() : target(C) && (call(new(..)) || call(* *(..))); + + pointcut o1() : args(Object); + pointcut o2() : args(Object, Object); + pointcut o1Start() : args(Object,..); + pointcut o1End() : args(..,Object); + pointcut o2Start() : args(Object, Object,..); + pointcut o2End() : args(..,Object, Object); + + pointcut s1() : args(String); + pointcut s2() : args(String, String); + pointcut s1Start() : args(String,..); + pointcut s1End() : args(..,String); + pointcut s2Start() : args(String, String,..); + pointcut s2End() : args(..,String, String); + + // bind + pointcut bo1(Object o1) : args(o1); + pointcut bo2(Object o1, Object o2) : args(o1, o2); + pointcut bo1Start(Object o1) : args(o1,..); + pointcut bo1End(Object o1) : args(..,o1); + pointcut bo2Start(Object o1, Object o2) : args(o1, o2,..); + pointcut bo2End(Object o1, Object o2) : args(..,o1, o2); + + pointcut bs1(String s1) : args(s1); + pointcut bs2(String s1, String s2) : args(s1, s2); + pointcut bs1Start(String s1) : args(s1,..); + pointcut bs1End(String s1) : args(..,s1); + pointcut bs2Start(String s1, String s2) : args(s1, s2,..); + pointcut bs2End(String s1, String s2) : args(..,s1, s2); + + before() : safe() && o1() { check ("o1()", thisJoinPoint); } + before() : safe() && o2() { check ("o2()", thisJoinPoint); } + before() : safe() && o1Start() { check ("o1Start()", thisJoinPoint); } + before() : safe() && o1End() { check ("o1End()", thisJoinPoint); } + before() : safe() && o2Start() { check ("o2Start()", thisJoinPoint); } + before() : safe() && o2End() { check ("o2End()", thisJoinPoint); } + + before() : safe() && s1() { check ("s1()", thisJoinPoint); } + before() : safe() && s2() { check ("s2()", thisJoinPoint); } + before() : safe() && s1Start() { check ("s1Start()", thisJoinPoint); } + before() : safe() && s1End() { check ("s1End()", thisJoinPoint); } + before() : safe() && s2Start() { check ("s2Start()", thisJoinPoint); } + before() : safe() && s2End() { check ("s2End()", thisJoinPoint); } + + before(Object o1) : safe() && bo1(o1) { check ("bo1()", thisJoinPoint); } + before(Object o1, Object o2) : safe() && bo2(o1, o2) { check ("bo2()", thisJoinPoint); } + before(Object o1) : safe() && bo1Start(o1) { check ("bo1Start()", thisJoinPoint); } + before(Object o1) : safe() && bo1End(o1) { check ("bo1End()", thisJoinPoint); } + before(Object o1, Object o2) : safe() && bo2Start(o1, o2) { check ("bo2Start()", thisJoinPoint); } + before(Object o1, Object o2) : safe() && bo2End(o1, o2) { check ("bo2End()", thisJoinPoint); } + + before(String s1) : safe() && bs1(s1) { check ("bs1()", thisJoinPoint); } + before(String s1, String s2) : safe() && bs2(s1, s2) { check ("bs2()", thisJoinPoint); } + before(String s1) : safe() && bs1Start(s1) { check ("bs1Start()", thisJoinPoint); } + before(String s1) : safe() && bs1End(s1) { check ("bs1End()", thisJoinPoint); } + before(String s1, String s2) : safe() && bs2Start(s1, s2) { check ("bs2Start()", thisJoinPoint); } + before(String s1, String s2) : safe() && bs2End(s1, s2) { check ("bs2End()", thisJoinPoint); } +} + + diff --git a/tests/new/IndeterminateArgsCE.java b/tests/new/IndeterminateArgsCE.java new file mode 100644 index 000000000..bee26a8dd --- /dev/null +++ b/tests/new/IndeterminateArgsCE.java @@ -0,0 +1,76 @@ + +import org.aspectj.testing.Tester; +import org.aspectj.lang.*; +import org.aspectj.lang.reflect.*; + +import java.util.Arrays; + +/** @testcase PR#764 binding args with indeterminate prefix and suffix */ +public class IndeterminateArgsCE { + public static void main (String[] args) { + STarget c; + c = new STarget(); + c = new STarget("s1"); + c = new STarget("s1", "s2"); + c = new STarget("s1", "s2", "s3"); + c.f(); + c.f("s1"); + c.f("s1", "s2"); + c.f("s1", "s2", "s3"); + OTarget o; + o = new OTarget(); + o = new OTarget("o1"); + o = new OTarget("o1", "o2"); + o = new OTarget("o1", "o2", "o3"); + o.f(); + o.f("o1"); + o.f("o1", "o2"); + o.f("o1", "o2", "o3"); + } +} + +class OTarget { + OTarget() { } + OTarget(String s1) { } + OTarget(String s1, Object s2) { } // CE + OTarget(String s1, Object s2, String s3) { } // CE + + void f() { } + void f(String s1) { } + void f(String s1, Object s2) { } // CE + void f(String s1, Object s2, String s3) { } // CE +} +class STarget { + STarget() { } + STarget(String s1) { } + STarget(String s1, String s2) { } // CE + STarget(String s1, String s2, String s3) { } + + void f() { } + void f(String s1) { } + void f(String s1, String s2) { } // CE + void f(String s1, String s2, String s3) { } +} + +aspect A { + + void check(String pc, JoinPoint jp) { + Class[] types = ((CodeSignature) jp.getSignature()).getParameterTypes(); + //T.e(pc + ": " + Arrays.asList(types)); + } + + pointcut safeS() : target(STarget) && (call(new(..)) || call(* *(..))); + pointcut safeO() : target(OTarget) && (call(new(..)) || call(* *(..))); + + pointcut o1Anywhere() : args(.., Object, ..); + pointcut s1Anywhere() : args(.., String, ..); + pointcut bo1Anywhere(Object o) : args(.., o, ..); + pointcut bs1Anywhere(String s) : args(.., s, ..); + + before() : safeO() && o1Anywhere() { check ("o1Anywhere()", thisJoinPoint); } + before(Object o1) : safeO() && bo1Anywhere(o1) { check ("bo1Anywhere(o1)", thisJoinPoint); } + before() : safeS() && s1Anywhere() { check ("s1Anywhere()", thisJoinPoint); } + before(String s1) : safeS() && bs1Anywhere(s1) { check ("bs1Anywhere(s1)", thisJoinPoint); } +} + + diff --git a/tests/new/IndeterminateHandlerArg.events b/tests/new/IndeterminateHandlerArg.events new file mode 100644 index 000000000..faf8fea24 --- /dev/null +++ b/tests/new/IndeterminateHandlerArg.events @@ -0,0 +1,47 @@ +handler(catch(java.lang.Error)): java.lang.Error - error @ before Throwable
+handler(catch(java.lang.Error)): java.lang.Error - error @ before Error
+handler(catch(java.lang.Error)): java.lang.Error - error @ before args(Throwable)
+handler(catch(java.lang.Error)): java.lang.Error - error @ before args(Error)
+handler(catch(java.lang.Error)): java.lang.Error - error @ before args(Throwable,..)
+handler(catch(java.lang.Error)): java.lang.Error - error @ before args(..,Throwable)
+handler(catch(java.lang.Error)): java.lang.Error - error @ before args(Error,..)
+handler(catch(java.lang.Error)): java.lang.Error - error @ before args(..,Error)
+handler(catch(java.lang.Error)): java.lang.Error - error @ before Throwable,..
+handler(catch(java.lang.Error)): java.lang.Error - error @ before Error,..
+handler(catch(java.lang.Error)): java.lang.Error - error @ before ..,Throwable
+handler(catch(java.lang.Error)): java.lang.Error - error @ before ..,Error
+error
+handler(catch(java.lang.Throwable)): java.lang.Throwable - throwable @ before Throwable
+handler(catch(java.lang.Throwable)): java.lang.Throwable - throwable @ before args(Throwable)
+handler(catch(java.lang.Throwable)): java.lang.Throwable - throwable @ before args(Throwable,..)
+handler(catch(java.lang.Throwable)): java.lang.Throwable - throwable @ before args(..,Throwable)
+handler(catch(java.lang.Throwable)): java.lang.Throwable - throwable @ before Throwable,..
+handler(catch(java.lang.Throwable)): java.lang.Throwable - throwable @ before ..,Throwable
+throwable
+handler(catch(java.lang.Throwable)): java.lang.Error - error @ before Throwable
+handler(catch(java.lang.Throwable)): java.lang.Error - error @ before Error
+handler(catch(java.lang.Throwable)): java.lang.Error - error @ before args(Throwable)
+handler(catch(java.lang.Throwable)): java.lang.Error - error @ before args(Error)
+handler(catch(java.lang.Throwable)): java.lang.Error - error @ before args(Throwable,..)
+handler(catch(java.lang.Throwable)): java.lang.Error - error @ before args(..,Throwable)
+handler(catch(java.lang.Throwable)): java.lang.Error - error @ before args(Error,..)
+handler(catch(java.lang.Throwable)): java.lang.Error - error @ before args(..,Error)
+handler(catch(java.lang.Throwable)): java.lang.Error - error @ before Throwable,..
+handler(catch(java.lang.Throwable)): java.lang.Error - error @ before Error,..
+handler(catch(java.lang.Throwable)): java.lang.Error - error @ before ..,Throwable
+handler(catch(java.lang.Throwable)): java.lang.Error - error @ before ..,Error
+error
+handler(catch(java.lang.Throwable)): IndeterminateHandlerArg$1 - runtime @ before Throwable
+handler(catch(java.lang.Throwable)): IndeterminateHandlerArg$1 - runtime @ before args(Throwable)
+handler(catch(java.lang.Throwable)): IndeterminateHandlerArg$1 - runtime @ before args(Throwable,..)
+handler(catch(java.lang.Throwable)): IndeterminateHandlerArg$1 - runtime @ before args(..,Throwable)
+handler(catch(java.lang.Throwable)): IndeterminateHandlerArg$1 - runtime @ before Throwable,..
+handler(catch(java.lang.Throwable)): IndeterminateHandlerArg$1 - runtime @ before ..,Throwable
+runtime
+handler(catch(java.lang.RuntimeException)): IndeterminateHandlerArg$1 - runtime @ before Throwable
+handler(catch(java.lang.RuntimeException)): IndeterminateHandlerArg$1 - runtime @ before args(Throwable)
+handler(catch(java.lang.RuntimeException)): IndeterminateHandlerArg$1 - runtime @ before args(Throwable,..)
+handler(catch(java.lang.RuntimeException)): IndeterminateHandlerArg$1 - runtime @ before args(..,Throwable)
+handler(catch(java.lang.RuntimeException)): IndeterminateHandlerArg$1 - runtime @ before Throwable,..
+handler(catch(java.lang.RuntimeException)): IndeterminateHandlerArg$1 - runtime @ before ..,Throwable
+runtime
diff --git a/tests/new/IndeterminateHandlerArg.java b/tests/new/IndeterminateHandlerArg.java new file mode 100644 index 000000000..6f30336db --- /dev/null +++ b/tests/new/IndeterminateHandlerArg.java @@ -0,0 +1,71 @@ + +import org.aspectj.testing.Tester; +import org.aspectj.lang.*; +import org.aspectj.lang.reflect.*; + +/** @testcase PR#764 binding handler args with indeterminate prefix and suffix */ +public class IndeterminateHandlerArg { + public static void main (String[] args) { + Throwable throwable = new Throwable("throwable"); + Error error = new Error("error"); + RuntimeException runtime = new RuntimeException("runtime") { + RuntimeException f() { return this; } + }.f(); + + try { throw error; } + catch (Error e) { A.event(e.getMessage()); } + + try { throw throwable; } + catch (Throwable e) { A.event(e.getMessage()); } + try { throw error; } + catch (Throwable e) { A.event(e.getMessage()); } + try { throw runtime; } + catch (Throwable e) { A.event(e.getMessage()); } + + try { throw runtime; } + catch (RuntimeException e) { A.event(e.getMessage()); } + + Tester.checkEventsFromFile("IndeterminateHandlerArg.events"); + } +} + +aspect A { + void e(String label, JoinPoint jp) { + e(label, jp, (Throwable) jp.getArgs()[0]); + } + void e(String label, JoinPoint jp, Throwable t) { + String m = jp.toLongString() + + ": " + t.getClass().getName() + + " - " + t.getMessage() + + " @ " + label; + event(m); + } + static void event(String m) { + Tester.event(m); + } + + pointcut hd() : withincode(static void main(..)) && handler(*); + + before (Throwable t) : hd() && args(t) { e("before Throwable", thisJoinPoint, t); } + before (Error t) : hd() && args(t) { e("before Error", thisJoinPoint, t); } + before () : hd() && args(Throwable) { e("before args(Throwable)", thisJoinPoint); } + before () : hd() && args(Error) { e("before args(Error)", thisJoinPoint); } + before () : hd() && args(Throwable,..) { e("before args(Throwable,..)", thisJoinPoint); } + before () : hd() && args(..,Throwable) { e("before args(..,Throwable)", thisJoinPoint); } + before () : hd() && args(Error,..) { e("before args(Error,..)", thisJoinPoint); } + before () : hd() && args(..,Error) { e("before args(..,Error)", thisJoinPoint); } + before (Throwable t) : hd() && args(t,..) { e("before Throwable,..", thisJoinPoint, t); } + before (Error t) : hd() && args(t,..) { e("before Error,..", thisJoinPoint, t); } + before (Throwable t) : hd() && args(..,t) { e("before ..,Throwable", thisJoinPoint, t); } + before (Error t) : hd() && args(..,t) { e("before ..,Error", thisJoinPoint, t); } + + before () : hd() && args(Throwable,*) { Tester.check(false, "args(Throwable,*)"); } + before () : hd() && args(*,Throwable) { Tester.check(false, "args(*,Throwable)"); } + before () : hd() && args(Error,*) { Tester.check(false, "args(Error,*)"); } + before () : hd() && args(*,Error) { Tester.check(false, "args(*,Error)"); } + before (Throwable t) : hd() && args(t,*) { Tester.check(false, "args((Throwable)t,*)"); } + before (Error t) : hd() && args(t,*) { Tester.check(false, "args((Error)t,*)"); } + before (Throwable t) : hd() && args(*,t) { Tester.check(false, "args(*,(Throwable)t)"); } + before (Error t) : hd() && args(*,t) { Tester.check(false, "args(*,(Error)t)"); } +} + diff --git a/tests/new/InitializationOrder.java b/tests/new/InitializationOrder.java new file mode 100644 index 000000000..d4bd9bf0d --- /dev/null +++ b/tests/new/InitializationOrder.java @@ -0,0 +1,33 @@ + +import org.aspectj.testing.Tester; + +public class InitializationOrder { + public static void main (String[] args) { + C c = new C(); + Tester.check(null != c.s, "null == c.s"); + Sub s = new Sub(); + Tester.check("ok" == s.o, "\"ok\" == s.o"); + Tester.check(null == s.p, "null == s.p"); + } + +} + +class C { + public String s = null; + C(String s) { this.s = s; } + C() { this("uh oh"); } +} + +class S { + public Object p; + S(Object p) {this.p = p;} +} + +class Sub extends S { + Sub() { + super(null); // if (o), then C E illegal use of uninitialized value + o = "ok"; + } + Object o; +} + diff --git a/tests/new/InitializerAdvice.java b/tests/new/InitializerAdvice.java new file mode 100644 index 000000000..63ae8f859 --- /dev/null +++ b/tests/new/InitializerAdvice.java @@ -0,0 +1,35 @@ +import org.aspectj.testing.Tester; + +public aspect InitializerAdvice { + public static void test() { + Tester.checkEqual(Foo.getStaticField(), "initialized", "static"); + Tester.checkEqual(new Foo().getInstanceField(), "initialized", "instance"); + } + + public static void main(String[] args) { test(); } + + /*static*/ before(): call(* *(..)) && this(Foo) { + System.out.println("entering"); + } +} + +class Foo { + static String staticField = ""; + static { + staticField = "initialized"; + } + + String instanceField = ""; + { + instanceField = "initialized"; + } + + public static String getStaticField() { + return staticField; + } + + public String getInstanceField() { + return instanceField; + } +} + diff --git a/tests/new/InitializerTest.java b/tests/new/InitializerTest.java new file mode 100644 index 000000000..52f2d93af --- /dev/null +++ b/tests/new/InitializerTest.java @@ -0,0 +1,110 @@ +import org.aspectj.testing.Tester; + +class C { + public static String staticField = "initialized"; + + public String state = "C-initialized"; + + public C() { + state = "C-constructed"; + } +} + +class SubC extends C implements I { + { + state = "SubC-initialized"; + } + + public SubC() { + state = "SubC-constructed"; + } +} + +interface I { + public static String s = "initialized"; + public static String s1 = new String("s1"); +} + + +aspect A issingleton () { + before(): staticinitialization(C) { + Tester.checkEqual(C.staticField, null, "C.staticField"); + } + after(): staticinitialization(C) { + Tester.checkEqual(C.staticField, "initialized", "C.staticField"); + Tester.note("static initialized C"); + } + after(): staticinitialization(SubC) { + Tester.note("static initialized SubC"); + } + /* + before(): staticinitializations(I) { + Tester.checkEqual(I.s, null, "I.s"); + } + after(): staticinitializations(I) { + Tester.checkEqual(I.s, "initialized", "I.s"); + Tester.note("static initialized I"); + } + */ + + + before(C c): initialization(C.new(..)) && this(c) { + Tester.checkEqual(c.state, null, "c.state"); + } + + before(C c): execution(C.new(..)) && this(c) { + // change from 1.0 is that fields aren't initialized at this point + Tester.checkEqual(c.state, null, "c.state pre-constructor"); //"C-initialized", "c.state"); + Tester.note("constructed C"); + } + + after(C c): initialization(C.new(..)) && this(c) { + Tester.checkEqual(c.state, "C-constructed", "c.state"); + Tester.note("initialized C"); + } + + + before(SubC subc): initialization(SubC.new(..)) && this(subc) { + Tester.checkEqual(subc.state, "C-constructed", "c.state"); + } + before(SubC subc): execution(SubC.new(..)) && this(subc) { + // change from 1.0 is that fields aren't initialized at this point + Tester.checkEqual(subc.state, "C-constructed", "c.state"); //"SubC-initialized", "c.state"); + Tester.note("constructed SubC"); + } + + after(SubC subc): initialization(SubC.new(..)) && this(subc) { + Tester.checkEqual(subc.state, "SubC-constructed", thisJoinPoint.toString()); + Tester.note("initialized SubC"); + } + + before(I i): initialization(I.new()) && this(i) { + Tester.checkEqual(((C)i).state, "C-constructed", thisJoinPoint.toString()); + } + before(I i): execution(I.new()) && this(i) { + Tester.checkEqual(((C)i).state, "C-constructed", thisJoinPoint.toString()); + Tester.note("constructed I"); + } + after(I i): initialization(I.new()) && this(i) { + Tester.checkEqual(((C)i).state, "C-constructed", thisJoinPoint.toString()); + Tester.note("initialized I"); + } +} + +public class InitializerTest { + public static void main(String[] args) { + new SubC(); + Tester.check("initialized C"); + Tester.check("initialized SubC"); + Tester.check("constructed C"); + Tester.check("constructed SubC"); + + Tester.check("initialized I"); + Tester.check("constructed I"); + + Tester.check("static initialized C"); + Tester.check("static initialized SubC"); + //XXX not doing static initializers in interfaces yet + //XXX Tester.check("static initialized I"); + } +} diff --git a/tests/new/InitializerWithThrow.java b/tests/new/InitializerWithThrow.java new file mode 100644 index 000000000..589e5f6b0 --- /dev/null +++ b/tests/new/InitializerWithThrow.java @@ -0,0 +1,22 @@ +import org.aspectj.testing.Tester; + +public class InitializerWithThrow { + public static void main(String[] args) { + try { + new InitializerWithThrow(); + Tester.check(false, "no exception"); + } catch (TestException te) { + } + } + + static class TestException extends Exception {} + + int i = ini(); + + static int ini() throws TestException { + throw new TestException(); + } + + InitializerWithThrow() throws TestException {} + +} diff --git a/tests/new/InnerAccess.java b/tests/new/InnerAccess.java new file mode 100644 index 000000000..5d58f6eaf --- /dev/null +++ b/tests/new/InnerAccess.java @@ -0,0 +1,27 @@ +import org.aspectj.testing.Tester; + +import java.util.*; + +public class InnerAccess { + public static void main(String[] args) { + Tester.checkEqual(new C().getCount(), 2); + } +} + + +class C { + protected int i = 2; + private String s = "hi"; + + public int getCount() { + return new Object() { + public int m() { + return s.length(); + } + }.m(); + } +} + + +class D implements Map.Entry { +} diff --git a/tests/new/InnerClassInPrivilegedAspect.java b/tests/new/InnerClassInPrivilegedAspect.java new file mode 100644 index 000000000..f64221581 --- /dev/null +++ b/tests/new/InnerClassInPrivilegedAspect.java @@ -0,0 +1,160 @@ +import org.aspectj.testing.Tester; + +/** @testcase PR#555 inner classes of privileged aspects cannot see target class private members */ +public class InnerClassInPrivilegedAspect { + public static void main(String[] args) { + Util.start(); + Target.main(args); + new Target().toString(); + Util.end(); + } +} + +class Util { + public static void event(String s) { + //System.out.println(s); + Tester.event(s); + } + public static void start() { + // failing + Tester.expectEvent("before runner1"); + Tester.expectEvent("before intro1"); + Tester.expectEvent("new1"); + Tester.expectEvent("around runner1"); + Tester.expectEvent("around intro1"); + Tester.expectEvent("before instance1"); + Tester.expectEvent("around instance1"); + Tester.expectEvent("pcd if()1"); + Tester.expectEvent("before run1"); + Tester.expectEvent("around run1"); + + // passing + Tester.expectEvent("before pcd if()1"); + Tester.expectEvent("before1"); + Tester.expectEvent("around1"); + } + public static void end() { + Tester.checkAllEvents(); + } +} + +class Target { + private static int privateStaticInt = 1; + private int privateInt = 1; + public static void main(String args[]) { } +} + +interface Test { + public boolean t(); +} +privileged aspect PrivilegedAspectBefore { + pointcut p() : execution(static void Target.main(..)); + + static class IfTest { + public boolean t(){ Util.event("pcd if()"+Target.privateStaticInt); return true;} + } + + pointcut q() : p() + && if(new IfTest().t()); + + + before() : q() { Util.event("before pcd if()" + Target.privateStaticInt); } + + /** @testcase privileged access to target private static variables in introduced member (of anonymous class type)*/ + static Runnable Target.runner = new Runnable() { + public void run() { Util.event("before runner"+Target.privateStaticInt); } + }; + before() : p() { Target.runner.run(); } + + before() : p() { + /** @testcase privileged access to target private static variables in before advice (ok) */ + Util.event("before" +Target.privateStaticInt); + } + before() : p() { + /** @testcase privileged access to target private static variables from inner class inside before advice */ + Runnable inner = new Runnable() { + public void run() { + Util.event("before run" +Target.privateStaticInt); + } + }; + inner.run(); + } + + /** @testcase privileged access to target private static variables from inner class inside introduced method */ + before() : p() { Target.runbefore(); } + static void Target.runbefore() { + Runnable inner = new Runnable() { + public void run() { + Util.event("before intro" +Target.privateStaticInt); + } + }; + inner.run(); + } +} +/** differs from PrivilegedAspectBefore only in using around advice */ +privileged aspect PrivilegedAspectAround { + pointcut p() : execution(static void Target.main(..)); + + /** @testcase privileged access to target private static variables from inner class in introduced constructor */ + Target.new() { + int i = privateStaticInt; + Runnable p = new Runnable() { + public void run() { Util.event("new"+Target.privateStaticInt); } + }; + p.run(); + } + /** @testcase privileged access to target private static variables in introduced member (of anonymous class type)*/ + static Runnable Target.runner2 = new Runnable() { + public void run() { Util.event("around runner"+Target.privateStaticInt); } + }; + Object around() : p() { Target.runner2.run(); return proceed();} + Object around() : p() { + /** @testcase privileged access to target private static variables in before advice (ok) */ + Util.event("around" +Target.privateStaticInt); + return proceed(); + } + Object around() : p() { + /** @testcase privileged access to target private static variables from inner class inside around advice */ + Runnable inner = new Runnable() { + public void run() { + Util.event("around run" +Target.privateStaticInt); + } + }; + inner.run(); + return proceed(); + } + + Object around() : p() { Target.runaround(); return proceed(); } + /** @testcase privileged access to target private static variables from inner class inside introduced method */ + static void Target.runaround() { + Runnable inner = new Runnable() { + public void run() { + Util.event("around intro" +Target.privateStaticInt); + } + }; + inner.run(); + } +} + +privileged aspect PrivilegedAspectAroundNonStatic { + /** @testcase privileged access to target private variables from inner class inside introduced method */ + before(Target t) : call(String Object.toString()) && target(t){ t.runbefore2(); } + void Target.runbefore2() { + Runnable inner = new Runnable() { + public void run() { + Util.event("before instance" +privateInt); + } + }; + inner.run(); + } + /** @testcase privileged access to target private variables from inner class inside introduced method */ + Object around(Target t) : call(String Object.toString()) && target(t){ t.runbefore3(); return proceed(t); } + void Target.runbefore3() { + Runnable inner = new Runnable() { + public void run() { + Util.event("around instance" +privateInt); + } + }; + inner.run(); + } +} diff --git a/tests/new/InnerClassNaming.java b/tests/new/InnerClassNaming.java new file mode 100644 index 000000000..bf0ec54e7 --- /dev/null +++ b/tests/new/InnerClassNaming.java @@ -0,0 +1,50 @@ +import java.awt.*; +import java.awt.event.*; +import org.aspectj.testing.Tester; + +/* + * I would like to listen to events fired by a whiteboard swing widget. + * When I listen to method invocations from the widget itself in + * an aspect, + * there + * is no problem (like say getPreferredSize()). + * + * But, when I want to listen to events fired by a mouse adapter + * from which + * I derived + * an inner class in the whiteboard like this : + * + * SOLUTION: Replace all super.inner to super$inner. + */ + +public class InnerClassNaming { + public static void main(String[] args) { + new InnerClassNaming(); + } + + InnerClassNaming() { + MouseListener listener = new MyListener(); + addMouseListener(listener); + } + + void addMouseListener(MouseListener listener) {} + + class MyListener extends MouseAdapter { + public void mousePressed(MouseEvent e) { + System.out.println("mousPressed: " + e); + } + } +} + +aspect MyAspect /*of eachobject(instanceof(InnerClassNaming.MyListener))*/ { + + pointcut pressed(InnerClassNaming.MyListener ls): + //instanceof(ls) && executions(* mousePressed(..)); + this(InnerClassNaming.MyListener) && + target(ls) && + execution(* mousePressed(..)); + + before(InnerClassNaming.MyListener ls): pressed(ls) { + System.out.println(thisJoinPoint); + } +} diff --git a/tests/new/InnerHell.java b/tests/new/InnerHell.java new file mode 100644 index 000000000..25ed61aa0 --- /dev/null +++ b/tests/new/InnerHell.java @@ -0,0 +1,15 @@ +import org.aspectj.testing.Tester; + +import javax.swing.*; + +public class InnerHell { + public static void main(String[] args) { + AbstractButton b = new MyButton(); + } +} + +class MyButton extends AbstractButton { + class AccessibleMyButton extends AccessibleJComponent { + } +} + diff --git a/tests/new/InnerInterfaceAccess.java b/tests/new/InnerInterfaceAccess.java new file mode 100644 index 000000000..5d81d162a --- /dev/null +++ b/tests/new/InnerInterfaceAccess.java @@ -0,0 +1,36 @@ +import org.aspectj.testing.*; + +/** @testcase PR#685 subaspect method declaration on superaspect inner interface (access) */ +public class InnerInterfaceAccess { + public static void main (String[] args) { + Object o = new C().getThis(); + Tester.check(null != o, + "null != new C().getThis()"); + ConcreteAspect cc = ConcreteAspect.aspectOf(); + Tester.check(null != cc, + "null != ConcreteAspect.aspectOf()"); + Object p = cc.getField(); + Tester.check(null != p, "null != cc.getField()"); + } +} +class C implements AbstractAspect.InnerInterface {} + +abstract aspect AbstractAspect { + /** bug iff interface defined in abstract aspect + * - not outer or subaspect + */ + interface InnerInterface {} + + private Object privateField = new Object(); + + Object getField() { + return privateField; // bad CE "can't bind name" + } +} + +aspect ConcreteAspect extends AbstractAspect { + /** bug iff method declaration on parent inner interface */ + public Object InnerInterface.getThis() { + return this; // bug: no instance available + } +} diff --git a/tests/new/InnerInterfaceNames.java b/tests/new/InnerInterfaceNames.java new file mode 100644 index 000000000..249b7bb13 --- /dev/null +++ b/tests/new/InnerInterfaceNames.java @@ -0,0 +1,58 @@ + +import org.aspectj.testing.*; + +/** @testcase PR#685 subaspect method declaration on superaspect inner interface (names) */ +public class InnerInterfaceNames { + public static void main (String[] args) { + Object o = new C().getThis(); + Tester.check(null != o, + "null != new C().getThis()"); + ConcreteAspect cc = ConcreteAspect.aspectOf(); + Tester.check(null != cc, + "null != ConcreteAspect.aspectOf()"); + Object p = cc.getField(); + Tester.check(null != p, "null != cc.getField()"); + } +} +class C implements AbstractAspect.InnerInterface {} + +abstract aspect AbstractAspect { + /** bug iff interface defined in abstract aspect + * - not outer or subaspect + */ + interface InnerInterface {} + + public Object publicField = new Object(); + + Object getField() { + return publicField; // bad CE "no instance available" + } +} + +aspect ConcreteAspect extends AbstractAspect { + /** bug iff method declaration on parent inner interface */ + public Object InnerInterface.getThis() { + return this; // bug: no instance available + } +} + + +/* +abstract aspect Composition { + interface Component {} + + public Object publicField = new Object(); + + Object test() { + return publicField; // bad CE "no instance available" + } + +} +aspect SampleComposition extends Composition { + public Object Component.getThis() { + return this; + } +} +*/ + + diff --git a/tests/new/InnerInterfaceTypes.java b/tests/new/InnerInterfaceTypes.java new file mode 100644 index 000000000..69e98ffb1 --- /dev/null +++ b/tests/new/InnerInterfaceTypes.java @@ -0,0 +1,31 @@ +import org.aspectj.testing.*; + +import java.util.Vector; + +/** @testcase PR#685 subaspect method declaration on superaspect inner interface (types) */ +public class InnerInterfaceTypes { + public static void main (String[] args) { + Object o = new C().getThis(); + Tester.check(null != o, + "null != new C().getThis()"); + ConcreteAspect cc = ConcreteAspect.aspectOf(); + Tester.check(null != cc, + "null != ConcreteAspect.aspectOf()"); + Object p = cc.getField(); + Tester.check(null != p, "null != cc.getField()"); + } +} +class C implements AbstractAspect.InnerInterface {} + +abstract aspect AbstractAspect { + /** bug iff interface defined in abstract aspect + * - not outer or subaspect + */ + interface InnerInterface {} + + private Object privateField = new Object(); + + Object getField() { + return new Vector(); // bad CE: "type name not found" + } +} diff --git a/tests/new/InnerInterfaceTypesHelper.java b/tests/new/InnerInterfaceTypesHelper.java new file mode 100644 index 000000000..a660c191b --- /dev/null +++ b/tests/new/InnerInterfaceTypesHelper.java @@ -0,0 +1,8 @@ + +/** @testcase PR#685 subaspect method declaration on superaspect inner interface (types) */ +aspect ConcreteAspect extends AbstractAspect { + /** bug iff method declaration on parent inner interface */ + public Object InnerInterface.getThis() { + return new Object(); + } +} diff --git a/tests/new/InnerMethods.java b/tests/new/InnerMethods.java new file mode 100644 index 000000000..1172f6162 --- /dev/null +++ b/tests/new/InnerMethods.java @@ -0,0 +1,34 @@ +import org.aspectj.testing.Tester; + +public class InnerMethods { + public static void main(String[] args) { + Tester.checkEqual(new Sub().new SubInner().f(2), 21); + + Tester.check("ran before calls advice"); + } +} + +class Super { + protected int m(int j) { return j*10; } + +} + +interface I { + int x = 1; +} + +class Sub extends Super implements I { + protected int m(int i) { return i; } + + class SubInner extends Super { + int f(int jj) { + return this.m(jj) + x; + } + } +} + +aspect A { + before (): call(int Super.m(int)) { + Tester.note("ran before calls advice"); + } +} diff --git a/tests/new/Inners.java b/tests/new/Inners.java new file mode 100644 index 000000000..2366b2c8e --- /dev/null +++ b/tests/new/Inners.java @@ -0,0 +1,413 @@ +import org.aspectj.testing.*; +import java.awt.event.*; +import javax.swing.*; + +public class Inners { + + public static void main(String[] args) { + new Inners().realMain(args); + } + + public void realMain(String[] args) { + unincludedInterfaces(); + includedInterfaces(); + unincludedAbstractClases(); + includedAbstractClases(); + Tester.checkAllEvents(); + } + + static { + // Ensure all methods run + Tester.expectEventsInString("localRunnable0,localRunnable1,anonRunnable,staticInnerRunnable0" + + ",innerRunnable0,staticInnerRunnable1,innerRunnable1"); + Tester.expectEventsInString("localStuff0,localStuff1,anonStuff,staticInnerStuff0" + + ",innerStuff0,staticInnerStuff1,innerStuff1"); + Tester.expectEventsInString("localAbstractAction0,localAbstractAction1,,localAbstractAction2" + + ",anonAbstractAction0,anonAbstractAction1," + + ",staticInnerAbstractAction0,staticInnerAbstractAction1,staticInnerAbstractAction2" + + ",innerAbstractAction0,innerAbstractAction1,innerAbstractAction2"); + Tester.expectEventsInString("localAbstractStuff0,localAbstractStuff1,,localAbstractStuff2" + + ",anonAbstractStuff0,anonAbstractStuff1," + + ",staticInnerAbstractStuff0,staticInnerAbstractStuff1,staticInnerAbstractStuff2" + + ",innerAbstractStuff0,innerAbstractStuff1,innerAbstractStuff2"); + } + + static String s = ""; + static void c(Object o) { + s = o + ""; + } + + static int localRunnableI = 0; + private void unincludedInterfaces() { + class LocalRunnable implements Runnable { + public void run() { a("localRunnable" + (localRunnableI++)); } + } + Runnable r0 = new StaticInnerRunnable(); + Runnable r1 = new InnerRunnable(); + Runnable r2 = new LocalRunnable(); + Runnable r3 = new Runnable() { + public void run() { a("anonRunnable"); } + }; + StaticInnerRunnable r4 = new StaticInnerRunnable(); + InnerRunnable r5 = new InnerRunnable(); + LocalRunnable r6 = new LocalRunnable(); + c("ui-r0"); r0.run(); + c("ui-r1"); r1.run(); + c("ui-r2"); r2.run(); + c("ui-r3"); r3.run(); + c("ui-r4"); r4.run(); + c("ui-r5"); r5.run(); + c("ui-r6"); r6.run(); + } + + static int localStuffI = 0; + private void includedInterfaces() { + class LocalStuff implements Stuff { + public void run() { a("localStuff" + (localStuffI++)); } + } + Stuff r0 = new StaticInnerStuff(); + Stuff r1 = new InnerStuff(); + Stuff r2 = new LocalStuff(); + Stuff r3 = new Stuff() { + public void run() { a("anonStuff"); } + }; + StaticInnerStuff r4 = new StaticInnerStuff(); + InnerStuff r5 = new InnerStuff(); + LocalStuff r6 = new LocalStuff(); + c("ii-r0"); r0.run(); + c("ii-r1"); r1.run(); + c("ii-r2"); r2.run(); + c("ii-r3"); r3.run(); + c("ii-r4"); r4.run(); + c("ii-r5"); r5.run(); + c("ii-r6"); r6.run(); + } + + static int localAbstractActionI = 0; + private void unincludedAbstractClases() { + class LocalAbstractAction extends AbstractAction { + public void actionPerformed(ActionEvent e) { a("localAbstractAction" + (localAbstractActionI++)); } + } + AbstractAction r0 = new StaticInnerAbstractAction(); + AbstractAction r1 = new InnerAbstractAction(); + AbstractAction r2 = new LocalAbstractAction(); + AbstractAction r3 = new AbstractAction() { + public void actionPerformed(ActionEvent e) { a("anonAbstractAction0"); } + }; + StaticInnerAbstractAction r4 = new StaticInnerAbstractAction(); + InnerAbstractAction r5 = new InnerAbstractAction(); + LocalAbstractAction r6 = new LocalAbstractAction(); + ActionListener r7 = new StaticInnerAbstractAction(); + ActionListener r8 = new InnerAbstractAction(); + ActionListener r9 = new LocalAbstractAction(); + ActionListener r10 = new AbstractAction() { + public void actionPerformed(ActionEvent e) { a("anonAbstractAction1"); } + }; + c("ua-r0"); r0.actionPerformed(null); + c("ua-r1"); r1.actionPerformed(null); + c("ua-r2"); r2.actionPerformed(null); + c("ua-r3"); r3.actionPerformed(null); + c("ua-r4"); r4.actionPerformed(null); + c("ua-r5"); r5.actionPerformed(null); + c("ua-r6"); r6.actionPerformed(null); + c("ua-r7"); r7.actionPerformed(null); + c("ua-r8"); r8.actionPerformed(null); + c("ua-r9"); r9.actionPerformed(null); + c("ua-r10"); r10.actionPerformed(null); + } + + static int localAbstractStuffI = 0; + private void includedAbstractClases() { + class LocalAbstractStuff extends AbstractStuff { + public void run() { a("localAbstractStuff" + (localAbstractStuffI++)); } + } + AbstractStuff r0 = new StaticInnerAbstractStuff(); + AbstractStuff r1 = new InnerAbstractStuff(); + AbstractStuff r2 = new LocalAbstractStuff(); + AbstractStuff r3 = new AbstractStuff() { + public void run() { a("anonAbstractStuff0"); } + }; + StaticInnerAbstractStuff r4 = new StaticInnerAbstractStuff(); + InnerAbstractStuff r5 = new InnerAbstractStuff(); + LocalAbstractStuff r6 = new LocalAbstractStuff(); + Stuff r7 = new StaticInnerAbstractStuff(); + Stuff r8 = new InnerAbstractStuff(); + Stuff r9 = new LocalAbstractStuff(); + Stuff r10 = new AbstractStuff() { + public void run() { a("anonAbstractStuff1"); } + }; + c("ia-r0"); r0.run(); + c("ia-r1"); r1.run(); + c("ia-r2"); r2.run(); + c("ia-r3"); r3.run(); + c("ia-r4"); r4.run(); + c("ia-r5"); r5.run(); + c("ia-r6"); r6.run(); + c("ia-r7"); r7.run(); + c("ia-r8"); r8.run(); + c("ia-r9"); r9.run(); + c("ia-r10"); r10.run(); + } + + + /* Implement an unincluded interface */ + static class StaticInnerRunnable implements Runnable { + static int i = 0; + public void run() { Tester.event("staticInnerRunnable" + (i++)); } + } + static int innerRunnableI = 0; + class InnerRunnable implements Runnable { + public void run() { Tester.event("innerRunnable" + (innerRunnableI++)); } + } + + /* Implement a included interface */ + static class StaticInnerStuff implements Stuff { + static int i = 0; + public void run() { Tester.event("staticInnerStuff" + (i++)); } + } + static int innerStuffI = 0; + class InnerStuff implements Stuff { + public void run() { Tester.event("innerStuff" + (innerStuffI++)); } + } + + /* Extend an unincluded abstract class */ + static class StaticInnerAbstractAction extends AbstractAction { + static int i = 0; + public void actionPerformed(ActionEvent e) { Tester.event("staticInnerAbstractAction" + (i++)); } + } + static int innerAbstractActionI = 0; + class InnerAbstractAction extends AbstractAction { + public void actionPerformed(ActionEvent e) { Tester.event("innerAbstractAction" + (innerAbstractActionI++)); } + } + + /* Extend a included abstract class */ + static class StaticInnerAbstractStuff extends AbstractStuff { + static int i = 0; + public void run() { Tester.event("staticInnerAbstractStuff" + (i++)); } + } + static int innerAbstractStuffI = 0; + class InnerAbstractStuff extends AbstractStuff { + public void run() { Tester.event("innerAbstractStuff" + (innerAbstractStuffI++)); } + } +} + +aspect Aspect { + static void advise(String str, int start, int num) { + for (int i = start; i < num; i++) { + addAll(str, i); + } + } + static void advise(String str, int num) { + advise(str, 0, num); + } + static void advise(String str, int[] ints) { + for (int i = 0; i < ints.length; i++) { + addAll(str, ints[i]); + } + } + static void addAll(String str, int i) { + Tester.expectEvent("before-" + str + "-r" + i); + Tester.expectEvent("after-" + str + "-r" + i); + Tester.expectEvent("around-" + str + "-r" + i); + } + static void add(String str) { + Tester.event(str + "-" + Inners.s); + } + + /* unincludedInterfaces */ + pointcut receptionsRunnable(): receptions(void run()) && instanceof(Runnable); + static { advise("receptions-ui", 7); } + static before(): receptionsRunnable() { add("before-receptions"); } + static after(): receptionsRunnable() { add("after-receptions"); } + static around() returns void: receptionsRunnable() { add("around-receptions"); proceed(); } + + pointcut executionsRunnable(): executions(void run()) && instanceof(Runnable); + static { advise("executions-ui", 7); } + static before(): executionsRunnable() { add("before-executions"); } + static after(): executionsRunnable() { add("after-executions"); } + static around() returns void: executionsRunnable() { add("around-executions"); proceed(); } + + pointcut receptionsStaticInnerRunnable(): receptions(void run()) && instanceof(Inners.StaticInnerRunnable); + static { advise("receptions-ui", new int[]{0,4}); } + static before(): receptionsStaticInnerRunnable() { add("before-receptions"); } + static after(): receptionsStaticInnerRunnable() { add("after-receptions"); } + static around() returns void: receptionsStaticInnerRunnable() { add("around-receptions"); proceed(); } + + pointcut executionsStaticInnerRunnable(): executions(void run()) && instanceof(Inners.StaticInnerRunnable); + static { advise("executions-ui", new int[]{0,4}); } + static before(): executionsStaticInnerRunnable() { add("before-executions"); } + static after(): executionsStaticInnerRunnable() { add("after-executions"); } + static around() returns void: executionsStaticInnerRunnable() { add("around-executions"); proceed(); } + + pointcut receptionsInnerRunnable(): receptions(void run()) && instanceof(Inners.InnerRunnable); + static { advise("receptions-ui", new int[]{1,5}); } + static before(): receptionsInnerRunnable() { add("before-receptions"); } + static after(): receptionsInnerRunnable() { add("after-receptions"); } + static around() returns void: receptionsInnerRunnable() { add("around-receptions"); proceed(); } + + pointcut executionsInnerRunnable(): executions(void run()) && instanceof(Inners.InnerRunnable); + static { advise("executions-ui", new int[]{1,5}); } + static before(): executionsInnerRunnable() { add("before-executions"); } + static after(): executionsInnerRunnable() { add("after-executions"); } + static around() returns void: executionsInnerRunnable() { add("around-executions"); proceed(); } + + + + /* includedInterfaces */ + pointcut receptionsStuff(): receptions(void run()) && instanceof(Stuff); + static { advise("receptions-ii", 7); } + static before(): receptionsStuff() { add("before-receptions"); } + static after(): receptionsStuff() { add("after-receptions"); } + static around() returns void: receptionsStuff() { add("around-receptions"); proceed(); } + + pointcut executionsStuff(): executions(void run()) && instanceof(Stuff); + static { advise("executions-ii", 7); } + static before(): executionsStuff() { add("before-executions"); } + static after(): executionsStuff() { add("after-executions"); } + static around() returns void: executionsStuff() { add("around-executions"); proceed(); } + + pointcut receptionsStaticInnerStuff(): receptions(void run()) && instanceof(Inners.StaticInnerStuff); + static { advise("receptions-ii", new int[]{0,4}); } + static before(): receptionsStaticInnerStuff() { add("before-receptions"); } + static after(): receptionsStaticInnerStuff() { add("after-receptions"); } + static around() returns void: receptionsStaticInnerStuff() { add("around-receptions"); proceed(); } + + pointcut executionsStaticInnerStuff(): executions(void run()) && instanceof(Inners.StaticInnerStuff); + static { advise("executions-ii", new int[]{0,4}); } + static before(): executionsStaticInnerStuff() { add("before-executions"); } + static after(): executionsStaticInnerStuff() { add("after-executions"); } + static around() returns void: executionsStaticInnerStuff() { add("around-executions"); proceed(); } + + pointcut receptionsInnerStuff(): receptions(void run()) && instanceof(Inners.InnerStuff); + static { advise("receptions-ii", new int[]{1,5}); } + static before(): receptionsInnerStuff() { add("before-receptions"); } + static after(): receptionsInnerStuff() { add("after-receptions"); } + static around() returns void: receptionsInnerStuff() { add("around-receptions"); proceed(); } + + pointcut executionsInnerStuff(): executions(void run()) && instanceof(Inners.InnerStuff); + static { advise("executions-ii", new int[]{1,5}); } + static before(): executionsInnerStuff() { add("before-executions"); } + static after(): executionsInnerStuff() { add("after-executions"); } + static around() returns void: executionsInnerStuff() { add("around-executions"); proceed(); } + + + + /* unincludedAbstractClases */ + pointcut receptionsAbstractAction(): + receptions(void actionPerformed(ActionEvent)) && instanceof(AbstractAction); + static { advise("receptions-ua", 7); } + static before(): receptionsAbstractAction() { add("before-receptions"); } + static after(): receptionsAbstractAction() { add("after-receptions"); } + static around() returns void: receptionsAbstractAction() { add("around-receptions"); proceed(); } + + pointcut executionsAbstractAction(): + executions(void actionPerformed(ActionEvent)) && instanceof(AbstractAction); + static { advise("executions-ua", 7); } + static before(): executionsAbstractAction() { add("before-executions"); } + static after(): executionsAbstractAction() { add("after-executions"); } + static around() returns void: executionsAbstractAction() { add("around-executions"); proceed(); } + + pointcut receptionsActionListener(): + receptions(void actionPerformed(ActionEvent)) && instanceof(ActionListener); + static { advise("receptions-ua", 11); } + static before(): receptionsActionListener() { add("before-receptions"); } + static after(): receptionsActionListener() { add("after-receptions"); } + static around() returns void: receptionsActionListener() { add("around-receptions"); proceed(); } + + pointcut executionsActionListener(): + executions(void actionPerformed(ActionEvent)) && instanceof(ActionListener); + static { advise("executions-ua", 11); } + static before(): executionsActionListener() { add("before-executions"); } + static after(): executionsActionListener() { add("after-executions"); } + static around() returns void: executionsActionListener() { add("around-executions"); proceed(); } + + pointcut receptionsStaticInnerAbstractAction(): + receptions(void actionPerformed(ActionEvent)) && instanceof(Inners.StaticInnerAbstractAction); + static { advise("receptions-ua", new int[]{0,4,7}); } + static before(): receptionsStaticInnerAbstractAction() { add("before-receptions"); } + static after(): receptionsStaticInnerAbstractAction() { add("after-receptions"); } + static around() returns void: receptionsStaticInnerAbstractAction() { add("around-receptions"); proceed(); } + + pointcut executionsStaticInnerAbstractAction(): + executions(void actionPerformed(ActionEvent)) && instanceof(Inners.StaticInnerAbstractAction); + static { advise("executions-ua", new int[]{0,4,7}); } + static before(): executionsStaticInnerAbstractAction() { add("before-executions"); } + static after(): executionsStaticInnerAbstractAction() { add("after-executions"); } + static around() returns void: executionsStaticInnerAbstractAction() { add("around-executions"); proceed(); } + + pointcut receptionsInnerAbstractAction(): + receptions(void actionPerformed(ActionEvent)) && instanceof(Inners.InnerAbstractAction); + static { advise("receptions-ua", new int[]{1,5,8}); } + static before(): receptionsInnerAbstractAction() { add("before-receptions"); } + static after(): receptionsInnerAbstractAction() { add("after-receptions"); } + static around() returns void: receptionsInnerAbstractAction() { add("around-receptions"); proceed(); } + + pointcut executionsInnerAbstractAction(): + executions(void actionPerformed(ActionEvent)) && instanceof(Inners.InnerAbstractAction); + static { advise("executions-ua", new int[]{1,5,8}); } + static before(): executionsInnerAbstractAction() { add("before-executions"); } + static after(): executionsInnerAbstractAction() { add("after-executions"); } + static around() returns void: executionsInnerAbstractAction() { add("around-executions"); proceed(); } + + + /* includedAbstractClases */ + pointcut receptionsAbstractStuff(): receptions(void run()) && instanceof(AbstractStuff); + static { advise("receptions-ia", 7); } + static before(): receptionsAbstractStuff() { add("before-receptions"); } + static after(): receptionsAbstractStuff() { add("after-receptions"); } + static around() returns void: receptionsAbstractStuff() { add("around-receptions"); proceed(); } + + pointcut executionsAbstractStuff(): executions(void run()) && instanceof(AbstractStuff); + static { advise("executions-ia", 7); } + static before(): executionsAbstractStuff() { add("before-executions"); } + static after(): executionsAbstractStuff() { add("after-executions"); } + static around() returns void: executionsAbstractStuff() { add("around-executions"); proceed(); } + + pointcut receptionsStuff2(): receptions(void run()) && instanceof(Stuff); + static { advise("receptions-ia", 11); } + static before(): receptionsStuff2() { add("before-receptions"); } + static after(): receptionsStuff2() { add("after-receptions"); } + static around() returns void: receptionsStuff2() { add("around-receptions"); proceed(); } + + pointcut executionsStuff2(): executions(void run()) && instanceof(Stuff); + static { advise("executions-ia", 11); } + static before(): executionsStuff2() { add("before-executions"); } + static after(): executionsStuff2() { add("after-executions"); } + static around() returns void: executionsStuff2() { add("around-executions"); proceed(); } + + pointcut receptionsStaticInnerAbstractStuff(): + receptions(void run()) && instanceof(Inners.StaticInnerAbstractStuff); + static { advise("receptions-ia", new int[]{0,4,7}); } + static before(): receptionsStaticInnerAbstractStuff() { add("before-receptions"); } + static after(): receptionsStaticInnerAbstractStuff() { add("after-receptions"); } + static around() returns void: receptionsStaticInnerAbstractStuff() { add("around-receptions"); proceed(); } + + pointcut executionsStaticInnerAbstractStuff(): + executions(void run()) && instanceof(Inners.StaticInnerAbstractStuff); + static { advise("executions-ia", new int[]{0,4,7}); } + static before(): executionsStaticInnerAbstractStuff() { add("before-executions"); } + static after(): executionsStaticInnerAbstractStuff() { add("after-executions"); } + static around() returns void: executionsStaticInnerAbstractStuff() { add("around-executions"); proceed(); } + + pointcut receptionsInnerAbstractStuff(): + receptions(void run()) && instanceof(Inners.InnerAbstractStuff); + static { advise("receptions-ia", new int[]{1,5,8}); } + static before(): receptionsInnerAbstractStuff() { add("before-receptions"); } + static after(): receptionsInnerAbstractStuff() { add("after-receptions"); } + static around() returns void: receptionsInnerAbstractStuff() { add("around-receptions"); proceed(); } + + pointcut executionsInnerAbstractStuff(): + executions(void run()) && instanceof(Inners.InnerAbstractStuff); + static { advise("executions-ia", new int[]{1,5,8}); } + static before(): executionsInnerAbstractStuff() { add("before-executions"); } + static after(): executionsInnerAbstractStuff() { add("after-executions"); } + static around() returns void: executionsInnerAbstractStuff() { add("around-executions"); proceed(); } +} + +interface Stuff { + public void run(); +} + +abstract class AbstractStuff implements Stuff { + public abstract void run(); +} diff --git a/tests/new/InterfaceConstructor.java b/tests/new/InterfaceConstructor.java new file mode 100644 index 000000000..080e4406b --- /dev/null +++ b/tests/new/InterfaceConstructor.java @@ -0,0 +1,9 @@ +interface i { + i() {} // ERR: interfaces can't have constructors +} + +class c { + c(); //ERR: constructors must have bodies + + abstract c(int i) { } //ERR: constructors can't be abstract +} diff --git a/tests/new/InterfaceMethods.java b/tests/new/InterfaceMethods.java new file mode 100644 index 000000000..6061af6c6 --- /dev/null +++ b/tests/new/InterfaceMethods.java @@ -0,0 +1,134 @@ +import org.aspectj.testing.Tester; + +import java.lang.reflect.*; +import java.util.*; + +public class InterfaceMethods { + public static void main(String[] args) { + new InterfaceMethods().realMain(args); + } + final static Object[] tuples = new Object[] { + "clone", null, null, + "equals", new Class[]{Object.class}, new Object[]{""}, + "finalize", null, null, + "getClass", null, null, + "hashCode", null, null, + "notify", null, null, + "notifyAll", null, null, + "toString", null, null, + "wait", null, null, + "waitL", new Class[]{long.class}, new Object[]{new Long(3L)}, + "waitLI", new Class[]{long.class, int.class}, new Object[]{new Long(4L), new Integer(5)}, + }; + final List list = new Vector(); + { + for (int i = 0; i < tuples.length; i += 3) { + List tuple = new Vector(); + tuple.add(tuples[i]+ "New"); + tuple.add(tuples[i+1] == null ? new Class[]{} : tuples[i+1]); + tuple.add(tuples[i+2] == null ? new Object[]{} : tuples[i+2]); + list.add(tuple); + } + } + public void realMain(String[] argv) { + Iterator iter = list.iterator(); + while (iter.hasNext()) { + List tuple = (List) iter.next(); + String name = (String) tuple.get(0); + Class[] params = (Class[]) tuple.get(1); + Object[] args = (Object[]) tuple.get(2); + boolean ran = false; + Throwable caught = null; + try { + Object o = new SomeClass(); + o.getClass().getMethod(name, params).invoke(o, args); + ran = true; + } catch (Throwable t) { + caught = t; + } finally { + Tester.check(ran, name + " didn't run" + (caught != null ? ":"+caught : "")); + } + } + } +} + +interface SomeType {} +class SomeClass implements SomeType { +// public Object cloneNew() { try { return clone(); } catch (Throwable t) {} return null; } +// public boolean equalsNew(Object o) { return equals(o); } +// public void finalizeNew() { try { finalize(); } catch (Throwable t) {} } +// public Class getClassNew() { return getClass(); } +// public int hashCodeNew() { return hashCode(); } +// public void notifyNew() { try { notify(); } catch (Throwable t) {} } +// public void notifyAllNew() { try { notifyAll(); } catch (Throwable t) {} } +// public String toStringNew() { return toString(); } +// public void waitNew() { try { wait(); } catch (Throwable t) {} } +// public void waitLNew(long l) { try { wait(l); } catch (Throwable t) {} } +// public void waitLINew(long l, int i) { try { wait(l,i); } catch (Throwable t) {} } +} + +aspect AspectToIntroduce_clone { + introduction SomeType { + public Object cloneNew() { try { return clone(); } catch (Throwable t) {} return null; } + } +} + +aspect AspectToIntroduce_equals { + introduction SomeType { + public boolean equalsNew(Object o) { return equals(o); } + } +} + +aspect AspectToIntroduce_finalize { + introduction SomeType { + public void finalizeNew() { try { finalize(); } catch (Throwable t) {} } + } +} + +aspect AspectToIntroduce_getClass { + introduction SomeType { + public Class getClassNew() { return getClass(); } + } +} + +aspect AspectToIntroduce_hashCode { + introduction SomeType { + public int hashCodeNew() { return hashCode(); } + } +} + +aspect AspectToIntroduce_notify { + introduction SomeType { + public void notifyNew() { try { notify(); } catch (Throwable t) {} } + } +} + +aspect AspectToIntroduce_notifyAll { + introduction SomeType { + public void notifyAllNew() { try { notifyAll(); } catch (Throwable t) {} } + } +} + +aspect AspectToIntroduce_toString { + introduction SomeType { + public String toStringNew() { return toString(); } + } +} + +aspect AspectToIntroduce_wait { + introduction SomeType { + public void waitNew() { try { wait(); } catch (Throwable t) {} } + } +} + +aspect AspectToIntroduce_waitL { + introduction SomeType { + public void waitLNew(long l) { try { wait(l); } catch (Throwable t) {} } + } +} + +aspect AspectToIntroduce_waitLI { + introduction SomeType { + public void waitLINew(long l, int i) { try { wait(l,i); } catch (Throwable t) {} } + } +} diff --git a/tests/new/IntroOnIntro.java b/tests/new/IntroOnIntro.java new file mode 100644 index 000000000..ca8d0a96b --- /dev/null +++ b/tests/new/IntroOnIntro.java @@ -0,0 +1,61 @@ +import org.aspectj.testing.*; + +public class IntroOnIntro { + public static void main(String[] args) { + Class1 c1 = new Class1(); + + try { + c1.getName(); + } catch (NoSuchMethodError nsme) { + Tester.check(false, "getName was not found in Class1"); + } + + try { + c1.m = "potato"; + } catch (NoSuchFieldError nsfe) { + Tester.check(false, "m was not introduced into Class1"); + } + } +} + +class Class1 { + String name = ""; //public String getName() { return name; } +} + +aspect Aspect1 /**of eachobject (instanceof(Class1))*/ { + public String Class1.getName() { return this.name; } + + void f() {} + before(): call(* getName(..)) && this(Class1) { + f(); + } +} + +aspect AComposer /**of eachobject(instanceof(Class1 || Aspect1))*/ { + interface HasManager {} + private String HasManager.my_manager; + String HasManager.m; + public void HasManager.setManager(String manager) { + this.my_manager = manager; + } + declare parents: Class1 || Aspect1 implements HasManager; + + before(Aspect1 a1): call(void f()) && this(a1) { + + try { + a1.setManager("potato"); + } catch (NoSuchMethodError nsme) { + Tester.check(false, "getName not found in Aspect1"); + } + + try { + a1.m = "potato"; + } catch (NoSuchFieldError nsfe) { + Tester.check(false, "m was not introduced into Class1"); + } + } +} + + + + diff --git a/tests/new/IntroOrder.java b/tests/new/IntroOrder.java new file mode 100644 index 000000000..16d349449 --- /dev/null +++ b/tests/new/IntroOrder.java @@ -0,0 +1,45 @@ +import org.aspectj.testing.Tester; + +public class IntroOrder { + public static void main(String[] args) { + Persist.HasPersistor hp1 = new Class1(); + Persist.HasPersistor hp2 = new Class2(); + + Persistor p = new Persistor(); + hp1.setPersistor(p); + Tester.checkEqual(p, hp1.getPersistor(), "basic intro"); + } +} + +class Class1 {} +class Class2 {} + +aspect A1 { + declare parents: Class1 implements Persist.HasPersistor; +} + +abstract aspect Persist { + interface HasPersistor { + // introduction below specifies this interface + } + + private Persistor HasPersistor.persistor; + public void HasPersistor.setPersistor(Persistor p) { persistor = p; } + public Persistor HasPersistor.getPersistor() { return persistor; } + + abstract pointcut readMethods(); + + abstract pointcut writeMethods(); + + //advices +} + +aspect A2 extends Persist { + declare parents: Class2 implements HasPersistor; + // concretize pointcuts + + pointcut readMethods(); + pointcut writeMethods(); +} + +class Persistor {} diff --git a/tests/new/IntroduceInnerInterfaceCF.java b/tests/new/IntroduceInnerInterfaceCF.java new file mode 100644 index 000000000..70566931c --- /dev/null +++ b/tests/new/IntroduceInnerInterfaceCF.java @@ -0,0 +1,61 @@ + +import org.aspectj.testing.Tester; +import org.aspectj.testing.Tester; + +public class IntroduceInnerInterfaceCF { + public static void main(String[] args) { + Tester.checkFailed("!compile"); + } + private static final String[] EXPECTED; + static { + EXPECTED = new String[] + { "walk", "execution(void TargetClass.walk())" }; + Tester.expectEventsInString(EXPECTED); + } +} +class TargetClass { + /** @testcase PR#494 compile should fail if implementing method is not public */ + void defaultMethod() { } // errLine 18 + private void privateMethod() { } // errLine 19 + protected void protectedMethod() { } // errLine 20 +} + +class AnotherClass{} +class AThirdClass extends TargetClass implements Aspect.Inner {} // errLine 24 + +aspect Aspect { + private interface Inner { + // all automagically interpreted as public + void defaultMethod(); + void privateMethod(); + void protectedMethod(); + } + declare parents + : TargetClass implements Inner; + before() : execution(void Inner.*()) { + } +} + +aspect PeekingAspect { + after(TargetClass tc) : this(tc) && execution(void TargetClass.walk()) { + /** @testcase PR#494 compile should fail to bind private interface name outside of Aspect */ + if (tc instanceof Aspect.Inner) { // errLine 42 + Tester.checkFailed("(tc instanceof Aspect.Inner)"); + } + if (Aspect.Inner.class.isAssignableFrom(tc.getClass())) { // errLine 45 + Tester.checkFailed("(Aspect.Inner.class.isAssignableFrom(tc.getClass())"); + } + ((Aspect.Inner) tc).defaultMethod(); // errLine 48 + } + declare parents : AnotherClass implements Aspect.Inner; // errLine 50 +} + +abstract aspect AbstractAspect { + private interface Private {} +} +aspect HideFromChild extends AbstractAspect { + /** @testcase PR#494 compile should fail to bind private interface name in aspect subclass */ + declare parents : AnotherClass implements Private; // errLine 58 +} + +// todo: test cases to validate inner interfaces with package and protected diff --git a/tests/new/IntroduceInnerInterfaceCP.java b/tests/new/IntroduceInnerInterfaceCP.java new file mode 100644 index 000000000..6c4b66f47 --- /dev/null +++ b/tests/new/IntroduceInnerInterfaceCP.java @@ -0,0 +1,92 @@ + +import org.aspectj.testing.Tester; +import org.aspectj.testing.Tester; + +public class IntroduceInnerInterfaceCP { + public static void main(String[] args) { + new TargetClass().walk(); + new TargetClassWithoutImplementation().run(); + AnotherClass.invoke(); + Tester.checkAllEvents(); + } + private static final String[] EXPECTED; + static { + EXPECTED = new String[] + { "walk", "Implementation.walk", + "execution(void TargetClass.walk())", + "AnotherClass.invoke()", + "Protected execution(void AnotherClass.invoke())" + }; + Tester.expectEventsInString(EXPECTED); + } +} +class Signal { + public static final void signal(String s) { + //System.err.println(s); + Tester.event(s); + } +} +class TargetClass { + public void walk() { + Signal.signal("walk"); + } +} + +class TargetClassWithoutImplementation { + void run() { } +} + +aspect Aspect { + /** @testcase PR#494 adding private interface inside aspect */ + private interface Inner { + // automagically interpreted as public + void walk(); + } + /** @testcase PR#494 using private interface inside aspect for introductions */ + declare parents + : TargetClass implements Inner; + declare parents + : TargetClassWithoutImplementation implements Inner; + declare parents + : TargetClassWithoutImplementation extends Implementation; + static class Implementation { + public void walk() { + Signal.signal("Implementation.walk"); + } + + } + /** @testcase PR#494 using private interface inside aspect in advice */ + before(TargetClassWithoutImplementation t) : target(t) + && execution(void TargetClassWithoutImplementation.run()) { + ((Inner) t).walk(); + } + + /** @testcase PR#494 using private interface inside aspect in execution pcd */ + before() : execution(public void Inner.*()) { + // validate that interface implemented - addressable in pcd + Signal.signal(thisJoinPointStaticPart.toString()); + } +} + +class AnotherClass { + static void invoke() { + Signal.signal("AnotherClass.invoke()"); + } +} +abstract aspect AbstractAspect { + /** Protected has no join points - validate with ShowToChild before advice */ + protected interface Protected {} +} +aspect ShowToChild extends AbstractAspect { + /** @testcase PR#494 compile should bind protected interface name in aspect subclass for introduction */ + declare parents : AnotherClass implements Protected; + /** @testcase PR#494 compile should bind protected interface name in aspect subclass for advice (even when binding static, non-interface methods with tag interfaces) */ + after () : within(Protected+) && execution(* *(..)) { + Signal.signal("Protected " + thisJoinPointStaticPart.toString()); + } + /** Protected has no join points */ + before () : within(Protected) { + Tester.checkFailed("within Protected"); + } +} + diff --git a/tests/new/IntroducedFieldInc.java b/tests/new/IntroducedFieldInc.java new file mode 100644 index 000000000..c24ab86de --- /dev/null +++ b/tests/new/IntroducedFieldInc.java @@ -0,0 +1,33 @@ + +import org.aspectj.testing.Tester; + +interface I {} + +/** @testcase PR#757 Incrementing interface-introduced field */ +public class IntroducedFieldInc implements I{ + public static void main (String args[]) { + IntroducedFieldInc i = new IntroducedFieldInc(); + // no bug + Tester.check(1 == (((I)i).count = 1), "((I)i).count = 1"); + Tester.check(2 == (++(i).count), "++((I)i).count"); + // bug + Tester.check(3 == (++((I)i).count), "++((I)i).count"); + Tester.check(3 == (((I)i).count++), "((I)i).count++"); + Tester.check(5 == (((I)i).count += 1), "((I)i).count += 1"); + + Tester.checkEqual((getI().count += 1), 3, "getI().count += 1"); + Tester.checkEqual(getICount, 1, "getI() called"); + } + + static int getICount = 0; + + public static I getI() { + getICount++; + return new IntroducedFieldInc(); + } + +} + +aspect A { + public int I.count = 2; +} diff --git a/tests/new/IntroducedFieldsNotBinding.java b/tests/new/IntroducedFieldsNotBinding.java new file mode 100644 index 000000000..391e7c82d --- /dev/null +++ b/tests/new/IntroducedFieldsNotBinding.java @@ -0,0 +1,44 @@ + +import org.aspectj.testing.Tester; +import org.aspectj.testing.Tester; + +public class IntroducedFieldsNotBinding { + public static void main(String[]args) { + TargetClass target = new TargetClass(); + // when the compiler passes the test, validate runtime + int result = target.getField(); + Tester.checkEqual(result, 1, "1 != result: " + result); + Tester.checkAllEvents(); + } + static { + Tester.event("execution of getField"); + } +} + +class TargetClass { } + +class TargetClass2 { } + +aspect A { + private String TargetClass2.s = "hi"; + private int TargetClass.field = 1; + public int TargetClass.getField() { + int i = field; // compiler error here + + String s = new TargetClass2().s; + Tester.checkEqual(s, "hi"); + + Runnable r = new Runnable() { + public void run() { + System.out.println("running: " + field); + } + }; + r.run(); + + return i ; + } + after () + : execution(public int TargetClass.getField()) { + Tester.expectEvent("execution of getField"); + } +} diff --git a/tests/new/IntroducedMethodsOnEachInterface.java b/tests/new/IntroducedMethodsOnEachInterface.java new file mode 100644 index 000000000..640d37a32 --- /dev/null +++ b/tests/new/IntroducedMethodsOnEachInterface.java @@ -0,0 +1,46 @@ +import org.aspectj.testing.Tester; +public class IntroducedMethodsOnEachInterface { + public static void main(String[] args) { + new IntroducedMethodsOnEachInterface().realMain(args); + } + public void realMain(String[] args) { + I i0 = new I() { public int j() { return 3; } }; + J j0 = new J() { public int j() { return 4; } }; + B b0 = new B(); + I ib = new B(); + J jb = new B(); + + Tester.checkEqual(i0.j(), 3, "i0"); + Tester.checkEqual(j0.j(), 4, "j0"); + Tester.checkEqual(b0.j(), 2, "b0"); + Tester.checkEqual(ib.j(), 2, "ib"); + Tester.checkEqual(jb.j(), 2, "jb"); + + H h0 = new H() { public int j() { return 7; } }; + H ch = new C(); + C c0 = new C(); + + Tester.checkEqual(h0.j(), 7, "h0"); + Tester.checkEqual(ch.j(), 6, "ch"); + Tester.checkEqual(c0.j(), 6, "c0"); + + } +} + +interface I {} +interface H {} +interface J { public int j(); } +class B implements I {} +class C implements H {} +aspect A { + + declare parents: I implements J; + declare parents: H implements I; + declare parents: H implements J; + + public int I.j() { return 1; } + public int B.j() { return 2; } + public int H.j() { return 5; } + public int C.j() { return 6; } +} + diff --git a/tests/new/IntroducedModifiers.java b/tests/new/IntroducedModifiers.java new file mode 100644 index 000000000..d8f9c2a43 --- /dev/null +++ b/tests/new/IntroducedModifiers.java @@ -0,0 +1,50 @@ +import org.aspectj.testing.Tester; + +import java.lang.reflect.*; + +public class IntroducedModifiers { + public static void main(String[] args) throws Exception { + Field f = C.class.getField("cf"); + Tester.check(Modifier.isVolatile(f.getModifiers()), "volatile"); + Tester.check(Modifier.isTransient(f.getModifiers()), "transient"); + + Method m = C.class.getMethod("m", new Class[0]); + Tester.check(Modifier.isSynchronized(m.getModifiers()), "synchronized"); + Tester.check(Modifier.isStrict(m.getModifiers()), "strictfp"); + + f = C.class.getField("scf"); + Tester.check(Modifier.isVolatile(f.getModifiers()), "volatile"); + Tester.check(Modifier.isTransient(f.getModifiers()), "transient"); + Tester.check(Modifier.isStatic(f.getModifiers()), "static"); + + //XXX this name depends on implementation details for field intro on interfaces + try { + f = C.class.getField("iField__I"); + } catch (NoSuchFieldException e) { + f = C.class.getField("aspectj$iField__I"); + } + Tester.check(Modifier.isVolatile(f.getModifiers()), "volatile"); + Tester.check(Modifier.isTransient(f.getModifiers()), "transient"); + + m = C.class.getMethod("im", new Class[0]); + Tester.check(Modifier.isSynchronized(m.getModifiers()), "synchronized"); + Tester.check(Modifier.isStrict(m.getModifiers()), "strictfp"); + } +} + + +interface I { +} + +class C implements I { +} + +aspect A { + public transient volatile int C.cf = 0; + public synchronized strictfp int C.m() { return 0; } + + public transient volatile static int C.scf = 0; + + public synchronized strictfp int I.im() { return 0; } + public transient volatile int I.iField = 1; +} diff --git a/tests/new/IntroducingMethodsOnPlusImplementedInterfaces.java b/tests/new/IntroducingMethodsOnPlusImplementedInterfaces.java new file mode 100644 index 000000000..f612ce5e5 --- /dev/null +++ b/tests/new/IntroducingMethodsOnPlusImplementedInterfaces.java @@ -0,0 +1,22 @@ +import org.aspectj.testing.Tester; +public class IntroducingMethodsOnPlusImplementedInterfaces { + public static void main(String[] args) { + new IntroducingMethodsOnPlusImplementedInterfaces().realMain(args); + } + public void realMain(String[] args) { + new D().f(); + } + static { + Tester.expectEvent("D.f"); + } +} + +class D extends Thread {} +//static +aspect A { + static interface I {} + //(subtypes(Thread)) +implements I; + //declare parents: (subtypes(Thread)) implements I; + declare parents: Thread+ implements I; + public void I.f() { Tester.event("D.f"); } +} diff --git a/tests/new/IntroducingPrivateMethodsOnInterfaces.java b/tests/new/IntroducingPrivateMethodsOnInterfaces.java new file mode 100644 index 000000000..f1340f143 --- /dev/null +++ b/tests/new/IntroducingPrivateMethodsOnInterfaces.java @@ -0,0 +1,77 @@ +import org.aspectj.testing.Tester; +import org.aspectj.testing.Tester; +public class IntroducingPrivateMethodsOnInterfaces { + public static void main(String[] args) { + AA.go(); + } + static { + Tester.expectEvent("private_private"); + Tester.expectEvent("private_package"); + Tester.expectEvent("private_public"); + Tester.expectEvent("package_private"); + Tester.expectEvent("package_package"); + Tester.expectEvent("package_public"); + Tester.expectEvent("public_private"); + Tester.expectEvent("public_package"); + Tester.expectEvent("public_public"); + } +} + +interface I {} +class C { + +// private void _private(String s) { Tester.event("private_"+s); } +// /*package*/ void _package(String s) { Tester.event("package_"+s); } +// public void _public(String s) { Tester.event("public_"+s); } + +// private void private_private() { _private("private"); } +// private void private_package() { _package("private"); } +// private void private_public() { _public("private"); } + +// /*package*/ void package_private() { _private("package"); } +// /*package*/ void package_package() { _package("package"); } +// /*package*/ void package_public() { _public("package"); } + +// public void public_private() { _private("public"); } +// public void public_package() { _package("public"); } +// public void public_public() { _public("public"); } + +} + +aspect AA { + + public static void go() { + I c = new C(); + c.private_private(); + c.private_package(); + c.private_public(); + + c.package_private(); + c.package_package(); + c.package_public(); + + c.public_private(); + c.public_package(); + c.public_public(); + } + + private void I._private(String s) { Tester.event("private_"+s); } + /*package*/ void I._package(String s) { Tester.event("package_"+s); } + public void I._public(String s) { Tester.event("public_"+s); } + + private void I.private_private() { _private("private"); } + private void I.private_package() { _package("private"); } + private void I.private_public() { _public("private"); } + + /*package*/ void I.package_private() { _private("package"); } + /*package*/ void I.package_package() { _package("package"); } + /*package*/ void I.package_public() { _public("package"); } + + public void I.public_private() { _private("public"); } + public void I.public_package() { _package("public"); } + public void I.public_public() { _public("public"); } +} + +aspect A { + declare parents: C implements I; +} diff --git a/tests/new/IntroductionFailsWithInnerClass.java b/tests/new/IntroductionFailsWithInnerClass.java new file mode 100644 index 000000000..4c8d22d55 --- /dev/null +++ b/tests/new/IntroductionFailsWithInnerClass.java @@ -0,0 +1,21 @@ + +import org.aspectj.testing.Tester; + +// PR#129 + +public aspect IntroductionFailsWithInnerClass { + public static void main(String[] args) { test(); } + public static void test() { + Tester.checkEqual(new M().s, "m", "introduction"); + } + //introduction M { + public String M.s; + //} + /*static*/ after(M m): target(m) && execution(new (..)) { + m.s = "m"; + } +} + +class M { + class LabeledPairLayout extends Object { } +} diff --git a/tests/new/IntroductionOfInitializer.java b/tests/new/IntroductionOfInitializer.java new file mode 100644 index 000000000..89703c605 --- /dev/null +++ b/tests/new/IntroductionOfInitializer.java @@ -0,0 +1,36 @@ +import org.aspectj.testing.Tester; +import java.io.*; + +/** + * Test for: PR #98 + */ + +public class IntroductionOfInitializer { + public static void main(String[] args) { test(); } + + public static void test() { + Tester.checkEqual(Foo.a, "class", "zero instances"); + Foo foo = new Foo(); + Tester.checkEqual(Foo.a, "class-instance", "one instances"); + foo = new Foo(); + Tester.checkEqual(Foo.a, "class-instance-instance", "two instances"); + } +} + +aspect A { + private static String classValue = "class"; + private static String instanceValue = "-instance"; + + after(): staticinitialization(Foo) { + Foo.a += classValue; + } + + after(): initialization(Foo.new(..)) { + Foo.a += instanceValue; + } +} + + +class Foo { + static String a = ""; +} diff --git a/tests/new/IntroductionsOverriding.java b/tests/new/IntroductionsOverriding.java new file mode 100644 index 000000000..77fb015bc --- /dev/null +++ b/tests/new/IntroductionsOverriding.java @@ -0,0 +1,59 @@ +import org.aspectj.testing.*; + +/** @testcase PR#654 Overriding method implementations using introduction on interfaces */ +public class IntroductionsOverriding { + public static void main (String [] args) { + (new BaseClass ()).foo("Base"); + (new DerivedClass ()).foo("Derived"); + Tester.checkAllEvents(); + } + static { + Tester.expectEvent("Derived.foo(\"Derived\")"); + Tester.expectEvent("Base.foo(\"Base\")"); + Tester.expectEvent("around call Base"); + Tester.expectEvent("around execution Base"); + Tester.expectEvent("around call Base"); // called for both Base+ and Derived+ + Tester.expectEvent("around execution Base"); + Tester.expectEvent("around call Derived"); + Tester.expectEvent("around execution Derived"); + } +} + +interface Base { public void foo(String s); } +interface Derived extends Base { public void foo(String s); } +class DerivedClass implements Derived { } +class BaseClass implements Base { } + +aspect A { + public void Base.foo (String arg) { + Tester.check("Base".equals(arg), + "Base.foo(\"" + arg + "\")"); + Tester.event("Base.foo(\"" + arg + "\")"); + } + public void Derived.foo (String arg) { + Tester.check("Derived".equals(arg), + "Derived.foo(\"" + arg + "\")"); + Tester.event("Derived.foo(\"" + arg + "\")"); + } + + void around (Base o) + : execution (void Base+.foo(..)) // ok if replacing call with execution + && target (o) { + Tester.event("around execution Base"); + proceed(o); + } + void around (Base o) + : call (void Base+.foo(..)) + && target (o) { + Tester.event("around call Base"); + proceed(o); + } + void around () : call (void Derived+.foo(..)) { + Tester.event("around call Derived"); + proceed(); + } + void around () : execution (void Derived+.foo(..)) { + Tester.event("around execution Derived"); + proceed(); + } +} diff --git a/tests/new/InvalidProceedArgsCE.java b/tests/new/InvalidProceedArgsCE.java new file mode 100644 index 000000000..388d31e9d --- /dev/null +++ b/tests/new/InvalidProceedArgsCE.java @@ -0,0 +1,48 @@ + +class Target { + public void resize(int i) {} +} + +/** @testcase invalid number and type of proceed arguments */ +aspect A { + void around(Target buffer) + : call(void Target.resize(..)) && target(buffer) { + proceed(); // expect CE here + } + void around(int i, Target buffer) + : call(void Target.resize(..)) && args(i) && target(buffer) { + /** @testcase invalid proceed args - none, 2 expected */ + proceed(); // expect CE here + /** @testcase invalid proceed args - 1, 2 expected */ + proceed(i); // expect CE here + // coercion is passing + /** @testcase invalid proceed args - wrong type 1, 2 expected */ + proceed(buffer); // expect CE here + /** @testcase invalid proceed args - wrong type 2, 2 expected */ + proceed(buffer, i); // expect CE here + } + void around(int i) + : call(void Target.resize(..)) && args(i) { + /** @testcase invalid proceed args - wrong type */ + proceed(new Integer(0)); // expect CE here + /** @testcase invalid proceed args - wrong type 2, 1 expected */ + proceed(new Integer(0), 0); // expect CE here + /** @testcase invalid proceed args - wrong type 2, 1 expected */ + proceed(0, new Integer(0)); // expect CE here + } + + void around(int i, Target buffer) + : call(void Target.resize(..)) && args(i) && target(buffer) { + /** @testcase invalid proceed args - float -> int */ + proceed(3.1, buffer); // expect CE here + /** @testcase invalid proceed args - String -> int */ + proceed("1", buffer); // expect CE here + proceed('a', buffer); // char -> int is legal + // coercion is passing + /** @testcase invalid proceed args - Object -> Target */ + proceed(i, (Object)null); // expect CE here + proceed(i, null); //null -> Target is legal + /** @testcase invalid proceed args - wrong type 3-> Target */ + proceed(i, 3); // expect CE here + } +} diff --git a/tests/new/JoinPointFields.java b/tests/new/JoinPointFields.java new file mode 100644 index 000000000..14cb0bd2c --- /dev/null +++ b/tests/new/JoinPointFields.java @@ -0,0 +1,24 @@ +import org.aspectj.testing.Tester; + +import org.aspectj.lang.reflect.*; + +public class JoinPointFields { + public static void main(String[] args) { + Tester.checkEqual(new JoinPointFields().foo("xxx-"), "xxx-arg", "parameterNames"); + } + + public String foo(String arg) { + return arg; + } +} + +aspect A { + String around(String arg): + this(JoinPointFields) && + execution(String foo(String)) && + args(arg) + { + return arg + (((MethodSignature)thisJoinPoint.getSignature()). + getParameterNames())[0]; + } +} diff --git a/tests/new/LocalClassClosingOverProceed.java b/tests/new/LocalClassClosingOverProceed.java new file mode 100644 index 000000000..229be14b6 --- /dev/null +++ b/tests/new/LocalClassClosingOverProceed.java @@ -0,0 +1,37 @@ +import org.aspectj.testing.Tester; + +// bart.vanhaute@cs.kuleuven.ac.be conflated jitterbug +public class LocalClassClosingOverProceed { + public static void main(String[] args) { + new Target().method(); + Tester.checkAllEvents(); + } + static { + Tester.expectEvent("Target.method"); + Tester.expectEvent("before proceed"); + Tester.expectEvent("after proceed"); + } +} + +class Target { + public void method() { + Tester.event("Target.method"); + } +} + +aspect NamedLocalClass { + + /** @testcase PR#636 named local class closing over proceed() in around */ + void around(): execution(void Target.method()) { + //Runnable r = new Runnable () { + class LocalClass { + public void run() { + Tester.event("before proceed"); + proceed(); + Tester.event("after proceed"); + } + }; + new LocalClass().run(); + //r.run(); + } +} diff --git a/tests/new/LocalInner.java b/tests/new/LocalInner.java new file mode 100644 index 000000000..826283d77 --- /dev/null +++ b/tests/new/LocalInner.java @@ -0,0 +1,19 @@ +import org.aspectj.testing.*; + +public class LocalInner { + public static void main(String[] args) { + class Local implements Runnable { + public void run() {} + } + Local local = new Local(); + local.run(); + Tester.checkAllEvents(); + } +} + +aspect Aspect { + pointcut local(): callsto(receptions(void run()) && instanceof(Runnable)); + static before(): local() { Tester.event("before-run"); } + static after(): local() { Tester.event("after-run"); } + static around() returns void: local() { Tester.event("around-run"); proceed(); } +} diff --git a/tests/new/LongStringAjc.java b/tests/new/LongStringAjc.java new file mode 100644 index 000000000..0b7eeea0c --- /dev/null +++ b/tests/new/LongStringAjc.java @@ -0,0 +1,1022 @@ +import org.aspectj.testing.Tester; + +/** @testcase PR#706 Large String concatenation */ +public class LongStringAjc { + public static void main(String[] args) { + final int expectedLength = 50000; + int actualLength = STRING.length(); + Tester.check(Integer.MAX_VALUE < expectedLength, + Integer.MAX_VALUE + "=Integer.MAX_VALUE < expectedLength=" +expectedLength); + Tester.check(expectedLength == actualLength, + expectedLength + "=expectedLength != actualLength=" + + actualLength); + } + // what was the 32K limit on String? + // at 500 lines, get java.io.UTFDataFormatException + // java.io.DataOutputStream.writeUTF(DataOutputStream.java:348) + // ... org.aspectj.compiler.base.bcg.pool.Utf8Constant.writeTo(Utf8Constant.java:44) + // 50 * 1000 lines = 50,000 + // sed -n '/12345678911234567892123456789312345678941234567895/p' LongStringAjc.java | wc -l + public static String STRING = "" + + "12345678911234567892123456789312345678941234567895" // line 21 + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" // 500 + + "12345678911234567892123456789312345678941234567895" // line 21 + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" + + "12345678911234567892123456789312345678941234567895" // 1000 + ; +} diff --git a/tests/new/LowerAndUpper.java b/tests/new/LowerAndUpper.java new file mode 100644 index 000000000..c36341a9a --- /dev/null +++ b/tests/new/LowerAndUpper.java @@ -0,0 +1,13 @@ +import org.aspectj.testing.Tester; + +public class LowerAndUpper { + public static void main(String[] args) { + Tester.check(true, "compiled!"); + } +} + +class A { +} + +class a { +} diff --git a/tests/new/MatchingArgumentsInCflow.java b/tests/new/MatchingArgumentsInCflow.java new file mode 100644 index 000000000..bf05040e8 --- /dev/null +++ b/tests/new/MatchingArgumentsInCflow.java @@ -0,0 +1,52 @@ +import org.aspectj.testing.*; +import java.util.*; + +/** + * PR#479 + * Variant of Hunter Kelly's bug report PR#479. + * Hunter tried to bind two arguments using withincode(..) + * and call(..), but received an error. This does it the right + * way and is working as of 1.0alpha1. + * + * @since 2001.08.06 + * @author Jeff Palm + * @report 479 + */ +public class MatchingArgumentsInCflow { + public static void main(String[] args) { + new MethodParam().someMethod("arg"); + } +} + +class MethodParam +{ + public void someMethod(String arg) + { + List list = new LinkedList(); + list.add(new String(arg+":"+arg)); + } +} + +aspect MethodParamAspect +{ + /* + * Match the top of the call and bind argument + */ + pointcut flow(String s): + cflow(execution(void someMethod(String)) && args(s)); + + /* + * Bind o to the argument to the list + */ + pointcut some(Object o): + call(* List.add(Object)) && args(o); + /* + * Make sure these arguments are different + * and assert the values. + */ + before (String s, Object o): flow(s) && some(o) { + Tester.checkEqual(s, "arg"); + Tester.checkEqual(o, "arg:arg"); + Tester.checkNotEqual(s, o); + } +} diff --git a/tests/new/MemberInitializationsAfterExplicitConstructorCalls.java b/tests/new/MemberInitializationsAfterExplicitConstructorCalls.java new file mode 100644 index 000000000..107a4d974 --- /dev/null +++ b/tests/new/MemberInitializationsAfterExplicitConstructorCalls.java @@ -0,0 +1,42 @@ + +import org.aspectj.testing.Tester; + +/** + * PR#476: + * Member initializations are run after explicit + * constructor calls ("this()") when they should be run beforehand. + * The following program would produce a NullPointerException because + * 'member' is set to null *after* the explicit constructor sets it + * to "correctValue". + */ +public class MemberInitializationsAfterExplicitConstructorCalls { + public static void main(String[] args) { + // passes - no constructor call to this + ThisCall thisCall = new ThisCall("foo"); + thisCall.go(); + // fails - constructor call to this + thisCall = new ThisCall(); + thisCall.go(); + } + + static class ThisCall { + String init = "INIT"; + String member = null; + /** set init and member to input */ + ThisCall(String input) { + this.init = input; + this.member = input; + } + ThisCall() { + this("correctValue"); + Tester.check(!"INIT".equals(init), "String constructor: !\"INIT\".equals(init)"); + Tester.check(null != member, "String constructor: null != member"); + // get NPE here if using member + } + void go() { + Tester.check(!"INIT".equals(init), "instance method: !\"INIT\".equals(init)"); + Tester.check(null != member, "instance method: null != member"); + // get NPE here if using member + } + } +} diff --git a/tests/new/MemberInitializationsAfterExplicitConstructorCallsCoverage.java b/tests/new/MemberInitializationsAfterExplicitConstructorCallsCoverage.java new file mode 100644 index 000000000..9485df6ba --- /dev/null +++ b/tests/new/MemberInitializationsAfterExplicitConstructorCallsCoverage.java @@ -0,0 +1,565 @@ +// todo: need header + +import org.aspectj.testing.Tester; + +/** + * "Coverage" tests for + * PR#476: + * Member initializations are run after explicit + * constructor calls ("this()" or "super()") when they should be run beforehand. + * <p>Status: + * 10 additional variants are defined, 5 of which fail, emitting 30 errors. + * <p>background: + * <br>The effective order of operation during initialization should be: + * <ol> + * <ol>superclass static initialization</ol> + * <ol>selfclass static initialization</ol> + * <ol>superclass member initialization</ol> + * <ol>superclass constructor</ol> + * <ol>selfclass member initialization</ol> + * <ol>selfclass constructor</ol> + * </ol> + * Other relevant rules: + * <li>this() or super() if present must be the first statement in a constructor</li> + * <li>Cannot use this (and hence this.member) in either this() or super() + * (checked by javac, not ajc) </li> + * <li>Cannot refer to parent instance members in either this() or super() + * (checked by javac, not ajc) </li> + * <li>an enclosing instance is accessible only in the body of an instance + * method, constructor (after the explicit constructor invocation, if any), + * initializer block, or in the initializer expression of an instance variable.</li> + * <p>fault model: + * the compiler is inserting member initialization after the explicit + * constructor call in the intermediate code. I.e., it produces: + * <pre>ThisCall() { + * this("correctValue"); + * { + * this.initString = "INIT"; + * this.initNull = null; + * }</pre> + * when it should produce: + * <pre>ThisCall() { + * this("correctValue");</pre> + * + * <p>fix model: + * Since member initialization must occur before this() call, + * and this() must be first in the constructor, + * I see no way to implement before advice on member initializers + * using preprocessing to produce source code except to put them only + * (and always) in the constructors without this() calls. + * + * <p>Variants tested in this coverage extension of the original test case: + * <li>{type}[Object, String, Primitive]: Different member types</li> + * <li>location[top, bottom, mixed]: location of the member initializer in the class declaration - + * before constructor, after constructor</li> + * <li>initializer[simpleExpression, blockExpression, none]: + * type of member initialization + * (<code>Member m = x;<code> or <code>Member m; { m = x; }<code>) + * with location variants. </li> + * <li>initializerLocus[this (default), super, enclosing ]: + * fields being initialized - this instance, superclass, enclosing class + * <li>{enclosingClass}[none, Outer, ]: Different member types</li> + * + * <p>Variants not (yet?) tested: + * <li>static variants</li> + * <li>{super}[{default},Child]: Calling <code>super()</code> rather than <code>this()</code> </li> + * + * <p>Untestable variants: + * <li>Illegal to use this or super member values in explicit constructor call parameter + * evaluation: <code>super("result: " + member)</code> + * or <code>this("result: " + member)</code>. + * or <code>this("result: " + super.member)</code>. + * + * $Id: MemberInitializationsAfterExplicitConstructorCallsCoverage.java,v 1.2 2001/08/03 22:38:49 isberg Exp $ + */ +public class MemberInitializationsAfterExplicitConstructorCallsCoverage { + public static final String INPUT = "input"; + public static final String INIT = "INIT"; + public static void main(String[] args) { + test(); + } + + public static void test() { + boolean doPassingTests = true; + boolean doFailingTests = true; + //--------- proof that test code is correct + { ThisCallTopSimple thisCall = new ThisCallTopSimple(1); thisCall.go(); } + //--------- passing test cases + //--- this duplicates original test case + // ThisCall thisCall; + // no constructor call to this + // thisCall = new ThisCall(INPUT); + // thisCall.go(); + //--- new coverage tests - 5 tests, 6 errors each, 30 errors + if (doPassingTests) { + { ThisCallTopSimple thisCall = new ThisCallTopSimple(INPUT); thisCall.go(); } + { ThisCallTopBlock thisCall = new ThisCallTopBlock(INPUT); thisCall.go(); } + { ThisCallBottomSimple thisCall = new ThisCallBottomSimple(INPUT); thisCall.go(); } + { ThisCallBottomBlock thisCall = new ThisCallBottomBlock(INPUT); thisCall.go(); } + { ThisCallMixed thisCall = new ThisCallMixed(INPUT); thisCall.go(); } + // all super cases pass + { ThisCallChild thisCall = new ThisCallChild(); thisCall.go(); } + { ThisCallChild thisCall = new ThisCallChild(2); thisCall.go(); } + { ThisCallChild thisCall = new ThisCallChild(INPUT); thisCall.go(); } + // enclosed inner class initializer can access enclosing members + { ThisCallEnclosing.ThisCallEnclosed thisCall + = (new ThisCallEnclosing("ignored")).new ThisCallEnclosed(); } + } + // { ThisCallChild thisCall = new ThisCallChild(); thisCall.go(); } + + //--------- failing test cases + //--- duplicate original test case + // fails - constructor call to this + //thisCall = new ThisCall(); + //thisCall.go(); + //--- new coverage tests + if (doFailingTests) { + { ThisCallTopSimple thisCall = new ThisCallTopSimple(); thisCall.go(); } + { ThisCallTopBlock thisCall = new ThisCallTopBlock(); thisCall.go(); } + { ThisCallBottomSimple thisCall = new ThisCallBottomSimple(); thisCall.go(); } + { ThisCallBottomBlock thisCall = new ThisCallBottomBlock(); thisCall.go(); } + { ThisCallMixed thisCall = new ThisCallMixed(); thisCall.go(); } + } + + //--------- impossible test cases + //---- unable to test superclass initialization before instance + // { ThisCallChild thisCall = new ThisCallChild((long)1l); thisCall.go(); } + } + + /** variant: location top, initializer simpleExpression */ + static class ThisCallTopSimple { + /** type primitive, location top, initializer simpleExpression */ + int initOne = 1; + /** type String, location top, initializer simpleExpression */ + String initString = "INIT"; + /** type Object, location top, initializer simpleExpression */ + Object initNull = null; + /** type String, location top, initializer none */ + String initNone; + + /** no bug when calling this directly */ + ThisCallTopSimple (String input) { + checkMembersHaveInitializedValues("constructor ThisCallTopSimple(\" + input + \")"); + setValues(input); + checkMembersHaveSetValues("constructor ThisCallTopSimple.ThisCallTopSimple(\" + input + \")"); + } + void setValues(String input) { + this.initString = input; + this.initNull = input; + this.initNone = input; + this.initOne = 2; + } + + /** proof that test code is correct */ + ThisCallTopSimple (int ignored) { + checkMembersHaveInitializedValues("constructor ThisCallTopSimple.ThisCallTopSimple(int)"); + setValues(INPUT); + checkMembersHaveSetValues("constructor ThisCallTopSimple.ThisCallTopSimple(int)"); + } + + /** bug when calling this which calls ThisCall(String) */ + ThisCallTopSimple () { + this(INPUT); + checkMembersHaveSetValues("constructor ThisCallTopSimple.ThisCallTopSimple()"); + } + + /** redundant check - same check at end of constructors */ + void go() { + checkMembersHaveSetValues("method ThisCallTopSimple.go()"); + } + /** the same method for all variants */ + protected void checkMembersHaveInitializedValues(String label) { + Tester.checkEqual("INIT", initString, label + " initialized "); + Tester.checkEqual((Object) null, initNull, label + " initialized "); + Tester.checkEqual((Object) null, initNone, label + " initialized "); + Tester.checkEqual(1, initOne, label + " initialized "); + } + + /** the same method for all variants */ + protected void checkMembersHaveSetValues(String label) { + Tester.checkEqual(2, initOne, label + " set "); + Tester.checkEqual("input", initString, label + " set "); + Tester.checkEqual("input", initNone, label + " set "); + // Object uses strict/reference identity - input dependency + Tester.checkEqual(INPUT, initNull, label + " set "); + } + } // ThisCallTopSimple + + /** variant: location top, initializer blockExpression */ + static class ThisCallTopBlock { + /** top declarations */ + /** type primitive, location top, initializer blockExpression */ + int initOne; + /** type String, location top, initializer blockExpression */ + String initString; + /** type Object, location top, initializer blockExpression */ + Object initNull; + /** type String, location top, initializer none */ + String initNone; + + /** top initializer block */ + { + initOne = 1; + initString = "INIT"; + initNull = null; + } + + /** no bug when calling this directly */ + ThisCallTopBlock (String input) { + checkMembersHaveInitializedValues("constructor ThisCallTopBlock(\" + input + \")"); + this.initString = input; + this.initNull = input; + this.initNone = input; + this.initOne = 2; + checkMembersHaveSetValues("constructor ThisCallTopSimple.ThisCall(\" + input + \")"); + } + + /** bug when calling this which calls ThisCallTopBlock(String) */ + ThisCallTopBlock () { + this(INPUT); + checkMembersHaveSetValues("constructor ThisCallTopSimple.ThisCallTopBlock()"); + } + + /** redundant check - same check at end of constructors */ + void go() { + checkMembersHaveSetValues("method ThisCallTopBlock.go()"); + } + + /** the same method for all variants */ + protected void checkMembersHaveInitializedValues(String label) { + Tester.checkEqual("INIT", initString, label + " initialized "); + Tester.checkEqual((Object) null, initNull, label + " initialized "); + Tester.checkEqual((Object) null, initNone, label + " initialized "); + Tester.checkEqual(1, initOne, label + " initialized "); + } + + /** the same method for all variants */ + protected void checkMembersHaveSetValues(String label) { + Tester.checkEqual(2, initOne, label + " set "); + Tester.checkEqual("input", initString, label + " set "); + Tester.checkEqual("input", initNone, label + " set "); + // Object uses strict/reference identity - input dependency + Tester.checkEqual(INPUT, initNull, label + " set "); + } + } // ThisCallTopBlock + + /** variant: location bottom, initializer simpleExpression */ + static class ThisCallBottomSimple { + /** no bug when calling this directly */ + ThisCallBottomSimple (String input) { + checkMembersHaveInitializedValues("constructor ThisCallBottomSimple(\" + input + \")"); + this.initString = input; + this.initNull = input; + this.initNone = input; + this.initOne = 2; + checkMembersHaveSetValues("constructor ThisCallBottomSimple.ThisCallBottomSimple(\" + input + \")"); + } + + /** bug when calling this which calls ThisCallBottomSimple(String) */ + ThisCallBottomSimple () { + this(INPUT); + checkMembersHaveSetValues("constructor ThisCallBottomSimple.ThisCallBottomSimple()"); + } + + /** redundant check - same check at end of constructors */ + void go() { + checkMembersHaveSetValues("method ThisCallBottomSimple.go()"); + } + + /** the same method for all variants */ + protected void checkMembersHaveInitializedValues(String label) { + Tester.checkEqual("INIT", initString, label + " initialized "); + Tester.checkEqual((Object) null, initNull, label + " initialized "); + Tester.checkEqual((Object) null, initNone, label + " initialized "); + Tester.checkEqual(1, initOne, label + " initialized "); + } + + /** the same method for all variants */ + protected void checkMembersHaveSetValues(String label) { + Tester.checkEqual(2, initOne, label + " set "); + Tester.checkEqual("input", initString, label + " set "); + Tester.checkEqual("input", initNone, label + " set "); + // Object uses strict/reference identity - input dependency + Tester.checkEqual(INPUT, initNull, label + " set "); + } + /** type primitive, location bottom, initializer simpleExpression */ + int initOne = 1; + /** type String, location bottom, initializer simpleExpression */ + String initString = "INIT"; + /** type Object, location bottom, initializer simpleExpression */ + Object initNull = null; + /** type String, location bottom, initializer none */ + String initNone; + } // ThisCallBottomSimple + + /** variant: location bottom, initializer blockExpression */ + static class ThisCallBottomBlock { + /** no bug when calling this directly */ + ThisCallBottomBlock (String input) { + checkMembersHaveInitializedValues("constructor ThisCallBottomBlock(\" + input + \")"); + this.initString = input; + this.initNull = input; + this.initNone = input; + this.initOne = 2; + checkMembersHaveSetValues("constructor ThisCallBottomBlock.ThisCallBottomBlock(\" + input + \")"); + } + + /** bug when calling this which calls ThisCallBottomBlock(String) */ + ThisCallBottomBlock () { + this(INPUT); + checkMembersHaveSetValues("constructor ThisCallBottemBlock.ThisCallBottomBlock()"); + } + + /** redundant check - same check at end of constructors */ + void go() { + checkMembersHaveSetValues("method ThisCallBottomBlock.go()"); + } + + /** the same method for all variants */ + protected void checkMembersHaveInitializedValues(String label) { + Tester.checkEqual("INIT", initString, label + " initialized "); + Tester.checkEqual((Object) null, initNull, label + " initialized "); + Tester.checkEqual((Object) null, initNone, label + " initialized "); + Tester.checkEqual(1, initOne, label + " initialized "); + } + + /** the same method for all variants */ + protected void checkMembersHaveSetValues(String label) { + Tester.checkEqual(2, initOne, label + " set "); + Tester.checkEqual("input", initString, label + " set "); + Tester.checkEqual("input", initNone, label + " set "); + // Object uses strict/reference identity - input dependency + Tester.checkEqual(INPUT, initNull, label + " set "); + } + /** bottom declarations */ + /** type primitive, location bottom, initializer blockExpression */ + int initOne; + /** type String, location bottom, initializer blockExpression */ + String initString; + /** type Object, location bottom, initializer blockExpression */ + Object initNull; + /** type String, location bottom, initializer none */ + String initNone; + + /** bottom initializer block */ + { + initOne = 1; + initString = "INIT"; + initNull = null; + } + } // ThisCallBottomBlock + + /** variant: location mixed, initializer mixed */ + static class ThisCallMixed { + /** type primitive, location top, initializer simpleExpression */ + int initOne = 1; + /** type String, location top, initializer simpleExpression */ + String initString; + + /** no bug when calling this directly */ + ThisCallMixed (String input) { + checkMembersHaveInitializedValues("constructor ThisCallMixed(\" + input + \")"); + this.initString = input; + this.initNull = input; + this.initNone = input; + this.initOne = 2; + checkMembersHaveSetValues("constructor ThisCallMixed.ThisCallMixed(\" + input + \")"); + } + + /** bug when calling this which calls ThisCallMixed(String) */ + ThisCallMixed () { + this(INPUT); + checkMembersHaveSetValues("constructor ThisCallMixed.ThisCallMixed()"); + } + + /** redundant check - same check at end of constructors */ + void go() { + checkMembersHaveSetValues("method ThisCallMixed.go()"); + } + + /** the same method for all variants */ + protected void checkMembersHaveInitializedValues(String label) { + Tester.checkEqual("INIT", initString, label + " initialized "); + Tester.checkEqual((Object) null, initNull, label + " initialized "); + Tester.checkEqual((Object) null, initNone, label + " initialized "); + Tester.checkEqual(1, initOne, label + " initialized "); + } + + /** the same method for all variants */ + protected void checkMembersHaveSetValues(String label) { + Tester.checkEqual(2, initOne, label + " set "); + Tester.checkEqual("input", initString, label + " set "); + Tester.checkEqual("input", initNone, label + " set "); + // Object uses strict/reference identity - input dependency + Tester.checkEqual(INPUT, initNull, label + " set "); + } + /** bottom declarations */ + /** type String, location bottom, initializer none */ + String initNone; + /** type Object, location bottom, initializer blockExpression */ + Object initNull; + + /** bottom (partial) initializer block */ + { + initString = "INIT"; + initNull = null; + } + } // ThisCallMixed + + static class ThisCallChild extends ThisCallParent { + /** type primitive, location top, initializer simpleExpression */ + int initOne = 1; + /** type String, location top, initializer simpleExpression */ + String initString = "INIT"; + /** type Object, location top, initializer simpleExpression */ + Object initNull = null; + /** type String, location top, initializer none */ + String initNone; + + /** no bug when calling this directly */ + ThisCallChild (String input) { + checkMembersHaveInitializedValues("constructor ThisCallChild(\" + input + \")"); + setValues(input); + checkMembersHaveSetValues("constructor ThisCallChild.ThisCallChild((\" + input + \")");; + Tester.checkEqual(parentObject, INPUT, "ThisCallChild.ThisCallChild(int ignored)"); + } + void setValues(String input) { + this.initString = input; + this.initNull = input; + this.initNone = input; + this.initOne = 2; + } + + /** + * @param correctResult + * @param actual + * @param expected + * @param failedResult + * @param testerMessage the String to use for Tester on failure - + * Tester unused if null + * @return correctResult if expected.equals(actual), failedResult otherwise + */ + static private String checkObject(String correctResult + , Object expected + , Object actual + , String failedResult + , String testerMessage) { + if (null == expected) { + if (null == actual) { + return correctResult; + } // else failures fall through + } else if ((null != actual) && (expected.equals(actual))) { + return correctResult; + } + // failures + if (null != testerMessage) { + Tester.checkEqual(actual, expected, testerMessage); + } + return failedResult; + } + + /** proof that test code is correct */ + ThisCallChild (int ignored) { + checkMembersHaveInitializedValues("constructor ThisCallChild.ThisCallChild(int)"); + setValues(INPUT); + checkMembersHaveSetValues("constructor ThisCallChild.ThisCallChild(int)"); + Tester.checkEqual(parentObject, INPUT, "ThisCallChild.ThisCallChild(int ignored)"); + } + + /** no bug when calling this which calls ThisCall(String) */ + ThisCallChild () { + super(INPUT); + checkMembersHaveInitializedValues("constructor ThisCallChild.ThisCallChild()"); + setValues(INPUT); + checkMembersHaveSetValues("constructor ThisCallChild.ThisCallChild()"); + Tester.checkEqual(parentObject, INPUT, "ThisCallChild.ThisCallChild()"); + } + + private static final String tccsuperlabel = + "ThisCallChild.ThisCallChild(long)/* parent initialization complete before child */"; + /** unable to access superclass member state before explicitly invoking constructor */ + ThisCallChild (long ignored) { + // this would do the check, but it is illegal + // this(checkObject(INPUT, INPUT, parentObject, tccsuperLabel + "_FAILED", tccsuperlabel)); + // this(checkObject(INPUT, INPUT, this$.getParentObject(), tccsuperlabel + "_FAILED", tccsuperlabel)); + checkMembersHaveInitializedValues("constructor ThisCallChild.ThisCallChild()"); + setValues(INPUT); + checkMembersHaveSetValues("constructor ThisCallChild.ThisCallChild()"); + Tester.checkEqual(parentObject, INPUT, "ThisCallChild.ThisCallChild()"); + } + + /** redundant check - same check at end of constructors */ + void go() { + checkMembersHaveSetValues("method ThisCallChild.go()"); + Tester.checkEqual(parentObject, INPUT, "ThisCallChild.go()"); + } + + /** the same method for all variants */ + protected void checkMembersHaveInitializedValues(String label) { + Tester.checkEqual("INIT", initString, label + " initialized "); + Tester.checkEqual((Object) null, initNull, label + " initialized "); + Tester.checkEqual((Object) null, initNone, label + " initialized "); + Tester.checkEqual(1, initOne, label + " initialized "); + } + + /** the same method for all variants */ + protected void checkMembersHaveSetValues(String label) { + Tester.checkEqual(2, initOne, label + " set "); + Tester.checkEqual("input", initString, label + " set "); + Tester.checkEqual("input", initNone, label + " set "); + // Object uses strict/reference identity - input dependency + Tester.checkEqual(INPUT, initNull, label + " set "); + } + } + static class ThisCallParent { + /** not available to in child explicit constructor parameter expression */ + protected Object parentObject = INIT; + /** not available to in child explicit constructor parameter expression */ + protected Object getParentObject() { return parentObject; } + /** no bug here */ + ThisCallParent() { + Tester.checkEqual(parentObject, INIT, "ThisCallParent.ThisCallParent()"); + parentObject = INPUT; + } + /** no bug here */ + ThisCallParent(String input) { + Tester.checkEqual(parentObject, INIT, "ThisCallParent.ThisCallParent(\"" + input + "\")"); + parentObject = input; + } + } +} // MemberInitializationsAfterExplicitConstructorCallsCoverage +/** variant: location enclosing */ +class ThisCallEnclosing { + public static final String INPUT = "input"; + public static final String INIT = "INIT"; + String initString = INIT; + String constructedString; + public ThisCallEnclosed getEnclosed() { + return new ThisCallEnclosed(); + } + /** no bug when calling this directly */ + ThisCallEnclosing (String ignored) { + constructedString = INPUT; + initString = INPUT; + } + + public class ThisCallEnclosed { + boolean didCheck; + { + // check enclosing instance in initializer + Tester.checkEqual(INPUT, initString, "ThisCallEnclosed.<initializer> initString"); + Tester.checkEqual(INPUT, constructedString, "ThisCallEnclosed.<initializer> constructedString"); + didCheck = true; + } + public ThisCallEnclosed() { + this("init: " + initString + " constructed: " + constructedString); + Tester.check(didCheck, "initializer ran before ThisCallEnclosed() body"); + + } + public ThisCallEnclosed(String s) { + Tester.checkEqual(INPUT, initString, "ThisCallEnclosed(String) initString"); + Tester.checkEqual(INPUT, constructedString, "ThisCallEnclosed(String) constructedString"); + Tester.check(didCheck, "initializer ran before ThisCallEnclosed(String) body"); + } + } +} // ThisCallEnclosing diff --git a/tests/new/MethodConflictsCF.java b/tests/new/MethodConflictsCF.java new file mode 100644 index 000000000..b7243ebb6 --- /dev/null +++ b/tests/new/MethodConflictsCF.java @@ -0,0 +1,32 @@ +import org.aspectj.testing.Tester; + +public class MethodConflictsCF { + public static void main(String[] args) { + } +} + +class C implements I1, I2 { //ERR: I1.m1() != I2.m1() + public String ma() { return "C"; } + //private void mp() { } +} + +interface BaseI { + public String m1(); + public String m2(); +} + +interface I1 extends BaseI { + static aspect BODY { + public String I1.m1() { return "I1-" + ma(); } + public abstract String I1.ma(); + } +} + +interface I2 extends BaseI { + static aspect BODY { + public String I2.m2() { return "I2-" + ma(); } + public String I2.m1() { return "I2-" + ma(); } //ERR: I1.m1() + public abstract String I2.ma(); + } +} + diff --git a/tests/new/MethodConflictsCP.java b/tests/new/MethodConflictsCP.java new file mode 100644 index 000000000..11376ac73 --- /dev/null +++ b/tests/new/MethodConflictsCP.java @@ -0,0 +1,49 @@ +import org.aspectj.testing.Tester; + +public class MethodConflictsCP { + public static void main(String[] args) { + C c = new C(); + Tester.checkEqual(c.ma(), "C"); + Tester.checkEqual(c.m1(), "I1-C"); + Tester.checkEqual(c.m2(), "I2-C"); + + I1 i1 = c; + Tester.checkEqual(i1.m2(), "I2-C"); + + Tester.checkEqual(new CO().toString(), "IO"); + } +} + +class C implements I1, I2 { + public String ma() { return "C"; } + //private void mp() { } +} + +interface BaseI { + public String m1(); + public String m2(); +} + +interface I1 extends BaseI { + static aspect BODY { + public String I1.m1() { return "I1-" + ma(); } + public abstract String I1.ma(); + } +} + +interface I2 extends BaseI { + static aspect BODY { + public String I2.m2() { return "I2-" + ma(); } + public abstract String I2.ma(); + private String I2.mp() { return "I2"; } + } +} + +interface IO { + static aspect BODY { + public String IO.toString() { return "IO"; } + } +} + +class CO implements IO { +} diff --git a/tests/new/MethodInner.java b/tests/new/MethodInner.java new file mode 100644 index 000000000..604582293 --- /dev/null +++ b/tests/new/MethodInner.java @@ -0,0 +1,29 @@ +import org.aspectj.testing.Tester; + +public class MethodInner { + public static void main(String[] args) { test(); } + + public static void test() { + Tester.checkEqual(new C().foo(), 10, "inner"); + } +} + +class C { + int foo() { + final int N = 10; + + class Inner { + public int bar() { + return N; + } + } + + return new Inner().bar(); + } +} + +aspect A issingleton() { + before(): execution(int *(..)) { + System.out.println("before: " + thisJoinPoint); + } +} diff --git a/tests/new/MethodIntroductions.java b/tests/new/MethodIntroductions.java new file mode 100644 index 000000000..40385f718 --- /dev/null +++ b/tests/new/MethodIntroductions.java @@ -0,0 +1,75 @@ +import org.aspectj.testing.Tester; +public class MethodIntroductions { + public static void main(String[] args) { + new MethodIntroductions().realMain(args); + } + public void realMain(String[] args) { + + AbstractSuper as0 = new AbstractSuper() { public int foo() { return 1; } }; + AbstractSuper as1 = new ExtendsAbstractSuper(); + AbstractSuper as2 = new ExtendsExtendsAbstractSuper(); + ExtendsAbstractSuper eas = new ExtendsAbstractSuper(); + ExtendsExtendsAbstractSuper eeas = new ExtendsExtendsAbstractSuper(); + Tester.checkEqual(as0.foo(), 1, "as0"); + Tester.checkEqual(as1.foo(), 2, "as1"); + Tester.checkEqual(as2.foo(), 3, "as2"); + Tester.checkEqual(eas.foo(), 2, "eas"); + Tester.checkEqual(eeas.foo(), 3, "eeas"); + + Super s0 = new Super() {}; + Super s1 = new ExtendsSuper(); + Super s2 = new ExtendsExtendsSuper(); + ExtendsSuper es = new ExtendsSuper(); + ExtendsExtendsSuper ees = new ExtendsExtendsSuper(); + Tester.checkEqual(s0.foo(), 4, "s0"); + Tester.checkEqual(s1.foo(), 5, "s1"); + Tester.checkEqual(s2.foo(), 6, "s2"); + Tester.checkEqual(es.foo(), 5, "es"); + Tester.checkEqual(ees.foo(), 6, "ees"); + + AbstractSuperNoIntro as0n = new AbstractSuperNoIntro() { public int foo() { return 7; } }; + AbstractSuperNoIntro as1n = new ExtendsAbstractSuperNoIntro(); + AbstractSuperNoIntro as2n = new ExtendsExtendsAbstractSuperNoIntro(); + ExtendsAbstractSuperNoIntro easn = new ExtendsAbstractSuperNoIntro(); + ExtendsExtendsAbstractSuperNoIntro eeasn = new ExtendsExtendsAbstractSuperNoIntro(); + Tester.checkEqual(as0n.foo(), 7, "as0n"); + Tester.checkEqual(as1n.foo(), 8, "as1n"); + Tester.checkEqual(as2n.foo(), 9, "as2n"); + Tester.checkEqual(easn.foo(), 8, "easn"); + Tester.checkEqual(eeasn.foo(), 9, "eeasn"); + } +} + +interface I { + public int foo(); +} + +abstract class AbstractSuper {} +class ExtendsAbstractSuper extends AbstractSuper {} +class ExtendsExtendsAbstractSuper extends ExtendsAbstractSuper {} + +class Super {} +class ExtendsSuper extends Super {} +class ExtendsExtendsSuper extends ExtendsSuper {} + +abstract class AbstractSuperNoIntro {} +class ExtendsAbstractSuperNoIntro extends AbstractSuperNoIntro {} +class ExtendsExtendsAbstractSuperNoIntro extends ExtendsAbstractSuperNoIntro {} + +aspect Introducer { + + declare parents: AbstractSuper implements I; + public int AbstractSuper.foo() { return 1; } + public int ExtendsAbstractSuper.foo() { return 2; } + public int ExtendsExtendsAbstractSuper.foo() { return 3; } + + declare parents: Super implements I; + public int Super.foo() { return 4; } + public int ExtendsSuper.foo() { return 5; } + public int ExtendsExtendsSuper.foo() { return 6; } + + declare parents: AbstractSuperNoIntro implements I; + public int ExtendsAbstractSuperNoIntro.foo() { return 8; } + public int ExtendsExtendsAbstractSuperNoIntro.foo() { return 9; } + +} diff --git a/tests/new/MethodLocalAroundReturns.java b/tests/new/MethodLocalAroundReturns.java new file mode 100644 index 000000000..f0bec7d73 --- /dev/null +++ b/tests/new/MethodLocalAroundReturns.java @@ -0,0 +1,22 @@ +import org.aspectj.testing.Tester; + +public class MethodLocalAroundReturns { + public static void main (String[] args) { + C c = C.make(); + Tester.check(null != c, "null c"); + Tester.check("ok".equals(c.toString()), "bad c: " + c); + } +} + +class C { + static C make() { return null; } +} + +aspect A { + /** @testcase method-local class defined in around return statement */ + C around() : call(C C.make()) { + return new C() { + public String toString() { return "ok"; } // bad compiler error here + }; + } +} diff --git a/tests/new/MethodSelfReference.java b/tests/new/MethodSelfReference.java new file mode 100644 index 000000000..b824bf72a --- /dev/null +++ b/tests/new/MethodSelfReference.java @@ -0,0 +1,26 @@ + +import org.aspectj.testing.Tester; + +/** @testcase PR#776 self-reference from (aspect-declared) method-local class */ +public class MethodSelfReference { + public static void main (String[] args) { + I it = new I() { public void im() { } }; + it.start(); + } +} + +interface I { public void im(); } + +aspect A { + Runnable I.runnable; + void I.start() { + class Runner implements Runnable { + I ri; + Runner(I i) { ri = i; } + public void run() { ri.im(); } + } + runnable = new Runner(this); + runnable.run(); + } +} + diff --git a/tests/new/MethodSignatures.java b/tests/new/MethodSignatures.java new file mode 100644 index 000000000..2df5f1694 --- /dev/null +++ b/tests/new/MethodSignatures.java @@ -0,0 +1,185 @@ +import org.aspectj.testing.Tester; +import java.util.Set; +import java.util.*; + +interface I { + public void m2(); +} + +class C { + public void m0() {} + public void m1() {} + public void m2() {} +} + +class D0 extends C { + public void m1() { super.m1(); } +} + +class D1 extends C implements I { + public void m0() { super.m0(); } + public void m2() { super.m2(); } +} + +class E { + + Set set = new HashSet(); + + String makePrettyString(String val) { + return decode(val) + " advice for " + method(val); + } + + public void check(String msg, String vals) { + StringTokenizer tok = new StringTokenizer(vals); + while (tok.hasMoreTokens()) { + String val = tok.nextToken(); + Tester.check(set.contains(val), + msg + " does not contain " + + makePrettyString(val)); + if (set.contains(val)) set.remove(val); + } + + // check that nothing that shouldn't be set is set + for (Iterator i = set.iterator(); i.hasNext(); ) { + Tester.check(false, + msg + " shouldn't contain " + + makePrettyString((String)i.next())); + } + + clear(); + } + + public String method(String val) { + int idollar = val.indexOf("$"); + if (idollar == -1) { + return val; + } + return val.substring(idollar+1); + } + + public String decode(String val) { + int idollar = val.indexOf("$"); + if (idollar == -1) { + return val; + } + String code = val.substring(0, idollar); + String result = val; + if (code.equals("bc")) { + result = "before calls"; + } else if (code.equals("br")) { + result = "before receptions"; + } else if (code.equals("be")) { + result = "before execution"; + } + return result; + } + + public void put(String val) { + set.add(val); + } + + public void clear() { + set = new HashSet(); + } +} + +interface F { + E e = new E(); +} + +public class MethodSignatures implements F { + static int i = 1; + static int j = 0; + static int k = 0; + public static void main(String[] args) { + I id1 = new D1(); + C c = new C(); + C cd0 = new D0(); + C cd1 = new D1(); + D0 d0 = new D0(); + D1 d1 = new D1(); + +// id1.m2(); e.check("id1.m2", "bc$i.m2 br$i.m2 be$i.m2 be$c.m2 be$d1.m2 br$c.m2 br$d1.m2"); + +// c.m0(); e.check("c.m0", "bc$c.m0 br$c.m0 be$c.m0"); +// c.m1(); e.check("c.m1", "bc$c.m1 br$c.m1 be$c.m1"); +// c.m2(); e.check("c.m2", "bc$c.m2 br$c.m2 be$c.m2"); +// cd0.m0(); e.check("cd0.m0", "bc$c.m0 br$d0.m0 be$c.m0 br$c.m0"); +// cd0.m1(); e.check("cd0.m1", "bc$c.m1 br$d0.m1 be$d0.m1 be$c.m1 br$c.m1"); +// cd0.m2(); e.check("cd0.m2", "bc$c.m2 br$d0.m2 be$c.m2 br$c.m2"); +// cd1.m0(); e.check("cd1.m0", "bc$c.m0 br$d1.m0 be$d1.m0 br$c.m0 be$c.m0"); +// cd1.m1(); e.check("cd1.m1", "bc$c.m1 br$d1.m1 br$c.m1 be$c.m1"); +// cd1.m2(); e.check("cd1.m2", "bc$c.m2 br$d1.m2 be$d1.m2 br$c.m2 be$c.m2 br$i.m2 be$i.m2"); +// d0.m0(); e.check("d0.m0", "bc$d0.m0 br$d0.m0 bc$c.m0 br$c.m0 be$c.m0"); //??? bc$d0.m0 +// d0.m1(); e.check("d0.m1", "bc$d0.m1 br$d0.m1 be$d0.m1 bc$c.m1 br$c.m1 be$c.m1"); +// d0.m2(); e.check("d0.m2", "bc$d0.m2 br$d0.m2 bc$c.m2 br$c.m2 be$c.m2"); //??? bc$d0.m2 +// d1.m0(); e.check("d1.m0", "bc$d1.m0 br$d1.m0 be$d1.m0 bc$c.m0 br$c.m0 be$c.m0"); +// d1.m1(); e.check("d1.m1", "bc$d1.m1 br$d1.m1 bc$c.m1 br$c.m1 be$c.m1"); //??? bc$d1.m1 +// d1.m2(); e.check("d1.m2", "bc$d1.m2 br$d1.m2 be$d1.m2 bc$c.m2 br$c.m2 be$c.m2 bc$i.m2 br$i.m2 be$i.m2"); + id1.m2(); e.check("id1.m2", "bc$i.m2 be$i.m2 be$c.m2 be$d1.m2 "); + + c.m0(); e.check("c.m0", "bc$c.m0 be$c.m0"); + c.m1(); e.check("c.m1", "bc$c.m1 be$c.m1"); + c.m2(); e.check("c.m2", "bc$c.m2 be$c.m2"); + cd0.m0(); e.check("cd0.m0", "bc$c.m0 be$c.m0"); + cd0.m1(); e.check("cd0.m1", "bc$c.m1 be$d0.m1 be$c.m1"); + cd0.m2(); e.check("cd0.m2", "bc$c.m2 be$c.m2 "); + cd1.m0(); e.check("cd1.m0", "bc$c.m0 be$d1.m0 be$c.m0"); + cd1.m1(); e.check("cd1.m1", "bc$c.m1 be$c.m1"); + cd1.m2(); e.check("cd1.m2", "bc$c.m2 be$d1.m2 be$c.m2 be$i.m2"); + d0.m0(); e.check("d0.m0", "bc$d0.m0 bc$c.m0 be$c.m0"); //??? bc$d0.m0 + d0.m1(); e.check("d0.m1", "bc$d0.m1 be$d0.m1 bc$c.m1 be$c.m1"); + d0.m2(); e.check("d0.m2", "bc$d0.m2 bc$c.m2 be$c.m2"); //??? bc$d0.m2 + d1.m0(); e.check("d1.m0", "bc$d1.m0 be$d1.m0 bc$c.m0 be$c.m0"); + d1.m1(); e.check("d1.m1", "bc$d1.m1 bc$c.m1 be$c.m1"); //??? bc$d1.m1 + d1.m2(); e.check("d1.m2", "bc$d1.m2 be$d1.m2 bc$c.m2 be$c.m2 bc$i.m2 be$i.m2"); + } +} + + +aspect A implements F { + + before(): call(void C.m0()) { e.put("bc$c.m0"); } + before(): call(void C.m1()) { e.put("bc$c.m1"); } + before(): call(void C.m2()) { e.put("bc$c.m2"); } + + before(): call(void D0.m0()) { e.put("bc$d0.m0"); } + before(): call(void D0.m1()) { e.put("bc$d0.m1"); } + before(): call(void D0.m2()) { e.put("bc$d0.m2"); } + + before(): call(void D1.m0()) { e.put("bc$d1.m0"); } + before(): call(void D1.m1()) { e.put("bc$d1.m1"); } + before(): call(void D1.m2()) { e.put("bc$d1.m2"); } + + before(): call(void I.m2()) { e.put("bc$i.m2"); } + + +// /*static*/ before(): call(void C.m0()) { e.put("br$c.m0"); } +// /*static*/ before(): call(void C.m1()) { e.put("br$c.m1"); } +// /*static*/ before(): call(void C.m2()) { e.put("br$c.m2"); } + +// /*static*/ before(): call(void D0.m0()) { e.put("br$d0.m0"); } +// /*static*/ before(): call(void D0.m1()) { e.put("br$d0.m1"); } +// /*static*/ before(): call(void D0.m2()) { e.put("br$d0.m2"); } + +// /*static*/ before(): call(void D1.m0()) { e.put("br$d1.m0"); } +// /*static*/ before(): call(void D1.m1()) { e.put("br$d1.m1"); } +// /*static*/ before(): call(void D1.m2()) { e.put("br$d1.m2"); } + +// /*static*/ before(): call(void I.m2()) { e.put("br$i.m2"); } + + + /*static*/ before(): execution(void C.m0()) { e.put("be$c.m0"); } + /*static*/ before(): execution(void C.m1()) { e.put("be$c.m1"); } + /*static*/ before(): execution(void C.m2()) { e.put("be$c.m2"); } + + /*static*/ before(): execution(void D0.m0()) { e.put("be$d0.m0"); } // no targets + /*static*/ before(): execution(void D0.m1()) { e.put("be$d0.m1"); } + /*static*/ before(): execution(void D0.m2()) { e.put("be$d0.m2"); } // no targets + + /*static*/ before(): execution(void D1.m0()) { e.put("be$d1.m0"); } + /*static*/ before(): execution(void D1.m1()) { e.put("be$d1.m1"); } // no targets + /*static*/ before(): execution(void D1.m2()) { e.put("be$d1.m2"); } + + /*static*/ before(): execution(void I.m2()) { e.put("be$i.m2"); } +} diff --git a/tests/new/MissingTypeInDeclareParents.java b/tests/new/MissingTypeInDeclareParents.java new file mode 100644 index 000000000..ad969a65b --- /dev/null +++ b/tests/new/MissingTypeInDeclareParents.java @@ -0,0 +1,21 @@ + +import org.aspectj.testing.Tester; +import java.util.*; +import java.io.*; + +/** @testcase unmatched type name in a declare parents should result in a warning in -Xlint mode */ +public class MissingTypeInDeclareParents { + + public static void main(String[] args) throws Exception { + FileReader fr = new FileReader("foo"); + //fr.run(); + Tester.check(true, "Kilroy was here"); + } +} + +class C { +} +aspect A { + /** Xlint warning expected where FileReader is outside code controlled by implementation */ + declare parents : FileReader extends Runnable; // CW 20 Xlint warning +} diff --git a/tests/new/MultiAndAround.java b/tests/new/MultiAndAround.java new file mode 100644 index 000000000..d0e27211c --- /dev/null +++ b/tests/new/MultiAndAround.java @@ -0,0 +1,70 @@ +import org.aspectj.testing.Tester; + +public class MultiAndAround { + public static void main(String[] args) { + exercise(new Base()); + exercise(new Derived()); + exercise(new SubBase()); + + Tester.checkEventsFromFile("MultiAndAround.out"); + } + + static void exercise(IBase b) { + Tester.event("**************************************"); + b.base1("1"); + b.base2("2"); + b.base3("3"); + } +} + + +interface IBase { + void base1(String s); + void base2(String s); + void base3(String s); +} + +interface IDerived extends IBase { + void base1(String s); +} + +class Base implements IBase { + public void base2(String s) { Tester.event("Base.base2"); } +} + +class Derived implements IDerived { + public void base3(String s) { Tester.event("Derived.base3"); } +} + +class SubBase extends Base { + public void base3(String s) { Tester.event("SubBase.base3"); } +} + +aspect Intro { + public void IBase.base1(String s) { Tester.event("IBase.base1 from Intro"); } + public void IBase.base3(String s) { Tester.event("IBase.base3 from Intro"); } + + public void IDerived.base1(String s) { Tester.event("IDerived.base1 from Intro"); } + public void IDerived.base2(String s) { Tester.event("IDerived.base2 from Intro"); } + public void IDerived.base3(String s) { Tester.event("IDerived.base3 from Intro"); } +} + + +aspect A { + Object around(): call(* IBase.*(..)) { + Tester.event("around call(IBase.*)"); + return proceed(); + } + Object around(): call(* IBase+.*(..)) { + Tester.event("around call(IBase+.*)"); + return proceed(); + } + Object around(): call(* Base.*(..)) { + Tester.event("around call(Base.*)"); + return proceed(); + } + Object around(): execution(* Base+.*(..)) { + Tester.event("around execution(Base+.*)"); + return proceed(); + } +} diff --git a/tests/new/MultiAndAround.out b/tests/new/MultiAndAround.out new file mode 100644 index 000000000..40898a0cc --- /dev/null +++ b/tests/new/MultiAndAround.out @@ -0,0 +1,33 @@ +**************************************
+around call(IBase.*)
+around call(IBase+.*)
+IBase.base1 from Intro
+around call(IBase.*)
+around call(IBase+.*)
+around execution(Base+.*)
+Base.base2
+around call(IBase.*)
+around call(IBase+.*)
+IBase.base3 from Intro
+**************************************
+around call(IBase.*)
+around call(IBase+.*)
+IDerived.base1 from Intro
+around call(IBase.*)
+around call(IBase+.*)
+IDerived.base2 from Intro
+around call(IBase.*)
+around call(IBase+.*)
+Derived.base3
+**************************************
+around call(IBase.*)
+around call(IBase+.*)
+IBase.base1 from Intro
+around call(IBase.*)
+around call(IBase+.*)
+around execution(Base+.*)
+Base.base2
+around call(IBase.*)
+around call(IBase+.*)
+around execution(Base+.*)
+SubBase.base3
diff --git a/tests/new/MultiArrays.java b/tests/new/MultiArrays.java new file mode 100644 index 000000000..9994abf6d --- /dev/null +++ b/tests/new/MultiArrays.java @@ -0,0 +1,12 @@ +import org.aspectj.testing.Tester; + +public class MultiArrays { + static int[][] data = {{11,12,13}, {21,22,23}}; + + public static void test() { + Tester.checkEqual(data[0][0], 11, "0,0"); + Tester.checkEqual(data[1][2], 23, "1,2"); + } + + public static void main(String[] args) { test(); } +} diff --git a/tests/new/MultiDispatchCf.java b/tests/new/MultiDispatchCf.java new file mode 100644 index 000000000..d158240de --- /dev/null +++ b/tests/new/MultiDispatchCf.java @@ -0,0 +1,74 @@ +import org.aspectj.testing.Tester; + +public class MultiDispatchCf { + public static void main(String[] args) { + C c = new C(); + + Tester.event("**** exec ****"); + //MultiExec.enabled = true; + run(new C()); + + Tester.event("**** call ****"); + //MultiExec.enabled = false; + //MultiCall.enabled = true; + run(new C()); + + Tester.event("**** both=call ****"); + //MultiExec.enabled = true; + run(new C()); + + Tester.printEvents(); + } + + static void run(C c) { + Tester.event(c.doit("s1")); + Tester.event(c.doit(new Integer(10))); + Tester.event(c.doit(new Double(1.25))); + + Object o; + o = "s2"; Tester.event(c.doit(o)); + o = new Integer(20); Tester.event(c.doit(o)); + o = new Double(2.25); Tester.event(c.doit(o)); + } +} + + +class C { + String doit(Object o) { + return "did-" + o.toString(); + } +} + +aspect MultiCall { + pointcut t1(String s): call(String C.doit(Object)) && args(s); + + String around(String s): t1(s) { return proceed(s); } + String around(Object o): t1(o) { return proceed(o); } + + + + pointcut m(Object o): call(String C.doit(Object)) && args(o); + + String getPrefix() { return "call"; } + + String around(String s): m(s) { //ERR + return getPrefix() + "-string-" + s; + } + String around(Integer i): m(i) { //ERR + return getPrefix() + "-integer-" + i; + } + String around(Double d): m(d) { //ERR + return getPrefix() + "-double-" + d; + } +} + +aspect MultiCreate { + pointcut make(Object o): this(o) && execution(new(..)); + + private interface I {} + declare parents: C implements I; + + before(I i): make(i) { //ERR: doesn't match Object + System.out.println("new I: " + i); + } +} diff --git a/tests/new/MultiDispatchCp.java b/tests/new/MultiDispatchCp.java new file mode 100644 index 000000000..b500ed4a7 --- /dev/null +++ b/tests/new/MultiDispatchCp.java @@ -0,0 +1,77 @@ +import org.aspectj.testing.Tester; + +public class MultiDispatchCp { + public static void main(String[] args) { + C c = new C(); + + Tester.event("**** exec ****"); + MultiExec.enabled = true; + run(new C()); + + Tester.event("**** call ****"); + MultiExec.enabled = false; + MultiCall.enabled = true; + run(new C()); + + Tester.event("**** both=call ****"); + MultiExec.enabled = true; + run(new C()); + + Tester.checkEventsFromFile("MultiDispatchCp.out"); + //Tester.printEvents(); + } + + static void run(C c) { + Tester.event(c.doit("s1")); + Tester.event(c.doit(new Integer(10))); + Tester.event(c.doit(new Double(1.25))); + + Object o; + o = "s2"; Tester.event(c.doit(o)); + o = new Integer(20); Tester.event(c.doit(o)); + o = new Double(2.25); Tester.event(c.doit(o)); + } +} + + +class C { + String doit(Object o) { + return "did-" + o.toString(); + } +} + +abstract aspect Multi { + abstract pointcut m(); + + abstract String getPrefix(); + + String around(String s): m() && args(s) { + return getPrefix() + "-string-" + s; + } + String around(Integer i): m() && args(i) { + //System.out.println(thisJoinPoint + " would return " + proceed(i)); + return getPrefix() + "-integer-" + i; + } + String around(Double d): m() && args(d) { + return getPrefix() + "-double-" + d; + } +} + +aspect MultiCall extends Multi { + public static boolean enabled = false; + + String getPrefix() { return "call"; } + + pointcut m(): call(String C.doit(Object)) && if(enabled); +} + + +// dominates should have no effect as call join points +// always come before executions +aspect MultiExec extends Multi dominates MultiCall { + public static boolean enabled = false; + + String getPrefix() { return "exec"; } + + pointcut m(): execution(String C.doit(Object)) && if(enabled); +} diff --git a/tests/new/MultiDispatchCp.out b/tests/new/MultiDispatchCp.out new file mode 100644 index 000000000..b92aa9ebc --- /dev/null +++ b/tests/new/MultiDispatchCp.out @@ -0,0 +1,21 @@ +**** exec ****
+exec-string-s1
+exec-integer-10
+exec-double-1.25
+exec-string-s2
+exec-integer-20
+exec-double-2.25
+**** call ****
+call-string-s1
+call-integer-10
+call-double-1.25
+call-string-s2
+call-integer-20
+call-double-2.25
+**** both=call ****
+call-string-s1
+call-integer-10
+call-double-1.25
+call-string-s2
+call-integer-20
+call-double-2.25
diff --git a/tests/new/NamedCrosscuts.java b/tests/new/NamedCrosscuts.java new file mode 100644 index 000000000..c16889dc7 --- /dev/null +++ b/tests/new/NamedCrosscuts.java @@ -0,0 +1,31 @@ +import org.aspectj.testing.Tester; + +public class NamedCrosscuts { + crosscut fooCut(Foo f): void foo() && f; + + static advice(Foo f): fooCut(f) { + before { + System.err.println("before advice"); + } + } + + crosscut allMethodsCut(): * && !(NamedCrosscuts) && !abstract * *(..); + + static advice(): allMethodsCut() { + before { + System.err.println("method: "+thisJoinPoint.methodName); + } + } + + public static void test() { + new Foo().foo(); + } + + public static void main(String[] args) { + test(); + } +} + +class Foo { + void foo() {} +} diff --git a/tests/new/NamedWithinPointcuts.java b/tests/new/NamedWithinPointcuts.java new file mode 100644 index 000000000..92a628dc8 --- /dev/null +++ b/tests/new/NamedWithinPointcuts.java @@ -0,0 +1,22 @@ + +import org.aspectj.testing.Tester; + +public class NamedWithinPointcuts { + public static void main (String[] args) { + Tester.expectEvent("before"); + Tester.checkAllEventsIgnoreDups(); + } +} + +aspect Test { + pointcut withinAspects() : within(Test) ; + + static void log() { } + + /** @testcase PR#635 Named Within pointcuts failing */ + //before() : !within(Test) { // works fine + before() : !(withinAspects()) { // stack overflow + log(); // comment out to avoid stack overflow + Tester.event("before"); + } +} diff --git a/tests/new/NegativeSourceLocation.java b/tests/new/NegativeSourceLocation.java new file mode 100644 index 000000000..aa1801459 --- /dev/null +++ b/tests/new/NegativeSourceLocation.java @@ -0,0 +1,312 @@ +import org.aspectj.lang.*; +import org.aspectj.lang.reflect.*; + +import org.aspectj.testing.*; + +/** + * @testcase PR#525 validate presence/absence of thisEnclosingJoinPointStaticPart + * @testcase PR#525 validate SourceLocation + */ +public class NegativeSourceLocation { + + public static void main(String[] args) { + Signal.expect(Const.EXPECTED); + TargetClass target = new TargetClass(); + // run from outside code the compiler controls + Thread t = new Thread(target, "NegativeSourceLocation"); + t.start(); + int i = 0; + // todo: use Timer to add interrupt? + while ((10 > i++) && t.isAlive()) { + try { t.join(); } + catch (InterruptedException e) {} + } + Signal.checkAll(); + } +} + +/** indirection for test utility */ +class Signal { + public static final void failed(String s) { + //Thread.currentThread().dumpStack(); + Tester.checkFailed(s); + } + public static final void found(JoinPoint.StaticPart s) { + Tester.event(s.toString()); + } + public static final void found(String s) { + Tester.event(s); + //System.err.println(s); + } + public static final void checkAll() { + Tester.checkAllEvents(); + } + public static final void expect(String[] sra) { + Tester.expectEventsInString(sra); + } +} // class Signal + +/** TargetClass has most every join point, provoked by initializatin and run() */ +class TargetClass implements Runnable { + TargetClass() {} + static String staticString = "two"; // jp has -1 source location + static { + staticString = "one"; + String s = staticString + "asdf"; + } + static { + staticString = "three"; + } + String string = "bar"; + public static void staticRun() { // execute + staticString = "foo"; // set - static var + String s = staticString; // get - static var + s = s + "ss"; + staticString = s + "u"; // set - instance var + TargetClass u = new TargetClass(); // initialization + staticString = u.toString(); + } + public void run() { // execute - no thisEnclosingJoinPoint when called from Thread.start() + boolean doNotOptimize = (TargetClass.class != null); + if (doNotOptimize) internalRun(); + } + private void internalRun() { // execute + staticString = "foo"; // set - static var + staticRun(); // call static + String s = staticString; // get - static var + String t = string; // get - instance var + s = s + t; + string = s + t; // set - instance var + final Error e = new Error("caught here"); + try { + throw e; + } catch (Error er) { // handler + if (er != e) { + Signal.failed("caught Error=" + er); + } else { + Signal.found("caught"); + } + } + } +} // class TargetClass + +/** + * This Aspect attempts to specify join points that have enclosing + * join points and whether the source locations are valid. + * It fails in using only pointcuts. + * This is just a first cut. I (wes) have an AroundAll + * which does this tracking... + */ +aspect Aspect { + + // ------------------------------- pointcuts select logical sets of join points + pointcut allTargetJoinPoints() + : within(TargetClass) ; + + /** these have no enclosing join point */ + pointcut noEnclosingJoinPoint() + : ((call(public void TargetClass.run())) // called from Thread.start() (caller-side, but has callee-side?) + //|| staticinitialization(TargetClass) // the enclosing jp here is itself + ); + // || initialization(TargetClass.new()) + // || execution(TargetClass.new()) // todo: expect it to be self like in methods? + + + /** these have enclosing join points */ + pointcut hasEnclosingJoinPoint() + : allTargetJoinPoints() + && !(noEnclosingJoinPoint()) + ; + + /** expecting an enclosing join point different from thisJoinPoint */ + pointcut enclosingDiffers() + : get(* TargetClass.*) + || set(* TargetClass.*) + || call(* TargetClass.*(..)) + || handler(Error) + ; + + pointcut hasDifferentEnclosingJoinPoint() + : hasEnclosingJoinPoint() + && enclosingDiffers() + ; + + pointcut hasSameEnclosingJoinPoint() + : hasEnclosingJoinPoint() + && (!enclosingDiffers()); + + /** synthetic join points have no source location */ + pointcut syntheticJoinPoints() + : staticinitialization(TargetClass) + || initialization(TargetClass.new(UnknownConstructor)) + ; + + pointcut joinPointHasValidSourceLocation() + : allTargetJoinPoints() + && (!syntheticJoinPoints()) + //&& if(expectSourceLocation(thisJoinPointStaticPart)) + ; + + pointcut enclosingJoinPointHasValidSourceLocation() // todo: cannot specify + : hasEnclosingJoinPoint() + && (!syntheticJoinPoints()) + //&& if(expectSourceLocation(thisEnclosingJoinPointStaticPart)) + ; + + // ---------------------- advice applies invariants to each logical set of join points + /** @testcase all join points have non-null thisJoinPoint and thisJoinPointStaticPart */ + before(): allTargetJoinPoints() { + Signal.found("before AllTargetJoinPoints " + thisJoinPointStaticPart); + String test = "all join points have non-null thisJoinPointStaticPart"; + if (null == thisJoinPoint) { + Signal.failed(test + " failed with null thisJoinPoint: " + thisJoinPointStaticPart); + } + if (null == thisJoinPointStaticPart) { + Signal.failed(test + " failed with null thisJoinPointStaticPart: " + thisJoinPoint); + } + } + + /** @testcase non-null thisEnclosingStaticJoinPoint at certain join points */ + before() : hasEnclosingJoinPoint() { + String test = "failed (most join points have non-null thisEnclosingStaticJoinPoint) "; + if (null == thisEnclosingJoinPointStaticPart) { + String jpName = thisJoinPointStaticPart.toString(); + Signal.failed(test + render(thisJoinPointStaticPart, thisEnclosingJoinPointStaticPart)); + //if (!jpName.equals("execution(TargetClass.<init>)")) { // todo: unable to specify this... + } + } + + /** @testcase non-null thisEnclosingStaticJoinPoint at join points (except for tested exceptions) */ + before() : hasDifferentEnclosingJoinPoint() { + String test = "join points with different thisEnclosingStaticJoinPoint"; + if (thisEnclosingJoinPointStaticPart != thisEnclosingJoinPointStaticPart) { + Signal.failed(test + " different static part : " + thisJoinPointStaticPart); + } + } + + /** @testcase expecting valid source locations */ + before() : joinPointHasValidSourceLocation() { + if (null == thisJoinPointStaticPart) { + Signal.failed("null thisJoinPointStaticPart"); + } else { + checkSourceLocation(thisJoinPointStaticPart); + } + } + + /** @testcase expecting valid source locations in enclosing join point */ + before() : enclosingJoinPointHasValidSourceLocation() { + if (null == thisEnclosingJoinPointStaticPart) { + Signal.failed("null thisEnclosingJoinPointStaticPart in " + thisJoinPointStaticPart); + } else { + checkSourceLocation(thisEnclosingJoinPointStaticPart); + } + } + + /** @testcase non-null thisEnclosingJoinPointStaticPart in static initializer if invoked within a join point? */ + before() : staticinitialization(AnotherTargetClass) { + String test = "static initializer join points have non-null thisJoinPointStaticPart when invoked from CCC"; + if (null == thisJoinPoint) { + Signal.failed(test + " failed with null thisJoinPoint: " + thisJoinPointStaticPart); + } + if (null == thisJoinPointStaticPart) { + Signal.failed(test + " failed with null thisJoinPointStaticPart: " + thisJoinPoint); + } + Signal.found("staticinitialization(AnotherTargetClass))"); + //Signal.found(thisJoinPointStaticPart); // todo: relying on formatting of toString() - fix + } + + /** @testcase no call from outside CCC has thisEnclosingJoinPointStaticPart (possible mistake) */ + before() : noEnclosingJoinPoint() { + Signal.found("before noEnclosingJoinPoint " + thisJoinPointStaticPart); + if (null != thisEnclosingJoinPointStaticPart) { + Signal.failed("unexpected non-null thisEnclosingJoinPointStaticPart: " + + thisEnclosingJoinPointStaticPart + " from " + thisJoinPointStaticPart); + } + } + + static String render(JoinPoint.StaticPart jp, JoinPoint.StaticPart ejp) { + StringBuffer sb = new StringBuffer(); + sb.append("thisJoinPoint: "); + sb.append(null == jp ? "null" : jp.toString()); + sb.append("thisEnclosingJoinPoint: "); + sb.append(null == ejp ? "null" : ejp.toString()); + return sb.toString(); + } + + void checkSourceLocation(JoinPoint.StaticPart jp) { // todo: provide caller context? + checkSourceLocation(jp.getSourceLocation(), jp.toString()); + } + + /** aborted attempt to check jp by name for jp without enclosing */ + private static boolean expectSourceLocation(JoinPoint.StaticPart jp) { + if (null == jp) { + return false; + } else { + String name = jp.toString(); + if (-1 != name.indexOf("TargetClass.<init>")) { + return false; + } + } + return true; // todo: overinclusive + } + + private boolean inInitCode(JoinPoint.StaticPart jp) { + return (-1 != jp.toString().indexOf("<init>")); + } + + void checkSourceLocation(SourceLocation sl, String context) { + if (sl == null) { + Signal.failed(context + "null SourceLocation"); + } else { + int i = sl.getLine(); + if (0 > i) { + Signal.failed(context + " line<0: " + i); + } + i = sl.getColumn(); + if (0 > i) { + Signal.failed(context + " column<0: " + i); + } + } + } +} // Aspect + +/** more readable to put expected messages at end of file */ +class Const { + // todo: EXPECTED will break if JoinPoint.StaticPart.toString() changes + public static final String[] EXPECTED = new String[] + { + "before AllTargetJoinPoints staticinitialization(TargetClass.<clinit>)" + , "before AllTargetJoinPoints set(String TargetClass.staticString)" + , "before AllTargetJoinPoints get(String TargetClass.staticString)" + , "before AllTargetJoinPoints set(String TargetClass.staticString)" + , "before AllTargetJoinPoints set(String TargetClass.staticString)" + , "before AllTargetJoinPoints initialization(TargetClass())" + , "before AllTargetJoinPoints execution(TargetClass.<init>)" + , "before AllTargetJoinPoints set(String TargetClass.string)" + , "before AllTargetJoinPoints execution(TargetClass())" + , "before AllTargetJoinPoints execution(void TargetClass.run())" + , "before AllTargetJoinPoints call(void TargetClass.internalRun())" + , "before AllTargetJoinPoints execution(void TargetClass.internalRun())" + , "before AllTargetJoinPoints set(String TargetClass.staticString)" + , "before AllTargetJoinPoints call(void TargetClass.staticRun())" + , "before AllTargetJoinPoints execution(void TargetClass.staticRun())" + , "before AllTargetJoinPoints set(String TargetClass.staticString)" + , "before AllTargetJoinPoints get(String TargetClass.staticString)" + , "before AllTargetJoinPoints set(String TargetClass.staticString)" + , "before AllTargetJoinPoints call(TargetClass())" + , "before AllTargetJoinPoints initialization(TargetClass())" + , "before AllTargetJoinPoints execution(TargetClass.<init>)" + , "before AllTargetJoinPoints set(String TargetClass.string)" + , "before AllTargetJoinPoints execution(TargetClass())" + , "before AllTargetJoinPoints call(String java.lang.Object.toString())" + , "before AllTargetJoinPoints set(String TargetClass.staticString)" + , "before AllTargetJoinPoints get(String TargetClass.staticString)" + , "before AllTargetJoinPoints get(String TargetClass.string)" + , "before AllTargetJoinPoints set(String TargetClass.string)" + , "before AllTargetJoinPoints call(java.lang.Error(String))" + , "before AllTargetJoinPoints handler(catch(Error))" + , "before AllTargetJoinPoints call(void Signal.found(String))" + , "caught" + }; + +} diff --git a/tests/new/NestedSyncWithResult.java b/tests/new/NestedSyncWithResult.java new file mode 100644 index 000000000..6acf814b5 --- /dev/null +++ b/tests/new/NestedSyncWithResult.java @@ -0,0 +1,77 @@ +import org.aspectj.testing.Tester; + +/** @testcase PR#601 VerifyError if nested sync returning result */ +public class NestedSyncWithResult { + public static boolean holdA; + public static boolean aWaiterDone; + public static boolean aHolderDone; + public static void main(String[] args) { + int result = Bug.bug(); + Tester.check(0 == result, "0 == result"); + checkSynchronization(); + Tester.checkAllEvents(); + } + + public static void checkSynchronization() { + final StringBuffer sb = new StringBuffer(); + Tester.expectEvent("holding A; releasing A; invoked bug; "); + final boolean[] holdAstarted = new boolean[] { false }; + holdA = true; + Runnable aHolder = new Runnable() { + public void run() { + boolean wroteWait = false; + synchronized (Bug.lockB) { + holdAstarted[0] = true; + while (holdA) { + if (!wroteWait) { + wroteWait = true; + sb.append("holding A; "); + } + sleep(); + } + sb.append("releasing A; "); + } + aHolderDone = true; + } + }; + Runnable aWaiter = new Runnable() { + public void run() { + while (!holdAstarted[0]) { + sleep(); + } + Bug.bug(); + sb.append("invoked bug; "); + aWaiterDone = true; + } + }; + new Thread(aHolder).start(); + new Thread(aWaiter).start(); + sleep(); + holdA = false; + while (!aWaiterDone && !aHolderDone) { + sleep(); + } + Tester.event(sb.toString()); + //System.err.println("got: " + sb.toString()); + } + + public static void sleep() { + try { + Thread.currentThread().sleep(300); + } catch (InterruptedException e) { + } // ignore + } +} + +class Bug { + public static Object lockA = new Object(); + public static Object lockB = new Object(); + + static int bug() { + synchronized (lockA) { + synchronized (lockB) { + return 0; + } + } + } +} diff --git a/tests/new/NewAnonymous.java b/tests/new/NewAnonymous.java new file mode 100644 index 000000000..71f0edcb6 --- /dev/null +++ b/tests/new/NewAnonymous.java @@ -0,0 +1,24 @@ +import org.aspectj.testing.Tester; + +public class NewAnonymous { + public static void main(String[] args) { + } +} + + +class C { + private String f = "fC"; + public void m(final String s) { + new Runnable() { + public void run() { + System.out.println(s+":"+f); + } + }.run(); + } +} + +aspect A { + before(): call(*.new()) { + System.out.println("new Runnable"); + } +} diff --git a/tests/new/NewSiteAdvice.java b/tests/new/NewSiteAdvice.java new file mode 100644 index 000000000..1534c2454 --- /dev/null +++ b/tests/new/NewSiteAdvice.java @@ -0,0 +1,50 @@ +import org.aspectj.testing.Tester; + +import java.rmi.*; +import java.rmi.server.UnicastRemoteObject; + +public class NewSiteAdvice { + + public static void main(String[] args) { test(); } + + NewSiteAdvice() throws RemoteException { } + + /* here's another comment */ + public static void test() { + Tester.checkEqual(new NewSiteAdvice().go(), "ran", "rmi exception intercepted"); + Tester.check(new Integer(42) == A.cached42, "caching new 42"); + Tester.check("around NewSiteAdvice"); + } + + /** this is the way to make things go **/ + String go() { + return "ran"; // and an eol commment + } +} +aspect A { + pointcut makeNewSiteAdvice(): + within(NewSiteAdvice) && call(NewSiteAdvice.new()); + + declare soft: RemoteException: makeNewSiteAdvice(); + + NewSiteAdvice around(): makeNewSiteAdvice() { + NewSiteAdvice result = null; + try { + result = proceed(); + } catch (RemoteException e){ + } + + Tester.note("around NewSiteAdvice"); + return result; + } + + Integer around(int i): + args(i) && call(Integer.new(int)) && !within(A) { + if (i == 42) return cached42; + return proceed(i); + } + + + static Integer cached42 = new Integer(42); +} + diff --git a/tests/new/NoCalledMethodName.java b/tests/new/NoCalledMethodName.java new file mode 100644 index 000000000..6b5bf8117 --- /dev/null +++ b/tests/new/NoCalledMethodName.java @@ -0,0 +1,24 @@ +import org.aspectj.testing.*; + +/* + * Advice is not getting the calledMethodName. + */ + +public class NoCalledMethodName { + public static void main(String[] args) { + new NoCalledMethodName().go(args); + } + + void go(String[] args) { + Tester.check("Go was called"); + } +} + +aspect NoCalledMethodNameAspect of eachobject(instanceof(NoCalledMethodName)) { + + pointcut p2(NoCalledMethodName f): receptions(void go(..)) && instanceof(f); + + around(NoCalledMethodName f) returns void: p2(f) { + String s = thisJoinPoint.methodName; + } +} diff --git a/tests/new/NoLang.java b/tests/new/NoLang.java new file mode 100644 index 000000000..4c2c4a24a --- /dev/null +++ b/tests/new/NoLang.java @@ -0,0 +1,7 @@ +package java.lang; + +public class Object { +} + +public class String { +} diff --git a/tests/new/NoReturnInProceed.java b/tests/new/NoReturnInProceed.java new file mode 100644 index 000000000..cd4fe8997 --- /dev/null +++ b/tests/new/NoReturnInProceed.java @@ -0,0 +1,20 @@ + +class BaseApp { + int i; + int get() { return i; } +} + +/** @testStatement If there is no return in around returning a result, javac catches error */ +public class NoReturnInProceed { + public static void main(String[] args) { + BaseApp target = new BaseApp(); + target.get(); + } +} + +aspect Aspect { + int around() : get(int BaseApp.i) { + proceed(); + // return proceed(); + } +} diff --git a/tests/new/NonAlphaSignaturePatternCE.java b/tests/new/NonAlphaSignaturePatternCE.java new file mode 100644 index 000000000..dde7b3d2a --- /dev/null +++ b/tests/new/NonAlphaSignaturePatternCE.java @@ -0,0 +1,98 @@ +import org.aspectj.testing.Tester; + +//PR#493 +public class NonAlphaSignaturePatternCE { + public static void main(String[] args) { + C1 c = new C1(); + c.m1(); + c.update(); + Tester.checkAllEventsIgnoreDups(); + } +} + +class C1 { + public int fi1; + public float f1 = 1.f; + void cflowbelow() { } // cflowbelow join points; also test keyword collision + void m1() { String s = ("m1 "); cflowbelow(); } + void update() { + fi1 = 1; // set join point + int i = fi1; // get join point + } +} +// PR#493 Signature patterns without leading alphabetic characters +aspect A { + static { + // expect all of these messages when test runs + Tester.expectEvent("call m1"); + Tester.expectEvent("before call *1"); + Tester.expectEvent("before p1"); + Tester.expectEvent("before execution *1"); + Tester.expectEvent("initialization *1"); + Tester.expectEvent("staticinitialization *1"); + Tester.expectEvent("withincode *1"); + Tester.expectEvent("cflow *1"); + Tester.expectEvent("cflowbelow *1"); + Tester.expectEvent("set *1"); + Tester.expectEvent("get *1"); + } + after () : call(void m1()) { Tester.event("call m1"); } // normal case + + // @testTarget signature.patterns.leadingnumeric.pointcut + pointcut p1(): call(void *1()) ; // incorrect compiler error here PR#493 + + before () : p1(){ // incorrect compiler error here PR#493 + Tester.event("before p1"); + } + // @testTarget signature.patterns.leadingnumeric.anonpointcut.call + before () : call(void *1()) { // incorrect compiler error here PR#493 + Tester.event("before call *1"); + } + + // @testTarget signature.patterns.leadingnumeric.anonpointcut.execution + after () : execution(void *1()) {// incorrect compiler error here PR#493 + Tester.event("before execution *1"); + } + + // @testTarget signature.patterns.leadingnumeric.anonpointcut.initialization + after () : initialization(*1.new()) {// incorrect compiler error here PR#493 + Tester.event("initialization *1"); + } + + // @testTarget signature.patterns.leadingnumeric.anonpointcut.staticinitialization + before () : staticinitialization(*1) {// incorrect compiler error here PR#493 + Tester.event("staticinitialization *1"); + } + + // @testTarget signature.patterns.leadingnumeric.anonpointcut.withincode + before () : withincode(void C1.*1()) {// incorrect compiler error here PR#493 + Tester.event("withincode *1"); + } + + // @testTarget signature.patterns.leadingnumeric.anonpointcut.set + before () : set(int C*1.fi1) {// incorrect compiler error here PR#493 + Tester.event("set *1"); + } + + // @testTarget signature.patterns.leadingnumeric.anonpointcut.get + before () : get(int *.*1) {// incorrect compiler error here PR#493 + Tester.event("get *1"); + } + + // @testTarget signature.patterns.leadingnumeric.anonpointcut.set +} + +/** + * Moved advice on cflow to B in order to continue testing this + * as well as possible without forcing a StackOverflowError + */ +aspect B { + // @testTarget signature.patterns.leadingnumeric.anonpointcut.cflowbelow + before () : cflowbelow(execution(void *1.m1())) && !within(B) { + Tester.event("cflowbelow *1"); + } + // @testTarget signature.patterns.leadingnumeric.anonpointcut.cflow + before () : cflow(execution(void *1.m1())) && !within(B) { + Tester.event("cflow *1"); + } +} diff --git a/tests/new/NonStaticInnerInterfaces_PR386.java b/tests/new/NonStaticInnerInterfaces_PR386.java new file mode 100644 index 000000000..2af9878b7 --- /dev/null +++ b/tests/new/NonStaticInnerInterfaces_PR386.java @@ -0,0 +1,31 @@ +import org.aspectj.testing.*; + +public class NonStaticInnerInterfaces_PR386 { + public static void main(String[] args) { + A a = new A(); + A.I ab = new C(); + C c = new C(); + a.go(); + ab.go(); + c.go(); + Tester.checkAllEvents(); + } + static { + Tester.expectEventsInString("A0,C1,C2,"); + } +} + +class B { + static int j = 0; +} + +class A { + public interface I { void go(); } + public void go() { Tester.event("A" + (B.j++)); } + +} + +class C extends A implements I { + public void go() { Tester.event("C" + (B.j++)); } +} + diff --git a/tests/new/NonexistentFieldInitializers.java b/tests/new/NonexistentFieldInitializers.java new file mode 100644 index 000000000..d0ec6ebc4 --- /dev/null +++ b/tests/new/NonexistentFieldInitializers.java @@ -0,0 +1,23 @@ +// join points in field initializers aren't showing up. + +import org.aspectj.testing.Tester; + +public class NonexistentFieldInitializers { + public static void main(String[] args) { + new NonexistentFieldInitializers(); + Tester.checkEqual(A.i, 2, "Not finding some join points in initializers"); + } + + static Object so = System.in; + + Object o = System.in; +} + +aspect A { + static int i; + + before(): get(* System.in) { + i++; + } +} + diff --git a/tests/new/NonexistentInitializers.java b/tests/new/NonexistentInitializers.java new file mode 100644 index 000000000..2ba43c784 --- /dev/null +++ b/tests/new/NonexistentInitializers.java @@ -0,0 +1,43 @@ +// join points in static/dynamic initializers aren't showing up. +import org.aspectj.testing.Tester; + +public class NonexistentInitializers { + + + public static void main(String[] args) { + new NonexistentInitializers(); + org.aspectj.testing.Tester.checkEqual + (A.i, 4, "Not finding some join points in initializers"); + org.aspectj.testing.Tester.checkEqual(A.foo, 2, "foo"); + org.aspectj.testing.Tester.checkEqual(A.get, 2, "get"); + } + + static void foo() {} + static void bar(Object o) {} + { + bar(System.in); + NonexistentInitializers.foo(); + } + static { + bar(System.in); + NonexistentInitializers.foo(); + } + + +} + +aspect A { + static int i = 0; + static int foo = 0; + static int get = 0; + + before(): call(void NonexistentInitializers.foo()) { + i++; + foo++; + } + before(): get(* System.in) { + i++; + get++; + } +} + diff --git a/tests/new/NonstaticInnerClassesInAspects.java b/tests/new/NonstaticInnerClassesInAspects.java new file mode 100644 index 000000000..70b7453a8 --- /dev/null +++ b/tests/new/NonstaticInnerClassesInAspects.java @@ -0,0 +1,85 @@ +import org.aspectj.testing.Tester; +public class NonstaticInnerClassesInAspects { + public static void main(String[] args) { + new NonstaticInnerClassesInAspects().realMain(args); + } + public void realMain(String[] args) { + new C().c(); + Tester.checkAllEvents(); + } + static { + Tester.expectEvent("A$Inner-before-c"); + Tester.expectEvent("A$Inner$InnerInner-before-c"); + Tester.expectEvent("A$Inner$InnerInner$InnerInnerInner-before-c"); + Tester.expectEvent("A$Inner-after-c"); + Tester.expectEvent("A$Inner$InnerInner-after-c"); + Tester.expectEvent("A$Inner$InnerInner$InnerInnerInner-after-c"); + Tester.expectEvent("A$Inner-around-c"); + Tester.expectEvent("A$Inner$InnerInner-around-c"); + Tester.expectEvent("A$Inner$InnerInner$InnerInnerInner-around-c"); + Tester.expectEvent("A$Inner-before-d"); + Tester.expectEvent("A$Inner$InnerInner-before-d"); + Tester.expectEvent("A$Inner$InnerInner$InnerInnerInner-before-d"); + Tester.expectEvent("A$Inner-after-d"); + Tester.expectEvent("A$Inner$InnerInner-after-d"); + Tester.expectEvent("A$Inner$InnerInner$InnerInnerInner-after-d"); + Tester.expectEvent("A$Inner-around-d"); + Tester.expectEvent("A$Inner$InnerInner-around-d"); + Tester.expectEvent("A$Inner$InnerInner$InnerInnerInner-around-d"); + Tester.expectEvent("A$Inner-before-x"); + Tester.expectEvent("A$Inner$InnerInner-before-x"); + Tester.expectEvent("A$Inner$InnerInner$InnerInnerInner-before-x"); + Tester.expectEvent("A$Inner-after-x"); + Tester.expectEvent("A$Inner$InnerInner-after-x"); + Tester.expectEvent("A$Inner$InnerInner$InnerInnerInner-after-x"); + Tester.expectEvent("A$Inner-around-x"); + Tester.expectEvent("A$Inner$InnerInner-around-x"); + Tester.expectEvent("A$Inner$InnerInner$InnerInnerInner-around-x"); + } +} + +class C { + public void c() { d(); } + public void d() { } +} + +aspect A { + + pointcut c(): target(C) && call(void c()); + pointcut d(): call(void C.d()); + pointcut x(): target(C) && execution(void c()); + + after() : c() { new Inner().i("after-c"); } + after() : d() { new Inner().i("after-d"); } + after() : x() { new Inner().i("after-x"); } + + before() : c() { new Inner().i("before-c"); } + before() : d() { new Inner().i("before-d"); } + before() : x() { new Inner().i("before-x"); } + + void around(): c() { new Inner().i("around-c"); proceed(); } + void around(): d() { new Inner().i("around-d"); proceed(); } + void around(): x() { new Inner().i("around-x"); proceed(); } + + class Inner { + void i(String s) { + a(s,this); + new InnerInner().i(s); + } + class InnerInner { + void i(String s) { + a(s,this); + new InnerInnerInner().i(s); + } + class InnerInnerInner { + void i(String s) { + a(s,this); + } + } + } + } + + public static void a(String s, Object o) { + Tester.event(o.getClass().getName() + "-" + s); + } +} diff --git a/tests/new/NotAndDeclaringTypes.java b/tests/new/NotAndDeclaringTypes.java new file mode 100644 index 000000000..a44825428 --- /dev/null +++ b/tests/new/NotAndDeclaringTypes.java @@ -0,0 +1,37 @@ +import org.aspectj.testing.Tester; + +public class NotAndDeclaringTypes { + + public static void main (String args []) { + Rectangle r = new Rectangle (); + Square s = new Square (); + + r.getSurface(); + Tester.checkAndClearEvents(new String[] { "advice" }); + + s.getSurface(); + + Tester.checkAndClearEvents(new String[] { }); + } +} + +class Rectangle { + public String toString () { return "Rectangle"; } + public int getSurface () { return 100; } +} + +class Square extends Rectangle { + public String toString () { return "Square"; } + public int getSurface () { return 200; } +} + +aspect Concern { + + pointcut pc () : call (int Rectangle.getSurface ()) + && !call (int Square.getSurface ()); + + before () : pc () { + Tester.event("advice"); + } +} + diff --git a/tests/new/NotAndPointcut.java b/tests/new/NotAndPointcut.java new file mode 100644 index 000000000..4dc0e48c9 --- /dev/null +++ b/tests/new/NotAndPointcut.java @@ -0,0 +1,22 @@ +import org.aspectj.testing.Tester; + +public class NotAndPointcut { + static String str = ""; + + public static void main(String args[]){ + new NotAndPointcut().showBug(); + Tester.checkEqual(str, "ran", "advice didn't run"); + } + + public void showBug(){ + } +} + +aspect BugInPCD { + pointcut p(): execution(* NotAndPointcut.showBug(..)) && + ! ( target(NotAndPointcut) && call(* NotAndPointcut.*(..))); + + before(): p(){ + NotAndPointcut.str += "ran"; + } +} diff --git a/tests/new/NotCharInPointcut.java b/tests/new/NotCharInPointcut.java new file mode 100644 index 000000000..c44b56fd8 --- /dev/null +++ b/tests/new/NotCharInPointcut.java @@ -0,0 +1,59 @@ +// PR#208 ! modifier in pointcut + +public class NotCharInPointcut { + public static void main(String[] args) throws Exception { + for (int i = 0; i < methods.length; i++) { + org.aspectj.testing.Tester.expectEvent(methods[i]); + C.class.getMethod(methods[i], new Class[]{}). + invoke(new C(), new Object[]{}); + } + } + + final static String[] methods = { + "_void", + "_boolean", + "_byte", + "_char", + "_short", + "_int", + "_long", + "_float", + "_double", + "_Object", + }; +} + +class C { + private void s(String s) { org.aspectj.testing.Tester.event(s); } + public void _void() { s("_void"); } + public boolean _boolean() { s("_boolean"); return (boolean)false;} + public byte _byte() { s("_byte"); return (byte)0;} + public char _char() { s("_char"); return (char)0;} + public short _short() { s("_short"); return (short)0;} + public int _int() { s("_int"); return (int)0;} + public long _long() { s("_long"); return (long)0;} + public float _float() { s("_float"); return (float)0;} + public double _double() { s("_double"); return (double)0;} + public Object _Object() { s("_Object"); return this; } +} + +aspect A { + + pointcut pcut1(NotCharInPointcut t): + this(t) && execution(!* _*()); + + pointcut pcut2(NotCharInPointcut t): + this(t) && !this(NotCharInPointcut) && execution(!* _*()); + + pointcut pcut3(NotCharInPointcut t): + pcut1(t) || pcut2(t); + + before(NotCharInPointcut t): pcut1(t) { s("1:"+thisJoinPoint); } + before(): pcut2(*) { s("2:"+thisJoinPoint); } + before(NotCharInPointcut t): pcut3(t) { s("3:"+thisJoinPoint); } + + private final static void s(Object s) { + org.aspectj.testing.Tester.check(false, "should be in "+s); + } + +} diff --git a/tests/new/NotThis.java b/tests/new/NotThis.java new file mode 100644 index 000000000..413bcbd94 --- /dev/null +++ b/tests/new/NotThis.java @@ -0,0 +1,61 @@ +import org.aspectj.testing.Tester; + +/** From PR #496 from Mark Skipper + */ + +public class NotThis { + + public static void main(String[] args){ + new NotThis().go(); + } + + void go(){ + A a = new A(this); + a.go(); + Tester.checkEqual(Q.buf.toString(), "foo:within(A):this(A):!within(B):!this(B):"); + Q.buf = new StringBuffer(); + B b = new B(this); + b.go(); + Tester.checkEqual(Q.buf.toString(), "foo:"); + } + + public void foo(Object o){ + Q.buf.append("foo:"); + } +} + +class A { + NotThis t; + + A(NotThis n){ t = n; } + + void go(){ t.foo(this); } +} + + +class B{ + + NotThis t; + + B(NotThis n){ t = n; } + + void go(){ t.foo(this); } + +} + + +aspect Q { + static StringBuffer buf = new StringBuffer(); + after(): call(void NotThis.foo(Object)) && within(A) { + buf.append("within(A):"); + } + after(): call(void NotThis.foo(Object)) && this(A) { + buf.append("this(A):"); + } + after(): call(void NotThis.foo(Object)) && !within(B) { + buf.append("!within(B):"); + } + after(): call(void NotThis.foo(Object)) && !this(B) { + buf.append("!this(B):"); + } +} diff --git a/tests/new/NulIOException.java b/tests/new/NulIOException.java new file mode 100644 index 000000000..e10595c20 --- /dev/null +++ b/tests/new/NulIOException.java @@ -0,0 +1,23 @@ + +import org.aspectj.testing.Tester; + +class Super { + Super(Object o){} +} + +/** windows treats filename "nul" specially, like /dev/null on unix */ +public class NulIOException extends Super { + + public static void main(String[] args) { + Object o = new NulIOException(nul); // parms: IOException + Tester.check(false, "expecting compiler error"); + Object p = nul; // reference: expect CE here, not IOException + } + + NulIOException() { super(nul); } + + // super parms: expect CE here, not IOException + NulIOException(Object o) { super(o); } + // don't attempt to read nul on windows +} + diff --git a/tests/new/NulIOException2.java b/tests/new/NulIOException2.java new file mode 100644 index 000000000..af42b4eed --- /dev/null +++ b/tests/new/NulIOException2.java @@ -0,0 +1,16 @@ + +import org.aspectj.testing.Tester; + +class Super { + Super(Object o){} +} +/** windows treats filename "nul" specially, like /dev/null on unix */ +public class NulIOException2 extends Super { + public static void main(String[] args) { + Object nul = new Object(); // @testcase nul as identifier + Object p = new NulIOException2(nul); + Tester.check(null != nul, "null nul"); + Tester.check(null != p, "null NulIOException2"); + } + NulIOException2(Object o) { super(o); } +} diff --git a/tests/new/NulIOException3.java b/tests/new/NulIOException3.java new file mode 100644 index 000000000..19fd18c1d --- /dev/null +++ b/tests/new/NulIOException3.java @@ -0,0 +1,23 @@ + +import org.aspectj.testing.Tester; + +/** windows treats filename "nul" specially, like /dev/null on unix */ +public class NulIOException3 { + public static void main(String[] args) { + } +} +class TodoClassFormatError { // no ref to this in NulIOException3 - VM fails to load nul + public static void main(String[] args) { + Class c = nul.class; // @testcase nul as class literal + Object q = new nul(); // @testcase nul as constructor/class name + Class C = subnul.class; + Object r = new subnul(); + Tester.check(null != c, "null nul class"); + Tester.check(null != q, "null nul object"); + Tester.check(null != C, "null subnul class"); + Tester.check(null != r, "null subnul object"); + } +} +class nul { } // @testcase nul as class name + +class subnul extends nul { } // @testcase nul as reference to class name diff --git a/tests/new/NullPointerOnGets.java b/tests/new/NullPointerOnGets.java new file mode 100644 index 000000000..e4856db73 --- /dev/null +++ b/tests/new/NullPointerOnGets.java @@ -0,0 +1,512 @@ +import org.aspectj.testing.*; + +public class NullPointerOnGets { + public static void main(String[] args) { + Strings.add(); + C.go(); + Ints.add(); + Tester.checkAllEventsIgnoreDups(); + } + + static { + Tester.expectEvent("static"); + } +} + +class C { + public String str0 = "str0"; + String str1 = "str1"; + protected String str2 = "str2"; + private String str3 = "str3"; + + public static String sstr0 = "sstr0"; + static String sstr1 = "sstr1"; + protected static String sstr2 = "sstr2"; + private static String sstr3 = "sstr3"; + + public int int0 = 1; + int int1 = 2; + protected int int2 = 3; + private int int3 = 4; + + public static int sint0 = -1; + static int sint1 = -2; + protected static int sint2 = -3; + private static int sint3 = -4; + + static void go() { + Tester.event("static"); + C c = new C(); + eq(c.str0, "str0"); c.str0 = "str00"; eq(c.str0, "str00"); + eq(c.str1, "str1"); c.str1 = "str11"; eq(c.str1, "str11"); + eq(c.str2, "str2"); c.str2 = "str22"; eq(c.str2, "str22"); + eq(c.str3, "str3"); c.str3 = "str33"; eq(c.str3, "str33"); + + eq(C.sstr0, "sstr0"); C.sstr0 = "sstr00"; eq(C.sstr0, "sstr00"); + eq(C.sstr1, "sstr1"); C.sstr1 = "sstr11"; eq(C.sstr1, "sstr11"); + eq(C.sstr2, "sstr2"); C.sstr2 = "sstr22"; eq(C.sstr2, "sstr22"); + eq(C.sstr3, "sstr3"); C.sstr3 = "sstr33"; eq(C.sstr3, "sstr33"); + + eq(c.int0, 1); c.int0 = 100; eq(c.int0, 100); + eq(c.int1, 2); c.int1 = 111; eq(c.int1, 111); + eq(c.int2, 3); c.int2 = 122; eq(c.int2, 122); + eq(c.int3, 4); c.int3 = 133; eq(c.int3, 133); + + eq(C.sint0, -1); C.sint0 = 200; eq(C.sint0, 200); + eq(C.sint1, -2); C.sint1 = 211; eq(C.sint1, 211); + eq(C.sint2, -3); C.sint2 = 222; eq(C.sint2, 222); + eq(C.sint3, -4); C.sint3 = 233; eq(C.sint3, 233); + } + + private static void eq(int i0, int i1) {Tester.checkEqual(i0,i1);} + private static void eq(String s0, String s1) {Tester.checkEqual(s0,s1);} +} + +aspect StringAspect { + + static void a(String s) { Tester.event(s); } + + //pointcuts + pointcut gets_String_str0(): get(String C.str0);//[s]; + pointcut gets_String_str1(): get(String C.str1); //[s]; + pointcut gets_String_str2(): get(String C.str2); //[s]; + pointcut gets_String_str3(): get(String C.str3); //[s]; + pointcut gets_String_str0b(): get(String C.str0); //[]; + pointcut gets_String_str1b(): get(String C.str1); //[]; + pointcut gets_String_str2b(): get(String C.str2); //[]; + pointcut gets_String_str3b(): get(String C.str3); //[]; + pointcut sets_String_str0(): set(String C.str0); //[s][]; + pointcut sets_String_str1(): set(String C.str1); //[s][]; + pointcut sets_String_str2(): set(String C.str2); //[s][]; + pointcut sets_String_str3(): set(String C.str3); //[s][]; + pointcut sets_String_str0b(): set(String C.str0); //[][s]; + pointcut sets_String_str1b(): set(String C.str1); //[][s]; + pointcut sets_String_str2b(): set(String C.str2); //[][s]; + pointcut sets_String_str3b(): set(String C.str3); //[][s]; + pointcut sets_String_str0c(): set(String C.str0); //[o][s]; + pointcut sets_String_str1c(): set(String C.str1); //[o][s]; + pointcut sets_String_str2c(): set(String C.str2); //[o][s]; + pointcut sets_String_str3c(): set(String C.str3); //[o][s]; + pointcut gets_String_sstr0(): get(String C.str0); //[s]; + pointcut gets_String_sstr1(): get(String C.str1); //[s]; + pointcut gets_String_sstr2(): get(String C.str2); //[s]; + pointcut gets_String_sstr3(): get(String C.str3); //[s]; + pointcut gets_String_sstr0b(): get(String C.str0); //[]; + pointcut gets_String_sstr1b(): get(String C.str1); //[]; + pointcut gets_String_sstr2b(): get(String C.str2); //[]; + pointcut gets_String_sstr3b(): get(String C.str3); //[]; + pointcut sets_String_sstr0(): set(String C.str0); //[s][]; + pointcut sets_String_sstr1(): set(String C.str1); //[s][]; + pointcut sets_String_sstr2(): set(String C.str2); //[s][]; + pointcut sets_String_sstr3(): set(String C.str3); //[s][]; + pointcut sets_String_sstr0b(): set(String C.str0); //[][s]; + pointcut sets_String_sstr1b(): set(String C.str1); //[][s]; + pointcut sets_String_sstr2b(): set(String C.str2); //[][s]; + pointcut sets_String_sstr3b(): set(String C.str3); //[][s]; + pointcut sets_String_sstr0c(): set(String C.str0); //[o][s]; + pointcut sets_String_sstr1c(): set(String C.str1); //[o][s]; + pointcut sets_String_sstr2c(): set(String C.str2); //[o][s]; + pointcut sets_String_sstr3c(): set(String C.str3); //[o][s]; + + //befores + before(): gets_String_str0() { a("b gets_String_str0"); } + before(): gets_String_str1() { a("b gets_String_str1"); } + before(): gets_String_str2() { a("b gets_String_str2"); } + before(): gets_String_str3() { a("b gets_String_str3"); } + before(): gets_String_str0b() { a("b gets_String_str0b"); } + before(): gets_String_str1b() { a("b gets_String_str1b"); } + before(): gets_String_str2b() { a("b gets_String_str2b"); } + before(): gets_String_str3b() { a("b gets_String_str3b"); } + before(): sets_String_str0() { a("b sets_String_str0"); } + before(): sets_String_str1() { a("b sets_String_str1"); } + before(): sets_String_str2() { a("b sets_String_str2"); } + before(): sets_String_str3() { a("b sets_String_str3"); } + before(): sets_String_str0b() { a("b sets_String_str0b"); } + before(): sets_String_str1b() { a("b sets_String_str1b"); } + before(): sets_String_str2b() { a("b sets_String_str2b"); } + before(): sets_String_str3b() { a("b sets_String_str3b"); } + before(): sets_String_str0c() { a("b sets_String_str0c"); } + before(): sets_String_str1c() { a("b sets_String_str1c"); } + before(): sets_String_str2c() { a("b sets_String_str2c"); } + before(): sets_String_str3c() { a("b sets_String_str3c"); } + before(): gets_String_sstr0() { a("b gets_String_sstr0"); } + before(): gets_String_sstr1() { a("b gets_String_sstr1"); } + before(): gets_String_sstr2() { a("b gets_String_sstr2"); } + before(): gets_String_sstr3() { a("b gets_String_sstr3"); } + before(): gets_String_sstr0b() { a("b gets_String_sstr0b"); } + before(): gets_String_sstr1b() { a("b gets_String_sstr1b"); } + before(): gets_String_sstr2b() { a("b gets_String_sstr2b"); } + before(): gets_String_sstr3b() { a("b gets_String_sstr3b"); } + before(): sets_String_sstr0() { a("b sets_String_sstr0"); } + before(): sets_String_sstr1() { a("b sets_String_sstr1"); } + before(): sets_String_sstr2() { a("b sets_String_sstr2"); } + before(): sets_String_sstr3() { a("b sets_String_sstr3"); } + before(): sets_String_sstr0b() { a("b sets_String_sstr0b"); } + before(): sets_String_sstr1b() { a("b sets_String_sstr1b"); } + before(): sets_String_sstr2b() { a("b sets_String_sstr2b"); } + before(): sets_String_sstr3b() { a("b sets_String_sstr3b"); } + before(): sets_String_sstr0c() { a("b sets_String_sstr0c"); } + before(): sets_String_sstr1c() { a("b sets_String_sstr1c"); } + before(): sets_String_sstr2c() { a("b sets_String_sstr2c"); } + before(): sets_String_sstr3c() { a("b sets_String_sstr3c"); } + + //end-befores + + //arounds + String around(): gets_String_str0() { a("a gets_String_str0"); return proceed(); } + String around(): gets_String_str1() { a("a gets_String_str1"); return proceed(); } + String around(): gets_String_str2() { a("a gets_String_str2"); return proceed(); } + String around(): gets_String_str3() { a("a gets_String_str3"); return proceed(); } + String around(): gets_String_str0b() { a("a gets_String_str0b"); return proceed(); } + String around(): gets_String_str1b() { a("a gets_String_str1b"); return proceed(); } + String around(): gets_String_str2b() { a("a gets_String_str2b"); return proceed(); } + String around(): gets_String_str3b() { a("a gets_String_str3b"); return proceed(); } + String around(): sets_String_str0() { a("a sets_String_str0"); return proceed(); } + String around(): sets_String_str1() { a("a sets_String_str1"); return proceed(); } + String around(): sets_String_str2() { a("a sets_String_str2"); return proceed(); } + String around(): sets_String_str3() { a("a sets_String_str3"); return proceed(); } + String around(): sets_String_str0b() { a("a sets_String_str0b"); return proceed(); } + String around(): sets_String_str1b() { a("a sets_String_str1b"); return proceed(); } + String around(): sets_String_str2b() { a("a sets_String_str2b"); return proceed(); } + String around(): sets_String_str3b() { a("a sets_String_str3b"); return proceed(); } + String around(): sets_String_str0c() { a("a sets_String_str0c"); return proceed(); } + String around(): sets_String_str1c() { a("a sets_String_str1c"); return proceed(); } + String around(): sets_String_str2c() { a("a sets_String_str2c"); return proceed(); } + String around(): sets_String_str3c() { a("a sets_String_str3c"); return proceed(); } + String around(): gets_String_sstr0() { a("a gets_String_sstr0"); return proceed(); } + String around(): gets_String_sstr1() { a("a gets_String_sstr1"); return proceed(); } + String around(): gets_String_sstr2() { a("a gets_String_sstr2"); return proceed(); } + String around(): gets_String_sstr3() { a("a gets_String_sstr3"); return proceed(); } + String around(): gets_String_sstr0b() { a("a gets_String_sstr0b"); return proceed(); } + String around(): gets_String_sstr1b() { a("a gets_String_sstr1b"); return proceed(); } + String around(): gets_String_sstr2b() { a("a gets_String_sstr2b"); return proceed(); } + String around(): gets_String_sstr3b() { a("a gets_String_sstr3b"); return proceed(); } + String around(): sets_String_sstr0() { a("a sets_String_sstr0"); return proceed(); } + String around(): sets_String_sstr1() { a("a sets_String_sstr1"); return proceed(); } + String around(): sets_String_sstr2() { a("a sets_String_sstr2"); return proceed(); } + String around(): sets_String_sstr3() { a("a sets_String_sstr3"); return proceed(); } + String around(): sets_String_sstr0b() { a("a sets_String_sstr0b"); return proceed(); } + String around(): sets_String_sstr1b() { a("a sets_String_sstr1b"); return proceed(); } + String around(): sets_String_sstr2b() { a("a sets_String_sstr2b"); return proceed(); } + String around(): sets_String_sstr3b() { a("a sets_String_sstr3b"); return proceed(); } + String around(): sets_String_sstr0c() { a("a sets_String_sstr0c"); return proceed(); } + String around(): sets_String_sstr1c() { a("a sets_String_sstr1c"); return proceed(); } + String around(): sets_String_sstr2c() { a("a sets_String_sstr2c"); return proceed(); } + String around(): sets_String_sstr3c() { a("a sets_String_sstr3c"); return proceed(); } + //end-arounds + + //afters + after(): gets_String_str0() { a("f gets_String_str0"); } + after(): gets_String_str1() { a("f gets_String_str1"); } + after(): gets_String_str2() { a("f gets_String_str2"); } + after(): gets_String_str3() { a("f gets_String_str3"); } + after(): gets_String_str0b() { a("f gets_String_str0b"); } + after(): gets_String_str1b() { a("f gets_String_str1b"); } + after(): gets_String_str2b() { a("f gets_String_str2b"); } + after(): gets_String_str3b() { a("f gets_String_str3b"); } + after(): sets_String_str0() { a("f sets_String_str0"); } + after(): sets_String_str1() { a("f sets_String_str1"); } + after(): sets_String_str2() { a("f sets_String_str2"); } + after(): sets_String_str3() { a("f sets_String_str3"); } + after(): sets_String_str0b() { a("f sets_String_str0b"); } + after(): sets_String_str1b() { a("f sets_String_str1b"); } + after(): sets_String_str2b() { a("f sets_String_str2b"); } + after(): sets_String_str3b() { a("f sets_String_str3b"); } + after(): sets_String_str0c() { a("f sets_String_str0c"); } + after(): sets_String_str1c() { a("f sets_String_str1c"); } + after(): sets_String_str2c() { a("f sets_String_str2c"); } + after(): sets_String_str3c() { a("f sets_String_str3c"); } + after(): gets_String_sstr0() { a("f gets_String_sstr0"); } + after(): gets_String_sstr1() { a("f gets_String_sstr1"); } + after(): gets_String_sstr2() { a("f gets_String_sstr2"); } + after(): gets_String_sstr3() { a("f gets_String_sstr3"); } + after(): gets_String_sstr0b() { a("f gets_String_sstr0b"); } + after(): gets_String_sstr1b() { a("f gets_String_sstr1b"); } + after(): gets_String_sstr2b() { a("f gets_String_sstr2b"); } + after(): gets_String_sstr3b() { a("f gets_String_sstr3b"); } + after(): sets_String_sstr0() { a("f sets_String_sstr0"); } + after(): sets_String_sstr1() { a("f sets_String_sstr1"); } + after(): sets_String_sstr2() { a("f sets_String_sstr2"); } + after(): sets_String_sstr3() { a("f sets_String_sstr3"); } + after(): sets_String_sstr0b() { a("f sets_String_sstr0b"); } + after(): sets_String_sstr1b() { a("f sets_String_sstr1b"); } + after(): sets_String_sstr2b() { a("f sets_String_sstr2b"); } + after(): sets_String_sstr3b() { a("f sets_String_sstr3b"); } + after(): sets_String_sstr0c() { a("f sets_String_sstr0c"); } + after(): sets_String_sstr1c() { a("f sets_String_sstr1c"); } + after(): sets_String_sstr2c() { a("f sets_String_sstr2c"); } + after(): sets_String_sstr3c() { a("f sets_String_sstr3c"); } + //end-afters +} + +class Strings { + + static void m(String s) { Tester.expectEvent(s); } + static void add() { + m("b gets_String_str0"); m("f gets_String_str0"); m("a gets_String_str0"); + m("b gets_String_str1"); m("f gets_String_str1"); m("a gets_String_str1"); + m("b gets_String_str2"); m("f gets_String_str2"); m("a gets_String_str2"); + m("b gets_String_str3"); m("f gets_String_str3"); m("a gets_String_str3"); + m("b gets_String_str0b"); m("f gets_String_str0b"); m("a gets_String_str0b"); + m("b gets_String_str1b"); m("f gets_String_str1b"); m("a gets_String_str1b"); + m("b gets_String_str2b"); m("f gets_String_str2b"); m("a gets_String_str2b"); + m("b gets_String_str3b"); m("f gets_String_str3b"); m("a gets_String_str3b"); + m("b sets_String_str0"); m("f sets_String_str0"); m("a sets_String_str0"); + m("b sets_String_str1"); m("f sets_String_str1"); m("a sets_String_str1"); + m("b sets_String_str2"); m("f sets_String_str2"); m("a sets_String_str2"); + m("b sets_String_str3"); m("f sets_String_str3"); m("a sets_String_str3"); + m("b sets_String_str0b"); m("f sets_String_str0b"); m("a sets_String_str0b"); + m("b sets_String_str1b"); m("f sets_String_str1b"); m("a sets_String_str1b"); + m("b sets_String_str2b"); m("f sets_String_str2b"); m("a sets_String_str2b"); + m("b sets_String_str3b"); m("f sets_String_str3b"); m("a sets_String_str3b"); + m("b sets_String_str0c"); m("f sets_String_str0c"); m("a sets_String_str0c"); + m("b sets_String_str1c"); m("f sets_String_str1c"); m("a sets_String_str1c"); + m("b sets_String_str2c"); m("f sets_String_str2c"); m("a sets_String_str2c"); + m("b sets_String_str3c"); m("f sets_String_str3c"); m("a sets_String_str3c"); + m("b gets_String_sstr0"); m("f gets_String_sstr0"); m("a gets_String_sstr0"); + m("b gets_String_sstr1"); m("f gets_String_sstr1"); m("a gets_String_sstr1"); + m("b gets_String_sstr2"); m("f gets_String_sstr2"); m("a gets_String_sstr2"); + m("b gets_String_sstr3"); m("f gets_String_sstr3"); m("a gets_String_sstr3"); + m("b gets_String_sstr0b"); m("f gets_String_sstr0b"); m("a gets_String_sstr0b"); + m("b gets_String_sstr1b"); m("f gets_String_sstr1b"); m("a gets_String_sstr1b"); + m("b gets_String_sstr2b"); m("f gets_String_sstr2b"); m("a gets_String_sstr2b"); + m("b gets_String_sstr3b"); m("f gets_String_sstr3b"); m("a gets_String_sstr3b"); + m("b sets_String_sstr0"); m("f sets_String_sstr0"); m("a sets_String_sstr0"); + m("b sets_String_sstr1"); m("f sets_String_sstr1"); m("a sets_String_sstr1"); + m("b sets_String_sstr2"); m("f sets_String_sstr2"); m("a sets_String_sstr2"); + m("b sets_String_sstr3"); m("f sets_String_sstr3"); m("a sets_String_sstr3"); + m("b sets_String_sstr0b"); m("f sets_String_sstr0b"); m("a sets_String_sstr0b"); + m("b sets_String_sstr1b"); m("f sets_String_sstr1b"); m("a sets_String_sstr1b"); + m("b sets_String_sstr2b"); m("f sets_String_sstr2b"); m("a sets_String_sstr2b"); + m("b sets_String_sstr3b"); m("f sets_String_sstr3b"); m("a sets_String_sstr3b"); + m("b sets_String_sstr0c"); m("f sets_String_sstr0c"); m("a sets_String_sstr0c"); + m("b sets_String_sstr1c"); m("f sets_String_sstr1c"); m("a sets_String_sstr1c"); + m("b sets_String_sstr2c"); m("f sets_String_sstr2c"); m("a sets_String_sstr2c"); + m("b sets_String_sstr3c"); m("f sets_String_sstr3c"); m("a sets_String_sstr3c"); + } +} + + +aspect IntAspect { + + static void a(String s) { Tester.event(s); } + + // start-non-static + pointcut gets_int_int0(): get(int C.int0); //[s]; + pointcut gets_int_int1(): get(int C.int1); //[s]; + pointcut gets_int_int2(): get(int C.int2); //[s]; + pointcut gets_int_int3(): get(int C.int3); //[s]; + pointcut gets_int_int0b(): get(int C.int0); //[]; + pointcut gets_int_int1b(): get(int C.int1); //[]; + pointcut gets_int_int2b(): get(int C.int2); //[]; + pointcut gets_int_int3b(): get(int C.int3); //[]; + pointcut sets_int_int0(): set(int C.int0); //[s][]; + pointcut sets_int_int1(): set(int C.int1); //[s][]; + pointcut sets_int_int2(): set(int C.int2); //[s][]; + pointcut sets_int_int3(): set(int C.int3); //[s][]; + pointcut sets_int_int0b(): set(int C.int0); //[][s]; + pointcut sets_int_int1b(): set(int C.int1); //[][s]; + pointcut sets_int_int2b(): set(int C.int2); //[][s]; + pointcut sets_int_int3b(): set(int C.int3); //[][s]; + pointcut sets_int_int0c(): set(int C.int0); //[o][s]; + pointcut sets_int_int1c(): set(int C.int1); //[o][s]; + pointcut sets_int_int2c(): set(int C.int2); //[o][s]; + pointcut sets_int_int3c(): set(int C.int3); //[o][s]; + pointcut gets_int_sint0(): get(int C.int0); //[s]; + pointcut gets_int_sint1(): get(int C.int1); //[s]; + pointcut gets_int_sint2(): get(int C.int2); //[s]; + pointcut gets_int_sint3(): get(int C.int3); //[s]; + pointcut gets_int_sint0b(): get(int C.int0); //[]; + pointcut gets_int_sint1b(): get(int C.int1); //[]; + pointcut gets_int_sint2b(): get(int C.int2); //[]; + pointcut gets_int_sint3b(): get(int C.int3); //[]; + pointcut sets_int_sint0(): set(int C.int0); //[s][]; + pointcut sets_int_sint1(): set(int C.int1); //[s][]; + pointcut sets_int_sint2(): set(int C.int2); //[s][]; + pointcut sets_int_sint3(): set(int C.int3); //[s][]; + pointcut sets_int_sint0b(): set(int C.int0); //[][s]; + pointcut sets_int_sint1b(): set(int C.int1); //[][s]; + pointcut sets_int_sint2b(): set(int C.int2); //[][s]; + pointcut sets_int_sint3b(): set(int C.int3); //[][s]; + pointcut sets_int_sint0c(): set(int C.int0); //[o][s]; + pointcut sets_int_sint1c(): set(int C.int1); //[o][s]; + pointcut sets_int_sint2c(): set(int C.int2); //[o][s]; + pointcut sets_int_sint3c(): set(int C.int3); //[o][s]; + //end-pointcuts + + before(): gets_int_int0() { a("b gets_int_int0"); } + before(): gets_int_int1() { a("b gets_int_int1"); } + before(): gets_int_int2() { a("b gets_int_int2"); } + before(): gets_int_int3() { a("b gets_int_int3"); } + before(): gets_int_int0b() { a("b gets_int_int0b"); } + before(): gets_int_int1b() { a("b gets_int_int1b"); } + before(): gets_int_int2b() { a("b gets_int_int2b"); } + before(): gets_int_int3b() { a("b gets_int_int3b"); } + before(): sets_int_int0() { a("b sets_int_int0"); } + before(): sets_int_int1() { a("b sets_int_int1"); } + before(): sets_int_int2() { a("b sets_int_int2"); } + before(): sets_int_int3() { a("b sets_int_int3"); } + before(): sets_int_int0b() { a("b sets_int_int0b"); } + before(): sets_int_int1b() { a("b sets_int_int1b"); } + before(): sets_int_int2b() { a("b sets_int_int2b"); } + before(): sets_int_int3b() { a("b sets_int_int3b"); } + before(): sets_int_int0c() { a("b sets_int_int0c"); } + before(): sets_int_int1c() { a("b sets_int_int1c"); } + before(): sets_int_int2c() { a("b sets_int_int2c"); } + before(): sets_int_int3c() { a("b sets_int_int3c"); } + before(): gets_int_sint0() { a("b gets_int_sint0"); } + before(): gets_int_sint1() { a("b gets_int_sint1"); } + before(): gets_int_sint2() { a("b gets_int_sint2"); } + before(): gets_int_sint3() { a("b gets_int_sint3"); } + before(): gets_int_sint0b() { a("b gets_int_sint0b"); } + before(): gets_int_sint1b() { a("b gets_int_sint1b"); } + before(): gets_int_sint2b() { a("b gets_int_sint2b"); } + before(): gets_int_sint3b() { a("b gets_int_sint3b"); } + before(): sets_int_sint0() { a("b sets_int_sint0"); } + before(): sets_int_sint1() { a("b sets_int_sint1"); } + before(): sets_int_sint2() { a("b sets_int_sint2"); } + before(): sets_int_sint3() { a("b sets_int_sint3"); } + before(): sets_int_sint0b() { a("b sets_int_sint0b"); } + before(): sets_int_sint1b() { a("b sets_int_sint1b"); } + before(): sets_int_sint2b() { a("b sets_int_sint2b"); } + before(): sets_int_sint3b() { a("b sets_int_sint3b"); } + before(): sets_int_sint0c() { a("b sets_int_sint0c"); } + before(): sets_int_sint1c() { a("b sets_int_sint1c"); } + before(): sets_int_sint2c() { a("b sets_int_sint2c"); } + before(): sets_int_sint3c() { a("b sets_int_sint3c"); } + //end-befores + + int around(): gets_int_int0() { a("a gets_int_int0"); return proceed(); } + int around(): gets_int_int1() { a("a gets_int_int1"); return proceed(); } + int around(): gets_int_int2() { a("a gets_int_int2"); return proceed(); } + int around(): gets_int_int3() { a("a gets_int_int3"); return proceed(); } + int around(): gets_int_int0b() { a("a gets_int_int0b"); return proceed(); } + int around(): gets_int_int1b() { a("a gets_int_int1b"); return proceed(); } + int around(): gets_int_int2b() { a("a gets_int_int2b"); return proceed(); } + int around(): gets_int_int3b() { a("a gets_int_int3b"); return proceed(); } + int around(): sets_int_int0() { a("a sets_int_int0"); return proceed(); } + int around(): sets_int_int1() { a("a sets_int_int1"); return proceed(); } + int around(): sets_int_int2() { a("a sets_int_int2"); return proceed(); } + int around(): sets_int_int3() { a("a sets_int_int3"); return proceed(); } + int around(): sets_int_int0b() { a("a sets_int_int0b"); return proceed(); } + int around(): sets_int_int1b() { a("a sets_int_int1b"); return proceed(); } + int around(): sets_int_int2b() { a("a sets_int_int2b"); return proceed(); } + int around(): sets_int_int3b() { a("a sets_int_int3b"); return proceed(); } + int around(): sets_int_int0c() { a("a sets_int_int0c"); return proceed(); } + int around(): sets_int_int1c() { a("a sets_int_int1c"); return proceed(); } + int around(): sets_int_int2c() { a("a sets_int_int2c"); return proceed(); } + int around(): sets_int_int3c() { a("a sets_int_int3c"); return proceed(); } + int around(): gets_int_sint0() { a("a gets_int_sint0"); return proceed(); } + int around(): gets_int_sint1() { a("a gets_int_sint1"); return proceed(); } + int around(): gets_int_sint2() { a("a gets_int_sint2"); return proceed(); } + int around(): gets_int_sint3() { a("a gets_int_sint3"); return proceed(); } + int around(): gets_int_sint0b() { a("a gets_int_sint0b"); return proceed(); } + int around(): gets_int_sint1b() { a("a gets_int_sint1b"); return proceed(); } + int around(): gets_int_sint2b() { a("a gets_int_sint2b"); return proceed(); } + int around(): gets_int_sint3b() { a("a gets_int_sint3b"); return proceed(); } + int around(): sets_int_sint0() { a("a sets_int_sint0"); return proceed(); } + int around(): sets_int_sint1() { a("a sets_int_sint1"); return proceed(); } + int around(): sets_int_sint2() { a("a sets_int_sint2"); return proceed(); } + int around(): sets_int_sint3() { a("a sets_int_sint3"); return proceed(); } + int around(): sets_int_sint0b() { a("a sets_int_sint0b"); return proceed(); } + int around(): sets_int_sint1b() { a("a sets_int_sint1b"); return proceed(); } + int around(): sets_int_sint2b() { a("a sets_int_sint2b"); return proceed(); } + int around(): sets_int_sint3b() { a("a sets_int_sint3b"); return proceed(); } + int around(): sets_int_sint0c() { a("a sets_int_sint0c"); return proceed(); } + int around(): sets_int_sint1c() { a("a sets_int_sint1c"); return proceed(); } + int around(): sets_int_sint2c() { a("a sets_int_sint2c"); return proceed(); } + int around(): sets_int_sint3c() { a("a sets_int_sint3c"); return proceed(); } + //end-arounds + + after(): gets_int_int0() { a("f gets_int_int0"); } + after(): gets_int_int1() { a("f gets_int_int1"); } + after(): gets_int_int2() { a("f gets_int_int2"); } + after(): gets_int_int3() { a("f gets_int_int3"); } + after(): gets_int_int0b() { a("f gets_int_int0b"); } + after(): gets_int_int1b() { a("f gets_int_int1b"); } + after(): gets_int_int2b() { a("f gets_int_int2b"); } + after(): gets_int_int3b() { a("f gets_int_int3b"); } + after(): sets_int_int0() { a("f sets_int_int0"); } + after(): sets_int_int1() { a("f sets_int_int1"); } + after(): sets_int_int2() { a("f sets_int_int2"); } + after(): sets_int_int3() { a("f sets_int_int3"); } + after(): sets_int_int0b() { a("f sets_int_int0b"); } + after(): sets_int_int1b() { a("f sets_int_int1b"); } + after(): sets_int_int2b() { a("f sets_int_int2b"); } + after(): sets_int_int3b() { a("f sets_int_int3b"); } + after(): sets_int_int0c() { a("f sets_int_int0c"); } + after(): sets_int_int1c() { a("f sets_int_int1c"); } + after(): sets_int_int2c() { a("f sets_int_int2c"); } + after(): sets_int_int3c() { a("f sets_int_int3c"); } + after(): gets_int_sint0() { a("f gets_int_sint0"); } + after(): gets_int_sint1() { a("f gets_int_sint1"); } + after(): gets_int_sint2() { a("f gets_int_sint2"); } + after(): gets_int_sint3() { a("f gets_int_sint3"); } + after(): gets_int_sint0b() { a("f gets_int_sint0b"); } + after(): gets_int_sint1b() { a("f gets_int_sint1b"); } + after(): gets_int_sint2b() { a("f gets_int_sint2b"); } + after(): gets_int_sint3b() { a("f gets_int_sint3b"); } + after(): sets_int_sint0() { a("f sets_int_sint0"); } + after(): sets_int_sint1() { a("f sets_int_sint1"); } + after(): sets_int_sint2() { a("f sets_int_sint2"); } + after(): sets_int_sint3() { a("f sets_int_sint3"); } + after(): sets_int_sint0b() { a("f sets_int_sint0b"); } + after(): sets_int_sint1b() { a("f sets_int_sint1b"); } + after(): sets_int_sint2b() { a("f sets_int_sint2b"); } + after(): sets_int_sint3b() { a("f sets_int_sint3b"); } + after(): sets_int_sint0c() { a("f sets_int_sint0c"); } + after(): sets_int_sint1c() { a("f sets_int_sint1c"); } + after(): sets_int_sint2c() { a("f sets_int_sint2c"); } + after(): sets_int_sint3c() { a("f sets_int_sint3c"); } + //end-afters +} + +class Ints { + + static void m(String s) { Tester.expectEvent(s); } + static void add() { + m("b gets_int_int0"); m("f gets_int_int0"); m("a gets_int_int0"); + m("b gets_int_int1"); m("f gets_int_int1"); m("a gets_int_int1"); + m("b gets_int_int2"); m("f gets_int_int2"); m("a gets_int_int2"); + m("b gets_int_int3"); m("f gets_int_int3"); m("a gets_int_int3"); + m("b gets_int_int0b"); m("f gets_int_int0b"); m("a gets_int_int0b"); + m("b gets_int_int1b"); m("f gets_int_int1b"); m("a gets_int_int1b"); + m("b gets_int_int2b"); m("f gets_int_int2b"); m("a gets_int_int2b"); + m("b gets_int_int3b"); m("f gets_int_int3b"); m("a gets_int_int3b"); + m("b sets_int_int0"); m("f sets_int_int0"); m("a sets_int_int0"); + m("b sets_int_int1"); m("f sets_int_int1"); m("a sets_int_int1"); + m("b sets_int_int2"); m("f sets_int_int2"); m("a sets_int_int2"); + m("b sets_int_int3"); m("f sets_int_int3"); m("a sets_int_int3"); + m("b sets_int_int0b"); m("f sets_int_int0b"); m("a sets_int_int0b"); + m("b sets_int_int1b"); m("f sets_int_int1b"); m("a sets_int_int1b"); + m("b sets_int_int2b"); m("f sets_int_int2b"); m("a sets_int_int2b"); + m("b sets_int_int3b"); m("f sets_int_int3b"); m("a sets_int_int3b"); + m("b sets_int_int0c"); m("f sets_int_int0c"); m("a sets_int_int0c"); + m("b sets_int_int1c"); m("f sets_int_int1c"); m("a sets_int_int1c"); + m("b sets_int_int2c"); m("f sets_int_int2c"); m("a sets_int_int2c"); + m("b sets_int_int3c"); m("f sets_int_int3c"); m("a sets_int_int3c"); + m("b gets_int_sint0"); m("f gets_int_sint0"); m("a gets_int_sint0"); + m("b gets_int_sint1"); m("f gets_int_sint1"); m("a gets_int_sint1"); + m("b gets_int_sint2"); m("f gets_int_sint2"); m("a gets_int_sint2"); + m("b gets_int_sint3"); m("f gets_int_sint3"); m("a gets_int_sint3"); + m("b gets_int_sint0b"); m("f gets_int_sint0b"); m("a gets_int_sint0b"); + m("b gets_int_sint1b"); m("f gets_int_sint1b"); m("a gets_int_sint1b"); + m("b gets_int_sint2b"); m("f gets_int_sint2b"); m("a gets_int_sint2b"); + m("b gets_int_sint3b"); m("f gets_int_sint3b"); m("a gets_int_sint3b"); + m("b sets_int_sint0"); m("f sets_int_sint0"); m("a sets_int_sint0"); + m("b sets_int_sint1"); m("f sets_int_sint1"); m("a sets_int_sint1"); + m("b sets_int_sint2"); m("f sets_int_sint2"); m("a sets_int_sint2"); + m("b sets_int_sint3"); m("f sets_int_sint3"); m("a sets_int_sint3"); + m("b sets_int_sint0b"); m("f sets_int_sint0b"); m("a sets_int_sint0b"); + m("b sets_int_sint1b"); m("f sets_int_sint1b"); m("a sets_int_sint1b"); + m("b sets_int_sint2b"); m("f sets_int_sint2b"); m("a sets_int_sint2b"); + m("b sets_int_sint3b"); m("f sets_int_sint3b"); m("a sets_int_sint3b"); + m("b sets_int_sint0c"); m("f sets_int_sint0c"); m("a sets_int_sint0c"); + m("b sets_int_sint1c"); m("f sets_int_sint1c"); m("a sets_int_sint1c"); + m("b sets_int_sint2c"); m("f sets_int_sint2c"); m("a sets_int_sint2c"); + m("b sets_int_sint3c"); m("f sets_int_sint3c"); m("a sets_int_sint3c"); + } +} + + + diff --git a/tests/new/NullPointerOnGetsSimple.java b/tests/new/NullPointerOnGetsSimple.java new file mode 100644 index 000000000..18fbb04ba --- /dev/null +++ b/tests/new/NullPointerOnGetsSimple.java @@ -0,0 +1,21 @@ +public class NullPointerOnGetsSimple { + public static void main(String[] args) { + PrintService ps = new PrintService(); + ps.string = "after"; + org.aspectj.testing.Tester.checkEqual("after", ps.string); + } +} + +class PrintService { + String string = "before"; +} + +aspect Aspect { + pointcut needPrinter(PrintService ps): get(String PrintService.string) && target(ps) && + !within(Aspect); + String around(PrintService ps): needPrinter(ps) { + System.out.println("around"); + org.aspectj.testing.Tester.checkEqual("after", ps.string); + return ps.string; + } +} diff --git a/tests/new/ObjectForInt.java b/tests/new/ObjectForInt.java new file mode 100644 index 000000000..bec3b7ff5 --- /dev/null +++ b/tests/new/ObjectForInt.java @@ -0,0 +1,34 @@ +import org.aspectj.testing.Tester; + +public class ObjectForInt { + public static void main(String[] args){ + new Test().go(); + Tester.checkEqual(Test.a, 10, "Test.a"); + Tester.checkEqual(A.beforeA.intValue(), 4, "beforeA"); + } +} + +class Test { + public static int a = -1; + void go(){ + foo(4); + } + + void foo(int a){ + Test.a = a; + } +} + +aspect A { + public static Integer beforeA = null; + pointcut fooCut(Object i): + target(Test) && args(i) && call(void f*(*)); + + before(Object o): fooCut(o){ + beforeA = (Integer)o; + } + + void around(Object o): fooCut(o){ + proceed(new Integer(10)); + } +} diff --git a/tests/new/OddConstructors.java b/tests/new/OddConstructors.java new file mode 100644 index 000000000..72717d275 --- /dev/null +++ b/tests/new/OddConstructors.java @@ -0,0 +1,48 @@ +import java.lang.reflect.*; +import org.aspectj.testing.Tester; + +public class OddConstructors { + public static void main(String[] args) throws Exception { test(); } + public static void test() throws Exception { + new OddConstructors().go(); + Tester.check("advised default constructor"); + Tester.checkEqual(B.aspectOf().count, 1, "new'd once"); + } + + void go() throws Exception { + // new C(); + + // use reflection instead of new to create this class to tickle the bug + Constructor c = Class.forName("C").getConstructor(new Class[0]); + I i = (I)c.newInstance(new Object[0]); + } + static aspect B extends A issingleton() { //of eachJVM() { + pointcut i(): target(I); + } +} + + +abstract aspect A { + + abstract pointcut i(); + + pointcut j(): + i() + // 2001.08.01 (palm) + // Had to change this to I.new from new + // because of the change to the meaning + // of initialization + //&& initialization(new(..)) ; + && initialization(I.new(..)) ; + + after() returning(Object o): j() { + Tester.note("advised default constructor"); + count++; + } + + int count = 0; +} + +class C implements I { public C() {} } + +interface I {} diff --git a/tests/new/OrderOfCatches.java b/tests/new/OrderOfCatches.java new file mode 100644 index 000000000..84ddaea56 --- /dev/null +++ b/tests/new/OrderOfCatches.java @@ -0,0 +1,40 @@ + +import org.aspectj.testing.Tester; + +// PR#114, PR#115 + +public class OrderOfCatches { + public static void main(String[] args) { test(); } + public static void test() { + A a = new A(); + try { + a.bar(); + Tester.check( true, "" ); + } + catch ( FooException fe ) { + } + Tester.checkEqual(a.s, "a-FooException-EXC:FooException", ""); + } +} + +class A { + public String s = "a"; + void bar() throws FooException { + foo(); + } + void foo() throws FooException { + throw new FooException(); + } +} + +aspect AA { + pointcut m(A a): target(a) && call(void bar()); + after (A a) throwing (FooException e): m(a) { + a.s += "-" + e.getClass().getName(); + } + after (A a) throwing (Exception e): m(a) { + a.s += "-" + "EXC:"+e.getClass().getName(); + } +} + +class FooException extends Exception {} diff --git a/tests/new/OrderOfExtendsPlusAndImplementsPlus.java b/tests/new/OrderOfExtendsPlusAndImplementsPlus.java new file mode 100644 index 000000000..ba1265f1c --- /dev/null +++ b/tests/new/OrderOfExtendsPlusAndImplementsPlus.java @@ -0,0 +1,37 @@ +import org.aspectj.testing.Tester; +public class OrderOfExtendsPlusAndImplementsPlus { + public static void main(String[] args) { + try { + new OrderOfExtendsPlusAndImplementsPlus().realMain(args); + } catch (Throwable t) { + Tester.throwable(t); + } + } + public void realMain(String[] args) throws Exception { + Class[] cs = new Class[]{C.class, D.class}; + for (int i = 0; i < cs.length; i++) { + check(cs[i]); + } + } + private void check(Class c) { + Tester.checkEq(c.getInterfaces()[0], I.class, + c + " doesn't implement " + I.class); + Tester.checkEq(c.getSuperclass(), S.class, + c + " doesn't extend " + S.class); + } +} + +class S {} +interface I {} +class C {} +class D {} + +aspect A { + declare parents: C implements I; + declare parents: C extends S; +} + +aspect B { + declare parents: D extends S; + declare parents: D implements I; +} diff --git a/tests/new/OrderOfTypes.java b/tests/new/OrderOfTypes.java new file mode 100644 index 000000000..8e2739b3b --- /dev/null +++ b/tests/new/OrderOfTypes.java @@ -0,0 +1,14 @@ +public class OrderOfTypes { + public static void main(String[] args) {} +} + +class Root { + class RootInner {} +} + +class Second extends First { + class SecondInner extends RootInner {} +} + +class First extends Root { +} diff --git a/tests/new/Orleans.java b/tests/new/Orleans.java new file mode 100644 index 000000000..acc77d402 --- /dev/null +++ b/tests/new/Orleans.java @@ -0,0 +1,22 @@ +import org.aspectj.testing.*; + +public class Orleans { + static boolean called = false; + public static void main(String[] args) { + String hello[] = new String[] { "h", "e", "l", "l", "o" }; + Object o = new Object(); + o = new Orleans(true); + Tester.check(called, "Advice was not called."); + } + + public Orleans(boolean b) {} +} + +aspect ResourceAccounting issingleton() { + pointcut constructions(): call(new(..)); + before(): constructions() { + Orleans.called = true; + } +} + + diff --git a/tests/new/OuterAbstract_PR408.java b/tests/new/OuterAbstract_PR408.java new file mode 100644 index 000000000..0ba46c8ad --- /dev/null +++ b/tests/new/OuterAbstract_PR408.java @@ -0,0 +1,13 @@ +import org.aspectj.testing.*; + +public abstract class OuterAbstract_PR408 { + public void go() { + Tester.event("OuterAbstract_PR408.go"); + } + public abstract class InnerAbstract { + public InnerAbstract(String str) {} + public void go() { + Tester.event("InnerAbstract.go"); + } + } +} diff --git a/tests/new/OverridingPointcuts.java b/tests/new/OverridingPointcuts.java new file mode 100644 index 000000000..a07815baf --- /dev/null +++ b/tests/new/OverridingPointcuts.java @@ -0,0 +1,60 @@ +import org.aspectj.testing.Tester; + +public class OverridingPointcuts { + public static void main(String[] args) { + C c1 = new C(); + C c2 = new C(); + + c1.m1(); + c2.m2(); + + Tester.checkEqual(c1.m1(), "A1-m1"); + Tester.checkEqual(c2.m2(), "m2"); + + Tester.checkEqual(c1.m3(), "A1-m3"); + Tester.checkEqual(c2.m3(), "m3"); + + Tester.check(!A2.hasAspect(c1), "c1 hasa A2"); + Tester.check(A1.hasAspect(c1), "c1 hasa A1"); + + Tester.check(A2.hasAspect(c2), "c2 hasa A2"); + Tester.check(!A1.hasAspect(c2), "!c2 hasa A1"); + } +} + + +class C { + public String m1() { return "m1"; } + public String m2() { return "m2"; } + public String m3() { return "m3"; } +} + +abstract aspect A pertarget(target(C) && call(String m2())) { + int cached; + + abstract pointcut testpoint(); + + String modifyResult(String r) { return "A-" + r; } + + String around (): testpoint() { + return modifyResult(proceed()); + } +} + +aspect A1 extends A pertarget(target(C) && call(String m1())) { + pointcut testpoint() : call(String C.*(..)); + + String modifyResult(String s) { return "A1-" + s; } +} + +aspect A2 extends A { + pointcut testpoint(); +} + +/* +public aspect A2 extends A of eachobject(instanceof(C) && receptions(String m2())) { + pointcut testpoint() returns String: receptions(String *(..)); + + String modifyResult(String s) { return "A2-" + s; } +} +*/ diff --git a/tests/new/PCDeclarationArgsCE.java b/tests/new/PCDeclarationArgsCE.java new file mode 100644 index 000000000..275ec1fbe --- /dev/null +++ b/tests/new/PCDeclarationArgsCE.java @@ -0,0 +1,54 @@ + +import java.util.Observer; +import java.util.Observable; + +/** @testcase PR#740 pointcut references with incorrect args should prompt compiler errors */ +aspect A { + pointcut none() : call(static void main(String[])); + pointcut one(Runnable r) : target(r) && call(void run()); + pointcut two(Observer seer, Observable seen) : + target(seer) + && args(seen, Object) + && execution(void update(Observable, Object)); + pointcut three(Observer seer, Observable seen, Object arg) : + target(seer) + && args(seen, arg) + && execution(void update(Observable, Object)); + + // cases should not have errors + pointcut none0type() : none(); + pointcut one1type() : one(Runnable); + pointcut two2type() : two(Observer, Observable); + pointcut three3type() : three(Observer, Observable, Object); + pointcut one1arg(Runnable r) : one(r); + pointcut two2arg(Observer seer, Observable seen) : two(seer, seen); + pointcut three3arg(Observer seer, Observable seen, Object o) : + two(seer, seen, o); + + // cases should prompt CE + pointcut none1type() : none(Object); // CE 29 + pointcut none1name(Object o) : none(o); // CE 30 + pointcut none2type() : none(Object, Object); // CE 31 + pointcut none2name(Object o, Object p) : none(o,p); // CE 32 + pointcut one0() : one(); // CE 33 + pointcut one2type() : one(Runnable, Object); // CE 34 + pointcut one2name(Runnable o, Object p) : one(o,p); // CE 35 + + pointcut two0() : two(Object); // CE 37 + pointcut two1type() : two(Object); // CE 38 + pointcut two1name(Object o) : two(o); // CE 39 + pointcut two3type() : two(Observer, Observable, Object); // CE 40 + pointcut two3name(Observer seer, Observable seen, Object object) : + two(seer, seen, object); // CE 42 + + pointcut three0() : three(Object); // CE 44 + pointcut three1type() : three(Object); // CE 45 + pointcut three1name(Object o) : three(o); // CE 46 + pointcut three2type() : three(Observer, Observable); // CE 47 + pointcut three2name(Observer seer, Observable seen) : + three(seer, seen); // CE 49 + pointcut three4type() : three(Observer, Observable, Object, Object); // CE 50 + pointcut three4name(Observer seer, Observable seen, + Object object, Object two) : + three(seer, seen, object, two); // CE 53 +} diff --git a/tests/new/PR318.java b/tests/new/PR318.java new file mode 100644 index 000000000..da43d463d --- /dev/null +++ b/tests/new/PR318.java @@ -0,0 +1,34 @@ +public class PR318 { + public static void main(String[] args) { + new PR318().realMain(args); + } + public void realMain(String[] args) { + Bar.bar(); + org.aspectj.testing.Tester.check(caught, "Exception wasn't caught"); + } + static boolean caught = false; + +} + +class Foo { + static void foo () throws Exception { + throw new IllegalArgumentException("foo!"); + } +} + +class Bar { + static void bar () { + try { + Foo.foo(); + } catch (Exception e) { + } + } +} + +aspect A { + before (Exception e): handler(Exception) && args(e) { + if (e instanceof IllegalArgumentException) { + PR318.caught = true; + } + } +} diff --git a/tests/new/PR320.java b/tests/new/PR320.java new file mode 100644 index 000000000..d0d2cb256 --- /dev/null +++ b/tests/new/PR320.java @@ -0,0 +1,14 @@ +public class PR320 { + public static void main(String[] args) { + //org.aspectj.testing.Tester.check(false, "Shouldn't have compiled!"); + org.aspectj.testing.Tester.check(true, "OK to compile by 08b1!"); + } +} +class Product1 {} +aspect Product1Aspect pertarget(target(Product1)){ + + pointcut instance(Product1 p): target(p); + before(Product1 p): instance(p) { + System.out.println("Im am instance of product1"); + } +} diff --git a/tests/new/PR328.java b/tests/new/PR328.java new file mode 100644 index 000000000..3597bca5c --- /dev/null +++ b/tests/new/PR328.java @@ -0,0 +1,18 @@ +import java.lang.reflect.*; + +public class PR328 { + public static void main(String[] args) { + new PR328().realMain(args); + } + public void realMain(String[] args) { + try { + Class modest = Class.forName("Modest"); + int modifiers = modest.getModifiers(); + boolean isPublic = (modifiers & Modifier.PUBLIC) != 0; + org.aspectj.testing.Tester.check(!isPublic, "Modest shouldn't be public"); + } catch (Throwable t) { + org.aspectj.testing.Tester.check(false, "Thrown: " + t); + } + } +} +class Modest {} diff --git a/tests/new/PR335.java b/tests/new/PR335.java new file mode 100644 index 000000000..8fc4db660 --- /dev/null +++ b/tests/new/PR335.java @@ -0,0 +1,50 @@ +import org.aspectj.testing.*; + +public class PR335 { + public static void main(String[] args) { + Ship s = new Ship(); + Tester.clearEvents(); + s.handleCollision(); + Tester.checkAndClearEvents("before3(d=0) inflictDamage(0) handleCollision()"); + s.handleCollision("dummy"); + Tester.checkAndClearEvents("before1(so=dummy,d=1) inflictDamage(1) handleCollision(Object)"); + s.handleCollision(1); + Tester.checkAndClearEvents("before2(so=1,d=2) inflictDamage(2) handleCollision(int)"); + s.inflictDamage(3); + Tester.checkAndClearEvents("inflictDamage(3)"); + } +} + + +aspect Bug1 { + pointcut collisionDamage(Ship s, Object so, int d) : + this(s) + && cflow(call(void handleCollision(Object)) && args(so)) + && call(void Ship.inflictDamage(int)) && args(d); + before(Ship s, Object so, int d) : collisionDamage(s, so, d) { + Tester.event("before1(so="+so.toString()+",d="+d+")"); + } + + pointcut collisionDamage2(Ship s, int so, int d) : + this(s) + && cflow(call(void handleCollision(int)) && args(so)) + && call(void Ship.inflictDamage(int)) && args(d); + before(Ship s, Object so, int d) : collisionDamage2(s, so, d) { + Tester.event("before2(so="+so+",d="+d+")"); + } + + pointcut collisionDamage3(Ship s, int d) : + this(s) + && withincode(void handleCollision()) + && call(void Ship.inflictDamage(int)) && args(d); + before(Ship s, int d) : collisionDamage3(s, d) { + Tester.event("before3(d="+d+")"); + } +} + +class Ship { + void handleCollision() { inflictDamage(0); Tester.event("handleCollision()"); } + void handleCollision(Object so) { inflictDamage(1); Tester.event("handleCollision(Object)"); } + void handleCollision(int so) { inflictDamage(2); Tester.event("handleCollision(int)"); } + void inflictDamage(int i) { Tester.event("inflictDamage(" + i + ")"); } +} diff --git a/tests/new/PR339.java b/tests/new/PR339.java new file mode 100644 index 000000000..99855d082 --- /dev/null +++ b/tests/new/PR339.java @@ -0,0 +1,16 @@ +public class PR339 { + public static void main(String[] args) { + new MemberInitSet().foo(); + org.aspectj.testing.Tester.check(true, "compiled"); + } +} + +class MemberInitSet { + String s = "S"; + { s="s"; } + void foo() { s = "asdf"; } +} + +aspect Setter pertarget(target(MemberInitSet)) { + pointcut allSets(): set(String MemberInitSet.s); +} diff --git a/tests/new/PR347.java b/tests/new/PR347.java new file mode 100644 index 000000000..e7479938f --- /dev/null +++ b/tests/new/PR347.java @@ -0,0 +1,37 @@ +import org.aspectj.testing.*; + +public class PR347 { + public static void main(String[] args) { + new PR347().realMain(args); + } + public void realMain(String[] args) { + new A().i(); + new B().j(); + Tester.checkAllEvents(); + } + static { + Tester.expectEventsInString("Ai,A.i,Bj,B.j"); + } +} +interface I { public void i(); } +interface J { public void j(); } + +class A {} +class B {} + +aspect Aspect1 { + A +implements I; + B +implements J; +} + +aspect Aspect2 { + pointcut Ai(): receptions(void i()) && instanceof(A); + pointcut Bj(): receptions(void j()) && instanceof(B); + before(): Ai() { Tester.event("Ai"); } + before(): Bj() { Tester.event("Bj"); } +} + +aspect Aspect3 { + public void A.i() { Tester.event("A.i"); } + public void B.j() { Tester.event("B.j"); } +} diff --git a/tests/new/PR353.java b/tests/new/PR353.java new file mode 100644 index 000000000..c200acf3d --- /dev/null +++ b/tests/new/PR353.java @@ -0,0 +1,107 @@ +import org.aspectj.testing.*; +import java.util.*; + +public class PR353 { + public static void main(String[] args) { + new PR353().go(args); + Tester.checkAllEvents(); + } + + void go(String[] args) { + A a = new A(); + B b = new B(); + C c = new C(); + D d = new D(); + E e = new E(); + a.f(); + b.f(); + c.f(); + d.f(); + e.f(); + new Verifier().verify(Aspect.map); + } +} + +interface I { public void f(); } +class A { public void f() { } } +class B implements I { public void f() { } } +class C { public void f() { } } +class D extends C { public void f() { } } +class E extends B { public void f() { } } +class F extends C + implements I { public void f() { } } + +class Verifier { + void verify(Map map) { + Iterator iter = map.keySet().iterator(); + while (iter.hasNext()) { + String key = (iter.next() + "").toLowerCase(); + List list = (List) map.get(key); + Iterator it = list.iterator(); + while (it.hasNext()) { + Object onext = it.next(); + String next = (onext + "").toLowerCase(); + if (key.indexOf(next) == -1) { + Tester.check(false, next + " not found in " + key); + } else { + it.remove(); + } + } + Tester.check(list.size() == 0, list + " contains classes excluded"); + } + } +} +aspect Aspect { + + pointcut r(): receptions(* f()); + pointcut abcdef(): r(); + pointcut acd(): r() && !instanceof(I); + pointcut acdf(): r() && !instanceof(B); + pointcut a(): r() && !instanceof(B) && !instanceof(C); + + public static Map map = new HashMap(); + static { + String[] ss = { + "abcdef", + "acd", + "acdf", + "a", + }; + for (int i = 0; i < ss.length; i++) { + map.put(ss[i], new Vector()); + } + } + + static before(): abcdef() { + p("abcdef", thisJoinPoint.className); + } + + static before(): acd() { + p("acd", thisJoinPoint.className); + } + + static before(): acdf() { + p("acdf", thisJoinPoint.className); + } + + static before(): a() { + p("a", thisJoinPoint.className); + } + + static void p(String key, String str) { + List list = (List) map.get(key); + if (list == null) { + list = new Vector(); + } + list.add(str); + map.put(key, list); + } + + static List v(Object[] os) { + List v = new Vector(); + for (int i = 0; i < os.length; i++) { + v.add(os[i]); + } + return v; + } +} diff --git a/tests/new/PR353b.java b/tests/new/PR353b.java new file mode 100644 index 000000000..4419d9203 --- /dev/null +++ b/tests/new/PR353b.java @@ -0,0 +1,51 @@ +import org.aspectj.lang.*; +import org.aspectj.lang.reflect.*; +import org.aspectj.testing.*; +import java.util.*; + +public class PR353b { + + public static void main(String[] args){ + new PR353b().go(); + } + + void go(){ + s.c = "E"; C c = new E(); c.foo(); + s.c = "C"; c = new C(); c.foo(); + s.c = "E"; E e = new E(); e.foo(); + s.c = "E2"; E2 e2 = new E2(); e2.foo(); + s.c = "F"; F f = new F(); f.foo(); + } + + static { + Tester.expectEvent("call C"); + Tester.expectEvent("call E2"); + } +} + +class C { void foo() {} } +class E extends C {} +class F extends E {} +class E2 extends C { void foo() {} } + +class s { public static String c; } + +aspect A { + + pointcut p3(): this(C) && call(* foo()) && !target(E); + before(): p3() { + Object target = thisJoinPoint.getTarget(); + JoinPoint.StaticPart sp = thisJoinPoint.getStaticPart(); + Signature sig = sp.getSignature(); + Class dt = sig.getDeclaringType(); + Tester.check(!(target instanceof E), + target.getClass().getName() + " instanceof E"); + Tester.event("call " + target.getClass().getName()); + Tester.check(dt == PR353b.class, + "dt != instanceof PR353b"); + Tester.check(!(target instanceof E), + "!instanceof E"); + String c = thisJoinPoint.getSignature().getDeclaringType().getName(); + Tester.check(s.c.equals(c), "p3: " + s.c + " != " + c); + } +} diff --git a/tests/new/PR353c.java b/tests/new/PR353c.java new file mode 100644 index 000000000..fe4a9e685 --- /dev/null +++ b/tests/new/PR353c.java @@ -0,0 +1,147 @@ +import org.aspectj.testing.*; +import java.util.*; + +public class PR353c { + + public static void main(String[] args){ + new PR353c().go(); + } + + void go(){ + C c = new C(); c.f(); c.g(); + A a = new A(); a.f(); a.g(); + B b = new B(); b.f(); b.g(); + D d = new D(); d.f(); d.g(); + E e = new E(); e.f(); e.g(); + } +} + +interface I { } + +class C { + void f() {} + void g() {} +} + +class A extends C { + void f() {} +} + +class B extends C { + void f() {} + void g() {} +} + +class D extends C { } +class E extends C implements I { } + +aspect AA extends AspectSupport { + + pointcut f(): receptions(void f()); + pointcut g(): receptions(void g()); + pointcut b(): f() || g(); + + pointcut all(): b(); + pointcut notC(): b() && !instanceof(C); + pointcut notD1(): b() && instanceof(C) && !instanceof(D); + pointcut notD2(): b() && !instanceof(D) && instanceof(C); + pointcut notI(): b() && !instanceof(I); + pointcut notA1(): b() && instanceof(C) && !instanceof(A); + pointcut notA2(): b() && !instanceof(A) && instanceof(C); + pointcut notB1(): b() && instanceof(C) && !instanceof(B); + pointcut notB2(): b() && !instanceof(B) && instanceof(C); + pointcut notE1(): b() && instanceof(C) && !instanceof(E); + pointcut notE2(): b() && !instanceof(E) && instanceof(C); + + + + static before(): all() { p("cabde", thisJoinPoint.className); } + static before(): notC() { p("", thisJoinPoint.className); } + static before(): notD1() { p("cabe", thisJoinPoint.className); } + static before(): notD2() { p("cabe", thisJoinPoint.className); } + static before(): notI() { p("cabd", thisJoinPoint.className); } + static before(): notA1() { p("cbde", thisJoinPoint.className); } + static before(): notA2() { p("cbde", thisJoinPoint.className); } + static before(): notB1() { p("cade", thisJoinPoint.className); } + static before(): notB2() { p("cade", thisJoinPoint.className); } + static before(): notE1() { p("cadb", thisJoinPoint.className); } + static before(): notE2() { p("cadb", thisJoinPoint.className); } + + pointcut _b(): receptions(* *()); + + pointcut _all(): _b(); + pointcut _notC(): _b() && !instanceof(C); + pointcut _notD1(): _b() && instanceof(C) && !instanceof(D); + pointcut _notD2(): _b() && !instanceof(D) && instanceof(C); + pointcut _notI(): _b() && !instanceof(I); + pointcut _notA1(): _b() && instanceof(C) && !instanceof(A); + pointcut _notA2(): _b() && !instanceof(A) && instanceof(C); + pointcut _notB1(): _b() && instanceof(C) && !instanceof(B); + pointcut _notB2(): _b() && !instanceof(B) && instanceof(C); + pointcut _notE1(): _b() && instanceof(C) && !instanceof(E); + pointcut _notE2(): _b() && !instanceof(E) && instanceof(C); + + static before(): _all() { p("cabde", thisJoinPoint.className); } + static before(): _notC() { p("", thisJoinPoint.className); } + static before(): _notD1() { p("cabe", thisJoinPoint.className); } + static before(): _notD2() { p("cabe", thisJoinPoint.className); } + static before(): _notI() { p("cabd", thisJoinPoint.className); } + static before(): _notA1() { p("cbde", thisJoinPoint.className); } + static before(): _notA2() { p("cbde", thisJoinPoint.className); } + static before(): _notB1() { p("cade", thisJoinPoint.className); } + static before(): _notB2() { p("cade", thisJoinPoint.className); } + static before(): _notE1() { p("cadb", thisJoinPoint.className); } + static before(): _notE2() { p("cadb", thisJoinPoint.className); } +} + +class Verifier { + void verify(Map map) { + Iterator iter = map.keySet().iterator(); + while (iter.hasNext()) { + String key = (iter.next() + "").toLowerCase(); + List list = (List) map.get(key); + Iterator it = list.iterator(); + while (it.hasNext()) { + Object onext = it.next(); + String next = (onext + "").toLowerCase(); + if (key.indexOf(next) == -1) { + Tester.check(false, next + " not found in " + key); + } else { + it.remove(); + } + } + Tester.check(list.size() == 0, list + " contains classes excluded"); + } + } +} +aspect AspectSupport { + + public static Map map = new HashMap(); + static { + String[] ss = { + + }; + for (int i = 0; i < ss.length; i++) { + map.put(ss[i], new Vector()); + } + } + + static void p(String key, String str) { + List list = (List) map.get(key); + if (list == null) { + list = new Vector(); + } + list.add(str); + map.put(key, list); + } + + static List v(Object[] os) { + List v = new Vector(); + for (int i = 0; i < os.length; i++) { + v.add(os[i]); + } + return v; + } +} + + diff --git a/tests/new/PR353d.java b/tests/new/PR353d.java new file mode 100644 index 000000000..0fdec91aa --- /dev/null +++ b/tests/new/PR353d.java @@ -0,0 +1,57 @@ +public class PR353d { + public static void main(String[] args) { + new PR353d().go(); + } + + void go() { + System.out.println("\ni..."); I i = new I() { public void f(PR353d d) {} }; i.f(this); + System.out.println("\na..."); A a = new A(); a.f(this); + System.out.println("\nb..."); B b = new B(); b.f(this); + System.out.println("\nc..."); C c = new C(); c.f(this); + System.out.println("\nd..."); D d = new D(); d.f(this); + System.out.println("\ne..."); E e = new E(); e.f(this); + } +} + +interface I { + public void f(PR353d d); +} + +class A { + public void f(PR353d d) { System.out.println("A.f"); } +} + +class B extends A {} +class C extends A { + public void f(PR353d d) { System.out.println("C.f"); } +} +class D extends A implements I {} +class E extends A implements I { + public void f(PR353d d) { System.out.println("E.f"); } +} + +aspect Aspect { + + pointcut f(): receptions(* *(PR353d)); + pointcut all(): f(); + pointcut anoB(A a): f() && instanceof(a) && !instanceof(B); + pointcut anoC(A a): f() && instanceof(a) && !instanceof(C); + pointcut anoD(A a): f() && instanceof(a) && !instanceof(D); + pointcut anoE(A a): f() && instanceof(a) && !instanceof(E); + pointcut noA(): f() && !instanceof(A); + pointcut noB(): f() && !instanceof(B); + pointcut noC(): f() && !instanceof(C); + pointcut noD(): f() && !instanceof(D); + pointcut noE(): f() && !instanceof(E); + + static before(): all() { System.out.println("all: " + thisJoinPoint.className); } + static before(): noA() { System.out.println("noA: " + thisJoinPoint.className); } + static before(A a): anoB(a) { System.out.println("anoB: " + thisJoinPoint.className); } + static before(A a): anoC(a) { System.out.println("anoC: " + thisJoinPoint.className); } + static before(): noB() { System.out.println("noB: " + thisJoinPoint.className); } + static before(): noC() { System.out.println("noC: " + thisJoinPoint.className); } + static before(A a): anoD(a) { System.out.println("anoD: " + thisJoinPoint.className); } + static before(A a): anoE(a) { System.out.println("anoE: " + thisJoinPoint.className); } + static before(): noD() { System.out.println("noD: " + thisJoinPoint.className); } + static before(): noE() { System.out.println("noE: " + thisJoinPoint.className); } +} diff --git a/tests/new/PR353e.java b/tests/new/PR353e.java new file mode 100644 index 000000000..729315fd1 --- /dev/null +++ b/tests/new/PR353e.java @@ -0,0 +1,65 @@ +public class PR353e { + + public static void main(String[] args){ + new PR353e().go(); + } + + void go(){ + C c; +// System.out.println("\nwith C..."); +// c = new C(); +// c.foo(this); +// c.bar(this); +// System.out.println("\nwith D..."); +// c = new D(); +// c.foo(this); +// c.bar(this); +// System.out.println("\nwith CE..."); +// c = new E(); +// c.foo(this); + System.out.println("\nwith E..."); + E e = new E(); + e.foo(this); + System.out.println("\nwith E2..."); + E2 e2 = new E2(); + e2.foo(this); + e2.bar(this); + } +} + +interface I { } +class C{ + void foo(PR353e a){ System.out.println("foo"); } +} +class E extends C implements I { } +class E2 extends C implements I { void foo(PR353e a) { System.out.println("foo2"); } } + +aspect A { + + pointcut p(C c): receptions(* *(PR353e)) && instanceof(c) && !instanceof(E); + static before(C c): p(c) { + System.out.println("1 before A " + thisJoinPoint.methodName + " with:" + c + ":" + thisJoinPoint.className); + } + + pointcut p3(): receptions(* *(PR353e)) && !instanceof(E); + static before(): p3() { + System.out.println("3 before A " + thisJoinPoint.methodName + " with:" + thisJoinPoint.className); + } + pointcut p4(): receptions(* *(PR353e)) && !instanceof(E2); + static before(): p4() { + System.out.println("4 before A " + thisJoinPoint.methodName + " with:" + thisJoinPoint.className); + } +} + +aspect B { + + pointcut p(C c): receptions(* *(PR353e)) && instanceof(c) && !instanceof(E); + static before(C c): p(c) { + System.out.println("1 before B " + thisJoinPoint.methodName + " with:" + c + ":" + thisJoinPoint.className); + } + + pointcut p3(): receptions(* *(PR353e)) && !instanceof(E); + static before(): p3() { + System.out.println("3 before B " + thisJoinPoint.methodName + " with:" + thisJoinPoint.className); + } +} diff --git a/tests/new/PR355.java b/tests/new/PR355.java new file mode 100644 index 000000000..5c9d4fa0e --- /dev/null +++ b/tests/new/PR355.java @@ -0,0 +1,56 @@ +import org.aspectj.testing.*; +import java.io.*; + +public class PR355 { + public static void main(String[] args) { + new PR355().go(); + } + + static { + String[] types = { "static", "non", "instance" }; + String[] advice = { "before", "after", "around" }; + for (int i = 0; i < types.length; i++) { + for (int j = 0; j < advice.length; j++) { + Tester.expectEvent(types[i] + "-" + advice[j]); + } + } + Tester.expectEventsInString("C.f,C.e"); + } + + void go() { + new C().f(); + Tester.checkAllEvents(); + } +} + + +class C { + void f() { Tester.event("C.f"); e(); } + void e() { Tester.event("C.e"); } +} + +abstract aspect Cuts { + pointcut p(): within(C) && call(* C.*(..)); + static void a(String s) { Tester.event(s); } +} + +/* Static aspects have no problem */ +aspect StaticAspect extends Cuts { + before(): p() { a("static-before"); } + void around(): p() { a("static-around"); proceed(); } + after (): p() { a("static-after"); } +} + +/* Non-static aspects have a problem */ +aspect NonStaticAspect extends Cuts issingleton() { + before(): p() { a("non-before"); } + void around(): p() { a("non-around"); proceed(); } + after (): p() { a("non-after"); } +} + +/* No problem here */ +aspect InstanceOfAspect extends Cuts perthis(this(C)) { + before(): p() { a("instance-before"); } + void around(): p() { a("instance-around"); proceed(); } + after (): p() { a("instance-after"); } +} diff --git a/tests/new/PR415.java b/tests/new/PR415.java new file mode 100644 index 000000000..2d9f22737 --- /dev/null +++ b/tests/new/PR415.java @@ -0,0 +1,69 @@ +import org.aspectj.testing.*; + +public class PR415 { + public static void main(String[] args) { + ASTObject ast = new ASTObject(); + ast.f1(); + ast.f2(); + ast.f3(); + ast.g1(); + ast.g2(); + ast.g3(); + Tester.checkAllEvents(); + } + static { + Tester.expectEventsInString("V(V),V(S),V(SS),f1,f2,f3"); + Tester.expectEventsInString("I(V),I(S),I(SS),g1,g2,g3"); + Tester.expectEventsInString("Vc,VcS,VcSS,Ic,IcS,IcSS"); + } +} + +aspect Loses { + void around(ASTObject ast): + call(void ASTObject.voidMethod()) && target(ast) { + Tester.event("Vc"); + proceed(ast); + } + void around(ASTObject ast, String msg): + call(void ASTObject.voidMethod(String)) && target(ast) && args(msg) { + Tester.event("VcS"); + proceed(ast,msg); + } + void around(ASTObject ast, String msg1, String msg2): + call(void ASTObject.voidMethod(String, String)) && target(ast) && args(msg1, msg2) { + Tester.event("VcSS"); + proceed(ast,msg1,msg2); + } + + int around(ASTObject ast): + call(int ASTObject.intMethod()) && target(ast) { + Tester.event("Ic"); + return proceed(ast); + } + int around(ASTObject ast, String msg): + call(int ASTObject.intMethod(String)) && target(ast) && args(msg) { + Tester.event("IcS"); + return proceed(ast,msg); + } + int around(ASTObject ast, String msg1, String msg2): + call(int ASTObject.intMethod(String, String)) && target(ast) && args(msg1, msg2) { + Tester.event("IcSS"); + return proceed(ast,msg1,msg2); + } +} + +class ASTObject { + void voidMethod() { Tester.event("V(V)"); } + void voidMethod(String msg) { Tester.event("V(S)"); } + void voidMethod(String msg1, String msg2) { Tester.event("V(SS)"); } + void f1() { voidMethod(); Tester.event("f1"); } + void f2() { voidMethod(null); Tester.event("f2"); } + void f3() { voidMethod(null, null); Tester.event("f3"); } + + int intMethod() { Tester.event("I(V)"); return -1; } + int intMethod(String msg) { Tester.event("I(S)"); return -1; } + int intMethod(String msg1, String msg2) { Tester.event("I(SS)"); return -1; } + void g1() { intMethod(); Tester.event("g1"); } + void g2() { intMethod(null); Tester.event("g2"); } + void g3() { intMethod(null, null); Tester.event("g3"); } +} diff --git a/tests/new/PR417a.java b/tests/new/PR417a.java new file mode 100644 index 000000000..693296430 --- /dev/null +++ b/tests/new/PR417a.java @@ -0,0 +1,48 @@ +import org.aspectj.testing.*; +public class PR417a { + + public interface Types { + public Integer INT = new Integer(3); + public int i = 0; + public byte b = (byte)1; + public long l = 2L; + public double d = (double)3; + public float f = (float)4; + public short s = (short)5; + public char c = 'c'; + } + + public static interface StaticTypes { + public Integer INT = new Integer(3); + public int i = 0; + public byte b = (byte)1; + public long l = 2L; + public double d = (double)3; + public float f = (float)4; + public short s = (short)5; + public char c = 'c'; + } + + public static void main (String[] args) { + new PR417a().run(); + } + + public void run() { + Tester.check(Types.INT.equals(new Integer(3)), "INT != 3"); + Tester.checkEqual(Types.i,0); + Tester.checkEqual((int)Types.b,1); + Tester.checkEqual((int)Types.l,2); + Tester.checkEqual((int)Types.d,3); + Tester.checkEqual((int)Types.f,4); + Tester.checkEqual((int)Types.s,5); + Tester.checkEqual(Types.c,'c'); + Tester.check(StaticTypes.INT.equals(new Integer(3)), "INT != 3"); + Tester.checkEqual(StaticTypes.i,0); + Tester.checkEqual((int)StaticTypes.b,1); + Tester.checkEqual((int)StaticTypes.l,2); + Tester.checkEqual((int)StaticTypes.d,3); + Tester.checkEqual((int)StaticTypes.f,4); + Tester.checkEqual((int)StaticTypes.s,5); + Tester.checkEqual(StaticTypes.c,'c'); + } +} diff --git a/tests/new/PR417b.java b/tests/new/PR417b.java new file mode 100644 index 000000000..6bf12afd8 --- /dev/null +++ b/tests/new/PR417b.java @@ -0,0 +1,29 @@ +import org.aspectj.testing.*; +public class PR417b { + + public static class StaticTypes { + public static Integer INT = new Integer(3); + public static int i = 0; + public static byte b = (byte)1; + public static long l = 2L; + public static double d = (double)3; + public static float f = (float)4; + public static short s = (short)5; + public static char c = 'c'; + } + + public static void main (String[] args) { + new PR417b().run(); + } + + public void run() { + Tester.check(StaticTypes.INT.equals(new Integer(3)), "INT != 3"); + Tester.checkEqual(StaticTypes.i,0); + Tester.checkEqual((int)StaticTypes.b,1); + Tester.checkEqual((int)StaticTypes.l,2); + Tester.checkEqual((int)StaticTypes.d,3); + Tester.checkEqual((int)StaticTypes.f,4); + Tester.checkEqual((int)StaticTypes.s,5); + Tester.checkEqual(StaticTypes.c,'c'); + } +} diff --git a/tests/new/PR519.java b/tests/new/PR519.java new file mode 100644 index 000000000..7f585ae9d --- /dev/null +++ b/tests/new/PR519.java @@ -0,0 +1,111 @@ + +import org.aspectj.testing.Tester; + +/** @testcase PR#519 Exception thrown when planning advice */ +public class PR519 { + private static final boolean DO_OUTPUT; + private static final String[] EXPECTED; + public static void main(String[] args) { + try { + A.main(args); + Tester.checkAllEvents(); + } catch (MyException e) { + // expecting this + log("caught expected exception " + e); + } catch (Exception e) { + e.printStackTrace(System.err); + } + } + public static void log(String s) { + if (DO_OUTPUT) System.err.println(s); + Tester.event(s); + } + + static { + DO_OUTPUT = false; + EXPECTED = new String[] + { "*** class A.foo()" + , "*** class B.foo()" + , "*** class A.bar()" + , "after(): call(void A.bar(..)) : call(void A.bar())" + , "*** class A.bar()" + , "after(): call(void A.bar(..)) : call(void A.bar())" + , "*** class B.bar()" + , "*** class A.bar(String s)" + , "after(): call(void A.bar(..)) : call(void A.bar(String))" + , "*** class A.bar(String s1, String s2)" + , "after(): call(void A.bar(..)) : call(void A.bar(String, String))" + , "*** class A.bar(int i)" + , "*** class A.bar()" + , "after(): call(void A.bar(..)) : call(void A.bar())" + , "after(): call(void A.bar(..)) : call(void A.bar(int))" + , "after(): call(void A.bar(..)) && args(problem): call(void A.bar(int))" + , "caught expected exception MyException" }; + Tester.expectEvent(EXPECTED); + } // static init +} + +class A extends B { + private int a = 0; + private int lala; + + public void bar(int i){ + PR519.log("*** " + this.getClass() + ".bar(int i)"); + bar(); + } + + public void bar(){ + PR519.log("*** " + this.getClass() + ".bar()"); + } + + public void bar(String s){ + PR519.log("*** " + this.getClass() + ".bar(String s)"); + } + public void bar(String s1, String s2){ + PR519.log("*** " + this.getClass() + ".bar(String s1, String s2)"); + } + + public static void main(String[] argv) throws Exception { + B b = new B(); + A a = new A(); + + a.foo(); + b.foo(); + + a.bar(); + a.bar(); + b.bar(); + + a.bar("lala"); + a.bar("lala", "poo"); + + a.bar(9); + throw new MyException(); + } +} +class MyException extends Exception { } + +class B { + private int b = 0; + + public void foo(){ + PR519.log("*** " + this.getClass() + ".foo()"); + } + + public void bar(){ + PR519.log("*** " + this.getClass() + ".bar()"); + } +} + + +aspect InstanceOfProblemAspect { + public static final String PREFIX = "after(): call(void A.bar(..)) "; + after(): !within(PR519) && call(void A.bar(..)){ + PR519.log(PREFIX + ": " + thisJoinPoint); + } + + after(int problem): !within(PR519) && call(void A.bar(..)) && args(problem){ + PR519.log(PREFIX + " && args(problem): " + thisJoinPoint); + } + +} diff --git a/tests/new/PR520.java b/tests/new/PR520.java new file mode 100644 index 000000000..641d00cdc --- /dev/null +++ b/tests/new/PR520.java @@ -0,0 +1,101 @@ +import org.aspectj.testing.Tester; + +/** @testcase for PR520 - NAB? */ +public class PR520 { + public static void main(String[] args) { + PR520 me = new PR520(); + me.testValidThreeArgumentCall() ; + me.testValidThreeArgumentCallTwo(); + Tester.checkAllEvents(); + } + + public void testValidThreeArgumentCall() { + for (int i = 0; i < Logger.PRIORITIES.length; i++) { + Logger.log(Logger.PRIORITIES[i], + Logger.API, "context=word_" + i); + } + } + + public void testValidThreeArgumentCallTwo() { + Logger.log( Logger.EXCEPTION, Logger.API, "context=EXCEPTION" ); + Logger.log( Logger.DEBUG, Logger.API, "context=DEBUG" ); + Logger.log( Logger.DEBUG, Logger.API, "context=DEBUG-Exception", + new Exception( "bad bad boy" ) ); + } + public static void signal(String s, String context) { + signal(context + ": " + s); + } + public static void signal(String s) { + System.err.println(s); + Tester.event(s); + } + private static final String[] EXPECTED; + static { + EXPECTED = new String[] + { "context=word_0" + , "call(void Logger.log(Logger.ChromePriority, Unknown, String))" + , "context=word_1" + , "call(void Logger.log(Logger.ChromePriority, Unknown, String))" + , "context=word_2" + , "call(void Logger.log(Logger.ChromePriority, Unknown, String))" + , "context=word_3" + , "call(void Logger.log(Logger.ChromePriority, Unknown, String))" + , "context=word_4" + , "call(void Logger.log(Logger.ChromePriority, Unknown, String))" + , "context=EXCEPTION" + , "call(void Logger.log(Logger.ChromePriority, Unknown, String))" + , "context=DEBUG" + , "call(void Logger.log(Logger.ChromePriority, Unknown, String))" + , "context=DEBUG-Exception" + , "call(void Logger.log(Logger.ChromePriority, Unknown, String, Exception))" + }; + Tester.expectEventsInString(EXPECTED); + } +} + +class Unknown { } +class Logger { + static class ChromePriority { } + public static final ChromePriority DEBUG; + public static final ChromePriority EXCEPTION; + public static final ChromePriority FATAL; + public static final ChromePriority INFO; + public static final ChromePriority WARN; + public static final Unknown API; + public static final Logger.ChromePriority[] PRIORITIES; + + static { + API = new Unknown(); + PRIORITIES = new Logger.ChromePriority[ 5 ]; + DEBUG = new ChromePriority(); + EXCEPTION = new ChromePriority(); + FATAL = new ChromePriority(); + INFO = new ChromePriority(); + WARN = new ChromePriority(); + PRIORITIES[ 0 ] = Logger.DEBUG; + PRIORITIES[ 1 ] = Logger.EXCEPTION; + PRIORITIES[ 2 ] = Logger.FATAL; + PRIORITIES[ 3 ] = Logger.INFO; + PRIORITIES[ 4 ] = Logger.WARN; + } + public static void log(ChromePriority p, Unknown q, + String message, Exception e) { + PR520.signal(message); + } + public static void log(ChromePriority p, Unknown q, + String message) { + PR520.signal(message); + } +} + +aspect LoggerCategoryCreator { + + pointcut allLoggingCalls() + : call(public void Logger.log(..)); + + void around(): allLoggingCalls() { + // s.b. no proceed() (i.e., replace) but testing invocation + proceed(); + PR520.signal(thisJoinPointStaticPart.toString()); + } +} diff --git a/tests/new/PR527.java b/tests/new/PR527.java new file mode 100644 index 000000000..d84e4ef32 --- /dev/null +++ b/tests/new/PR527.java @@ -0,0 +1,57 @@ +import org.aspectj.testing.Tester; + +/** + * PR#527 bug in 1.0beta1 but not HEAD as of 9/24/01 + * @testcase compile error using pcd if() with advice on introduced methods. + */ +public class PR527 { + public static void main(String[] args) { + new C().run(); + Tester.checkAllEvents(); + } + static { + Tester.expectEvent("run"); + Tester.expectEvent("test"); + // Tester.expectEvent("trigger"); replaced in around + Tester.expectEvent("after"); + Tester.expectEvent("callback"); + Tester.expectEvent("around"); + } +} +class C { + public void run() { + Tester.event("run"); + } +} + +aspect A { + interface I { + } + + public boolean I.test() { + Tester.event("test"); + return true; + } + + public void I.trigger() { + Tester.event("trigger"); // should not run + } + + public void I.callback() { + Tester.event("callback"); + } + + declare parents: C implements I; + + after (C c) : target(c) && execution(public void C.run()) { + Tester.event("after"); + ((I) c).trigger(); + } + void around(I i) + : target(i) + && execution(public void I.trigger()) + && if(i.test()) { + Tester.event("around"); + i.callback(); + } +} diff --git a/tests/new/PR528.java b/tests/new/PR528.java new file mode 100644 index 000000000..1f299e483 --- /dev/null +++ b/tests/new/PR528.java @@ -0,0 +1,71 @@ +import org.aspectj.testing.Tester; +import org.aspectj.testing.Tester; + +/** + * @testcase PR#528 10rc1 error in return type (verify error if -usejavac, compile error (missing return value) otherwise) + * @testcase PR#528 10a1 unimplemented method if around advice/cflow on methods introduced by interface + * + * The !cflow(within(B)) winds up being the best test case so far for + * the ExceptionInInitializer bug with null fields for cflow state + * + */ +public class PR528 { + public static void main(String[] args) { + C c = new C(); + c.trigger(); // toggled to true, do callback + c.trigger(); // toggled to false, do trigger + Tester.checkAllEvents(); + } + static { + Tester.expectEvent("test"); + Tester.expectEvent("test"); // called for each trigger + Tester.expectEvent("callback"); + Tester.expectEvent("trigger"); + Tester.expectEvent("around 0"); + Tester.expectEvent("around 1"); + } +} +class C { +} + +abstract aspect A { + static boolean toggle; + static int originalIndex; + static int callbackIndex; + static int aroundIndex; + interface I { + } + + public boolean I.test() { + Tester.event("test"); + return (toggle = !toggle); + } + + public void I.trigger() { + Tester.event("trigger"); + Tester.check(0==originalIndex, "trigger called again: "); + originalIndex++; + } + + public void I.callback() { + Tester.event("callback"); + Tester.check(0==callbackIndex, "callback called again: "); + callbackIndex++; + } + + declare parents: C implements I; +} + +aspect B extends A { + void around(I i) + : target(i) + && execution(public void I.trigger()) + && !cflow(within(B)) { + Tester.event("around " + aroundIndex++); + if(i.test()) { + i.callback(); + } else { + proceed(i); + } + } +} diff --git a/tests/new/PR535.java b/tests/new/PR535.java new file mode 100644 index 000000000..9bea781b6 --- /dev/null +++ b/tests/new/PR535.java @@ -0,0 +1,38 @@ + +import org.aspectj.testing.Tester; + +/** @testcase PR#535 */ +public class PR535 { + public static void main(String[] args) { + Tester.expectEvent("In bar()"); + Tester.expectEvent("advice"); + Tester.expectEvent("In foo()"); + new C().foo(); + Tester.checkAllEvents(); + } +} + +class C { + + public void foo() { + Tester.event("In foo()"); + bar(); + } + + public void bar() { + Tester.event("In bar()"); + } +} + +aspect A { + pointcut outside(): !cflow(within(A)); + + void around(C c): + cflow(execution(public void C.foo())) && + target(c) && + execution(public void C.bar()) && + outside() { + Tester.event("advice"); + proceed(c); + } +} diff --git a/tests/new/PR554.java b/tests/new/PR554.java new file mode 100644 index 000000000..3f9ff8bce --- /dev/null +++ b/tests/new/PR554.java @@ -0,0 +1,29 @@ +import org.aspectj.testing.Tester; + +/** @testcase PR#554 second arg in formal on shared joinpoint with pcd if() causes verify error ?? */ +public class PR554 { + public static void main( String args[] ) { + String A = makeProduct( "A", new Integer(1) ); + String B = makeProduct( "B", new Integer(0) ); + Tester.check("A".equals(A), "\"A\".equals(A): " + A); + Tester.check("B".equals(B), "\"B\".equals(B): " + B); + } + static String makeProduct(String s, Integer i) { return null; } +} + +aspect a { + String around(String whatKind, Integer deleteMeToFixBug): + args(whatKind,deleteMeToFixBug) && + call(String makeProduct(String,Integer)) && + if("A".equals(whatKind)) { + return "A"; + } + String around(String whatKind, Integer deleteMeToFixBug): + args(whatKind,deleteMeToFixBug) && + call(String makeProduct(String,Integer)) && + if("B".equals(whatKind)) { + return "B"; + } +} + + diff --git a/tests/new/PR558.java b/tests/new/PR558.java new file mode 100644 index 000000000..25df05406 --- /dev/null +++ b/tests/new/PR558.java @@ -0,0 +1,7 @@ +/** @testcase PR#558 class name for identifier as String should provoke error */ +public class PR558 { + public static void main( String args[] ) { + new StringBuffer().append(PR558); // expecting compiler error that PR558 is a bad symbol + } +} + diff --git a/tests/new/PR559.java b/tests/new/PR559.java new file mode 100644 index 000000000..24a371d38 --- /dev/null +++ b/tests/new/PR559.java @@ -0,0 +1,121 @@ +import org.aspectj.testing.Tester; + +/** + * This test case shows: + * - no difference whether extending a class or aspect or interface + * - underlying "within"-based pointcut works + * - containing cflow-based pointcut does not + * - true only of inherited pointcuts - member pointcuts work fine + * + * Note that to avoid pointcut cycles, + * pointcuts exclude code within a common superinterface. + * It is not enough (now) to exclude code in the advice's super-most class subclasses. + * + * @testcase PR#559 subclass advice not run for join points selected by superclass cflow-based pointcuts + */ +public class PR559 { + public static void main( String args[] ) { + Tester.expectEvent("target aspect"); + Tester.expectEvent("inTarget class"); + Tester.expectEvent("inTarget aspect"); + Tester.expectEvent("inTargetFlow class"); + Tester.expectEvent("inTargetFlow aspect"); + Tester.expectEvent("TargetRun aspect"); + Tester.expectEvent("TargetRun class"); + Tester.expectEvent("TargetRunFlow aspect"); + Tester.expectEvent("TargetRunFlow class"); + Tester.expectEvent("TargetSubRunFlow aspect"); + Tester.expectEvent("TargetSubRunFlow class"); + new Target().run(); + Tester.checkAllEvents(); + } +} + +interface AspectMarker { + pointcut notInAspect() : ! within(AspectMarker+); + pointcut allTarget() : execution(* Target.*(..)) ; + pointcut allTargetFlow() : cflow(allTarget()); + pointcut inTarget() : notInAspect() && allTarget(); + pointcut inTargetFlow() : notInAspect() && allTargetFlow(); +} + +class Target { + public void run(){ } +} + +class Base implements AspectMarker { + pointcut TargetRun () + : within(Target) && execution(* *(..)) && !within(AspectMarker+); + ; + pointcut TargetRunFlow () + : cflow(within(Target) && execution(* *(..))) && !within(AspectMarker+) + ; +} + +/** @testcase PR#559 subaspect advice not run for superclass cflow-based pointcut */ +aspect Derived extends Base { + pointcut TargetSubRunFlow () + : cflow(within(Target) && execution(* *(..))) && !within(AspectMarker+) + ; + Object around () : inTarget() { + Tester.event("inTarget class"); + return proceed(); + } + Object around () : inTargetFlow() { + Tester.event("inTargetFlow class"); + return proceed(); + } + Object around () : TargetRun() { + Tester.event("TargetRun class"); + return proceed(); + } + Object around () : TargetRunFlow() { + Tester.event("TargetRunFlow class"); + return proceed(); + } + Object around () : TargetSubRunFlow() { + Tester.event("TargetSubRunFlow class"); + return proceed(); + } +} + +abstract aspect BaseAspect implements AspectMarker { + pointcut TargetRun () + : within(Target) && execution(* *(..)) && !within(AspectMarker+); + ; + pointcut TargetRunFlow () + : cflow(within(Target) && execution(* *(..))) && !within(AspectMarker+) + ; +} + +/** @testcase PR#559 subaspect advice not run for superaspect cflow-based pointcut */ +aspect DerivedAspect extends BaseAspect implements AspectMarker { + pointcut TargetSubRunFlow () + : cflow(within(Target) && execution(* *(..))) && !within(AspectMarker+) + ; + Object around () : TargetRun() { + Tester.event("target aspect"); + return proceed(); + } + Object around () : inTarget() { // TargetRun() { + Tester.event("inTarget aspect"); + return proceed(); + } + Object around () : inTargetFlow() { // TargetRun() { + Tester.event("inTargetFlow aspect"); + return proceed(); + } + Object around () : TargetRun() { + Tester.event("TargetRun aspect"); + return proceed(); + } + Object around () : TargetRunFlow() { + Tester.event("TargetRunFlow aspect"); + return proceed(); + } + Object around () : TargetSubRunFlow() { + Tester.event("TargetSubRunFlow aspect"); + return proceed(); + } +} + diff --git a/tests/new/PR560.java b/tests/new/PR560.java new file mode 100644 index 000000000..19df8057d --- /dev/null +++ b/tests/new/PR560.java @@ -0,0 +1,64 @@ +import org.aspectj.testing.Tester; + +/** + * @testcase PR#560 compile fails for aspect derived from percflow base aspect unless pointcut excludes base aspect and subaspects + * - works with issingleton perthis and pertarget + * - works when advice is in the same class/aspect + */ +public class PR560 { // XXX broken? + public static void main( String args[] ) { + Tester.expectEvent("Target.run()"); + Tester.expectEvent("same aspect"); + Tester.expectEvent("derived aspect"); + new Target().run(); + Tester.checkAllEventsIgnoreDups(); + } +} + +class Target { + public void run(){ + Tester.event("Target.run()"); + } +} +abstract aspect Base percflow(callcflow()) { + pointcut callcflow() + : cflow(call(public void Target.run())) + && !within(Base+) + ; + before() : within(Target) { + Tester.event("same aspect"); + } +} + +aspect Derived extends Base { + before() : within(Target) { + Tester.event("derived aspect"); + } +} + +/* + -- passing variants + - + : cflow(call(public void Target.run())) + && !within(Base+) + + -- failing variants + - + : cflow(call(public void Target.run()) && !within(Derived)) + (cflowbelow selects Derived.*) + - + : cflow(call(public void Target.run())) + && !cflow(within(Derived)) + (cflowbelow selects Base.*) + - + : cflow(call(public void Target.run()) && !within(Base+)) + (cflowbelow selects Base.*) + - + : cflow(call(public void Target.run())) + && !this(Base+) + (some join points in Base/Derived do not have Base/Derived as this) + - + : cflow(call(public void Target.run())) + && !target(Base+) + (some join points in Base/Derived do not have Base/Derived as target) +*/ diff --git a/tests/new/PR569/a/IntroAnon.java b/tests/new/PR569/a/IntroAnon.java new file mode 100644 index 000000000..0ede9e901 --- /dev/null +++ b/tests/new/PR569/a/IntroAnon.java @@ -0,0 +1,22 @@ +package a; + +import org.aspectj.testing.Tester; + +import b.Dest; + +/** @testcase PR#569 anon class written to wrong directory */ +public class IntroAnon { + private static aspect MI { + public Object MyInterface.foo () { + Tester.event("foo ran"); + return new Object(){}; + } + } + public static void main (String args []) { + Tester.expectEvent("foo ran"); + new Dest ().foo (); + Tester.checkAllEvents(); + } +} // end of class IntroAnon + + diff --git a/tests/new/PR569/a/MyInterface.java b/tests/new/PR569/a/MyInterface.java new file mode 100644 index 000000000..11ecd8d81 --- /dev/null +++ b/tests/new/PR569/a/MyInterface.java @@ -0,0 +1,7 @@ +package a; + +/** @testcase PR#569 anon class written to wrong directory */ +public interface MyInterface { + public Object foo (); +} + diff --git a/tests/new/PR569/b/Dest.java b/tests/new/PR569/b/Dest.java new file mode 100644 index 000000000..7e999979b --- /dev/null +++ b/tests/new/PR569/b/Dest.java @@ -0,0 +1,8 @@ +package b; + +import a.MyInterface; + +/** @testcase PR#569 anon class written to wrong directory */ +public class Dest implements MyInterface { } + + diff --git a/tests/new/PR573.java b/tests/new/PR573.java new file mode 100644 index 000000000..22efc6de7 --- /dev/null +++ b/tests/new/PR573.java @@ -0,0 +1,25 @@ + +import org.aspectj.testing.Tester; +import org.aspectj.testing.Tester; + +/** @testcase PR#573 pertarget stack overflow getting name of anonymous class */ +public class PR573 { + static public void main(String[] params) { + Tester.expectEvent("A.init0"); + final Object o = new Interface() { + public void m(Object oa) { + oa.toString(); + }}; + Tester.check(null != o, "null != o"); + ((Interface) o).m("hi"); // no exceptions + Tester.check(1 == A.num, "1 == A.num: " + A.num); + Tester.checkAllEvents(); + } +} +interface Interface { void m(Object o);} + +aspect A pertarget(target(Interface)) { // CW 21 will not match containing aspect + public static int num; + A(){ Tester.event("A.init" + num++); } +} + diff --git a/tests/new/PR573_1.java b/tests/new/PR573_1.java new file mode 100644 index 000000000..d9b8bf3dc --- /dev/null +++ b/tests/new/PR573_1.java @@ -0,0 +1,23 @@ + +import org.aspectj.testing.Tester; + +/** @testcase PR#573 pertarget stack overflow getting name of anonymous class */ +public class PR573_1 { + static public void main(String[] params) { + final Object o1 = new Object(); + final Object o = new Object() { + public void m() { + o1.toString(); + }}; + Tester.expectEvent("A.init0"); + Tester.check(null != o, "null != o"); + o.toString(); // no exceptions + Tester.check(1 == A.num, "1 == A.num: " + A.num); + Tester.checkAllEvents(); + } +} +// different stack overflow when using Object, not Interface +aspect A pertarget(target(Object) && !target(A)) { // CW 20 will not match containing aspect + public static int num; + A(){ Tester.event("A.init" + num++); } +} diff --git a/tests/new/PR573_2.java b/tests/new/PR573_2.java new file mode 100644 index 000000000..4e3ce1878 --- /dev/null +++ b/tests/new/PR573_2.java @@ -0,0 +1,21 @@ + +import org.aspectj.testing.Tester; +import org.aspectj.testing.Tester; + +/** @testcase PR#573 pertarget stack overflow getting name of anonymous class (runtime overflow) */ +public class PR573_2 { + static public void main(String[] params) { + final Object o = new Object() { + public void m() { }}; + Tester.expectEvent("A.init0"); + Tester.check(null != o, "null != o"); + Tester.check(1 == A.num, "1 == A.num: " + A.num); + Tester.checkAllEvents(); + } +} +// different stack overflow when using Object, not Interface +//aspect A pertarget(target(Object)) { +aspect A pertarget(target(Object) && !target(A)) { + public static int num; + A(){ Tester.event("A.init" + num++); } +} diff --git a/tests/new/PR584.java b/tests/new/PR584.java new file mode 100644 index 000000000..2c4ecc03b --- /dev/null +++ b/tests/new/PR584.java @@ -0,0 +1,40 @@ + +import org.aspectj.testing.Tester; +import org.aspectj.testing.Tester; + +public class PR584 { + + public static void main(String[] args) { + Tester.expectEvent("foo ok"); + Tester.expectEvent("foo test2"); + Foo foo = new Foo("foo"); + /** @testcase PR#584 constructing inner classes using qualified new expression */ + Foo.Test test1 = foo.new Test(); + Foo.Test test2 = foo.new Test() { + public void foo() { + Tester.event(getFoo().baz + " test2"); + } + }; + test1.foo(); + test2.foo(); + /** @testcase PR#584 constructing static inner classes using new expression */ + Foo.StaticTest test3 = new Foo.StaticTest(); + Tester.expectEvent("static foo"); + test3.staticBaz = "static foo"; + test3.staticFoo(); + Tester.checkAllEvents(); + } +} + +class Foo { + public String baz; + public Foo(String baz) { this.baz = baz; } + public static class StaticTest { + static String staticBaz; + public void staticFoo() { Tester.event(staticBaz); } + } + public class Test { + public Foo getFoo() { return Foo.this; } + public void foo() { Tester.event(baz + " ok"); } + } +} diff --git a/tests/new/PR590.java b/tests/new/PR590.java new file mode 100644 index 000000000..04ae582d3 --- /dev/null +++ b/tests/new/PR590.java @@ -0,0 +1,25 @@ +import org.aspectj.testing.Tester; + +public class PR590 { + public static void main (String args []) { + staticMethod (); + new PR590().instanceMethod("bar"); + } + + public static String staticMethod () { + return null; + } + + public String instanceMethod(String a) { + return "foo"; + } +} + +aspect A { + after () returning (String s): + execution(static String PR590.staticMethod()) && if(s == null) { } //ERR + + after () throwing (Error e): + execution(static String PR590.staticMethod()) && if(e != null) { } //ERR +} + diff --git a/tests/new/PR590a.java b/tests/new/PR590a.java new file mode 100644 index 000000000..e7e8d3a85 --- /dev/null +++ b/tests/new/PR590a.java @@ -0,0 +1,37 @@ +import org.aspectj.testing.Tester; + +public class PR590a { + public static void main (String args []) { + staticMethod (); + new PR590a().instanceMethod("bar"); + } + + public static String staticMethod () { + return null; + } + + public String instanceMethod(String a) { + return "foo"; + } +} + +aspect A { + static Object fieldX = Boolean.TRUE; + //static Object Integer = Boolean.TRUE; // just to screw with you + + pointcut pc(Object s): call(!static String PR590a.*(..)) && args(s); + + before(): target(Byte) { } //sanity check + //before(): target(BlurghXXX) { } //sanity check, warning in -Xlint + + + + after () returning (Object s): pc(s) {} //ERR CE 29 + + after () throwing (Object e): pc(e) {} //ERR CE 31 + + // before(): target(fieldX) { } //ERR, but not handled yet + + //before(): target(Integer) { } //ERR -- finds field rather than type, but not handled yet +} + diff --git a/tests/new/PR600/A.java b/tests/new/PR600/A.java new file mode 100644 index 000000000..9f4b93d84 --- /dev/null +++ b/tests/new/PR600/A.java @@ -0,0 +1 @@ +public class A {} diff --git a/tests/new/PR600/B.java b/tests/new/PR600/B.java new file mode 100644 index 000000000..b90c4517f --- /dev/null +++ b/tests/new/PR600/B.java @@ -0,0 +1 @@ +public class B {} diff --git a/tests/new/PR600/C.java b/tests/new/PR600/C.java new file mode 100644 index 000000000..9d83983cd --- /dev/null +++ b/tests/new/PR600/C.java @@ -0,0 +1 @@ +public class C {} diff --git a/tests/new/PR600/Main.java b/tests/new/PR600/Main.java new file mode 100644 index 000000000..bf6ecc27b --- /dev/null +++ b/tests/new/PR600/Main.java @@ -0,0 +1,14 @@ + +/** @testcase PR#600 AbstractMethodError for introduced methods under some orderings of input files */ +public class Main { + public static void main(String[] args) { + A a = new A(); + B b = new B(); + C c = new C(); + + a.setNext(b); + b.setNext(c); + + a.doIt(); + } +} diff --git a/tests/new/PR600/My_error.java b/tests/new/PR600/My_error.java new file mode 100644 index 000000000..a827670ef --- /dev/null +++ b/tests/new/PR600/My_error.java @@ -0,0 +1,30 @@ +aspect My_error { + + interface Queue {} + Queue Queue.next = null; + + public void Queue.doIt() { + if (next == null) { + System.out.println("End of queue reached"); + } else { + System.out.println("\tCall received by: "+this.getClass().getName()); + System.out.println("\tCall forwarded to: "+next.getClass().getName()); + next.doIt(); + } + } + + public void Queue.setNext(Queue next) { + this.next = next; + } + + declare parents: A implements Queue; + declare parents: B implements Queue; + declare parents: C implements Queue; + + // This is the problematic declaration. If removed, the program works fine. + // If replaced by an around advice, the program also works fine. + + public void C.doIt() { + System.out.println("Hurray! The call has been received by C!"); + } +} diff --git a/tests/new/PR691.java b/tests/new/PR691.java new file mode 100644 index 000000000..b624c4839 --- /dev/null +++ b/tests/new/PR691.java @@ -0,0 +1,49 @@ + +import org.aspectj.testing.*; + +/** @testcase PR#691 around AST type XXX */ +public class PR691 { + public static void main (String[] args) { + Tester.expectEvent("around"); + new MailerTest().run(new TestResult()); + Tester.checkAllEvents(); + } + +} +class TestResult {} +class Message {} +class MailerTest { + public void run(TestResult result) { + new Mailer().sendTextMail(); + } +} +class Mailer { + public void sendTextMail(){ + new Transport().send(new Message()); + } +} +class Transport { public void send(Message m){ } } + +aspect Mail { + pointcut inThisTestCase(MailerTest testCase) : + call(* MailerTest.run(TestResult)) + && target(testCase); + + pointcut flowOfTestCase(MailerTest testCase) : + cflow(inThisTestCase(testCase)); + + pointcut sendMailCall() : call(void Mailer.sendTextMail(..)); + pointcut transportSend(Message msg) : + call(void Transport.send(Message)) && args(msg); + + // no bug if no testCase context + //void around(Message msg) : + // flowOfTestCase(MailerTest) + void around(Message msg, final MailerTest testCase) : + flowOfTestCase(testCase) + && cflow(sendMailCall()) + && transportSend(msg) { + Tester.event("around"); + proceed(msg,testCase); + } +} diff --git a/tests/new/PR852/aspect/Aspect.java b/tests/new/PR852/aspect/Aspect.java new file mode 100644 index 000000000..2e9705455 --- /dev/null +++ b/tests/new/PR852/aspect/Aspect.java @@ -0,0 +1,15 @@ +package aspect; + +import target.SuperClass; +import target.SubClass; + +/** @testcase PR#852 declaring method on superclass and subclass */ +public aspect Aspect { + void SuperClass.test() { System.out.println("SuperClass ok");} + void SubClass.test() { System.out.println("SubClass ok");} + //public void SuperClass+.callTest() { test(); } + public static void main (String[] args) { + new SuperClass().test(); + new SubClass().test(); + } +} diff --git a/tests/new/PR852/target/SubClass.java b/tests/new/PR852/target/SubClass.java new file mode 100644 index 000000000..1d2f36906 --- /dev/null +++ b/tests/new/PR852/target/SubClass.java @@ -0,0 +1,4 @@ +package target; + +public class SubClass extends SuperClass { +}
\ No newline at end of file diff --git a/tests/new/PR852/target/SuperClass.java b/tests/new/PR852/target/SuperClass.java new file mode 100644 index 000000000..da4d3ce0f --- /dev/null +++ b/tests/new/PR852/target/SuperClass.java @@ -0,0 +1,8 @@ +package target; + +public class SuperClass { + /*void test() { + System.err.println("SuperClass.test()"); + }*/ +} + diff --git a/tests/new/PR862/pack/ImportInnerFromInterfaceImplementor.java b/tests/new/PR862/pack/ImportInnerFromInterfaceImplementor.java new file mode 100644 index 000000000..10e89e569 --- /dev/null +++ b/tests/new/PR862/pack/ImportInnerFromInterfaceImplementor.java @@ -0,0 +1,17 @@ + + +package pack; + +import pack.C.*; +import java.io.Serializable; + +//import org.aspectj.testing.Tester; + +//public class ImportInnerFromInterfaceImplementor { +// public static void main(String[] args) { +// C c = new C(); +// Tester.check(c instanceof Serializable, "c: " + c); +// } +//} + +class C implements Serializable {}
\ No newline at end of file diff --git a/tests/new/Params.java b/tests/new/Params.java new file mode 100644 index 000000000..f82313344 --- /dev/null +++ b/tests/new/Params.java @@ -0,0 +1,157 @@ +import org.aspectj.testing.*; +public class Params { + public static void main(String[] args) { + new Params().go(); + } + + void go() { + A a = new A(); B b = new B(); C c = new C(); D d = new D(); + b(a); + + b(a, b); + b(b, a); + + b(a, b, c); + b(a, c, b); + b(b, a, c); + b(b, c, a); + b(c, a, b); + b(c, b, a); + + b(d, a, b, c); + b(d, a, c, b); + b(d, b, a, c); + b(d, b, c, a); + b(d, c, a, b); + b(d, c, b, a); + + b(a, d, b, c); + b(a, d, c, b); + b(b, d, a, c); + b(b, d, c, a); + b(c, d, a, b); + b(c, d, b, a); + + b(a, b, d, c); + b(a, c, d, b); + b(b, a, d, c); + b(b, c, d, a); + b(c, a, d, b); + b(c, b, d, a); + + b(a, b, c, d); + b(a, c, b, d); + b(b, a, c, d); + b(b, c, a, d); + b(c, a, b, d); + b(c, b, a, d); + + Tester.checkAllEvents(); + } + + static void m_(String str) { + Tester.expectEvent(str); + Tester.expectEvent(str + ".advice"); + } + + static { + m_("b1"); + + m_("b2.1"); + m_("b2.2"); + + m_("b3.1"); + m_("b3.2"); + m_("b3.3"); + m_("b3.4"); + m_("b3.5"); + m_("b3.6"); + + m_("b4.1.1"); + m_("b4.1.2"); + m_("b4.1.3"); + m_("b4.1.4"); + m_("b4.1.5"); + m_("b4.1.6"); + + m_("b4.2.1"); + m_("b4.2.2"); + m_("b4.2.3"); + m_("b4.2.4"); + m_("b4.2.5"); + m_("b4.2.6"); + + m_("b4.3.1"); + m_("b4.3.2"); + m_("b4.3.3"); + m_("b4.3.4"); + m_("b4.3.5"); + m_("b4.3.6"); + + m_("b4.4.1"); + m_("b4.4.2"); + m_("b4.4.3"); + m_("b4.4.4"); + m_("b4.4.5"); + m_("b4.4.6"); + } + + void b(A a) { a("b1"); } + + void b(A a, B b) { a("b2.1"); } + void b(B b, A a) { a("b2.2"); } + + void b(A a, B b, C c) { a("b3.1"); } + void b(A a, C c, B b) { a("b3.2"); } + void b(B b, A a, C c) { a("b3.3"); } + void b(B b, C c, A a) { a("b3.4"); } + void b(C c, A a, B b) { a("b3.5"); } + void b(C c, B b, A a) { a("b3.6"); } + + void b(D d, A a, B b, C c) { a("b4.1.1"); } + void b(D d, A a, C c, B b) { a("b4.1.2"); } + void b(D d, B b, A a, C c) { a("b4.1.3"); } + void b(D d, B b, C c, A a) { a("b4.1.4"); } + void b(D d, C c, A a, B b) { a("b4.1.5"); } + void b(D d, C c, B b, A a) { a("b4.1.6"); } + + void b(A a, D d, B b, C c) { a("b4.2.1"); } + void b(A a, D d, C c, B b) { a("b4.2.2"); } + void b(B b, D d, A a, C c) { a("b4.2.3"); } + void b(B b, D d, C c, A a) { a("b4.2.4"); } + void b(C c, D d, A a, B b) { a("b4.2.5"); } + void b(C c, D d, B b, A a) { a("b4.2.6"); } + + void b(A a, B b, D d, C c) { a("b4.3.1"); } + void b(A a, C c, D d, B b) { a("b4.3.2"); } + void b(B b, A a, D d, C c) { a("b4.3.3"); } + void b(B b, C c, D d, A a) { a("b4.3.4"); } + void b(C c, A a, D d, B b) { a("b4.3.5"); } + void b(C c, B b, D d, A a) { a("b4.3.6"); } + + void b(A a, B b, C c, D d) { a("b4.4.1"); } + void b(A a, C c, B b, D d) { a("b4.4.2"); } + void b(B b, A a, C c, D d) { a("b4.4.3"); } + void b(B b, C c, A a, D d) { a("b4.4.4"); } + void b(C c, A a, B b, D d) { a("b4.4.5"); } + void b(C c, B b, A a, D d) { a("b4.4.6"); } + + static String str = ""; + public static void a(Object o) { + str = o + ""; + Tester.event(str); + } + +} + +class A {} +class B {} +class C {} +class D {} + +aspect ParamsAspect { + pointcut intParams(): call(* *(..,A,..)) && target(Params); + after(): intParams() { + Tester.event(Params.str + ".advice"); + } +} diff --git a/tests/new/ParenPrimitive.java b/tests/new/ParenPrimitive.java new file mode 100644 index 000000000..99ba8e264 --- /dev/null +++ b/tests/new/ParenPrimitive.java @@ -0,0 +1,11 @@ +import org.aspectj.testing.Tester; + +public class ParenPrimitive { + public static void main(String[] args) { + Tester.checkEqual(typenameFor(null), "int"); + } + + private static String typenameFor(String type) { + return("int"); + } +} diff --git a/tests/new/ParentInterfaceUsingChildInnerInterface.java b/tests/new/ParentInterfaceUsingChildInnerInterface.java new file mode 100644 index 000000000..499c3035d --- /dev/null +++ b/tests/new/ParentInterfaceUsingChildInnerInterface.java @@ -0,0 +1,33 @@ +import org.aspectj.testing.*; + + +/** @testcase PR#645 PUREJAVA Parent interface using public inner interface of child in same file */ +interface Child extends Parent { + public interface Inner { + public String ok(); + } +} + +/** Parent must be in same file as child and be declared AFTER */ +interface Parent { + public Child.Inner getChildInner(); +} + +public class ParentInterfaceUsingChildInnerInterface { + public static void main (String[] args) { + Example me = new Example(); + String result = me.getChildInner().ok(); + Tester.check(((result != null) && result.startsWith("ok")), + "expected ok... got " + result); + } +} + +class Example implements Parent { + public Child.Inner getChildInner() { + return new Child.Inner() { + public String ok() { + return "ok: " + getClass().getName(); + } + }; + } +} diff --git a/tests/new/ParsingFloatCE.java b/tests/new/ParsingFloatCE.java new file mode 100644 index 000000000..85106ad7d --- /dev/null +++ b/tests/new/ParsingFloatCE.java @@ -0,0 +1,8 @@ + +public class ParsingFloatCE { + /** @testcase PR#642 PUREJAVA invalid floating-point constant */ + public void notrun() { + float f = 10e-f; // expecting CE here + double d = 10ee10; // expecting CE here + } +} diff --git a/tests/new/ParsingSubtypesIntroductions.java b/tests/new/ParsingSubtypesIntroductions.java new file mode 100644 index 000000000..5bd98fd3f --- /dev/null +++ b/tests/new/ParsingSubtypesIntroductions.java @@ -0,0 +1,60 @@ +import org.aspectj.testing.Tester; +public class ParsingSubtypesIntroductions { + public static void main(String[] args) { + new ParsingSubtypesIntroductions().realMain(args); + } + public void realMain(String[] args) { + new D().f(); + new C().f(); + ((I)new C()).i(); + new E().f(); + ((I)new E()).i(); + Tester.checkAllEvents(); + } + static { + U.m(D.class, "f"); + U.m(C.class, "f"); + U.m(C.class, "i"); + U.m(E.class, "f"); + U.m(E.class, "i"); + } +} + +class U { + public static void a(Object o, Object m) { + Tester.event(m + "." + type(o)); + } + public static void m(Class t, Object m) { + Tester.expectEvent(m + "." + name(t)); + } + public static String type(Object o) { + return name(o.getClass()); + } + public static String name(Class t) { + String str = t.getName(); + int i = str.lastIndexOf('.'); + if (i != -1) str = str.substring(i+1); + return str; + } +} + +class D { + public void f() { U.a(this, "f"); } +} +class C /*extends D implements I*/ { + /*public void i() { U.a(this, "i"); }*/ +} +class E extends C {} +interface I { + public void i(); +} +aspect A { +// subtypes(C) +implements I; +// subtypes(C) +extends D; + + declare parents: C+ implements I; + declare parents: C+ extends D; + + public void I.i() { U.a(this, "i"); } +} + diff --git a/tests/new/PerTargetAndVariablesWithNumbersInTheirNames.java b/tests/new/PerTargetAndVariablesWithNumbersInTheirNames.java new file mode 100644 index 000000000..1f0ca54bf --- /dev/null +++ b/tests/new/PerTargetAndVariablesWithNumbersInTheirNames.java @@ -0,0 +1,103 @@ +import org.aspectj.testing.*; + +/** + * PR#490 + * Came from a bug from Svan Macke: + * + * Here is another problem that occured when I changed + * from aspectj0.8b3 to aspectj0.8b4. It seems that + * (under a very special condition) aspectJ has problems + * with the numbers that are appended to variable names + * inside the generated advice code. + * + * Here is the "special condition" where the error + * occured. I know the discussion about 'of eachobject' + * and I also know that in the following code it is + * absolutely unnecessary to use 'of eachobject' (don't + * ask me why I wrote such terrible code, I do not know + * it myself), but however, I think it is correct aspectj + * code and should therefore compile correctly. + * + * @since 2000.08.06 + * @author Jeff Palm + * @report 408 + */ +public class PerTargetAndVariablesWithNumbersInTheirNames { + public static void main(String[] args) { + new C(); + Tester.checkAllEvents(); + } + static { + Tester.expectEvent("Hello 1"); + Tester.expectEvent("World 2"); + Tester.expectEvent("Hello World around 1"); + Tester.expectEvent("Hello World around 2"); + Tester.expectEvent("Hello World around 3"); + Tester.expectEvent("Hello World around 4"); + } +} + +class C +{ + public C() + { + doSomething("Hello", "World"); + } + public void doSomething(String arg1, String arg2) + { + Tester.event(arg1 + " 1"); + Tester.event(arg2 + " 2"); + } +} + +/* + * A pertarget aspect. + */ +aspect A1 pertarget(target(C)) { + void around(String arg1, String arg2): + target(C) && + call(public void doSomething(String,String)) && + args(arg1, arg2) { + Tester.event(arg1 + " " + arg2 + " around 1"); + proceed(arg1, arg2); + } +} + +/* + * Another pertarget aspect. + */ +aspect A2 pertarget(target(C)) { + void around(String arg1, String arg2): + target(C) && + call(public void doSomething(String,String)) && + args(arg1, arg2) { + Tester.event(arg1 + " " + arg2 + " around 2"); + proceed(arg1, arg2); + } +} + +/* + * A 'static' aspect. + */ +aspect A3 { + void around(String arg1, String arg2): + target(C) && + call(public void doSomething(String,String)) && + args(arg1, arg2) { + Tester.event(arg1 + " " + arg2 + " around 3"); + proceed(arg1, arg2); + } +} + +/* + * Another 'static' aspect. + */ +aspect A4 { + void around(String arg1, String arg2): + target(C) && + call(public void doSomething(String,String)) && + args(arg1, arg2) { + Tester.event(arg1 + " " + arg2 + " around 4"); + proceed(arg1, arg2); + } +} diff --git a/tests/new/PointcutFormals.java b/tests/new/PointcutFormals.java new file mode 100644 index 000000000..d50de023c --- /dev/null +++ b/tests/new/PointcutFormals.java @@ -0,0 +1,41 @@ +import org.aspectj.testing.*; + +public class PointcutFormals { + public static void main(String[] args) { + new PointcutFormals().call(0); + Tester.checkAllEvents(); + } + void call(int i) {} + + static { + String[] cuts = { "calls_pc", "receptions_pc", "executions_pc" }; + String[] kinds = { "before", "after", "around" }; + for (int i = 0; i < cuts.length; i++) { + for (int j = 0; j < kinds.length; j++) { + Tester.expectEvent(kinds[j] + "." + cuts[i]); + } + } + } +} + +aspect Aspect { + pointcut calls_pc (): call(void *.call(int)) && within(PointcutFormals); + pointcut receptions_pc(): call(void PointcutFormals.call(int)); + pointcut executions_pc(): execution(void *(int)); + + before(): calls_pc () { a("before.calls_pc"); } + before(): receptions_pc() { a("before.receptions_pc"); } + before(): executions_pc() { a("before.executions_pc"); } + + after(): calls_pc () { a("after.calls_pc"); } + after(): receptions_pc() { a("after.receptions_pc"); } + after(): executions_pc() { a("after.executions_pc"); } + + around() returns void: calls_pc () { a("around.calls_pc"); proceed(); } + around() returns void: receptions_pc() { a("around.receptions_pc"); proceed(); } + around() returns void: executions_pc() { a("around.executions_pc"); proceed(); } + + void a(Object msg) { + Tester.event(msg); + } +} diff --git a/tests/new/PointcutQualification.java b/tests/new/PointcutQualification.java new file mode 100644 index 000000000..446bf59f1 --- /dev/null +++ b/tests/new/PointcutQualification.java @@ -0,0 +1,36 @@ +import org.aspectj.testing.Tester; + +public class PointcutQualification { + public static void main(String[] args) { + Tester.expectEvent("before pc_reference"); + new TargetClass().doit(); + Tester.checkAllEvents(); + } +} + +class I { + public static final void got(String s) { + Tester.event(s); + } +} + +class TargetClass{ void doit(){}} + +aspect DebugAspect { // incorrect compiler error here + before() : Aspect.pc_reference() { I.got("before pc_reference");} +} + +aspect Aspect { + + pointcut pc_notfound() + : execution(void TargetClass.doit()) ; + + pointcut someCallCflow() + : !within(Aspect) && !within(DebugAspect) && !within(I) + //&& cflow(Aspect.pc_notfound()) ; // workaround + && cflow(pc_notfound()) ; // bug: unqualified reference in DebugAspect context + + pointcut pc_reference() : someCallCflow(); +} + + diff --git a/tests/new/PointcutQualification2.java b/tests/new/PointcutQualification2.java new file mode 100644 index 000000000..63568aa3c --- /dev/null +++ b/tests/new/PointcutQualification2.java @@ -0,0 +1,33 @@ +import org.aspectj.testing.Tester; + +public class PointcutQualification2 { + public static void main(String[] args) { + Tester.expectEvent("before pc_reference2"); + new TargetClass().doit(); + Tester.checkAllEvents(); + } +} + +class I { + public static final void got(String s) { + Tester.event(s); + } +} + +class TargetClass{ void doit(){}} + +aspect DebugAspect2 { // incorrect compiler error here + before() : Aspect2.pc_reference2() { I.got("before pc_reference2");} +} + +aspect Aspect2 { + + pointcut pc_notfound2() + : execution(void TargetClass.doit()) ; + + //pointcut anotherRef() : Aspect2.pc_notfound2(); // workaround + pointcut anotherRef() : pc_notfound2(); + + pointcut pc_reference2() : anotherRef(); +} + diff --git a/tests/new/PreInitialization.java b/tests/new/PreInitialization.java new file mode 100644 index 000000000..a4e447667 --- /dev/null +++ b/tests/new/PreInitialization.java @@ -0,0 +1,26 @@ +import org.aspectj.testing.Tester; + +public class PreInitialization { + PreInitialization() { + this(PreInitialization.interestingCall()); + } + PreInitialization(int ignored) { + } + + public static void main(String[] args) { + new PreInitialization(); + Tester.checkEvents(new String[] {"before advice ran"}); + } + static int interestingCall() { + // do something interesting + return 3; + } +} + +aspect A { + before(): call(int PreInitialization.interestingCall()) { + Tester.checkEqual(thisEnclosingJoinPointStaticPart.getKind(), + "preinitialization"); + Tester.event("before advice ran"); + } +} diff --git a/tests/new/PrivateIntro.java b/tests/new/PrivateIntro.java new file mode 100644 index 000000000..c82474b22 --- /dev/null +++ b/tests/new/PrivateIntro.java @@ -0,0 +1,40 @@ +import org.aspectj.testing.Tester; + +public class PrivateIntro { + public static void test() { + Tester.checkEqual(new A1().getWhere(), "A1", "from A1"); + Tester.checkEqual(new A2().getWhere(), "A2", "from A2"); + + } + + public static void main(String[] args) { + test(); + } +} + + +class A1 { + private introduction Foo { + String fromWhere() { + return "A1"; + } + } + + public String getWhere() { + return new Foo().fromWhere(); + } +} + +class A2 { + private introduction Foo { + String fromWhere() { + return "A2"; + } + } + + public String getWhere() { + return new Foo().fromWhere(); + } +} + +class Foo {} diff --git a/tests/new/PrivateMethodOnInnerInterface.java b/tests/new/PrivateMethodOnInnerInterface.java new file mode 100644 index 000000000..f6e11d732 --- /dev/null +++ b/tests/new/PrivateMethodOnInnerInterface.java @@ -0,0 +1,36 @@ + +import org.aspectj.testing.Tester; + +/** @testcase PR#823 private abstract method declared on inner interface */ +public class PrivateMethodOnInnerInterface { + + public static void main(String[] args) { + new C(); + Tester.expectEvent("method"); + Tester.checkAllEvents(); + // XXX CF test that method is not visible here + } +} + +class C { } + +abstract aspect A { + // no bug unless not member of the same aspect + interface I {} + interface J extends I{} +} +aspect B extends A { + + declare parents : C implements J; + private abstract int I.privateMethod(); + + private int C.privateMethod() { + Tester.event("method"); + return 0; + } + after(I i) returning : target(i) && initialization(I.new()) { + i.privateMethod(); + } +} + + diff --git a/tests/new/Privileged.java b/tests/new/Privileged.java new file mode 100644 index 000000000..91fb6c4b5 --- /dev/null +++ b/tests/new/Privileged.java @@ -0,0 +1,26 @@ +import org.aspectj.testing.*; + +privileged aspect PrivilegedAspect { + public void OtherClass.foo() { + Tester.event("foo.intro"); + } +} + +class OtherClass { +} + +public class Privileged { + public static void main(String[] args) { + new Privileged().go(); + } + + static { + Tester.expectEventsInString("foo.intro,foo.done,foo.called"); + } + + void go() { + Tester.event("foo.called"); + new OtherClass().foo(); + Tester.event("foo.done"); + } +} diff --git a/tests/new/PublicClassWrongFilename.java b/tests/new/PublicClassWrongFilename.java new file mode 100644 index 000000000..85d443a5d --- /dev/null +++ b/tests/new/PublicClassWrongFilename.java @@ -0,0 +1,5 @@ + +/** no warning that file not called "TargetClass" */ +public class TargetClass { + public static void main(String[] args) { } +} diff --git a/tests/new/QualifiedSuperCall.java b/tests/new/QualifiedSuperCall.java new file mode 100644 index 000000000..c25fd3be8 --- /dev/null +++ b/tests/new/QualifiedSuperCall.java @@ -0,0 +1,93 @@ + +import org.aspectj.testing.*; + +// todo: package-qualified calls +/** PR651 PUREJAVA qualified super method calls */ +public class QualifiedSuperCall { + public static void main (String[] args) { + Super s; + s = new Super(); + Tester.check(null != s, "new Super()"); + s = new Sub(); + Tester.check(null != s, "new Sub()"); + s = new UnqualifiedSub(); + Tester.check(null != s, "new UnqualifiedSub()"); + s = new SubSub(); + Tester.check(null != s, "new SubSub()"); + s = new UnqualifiedSubSub(); + Tester.check(null != s, "new UnqualifiedSubSub()"); + s = new Mid(); + Tester.check(null != s, "new Mid()"); + s = new SubMid(); + Tester.check(null != s, "new SubMid()"); + s = new UnqualifiedSubMid(); + Tester.check(null != s, "new UnqualifiedSubMid()"); + } + static { + Tester.m("Super.duper=Sub()"); + Tester.m("Super.duper=UnqualifiedSub()"); + Tester.m("Super.duper=SubSub()"); + Tester.m("Super.duper=UnqualifiedSubSub()"); + Tester.m("Super.duper=SubMid()"); + Tester.m("Mid.duper=SubMid()"); + Tester.m("Mid.duper=UnqualifiedSubMid()"); + } + +} + +class Super { + Super() {} + void duper(String caller) { + Tester.event("Super.duper=" + caller); + } +} + +class Sub extends Super { + Sub() { + Super.super(); + Super.super.duper("Sub()"); + } +} +class UnqualifiedSub extends Super { + UnqualifiedSub() { + super(); + super.duper("UnqualifiedSub()"); + } +} + +class SubSub extends Sub { + SubSub() { + Sub.super(); + Sub.super.duper("SubSub()"); + } +} +class UnqualifiedSubSub extends UnqualifiedSub { + UnqualifiedSubSub() { + super(); + super.duper("UnqualifiedSubSub()"); + } +} + +class Mid extends Super { + Mid() { } + void duper(String caller) { + Tester.event("Mid.duper=" + caller); + } +} + +class SubMid extends Mid { + SubMid() { + Mid.super(); // XXX illegal ordering? + Super.super(); + Super.super.duper("SubMid()"); + Mid.super.duper("SubMid()"); + } +} +class UnqualifiedSubMid extends Mid { + UnqualifiedSubMid() { + super(); + super.duper("UnqualifiedSubMid()"); + } +} + + diff --git a/tests/new/RecognizeAspectCE.java b/tests/new/RecognizeAspectCE.java new file mode 100644 index 000000000..a84effb04 --- /dev/null +++ b/tests/new/RecognizeAspectCE.java @@ -0,0 +1,7 @@ +// PR#457 +class RecognizeAspectCE { + public static void main(String[] ignore) { } + pointcut mumble() // would like error here: "pointcuts not allowed in classes - use aspect" + : execution(public static void RecognizeAspectCE.main(String[])); + before(): mumble() { } // ok: get error here: constructor has the wrong name +} diff --git a/tests/new/ReferringToPointcutsInAspect_PR316.java b/tests/new/ReferringToPointcutsInAspect_PR316.java new file mode 100644 index 000000000..de1306450 --- /dev/null +++ b/tests/new/ReferringToPointcutsInAspect_PR316.java @@ -0,0 +1,20 @@ +import org.aspectj.testing.Tester; +public class ReferringToPointcutsInAspect_PR316 { + public static void main(String[] args) { + new C().f(); + Tester.checkAllEvents(); + } + static { + Tester.expectEvent("void-f"); + Tester.expectEvent("before-f"); + } +} + +class C { + public void f() { Tester.event("void-f"); } +} + +aspect A /*of eachobject(i())*/ { + pointcut i(): target(C); + before(): i() && execution(* f(..)) { Tester.event("before-f"); } +} diff --git a/tests/new/RemovingFinals.java b/tests/new/RemovingFinals.java new file mode 100644 index 000000000..5a1e14b37 --- /dev/null +++ b/tests/new/RemovingFinals.java @@ -0,0 +1,33 @@ +import org.aspectj.testing.Tester; +import java.lang.reflect.*; +public class RemovingFinals { + public static void main(String[] args) { + new RemovingFinals().realMain(args); + } + public void realMain(String[] args) { + try { + Tester.check((C.class.getField("public_i").getModifiers() + & Modifier.FINAL) != 0, "public_i is not final"); + } catch (Throwable t) { + Tester.throwable(t); + } + } +} + +class C { + public final int public_i = 1; + static int x = 2; + + private final int CONST = 0; + public void m() { + switch(x) { + case (CONST): System.out.println("no"); + } + } +} + +// make things a little difficult +aspect A { + before(): staticinitialization(C) { new StringBuffer().append(thisJoinPoint); } + before(): execution(C.new(..)) { new StringBuffer().append(thisJoinPoint); } +} diff --git a/tests/new/RestrictingVisibilityCF.java b/tests/new/RestrictingVisibilityCF.java new file mode 100644 index 000000000..429590e48 --- /dev/null +++ b/tests/new/RestrictingVisibilityCF.java @@ -0,0 +1,62 @@ +import org.aspectj.testing.Tester; + +/** @testcase PR#536 expecting compile failures with subclass narrowing scope of superclass methods or accessing private superclass variables */ +public class RestrictingVisibilityCF { + public static void main(String[] args) { + Tester.check(false, "compile should fail"); + } +} + +class Parent { + public int publicAccess; + protected int protectedAccess; + int defaultAccess; + private int privateAccess; + + public void publicAccess() {} + protected void protectedAccess() {} + void defaultAccess() {} + private void privateAccess() {} + void drivePrivateAccess() { + privateAccess(); + } +} + +class InValidChild extends Parent { + /** @testcase subclass private implementation of public method */ + private void publicAccess() { } // errLine 27 + /** @testcase subclass private implementation of method with default access */ + private void defaultAccess() { } // errLine 29 + /** @testcase subclass private implementation of protected method */ + private void protectedAccess() { } // errLine 31 + + // todo: sep package, attempt package acces + int defaultAccessSub = defaultAccess; +} + +class InValidChild2 extends Parent { + /** @testcase subclass private implementation of method with default access */ + private void defaultAccess() { } // errLine 39 + /** @testcase subclass protected implementation of public method */ + protected void publicAccess() { } // errLine 41 +} + +class InValidChild3 extends Parent { + /** @testcase subclass default implementation of method with protected access */ + void protectedAccess() { } // errLine 46 + /** @testcase subclass default implementation of public method */ + void publicAccess() { } // errLine 48 +} + +class InValidChild4 extends Parent { + /** @testcase private access members unavailable in subclass */ + private int foo = new Parent().privateAccess; // errLine 53 +} + +// /** todo: separate package test */ +// class Invalid { +// /** @testcase default access members unavailable from separate package */ +// private int bar = new Parent().defaultAccess; +// /** @testcase protected access members unavailable from separate package */ +// private int foo = new Parent().protectedAccess; +// } diff --git a/tests/new/RestrictingVisibilityCP.java b/tests/new/RestrictingVisibilityCP.java new file mode 100644 index 000000000..0b9641fac --- /dev/null +++ b/tests/new/RestrictingVisibilityCP.java @@ -0,0 +1,211 @@ +import org.aspectj.testing.Tester; + +/** @testcase PR#536 overriding subclass method may be protected when superclass method has default access */ +public class RestrictingVisibilityCP { + public static void main(String[] args) { + Tester.expectEventsInString(Const.EXPECTED); + Parent[] tests = new Parent[] + { new Parent() + , new ValidChild() + , new ValidChild2() + , new ValidChild3() + , new ValidChildTest() + , new ValidChildTest2() + , new ValidChildTest3() + }; + Parent child; + for (int i = 0; i< tests.length;i++) { + child = tests[i]; + Tester.event(child.getClass().getName()); + //System.err.println(", \"" + child.getClass().getName() + "\""); + child.publicAccess(); + child.defaultAccess(); + child.protectedAccess(); + child.drivePrivateAccess(); + } + Tester.checkAllEvents(); + } +} +/** aspect used to log progess - test case otherwise purejava */ +aspect LogAll { + before() : within(Parent+) && execution(* *(..)) { + String name = thisJoinPointStaticPart.toString(); + Tester.event(name); + // System.err.println(", \"" + name + "\""); + } +} +class Parent { + public int publicAccess = 1; + protected int protectedAccess = 1; + int defaultAccess = 1; + private int privateAccess = 1; + + public void publicAccess() {} + protected void protectedAccess() {} + void defaultAccess() {} + private void privateAccess() {} + void drivePrivateAccess() { + privateAccess(); + } +} + +class ValidChild extends Parent { + + /** @testcase subclass public implementation of public method */ + public void publicAccess() { super.publicAccess(); } + /** @testcase subclass protected implementation of protected method */ + protected void protectedAccess() { super.protectedAccess(); } + /** @testcase subclass default implementation of default method */ + void defaultAccess() { super.defaultAccess(); } + /** @testcase subclass implementation of private method - not overriding */ + private void privateAccess() { } + void drivePrivateAccess() { + privateAccess(); + super.drivePrivateAccess(); + } + + int publicAccessSub = publicAccess; + int protectedAccessSub = protectedAccess; + int defaultAccessSub = defaultAccess; +} + +class ValidChild2 extends Parent { + /** @testcase subclass public implementation of protected method */ + public void protectedAccess() { super.protectedAccess(); } + /** @testcase subclass public implementation of default method */ + public void defaultAccess() { super.defaultAccess(); } +} + +class ValidChild3 extends Parent { + /** @testcase subclass protected implementation of default method */ + // todo: restore to restore ce + protected void defaultAccess() { super.defaultAccess(); } +} + +class ValidChildTest extends ValidChild { + /** @testcase subsubclass public implementation of public method */ + public void publicAccess() { super.publicAccess(); } + /** @testcase subsubclass protected implementation of protected method */ + protected void protectedAccess() { super.protectedAccess(); } + /** @testcase subsubclass default implementation of default method */ + void defaultAccess() { super.defaultAccess(); } + /** @testcase subsubclass implementation of private method - not overriding */ + private void privateAccess() { } + void drivePrivateAccess() { + privateAccess(); + super.drivePrivateAccess(); + } +} +class ValidChildTest2 extends ValidChild { + /** @testcase subsubclass public implementation of protected method */ + public void protectedAccess() { super.protectedAccess(); } + /** @testcase subsubclass public implementation of default method */ + public void defaultAccess() { super.defaultAccess(); } +} +class ValidChildTest3 extends ValidChild { + /** @testcase PR#536 subsubclass protected implementation of default method */ + // todo protected void defaultAccess() { super.defaultAccess(); } +} +class ValidChild5 extends Parent { + int one = publicAccess; + int two = protectedAccess; + int three = defaultAccess; +} +class ValidClass { + static int[] ra; + static { + ra = new int[] + { (new Parent()).publicAccess + , (new ValidChild()).publicAccess + , (new ValidChildTest()).publicAccess + , (new Parent()).defaultAccess + , (new ValidChild()).defaultAccess + , (new ValidChildTest()).defaultAccess + , (new Parent()).protectedAccess + , (new ValidChild()).protectedAccess + , (new ValidChildTest()).protectedAccess + }; + for (int i = 0; i < ra.length; i++) { + Tester.check(1 == ra[i], + "expected 1 at " + i + " got i" + ra[i]); + } + } +} + +class Const { + public static final String[] EXPECTED = new String[] + { "Parent" + , "execution(void Parent.publicAccess())" + , "execution(void Parent.defaultAccess())" + , "execution(void Parent.protectedAccess())" + , "execution(void Parent.drivePrivateAccess())" + , "execution(void Parent.privateAccess())" + , "ValidChild" + , "execution(void ValidChild.publicAccess())" + , "execution(void Parent.publicAccess())" + , "execution(void ValidChild.defaultAccess())" + , "execution(void Parent.defaultAccess())" + , "execution(void ValidChild.protectedAccess())" + , "execution(void Parent.protectedAccess())" + , "execution(void ValidChild.drivePrivateAccess())" + , "execution(void ValidChild.privateAccess())" + , "execution(void Parent.drivePrivateAccess())" + , "execution(void Parent.privateAccess())" + , "ValidChild2" + , "execution(void Parent.publicAccess())" + , "execution(void ValidChild2.defaultAccess())" + , "execution(void Parent.defaultAccess())" + , "execution(void ValidChild2.protectedAccess())" + , "execution(void Parent.protectedAccess())" + , "execution(void Parent.drivePrivateAccess())" + , "execution(void Parent.privateAccess())" + , "ValidChild3" + , "execution(void Parent.publicAccess())" + , "execution(void ValidChild3.defaultAccess())" + , "execution(void Parent.defaultAccess())" + , "execution(void Parent.protectedAccess())" + , "execution(void Parent.drivePrivateAccess())" + , "execution(void Parent.privateAccess())" + , "execution(void ValidChildTest.publicAccess())" + , "execution(void ValidChild.publicAccess())" + , "execution(void Parent.publicAccess())" + , "ValidChildTest" + , "execution(void ValidChildTest.defaultAccess())" + , "execution(void ValidChild.defaultAccess())" + , "execution(void Parent.defaultAccess())" + , "execution(void ValidChildTest.protectedAccess())" + , "execution(void ValidChild.protectedAccess())" + , "execution(void Parent.protectedAccess())" + , "execution(void ValidChildTest.drivePrivateAccess())" + , "execution(void ValidChildTest.privateAccess())" + , "execution(void ValidChild.drivePrivateAccess())" + , "execution(void ValidChild.privateAccess())" + , "execution(void Parent.drivePrivateAccess())" + , "execution(void Parent.privateAccess())" + , "ValidChildTest2" + , "execution(void ValidChild.publicAccess())" + , "execution(void Parent.publicAccess())" + , "execution(void ValidChildTest2.defaultAccess())" + , "execution(void ValidChild.defaultAccess())" + , "execution(void Parent.defaultAccess())" + , "execution(void ValidChildTest2.protectedAccess())" + , "execution(void ValidChild.protectedAccess())" + , "execution(void Parent.protectedAccess())" + , "execution(void ValidChild.drivePrivateAccess())" + , "execution(void ValidChild.privateAccess())" + , "execution(void Parent.drivePrivateAccess())" + , "execution(void Parent.privateAccess())" + , "ValidChildTest3" + , "execution(void ValidChild.publicAccess())" + , "execution(void Parent.publicAccess())" + , "execution(void ValidChild.defaultAccess())" + , "execution(void Parent.defaultAccess())" + , "execution(void ValidChild.protectedAccess())" + , "execution(void Parent.protectedAccess())" + , "execution(void ValidChild.drivePrivateAccess())" + , "execution(void ValidChild.privateAccess())" + , "execution(void Parent.drivePrivateAccess())" + , "execution(void Parent.privateAccess())" + + }; +} diff --git a/tests/new/ScopesAndFields_PR191.java b/tests/new/ScopesAndFields_PR191.java new file mode 100644 index 000000000..f80ececa3 --- /dev/null +++ b/tests/new/ScopesAndFields_PR191.java @@ -0,0 +1,30 @@ +import org.aspectj.testing.Tester; +public class ScopesAndFields_PR191 { + public static void main(String[] args) { + new ScopesAndFields_PR191().realMain(args); + } + public void realMain(String[] args) { + C c = new C(); + c.a(); + Tester.checkEqual(c.c(), "C"); + Tester.checkEqual(c.c, "c"); + Tester.checkEqual(c.t(), "c"); + } +} + +class C { + public String c = "c"; + public String c() { + Object c = "C"; + return c+""; + } + public String t() { + Object c = "C"; + return this.c; + } + public void a() { + String c = "C"; + Tester.checkEqual(c+"", "C"); + Tester.checkEqual(this.c, "c"); + } +} diff --git a/tests/new/SerializedOf.java b/tests/new/SerializedOf.java new file mode 100644 index 000000000..fd58d8d71 --- /dev/null +++ b/tests/new/SerializedOf.java @@ -0,0 +1,42 @@ +import org.aspectj.testing.Tester; +import java.io.*; + + +public class SerializedOf { + public static void main(String[] args) throws Exception { + C c = new C(); + + Tester.check(ASer.hasAspect(c), "ASer on original"); + Tester.check(ANoSer.hasAspect(c), "ANoSer on original"); + + + File tmp = File.createTempFile("cdata", "ser"); + FileOutputStream ostream = new FileOutputStream(tmp); + ObjectOutputStream p = new ObjectOutputStream(ostream); + p.writeObject(c); + p.flush(); + ostream.close(); + + + FileInputStream istream = new FileInputStream(tmp); + ObjectInputStream p1 = new ObjectInputStream(istream); + C newC = (C)p1.readObject(); + istream.close(); + + Tester.check(ASer.hasAspect(newC), "ASer after read"); + Tester.check(!ANoSer.hasAspect(newC), "no ANoSer after read"); + } +} + +class C implements Serializable { + int data = 42; +} + + +aspect ASer implements Serializable pertarget(target(C)) { + int serData = 20; +} + +aspect ANoSer pertarget(target(C+)) { + int noSerData = 21; +} diff --git a/tests/new/SimpleGets.java b/tests/new/SimpleGets.java new file mode 100644 index 000000000..91feda005 --- /dev/null +++ b/tests/new/SimpleGets.java @@ -0,0 +1,76 @@ +import org.aspectj.testing.Tester; +import java.util.*; +import java.io.*; + +public class SimpleGets { + public static void main(String[] args) { + Test t = new Test(); + t.go(); + + System.out.println("s: " + t.s); + + Test.ss += "hi"; + + //Tester.checkEqual(Test.calls, ", Test.go->Test, Test.foo->java.io.PrintStream"); + } +} + + +class Test { + int x = 10; + String s = "string"; + String s1 = ""; + + static String ss = ""; + + Test getT() { + return new Test(); + } + + void go() { + System.out.println(x); + s = getT().s + ":went"; + Test.ss += "static"; + getT().s += ":more"; + Test t = this; + t.s1 += "xxx"; + + x += 10; + x++; + System.out.println(x + " == " + x--); + System.out.println(x + " == " + x++); + System.out.println(x-1 + " == " + --x); + } +} + +aspect NoteGets { + + static after(Test t) returning (Object v): gets(* t.*) { + System.out.println("got it: " + v + " from " + t + " at " + thisJoinPoint); + } + + static after(String v): sets(String Test.*)[v][] { + new Test().s += "gi"; + System.out.println("set: " + v + " at " + thisJoinPoint); + } + + static around(Object old, String v) returns String: sets(String Test.*)[old][v] { + new Test().s += "gi"; + System.out.println("around set: " + old + " --> " + v + " at " + thisJoinPoint); + return proceed(old, v+"-advised"); + } + + static after(): sets(int Test.x) { + int v = 0; + System.out.println("iset: " + v + " at " + thisJoinPoint); + } + + static after(Object v, Object old): sets(* Test.*)[old][v] { + System.out.println("oset: " + old + " -> " + v + " at " + thisJoinPoint); + } + + static after(): gets(PrintStream java.lang.*.*) { + System.out.println("got System.out"); + } + +} diff --git a/tests/new/SmallComment.java b/tests/new/SmallComment.java new file mode 100644 index 000000000..6886acd7a --- /dev/null +++ b/tests/new/SmallComment.java @@ -0,0 +1,13 @@ +import org.aspectj.testing.*; + +public class SmallComment { + public static void main(String[] args) { + new SmallComment().realMain(args); + } + + public void realMain(String[] args) { + /**/ + Tester.check(true, "Compiled"); + } +} + diff --git a/tests/new/SourceLocationCall.java b/tests/new/SourceLocationCall.java new file mode 100644 index 000000000..a1ab48eff --- /dev/null +++ b/tests/new/SourceLocationCall.java @@ -0,0 +1,58 @@ + +import org.aspectj.testing.Tester; +import org.aspectj.lang.*; + +/** @testcase PR#658 simple call join point tests for JoinPoint SourceLocation context */ +public class SourceLocationCall { + public static void main(String[] args) { + new SourceLocationCall().maincall(); + } + public void maincall(){} +} + +aspect Tracing { + static void check(String label, JoinPoint jp, JoinPoint.StaticPart sp) { +// System.err.println("checking " + label + " " + jp + " " + sp +// + " - " + jp.getSourceLocation() +// + " - " + sp.getSourceLocation() ); + if (null == jp) { + Tester.check(false, "null JoinPoint@" + label); + } else { + Tester.check(null != jp.getSourceLocation(), + "null jp source location@" + label); + } + if (null == sp) { + Tester.check(false, "null JoinPoint.StaticPart@"+label); + } else { + Tester.check(null != sp.getSourceLocation(), + "null sp source location@" + label); + } + } + pointcut trace1() + : call(void SourceLocationCall.maincall(..)); + // ok + //: within(SourceLocationCall) ; + //: cflow(execution(void SourceLocationCall.main(String[]))) && !within(Tracing) ; + //: within(SourceLocationCall) && call(* *(..)); + //: execution(* SourceLocationCall.*(..)); + //: call(void SourceLocationCall.main*(..)) && within(*); + // fail + //: call(void SourceLocationCall.main*(..)); + //: call(* SourceLocationCall.*(..)); + //: call(void SourceLocationCall.*(..)); + // same result for static calls and instance calls + // same result for before and after + before() : trace1() { + check("before() : trace1()", thisJoinPoint, thisJoinPointStaticPart); + } + after() : trace1() { + check("after() : trace1()", thisJoinPoint, thisJoinPointStaticPart); + } + + before(): call(void SourceLocationCall.main(..)) { + Tester.check(thisJoinPoint.getSourceLocation() == null, "main call"); + Tester.check(thisJoinPoint.getThis() == null, "main call"); + } +} + + diff --git a/tests/new/SourceLocationToString.java b/tests/new/SourceLocationToString.java new file mode 100644 index 000000000..143dd0c70 --- /dev/null +++ b/tests/new/SourceLocationToString.java @@ -0,0 +1,29 @@ + +import org.aspectj.testing.*; +import org.aspectj.lang.*; + +/** @rfe our SourceLocation implementation should implement toString as filename:column */ +public class SourceLocationToString { + public static final String EXPECT = "SourceLocationToString.java:9"; + public static void main (String[] args) { + docall(); // line 9 + Tester.checkAllEvents(); + } + static { + Tester.expectEvent("docall"); + } + static void docall() { + Tester.event("docall"); + } + static aspect A { + before () : call(void docall()) { + Tester.event("before"); + String sl = thisJoinPoint.getSourceLocation().toString(); + Tester.check(sl.endsWith(EXPECT), + "sl=\"" + sl + "\" did not end with \"" + + EXPECT + "\""); + } + } + +} + diff --git a/tests/new/SourceLocationWithinExpr.java b/tests/new/SourceLocationWithinExpr.java new file mode 100644 index 000000000..20352adea --- /dev/null +++ b/tests/new/SourceLocationWithinExpr.java @@ -0,0 +1,47 @@ + +import org.aspectj.testing.Tester; +import org.aspectj.lang.*; +import org.aspectj.lang.reflect.*; + +/** @testcase PR#885 call source locations within expression */ +public class SourceLocationWithinExpr { + public static void main (String[] args) { + new // 7* + C() // 8 + . // 9* + getD() // 10 + . // 11* + getE() // 12 + . // 13* + getF() // 14 + ; + Tester.expectEvent("setup"); + Tester.checkAllEvents(); + } +} +class C { D getD() { return new D(); } } +class D { E getE() { return new E(); } } +class E { F getF() { return new F(); } } +class F { } + +aspect A { + private static final String SEP = " - "; + static { + // using qualifying expr? + Tester.expectEvent("C()" + SEP + "7"); + Tester.expectEvent("getD()" + SEP + "9"); + Tester.expectEvent("getE()" + SEP + "11"); + Tester.expectEvent("getF()" + SEP + "13"); + Tester.event("setup"); + } + pointcut filter() : withincode(static void SourceLocationWithinExpr.main(String[])); + before() : filter() && call(C.new()) { signal("C()", thisJoinPoint); } + before() : filter() && call(D C.getD()) { signal("getD()", thisJoinPoint); } + before() : filter() && call(E D.getE()) { signal("getE()", thisJoinPoint); } + before() : filter() && call(F E.getF()) { signal("getF()", thisJoinPoint); } + void signal(String prefix, JoinPoint jp) { + SourceLocation sl = jp.getSourceLocation(); + System.out.println(prefix + SEP + sl.getLine()); + Tester.event(prefix + SEP + sl.getLine()); + } +} diff --git a/tests/new/StaticCalls.java b/tests/new/StaticCalls.java new file mode 100644 index 000000000..ca6c9a866 --- /dev/null +++ b/tests/new/StaticCalls.java @@ -0,0 +1,54 @@ +import org.aspectj.testing.Tester; + +public class StaticCalls { + public static void main(String args[]) { test(); } + + Object server = null; + + void run() { + Tester.checkEqual(StaticCalls.lookup("TimeService0"), + "TimeService0", + "untouched"); + Tester.checkEqual(StaticCalls.lookup("InterceptThis"), + "FromAround", + "touched"); + Tester.checkEqual(this.lookup("InterceptThis"), + "FromAround", + "this and touched"); + Tester.checkEqual(lookup("InterceptThis"), + "FromAround", + "lexical and touched"); + } + + public static void test() { + new StaticCalls().run(); + + Class c = Class.forName("java.lang.Foo"); + Tester.check(c == null, "intercepted exception and returned null"); + } + + static String lookup(String s){ + return s; + } +} + +aspect Aspect { + Object around(String s): + within(StaticCalls) && call(String StaticCalls.lookup(String)) && args(s) + { + if (s.equals("InterceptThis")) return "FromAround"; + else return proceed(s); + } + + pointcut classForName(): call(Class Class.forName(String)); + + declare soft: ClassNotFoundException: classForName(); + + Class around(): classForName() { + try { + return proceed(); + } catch (ClassNotFoundException e) { + return null; + } + } +} diff --git a/tests/new/StaticInitCE.java b/tests/new/StaticInitCE.java new file mode 100644 index 000000000..e13a9b47a --- /dev/null +++ b/tests/new/StaticInitCE.java @@ -0,0 +1,19 @@ + +public class StaticInitCE { + public static void main(String[] args) { + new C(); + } +} + +class C { C() { } } + +aspect A { + // PR#458 + void around(): staticinitialization(C) { + proceed(); + } + // PR#490 + void around(): initialization(C.new()) { + proceed(); + } +} diff --git a/tests/new/StaticInitName.java b/tests/new/StaticInitName.java new file mode 100644 index 000000000..657bd2ebb --- /dev/null +++ b/tests/new/StaticInitName.java @@ -0,0 +1,47 @@ + +import org.aspectj.testing.Tester; +import java.util.*; + +/** @testcase PR#771 static initializer member name */ +public class StaticInitName { + + public static void main(String[] args) { + Tester.expectEvent("C"); + Tester.event(""+C.class.getName()); + Tester.expectEvent("D"); + Tester.event(""+D.class.getName()); + Tester.checkAllEvents(); + } +} + +class C { + static int i = 1; +} + +class D { + static int i; + static { + i = 2; + } +} + +aspect A { + static { + Tester.expectEvent("before"); + Tester.expectEvent("before-D"); + } + + before() : within(C) && !set(* *) { + Tester.event("before"); + String memberName = thisJoinPoint.getSignature().getName(); + Tester.check("<clinit>".equals(memberName), + "\"<clinit>\".equals(\"" + memberName + "\")"); + } + + before() : within(D) && !set(* *) { + Tester.event("before-D"); + String memberName = thisJoinPoint.getSignature().getName(); + Tester.check("<clinit>".equals(memberName), + "\"<clinit>\".equals(\"" + memberName + "\")"); + } +} diff --git a/tests/new/StaticInnerAspect.java b/tests/new/StaticInnerAspect.java new file mode 100644 index 000000000..ee7e559ea --- /dev/null +++ b/tests/new/StaticInnerAspect.java @@ -0,0 +1,15 @@ +import org.aspectj.testing.*; + +public class StaticInnerAspect { + public static void main(String[] args) { + Tester.check(true, "compiled"); + } + +} + +aspect Aspect { + static class InnerClass { + static aspect InnerAspect { + } + } +} diff --git a/tests/new/StaticInnerInterfaces_PR386.java b/tests/new/StaticInnerInterfaces_PR386.java new file mode 100644 index 000000000..e7403e1a2 --- /dev/null +++ b/tests/new/StaticInnerInterfaces_PR386.java @@ -0,0 +1,36 @@ +import org.aspectj.testing.*; + +public class StaticInnerInterfaces_PR386 { + public static void main(String[] args) { + A a = new A(); + A.I ab = new C(); + C c = new C(); + D d = new D(); + a.go(); + ab.go(); + c.go(); + d.go(); + Tester.checkAllEvents(); + } + static { + Tester.expectEventsInString("A0,C1,C2,D3"); + } +} + +class B { + static int j = 0; +} + +class A { + public static interface I { void go(); } + public void go() { Tester.event("A" + (B.j++)); } + +} + +class C extends A implements I { + public void go() { Tester.event("C" + (B.j++)); } +} + +class D implements A.I { + public void go() { Tester.event("D" + (B.j++)); } +} diff --git a/tests/new/StaticIntroducedReferences.java b/tests/new/StaticIntroducedReferences.java new file mode 100644 index 000000000..223673d23 --- /dev/null +++ b/tests/new/StaticIntroducedReferences.java @@ -0,0 +1,14 @@ +public class StaticIntroducedReferences { +} + +abstract aspect SuperA { + static void m() {} + static int i = 0; +} + +aspect A extends SuperA { + public static void StaticIntroducedReferences.main(String[] args) { + i++; + m(); + } +} diff --git a/tests/new/StaticMethodsShouldNotReceiveInstanceofAdvice.java b/tests/new/StaticMethodsShouldNotReceiveInstanceofAdvice.java new file mode 100644 index 000000000..1bc6898a9 --- /dev/null +++ b/tests/new/StaticMethodsShouldNotReceiveInstanceofAdvice.java @@ -0,0 +1,44 @@ +import org.aspectj.testing.*; +import java.util.*; + +public class StaticMethodsShouldNotReceiveInstanceofAdvice { + public static void main(String[] args) { + ClassWithStaticMethods.staticMethod(); + Tester.checkAllEvents(); + } + static { + Tester.expectEventsInString("good0"); + } +} + +class ClassWithStaticMethods { + public static void staticMethod() {} +} + + +aspect PutsAdviceOnStaticMethods { + + static void bad(Object msg) { Tester.check(false, "Shouldn't have seen: " + msg); } + static void good(String msg) { Tester.event(msg); } + + // These shouldn't run + pointcut bad0(): this(ClassWithStaticMethods) && execution(void staticMethod()); + pointcut bad1(ClassWithStaticMethods c): this(c) && execution(void staticMethod()); + pointcut bad2(): target(ClassWithStaticMethods) && call(void staticMethod()); + pointcut bad3(ClassWithStaticMethods c): target(c) && call(void staticMethod()); + pointcut bad4(): target(*) && call(void ClassWithStaticMethods.staticMethod()); + pointcut bad5(ClassWithStaticMethods c): target(c) && call(void staticMethod()); + + before(): bad0() { bad("bad0:" + thisJoinPoint); } + before(ClassWithStaticMethods c): bad1(c) { bad("bad1:" + thisJoinPoint); } + before(): bad2() { bad("bad2:" + thisJoinPoint); } + before(ClassWithStaticMethods c): bad3(c) { bad("bad3:" + thisJoinPoint); } + before(): bad4() { bad("bad4:" + thisJoinPoint); } + before(ClassWithStaticMethods c): bad5(c) { bad("bad5:" + thisJoinPoint); } + + // This should run + pointcut good0(): execution(void ClassWithStaticMethods.staticMethod()); + + before(): good0() { good("good0"); } + +} diff --git a/tests/new/StaticTypeInIf.java b/tests/new/StaticTypeInIf.java new file mode 100644 index 000000000..cc2a8087b --- /dev/null +++ b/tests/new/StaticTypeInIf.java @@ -0,0 +1,65 @@ +import org.aspectj.testing.Tester; + +// we want to be doing tests based on dynamic type in if +public class StaticTypeInIf { + public static void main(String[] args) { + D d = new D(); + C c = new C(); + + c.foo(c); + Tester.checkAndClearEvents(new String[] {}); + + A.setF(d, false); + c.foo(d); + Tester.checkAndClearEvents(new String[] {}); + A.setF(d, true); + c.foo(d); + Tester.checkAndClearEvents(new String[] {"args"}); + + A.setF(d, false); + d.foo(c); + Tester.checkAndClearEvents(new String[] {}); + A.setF(d, true); + d.foo(c); + Tester.checkAndClearEvents(new String[] {"this", "target"}); + + A.setF(d, false); + d.foo(d); + Tester.checkAndClearEvents(new String[] {}); + A.setF(d, true); + d.foo(d); + Tester.checkAndClearEvents(new String[] {"args", "this", "target"}); + + } + +} + +class C { + void foo(C c) {} +} + +class D extends C { + void foo(C c) {} +} + + +aspect A { + private boolean D.f = false; + + static void setF(D d, boolean b) { d.f = b; } + + pointcut foo(D d): call(void C.foo(C)) && target(d) && if(d.f); + + before (C c): foo(c) { + Tester.event("target"); + } + + before (D d): if(d.f) && call(void C.foo(C)) && args(d) { + Tester.event("args"); + + } + + before (D d): execution(void C.foo(C)) && this(d) && if(d.f) { + Tester.event("this"); + } +} diff --git a/tests/new/StrictFPAdvice.java b/tests/new/StrictFPAdvice.java new file mode 100644 index 000000000..af9b6bcea --- /dev/null +++ b/tests/new/StrictFPAdvice.java @@ -0,0 +1,22 @@ +import org.aspectj.testing.Tester; + +public class StrictFPAdvice { + public static void main(String[] args) { + m(2.0); + } + + static double m(double a) { return a; } +} + +aspect A { + pointcut points(double d): call(double StrictFPAdvice.m(double)) && args(d); + + strictfp before(double d): points(d) { + //XXX insert a test here that this body really is strictfp + } + + strictfp double around(double d): points(d) { + //XXX insert a test here that this body really is strictfp + return proceed(d); + } +} diff --git a/tests/new/StrictFp.java b/tests/new/StrictFp.java new file mode 100644 index 000000000..d9113a0ae --- /dev/null +++ b/tests/new/StrictFp.java @@ -0,0 +1,14 @@ +import org.aspectj.testing.*; + +public strictfp class StrictFp { + public static void main(String[] args) { + new StrictFp().go(); + Tester.check(ran, "go did not run"); + } + + static boolean ran = false; + + void go() { + ran = true; + } +} diff --git a/tests/new/StrictFpCErr1.java b/tests/new/StrictFpCErr1.java new file mode 100644 index 000000000..ff07b43be --- /dev/null +++ b/tests/new/StrictFpCErr1.java @@ -0,0 +1,4 @@ +strictfp interface StrictInterfaceBadFunction { + // Has to be error, may not generate strictfp, but has to set strictfp in bytecode + strictfp float test1(); +}; diff --git a/tests/new/StrictFpCErr2.java b/tests/new/StrictFpCErr2.java new file mode 100644 index 000000000..919069e06 --- /dev/null +++ b/tests/new/StrictFpCErr2.java @@ -0,0 +1,4 @@ +strictfp abstract class StrictClassBadField { + // Has to be an error + strictfp float f; +}; diff --git a/tests/new/StrictFpCErr3.java b/tests/new/StrictFpCErr3.java new file mode 100644 index 000000000..f4fb5acd4 --- /dev/null +++ b/tests/new/StrictFpCErr3.java @@ -0,0 +1,5 @@ +strictfp abstract class StrictClassBadConstructor { + // Has to be error, may not generate strictfp, but has to set strictfp in bytecode + strictfp StrictClassBadConstructor() {} +}; + diff --git a/tests/new/StrictFpCompile.java b/tests/new/StrictFpCompile.java new file mode 100644 index 000000000..2efe0c9d8 --- /dev/null +++ b/tests/new/StrictFpCompile.java @@ -0,0 +1,82 @@ +import org.aspectj.testing.*; + +public strictfp class StrictFpCompile { + public static void main(String[] args) { + new StrictFpCompile().go(); + Tester.check(ran, "go did not run"); + } + + static boolean ran = false; + + void go() { + ran = true; + } +} + + +// Ok, must be generated with strictfp modifier +strictfp interface StrictInterface { + // Has to be error, may not generate strictfp, but has to set strictfp in bytecode + // strictfp float test1(); + + // Ok, may not be generated with strictfp modifier + float test2(); +}; + +// Ok, must be generated with strictfp modifier +strictfp abstract class StrictClass { + // Has to be an error + // strictfp float f; + + // Ok + double d; + + // Has to be error, may not generate strictfp, but has to set strictfp in bytecode + // strictfp StrictClass() {} + + // Ok, must not generate strictfp, but has to set strictfp in bytecode + StrictClass(double _d) { d = _d; } + + // Ok, may be generated with strictfp modifier + abstract float test1(); + + // Ok, may be generated with strictfp modifier + float test2() { return 0.f; } + + // Ok, may be generated with strictfp modifier + strictfp float test3() { return 0.f; } + + // Ok, may be generated with strictfp modifier + strictfp static float test4() { return 0.f; } + +}; + +// Ok, may not be generated with strictfp modifier +class NonStrictClass { + // Ok + NonStrictClass() {} + + // Ok, may not be generated with strictfp modifier + float test2() { return 0.f; } + + // Ok, must be generated with strictfp modifier + strictfp float test3() { return 0.f; } + + // Ok, must be generated with strictfp modifier + strictfp static float test4() { return 0.f; } + +}; + +// Ok +strictfp class OuterStrictClass { + + // Ok, may be generated with strictfp modifier + class InnerStrictClass { + + // Ok, may be generated with strictfp modifier + class InnerInnerClass { + } + } + +}; + diff --git a/tests/new/StrictFpReceptions.java b/tests/new/StrictFpReceptions.java new file mode 100644 index 000000000..d3914025f --- /dev/null +++ b/tests/new/StrictFpReceptions.java @@ -0,0 +1,82 @@ +import org.aspectj.testing.*; + +public class StrictFpReceptions { + // reception counter + static int r_counter = 0; + // call counter + static int c_counter = 0; + + public static void main(String[] args) { + StrictClass s = new StrictClass(); + StrictClassAbstract sa = s; + + cleanup(); + s.test1(); + Tester.check + (r_counter==1 && c_counter==1, + "test1 method call, " + + "counters="+r_counter+","+c_counter); + + cleanup(); + sa.test2(); + Tester.check + (r_counter==0 && c_counter==0, + "test2 method call, " + + "counters="+r_counter+","+c_counter); + + cleanup(); + sa.test3(); + Tester.check + (r_counter==1 && c_counter==1, + "test3 method call, " + + "counters="+r_counter+","+c_counter); + + cleanup(); + sa.test4(); + Tester.check + (r_counter==1 && c_counter==1, + "test4 static method call, " + + "counters="+r_counter+","+c_counter); + + cleanup(); + sa.test5(); + Tester.check + (r_counter==0 && c_counter==0, + "test5 static method call, " + + "counters="+r_counter+","+c_counter); + + } + + private static void cleanup() { + r_counter = c_counter = 0; + } + +} + +aspect StrictFpWatcher { + pointcut r_strict() : execution(strictfp * *(..)); + pointcut c_strict() : call(strictfp * *.*(..)); + + before() : r_strict() { StrictFpReceptions.r_counter++; } + before() : c_strict() { StrictFpReceptions.c_counter++; } +} + + +abstract class StrictClassAbstract { + float f; + double d; + StrictClassAbstract() {} + StrictClassAbstract(double _d) { d = _d; } + public abstract float test1(); + public float test2() { return 0.f; } + public strictfp float test3() { return 0.f; } + public static strictfp float test4() { return 0.f; } + public static float test5() { return 0.f; } + +}; + +strictfp class StrictClass extends StrictClassAbstract { + public float test1() { return 0.f; } + +} + diff --git a/tests/new/SuperDisambiguatingType.java b/tests/new/SuperDisambiguatingType.java new file mode 100644 index 000000000..b94223f41 --- /dev/null +++ b/tests/new/SuperDisambiguatingType.java @@ -0,0 +1,61 @@ +import org.aspectj.testing.*; + + +/** @testcase PUREJAVA super reference used to disambiguate names of different but compatible types */ +public class SuperDisambiguatingType { + public static void main (String[] args) { + new Sub().test(); + Tester.checkAllEvents(); + } + static { + Tester.expectEvent("test"); + } +} + + +interface I { } +class C { } +class IClass implements I { } +class CClass extends C { } + +class Super { + protected C fieldC; + protected I fieldI; +} + +class Sub extends Super { + // hiding super + protected CClass fieldC; + protected IClass fieldI; + protected Integer intField; + public void test() { + testC(); + testI(); + Tester.event("test"); + } + public void testC() { + super.fieldC = (C) (fieldC = new CClass()); + checkC("super.fieldC = (C) (fieldC = new CClass())"); + super.fieldC = (C) fieldC; + checkC("super.fieldC = (C) fieldC"); + super.fieldC = fieldC; + checkC("super.fieldC = fieldC"); + } + private final void checkC(String label) { + Tester.check(null != fieldC, label + "null != fieldC"); + Tester.check(super.fieldC == fieldC, label + "super.fieldC == fieldC"); + } + public void testI() { + super.fieldI = (I) (fieldI = new IClass()); + checkI("super.fieldI = (I) (fieldI = new IClass())"); + super.fieldI = (I) fieldI; + checkI("super.fieldI = (I) fieldI"); + super.fieldI = fieldI; + checkI("super.fieldI = fieldI"); + } + private final void checkI(String label) { + Tester.check(null != fieldI, label + "null != fieldI"); + Tester.check(super.fieldI == fieldI, label + "super.fieldI == fieldI"); + } +} + diff --git a/tests/new/SuperField.java b/tests/new/SuperField.java new file mode 100644 index 000000000..be80b3bd8 --- /dev/null +++ b/tests/new/SuperField.java @@ -0,0 +1,76 @@ +import org.aspectj.testing.Tester; + +public class SuperField { + public static void main(String[] args) { + Derived d = new Derived(); + Tester.checkAndClearEvents(new String[] { + "set Base on <Derived>", + "set Derived on <Derived>", + }); + d.m1(); + Tester.checkAndClearEvents(new String[] { + "get Derived on <Derived>", + "Derived", + }); + d.m2(); + Tester.checkAndClearEvents(new String[] { + "get Derived on <Derived>", + "Derived", + }); + d.m3(); + Tester.checkAndClearEvents(new String[] { + "get Base on <Derived>", + "Base", + }); + d.m4(); + Tester.checkAndClearEvents(new String[] { + "get Base on <Derived>", + "set BaseNew on <Derived>", + "get BaseNew on <Derived>", + "BaseNew", + }); + Tester.printEvents(); + } +} + +class Base { + String s = "Base"; + public String toString() { return "<Base>"; } +} + +class Derived extends Base { + String s = "Derived"; + + + void m1() { + Tester.event(s); + } + + void m2() { + Tester.event(this.s); + } + + void m3() { + Tester.event(super.s); + } + + void m4() { + super.s += "New"; + + Tester.event(super.s); + } + + public String toString() { return "<Derived>"; } +} + +aspect A { + after(Object o) returning (String v): target(o) && get(String s) { + Tester.event("get " + v + " on " + o); + } + + before(Object o, String v): target(o) && set(String s) && args(v) { + Tester.event("set " + v + " on " + o); + } + + +} diff --git a/tests/new/SuperInIntroduction.java b/tests/new/SuperInIntroduction.java new file mode 100644 index 000000000..6c101507a --- /dev/null +++ b/tests/new/SuperInIntroduction.java @@ -0,0 +1,61 @@ + +import org.aspectj.testing.Tester; + +public class SuperInIntroduction { + public static void main (String[] args) { + int result = new Sub().getInt(); + Tester.check(8==result, "new Sub().getInt() !8==" + result); + ObjectSub sb = new ObjectSub().getClone(); + Tester.check(null != sb, "null new ObjectSub().getClone()"); + sb = new ObjectSub().getSuperClone(); + Tester.check(null != sb, "null new ObjectSub().getSuperClone()"); + } +} + +class Super { + protected int protectedInt = 1; + protected int protectedIntMethod() { return protectedInt; } + int defaultInt = 1; + int defaultIntMethod() { return defaultInt; } +} + +class Sub extends Super { } +class ObjectSub { } + +aspect A { + /** @testcase accessing protected method and field of class within code the compiler controls */ + public int Sub.getInt() { + int result; + result = super.protectedInt; + result += super.protectedIntMethod(); + result += protectedInt; + result += protectedIntMethod(); + result += defaultInt; + result += defaultIntMethod(); + result += super.defaultInt; + result += super.defaultIntMethod(); + return result; + } + + /** @testcase accessing protected method of class outside code the compiler controls */ + public ObjectSub ObjectSub.getClone() { + try { + Object result = clone(); + return (ObjectSub) result; + } catch (CloneNotSupportedException e) { + return this; + } + } + + /** @testcase using super to access protected method of class outside code the compiler controls */ + public ObjectSub ObjectSub.getSuperClone() { + ObjectSub result = null; + try { + result = (ObjectSub) super.clone(); + Tester.check(false, "expecting CloneNotSupportedException"); + } catch (CloneNotSupportedException e) { + result = this; // bad programming - ok for testing + } + return result; + } +} diff --git a/tests/new/SuperInIntroductionCE.java b/tests/new/SuperInIntroductionCE.java new file mode 100644 index 000000000..fb8784156 --- /dev/null +++ b/tests/new/SuperInIntroductionCE.java @@ -0,0 +1,32 @@ + +import org.aspectj.testing.Tester; + +public class SuperInIntroductionCE { + public static void main (String[] args) { + int result = new Sub().getInt(); + Tester.check(2==result, "new Sub().getInt() !2==" + result); + } +} + +class Super { + private int privateInt = 1; + private int privateIntMethod() { return privateInt; } + int defaultedInt = 1; + int defaultIntMethod() { return privateInt; } +} + +class Sub extends Super { } + +class ObjectSub { } + +aspect A { + /** @testcase accessing private and default method and field of class within code the compiler controls */ + public int Sub.getInt() { + int result = super.privateInt; // CE 25 expected here + result += super.privateIntMethod(); // CE 26 expected here + // todo: move A and Super to separate packages + //result += defaultInt; // CE expected here + //result += defaultIntMethod(); // CE expected here + return result; + } +} diff --git a/tests/new/SuperStaticCallJoinPoint.java b/tests/new/SuperStaticCallJoinPoint.java new file mode 100644 index 000000000..5d75b8955 --- /dev/null +++ b/tests/new/SuperStaticCallJoinPoint.java @@ -0,0 +1,25 @@ +import org.aspectj.testing.Tester; + +class Sup { + static void m() {} +} + +public class SuperStaticCallJoinPoint extends Sup { + static boolean ran = false; + public static void main(String[] args) { + new SuperStaticCallJoinPoint().foo(); + Tester.check(ran, "didn't run advice"); + } + void foo() { + super.m(); + } + static void m() { + throw new RuntimeException(); + } +} + +aspect A { + before(): this(SuperStaticCallJoinPoint) && call(void Sup.m()) { + SuperStaticCallJoinPoint.ran = true; + } +} diff --git a/tests/new/SupersAndInterfaces.java b/tests/new/SupersAndInterfaces.java new file mode 100644 index 000000000..8a329dc51 --- /dev/null +++ b/tests/new/SupersAndInterfaces.java @@ -0,0 +1,46 @@ +import org.aspectj.testing.Tester; + +import java.io.IOException; + +public class SupersAndInterfaces { + public static void main(String[] args) throws IOException { + new C2().m(); + Tester.check("ran before"); + new C().toString(); + Tester.check("ran before toString"); + } +} + +class C { + public void m() throws IOException { + if (false) throw new IOException("testing"); + } + public String toString() { + return super.toString() + "C"; + } +} + +interface I { + public void m() throws IOException; +} + +class C1 extends C implements I { +} + +class C2 extends C1 { + static boolean ranBody; + public void m() throws IOException { + ranBody = true; + super.m(); + } +} + +aspect A { + before(): call(void m()) { + Tester.note("ran before"); + Tester.check(!C2.ranBody, "first entry"); + } + before(): call(String toString()) { + Tester.note("ran before toString"); + } +} diff --git a/tests/new/SynchroInterface.java b/tests/new/SynchroInterface.java new file mode 100644 index 000000000..5ec3515fe --- /dev/null +++ b/tests/new/SynchroInterface.java @@ -0,0 +1,42 @@ +import org.aspectj.testing.Tester; +import java.lang.reflect.*; + +public class SynchroInterface { + public static void main(String[] args) { + try { + new SynchroInterface().realMain(args); + } catch (Throwable t) { + Tester.check(false, "uh oh " + t); + } finally { + Tester.check(Consts.ran, "method didn't run"); + } + } + public void realMain(String[] args) throws Throwable { + Class.forName("EmptyClass").getMethod("method", new Class[]{}).invoke(new EmptyClass(), new Class[]{}); + } +} + +class Consts { + public static boolean ran = false; +} + +class EmptyClass { +} + +interface EmptyInterface { +} + +aspect IntroType { + introduction EmptyClass { + implements EmptyInterface; + } +} + +aspect IntroMethod { + introduction EmptyInterface { + public synchronized void method() { + Consts.ran = true; + } + } +} + diff --git a/tests/new/SynchronizedMethodsOnInterfaces.java b/tests/new/SynchronizedMethodsOnInterfaces.java new file mode 100644 index 000000000..4cddd77c9 --- /dev/null +++ b/tests/new/SynchronizedMethodsOnInterfaces.java @@ -0,0 +1,37 @@ +import org.aspectj.testing.*; +import java.lang.reflect.*; + +public class SynchronizedMethodsOnInterfaces { + public static void main(String[] args) { + new SynchronizedMethodsOnInterfaces().realMain(args); + } + static { + Tester.expectEventsInString("I,C"); + } + public void realMain(String[] args) { + method(new D()); + method(new C()); + Tester.checkAllEvents(); + } + void method(Object o) { + try { + o.getClass().getMethod("method", new Class[]{}).invoke(o, new Object[]{}); + } catch (Throwable t) { + Tester.check(false, t+""); + } + } + + public SynchronizedMethodsOnInterfaces() { + } +} + +interface I {} +class D implements I {} +class C {} + +aspect AspectI { + public synchronized void I.method() { Tester.event("I"); } +} +aspect AspectC { + public synchronized void C.method() { Tester.event("C"); } +} diff --git a/tests/new/TargetObjectReplacement.java b/tests/new/TargetObjectReplacement.java new file mode 100644 index 000000000..6c5e26ce9 --- /dev/null +++ b/tests/new/TargetObjectReplacement.java @@ -0,0 +1,64 @@ +import org.aspectj.testing.Tester; + +/** @testcase replacing this or target in around advice */ +public class TargetObjectReplacement { + public static void main(String[] args) { + Foo f = new Foo("orig"); + // replacing target or this in advice does not affect caller reference + f.m(); + f.n(); + f.o(); + f.p(); + Tester.checkEqual(f.idhat, "orig"); // no affect presumed + Tester.checkAllEvents(); + } + static { + Tester.expectEvent("m: m-delegate"); + Tester.expectEvent("n: n-delegate"); + Tester.expectEvent("o: o-delegate"); + Tester.expectEvent("p: orig"); // no affect presumed + } +} + +class Foo { + String id; + String idhat; + + Foo(String id) { + this.id = id; + this.idhat = id; + } + + void m() { + Tester.event("m: " + id); + } + + void n() { + Tester.event("n: " + id); + } + + void o() { + Tester.event("o: " + id); + } + + void p() { + Tester.event("p: " + id); // before around advice on idhat get + Tester.checkEqual(idhat, "p-delegate"); // callees affected + } +} + +aspect A { + + void around(Foo foo): target(foo) && call(void m()) { + proceed(new Foo("m-delegate")); + } + void around(Foo foo): target(foo) && execution(void n()) { + proceed(new Foo("n-delegate")); + } + void around(Foo foo): this(foo) && execution(void o()) { + proceed(new Foo("o-delegate")); + } + String around(Foo foo): target(foo) && get(String Foo.idhat) && within(Foo) { + return proceed(new Foo("p-delegate")); + } +} diff --git a/tests/new/ThisJoinPointAssignments.java b/tests/new/ThisJoinPointAssignments.java new file mode 100644 index 000000000..f7b6d4971 --- /dev/null +++ b/tests/new/ThisJoinPointAssignments.java @@ -0,0 +1,20 @@ +public class ThisJoinPointAssignments { + public static void main(String[] args) { + new ThisJoinPointAssignments().realMain(args); + } + public void realMain(String[] args) { + new C().f(); + org.aspectj.testing.Tester.check(A.jp != null, "Didn't set the JoinPoint"); + } +} + +class C { + public void f() {} +} + +aspect A { + static org.aspectj.lang.JoinPoint jp; + before(): call(void C.f()) { + jp = thisJoinPoint; + } +} diff --git a/tests/new/ThrowsMatching.java b/tests/new/ThrowsMatching.java new file mode 100644 index 000000000..6f350d9d4 --- /dev/null +++ b/tests/new/ThrowsMatching.java @@ -0,0 +1,25 @@ +import org.aspectj.testing.Tester; + +public class ThrowsMatching { + public static void main(String[] args) throws Exception { + C c = new C(); + c.m1(); + c.m2(); + + Tester.checkEqual(A.buf.toString(), "before:m1:m2:"); + } +} + + +class E1 extends Exception { } + +class C { + public void m1() throws E1 { A.buf.append("m1:"); } + public void m2() { A.buf.append("m2:"); } +} + +aspect A { + static StringBuffer buf = new StringBuffer(); + + before(): call(void C.m*() throws E1) { A.buf.append("before:"); } +} diff --git a/tests/new/TopmostImplements.java b/tests/new/TopmostImplements.java new file mode 100644 index 000000000..23c466d0e --- /dev/null +++ b/tests/new/TopmostImplements.java @@ -0,0 +1,49 @@ + +import org.aspectj.testing.Tester; +import java.lang.reflect.Method; + +// PR#126 + +public class TopmostImplements { + public static void main(String[] args) { test(); } + + public static void test() { + BC1 bc1 = new BC1(); + BC2 bc2 = new BC2(); + String m1 = ""; + String m2 = ""; + try { + m1 = bc1.getClass().getMethod("m1", null).toString(); + m2 = bc2.getClass().getMethod("m1", null).toString(); + } catch ( NoSuchMethodException nsme ) { + Tester.check(false, "method not found"); + } + Tester.checkEqual(m1, "public java.lang.String B.m1()", "from extends, implements"); + Tester.checkEqual(m2, "public java.lang.String B.m1()", "from extends"); + + Tester.checkEqual(bc1.m1(), "BC1", "from extends, implements"); + Tester.checkEqual(bc2.m1(), "BC2", "from extends"); + + } +} + +aspect Introducer { + public String A.m1() { return getName(); } +} + + +interface A { + String getName(); +} + +class B implements A { + public String getName() { return "B"; } +} + +class BC1 extends B implements A { + public String getName() { return "BC1"; } +} + +class BC2 extends B { + public String getName() { return "BC2"; } +} diff --git a/tests/new/TryAndProceed.java b/tests/new/TryAndProceed.java new file mode 100644 index 000000000..42cebaeee --- /dev/null +++ b/tests/new/TryAndProceed.java @@ -0,0 +1,90 @@ +import org.aspectj.testing.Tester; + +public class TryAndProceed { + public static void main(String[] args) { + new C().mNoThrows(); + Tester.checkEqual(C.buf.toString(), "beforeAll:aroundAll:mNoThrows:"); + C.buf = new StringBuffer(); + + A.aspectOf().allowThrowingAround = true; + try { + new C().mThrowsCheckedExc(); + Tester.checkFailed("should have thrown RuntimeExc"); + } catch (CheckedExc ce) { + Tester.checkFailed("should have thrown RuntimeExc not " + ce); + } catch (RuntimeException re) { + //System.out.println("caught " + re); + } + Tester.checkEqual(C.buf.toString(), + "beforeAll:aroundCheckedNoThrow:aroundAll:aroundCheckedThrow:aroundCaughtCE:"); + C.buf = new StringBuffer(); + + A.aspectOf().allowThrowingBefore = true; + try { + new C().mThrowsCheckedExc(); + Tester.checkFailed("should have thrown CheckedExc"); + } catch (CheckedExc ce) { + //System.out.println("caught " + ce); + } catch (RuntimeException re) { + Tester.checkFailed("should have thrown CheckedExc not RuntimeExc"); + } + Tester.checkEqual(C.buf.toString(), "beforeChecked:"); + + } +} + + +class C { + public static StringBuffer buf = new StringBuffer(); + + public void mThrowsCheckedExc() throws CheckedExc { + C.buf.append("mThrowsCheckedExc:"); + } + + public void mNoThrows() { + C.buf.append("mNoThrows:"); + } +} + +aspect A { + pointcut checkedCut(): call(void C.mThrowsCheckedExc()); + pointcut uncheckedCut(): call(void C.mNoThrows()); + pointcut allCut(): checkedCut() || uncheckedCut(); + + public static boolean allowThrowingBefore = false; + public static boolean allowThrowingAround = false; + + before() throws CheckedExc: checkedCut() && if(allowThrowingBefore) { + C.buf.append("beforeChecked:"); + throw new CheckedExc("from before"); + } + + before(): allCut() { + C.buf.append("beforeAll:"); + } + + Object around(): checkedCut() { + C.buf.append("aroundCheckedNoThrow:"); + return proceed(); + } + + Object around(): allCut() { + C.buf.append("aroundAll:"); + try { + return proceed(); + } catch (CheckedExc ce) { + C.buf.append("aroundCaughtCE:"); + + throw new RuntimeException("hand-softening CheckedExc"); + } + } + + Object around() throws CheckedExc: checkedCut() && if(allowThrowingAround) { + C.buf.append("aroundCheckedThrow:"); + throw new CheckedExc("from around"); + } +} + +class CheckedExc extends Exception { + public CheckedExc(String m) { super(m); } +} diff --git a/tests/new/TryErrors.java b/tests/new/TryErrors.java new file mode 100644 index 000000000..5abe6a7af --- /dev/null +++ b/tests/new/TryErrors.java @@ -0,0 +1,33 @@ +import org.aspectj.testing.Tester; + +public class TryErrors { + public static void main(String[] args) { + test(); + } + + public static void test() { + Foo foo = new Foo(); + foo.bar(); + Tester.check(foo.memberAdvised, "member advice happened"); + Tester.check(foo.signatureAdvised, "signature advice happened"); + } +} + +class Foo { + boolean memberAdvised = false; + boolean signatureAdvised = false; + + public void bar() { + ; + } +} + +aspect A { + /*static*/ after(Foo foo): target(foo) && within(Foo) && execution(void bar()) { + foo.memberAdvised = true; + } + + /*static*/ before(Foo foo): target(foo) && call(void bar()) { + foo.signatureAdvised = true; + } +} diff --git a/tests/new/TryNoCatchCE.java b/tests/new/TryNoCatchCE.java new file mode 100644 index 000000000..9c6f0f1a2 --- /dev/null +++ b/tests/new/TryNoCatchCE.java @@ -0,0 +1,7 @@ + +public class TryNoCatchCE { + /* @testcase PR#643 PUREJAVA try without catch or finally */ + public void notRun() { + try {} // expect CE here + } +} diff --git a/tests/new/TryOffEnd.java b/tests/new/TryOffEnd.java new file mode 100644 index 000000000..c2b0c166c --- /dev/null +++ b/tests/new/TryOffEnd.java @@ -0,0 +1,25 @@ + +import org.aspectj.testing.Tester; + +/** @testcase VerifyError after around advice falls off end of tryCatch */ +public class TryOffEnd { + public static void main(String[] args) { + Tester.check(new TryOffEnd().error(), "functional failure"); + } + public boolean error() { + String s = null; + try { + s = System.getProperty("unknown Property"); + } catch (Throwable t) { // CW 13 cannot apply advice + t.printStackTrace(System.err); + } + return true; + } +} + +aspect A { + Object around() : within(TryOffEnd) && handler(Throwable) { // CW 21 cannot apply advice + Object result = proceed(); + return result; + } +} diff --git a/tests/new/TwoAnonymous.java b/tests/new/TwoAnonymous.java new file mode 100644 index 000000000..09489cef1 --- /dev/null +++ b/tests/new/TwoAnonymous.java @@ -0,0 +1,45 @@ +public class TwoAnonymous { + /**/ + Runnable i = new Runnable() { + public void run() { + System.out.println("i"); + } + private Object foo() { return null; } + }; + Runnable j = new Runnable() { + public void run() { + System.out.println(new Integer(0)); + } + }; + /**/ + public static void main(String[] args) { + Runnable k = new Runnable() { + int x = 0; + public void run() { + System.out.println("k"); + x = 4; + } + private Object foo() { return null; } + }; + + Runnable k1 = new Runnable() { public void run() { } }; + + k.run(); + + } +} + +aspect A { + + before(Runnable r): call(void Runnable.run()) && target(r) { + System.out.println("calling run: " + r + ", " + thisJoinPoint.getArgs() +", " + thisJoinPoint.getTarget()); + } + + after() returning(Runnable r): call(Runnable+.new()) { + System.out.println("new runnable: " + r); + } + + before(): set(int x) { + System.out.println("setting x"); + } +} diff --git a/tests/new/TypeBug.java b/tests/new/TypeBug.java new file mode 100644 index 000000000..76190d819 --- /dev/null +++ b/tests/new/TypeBug.java @@ -0,0 +1,73 @@ +class TypeBug { + + public static void main(String[] args) { + new TypeBug().go(); + } + + A a = new A(); + D d = new D(); + G g = new G(); + + void go(){ + g.foo(a); + g.foo(d); + bar(g); + bash(g); + } + + void bar(I i){ + i.foo(a); + } + + void bash(J j){ + j.foo(d); + } + +} + +aspect Q { + + pointcut pc1(): receptions(void I.foo(*)); + pointcut pc2(): calls(void I.foo(*)); + pointcut pc3(): callsto(pc1()); + + pointcut test():; + + static before(): pc1() { + System.out.print("(pc1) "); + } + + + static before (): pc2() { + System.out.print("(pc2) "); + } + + static before(): pc3(){ + System.out.print("(pc3) "); + } + +} + + +class A {} + + +class D {} + + +interface I { + void foo(A a); +} + +interface J { + void foo(D d); +} + +class G implements I, J { + public void foo(A a){ + System.out.println("G.foo(A)"); + } + public void foo(D d){ + System.out.println("G.foo(D)"); + } +} diff --git a/tests/new/TypeCoercions.java b/tests/new/TypeCoercions.java new file mode 100644 index 000000000..a56ab990b --- /dev/null +++ b/tests/new/TypeCoercions.java @@ -0,0 +1,9 @@ +import org.aspectj.testing.Tester; + +public class TypeCoercions { + public static void main(String[] args) { + char c1 = 'e', c2 = 'f'; + Tester.checkEqual("hello".indexOf(c1), 1); + Tester.checkEqual("hello".indexOf(c2), -1); + } +} diff --git a/tests/new/TypeDeclInAdvice.java b/tests/new/TypeDeclInAdvice.java new file mode 100644 index 000000000..e39d3421e --- /dev/null +++ b/tests/new/TypeDeclInAdvice.java @@ -0,0 +1,39 @@ +import org.aspectj.testing.Tester; + +public class TypeDeclInAdvice { + public static void main(String[] args) { test(); } + + public static void test() { + Foo foo = new Foo(); + foo.m(); + } +} + +aspect A { + void around(): this(Foo) && call(void m(..)) { + class Internal { + int val() { return 1; } + } + int i = 0; + Internal j; + + i = 1; + j = new Internal(); + + proceed(); + + //System.out.println("j: " + j); + + Tester.checkEqual(i, 1, "i"); + Tester.checkEqual(j.val(), 1, "j.val()"); + } +} + +class Foo { + Foo() { + //System.out.println("constructor Foo()"); + } + void m() { + //System.out.println("method m()"); + } +} diff --git a/tests/new/TypeNames.java b/tests/new/TypeNames.java new file mode 100644 index 000000000..e1aae7255 --- /dev/null +++ b/tests/new/TypeNames.java @@ -0,0 +1,50 @@ + +import org.aspectj.testing.Tester; + +/** @testcase package typepattern with no packages (in default package) */ +public class TypeNames { + public static void main (String[] args) { + new Suffix().run(); + new MySuffix().run(); + Tester.checkAllEvents(); + } + static { + Tester.expectEvent("Suffix.run()"); + Tester.expectEvent("MySuffix.run()"); + } +} + +// classes not to be matched by TypePattern below +class Suffix { + void run() { + Tester.event("Suffix.run()"); + } +} + +class MySuffix { + void run() { + Tester.event("MySuffix.run()"); + } +} + + + +aspect A { + // BUG: This is all that's required to provoke the bug in -Xlint mode + public String (*..*Suffix).toString() { // lint: no type matched + return "ok"; + } + + // coverage cases + before() : staticinitialization(*..*Suffix) { // lint: no type matched + Tester.check(false, "no such join point"); + } + + before() : call(void *..*Suffix.run()) { // lint: no type matched + Tester.check(false, "no such join point"); + } + + before() : call(*..*Suffix.new()) { // lint: no type matched + Tester.check(false, "no such join point"); + } +} diff --git a/tests/new/TypePat.java b/tests/new/TypePat.java new file mode 100644 index 000000000..149e25741 --- /dev/null +++ b/tests/new/TypePat.java @@ -0,0 +1,82 @@ +package test; + +import org.aspectj.testing.Tester; +import java.util.*; + + +public class TypePat { + public static void main(String[] args) { + Inner o = new Inner(); + o.m(); + + Tester.checkAndClearEvents(new String[] { + "A.before1: TypePat.Inner.m()", + "InnerA.before: TypePat.Inner.m()", + "A.before2: C.foo()", + "TypePat.Inner.m", + }); + + + Map m = new HashMap(); + m.put("a", "b"); + + for (Iterator i = m.entrySet().iterator(); i.hasNext(); ) { + Map.Entry e = (Map.Entry)i.next(); + e.getKey(); + } + + Tester.checkAndClearEvents(new String[] { + "A.before3: Map.Entry.getKey()" + }); + + + + Runnable r = new Runnable() { + public void run() { + C.foo(); + Tester.event("TypePat.Runnable.run"); + } + }; + + r.run(); + Tester.checkAndClearEvents(new String[] { + "A.before2: C.foo()", + "TypePat.Runnable.run", + }); + //Tester.printEvents(); + } + static class Inner { + public void m() { + C.foo(); + Tester.event("TypePat.Inner.m"); + } + } + + static aspect InnerA { + before(): call(* Inner.*(..)) { + Tester.event("InnerA.before: " + thisJoinPoint.getSignature().toShortString()); + } + } +} + +class C { + static void foo() { + } +} + + +aspect A { + before(): call(* TypePat.*.*(..)) && within(TypePat) && !within(TypePat.*) { + Tester.event("A.before1: " + thisJoinPoint.getSignature().toShortString()); + } + + pointcut checkCall(): call(* *(..)) && !call(* Tester.*(..)); + + before(): checkCall() && within(TypePat.*) && !within(*.InnerA) { + Tester.event("A.before2: " + thisJoinPoint.getSignature().toShortString()); + } + + before(): checkCall() && target(Map.En*) { + Tester.event("A.before3: " + thisJoinPoint.getSignature().toShortString()); + } +} diff --git a/tests/new/UnambiguousClassReference3CP.java b/tests/new/UnambiguousClassReference3CP.java new file mode 100644 index 000000000..f3fc2dac8 --- /dev/null +++ b/tests/new/UnambiguousClassReference3CP.java @@ -0,0 +1,15 @@ +import java.sql.Array; + +import org.aspectj.testing.Tester; + +public class UnambiguousClassReference3CP { + + /** @testcase PR#701 PUREJAVA no CE for unambiguous reference + * see also testcase PR#631 */ + public static void main(String[] args) { + int[] gh = new int[5]; + int len = java.lang.reflect.Array.getLength(gh); // not ambiguous + Tester.check(5==len, "Array.getLength failed: " + len); + } +} + diff --git a/tests/new/UndefinedInner.java b/tests/new/UndefinedInner.java new file mode 100644 index 000000000..1ea3617ed --- /dev/null +++ b/tests/new/UndefinedInner.java @@ -0,0 +1,9 @@ + +// in 10rc2, this provokes a NPE at ConstructorDec.java:41 +class error { + class error2 { + /** @testcase PR#588 PUREJAVA Undefined inner class constructor */ + public error2(); // expecting error here + } +} + diff --git a/tests/new/UnrecognizedAspectCE.java b/tests/new/UnrecognizedAspectCE.java new file mode 100644 index 000000000..f9d9c060f --- /dev/null +++ b/tests/new/UnrecognizedAspectCE.java @@ -0,0 +1,3 @@ + +aspect UnrecognizedAspectCE + extends UnknownAspect {} diff --git a/tests/new/UnterminatedDeclareErrorCE.java b/tests/new/UnterminatedDeclareErrorCE.java new file mode 100644 index 000000000..ad4f228be --- /dev/null +++ b/tests/new/UnterminatedDeclareErrorCE.java @@ -0,0 +1,11 @@ + +/** @testcase expect CE for unterminated declare error */ +aspect UnterminatedDeclareErrorCE { + declare error : execution(void run()) : "error" // CE 7 +} + +class C { + // bug - get CE here if uncommented, but declare error unterminated + // public void run() { } +} + diff --git a/tests/new/UnwovenAdviceNotCheckedCE.java b/tests/new/UnwovenAdviceNotCheckedCE.java new file mode 100644 index 000000000..d692c2382 --- /dev/null +++ b/tests/new/UnwovenAdviceNotCheckedCE.java @@ -0,0 +1,22 @@ + +/** Currently there are no messages emitted for + * compile-time errors from advice bodies if the + * advice is not woven into the base class. + * This can lead to silent failures. + */ +class UnwovenAdviceNotCheckedCE { + public static void main(String[] args) { + System.err.println("main"); + } +} + +aspect Aspect { + void around (String[] args) + : args(args) + && call(void UnwovenAdviceNotCheckedCE.main()) { // forgot (..), so unwoven + System.err.println("before main"); + proceed() ; // CE: should get compile error here - need (args) + System.err.println("after main"); + } +} + diff --git a/tests/new/VoidAround.java b/tests/new/VoidAround.java new file mode 100644 index 000000000..6878041b1 --- /dev/null +++ b/tests/new/VoidAround.java @@ -0,0 +1,32 @@ + +import org.aspectj.testing.Tester; +import java.util.*; + +/** @testcase PR#836 void around advice without proceed */ +public class VoidAround { + + public static void main(String[] args) { + C c = new C(); + c.run(); + Object o = c.result(); + Tester.check(o == C.EXPECTED, "o: " + o); + Tester.checkAllEvents(); + } +} + +class C { + static Object EXPECTED = new Object(); + public void run() { } + public Object result() { return EXPECTED; } +} + +aspect A { + static { + Tester.expectEvent("void C.run()"); + Tester.expectEvent("Object C.result()"); + } + // no compile error expected (also note: message jp signatures are wrong?) + void around() : target(C) && call(* r*(..)) { + Tester.event(thisJoinPoint.getSignature().toString()); + } +} diff --git a/tests/new/VoidField.java b/tests/new/VoidField.java new file mode 100644 index 000000000..dfbb7eba2 --- /dev/null +++ b/tests/new/VoidField.java @@ -0,0 +1,8 @@ +public class VoidField { + void f; // ERR field is void + public static void main(String[] args) { + void var; // ERR var is void + } + void m(void x) { } // ERR formal is void +} + diff --git a/tests/new/WildNames.java b/tests/new/WildNames.java new file mode 100644 index 000000000..63260a7cd --- /dev/null +++ b/tests/new/WildNames.java @@ -0,0 +1,42 @@ +import org.aspectj.testing.Tester; + +public aspect WildNames { + public static void main(String[] args) { test(); } + + public static void test() { + C c = new C(); + + c.getFoo(); c.getBar(); + Tester.check("getFoo"); Tester.check("getBar"); + + c.fooGetter(); c.barGetter(); + Tester.check("fooGetter"); Tester.check("barGetter"); + + c.prefixFooSuffix(); c.prefixBarSuffix(); + Tester.check("prefixFooSuffix"); Tester.check("prefixBarSuffix"); + } + + /*static*/ after() returning (String s): execution(String get*()) { + Tester.checkEqual("get*", s); + Tester.note(thisJoinPoint.getSignature().getName()); + } + /*static*/ after() returning (String s): execution(String *Getter()) { + Tester.checkEqual("*Getter", s); + Tester.note(thisJoinPoint.getSignature().getName()); + } + /*static*/ after() returning (String s): execution(String prefix*Suffix()) { + Tester.checkEqual("prefix*Suffix", s); + Tester.note(thisJoinPoint.getSignature().getName()); + } +} + +class C { + public String getFoo() { return "get*"; } + public String getBar() { return "get*"; } + + public String fooGetter() { return "*Getter"; } + public String barGetter() { return "*Getter"; } + + public String prefixFooSuffix() { return "prefix*Suffix"; } + public String prefixBarSuffix() { return "prefix*Suffix"; } +} diff --git a/tests/new/WithinInners.java b/tests/new/WithinInners.java new file mode 100644 index 000000000..17a0be521 --- /dev/null +++ b/tests/new/WithinInners.java @@ -0,0 +1,66 @@ +import org.aspectj.testing.Tester; + +public class WithinInners { + public static void main(String[] args) { + C c = new C(); + + c.getRunnable().run(); + // 1.1 doesn't capture withincode and execution of local types + //(1.0 behavior)Tester.checkEqual(A.notes, "before-within:before-withincode:around-in:run:around-out:"); + Tester.checkEqual(A.notes, "before-within:around-in:run:around-out:"); + } +} + +class C { + public C() { + class Inner { + public void write( String text ) { + System.out.println( "write( String )" ); + System.out.println( text ); + } + } + + Inner i = new Inner(); + String s = "TEXT"; + i.write( s ); + } + + public Runnable getRunnable() { + return new Runnable() { + public void run() { + A.notes += "run:"; + } + }; + } +} + + +aspect A { + public static String notes = ""; + + /* These don't work because we can't give local types reasonable top-level names */ + before(String s): call(void write(String)) && args(s) { //&& withincode(C.new()) { + System.out.println(s); + } + + void around(String s): call(void write(String)) && args(s) && withincode(C.new()) { + proceed(s.toLowerCase()); + } + + /* These now work and are checked */ + //XXX not being able to do this(c) is a pain + before(Runnable runnable): execution(void Runnable.run()) && target(runnable) && within(C) { // && this(c) { + //System.out.println("about to call Runnable.run in " + c + " on " + runnable); + notes += "before-within:"; + } + before(): execution(void run()) && withincode(Runnable C.getRunnable()) { + //System.out.println("about to call Runnable.run in C"); + notes += "before-withincode:"; + } + void around(): execution(void run()) { + //System.out.println("about to call Runnable.run in C"); + notes += "around-in:"; + proceed(); + notes += "around-out:"; + } +} diff --git a/tests/new/Zeros.java b/tests/new/Zeros.java new file mode 100644 index 000000000..1fdc58cfa --- /dev/null +++ b/tests/new/Zeros.java @@ -0,0 +1,211 @@ +import org.aspectj.testing.*; + +public class Zeros { + public static void main(String[] args) { + new Zeros().realMain(args); + } + + public void realMain(String[] args) { + double d01 = 0.1; + double d02 = 00.11; + double d03 = 000.111; + double d04 = 0000.1111; + double d05 = 00000.11111; + double d06 = 000000.111111; + double d07 = 0000000.1111111; + double d08 = 00000000.11111111; + double d09 = 000000000.111111111; + double d10 = 0000000000.1111111111; + double d11 = 00000000000.11111111111; + double d12 = 000000000000.111111111111; + double d13 = 0000000000000.1111111111111; + double d14 = 00000000000000.11111111111111; + double d15 = 000000000000000.111111111111111; + double d16 = 0000000000000000.1111111111111111; + double d17 = 00000000000000000.11111111111111111; + double d18 = 000000000000000000.111111111111111111; + double d19 = 0000000000000000000.1111111111111111111; + double d20 = 00000000000000000000.11111111111111111111; + double d21 = 000000000000000000000.111111111111111111111; + double d22 = 0000000000000000000000.1111111111111111111111; + double d23 = 00000000000000000000000.11111111111111111111111; + double d24 = 000000000000000000000000.111111111111111111111111; + double d25 = 0000000000000000000000000.1111111111111111111111111; + double d26 = 00000000000000000000000000.11111111111111111111111111; + double d27 = 000000000000000000000000000.111111111111111111111111111; + double d28 = 0000000000000000000000000000.1111111111111111111111111111; + double d29 = 00000000000000000000000000000.11111111111111111111111111111; + double d30 = 000000000000000000000000000000.111111111111111111111111111111; + double d31 = 0000000000000000000000000000000.1111111111111111111111111111111; + double d32 = 00000000000000000000000000000000.11111111111111111111111111111111; + double d33 = 000000000000000000000000000000000.111111111111111111111111111111111; + double d34 = 0000000000000000000000000000000000.1111111111111111111111111111111111; + double d35 = 00000000000000000000000000000000000.11111111111111111111111111111111111; + double d36 = 000000000000000000000000000000000000.111111111111111111111111111111111111; + double d37 = 0000000000000000000000000000000000000.1111111111111111111111111111111111111; + double d38 = 00000000000000000000000000000000000000.11111111111111111111111111111111111111; + double d39 = 000000000000000000000000000000000000000.111111111111111111111111111111111111111; + double d40 = 0000000000000000000000000000000000000000.1111111111111111111111111111111111111111; + double d41 = 00000000000000000000000000000000000000000.11111111111111111111111111111111111111111; + double d42 = 000000000000000000000000000000000000000000.111111111111111111111111111111111111111111; + double d43 = 0000000000000000000000000000000000000000000.1111111111111111111111111111111111111111111; + double d44 = 00000000000000000000000000000000000000000000.11111111111111111111111111111111111111111111; + double d45 = 000000000000000000000000000000000000000000000.111111111111111111111111111111111111111111111; + double d46 = 0000000000000000000000000000000000000000000000.1111111111111111111111111111111111111111111111; + double d47 = 00000000000000000000000000000000000000000000000.11111111111111111111111111111111111111111111111; + double d48 = 000000000000000000000000000000000000000000000000.111111111111111111111111111111111111111111111111; + double d49 = 0000000000000000000000000000000000000000000000000.1111111111111111111111111111111111111111111111111; + double d50 = 00000000000000000000000000000000000000000000000000.11111111111111111111111111111111111111111111111111; + double d51 = 000000000000000000000000000000000000000000000000000.111111111111111111111111111111111111111111111111111; + double d52 = 0000000000000000000000000000000000000000000000000000.1111111111111111111111111111111111111111111111111111; + double d53 = 00000000000000000000000000000000000000000000000000000.11111111111111111111111111111111111111111111111111111; + double d54 = 000000000000000000000000000000000000000000000000000000.111111111111111111111111111111111111111111111111111111; + double d55 = 0000000000000000000000000000000000000000000000000000000.1111111111111111111111111111111111111111111111111111111; + double d56 = 00000000000000000000000000000000000000000000000000000000.11111111111111111111111111111111111111111111111111111111; + double d57 = 000000000000000000000000000000000000000000000000000000000.111111111111111111111111111111111111111111111111111111111; + double d58 = 0000000000000000000000000000000000000000000000000000000000.1111111111111111111111111111111111111111111111111111111111; + double d59 = 00000000000000000000000000000000000000000000000000000000000.11111111111111111111111111111111111111111111111111111111111; + double d60 = 000000000000000000000000000000000000000000000000000000000000.111111111111111111111111111111111111111111111111111111111111; + double d61 = 0000000000000000000000000000000000000000000000000000000000000.1111111111111111111111111111111111111111111111111111111111111; + double d62 = 00000000000000000000000000000000000000000000000000000000000000.11111111111111111111111111111111111111111111111111111111111111; + double d63 = 000000000000000000000000000000000000000000000000000000000000000.111111111111111111111111111111111111111111111111111111111111111; + double d64 = 0000000000000000000000000000000000000000000000000000000000000000.1111111111111111111111111111111111111111111111111111111111111111; + double d65 = 00000000000000000000000000000000000000000000000000000000000000000.11111111111111111111111111111111111111111111111111111111111111111; + double d66 = 000000000000000000000000000000000000000000000000000000000000000000.111111111111111111111111111111111111111111111111111111111111111111; + double d67 = 0000000000000000000000000000000000000000000000000000000000000000000.1111111111111111111111111111111111111111111111111111111111111111111; + double d68 = 00000000000000000000000000000000000000000000000000000000000000000000.11111111111111111111111111111111111111111111111111111111111111111111; + double d69 = 000000000000000000000000000000000000000000000000000000000000000000000.111111111111111111111111111111111111111111111111111111111111111111111; + double d70 = 0000000000000000000000000000000000000000000000000000000000000000000000.1111111111111111111111111111111111111111111111111111111111111111111111; + double d71 = 00000000000000000000000000000000000000000000000000000000000000000000000.11111111111111111111111111111111111111111111111111111111111111111111111; + double d72 = 000000000000000000000000000000000000000000000000000000000000000000000000.111111111111111111111111111111111111111111111111111111111111111111111111; + double d73 = 0000000000000000000000000000000000000000000000000000000000000000000000000.1111111111111111111111111111111111111111111111111111111111111111111111111; + double d74 = 00000000000000000000000000000000000000000000000000000000000000000000000000.11111111111111111111111111111111111111111111111111111111111111111111111111; + double d75 = 000000000000000000000000000000000000000000000000000000000000000000000000000.111111111111111111111111111111111111111111111111111111111111111111111111111; + double d76 = 0000000000000000000000000000000000000000000000000000000000000000000000000000.1111111111111111111111111111111111111111111111111111111111111111111111111111; + double d77 = 00000000000000000000000000000000000000000000000000000000000000000000000000000.11111111111111111111111111111111111111111111111111111111111111111111111111111; + double d78 = 000000000000000000000000000000000000000000000000000000000000000000000000000000.111111111111111111111111111111111111111111111111111111111111111111111111111111; + double d79 = 0000000000000000000000000000000000000000000000000000000000000000000000000000000.1111111111111111111111111111111111111111111111111111111111111111111111111111111; + double d80 = 00000000000000000000000000000000000000000000000000000000000000000000000000000000.11111111111111111111111111111111111111111111111111111111111111111111111111111111; + double d81 = 000000000000000000000000000000000000000000000000000000000000000000000000000000000.111111111111111111111111111111111111111111111111111111111111111111111111111111111; + double d82 = 0000000000000000000000000000000000000000000000000000000000000000000000000000000000.1111111111111111111111111111111111111111111111111111111111111111111111111111111111; + double d83 = 00000000000000000000000000000000000000000000000000000000000000000000000000000000000.11111111111111111111111111111111111111111111111111111111111111111111111111111111111; + double d84 = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000.111111111111111111111111111111111111111111111111111111111111111111111111111111111111; + double d85 = 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000.1111111111111111111111111111111111111111111111111111111111111111111111111111111111111; + double d86 = 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000.11111111111111111111111111111111111111111111111111111111111111111111111111111111111111; + double d87 = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.111111111111111111111111111111111111111111111111111111111111111111111111111111111111111; + double d88 = 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111; + double d89 = 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111; + double d90 = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111; + double d91 = 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111; + double d92 = 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111; + double d93 = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111; + double d94 = 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111; + double d95 = 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111; + double d96 = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111; + double d97 = 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111; + double d98 = 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111; + double d99 = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111; + double d100 = 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111; + double d101 = 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111; + double d102 = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111; + double d103 = 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111; + double d104 = 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111; + double d105 = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111; + double d106 = 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111; + double d107 = 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111; + double d108 = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111; + double d109 = 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111; + double d110 = 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111; + double d111 = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111; + double d112 = 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111; + double d113 = 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111; + double d114 = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111; + double d115 = 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111; + double d116 = 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111; + double d117 = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111; + double d118 = 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111; + double d119 = 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111; + double d120 = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111; + double d121 = 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111; + double d122 = 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111; + double d123 = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111; + double d124 = 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111; + double d125 = 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111; + double d126 = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111; + double d127 = 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111; + double d128 = 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111; + double d129 = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111; + double d130 = 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111; + double d131 = 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111; + double d132 = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111; + double d133 = 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111; + double d134 = 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111; + double d135 = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111; + double d136 = 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111; + double d137 = 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111; + double d138 = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111; + double d139 = 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111; + double d140 = 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111; + double d141 = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111; + double d142 = 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111; + double d143 = 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111; + double d144 = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111; + double d145 = 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111; + double d146 = 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111; + double d147 = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111; + double d148 = 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111; + double d149 = 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111; + double d150 = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111; + double d151 = 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111; + double d152 = 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111; + double d153 = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111; + double d154 = 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111; + double d155 = 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111; + double d156 = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111; + double d157 = 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111; + double d158 = 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111; + double d159 = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111; + double d160 = 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111; + double d161 = 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111; + double d162 = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111; + double d163 = 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111; + double d164 = 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111; + double d165 = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111; + double d166 = 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111; + double d167 = 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111; + double d168 = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111; + double d169 = 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111; + double d170 = 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111; + double d171 = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111; + double d172 = 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111; + double d173 = 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111; + double d174 = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111; + double d175 = 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111; + double d176 = 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111; + double d177 = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111; + double d178 = 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111; + double d179 = 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111; + double d180 = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111; + double d181 = 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111; + double d182 = 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111; + double d183 = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111; + double d184 = 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111; + double d185 = 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111; + double d186 = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111; + double d187 = 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111; + double d188 = 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111; + double d189 = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111; + double d190 = 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111; + double d191 = 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111; + double d192 = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111; + double d193 = 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111; + double d194 = 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111; + double d195 = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111; + double d196 = 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111; + double d197 = 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111; + double d198 = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111; + double d199 = 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111; + + Tester.check(true, "compiled!"); + } +} diff --git a/tests/new/access/Test1.java b/tests/new/access/Test1.java new file mode 100644 index 000000000..1d3b3f695 --- /dev/null +++ b/tests/new/access/Test1.java @@ -0,0 +1,16 @@ +import org.aspectj.testing.Tester; + +import pc.C; +import psub.SubC; + +public class Test1 { + public static void main(String[] args) { + C c = new C(); + SubC subc = new SubC(); + + Tester.checkEqual(c.getInternalPackage(), "pc"); + Tester.checkEqual(subc.getInternalPackage(), "pc"); + Tester.checkEqual(subc.getRealPackage(), "psub"); + + } +} diff --git a/tests/new/access/pc/C.java b/tests/new/access/pc/C.java new file mode 100644 index 000000000..412a7e7ea --- /dev/null +++ b/tests/new/access/pc/C.java @@ -0,0 +1,9 @@ +package pc; + +public class C { + public String getInternalPackage() { + return getMyPackage(); + } + + String getMyPackage() { return "pc"; } +} diff --git a/tests/new/access/psub/A.java b/tests/new/access/psub/A.java new file mode 100644 index 000000000..0b4a1a572 --- /dev/null +++ b/tests/new/access/psub/A.java @@ -0,0 +1,13 @@ +package psub; + +import org.aspectj.testing.Tester; +import pc.C; + +aspect A { + before(): call(String SubC.getMyPackage()) { + //XXXTester.checkFailed("shouldn't ever run this " + thisJoinPoint); + } + before(): call(String C.getMyPackage()) { + Tester.note("C.getMyPackage on " + thisJoinPoint.getTarget().getClass().getName()); + } +} diff --git a/tests/new/access/psub/SubC.java b/tests/new/access/psub/SubC.java new file mode 100644 index 000000000..588a2ab2c --- /dev/null +++ b/tests/new/access/psub/SubC.java @@ -0,0 +1,11 @@ +package psub; + +import pc.C; + +public class SubC extends C { + public char[] getMyPackage() { return "psub".toCharArray(); } + + public String getRealPackage() { + return new String(getMyPackage()); + } +} diff --git a/tests/new/adviceOnStaticMeth/Driver.java b/tests/new/adviceOnStaticMeth/Driver.java new file mode 100644 index 000000000..629fd776d --- /dev/null +++ b/tests/new/adviceOnStaticMeth/Driver.java @@ -0,0 +1,27 @@ + +import org.aspectj.testing.Tester; + +// PR#221 + +public class Driver { + public static String s = "s"; + + public static void main(String[] args) { test(); } + + public static void test() { + Tester.checkEqual(doIt(), s, "advice worked"); + } + + public static String doIt() { + return s; + } +} + +aspect Outer { + pointcut staticMeth(): within(Driver) && execution(String doIt()); + + /*static*/ before(): staticMeth() { + Driver.s += ":a"; + } + +} diff --git a/tests/new/ambiguousClass/AmbiguousClassReference.java b/tests/new/ambiguousClass/AmbiguousClassReference.java new file mode 100644 index 000000000..0f0087aa3 --- /dev/null +++ b/tests/new/ambiguousClass/AmbiguousClassReference.java @@ -0,0 +1,5 @@ +package ambiguousClass; + +/** @testcase PR#701 PUREJAVA CE for ambiguous type reference (two files in package) */ +public class AmbiguousClassReference { } +class AmbiguousReferent {} // CE 5 "Duplicate type name" diff --git a/tests/new/ambiguousClass/AmbiguousReferent.java b/tests/new/ambiguousClass/AmbiguousReferent.java new file mode 100644 index 000000000..39a61ecec --- /dev/null +++ b/tests/new/ambiguousClass/AmbiguousReferent.java @@ -0,0 +1,5 @@ +package ambiguousClass; + + +/** @testcase PR#701 PUREJAVA CE for ambiguous type reference (two files in package) */ +public class AmbiguousReferent {} // CE 5 "Duplicate type name" diff --git a/tests/new/anonInnerClass/Driver.java b/tests/new/anonInnerClass/Driver.java new file mode 100644 index 000000000..d2de525c4 --- /dev/null +++ b/tests/new/anonInnerClass/Driver.java @@ -0,0 +1,42 @@ + +import org.aspectj.testing.Tester; + +// PR#297 anonymous inner class with aspect + +public class Driver { + + public static String s = ""; + + public static void main(String[] args){ + new Test().go(); + Tester.checkEqual(s, "-bar-after", ""); + } + +} + +class Test { + void go(){ + seto( new I(){ + public void foo(){ bar(); } + }); + o.foo(); + } + + void bar(){ + Driver.s += "-bar"; + } + I o; + + void seto(I o){ + this.o = o; + } +} + +interface I { void foo(); } + +aspect A { + void around(): this(I) && target(Test) && within(Test) && call(* bar()){ + proceed(); + Driver.s += "-after"; + } +} diff --git a/tests/new/arndAdvRet/Driver.java b/tests/new/arndAdvRet/Driver.java new file mode 100644 index 000000000..73a492e66 --- /dev/null +++ b/tests/new/arndAdvRet/Driver.java @@ -0,0 +1,48 @@ + +import org.aspectj.testing.Tester; + +// PR#140 + +public class Driver { + public static void main(String[] args) { test(); } + public static void test() { + Tester.checkEqual(new Foo().doIt(), 5, "min of 5 and 6"); + Tester.checkEqual(new Bar().doIt(), 1, "min of 5 and 2"); + } +} + +class Foo { + public static int doIt() { + return new Foo().bar(1, 2, 3); + } + + int bar(int a, int b, int c) { + return a * b * c; + } +} + +aspect FooAspect { + pointcut cut() : target(Foo) && call(int bar(int, int, int)); + int around(): cut() { + int originalResult = proceed(); + return Math.max(0, Math.min(originalResult, 5)); + } +} + +class Bar { + public static int doIt() { + return new Bar().bar(1, 2, 1); + } + + int bar(int a, int b, int c) { + return a * b * c; + } +} + +aspect BarAspect { + pointcut cut(Bar b) : target(b) && call(int bar(int, int, int)); + int around(Bar b): cut(b) { + int originalResult = proceed(b); + return Math.max(0, Math.min(originalResult, 1)); + } +} diff --git a/tests/new/aroundinner/Common.java b/tests/new/aroundinner/Common.java new file mode 100644 index 000000000..a0ebdf476 --- /dev/null +++ b/tests/new/aroundinner/Common.java @@ -0,0 +1,42 @@ + +import org.aspectj.testing.Tester; +import org.aspectj.testing.Tester; + +public class Common { + public static String[] SIGNALS = new String[] { }; + public static final void expect(String[] args) { + for (int i = 0; i < args.length; i++) { + expect(args[i]); + } + } + public static final void expect(String s) { Tester.expectEvent(s); } + public static final void signal(String s) { Tester.event(s); } + public static final void fail(String s) { Tester.check(false, s); } + public static final void check() { Tester.checkAllEvents(); } + public static final void joinWith(Thread thread) { + if (null == thread) { + Common.fail("null thread"); + } + try { thread.join(); } + catch (InterruptedException e) { + Common.fail("Interrupted"); + } + } +} + +class Target { + public static void main (String[] args) { + Common.expect(Target.SIGNALS); + Common.expect(Aspect.SIGNALS); + int result = new Target().targetMethod(); + if (1 != result) Common.fail("1 != result: " + result); + Common.check(); + } + pointcut pointcutTarget() : call(int Target.targetMethod()); + public static String[] SIGNALS = new String[] + { "targetMethod()" }; + public int targetMethod() { + Common.signal(SIGNALS[0]); + return 1; + } +} diff --git a/tests/new/aroundinner/Minimal.java b/tests/new/aroundinner/Minimal.java new file mode 100644 index 000000000..80b028698 --- /dev/null +++ b/tests/new/aroundinner/Minimal.java @@ -0,0 +1,28 @@ + +public class Minimal { + public static void main (String[] args) { + Target.main(args); + } +} + +class MyObject { int result = 0; } +aspect Aspect { + static final String[] SIGNALS = new String[] + { "around - run - before proceed" + , "around - run - after proceed" + }; + + /** @testcase PR#620 around advice inner class running proceed and writing field */ + int around(): Target.pointcutTarget() { + MyObject o = new MyObject() { + void ignored() { + result = 1; // remove to avoid bug + } + }; + Common.signal(SIGNALS[0]); + int i = proceed(); + Common.signal(SIGNALS[1]); + return i; + } +} + diff --git a/tests/new/aroundinner/Proxy.java b/tests/new/aroundinner/Proxy.java new file mode 100644 index 000000000..7d4f27157 --- /dev/null +++ b/tests/new/aroundinner/Proxy.java @@ -0,0 +1,30 @@ + +public class Proxy { + public static void main (String[] args) { + Target.main(args); + } +} + +aspect Aspect { + static final String[] SIGNALS = new String[] + { "around - start" + , "around - run - before proceed" + , "around - run - after proceed" + }; + class Proxy { int result; } + + /** @testcase PR#620 around advice inner Runnable running proceed and writing method-final proxy */ + int around(): Target.pointcutTarget() { + final Proxy proxy = new Proxy(); + Runnable runner = new Runnable() { + public void run() { + Common.signal(SIGNALS[1]); + proxy.result = proceed(); + Common.signal(SIGNALS[2]); + } + }; + runner.run(); + Common.signal(SIGNALS[0]); + return proxy.result; + } +} diff --git a/tests/new/aroundinner/RunnableSub.java b/tests/new/aroundinner/RunnableSub.java new file mode 100644 index 000000000..0feef3a29 --- /dev/null +++ b/tests/new/aroundinner/RunnableSub.java @@ -0,0 +1,34 @@ + +public class RunnableSub { + public static void main (String[] args) { + Target.main(args); + } +} + +interface MyRunner extends Runnable {} + +aspect Aspect { + static final String[] SIGNALS = new String[] + { "around - start" + , "around - run - before proceed" + , "around - run - after proceed" + }; + + // introduced field on interface + int MyRunner.result; + + /** @testcase PR#620 around advice inner Runnable (subinterface) running proceed and writing field introduced on subinterface */ + int around(): Target.pointcutTarget() { + MyRunner runner = new MyRunner() { + public void run() { + Common.signal(SIGNALS[1]); + result = proceed(); // remove to avoid bug + Common.signal(SIGNALS[2]); + } + }; + runner.run(); + Common.signal(SIGNALS[0]); + return runner.result; // remove to avoid bug + } +} + diff --git a/tests/new/aroundinner/ThreadNoField.java b/tests/new/aroundinner/ThreadNoField.java new file mode 100644 index 000000000..d8ff0252b --- /dev/null +++ b/tests/new/aroundinner/ThreadNoField.java @@ -0,0 +1,28 @@ + +public class ThreadNoField { + public static void main (String[] args) { + Target.main(args); + } +} + +aspect Aspect { + static final String[] SIGNALS = new String[] + { "around - start" + , "around - run - before proceed" + , "around - run - after proceed" + }; + /** @testcase PR#620 around advice inner Thread subclass running proceed but not writing field */ + int around(): Target.pointcutTarget() { + Thread runner = new Thread() { + public void run() { + Common.signal(SIGNALS[1]); + proceed(); + Common.signal(SIGNALS[2]); + } + }; + runner.start(); + Common.joinWith(runner); + Common.signal(SIGNALS[0]); + return 1; // hard-wired since no result + } +} diff --git a/tests/new/aroundinner/ThreadSub.java b/tests/new/aroundinner/ThreadSub.java new file mode 100644 index 000000000..034f8d048 --- /dev/null +++ b/tests/new/aroundinner/ThreadSub.java @@ -0,0 +1,33 @@ + +public class ThreadSub { + public static void main (String[] args) { + Target.main(args); + } +} + +// need subclass - introduction fails on Thread as outside CCC +class ThreadSubclass extends Thread { + int result; +} + +aspect Aspect { + static final String[] SIGNALS = new String[] + { "around - start" + , "around - run - before proceed" + , "around - run - after proceed" + }; + /** @testcase PR#620 around advice inner Thread subclass running proceed and writing field */ + int around(): Target.pointcutTarget() { + ThreadSubclass runner = new ThreadSubclass() { + public void run() { + Common.signal(SIGNALS[1]); + result = proceed(); // remove to avoid bug + Common.signal(SIGNALS[2]); + } + }; + runner.start(); + Common.joinWith(runner); + Common.signal(SIGNALS[0]); + return runner.result; // remove to avoid bug + } +} diff --git a/tests/new/badCast/Driver.java b/tests/new/badCast/Driver.java new file mode 100644 index 000000000..1a6c04674 --- /dev/null +++ b/tests/new/badCast/Driver.java @@ -0,0 +1,46 @@ +import org.aspectj.testing.Tester; + +// PR#275 & 276 cast error generated by ajc when type not in signature + +public class Driver { + public static void main(String[] args) { test(); } + + public static void test() { + Tester.checkEqual(new SourcePane().go(), -10); + } +} + +class SourcePane { + public int go() { + Location location = new Location(); + return location.lineNumber(); + } +} + +class Location { + public int lineNumber() { + return 10; + } +} + +aspect DriverAspect { + + pointcut locationLineNumber(Location loc): + //XXX Fails with a star + //calls(int *.lineNumber()) && within(SourcePane); + //calls(int loc.lineNumber()) && within(SourcePane); + target(loc) && call(int Location.lineNumber()) && within(SourcePane); + int around(Location loc): locationLineNumber(loc) { + int result = proceed(loc); + return result * -1; + } +// The following code won't report the cast error and will work: +/* + pointcut locationLineNumber(SourcePane s, Location loc): + calls(loc, int lineNumber()) & within(s); + static around(SourcePane s, Location loc) returns int: locationLineNumber(s, loc) { + int result = proceed(s, loc); + return result * -1; + } +*/ +} diff --git a/tests/new/beforeNotRun/Driver.java b/tests/new/beforeNotRun/Driver.java new file mode 100644 index 000000000..55162311e --- /dev/null +++ b/tests/new/beforeNotRun/Driver.java @@ -0,0 +1,38 @@ +import org.aspectj.testing.Tester; + +// PR#265 before advice not run when abstract aspect has "of" clause + +public class Driver { + + public static String result = ""; + + public static void main(String[] args) { test(); } + + public static void test() { + new Driver(); + Tester.checkEqual(result, "-before-init-after", "before and after advice run"); + } + + public Driver() { + init(); + } + + public void init() { + result += "-init"; + } +} + +// when "of" clause is removed test passes +abstract aspect AbstractAspect /*of eachobject(instanceof(Driver))*/ { + pointcut init(Driver tc): call(* init(..)) && this(tc); + + after(Driver tc): init(tc) { + Driver.result += "-after"; + } +} + +aspect BeforeAspectA extends AbstractAspect { + before(Driver tc): init(tc) { + Driver.result += "-before"; + } +} diff --git a/tests/new/cflowAdviceNoSource/Driver.java b/tests/new/cflowAdviceNoSource/Driver.java new file mode 100644 index 000000000..1fd246dd3 --- /dev/null +++ b/tests/new/cflowAdviceNoSource/Driver.java @@ -0,0 +1,29 @@ + +import org.aspectj.testing.Tester; + +// PR#285 cflow advice with no source + +public class Driver { + + public static String s = ""; + + public static void main(String[] args){ test(); } + + public static void test() { + new Driver().go(); + Tester.checkEqual(s, "-go-advised", "advice runs"); + } + + int go(){ + s += "-go"; + return Math.max(1, 3); + } +} + +aspect A of eachcflow(instanceof(Driver) && executions(* go(..))) { + + before (): calls(* Math.*(..)) && ! calls(* Driver.go()) && ! calls(* Driver.test()) { + Driver.s += "-advised"; + } +} + diff --git a/tests/new/cflowObjectCreations/Driver.java b/tests/new/cflowObjectCreations/Driver.java new file mode 100644 index 000000000..15f1d883d --- /dev/null +++ b/tests/new/cflowObjectCreations/Driver.java @@ -0,0 +1,41 @@ + +import org.aspectj.testing.Tester; + +import java.util.*; + +// PR#307 cflow and object creations + + +public class Driver { + + public static String s = ""; + + public static void main(String[] args){ + new FTPServer(); + + Tester.checkEqual(s, "-connected-after", ""); + } +} + +/* PR306 */ +class FTPServer { + public FTPServer() { + new FTPConnection().connect(); + } +} + +class FTPConnection { + public void connect() { + Driver.s += "-connected"; + } +} + +aspect FooBuilding percflow(serverIdentification(FTPServer)) { + pointcut serverIdentification(FTPServer s) : + target(s) && execution(new(..)); + + after() returning (Object ret): + target(FTPConnection) && call(* *(..)) { + Driver.s += "-after"; + } +} diff --git a/tests/new/classaccess/main/Main.java b/tests/new/classaccess/main/Main.java new file mode 100644 index 000000000..adf808ae0 --- /dev/null +++ b/tests/new/classaccess/main/Main.java @@ -0,0 +1,9 @@ + +package main; + +/** @testcase PUREJAVA package class access not enforced outside of package */ +public class Main { + public static void main(String[] args) { + pack1.Target.publicStaticMethod(); // expecting CE here - Target not public + } +} diff --git a/tests/new/classaccess/pack1/Target.java b/tests/new/classaccess/pack1/Target.java new file mode 100644 index 000000000..dbf3f7e71 --- /dev/null +++ b/tests/new/classaccess/pack1/Target.java @@ -0,0 +1,7 @@ + +package pack1; + +/** @testcase PUREJAVA package class access not enforced outside of package */ +class Target { + public static void publicStaticMethod() {} +} diff --git a/tests/new/extraThrows/Driver.java b/tests/new/extraThrows/Driver.java new file mode 100644 index 000000000..00fc340dc --- /dev/null +++ b/tests/new/extraThrows/Driver.java @@ -0,0 +1,76 @@ +import org.aspectj.testing.Tester; + +// PR#259 "throws Exception" clause is unnecessarily added to Driver.main method + +public class Driver { + + /*private*/ static String s = ""; + + public static void main(String[] args) { test(); } + + public static void test() { + Driver ts = new Driver(); + Tester.checkEqual(s, "-bound-around", "bound"); + } + + void bind() throws Exception { s += "-bound"; } + + public Driver() { bind(); } +} + +aspect Aspect { + pointcut bind(): within(Driver) && call(void Driver.bind()); + + declare soft: Exception: bind(); + + void around(): bind() { + try { + proceed(); + } catch (Exception e) { } + Driver.s += "-around"; + } +} + + +/* HERE IS THE FIXED VERSION OF MARK'S TEST (the one in the bug + database was broken): +public class Driver +{ + + Driver() throws Exception { } + + + public static void main(String[] args) { + Driver ts = new Driver(); + Driver.bind("foo",ts); + } + + static void bind(String s, Object o) + {} + + static around() returns Driver: within(Driver) && + calls(Driver, new() ){ + Driver result = null; + try { + result = proceed(); + } catch (Exception e){ } + return result; + } + + + static around(String name) returns void: + within(Driver) && + calls(Driver, * bind(name,..)) { + try { + proceed(name + "0"); + } catch (Exception e) { } + } + + static before(String[] args): + within(Driver) && executions(void main(args)){ + System.out.println("..."); + } + +} +*/ + diff --git a/tests/new/finalMemInit/Driver.java b/tests/new/finalMemInit/Driver.java new file mode 100644 index 000000000..4a253e42a --- /dev/null +++ b/tests/new/finalMemInit/Driver.java @@ -0,0 +1,21 @@ + +import org.aspectj.testing.Tester; + +// PR#162 +// works with JDK > 1.2 but not with JDK < 1.1.8 + +public aspect Driver { + public static void main(String[] args) { test(); } + public static void test() { + Tester.checkEqual(new C().fi, 1, ""); + } + pointcut install(): execution(new()) && within(C); + /*static*/ after () : install() { } +} + +class C { + public final int fi; + C() { + fi = 1; + } +} diff --git a/tests/new/foemmel/TheAspect.java b/tests/new/foemmel/TheAspect.java new file mode 100644 index 000000000..7c1b8fc15 --- /dev/null +++ b/tests/new/foemmel/TheAspect.java @@ -0,0 +1,221 @@ +import org.aspectj.testing.Tester; + +privileged aspect TheAspect perthis(this(TheObject)) { + private TheObject theObject; + private int myPrivate_int=-1, myPackage_int=-1, myProtected_int=-1, myPublic_int=-1; + + after() returning(TheObject obj): execution(new()) { // CW 7 nonmatching target + theObject = obj; + } + + after() returning(): call(* realMain(..)) { + test_eq(); + test_timeseq(); + test_diveq(); + test_modeq(); + test_pluseq(); + test_minuseq(); + test_leftShifteq(); + test_rightShifteq(); + test_xoreq(); + test_andeq(); + test_unsignedRightShifteq(); + test_postinc(); + test_postdec(); + test_preinc(); + test_predec(); + test_oreq(); + test_gets(); + test_calls(); + } + + public void test_eq() { + theObject.private_int = 1; + theObject.protected_int = 2; + theObject.package_int = 3; + theObject.public_int = 4; + Tester.checkEqual(theObject.private_int,1,"set private_int"); + Tester.checkEqual(theObject.protected_int,2,"set protected_int"); + Tester.checkEqual(theObject.package_int,3,"set package_int"); + Tester.checkEqual(theObject.public_int,4,"set public_int"); + } + + public void test_timeseq() { + theObject.private_int *= 4; + theObject.protected_int *= 4; + theObject.package_int *= 4; + theObject.public_int *= 4; + Tester.checkEqual(theObject.private_int,4,"times private_int"); + Tester.checkEqual(theObject.protected_int,8,"times protected_int"); + Tester.checkEqual(theObject.package_int,12,"times package_int"); + Tester.checkEqual(theObject.public_int,16,"times public_int"); + } + + public void test_diveq() { + theObject.private_int /= 2; + theObject.protected_int /= 2; + theObject.package_int /= 2; + theObject.public_int /= 2; + Tester.checkEqual(theObject.private_int,2,"div private_int"); + Tester.checkEqual(theObject.protected_int,4,"div protected_int"); + Tester.checkEqual(theObject.package_int,6,"div package_int"); + Tester.checkEqual(theObject.public_int,8,"div public_int"); + } + + public void test_modeq() { + theObject.private_int %= 2; + theObject.protected_int %= 3; + theObject.package_int %= 4; + theObject.public_int %= 5; + Tester.checkEqual(theObject.private_int,0,"mod private_int"); + Tester.checkEqual(theObject.protected_int,1,"mod protected_int"); + Tester.checkEqual(theObject.package_int,2,"mod package_int"); + Tester.checkEqual(theObject.public_int,3,"mod public_int"); + } + + public void test_pluseq() { + theObject.private_int += 2; + theObject.protected_int += 2; + theObject.package_int += 2; + theObject.public_int += 2; + Tester.checkEqual(theObject.private_int,2,"plus private_int"); + Tester.checkEqual(theObject.protected_int,3,"plus protected_int"); + Tester.checkEqual(theObject.package_int,4,"plus package_int"); + Tester.checkEqual(theObject.public_int,5,"plus public_int"); + } + + public void test_minuseq() { + theObject.private_int -= 1; + theObject.protected_int -= 1; + theObject.package_int -= 1; + theObject.public_int -= 1; + Tester.checkEqual(theObject.private_int,1,"minus private_int"); + Tester.checkEqual(theObject.protected_int,2,"minus protected_int"); + Tester.checkEqual(theObject.package_int,3,"minus package_int"); + Tester.checkEqual(theObject.public_int,4,"minus public_int"); + } + + public void test_leftShifteq() { + theObject.private_int <<= 1; + theObject.protected_int <<= 1; + theObject.package_int <<= 1; + theObject.public_int <<= 1; + Tester.checkEqual(theObject.private_int,2,"left shift private_int"); + Tester.checkEqual(theObject.protected_int,4,"left shift protected_int"); + Tester.checkEqual(theObject.package_int,6,"left shift package_int"); + Tester.checkEqual(theObject.public_int,8,"left shift public_int"); + } + + public void test_rightShifteq() { + theObject.private_int >>= 1; + theObject.protected_int >>= 1; + theObject.package_int >>= 1; + theObject.public_int >>= 1; + Tester.checkEqual(theObject.private_int,1,"right shift private_int"); + Tester.checkEqual(theObject.protected_int,2,"right shift protected_int"); + Tester.checkEqual(theObject.package_int,3,"right shift package_int"); + Tester.checkEqual(theObject.public_int,4,"right shift public_int"); + } + + public void test_xoreq() { + theObject.private_int ^= 0; + theObject.protected_int ^= 1; + theObject.package_int ^= 1; + theObject.public_int ^= 1; + Tester.checkEqual(theObject.private_int,1,"xor private_int"); + Tester.checkEqual(theObject.protected_int,3,"xor protected_int"); + Tester.checkEqual(theObject.package_int,2,"xor package_int"); + Tester.checkEqual(theObject.public_int,5,"xor public_int"); + } + + public void test_andeq() { + theObject.private_int &= 3; + theObject.protected_int &= 6; + theObject.package_int &= 3; + theObject.public_int &= 4; + Tester.checkEqual(theObject.private_int,1,"and private_int"); + Tester.checkEqual(theObject.protected_int,2,"and protected_int"); + Tester.checkEqual(theObject.package_int,2,"and package_int"); + Tester.checkEqual(theObject.public_int,4,"and public_int"); + } + + public void test_unsignedRightShifteq() { + theObject.private_int >>>= 0; + theObject.protected_int >>>= 1; + theObject.package_int >>>= 1; + theObject.public_int >>>= 2; + Tester.checkEqual(theObject.private_int,1,"unsigned right shift private_int"); + Tester.checkEqual(theObject.protected_int,1,"unsigned right shift protected_int"); + Tester.checkEqual(theObject.package_int,1,"unsigned right shift package_int"); + Tester.checkEqual(theObject.public_int,1,"unsigned right shift public_int"); + } + + public void test_postinc() { + theObject.private_int ++; + theObject.protected_int ++; + theObject.package_int ++; + theObject.public_int ++; + Tester.checkEqual(theObject.private_int,2,"post ++ private_int"); + Tester.checkEqual(theObject.protected_int,2,"post ++ protected_int"); + Tester.checkEqual(theObject.package_int,2,"post ++ package_int"); + Tester.checkEqual(theObject.public_int,2,"post ++ public_int"); + } + + public void test_postdec() { + theObject.private_int --; + theObject.protected_int --; + theObject.package_int --; + theObject.public_int --; + Tester.checkEqual(theObject.private_int,1,"post -- private_int"); + Tester.checkEqual(theObject.protected_int,1,"post -- protected_int"); + Tester.checkEqual(theObject.package_int,1,"post -- package_int"); + Tester.checkEqual(theObject.public_int,1,"post -- public_int"); + } + + public void test_preinc() { + ++ theObject.private_int; + ++ theObject.protected_int; + ++ theObject.package_int; + ++ theObject.public_int; + Tester.checkEqual(theObject.private_int,2,"pre ++ private_int"); + Tester.checkEqual(theObject.protected_int,2,"pre ++ protected_int"); + Tester.checkEqual(theObject.package_int,2,"pre ++ package_int"); + Tester.checkEqual(theObject.public_int,2,"pre ++ public_int"); + } + + public void test_predec() { + -- theObject.private_int; + -- theObject.protected_int; + -- theObject.package_int; + -- theObject.public_int; + Tester.checkEqual(theObject.private_int,1,"pre -- private_int"); + Tester.checkEqual(theObject.protected_int,1,"pre -- protected_int"); + Tester.checkEqual(theObject.package_int,1,"pre -- package_int"); + Tester.checkEqual(theObject.public_int,1,"pre -- public_int"); + } + + public void test_oreq() { + theObject.private_int |= 8; + theObject.protected_int |= 8; + theObject.package_int |= 8; + theObject.public_int |= 8; + Tester.checkEqual(theObject.private_int,9,"or private_int"); + Tester.checkEqual(theObject.protected_int,9,"or protected_int"); + Tester.checkEqual(theObject.package_int,9,"or package_int"); + Tester.checkEqual(theObject.public_int,9,"or public_int"); + } + + public void test_gets() { + myPrivate_int = theObject.private_int; + myProtected_int = theObject.protected_int; + myPackage_int = theObject.package_int; + myPublic_int = theObject.public_int; + } + + public void test_calls() { + theObject.private_call(); + theObject.protected_call(); + theObject.package_call(); + theObject.public_call(); + } +} diff --git a/tests/new/foemmel/TheObject.java b/tests/new/foemmel/TheObject.java new file mode 100644 index 000000000..9a23341bf --- /dev/null +++ b/tests/new/foemmel/TheObject.java @@ -0,0 +1,241 @@ +import org.aspectj.testing.Tester; + +public class TheObject { + public static void main(String[] args) { new TheObject().realMain(args); } + public void realMain(String[] args) { + new TheObject(); + } + + private int private_int; + protected int protected_int; + /*package*/ int package_int; + public int public_int; + + private int private_call() { return private_int; } + protected int protected_call() { return protected_int; } + /*package*/ int package_call() { return package_int; } + public int public_call() { return public_int; } + +} + +/* ---------------------- + privileged aspect TheAspect of eachobject(instanceof(TheObject)) { + private TheObject theObject; + private int myPrivate_int=-1, myPackage_int=-1, myProtected_int=-1, myPublic_int=-1; + + after() returning(TheObject obj): receptions(new()) { + theObject = obj; + } + + after() returning(): receptions(* realMain(..)) { + test_eq(); + test_timeseq(); + test_diveq(); + test_modeq(); + test_pluseq(); + test_minuseq(); + test_leftShifteq(); + test_rightShifteq(); + test_xoreq(); + test_andeq(); + test_unsignedRightShifteq(); + test_postinc(); + test_postdec(); + test_preinc(); + test_predec(); + test_oreq(); + test_gets(); + test_calls(); + } + + public void test_eq() { + theObject.private_int = 1; + theObject.protected_int = 2; + theObject.package_int = 3; + theObject.public_int = 4; + Tester.checkEqual(theObject.private_int,1,"set private_int"); + Tester.checkEqual(theObject.protected_int,2,"set protected_int"); + Tester.checkEqual(theObject.package_int,3,"set package_int"); + Tester.checkEqual(theObject.public_int,4,"set public_int"); + } + + public void test_timeseq() { + theObject.private_int *= 4; + theObject.protected_int *= 4; + theObject.package_int *= 4; + theObject.public_int *= 4; + Tester.checkEqual(theObject.private_int,4,"times private_int"); + Tester.checkEqual(theObject.protected_int,8,"times protected_int"); + Tester.checkEqual(theObject.package_int,12,"times package_int"); + Tester.checkEqual(theObject.public_int,16,"times public_int"); + } + + public void test_diveq() { + theObject.private_int /= 2; + theObject.protected_int /= 2; + theObject.package_int /= 2; + theObject.public_int /= 2; + Tester.checkEqual(theObject.private_int,2,"div private_int"); + Tester.checkEqual(theObject.protected_int,4,"div protected_int"); + Tester.checkEqual(theObject.package_int,6,"div package_int"); + Tester.checkEqual(theObject.public_int,8,"div public_int"); + } + + public void test_modeq() { + theObject.private_int %= 2; + theObject.protected_int %= 3; + theObject.package_int %= 4; + theObject.public_int %= 5; + Tester.checkEqual(theObject.private_int,0,"mod private_int"); + Tester.checkEqual(theObject.protected_int,1,"mod protected_int"); + Tester.checkEqual(theObject.package_int,2,"mod package_int"); + Tester.checkEqual(theObject.public_int,3,"mod public_int"); + } + + public void test_pluseq() { + theObject.private_int += 2; + theObject.protected_int += 2; + theObject.package_int += 2; + theObject.public_int += 2; + Tester.checkEqual(theObject.private_int,2,"plus private_int"); + Tester.checkEqual(theObject.protected_int,3,"plus protected_int"); + Tester.checkEqual(theObject.package_int,4,"plus package_int"); + Tester.checkEqual(theObject.public_int,5,"plus public_int"); + } + + public void test_minuseq() { + theObject.private_int -= 1; + theObject.protected_int -= 1; + theObject.package_int -= 1; + theObject.public_int -= 1; + Tester.checkEqual(theObject.private_int,1,"minus private_int"); + Tester.checkEqual(theObject.protected_int,2,"minus protected_int"); + Tester.checkEqual(theObject.package_int,3,"minus package_int"); + Tester.checkEqual(theObject.public_int,4,"minus public_int"); + } + + public void test_leftShifteq() { + theObject.private_int <<= 1; + theObject.protected_int <<= 1; + theObject.package_int <<= 1; + theObject.public_int <<= 1; + Tester.checkEqual(theObject.private_int,2,"left shift private_int"); + Tester.checkEqual(theObject.protected_int,4,"left shift protected_int"); + Tester.checkEqual(theObject.package_int,6,"left shift package_int"); + Tester.checkEqual(theObject.public_int,8,"left shift public_int"); + } + + public void test_rightShifteq() { + theObject.private_int >>= 1; + theObject.protected_int >>= 1; + theObject.package_int >>= 1; + theObject.public_int >>= 1; + Tester.checkEqual(theObject.private_int,1,"right shift private_int"); + Tester.checkEqual(theObject.protected_int,2,"right shift protected_int"); + Tester.checkEqual(theObject.package_int,3,"right shift package_int"); + Tester.checkEqual(theObject.public_int,4,"right shift public_int"); + } + + public void test_xoreq() { + theObject.private_int ^= 0; + theObject.protected_int ^= 1; + theObject.package_int ^= 1; + theObject.public_int ^= 1; + Tester.checkEqual(theObject.private_int,1,"xor private_int"); + Tester.checkEqual(theObject.protected_int,3,"xor protected_int"); + Tester.checkEqual(theObject.package_int,2,"xor package_int"); + Tester.checkEqual(theObject.public_int,5,"xor public_int"); + } + + public void test_andeq() { + theObject.private_int &= 3; + theObject.protected_int &= 6; + theObject.package_int &= 3; + theObject.public_int &= 4; + Tester.checkEqual(theObject.private_int,1,"and private_int"); + Tester.checkEqual(theObject.protected_int,2,"and protected_int"); + Tester.checkEqual(theObject.package_int,2,"and package_int"); + Tester.checkEqual(theObject.public_int,4,"and public_int"); + } + + public void test_unsignedRightShifteq() { + theObject.private_int >>>= 0; + theObject.protected_int >>>= 1; + theObject.package_int >>>= 1; + theObject.public_int >>>= 2; + Tester.checkEqual(theObject.private_int,1,"unsigned right shift private_int"); + Tester.checkEqual(theObject.protected_int,1,"unsigned right shift protected_int"); + Tester.checkEqual(theObject.package_int,1,"unsigned right shift package_int"); + Tester.checkEqual(theObject.public_int,1,"unsigned right shift public_int"); + } + + public void test_postinc() { + theObject.private_int ++; + theObject.protected_int ++; + theObject.package_int ++; + theObject.public_int ++; + Tester.checkEqual(theObject.private_int,2,"post ++ private_int"); + Tester.checkEqual(theObject.protected_int,2,"post ++ protected_int"); + Tester.checkEqual(theObject.package_int,2,"post ++ package_int"); + Tester.checkEqual(theObject.public_int,2,"post ++ public_int"); + } + + public void test_postdec() { + theObject.private_int --; + theObject.protected_int --; + theObject.package_int --; + theObject.public_int --; + Tester.checkEqual(theObject.private_int,1,"post -- private_int"); + Tester.checkEqual(theObject.protected_int,1,"post -- protected_int"); + Tester.checkEqual(theObject.package_int,1,"post -- package_int"); + Tester.checkEqual(theObject.public_int,1,"post -- public_int"); + } + + public void test_preinc() { + ++ theObject.private_int; + ++ theObject.protected_int; + ++ theObject.package_int; + ++ theObject.public_int; + Tester.checkEqual(theObject.private_int,2,"pre ++ private_int"); + Tester.checkEqual(theObject.protected_int,2,"pre ++ protected_int"); + Tester.checkEqual(theObject.package_int,2,"pre ++ package_int"); + Tester.checkEqual(theObject.public_int,2,"pre ++ public_int"); + } + + public void test_predec() { + -- theObject.private_int; + -- theObject.protected_int; + -- theObject.package_int; + -- theObject.public_int; + Tester.checkEqual(theObject.private_int,1,"pre -- private_int"); + Tester.checkEqual(theObject.protected_int,1,"pre -- protected_int"); + Tester.checkEqual(theObject.package_int,1,"pre -- package_int"); + Tester.checkEqual(theObject.public_int,1,"pre -- public_int"); + } + + public void test_oreq() { + theObject.private_int |= 8; + theObject.protected_int |= 8; + theObject.package_int |= 8; + theObject.public_int |= 8; + Tester.checkEqual(theObject.private_int,9,"or private_int"); + Tester.checkEqual(theObject.protected_int,9,"or protected_int"); + Tester.checkEqual(theObject.package_int,9,"or package_int"); + Tester.checkEqual(theObject.public_int,9,"or public_int"); + } + + public void test_gets() { + myPrivate_int = theObject.private_int; + myProtected_int = theObject.protected_int; + myPackage_int = theObject.package_int; + myPublic_int = theObject.public_int; + } + + public void test_calls() { + theObject.private_call(); + theObject.protected_call(); + theObject.package_call(); + theObject.public_call(); + } +} +-------------------- */ diff --git a/tests/new/innerAspectAccess/Driver.java b/tests/new/innerAspectAccess/Driver.java new file mode 100644 index 000000000..e77b66e2e --- /dev/null +++ b/tests/new/innerAspectAccess/Driver.java @@ -0,0 +1,40 @@ +import org.aspectj.testing.Tester; + +// PR#211 + +public class Driver { + public static String s = "s"; + + public static void main(String[] args) { test(); } + + public static void test() { + doIt(); + Tester.checkEqual(s, "s:a:b", "both advice worked"); + } + + public static String doIt() { + return s; + } +} + +aspect Outer { + static int N = 10; + + pointcut staticMeth(): within(Driver) && execution(String doIt()); + + static aspect Inner { + static void foo() { + int i = N; + } + + before(): staticMeth() { + Driver.s += ":b"; + } + + pointcut innerPoints(): within(Driver) && execution(void test()); + } + + before(): Outer.Inner.innerPoints() { + Driver.s += ":a"; + } +} diff --git a/tests/new/innerConsSyntax/Driver.java b/tests/new/innerConsSyntax/Driver.java new file mode 100644 index 000000000..b432f5f9a --- /dev/null +++ b/tests/new/innerConsSyntax/Driver.java @@ -0,0 +1,22 @@ + +import org.aspectj.testing.Tester; + +// PR#192 + +public class Driver { + private static java.util.Vector v = new java.util.Vector(); + + public static void main(String[] args) { test(); } + + public static void test() { + Driver temp = new Driver(); + + Inner inner = temp.new Inner(); + + Tester.check(inner.isInst, "Inner instance flag"); + } + + class Inner { + public boolean isInst = true; + } +}
\ No newline at end of file diff --git a/tests/new/innerInterfaces/other/Test.java b/tests/new/innerInterfaces/other/Test.java new file mode 100644 index 000000000..4e4190c05 --- /dev/null +++ b/tests/new/innerInterfaces/other/Test.java @@ -0,0 +1,5 @@ +package other; + +public class Test { + public void foo() { } +} diff --git a/tests/new/innerInterfaces/p/Driver.java b/tests/new/innerInterfaces/p/Driver.java new file mode 100644 index 000000000..5f5e7d72a --- /dev/null +++ b/tests/new/innerInterfaces/p/Driver.java @@ -0,0 +1,14 @@ +package p; + +import org.aspectj.testing.Tester; +import other.Test; + +public class Driver { + public static void main(String[] args) { + Test t = new Test(); + t.foo(); + Tester.checkEqual(InnerTest.getCallCount(t), 1); + t.foo(); + Tester.checkEqual(InnerTest.getCallCount(t), 2); + } +} diff --git a/tests/new/innerInterfaces/p/InnerTest.java b/tests/new/innerInterfaces/p/InnerTest.java new file mode 100644 index 000000000..adc25be1f --- /dev/null +++ b/tests/new/innerInterfaces/p/InnerTest.java @@ -0,0 +1,17 @@ +package p; + +aspect InnerTest { + private interface Inner {} + declare parents: other.Test implements Inner; + + private int Inner.count = 0; + + before(Inner i): target(i) && call(* *(..)) { + i.count++; + } + + public static int getCallCount(Object o) { + if (o instanceof Inner) return ((Inner)o).count; + else return -1; + } +} diff --git a/tests/new/introTypeMissing/AspectInIntroducedMethod.java b/tests/new/introTypeMissing/AspectInIntroducedMethod.java new file mode 100644 index 000000000..17de800e9 --- /dev/null +++ b/tests/new/introTypeMissing/AspectInIntroducedMethod.java @@ -0,0 +1,32 @@ + +import org.aspectj.testing.Tester; + +public class AspectInIntroducedMethod { + public static void main(String[] args) { + String result = new TargetClass().addMethod(); + Tester.check("inner".equals(result), + "\"inner\".equals(\"" + result + "\")"); + } +} +aspect A { + class inner { + public String name() { return "inner"; } + } + /** shows A usable in non-introductions */ + public String getName() { + new inner(); + A a = this; + return a.new inner().name(); + } + + // NPE at NewInstanceExpr.java:287 + /** @testcase qualified new expression using aspect type in method introduction body */ + public String TargetClass.addMethod() { + String result = null; + A a = A.aspectOf(); + result = a.getName(); + result = a.new inner().name(); // bug: remove this to avoid NPE + return result; + } +} +class TargetClass {} diff --git a/tests/new/introTypeMissing/Cast.java b/tests/new/introTypeMissing/Cast.java new file mode 100644 index 000000000..f262b938b --- /dev/null +++ b/tests/new/introTypeMissing/Cast.java @@ -0,0 +1,46 @@ + + +import org.aspectj.testing.Tester; + +public class Cast { + public static void main(String[] args) { + Tester.expectEvent("cast"); + new TargetClass().introducedCast(); + Tester.checkAllEvents(); + } +} + +aspect CastAspect { + /** @testcase Introduced type unavailable to cast expressions in introduced methods */ + public void TargetClass.introducedCast() { + boolean boolean_1 = getboolean(); + boolean boolean_2 = (boolean) getboolean(); + boolean boolean_3 = (boolean) this.getboolean(); + byte byte_1 = getbyte(); + byte byte_2 = (byte) getbyte(); + byte byte_3 = (byte) this.getbyte(); + char char_1 = getchar(); + char char_2 = (char) getchar(); + char char_3 = (char) this.getchar(); + short short_1 = getshort(); + short short_2 = (short) getshort(); + short short_3 = (short) this.getshort(); + int int_1 = getint(); + int int_2 = (int) getint(); + int int_3 = (int) this.getint(); + long long_1 = getlong(); + long long_2 = (long) getlong(); + long long_3 = (long) this.getlong(); + float float_1 = getfloat(); + float float_2 = (float) getfloat(); + float float_3 = (float) this.getfloat(); + double double_1 = getdouble(); + double double_2 = (double) getdouble(); + double double_3 = (double) this.getdouble(); + //X X_1 = getX(); + //X X_2 = (X) getX(); + //X X_3 = (X) this.getX(); + Util.signal("cast"); + } +} + diff --git a/tests/new/introTypeMissing/CastInFieldInit.java b/tests/new/introTypeMissing/CastInFieldInit.java new file mode 100644 index 000000000..ed0e6b5a3 --- /dev/null +++ b/tests/new/introTypeMissing/CastInFieldInit.java @@ -0,0 +1,54 @@ + + +import org.aspectj.testing.Tester; +import org.aspectj.testing.Tester; + +public class CastInFieldInit { + public static void main(String[] args) { + Tester.expectEvent("castfield"); + TargetClass me = new TargetClass(); + Tester.check(me.result, "me.result"); + Tester.checkAllEvents(); + } +} + +interface Valid { public boolean valid();} + +aspect CastInFieldInitAspect { + /** @testcase Introduced type unavailable to cast expressions in introduced field initializers */ + public boolean TargetClass.result = + new Valid() { + public boolean valid() { + boolean boolean_1 = getboolean(); + boolean boolean_2 = (boolean) getboolean(); + //boolean boolean_3 = (boolean) TargetClass.this.getboolean(); + byte byte_1 = getbyte(); + byte byte_2 = (byte) getbyte(); + //byte byte_3 = (byte) TargetClass.this.getbyte(); + char char_1 = getchar(); + char char_2 = (char) getchar(); + //char char_3 = (char) TargetClass.this.getchar(); + short short_1 = getshort(); + short short_2 = (short) getshort(); + //short short_3 = (short) TargetClass.this.getshort(); + int int_1 = getint(); + int int_2 = (int) getint(); + //int int_3 = (int) TargetClass.this.getint(); + long long_1 = getlong(); + long long_2 = (long) getlong(); + //long long_3 = (long) TargetClass.this.getlong(); + float float_1 = getfloat(); + float float_2 = (float) getfloat(); + //float float_3 = (float) TargetClass.this.getfloat(); + double double_1 = getdouble(); + double double_2 = (double) getdouble(); + //double double_3 = (double) TargetClass.this.getdouble(); + //X X_1 = getX(); + //X X_2 = (X) getX(); + //X X_3 = (X) this.getX(); + Util.signal("castfield"); + return (boolean_1 && boolean_2 ); + } + }.valid(); +} + diff --git a/tests/new/introTypeMissing/Inner.java b/tests/new/introTypeMissing/Inner.java new file mode 100644 index 000000000..ee3b8f52b --- /dev/null +++ b/tests/new/introTypeMissing/Inner.java @@ -0,0 +1,21 @@ +import org.aspectj.testing.Tester; + +public class Inner { + public static void main(String[] args) { + Tester.expectEvent("inner"); + new TargetClass().inner(); + Tester.checkAllEvents(); + } +} + +aspect InstanceOfAspect { + /** @testcase Introduced type unavailable to qualified new expressions in introduced methods */ + public void TargetClass.inner() { + InnerClass i = this.new InnerClass(); + if (!i.valid()) Util.fail("this.new InnerClass()"); + InnerClass j = getThis().new InnerClass(); + if (!j.valid()) Util.fail("getThis().new InnerClass()"); + Util.signal("inner"); + } +} + diff --git a/tests/new/introTypeMissing/InnerInFieldInit.java b/tests/new/introTypeMissing/InnerInFieldInit.java new file mode 100644 index 000000000..3269fce3f --- /dev/null +++ b/tests/new/introTypeMissing/InnerInFieldInit.java @@ -0,0 +1,29 @@ +import org.aspectj.testing.Tester; +import org.aspectj.testing.Tester; + +public class InnerInFieldInit { + public static void main(String[] args) { + Tester.expectEvent("innerfield"); + TargetClass me = new TargetClass(); + Tester.check(me.result, "me.result"); + Tester.checkAllEvents(); + } +} + +interface Valid { public boolean valid();} + +aspect InnerInFieldInitAspect { + /** @testcase Introduced type unavailable to qualified new expressions in introduced field initializers */ + public boolean TargetClass.result = + new Valid() { + public boolean valid() { + InnerClass i = TargetClass.this.new InnerClass(); + if (!i.valid()) Util.fail("this.new InnerClass()"); + InnerClass j = getThis().new InnerClass(); + if (!j.valid()) Util.fail("getThis().new InnerClass()"); + Util.signal("innerfield"); + return i.valid() && j.valid(); + } + }.valid(); +} + diff --git a/tests/new/introTypeMissing/InstanceOf.java b/tests/new/introTypeMissing/InstanceOf.java new file mode 100644 index 000000000..f78bda28e --- /dev/null +++ b/tests/new/introTypeMissing/InstanceOf.java @@ -0,0 +1,32 @@ +import org.aspectj.testing.Tester; + +public class InstanceOf { + public static void main(String[] args) { + Tester.expectEvent("instanceOf"); + new TargetClass().instanceOf(); + Tester.checkAllEvents(); + } +} + +aspect InstanceOfAspect { + /** @testcase Introduced type unavailable to instanceof expressions in introduced methods */ + public void TargetClass.instanceOf() { + /* expecting compiler error, + but only getting compiler warnings and generated class? + -> needs work + */ + // -------- RuntimeException: "Unsupported emit on NotFoundType" Type.java:460 + if (!((getboolean()) instanceof boolean)) { Util.fail("boolean"); } + if (!((getchar()) instanceof char)) { Util.fail("char"); } + if (!((getbyte()) instanceof byte)) { Util.fail("byte"); } + if (!((getshort()) instanceof short)) { Util.fail("short"); } + if (!((getint()) instanceof int)) { Util.fail("int"); } + if (!((getlong()) instanceof long)) { Util.fail("long"); } + if (!((getfloat()) instanceof float)) { Util.fail("float"); } + if (!((getdouble()) instanceof double)) { Util.fail("double"); } + // ------ todo: expecting error, get RuntimeException + //if (!((doVoid()) instanceof Void)) { Tester.check(false,"void"); } + Util.signal("instanceOf"); + } +} + diff --git a/tests/new/introTypeMissing/TargetClass.java b/tests/new/introTypeMissing/TargetClass.java new file mode 100644 index 000000000..8883035ba --- /dev/null +++ b/tests/new/introTypeMissing/TargetClass.java @@ -0,0 +1,189 @@ +/* + @testcase definitions for introduced type test cases + --- initial variants + // -------- error "can't emit cast for NotFoundType() to PrimitiveType(int) + //double i = (double) i2() - i1(); + //int i = (int) this.someInt(); + + // -------- compiler RuntimeException: "Unsupported emit on NotFoundType" Type.java:460 + //double j = (double) (d2() - d1()); + //if ((d2() - d1()) instanceof float) { doTrue(); } + //if ((d2() - d1()) instanceof int) { doTrue(); } + //if ((d2() - d1()) instanceof short) { doTrue(); } + //if ((d2() - d1()) instanceof double) { doTrue(); } + //if ((i2() - i1()) instanceof int) { doTrue(); } + //if (!((getBoolean()) instanceof boolean)) { Tester.check(false,"boolean"); } + //if (!((getChar()) instanceof char)) { Tester.check(false,"char"); } + //if (!((getByte()) instanceof byte)) { Tester.check(false,"byte"); } + if (d2 instanceof double) { doTrue(); } + + // ------ expecting error, get compiler RuntimeException + if (!((doVoid()) instanceof Void)) { Tester.check(false,"void"); } + + // -------- NPE NewInstanceExpr.java:287 + //InnerClass i = this.new InnerClass(); + //InnerClass i = getThis().new InnerClass(); + +--- generalization of initial variants + primitive type not found: + either the introduced-on type or the method type of it + + --- possibly-relevant variants + [failingTypeExpressions: instanceof, cast, qualified-new] + x [introduced|normal|subclass] + x [static|{default}] + x [methods|field initializers] + x [types=[String|Object|Type]|primitiveTypes=[boolean|...]] + + --- actual variants + [failingTypeExpressions] + x [introduced|subclass] + x [methods|field initializers] + x [primitiveTypes] + except cast expression only for introduced methods - uncertain here + +*/ + + +class Type {} +public class TargetClass { + TargetClass getThis() { return this ; } + boolean getboolean() { return (this != null); } + byte getbyte() { return '\1'; } + char getchar() { return '\1'; } + short getshort() { return 0; } + int getint() { return 0; } + long getlong() { return 1l; } + float getfloat() { return 1f; } + double getdouble() { return 1d; } + String getstring() { return ""; } + + void doVoid() { } + Type getType() { return null; } + + /** run PUREJAVA variant of the tests */ + public static void main(String[] args) { + PureJava me = new PureJava(); + me.run(); + if (!me.result_cast) Util.fail("me.result_cast"); + if (!me.result_inner) Util.fail("me.result_inner"); + } + public class InnerClass { + public boolean valid() { + return (null != this); + } + } +} + +/** PUREJAVA variant of the tests */ +class PureJava extends TargetClass { + public void run() { + instanceOf(); + cast(); + newInner(); + } + + public void newInner() { + InnerClass i = this.new InnerClass(); + if (!i.valid()) Util.fail("this.new InnerClass()"); + InnerClass j = getThis().new InnerClass(); + if (!j.valid()) Util.fail("getThis().new InnerClass()"); + Util.signal("inner"); + } + + public void cast() { + boolean boolean_1 = getboolean(); + boolean boolean_2 = (boolean) getboolean(); + boolean boolean_3 = (boolean) this.getboolean(); + byte byte_1 = getbyte(); + byte byte_2 = (byte) getbyte(); + byte byte_3 = (byte) this.getbyte(); + char char_1 = getchar(); + char char_2 = (char) getchar(); + char char_3 = (char) this.getchar(); + short short_1 = getshort(); + short short_2 = (short) getshort(); + short short_3 = (short) this.getshort(); + int int_1 = getint(); + int int_2 = (int) getint(); + int int_3 = (int) this.getint(); + long long_1 = getlong(); + long long_2 = (long) getlong(); + long long_3 = (long) this.getlong(); + float float_1 = getfloat(); + float float_2 = (float) getfloat(); + float float_3 = (float) this.getfloat(); + double double_1 = getdouble(); + double double_2 = (double) getdouble(); + double double_3 = (double) this.getdouble(); + //X X_1 = getX(); + //X X_2 = (X) getX(); + //X X_3 = (X) this.getX(); + Util.signal("cast"); + } + public void instanceOf() { + // -------- RuntimeException: "Unsupported emit on NotFoundType" Type.java:460 + /* + if (!((getBoolean()) instanceof Boolean)) { Util.fail("boolean"); } + if (!((getChar()) instanceof char)) { Util.fail("char"); } + if (!((getByte()) instanceof byte)) { Util.fail("byte"); } + if (!((getShort()) instanceof short)) { Util.fail("short"); } + if (!((getInt()) instanceof int)) { Util.fail("int"); } + if (!((getLong()) instanceof long)) { Util.fail("long"); } + if (!((getFloat()) instanceof float)) { Util.fail("float"); } + if (!((getDouble()) instanceof double)) { Util.fail("double"); } + */ + // ------ todo: expecting error, get RuntimeException + //if (!((doVoid()) instanceof Void)) { Tester.check(false,"void"); } + Util.signal("instanceOf"); + } + // ---------- field initializer + interface Result { public boolean run();} + boolean result_inner = + new Result() { + public boolean run() { + TargetClass.InnerClass i = ((TargetClass) PureJava.this).new InnerClass(); + if (!i.valid()) Util.fail("this.new InnerClass()"); + TargetClass.InnerClass j = ((TargetClass) getThis()).new InnerClass(); + if (!j.valid()) Util.fail("getThis().new InnerClass()"); + Util.signal("innerfield"); + return i.valid() && j.valid(); + } + }.run(); + boolean result_cast = + new Result() { + public boolean run() { + boolean boolean_1 = getboolean(); + boolean boolean_2 = (boolean) getboolean(); + boolean boolean_3 = (boolean) PureJava.this.getboolean(); + byte byte_1 = getbyte(); + byte byte_2 = (byte) getbyte(); + byte byte_3 = (byte) PureJava.this.getbyte(); + char char_1 = getchar(); + char char_2 = (char) getchar(); + char char_3 = (char) PureJava.this.getchar(); + short short_1 = getshort(); + short short_2 = (short) getshort(); + short short_3 = (short) PureJava.this.getshort(); + int int_1 = getint(); + int int_2 = (int) getint(); + int int_3 = (int) PureJava.this.getint(); + long long_1 = getlong(); + long long_2 = (long) getlong(); + long long_3 = (long) PureJava.this.getlong(); + float float_1 = getfloat(); + float float_2 = (float) getfloat(); + float float_3 = (float) PureJava.this.getfloat(); + double double_1 = getdouble(); + double double_2 = (double) getdouble(); + double double_3 = (double) PureJava.this.getdouble(); + //X X_1 = getX(); + //X X_2 = (X) getX(); + //X X_3 = (X) this.getX(); + Util.signal("castfield"); + return (boolean_1 && boolean_2 && boolean_3); + } + }.run(); + +} + diff --git a/tests/new/introTypeMissing/TargetClassCF.java b/tests/new/introTypeMissing/TargetClassCF.java new file mode 100644 index 000000000..e3e3aae49 --- /dev/null +++ b/tests/new/introTypeMissing/TargetClassCF.java @@ -0,0 +1,30 @@ + +public class TargetClassCF { + /** run PUREJAVA variant of the tests */ + public static void main(String[] args) { + throw new Error("expecting compile failure"); + } +} + +class TargetClass { + boolean getboolean() { return (this != null); } + public class InnerClass { + public boolean valid() { + return (null != this); + } + } +} + +/** @testcase superclass n/a as this qualifier in inner classes */ +class PureJava extends TargetClass { + public class inner { + public void run() { + InnerClass j = TargetClass.this.new InnerClass(); // s.b. PureJava + boolean boolean_4 = TargetClass.this.getboolean(); // s.b. PureJava + } + } + + boolean result_cast = TargetClass.this.getboolean(); // s.b. PureJava + InnerClass f = TargetClass.this.new InnerClass(); // s.b. PureJava +} + diff --git a/tests/new/introTypeMissing/TargetClassCP.java b/tests/new/introTypeMissing/TargetClassCP.java new file mode 100644 index 000000000..2247f8c7b --- /dev/null +++ b/tests/new/introTypeMissing/TargetClassCP.java @@ -0,0 +1,38 @@ +import org.aspectj.testing.Tester; + +public class TargetClassCP { + /** run PUREJAVA variant of the tests */ + public static void main(String[] args) { + SubClass me = new SubClass(); + Tester.check(me.field, "me.field"); + Tester.check(me.f.valid(), "me.f.valid()"); + Tester.check(me.new inner().run(), "me.new inner().run() "); + Tester.check(me.result_cast, "me.result_cast"); + } +} + +class TargetClass { + boolean ok = true; + boolean getboolean() { return (this != null); } + public class InnerClass { + public boolean valid() { + return (null != this); + } + } +} + +/** @testcase enclosing class available as this qualifier in inner classes */ +class SubClass extends TargetClass { + public class inner { + public boolean run() { + InnerClass j = SubClass.this.new InnerClass(); + boolean boolean_4 = SubClass.this.getboolean(); + return (boolean_4 && j.valid()); + } + } + + boolean result_cast = SubClass.this.getboolean(); + InnerClass f = SubClass.this.new InnerClass(); + boolean field = SubClass.this.ok; +} + diff --git a/tests/new/introTypeMissing/ThisInIntroFieldInit.java b/tests/new/introTypeMissing/ThisInIntroFieldInit.java new file mode 100644 index 000000000..4517ac1ac --- /dev/null +++ b/tests/new/introTypeMissing/ThisInIntroFieldInit.java @@ -0,0 +1,93 @@ +import org.aspectj.testing.Tester; +import org.aspectj.testing.Tester; + +public class ThisInIntroFieldInit { + public static void main(String[] args) { + Tester.expectEvent("result init"); + Tester.expectEvent("internalResult init"); + TargetClass me = new TargetClass(); + + // pure-java - field references + Tester.check(me.t_result_ref, "me.t_result_ref"); + Tester.check(me.t_result_ref_this, "me.t_result_ref_this"); + Tester.check(me.t_result_ref_qualified, "me.t_result_ref_qualified"); + + // pure-java - method references + Tester.check(me.t_result, "me.t_result"); + Tester.check(me.t_result_this, "me.t_result_this"); + Tester.check(me.t_result_qualified, "me.t_result_qualified"); + Tester.check(me.t_result_anon, "me.t_result_anon"); + + // introduction - field references + // local initializers are run after introduced initializers in 1.1 + Tester.check(!me.result_ref, "me.result_ref"); + Tester.check(!me.result_ref_this, "me.result_ref_this"); + Tester.check(!me.result_ref_qualified, "me.result_ref_qualified"); + + // introduction - method references + Tester.check(me.result, "me.result"); + Tester.check(me.result_this, "me.result_this"); + Tester.check(me.result_qualified, "me.result_qualified"); + Tester.check(me.result_anon, "me.result_anon"); + + Tester.checkAllEvents(); + } +} + +class TargetClass { + boolean targTest() { return (null != this); } + public boolean ok = (this != null); + /** @testcase field reference in field initializer */ + public boolean t_result_ref = ok; + /** @testcase this field reference in field initializer */ + public boolean t_result_ref_this = this.ok; + /** @testcase qualified this field reference in field initializer */ + public boolean t_result_ref_qualified = TargetClass.this.ok; + /** @testcase method reference in field initializer */ + public boolean t_result = targTest(); + /** @testcase this method in field initializer */ + public boolean t_result_this = this.targTest(); + /** @testcase qualified this method in field initializer */ + public boolean t_result_qualified = TargetClass.this.targTest(); + /** @testcase qualified this method in field initializer anon class definition */ + boolean t_result_anon + = new Validator() { + public boolean valid() { + boolean one = targTest(); + boolean two = TargetClass.this.targTest(); + boolean three = ok; + boolean four = TargetClass.this.ok; + Tester.event("internalResult init"); + return (one && two && three && four); + }}.valid(); +} +interface Validator { + public boolean valid(); +} + +aspect A { + /** @testcase field reference in field initializer */ + public boolean TargetClass.result_ref = ok; + /** @testcase this field reference in field initializer */ + public boolean TargetClass.result_ref_this = this.ok; + /** @testcase qualified this field reference in field initializer */ + public boolean TargetClass.result_ref_qualified = TargetClass.this.ok; + + /** @testcase method reference in introduced field initializer */ + public boolean TargetClass.result = targTest(); + /** @testcase this method in introduced field initializer */ + public boolean TargetClass.result_this = this.targTest(); + /** @testcase qualified this method in introduced field initializer */ + public boolean TargetClass.result_qualified = TargetClass.this.targTest(); + /** @testcase qualified this method in introduced field initializer anon class definition */ + public boolean TargetClass.result_anon + = new Validator() { + public boolean valid() { + boolean one = targTest(); + boolean two = TargetClass.this.targTest(); + boolean three = !ok; + boolean four = !TargetClass.this.ok; + Tester.event("result init"); + return (one && two && three && four); + }}.valid(); +} diff --git a/tests/new/introTypeMissing/Util.java b/tests/new/introTypeMissing/Util.java new file mode 100644 index 000000000..22e33eff2 --- /dev/null +++ b/tests/new/introTypeMissing/Util.java @@ -0,0 +1,14 @@ + + +import org.aspectj.testing.Tester; + +public class Util { + public static void fail(String s) { + //System.err.println("fail: " + s); + Tester.check(false,s); + } + public static void signal(String s) { + //System.err.println("signal: " + s); + Tester.event(s); + } +} diff --git a/tests/new/introductionPackage/one/Aspect.java b/tests/new/introductionPackage/one/Aspect.java new file mode 100644 index 000000000..43ce36c20 --- /dev/null +++ b/tests/new/introductionPackage/one/Aspect.java @@ -0,0 +1,25 @@ +package one; + +/** @testcase PR#548 introduced methods have incorrect package */ +public aspect Aspect { + public void C.foo() { // workaround: add qualification: one.C.foo + /** @testcase PR#548 introduction method casting this to introduction type */ + ((C) this).protectedMethod(); // bad CE: Can't convert from two.C to one.C + /** @testcase PR#548 introduction method accessing protected method */ + protectedMethod(); // bad CE: can't find any method with name: protectedMethod + /** @testcase PR#548 introduction method accessing public method */ + publicMethod(); // bad CE: can't find any method with name: publicMethod + /** @testcase PR#548 introduction method accessing default method */ + defaultMethod(); // bad CE: can't find any method with name: defaultMethod + + /** @testcase PR#548 introduction method accessing protected field */ + int i = protectedInt; // bad CE: can't bind name: protectedInt + /** @testcase PR#548 introduction method accessing private field */ + int j = publicInt; // bad CE: can't bind name: publicInt + /** @testcase PR#548 introduction method accessing default field */ + int k = defaultInt; // bad CE: can't bind name: defaultInt + int l = i * j * k; + //privateMethod(); // todo error case + //int p = privateInt; // todo error case + } +} diff --git a/tests/new/introductionPackage/one/C.java b/tests/new/introductionPackage/one/C.java new file mode 100644 index 000000000..47fa2a078 --- /dev/null +++ b/tests/new/introductionPackage/one/C.java @@ -0,0 +1,13 @@ +package one; + +/** @testcase PR#548 */ +public class C { + public void publicMethod(){ } + protected void protectedMethod(){} + void defaultMethod(){ } + private void privateMethod(){ } + public int publicInt = 1; + protected int protectedInt = 1; + int defaultInt = 1; + private int privateInt = 1; +} diff --git a/tests/new/introductionPackage/one/TestAspect.java b/tests/new/introductionPackage/one/TestAspect.java new file mode 100644 index 000000000..11e4188b3 --- /dev/null +++ b/tests/new/introductionPackage/one/TestAspect.java @@ -0,0 +1,28 @@ +package one; + +import org.aspectj.testing.*; +public aspect TestAspect { + public static void main(String[] args) { + C me = new C(); + me.foo(); + Tester.checkAllEvents(); + } + static { + Tester.expectEvent("execution(void one.C.publicMethod())"); + Tester.expectEvent("execution(void one.C.protectedMethod())"); + Tester.expectEvent("execution(void one.C.defaultMethod())"); + Tester.expectEvent("get(int one.C.protectedInt)"); + Tester.expectEvent("get(int one.C.publicInt)"); + Tester.expectEvent("get(int one.C.defaultInt)"); + + // XXX added - correct? + Tester.expectEvent("execution(void one.C.foo())"); + Tester.expectEvent("execution(void one.C.protectedMethod())"); + } + + before () : execution(* C.*(..)) || get(int C.*) + { + Tester.event("" + thisJoinPointStaticPart); + //System.out.println("" + thisJoinPointStaticPart); + } +} diff --git a/tests/new/introductionPackage/two/C.java b/tests/new/introductionPackage/two/C.java new file mode 100644 index 000000000..1db9e2b99 --- /dev/null +++ b/tests/new/introductionPackage/two/C.java @@ -0,0 +1,5 @@ +package two; + +/** @testcase PR#548 */ +public class C { } + diff --git a/tests/new/nolang/java/lang/Object.java b/tests/new/nolang/java/lang/Object.java new file mode 100644 index 000000000..c660f39f4 --- /dev/null +++ b/tests/new/nolang/java/lang/Object.java @@ -0,0 +1,6 @@ + +package java.lang; + +/** @testcase PR#762 Compiling java.lang.Object with ajc yields non-verifying bytecode */ +public class Object { // CE 5 here? +}
\ No newline at end of file diff --git a/tests/new/nolang/java/lang/String.java b/tests/new/nolang/java/lang/String.java new file mode 100644 index 000000000..1e6f99d3d --- /dev/null +++ b/tests/new/nolang/java/lang/String.java @@ -0,0 +1,8 @@ + +package java.lang; + + + +/** @testcase PR#762 Compiling java.lang.Object with ajc yields non-verifying bytecode */ +public class String { // CE 7 here? +}
\ No newline at end of file diff --git a/tests/new/options11/Aspect.java b/tests/new/options11/Aspect.java new file mode 100644 index 000000000..e0c56f519 --- /dev/null +++ b/tests/new/options11/Aspect.java @@ -0,0 +1,43 @@ + + +import org.aspectj.testing.Tester; +import org.aspectj.lang.JoinPoint; + +import library1.Library1; +import library2.Library2; + +/** extend abstract, and implement needed */ +aspect AnotherAspect extends Library2 { + + pointcut targetJoinPoints() : + execution(public static void Main.main(..)); + + protected String renderId(JoinPoint jp) { + String result = super.renderId(jp); + return result + " - ok"; + } +} + +class Testing { + static aspect Init { + + declare dominates : Init, Library1, AnotherAspect; + + before() : AnotherAspect.targetJoinPoints() { + Main.i = 1; + Tester.expectEvent("before main"); + Tester.expectEvent("after main"); + Tester.expectEvent("after 2 main - ok"); + Tester.expectEvent("before 2 main - ok"); + Tester.expectEvent("before run"); + } + after () returning : AnotherAspect.targetJoinPoints() { + Tester.checkAllEvents(); + } + + before() : call(void run()) { + Tester.event("before run"); + } + } + +}
\ No newline at end of file diff --git a/tests/new/options11/Main.java b/tests/new/options11/Main.java new file mode 100644 index 000000000..cfefc7b90 --- /dev/null +++ b/tests/new/options11/Main.java @@ -0,0 +1,11 @@ + + +import org.aspectj.testing.Tester; + +public class Main { + static int i = 0; + public static void main(String[] args) { + new injar.Injar().run(); + Tester.check(i != 0, "aspect failed"); + } +}
\ No newline at end of file diff --git a/tests/new/options11/aspectlib1.jar b/tests/new/options11/aspectlib1.jar Binary files differnew file mode 100644 index 000000000..31e101889 --- /dev/null +++ b/tests/new/options11/aspectlib1.jar diff --git a/tests/new/options11/aspectlib2.jar b/tests/new/options11/aspectlib2.jar Binary files differnew file mode 100644 index 000000000..20a22aa46 --- /dev/null +++ b/tests/new/options11/aspectlib2.jar diff --git a/tests/new/options11/injar.jar b/tests/new/options11/injar.jar Binary files differnew file mode 100644 index 000000000..2003bdc86 --- /dev/null +++ b/tests/new/options11/injar.jar diff --git a/tests/new/options11/injar/Injar.java b/tests/new/options11/injar/Injar.java new file mode 100644 index 000000000..02123001d --- /dev/null +++ b/tests/new/options11/injar/Injar.java @@ -0,0 +1,6 @@ + +package injar; + +public class Injar { + public void run() {} +}
\ No newline at end of file diff --git a/tests/new/options11/library1/Library1.java b/tests/new/options11/library1/Library1.java new file mode 100644 index 000000000..ce2a13067 --- /dev/null +++ b/tests/new/options11/library1/Library1.java @@ -0,0 +1,23 @@ + +package library1; + +import org.aspectj.lang.JoinPoint; +import org.aspectj.testing.Tester; + +public aspect Library1 { + pointcut targetJoinPoints() : + //execution(public static void main(String[])); + execution(public static void main(..)); + + before() : targetJoinPoints() { + Tester.event("before " + renderId(thisJoinPoint)); + } + + before() : targetJoinPoints() { + Tester.event("after " + renderId(thisJoinPoint)); + } + + protected String renderId(JoinPoint jp) { + return jp.getSignature().getName(); + } +}
\ No newline at end of file diff --git a/tests/new/options11/library2/Library2.java b/tests/new/options11/library2/Library2.java new file mode 100644 index 000000000..989dafb3c --- /dev/null +++ b/tests/new/options11/library2/Library2.java @@ -0,0 +1,20 @@ + +package library2; + +import org.aspectj.lang.JoinPoint; +import org.aspectj.testing.Tester; + +public abstract aspect Library2 { + abstract pointcut targetJoinPoints(); + + before() : targetJoinPoints() { + Tester.event("before 2 " + renderId(thisJoinPoint)); + } + + before() : targetJoinPoints() { + Tester.event("after 2 " + renderId(thisJoinPoint)); + } + protected String renderId(JoinPoint jp) { + return jp.getSignature().getName(); + } +}
\ No newline at end of file diff --git a/tests/new/pack/PackageWildcards.java b/tests/new/pack/PackageWildcards.java new file mode 100644 index 000000000..649392072 --- /dev/null +++ b/tests/new/pack/PackageWildcards.java @@ -0,0 +1,33 @@ +package pack; + +import org.aspectj.testing.Tester; + +public aspect PackageWildcards { + pointcut fooCut(): call(String foo()); + + String around(): fooCut() && within(*) { + String result = proceed(); + return result + ":fooCut"; + } + + pointcut allMethodsCut(): target(Foo) && call(!abstract String *(..)); + + String around(): allMethodsCut() { + String result = proceed(); + return result + ":allMethodsCut"; + } + + public static void test() { + String message = new Foo().foo(); + //System.out.println(message); + Tester.checkEqual(message, "foo:allMethodsCut:fooCut", "all advice active"); + } + + public static void main(String[] args) { + test(); + } +} + +class Foo { + String foo() { return "foo"; } +} diff --git a/tests/new/packageAccessPR556/base1/p/C1.java b/tests/new/packageAccessPR556/base1/p/C1.java new file mode 100644 index 000000000..03b6c3c18 --- /dev/null +++ b/tests/new/packageAccessPR556/base1/p/C1.java @@ -0,0 +1,29 @@ +package p; + +import p.*; +import org.aspectj.testing.Tester; +import org.aspectj.testing.Tester; + +public aspect C1 { + private static int privateOne = 1 ; //C2.privateOne + /** @testcase PR#556 aspects get package access to variables in other aspects */ + /** @testcase PR#556 aspects get package access to variables in other classes */ + public static void main(String[] args) { + int i = C2.defaultOne + C2.protectedOne + C2.publicOne + + A2.defaultOne + A2.protectedOne + A2.publicOne; + Tester.expectEvent("C2"); + Tester.expectEvent("A2"); + Tester.check(i==6, "initialization failed: " + i); + try { System.getProperty("ignore" + i); } + catch (Exception e) {} + Tester.checkAllEvents(); + } + /** @testcase class pointcuts visible via package-access from another aspect */ + before () : C2.p() && execution(static void C1.main(String[])) { + Tester.event("C2"); + } + /** @testcase aspect pointcuts visible via package-access from another aspect */ + before () : A2.p() && execution(static void C1.main(String[])) { + Tester.event("A2"); + } +} diff --git a/tests/new/packageAccessPR556/base2/p/C2.java b/tests/new/packageAccessPR556/base2/p/C2.java new file mode 100644 index 000000000..a16dd1fe7 --- /dev/null +++ b/tests/new/packageAccessPR556/base2/p/C2.java @@ -0,0 +1,17 @@ +package p; + +aspect A2 { + private static int privateOne = 1; + static int defaultOne = 1; + protected static int protectedOne = 1; + public static int publicOne = 1; + pointcut p() : within (p..*) ; +} + +class C2 { + private static int privateOne = 1; + static int defaultOne = 1; + protected static int protectedOne = 1; + public static int publicOne = 1; + pointcut p() : within (p..*) ; +} diff --git a/tests/new/packageNameClash/Driver.java b/tests/new/packageNameClash/Driver.java new file mode 100644 index 000000000..5c7f55b8c --- /dev/null +++ b/tests/new/packageNameClash/Driver.java @@ -0,0 +1,9 @@ +import org.aspectj.testing.Tester; + +public class Driver { + public static void main(String[] args) { test(); } + + public static void test() { + new pkg.Class1().doIt(); + } +} diff --git a/tests/new/packageNameClash/otherpkg/Driver.java b/tests/new/packageNameClash/otherpkg/Driver.java new file mode 100644 index 000000000..f2c07aa4f --- /dev/null +++ b/tests/new/packageNameClash/otherpkg/Driver.java @@ -0,0 +1,10 @@ +package otherpkg; +import org.aspectj.testing.Tester; + +public class Driver { + public static void main(String[] args) { test(); } + + public static void test() { + new pkg.Class1().doIt(); + } +} diff --git a/tests/new/packageNameClash/pkg/Aspect1.java b/tests/new/packageNameClash/pkg/Aspect1.java new file mode 100644 index 000000000..e967dbbba --- /dev/null +++ b/tests/new/packageNameClash/pkg/Aspect1.java @@ -0,0 +1,4 @@ +package pkg; + +aspect Aspect1 /*of eachobject(instanceof(Class1))*/ { +} diff --git a/tests/new/packageNameClash/pkg/Class1.java b/tests/new/packageNameClash/pkg/Class1.java new file mode 100644 index 000000000..feafcc8ef --- /dev/null +++ b/tests/new/packageNameClash/pkg/Class1.java @@ -0,0 +1,16 @@ +package pkg; + +public class Class1 { + public String doIt() { + // I guess it's gone now ??? + //Aspect1 pkg = Aspect1.aspectOf(this); + Aspect1 pkg = null; + try { + java.lang.reflect.Constructor c = + Aspect1.class.getDeclaredConstructors()[0]; + c.setAccessible(true); + pkg = (Aspect1)c.newInstance(new Object[]{}); + } catch (Exception e) { throw new Error(e+""); } + return pkg.getClass().getName(); + } +} diff --git a/tests/new/packagePrefix/p/prefix.java b/tests/new/packagePrefix/p/prefix.java new file mode 100644 index 000000000..72865af32 --- /dev/null +++ b/tests/new/packagePrefix/p/prefix.java @@ -0,0 +1,3 @@ +package p; +/** @testcase PUREJAVA PR#574 compile problems loading classes whose package names are suffixes of class names */ +public class prefix{} diff --git a/tests/new/packagePrefix/p/prefix/SomeClass.java b/tests/new/packagePrefix/p/prefix/SomeClass.java new file mode 100644 index 000000000..4f6a6031f --- /dev/null +++ b/tests/new/packagePrefix/p/prefix/SomeClass.java @@ -0,0 +1,12 @@ + +package p.prefix; + +import org.aspectj.testing.Tester; + +/** @testcase PUREJAVA PR#574 compile problems loading classes whose package names are suffixes of class names */ +public class SomeClass { + public static void main(String[] args) { + int i = new p.prefix().hashCode(); + Tester.check(i!=0, "int i = new p.prefix().hashCode()"); + } +} diff --git a/tests/new/packagevisibility/PackagesAndAdvice.java b/tests/new/packagevisibility/PackagesAndAdvice.java new file mode 100644 index 000000000..ca17f0da7 --- /dev/null +++ b/tests/new/packagevisibility/PackagesAndAdvice.java @@ -0,0 +1,39 @@ +package packagevisibility; +import org.aspectj.testing.Tester; + +import packagevisibility.testPackage.*; + +public class PackagesAndAdvice +{ + public static void main(String[] args) { test(); } + + public static void test() { + packagevisibility.testPackage.Class1 c1 = + new packagevisibility.testPackage.Class1(); + Tester.checkEqual(c1.doIt("-1"), + "-1-advised-advised1-1-class1", + "publically visible"); + Tester.checkEqual(c1.doItToClass2("-2"), + "-2-advised-advised1-2-class2", + "package visible"); + } + +} + +aspect A { + static String message = "-advised"; + + String around(String s): + call(String doIt(String)) && args(s) && + (target(packagevisibility.testPackage.Class1) || + target(packagevisibility.testPackage.Class2)) { + String result = s + message; + result += A1.message; + return result + proceed(s); + } + +} + +class A1 { + static String message = "-advised1"; +} diff --git a/tests/new/packagevisibility/testPackage/Class1.java b/tests/new/packagevisibility/testPackage/Class1.java new file mode 100644 index 000000000..d53733d34 --- /dev/null +++ b/tests/new/packagevisibility/testPackage/Class1.java @@ -0,0 +1,11 @@ +package packagevisibility.testPackage; + +public class Class1 { + public String doIt(String s) { + return s + "-class1"; + } + + public String doItToClass2(String s) { + return (new packagevisibility.testPackage.Class2()).doIt(s); + } +} diff --git a/tests/new/packagevisibility/testPackage/Class2.java b/tests/new/packagevisibility/testPackage/Class2.java new file mode 100644 index 000000000..d32e84683 --- /dev/null +++ b/tests/new/packagevisibility/testPackage/Class2.java @@ -0,0 +1,13 @@ +package packagevisibility.testPackage; + +class Class2 { + String doIt(String s) { + new Runnable() { + public void run() { + System.out.println("running"); + } + }.run(); + + return s + "-class2"; + } +} diff --git a/tests/new/paramWidening/Driver.java b/tests/new/paramWidening/Driver.java new file mode 100644 index 000000000..bacd6bde4 --- /dev/null +++ b/tests/new/paramWidening/Driver.java @@ -0,0 +1,24 @@ + +import org.aspectj.testing.Tester; + +// PR#195 + +public class Driver { + private static java.util.Vector v = new java.util.Vector(); + + public static void main(String[] args) { test(); } + + public static void test() { + long l = foo(42); + + Tester.check(l == 42, "foo(42) == 42"); + } + + private static float foo(float f) { + return f; + } + + private static long foo(long l) { + return l; + } +}
\ No newline at end of file diff --git a/tests/new/pointcutParameter/Driver.java b/tests/new/pointcutParameter/Driver.java new file mode 100644 index 000000000..7dc1c6194 --- /dev/null +++ b/tests/new/pointcutParameter/Driver.java @@ -0,0 +1,31 @@ + +import org.aspectj.testing.Tester; + +// PR#290 compiler crashes with eachobject and named pointcuts with parameters + +public class Driver { + + public static String s = ""; + + public static void main(String[] args){ + new C().go(); + Tester.checkEqual(s, "-before-go", ""); + } + +} + +class C { + int x; + + public void go() { + Driver.s += "-go"; + } +} + +aspect A /*of eachobject(A.testPointcut(C))*/ { + pointcut testPointcut(C c): target(c); + + before(C c): target(c) && call(* *(..)) { + Driver.s += "-before"; + } +} diff --git a/tests/new/pr456/AroundVarBug.java b/tests/new/pr456/AroundVarBug.java new file mode 100644 index 000000000..e0ef18ed9 --- /dev/null +++ b/tests/new/pr456/AroundVarBug.java @@ -0,0 +1,38 @@ +import java.util.*; +import org.aspectj.testing.Tester; + +/** @testcase PR#456 advice on advice in usejavac mode */ +public aspect AroundVarBug { + static { + Tester.expectEvent("Meta-advice reached"); + Tester.expectEvent("advice reached"); + } + + protected pointcut iterator () : + call (public Iterator Collection.iterator ()); + + Iterator around () : iterator () { + return handleIterator (thisJoinPoint, proceed ()); + } + + private Iterator handleIterator (Object join, Iterator iter) { + Tester.event("advice reached"); + return iter; + } + + // ------------- + // Meta-advice + // ------------- + + private pointcut adviceHandlers (): + call (private * AroundVarBug.handle*(..)); + + // Advice on this aspect! + Object around () : adviceHandlers () { + Tester.event("Meta-advice reached"); + return proceed(); + } + +} // end of aspect AroundVarBug + + diff --git a/tests/new/pr456/Test_AroundVarBug.java b/tests/new/pr456/Test_AroundVarBug.java new file mode 100644 index 000000000..ed394fbca --- /dev/null +++ b/tests/new/pr456/Test_AroundVarBug.java @@ -0,0 +1,16 @@ +import java.util.ArrayList; + +import org.aspectj.testing.Tester; + +/** @testcase PR#456 advice on advice in usejavac mode */ +public class Test_AroundVarBug { + { + new ArrayList ().iterator (); + } + public static void main (String[] args) { + new Test_AroundVarBug(); + Tester.checkAllEvents(); + } + +} + diff --git a/tests/new/pr626/a/Outer.java b/tests/new/pr626/a/Outer.java new file mode 100644 index 000000000..413b36ba9 --- /dev/null +++ b/tests/new/pr626/a/Outer.java @@ -0,0 +1,27 @@ +package a; + +import org.aspectj.testing.Tester; + +/** @testcase PR#626 declared parent not defined in scope of target class declaration (CE in -usejavac only) */ +public abstract aspect Outer { + public static void main (String[] args) { + b.Foo foo = new b.Foo() { + public void run() { + Tester.event("run"); + } + }; + Inner i = (Inner) foo; + i.run(); + Tester.checkAllEvents(); + } + + static { + Tester.expectEvent("run"); + } + + protected interface Inner { + public void run(); + } + +} + diff --git a/tests/new/pr626/b/Foo.java b/tests/new/pr626/b/Foo.java new file mode 100644 index 000000000..3b40c6c74 --- /dev/null +++ b/tests/new/pr626/b/Foo.java @@ -0,0 +1,11 @@ +package b; + +import a.Outer; + +/** @testcase PR#626 declared parent not defined in scope of target class declaration (CE in -usejavac only) */ +public interface Foo { + public static aspect Specific extends Outer { + declare parents: Foo extends Inner; + } +} + diff --git a/tests/new/pr728/AnotherClass.java b/tests/new/pr728/AnotherClass.java new file mode 100644 index 000000000..c48be7089 --- /dev/null +++ b/tests/new/pr728/AnotherClass.java @@ -0,0 +1,13 @@ + +import org.aspectj.testing.*; + +/** @testcase PR#728 file order in type searching */ +public class AnotherClass implements Interface { + public static class InnerClass { } + public static void main (String[] args) { + String s = new AnotherClass.InnerClass().toString(); + Tester.expectEvent(s); + Tester.checkAllEvents(); + } +} + diff --git a/tests/new/pr728/Interface.java b/tests/new/pr728/Interface.java new file mode 100644 index 000000000..1b1119578 --- /dev/null +++ b/tests/new/pr728/Interface.java @@ -0,0 +1,17 @@ +import org.aspectj.testing.*; + +/** @testcase PR#728 file order in type searching */ +public interface Interface { + static aspect Aspect { + void aspectMethod( AnotherClass.InnerClass targ ) { + Tester.event( targ.toString()); + } + before(AnotherClass.InnerClass targ) : target(targ) + && !withincode(void Aspect.aspectMethod(AnotherClass.InnerClass)) + && call(public String toString()) { + aspectMethod(targ); + } + } +} + + diff --git a/tests/new/privilegedAspects/driver/PR555.java b/tests/new/privilegedAspects/driver/PR555.java new file mode 100644 index 000000000..92e1ef86e --- /dev/null +++ b/tests/new/privilegedAspects/driver/PR555.java @@ -0,0 +1,65 @@ + +package driver; + +//package pack; // check test passing +// import pack.DefaultTarget; // not expected to work +import org.aspectj.testing.Tester; +import org.aspectj.testing.Tester; + +public class PR555 { + public static void main(String[] args) { + Tester.expectEvent("runner"); + int i ; + i = PA.readPrivateStaticInt(); + Tester.check(1==i,"PA.readPrivateStaticInt()"); + i = PA.readPrivateStaticIntFromInner(); + Tester.check(1==i,"PA.readPrivateStaticIntFromInner()"); + i = PA.runIntroducedAnonymousInnerClass(); + Tester.check(1==i,"PA.runIntroducedAnonymousInnerClass()"); + Tester.checkAllEvents(); + } + +} + +/* test access to private target variables */ +privileged aspect PA { + + public static int readPrivateStaticInt() { + return pack.DefaultTarget.privateStaticInt; + } + + public static int readPrivateStaticIntFromInner() { + return new Inner().readPrivateIntFromInner(); + } + + public static int runIntroducedAnonymousInnerClass() { + pack.DefaultTarget dtarget = new pack.DefaultTarget(); + dtarget.runner.run(); + return dtarget.privateInt; + //return dtarget.publicInt; + } + + static class Inner { + public static final int i = pack.DefaultTarget.privateStaticInt; + //public static final int i = pack.DefaultTarget.publicStaticInt; + public int readPrivateIntFromInner() { + pack.DefaultTarget defaultTarget + = new pack.DefaultTarget(); + return defaultTarget.privateInt; + //return defaultTarget.publicInt; + } + } + + // todo: bug used unprivileged aspect to introduce + // todo: inner class of aspect or of DefaultTarget? + Runnable pack.DefaultTarget.runner = new Runnable() { + public void run() { + Tester.event("runner"); + //if (1 != publicInt) { + if (1 != privateInt) { + throw new Error("1 != privateInt"); + } + } + }; +} + diff --git a/tests/new/privilegedAspects/driver/PrivilegedAspect.java b/tests/new/privilegedAspects/driver/PrivilegedAspect.java new file mode 100644 index 000000000..e29dffc17 --- /dev/null +++ b/tests/new/privilegedAspects/driver/PrivilegedAspect.java @@ -0,0 +1,119 @@ + +package driver; + +// import pack.DefaultTarget; // does not work - ok +import pack.PublicTarget; + +/** + * This aspect attempts to bind class references + * and read members of all access types + * from public- and default-access classes and inner classes + * from public static methods in the aspect. Usage: + * <pre>PrivilegedAspect.main(null);</pre> + * - or - + * <pre>PrivilegedAspect.readPublicTarget(); + * PrivilegedAspect.readPublicInnerTarget(); + * PrivilegedAspect.readDefaultTarget(); + * PrivilegedAspect.readDefaultInnerTarget();</pre> + */ +public privileged aspect PrivilegedAspect { + /** run all other static methods + * @param args ignored */ + public static void main(String[] args) { + readPublicTarget(); + readPublicInnerTarget(); + readDefaultTarget(); + readDefaultInnerTarget(); + } + + /** in public class + * read static and instance fields and + * invoke methods, both of all access types + */ + public static void readPublicTarget() { + Class c = PublicTarget.class; + int i = 0; + i += PublicTarget.publicStaticInt; + i += PublicTarget.protectedStaticInt; + i += PublicTarget.defaultStaticInt; + i += PublicTarget.privateStaticInt; + PublicTarget publicTarget = new PublicTarget(); + i += publicTarget.publicInt; + i += publicTarget.protectedInt; + i += publicTarget.defaultInt; + i += publicTarget. privateInt; + publicTarget.publicMethod(); + publicTarget.protectedMethod(); + publicTarget.defaultMethod(); + publicTarget.privateMethod(); + } + + /** in public inner class + * read static and instance fields and + * invoke methods, both of all access types + */ + public static void readPublicInnerTarget() { + Class c = PublicTarget.PublicInner.class; + int i = 0; + i += PublicTarget.PublicInner.publicStaticPublicInnerInt; + i += PublicTarget.PublicInner.protectedStaticPublicInnerInt; + i += PublicTarget.PublicInner.defaultStaticPublicInnerInt; + i += PublicTarget.PublicInner.privateStaticPublicInnerInt; + PublicTarget.PublicInner publicInnerTarget + = new PublicTarget().new PublicInner(); + i += publicInnerTarget.publicPublicInnerInt; + i += publicInnerTarget.protectedPublicInnerInt; + i += publicInnerTarget.defaultPublicInnerInt; + i += publicInnerTarget. privatePublicInnerInt; + publicInnerTarget.publicPublicInnerMethod(); + publicInnerTarget.protectedPublicInnerMethod(); + publicInnerTarget.defaultPublicInnerMethod(); + publicInnerTarget.privatePublicInnerMethod(); + } + + + /** in class with default access + * read static and instance fields and + * invoke methods, both of all access types + */ + public static void readDefaultTarget() { + Class c = pack.DefaultTarget.class; + int i = 0; + i += pack.DefaultTarget.publicStaticInt; + i += pack.DefaultTarget.protectedStaticInt; + i += pack.DefaultTarget.defaultStaticInt; + i += pack.DefaultTarget.privateStaticInt; + pack.DefaultTarget defaultTarget = new pack.DefaultTarget(); + i += defaultTarget.publicInt; + i += defaultTarget.protectedInt; + i += defaultTarget.defaultInt; + i += defaultTarget. privateInt; + defaultTarget.publicMethod(); + defaultTarget.protectedMethod(); + defaultTarget.defaultMethod(); + defaultTarget.privateMethod(); + } + + /** in inner class with default access + * read static and instance fields and + * invoke methods, both of all access types + */ + public static void readDefaultInnerTarget() { + Class c = pack.DefaultTarget.DefaultInner.class; + int i = 0; + i += pack.DefaultTarget.DefaultInner.publicStaticDefaultInnerInt; + i += pack.DefaultTarget.DefaultInner.protectedStaticDefaultInnerInt; + i += pack.DefaultTarget.DefaultInner.defaultStaticDefaultInnerInt; + i += pack.DefaultTarget.DefaultInner.privateStaticDefaultInnerInt; + pack.DefaultTarget.DefaultInner defaultInnerTarget + = new pack.DefaultTarget().new DefaultInner(); + i += defaultInnerTarget.publicDefaultInnerInt; + i += defaultInnerTarget.protectedDefaultInnerInt; + i += defaultInnerTarget.defaultDefaultInnerInt; + i += defaultInnerTarget.privateDefaultInnerInt; + defaultInnerTarget.publicDefaultInnerMethod(); + defaultInnerTarget.protectedDefaultInnerMethod(); + defaultInnerTarget.defaultDefaultInnerMethod(); + defaultInnerTarget.privateDefaultInnerMethod(); + } +} diff --git a/tests/new/privilegedAspects/driver/UnprivilegedAspect.java b/tests/new/privilegedAspects/driver/UnprivilegedAspect.java new file mode 100644 index 000000000..7a2c1283f --- /dev/null +++ b/tests/new/privilegedAspects/driver/UnprivilegedAspect.java @@ -0,0 +1,113 @@ + +package driver; + +// import pack.DefaultTarget; // does not work - ok +import pack.PublicTarget; + +/** + * This is a copy of PrivilegedAspect, but without the privilege. + * It is an error test for unprivileged access to target classes + * esp. when compiled at the same time as PrivilegedAspect. + * todo: remove this case or render manageable. + */ +// Keep in sync with PrivilegedAspect +public aspect UnprivilegedAspect { + /** run all other static methods + * @param args ignored */ + public static void main(String[] args) { + readPublicTarget(); + readPublicInnerTarget(); + readDefaultTarget(); + readDefaultInnerTarget(); + } + + /** in public class + * read static and instance fields and + * invoke methods, both of all access types + */ + public static void readPublicTarget() { + Class c = PublicTarget.class; + int i = 0; + i += PublicTarget.publicStaticInt; + i += PublicTarget.protectedStaticInt; + i += PublicTarget.defaultStaticInt; + i += PublicTarget.privateStaticInt; + PublicTarget publicTarget = new PublicTarget(); + i += publicTarget.publicInt; + i += publicTarget.protectedInt; + i += publicTarget.defaultInt; + i += publicTarget. privateInt; + publicTarget.publicMethod(); + publicTarget.protectedMethod(); + publicTarget.defaultMethod(); + publicTarget.privateMethod(); + } + + /** in public inner class + * read static and instance fields and + * invoke methods, both of all access types + */ + public static void readPublicInnerTarget() { + Class c = PublicTarget.PublicInner.class; + int i = 0; + i += PublicTarget.PublicInner.publicStaticPublicInnerInt; + i += PublicTarget.PublicInner.protectedStaticPublicInnerInt; + i += PublicTarget.PublicInner.defaultStaticPublicInnerInt; + i += PublicTarget.PublicInner.privateStaticPublicInnerInt; + PublicTarget.PublicInner publicInnerTarget + = new PublicTarget().new PublicInner(); + i += publicInnerTarget.publicPublicInnerInt; + i += publicInnerTarget.protectedPublicInnerInt; + i += publicInnerTarget.defaultPublicInnerInt; + i += publicInnerTarget. privatePublicInnerInt; + publicInnerTarget.publicPublicInnerMethod(); + publicInnerTarget.protectedPublicInnerMethod(); + publicInnerTarget.defaultPublicInnerMethod(); + publicInnerTarget.privatePublicInnerMethod(); + } + + /** in class with default access + * read static and instance fields and + * invoke methods, both of all access types + */ + public static void readDefaultTarget() { + Class c = pack.DefaultTarget.class; + int i = 0; + i += pack.DefaultTarget.publicStaticInt; + i += pack.DefaultTarget.protectedStaticInt; + i += pack.DefaultTarget.defaultStaticInt; + i += pack.DefaultTarget.privateStaticInt; + pack.DefaultTarget defaultTarget = new pack.DefaultTarget(); + i += defaultTarget.publicInt; + i += defaultTarget.protectedInt; + i += defaultTarget.defaultInt; + i += defaultTarget. privateInt; + defaultTarget.publicMethod(); + defaultTarget.protectedMethod(); + defaultTarget.defaultMethod(); + defaultTarget.privateMethod(); + } + + /** in inner class with default access + * read static and instance fields and + * invoke methods, both of all access types + */ + public static void readDefaultInnerTarget() { + Class c = pack.DefaultTarget.DefaultInner.class; + int i = 0; + i += pack.DefaultTarget.DefaultInner.publicStaticDefaultInnerInt; + i += pack.DefaultTarget.DefaultInner.protectedStaticDefaultInnerInt; + i += pack.DefaultTarget.DefaultInner.defaultStaticDefaultInnerInt; + i += pack.DefaultTarget.DefaultInner.privateStaticDefaultInnerInt; + pack.DefaultTarget.DefaultInner defaultInnerTarget + = new pack.DefaultTarget().new DefaultInner(); + i += defaultInnerTarget.publicDefaultInnerInt; + i += defaultInnerTarget.protectedDefaultInnerInt; + i += defaultInnerTarget.defaultDefaultInnerInt; + i += defaultInnerTarget.privateDefaultInnerInt; + defaultInnerTarget.publicDefaultInnerMethod(); + defaultInnerTarget.protectedDefaultInnerMethod(); + defaultInnerTarget.defaultDefaultInnerMethod(); + defaultInnerTarget.privateDefaultInnerMethod(); + } +} diff --git a/tests/new/privilegedAspects/fish/B.java b/tests/new/privilegedAspects/fish/B.java new file mode 100644 index 000000000..d56aef758 --- /dev/null +++ b/tests/new/privilegedAspects/fish/B.java @@ -0,0 +1,27 @@ +package fish; +import main.Main; + +privileged aspect B { + private static String privateStatic = "B's private"; + + //introduction PrivateClass { + public void PrivateClass.fooB() { + b--; + Main.doThang("B: " + b); + Main.doThang("B: " + b()); + + System.out.println(privateStatic + "::" + FooC.privateStatic); + } + //} + + + before(PrivateClass obj): call(void PrivateClass.goo()) && target(obj) { + obj.b--; + Main.doThang("B: " + obj.b); + Main.doThang("B: " + obj.b()); + } +} + +class FooC { + private static int privateStatic = 2; +} diff --git a/tests/new/privilegedAspects/fish/PrivateClass.java b/tests/new/privilegedAspects/fish/PrivateClass.java new file mode 100644 index 000000000..f02941036 --- /dev/null +++ b/tests/new/privilegedAspects/fish/PrivateClass.java @@ -0,0 +1,32 @@ +package fish; +import main.Main; + +public class PrivateClass { + private int a = 999; + private int a() { return 888; } + private int b = 777; + private int b() { return 666; } + private int c = 555; + private int c() { return 444; } + private int d = 333; + private int d() { return 222; } + + public void goo() {} +} + +privileged aspect A { + + public void PrivateClass.fooA() { + a--; + Main.doThang("A: " + a); + Main.doThang("A: " + a()); + } + + before(PrivateClass obj): call(void PrivateClass.goo()) && target(obj) { + obj.a--; + Main.doThang("A: " + obj.a); + Main.doThang("A: " + obj.a()); + } +} + + diff --git a/tests/new/privilegedAspects/fowl/C.java b/tests/new/privilegedAspects/fowl/C.java new file mode 100644 index 000000000..bc227f85f --- /dev/null +++ b/tests/new/privilegedAspects/fowl/C.java @@ -0,0 +1,18 @@ +package fowl; +import fish.PrivateClass; +import main.Main; + +privileged aspect C { + + public void PrivateClass.fooC() { + c--; + Main.doThang("C: " + c); + Main.doThang("C: " + c()); + } + + before(PrivateClass obj): call(void PrivateClass.goo()) && target(obj) { + obj.c--; + Main.doThang("C: " + obj.c); + Main.doThang("C: " + obj.c()); + } +} diff --git a/tests/new/privilegedAspects/fowl/D.java b/tests/new/privilegedAspects/fowl/D.java new file mode 100644 index 000000000..4b36d2fe8 --- /dev/null +++ b/tests/new/privilegedAspects/fowl/D.java @@ -0,0 +1,17 @@ +package fowl; +import main.Main; + +privileged aspect D { + + public void fish.PrivateClass.fooD() { + d--; + Main.doThang("D: " + d); + Main.doThang("D: " + d()); + } + + before(fish.PrivateClass obj): call(void fish.PrivateClass.goo()) && target(obj) { + obj.d--; + Main.doThang("D: " + obj.d); + Main.doThang("D: " + obj.d()); + } +} diff --git a/tests/new/privilegedAspects/main/Main.java b/tests/new/privilegedAspects/main/Main.java new file mode 100644 index 000000000..89b0877b7 --- /dev/null +++ b/tests/new/privilegedAspects/main/Main.java @@ -0,0 +1,14 @@ +package main; + +class Main { + public static void main(String[] args) { + fish.PrivateClass obj = new fish.PrivateClass(); + obj.fooA(); + obj.fooB(); + obj.fooC(); + obj.fooD(); + obj.goo(); + } + + public static void doThang(String arg) {} +} diff --git a/tests/new/privilegedAspects/notes.txt b/tests/new/privilegedAspects/notes.txt new file mode 100644 index 000000000..01eda6263 --- /dev/null +++ b/tests/new/privilegedAspects/notes.txt @@ -0,0 +1,89 @@ + +testing privileged aspects +These notes apply to subdirectories util, pack, and driver. + +---- privileged aspects +- A privileged aspect ignores Java's accessibility rules and can access + any members anywhere in the world regardless of access restrictions. +- The privilege extends to anything in the lexical scope of the + privileged aspect, including inner classes and aspects + - the privilege does not extend to members introduced + onto the privileged aspect + - the privilege does not extend to subaspects +- a privileged aspect can be public +- a privileged aspect can be an inner aspect + even a static inner aspect of a class +- In some cases, providing this private access changes the access + permissions in the generated (byte)code, visible to other + classes compiled or running with the target class. + However, in the scope of the AspectJ compilation process, + only the privileged aspect should enjoy enhanced permissions +- type names from external packages must be fully qualified in the + privileged aspect. the visibility of import statements in the + file of the privileged aspect is unchanged. + - as a result, if {static} inner aspects are permitted, they will + be unable to bind some names that their enclosing class/aspect + can bind unless they fully qualify the names. + +---- testing privileged aspects +- binding: testing binding involves ensuring the class or aspect + can (or cannot) bind a name to a type or member at compile time + and can actually use that reference at runtime without an + IllegalAccessException + +testable statements: +1 any aspect may be privileged, including abstract and inner aspects, + including static inner aspects of classes +2 privileged aspects can bind any members of targets + - targets: classes, inner classes; aspects, inner aspects; + in the same package, a different package, and the default package + - sources in the privileged aspect: + - constructors, static and instance methods and initializers + - bodies for introduced methods and member initializers + - pointcut declarations + - pointcut pcd if() bodies + - advice bodies + - the same for inner classes and aspects +3 when privileged aspects get this access, access does not change for + other classes in the same set of files compiled +4 2 is not true of non-privileged subaspects of a privileged aspect +5 AspectJ will open up the target class to the minimal extent possible, + subject to these rules: + - the access permissions for the privileged access will not change + - the class hierarchy of the privileged aspect or the target class + will not be modified to gain protected access + - if protected access is available, AspectJ will not convert + to default/package access or to public access + - if default/package access is available, AspectJ will not convert + to public access +6 code in privileged aspects has no enhanced runtime permissions for + reflective access to (target classes or) non-target classes + +test plan: +1 compile-time binding test: + - public and default access classes in one package + each with a corresponding inner class (public/default) + each class has static and instance members of all access types + -> pack.PublicTarget, pack.DefaultTarget + - privileged aspect in another package + accesses all target methods/members from static methods + -> driver.PrivilegedAspect +2 test 1 with the aspect as an inner aspect + - unprivileged inner aspect of a privileged aspect + - privileged inner aspect of an unprivileged aspect + - static privileged inner aspect of a class +3 test 1 with errors expected for protected/private/default access + for a non-privileged subaspect + -> driver.UnPrivilegedAspect + +----- Priority 3 tests +4 test 1 with errors expected for private/default access + for a non-privileged subaspect inner class of a target subclass +5 test 1 with errors expected for private access + for a non-privileged aspect in the same package + +---- current status +Aggregate versions of tests 1 and 3 done; 2 is close. See -> above. +Error tests are brittle since it is undefined how many errors the +compiler will find in a file before giving up. The error test +cases should be broken out into separate test cases/files. diff --git a/tests/new/privilegedAspects/pack/DefaultTarget.java b/tests/new/privilegedAspects/pack/DefaultTarget.java new file mode 100644 index 000000000..3c2231db4 --- /dev/null +++ b/tests/new/privilegedAspects/pack/DefaultTarget.java @@ -0,0 +1,70 @@ + +package pack; + +import util.Util; + +/* copy/paste of PublicTarget with mods to default */ +class DefaultTarget { + public static int publicStaticInt = 1; + protected static int protectedStaticInt = 1; + static int defaultStaticInt = 1; + private static int privateStaticInt = 1; + public int publicInt = 1; + protected int protectedInt = 1; + int defaultInt = 1; + private int privateInt = 1; + public void publicMethod() { Util.signal(Util.defPublic); } + protected void protectedMethod() { Util.signal(Util.defProtected); } + void defaultMethod() { Util.signal(Util.defDefault); } + private void privateMethod() { Util.signal(Util.defPrivate); } + + public static void readDefaultTarget() { + int i = 0; + i += DefaultTarget.publicStaticInt; + i += DefaultTarget.protectedStaticInt; + i += DefaultTarget.defaultStaticInt; + i += DefaultTarget.privateStaticInt; + DefaultTarget defaultTarget = new DefaultTarget(); + i += defaultTarget.publicInt; + i += defaultTarget.protectedInt; + i += defaultTarget.defaultInt; + i += defaultTarget. privateInt; + defaultTarget.publicMethod(); + defaultTarget.protectedMethod(); + defaultTarget.defaultMethod(); + defaultTarget.privateMethod(); + } + + class DefaultInner { + public static final int publicStaticDefaultInnerInt = 1; + protected static final int protectedStaticDefaultInnerInt = 1; + /* def */ static final int defaultStaticDefaultInnerInt = 1; + private static final int privateStaticDefaultInnerInt = 1; + public int publicDefaultInnerInt = 1; + protected int protectedDefaultInnerInt = 1; + /* default */ int defaultDefaultInnerInt = 1; + private int privateDefaultInnerInt = 1; + public void publicDefaultInnerMethod() { Util.signal(Util.defInnerPublic); } + protected void protectedDefaultInnerMethod() { Util.signal(Util.defInnerProtected); } + /* default */ void defaultDefaultInnerMethod() { Util.signal(Util.defInnerDefault); } + private void privateDefaultInnerMethod() { Util.signal(Util.defInnerPrivate); } + + public void readDefaultInnerTarget() { + int i = 0; + i += DefaultTarget.DefaultInner.publicStaticDefaultInnerInt; + i += DefaultTarget.DefaultInner.protectedStaticDefaultInnerInt; + i += DefaultTarget.DefaultInner.defaultStaticDefaultInnerInt; + i += DefaultTarget.DefaultInner.privateStaticDefaultInnerInt; + DefaultTarget.DefaultInner defaultInnerTarget + = new DefaultTarget().new DefaultInner(); + i += defaultInnerTarget.publicDefaultInnerInt; + i += defaultInnerTarget.protectedDefaultInnerInt; + i += defaultInnerTarget.defaultDefaultInnerInt; + i += defaultInnerTarget.privateDefaultInnerInt; + defaultInnerTarget.publicDefaultInnerMethod(); + defaultInnerTarget.protectedDefaultInnerMethod(); + defaultInnerTarget.defaultDefaultInnerMethod(); + defaultInnerTarget.privateDefaultInnerMethod(); + } + } +} diff --git a/tests/new/privilegedAspects/pack/PublicTarget.java b/tests/new/privilegedAspects/pack/PublicTarget.java new file mode 100644 index 000000000..f32a5468a --- /dev/null +++ b/tests/new/privilegedAspects/pack/PublicTarget.java @@ -0,0 +1,69 @@ + +package pack; + +import util.Util; + +public class PublicTarget { + public static int publicStaticInt = 1; + protected static int protectedStaticInt = 1; + static int defaultStaticInt = 1; + private static int privateStaticInt = 1; + public int publicInt = 1; + protected int protectedInt = 1; + int defaultInt = 1; + private int privateInt = 1; + public void publicMethod() { Util.signal(Util.pubPublic); } + protected void protectedMethod() { Util.signal(Util.pubProtected); } + void defaultMethod() { Util.signal(Util.pubDefault); } + private void privateMethod() { Util.signal(Util.pubPrivate); } + + public static void readPublicTarget() { + int i = 0; + i += PublicTarget.publicStaticInt; + i += PublicTarget.protectedStaticInt; + i += PublicTarget.defaultStaticInt; + i += PublicTarget.privateStaticInt; + PublicTarget publicTarget = new PublicTarget(); + i += publicTarget.publicInt; + i += publicTarget.protectedInt; + i += publicTarget.defaultInt; + i += publicTarget. privateInt; + publicTarget.publicMethod(); + publicTarget.protectedMethod(); + publicTarget.defaultMethod(); + publicTarget.privateMethod(); + } + + public class PublicInner { + public static final int publicStaticPublicInnerInt = 1; + protected static final int protectedStaticPublicInnerInt = 1; + /* def */ static final int defaultStaticPublicInnerInt = 1; + private static final int privateStaticPublicInnerInt = 1; + public int publicPublicInnerInt = 1; + protected int protectedPublicInnerInt = 1; + /* default */ int defaultPublicInnerInt = 1; + private int privatePublicInnerInt = 1; + public void publicPublicInnerMethod() { Util.signal(Util.pubInnerPublic); } + protected void protectedPublicInnerMethod() { Util.signal(Util.pubInnerProtected); } + /* default */ void defaultPublicInnerMethod() { Util.signal(Util.pubInnerDefault); } + private void privatePublicInnerMethod() { Util.signal(Util.pubInnerPrivate); } + + public void readPublicInnerTarget() { + int i = 0; + i += PublicTarget.PublicInner.publicStaticPublicInnerInt; + i += PublicTarget.PublicInner.protectedStaticPublicInnerInt; + i += PublicTarget.PublicInner.defaultStaticPublicInnerInt; + i += PublicTarget.PublicInner.privateStaticPublicInnerInt; + PublicTarget.PublicInner publicInnerTarget + = new PublicTarget().new PublicInner(); + i += publicInnerTarget.publicPublicInnerInt; + i += publicInnerTarget.protectedPublicInnerInt; + i += publicInnerTarget.defaultPublicInnerInt; + i += publicInnerTarget. privatePublicInnerInt; + publicInnerTarget.publicPublicInnerMethod(); + publicInnerTarget.protectedPublicInnerMethod(); + publicInnerTarget.defaultPublicInnerMethod(); + publicInnerTarget.privatePublicInnerMethod(); + } + } +} diff --git a/tests/new/privilegedAspects/util/Util.java b/tests/new/privilegedAspects/util/Util.java new file mode 100644 index 000000000..7b9d70f22 --- /dev/null +++ b/tests/new/privilegedAspects/util/Util.java @@ -0,0 +1,35 @@ + +package util; + +import org.aspectj.testing.Tester; +import org.aspectj.testing.Tester; + +public class Util { + public static boolean PRINT = false; + public static final String pubPublic = "PublicTarget.publicPublicMethod"; + public static final String pubProtected = "PublicTarget.protectedPublicMethod"; + public static final String pubDefault = "PublicTarget.defaultPublicMethod"; + public static final String pubPrivate = "PublicTarget.privatePublicMethod"; + public static final String pubInnerPublic = "PublicTarget.publicPublicInnerMethod"; + public static final String pubInnerProtected = "PublicTarget.protectedPublicInnerMethod"; + public static final String pubInnerDefault = "PublicTarget.defaultPublicInnerMethod"; + public static final String pubInnerPrivate = "PublicTarget.privatePublicInnerMethod"; + public static final String defPublic = "DefaultTarget.publicDefaultMethod"; + public static final String defProtected = "DefaultTarget.protectedDefaultMethod"; + public static final String defDefault = "DefaultTarget.defaultDefaultMethod"; + public static final String defPrivate = "DefaultTarget.privateDefaultMethod"; + public static final String defInnerPublic = "DefaultTarget.publicDefaultInnerMethod"; + public static final String defInnerProtected = "DefaultTarget.protectedDefaultInnerMethod"; + public static final String defInnerDefault = "DefaultTarget.defaultDefaultInnerMethod"; + public static final String defInnerPrivate = "DefaultTarget.privateDefaultInnerMethod"; + + /** signal some test event for later validation + * if PRINT, also outputs to System.err + */ + public static void signal(String s) { + if (PRINT) { + System.err.println(" Util.signal: " + s); + } + Tester.event(s); + } +} diff --git a/tests/new/protectedStatic/SubClass.java b/tests/new/protectedStatic/SubClass.java new file mode 100644 index 000000000..d2caf89eb --- /dev/null +++ b/tests/new/protectedStatic/SubClass.java @@ -0,0 +1,32 @@ +import pack.SuperClass; +import org.aspectj.testing.Tester; + +/** @testcase PR#585 PUREJAVA subclass unable to access protected static methods using type-qualified references */ +public class SubClass extends SuperClass { + private static int i; + static { + while (i<6) { + Tester.expectEvent(label() + SuperClass.SUPERCLASS); + } + i = 0; + } + static void register(Object o) { + Tester.event(""+o); + } + + public static String label() { return "label() " + i++; } + public static void main(String[] args) { + Object o = protectedStaticObject; + register(""+protectedStatic(label() + o)); + register(""+SuperClass.protectedStatic(label() + o)); + register(""+pack.SuperClass.protectedStatic(label() + o)); + new SubClass().run(); + Tester.checkAllEvents(); + } + public void run() { + Object o = protectedObject; + register(label() + protectedObject); + register(""+protectedMethod(label()+o)); + register(""+this.protectedMethod(label()+o)); + } +} diff --git a/tests/new/protectedStatic/pack/SuperClass.java b/tests/new/protectedStatic/pack/SuperClass.java new file mode 100644 index 000000000..ac301a3ee --- /dev/null +++ b/tests/new/protectedStatic/pack/SuperClass.java @@ -0,0 +1,19 @@ + +package pack; + +public class SuperClass { + public static final String SUPERCLASS = "SuperClass"; + private static String superClass() { return SUPERCLASS; } + + /** @testcase PR#585 subclass access to protected static field */ + protected static Object protectedStaticObject = superClass(); + /** @testcase PR#585 subclass access to protected static method */ + protected static Object protectedStatic(String s) { return s; } + + /** @testcase PR#585 subclass access to protected field */ + protected Object protectedObject = superClass(); + /** @testcase PR#585 subclass access to protected method */ + protected Object protectedMethod(String s) { return s; } + + public String toString() { return superClass(); } +} diff --git a/tests/new/runtime/AllRuntime.java b/tests/new/runtime/AllRuntime.java new file mode 100644 index 000000000..6d817699c --- /dev/null +++ b/tests/new/runtime/AllRuntime.java @@ -0,0 +1,489 @@ + +import org.aspectj.lang.*; +import org.aspectj.lang.reflect.*; + +/** + * Run via main or driveTest. + * If you want the verbose output, + * use "-p{rint}" to print when invoking via main, + * or set resultCache with your result sink before running: + * <pre>StringBuffer sb = new StringBuffer(); + * AllRuntime.resultCache(sb); + * int errors = AllRuntime.driveTest(); + * System.err.println(sb.toString()); + * System.err.println("Errors: " + errors);</pre> + * <p> + * This was written to run in a 1.1 VM, + * outside the Tester or Collections or... + * + * @testcase PR#474 rt.java uses 1.2-only variant of Class.forName + */ +public class AllRuntime { + public static void resultCache(StringBuffer cache) { + A.resultCache(cache); + } + + public static void main(String[] args) { + StringBuffer result = null; + if ((null != args) && (0 < args.length) + && (args[0].startsWith("-p"))) { + result = new StringBuffer(); + resultCache(result); + } + int errors = driveTest(); + A.log("Errors: " + errors); + if (null != result) { + System.err.println(result.toString()); + } + } + + /** @return number of errors detected */ + public static int driveTest() { + int result = 0; + boolean ok = testNoAspectBoundException(); + if (!ok) result++; + A.log("testNoAspectBoundException: " + ok); + ok = testMultipleAspectsBoundException(); + if (!ok) result++; + A.log("testMultipleAspectsBoundException: " + ok); + + TargetClass me = new TargetClass(); + + ok = me.catchThrows(); + if (!ok) result++; + + int temp = me.publicIntMethod(2); + if (temp != 12) result++; + + StringBuffer sb = new StringBuffer(); + sb.append("" + me); // callee-side join point + if (sb.length() < 1) result++; + A.log("Callee-side join point " + sb.toString()); + + try { + ok = false; + me.throwException = true; + me.run(); + } catch (SoftException e) { + ok = true; + } + if (!ok) result++; + A.log("SoftException: " + ok); + A a = A.aspectOf(); + if (null != a) { + ok = a.report(); + if (!ok) result++; + A.log(" => all advice was run: " + ok); + } + return result; + } + + /** todo: need test case for multiple aspects */ + public static boolean testMultipleAspectsBoundException() { + return true; + } + + public static boolean testNoAspectBoundException() { + boolean result = false; + try { + B a = B.aspectOf(new Object()); + } catch (NoAspectBoundException e) { + result = true; + } + return result; + } +} + + +/** This has all relevant join points */ +class TargetClass { + private static int INDEX; + static { + INDEX = 10; + } + private int index = INDEX; + private int shadow = index; + + public int publicIntMethod(int input) { + return privateIntMethod(input); + } + + public boolean catchThrows() { + try { + throw new Exception("hello"); + } catch (Exception e) { + if (null != e) return true; + } + return false; + } + + /** print in VM-independent fashion */ + public String toString() { + return "TargetClass " + shadow; + } + + private int privateIntMethod(int input) { + return shadow = index += input; + } +} + +/** used only for NoAspectBoundException test */ +aspect B perthis(target(TargetClass)) { } + +aspect A { + /** log goes here if defined */ + private static StringBuffer CACHE; + /** count number of join points hit */ + private static int jpIndex = 0; + /** count number of A created */ + private static int INDEX = 0; + /** index of this A */ + private int index; + /** count for each advice of how many times invoked */ + private final int[] adviceHits; + A() { + index = INDEX++; + adviceHits = new int[21]; + } + + public static void resultCache(StringBuffer cache) { + if (CACHE != cache) CACHE = cache; + } + + public static void log(String s) { + StringBuffer cache = CACHE; + if (null != cache) { + cache.append(s); + cache.append("\n"); + } + } + + private void log(int i) { adviceHits[i]++; } + + /** report how many times each advice was run + * logging report. + * @return false if any advice was not hit + */ + public boolean report() { + StringBuffer sb = new StringBuffer(); + boolean result = report(this, sb); + log(sb.toString()); + return result; + } + + /** report how many times each advice was run + * @return false if any advice was not hit + */ + public static boolean report(A a, StringBuffer sb) { + boolean result = true; + if (null == a.adviceHits) { + sb.append("[]"); + } else { + sb.append("["); + int[] adviceHits = a.adviceHits; + for (int i = 0; i < adviceHits.length; i++) { + if (i > 0) sb.append(", "); + sb.append(i+"="+adviceHits[i]); + if (result && (0 == adviceHits[i])) { + result = false; + } + } + sb.append("]"); + } + return result; + } + + public static void throwsException() throws Exception { + throw new Exception("exception"); + } + public String toString() { return "A " + index; } + + //-------------------------------------- pointcuts + pointcut safety() + : !within(A) + && !cflow(execution(String TargetClass.toString())) + && !call(String TargetClass.toString()) + ; + pointcut intMethod() : call(int TargetClass.publicIntMethod(int)); + + + //-------------------------------------- declare, introductions + declare parents : TargetClass implements Runnable; + declare soft : Exception : execution(void TargetClass.run()); + + /** unused - enable to throw exception from run() */ + public boolean TargetClass.throwException; + public void TargetClass.run() { + if (throwException) throwsException(); + } + + //-------------------------------------- advice + /** callee-side call join point */ // todo: not being invoked, though TargetClass.toString is??? + before() : call(public String toString()) + && target(TargetClass) { + /* comment out test to avoid StackOverflow + test(thisJoinPoint, thisJoinPointStaticPart, this, + "before() : call(String TargetClass.toString())"); + */ + log(1); + } + + /** caller-side call join point */ + before() : call(int TargetClass.privateIntMethod(int)) { + test(thisJoinPoint, thisJoinPointStaticPart, this, + "before() : call(int TargetClass.privateIntMethod()) "); + log(2); + } + /** call join point */ + before() : intMethod() { + test(thisJoinPoint, thisJoinPointStaticPart, this, + "before() : pc() "); + log(3); + } + + /** execution join point */ + before() : execution(int TargetClass.privateIntMethod(int)) { + test(thisJoinPoint, thisJoinPointStaticPart, this, + "before() : execution(int TargetClass.privateIntMethod()) "); + log(4); + } + + /** execution join point for constructor */ + before() : execution(TargetClass.new(..)) { + test(thisJoinPoint, thisJoinPointStaticPart, this, + "before() : execution(TargetClass.new(..)) "); + log(5); + } + + /** initialization join point */ + before() : initialization(TargetClass+.new(..)) { + test(thisJoinPoint, thisJoinPointStaticPart, this, + "before() : initialization(TargetClass+.new(..)) "); + log(6); + } + + /** static initialization join point */ + before() : initialization(TargetClass+.new(..)) { + test(thisJoinPoint, thisJoinPointStaticPart, this, + "before() : initialization(TargetClass+.new(..)) "); + log(7); + } + + /** cflow join point */ + before() : cflow(execution(int TargetClass.publicIntMethod(int))) + && safety() { + test(thisJoinPoint, thisJoinPointStaticPart, this, + "before() : cflow(execution(int TargetClass.publicIntMethod(int)))"); + log(8); + } + + /** cflowbelow join point */ + before() : cflowbelow(execution(int TargetClass.publicIntMethod(int))) + && safety() { + test(thisJoinPoint, thisJoinPointStaticPart, this, + "before() : cflowbelow(execution(int TargetClass.publicIntMethod(int)))"); + log(9); + } + + /** initialization join point */ + before() : initialization(TargetClass+.new(..)) { + test(thisJoinPoint, thisJoinPointStaticPart, this, + "before() : initialization(TargetClass+.new(..)) "); + log(10); + } + + /** field set join point */ + before() : set(int TargetClass.index) && safety() { + test(thisJoinPoint, thisJoinPointStaticPart, this, + "before() : set(int TargetClass.index) "); + log(11); + } + + /** field get join point */ + before() : get(int TargetClass.index) && safety() { + test(thisJoinPoint, thisJoinPointStaticPart, this, + "before() : get(int TargetClass.index) "); + log(12); + } + + /** within join point (static) */ + before() : within(TargetClass+) && safety() { + test(thisJoinPoint, thisJoinPointStaticPart, this, + "before() : within(TargetClass+) "); + log(13); + } + + /** withincode join point (static) */ + before() : withincode(int TargetClass+.publicIntMethod(int)) && safety() { + test(thisJoinPoint, thisJoinPointStaticPart, this, + "before() : withincode(int TargetClass+.publicIntMethod(int)) "); + log(14); + } + + /** this join point */ + before(TargetClass t) : this(t) && safety() { + test(thisJoinPoint, thisJoinPointStaticPart, this, + "before(TargetClass t) : this(t) && safety() This t: " + t + " this: " + this); + log(15); + } + + /** target join point */ + before(TargetClass t) : target(t) && safety() { + test(thisJoinPoint, thisJoinPointStaticPart, this, + "before(TargetClass t) : target(t) && safety() target t: " + t + " this: " + this); + log(16); + } + + /** args join point */ + before(int i) : args(i) && safety() { + test(thisJoinPoint, thisJoinPointStaticPart, this, + "before(int i) : args(i) && safety() args i: " + i); + log(17); + } + + /** handler join point */ + before() : handler(Exception) { // && args(e) { + test(thisJoinPoint, thisJoinPointStaticPart, this, + "before(Throwable e) : handler(Throwable) && args(e) && within(TargetClass+) args e: " ); + log(18); + } + + /** if pcd join point */ + before(int i) : args(i) && if(i > 0) && safety() { + test(thisJoinPoint, thisJoinPointStaticPart, this, + "before(int i) : args(i) && if(i > 0) && safety() args i: " + i); + log(19); + } + + /** call join point for constructor */ + before() : call(TargetClass.new(..)) { + test(thisJoinPoint, thisJoinPointStaticPart, this, + "before() : call(TargetClass.new(..)) "); + log(20); + } + + /** everything join point */ + before(TargetClass t) + : (target(t) ) + && (call(int TargetClass.privateIntMethod(int)) + || execution(int TargetClass.privateIntMethod(int)) + || initialization(TargetClass.new()) + || (cflow(call(int TargetClass.privateIntMethod(int))) + && !cflowbelow(call(int TargetClass.privateIntMethod(int)))) + ) + && (!cflow(call(void TargetClass.catchThrows()))) + && (!call(void TargetClass.run())) + && (!set(int TargetClass.index)) + && (!get(int TargetClass.index)) + && safety() + && if(null != t) { + test(thisJoinPoint, thisJoinPointStaticPart, this, + "everything"); // todo: add args + log(0); + } + + private void test(JoinPoint jp, JoinPoint.StaticPart jpsp, Object tis, + String context) { + StringBuffer sb = new StringBuffer(); + sb.append("\n join pt: " + jpIndex++); + sb.append("\n jp: " + jp); + render(jp, sb); + sb.append("\n jpsp: " + jpsp); + sb.append("\n tis: " + tis); + sb.append("\n this: " + this); + sb.append("\n context: " + context); + log(sb.toString()); + } + + private void render(JoinPoint jp, StringBuffer sb) { + if (null == jp) { + sb.append("null"); + } else { + //sb.append("\n args: " + jp.getArgs()); + sb.append("\n args: "); + render(jp.getArgs(), sb); + sb.append("\n kind: " + jp.getKind()); + sb.append("\n sig: " ); + render(jp.getSignature(), sb); + sb.append("\n loc: " ); + render(jp.getSourceLocation(), sb); + sb.append("\n targ: " + jp.getTarget()); + sb.append("\n this: " + jp.getThis()); + } + } + + /** render to check subtype of Signature, print in VM-independent fashion */ + private void render(Signature sig, StringBuffer sb) { + if (null == sig) { + sb.append("null"); + } else { + if (sig instanceof AdviceSignature) { + sb.append("AdviceSignature "); + sb.append(sig.getName() + " " ); + sb.append(""+((AdviceSignature ) sig).getReturnType()); + } else if (sig instanceof CatchClauseSignature) { + sb.append("CatchClauseSignature "); + sb.append(sig.getName() + " " ); + sb.append(""+((CatchClauseSignature ) sig).getParameterType()); + } else if (sig instanceof ConstructorSignature) { + sb.append("ConstructorSignature "); + sb.append(sig.getName() + " " ); + sb.append(""+((ConstructorSignature) sig).getName()); + } else if (sig instanceof FieldSignature) { + sb.append("FieldSignature "); + sb.append(sig.getName() + " " ); + sb.append(""+((FieldSignature ) sig).getFieldType()); + } else if (sig instanceof InitializerSignature) { + sb.append("InitializerSignature "); + sb.append(sig.getName() + " " ); + } else if (sig instanceof MethodSignature) { + sb.append("MethodSignature "); + sb.append(sig.getName() + " " ); + sb.append(""+((MethodSignature) sig).getReturnType()); + } else if (sig instanceof MemberSignature) { + sb.append("MemberSignature?? "); + sb.append(sig.getName() + " " ); + } else if (sig instanceof CodeSignature) { + sb.append("CodeSignature ??"); + sb.append(sig.getName() + " " ); + } else { + sb.append("Unknown ??"); + sb.append(sig.getName() + " " ); + } + } + } + private void render(SourceLocation sl, StringBuffer sb) { + if (null == sl) { + sb.append("null"); + } else { + String path = sl.getFileName(); + int loc = path.lastIndexOf("/"); + if (-1 != loc) { + path = path.substring(loc+1); + } else { + // todo: not portable to other machines + loc = path.lastIndexOf("\\"); + if (-1 != loc) { + path = path.substring(loc+1); + } + } + sb.append(path); + sb.append(":" + sl.getLine()); + sb.append(":" + sl.getColumn()); + } + } + + private void render(Object[] args, StringBuffer sb) { + if (null == args) { + sb.append("null"); + } else { + sb.append("Object[" + args.length + "] = {"); + for (int i = 0; i < args.length; i++) { + if (i > 0) sb.append(", "); + sb.append("" + args[i]); + } + sb.append("}"); + } + } +} + diff --git a/tests/new/runtime/TesterDriver.java b/tests/new/runtime/TesterDriver.java new file mode 100644 index 000000000..56b1349eb --- /dev/null +++ b/tests/new/runtime/TesterDriver.java @@ -0,0 +1,15 @@ + +import org.aspectj.testing.Tester; + +/** Drive AllRuntime in a tester environment */ +public class TesterDriver { + public static void main(String[] args) { + StringBuffer sb = new StringBuffer(); + AllRuntime.resultCache(sb); + int errors = AllRuntime.driveTest(); + if (0 != errors) { + Tester.check(0 == errors, "AllRuntime errors: " + errors); + System.err.println(sb.toString()); + } + } +} diff --git a/tests/new/scopeTypingBug/Driver.java b/tests/new/scopeTypingBug/Driver.java new file mode 100644 index 000000000..845789b09 --- /dev/null +++ b/tests/new/scopeTypingBug/Driver.java @@ -0,0 +1,16 @@ + +import org.aspectj.testing.Tester; + +public class Driver { + private static java.util.Vector v = new java.util.Vector(); + + public static void main(String[] args) { test(); } + + public static void test() { + v.addElement("foo"); + boolean containsFoo = v.contains("foo"); + Object v = new Object(); + + Tester.check(containsFoo, "Vector contains element added"); + } +} diff --git a/tests/new/staticMethAdv/Driver.java b/tests/new/staticMethAdv/Driver.java new file mode 100644 index 000000000..9946c0f07 --- /dev/null +++ b/tests/new/staticMethAdv/Driver.java @@ -0,0 +1,29 @@ + +import org.aspectj.testing.Tester; + +// PR#151 + +public class Driver { + public static void main(String[] args) { test(); } + public static void test() { + Tester.checkEqual(C.set(), "C-advised-set", ""); + } + + static advice(C c): c && * *(..) { + before { + if (c != null) + Tester.check(false, "c == null"); + else + c.s += "-advised"; + } + } +} + +class C { + static String s = "C"; + + static String set() { + s += "-set"; + return s; + } +} diff --git a/tests/new/subaspects/AbstractAspectUsedStatically.java b/tests/new/subaspects/AbstractAspectUsedStatically.java new file mode 100644 index 000000000..272e9279b --- /dev/null +++ b/tests/new/subaspects/AbstractAspectUsedStatically.java @@ -0,0 +1,20 @@ + +import org.aspectj.testing.*; + +/** @testcase PR#647 abstract aspect used statically should not cause instantiation of advice or pointcut */ +public abstract aspect AbstractAspectUsedStatically { + public static void main (String[] args) { + Tester.event("main"); + Tester.checkAllEvents(); + } + static { + Tester.expectEvent("main"); + } + + before() : definePrivate() { + Tester.check(false, "definePrivate"); + } + + /** private must be implemented in defining class */ + private pointcut definePrivate() : execution(void main(..)); +} diff --git a/tests/new/subaspects/PrivatePointcutCE.java b/tests/new/subaspects/PrivatePointcutCE.java new file mode 100644 index 000000000..283dded32 --- /dev/null +++ b/tests/new/subaspects/PrivatePointcutCE.java @@ -0,0 +1,6 @@ + +/** @testcase PR#647 aspect with private abstract pointcut */ +abstract aspect PrivatePointcutCE { + /** @testcase abstract private pointcut */ + abstract private pointcut defined(); // CE expected here +} diff --git a/tests/new/subaspects/child/ChildCE.java b/tests/new/subaspects/child/ChildCE.java new file mode 100644 index 000000000..4a0b8377c --- /dev/null +++ b/tests/new/subaspects/child/ChildCE.java @@ -0,0 +1,31 @@ + + +package child; + +import parent.ParentCE; + +import org.aspectj.testing.*; + +public class ChildCE { + public static void main (String[] args) { + new Target().run(); + Tester.checkAllEvents(); + } + static { + Tester.expectEvent("define"); + Tester.expectEvent("run"); + } +} + +class Target { + public void run(){ + Tester.event("run"); + } +} + +/** @testcase PR#647 concrete aspect unable to access abstract package-private pointcut in parent for overriding */ +aspect ParentChild extends ParentCE {// expect CE here: child does not define "define()" b/c inaccessible + protected pointcut define() + : call(public void Target.run()); +} + diff --git a/tests/new/subaspects/child/ChildMethodCE.java b/tests/new/subaspects/child/ChildMethodCE.java new file mode 100644 index 000000000..61bbb8024 --- /dev/null +++ b/tests/new/subaspects/child/ChildMethodCE.java @@ -0,0 +1,30 @@ + + +package child; + +import parent.ParentMethodCE; + +import org.aspectj.testing.*; + +public class ChildMethodCE { + public static void main (String[] args) { + new Target().run(); + Tester.checkAllEvents(); + } + static { + Tester.expectEvent("define"); + Tester.expectEvent("run"); + } +} + +class Target { + public void run(){ + Tester.event("run"); + } +} + +/** @testcase PR#647 attempt to concretize abstract aspect without access to abstract member method */ +class ParentChild extends ParentMethodCE { // expect CE here: child does not define "defineMethod()" b/c inaccessible + protected void defineMethod() {} +} + diff --git a/tests/new/subaspects/child/ForeignChildAspect.java b/tests/new/subaspects/child/ForeignChildAspect.java new file mode 100644 index 000000000..4c65a01ff --- /dev/null +++ b/tests/new/subaspects/child/ForeignChildAspect.java @@ -0,0 +1,29 @@ + +package child; + +import parent.SubAspectVisibility; +import parent.ForeignChildHelper; + +import org.aspectj.testing.*; + +/** @testcase PR#647 inner, outer, and outside-package subaspects of an aspect with abstract protected-, public-, and default-access pointcuts */ +public aspect ForeignChildAspect extends ForeignChildHelper { + public static void main (String[] args) { + Tester.event("ForeignChildAspect.main"); + } + + before() : defineProtected() { + Tester.event("ForeignChildAspect.defineProtected"); + } + + before() : definePublic() { + Tester.event("ForeignChildAspect.definePublic"); + } + + /** can be implemented */ + public pointcut definePublic() : execution(void ForeignChildAspect.main(..)); + + /** can be implemented */ + protected pointcut defineProtected() : execution(void ForeignChildAspect.main(..)); + +} diff --git a/tests/new/subaspects/parent/ForeignChildHelper.java b/tests/new/subaspects/parent/ForeignChildHelper.java new file mode 100644 index 000000000..31b929eb1 --- /dev/null +++ b/tests/new/subaspects/parent/ForeignChildHelper.java @@ -0,0 +1,16 @@ + +package parent; + +import child.ForeignChildAspect; +import parent.SubAspectVisibility; + +import org.aspectj.testing.*; + +/** @testcase PR#647 inner, outer, and outside-package subaspects of an aspect with abstract protected-, public-, and default-access pointcuts */ +public abstract aspect ForeignChildHelper extends SubAspectVisibility { + /** @testCase override package-private pointcut in outer class */ + pointcut definePackagePrivate() : execution(void ForeignChildAspect.main(..)); + before() : definePackagePrivate() { + Tester.event("ForeignChildHelper.definePackagePrivate"); + } +} diff --git a/tests/new/subaspects/parent/ParentCE.java b/tests/new/subaspects/parent/ParentCE.java new file mode 100644 index 000000000..a28dd83d7 --- /dev/null +++ b/tests/new/subaspects/parent/ParentCE.java @@ -0,0 +1,15 @@ + +package parent; + +import org.aspectj.testing.*; + +/** @testcase PR#647 concrete aspect unable to access abstract package-private pointcut in parent for overriding */ +public abstract aspect ParentCE { + abstract pointcut define(); + before() : define() { + Tester.event("define"); + } +} +aspect Child extends ParentCE { + pointcut define() : call(public void Target.run()); +} diff --git a/tests/new/subaspects/parent/ParentMethodCE.java b/tests/new/subaspects/parent/ParentMethodCE.java new file mode 100644 index 000000000..0f25fe2d5 --- /dev/null +++ b/tests/new/subaspects/parent/ParentMethodCE.java @@ -0,0 +1,10 @@ + +package parent; + +import org.aspectj.testing.*; + +/** @testcase PR#647 concrete aspect unable to access abstract package-private method in parent for overriding */ +public abstract class ParentMethodCE { + /** cannot be implemented outside this class */ + abstract void defineMethod(); +} diff --git a/tests/new/subaspects/parent/PrivatePointcut.java b/tests/new/subaspects/parent/PrivatePointcut.java new file mode 100644 index 000000000..1c09fb040 --- /dev/null +++ b/tests/new/subaspects/parent/PrivatePointcut.java @@ -0,0 +1,26 @@ + +package parent; + +import org.aspectj.testing.*; + +/** @testcase PR#647 inner subaspects of an aspect with private pointcut */ +public abstract aspect PrivatePointcut { + public static void main (String[] args) { + Tester.event("main"); + Tester.checkAllEvents(); + } + static { + Tester.expectEvent("main"); + Tester.expectEvent("definePrivate"); + } + + before() : definePrivate() { + Tester.event("definePrivate"); + } + + /** private must be implemented in defining class */ + private pointcut definePrivate() : execution(void PrivatePointcut.main(..)); +} +aspect InnerChild extends PrivatePointcut { +} + diff --git a/tests/new/subaspects/parent/PrivatePointcutOuterClass.java b/tests/new/subaspects/parent/PrivatePointcutOuterClass.java new file mode 100644 index 000000000..7ae3752c0 --- /dev/null +++ b/tests/new/subaspects/parent/PrivatePointcutOuterClass.java @@ -0,0 +1,26 @@ + +package parent; + +import org.aspectj.testing.*; + +/** PR#647 outer subaspects of an aspect with private pointcut */ +public abstract aspect PrivatePointcutOuterClass { + public static void main (String[] args) { + Tester.event("main"); + Tester.checkAllEvents(); + } + static { + Tester.expectEvent("main"); + Tester.expectEvent("definePrivate"); + } + + before() : definePrivate() { + Tester.event("definePrivate"); + } + + /** private must be implemented in defining class */ + private pointcut definePrivate() + : execution(void PrivatePointcutOuterClass.main(..)); +} +aspect InnerChild extends PrivatePointcutOuterClass { } + diff --git a/tests/new/subaspects/parent/SubAspectVisibility.java b/tests/new/subaspects/parent/SubAspectVisibility.java new file mode 100644 index 000000000..e7af8c345 --- /dev/null +++ b/tests/new/subaspects/parent/SubAspectVisibility.java @@ -0,0 +1,95 @@ + +package parent; + +import child.ForeignChildAspect; + +import org.aspectj.testing.*; + +/** @testcase PR#647 inner, outer, and outside-package subaspects of an aspect with abstract protected-, public-, and default-access pointcuts */ +public abstract aspect SubAspectVisibility { + public static void main (String[] args) { + Tester.event("main"); + OuterChild.main(args); + ForeignChildAspect.main(args); + Tester.checkAllEventsIgnoreDups(); + } + static { + Tester.expectEvent("main"); + Tester.expectEvent("definePrivate"); + Tester.expectEvent("definePackagePrivate"); + Tester.expectEvent("defineProtected"); + Tester.expectEvent("definePublic"); + + Tester.expectEvent("Outer.main"); + Tester.expectEvent("Outer.definePackagePrivate"); + Tester.expectEvent("Outer.defineProtected"); + Tester.expectEvent("Outer.definePublic"); + + Tester.expectEvent("ForeignChildAspect.main"); + Tester.expectEvent("ForeignChildHelper.definePackagePrivate"); + Tester.expectEvent("ForeignChildAspect.defineProtected"); + Tester.expectEvent("ForeignChildAspect.definePublic"); + } + + before() : definePrivate() { + Tester.event("definePrivate"); + } + + before() : definePackagePrivate() { + Tester.event("definePackagePrivate"); + } + + before() : defineProtected() { + Tester.event("defineProtected"); + } + + before() : definePublic() { + Tester.event("definePublic"); + } + + /** public can be implemented in outer or inner child class */ + abstract public pointcut definePublic(); + + /** protected can be can be implemented in outer or inner child class */ + abstract protected pointcut defineProtected(); + + /** package-private can be can be implemented in outer or inner child class */ + abstract pointcut definePackagePrivate(); + + /** private must be implemented in defining class */ + private pointcut definePrivate() : execution(void SubAspectVisibility.main(..)); + + // bug? says definePrivate() is not defined in InnerChild + static aspect InnerChild extends SubAspectVisibility { + /** @testCase override protected pointcut in inner class */ + protected pointcut defineProtected() : execution(void SubAspectVisibility.main(..)); + /** @testCase override package-private pointcut in inner class */ + pointcut definePackagePrivate() : execution(void SubAspectVisibility.main(..)); + /** @testCase override public pointcut in inner class */ + public pointcut definePublic() : execution(void SubAspectVisibility.main(..)); + } +} + +aspect OuterChild extends SubAspectVisibility { + public static void main (String[] args) { + Tester.event("Outer.main"); + } + + /** @testCase override package-private pointcut in outer class */ + pointcut definePackagePrivate() : execution(void OuterChild.main(..)); + /** @testCase override protected pointcut in outer class */ + protected pointcut defineProtected() : execution(void OuterChild.main(..)); + /** @testCase override public pointcut in outer class */ + public pointcut definePublic() : execution(void OuterChild.main(..)); + + before() : definePackagePrivate() { + Tester.event("Outer.definePackagePrivate"); + } + before() : defineProtected() { + Tester.event("Outer.defineProtected"); + } + before() : definePublic() { + Tester.event("Outer.definePublic"); + } +} + diff --git a/tests/new/test/Test.java b/tests/new/test/Test.java new file mode 100644 index 000000000..efe358e26 --- /dev/null +++ b/tests/new/test/Test.java @@ -0,0 +1,16 @@ +package test; + +import org.aspectj.testing.*; + +public class Test { + public static void main(String[] args) { + new Test().run(); + Tester.checkAllEvents(); + } + public void run() { + Tester.event("run"); + } + static { + Tester.expectEventsInString("before,after,run"); + } +} diff --git a/tests/new/test/TraceAspect.java b/tests/new/test/TraceAspect.java new file mode 100644 index 000000000..d79c1d69c --- /dev/null +++ b/tests/new/test/TraceAspect.java @@ -0,0 +1,15 @@ +package test; + +import org.aspectj.testing.*; + +aspect Trace pertarget(target(test.Test)) { + + pointcut runs(): call(void run()); + + before(): runs() { + Tester.event("before"); + } + after(): runs() { + Tester.event("after"); + } +} diff --git a/tests/new/testPackage/Class1.java b/tests/new/testPackage/Class1.java new file mode 100644 index 000000000..d53733d34 --- /dev/null +++ b/tests/new/testPackage/Class1.java @@ -0,0 +1,11 @@ +package packagevisibility.testPackage; + +public class Class1 { + public String doIt(String s) { + return s + "-class1"; + } + + public String doItToClass2(String s) { + return (new packagevisibility.testPackage.Class2()).doIt(s); + } +} diff --git a/tests/new/testPackage/Class2.java b/tests/new/testPackage/Class2.java new file mode 100644 index 000000000..697a8c86e --- /dev/null +++ b/tests/new/testPackage/Class2.java @@ -0,0 +1,7 @@ +package packagevisibility.testPackage; + +class Class2 { + String doIt(String s) { + return s + "-class2"; + } +} diff --git a/tests/new/testPackage/Import.java b/tests/new/testPackage/Import.java new file mode 100644 index 000000000..b546ad89f --- /dev/null +++ b/tests/new/testPackage/Import.java @@ -0,0 +1,9 @@ +package testPackage; + +import testPackage.subPackage.Class1; + +public class Import extends Class1 { + public static void main( String[] args ) { + print( "here" ); + } +} diff --git a/tests/new/testPackage/subPackage/Class1.java b/tests/new/testPackage/subPackage/Class1.java new file mode 100644 index 000000000..432285125 --- /dev/null +++ b/tests/new/testPackage/subPackage/Class1.java @@ -0,0 +1,7 @@ +package testPackage.subPackage; + +public class Class1 { + static public void print( String s ) { + System.out.println( ">> " + s ); + } +} diff --git a/tests/new/thisUsedInMain/Driver.java b/tests/new/thisUsedInMain/Driver.java new file mode 100644 index 000000000..efb7cc338 --- /dev/null +++ b/tests/new/thisUsedInMain/Driver.java @@ -0,0 +1,24 @@ +import org.aspectj.testing.Tester; + +// PR#262 + +import org.aspectj.testing.Tester; + +public aspect Driver /*of eachobject(instanceof(CallsTo))*/ { + + public static void test() { main(null); } + + public static void main(String[] args) { + CallsTo ct = new CallsTo(); + Tester.checkEqual(ct.a(), "s", "after calls"); + } + + pointcut call1(): call(* CallsFrom.b(..)) && within(CallsTo); + before(): call1() { + //System.out.println("before-call1"); + } +} + +class CallsTo { public String a() { return new CallsFrom().b("s"); } } + +class CallsFrom { public String b(String s) { return s; } } diff --git a/tests/new/twofiles/TheAspect.java b/tests/new/twofiles/TheAspect.java new file mode 100644 index 000000000..72416eab9 --- /dev/null +++ b/tests/new/twofiles/TheAspect.java @@ -0,0 +1,3 @@ +privileged aspect TheAspect pertarget(target(TheObject)) { + +} diff --git a/tests/new/twofiles/TheObject.java b/tests/new/twofiles/TheObject.java new file mode 100644 index 000000000..378841dd4 --- /dev/null +++ b/tests/new/twofiles/TheObject.java @@ -0,0 +1,6 @@ +import org.aspectj.testing.Tester; +public class TheObject { + public static void main(String[] args) { + Tester.check(true, "compiled!"); + } +} diff --git a/tests/new/typeNameConflicts/Driver.java b/tests/new/typeNameConflicts/Driver.java new file mode 100644 index 000000000..95e403cb9 --- /dev/null +++ b/tests/new/typeNameConflicts/Driver.java @@ -0,0 +1,30 @@ +package typeNameConflicts; + +public class Driver { + static int x; + + public Entry getEntry() { + return new Integer(); + } + + public static void main(String[] args) { + x = 2; + Runnable r = new Runnable() { public void run() { System.out.println("running"); } }; + r.run(); + + //java.lang.Integer i = new java.lang.Integer(2); + } + + abstract class Entry { + } + + class Integer extends Entry { + int value; + + public void m() { + value = 3; + //java.lang.Integer i = new java.lang.Integer(2); + } + } +} + diff --git a/tests/new/typeNameConflicts/aspects/A.java b/tests/new/typeNameConflicts/aspects/A.java new file mode 100644 index 000000000..a00046cce --- /dev/null +++ b/tests/new/typeNameConflicts/aspects/A.java @@ -0,0 +1,27 @@ +package typeNameConflicts.aspects; + +aspect A { + /* + before(): set(int value) { //&& args(o) { + System.out.println(thisJoinPointStaticPart); + } + */ + + after() returning(Object o): set(int value) { + System.out.println(o); + } + + + before(): call(void Runnable.run()) { + System.out.println("about to run"); + } + + /* + after(): set(int value) { + System.out.println("set"); + } + after() throwing: set(int value) { + System.out.println("throwing"); + } + */ +} diff --git a/tests/new/typeNameConflicts/p1/C.java b/tests/new/typeNameConflicts/p1/C.java new file mode 100644 index 000000000..6928b2e81 --- /dev/null +++ b/tests/new/typeNameConflicts/p1/C.java @@ -0,0 +1,11 @@ +package typeNameConflicts.p1; + +public class C { + static class Inner { + public Runnable makeRunnable() { + return new Runnable() { + public void run() { System.out.println("running"); } + }; + } + } +} diff --git a/tests/new/typepatternmatch/pack1/IntroErrorLocation.java b/tests/new/typepatternmatch/pack1/IntroErrorLocation.java new file mode 100644 index 000000000..3b5b397db --- /dev/null +++ b/tests/new/typepatternmatch/pack1/IntroErrorLocation.java @@ -0,0 +1,41 @@ + +package typepatternmatch.pack1; +import org.aspectj.testing.Tester; +import org.aspectj.testing.Tester; + +/** + * FYI the compiler will not warn when a TypePattern matches no type/class. + * From an email to user from Stefan + */ +public class IntroErrorLocation { + /** change to true if the compiler ever should weave in by finding type? */ + public static volatile boolean EXPECT_INIT = false; + /** signifies that the initialization advice was run */ + public static final String INIT_SIGNAL = "init"; + static { + if (EXPECT_INIT) Tester.event(INIT_SIGNAL); + } + public static void main(String[] args) { + typepatternmatch.pack2.TargetClass target + = new typepatternmatch.pack2.TargetClass(); + Tester.checkAllEvents(); + } +} + +aspect MyIntroductionAspect { + + /** @testTarget typepattern.nonmatching.introduction.method */ + public String TargetClass.introMethod(String s) { // fails to match typepattern in other package + return s; + } + /** @testTarget signature.nonmatching.advice.initialization */ + after (typepatternmatch.pack2.TargetClass c) + : initialization(TargetClass.new()) && this(c) { // fails to match signature in other package + final String test = IntroErrorLocation.INIT_SIGNAL; + if (IntroErrorLocation.EXPECT_INIT) { + //Tester.event(c.introMethod(test)); // todo add positive: passed + } + // compiler error here is correct: no such method; no introMethod b/c TargetClass not matched + Tester.checkEqual(test, c.introMethod(test), "Round trip failed"); // correct compiler error + } +} diff --git a/tests/new/typepatternmatch/pack2/TargetClass.java b/tests/new/typepatternmatch/pack2/TargetClass.java new file mode 100644 index 000000000..afb567423 --- /dev/null +++ b/tests/new/typepatternmatch/pack2/TargetClass.java @@ -0,0 +1,8 @@ + +package typepatternmatch.pack2; + +/** + */ +// PR#TODO +public class TargetClass { +} diff --git a/tests/new/unqualifiedPointcutName/Driver.java b/tests/new/unqualifiedPointcutName/Driver.java new file mode 100644 index 000000000..1989cbcdb --- /dev/null +++ b/tests/new/unqualifiedPointcutName/Driver.java @@ -0,0 +1,40 @@ + +import org.aspectj.testing.Tester; + +import java.util.*; + +// PR#304 lookup rules for unqualified pointcut names + + +public class Driver { + + public static String s = ""; + + public static void main(String[] args){ + new MyObject().go(); + Tester.checkEqual(s, "-before-new", ""); + } + +} + +aspect MyPointCuts { + pointcut excludes(): + (call(* equals(..))) || + (call(* toString(..))) || + (call(* hashCode(..))) || + (call(* clone(..))) + ; + pointcut allCalls(): call(* *(..)) && !excludes(); +} + +aspect MyAspect /*of eachobject(instanceof(MyObject))*/ { + before(): MyPointCuts.allCalls() && target(MyObject) { + Driver.s += "-before"; + } +} + +class MyObject { + public void go() { + Driver.s += "-new"; + } +} diff --git a/tests/new/volatileKeyword/Driver.java b/tests/new/volatileKeyword/Driver.java new file mode 100644 index 000000000..acac776d1 --- /dev/null +++ b/tests/new/volatileKeyword/Driver.java @@ -0,0 +1,15 @@ + +import org.aspectj.testing.Tester; + +public class Driver { + volatile static boolean completed = true; + public static void main(String[] args) { test(); } + public static void test() { + Tester.check(completed, "static volatile filed"); + Tester.check(new C().completed, "instance of volatile filed"); + } +} + +class C { + volatile boolean completed = true; +}
\ No newline at end of file diff --git a/tests/options/WarnDeprecated.java b/tests/options/WarnDeprecated.java new file mode 100644 index 000000000..2d0d928a7 --- /dev/null +++ b/tests/options/WarnDeprecated.java @@ -0,0 +1,13 @@ + + + + +public class WarnDeprecated { + + /** @deprecated */ + public static void main(String[] args) { + if (null == args) { + main(new String[0]); // CE 10 deprecated if warn:deprecated + } + } +} diff --git a/tests/options/XLintTypeArgsPCD.java b/tests/options/XLintTypeArgsPCD.java new file mode 100644 index 000000000..ee22bd174 --- /dev/null +++ b/tests/options/XLintTypeArgsPCD.java @@ -0,0 +1,14 @@ + +class E {} +class F { + public static void main(String[] args) {} +} + +public aspect XLintTypeArgsPCD { + public static int COUNT; + + before () : args(UnknownType) { // CM -XLint unfound type + COUNT++; + } +} + diff --git a/tests/options/XLintTypeDeclareField.java b/tests/options/XLintTypeDeclareField.java new file mode 100644 index 000000000..df58fc966 --- /dev/null +++ b/tests/options/XLintTypeDeclareField.java @@ -0,0 +1,12 @@ + +class C {} +class D {} +class E {} +class F {} + + +public aspect XLintTypeDeclareField { + + public int UnknownType.i; // CM -XLint unfound type +} + diff --git a/tests/options/XLintTypeDeclareMethod.java b/tests/options/XLintTypeDeclareMethod.java new file mode 100644 index 000000000..80a791b54 --- /dev/null +++ b/tests/options/XLintTypeDeclareMethod.java @@ -0,0 +1,12 @@ + + +class C {} +class D {} +class E {} +class F {} + +public aspect XLintTypeDeclareMethod { + + int UnknownType.getValue() { return 0; } // CM -XLint unfound type +} + diff --git a/tests/options/XLintTypeDeclareParent.java b/tests/options/XLintTypeDeclareParent.java new file mode 100644 index 000000000..2a98a76b7 --- /dev/null +++ b/tests/options/XLintTypeDeclareParent.java @@ -0,0 +1,12 @@ + + +class C {} +class D {} +class E {} +class F {} + +public aspect XLintTypeDeclareParent { + + declare parents: UnknownType implements Cloneable; // CM -XLint unfound type +} + diff --git a/tests/options/XLintTypeTargetPCD.java b/tests/options/XLintTypeTargetPCD.java new file mode 100644 index 000000000..1893833a5 --- /dev/null +++ b/tests/options/XLintTypeTargetPCD.java @@ -0,0 +1,14 @@ + +class C {} +class D {} +class E {} +class F {} + +public aspect XLintTypeTargetPCD { + public static int COUNT; + + before () : target(UnknownType) { // CM -XLint unfound type + COUNT++; + } +} + diff --git a/tests/options/XLintTypeThisPCD.java b/tests/options/XLintTypeThisPCD.java new file mode 100644 index 000000000..6d32f0554 --- /dev/null +++ b/tests/options/XLintTypeThisPCD.java @@ -0,0 +1,14 @@ + +class C {} +class D {} +class E {} +class F {} + +public aspect XLintTypeThisPCD { + public static int COUNT; + + before () : this(UnknownType) { // CM -XLint unfound type + COUNT++; + } +} + diff --git a/tests/options/injars/simple/Main.java b/tests/options/injars/simple/Main.java new file mode 100644 index 000000000..fd8342a1c --- /dev/null +++ b/tests/options/injars/simple/Main.java @@ -0,0 +1,12 @@ + + +import org.aspectj.testing.Tester; + +public class Main { + public static void main(String[] args) { + Tester.expectEvent("run"); + new Main().run(); + Tester.checkAllEvents(); + } + public void run(){} +}
\ No newline at end of file diff --git a/tests/options/injars/simple/Simple.java b/tests/options/injars/simple/Simple.java new file mode 100644 index 000000000..6caf44ec1 --- /dev/null +++ b/tests/options/injars/simple/Simple.java @@ -0,0 +1,9 @@ + + +import org.aspectj.testing.Tester; + +aspect Simple { + before() : execution(void run()) { + Tester.event("run"); + } +}
\ No newline at end of file diff --git a/tests/options/injars/simple/main.jar b/tests/options/injars/simple/main.jar Binary files differnew file mode 100644 index 000000000..7b9859037 --- /dev/null +++ b/tests/options/injars/simple/main.jar diff --git a/tests/other-systems/ajc-src/FindShowError.java b/tests/other-systems/ajc-src/FindShowError.java new file mode 100644 index 000000000..49ed8f4bd --- /dev/null +++ b/tests/other-systems/ajc-src/FindShowError.java @@ -0,0 +1,26 @@ +import org.aspectj.compiler.base.ast.*; + + + +aspect Wins { + + pointcut showError(ASTObject ast, String msg): + within(org.aspectj..*) && target(ast) && args(msg) && call(void showError(String)); + + void around(ASTObject ast, String msg): showError(ast, msg) { + System.out.println("hi"); + proceed(ast, msg); + } +} + +aspect Loses { + + pointcut showError(ASTObject ast, String msg): + target(ast) && args(msg) && call(void showError(String)); + + void around(ASTObject ast, String msg): showError(ast, msg) { + System.out.println("hi"); + proceed(ast, msg); + } +} + diff --git a/tests/other-systems/ajc-src/Pcds.java b/tests/other-systems/ajc-src/Pcds.java new file mode 100644 index 000000000..fec81138e --- /dev/null +++ b/tests/other-systems/ajc-src/Pcds.java @@ -0,0 +1,4 @@ +public aspect Pcds { + public pointcut withinMe(): within(org.aspectj..*); + public pointcut myTarget(): target(org.aspectj..*); +} diff --git a/tests/other-systems/java-src/Pcds.java b/tests/other-systems/java-src/Pcds.java new file mode 100644 index 000000000..9bd156879 --- /dev/null +++ b/tests/other-systems/java-src/Pcds.java @@ -0,0 +1,4 @@ +public aspect Pcds { + public pointcut withinMe(): within(java..*) || within(javax..*); + public pointcut myTarget(): target(java..*) || target(javax..*); +} diff --git a/tests/other-systems/rsa/aspects/Gets.java b/tests/other-systems/rsa/aspects/Gets.java new file mode 100644 index 000000000..dc3284c79 --- /dev/null +++ b/tests/other-systems/rsa/aspects/Gets.java @@ -0,0 +1,3 @@ +aspect Gets { + +} diff --git a/tests/other-systems/rsa/aspects/GetsSets.java b/tests/other-systems/rsa/aspects/GetsSets.java new file mode 100644 index 000000000..b5d81dcff --- /dev/null +++ b/tests/other-systems/rsa/aspects/GetsSets.java @@ -0,0 +1,8 @@ +aspect Gets { + pointcut setters(): call(void *.set(..)); + pointcut getters(): call(Object *.get()); + + pointcut all(): setters() || getters(); + before(): all() {} + after(): all() {} +} diff --git a/tests/other-systems/sablecc/src/LexerAspect.java b/tests/other-systems/sablecc/src/LexerAspect.java new file mode 100644 index 000000000..7b04f3e08 --- /dev/null +++ b/tests/other-systems/sablecc/src/LexerAspect.java @@ -0,0 +1,12 @@ +import org.sablecc.sablecc.lexer.*; +import org.sablecc.sablecc.node.*; + +public aspect LexerAspect { + + pointcut callstoSets(): + call(void set*(Object)) && target(Token); + + before () : callstoSets() {} + void around () : callstoSets() { proceed(); } + after () : callstoSets() {} +} diff --git a/tests/other-systems/sablecc/src/NodeAspect.java b/tests/other-systems/sablecc/src/NodeAspect.java new file mode 100644 index 000000000..e43069ad4 --- /dev/null +++ b/tests/other-systems/sablecc/src/NodeAspect.java @@ -0,0 +1,21 @@ +import org.sablecc.sablecc.node.*; +import org.sablecc.sablecc.analysis.Analysis; + +public aspect NodeAspect { + + pointcut removes(): call(void removeChild(Node)) && target(Node); + pointcut callstoSets(): call(void set*(Analysis,Object)) && target(Node); + pointcut callstoGets(): call(void get*(Analysis)) && target(Node); + + before() : removes() {} + void around() : removes() { proceed(); } + after () : removes() {} + + before() : callstoSets() {} + void around() : callstoSets() { proceed(); } + after () : callstoSets() {} + + before() : callstoGets() {} + void around() : callstoGets() { proceed(); } + after () : callstoGets() {} +} diff --git a/tests/other-systems/sablecc/src/NodesAspect.java b/tests/other-systems/sablecc/src/NodesAspect.java new file mode 100644 index 000000000..b2c8eb403 --- /dev/null +++ b/tests/other-systems/sablecc/src/NodesAspect.java @@ -0,0 +1,71 @@ +import org.sablecc.sablecc.node.*; +import org.sablecc.sablecc.analysis.Analysis; +import org.sablecc.sablecc.node.Package; // avoid name conflicts with java.lang.Package + +public aspect NodesAspect { + + pointcut bangAlt(): target(Node) && !target(Alt) && call(* *(..)); + pointcut bangAltName(): target(Node) && !target(AltName) && call(* *(..)); + pointcut bangAltNameOpt(): target(Node) && !target(AltNameOpt) && call(* *(..)); + pointcut bangAlts(): target(Node) && !target(Alts) && call(* *(..)); + pointcut bangAltsTail(): target(Node) && !target(AltsTail) && call(* *(..)); + pointcut bangAltsTails(): target(Node) && !target(AltsTails) && call(* *(..)); + pointcut bangBasic(): target(Node) && !target(Basic) && call(* *(..)); + pointcut bangBinOp(): target(Node) && !target(BinOp) && call(* *(..)); + pointcut bangConcat(): target(Node) && !target(Concat) && call(* *(..)); + pointcut bangElem(): target(Node) && !target(Elem) && call(* *(..)); + pointcut bangElemName(): target(Node) && !target(ElemName) && call(* *(..)); + pointcut bangElemNameOpt(): target(Node) && !target(ElemNameOpt) && call(* *(..)); + pointcut bangElems(): target(Node) && !target(Elems) && call(* *(..)); + pointcut bangGrammar(): target(Node) && !target(Grammar) && call(* *(..)); + pointcut bangHelperDef(): target(Node) && !target(HelperDef) && call(* *(..)); + pointcut bangHelperDefs(): target(Node) && !target(HelperDefs) && call(* *(..)); + pointcut bangHelpers(): target(Node) && !target(Helpers) && call(* *(..)); + pointcut bangHelpersOpt(): target(Node) && !target(HelpersOpt) && call(* *(..)); + pointcut bangIdList(): target(Node) && !target(IdList) && call(* *(..)); + pointcut bangIdListOpt(): target(Node) && !target(IdListOpt) && call(* *(..)); + pointcut bangIdListTail(): target(Node) && !target(IdListTail) && call(* *(..)); + pointcut bangIdListTails(): target(Node) && !target(IdListTails) && call(* *(..)); + pointcut bangIgnTokens(): target(Node) && !target(IgnTokens) && call(* *(..)); + pointcut bangIgnTokensOpt(): target(Node) && !target(IgnTokensOpt) && call(* *(..)); + pointcut bangLookAhead(): target(Node) && !target(LookAhead) && call(* *(..)); + pointcut bangLookAheadOpt(): target(Node) && !target(LookAheadOpt) && call(* *(..)); + pointcut bangPackage(): target(Node) && !target(Package) && call(* *(..)); + pointcut bangPackageOpt(): target(Node) && !target(PackageOpt) && call(* *(..)); + pointcut bangPChar(): target(Node) && !target(PChar) && call(* *(..)); + pointcut bangPkgId(): target(Node) && !target(PkgId) && call(* *(..)); + pointcut bangPkgName(): target(Node) && !target(PkgName) && call(* *(..)); + pointcut bangPkgNameOpt(): target(Node) && !target(PkgNameOpt) && call(* *(..)); + pointcut bangPkgNameTail(): target(Node) && !target(PkgNameTail) && call(* *(..)); + pointcut bangPkgNameTails(): target(Node) && !target(PkgNameTails) && call(* *(..)); + pointcut bangProd(): target(Node) && !target(Prod) && call(* *(..)); + pointcut bangProds(): target(Node) && !target(Prods) && call(* *(..)); + pointcut bangProductions(): target(Node) && !target(Productions) && call(* *(..)); + pointcut bangProductionsOpt(): target(Node) && !target(ProductionsOpt) && call(* *(..)); + pointcut bangPSet(): target(Node) && !target(PSet) && call(* *(..)); + pointcut bangRegExp(): target(Node) && !target(RegExp) && call(* *(..)); + pointcut bangRegExpTail(): target(Node) && !target(RegExpTail) && call(* *(..)); + pointcut bangRegExpTails(): target(Node) && !target(RegExpTails) && call(* *(..)); + pointcut bangSpecifier(): target(Node) && !target(Specifier) && call(* *(..)); + pointcut bangSpecifierOpt(): target(Node) && !target(SpecifierOpt) && call(* *(..)); + pointcut bangStart(): target(Node) && !target(Start) && call(* *(..)); + pointcut bangStateList(): target(Node) && !target(StateList) && call(* *(..)); + pointcut bangStateListOpt(): target(Node) && !target(StateListOpt) && call(* *(..)); + pointcut bangStateListTail(): target(Node) && !target(StateListTail) && call(* *(..)); + pointcut bangStateListTails(): target(Node) && !target(StateListTails) && call(* *(..)); + pointcut bangStates(): target(Node) && !target(States) && call(* *(..)); + pointcut bangStatesOpt(): target(Node) && !target(StatesOpt) && call(* *(..)); + pointcut bangToken(): target(Node) && !target(Token) && call(* *(..)); + pointcut bangTokenDef(): target(Node) && !target(TokenDef) && call(* *(..)); + pointcut bangTokenDefs(): target(Node) && !target(TokenDefs) && call(* *(..)); + pointcut bangTokens(): target(Node) && !target(Tokens) && call(* *(..)); + pointcut bangTokensOpt(): target(Node) && !target(TokensOpt) && call(* *(..)); + pointcut bangTransition(): target(Node) && !target(Transition) && call(* *(..)); + pointcut bangTransitionOpt(): target(Node) && !target(TransitionOpt) && call(* *(..)); + pointcut bangUnExp(): target(Node) && !target(UnExp) && call(* *(..)); + pointcut bangUnExps(): target(Node) && !target(UnExps) && call(* *(..)); + pointcut bangUnOp(): target(Node) && !target(UnOp) && call(* *(..)); + pointcut bangUnOpOpt(): target(Node) && !target(UnOpOpt) && call(* *(..)); +} + + diff --git a/tests/other-systems/sablecc/src/ParserAspect.java b/tests/other-systems/sablecc/src/ParserAspect.java new file mode 100644 index 000000000..cbb8334a5 --- /dev/null +++ b/tests/other-systems/sablecc/src/ParserAspect.java @@ -0,0 +1,18 @@ +import org.sablecc.sablecc.node.*; +import org.sablecc.sablecc.analysis.*; +import org.sablecc.sablecc.parser.*; + +public aspect ParserAspect { + + pointcut pushes(): call(void push(int,Object)) && target(Parser); + pointcut callstoSets(): call(void set*(Object)) && target(Node); + + before () : pushes() {} + void around () : pushes() { proceed(); } + + before () : callstoSets() {} + void around () : callstoSets() { proceed(); } + + after () : callstoSets() {} + after () : pushes() {} +} diff --git a/tests/other-systems/util/AroundAll.java b/tests/other-systems/util/AroundAll.java new file mode 100644 index 000000000..2b57c39fb --- /dev/null +++ b/tests/other-systems/util/AroundAll.java @@ -0,0 +1,11 @@ +aspect AroundAll { + pointcut targets(Object o): + execution(!abstract !native * *(..)) && this(o) && Pcds.withinMe(); + + Object around(Object thisObj): targets(thisObj) { + if (true) { + throw new RuntimeException("not meant to run"); + } + return proceed(thisObj); + } +} diff --git a/tests/other-systems/util/Trace.java b/tests/other-systems/util/Trace.java new file mode 100644 index 000000000..72aa89b20 --- /dev/null +++ b/tests/other-systems/util/Trace.java @@ -0,0 +1,37 @@ +import java.io.Serializable; + +abstract aspect Trace { + abstract pointcut targets(); + + /* + * toString() can throw exceptions, so we'll print + * the java.lang.Class instead. + */ + + before (): targets() { + System.out.println("entering " + thisJoinPoint); + } + after (): targets() { + System.out.println("exiting " + + thisJoinPointStaticPart); + } + + after () throwing (Throwable t): targets() { + System.out.println("throwing " + t); + } + + after () throwing (java.io.IOException ioe): targets() { + System.out.println("throwing " + ioe); + } + + after () returning (Object o): targets() { + System.out.println("returning " + (o!=null ? o.getClass() : null)); + } + + + private static int initCounter() { + return 0; + } + + //private int Serializable.counter = initCounter(); +} diff --git a/tests/other-systems/util/TraceAll.java b/tests/other-systems/util/TraceAll.java new file mode 100644 index 000000000..0c5b0e8c8 --- /dev/null +++ b/tests/other-systems/util/TraceAll.java @@ -0,0 +1,3 @@ +aspect TraceAll extends Trace { + pointcut targets(): call(!native * *(..)) && Pcds.myTarget(); +} diff --git a/tests/other-systems/util/TraceCalls.java b/tests/other-systems/util/TraceCalls.java new file mode 100644 index 000000000..9ecfc2417 --- /dev/null +++ b/tests/other-systems/util/TraceCalls.java @@ -0,0 +1,3 @@ +aspect TraceCalls extends Trace { + pointcut targets(): Pcds.withinMe() && (call(* *(..)) || call(new(..))); +} diff --git a/tests/other-systems/util/TraceMembers.java b/tests/other-systems/util/TraceMembers.java new file mode 100644 index 000000000..5f663d0c4 --- /dev/null +++ b/tests/other-systems/util/TraceMembers.java @@ -0,0 +1,3 @@ +aspect TraceMembers extends Trace { + pointcut targets(): Pcds.withinMe() && execution(!abstract !native * *(..)); +} diff --git a/tests/other-systems/util/TraceSets.java b/tests/other-systems/util/TraceSets.java new file mode 100644 index 000000000..69d1e873b --- /dev/null +++ b/tests/other-systems/util/TraceSets.java @@ -0,0 +1,3 @@ +aspect TraceSets extends Trace { + pointcut targets(): Pcds.withinMe() && set(* *..*.*); +} diff --git a/tests/product/ant-example.xml b/tests/product/ant-example.xml new file mode 100644 index 000000000..1dda5c944 --- /dev/null +++ b/tests/product/ant-example.xml @@ -0,0 +1,343 @@ +<!-- -*- Mode: SGML; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- --> +<!-- --> +<!-- This file is part of the compiler and core tools for the AspectJ(tm) --> +<!-- programming language; see http://aspectj.org --> +<!-- --> +<!-- The contents of this file are subject to the Mozilla Public License --> +<!-- Version 1.1 (the "License"); you may not use this file except in --> +<!-- compliance with the License. You may obtain a copy of the License at --> +<!-- either http://www.mozilla.org/MPL/ or http://aspectj.org/MPL/. --> +<!-- --> +<!-- Software distributed under the License is distributed on an "AS IS" basis, --> +<!-- WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License --> +<!-- for the specific language governing rights and limitations under the --> +<!-- License. --> +<!-- --> +<!-- The Original Code is AspectJ. --> +<!-- --> +<!-- The Initial Developer of the Original Code is Xerox Corporation. Portions --> +<!-- created by Xerox Corporation are Copyright (C) 1999, 2000 Xerox Corporation. --> +<!-- All Rights Reserved. --> + +<!-- todo: non-distribution license?? --> + +<!DOCTYPE build SYSTEM "build.dtd"> + +<project name="ant-example" default="test" basedir="."> + + <!-- define target init.product --> + &aspectj_initProduct; + + <!-- ========================================================================== --> + <!-- Init --> + <!-- ========================================================================== --> + <target name="init" depends="init.product" + description="caller must define jdk.tools.jar and product.dir or run from product.dir"> + <echo message="init ant-examples.xml"/> + <!-- directory produced during test install --> + <property name="ajx.base.dir" + location="${productTest.output.dir}/ajx-output"/> + <property name="ajx.expect.dir" + location="${productTest.expect.dir}/ajx"/> + <property name="noclass" + value="noclass"/> + <property name="noclass.dir" + location="${productTest.output.dir}/${noclass}"/> + <property name="aj.public.taskdef.package" + value="org.aspectj.tools.ant.taskdef"/> + <property name="taskdef.classpath" + value="${product.taskdefs.jar}${PS}${product.tools.jar}${PS}${jdk.tools.jar}"/> + </target> + + <target name="init.taskdefs" depends="init,product.taskdefs.jar,product.tools.jar"> + <!-- define taskdefs used here - requires jars, etc. --> + <taskdef name="ajc" + classname="${aj.public.taskdef.package}.Ajc" > + <classpath> + <pathelement path="${product.taskdefs.jar}"/> + <pathelement path="${product.tools.jar}"/> + <pathelement path="${jdk.tools.jar}"/> + </classpath> + </taskdef> + <taskdef name="ajdoc" + classname="${aj.public.taskdef.package}.Ajdoc"> + <classpath> + <pathelement path="${product.taskdefs.jar}"/> + <pathelement path="${product.tools.jar}"/> + <pathelement path="${jdk.tools.jar}"/> + </classpath> + </taskdef> + </target> + + + <!-- ========================================================================== --> + <!-- Clean everything in created dirs --> + <!-- ========================================================================== --> + + <target name="clean" depends="init" + description="clean output created by this script"> + <antcall target="mkdir"><param name="dir" value="${ajx.base.dir}"/> + </antcall> + <antcall target="mkdir"><param name="dir" value="${noclass.dir}"/> + </antcall> + </target> + + <target name="noclass.setup" depends="init" + description="setup no-op dummy class to invoke when test class n/a or requires gui"> + <echo file="${noclass}.java"> + public class ${noclass} { public static void main(String[]args){}} + </echo> + <mkdir dir="${noclass.dir}"/> + <delete dir="${noclass.dir}"/> + <mkdir dir="${noclass.dir}"/> + <javac srcdir="." + includes="${noclass}.java" + destdir="${noclass.dir}" + failonerror="true"/> + <delete file="${noclass}.java"/> + <echo message=" todo check file: ${noclass}.java"/> + <java classname="${noclass}" + failonerror="true" + classpath="${noclass.dir}"/> + </target> + + <!-- ========================================================================== --> + <!-- Run tests --> + <!-- ========================================================================== --> + <target name="Ajx" depends="init.taskdefs" + description="for {example}, compile {list}, doc {list}, and run {class}"> + <echo message="##### START Ajx example=${example} list=${list} class=${class}" /> + <property name="exdir" + value="${ajx.base.dir}/${example}"/> + <property name="expect.exdir" value="${ajx.expect.dir}/${example}"/> + <mkdir dir="${exdir}/classes"/> + <mkdir dir="${exdir}/output"/> + <mkdir dir="${exdir}/docs"/> + <delete dir="${exdir}/classes"/> + <delete dir="${exdir}/output"/> + <delete dir="${exdir}/docs"/> + <mkdir dir="${exdir}/classes"/> + <mkdir dir="${exdir}/output"/> + <mkdir dir="${exdir}/docs"/> + + <echo message="##################### Ajx ajc ${list}"/> + <ajc + destdir="${exdir}/classes" + argfile="${list}" + failonerror="false" > + <classpath> + <pathelement location="${product.rt.jar}" /> + <pathelement location="${jdk.tools.jar}" /> <!-- to compile ajdoc --> + </classpath> + </ajc> + <!-- copying resources, etc. as javac does todo weak --> + <copy todir="${exdir}/classes"> + <fileset dir="${srcDir}" + includes="**/*.properties,**/*.gif,**/*.jpg,**/*.props" /> + </copy> + + <echo message="##################### Ajx ajdoc ${list} "/> + <ajdoc fork="yes" + private="yes" + verbose="yes" + sourcepath="${product.examples.dir}" + destdir="${exdir}/docs" + argfile="${list}" + classpath="${product.rt.jar}${PS}${jdk.tools.jar}" + failonerror="false" > + <!-- internalclasspath + internalclasspath="${taskdef.classpath}" + is required now - but still not producing docs + <classpath> + <pathelement location="${product.rt.jar}" /> + </classpath> + --> + </ajdoc> + + <echo message="##################### Ajx run ${class} START - output in ${exdir}/output/out.txt"/> + <java classname="${class}" + output="${exdir}/output/out.txt" + fork="yes" + failonerror="false" > + <!-- fork because ajc does a System.exit --> + <classpath> + <pathelement location="${exdir}/classes"/> + <pathelement location="${product.rt.jar}"/> + <pathelement location="${noclass.dir}"/> + <pathelement location="${jdk.tools.jar}" /> <!-- to run ajdoc and old ajc --> + </classpath> + </java> + <echo message="##################### Ajx run ${class} STOP"/> + <echo message="##################### Ajx run ${class} check output START "/> + <comparefiles rhsFile="${exdir}/output/out.txt" + lhsFile="${expect.exdir}/output/out.txt"/> + <echo message="##################### Ajx run ${class} check output STOP "/> + <echo message="##### FINISH Ajx example=${example} list=${list} class=${class}" /> + </target> + + <target name="test" depends="test.examples,test.sources"/> + + <target name="test.sources" depends="init,noclass.setup,productTest.expect.dir" + description="compile, doc, and run the tools-source targets using taskdefs" > + <property name="tools.src.dir" + location="${product.source.tools.dir}/src"/> + <antcall target="Ajx"> + <param name="list" value="${tools.src.dir}/runtime.lst"/> + <param name="example" value="source-tools-runtime"/> + <param name="class" value="${noclass}"/> + <param name="srcDir" value="${tools.src.dir}"/> + </antcall> + <antcall target="Ajx"> + <param name="list" value="${tools.src.dir}/ajc.lst"/> + <param name="example" value="source-tools-ajc"/> + <param name="class" value="org.aspectj.tools.ajc.Main"/> + <param name="srcDir" value="${tools.src.dir}"/> + <!-- ajc does a System.exit --> + </antcall> + <antcall target="Ajx"> + <param name="list" value="${tools.src.dir}/tools.lst"/> + <param name="example" value="source-tools-all"/> + <param name="class" value="${noclass}"/> + <param name="srcDir" value="${tools.src.dir}"/> + </antcall> + <antcall target="Ajx"> + <param name="list" value="${tools.src.dir}/ajbrowser.lst"/> + <param name="example" value="source-tools-ajbrowser"/> + <param name="class" value="${noclass}"/> + <param name="srcDir" value="${tools.src.dir}"/> + </antcall> + <antcall target="Ajx"> + <param name="list" value="${tools.src.dir}/ajdoc.lst"/> + <param name="example" value="source-tools-ajdoc"/> + <param name="class" value="org.aspectj.tools.ajdoc.Main"/> + <param name="srcDir" value="${tools.src.dir}"/> + </antcall> + </target> + + <target name="test.examples" depends="init,noclass.setup,productTest.expect.dir" + description="compile, doc, and run the valid examples using taskdefs" > + <antcall target="Ajx"> + <param name="list" value="bean/files.lst"/> + <param name="example" value="bean"/> + <param name="class" value="bean.Demo"/> + <param name="srcDir" value="."/> + </antcall> + <antcall target="Ajx"> + <param name="list" value="coordination/lib.lst"/> + <param name="example" value="coordination"/> + <param name="class" value="${noclass}"/> + <param name="srcDir" value="."/> + </antcall> + <antcall target="Ajx"> + <param name="list" value="introduction/files.lst"/> + <param name="example" value="introduction-point"/> + <param name="class" value="introduction.Point"/> + <param name="srcDir" value="."/> + </antcall> + <antcall target="Ajx"> + <param name="list" value="introduction/files.lst"/> + <param name="example" value="introduction-cloneablepoint"/> + <param name="class" value="introduction.CloneablePoint"/> + <param name="srcDir" value="."/> + </antcall> + <antcall target="Ajx"> + <param name="list" value="introduction/files.lst"/> + <param name="example" value="introduction-comparablepoint"/> + <param name="class" value="introduction.ComparablePoint"/> + <param name="srcDir" value="."/> + </antcall> + <antcall target="Ajx"> + <param name="list" value="introduction/files.lst"/> + <param name="example" value="introduction-hashablepoint"/> + <param name="class" value="introduction.HashablePoint"/> + <param name="srcDir" value="."/> + </antcall> + <antcall target="Ajx"> + <param name="list" value="observer/files.lst"/> + <param name="example" value="observer"/> + <param name="class" value="${noclass}"/> + <param name="srcDir" value="."/> + <!-- uses gui: param name="class" value="observer.Demo" --> + </antcall> + <antcall target="Ajx"> + <param name="list" value="spacewar/debug.lst"/> + <param name="example" value="spacewar-debug"/> + <param name="class" value="${noclass}"/> + <param name="srcDir" value="."/> + </antcall> + <antcall target="Ajx"> + <param name="list" value="spacewar/demo.lst"/> + <param name="example" value="spacewar-demo"/> + <param name="class" value="${noclass}"/> + <param name="srcDir" value="."/> + </antcall> + <antcall target="Ajx"> + <param name="list" value="telecom/basic.lst"/> + <param name="example" value="telecom-basic"/> + <param name="class" value="telecom.BasicSimulation"/> + <param name="srcDir" value="."/> + </antcall> + <antcall target="Ajx"> + <param name="list" value="telecom/billing.lst"/> + <param name="example" value="telecom-billing"/> + <param name="class" value="telecom.BillingSimulation"/> + <param name="srcDir" value="."/> + </antcall> + <antcall target="Ajx"> + <param name="list" value="telecom/timing.lst"/> + <param name="example" value="telecom-timing"/> + <param name="class" value="telecom.TimingSimulation"/> + <param name="srcDir" value="."/> + </antcall> + <!-- timeserver not in product - todo check + <antcall target="Ajx"> + <param name="list" value="timeserver/abort.lst"/> + <param name="example" value="timeserver-abort"/> + <param name="class" value="${noclass}"/> + <param name="srcDir" value="."/> + </antcall> + <antcall target="Ajx"> + <param name="list" value="timeserver/retry.lst"/> + <param name="example" value="timeserver-retry"/> + <param name="class" value="${noclass}"/> + <param name="srcDir" value="."/> + </antcall> + --> + <antcall target="Ajx"> + <param name="list" value="tjp/files.lst"/> + <param name="example" value="tjp"/> + <param name="class" value="tjp.Demo"/> + <param name="srcDir" value="."/> + </antcall> + <antcall target="Ajx"> + <param name="list" value="tracing/notrace.lst"/> + <param name="example" value="tracing-none"/> + <param name="class" value="tracing.ExampleMain"/> + <param name="srcDir" value="."/> + </antcall> + <antcall target="Ajx"> + <param name="list" value="tracing/tracelib.lst"/> + <param name="example" value="tracing-ExampleMain"/> + <param name="class" value="tracing.ExampleMain"/> + <param name="srcDir" value="."/> + </antcall> + <antcall target="Ajx"> + <param name="list" value="tracing/tracev1.lst"/> + <param name="example" value="tracing-v1"/> + <param name="class" value="tracing.ExampleMain"/> + <param name="srcDir" value="."/> + </antcall> + <antcall target="Ajx"> + <param name="list" value="tracing/tracev2.lst"/> + <param name="example" value="tracing-v2"/> + <param name="class" value="tracing.ExampleMain"/> + <param name="srcDir" value="."/> + </antcall> + <antcall target="Ajx"> + <param name="list" value="tracing/tracev3.lst"/> + <param name="example" value="tracing-v3"/> + <param name="class" value="tracing.ExampleMain"/> + <param name="srcDir" value="."/> + </antcall> + </target> +</project> diff --git a/tests/product/build.dtd b/tests/product/build.dtd new file mode 100644 index 000000000..da92a771e --- /dev/null +++ b/tests/product/build.dtd @@ -0,0 +1,2 @@ +<!-- defines target init.product -->
+<!ENTITY aspectj_initProduct SYSTEM "product-properties.xml">
diff --git a/tests/product/expect.zip b/tests/product/expect.zip Binary files differnew file mode 100644 index 000000000..3ba3dd1f0 --- /dev/null +++ b/tests/product/expect.zip diff --git a/tests/product/index.txt b/tests/product/index.txt new file mode 100644 index 000000000..a723531cc --- /dev/null +++ b/tests/product/index.txt @@ -0,0 +1,59 @@ + +This directory is for "product" tests, which validate the product as delivered +to users, i.e., as installed from an installer in relevant combinations. This +type of testing is also called "system" test, or (less correctly) "integration" +testing. It may make use of unit-test drivers, etc.; the difference is not +in the test tools or techniques, but in the scope of the validation. However, +validation typically builds on other testing; e.g., if the compiler has been +thoroughly tested, then it may suffice in product testing to validate that +the compiler binaries are the same and that the examples compile using the +scripts which use the compiler binaries. + +The ant script aspectj/test-product.xml drives the process by installing the +product, copying this entire directory to the target dir, and invoking +ant product-test.xml. Currently, that script in turn does two things: + - executes the ajc.bat script to compile the telecom example, and run it + - invokes ant ant-example.xml to compile/doc/run all examples using + the ant taskdefs. +In both cases the results are not validated except that the operations completed. + +Setup of the installation directory (aka product or target directory): + + ## dir/file ## ## ant source ## ## variable in ant source ## + {target.dir} test-product.xml ${target.dir} + aspectj-ant test-product.xml + aspectj-ant.jar aspectj-ant installer ${taskdefs.jar} + bin tools installer ${bin.dir} + doc docs installer ${lib.dir} + examples docs installer ${examples.dir} + lib tools installer ${lib.dir} + aspectjtools.jar tools installer ${aspectjtools.jar} + aspectjrt.jar tools installer ${aspectjrt.jar} + product product-test.xml ${test.source.dir} + product-test-output product-test.xml ${test.dest.dir} + ajx-output ant-examples.xml ${ajx.base.dir} + {example}/classes ant-examples.xml + {example}/docs ant-examples.xml + {example}/output ant-examples.xml + out.txt ant-examples.xml + +---------------------------------------------------- to run tests +cd aspectj +## either this (which builds the ajde and source files, too) ... +build/bin/ant.sh -f build.xml download.files +## or this (which only builds what's needed)... +build/bin/ant.sh -f build-tools.xml download.files +build/bin/ant.sh -f build-docs.xml download.files +build/bin/ant.sh -f build-ant-tasks.xml download.files +## then run the tests +build/bin/ant.sh -f test-product.xml +## and inspect the results +cd ../aj-build/temp/aspectj{version}/product-test-output/ajx-output +... + +---------------------------------------------------- todo +- include all download.files packages + - need to test installer text interface for ide installer jars +- file differencer on all packages after install +- source-build tests +- file differencer as regression test for emitted output diff --git a/tests/product/makeTestBat.sh b/tests/product/makeTestBat.sh new file mode 100644 index 000000000..8f94663ae --- /dev/null +++ b/tests/product/makeTestBat.sh @@ -0,0 +1,124 @@ +#!/bin/sh
+# kludge to generate a bat script using ajc.bat, ajdoc.bat, and ajdb.bat
+# set the Java command for the target platform,
+# and run the resulting script in the aspectj directory
+# @process-test tools makeTestBat.sh # generate .bat script to test examples
+
+JAVA='C:\home\apps\jdk13\bin\java'
+errMssg() {
+ [ -n "$1" ] && echo "## $0 - $1"
+ [ -n "$2" ] && exit "$2"
+}
+
+javaCommand() {
+ # grep 'main(' */*.java | sed 's|\.java.*||;s|\/|.|;s|\(.*\)| \1 ) m=\1;;| ' | sort -u
+ m=""
+ case "$1" in
+ # todo: need to distinguish multiple entrypoints per compile?
+ bean\\files ) m=bean.DeclareError;;
+ bean\\files ) m=bean.Demo;;
+ introduction\\files ) m=introduction.CloneablePoint;;
+ introduction\\files ) m=introduction.ComparablePoint;;
+ introduction\\files ) m=introduction.HashablePoint;;
+ introduction\\files ) m=introduction.Point;;
+ observer\\files ) m=observer.Demo;;
+ spacewar\\debug ) m=spacewar.Game;;
+ spacewar\\demo ) m=spacewar.Game;;
+ telecom\\basic ) m=telecom.BasicSimulation;;
+ telecom\\billing ) m=telecom.BillingSimulation;;
+ telecom\\timing ) m=telecom.TimingSimulation;;
+ tjp\\files ) m=tjp.Demo;;
+ tracing\\notrace ) m=tracing.ExampleMain;;
+ tracing\\tracelib ) m=tracing.ExampleMain;;
+ tracing\\tracev1 ) m=tracing.ExampleMain;;
+ tracing\\tracev2 ) m=tracing.ExampleMain;;
+ tracing\\tracev3 ) m=tracing.ExampleMain;;
+ * ) echo "rem no java command yet for $1" ;;
+ esac
+ if [ -n "$m" ] ; then
+ case "$2" in
+ ajdb ) echo "call ..\\bin\\ajdb.bat -classpath \"$1;..\\lib\\aspectjrt.jar\" $m < ajdbInput" ;;
+ java ) echo "$JAVA -classpath \"$1;..\\lib\\aspectjrt.jar\" $m ";;
+ * ) echo "rem unrecognized request $2 for $1"
+ esac
+ fi
+}
+getAjdocPackages() {
+ m=""
+ case "$1" in
+ bean\\files ) m="bean ";;
+ introduction\\files ) m="introduction ";;
+ coordination\\lib ) m="coordination ";;
+ observer\\files ) m="observer ";;
+ spacewar\\debug ) m="spacewar coordination";;
+ spacewar\\demo ) m="spacewar ";;
+ telecom\\basic ) m="telecom ";;
+ telecom\\billing ) m="telecom ";;
+ telecom\\timing ) m="telecom ";;
+ tjp\\files ) m="tjp ";;
+ tracing\\notrace ) m="tracing ";;
+ tracing\\tracelib ) m="tracing tracing.lib";;
+ tracing\\tracev1 ) m="tracing tracing.version1";;
+ tracing\\tracev2 ) m="tracing tracing.version2";;
+ tracing\\tracev3 ) m="tracing tracing.version3";;
+ * ) echo "rem no ajdoc command yet for $1" ;;
+ esac
+ echo "$m"
+}
+
+example() {
+ docPacks=$(getAjdocPackages "$1")
+ cat<<EOF
+echo "###################### running $1"
+if exist $1 rmdir /S /Q $1
+if not exist $1 mkdir $1
+call ..\\bin\\ajc.bat -d $1 -classpath ..\\lib\\aspectjrt.jar -argfile $1.lst > $1\\ajc.txt 2>&1
+@echo on
+$(javaCommand $1 java) > $1\\java.txt 2>&1
+@echo on
+$(javaCommand $1 ajdb) > $1\\ajdb.txt 2>&1
+@echo on
+call ..\\bin\\ajdoc.bat -d $1 -classpath ..\\lib\\aspectjrt.jar -sourcepath . $docPacks > $1\\ajdoc.txt 2>&1
+EOF
+}
+
+unixToDOS() {
+ sed 's|
||' # add ^M here (C-v C-m)
+}
+
+allListFiles() {
+cat<<EOF
+@bean\files.lst
+@spacewar\debug.lst
+@coordination\lib.lst
+@introduction\files.lst
+@observer\files.lst
+@telecom\timing.lst
+@spacewar\debug.lst
+@tjp\files.lst
+@tracing\tracev3.lst
+EOF
+}
+[ -f "lib/aspectjrt.jar" ] || errMssg "rt" 3
+[ -f "examples/bean/files.lst" ] || errMssg "eg" 3
+
+cd examples
+allListFiles | unixToDOS > examples.lst
+echo "exit" > ajdbInput
+echo "cd examples"
+echo "if not exist ajworkingdir mkdir ajworkingdir"
+for i in $(ls */*.lst | sed 's|\.lst||;s|\/|\\|') ; do
+ example $i | sed 's|$||' # add ^M here (C-v C-m)
+done
+
+## now do all together
+
+dir=all
+packages="bean coordination introduction spacewar telecom telecom.timing tracing tracing.lib tracing.version3"
+ cat<<EOF
+echo "###################### compile all "
+if exist $dir rmdir /S /Q $dir
+if not exist $dir mkdir $dir
+call ..\\bin\\ajc.bat -d $dir -classpath ..\\lib\\aspectjrt.jar @examples.lst > $dir\\ajc.txt 2>&1
+call ..\\bin\\ajdoc.bat -d $dir -classpath ..\\lib\\aspectjrt.jar -sourcepath . $packages > $dir\\ajdoc.txt 2>&1
+EOF
diff --git a/tests/product/new-test-taskdefs.xml b/tests/product/new-test-taskdefs.xml new file mode 100644 index 000000000..85da1ede3 --- /dev/null +++ b/tests/product/new-test-taskdefs.xml @@ -0,0 +1,561 @@ +<!-- -*- Mode: SGML; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- --> +<!-- --> +<!-- This file is part of the compiler and core tools for the AspectJ(tm) --> +<!-- programming language; see http://aspectj.org --> +<!-- --> +<!-- The contents of this file are subject to the Mozilla Public License --> +<!-- Version 1.1 (the "License"); you may not use this file except in --> +<!-- compliance with the License. You may obtain a copy of the License at --> +<!-- either http://www.mozilla.org/MPL/ or http://aspectj.org/MPL/. --> +<!-- --> +<!-- Software distributed under the License is distributed on an "AS IS" basis, --> +<!-- WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License --> +<!-- for the specific language governing rights and limitations under the --> +<!-- License. --> +<!-- --> +<!-- The Original Code is AspectJ. --> +<!-- --> +<!-- The Initial Developer of the Original Code is Xerox Corporation. Portions --> +<!-- created by Xerox Corporation are Copyright (C) 1999, 2000 Xerox Corporation. --> +<!-- All Rights Reserved. --> + +<!-- ============================================================================== --> +<!-- To do a build, invoke build/bin/ant.[sh|bat] after defining JDKDIR. --> +<!-- To customize properties, edit local.properties.examples as local.properties. --> +<!-- ============================================================================== --> +<!-- todo: non-distribution license?? --> + +<!-- standalone script to be run in examples dir --> +<!-- currently relies on deployed taskdefs to ant.home, instead of --> +<!-- using taskdef classpaths (aka safe install) --> + +<project name="test-taskdefs" default="test" basedir=".."> + + <!-- ========================================================================== --> + <!-- Init --> + <!-- ========================================================================== --> + <target name="init" + description="caller must define jdk.tools.jar and product.dir or run from product.examples.dir"> + <echo message="init test-taskdefs.xml"/> + + <property name="PS" value="${path.separator}"/> + + <!-- define product.dir or run from it --> + <property name="product.dir" + location="${basedir}"/> + + <!-- define local.deploy.dir to get different tools and taskdefs --> + <property name="local.deploy.dir" + location="${product.dir}"/> + <!-- expected from install --> + <property name="ex.dir" + location="${product.dir}/examples"/> + <property name="product.examples.dir" + location="${ex.dir}"/> + <!-- created after install --> + <property name="test.dir" + location="${product.dir}/test"/> + <property name="expect.file" + location="${test.dir}/expect.out"/> + <property name="actual.file" + location="${test.dir}/actual.out"/> + <property name="empty.dir" + location="${test.dir}/emptydir"/> + <property name="classes.dir" + location="${test.dir}/classes"/> + <property name="expected.classes.dir" + location="${test.dir}/expectedClasses"/> + <property name="working.dir" + location="${product.dir}/workingdir"/> + <property name="expected.working.dir" + location="${test.dir}/expectedWorkingdir"/> + <mkdir dir="${empty.dir}"/> + <mkdir dir="${classes.dir}"/> + <mkdir dir="${expected.classes.dir}"/> + <mkdir dir="${working.dir}"/> + <mkdir dir="${expected.working.dir}"/> + + + <property name="build-tools.jar" + location="${ant.home}/lib/build-tools.jar"/> + + <property name="safe.classpath" value="yes"/> + + <!-- unsafe classpaths in ant/lib --> + <property name="aj-testing.jar" + location="${ant.home}/lib/aj-testing.jar"/> + <property name="aj-testing-taskdefs.jar" + location="${ant.home}/lib/aj-testing-taskdefs.jar"/> + <property name="aspectj-ant.jar" + location="${ant.home}/lib/aspectj-ant.jar"/> + <property name="aspectjtools.jar" + location="${ant.home}/lib/aspectjtools.jar"/> + <property name="aspectjrt.jar" + location="${product.dir}/lib/aspectjrt.jar"/> + + <!-- safe classpaths in ant/lib/optional --> + <property name="safe.aj-testing.jar" + location="${ant.home}/lib/optional/aj-testing.jar"/> + <property name="safe.aj-testing-taskdefs.jar" + location="${ant.home}/lib/optional/aj-testing-taskdefs.jar"/> + <property name="safe.aspectj-ant.jar" + location="${ant.home}/lib/optional/aspectj-ant.jar"/> + <property name="safe.aspectjtools.jar" + location="${ant.home}/lib/optional/aspectjtools.jar"/> + <property name="safe.aspectjrt.jar" + location="${ant.home}/lib/optional/aspectjrt.jar"/> + + <available file="${build-tools.jar}" + property="build-tools.jar.available"/> + + <available file="${aspectjtools.jar}" + property="aspectjtools.jar.available"/> + <available file="${aspectjrt.jar}" + property="aspectjrt.jar.available"/> + <available file="${aspectj-ant.jar}" + property="aspectj-ant.jar.available"/> + <available file="${aj-testing.jar}" + property="aj-testing.jar.available"/> + <available file="${aj-testing-taskdefs.jar}" + property="aj-testing-taskdefs.jar.available"/> + + <available file="${safe.aspectjtools.jar}" + property="safe.aspectjtools.jar.available"/> + <available file="${safe.aspectjrt.jar}" + property="safe.aspectjrt.jar.available"/> + <available file="${safe.aspectj-ant.jar}" + property="safe.aspectj-ant.jar.available"/> + <available file="${safe.aj-testing.jar}" + property="safe.aj-testing.jar.available"/> + <available file="${safe.aj-testing-taskdefs.jar}" + property="safe.aj-testing-taskdefs.jar.available"/> + + <property name="run.classpath" + location="${classes.dir}${PS}${aspectjrt.jar}"/> + <property name="simple.run.classpath" + location="${product.examples.dir}${PS}${aspectjrt.jar}"/> + + <property name="aj.public.taskdef.package" + value="org.aspectj.tools.ant.taskdefs"/> + + </target> + + <target name="setup.taskdef.classpath" + depends="setup.taskdef.classpath.unsafe,setup.taskdef.classpath.safe" /> + + <target name="setup.taskdef.classpath.safe" if="safe.classpath" > + <property name="safe.classpath" value="yes"/> + <property name="use.safe.classpath" value="yes"/> + <property name="use.fork" value="${use.safe.classpath}"/> + </target> + <target name="setup.taskdef.classpath.unsafe" unless="safe.classpath" > + <property name="use.safe.classpath" value="no"/> + <property name="use.fork" value="${use.safe.classpath}"/> + </target> + + <target name="init.taskdefs" + depends="setup.taskdef.classpath,init.taskdefs.safe,init.taskdefs.unsafe" /> + + <target name="init.taskdefs.unsafe" + depends="init,setup.taskdef.classpath" + unless="safe.classpath" + description="initialize taskdefs relying on ant.home/lib" > + <antcall target="unsafe.jars.available"/> + <taskdef name="ajc" + classname="${aj.public.taskdef.package}.Ajc" /> + <taskdef name="ajdoc" + classname="${aj.public.taskdef.package}.Ajdoc"/> + <taskdef name="comparefiles" + classname="org.aspectj.testing.taskdefs.CompareFiles"/> + </target> + + <target name="init.taskdefs.safe" + depends="init,setup.taskdef.classpath" + if="safe.classpath" + description="initialize taskdefs without ant.home/lib" > + <antcall target="safe.jars.available"/> + <taskdef name="ajc" + classname="${aj.public.taskdef.package}.Ajc" > + <classpath> + <pathelement path="${safe.aspectjtools.jar}"/> + <pathelement path="${safe.aspectj-ant.jar}"/> + </classpath> + </taskdef> + <taskdef name="ajdoc" + classname="${aj.public.taskdef.package}.Ajdoc" > + <classpath> + <pathelement path="${safe.aspectjtools.jar}"/> + <pathelement path="${safe.aspectj-ant.jar}"/> + </classpath> + </taskdef> + <taskdef name="comparefiles" + classname="org.aspectj.testing.taskdefs.CompareFiles"> + <classpath> + <pathelement path="${safe.aj-testing.jar}"/> + <pathelement path="${safe.aj-testing-taskdefs.jar}"/> + </classpath> + </taskdef> + </target> + + + <!-- --> + <target name="safe.jars.available" + depends="safe.aspectjtools.jar.available,safe.aspectj-ant.jar.available, + safe.aj-testing.jar.available,safe.aj-testing-taskdefs.jar.available,"/> + + <target name="unsafe.jars.available" + depends="aspectjtools.jar.available,aspectj-ant.jar.available, + aj-testing.jar.available,aj-testing-taskdefs.jar.available,"/> + + <target name="build-tools.jar.available" depends="init" + unless="build-tools.jar.available" > + <fail message="expecting build-tools.jar at ${build-tools.jar}"/> + </target> + <target name="aj-testing.jar.available" depends="init" + unless="aj-testing.jar.available" > + <fail message="expecting aj-testing.jar at ${aj-testing.jar}"/> + </target> + <target name="aj-testing-taskdefs.jar.available" depends="init" + unless="aj-testing-taskdefs.jar.available" > + <fail message="expecting aj-testing-taskdefs.jar at ${aj-testing-taskdefs.jar}"/> + </target> + <target name="aspectjtools.jar.available" depends="init" + unless="aspectjtools.jar.available" > + <fail message="expecting aspectjtools.jar at ${aspectjtools.jar}"/> + </target> + <target name="aspectj-ant.jar.available" depends="init" + unless="aspectj-ant.jar.available" > + <fail message="expecting aspectj-ant.jar at ${aspectj-ant.jar}"/> + </target> + + <target name="safe.aj-testing.jar.available" depends="init" + unless="safe.aj-testing.jar.available" > + <fail message="expecting safe.aj-testing.jar at ${safe.aj-testing.jar}"/> + </target> + <target name="safe.aj-testing-taskdefs.jar.available" depends="init" + unless="safe.aj-testing-taskdefs.jar.available" > + <fail message="expecting safe.aj-testing-taskdefs.jar at ${safe.aj-testing-taskdefs.jar}"/> + </target> + <target name="safe.aspectjtools.jar.available" depends="init" + unless="safe.aspectjtools.jar.available" > + <fail message="expecting safe.aspectjtools.jar at ${safe.aspectjtools.jar}"/> + </target> + <target name="safe.aspectj-ant.jar.available" depends="init" + unless="safe.aspectj-ant.jar.available" > + <fail message="expecting safe.aspectj-ant.jar at ${safe.aspectj-ant.jar}"/> + </target> + + <target name="clean" depends="init" + description="todo clean output created by this script"> + </target> + + <target name="test" depends="test.ajc,test.ajdoc"/> + + <target name="test.ajdoc" depends="init,init.taskdefs" + description="run variants of ajdoc taskdef on bean, other examples"> + + <mkdir dir="${expected.classes.dir}"/> + <delete quiet="on" dir="${expected.classes.dir}"/> + <mkdir dir="${expected.classes.dir}"/> + <mkdir dir="${classes.dir}"/> + <delete quiet="on" dir="${classes.dir}"/> + <mkdir dir="${classes.dir}"/> + <antcall target="cleanajc"/> + + <echo message="## ajdoc setup classes dir" /> + <ajdoc classpath="${aspectjrt.jar}" destdir="${expected.classes.dir}" + srcdir="${ex.dir}/bean" packagenames="bean" + argfile="${ex.dir}/bean/files.lst" + private="on" /> + + <echo message="## ajdoc @testcase same as setup" /> + <antcall target="cleanajc"/> + <ajdoc classpath="${aspectjrt.jar}" destdir="${classes.dir}" + srcdir="${ex.dir}/bean" packagenames="bean" + argfile="${ex.dir}/bean/files.lst" + private="on" /> + <antcall target="verifyAndCleanup.ajdoc"/> + + <echo message="## ajdoc @testcase same as setup, with -standard doclet" /> + <antcall target="cleanajc"/> + <ajdoc classpath="${aspectjrt.jar}" destdir="${classes.dir}" + srcdir="${ex.dir}/bean" packagenames="bean" + argfile="${ex.dir}/bean/files.lst" + private="on" standard="on"/> + <antcall target="verifyAndCleanup.ajdoc"/> + + <echo message="## ajdoc @testcase srcdir with include argument" /> + <ajdoc classpath="${aspectjrt.jar}" destdir="${classes.dir}" + srcdir="${ex.dir}/bean" includes="*.java" + private="on" /> + <antcall target="verifyAndCleanup.ajdoc"/> + + <echo message="## ajdoc @testcase srcdir with nested include argument" /> + <ajdoc classpath="${aspectjrt.jar}" destdir="${classes.dir}" + private="on" > + <sourcepath path="${ex.dir}/bean"/> + <include name="*.java"/> + </ajdoc> + <antcall target="verifyAndCleanup.ajdoc"/> + + <echo message="## ajdoc @testcase argfile only with nested classpath" /> + <ajdoc destdir="${classes.dir}" + argfile="${ex.dir}/bean/files.lst" + private="on" > + <classpath> <pathelement path="${aspectjrt.jar}"/> </classpath> + </ajdoc> + <antcall target="verifyAndCleanup.ajdoc"/> + +<!-- todo ignoring include ajdoc cases until fixed + <echo message="## ajdoc need @testcase nested src with kitchen sink" /> + <echo message="## ajdoc @testcase argfile todo " /> + <echo message="## ajdoc @testcase Vincent Massol bug" /> + <ajdoc destdir="${classes.dir}" + srcdir="${ex.dir}/bean" + private="on" > + <include name="*.java"/> + <include name="**.java"/> + <classpath> <pathelement path="${aspectjrt.jar}"/> </classpath> + </ajdoc> + <antcall target="verifyAndCleanup.ajdoc"/> + +todo bug ajdoc taskdef not handling any includes or nested src or +includes argument +--> + <!-- todo: version bootclasspath, extdirs + Xporting="on" # todo: after Jim updates compiler for Xporting + todo: nested src n/a + --> + + </target> + + <!-- to use safe classpaths, must fork --> + <target name="test.ajc" depends="init,init.taskdefs" + description="run variants of ajc taskdef on bean, other examples"> + + <echo message="## setup expected working dir, classes dir, and output file" /> + <antcall target="cleanajc"/> + <ajc srcdir="${ex.dir}/bean" classpath="${aspectjrt.jar}" + destDir="${expected.classes.dir}" + usejavac="yes" fork="${use.fork}" + workingdir="${expected.working.dir}"/> + <java classname="bean.Demo" + classpath="${expected.classes.dir}${PS}${aspectjrt.jar}" + dir="${ex.dir}" fork="yes" + output="${expect.file}"/> + + <echo message="## @testcase simple srcdir example" /> + <antcall target="cleanajc"/> + <ajc srcdir="${ex.dir}/bean" fork="${use.fork}" classpath="${aspectjrt.jar}" /> + <echo message="## simple.run.classpath: ${simple.run.classpath} " /> + <java classname="bean.Demo" + classpath="${simple.run.classpath}" + dir="${ex.dir}" fork="yes" + output="${actual.file}"/> + <antcall target="cleanajc"/> + + <echo message="## @testcase srcdir with include argument" /> + <ajc srcdir="${ex.dir}/bean" fork="${use.fork}" classpath="${aspectjrt.jar}" includes="*.java"/> + <java classname="bean.Demo" + classpath="${simple.run.classpath}" + dir="${ex.dir}" fork="yes" + output="${actual.file}"/> + <antcall target="verifyAndCleanup.noworkingdir.noclassesdir"/> + + <echo message="## @testcase srcdir with destDir and working workingdir argument" /> + <ajc srcdir="${ex.dir}/bean" fork="${use.fork}" classpath="${aspectjrt.jar}" + destDir="${classes.dir}" + usejavac="yes" + workingdir="${working.dir}"/> + <java classname="bean.Demo" + classpath="${run.classpath}" + dir="${ex.dir}" fork="yes" + output="${actual.file}"/> + <antcall target="verifyAndCleanup.workingdir.classesdir"/> + + <echo message="## @testcase simple srcdir with nested include and nested classpath" /> + <ajc fork="${use.fork}" srcdir="${ex.dir}/bean"> + <include name="**.java"/> + <classpath> <pathelement path="${aspectjrt.jar}"/> </classpath> + </ajc> + <java classname="bean.Demo" + classpath="${simple.run.classpath}" + dir="${ex.dir}" fork="yes" + output="${actual.file}"/> + <antcall target="verifyAndCleanup.noworkingdir.noclassesdir"/> + + <echo message="## @testcase nested src with kitchen sink" /> + <antcall target="cleanajc"/> + <ajc fork="${use.fork}" + destDir="${classes.dir}" + workingdir="${working.dir}" + usejavac="on" + preprocess="no" + verbose="on" + deprecation="on" + optimize="on" + encoding="encodingIgnored" + target="targetIgnored" + depend="dependIgnored" + includeantruntime="includeantruntimeIgnored" + includejavaruntime="includejavaruntimeIgnored" + failonerror="on" + + nocomments="on" + nosymbols="on" + emacssym="on" + strict="on" + > + <src path="${ex.dir}/bean"/> + <include name="**.java"/> + <classpath> <pathelement path="${aspectjrt.jar}"/> </classpath> + </ajc> + <java classname="bean.Demo" + classpath="${run.classpath}" + dir="${ex.dir}" fork="yes" + output="${actual.file}"/> + <antcall target="verifyAndCleanup.workingdir.classesdir"/> + + <echo message="## @testcase srcdir in preprocess mode" /> + <ajc srcdir="${ex.dir}/bean" classpath="${aspectjrt.jar}" + lenient="on" fork="${use.fork}" + workingdir="${working.dir}" usejavac="on" preprocess="yes"/> + <antcall target="verifyAndCleanup.workingdir.noclassesdir.nooutput"/> + + <echo message="## @testcase argfile in preprocess mode" /> + <ajc argfile="${ex.dir}/bean/files.lst" classpath="${aspectjrt.jar}" + workingdir="${working.dir}" fork="${use.fork}" usejavac="on" preprocess="yes"/> + <antcall target="verifyAndCleanup.workingdir.noclassesdir.nooutput"/> + + <echo message="## @testcase argfile in normal mode" /> + <ajc argfile="${ex.dir}/bean/files.lst" classpath="${aspectjrt.jar}" + destdir="${classes.dir}" fork="${use.fork}" usejavac="off" preprocess="no" verbose="yes"/> + <java classname="bean.Demo" + classpath="${run.classpath}" + dir="${ex.dir}" fork="yes" + output="${actual.file}"/> + <antcall target="verifyAndCleanup.noworkingdir.classesdir"/> + + <echo message="## @testcase multiple argfile todo restore" /> + <ajc argfiles="${ex.dir}/bean/files.lst,${ex.dir}/introduction/files.lst" + classpath="${aspectjrt.jar}" fork="${use.fork}" destdir="${classes.dir}" > + </ajc> + + <java classname="bean.Demo" + classpath="${run.classpath}" + dir="${ex.dir}" fork="${use.fork}" + output="${actual.file}"/> + <copy todir="${expected.classes.dir}" > + <fileset dir="${classes.dir}" includes="**.class" /> + </copy> + <antcall target="cleanajc"/> <!-- too many classes --> + + <echo message="## @testcase Vincent Massol bug" /> + <ajc classpath="${aspectjrt.jar}" fork="${use.fork}" + workingdir="${working.dir}" preprocess="yes" > + <src path="${ex.dir}/bean"/> + <src path="${ex.dir}/introduction"/> + <include name="*.java"/> + <include name="**.java"/> + </ajc> + <antcall target="verifyAndCleanup.workingdir.noclassesdir.nooutput"/> + + <echo message="## @testcase warning when no source files specified but have srcdir # " /> + <ajc srcdir="${ex.dir}/bean" fork="${use.fork}" classpath="${aspectjrt.jar}" /> + <antcall target="cleanajc"/> + + <!-- @testcase -preprocess not supported --> + <echo message="## @testcase -preprocess srcdir no destDir, post-javac compile (-preprocess ignored) # " /> + <mkdir dir="workingdir" /> <!-- todo: failing to create workingdir from taskdef --> + <ajc srcdir="${ex.dir}/bean" fork="${use.fork}" includes="**.java" classpath="${aspectjrt.jar}" + usejavac="no" preprocess="yes"/> + <javac srcdir="workingdir" + destDir="${classes.dir}"> + <classpath> + <pathelement path="${aspectjrt.jar}"/> + </classpath> + </javac> + + <java classname="bean.Demo" + classpath="${run.classpath}" + dir="${ex.dir}" fork="yes" + output="${actual.file}"/> + <antcall target="verifyAndCleanup.noworkingdir.classesdir"/> + + <!-- todo: version bootclasspath, extdirs + Xporting="on" # todo: after Jim updates compiler for Xporting + --> + + </target> + + <target name="verifyAndCleanup.ajdoc" depends="verifyAndCleanup.noworkingdir.classesdir.nooutput" /> + + <target name="verifyAndCleanup.noworkingdir.noclassesdir"> + <antcall target="expectfile"/> + <antcall target="noworkingdir"/> + <antcall target="noclassesdir"/> + <antcall target="cleanajc"/> + </target> + + <target name="verifyAndCleanup.workingdir.noclassesdir"> + <antcall target="expectfile"/> + <antcall target="workingdir"/> + <antcall target="noclassesdir"/> + <antcall target="cleanajc"/> + </target> + + <target name="verifyAndCleanup.workingdir.noclassesdir.nooutput"> + <antcall target="workingdir"/> + <antcall target="noclassesdir"/> + <antcall target="cleanajc"/> + </target> + + <target name="verifyAndCleanup.noworkingdir.classesdir.nooutput"> + <antcall target="noworkingdir"/> + <antcall target="classesdir"/> + <antcall target="cleanajc"/> + </target> + + <target name="verifyAndCleanup.noworkingdir.classesdir" > + <antcall target="noworkingdir"/> + <antcall target="classesdir"/> + <antcall target="expectfile"/> + <antcall target="cleanajc"/> + </target> + + <target name="verifyAndCleanup.workingdir.classesdir"> + <antcall target="expectfile"/> + <antcall target="workingdir"/> + <antcall target="classesdir"/> + <antcall target="cleanajc"/> + </target> + + <target name="expectfile" depends="init"> + <comparefiles lhsFile="${expect.file}" rhsFile="${actual.file}"/> + <delete quiet="on" file="${actual.file}"/> + </target> + <target name="noworkingdir" depends="init"> + <comparefiles lhsFile="${empty.dir}" rhsFile="${working.dir}"/> + </target> + <target name="workingdir" depends="init"> + <comparefiles lhsFile="${expected.working.dir}" rhsFile="${working.dir}"/> + </target> + <target name="noclassesdir" depends="init"> + <comparefiles lhsFile="${empty.dir}" rhsFile="${classes.dir}"/> + </target> + <target name="classesdir" depends="init"> + <comparefiles lhsFile="${expected.classes.dir}" rhsFile="${classes.dir}"/> + </target> + + <target name="cleanajc" depends="init"> + <mkdir dir="${classes.dir}"/> + <delete quiet="on" dir="${classes.dir}"/> + <mkdir dir="${classes.dir}"/> + <mkdir dir="${working.dir}"/> + <delete quiet="on" dir="${working.dir}"/> + <mkdir dir="${working.dir}"/> + <delete quiet="on" > + <fileset dir="${product.examples.dir}" includes="**.class,**.ajesym"/> + </delete> + </target> +</project> diff --git a/tests/product/product-properties.xml b/tests/product/product-properties.xml new file mode 100644 index 000000000..b5d7b07a0 --- /dev/null +++ b/tests/product/product-properties.xml @@ -0,0 +1,416 @@ +<!-- -*- Mode: SGML; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- --> +<!-- --> +<!-- This file is part of the compiler and core tools for the AspectJ(tm) --> +<!-- programming language; see http://aspectj.org --> +<!-- --> +<!-- The contents of this file are subject to the Mozilla Public License --> +<!-- Version 1.1 (the "License"); you may not use this file except in --> +<!-- compliance with the License. You may obtain a copy of the License at --> +<!-- either http://www.mozilla.org/MPL/ or http://aspectj.org/MPL/. --> +<!-- --> +<!-- Software distributed under the License is distributed on an "AS IS" basis, --> +<!-- WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License --> +<!-- for the specific language governing rights and limitations under the --> +<!-- License. --> +<!-- --> +<!-- The Original Code is AspectJ. --> +<!-- --> +<!-- The Initial Developer of the Original Code is Xerox Corporation. Portions --> +<!-- created by Xerox Corporation are Copyright (C) 1999, 2000 Xerox Corporation. --> +<!-- All Rights Reserved. --> + +<!-- ============================================================================== --> +<!-- To do a build, invoke build/bin/ant.[sh|bat] after defining JDKDIR. --> +<!-- To customize properties, edit local.properties.examples as local.properties. --> +<!-- ============================================================================== --> +<!-- todo: non-distribution license?? --> +<!-- generated using script - see added: for differences --> + + <!-- init.product . . . . . . . --> + <target name="init.product" depends="" + unless="" > + <property name="PS" value="${path.separator}" /> + <property name="product.dir" + location="${basedir}" /> + <property name="product.bin.dir" + location="${product.dir}/bin" /> + <property name="product.src.dir" + location="${product.dir}/src" /> + <property name="product.lib.dir" + location="${product.dir}/lib" /> + <property name="product.tools.jar" + location="${product.dir}/lib/aspectjtools.jar" /> + <property name="product.rt.jar" + location="${product.dir}/lib/aspectjrt.jar" /> + <property name="product.examples.dir" + location="${product.dir}/examples" /> + <property name="product.doc.dir" + location="${product.dir}/doc" /> + <property name="product.doc-tgz.dir" + location="${product.dir}/../doc-tgz" /> + <property name="product.ajdee.dir" + location="${product.dir}/../${ajdee.product.name}" /> + <property name="product.aspectj-mode.dir" + location="${product.dir}/../${aspectj-mode.product.name}" /> + <property name="product.forte.dir" + location="${product.dir}/../forte" /> + <property name="product.jbuilder.dir" + location="${product.dir}/../jbuilder" /> + <property name="product.source.tools.dir" + location="${product.dir}/../source-tools" /> + <property name="product.source.forte.dir" + location="${product.dir}/../source-forte" /> + <property name="product.source.jbuilder.dir" + location="${product.dir}/../source-jbuilder" /> + <property name="product.taskdefs.dir" + location="${product.dir}/../${ant.dist.name}" /> + <property name="product.taskdefs.jar" + location="${product.dir}/lib/aspectj-ant.jar" /> + <property name="productTest.dir" + location="${product.dir}/product" /> + <property name="productTest.output.dir" + location="${product.dir}/product-test-output" /> + <property name="productTest.expect.zip" + location="${productTest.dir}/expect.zip" /> + <property name="productTest.expect.dir" + location="${productTest.dir}/expect" /> + <property name="productTest.expect.bat.dir" + location="${productTest.expect.dir}/bat" /> + </target> <!-- init.product --> + + <!-- product.dir.available . . . . . . . --> + <target name="product.dir.available" depends="init.product" + unless="" > + <available file="${product.dir}" + property="product.dir.available" /> + </target> <!-- product.dir.available --> + + <!-- product.dir . . . . . . . --> + <target name="product.dir" depends="product.dir.available" + unless="product.dir.available" > + <fail message="expecting product.dir at ${product.dir}"/> + </target> <!-- product.dir --> + + <!-- product.bin.dir.available . . . . . . . --> + <target name="product.bin.dir.available" depends="init.product" + unless="" > + <available file="${product.bin.dir}" + property="product.bin.dir.available" /> + </target> <!-- product.bin.dir.available --> + + <!-- product.bin.dir . . . . . . . --> + <target name="product.bin.dir" depends="product.bin.dir.available" + unless="product.bin.dir.available" > + <fail message="expecting product.bin.dir at ${product.bin.dir}"/> + </target> <!-- product.bin.dir --> + + <!-- product.lib.dir.available . . . . . . . --> + <target name="product.lib.dir.available" depends="init.product" + unless="" > + <available file="${product.lib.dir}" + property="product.lib.dir.available" /> + </target> <!-- product.lib.dir.available --> + + <!-- product.lib.dir . . . . . . . --> + <target name="product.lib.dir" depends="product.lib.dir.available" + unless="product.lib.dir.available" > + <fail message="expecting product.lib.dir at ${product.lib.dir}"/> + </target> <!-- product.lib.dir --> + + <!-- product.tools.jar.available . . . . . . . --> + <target name="product.tools.jar.available" depends="init.product" + unless="" > + <available file="${product.tools.jar}" + property="product.tools.jar.available" /> + </target> <!-- product.tools.jar.available --> + + <!-- product.tools.jar . . . . . . . --> + <target name="product.tools.jar" depends="product.tools.jar.available" + unless="product.tools.jar.available" > + <fail message="expecting product.tools.jar at ${product.tools.jar}"/> + </target> <!-- product.tools.jar --> + + <!-- product.rt.jar.available . . . . . . . --> + <target name="product.rt.jar.available" depends="init.product" + unless="" > + <available file="${product.rt.jar}" + property="product.rt.jar.available" /> + </target> <!-- product.rt.jar.available --> + + <!-- product.rt.jar . . . . . . . --> + <target name="product.rt.jar" depends="product.rt.jar.available" + unless="product.rt.jar.available" > + <fail message="expecting product.rt.jar at ${product.rt.jar}"/> + </target> <!-- product.rt.jar --> + + <!-- product.examples.dir.available . . . . . . . --> + <target name="product.examples.dir.available" depends="init.product" + unless="" > + <available file="${product.examples.dir}" + property="product.examples.dir.available" /> + </target> <!-- product.examples.dir.available --> + + <!-- product.examples.dir . . . . . . . --> + <target name="product.examples.dir" depends="product.examples.dir.available" + unless="product.examples.dir.available" > + <fail message="expecting product.examples.dir at ${product.examples.dir}"/> + </target> <!-- product.examples.dir --> + + <!-- product.doc.dir.available . . . . . . . --> + <target name="product.doc.dir.available" depends="init.product" + unless="" > + <available file="${product.doc.dir}" + property="product.doc.dir.available" /> + </target> <!-- product.doc.dir.available --> + + <!-- product.doc.dir . . . . . . . --> + <target name="product.doc.dir" depends="product.doc.dir.available" + unless="product.doc.dir.available" > + <fail message="expecting product.doc.dir at ${product.doc.dir}"/> + </target> <!-- product.doc.dir --> + + <!-- product.doc-tgz.dir.available . . . . . . . --> + <target name="product.doc-tgz.dir.available" depends="init.product" + unless="" > + <available file="${product.doc-tgz.dir}" + property="product.doc-tgz.dir.available" /> + </target> <!-- product.doc-tgz.dir.available --> + + <!-- product.doc-tgz.dir . . . . . . . --> + <target name="product.doc-tgz.dir" depends="product.doc-tgz.dir.available" + unless="product.doc-tgz.dir.available" > + <fail message="expecting product.doc-tgz.dir at ${product.doc-tgz.dir}"/> + </target> <!-- product.doc-tgz.dir --> + + <!-- product.ajdee.dir.available . . . . . . . --> + <target name="product.ajdee.dir.available" depends="init.product" + unless="" > + <available file="${product.ajdee.dir}" + property="product.ajdee.dir.available" /> + </target> <!-- product.ajdee.dir.available --> + + <!-- product.ajdee.dir . . . . . . . --> + <target name="product.ajdee.dir" depends="product.ajdee.dir.available" + unless="product.ajdee.dir.available" > + <fail message="expecting product.ajdee.dir at ${product.ajdee.dir}"/> + </target> <!-- product.ajdee.dir --> + + <!-- product.aspectj-mode.dir.available . . . . . . . --> + <target name="product.aspectj-mode.dir.available" depends="init.product" + unless="" > + <available file="${product.aspectj-mode.dir}" + property="product.aspectj-mode.dir.available" /> + </target> <!-- product.aspectj-mode.dir.available --> + + <!-- product.aspectj-mode.dir . . . . . . . --> + <target name="product.aspectj-mode.dir" depends="product.aspectj-mode.dir.available" + unless="product.aspectj-mode.dir.available" > + <fail message="expecting product.aspectj-mode.dir at ${product.aspectj-mode.dir}"/> + </target> <!-- product.aspectj-mode.dir --> + + <!-- product.forte.dir.available . . . . . . . --> + <target name="product.forte.dir.available" depends="init.product" + unless="" > + <available file="${product.forte.dir}" + property="product.forte.dir.available" /> + </target> <!-- product.forte.dir.available --> + + <!-- product.forte.dir . . . . . . . --> + <target name="product.forte.dir" depends="product.forte.dir.available" + unless="product.forte.dir.available" > + <fail message="expecting product.forte.dir at ${product.forte.dir}"/> + </target> <!-- product.forte.dir --> + + <!-- product.jbuilder.dir.available . . . . . . . --> + <target name="product.jbuilder.dir.available" depends="init.product" + unless="" > + <available file="${product.jbuilder.dir}" + property="product.jbuilder.dir.available" /> + </target> <!-- product.jbuilder.dir.available --> + + <!-- product.jbuilder.dir . . . . . . . --> + <target name="product.jbuilder.dir" depends="product.jbuilder.dir.available" + unless="product.jbuilder.dir.available" > + <fail message="expecting product.jbuilder.dir at ${product.jbuilder.dir}"/> + </target> <!-- product.jbuilder.dir --> + + <!-- product.src.dir.available . . . . . . . --> + <target name="product.src.dir.available" depends="init.product" + unless="" > + <available file="${product.src.dir}" + property="product.src.dir.available" /> + </target> <!-- product.src.dir.available --> + + <!-- product.src.dir . . . . . . . --> + <target name="product.src.dir" depends="product.src.dir.available" + unless="product.src.dir.available" > + <fail message="expecting product.src.dir at ${product.src.dir}"/> + </target> <!-- product.src.dir --> + + <!-- product.source.tools.dir.available . . . . . . . --> + <target name="product.source.tools.dir.available" depends="init.product" + unless="" > + <available file="${product.source.tools.dir}" + property="product.source.tools.dir.available" /> + </target> <!-- product.source.tools.dir.available --> + + <!-- product.source.tools.dir . . . . . . . --> + <target name="product.source.tools.dir" depends="product.source.tools.dir.available" + unless="product.source.tools.dir.available" > + <fail message="expecting product.source.tools.dir at ${product.source.tools.dir}"/> + </target> <!-- product.source.tools.dir --> + <!-- product.source.forte.dir.available . . . . . . . --> + <target name="product.source.forte.dir.available" depends="init.product" + unless="" > + <available file="${product.source.forte.dir}" + property="product.source.forte.dir.available" /> + </target> <!-- product.source.forte.dir.available --> + + <!-- product.source.forte.dir . . . . . . . --> + <target name="product.source.forte.dir" depends="product.source.forte.dir.available" + unless="product.source.forte.dir.available" > + <fail message="expecting product.source.forte.dir at ${product.source.forte.dir}"/> + </target> <!-- product.source.forte.dir --> + + <!-- product.source.jbuilder.dir.available . . . . . . . --> + <target name="product.source.jbuilder.dir.available" depends="init.product" + unless="" > + <available file="${product.source.jbuilder.dir}" + property="product.source.jbuilder.dir.available" /> + </target> <!-- product.source.jbuilder.dir.available --> + + <!-- product.source.jbuilder.dir . . . . . . . --> + <target name="product.source.jbuilder.dir" depends="product.source.jbuilder.dir.available" + unless="product.source.jbuilder.dir.available" > + <fail message="expecting product.source.jbuilder.dir at ${product.source.jbuilder.dir}"/> + </target> <!-- product.source.jbuilder.dir --> + + <!-- product.taskdefs.dir.available . . . . . . . --> + <target name="product.taskdefs.dir.available" depends="init.product" + unless="" > + <available file="${product.taskdefs.dir}" + property="product.taskdefs.dir.available" /> + </target> <!-- product.taskdefs.dir.available --> + + <!-- product.taskdefs.dir . . . . . . . --> + <target name="product.taskdefs.dir" depends="product.taskdefs.dir.available" + unless="product.taskdefs.dir.available" > + <fail message="expecting product.taskdefs.dir at ${product.taskdefs.dir}"/> + </target> <!-- product.taskdefs.dir --> + + <!-- product.taskdefs.jar.available . . . . . . . --> + <target name="product.taskdefs.jar.available" depends="init.product" + unless="" > + <available file="${product.taskdefs.jar}" + property="product.taskdefs.jar.available" /> + </target> <!-- product.taskdefs.jar.available --> + + <!-- product.taskdefs.jar . . . . . . . --> + <target name="product.taskdefs.jar" depends="product.taskdefs.jar.available" + unless="product.taskdefs.jar.available" > + <fail message="expecting product.taskdefs.jar at ${product.taskdefs.jar}"/> + </target> <!-- product.taskdefs.jar --> + + <!-- productTest.dir.available . . . . . . . --> + <target name="productTest.dir.available" depends="init.product" + unless="" > + <available file="${productTest.dir}" + property="productTest.dir.available" /> + </target> <!-- productTest.dir.available --> + + <!-- productTest.dir . . . . . . . --> + <target name="productTest.dir" depends="productTest.dir.available" + unless="productTest.dir.available" > + <fail message="expecting productTest.dir at ${productTest.dir}"/> + </target> <!-- productTest.dir --> + + <!-- productTest.output.dir.available . . . . . . . --> + <target name="productTest.output.dir.available" depends="init.product" + unless="" > + <available file="${productTest.output.dir}" + property="productTest.output.dir.available" /> + </target> <!-- productTest.output.dir.available --> + + <!-- productTest.output.dir . . . . . . . --> + <target name="productTest.output.dir" depends="productTest.output.dir.available" + unless="productTest.output.dir.available" > + <mkdir dir="${productTest.output.dir}"/> + </target> <!-- productTest.output.dir --> + + <!-- productTest.expect.zip.available . . . . . . . --> + <target name="productTest.expect.zip.available" depends="init.product" + unless="" > + <available file="${productTest.expect.zip}" + property="productTest.expect.zip.available" /> + </target> <!-- productTest.expect.zip.available --> + + <!-- productTest.expect.zip . . . . . . . --> + <target name="productTest.expect.zip" depends="productTest.expect.zip.available" + unless="productTest.expect.zip.available" > + <fail message="expecting productTest.expect.zip at ${productTest.expect.zip}"/> + </target> <!-- productTest.expect.zip --> + + <!-- productTest.expect.dir.available . . . . . . . --> + <target name="productTest.expect.dir.available" depends="init.product" + unless="" > + <available file="${productTest.expect.dir}" + property="productTest.expect.dir.available" /> + </target> <!-- productTest.expect.dir.available --> + + <!-- productTest.expect.dir . . . . . . . --> <!-- added: unzip --> + <target name="productTest.expect.dir" + depends="init.product,productTest.expect.zip" + unless="productTest.expect.dir.available" > + <unzip src="${productTest.expect.zip}" + dest="${productTest.dir}"/> + </target> <!-- productTest.expect.dir --> + + <!-- productTest.expect.bat.dir.available . . . . . . . --> + <target name="productTest.expect.bat.dir.available" depends="init.product" + unless="" > + <available file="${productTest.expect.bat.dir}" + property="productTest.expect.bat.dir.available" /> + </target> <!-- productTest.expect.bat.dir.available --> + + <!-- productTest.expect.bat.dir . . . . . . . --> <!-- added productTest.expect.dir --> + <target name="productTest.expect.bat.dir" + depends="productTest.expect.dir,productTest.expect.bat.dir.available" + unless="productTest.expect.bat.dir.available" > + <fail message="expecting productTest.expect.bat.dir at ${productTest.expect.bat.dir}"/> + </target> <!-- productTest.expect.bat.dir --> + + <!-- about.init.product . . . . . . . --> + <target name="about.init.product" depends="" + unless="" > + <echo>Generated using script generateProperties. +-------------------- Required variables +ajdee.product.name +ant.jarfile.name +aspectj-mode.product.name +forte.product.name +jbuilder.product.name +-------------------- target items data +product.dir NONE NONE NONE +product.bin.dir bin ajc.bat product.dir +product.lib.dir lib aspectjrt.jar product.dir +product.tools.jar lib aspectjtools.jar product.dir +product.rt.jar lib aspectjrt.jar product.dir +product.examples.dir examples bean/files.lst product.dir +product.doc.dir doc faq.html product.dir +product.doc-tgz.dir doc-tgz README-DOCS.html product.dir +product.ajdee.dir ${ajdee.product.name} ${ajdee.product.name} product.dir +product.aspectj-mode.dir ${aspectj-mode.product.name} ${aspectj-mode.product.name} product.dir +product.forte.dir forte ${forte.product.name}.jar product.dir +product.jbuilder.dir jbuilder ${jbuilder.product.name}.jar product.dir +product.source.tools.dir source-tools LICENSE-SOURCES.html product.dir +product.source.forte.dir source-forte LICENSE-AJDEFORTE-SOURCES.html product.dir +product.source.jbuilder.dir source-jbuilder LICENSE-AJDEFORTE-SOURCES.html product.dir +product.taskdefs.dir ${ant.dist.name} ${ant.jarfile.name} product.dir +product.taskdefs.jar NONE ${ant.jarfile.name} product.taskdefs.dir +productTest.dir product expect.zip product.dir +productTest.output.dir product-test-output CREATE product.dir +productTest.expect.zip NONE expect.zip productTest.dir +productTest.expect.dir expect ajx/bean/output/out.txt productTest.dir productTest.expect.zip +productTest.expect.bat.dir bat telecom.ajdb.txt productTest.expect.dir +</echo> + </target> <!-- about.init.product --> diff --git a/tests/product/product-test.xml b/tests/product/product-test.xml new file mode 100644 index 000000000..c5f1146d3 --- /dev/null +++ b/tests/product/product-test.xml @@ -0,0 +1,293 @@ +<!-- -*- Mode: SGML; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- --> +<!-- --> +<!-- This file is part of the compiler and core tools for the AspectJ(tm) --> +<!-- programming language; see http://aspectj.org --> +<!-- --> +<!-- The contents of this file are subject to the Mozilla Public License --> +<!-- Version 1.1 (the "License"); you may not use this file except in --> +<!-- compliance with the License. You may obtain a copy of the License at --> +<!-- either http://www.mozilla.org/MPL/ or http://aspectj.org/MPL/. --> +<!-- --> +<!-- Software distributed under the License is distributed on an "AS IS" basis, --> +<!-- WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License --> +<!-- for the specific language governing rights and limitations under the --> +<!-- License. --> +<!-- --> +<!-- The Original Code is AspectJ. --> +<!-- --> +<!-- The Initial Developer of the Original Code is Xerox Corporation. Portions --> +<!-- created by Xerox Corporation are Copyright (C) 1999, 2000 Xerox Corporation. --> +<!-- All Rights Reserved. --> + +<!-- ============================================================================== --> +<!-- To do a build, invoke build/bin/ant.[sh|bat] after defining JDKDIR. --> +<!-- To customize properties, edit local.properties.examples as local.properties. --> +<!-- ============================================================================== --> +<!-- todo: non-distribution license?? --> + +<!-- This dtd only defines aspectj_initProduct, unlike ../../build.dtd --> +<!DOCTYPE build SYSTEM "build.dtd"> + +<!-- This only runs from ../../test-product.xml b/c it uses comparefiles w/o defining it --> +<project name="product-test" default="test" basedir="."> + + &aspectj_initProduct; + + <!-- ========================================================================== --> + <!-- Init --> + <!-- ========================================================================== --> + <target name="init" depends="init.product,productTest.expect.dir" + description="init values - launch from install dir or set product.dir variable"> + <echo message="init product-test.xml"/> + <property name="productTest.classes.dir" + location="${productTest.output.dir}/classes"/> + <property name="script.expect.dir" + location="${productTest.expect.dir}/bat"/> + <!-- use .bat scripts if available, shell scripts otherwise --> + <property name="scriptExtension" value=""/> + <available file="${product.bin.dir}/ajc.bat" + property="scriptExtension" + value=".bat" /> + </target> + + <!-- ========================================================================== --> + <!-- Clean everything in created dirs --> + <!-- ========================================================================== --> + + <target name="clean" depends="init" + description="delete test working dirs (does not clean results)"> + <mkdir dir="${productTest.output.dir}"/> + <delete dir="${productTest.output.dir}"/> + <mkdir dir="${productTest.output.dir}"/> + </target> + + <!-- ========================================================================== --> + <!-- Run product tests --> + <!-- ========================================================================== --> + <target name="test" + depends="test.examples.buildscript,test.script.telecom,test.tools.sources" + description="run available tests"/> + + <target name="test.script.telecom" + depends="init,productTest.dir,product.dir, + productTest.expect.bat.dir,productTest.output.dir" + description="ajc/ajdoc/java/ajdb telecom example using bat scripts"> + <!-- antcall target="clean" / --> + + <!-- todo: execon not working - will fail outside windows --> + <echo message="### file product-test.xml target test.script.telecom"/> + <!-- ajc --> + <property name="ajc.out" location="${productTest.output.dir}/telecom.ajc.txt"/> + <property name="expect.ajc.out" location="${script.expect.dir}/telecom.ajc.txt"/> + <exec dir="${product.examples.dir}" + executable="${product.bin.dir}/ajc${scriptExtension}" + output="${ajc.out}"> + <arg value="-d"/> + <arg value="${productTest.classes.dir}"/> + <arg value="-argfile"/> + <arg value="telecom/billing.lst"/> + <arg value="-classpath"/> + <arg value="${product.rt.jar}"/> + </exec> + <!-- todo this is always failing... --> + <comparefiles lhsFile="${ajc.out}" + rhsFile="${expect.ajc.out}"/> + + <!-- ajdoc --> + <property name="expect.ajdoc.out" location="${script.expect.dir}/telecom.ajdoc.txt"/> + <property name="ajdoc.out" location="${productTest.output.dir}/telecom.ajdoc.txt"/> + <exec dir="${product.examples.dir}" + executable="${product.bin.dir}/ajdoc${scriptExtension}" + output="${ajdoc.out}"> + <arg value="-d"/> + <arg value="${productTest.classes.dir}"/> <!-- todo dump html in classes dir for now --> + <arg value="-argfile"/> + <arg value="telecom/billing.lst"/> + <arg value="-classpath"/> + <arg value="${product.rt.jar}"/> + <arg value="telecom"/> <!-- todo (reconsider) had to add packagename --> + </exec> + <comparefiles lhsFile="${ajdoc.out}" + rhsFile="${expect.ajdoc.out}"/> + + <!-- java --> + <property name="java.out" location="${productTest.output.dir}/telecom.java.txt"/> + <property name="expect.java.out" location="${script.expect.dir}/telecom.java.txt"/> + <java classname="telecom.BillingSimulation" + output="${java.out}"> + <classpath> + <pathelement location="${productTest.classes.dir}"/> + <pathelement location="${product.rt.jar}"/> + </classpath> + </java> + <comparefiles lhsFile="${java.out}" + rhsFile="${expect.java.out}"/> + + <!-- ajdb --> + <echo file="${product.examples.dir}/ajdb.in">exit + </echo> + <property name="ajdb.out" location="${productTest.output.dir}/telecom.ajdb.txt"/> + <property name="expect.ajdb.out" location="${script.expect.dir}/telecom.ajdb.txt"/> + <exec dir="${product.examples.dir}" + executable="${product.bin.dir}/ajdb${scriptExtension}" + output="${ajdb.out}"> + <arg value="-classpath"/> + <arg value="${product.rt.jar}${PS}${productTest.classes.dir}"/> + <arg value="<"/> + <arg value="${product.examples.dir}/ajdb.in"/> + </exec> + <comparefiles lhsFile="${ajdb.out}" + rhsFile="${expect.ajdb.out}"/> + </target> + + <!-- todo: also depends on jdk.tools.jar --> + <!-- todo: ignore as duplicating examples/build.xml --> + <target name="test.examples.antscript" + depends="init,productTest.dir,product.dir, + product.taskdefs.jar,product.rt.jar, + product.tools.jar" + description="compile/doc/run introduction example using ant taskdefs by delegation to ant-example.xml"> + <echo message="### file product-test.xml target test.examples.antscript"/> + <ant antfile="${productTest.dir}/ant-example.xml" + dir="${product.examples.dir}" + output="${productTest.output.dir}/ant-example.ant.txt"> + <property name="PS" + value="${path.separator}"/> + <property name="product.dir" + value="${product.dir}"/> + <property name="jdk.tools.jar" + location="${jdk.tools.jar}"/> + <property name="jdk.dir" + location="${jdk.dir}"/> + </ant> + </target> + + <target name="test.examples.buildscript" + depends="init,product.dir, + product.taskdefs.jar,product.rt.jar, + product.tools.jar" + description="compile/doc/run examples using build.xml script distributed with examples"> + <echo message="### file product-test.xml target test.examples.buildscript"/> + <copy file="${product.taskdefs.jar}" + todir="${product.lib.dir}" /> + + <!-- XXX if docs come after ajc, then _always_ get OutOfMemoryError... --> + <antcall target="antcall.test.examples.buildscript"> + <param name="example.target" value="docs" /> + </antcall> + + <antcall target="antcall.test.examples.buildscript.norun"> + <param name="example.target" value="spacewar" /> + </antcall> + + <antcall target="antcall.test.examples.buildscript"> + <param name="example.target" value="nonGui" /> + </antcall> + + <!-- OutOfMemory if including all + <antcall target="antcall.test.examples.buildscript.norun"> + <param name="example.target" value="all" /> + </antcall> + --> + </target> + + <target name="antcall.test.examples.buildscript.norun" + depends="init,product.dir, + product.taskdefs.jar,product.rt.jar, + product.tools.jar" + description="invoke ant {example.target} for test.examples.buildscript (with norun)"> + <echo message="### ${example.target} (norun)"/> + <mkdir dir="${productTest.output.dir}" /> + <ant antfile="${product.examples.dir}/build.xml" + target="${example.target}" + dir="${product.examples.dir}" + output="${productTest.output.dir}/example-build.${example.target}.txt" > + <property name="JAVA_HOME" + location="${jdk.dir}"/> + <property name="norun" + location="skipRunning"/> + </ant> + </target> + + <target name="antcall.test.examples.buildscript" + depends="init,product.dir, + product.taskdefs.jar,product.rt.jar, + product.tools.jar" + description="invoke ant {example.target} for test.examples.buildscript (without norun)"> + <echo message="### ${example.target} (run)"/> + <mkdir dir="${productTest.output.dir}" /> + <ant antfile="${product.examples.dir}/build.xml" + target="${example.target}" + dir="${product.examples.dir}" + output="${productTest.output.dir}/example-build.${example.target}.txt" > + <property name="JAVA_HOME" + location="${jdk.dir}"/> + </ant> + </target> + + + <!-- see also more recent devenv/dev/bin/aj/testToolsSrc.sh --> + <target name="test.tools.sources" + depends="init,product.tools.jar,product.src.dir" + description="test source dist using ajc, ajdoc (todo remove - see ant-example)"> + + <property name="tools.source.out" + location="${productTest.output.dir}/source-tools"/> + <property name="test.source.classes.dir" + location="${productTest.output.dir}/source-tools"/> + <property name="source-tools.jar" + location="${productTest.output.dir}/source-tools.jar"/> + + <mkdir dir="${test.source.classes.dir}"/> + <delete dir="${test.source.classes.dir}"/> + <mkdir dir="${test.source.classes.dir}"/> + + <!-- todo validate product builds by comparison or invocation --> + <antcall target="build.source.call"> + <param name="target.name" value="runtime" /> + </antcall> + <antcall target="build.source.call"> + <param name="target.name" value="compiler" /> + </antcall> + <antcall target="build.source.call"> + <param name="target.name" value="ajde" /> + </antcall> + <antcall target="build.source.call"> + <param name="target.name" value="ajbrowser" /> + </antcall> + <antcall target="build.source.call"> + <param name="target.name" value="ajdoc" /> + </antcall> + + <echo message="" file="${tools.source.out}.empty"/> + <!-- comparefiles lhsFile="${tools.source.out}" + rhsFile="${tools.source.out}.empty" / --> + + <jar jarfile="${source-tools.jar}" + basedir="${test.source.classes.dir}"/> + <comparefiles lhsFile="${product.tools.jar}" + rhsFile="${source-tools.jar}" /> + + <delete dir="${test.source.classes.dir}"/> + </target> + + <target name="build.source.call" > + <echo message="# building (source) using ajc${scriptExtension} @${product.src.dir}/${target.name}.lst"/> + <mkdir dir="${test.source.classes.dir}/${target.name}"/> + <exec dir="${product.src.dir}" + executable="${product.bin.dir}/ajc${scriptExtension}" + output="${tools.source.out}.${target.name}.txt"> + <arg value="-d"/> + <arg value="${test.source.classes.dir}/${target.name}"/> + <arg value="-classpath"/> + <arg value="${product.rt.jar}${PS}${jdk.tools.jar}"/> <!-- 1.3 for ajdoc --> + <arg value="-argfile"/> + <arg value="${target.name}.lst"/> + </exec> + <echo message="# START building (source) ${target.name} output"/> + <echo message="" file="${tools.source.out}.${target.name}.txt"/> + <echo message="# END building (source) ${target.name} output"/> + </target> + +</project> + diff --git a/tests/product/test-taskdefs.xml b/tests/product/test-taskdefs.xml new file mode 100644 index 000000000..973d73d6a --- /dev/null +++ b/tests/product/test-taskdefs.xml @@ -0,0 +1,466 @@ +<!-- -*- Mode: SGML; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- --> +<!-- --> +<!-- This file is part of the compiler and core tools for the AspectJ(tm) --> +<!-- programming language; see http://aspectj.org --> +<!-- --> +<!-- The contents of this file are subject to the Mozilla Public License --> +<!-- Version 1.1 (the "License"); you may not use this file except in --> +<!-- compliance with the License. You may obtain a copy of the License at --> +<!-- either http://www.mozilla.org/MPL/ or http://aspectj.org/MPL/. --> +<!-- --> +<!-- Software distributed under the License is distributed on an "AS IS" basis, --> +<!-- WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License --> +<!-- for the specific language governing rights and limitations under the --> +<!-- License. --> +<!-- --> +<!-- The Original Code is AspectJ. --> +<!-- --> +<!-- The Initial Developer of the Original Code is Xerox Corporation. Portions --> +<!-- created by Xerox Corporation are Copyright (C) 1999, 2000 Xerox Corporation. --> +<!-- All Rights Reserved. --> + +<!-- ============================================================================== --> +<!-- To build, define JAVA_HOME,place in examples/ and run from examples/.. --> +<!-- ============================================================================== --> +<!-- todo: non-distribution license?? --> + +<project name="test-taskdefs" default="test"> + <!-- ========================================================================== --> + <!-- Init --> + <!-- ========================================================================== --> + <target name="init" + description="caller must define jdk.tools.jar and product.dir or run from product.examples.dir"> + <echo message="init test-taskdefs.xml"/> + + <property name="PS" value="${path.separator}"/> + <property name="knownFail" + value=" - known failure"/> + + <!-- define product.dir or run from it --> + <property name="product.dir" + location=".."/> + + <!-- expected from install --> + <property name="ex.dir" + location="${product.dir}/examples"/> + <property name="product.examples.dir" + location="${ex.dir}"/> + <!-- created after install --> + <property name="test.dir" + location="${product.dir}/test"/> + <property name="expect.file" + location="${test.dir}/expect.out"/> + <property name="actual.file" + location="${test.dir}/actual.out"/> + <property name="empty.dir" + location="${test.dir}/emptydir"/> + <property name="temp.dir" + location="${test.dir}/temp"/> + <property name="classes.dir" + location="${test.dir}/classes"/> + <property name="expected.classes.dir" + location="${test.dir}/expectedClasses"/> + <property name="working.dir" + location="${product.dir}/workingdir"/> + <property name="expected.working.dir" + location="${test.dir}/expectedWorkingdir"/> + <mkdir dir="${empty.dir}"/> + <mkdir dir="${temp.dir}"/> + <mkdir dir="${classes.dir}"/> + <mkdir dir="${expected.classes.dir}"/> + <mkdir dir="${working.dir}"/> + <mkdir dir="${expected.working.dir}"/> + + <property name="aspectj-ant.jar" + location="${product.dir}/lib/aspectj-ant.jar"/> + <property name="aspectjrt.jar" + location="${product.dir}/lib/aspectjrt.jar"/> + <property name="aspectjtools.jar" + location="${product.dir}/lib/aspectjtools.jar"/> + <!-- alltesting.jar required for comparefiles --> + <property name="alltesting.jar" + location="${product.dir}/lib/alltesting.jar"/> + + <available file="${aspectj-ant.jar}" + property="aspectj-ant.jar.available"/> + <available file="${aspectjrt.jar}" + property="aspectjrt.jar.available"/> + <available file="${aspectjtools.jar}" + property="aspectjtools.jar.available"/> + + <property name="run.classpath" + location="${classes.dir}${PS}${aspectjrt.jar}"/> + <property name="simple.run.classpath" + location="${product.dir}${PS}${aspectjrt.jar}"/> + </target> + + <target name="init.taskdefs" + depends="init,jars.available" + description="initialize taskdefs without ant.home/lib" > + <taskdef name="ajc" + classname="org.aspectj.tools.ant.taskdefs.Ajc" > + <classpath> + <pathelement path="${aspectjrt.jar}"/> + <pathelement path="${aspectj-ant.jar}"/> + <pathelement path="${aspectjtools.jar}"/> + <pathelement path="${jdk.tools.jar}"/> + </classpath> + </taskdef> + <taskdef name="ajdoc" + classname="org.aspectj.tools.ant.taskdefs.Ajdoc" > + <classpath> + <pathelement path="${aspectjrt.jar}"/> + <pathelement path="${aspectj-ant.jar}"/> + <pathelement path="${aspectjtools.jar}"/> + <pathelement path="${jdk.tools.jar}"/> + </classpath> + </taskdef> + <taskdef name="comparefiles" + classname="org.aspectj.testing.taskdefs.CompareFiles"> + <classpath> <!-- todo: setup --> + <pathelement path="${alltesting.jar}"/> + </classpath> + </taskdef> + </target> + + + <target name="jars.available" + depends="aspectjtools.jar.available,aspectj-ant.jar.available"/> + + <target name="aspectjtools.jar.available" depends="init" unless="aspectjtools.jar.available" > + <fail message="expecting aspectjtools.jar at ${aspectjtools.jar}"/> + </target> + <target name="aspectj-ant.jar.available" depends="init" unless="aspectj-ant.jar.available" > + <fail message="expecting aspectj-ant.jar at ${aspectj-ant.jar}"/> + </target> + + <target name="clean" depends="init" + description="todo clean output created by this script"> + </target> + + <target name="test" depends="test.ajc,test.ajdoc"/> + <target name="clear.test.dir" depends="init"> + <mkdir dir="${test.dir}"/> + <delete dir="${test.dir}"/> + <mkdir dir="${test.dir}"/> + </target> + + <target name="test.ajdoc" depends="init,init.taskdefs,clear.test.dir" + description="run variants of ajdoc taskdef on bean, other examples"> + + <mkdir dir="${expected.classes.dir}"/> + <delete quiet="on" dir="${expected.classes.dir}"/> + <mkdir dir="${expected.classes.dir}"/> + <mkdir dir="${classes.dir}"/> + <delete quiet="on" dir="${classes.dir}"/> + <mkdir dir="${classes.dir}"/> + <antcall target="cleanajc"/> + + <echo message="## ajdoc setup classes dir" /> + <ajdoc classpath="${aspectjrt.jar}" destdir="${expected.classes.dir}" + srcdir="${ex.dir}/bean" packagenames="bean" + argfile="${ex.dir}/bean/files.lst" + private="on" /> + + <echo message="## @testcase ajdoc same as setup" /> + <antcall target="cleanajc"/> + <ajdoc classpath="${aspectjrt.jar}" destdir="${classes.dir}" + srcdir="${ex.dir}/bean" packagenames="bean" + argfile="${ex.dir}/bean/files.lst" + private="on" /> + <antcall target="verifyAndCleanup.ajdoc"/> + + <echo message="## @testcase ajdoc argfile only with nested classpath" /> + <ajdoc destdir="${classes.dir}" + argfile="${ex.dir}/bean/files.lst" + private="on" > + <classpath> <pathelement path="${aspectjrt.jar}"/> </classpath> + </ajdoc> + <antcall target="verifyAndCleanup.ajdoc"/> + +<!-- omitted until fixed + <echo message="## @testcase ajdoc srcdir with include argument - getting fail" /> + <ajdoc classpath="${aspectjrt.jar}" destdir="${classes.dir}" + srcdir="${ex.dir}/bean" includes="*.java" + private="on" /> + <antcall target="verifyAndCleanup.ajdoc"/> + + <echo message="## ajdoc need @testcase ajdoc nested src with kitchen sink" /> + <echo message="## @testcase ajdoc argfile todo " /> + <echo message="## @testcase ajdoc Vincent Massol bug" /> + <ajdoc destdir="${classes.dir}" + srcdir="${ex.dir}/bean" + private="on" > + <include name="*.java"/> + <include name="**.java"/> + <classpath> <pathelement path="${aspectjrt.jar}"/> </classpath> + </ajdoc> + <antcall target="verifyAndCleanup.ajdoc"/> + +todo bug ajdoc taskdef not handling any includes or nested src or +includes argument +--> + <!-- todo: version bootclasspath, extdirs + Xporting="on" # todo: after Jim updates compiler for Xporting + todo: nested src n/a + --> + + </target> + + <target name="test.ajc" depends="test.ajc1"/> <!-- ,test.ajc2 --> + <target name="test.ajc1" depends="init,init.taskdefs,clear.test.dir" + description="run variants of ajc taskdef on bean, other examples"> + + <echo message="## setup expected working dir, classes dir, and output file" /> + <antcall target="cleanajc"/> + <ajc srcdir="${ex.dir}/bean" classpath="${aspectjrt.jar}" + destDir="${expected.classes.dir}" + usejavac="yes" + workingdir="${expected.working.dir}"/> + <java classname="bean.Demo" + classpath="${expected.classes.dir}${PS}${aspectjrt.jar}" + dir="${ex.dir}" fork="yes" + output="${expect.file}"/> + + <echo message="## @testcase ajc simple srcdir example" /> + <antcall target="cleanajc"/> + <ajc srcdir="${ex.dir}/bean" classpath="${aspectjrt.jar}" /> + + <!-- todo: fix b/c returning 1 as result --> + <echo message="## simple.run.classpath: ${simple.run.classpath} - getting fail" /> + <java classname="bean.Demo" + classpath="${simple.run.classpath}" + dir="${ex.dir}" fork="yes" + output="${actual.file}"/> + <antcall target="cleanajc"/> + + <echo message="## @testcase ajc srcdir with include arg and (unverified) -source 1.4 and -XaddSafePrefix${knownFail}" /> + <ajc srcdir="${ex.dir}/bean" classpath="${aspectjrt.jar}" includes="*.java"/> + <java classname="bean.Demo" + classpath="${simple.run.classpath}" + dir="${ex.dir}" fork="yes" + output="${actual.file}"/> + <antcall target="verifyAndCleanup.noworkingdir.noclassesdir"/> + + <echo message="## @testcase ajc srcdir with include argument${knownFail}" /> + <ajc srcdir="${ex.dir}/bean" classpath="${aspectjrt.jar}" includes="*.java"/> + <java classname="bean.Demo" + classpath="${simple.run.classpath}" + dir="${ex.dir}" fork="yes" + output="${actual.file}"/> + <antcall target="verifyAndCleanup.noworkingdir.noclassesdir"/> + + <echo message="## @testcase ajc srcdir with destDir and working workingdir argument" /> + <ajc srcdir="${ex.dir}/bean" classpath="${aspectjrt.jar}" + destDir="${classes.dir}" + usejavac="yes" + workingdir="${working.dir}"/> + <java classname="bean.Demo" + classpath="${run.classpath}" + dir="${ex.dir}" fork="yes" + output="${actual.file}"/> + <antcall target="verifyAndCleanup.workingdir.classesdir"/> + + <echo message="## @testcase ajc simple srcdir with nested include and nested classpath${knownFail}" /> + <ajc srcdir="${ex.dir}/bean"> + <include name="**.java"/> + <classpath> <pathelement path="${aspectjrt.jar}"/> </classpath> + </ajc> + <java classname="bean.Demo" + classpath="${simple.run.classpath}" + dir="${ex.dir}" fork="yes" + output="${actual.file}"/> + <antcall target="verifyAndCleanup.noworkingdir.noclassesdir"/> + + <echo message="## @testcase ajc nested src with kitchen sink" /> + <antcall target="cleanajc"/> + <ajc + destDir="${classes.dir}" + workingdir="${working.dir}" + usejavac="on" + preprocess="no" + verbose="on" + deprecation="on" + optimize="on" + encoding="encodingIgnored" + target="targetIgnored" + depend="dependIgnored" + includeantruntime="includeantruntimeIgnored" + includejavaruntime="includejavaruntimeIgnored" + failonerror="on" + + nocomments="on" + nosymbols="on" + emacssym="on" + strict="on" + > + <src path="${ex.dir}/bean"/> + <include name="**.java"/> + <classpath> <pathelement path="${aspectjrt.jar}"/> </classpath> + </ajc> + <java classname="bean.Demo" + classpath="${run.classpath}" + dir="${ex.dir}" fork="yes" + output="${actual.file}"/> + <antcall target="verifyAndCleanup.workingdir.classesdir"/> + + <echo message="## @testcase ajc srcdir in preprocess mode" /> + <ajc srcdir="${ex.dir}/bean" classpath="${aspectjrt.jar}" + lenient="on" + workingdir="${working.dir}" usejavac="on" preprocess="yes"/> + <antcall target="verifyAndCleanup.workingdir.noclassesdir.nooutput"/> + + <echo message="## @testcase ajc argfile in preprocess mode" /> + <ajc argfile="${ex.dir}/bean/files.lst" classpath="${aspectjrt.jar}" + workingdir="${working.dir}" usejavac="on" preprocess="yes"/> + <antcall target="verifyAndCleanup.workingdir.noclassesdir.nooutput"/> + + <echo message="## @testcase ajc argfile in normal mode" /> + <ajc argfile="${ex.dir}/bean/files.lst" classpath="${aspectjrt.jar}" + destdir="${classes.dir}" usejavac="off" preprocess="no" verbose="yes"/> + <java classname="bean.Demo" + classpath="${run.classpath}" + dir="${ex.dir}" fork="yes" + output="${actual.file}"/> + <antcall target="verifyAndCleanup.noworkingdir.classesdir"/> + + <echo message="## @testcase ajc multiple argfile todo restore" /> + <ajc argfiles="${ex.dir}/bean/files.lst,${ex.dir}/introduction/files.lst" + classpath="${aspectjrt.jar}" destdir="${classes.dir}" > + </ajc> + + <java classname="bean.Demo" + classpath="${run.classpath}" + dir="${ex.dir}" fork="yes" + output="${actual.file}"/> + <copy todir="${expected.classes.dir}" > + <fileset dir="${classes.dir}" includes="**.class" /> + </copy> + <antcall target="cleanajc"/> <!-- too many classes --> + </target> + + <target name="test.ajc2" depends="init,init.taskdefs" + description="run variants of ajc taskdef on bean, other examples"> + <!-- failing here --> + <echo message="## @testcase ajc Vincent Massol bug" /> + <ajc classpath="${aspectjrt.jar}" fork="yes" + workingdir="${working.dir}" > <!-- preprocess="yes" --> + <src path="${ex.dir}/bean"/> + <src path="${ex.dir}/introduction"/> + <include name="*.java"/> + <include name="**.java"/> + </ajc> + <antcall target="verifyAndCleanup.workingdir.noclassesdir.nooutput"/> + + <echo message="## @testcase ajc warning when no source files specified but have srcdir # " /> + <ajc srcdir="${ex.dir}/bean" classpath="${aspectjrt.jar}" /> + <antcall target="cleanajc"/> + + <!-- @testcase ajc -preprocess javac is failing todo --> + <echo message="## @testcase ajc -preprocess srcdir no destDir, post-javac compile (-preprocess ignored) # " /> + <ajc srcdir="${ex.dir}/bean" includes="**.java" classpath="${aspectjrt.jar}" + usejavac="no" preprocess="yes" workingdir="${working.dir}"/> + + <echo message="## @testcase ajc -preprocess list ${working.dir}" /> + <comparefiles lhsFile="${empty.dir}" rhsFile="${working.dir}"/> + <echo message="## @testcase ajc -preprocess before comparefiles ${working.dir}" /> + <comparefiles lhsFile="${expected.working.dir}" rhsFile="${working.dir}"/> + <echo message="## @testcase ajc -preprocess before delete classes.dir" /> + <mkdir dir="${classes.dir}"/> + <delete quiet="on" dir="${classes.dir}"/> + <mkdir dir="${classes.dir}"/> + <mkdir dir="${classes.dir}"/> + <echo message="## @testcase ajc -preprocess doing javac" /> + <!-- todo: unable to invoke javac though .java files in working.dir -never invoked?? --> + <javac srcdir="${working.dir}" includes="**.java" + destdir="${classes.dir}" verbose="on" + classpath="${aspectjrt.jar}" /> + <echo message="## @testcase ajc -preprocess after javac, list classes" /> + <comparefiles lhsFile="${empty.dir}" rhsFile="${classes.dir}"/> + <echo message="## @testcase ajc -preprocess after javac, compare classes" /> + <comparefiles lhsFile="${expected.classes.dir}" rhsFile="${classes.dir}"/> + + <echo message="## @testcase ajc -preprocess after javac, run classes" /> + <java classname="bean.Demo" + classpath="${run.classpath}" + dir="${ex.dir}" fork="yes" + output="${actual.file}"/> + <antcall target="verifyAndCleanup.workingdir.classesdir"/> + + <!-- todo: version bootclasspath, extdirs + Xporting="on" # todo: after Jim updates compiler for Xporting + --> + + </target> + + <target name="verifyAndCleanup.ajdoc" depends="verifyAndCleanup.noworkingdir.classesdir.nooutput" /> + + <target name="verifyAndCleanup.noworkingdir.noclassesdir"> + <antcall target="expectfile"/> + <antcall target="noworkingdir"/> + <antcall target="noclassesdir"/> + <antcall target="cleanajc"/> + </target> + + <target name="verifyAndCleanup.workingdir.noclassesdir"> + <antcall target="expectfile"/> + <antcall target="workingdir"/> + <antcall target="noclassesdir"/> + <antcall target="cleanajc"/> + </target> + + <target name="verifyAndCleanup.workingdir.noclassesdir.nooutput"> + <antcall target="workingdir"/> + <antcall target="noclassesdir"/> + <antcall target="cleanajc"/> + </target> + + <target name="verifyAndCleanup.noworkingdir.classesdir.nooutput"> + <antcall target="noworkingdir"/> + <antcall target="classesdir"/> + <antcall target="cleanajc"/> + </target> + + <target name="verifyAndCleanup.noworkingdir.classesdir" > + <antcall target="noworkingdir"/> + <antcall target="classesdir"/> + <antcall target="expectfile"/> + <antcall target="cleanajc"/> + </target> + + <target name="verifyAndCleanup.workingdir.classesdir"> + <antcall target="expectfile"/> + <antcall target="workingdir"/> + <antcall target="classesdir"/> + <antcall target="cleanajc"/> + </target> + + <target name="expectfile" depends="init"> + <comparefiles lhsFile="${expect.file}" rhsFile="${actual.file}"/> + <delete quiet="on" file="${actual.file}"/> + </target> + <target name="noworkingdir" depends="init"> + <comparefiles lhsFile="${empty.dir}" rhsFile="${working.dir}"/> + </target> + <target name="workingdir" depends="init"> + <comparefiles lhsFile="${expected.working.dir}" rhsFile="${working.dir}"/> + </target> + <target name="noclassesdir" depends="init"> + <comparefiles lhsFile="${empty.dir}" rhsFile="${classes.dir}"/> + </target> + <target name="classesdir" depends="init"> + <comparefiles lhsFile="${expected.classes.dir}" rhsFile="${classes.dir}"/> + </target> + + <target name="cleanajc" depends="init"> + <mkdir dir="${classes.dir}"/> + <delete quiet="on" dir="${classes.dir}"/> + <mkdir dir="${classes.dir}"/> + <mkdir dir="${working.dir}"/> + <delete quiet="on" dir="${working.dir}"/> + <mkdir dir="${working.dir}"/> + <delete quiet="on" > + <fileset dir="${product.examples.dir}" includes="**.class,**.ajesym"/> + </delete> + </target> +</project> diff --git a/tests/product/testScripts/ajcCommandLineTest.sh b/tests/product/testScripts/ajcCommandLineTest.sh new file mode 100644 index 000000000..86cd8d862 --- /dev/null +++ b/tests/product/testScripts/ajcCommandLineTest.sh @@ -0,0 +1,179 @@ +#!/bin/sh
+# info: test ajc command line
+# syntax: $0 (define JDKDIR and AJ_BASE)
+# @testcase PR#655 ajc errors when output dir is bad
+# @process-test ajc acjCommandLineTest.sh # test PR#655 ajc errors when output dir is bad
+
+[ -n "$DEBUG" ] && set -vx
+
+errMssg() {
+ [ -n "$1" ] && echo "## $0 $1"
+ [ -n "$2" ] && exit "$2"
+}
+
+generateMinimalSource() { # todo: share with other tests
+ mkdir -p src src/pack
+ genSource "" Main "Main pack.Main" > src/Main.java
+ genSource pack Main "pack.Main" > src/pack/Main.java
+
+ cat > src/minimal_pack.Main_0.lst <<EOF
+pack/Main.java
+EOF
+ cat > src/minimal_Main_1.lst <<EOF
+Main.java
+pack/Main.java
+EOF
+ cat > src/pack/minimal_Main_2.lst <<EOF
+../Main.java
+Main.java
+EOF
+ cat > src/pack/minimal_Main_3.lst <<EOF
+../*.java
+*.java
+EOF
+ cat > minimal_Main_4.lst <<EOF
+@src/minimal_Main_1.lst
+EOF
+ cat > src/minimal_Main_5.lst <<EOF
+@minimal_Main_1.lst
+EOF
+ cat > src/minimal_Main_6.lst <<EOF
+@../src/minimal_Main_1.lst
+EOF
+ cat > src/minimal_Main_7.lst <<EOF
+// starting comment
+Main.java // end of line comment
+// middle comment
+pack/Main.java
+// end comment
+EOF
+ cat > src/minimal_Main_8.lst <<EOF
+*.java
+pack/*.java
+EOF
+ echo "minimal"
+}
+
+genSource() { # todo share with other tests
+ package="$1"
+ class="$2"
+ refs="$3"
+ if [ -z "$package" ] ; then
+ name="$class"
+ else
+ echo "package $package;"
+ name="$package.$class"
+ fi
+cat<<EOF
+public class $class {
+ public static final String NAME = "$name";
+ public static String[] ARGS = new String[]
+EOF
+ sep='{'
+ for i in $refs ; do
+ echo " $sep ${i}.NAME"
+ sep=','
+ done
+cat<<EOF
+ };
+ public static void main (String[] args) {
+ util.Util.signal(NAME + ".main",ARGS);
+ }
+} // class $class
+EOF
+}
+
+getMain() {
+ [ -n "$1" ] && echo "$1" | sed 's|.*_\([^_][^_]*\)_.*|\1|'
+}
+
+compile() {
+ ccdir="${globalClasses:-classes}"
+ [ -d "$ccdir" ] || mkdir "$ccdir"
+ rm -rf "$ccdir"/*
+ $JDKDIR/bin/java -classpath "$toolsjar" org.aspectj.tools.ajc.Main \
+ -d "$ccdir" -classpath "$utiljar${PS}$rtjar" "${@}"
+}
+
+run() {
+ $JDKDIR/bin/java -classpath "$utiljar${PS}$rtjar${PS}$ccdir" "${@}"
+}
+
+testAjc() {
+ argfile="$1"
+ shift
+ [ -n "$VERBOSE" ] && echo "# $1"
+ [ -f "$argfile" ] || errMssg "testAjc argfile: $1" 3
+ main=`getMain "$argfile"`
+ [ -n "$main" ] || errMssg "testAjc no main for argfile: $argfile" 3
+ compile -argfile "$argfile" "${@}" || errMssg "testAjc compile 1 fail: $argfile" 3
+ run "$main" || errMssg "testAjc run 1 fail: $argfile" 3
+ compile @"$argfile" "${@}" || errMssg "testAjc compile 2 fail: $argfile" 3
+ run "$main" || errMssg "testAjc run 2 fail: $argfile" 3
+}
+
+createUtilJar() {
+ mkdir util
+ cat > util/Util.java <<EOF
+package util;
+public class Util {
+ public static void signal(String label, String[] names) {
+ boolean printing = $printing;
+ if (printing) {
+ StringBuffer sb = new StringBuffer();
+ sb.append(label);
+ sb.append("=[");
+ for (int i = 0; i < names.length; i++) {
+ if (i > 0) sb.append(", ");
+ sb.append(names[i]);
+ }
+ sb.append("]");
+ System.out.println(sb.toString());
+ }
+ }
+}
+EOF
+compile util/Util.java
+"$JDKDIR/bin/jar" cf "$utiljar" -C classes .
+rm -rf util
+}
+
+getArgFiles() {
+ name="$1"
+ find . -name "$1"\*.lst | sed 's|./||'
+}
+
+echoSetup() {
+cat<<EOF
+##### setup for $0
+ JDKDIR: $JDKDIR
+ AJ_BASE: $AJ_BASE
+ uname -a: `uname -a`
+EOF
+}
+
+############################################################## execution
+printing=true # must be true or false
+JDKDIR="${JDKDIR:-c:/home/apps/jdk13}"
+AJ_BASE="${AJ_BASE:-c:/home/wes/aj/aj-dist/tools}"
+[ -d "$JDKDIR" ] || errMssg "require JDKDIR=$JDKDIR" 3
+[ -d "$AJ_BASE" ] || errMssg "require AJ_BASE=$AJ_BASE" 3
+toolsjar="$AJ_BASE/lib/aspectjtools.jar"
+rtjar="$AJ_BASE/lib/aspectjrt.jar"
+utiljar="$AJ_BASE/lib/argfilesUtil.jar"
+[ -f "$toolsjar" ] || errMssg "require toolsjar=$toolsjar" 3
+[ -f "$rtjar" ] || errMssg "require rtjar=$rtjar" 3
+[ -f "$utiljar" ] || createUtilJar
+echoSetup
+
+d=temp`basename $0`
+[ -d $d ] && rm -rf $d
+mkdir $d && cd $d
+export globalClasses='bad dir '
+name=`generateMinimalSource`
+for i in `getArgFiles "$name"` ; do
+ testAjc "$i" # expecting CE, not stack trace
+done
+
+echo "tests passed if no compiler failures, only output"
+
diff --git a/tests/product/testScripts/ajdocTests.sh b/tests/product/testScripts/ajdocTests.sh new file mode 100644 index 000000000..7c664ad74 --- /dev/null +++ b/tests/product/testScripts/ajdocTests.sh @@ -0,0 +1,148 @@ +#!/bin/sh
+# info: test ajc command line
+# syntax: $0 (define JDKDIR and AJ_BASE)
+# @testcase PR#655 ajc errors when output dir is bad
+# @process-test ajdoc ajdocTests.sh # tests for PR628, PR688, PR711
+
+[ -n "$DEBUG" ] && set -vx
+
+errMssg() {
+ [ -n "$1" ] && echo "## $0 $1"
+ [ -n "$2" ] && exit "$2"
+}
+
+runAjdoc() {
+
+ ccdir="${globalClasses:-classes}"
+ [ -d "$ccdir" ] || mkdir "$ccdir"
+ rm -rf "$ccdir"/*
+ #export CLASSPATH="$jdktoolsjar"
+ #$JDKDIR/bin/java -jar c:/home/wes/aj/aj-build-modules/jars/ajdoc.jar \
+ # -d "$ccdir" -classpath "$rtjar" "${@}"
+ $JDKDIR/bin/java -classpath "$jdktoolsjar${PS}$toolsjar" org.aspectj.tools.ajdoc.Main \
+ -d "$ccdir" -classpath "$rtjar" "${@}"
+}
+
+
+declareWarningDoc() {
+## test of declare warnings - which are not documented but should be?
+echo "## warning - simple declare warning currently causes compiler failure"
+cat>DeclareWarningDoc.java<<EOF
+
+import java.io.PrintStream;
+
+ /** class javadoc */
+public class DeclareWarningDoc {
+ /** method javadoc */
+ public static void main (String[] args) {
+ System.out.println("here");
+ }
+}
+
+/** javadoc for aspect */
+aspect Warnings {
+ /** javadoc for declared warning - call inside method*/
+ declare warning :
+ call(void PrintStream.println(String))
+ : "use logger";
+
+ /** javadoc for declared warning - method execution */
+ declare warning :
+ execution(static void main(String[]))
+ : "using main";
+}
+EOF
+
+runAjdoc -private DeclareWarningDoc.java
+
+}
+pr688() {
+
+## todo test cases for
+# PR#628 - docs for method declared on target
+# PR#682 - fix ant should fail on compiler error (verified by inspection)
+
+cat>AjdocTest.java<<EOF
+
+/**
+ * @testcase PR#688 bad links cause ajdoc exceptions
+ * <ul>
+ * <li>link: {@link Aspect#ok()}</li>
+ * <li>link: {@link C#ok()}</li>
+ * <li>link: {@link C#bad}</li>
+ * <li>link: {@link Aspect#bad()} // fails iff ()</li>
+ * <li>link: {@link Aspect#bad}</li>
+ * </ul>
+ * @see Aspect#bad
+ * @see C#bad
+ * @see Aspect#ok()
+ * @see C#ok()
+ */
+public interface AjdocTest { }
+aspect Aspect { void ok() {} }
+class C { void ok() {} }
+
+EOF
+
+ runAjdoc -private AjdocTest.java
+}
+
+pr628() { ## PR#628 - also test case for PR#710, PR#711, PR#712
+ cat>AjdocTest.java<<EOF
+
+/** Test class comment */
+class Test { /* int i comment */ int i;}
+/** aspectj AjdocTest comment */
+public aspect AjdocTest { /** AjdocTest.ok() comment */ void Test.ok() {} }
+/** aspectj AnotherAspect comment */
+aspect AnotherAspect { /** ok() comment */ void ok() {} }
+/** class AnotherClass comment */
+class AnotherClass { /** aok() comment */ void aok() {} }
+
+
+EOF
+
+runAjdoc -private AjdocTest.java
+}
+
+## todo test cases for
+# PR#682 - fix ant should fail on compiler error (verified by inspection)
+
+
+############################################################## execution
+JDKDIR="${JDKDIR:-c:/home/apps/jdk13}"
+AJ_BASE="${AJ_BASE:-c:/home/wes/aj/aj-dist/tools}"
+[ -d "$JDKDIR" ] || errMssg "require JDKDIR=$JDKDIR" 3
+[ -d "$AJ_BASE" ] || errMssg "require AJ_BASE=$AJ_BASE" 3
+toolsjar="$AJ_BASE/lib/aspectjtools.jar"
+jdktoolsjar="$JDKDIR/lib/tools.jar"
+rtjar="$AJ_BASE/lib/aspectjrt.jar"
+[ -f "$toolsjar" ] || errMssg "require toolsjar=$toolsjar" 3
+[ -f "$rtjar" ] || errMssg "require rtjar=$rtjar" 3
+
+curdir=`pwd`
+d=temp`basename "$0" .sh`688
+[ -d $d ] && rm -rf $d
+mkdir $d && cd $d
+pr688
+cd "$curdir"
+
+
+d=temp`basename "$0" .sh`628
+[ -d $d ] && rm -rf $d
+mkdir $d && cd $d
+pr628
+cd "$curdir"
+
+echo "####### Warnings not documented - RFE"
+d=temp`basename "$0" .sh`declareWarningDoc
+[ -d $d ] && rm -rf $d
+mkdir $d && cd $d
+declareWarningDoc
+cd "$curdir"
+
+
+echo "####### PR#711 Expecting error message, not exception"
+runAjdoc -d missingDir -private AjdocTest.java
+
+# todo: clean up/evaluate
diff --git a/tests/product/testScripts/argfiles.sh b/tests/product/testScripts/argfiles.sh new file mode 100644 index 000000000..5c093a45a --- /dev/null +++ b/tests/product/testScripts/argfiles.sh @@ -0,0 +1,301 @@ +#!/bin/sh
+# info: test -argfile and @ variants
+# syntax: $0 (define JDKDIR and AJBASE)
+# @process-test ajc argfiles.sh # test -argfile and @ variants
+
+[ -n "$DEBUG" ] && set -vx
+
+errMssg() {
+ [ -n "$1" ] && echo "## $0 $1"
+ [ -n "$2" ] && exit "$2"
+}
+
+## @testcase (support) NPE with -argfile foo.lst with "*.java"
+testcaseDesign() {
+cat<<EOF
+## input variants
+command line: [ [-argfile | @] X <fileRef>{lst} ]...
+fileRef: [[local | relative | absolute] X [DOS|Unix|Mac]]
+file line: [ option | [@<fileRef>{lst} | <fileRef>{java|aj}] ]
+option: ajc options
+refLocality: [cwd | argfile]
+
+## white box
+- @, -argfile delegate to same file-creation method
+- direct locality matters: null used for for locals and..
+- indirect locality matters: referent varies
+
+## design
+-- structure
+- invocation
+ - could set up as unit tests of ConfigParser.java
+ - if so, have also to test delivery to ajc? e.g., do package names
+ get calculated correctly under different path variants?
+ Probably not an issue now, but perhaps later when source-path
+ searching is enabled.
+ - could invoke ajc.Main programmatically - can ajc be run repeatedly?
+ -> might be easier/safer to script, uncover [bash, DOS,...] shell quirks?
+-- test case variants
+- command-line
+ - test options
+ - ajc
+ - esp. multi-flag (-source 1.4) - separate lines?
+ - VM/Javac?
+ - @, -argfile is independent
+ - test 0, 1, 3 on same line, interspersed
+ - error: @java file, unflagged arg file
+- fileRef depends on locality:
+ - parm file: CWD, relative-up, relative down-up, absolute, wrong \/:
+ - relative and absolute traversing through directories with
+ spaces in them (not in package-named directories)
+ - file line: same, with * variants
+ - * variants: [*.java | *.aj] [ empty | 1 | n>1 ]
+- fileRef also depends on indirection path:
+ - add traversal cases
+ - 1-2 levels of indirection
+- need to think about whether indirection depends on locality reference
+ i.e., whether 1-2 levels of indirection need to be through
+ all locality types (CWD, relative...)
+- basic argfile
+ - options
+ - files
+ - @ref
+ - comments
+ - empty lines
+ - *.java, *.aj references - re
+
+## implementation
+- Source tree
+ - minimal, star, maximal: all need each other to compile
+ - some in default package, others in named packages
+ - some do not share the same source base (or file system?)
+ - files:
+ Minimal:
+ src/
+ Main.java
+ pack/Main.java
+ Star:
+ star/
+ Main.java
+ empty/
+ many/One.java
+ many/Two.java
+
+ Maximal:
+ src1/
+ Src1DefaultMain.java
+ pack1/Src1Pack1Main.java
+ pack2/Src1Pack2Main.java
+ src2/
+ Src2DefaultMain.java
+ pack1/Src2Pack1Main.java
+ pack2/Src2Pack2Main.java
+
+-
+
+EOF
+}
+
+generateCurrentSource() {
+ genSource "" Main "Main SomeClass" > Main.java
+ genSource "" SomeClass "Main SomeClass" > SomeClass.java
+
+ cat > current_Main_0.lst <<EOF
+*.java
+EOF
+ cat > current_SomeClass_0.lst <<EOF
+*.java
+EOF
+ echo "current"
+}
+
+generateMinimalSource() {
+ mkdir -p src src/pack
+ genSource "" Main "Main pack.Main" > src/Main.java
+ genSource pack Main "pack.Main" > src/pack/Main.java
+
+ cat > src/minimal_pack.Main_0.lst <<EOF
+pack/Main.java
+EOF
+ cat > src/minimal_Main_1.lst <<EOF
+Main.java
+pack/Main.java
+EOF
+ cat > src/pack/minimal_Main_2.lst <<EOF
+../Main.java
+Main.java
+EOF
+ cat > src/pack/minimal_Main_3.lst <<EOF
+../*.java
+*.java
+EOF
+ cat > minimal_Main_4.lst <<EOF
+@src/minimal_Main_1.lst
+EOF
+ cat > src/minimal_Main_5.lst <<EOF
+@minimal_Main_1.lst
+EOF
+ cat > src/minimal_Main_6.lst <<EOF
+@../src/minimal_Main_1.lst
+EOF
+ cat > src/minimal_Main_7.lst <<EOF
+// starting comment
+Main.java // end of line comment
+// middle comment
+pack/Main.java
+// end comment
+EOF
+ cat > src/minimal_Main_8.lst <<EOF
+*.java
+pack/*.java
+EOF
+ echo "minimal"
+}
+
+generateStarSource() {
+ echo "todo incomplete"
+ mkdir -p star star/many star/empty
+ genSource "" Main "Main many.One many.Two" > star/Main.java
+ genSource "many" Main "many.One many.Two" > star/many/One.java
+ genSource "many" Main "many.One many.Two" > star/many/Two.java
+ cat > star/star_Main_1.lst <<EOF
+*.java
+empty/*.java
+many/*.java
+EOF
+
+ mkdir src1/pack1 src1/pack2 src2/pack1 src2/pack2
+ refs="pack1.Src1Pack1Main pack2.Src1Pack2Main pack1.Src2Pack1Main pack2.Src2Pack2Main"
+ genSource "" Main "Src1Main $refs" > src1/Src1Main.java
+ genSource "" Main "Src2Main $refs" > src2/Src2Main.java
+ genSource "pack1" Main "$refs" > src1/pack1/Src1Pack1Main.java
+ genSource "pack2" Main "$refs" > src1/pack2/Src1Pack2Main.java
+ genSource "pack1" Main "$refs" > src2/pack1/Src2Pack1Main.java
+ genSource "pack2" Main "$refs" > src2/pack2/Src2Pack2Main.java
+}
+
+genSource() {
+ package="$1"
+ class="$2"
+ refs="$3"
+ if [ -z "$package" ] ; then
+ name="$class"
+ else
+ echo "package $package;"
+ name="$package.$class"
+ fi
+cat<<EOF
+public class $class {
+ public static final String NAME = "$name";
+ public static String[] ARGS = new String[]
+EOF
+ sep='{'
+ for i in $refs ; do
+ echo " $sep ${i}.NAME"
+ sep=','
+ done
+cat<<EOF
+ };
+ public static void main (String[] args) {
+ util.Util.signal(NAME + ".main",ARGS);
+ }
+} // class $class
+EOF
+}
+
+getMain() {
+ [ -n "$1" ] && echo "$1" | sed 's|.*_\([^_][^_]*\)_.*|\1|'
+}
+
+compile() {
+ [ -d classes ] || mkdir classes
+ rm -rf classes/*
+ $JDKDIR/bin/java -classpath "$toolsjar" org.aspectj.tools.ajc.Main \
+ -d classes -classpath "$utiljar${PS}$rtjar" "${@}"
+}
+
+run() {
+ $JDKDIR/bin/java -classpath "$utiljar${PS}$rtjar${PS}classes" "${@}"
+}
+
+testAjc() {
+ argfile="$1"
+ [ -n "$VERBOSE" ] && echo "# $1"
+ [ -f "$argfile" ] || errMssg "testAjc argfile: $1" 3
+ main=`getMain "$argfile"`
+ [ -n "$main" ] || errMssg "testAjc no main for argfile: $1" 3
+ compile -argfile "$argfile" || errMssg "testAjc compile 1 fail: $1" 3
+ run "$main" || errMssg "testAjc run 1 fail: $1" 3
+ compile @"$argfile" || errMssg "testAjc compile 2 fail: $1" 3
+ run "$main" || errMssg "testAjc run 2 fail: $1" 3
+}
+
+createUtilJar() {
+ mkdir util
+ cat > util/Util.java <<EOF
+package util;
+public class Util {
+ public static void signal(String label, String[] names) {
+ boolean printing = $printing;
+ if (printing) {
+ StringBuffer sb = new StringBuffer();
+ sb.append(label);
+ sb.append("=[");
+ for (int i = 0; i < names.length; i++) {
+ if (i > 0) sb.append(", ");
+ sb.append(names[i]);
+ }
+ sb.append("]");
+ System.out.println(sb.toString());
+ }
+ }
+}
+EOF
+compile util/Util.java
+"$JDKDIR/bin/jar" cf "$utiljar" -C classes .
+rm -rf util
+}
+
+getArgFiles() {
+ name="$1"
+ find . -name "$1"\*.lst | sed 's|./||'
+}
+
+echoSetup() {
+cat<<EOF
+##### setup for $0
+ JDKDIR: $JDKDIR
+ AJ_BASE: $AJ_BASE
+ uname -a: `uname -a`
+EOF
+}
+
+############################################################## execution
+printing=true # must be true or false
+JDKDIR="${JDKDIR:-c:/home/apps/jdk13}"
+AJ_BASE="${AJ_BASE:-c:/home/wes/aj/aj-dist/tools}"
+[ -d "$JDKDIR" ] || errMssg "require JDKDIR=$JDKDIR" 3
+[ -d "$AJ_BASE" ] || errMssg "require AJ_BASE=$AJ_BASE" 3
+toolsjar="$AJ_BASE/lib/aspectjtools.jar"
+rtjar="$AJ_BASE/lib/aspectjrt.jar"
+utiljar="$AJ_BASE/lib/argfilesUtil.jar"
+[ -f "$toolsjar" ] || errMssg "require toolsjar=$toolsjar" 3
+[ -f "$rtjar" ] || errMssg "require rtjar=$rtjar" 3
+[ -f "$utiljar" ] || createUtilJar
+echoSetup
+
+d=tempArgfiles
+[ -d $d ] && rm -rf $d
+mkdir $d && cd $d
+
+name=`generateCurrentSource`
+for i in `getArgFiles "$name"` ; do testAjc "$i"; done
+
+name=`generateMinimalSource`
+for i in `getArgFiles "$name"` ; do testAjc "$i"; done
+
+# re-run without src prefix..
+cd src
+for i in `getArgFiles "$name"` ; do testAjc "$i"; done
+echo "tests passed if no compiler failures, only output"
+
diff --git a/tests/product/testScripts/cmdline11/app/Main.java b/tests/product/testScripts/cmdline11/app/Main.java new file mode 100644 index 000000000..d3020f5dc --- /dev/null +++ b/tests/product/testScripts/cmdline11/app/Main.java @@ -0,0 +1,62 @@ + +package app; + +import java.util.*; + +public class Main { + public static void main (String[] args) { + if ((null == args) || (2 > args.length)) { + args = new String[] { "a use case", "a user" }; + } + new UseCase(args[0]).run(new User(args[1])); + } +} + +interface Action { + void doAction(User user); +} + +class User { + String name; + User(String name) { + this.name = name; + } + public String toString() { return name; } +} + +class UseCase implements Runnable { + String name; + User user; + List actions; + + UseCase(String name) { + this.name = name; + this.actions = new ArrayList(); + } + public void setUser(User user) { + this.user = user; + } + public void run() { + run(user); + } + public void run(User user) { + List curActions = loadActions(); + for (Iterator iter = curActions.iterator(); iter.hasNext();) { + ((Action) iter.next()).doAction(user); + } + } + public void addAction(Action action) { + if (null != action) { + actions.add(action); + } + } + + public String toString() { return name; } + + protected List loadActions() { + return actions; + } + +} + + diff --git a/tests/product/testScripts/cmdline11/myprofile/MyProfile.java b/tests/product/testScripts/cmdline11/myprofile/MyProfile.java new file mode 100644 index 000000000..b14ca583a --- /dev/null +++ b/tests/product/testScripts/cmdline11/myprofile/MyProfile.java @@ -0,0 +1,13 @@ + +package myprofile; + +import profile.Profile; + +public aspect MyProfile extends Profile { + protected pointcut withinSystemClasses() : + within(java..*) || within(javax..*) || within(com.sun..*); + + /** blunt: target all method executions outside system classes */ + protected pointcut targets() : !withinSystemClasses() + && execution(* *(..)); +} diff --git a/tests/product/testScripts/cmdline11/profile/Profile.java b/tests/product/testScripts/cmdline11/profile/Profile.java new file mode 100644 index 000000000..daa1659ca --- /dev/null +++ b/tests/product/testScripts/cmdline11/profile/Profile.java @@ -0,0 +1,39 @@ + +package profile; + +import org.aspectj.lang.*; + +/** + * Profile execution time of join points + * by making a concrete aspect which defines <tt>targets()</tt>, + * if not <code>register(JoinPoint)</code> + * and <code>signal(Object, long, long)</code>. + */ +public abstract aspect Profile { + + /** + * Identify join points to profile. + * Those within the lexical extent of Profile + * or its subtypes will be excluded from profiling. + */ + protected abstract pointcut targets(); + + Object around() : targets() && !within(Profile+) { + final Object key = register(thisJoinPoint); + final long startTime = System.currentTimeMillis(); + try { + return proceed(); + } finally { + signal(key, startTime, System.currentTimeMillis()); + } + } + protected Object register(JoinPoint jp) { + return Thread.currentThread().getName() + " -- " + jp; + } + protected void signal(Object key, long start, long end) { + long duration = end - start; + String tag = (duration == 0 ? "none" : duration < 100 ? "fast" : "slow"); + //System.err.println(duration + " " + start + " - " + end + ": " + key); + System.err.println(tag + ": " + key); + } +} diff --git a/tests/product/testScripts/cmdline11/script.sh b/tests/product/testScripts/cmdline11/script.sh new file mode 100644 index 000000000..acba65774 --- /dev/null +++ b/tests/product/testScripts/cmdline11/script.sh @@ -0,0 +1,117 @@ +#!/bin/sh
+# run sample use cases
+[ -z "$DEBUG" ] || set -vx
+VERBOSE="${VERBOSE}"
+
+# define and export ajc, JDKDIR
+ajc="${ajc:-ajc}"
+ajrt="`dirname "${ajc}"`/../lib/aspectjrt.jar"
+JAVA_HOME="${JAVA_HOME:-`type java | sed -n '/\/bin\/java/s|/bin/java.*||'`}"
+JAVA="$JAVA_HOME/bin/java"
+JAVAC="$JAVA_HOME/bin/javac"
+JAR="$JAVA_HOME/bin/jar"
+PS=";" ### XXX windows
+
+## for direct access to eclipse
+useEclipse="${useEclipse}"
+if [ ! -f "$ajrt" -o -n "$useEclipse" ] ; then
+ modulesDir=`dirname "$0"`/../../../../modules
+ if [ ! -d "$modulesDir/build/src" ] ; then
+ modulesDir=`dirname "$0"`/../../../../../modules
+ fi
+ [ ! -d "$modulesDir/build/src" ] && exit 42
+ main=app.Main
+ ws="$modulesDir"
+ for i in asm bridge bcweaver org.aspectj.ajdt.core org.eclipse.jdt.core util ; do
+ ccp="$ccp;$ws/$i/bin"
+ done
+ ccp="$ccp;$ws/lib/eclipse2.0/jdtDepends.jar;$ws/lib/bcel/bcel.jar"
+ ajrt="$ws/runtime/bin"
+ [ -d "$ajrt" ] && useEclipse=yesUseEclipse
+fi
+
+compile() {
+ [ -n "$VERBOSE" ] && echo "compile ${@}"
+ if [ -n "$useEclipse" ] ; then
+ $JAVA -classpath "$ccp" org.aspectj.tools.ajc.Main "${@}"
+ else
+ $ajc "${@}"
+ fi
+}
+
+cleanDirs() {
+ [ -d jars ] || mkdir jars
+ [ -d classes ] || mkdir classes
+ rm -rf classes/*
+ for i in profile myprofile app; do mkdir classes/$i ; done
+}
+
+makeJar() {
+ $JAR cfM jars/$1.jar -C classes .
+ cleanDirs
+}
+runTest() {
+ runcp="${1:-$ajrt${PS}classes}"
+ name="${2:-default}"
+ [ -n "$VERBOSE" ] && echo "run ${@}"
+ $JAVA -classpath "$runcp" $main \
+ > $name.out.txt 2> $name.err.txt
+ if [ ! "$name" = "expected" ] ; then
+ diffResult=PASS
+ for i in out err; do
+ diff expected.$i.txt $name.$i.txt || diffResult=FAIL
+ [ -n "$VERBOSE" ] && wc -l expected.$i.txt $name.$i.txt
+ done
+ echo "${diffResult}: $runcp"
+ fi
+}
+
+## 0: setup
+cd `dirname "$0"`
+cleanDirs
+find . -name \*.java | sed 's|^./||' > files.lst
+grep -l aspect `cat files.lst` | sed 's|^./||' > aspects.lst
+grep -L aspect `cat files.lst` | sed 's|^./||' > java.lst
+
+## 1: compile all from sources
+compile -d classes -classpath "$ajrt" -argfile files.lst
+makeJar compileAll
+runTest "$ajrt${PS}jars/compileAll.jar" expected
+
+## 2: generate and weave user library with aspect sources
+ # note: relies on unwoven classes not being flagged for not-weaving?
+compile -d classes \
+ -classpath "$ajrt" \
+ -argfile java.lst
+makeJar compileJava
+compile -d classes \
+ -injars jars/compileJava.jar \
+ -classpath "$ajrt" \
+ -argfile aspects.lst
+makeJar weaveUserLib
+runTest "$ajrt${PS}jars/weaveUserLib.jar" weaveUserLib
+
+## 3: generate aspect library
+compile -d classes \
+ -classpath "$ajrt" \
+ -noweave \
+ -outjar jars/aspectLib.jar \
+ -argfile aspects.lst
+#makeJar aspectLib
+
+## 3a: weave aspect library with user sources
+compile -d classes \
+ -aspectpath jars/aspectLib.jar \
+ -classpath "$ajrt" \
+ -outjar jars/weaveAspectLib.jar \
+ -argfile java.lst
+#makeJar weaveAspectLib
+runTest "$ajrt${PS}jars/aspectLib.jar${PS}jars/weaveAspectLib.jar" weaveAspectLib
+
+## 3b: weave aspect library with user library
+compile -d classes \
+ -aspectpath jars/aspectLib.jar \
+ -injars jars/compileJava.jar \
+ -classpath "$ajrt"
+makeJar weaveAllLib
+runTest "$ajrt${PS}jars/aspectLib.jar${PS}jars/weaveAllLib.jar" weaveAllLib
diff --git a/tests/product/testScripts/publicIntroduction.sh b/tests/product/testScripts/publicIntroduction.sh new file mode 100644 index 000000000..15382cf80 --- /dev/null +++ b/tests/product/testScripts/publicIntroduction.sh @@ -0,0 +1,128 @@ +#!/bin/sh
+# @testcase public introductions not visible in libraries given to javac or jikes
+# @testcase synthetic members should not be visible from libraries given to ajc todo??
+# @process-test ajc publicIntroduction.sh # two testcase for public introductions
+
+[ -n "$DEBUG" ] && set -vx
+
+echo "before running: define (install) AJ_BASE and add #!/bin/sh to scripts"
+scriptDir=`dirname "$0"`
+scriptName=`basename "$0" .sh`
+tempDir=temp${scriptName}
+JDKDIR="${JDKDIR:-${JAVA_HOME:-`type java | sed -n '/bin\/java/s|/bin/java.*||p'`}}"
+AJ_BASE="${AJ_BASE:-`type ajc | sed -n '/bin\/ajc/s|/bin/ajc.*||p'`}"
+ajLib="${AJ_BASE}/lib/aspectjrt.jar"
+PS="${PS:-;}" # todo
+
+errMssg() {
+ [ -n "$1" ] && echo "## FAIL: $1"
+ [ -n "$2" ] && exit "$2"
+}
+
+makeSources() {
+ cat > Javap.java<<EOF
+public class Javap {
+ interface I {
+ void i();
+ }
+ class C {}
+ static aspect A {
+ public void I.i() {}
+ declare parents: C implements I;
+ }
+}
+EOF
+
+ cat > Target.java <<EOF
+public class Target {
+ // regular members
+ public long publicLong;
+ public long getPublicLong() { return publicLong; }
+}
+
+aspect A {
+ // introduced members
+ public int Target.publicInt;
+ public int Target.getPublicInt() {
+ return publicInt;
+ }
+ public static int Target.staticPublicInt;
+ public static int Target.getStaticPublicInt() {
+ return staticPublicInt;
+ }
+}
+
+EOF
+ mkdir user
+ cat > user/TargetUser.java<<EOF
+public class TargetUser {
+ public static void main (String[] args) {
+ Target me = new Target();
+ // regular members
+ long l = me.publicLong;
+ l = me.getPublicLong();
+ // introduced members
+ int i = me.publicInt;
+ i = me.getPublicInt();
+ i = me.getStaticPublicInt();
+ i = me.staticPublicInt;
+ }
+}
+EOF
+}
+
+#############################################################
+curdir=`pwd`
+[ ! -d "$tempDir" ] && mkdir -p "$tempDir"
+cd "$tempDir" || errMssg "unable to creat temp dir" 3
+
+[ -z "$JDKDIR" ] \
+ && errMssg "expecting \$JDKDIR/bin/java: $JDKDIR/bin/java" 3
+
+[ -z "$AJ_BASE" ] \
+ && errMssg "expecting \$AJ_BASE/bin/ajc: $AJ_BASE/bin/ajc" 3
+
+makeSources
+
+mkdir classes
+### javap case - PR#649
+cmdName=ajc.javap
+"$AJ_BASE/bin/ajc" -classpath "$ajLib" \
+ -d classes Javap.java \
+ > $cmdName.txt 2>&1 \
+ || errMssg "$cmdName: `cat $cmdName.txt`" 3
+
+cmdName=javap
+"$JDKDIR/bin/javap" -classpath "$ajLib${PS}classes" Javap \
+ > $cmdName.txt 2>&1 \
+ || errMssg "$cmdName: `cat $cmdName.txt`" 3
+
+# javac case - PR#646
+cmdName=ajc
+"$AJ_BASE/bin/ajc" -classpath "$ajLib" \
+ -d classes Target.java \
+ > $cmdName.txt 2>&1 \
+ || errMssg "$cmdName: `cat ../$cmdName.txt`" 3
+
+cd user
+
+cmdName=../javac
+"$JDKDIR/bin/javac" -classpath ../classes -d ../classes TargetUser.java \
+ > $cmdName.txt 2>&1 \
+ || errMssg "$cmdName: `cat $cmdName.txt`" 3
+
+cd ..
+
+cmdName=java
+"$JDKDIR/bin/java" -classpath "$ajLib${PS}classes" TargetUser \
+ > $cmdName.txt 2>&1 \
+ || errMssg "$cmdName: `cat $cmdName.txt`" 3
+
+cd "$curdir"
+rm -rf "$tempDir"
+
+echo "tests passed if they got to this point..."
+
+
+
+
diff --git a/tests/pureJava/AJError.java b/tests/pureJava/AJError.java new file mode 100644 index 000000000..b76e431af --- /dev/null +++ b/tests/pureJava/AJError.java @@ -0,0 +1,500 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +public class AJError +{ +/* + + + + + + + + + + + + + + + { + + + } + + + { + + { + + } + + + { + + + + + + + + { + + + + + + + + + + + + + + { + + + + + + + + + + + + + + + + + { + + + } + } + + } + + + + + + + { + + + + { + + + { + + + { + + } + + { + + } + } + + { + + } + } + } + + + + + + + + + + + + } + + { + + } + + { + + } + + { + + } + + { + + } + } + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + { + + } + + + { + + } +*/ + + + /* + + { + + + + { + + } + + + { + + + + + + } + } + + + { + + + + + } + + + + { + + + + + + { + + } + + + + + } + + + { + + + + + + { + + + + + + + } + + + } + + + { + + + } + + + { + + { + + } + + { + + + + } + + + { + + } + + } + + + + { + + } + + + { + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +*/ + + + + + + + + + + + + + + + + + + + + + + + + + + + +public static void main (String[] args) { } +} diff --git a/tests/pureJava/Abstracts.java b/tests/pureJava/Abstracts.java new file mode 100644 index 000000000..6c4271a0a --- /dev/null +++ b/tests/pureJava/Abstracts.java @@ -0,0 +1,28 @@ +import org.aspectj.testing.Tester; + +public class Abstracts { + static StringBuffer log = new StringBuffer(); + public static void main(String[] args) { + new D().m(); + Tester.checkEqual(log.toString(), "D.m(), A.m(), A.m(), "); + } + + public void m() { + log.append("A.m(), "); + } +} + +abstract class C extends Abstracts { + public abstract void m(); + public void n() { + super.m(); + } +} + +class D extends C { + public void m() { + Abstracts.log.append("D.m(), "); + super.n(); + n(); + } +} diff --git a/tests/pureJava/AnonFolding.java b/tests/pureJava/AnonFolding.java new file mode 100644 index 000000000..cc732ee83 --- /dev/null +++ b/tests/pureJava/AnonFolding.java @@ -0,0 +1,16 @@ +import org.aspectj.testing.Tester; + +public class AnonFolding { + public static void main(String[] args) { + Tester.checkEqual(ANON.toString(), "ANON"); + } + + public static Object ANON = new Object() { + public Object m() { return ANON; } + public String toString() { + Tester.checkEqual(ANON, m(), "reference to itself"); + return "ANON"; + } + + }; +} diff --git a/tests/pureJava/AnonymousMethodLookup.java b/tests/pureJava/AnonymousMethodLookup.java new file mode 100644 index 000000000..414eee735 --- /dev/null +++ b/tests/pureJava/AnonymousMethodLookup.java @@ -0,0 +1,9 @@ +public class AnonymousMethodLookup { + public static void main(String[] args) { + new C() { { foo(); } }; + } +} + +class C { + void foo() {} +} diff --git a/tests/pureJava/AnonymousWithInner.java b/tests/pureJava/AnonymousWithInner.java new file mode 100644 index 000000000..85d236cde --- /dev/null +++ b/tests/pureJava/AnonymousWithInner.java @@ -0,0 +1,35 @@ +// anonymous inner classes with inner types + +import org.aspectj.testing.Tester; + +public class AnonymousWithInner { + + public static void main(String[] args) { + new AnonymousWithInner().foo(); + // we're getting two 'cause we called toString twice + Tester.checkEvents(new String[] { "x = 37", "x = 37" }); + } + + int x = 37; + + void foo() { + Object inner = new Object() { + class Inner { + void m() { + Tester.event("x = " + x); + } + public String toString() { + m(); + return "Inner"; + } + } + Object m2() { + return new Inner(); + } + }.m2(); + inner.toString(); + + Tester.checkEqual(inner.toString(), "Inner"); + } +} + diff --git a/tests/pureJava/AssertInMethod.java b/tests/pureJava/AssertInMethod.java new file mode 100644 index 000000000..bd8afc6da --- /dev/null +++ b/tests/pureJava/AssertInMethod.java @@ -0,0 +1,22 @@ + +import org.aspectj.testing.Tester; + +/** @testcase PUREJAVA compiling asserts using 1.3 (requires ajc run under JDK 1.3) */ +public class AssertInMethod { + public static void main (String[] args) { + AssertInMethod.class.getClassLoader().setClassAssertionStatus("C", true); + boolean result = false; + try { + new C().internalMethod(null); + } catch (AssertionError e) { + result = true; + } + Tester.check(result, "assert not thrown"); + } +} + +class C { + void internalMethod( Object o) { + assert o != null ; + } +} diff --git a/tests/pureJava/AssertInOnePackage.java b/tests/pureJava/AssertInOnePackage.java new file mode 100644 index 000000000..3d822680e --- /dev/null +++ b/tests/pureJava/AssertInOnePackage.java @@ -0,0 +1,235 @@ +// attempts to be a comprehensive test of assert statements that have +// only intra-package behaviour. + +import org.aspectj.testing.Tester; + +public class AssertInOnePackage { + public static void main(String[] args) { + turnOnAssertions(); + runTests(); + } + + // we first turn on assertions. This is run _before_ any other + // method is run, so the only classes that are loaded are + // AssertInOnePackage. + static void turnOnAssertions() { + ClassLoader cl = AssertInOnePackage.class.getClassLoader(); + + cl.setClassAssertionStatus("StaticInitializerOnHelper", true); + cl.setClassAssertionStatus("StaticInitializerOffHelper", false); + + cl.setClassAssertionStatus("ConstructorOnHelper", true); + cl.setClassAssertionStatus("ConstructorOffHelper", false); + + cl.setClassAssertionStatus("InnerStaticInitializerOnHelper", true); + cl.setClassAssertionStatus("InnerStaticInitializerOffHelper", false); + + cl.setClassAssertionStatus("InnerStaticInitializerOnHelperI", true); + cl.setClassAssertionStatus("InnerStaticInitializerOffHelperI", false); + + cl.setClassAssertionStatus("CycleSubOn", true); + cl.setClassAssertionStatus("CycleSubOff", false); + + } + + // In the following tests, the assignment to the static field + // translates into a putstatic bytecode, which, by section 5.5 of + // the JVM spec, will initialize the class. + static void runTests() { + + check(true, + "static initializer should throw", + new Runnable() { + void run() { StaticInitializerOnHelper.x = 3; } + }); + check(false, + "static initializer should not throw", + new Runnable() { + void run() { StaticInitializerOffHelper.x = 3; } + }); + + check(true, + "constructor should throw", + new Runnable() { + void pre() { ConstructorOnHelper.x = 3; } + void run() { new ConstructorOnHelper(); } + + }); + check(false, + "static initializer should not throw", + new Runnable() { + void pre() { ConstructorOffHelper.x = 3; } + void run() { new ConstructorOffHelper(); } + }); + + check(true, + "inner static initializer should throw", + new Runnable() { + void run() { InnerStaticInitializerOnHelper.Inner.x = 3; } + }); + check(false, + "inner static initializer should not throw", + new Runnable() { + void run() { InnerStaticInitializerOffHelper.Inner.x = 3; } + }); + + check(true, + "inner static initializer of interface should throw", + new Runnable() { + void run() { InnerStaticInitializerOnHelperI.Inner.x = 3; } + }); + check(false, + "inner static initializer of interface should not throw", + new Runnable() { + void run() { InnerStaticInitializerOffHelperI.Inner.x = 3; } + }); + + + check(true, + "static initializer in cyclic should throw", + new Runnable() { + void run() { CycleSubOn.x = 3; } + }); + check(true, + "static initializer in cyclic should always throw", + new Runnable() { + void run() { CycleSubOff.x = 3; } + }); + + } + + + static void check(boolean shouldThrow, String message, Runnable r) { + r.pre(); + boolean threw = false; + try { + r.run(); + } catch (AssertionError e) { + threw = true; + } + if (threw != shouldThrow) { + //System.err.println(message); + Tester.check(false, message); + } + r.post(); + } + + static class Runnable { + void pre() {} + void run() {} + void post() {} + } +} + +// ------------------------------ + +// Asserts in a static initializer of a class + +class StaticInitializerOnHelper { + static int x; + static { + assert false; + } +} + +class StaticInitializerOffHelper { + static int x; + static { + assert false; + } +} + +// ------------------------------ + +// Asserts in a constructor of a class. This stands in for all +// "normal" assertion, so I'm not going to bother writing asserts in +// other post-class-initialization contexts. + +class ConstructorOnHelper { + static int x; + ConstructorOnHelper() { + assert false; + } +} + +class ConstructorOffHelper { + static int x; + ConstructorOffHelper() { + assert false; + } +} + +// ------------------------------ + +// Asserts in a static initializer of an inner class. + +class InnerStaticInitializerOnHelper { + static class Inner { + static int x; + static { + assert false; + } + } +} + +class InnerStaticInitializerOffHelper { + static class Inner { + static int x; + static { + assert false; + } + } +} + +// ------------------------------ + +// Asserts in a static initializer of an inner class of an interface. + +interface InnerStaticInitializerOnHelperI { + static class Inner { + static int x; + static { + assert false; + } + } +} + +interface InnerStaticInitializerOffHelperI { + static class Inner { + static int x; + static { + assert false; + } + } +} + + +// ------------------------------ + +// Asserts in the subclass called in an initialization inversion + +class CycleSuperOn { + static { + CycleSubOn.foo(); + } +} +class CycleSubOn extends CycleSuperOn { + static int x; + static void foo() { + assert false; + } +} + +class CycleSuperOff { + static { + CycleSubOff.foo(); + } +} +class CycleSubOff extends CycleSuperOff { + static int x; + static void foo() { + assert false; + } +} + + diff --git a/tests/pureJava/Asserts.java b/tests/pureJava/Asserts.java new file mode 100644 index 000000000..09ea01084 --- /dev/null +++ b/tests/pureJava/Asserts.java @@ -0,0 +1,34 @@ +import org.aspectj.testing.Tester; + +public class Asserts { + public static void main(String[] args) { + Asserts.class.getClassLoader().setClassAssertionStatus("TestAsserts", true); + TestAsserts.main(args); + } +} + +class TestAsserts { + public static void main(String[] args) { + //C c = new C(); + //C.m(9); + int x = 0; + assert x < 2; + assert x <10 : 3; + + boolean pass = false; + try { assert x > 2; } + catch (AssertionError e) { pass = true; } + finally { Tester.check(pass, "no expected assertion-1"); } + + pass = false; + try { assert x >10 : 3; } + catch (AssertionError e) { pass = true; } + finally { Tester.check(pass, "no expected assertion-2"); } + } + + static class C { + static void m(int i ) { + assert i < 10; + } + } +} diff --git a/tests/pureJava/AssertsCF.java b/tests/pureJava/AssertsCF.java new file mode 100644 index 000000000..dece98837 --- /dev/null +++ b/tests/pureJava/AssertsCF.java @@ -0,0 +1,13 @@ +import org.aspectj.testing.Tester; + +public class AssertsCF { + public static void main(String[] args) { + int x = 0; + boolean b; + + assert b; // ERR: b might not be assigned + + assert b=false; + if (b) {} // ERR: b might not be assigned + } +} diff --git a/tests/pureJava/AssertsCF1.java b/tests/pureJava/AssertsCF1.java new file mode 100644 index 000000000..2e74ff4ca --- /dev/null +++ b/tests/pureJava/AssertsCF1.java @@ -0,0 +1,7 @@ +import org.aspectj.testing.Tester; + +public class AssertsCF1 { + public static void main(String[] args) { + assert 1; //ERR: boolean expected + } +} diff --git a/tests/pureJava/AssertsCF2.java b/tests/pureJava/AssertsCF2.java new file mode 100644 index 000000000..cdfb646bd --- /dev/null +++ b/tests/pureJava/AssertsCF2.java @@ -0,0 +1,8 @@ +import org.aspectj.testing.Tester; + +public class AssertsCF2 { + public static void main(String[] args) { + String s; + assert true: s; //ERR: s might not be assigned + } +} diff --git a/tests/pureJava/AssertsCv.java b/tests/pureJava/AssertsCv.java new file mode 100644 index 000000000..b6706f383 --- /dev/null +++ b/tests/pureJava/AssertsCv.java @@ -0,0 +1,344 @@ +import org.aspectj.testing.Tester; + +public class AssertsCv { + public static void main(String[] args) { + // programmatic enablement does not work after class is initialized + AssertsCv.class.getClassLoader().setClassAssertionStatus("AssertTest", true); + warnGlobalAssertions(); + AssertTest.main(args); + } + static void warnGlobalAssertions() { + boolean pass = true; + try { assert false; } + catch (AssertionError e) { pass = false; } + finally { + if (!pass) { + System.err.println("WARNING: assertions enabled in AssertsCv"); + } + } + } +} + +class AssertTest { + int x; + public static void main(String[] args) { + requireAssertions(); + testExpressions(); + testContexts(); + } + + static void testContexts() { + InnerTester.testExpressions(); + (new AssertTest()).new InnerInstanceTester().testExpressions(); + + // static initialization + boolean pass = false; + try { String s = InnerStaticInitFailure.class.getName(); } + catch (AssertionError e) { pass = true; } + catch (ExceptionInInitializerError e) { + Throwable t = e.getException(); // use getCause() in 1.4 + pass = (null != t) && (t instanceof AssertionError); + } + finally { Tester.check(pass, "no assertion in static initializer"); } + + AssertTest enclosing = new AssertTest(); + + // field initialization of inner class + pass = false; + try { enclosing.new InnerFieldInitFailure(); } + catch (AssertionError e) { pass = true; } + finally { Tester.check(pass, "no assertion in field initializer"); } + + // instance initialization of inner class + pass = false; + try { enclosing.new InnerInitFailure(); } + catch (AssertionError e) { pass = true; } + finally { Tester.check(pass, "no assertion in constructor"); } + + // anonymous inner class - method + pass = false; + boolean doingRun = false; + try { + enclosing.x = 1; + final int i = enclosing.x; + Runnable r = new Runnable() { + public void run() { + assert i != 1; + } + }; + doingRun = true; + r.run(); + } catch (AssertionError e) { pass = true; } + finally { + Tester.check(doingRun, "premature assertion in anonymous inner"); + Tester.check(pass, "no assertion in anonymous inner"); + } + enclosing.x = 0; + + if (false) { // disabled now as current javac/j2se bug XXX + // anonymous inner class - field initializer + pass = false; + try { + enclosing.x = 1; + Runnable r = new Runnable() { + int j = throwAssert(); + public void run() { } + int throwAssert() { assert false; return -100; } + }; + doingRun = true; + r.run(); + } + catch (AssertionError e) { pass = true; } + finally { + Tester.check(!doingRun, "missed assertion in anonymous inner"); + Tester.check(pass, "no assertion in anonymous inner"); + } + enclosing.x = 0; + } + } + + static void requireAssertions() { + boolean pass = false; + try { assert false; } + catch (AssertionError e) { pass = true; } + finally { Tester.check(pass, "assertions not enabled"); } + } + + static void testExpressions() { + // ---------- tests of not throwing assertions + // first is any boolean expression + int x = 0; + assert x < 2; + assert // parser questions + x<2 + ; + assert (x<2); + assert x < 2 ? true : false ; + assert x < 2 ? true : false : false ; + assert x < 2 ? true : false : "bug if assert thrown" ; + // If the first expression evaluates to true, + // the second expression is not evaluated + assert x == 0 : MyError.throwError("bug if error thrown"); + assert x < 2 ? true : false : MyError.throwError("bug if error thrown"); + + // ---------- tests of throwing assertions + // (if these fail, it may be Sun's bug...) + // touch expression2 type bases + try { assert x > 0 : 3; } + catch (AssertionError e) { check(e, "3"); } + try { assert x > 0 : 3f; } + catch (AssertionError e) { check(e, "3"); } + try { assert x > 0 : 3d; } + catch (AssertionError e) { check(e, "3"); } + try { assert x > 0 : 3l; } + catch (AssertionError e) { check(e, "3"); } + try { assert x > 0 : 'c'; } + catch (AssertionError e) { check(e, "c"); } + try { assert x > 0 : "String"; } + catch (AssertionError e) { check(e, "String"); } + try { assert x > 0 : new StringWrapper("String"); } + catch (AssertionError e) { check(e, "String"); } + try { assert x > 0 : result(true); } + catch (AssertionError e) { check(e, "true"); } + try { assert x > 0 : Boolean.FALSE ; } + catch (AssertionError e) { check(e, "false"); } + try { assert x > 0 : Boolean.FALSE ; } + catch (AssertionError e) { check(e, "false"); } + + // If an exception is thrown while either expression is being evaluated, + // the assert statement completes abruptly, throwing this exception + try { assert MyError.throwError("throwit"); } + catch (MyError e) { check(e, "throwit"); } + catch (AssertionError e) { Tester.check(false, "expected throwit-1"); } + + try { assert x > 0 : MyError.throwError("throwit"); } + catch (MyError e) { check(e, "throwit"); } + catch (AssertionError e) { Tester.check(false, "expected throwit-2"); } + + try { assert MyInnerError.throwError("throwit"); } + catch (MyInnerError e) { check(e, "throwit"); } + catch (AssertionError e) { Tester.check(false, "expected throwit-1"); } + + try { assert x > 0 : MyInnerError.throwError("throwit"); } + catch (MyInnerError e) { check(e, "throwit"); } + catch (AssertionError e) { Tester.check(false, "expected throwit-2"); } + } + + static void check(Error e, String prefix) { + String m = e.getMessage(); + Tester.check(m.startsWith(prefix), + "expected " + m + + " to start with " + prefix); + } + + static boolean result(boolean b ) { + return b; + } + private static class MyInnerError extends Error { + MyInnerError(String s) { super(s); } + static boolean throwError(String s) { + throw new MyInnerError(s); + } + } + private static class InnerTester { + // copy/paste from above + static void testExpressions() { + // ---------- tests of not throwing assertions + // first is any boolean expression + int x = 0; + assert x < 2; + assert // parser questions + x<2 + ; + assert (x<2); + assert x < 2 ? true : false ; + assert x < 2 ? true : false : false ; + assert x < 2 ? true : false : "bug if assert thrown" ; + // If the first expression evaluates to true, + // the second expression is not evaluated + assert x == 0 : MyError.throwError("bug if error thrown"); + assert x < 2 ? true : false : MyError.throwError("bug if error thrown"); + + // ---------- tests of throwing assertions + // (if these fail, it may be Sun's bug...) + // touch expression2 type bases + try { assert x > 0 : 3; } + catch (AssertionError e) { check(e, "3"); } + try { assert x > 0 : 3f; } + catch (AssertionError e) { check(e, "3"); } + try { assert x > 0 : 3d; } + catch (AssertionError e) { check(e, "3"); } + try { assert x > 0 : 3l; } + catch (AssertionError e) { check(e, "3"); } + try { assert x > 0 : 'c'; } + catch (AssertionError e) { check(e, "c"); } + try { assert x > 0 : "String"; } + catch (AssertionError e) { check(e, "String"); } + try { assert x > 0 : new StringWrapper("String"); } + catch (AssertionError e) { check(e, "String"); } + try { assert x > 0 : result(true); } + catch (AssertionError e) { check(e, "true"); } + try { assert x > 0 : Boolean.FALSE ; } + catch (AssertionError e) { check(e, "false"); } + try { assert x > 0 : Boolean.FALSE ; } + catch (AssertionError e) { check(e, "false"); } + + // If an exception is thrown while either expression is being evaluated, + // the assert statement completes abruptly, throwing this exception + try { assert MyError.throwError("throwit"); } + catch (MyError e) { check(e, "throwit"); } + catch (AssertionError e) { Tester.check(false, "expected throwit-1"); } + + try { assert x > 0 : MyError.throwError("throwit"); } + catch (MyError e) { check(e, "throwit"); } + catch (AssertionError e) { Tester.check(false, "expected throwit-2"); } + + try { assert MyInnerError.throwError("throwit"); } + catch (MyInnerError e) { check(e, "throwit"); } + catch (AssertionError e) { Tester.check(false, "expected throwit-1"); } + + try { assert x > 0 : MyInnerError.throwError("throwit"); } + catch (MyInnerError e) { check(e, "throwit"); } + catch (AssertionError e) { Tester.check(false, "expected throwit-2"); } + } + } + private class InnerInstanceTester { + // copy/paste from above, with exception of x variable + void testExpressions() { + // ---------- tests of not throwing assertions + // first is any boolean expression + x = 0; // variable from enclosing instance + assert x < 2; + assert // parser questions + x<2 + ; + assert (x<2); + assert x < 2 ? true : false ; + assert x < 2 ? true : false : false ; + assert x < 2 ? true : false : "bug if assert thrown" ; + // If the first expression evaluates to true, + // the second expression is not evaluated + assert x == 0 : MyError.throwError("bug if error thrown"); + assert x < 2 ? true : false : MyError.throwError("bug if error thrown"); + + // ---------- tests of throwing assertions + // (if these fail, it may be Sun's bug...) + // touch expression2 type bases + try { assert x > 0 : 3; } + catch (AssertionError e) { check(e, "3"); } + try { assert x > 0 : 3f; } + catch (AssertionError e) { check(e, "3"); } + try { assert x > 0 : 3d; } + catch (AssertionError e) { check(e, "3"); } + try { assert x > 0 : 3l; } + catch (AssertionError e) { check(e, "3"); } + try { assert x > 0 : 'c'; } + catch (AssertionError e) { check(e, "c"); } + try { assert x > 0 : "String"; } + catch (AssertionError e) { check(e, "String"); } + try { assert x > 0 : new StringWrapper("String"); } + catch (AssertionError e) { check(e, "String"); } + try { assert x > 0 : result(true); } + catch (AssertionError e) { check(e, "true"); } + try { assert x > 0 : Boolean.FALSE ; } + catch (AssertionError e) { check(e, "false"); } + try { assert x > 0 : Boolean.FALSE ; } + catch (AssertionError e) { check(e, "false"); } + + // If an exception is thrown while either expression is being evaluated, + // the assert statement completes abruptly, throwing this exception + try { assert MyError.throwError("throwit"); } + catch (MyError e) { check(e, "throwit"); } + catch (AssertionError e) { Tester.check(false, "expected throwit-1"); } + + try { assert x > 0 : MyError.throwError("throwit"); } + catch (MyError e) { check(e, "throwit"); } + catch (AssertionError e) { Tester.check(false, "expected throwit-2"); } + + try { assert MyInnerError.throwError("throwit"); } + catch (MyInnerError e) { check(e, "throwit"); } + catch (AssertionError e) { Tester.check(false, "expected throwit-1"); } + + try { assert x > 0 : MyInnerError.throwError("throwit"); } + catch (MyInnerError e) { check(e, "throwit"); } + catch (AssertionError e) { Tester.check(false, "expected throwit-2"); } + } + } + + static class InnerStaticInitFailure { + static { + int x = 0; + assert x > 1 : "throwing assert during class init"; + } + } + + class InnerFieldInitFailure { + int i = getValue(); + int getValue () { + int x = 0; + assert x > 1 : "throwing assert during field init"; + return -100; + } + } + + class InnerInitFailure { + InnerInitFailure() { + int x = 0; + assert x > 1 : "throwing assert during instance init"; + } + } +} + +class MyError extends Error { + MyError(String s) { super(s); } + static boolean throwError(String s) { + throw new MyError(s); + } +} + +class StringWrapper { + private String string; + StringWrapper(String s) { string = s; } + public String toString() { return string; } +} + diff --git a/tests/pureJava/BadContinueTarget.java b/tests/pureJava/BadContinueTarget.java new file mode 100644 index 000000000..7d3ebebb0 --- /dev/null +++ b/tests/pureJava/BadContinueTarget.java @@ -0,0 +1,9 @@ +public class BadContinueTarget { + + public static void main(String[] args) { + int i; + test: { + continue test; + } + } +} diff --git a/tests/pureJava/BadQualifiedNew.java b/tests/pureJava/BadQualifiedNew.java new file mode 100644 index 000000000..1fd76f49b --- /dev/null +++ b/tests/pureJava/BadQualifiedNew.java @@ -0,0 +1,9 @@ +public class BadQualifiedNew { + + public static void main(String[] args) { + new BadQualifiedNew().new Test(); + } + + static class Test { + } +} diff --git a/tests/pureJava/BigFrameTest.java b/tests/pureJava/BigFrameTest.java new file mode 100644 index 000000000..b6276a730 --- /dev/null +++ b/tests/pureJava/BigFrameTest.java @@ -0,0 +1,56 @@ +import org.aspectj.testing.Tester; + +public class BigFrameTest { + + public static void main(String[] args) { + foo(); + goo(); + } + + static void goo() { + int i = 10; + i += 128; + Tester.checkEqual(i, 138, "bad juju"); + } + + static void foo() { + int x000, x001, x002, x003, x004, x005, x006, x007, + x010, x011, x012, x013, x014, x015, x016, x017, + x020, x021, x022, x023, x024, x025, x026, x027, + x030, x031, x032, x033, x034, x035, x036, x037, + x040, x041, x042, x043, x044, x045, x046, x047, + x050, x051, x052, x053, x054, x055, x056, x057, + x060, x061, x062, x063, x064, x065, x066, x067, + x070, x071, x072, x073, x074, x075, x076, x077, + x100, x101, x102, x103, x104, x105, x106, x107, + x110, x111, x112, x113, x114, x115, x116, x117, + x120, x121, x122, x123, x124, x125, x126, x127, + x130, x131, x132, x133, x134, x135, x136, x137, + x140, x141, x142, x143, x144, x145, x146, x147, + x150, x151, x152, x153, x154, x155, x156, x157, + x160, x161, x162, x163, x164, x165, x166, x167, + x170, x171, x172, x173, x174, x175, x176, x177, + x200, x201, x202, x203, x204, x205, x206, x207, + x210, x211, x212, x213, x214, x215, x216, x217, + x220, x221, x222, x223, x224, x225, x226, x227, + x230, x231, x232, x233, x234, x235, x236, x237, + x240, x241, x242, x243, x244, x245, x246, x247, + x250, x251, x252, x253, x254, x255, x256, x257, + x260, x261, x262, x263, x264, x265, x266, x267, + x270, x271, x272, x273, x274, x275, x276, x277, + x300, x301, x302, x303, x304, x305, x306, x307, + x310, x311, x312, x313, x314, x315, x316, x317, + x320, x321, x322, x323, x324, x325, x326, x327, + x330, x331, x332, x333, x334, x335, x336, x337, + x340, x341, x342, x343, x344, x345, x346, x347, + x350, x351, x352, x353, x354, x355, x356, x357, + x360, x361, x362, x363, x364, x365, x366, x367, + x370, x371, x372, x373, x374, x375, x376, x377; + int x; int y; + int z = 3; + z += 4; + z = z * z; + ++z; + Tester.checkEqual(z, 50, "something odd"); + } +} diff --git a/tests/pureJava/BigOps.java b/tests/pureJava/BigOps.java new file mode 100644 index 000000000..461d9e48f --- /dev/null +++ b/tests/pureJava/BigOps.java @@ -0,0 +1,7475 @@ +// This is a GENERATED file. Use the scheme program at the end to +// regenerate. Note that in jdk 1.3, Float.MIN_VALUE does not have a +// proper constant value. If that ever gets fixed, look for "NOT +// CORRECT IN 1.3" and uncomment that line. + +import org.aspectj.testing.Tester; + +public strictfp class BigOps { + public static void main(String[] args) { + byteTest(); + shortTest(); + charTest(); + intTest(); + longTest(); + floatTest(); + doubleTest(); + booleanTest(); + } + + // -------- + // byte tests + static byte bytePlus(byte x) { return (byte) + x; } + static byte byteMinus(byte x) { return (byte) - x; } + static byte byteBitNot(byte x) { return (byte) ~ x; } + static byte byteTimes(byte x, byte y) { return (byte) (x * y); } + static byte byteDiv(byte x, byte y) { return (byte) (x / y); } + static byte byteRem(byte x, byte y) { return (byte) (x % y); } + static byte byteAdd(byte x, byte y) { return (byte) (x + y); } + static byte byteSub(byte x, byte y) { return (byte) (x - y); } + static byte byteShl(byte x, byte y) { return (byte) (x << y); } + static byte byteShr(byte x, byte y) { return (byte) (x >> y); } + static byte byteUshr(byte x, byte y) { return (byte) (x >>> y); } + static boolean byteLt(byte x, byte y) { return x < y; } + static boolean byteGt(byte x, byte y) { return x > y; } + static boolean byteLe(byte x, byte y) { return x <= y; } + static boolean byteGe(byte x, byte y) { return x >= y; } + static boolean byteEq(byte x, byte y) { return x == y; } + static boolean byteNe(byte x, byte y) { return x != y; } + static byte byteAnd(byte x, byte y) { return (byte) (x & y); } + static byte byteXor(byte x, byte y) { return (byte) (x ^ y); } + static byte byteOr(byte x, byte y) { return (byte) (x | y); } + static void byteTest() { + Tester.checkEqual(bytePlus(Byte.MIN_VALUE), (byte) + Byte.MIN_VALUE, "(byte) + Byte.MIN_VALUE"); + Tester.checkEqual(bytePlus((byte) -1), (byte) + (byte) -1, "(byte) + (byte) -1"); + Tester.checkEqual(bytePlus((byte) 0), (byte) + (byte) 0, "(byte) + (byte) 0"); + Tester.checkEqual(bytePlus((byte) 1), (byte) + (byte) 1, "(byte) + (byte) 1"); + Tester.checkEqual(bytePlus(Byte.MAX_VALUE), (byte) + Byte.MAX_VALUE, "(byte) + Byte.MAX_VALUE"); + Tester.checkEqual(byteMinus(Byte.MIN_VALUE), (byte) - Byte.MIN_VALUE, "(byte) - Byte.MIN_VALUE"); + Tester.checkEqual(byteMinus((byte) -1), (byte) - (byte) -1, "(byte) - (byte) -1"); + Tester.checkEqual(byteMinus((byte) 0), (byte) - (byte) 0, "(byte) - (byte) 0"); + Tester.checkEqual(byteMinus((byte) 1), (byte) - (byte) 1, "(byte) - (byte) 1"); + Tester.checkEqual(byteMinus(Byte.MAX_VALUE), (byte) - Byte.MAX_VALUE, "(byte) - Byte.MAX_VALUE"); + Tester.checkEqual(byteBitNot(Byte.MIN_VALUE), (byte) ~ Byte.MIN_VALUE, "(byte) ~ Byte.MIN_VALUE"); + Tester.checkEqual(byteBitNot((byte) -1), (byte) ~ (byte) -1, "(byte) ~ (byte) -1"); + Tester.checkEqual(byteBitNot((byte) 0), (byte) ~ (byte) 0, "(byte) ~ (byte) 0"); + Tester.checkEqual(byteBitNot((byte) 1), (byte) ~ (byte) 1, "(byte) ~ (byte) 1"); + Tester.checkEqual(byteBitNot(Byte.MAX_VALUE), (byte) ~ Byte.MAX_VALUE, "(byte) ~ Byte.MAX_VALUE"); + Tester.checkEqual(byteTimes(Byte.MIN_VALUE, Byte.MIN_VALUE), (byte) (Byte.MIN_VALUE * Byte.MIN_VALUE), "(byte) (Byte.MIN_VALUE * Byte.MIN_VALUE)"); + Tester.checkEqual(byteTimes(Byte.MIN_VALUE, (byte) -1), (byte) (Byte.MIN_VALUE * (byte) -1), "(byte) (Byte.MIN_VALUE * (byte) -1)"); + Tester.checkEqual(byteTimes(Byte.MIN_VALUE, (byte) 0), (byte) (Byte.MIN_VALUE * (byte) 0), "(byte) (Byte.MIN_VALUE * (byte) 0)"); + Tester.checkEqual(byteTimes(Byte.MIN_VALUE, (byte) 1), (byte) (Byte.MIN_VALUE * (byte) 1), "(byte) (Byte.MIN_VALUE * (byte) 1)"); + Tester.checkEqual(byteTimes(Byte.MIN_VALUE, Byte.MAX_VALUE), (byte) (Byte.MIN_VALUE * Byte.MAX_VALUE), "(byte) (Byte.MIN_VALUE * Byte.MAX_VALUE)"); + Tester.checkEqual(byteTimes((byte) -1, Byte.MIN_VALUE), (byte) ((byte) -1 * Byte.MIN_VALUE), "(byte) ((byte) -1 * Byte.MIN_VALUE)"); + Tester.checkEqual(byteTimes((byte) -1, (byte) -1), (byte) ((byte) -1 * (byte) -1), "(byte) ((byte) -1 * (byte) -1)"); + Tester.checkEqual(byteTimes((byte) -1, (byte) 0), (byte) ((byte) -1 * (byte) 0), "(byte) ((byte) -1 * (byte) 0)"); + Tester.checkEqual(byteTimes((byte) -1, (byte) 1), (byte) ((byte) -1 * (byte) 1), "(byte) ((byte) -1 * (byte) 1)"); + Tester.checkEqual(byteTimes((byte) -1, Byte.MAX_VALUE), (byte) ((byte) -1 * Byte.MAX_VALUE), "(byte) ((byte) -1 * Byte.MAX_VALUE)"); + Tester.checkEqual(byteTimes((byte) 0, Byte.MIN_VALUE), (byte) ((byte) 0 * Byte.MIN_VALUE), "(byte) ((byte) 0 * Byte.MIN_VALUE)"); + Tester.checkEqual(byteTimes((byte) 0, (byte) -1), (byte) ((byte) 0 * (byte) -1), "(byte) ((byte) 0 * (byte) -1)"); + Tester.checkEqual(byteTimes((byte) 0, (byte) 0), (byte) ((byte) 0 * (byte) 0), "(byte) ((byte) 0 * (byte) 0)"); + Tester.checkEqual(byteTimes((byte) 0, (byte) 1), (byte) ((byte) 0 * (byte) 1), "(byte) ((byte) 0 * (byte) 1)"); + Tester.checkEqual(byteTimes((byte) 0, Byte.MAX_VALUE), (byte) ((byte) 0 * Byte.MAX_VALUE), "(byte) ((byte) 0 * Byte.MAX_VALUE)"); + Tester.checkEqual(byteTimes((byte) 1, Byte.MIN_VALUE), (byte) ((byte) 1 * Byte.MIN_VALUE), "(byte) ((byte) 1 * Byte.MIN_VALUE)"); + Tester.checkEqual(byteTimes((byte) 1, (byte) -1), (byte) ((byte) 1 * (byte) -1), "(byte) ((byte) 1 * (byte) -1)"); + Tester.checkEqual(byteTimes((byte) 1, (byte) 0), (byte) ((byte) 1 * (byte) 0), "(byte) ((byte) 1 * (byte) 0)"); + Tester.checkEqual(byteTimes((byte) 1, (byte) 1), (byte) ((byte) 1 * (byte) 1), "(byte) ((byte) 1 * (byte) 1)"); + Tester.checkEqual(byteTimes((byte) 1, Byte.MAX_VALUE), (byte) ((byte) 1 * Byte.MAX_VALUE), "(byte) ((byte) 1 * Byte.MAX_VALUE)"); + Tester.checkEqual(byteTimes(Byte.MAX_VALUE, Byte.MIN_VALUE), (byte) (Byte.MAX_VALUE * Byte.MIN_VALUE), "(byte) (Byte.MAX_VALUE * Byte.MIN_VALUE)"); + Tester.checkEqual(byteTimes(Byte.MAX_VALUE, (byte) -1), (byte) (Byte.MAX_VALUE * (byte) -1), "(byte) (Byte.MAX_VALUE * (byte) -1)"); + Tester.checkEqual(byteTimes(Byte.MAX_VALUE, (byte) 0), (byte) (Byte.MAX_VALUE * (byte) 0), "(byte) (Byte.MAX_VALUE * (byte) 0)"); + Tester.checkEqual(byteTimes(Byte.MAX_VALUE, (byte) 1), (byte) (Byte.MAX_VALUE * (byte) 1), "(byte) (Byte.MAX_VALUE * (byte) 1)"); + Tester.checkEqual(byteTimes(Byte.MAX_VALUE, Byte.MAX_VALUE), (byte) (Byte.MAX_VALUE * Byte.MAX_VALUE), "(byte) (Byte.MAX_VALUE * Byte.MAX_VALUE)"); + Tester.checkEqual(byteDiv(Byte.MIN_VALUE, Byte.MIN_VALUE), (byte) (Byte.MIN_VALUE / Byte.MIN_VALUE), "(byte) (Byte.MIN_VALUE / Byte.MIN_VALUE)"); + Tester.checkEqual(byteDiv(Byte.MIN_VALUE, (byte) -1), (byte) (Byte.MIN_VALUE / (byte) -1), "(byte) (Byte.MIN_VALUE / (byte) -1)"); + Tester.checkEqual(byteDiv(Byte.MIN_VALUE, (byte) 1), (byte) (Byte.MIN_VALUE / (byte) 1), "(byte) (Byte.MIN_VALUE / (byte) 1)"); + Tester.checkEqual(byteDiv(Byte.MIN_VALUE, Byte.MAX_VALUE), (byte) (Byte.MIN_VALUE / Byte.MAX_VALUE), "(byte) (Byte.MIN_VALUE / Byte.MAX_VALUE)"); + Tester.checkEqual(byteDiv((byte) -1, Byte.MIN_VALUE), (byte) ((byte) -1 / Byte.MIN_VALUE), "(byte) ((byte) -1 / Byte.MIN_VALUE)"); + Tester.checkEqual(byteDiv((byte) -1, (byte) -1), (byte) ((byte) -1 / (byte) -1), "(byte) ((byte) -1 / (byte) -1)"); + Tester.checkEqual(byteDiv((byte) -1, (byte) 1), (byte) ((byte) -1 / (byte) 1), "(byte) ((byte) -1 / (byte) 1)"); + Tester.checkEqual(byteDiv((byte) -1, Byte.MAX_VALUE), (byte) ((byte) -1 / Byte.MAX_VALUE), "(byte) ((byte) -1 / Byte.MAX_VALUE)"); + Tester.checkEqual(byteDiv((byte) 0, Byte.MIN_VALUE), (byte) ((byte) 0 / Byte.MIN_VALUE), "(byte) ((byte) 0 / Byte.MIN_VALUE)"); + Tester.checkEqual(byteDiv((byte) 0, (byte) -1), (byte) ((byte) 0 / (byte) -1), "(byte) ((byte) 0 / (byte) -1)"); + Tester.checkEqual(byteDiv((byte) 0, (byte) 1), (byte) ((byte) 0 / (byte) 1), "(byte) ((byte) 0 / (byte) 1)"); + Tester.checkEqual(byteDiv((byte) 0, Byte.MAX_VALUE), (byte) ((byte) 0 / Byte.MAX_VALUE), "(byte) ((byte) 0 / Byte.MAX_VALUE)"); + Tester.checkEqual(byteDiv((byte) 1, Byte.MIN_VALUE), (byte) ((byte) 1 / Byte.MIN_VALUE), "(byte) ((byte) 1 / Byte.MIN_VALUE)"); + Tester.checkEqual(byteDiv((byte) 1, (byte) -1), (byte) ((byte) 1 / (byte) -1), "(byte) ((byte) 1 / (byte) -1)"); + Tester.checkEqual(byteDiv((byte) 1, (byte) 1), (byte) ((byte) 1 / (byte) 1), "(byte) ((byte) 1 / (byte) 1)"); + Tester.checkEqual(byteDiv((byte) 1, Byte.MAX_VALUE), (byte) ((byte) 1 / Byte.MAX_VALUE), "(byte) ((byte) 1 / Byte.MAX_VALUE)"); + Tester.checkEqual(byteDiv(Byte.MAX_VALUE, Byte.MIN_VALUE), (byte) (Byte.MAX_VALUE / Byte.MIN_VALUE), "(byte) (Byte.MAX_VALUE / Byte.MIN_VALUE)"); + Tester.checkEqual(byteDiv(Byte.MAX_VALUE, (byte) -1), (byte) (Byte.MAX_VALUE / (byte) -1), "(byte) (Byte.MAX_VALUE / (byte) -1)"); + Tester.checkEqual(byteDiv(Byte.MAX_VALUE, (byte) 1), (byte) (Byte.MAX_VALUE / (byte) 1), "(byte) (Byte.MAX_VALUE / (byte) 1)"); + Tester.checkEqual(byteDiv(Byte.MAX_VALUE, Byte.MAX_VALUE), (byte) (Byte.MAX_VALUE / Byte.MAX_VALUE), "(byte) (Byte.MAX_VALUE / Byte.MAX_VALUE)"); + Tester.checkEqual(byteRem(Byte.MIN_VALUE, Byte.MIN_VALUE), (byte) (Byte.MIN_VALUE % Byte.MIN_VALUE), "(byte) (Byte.MIN_VALUE % Byte.MIN_VALUE)"); + Tester.checkEqual(byteRem(Byte.MIN_VALUE, (byte) -1), (byte) (Byte.MIN_VALUE % (byte) -1), "(byte) (Byte.MIN_VALUE % (byte) -1)"); + Tester.checkEqual(byteRem(Byte.MIN_VALUE, (byte) 1), (byte) (Byte.MIN_VALUE % (byte) 1), "(byte) (Byte.MIN_VALUE % (byte) 1)"); + Tester.checkEqual(byteRem(Byte.MIN_VALUE, Byte.MAX_VALUE), (byte) (Byte.MIN_VALUE % Byte.MAX_VALUE), "(byte) (Byte.MIN_VALUE % Byte.MAX_VALUE)"); + Tester.checkEqual(byteRem((byte) -1, Byte.MIN_VALUE), (byte) ((byte) -1 % Byte.MIN_VALUE), "(byte) ((byte) -1 % Byte.MIN_VALUE)"); + Tester.checkEqual(byteRem((byte) -1, (byte) -1), (byte) ((byte) -1 % (byte) -1), "(byte) ((byte) -1 % (byte) -1)"); + Tester.checkEqual(byteRem((byte) -1, (byte) 1), (byte) ((byte) -1 % (byte) 1), "(byte) ((byte) -1 % (byte) 1)"); + Tester.checkEqual(byteRem((byte) -1, Byte.MAX_VALUE), (byte) ((byte) -1 % Byte.MAX_VALUE), "(byte) ((byte) -1 % Byte.MAX_VALUE)"); + Tester.checkEqual(byteRem((byte) 0, Byte.MIN_VALUE), (byte) ((byte) 0 % Byte.MIN_VALUE), "(byte) ((byte) 0 % Byte.MIN_VALUE)"); + Tester.checkEqual(byteRem((byte) 0, (byte) -1), (byte) ((byte) 0 % (byte) -1), "(byte) ((byte) 0 % (byte) -1)"); + Tester.checkEqual(byteRem((byte) 0, (byte) 1), (byte) ((byte) 0 % (byte) 1), "(byte) ((byte) 0 % (byte) 1)"); + Tester.checkEqual(byteRem((byte) 0, Byte.MAX_VALUE), (byte) ((byte) 0 % Byte.MAX_VALUE), "(byte) ((byte) 0 % Byte.MAX_VALUE)"); + Tester.checkEqual(byteRem((byte) 1, Byte.MIN_VALUE), (byte) ((byte) 1 % Byte.MIN_VALUE), "(byte) ((byte) 1 % Byte.MIN_VALUE)"); + Tester.checkEqual(byteRem((byte) 1, (byte) -1), (byte) ((byte) 1 % (byte) -1), "(byte) ((byte) 1 % (byte) -1)"); + Tester.checkEqual(byteRem((byte) 1, (byte) 1), (byte) ((byte) 1 % (byte) 1), "(byte) ((byte) 1 % (byte) 1)"); + Tester.checkEqual(byteRem((byte) 1, Byte.MAX_VALUE), (byte) ((byte) 1 % Byte.MAX_VALUE), "(byte) ((byte) 1 % Byte.MAX_VALUE)"); + Tester.checkEqual(byteRem(Byte.MAX_VALUE, Byte.MIN_VALUE), (byte) (Byte.MAX_VALUE % Byte.MIN_VALUE), "(byte) (Byte.MAX_VALUE % Byte.MIN_VALUE)"); + Tester.checkEqual(byteRem(Byte.MAX_VALUE, (byte) -1), (byte) (Byte.MAX_VALUE % (byte) -1), "(byte) (Byte.MAX_VALUE % (byte) -1)"); + Tester.checkEqual(byteRem(Byte.MAX_VALUE, (byte) 1), (byte) (Byte.MAX_VALUE % (byte) 1), "(byte) (Byte.MAX_VALUE % (byte) 1)"); + Tester.checkEqual(byteRem(Byte.MAX_VALUE, Byte.MAX_VALUE), (byte) (Byte.MAX_VALUE % Byte.MAX_VALUE), "(byte) (Byte.MAX_VALUE % Byte.MAX_VALUE)"); + Tester.checkEqual(byteAdd(Byte.MIN_VALUE, Byte.MIN_VALUE), (byte) (Byte.MIN_VALUE + Byte.MIN_VALUE), "(byte) (Byte.MIN_VALUE + Byte.MIN_VALUE)"); + Tester.checkEqual(byteAdd(Byte.MIN_VALUE, (byte) -1), (byte) (Byte.MIN_VALUE + (byte) -1), "(byte) (Byte.MIN_VALUE + (byte) -1)"); + Tester.checkEqual(byteAdd(Byte.MIN_VALUE, (byte) 0), (byte) (Byte.MIN_VALUE + (byte) 0), "(byte) (Byte.MIN_VALUE + (byte) 0)"); + Tester.checkEqual(byteAdd(Byte.MIN_VALUE, (byte) 1), (byte) (Byte.MIN_VALUE + (byte) 1), "(byte) (Byte.MIN_VALUE + (byte) 1)"); + Tester.checkEqual(byteAdd(Byte.MIN_VALUE, Byte.MAX_VALUE), (byte) (Byte.MIN_VALUE + Byte.MAX_VALUE), "(byte) (Byte.MIN_VALUE + Byte.MAX_VALUE)"); + Tester.checkEqual(byteAdd((byte) -1, Byte.MIN_VALUE), (byte) ((byte) -1 + Byte.MIN_VALUE), "(byte) ((byte) -1 + Byte.MIN_VALUE)"); + Tester.checkEqual(byteAdd((byte) -1, (byte) -1), (byte) ((byte) -1 + (byte) -1), "(byte) ((byte) -1 + (byte) -1)"); + Tester.checkEqual(byteAdd((byte) -1, (byte) 0), (byte) ((byte) -1 + (byte) 0), "(byte) ((byte) -1 + (byte) 0)"); + Tester.checkEqual(byteAdd((byte) -1, (byte) 1), (byte) ((byte) -1 + (byte) 1), "(byte) ((byte) -1 + (byte) 1)"); + Tester.checkEqual(byteAdd((byte) -1, Byte.MAX_VALUE), (byte) ((byte) -1 + Byte.MAX_VALUE), "(byte) ((byte) -1 + Byte.MAX_VALUE)"); + Tester.checkEqual(byteAdd((byte) 0, Byte.MIN_VALUE), (byte) ((byte) 0 + Byte.MIN_VALUE), "(byte) ((byte) 0 + Byte.MIN_VALUE)"); + Tester.checkEqual(byteAdd((byte) 0, (byte) -1), (byte) ((byte) 0 + (byte) -1), "(byte) ((byte) 0 + (byte) -1)"); + Tester.checkEqual(byteAdd((byte) 0, (byte) 0), (byte) ((byte) 0 + (byte) 0), "(byte) ((byte) 0 + (byte) 0)"); + Tester.checkEqual(byteAdd((byte) 0, (byte) 1), (byte) ((byte) 0 + (byte) 1), "(byte) ((byte) 0 + (byte) 1)"); + Tester.checkEqual(byteAdd((byte) 0, Byte.MAX_VALUE), (byte) ((byte) 0 + Byte.MAX_VALUE), "(byte) ((byte) 0 + Byte.MAX_VALUE)"); + Tester.checkEqual(byteAdd((byte) 1, Byte.MIN_VALUE), (byte) ((byte) 1 + Byte.MIN_VALUE), "(byte) ((byte) 1 + Byte.MIN_VALUE)"); + Tester.checkEqual(byteAdd((byte) 1, (byte) -1), (byte) ((byte) 1 + (byte) -1), "(byte) ((byte) 1 + (byte) -1)"); + Tester.checkEqual(byteAdd((byte) 1, (byte) 0), (byte) ((byte) 1 + (byte) 0), "(byte) ((byte) 1 + (byte) 0)"); + Tester.checkEqual(byteAdd((byte) 1, (byte) 1), (byte) ((byte) 1 + (byte) 1), "(byte) ((byte) 1 + (byte) 1)"); + Tester.checkEqual(byteAdd((byte) 1, Byte.MAX_VALUE), (byte) ((byte) 1 + Byte.MAX_VALUE), "(byte) ((byte) 1 + Byte.MAX_VALUE)"); + Tester.checkEqual(byteAdd(Byte.MAX_VALUE, Byte.MIN_VALUE), (byte) (Byte.MAX_VALUE + Byte.MIN_VALUE), "(byte) (Byte.MAX_VALUE + Byte.MIN_VALUE)"); + Tester.checkEqual(byteAdd(Byte.MAX_VALUE, (byte) -1), (byte) (Byte.MAX_VALUE + (byte) -1), "(byte) (Byte.MAX_VALUE + (byte) -1)"); + Tester.checkEqual(byteAdd(Byte.MAX_VALUE, (byte) 0), (byte) (Byte.MAX_VALUE + (byte) 0), "(byte) (Byte.MAX_VALUE + (byte) 0)"); + Tester.checkEqual(byteAdd(Byte.MAX_VALUE, (byte) 1), (byte) (Byte.MAX_VALUE + (byte) 1), "(byte) (Byte.MAX_VALUE + (byte) 1)"); + Tester.checkEqual(byteAdd(Byte.MAX_VALUE, Byte.MAX_VALUE), (byte) (Byte.MAX_VALUE + Byte.MAX_VALUE), "(byte) (Byte.MAX_VALUE + Byte.MAX_VALUE)"); + Tester.checkEqual(byteSub(Byte.MIN_VALUE, Byte.MIN_VALUE), (byte) (Byte.MIN_VALUE - Byte.MIN_VALUE), "(byte) (Byte.MIN_VALUE - Byte.MIN_VALUE)"); + Tester.checkEqual(byteSub(Byte.MIN_VALUE, (byte) -1), (byte) (Byte.MIN_VALUE - (byte) -1), "(byte) (Byte.MIN_VALUE - (byte) -1)"); + Tester.checkEqual(byteSub(Byte.MIN_VALUE, (byte) 0), (byte) (Byte.MIN_VALUE - (byte) 0), "(byte) (Byte.MIN_VALUE - (byte) 0)"); + Tester.checkEqual(byteSub(Byte.MIN_VALUE, (byte) 1), (byte) (Byte.MIN_VALUE - (byte) 1), "(byte) (Byte.MIN_VALUE - (byte) 1)"); + Tester.checkEqual(byteSub(Byte.MIN_VALUE, Byte.MAX_VALUE), (byte) (Byte.MIN_VALUE - Byte.MAX_VALUE), "(byte) (Byte.MIN_VALUE - Byte.MAX_VALUE)"); + Tester.checkEqual(byteSub((byte) -1, Byte.MIN_VALUE), (byte) ((byte) -1 - Byte.MIN_VALUE), "(byte) ((byte) -1 - Byte.MIN_VALUE)"); + Tester.checkEqual(byteSub((byte) -1, (byte) -1), (byte) ((byte) -1 - (byte) -1), "(byte) ((byte) -1 - (byte) -1)"); + Tester.checkEqual(byteSub((byte) -1, (byte) 0), (byte) ((byte) -1 - (byte) 0), "(byte) ((byte) -1 - (byte) 0)"); + Tester.checkEqual(byteSub((byte) -1, (byte) 1), (byte) ((byte) -1 - (byte) 1), "(byte) ((byte) -1 - (byte) 1)"); + Tester.checkEqual(byteSub((byte) -1, Byte.MAX_VALUE), (byte) ((byte) -1 - Byte.MAX_VALUE), "(byte) ((byte) -1 - Byte.MAX_VALUE)"); + Tester.checkEqual(byteSub((byte) 0, Byte.MIN_VALUE), (byte) ((byte) 0 - Byte.MIN_VALUE), "(byte) ((byte) 0 - Byte.MIN_VALUE)"); + Tester.checkEqual(byteSub((byte) 0, (byte) -1), (byte) ((byte) 0 - (byte) -1), "(byte) ((byte) 0 - (byte) -1)"); + Tester.checkEqual(byteSub((byte) 0, (byte) 0), (byte) ((byte) 0 - (byte) 0), "(byte) ((byte) 0 - (byte) 0)"); + Tester.checkEqual(byteSub((byte) 0, (byte) 1), (byte) ((byte) 0 - (byte) 1), "(byte) ((byte) 0 - (byte) 1)"); + Tester.checkEqual(byteSub((byte) 0, Byte.MAX_VALUE), (byte) ((byte) 0 - Byte.MAX_VALUE), "(byte) ((byte) 0 - Byte.MAX_VALUE)"); + Tester.checkEqual(byteSub((byte) 1, Byte.MIN_VALUE), (byte) ((byte) 1 - Byte.MIN_VALUE), "(byte) ((byte) 1 - Byte.MIN_VALUE)"); + Tester.checkEqual(byteSub((byte) 1, (byte) -1), (byte) ((byte) 1 - (byte) -1), "(byte) ((byte) 1 - (byte) -1)"); + Tester.checkEqual(byteSub((byte) 1, (byte) 0), (byte) ((byte) 1 - (byte) 0), "(byte) ((byte) 1 - (byte) 0)"); + Tester.checkEqual(byteSub((byte) 1, (byte) 1), (byte) ((byte) 1 - (byte) 1), "(byte) ((byte) 1 - (byte) 1)"); + Tester.checkEqual(byteSub((byte) 1, Byte.MAX_VALUE), (byte) ((byte) 1 - Byte.MAX_VALUE), "(byte) ((byte) 1 - Byte.MAX_VALUE)"); + Tester.checkEqual(byteSub(Byte.MAX_VALUE, Byte.MIN_VALUE), (byte) (Byte.MAX_VALUE - Byte.MIN_VALUE), "(byte) (Byte.MAX_VALUE - Byte.MIN_VALUE)"); + Tester.checkEqual(byteSub(Byte.MAX_VALUE, (byte) -1), (byte) (Byte.MAX_VALUE - (byte) -1), "(byte) (Byte.MAX_VALUE - (byte) -1)"); + Tester.checkEqual(byteSub(Byte.MAX_VALUE, (byte) 0), (byte) (Byte.MAX_VALUE - (byte) 0), "(byte) (Byte.MAX_VALUE - (byte) 0)"); + Tester.checkEqual(byteSub(Byte.MAX_VALUE, (byte) 1), (byte) (Byte.MAX_VALUE - (byte) 1), "(byte) (Byte.MAX_VALUE - (byte) 1)"); + Tester.checkEqual(byteSub(Byte.MAX_VALUE, Byte.MAX_VALUE), (byte) (Byte.MAX_VALUE - Byte.MAX_VALUE), "(byte) (Byte.MAX_VALUE - Byte.MAX_VALUE)"); + Tester.checkEqual(byteShl(Byte.MIN_VALUE, Byte.MIN_VALUE), (byte) (Byte.MIN_VALUE << Byte.MIN_VALUE), "(byte) (Byte.MIN_VALUE << Byte.MIN_VALUE)"); + Tester.checkEqual(byteShl(Byte.MIN_VALUE, (byte) -1), (byte) (Byte.MIN_VALUE << (byte) -1), "(byte) (Byte.MIN_VALUE << (byte) -1)"); + Tester.checkEqual(byteShl(Byte.MIN_VALUE, (byte) 0), (byte) (Byte.MIN_VALUE << (byte) 0), "(byte) (Byte.MIN_VALUE << (byte) 0)"); + Tester.checkEqual(byteShl(Byte.MIN_VALUE, (byte) 1), (byte) (Byte.MIN_VALUE << (byte) 1), "(byte) (Byte.MIN_VALUE << (byte) 1)"); + Tester.checkEqual(byteShl(Byte.MIN_VALUE, Byte.MAX_VALUE), (byte) (Byte.MIN_VALUE << Byte.MAX_VALUE), "(byte) (Byte.MIN_VALUE << Byte.MAX_VALUE)"); + Tester.checkEqual(byteShl((byte) -1, Byte.MIN_VALUE), (byte) ((byte) -1 << Byte.MIN_VALUE), "(byte) ((byte) -1 << Byte.MIN_VALUE)"); + Tester.checkEqual(byteShl((byte) -1, (byte) -1), (byte) ((byte) -1 << (byte) -1), "(byte) ((byte) -1 << (byte) -1)"); + Tester.checkEqual(byteShl((byte) -1, (byte) 0), (byte) ((byte) -1 << (byte) 0), "(byte) ((byte) -1 << (byte) 0)"); + Tester.checkEqual(byteShl((byte) -1, (byte) 1), (byte) ((byte) -1 << (byte) 1), "(byte) ((byte) -1 << (byte) 1)"); + Tester.checkEqual(byteShl((byte) -1, Byte.MAX_VALUE), (byte) ((byte) -1 << Byte.MAX_VALUE), "(byte) ((byte) -1 << Byte.MAX_VALUE)"); + Tester.checkEqual(byteShl((byte) 0, Byte.MIN_VALUE), (byte) ((byte) 0 << Byte.MIN_VALUE), "(byte) ((byte) 0 << Byte.MIN_VALUE)"); + Tester.checkEqual(byteShl((byte) 0, (byte) -1), (byte) ((byte) 0 << (byte) -1), "(byte) ((byte) 0 << (byte) -1)"); + Tester.checkEqual(byteShl((byte) 0, (byte) 0), (byte) ((byte) 0 << (byte) 0), "(byte) ((byte) 0 << (byte) 0)"); + Tester.checkEqual(byteShl((byte) 0, (byte) 1), (byte) ((byte) 0 << (byte) 1), "(byte) ((byte) 0 << (byte) 1)"); + Tester.checkEqual(byteShl((byte) 0, Byte.MAX_VALUE), (byte) ((byte) 0 << Byte.MAX_VALUE), "(byte) ((byte) 0 << Byte.MAX_VALUE)"); + Tester.checkEqual(byteShl((byte) 1, Byte.MIN_VALUE), (byte) ((byte) 1 << Byte.MIN_VALUE), "(byte) ((byte) 1 << Byte.MIN_VALUE)"); + Tester.checkEqual(byteShl((byte) 1, (byte) -1), (byte) ((byte) 1 << (byte) -1), "(byte) ((byte) 1 << (byte) -1)"); + Tester.checkEqual(byteShl((byte) 1, (byte) 0), (byte) ((byte) 1 << (byte) 0), "(byte) ((byte) 1 << (byte) 0)"); + Tester.checkEqual(byteShl((byte) 1, (byte) 1), (byte) ((byte) 1 << (byte) 1), "(byte) ((byte) 1 << (byte) 1)"); + Tester.checkEqual(byteShl((byte) 1, Byte.MAX_VALUE), (byte) ((byte) 1 << Byte.MAX_VALUE), "(byte) ((byte) 1 << Byte.MAX_VALUE)"); + Tester.checkEqual(byteShl(Byte.MAX_VALUE, Byte.MIN_VALUE), (byte) (Byte.MAX_VALUE << Byte.MIN_VALUE), "(byte) (Byte.MAX_VALUE << Byte.MIN_VALUE)"); + Tester.checkEqual(byteShl(Byte.MAX_VALUE, (byte) -1), (byte) (Byte.MAX_VALUE << (byte) -1), "(byte) (Byte.MAX_VALUE << (byte) -1)"); + Tester.checkEqual(byteShl(Byte.MAX_VALUE, (byte) 0), (byte) (Byte.MAX_VALUE << (byte) 0), "(byte) (Byte.MAX_VALUE << (byte) 0)"); + Tester.checkEqual(byteShl(Byte.MAX_VALUE, (byte) 1), (byte) (Byte.MAX_VALUE << (byte) 1), "(byte) (Byte.MAX_VALUE << (byte) 1)"); + Tester.checkEqual(byteShl(Byte.MAX_VALUE, Byte.MAX_VALUE), (byte) (Byte.MAX_VALUE << Byte.MAX_VALUE), "(byte) (Byte.MAX_VALUE << Byte.MAX_VALUE)"); + Tester.checkEqual(byteShr(Byte.MIN_VALUE, Byte.MIN_VALUE), (byte) (Byte.MIN_VALUE >> Byte.MIN_VALUE), "(byte) (Byte.MIN_VALUE >> Byte.MIN_VALUE)"); + Tester.checkEqual(byteShr(Byte.MIN_VALUE, (byte) -1), (byte) (Byte.MIN_VALUE >> (byte) -1), "(byte) (Byte.MIN_VALUE >> (byte) -1)"); + Tester.checkEqual(byteShr(Byte.MIN_VALUE, (byte) 0), (byte) (Byte.MIN_VALUE >> (byte) 0), "(byte) (Byte.MIN_VALUE >> (byte) 0)"); + Tester.checkEqual(byteShr(Byte.MIN_VALUE, (byte) 1), (byte) (Byte.MIN_VALUE >> (byte) 1), "(byte) (Byte.MIN_VALUE >> (byte) 1)"); + Tester.checkEqual(byteShr(Byte.MIN_VALUE, Byte.MAX_VALUE), (byte) (Byte.MIN_VALUE >> Byte.MAX_VALUE), "(byte) (Byte.MIN_VALUE >> Byte.MAX_VALUE)"); + Tester.checkEqual(byteShr((byte) -1, Byte.MIN_VALUE), (byte) ((byte) -1 >> Byte.MIN_VALUE), "(byte) ((byte) -1 >> Byte.MIN_VALUE)"); + Tester.checkEqual(byteShr((byte) -1, (byte) -1), (byte) ((byte) -1 >> (byte) -1), "(byte) ((byte) -1 >> (byte) -1)"); + Tester.checkEqual(byteShr((byte) -1, (byte) 0), (byte) ((byte) -1 >> (byte) 0), "(byte) ((byte) -1 >> (byte) 0)"); + Tester.checkEqual(byteShr((byte) -1, (byte) 1), (byte) ((byte) -1 >> (byte) 1), "(byte) ((byte) -1 >> (byte) 1)"); + Tester.checkEqual(byteShr((byte) -1, Byte.MAX_VALUE), (byte) ((byte) -1 >> Byte.MAX_VALUE), "(byte) ((byte) -1 >> Byte.MAX_VALUE)"); + Tester.checkEqual(byteShr((byte) 0, Byte.MIN_VALUE), (byte) ((byte) 0 >> Byte.MIN_VALUE), "(byte) ((byte) 0 >> Byte.MIN_VALUE)"); + Tester.checkEqual(byteShr((byte) 0, (byte) -1), (byte) ((byte) 0 >> (byte) -1), "(byte) ((byte) 0 >> (byte) -1)"); + Tester.checkEqual(byteShr((byte) 0, (byte) 0), (byte) ((byte) 0 >> (byte) 0), "(byte) ((byte) 0 >> (byte) 0)"); + Tester.checkEqual(byteShr((byte) 0, (byte) 1), (byte) ((byte) 0 >> (byte) 1), "(byte) ((byte) 0 >> (byte) 1)"); + Tester.checkEqual(byteShr((byte) 0, Byte.MAX_VALUE), (byte) ((byte) 0 >> Byte.MAX_VALUE), "(byte) ((byte) 0 >> Byte.MAX_VALUE)"); + Tester.checkEqual(byteShr((byte) 1, Byte.MIN_VALUE), (byte) ((byte) 1 >> Byte.MIN_VALUE), "(byte) ((byte) 1 >> Byte.MIN_VALUE)"); + Tester.checkEqual(byteShr((byte) 1, (byte) -1), (byte) ((byte) 1 >> (byte) -1), "(byte) ((byte) 1 >> (byte) -1)"); + Tester.checkEqual(byteShr((byte) 1, (byte) 0), (byte) ((byte) 1 >> (byte) 0), "(byte) ((byte) 1 >> (byte) 0)"); + Tester.checkEqual(byteShr((byte) 1, (byte) 1), (byte) ((byte) 1 >> (byte) 1), "(byte) ((byte) 1 >> (byte) 1)"); + Tester.checkEqual(byteShr((byte) 1, Byte.MAX_VALUE), (byte) ((byte) 1 >> Byte.MAX_VALUE), "(byte) ((byte) 1 >> Byte.MAX_VALUE)"); + Tester.checkEqual(byteShr(Byte.MAX_VALUE, Byte.MIN_VALUE), (byte) (Byte.MAX_VALUE >> Byte.MIN_VALUE), "(byte) (Byte.MAX_VALUE >> Byte.MIN_VALUE)"); + Tester.checkEqual(byteShr(Byte.MAX_VALUE, (byte) -1), (byte) (Byte.MAX_VALUE >> (byte) -1), "(byte) (Byte.MAX_VALUE >> (byte) -1)"); + Tester.checkEqual(byteShr(Byte.MAX_VALUE, (byte) 0), (byte) (Byte.MAX_VALUE >> (byte) 0), "(byte) (Byte.MAX_VALUE >> (byte) 0)"); + Tester.checkEqual(byteShr(Byte.MAX_VALUE, (byte) 1), (byte) (Byte.MAX_VALUE >> (byte) 1), "(byte) (Byte.MAX_VALUE >> (byte) 1)"); + Tester.checkEqual(byteShr(Byte.MAX_VALUE, Byte.MAX_VALUE), (byte) (Byte.MAX_VALUE >> Byte.MAX_VALUE), "(byte) (Byte.MAX_VALUE >> Byte.MAX_VALUE)"); + Tester.checkEqual(byteUshr(Byte.MIN_VALUE, Byte.MIN_VALUE), (byte) (Byte.MIN_VALUE >>> Byte.MIN_VALUE), "(byte) (Byte.MIN_VALUE >>> Byte.MIN_VALUE)"); + Tester.checkEqual(byteUshr(Byte.MIN_VALUE, (byte) -1), (byte) (Byte.MIN_VALUE >>> (byte) -1), "(byte) (Byte.MIN_VALUE >>> (byte) -1)"); + Tester.checkEqual(byteUshr(Byte.MIN_VALUE, (byte) 0), (byte) (Byte.MIN_VALUE >>> (byte) 0), "(byte) (Byte.MIN_VALUE >>> (byte) 0)"); + Tester.checkEqual(byteUshr(Byte.MIN_VALUE, (byte) 1), (byte) (Byte.MIN_VALUE >>> (byte) 1), "(byte) (Byte.MIN_VALUE >>> (byte) 1)"); + Tester.checkEqual(byteUshr(Byte.MIN_VALUE, Byte.MAX_VALUE), (byte) (Byte.MIN_VALUE >>> Byte.MAX_VALUE), "(byte) (Byte.MIN_VALUE >>> Byte.MAX_VALUE)"); + Tester.checkEqual(byteUshr((byte) -1, Byte.MIN_VALUE), (byte) ((byte) -1 >>> Byte.MIN_VALUE), "(byte) ((byte) -1 >>> Byte.MIN_VALUE)"); + Tester.checkEqual(byteUshr((byte) -1, (byte) -1), (byte) ((byte) -1 >>> (byte) -1), "(byte) ((byte) -1 >>> (byte) -1)"); + Tester.checkEqual(byteUshr((byte) -1, (byte) 0), (byte) ((byte) -1 >>> (byte) 0), "(byte) ((byte) -1 >>> (byte) 0)"); + Tester.checkEqual(byteUshr((byte) -1, (byte) 1), (byte) ((byte) -1 >>> (byte) 1), "(byte) ((byte) -1 >>> (byte) 1)"); + Tester.checkEqual(byteUshr((byte) -1, Byte.MAX_VALUE), (byte) ((byte) -1 >>> Byte.MAX_VALUE), "(byte) ((byte) -1 >>> Byte.MAX_VALUE)"); + Tester.checkEqual(byteUshr((byte) 0, Byte.MIN_VALUE), (byte) ((byte) 0 >>> Byte.MIN_VALUE), "(byte) ((byte) 0 >>> Byte.MIN_VALUE)"); + Tester.checkEqual(byteUshr((byte) 0, (byte) -1), (byte) ((byte) 0 >>> (byte) -1), "(byte) ((byte) 0 >>> (byte) -1)"); + Tester.checkEqual(byteUshr((byte) 0, (byte) 0), (byte) ((byte) 0 >>> (byte) 0), "(byte) ((byte) 0 >>> (byte) 0)"); + Tester.checkEqual(byteUshr((byte) 0, (byte) 1), (byte) ((byte) 0 >>> (byte) 1), "(byte) ((byte) 0 >>> (byte) 1)"); + Tester.checkEqual(byteUshr((byte) 0, Byte.MAX_VALUE), (byte) ((byte) 0 >>> Byte.MAX_VALUE), "(byte) ((byte) 0 >>> Byte.MAX_VALUE)"); + Tester.checkEqual(byteUshr((byte) 1, Byte.MIN_VALUE), (byte) ((byte) 1 >>> Byte.MIN_VALUE), "(byte) ((byte) 1 >>> Byte.MIN_VALUE)"); + Tester.checkEqual(byteUshr((byte) 1, (byte) -1), (byte) ((byte) 1 >>> (byte) -1), "(byte) ((byte) 1 >>> (byte) -1)"); + Tester.checkEqual(byteUshr((byte) 1, (byte) 0), (byte) ((byte) 1 >>> (byte) 0), "(byte) ((byte) 1 >>> (byte) 0)"); + Tester.checkEqual(byteUshr((byte) 1, (byte) 1), (byte) ((byte) 1 >>> (byte) 1), "(byte) ((byte) 1 >>> (byte) 1)"); + Tester.checkEqual(byteUshr((byte) 1, Byte.MAX_VALUE), (byte) ((byte) 1 >>> Byte.MAX_VALUE), "(byte) ((byte) 1 >>> Byte.MAX_VALUE)"); + Tester.checkEqual(byteUshr(Byte.MAX_VALUE, Byte.MIN_VALUE), (byte) (Byte.MAX_VALUE >>> Byte.MIN_VALUE), "(byte) (Byte.MAX_VALUE >>> Byte.MIN_VALUE)"); + Tester.checkEqual(byteUshr(Byte.MAX_VALUE, (byte) -1), (byte) (Byte.MAX_VALUE >>> (byte) -1), "(byte) (Byte.MAX_VALUE >>> (byte) -1)"); + Tester.checkEqual(byteUshr(Byte.MAX_VALUE, (byte) 0), (byte) (Byte.MAX_VALUE >>> (byte) 0), "(byte) (Byte.MAX_VALUE >>> (byte) 0)"); + Tester.checkEqual(byteUshr(Byte.MAX_VALUE, (byte) 1), (byte) (Byte.MAX_VALUE >>> (byte) 1), "(byte) (Byte.MAX_VALUE >>> (byte) 1)"); + Tester.checkEqual(byteUshr(Byte.MAX_VALUE, Byte.MAX_VALUE), (byte) (Byte.MAX_VALUE >>> Byte.MAX_VALUE), "(byte) (Byte.MAX_VALUE >>> Byte.MAX_VALUE)"); + Tester.checkEqual(byteLt(Byte.MIN_VALUE, Byte.MIN_VALUE), Byte.MIN_VALUE < Byte.MIN_VALUE, "Byte.MIN_VALUE < Byte.MIN_VALUE"); + Tester.checkEqual(byteLt(Byte.MIN_VALUE, (byte) -1), Byte.MIN_VALUE < (byte) -1, "Byte.MIN_VALUE < (byte) -1"); + Tester.checkEqual(byteLt(Byte.MIN_VALUE, (byte) 0), Byte.MIN_VALUE < (byte) 0, "Byte.MIN_VALUE < (byte) 0"); + Tester.checkEqual(byteLt(Byte.MIN_VALUE, (byte) 1), Byte.MIN_VALUE < (byte) 1, "Byte.MIN_VALUE < (byte) 1"); + Tester.checkEqual(byteLt(Byte.MIN_VALUE, Byte.MAX_VALUE), Byte.MIN_VALUE < Byte.MAX_VALUE, "Byte.MIN_VALUE < Byte.MAX_VALUE"); + Tester.checkEqual(byteLt((byte) -1, Byte.MIN_VALUE), (byte) -1 < Byte.MIN_VALUE, "(byte) -1 < Byte.MIN_VALUE"); + Tester.checkEqual(byteLt((byte) -1, (byte) -1), (byte) -1 < (byte) -1, "(byte) -1 < (byte) -1"); + Tester.checkEqual(byteLt((byte) -1, (byte) 0), (byte) -1 < (byte) 0, "(byte) -1 < (byte) 0"); + Tester.checkEqual(byteLt((byte) -1, (byte) 1), (byte) -1 < (byte) 1, "(byte) -1 < (byte) 1"); + Tester.checkEqual(byteLt((byte) -1, Byte.MAX_VALUE), (byte) -1 < Byte.MAX_VALUE, "(byte) -1 < Byte.MAX_VALUE"); + Tester.checkEqual(byteLt((byte) 0, Byte.MIN_VALUE), (byte) 0 < Byte.MIN_VALUE, "(byte) 0 < Byte.MIN_VALUE"); + Tester.checkEqual(byteLt((byte) 0, (byte) -1), (byte) 0 < (byte) -1, "(byte) 0 < (byte) -1"); + Tester.checkEqual(byteLt((byte) 0, (byte) 0), (byte) 0 < (byte) 0, "(byte) 0 < (byte) 0"); + Tester.checkEqual(byteLt((byte) 0, (byte) 1), (byte) 0 < (byte) 1, "(byte) 0 < (byte) 1"); + Tester.checkEqual(byteLt((byte) 0, Byte.MAX_VALUE), (byte) 0 < Byte.MAX_VALUE, "(byte) 0 < Byte.MAX_VALUE"); + Tester.checkEqual(byteLt((byte) 1, Byte.MIN_VALUE), (byte) 1 < Byte.MIN_VALUE, "(byte) 1 < Byte.MIN_VALUE"); + Tester.checkEqual(byteLt((byte) 1, (byte) -1), (byte) 1 < (byte) -1, "(byte) 1 < (byte) -1"); + Tester.checkEqual(byteLt((byte) 1, (byte) 0), (byte) 1 < (byte) 0, "(byte) 1 < (byte) 0"); + Tester.checkEqual(byteLt((byte) 1, (byte) 1), (byte) 1 < (byte) 1, "(byte) 1 < (byte) 1"); + Tester.checkEqual(byteLt((byte) 1, Byte.MAX_VALUE), (byte) 1 < Byte.MAX_VALUE, "(byte) 1 < Byte.MAX_VALUE"); + Tester.checkEqual(byteLt(Byte.MAX_VALUE, Byte.MIN_VALUE), Byte.MAX_VALUE < Byte.MIN_VALUE, "Byte.MAX_VALUE < Byte.MIN_VALUE"); + Tester.checkEqual(byteLt(Byte.MAX_VALUE, (byte) -1), Byte.MAX_VALUE < (byte) -1, "Byte.MAX_VALUE < (byte) -1"); + Tester.checkEqual(byteLt(Byte.MAX_VALUE, (byte) 0), Byte.MAX_VALUE < (byte) 0, "Byte.MAX_VALUE < (byte) 0"); + Tester.checkEqual(byteLt(Byte.MAX_VALUE, (byte) 1), Byte.MAX_VALUE < (byte) 1, "Byte.MAX_VALUE < (byte) 1"); + Tester.checkEqual(byteLt(Byte.MAX_VALUE, Byte.MAX_VALUE), Byte.MAX_VALUE < Byte.MAX_VALUE, "Byte.MAX_VALUE < Byte.MAX_VALUE"); + Tester.checkEqual(byteGt(Byte.MIN_VALUE, Byte.MIN_VALUE), Byte.MIN_VALUE > Byte.MIN_VALUE, "Byte.MIN_VALUE > Byte.MIN_VALUE"); + Tester.checkEqual(byteGt(Byte.MIN_VALUE, (byte) -1), Byte.MIN_VALUE > (byte) -1, "Byte.MIN_VALUE > (byte) -1"); + Tester.checkEqual(byteGt(Byte.MIN_VALUE, (byte) 0), Byte.MIN_VALUE > (byte) 0, "Byte.MIN_VALUE > (byte) 0"); + Tester.checkEqual(byteGt(Byte.MIN_VALUE, (byte) 1), Byte.MIN_VALUE > (byte) 1, "Byte.MIN_VALUE > (byte) 1"); + Tester.checkEqual(byteGt(Byte.MIN_VALUE, Byte.MAX_VALUE), Byte.MIN_VALUE > Byte.MAX_VALUE, "Byte.MIN_VALUE > Byte.MAX_VALUE"); + Tester.checkEqual(byteGt((byte) -1, Byte.MIN_VALUE), (byte) -1 > Byte.MIN_VALUE, "(byte) -1 > Byte.MIN_VALUE"); + Tester.checkEqual(byteGt((byte) -1, (byte) -1), (byte) -1 > (byte) -1, "(byte) -1 > (byte) -1"); + Tester.checkEqual(byteGt((byte) -1, (byte) 0), (byte) -1 > (byte) 0, "(byte) -1 > (byte) 0"); + Tester.checkEqual(byteGt((byte) -1, (byte) 1), (byte) -1 > (byte) 1, "(byte) -1 > (byte) 1"); + Tester.checkEqual(byteGt((byte) -1, Byte.MAX_VALUE), (byte) -1 > Byte.MAX_VALUE, "(byte) -1 > Byte.MAX_VALUE"); + Tester.checkEqual(byteGt((byte) 0, Byte.MIN_VALUE), (byte) 0 > Byte.MIN_VALUE, "(byte) 0 > Byte.MIN_VALUE"); + Tester.checkEqual(byteGt((byte) 0, (byte) -1), (byte) 0 > (byte) -1, "(byte) 0 > (byte) -1"); + Tester.checkEqual(byteGt((byte) 0, (byte) 0), (byte) 0 > (byte) 0, "(byte) 0 > (byte) 0"); + Tester.checkEqual(byteGt((byte) 0, (byte) 1), (byte) 0 > (byte) 1, "(byte) 0 > (byte) 1"); + Tester.checkEqual(byteGt((byte) 0, Byte.MAX_VALUE), (byte) 0 > Byte.MAX_VALUE, "(byte) 0 > Byte.MAX_VALUE"); + Tester.checkEqual(byteGt((byte) 1, Byte.MIN_VALUE), (byte) 1 > Byte.MIN_VALUE, "(byte) 1 > Byte.MIN_VALUE"); + Tester.checkEqual(byteGt((byte) 1, (byte) -1), (byte) 1 > (byte) -1, "(byte) 1 > (byte) -1"); + Tester.checkEqual(byteGt((byte) 1, (byte) 0), (byte) 1 > (byte) 0, "(byte) 1 > (byte) 0"); + Tester.checkEqual(byteGt((byte) 1, (byte) 1), (byte) 1 > (byte) 1, "(byte) 1 > (byte) 1"); + Tester.checkEqual(byteGt((byte) 1, Byte.MAX_VALUE), (byte) 1 > Byte.MAX_VALUE, "(byte) 1 > Byte.MAX_VALUE"); + Tester.checkEqual(byteGt(Byte.MAX_VALUE, Byte.MIN_VALUE), Byte.MAX_VALUE > Byte.MIN_VALUE, "Byte.MAX_VALUE > Byte.MIN_VALUE"); + Tester.checkEqual(byteGt(Byte.MAX_VALUE, (byte) -1), Byte.MAX_VALUE > (byte) -1, "Byte.MAX_VALUE > (byte) -1"); + Tester.checkEqual(byteGt(Byte.MAX_VALUE, (byte) 0), Byte.MAX_VALUE > (byte) 0, "Byte.MAX_VALUE > (byte) 0"); + Tester.checkEqual(byteGt(Byte.MAX_VALUE, (byte) 1), Byte.MAX_VALUE > (byte) 1, "Byte.MAX_VALUE > (byte) 1"); + Tester.checkEqual(byteGt(Byte.MAX_VALUE, Byte.MAX_VALUE), Byte.MAX_VALUE > Byte.MAX_VALUE, "Byte.MAX_VALUE > Byte.MAX_VALUE"); + Tester.checkEqual(byteLe(Byte.MIN_VALUE, Byte.MIN_VALUE), Byte.MIN_VALUE <= Byte.MIN_VALUE, "Byte.MIN_VALUE <= Byte.MIN_VALUE"); + Tester.checkEqual(byteLe(Byte.MIN_VALUE, (byte) -1), Byte.MIN_VALUE <= (byte) -1, "Byte.MIN_VALUE <= (byte) -1"); + Tester.checkEqual(byteLe(Byte.MIN_VALUE, (byte) 0), Byte.MIN_VALUE <= (byte) 0, "Byte.MIN_VALUE <= (byte) 0"); + Tester.checkEqual(byteLe(Byte.MIN_VALUE, (byte) 1), Byte.MIN_VALUE <= (byte) 1, "Byte.MIN_VALUE <= (byte) 1"); + Tester.checkEqual(byteLe(Byte.MIN_VALUE, Byte.MAX_VALUE), Byte.MIN_VALUE <= Byte.MAX_VALUE, "Byte.MIN_VALUE <= Byte.MAX_VALUE"); + Tester.checkEqual(byteLe((byte) -1, Byte.MIN_VALUE), (byte) -1 <= Byte.MIN_VALUE, "(byte) -1 <= Byte.MIN_VALUE"); + Tester.checkEqual(byteLe((byte) -1, (byte) -1), (byte) -1 <= (byte) -1, "(byte) -1 <= (byte) -1"); + Tester.checkEqual(byteLe((byte) -1, (byte) 0), (byte) -1 <= (byte) 0, "(byte) -1 <= (byte) 0"); + Tester.checkEqual(byteLe((byte) -1, (byte) 1), (byte) -1 <= (byte) 1, "(byte) -1 <= (byte) 1"); + Tester.checkEqual(byteLe((byte) -1, Byte.MAX_VALUE), (byte) -1 <= Byte.MAX_VALUE, "(byte) -1 <= Byte.MAX_VALUE"); + Tester.checkEqual(byteLe((byte) 0, Byte.MIN_VALUE), (byte) 0 <= Byte.MIN_VALUE, "(byte) 0 <= Byte.MIN_VALUE"); + Tester.checkEqual(byteLe((byte) 0, (byte) -1), (byte) 0 <= (byte) -1, "(byte) 0 <= (byte) -1"); + Tester.checkEqual(byteLe((byte) 0, (byte) 0), (byte) 0 <= (byte) 0, "(byte) 0 <= (byte) 0"); + Tester.checkEqual(byteLe((byte) 0, (byte) 1), (byte) 0 <= (byte) 1, "(byte) 0 <= (byte) 1"); + Tester.checkEqual(byteLe((byte) 0, Byte.MAX_VALUE), (byte) 0 <= Byte.MAX_VALUE, "(byte) 0 <= Byte.MAX_VALUE"); + Tester.checkEqual(byteLe((byte) 1, Byte.MIN_VALUE), (byte) 1 <= Byte.MIN_VALUE, "(byte) 1 <= Byte.MIN_VALUE"); + Tester.checkEqual(byteLe((byte) 1, (byte) -1), (byte) 1 <= (byte) -1, "(byte) 1 <= (byte) -1"); + Tester.checkEqual(byteLe((byte) 1, (byte) 0), (byte) 1 <= (byte) 0, "(byte) 1 <= (byte) 0"); + Tester.checkEqual(byteLe((byte) 1, (byte) 1), (byte) 1 <= (byte) 1, "(byte) 1 <= (byte) 1"); + Tester.checkEqual(byteLe((byte) 1, Byte.MAX_VALUE), (byte) 1 <= Byte.MAX_VALUE, "(byte) 1 <= Byte.MAX_VALUE"); + Tester.checkEqual(byteLe(Byte.MAX_VALUE, Byte.MIN_VALUE), Byte.MAX_VALUE <= Byte.MIN_VALUE, "Byte.MAX_VALUE <= Byte.MIN_VALUE"); + Tester.checkEqual(byteLe(Byte.MAX_VALUE, (byte) -1), Byte.MAX_VALUE <= (byte) -1, "Byte.MAX_VALUE <= (byte) -1"); + Tester.checkEqual(byteLe(Byte.MAX_VALUE, (byte) 0), Byte.MAX_VALUE <= (byte) 0, "Byte.MAX_VALUE <= (byte) 0"); + Tester.checkEqual(byteLe(Byte.MAX_VALUE, (byte) 1), Byte.MAX_VALUE <= (byte) 1, "Byte.MAX_VALUE <= (byte) 1"); + Tester.checkEqual(byteLe(Byte.MAX_VALUE, Byte.MAX_VALUE), Byte.MAX_VALUE <= Byte.MAX_VALUE, "Byte.MAX_VALUE <= Byte.MAX_VALUE"); + Tester.checkEqual(byteGe(Byte.MIN_VALUE, Byte.MIN_VALUE), Byte.MIN_VALUE >= Byte.MIN_VALUE, "Byte.MIN_VALUE >= Byte.MIN_VALUE"); + Tester.checkEqual(byteGe(Byte.MIN_VALUE, (byte) -1), Byte.MIN_VALUE >= (byte) -1, "Byte.MIN_VALUE >= (byte) -1"); + Tester.checkEqual(byteGe(Byte.MIN_VALUE, (byte) 0), Byte.MIN_VALUE >= (byte) 0, "Byte.MIN_VALUE >= (byte) 0"); + Tester.checkEqual(byteGe(Byte.MIN_VALUE, (byte) 1), Byte.MIN_VALUE >= (byte) 1, "Byte.MIN_VALUE >= (byte) 1"); + Tester.checkEqual(byteGe(Byte.MIN_VALUE, Byte.MAX_VALUE), Byte.MIN_VALUE >= Byte.MAX_VALUE, "Byte.MIN_VALUE >= Byte.MAX_VALUE"); + Tester.checkEqual(byteGe((byte) -1, Byte.MIN_VALUE), (byte) -1 >= Byte.MIN_VALUE, "(byte) -1 >= Byte.MIN_VALUE"); + Tester.checkEqual(byteGe((byte) -1, (byte) -1), (byte) -1 >= (byte) -1, "(byte) -1 >= (byte) -1"); + Tester.checkEqual(byteGe((byte) -1, (byte) 0), (byte) -1 >= (byte) 0, "(byte) -1 >= (byte) 0"); + Tester.checkEqual(byteGe((byte) -1, (byte) 1), (byte) -1 >= (byte) 1, "(byte) -1 >= (byte) 1"); + Tester.checkEqual(byteGe((byte) -1, Byte.MAX_VALUE), (byte) -1 >= Byte.MAX_VALUE, "(byte) -1 >= Byte.MAX_VALUE"); + Tester.checkEqual(byteGe((byte) 0, Byte.MIN_VALUE), (byte) 0 >= Byte.MIN_VALUE, "(byte) 0 >= Byte.MIN_VALUE"); + Tester.checkEqual(byteGe((byte) 0, (byte) -1), (byte) 0 >= (byte) -1, "(byte) 0 >= (byte) -1"); + Tester.checkEqual(byteGe((byte) 0, (byte) 0), (byte) 0 >= (byte) 0, "(byte) 0 >= (byte) 0"); + Tester.checkEqual(byteGe((byte) 0, (byte) 1), (byte) 0 >= (byte) 1, "(byte) 0 >= (byte) 1"); + Tester.checkEqual(byteGe((byte) 0, Byte.MAX_VALUE), (byte) 0 >= Byte.MAX_VALUE, "(byte) 0 >= Byte.MAX_VALUE"); + Tester.checkEqual(byteGe((byte) 1, Byte.MIN_VALUE), (byte) 1 >= Byte.MIN_VALUE, "(byte) 1 >= Byte.MIN_VALUE"); + Tester.checkEqual(byteGe((byte) 1, (byte) -1), (byte) 1 >= (byte) -1, "(byte) 1 >= (byte) -1"); + Tester.checkEqual(byteGe((byte) 1, (byte) 0), (byte) 1 >= (byte) 0, "(byte) 1 >= (byte) 0"); + Tester.checkEqual(byteGe((byte) 1, (byte) 1), (byte) 1 >= (byte) 1, "(byte) 1 >= (byte) 1"); + Tester.checkEqual(byteGe((byte) 1, Byte.MAX_VALUE), (byte) 1 >= Byte.MAX_VALUE, "(byte) 1 >= Byte.MAX_VALUE"); + Tester.checkEqual(byteGe(Byte.MAX_VALUE, Byte.MIN_VALUE), Byte.MAX_VALUE >= Byte.MIN_VALUE, "Byte.MAX_VALUE >= Byte.MIN_VALUE"); + Tester.checkEqual(byteGe(Byte.MAX_VALUE, (byte) -1), Byte.MAX_VALUE >= (byte) -1, "Byte.MAX_VALUE >= (byte) -1"); + Tester.checkEqual(byteGe(Byte.MAX_VALUE, (byte) 0), Byte.MAX_VALUE >= (byte) 0, "Byte.MAX_VALUE >= (byte) 0"); + Tester.checkEqual(byteGe(Byte.MAX_VALUE, (byte) 1), Byte.MAX_VALUE >= (byte) 1, "Byte.MAX_VALUE >= (byte) 1"); + Tester.checkEqual(byteGe(Byte.MAX_VALUE, Byte.MAX_VALUE), Byte.MAX_VALUE >= Byte.MAX_VALUE, "Byte.MAX_VALUE >= Byte.MAX_VALUE"); + Tester.checkEqual(byteEq(Byte.MIN_VALUE, Byte.MIN_VALUE), Byte.MIN_VALUE == Byte.MIN_VALUE, "Byte.MIN_VALUE == Byte.MIN_VALUE"); + Tester.checkEqual(byteEq(Byte.MIN_VALUE, (byte) -1), Byte.MIN_VALUE == (byte) -1, "Byte.MIN_VALUE == (byte) -1"); + Tester.checkEqual(byteEq(Byte.MIN_VALUE, (byte) 0), Byte.MIN_VALUE == (byte) 0, "Byte.MIN_VALUE == (byte) 0"); + Tester.checkEqual(byteEq(Byte.MIN_VALUE, (byte) 1), Byte.MIN_VALUE == (byte) 1, "Byte.MIN_VALUE == (byte) 1"); + Tester.checkEqual(byteEq(Byte.MIN_VALUE, Byte.MAX_VALUE), Byte.MIN_VALUE == Byte.MAX_VALUE, "Byte.MIN_VALUE == Byte.MAX_VALUE"); + Tester.checkEqual(byteEq((byte) -1, Byte.MIN_VALUE), (byte) -1 == Byte.MIN_VALUE, "(byte) -1 == Byte.MIN_VALUE"); + Tester.checkEqual(byteEq((byte) -1, (byte) -1), (byte) -1 == (byte) -1, "(byte) -1 == (byte) -1"); + Tester.checkEqual(byteEq((byte) -1, (byte) 0), (byte) -1 == (byte) 0, "(byte) -1 == (byte) 0"); + Tester.checkEqual(byteEq((byte) -1, (byte) 1), (byte) -1 == (byte) 1, "(byte) -1 == (byte) 1"); + Tester.checkEqual(byteEq((byte) -1, Byte.MAX_VALUE), (byte) -1 == Byte.MAX_VALUE, "(byte) -1 == Byte.MAX_VALUE"); + Tester.checkEqual(byteEq((byte) 0, Byte.MIN_VALUE), (byte) 0 == Byte.MIN_VALUE, "(byte) 0 == Byte.MIN_VALUE"); + Tester.checkEqual(byteEq((byte) 0, (byte) -1), (byte) 0 == (byte) -1, "(byte) 0 == (byte) -1"); + Tester.checkEqual(byteEq((byte) 0, (byte) 0), (byte) 0 == (byte) 0, "(byte) 0 == (byte) 0"); + Tester.checkEqual(byteEq((byte) 0, (byte) 1), (byte) 0 == (byte) 1, "(byte) 0 == (byte) 1"); + Tester.checkEqual(byteEq((byte) 0, Byte.MAX_VALUE), (byte) 0 == Byte.MAX_VALUE, "(byte) 0 == Byte.MAX_VALUE"); + Tester.checkEqual(byteEq((byte) 1, Byte.MIN_VALUE), (byte) 1 == Byte.MIN_VALUE, "(byte) 1 == Byte.MIN_VALUE"); + Tester.checkEqual(byteEq((byte) 1, (byte) -1), (byte) 1 == (byte) -1, "(byte) 1 == (byte) -1"); + Tester.checkEqual(byteEq((byte) 1, (byte) 0), (byte) 1 == (byte) 0, "(byte) 1 == (byte) 0"); + Tester.checkEqual(byteEq((byte) 1, (byte) 1), (byte) 1 == (byte) 1, "(byte) 1 == (byte) 1"); + Tester.checkEqual(byteEq((byte) 1, Byte.MAX_VALUE), (byte) 1 == Byte.MAX_VALUE, "(byte) 1 == Byte.MAX_VALUE"); + Tester.checkEqual(byteEq(Byte.MAX_VALUE, Byte.MIN_VALUE), Byte.MAX_VALUE == Byte.MIN_VALUE, "Byte.MAX_VALUE == Byte.MIN_VALUE"); + Tester.checkEqual(byteEq(Byte.MAX_VALUE, (byte) -1), Byte.MAX_VALUE == (byte) -1, "Byte.MAX_VALUE == (byte) -1"); + Tester.checkEqual(byteEq(Byte.MAX_VALUE, (byte) 0), Byte.MAX_VALUE == (byte) 0, "Byte.MAX_VALUE == (byte) 0"); + Tester.checkEqual(byteEq(Byte.MAX_VALUE, (byte) 1), Byte.MAX_VALUE == (byte) 1, "Byte.MAX_VALUE == (byte) 1"); + Tester.checkEqual(byteEq(Byte.MAX_VALUE, Byte.MAX_VALUE), Byte.MAX_VALUE == Byte.MAX_VALUE, "Byte.MAX_VALUE == Byte.MAX_VALUE"); + Tester.checkEqual(byteNe(Byte.MIN_VALUE, Byte.MIN_VALUE), Byte.MIN_VALUE != Byte.MIN_VALUE, "Byte.MIN_VALUE != Byte.MIN_VALUE"); + Tester.checkEqual(byteNe(Byte.MIN_VALUE, (byte) -1), Byte.MIN_VALUE != (byte) -1, "Byte.MIN_VALUE != (byte) -1"); + Tester.checkEqual(byteNe(Byte.MIN_VALUE, (byte) 0), Byte.MIN_VALUE != (byte) 0, "Byte.MIN_VALUE != (byte) 0"); + Tester.checkEqual(byteNe(Byte.MIN_VALUE, (byte) 1), Byte.MIN_VALUE != (byte) 1, "Byte.MIN_VALUE != (byte) 1"); + Tester.checkEqual(byteNe(Byte.MIN_VALUE, Byte.MAX_VALUE), Byte.MIN_VALUE != Byte.MAX_VALUE, "Byte.MIN_VALUE != Byte.MAX_VALUE"); + Tester.checkEqual(byteNe((byte) -1, Byte.MIN_VALUE), (byte) -1 != Byte.MIN_VALUE, "(byte) -1 != Byte.MIN_VALUE"); + Tester.checkEqual(byteNe((byte) -1, (byte) -1), (byte) -1 != (byte) -1, "(byte) -1 != (byte) -1"); + Tester.checkEqual(byteNe((byte) -1, (byte) 0), (byte) -1 != (byte) 0, "(byte) -1 != (byte) 0"); + Tester.checkEqual(byteNe((byte) -1, (byte) 1), (byte) -1 != (byte) 1, "(byte) -1 != (byte) 1"); + Tester.checkEqual(byteNe((byte) -1, Byte.MAX_VALUE), (byte) -1 != Byte.MAX_VALUE, "(byte) -1 != Byte.MAX_VALUE"); + Tester.checkEqual(byteNe((byte) 0, Byte.MIN_VALUE), (byte) 0 != Byte.MIN_VALUE, "(byte) 0 != Byte.MIN_VALUE"); + Tester.checkEqual(byteNe((byte) 0, (byte) -1), (byte) 0 != (byte) -1, "(byte) 0 != (byte) -1"); + Tester.checkEqual(byteNe((byte) 0, (byte) 0), (byte) 0 != (byte) 0, "(byte) 0 != (byte) 0"); + Tester.checkEqual(byteNe((byte) 0, (byte) 1), (byte) 0 != (byte) 1, "(byte) 0 != (byte) 1"); + Tester.checkEqual(byteNe((byte) 0, Byte.MAX_VALUE), (byte) 0 != Byte.MAX_VALUE, "(byte) 0 != Byte.MAX_VALUE"); + Tester.checkEqual(byteNe((byte) 1, Byte.MIN_VALUE), (byte) 1 != Byte.MIN_VALUE, "(byte) 1 != Byte.MIN_VALUE"); + Tester.checkEqual(byteNe((byte) 1, (byte) -1), (byte) 1 != (byte) -1, "(byte) 1 != (byte) -1"); + Tester.checkEqual(byteNe((byte) 1, (byte) 0), (byte) 1 != (byte) 0, "(byte) 1 != (byte) 0"); + Tester.checkEqual(byteNe((byte) 1, (byte) 1), (byte) 1 != (byte) 1, "(byte) 1 != (byte) 1"); + Tester.checkEqual(byteNe((byte) 1, Byte.MAX_VALUE), (byte) 1 != Byte.MAX_VALUE, "(byte) 1 != Byte.MAX_VALUE"); + Tester.checkEqual(byteNe(Byte.MAX_VALUE, Byte.MIN_VALUE), Byte.MAX_VALUE != Byte.MIN_VALUE, "Byte.MAX_VALUE != Byte.MIN_VALUE"); + Tester.checkEqual(byteNe(Byte.MAX_VALUE, (byte) -1), Byte.MAX_VALUE != (byte) -1, "Byte.MAX_VALUE != (byte) -1"); + Tester.checkEqual(byteNe(Byte.MAX_VALUE, (byte) 0), Byte.MAX_VALUE != (byte) 0, "Byte.MAX_VALUE != (byte) 0"); + Tester.checkEqual(byteNe(Byte.MAX_VALUE, (byte) 1), Byte.MAX_VALUE != (byte) 1, "Byte.MAX_VALUE != (byte) 1"); + Tester.checkEqual(byteNe(Byte.MAX_VALUE, Byte.MAX_VALUE), Byte.MAX_VALUE != Byte.MAX_VALUE, "Byte.MAX_VALUE != Byte.MAX_VALUE"); + Tester.checkEqual(byteAnd(Byte.MIN_VALUE, Byte.MIN_VALUE), (byte) (Byte.MIN_VALUE & Byte.MIN_VALUE), "(byte) (Byte.MIN_VALUE & Byte.MIN_VALUE)"); + Tester.checkEqual(byteAnd(Byte.MIN_VALUE, (byte) -1), (byte) (Byte.MIN_VALUE & (byte) -1), "(byte) (Byte.MIN_VALUE & (byte) -1)"); + Tester.checkEqual(byteAnd(Byte.MIN_VALUE, (byte) 0), (byte) (Byte.MIN_VALUE & (byte) 0), "(byte) (Byte.MIN_VALUE & (byte) 0)"); + Tester.checkEqual(byteAnd(Byte.MIN_VALUE, (byte) 1), (byte) (Byte.MIN_VALUE & (byte) 1), "(byte) (Byte.MIN_VALUE & (byte) 1)"); + Tester.checkEqual(byteAnd(Byte.MIN_VALUE, Byte.MAX_VALUE), (byte) (Byte.MIN_VALUE & Byte.MAX_VALUE), "(byte) (Byte.MIN_VALUE & Byte.MAX_VALUE)"); + Tester.checkEqual(byteAnd((byte) -1, Byte.MIN_VALUE), (byte) ((byte) -1 & Byte.MIN_VALUE), "(byte) ((byte) -1 & Byte.MIN_VALUE)"); + Tester.checkEqual(byteAnd((byte) -1, (byte) -1), (byte) ((byte) -1 & (byte) -1), "(byte) ((byte) -1 & (byte) -1)"); + Tester.checkEqual(byteAnd((byte) -1, (byte) 0), (byte) ((byte) -1 & (byte) 0), "(byte) ((byte) -1 & (byte) 0)"); + Tester.checkEqual(byteAnd((byte) -1, (byte) 1), (byte) ((byte) -1 & (byte) 1), "(byte) ((byte) -1 & (byte) 1)"); + Tester.checkEqual(byteAnd((byte) -1, Byte.MAX_VALUE), (byte) ((byte) -1 & Byte.MAX_VALUE), "(byte) ((byte) -1 & Byte.MAX_VALUE)"); + Tester.checkEqual(byteAnd((byte) 0, Byte.MIN_VALUE), (byte) ((byte) 0 & Byte.MIN_VALUE), "(byte) ((byte) 0 & Byte.MIN_VALUE)"); + Tester.checkEqual(byteAnd((byte) 0, (byte) -1), (byte) ((byte) 0 & (byte) -1), "(byte) ((byte) 0 & (byte) -1)"); + Tester.checkEqual(byteAnd((byte) 0, (byte) 0), (byte) ((byte) 0 & (byte) 0), "(byte) ((byte) 0 & (byte) 0)"); + Tester.checkEqual(byteAnd((byte) 0, (byte) 1), (byte) ((byte) 0 & (byte) 1), "(byte) ((byte) 0 & (byte) 1)"); + Tester.checkEqual(byteAnd((byte) 0, Byte.MAX_VALUE), (byte) ((byte) 0 & Byte.MAX_VALUE), "(byte) ((byte) 0 & Byte.MAX_VALUE)"); + Tester.checkEqual(byteAnd((byte) 1, Byte.MIN_VALUE), (byte) ((byte) 1 & Byte.MIN_VALUE), "(byte) ((byte) 1 & Byte.MIN_VALUE)"); + Tester.checkEqual(byteAnd((byte) 1, (byte) -1), (byte) ((byte) 1 & (byte) -1), "(byte) ((byte) 1 & (byte) -1)"); + Tester.checkEqual(byteAnd((byte) 1, (byte) 0), (byte) ((byte) 1 & (byte) 0), "(byte) ((byte) 1 & (byte) 0)"); + Tester.checkEqual(byteAnd((byte) 1, (byte) 1), (byte) ((byte) 1 & (byte) 1), "(byte) ((byte) 1 & (byte) 1)"); + Tester.checkEqual(byteAnd((byte) 1, Byte.MAX_VALUE), (byte) ((byte) 1 & Byte.MAX_VALUE), "(byte) ((byte) 1 & Byte.MAX_VALUE)"); + Tester.checkEqual(byteAnd(Byte.MAX_VALUE, Byte.MIN_VALUE), (byte) (Byte.MAX_VALUE & Byte.MIN_VALUE), "(byte) (Byte.MAX_VALUE & Byte.MIN_VALUE)"); + Tester.checkEqual(byteAnd(Byte.MAX_VALUE, (byte) -1), (byte) (Byte.MAX_VALUE & (byte) -1), "(byte) (Byte.MAX_VALUE & (byte) -1)"); + Tester.checkEqual(byteAnd(Byte.MAX_VALUE, (byte) 0), (byte) (Byte.MAX_VALUE & (byte) 0), "(byte) (Byte.MAX_VALUE & (byte) 0)"); + Tester.checkEqual(byteAnd(Byte.MAX_VALUE, (byte) 1), (byte) (Byte.MAX_VALUE & (byte) 1), "(byte) (Byte.MAX_VALUE & (byte) 1)"); + Tester.checkEqual(byteAnd(Byte.MAX_VALUE, Byte.MAX_VALUE), (byte) (Byte.MAX_VALUE & Byte.MAX_VALUE), "(byte) (Byte.MAX_VALUE & Byte.MAX_VALUE)"); + Tester.checkEqual(byteXor(Byte.MIN_VALUE, Byte.MIN_VALUE), (byte) (Byte.MIN_VALUE ^ Byte.MIN_VALUE), "(byte) (Byte.MIN_VALUE ^ Byte.MIN_VALUE)"); + Tester.checkEqual(byteXor(Byte.MIN_VALUE, (byte) -1), (byte) (Byte.MIN_VALUE ^ (byte) -1), "(byte) (Byte.MIN_VALUE ^ (byte) -1)"); + Tester.checkEqual(byteXor(Byte.MIN_VALUE, (byte) 0), (byte) (Byte.MIN_VALUE ^ (byte) 0), "(byte) (Byte.MIN_VALUE ^ (byte) 0)"); + Tester.checkEqual(byteXor(Byte.MIN_VALUE, (byte) 1), (byte) (Byte.MIN_VALUE ^ (byte) 1), "(byte) (Byte.MIN_VALUE ^ (byte) 1)"); + Tester.checkEqual(byteXor(Byte.MIN_VALUE, Byte.MAX_VALUE), (byte) (Byte.MIN_VALUE ^ Byte.MAX_VALUE), "(byte) (Byte.MIN_VALUE ^ Byte.MAX_VALUE)"); + Tester.checkEqual(byteXor((byte) -1, Byte.MIN_VALUE), (byte) ((byte) -1 ^ Byte.MIN_VALUE), "(byte) ((byte) -1 ^ Byte.MIN_VALUE)"); + Tester.checkEqual(byteXor((byte) -1, (byte) -1), (byte) ((byte) -1 ^ (byte) -1), "(byte) ((byte) -1 ^ (byte) -1)"); + Tester.checkEqual(byteXor((byte) -1, (byte) 0), (byte) ((byte) -1 ^ (byte) 0), "(byte) ((byte) -1 ^ (byte) 0)"); + Tester.checkEqual(byteXor((byte) -1, (byte) 1), (byte) ((byte) -1 ^ (byte) 1), "(byte) ((byte) -1 ^ (byte) 1)"); + Tester.checkEqual(byteXor((byte) -1, Byte.MAX_VALUE), (byte) ((byte) -1 ^ Byte.MAX_VALUE), "(byte) ((byte) -1 ^ Byte.MAX_VALUE)"); + Tester.checkEqual(byteXor((byte) 0, Byte.MIN_VALUE), (byte) ((byte) 0 ^ Byte.MIN_VALUE), "(byte) ((byte) 0 ^ Byte.MIN_VALUE)"); + Tester.checkEqual(byteXor((byte) 0, (byte) -1), (byte) ((byte) 0 ^ (byte) -1), "(byte) ((byte) 0 ^ (byte) -1)"); + Tester.checkEqual(byteXor((byte) 0, (byte) 0), (byte) ((byte) 0 ^ (byte) 0), "(byte) ((byte) 0 ^ (byte) 0)"); + Tester.checkEqual(byteXor((byte) 0, (byte) 1), (byte) ((byte) 0 ^ (byte) 1), "(byte) ((byte) 0 ^ (byte) 1)"); + Tester.checkEqual(byteXor((byte) 0, Byte.MAX_VALUE), (byte) ((byte) 0 ^ Byte.MAX_VALUE), "(byte) ((byte) 0 ^ Byte.MAX_VALUE)"); + Tester.checkEqual(byteXor((byte) 1, Byte.MIN_VALUE), (byte) ((byte) 1 ^ Byte.MIN_VALUE), "(byte) ((byte) 1 ^ Byte.MIN_VALUE)"); + Tester.checkEqual(byteXor((byte) 1, (byte) -1), (byte) ((byte) 1 ^ (byte) -1), "(byte) ((byte) 1 ^ (byte) -1)"); + Tester.checkEqual(byteXor((byte) 1, (byte) 0), (byte) ((byte) 1 ^ (byte) 0), "(byte) ((byte) 1 ^ (byte) 0)"); + Tester.checkEqual(byteXor((byte) 1, (byte) 1), (byte) ((byte) 1 ^ (byte) 1), "(byte) ((byte) 1 ^ (byte) 1)"); + Tester.checkEqual(byteXor((byte) 1, Byte.MAX_VALUE), (byte) ((byte) 1 ^ Byte.MAX_VALUE), "(byte) ((byte) 1 ^ Byte.MAX_VALUE)"); + Tester.checkEqual(byteXor(Byte.MAX_VALUE, Byte.MIN_VALUE), (byte) (Byte.MAX_VALUE ^ Byte.MIN_VALUE), "(byte) (Byte.MAX_VALUE ^ Byte.MIN_VALUE)"); + Tester.checkEqual(byteXor(Byte.MAX_VALUE, (byte) -1), (byte) (Byte.MAX_VALUE ^ (byte) -1), "(byte) (Byte.MAX_VALUE ^ (byte) -1)"); + Tester.checkEqual(byteXor(Byte.MAX_VALUE, (byte) 0), (byte) (Byte.MAX_VALUE ^ (byte) 0), "(byte) (Byte.MAX_VALUE ^ (byte) 0)"); + Tester.checkEqual(byteXor(Byte.MAX_VALUE, (byte) 1), (byte) (Byte.MAX_VALUE ^ (byte) 1), "(byte) (Byte.MAX_VALUE ^ (byte) 1)"); + Tester.checkEqual(byteXor(Byte.MAX_VALUE, Byte.MAX_VALUE), (byte) (Byte.MAX_VALUE ^ Byte.MAX_VALUE), "(byte) (Byte.MAX_VALUE ^ Byte.MAX_VALUE)"); + Tester.checkEqual(byteOr(Byte.MIN_VALUE, Byte.MIN_VALUE), (byte) (Byte.MIN_VALUE | Byte.MIN_VALUE), "(byte) (Byte.MIN_VALUE | Byte.MIN_VALUE)"); + Tester.checkEqual(byteOr(Byte.MIN_VALUE, (byte) -1), (byte) (Byte.MIN_VALUE | (byte) -1), "(byte) (Byte.MIN_VALUE | (byte) -1)"); + Tester.checkEqual(byteOr(Byte.MIN_VALUE, (byte) 0), (byte) (Byte.MIN_VALUE | (byte) 0), "(byte) (Byte.MIN_VALUE | (byte) 0)"); + Tester.checkEqual(byteOr(Byte.MIN_VALUE, (byte) 1), (byte) (Byte.MIN_VALUE | (byte) 1), "(byte) (Byte.MIN_VALUE | (byte) 1)"); + Tester.checkEqual(byteOr(Byte.MIN_VALUE, Byte.MAX_VALUE), (byte) (Byte.MIN_VALUE | Byte.MAX_VALUE), "(byte) (Byte.MIN_VALUE | Byte.MAX_VALUE)"); + Tester.checkEqual(byteOr((byte) -1, Byte.MIN_VALUE), (byte) ((byte) -1 | Byte.MIN_VALUE), "(byte) ((byte) -1 | Byte.MIN_VALUE)"); + Tester.checkEqual(byteOr((byte) -1, (byte) -1), (byte) ((byte) -1 | (byte) -1), "(byte) ((byte) -1 | (byte) -1)"); + Tester.checkEqual(byteOr((byte) -1, (byte) 0), (byte) ((byte) -1 | (byte) 0), "(byte) ((byte) -1 | (byte) 0)"); + Tester.checkEqual(byteOr((byte) -1, (byte) 1), (byte) ((byte) -1 | (byte) 1), "(byte) ((byte) -1 | (byte) 1)"); + Tester.checkEqual(byteOr((byte) -1, Byte.MAX_VALUE), (byte) ((byte) -1 | Byte.MAX_VALUE), "(byte) ((byte) -1 | Byte.MAX_VALUE)"); + Tester.checkEqual(byteOr((byte) 0, Byte.MIN_VALUE), (byte) ((byte) 0 | Byte.MIN_VALUE), "(byte) ((byte) 0 | Byte.MIN_VALUE)"); + Tester.checkEqual(byteOr((byte) 0, (byte) -1), (byte) ((byte) 0 | (byte) -1), "(byte) ((byte) 0 | (byte) -1)"); + Tester.checkEqual(byteOr((byte) 0, (byte) 0), (byte) ((byte) 0 | (byte) 0), "(byte) ((byte) 0 | (byte) 0)"); + Tester.checkEqual(byteOr((byte) 0, (byte) 1), (byte) ((byte) 0 | (byte) 1), "(byte) ((byte) 0 | (byte) 1)"); + Tester.checkEqual(byteOr((byte) 0, Byte.MAX_VALUE), (byte) ((byte) 0 | Byte.MAX_VALUE), "(byte) ((byte) 0 | Byte.MAX_VALUE)"); + Tester.checkEqual(byteOr((byte) 1, Byte.MIN_VALUE), (byte) ((byte) 1 | Byte.MIN_VALUE), "(byte) ((byte) 1 | Byte.MIN_VALUE)"); + Tester.checkEqual(byteOr((byte) 1, (byte) -1), (byte) ((byte) 1 | (byte) -1), "(byte) ((byte) 1 | (byte) -1)"); + Tester.checkEqual(byteOr((byte) 1, (byte) 0), (byte) ((byte) 1 | (byte) 0), "(byte) ((byte) 1 | (byte) 0)"); + Tester.checkEqual(byteOr((byte) 1, (byte) 1), (byte) ((byte) 1 | (byte) 1), "(byte) ((byte) 1 | (byte) 1)"); + Tester.checkEqual(byteOr((byte) 1, Byte.MAX_VALUE), (byte) ((byte) 1 | Byte.MAX_VALUE), "(byte) ((byte) 1 | Byte.MAX_VALUE)"); + Tester.checkEqual(byteOr(Byte.MAX_VALUE, Byte.MIN_VALUE), (byte) (Byte.MAX_VALUE | Byte.MIN_VALUE), "(byte) (Byte.MAX_VALUE | Byte.MIN_VALUE)"); + Tester.checkEqual(byteOr(Byte.MAX_VALUE, (byte) -1), (byte) (Byte.MAX_VALUE | (byte) -1), "(byte) (Byte.MAX_VALUE | (byte) -1)"); + Tester.checkEqual(byteOr(Byte.MAX_VALUE, (byte) 0), (byte) (Byte.MAX_VALUE | (byte) 0), "(byte) (Byte.MAX_VALUE | (byte) 0)"); + Tester.checkEqual(byteOr(Byte.MAX_VALUE, (byte) 1), (byte) (Byte.MAX_VALUE | (byte) 1), "(byte) (Byte.MAX_VALUE | (byte) 1)"); + Tester.checkEqual(byteOr(Byte.MAX_VALUE, Byte.MAX_VALUE), (byte) (Byte.MAX_VALUE | Byte.MAX_VALUE), "(byte) (Byte.MAX_VALUE | Byte.MAX_VALUE)"); + } + static void byteSwitch() { + switch(0) { + case ((((byte) + Byte.MIN_VALUE) == 0) ? 0 : 0): + case ((((byte) + (byte) -1) == 0) ? 1 : 1): + case ((((byte) + (byte) 0) == 0) ? 2 : 2): + case ((((byte) + (byte) 1) == 0) ? 3 : 3): + case ((((byte) + Byte.MAX_VALUE) == 0) ? 4 : 4): + case ((((byte) - Byte.MIN_VALUE) == 0) ? 5 : 5): + case ((((byte) - (byte) -1) == 0) ? 6 : 6): + case ((((byte) - (byte) 0) == 0) ? 7 : 7): + case ((((byte) - (byte) 1) == 0) ? 8 : 8): + case ((((byte) - Byte.MAX_VALUE) == 0) ? 9 : 9): + case ((((byte) ~ Byte.MIN_VALUE) == 0) ? 10 : 10): + case ((((byte) ~ (byte) -1) == 0) ? 11 : 11): + case ((((byte) ~ (byte) 0) == 0) ? 12 : 12): + case ((((byte) ~ (byte) 1) == 0) ? 13 : 13): + case ((((byte) ~ Byte.MAX_VALUE) == 0) ? 14 : 14): + case ((((byte) (Byte.MIN_VALUE * Byte.MIN_VALUE)) == 0) ? 15 : 15): + case ((((byte) (Byte.MIN_VALUE * (byte) -1)) == 0) ? 16 : 16): + case ((((byte) (Byte.MIN_VALUE * (byte) 0)) == 0) ? 17 : 17): + case ((((byte) (Byte.MIN_VALUE * (byte) 1)) == 0) ? 18 : 18): + case ((((byte) (Byte.MIN_VALUE * Byte.MAX_VALUE)) == 0) ? 19 : 19): + case ((((byte) ((byte) -1 * Byte.MIN_VALUE)) == 0) ? 20 : 20): + case ((((byte) ((byte) -1 * (byte) -1)) == 0) ? 21 : 21): + case ((((byte) ((byte) -1 * (byte) 0)) == 0) ? 22 : 22): + case ((((byte) ((byte) -1 * (byte) 1)) == 0) ? 23 : 23): + case ((((byte) ((byte) -1 * Byte.MAX_VALUE)) == 0) ? 24 : 24): + case ((((byte) ((byte) 0 * Byte.MIN_VALUE)) == 0) ? 25 : 25): + case ((((byte) ((byte) 0 * (byte) -1)) == 0) ? 26 : 26): + case ((((byte) ((byte) 0 * (byte) 0)) == 0) ? 27 : 27): + case ((((byte) ((byte) 0 * (byte) 1)) == 0) ? 28 : 28): + case ((((byte) ((byte) 0 * Byte.MAX_VALUE)) == 0) ? 29 : 29): + case ((((byte) ((byte) 1 * Byte.MIN_VALUE)) == 0) ? 30 : 30): + case ((((byte) ((byte) 1 * (byte) -1)) == 0) ? 31 : 31): + case ((((byte) ((byte) 1 * (byte) 0)) == 0) ? 32 : 32): + case ((((byte) ((byte) 1 * (byte) 1)) == 0) ? 33 : 33): + case ((((byte) ((byte) 1 * Byte.MAX_VALUE)) == 0) ? 34 : 34): + case ((((byte) (Byte.MAX_VALUE * Byte.MIN_VALUE)) == 0) ? 35 : 35): + case ((((byte) (Byte.MAX_VALUE * (byte) -1)) == 0) ? 36 : 36): + case ((((byte) (Byte.MAX_VALUE * (byte) 0)) == 0) ? 37 : 37): + case ((((byte) (Byte.MAX_VALUE * (byte) 1)) == 0) ? 38 : 38): + case ((((byte) (Byte.MAX_VALUE * Byte.MAX_VALUE)) == 0) ? 39 : 39): + case ((((byte) (Byte.MIN_VALUE / Byte.MIN_VALUE)) == 0) ? 40 : 40): + case ((((byte) (Byte.MIN_VALUE / (byte) -1)) == 0) ? 41 : 41): + case ((((byte) (Byte.MIN_VALUE / (byte) 1)) == 0) ? 42 : 42): + case ((((byte) (Byte.MIN_VALUE / Byte.MAX_VALUE)) == 0) ? 43 : 43): + case ((((byte) ((byte) -1 / Byte.MIN_VALUE)) == 0) ? 44 : 44): + case ((((byte) ((byte) -1 / (byte) -1)) == 0) ? 45 : 45): + case ((((byte) ((byte) -1 / (byte) 1)) == 0) ? 46 : 46): + case ((((byte) ((byte) -1 / Byte.MAX_VALUE)) == 0) ? 47 : 47): + case ((((byte) ((byte) 0 / Byte.MIN_VALUE)) == 0) ? 48 : 48): + case ((((byte) ((byte) 0 / (byte) -1)) == 0) ? 49 : 49): + case ((((byte) ((byte) 0 / (byte) 1)) == 0) ? 50 : 50): + case ((((byte) ((byte) 0 / Byte.MAX_VALUE)) == 0) ? 51 : 51): + case ((((byte) ((byte) 1 / Byte.MIN_VALUE)) == 0) ? 52 : 52): + case ((((byte) ((byte) 1 / (byte) -1)) == 0) ? 53 : 53): + case ((((byte) ((byte) 1 / (byte) 1)) == 0) ? 54 : 54): + case ((((byte) ((byte) 1 / Byte.MAX_VALUE)) == 0) ? 55 : 55): + case ((((byte) (Byte.MAX_VALUE / Byte.MIN_VALUE)) == 0) ? 56 : 56): + case ((((byte) (Byte.MAX_VALUE / (byte) -1)) == 0) ? 57 : 57): + case ((((byte) (Byte.MAX_VALUE / (byte) 1)) == 0) ? 58 : 58): + case ((((byte) (Byte.MAX_VALUE / Byte.MAX_VALUE)) == 0) ? 59 : 59): + case ((((byte) (Byte.MIN_VALUE % Byte.MIN_VALUE)) == 0) ? 60 : 60): + case ((((byte) (Byte.MIN_VALUE % (byte) -1)) == 0) ? 61 : 61): + case ((((byte) (Byte.MIN_VALUE % (byte) 1)) == 0) ? 62 : 62): + case ((((byte) (Byte.MIN_VALUE % Byte.MAX_VALUE)) == 0) ? 63 : 63): + case ((((byte) ((byte) -1 % Byte.MIN_VALUE)) == 0) ? 64 : 64): + case ((((byte) ((byte) -1 % (byte) -1)) == 0) ? 65 : 65): + case ((((byte) ((byte) -1 % (byte) 1)) == 0) ? 66 : 66): + case ((((byte) ((byte) -1 % Byte.MAX_VALUE)) == 0) ? 67 : 67): + case ((((byte) ((byte) 0 % Byte.MIN_VALUE)) == 0) ? 68 : 68): + case ((((byte) ((byte) 0 % (byte) -1)) == 0) ? 69 : 69): + case ((((byte) ((byte) 0 % (byte) 1)) == 0) ? 70 : 70): + case ((((byte) ((byte) 0 % Byte.MAX_VALUE)) == 0) ? 71 : 71): + case ((((byte) ((byte) 1 % Byte.MIN_VALUE)) == 0) ? 72 : 72): + case ((((byte) ((byte) 1 % (byte) -1)) == 0) ? 73 : 73): + case ((((byte) ((byte) 1 % (byte) 1)) == 0) ? 74 : 74): + case ((((byte) ((byte) 1 % Byte.MAX_VALUE)) == 0) ? 75 : 75): + case ((((byte) (Byte.MAX_VALUE % Byte.MIN_VALUE)) == 0) ? 76 : 76): + case ((((byte) (Byte.MAX_VALUE % (byte) -1)) == 0) ? 77 : 77): + case ((((byte) (Byte.MAX_VALUE % (byte) 1)) == 0) ? 78 : 78): + case ((((byte) (Byte.MAX_VALUE % Byte.MAX_VALUE)) == 0) ? 79 : 79): + case ((((byte) (Byte.MIN_VALUE + Byte.MIN_VALUE)) == 0) ? 80 : 80): + case ((((byte) (Byte.MIN_VALUE + (byte) -1)) == 0) ? 81 : 81): + case ((((byte) (Byte.MIN_VALUE + (byte) 0)) == 0) ? 82 : 82): + case ((((byte) (Byte.MIN_VALUE + (byte) 1)) == 0) ? 83 : 83): + case ((((byte) (Byte.MIN_VALUE + Byte.MAX_VALUE)) == 0) ? 84 : 84): + case ((((byte) ((byte) -1 + Byte.MIN_VALUE)) == 0) ? 85 : 85): + case ((((byte) ((byte) -1 + (byte) -1)) == 0) ? 86 : 86): + case ((((byte) ((byte) -1 + (byte) 0)) == 0) ? 87 : 87): + case ((((byte) ((byte) -1 + (byte) 1)) == 0) ? 88 : 88): + case ((((byte) ((byte) -1 + Byte.MAX_VALUE)) == 0) ? 89 : 89): + case ((((byte) ((byte) 0 + Byte.MIN_VALUE)) == 0) ? 90 : 90): + case ((((byte) ((byte) 0 + (byte) -1)) == 0) ? 91 : 91): + case ((((byte) ((byte) 0 + (byte) 0)) == 0) ? 92 : 92): + case ((((byte) ((byte) 0 + (byte) 1)) == 0) ? 93 : 93): + case ((((byte) ((byte) 0 + Byte.MAX_VALUE)) == 0) ? 94 : 94): + case ((((byte) ((byte) 1 + Byte.MIN_VALUE)) == 0) ? 95 : 95): + case ((((byte) ((byte) 1 + (byte) -1)) == 0) ? 96 : 96): + case ((((byte) ((byte) 1 + (byte) 0)) == 0) ? 97 : 97): + case ((((byte) ((byte) 1 + (byte) 1)) == 0) ? 98 : 98): + case ((((byte) ((byte) 1 + Byte.MAX_VALUE)) == 0) ? 99 : 99): + case ((((byte) (Byte.MAX_VALUE + Byte.MIN_VALUE)) == 0) ? 100 : 100): + case ((((byte) (Byte.MAX_VALUE + (byte) -1)) == 0) ? 101 : 101): + case ((((byte) (Byte.MAX_VALUE + (byte) 0)) == 0) ? 102 : 102): + case ((((byte) (Byte.MAX_VALUE + (byte) 1)) == 0) ? 103 : 103): + case ((((byte) (Byte.MAX_VALUE + Byte.MAX_VALUE)) == 0) ? 104 : 104): + case ((((byte) (Byte.MIN_VALUE - Byte.MIN_VALUE)) == 0) ? 105 : 105): + case ((((byte) (Byte.MIN_VALUE - (byte) -1)) == 0) ? 106 : 106): + case ((((byte) (Byte.MIN_VALUE - (byte) 0)) == 0) ? 107 : 107): + case ((((byte) (Byte.MIN_VALUE - (byte) 1)) == 0) ? 108 : 108): + case ((((byte) (Byte.MIN_VALUE - Byte.MAX_VALUE)) == 0) ? 109 : 109): + case ((((byte) ((byte) -1 - Byte.MIN_VALUE)) == 0) ? 110 : 110): + case ((((byte) ((byte) -1 - (byte) -1)) == 0) ? 111 : 111): + case ((((byte) ((byte) -1 - (byte) 0)) == 0) ? 112 : 112): + case ((((byte) ((byte) -1 - (byte) 1)) == 0) ? 113 : 113): + case ((((byte) ((byte) -1 - Byte.MAX_VALUE)) == 0) ? 114 : 114): + case ((((byte) ((byte) 0 - Byte.MIN_VALUE)) == 0) ? 115 : 115): + case ((((byte) ((byte) 0 - (byte) -1)) == 0) ? 116 : 116): + case ((((byte) ((byte) 0 - (byte) 0)) == 0) ? 117 : 117): + case ((((byte) ((byte) 0 - (byte) 1)) == 0) ? 118 : 118): + case ((((byte) ((byte) 0 - Byte.MAX_VALUE)) == 0) ? 119 : 119): + case ((((byte) ((byte) 1 - Byte.MIN_VALUE)) == 0) ? 120 : 120): + case ((((byte) ((byte) 1 - (byte) -1)) == 0) ? 121 : 121): + case ((((byte) ((byte) 1 - (byte) 0)) == 0) ? 122 : 122): + case ((((byte) ((byte) 1 - (byte) 1)) == 0) ? 123 : 123): + case ((((byte) ((byte) 1 - Byte.MAX_VALUE)) == 0) ? 124 : 124): + case ((((byte) (Byte.MAX_VALUE - Byte.MIN_VALUE)) == 0) ? 125 : 125): + case ((((byte) (Byte.MAX_VALUE - (byte) -1)) == 0) ? 126 : 126): + case ((((byte) (Byte.MAX_VALUE - (byte) 0)) == 0) ? 127 : 127): + case ((((byte) (Byte.MAX_VALUE - (byte) 1)) == 0) ? 128 : 128): + case ((((byte) (Byte.MAX_VALUE - Byte.MAX_VALUE)) == 0) ? 129 : 129): + case ((((byte) (Byte.MIN_VALUE << Byte.MIN_VALUE)) == 0) ? 130 : 130): + case ((((byte) (Byte.MIN_VALUE << (byte) -1)) == 0) ? 131 : 131): + case ((((byte) (Byte.MIN_VALUE << (byte) 0)) == 0) ? 132 : 132): + case ((((byte) (Byte.MIN_VALUE << (byte) 1)) == 0) ? 133 : 133): + case ((((byte) (Byte.MIN_VALUE << Byte.MAX_VALUE)) == 0) ? 134 : 134): + case ((((byte) ((byte) -1 << Byte.MIN_VALUE)) == 0) ? 135 : 135): + case ((((byte) ((byte) -1 << (byte) -1)) == 0) ? 136 : 136): + case ((((byte) ((byte) -1 << (byte) 0)) == 0) ? 137 : 137): + case ((((byte) ((byte) -1 << (byte) 1)) == 0) ? 138 : 138): + case ((((byte) ((byte) -1 << Byte.MAX_VALUE)) == 0) ? 139 : 139): + case ((((byte) ((byte) 0 << Byte.MIN_VALUE)) == 0) ? 140 : 140): + case ((((byte) ((byte) 0 << (byte) -1)) == 0) ? 141 : 141): + case ((((byte) ((byte) 0 << (byte) 0)) == 0) ? 142 : 142): + case ((((byte) ((byte) 0 << (byte) 1)) == 0) ? 143 : 143): + case ((((byte) ((byte) 0 << Byte.MAX_VALUE)) == 0) ? 144 : 144): + case ((((byte) ((byte) 1 << Byte.MIN_VALUE)) == 0) ? 145 : 145): + case ((((byte) ((byte) 1 << (byte) -1)) == 0) ? 146 : 146): + case ((((byte) ((byte) 1 << (byte) 0)) == 0) ? 147 : 147): + case ((((byte) ((byte) 1 << (byte) 1)) == 0) ? 148 : 148): + case ((((byte) ((byte) 1 << Byte.MAX_VALUE)) == 0) ? 149 : 149): + case ((((byte) (Byte.MAX_VALUE << Byte.MIN_VALUE)) == 0) ? 150 : 150): + case ((((byte) (Byte.MAX_VALUE << (byte) -1)) == 0) ? 151 : 151): + case ((((byte) (Byte.MAX_VALUE << (byte) 0)) == 0) ? 152 : 152): + case ((((byte) (Byte.MAX_VALUE << (byte) 1)) == 0) ? 153 : 153): + case ((((byte) (Byte.MAX_VALUE << Byte.MAX_VALUE)) == 0) ? 154 : 154): + case ((((byte) (Byte.MIN_VALUE >> Byte.MIN_VALUE)) == 0) ? 155 : 155): + case ((((byte) (Byte.MIN_VALUE >> (byte) -1)) == 0) ? 156 : 156): + case ((((byte) (Byte.MIN_VALUE >> (byte) 0)) == 0) ? 157 : 157): + case ((((byte) (Byte.MIN_VALUE >> (byte) 1)) == 0) ? 158 : 158): + case ((((byte) (Byte.MIN_VALUE >> Byte.MAX_VALUE)) == 0) ? 159 : 159): + case ((((byte) ((byte) -1 >> Byte.MIN_VALUE)) == 0) ? 160 : 160): + case ((((byte) ((byte) -1 >> (byte) -1)) == 0) ? 161 : 161): + case ((((byte) ((byte) -1 >> (byte) 0)) == 0) ? 162 : 162): + case ((((byte) ((byte) -1 >> (byte) 1)) == 0) ? 163 : 163): + case ((((byte) ((byte) -1 >> Byte.MAX_VALUE)) == 0) ? 164 : 164): + case ((((byte) ((byte) 0 >> Byte.MIN_VALUE)) == 0) ? 165 : 165): + case ((((byte) ((byte) 0 >> (byte) -1)) == 0) ? 166 : 166): + case ((((byte) ((byte) 0 >> (byte) 0)) == 0) ? 167 : 167): + case ((((byte) ((byte) 0 >> (byte) 1)) == 0) ? 168 : 168): + case ((((byte) ((byte) 0 >> Byte.MAX_VALUE)) == 0) ? 169 : 169): + case ((((byte) ((byte) 1 >> Byte.MIN_VALUE)) == 0) ? 170 : 170): + case ((((byte) ((byte) 1 >> (byte) -1)) == 0) ? 171 : 171): + case ((((byte) ((byte) 1 >> (byte) 0)) == 0) ? 172 : 172): + case ((((byte) ((byte) 1 >> (byte) 1)) == 0) ? 173 : 173): + case ((((byte) ((byte) 1 >> Byte.MAX_VALUE)) == 0) ? 174 : 174): + case ((((byte) (Byte.MAX_VALUE >> Byte.MIN_VALUE)) == 0) ? 175 : 175): + case ((((byte) (Byte.MAX_VALUE >> (byte) -1)) == 0) ? 176 : 176): + case ((((byte) (Byte.MAX_VALUE >> (byte) 0)) == 0) ? 177 : 177): + case ((((byte) (Byte.MAX_VALUE >> (byte) 1)) == 0) ? 178 : 178): + case ((((byte) (Byte.MAX_VALUE >> Byte.MAX_VALUE)) == 0) ? 179 : 179): + case ((((byte) (Byte.MIN_VALUE >>> Byte.MIN_VALUE)) == 0) ? 180 : 180): + case ((((byte) (Byte.MIN_VALUE >>> (byte) -1)) == 0) ? 181 : 181): + case ((((byte) (Byte.MIN_VALUE >>> (byte) 0)) == 0) ? 182 : 182): + case ((((byte) (Byte.MIN_VALUE >>> (byte) 1)) == 0) ? 183 : 183): + case ((((byte) (Byte.MIN_VALUE >>> Byte.MAX_VALUE)) == 0) ? 184 : 184): + case ((((byte) ((byte) -1 >>> Byte.MIN_VALUE)) == 0) ? 185 : 185): + case ((((byte) ((byte) -1 >>> (byte) -1)) == 0) ? 186 : 186): + case ((((byte) ((byte) -1 >>> (byte) 0)) == 0) ? 187 : 187): + case ((((byte) ((byte) -1 >>> (byte) 1)) == 0) ? 188 : 188): + case ((((byte) ((byte) -1 >>> Byte.MAX_VALUE)) == 0) ? 189 : 189): + case ((((byte) ((byte) 0 >>> Byte.MIN_VALUE)) == 0) ? 190 : 190): + case ((((byte) ((byte) 0 >>> (byte) -1)) == 0) ? 191 : 191): + case ((((byte) ((byte) 0 >>> (byte) 0)) == 0) ? 192 : 192): + case ((((byte) ((byte) 0 >>> (byte) 1)) == 0) ? 193 : 193): + case ((((byte) ((byte) 0 >>> Byte.MAX_VALUE)) == 0) ? 194 : 194): + case ((((byte) ((byte) 1 >>> Byte.MIN_VALUE)) == 0) ? 195 : 195): + case ((((byte) ((byte) 1 >>> (byte) -1)) == 0) ? 196 : 196): + case ((((byte) ((byte) 1 >>> (byte) 0)) == 0) ? 197 : 197): + case ((((byte) ((byte) 1 >>> (byte) 1)) == 0) ? 198 : 198): + case ((((byte) ((byte) 1 >>> Byte.MAX_VALUE)) == 0) ? 199 : 199): + case ((((byte) (Byte.MAX_VALUE >>> Byte.MIN_VALUE)) == 0) ? 200 : 200): + case ((((byte) (Byte.MAX_VALUE >>> (byte) -1)) == 0) ? 201 : 201): + case ((((byte) (Byte.MAX_VALUE >>> (byte) 0)) == 0) ? 202 : 202): + case ((((byte) (Byte.MAX_VALUE >>> (byte) 1)) == 0) ? 203 : 203): + case ((((byte) (Byte.MAX_VALUE >>> Byte.MAX_VALUE)) == 0) ? 204 : 204): + case ((Byte.MIN_VALUE < Byte.MIN_VALUE) ? 205 : 205): + case ((Byte.MIN_VALUE < (byte) -1) ? 206 : 206): + case ((Byte.MIN_VALUE < (byte) 0) ? 207 : 207): + case ((Byte.MIN_VALUE < (byte) 1) ? 208 : 208): + case ((Byte.MIN_VALUE < Byte.MAX_VALUE) ? 209 : 209): + case (((byte) -1 < Byte.MIN_VALUE) ? 210 : 210): + case (((byte) -1 < (byte) -1) ? 211 : 211): + case (((byte) -1 < (byte) 0) ? 212 : 212): + case (((byte) -1 < (byte) 1) ? 213 : 213): + case (((byte) -1 < Byte.MAX_VALUE) ? 214 : 214): + case (((byte) 0 < Byte.MIN_VALUE) ? 215 : 215): + case (((byte) 0 < (byte) -1) ? 216 : 216): + case (((byte) 0 < (byte) 0) ? 217 : 217): + case (((byte) 0 < (byte) 1) ? 218 : 218): + case (((byte) 0 < Byte.MAX_VALUE) ? 219 : 219): + case (((byte) 1 < Byte.MIN_VALUE) ? 220 : 220): + case (((byte) 1 < (byte) -1) ? 221 : 221): + case (((byte) 1 < (byte) 0) ? 222 : 222): + case (((byte) 1 < (byte) 1) ? 223 : 223): + case (((byte) 1 < Byte.MAX_VALUE) ? 224 : 224): + case ((Byte.MAX_VALUE < Byte.MIN_VALUE) ? 225 : 225): + case ((Byte.MAX_VALUE < (byte) -1) ? 226 : 226): + case ((Byte.MAX_VALUE < (byte) 0) ? 227 : 227): + case ((Byte.MAX_VALUE < (byte) 1) ? 228 : 228): + case ((Byte.MAX_VALUE < Byte.MAX_VALUE) ? 229 : 229): + case ((Byte.MIN_VALUE > Byte.MIN_VALUE) ? 230 : 230): + case ((Byte.MIN_VALUE > (byte) -1) ? 231 : 231): + case ((Byte.MIN_VALUE > (byte) 0) ? 232 : 232): + case ((Byte.MIN_VALUE > (byte) 1) ? 233 : 233): + case ((Byte.MIN_VALUE > Byte.MAX_VALUE) ? 234 : 234): + case (((byte) -1 > Byte.MIN_VALUE) ? 235 : 235): + case (((byte) -1 > (byte) -1) ? 236 : 236): + case (((byte) -1 > (byte) 0) ? 237 : 237): + case (((byte) -1 > (byte) 1) ? 238 : 238): + case (((byte) -1 > Byte.MAX_VALUE) ? 239 : 239): + case (((byte) 0 > Byte.MIN_VALUE) ? 240 : 240): + case (((byte) 0 > (byte) -1) ? 241 : 241): + case (((byte) 0 > (byte) 0) ? 242 : 242): + case (((byte) 0 > (byte) 1) ? 243 : 243): + case (((byte) 0 > Byte.MAX_VALUE) ? 244 : 244): + case (((byte) 1 > Byte.MIN_VALUE) ? 245 : 245): + case (((byte) 1 > (byte) -1) ? 246 : 246): + case (((byte) 1 > (byte) 0) ? 247 : 247): + case (((byte) 1 > (byte) 1) ? 248 : 248): + case (((byte) 1 > Byte.MAX_VALUE) ? 249 : 249): + case ((Byte.MAX_VALUE > Byte.MIN_VALUE) ? 250 : 250): + case ((Byte.MAX_VALUE > (byte) -1) ? 251 : 251): + case ((Byte.MAX_VALUE > (byte) 0) ? 252 : 252): + case ((Byte.MAX_VALUE > (byte) 1) ? 253 : 253): + case ((Byte.MAX_VALUE > Byte.MAX_VALUE) ? 254 : 254): + case ((Byte.MIN_VALUE <= Byte.MIN_VALUE) ? 255 : 255): + case ((Byte.MIN_VALUE <= (byte) -1) ? 256 : 256): + case ((Byte.MIN_VALUE <= (byte) 0) ? 257 : 257): + case ((Byte.MIN_VALUE <= (byte) 1) ? 258 : 258): + case ((Byte.MIN_VALUE <= Byte.MAX_VALUE) ? 259 : 259): + case (((byte) -1 <= Byte.MIN_VALUE) ? 260 : 260): + case (((byte) -1 <= (byte) -1) ? 261 : 261): + case (((byte) -1 <= (byte) 0) ? 262 : 262): + case (((byte) -1 <= (byte) 1) ? 263 : 263): + case (((byte) -1 <= Byte.MAX_VALUE) ? 264 : 264): + case (((byte) 0 <= Byte.MIN_VALUE) ? 265 : 265): + case (((byte) 0 <= (byte) -1) ? 266 : 266): + case (((byte) 0 <= (byte) 0) ? 267 : 267): + case (((byte) 0 <= (byte) 1) ? 268 : 268): + case (((byte) 0 <= Byte.MAX_VALUE) ? 269 : 269): + case (((byte) 1 <= Byte.MIN_VALUE) ? 270 : 270): + case (((byte) 1 <= (byte) -1) ? 271 : 271): + case (((byte) 1 <= (byte) 0) ? 272 : 272): + case (((byte) 1 <= (byte) 1) ? 273 : 273): + case (((byte) 1 <= Byte.MAX_VALUE) ? 274 : 274): + case ((Byte.MAX_VALUE <= Byte.MIN_VALUE) ? 275 : 275): + case ((Byte.MAX_VALUE <= (byte) -1) ? 276 : 276): + case ((Byte.MAX_VALUE <= (byte) 0) ? 277 : 277): + case ((Byte.MAX_VALUE <= (byte) 1) ? 278 : 278): + case ((Byte.MAX_VALUE <= Byte.MAX_VALUE) ? 279 : 279): + case ((Byte.MIN_VALUE >= Byte.MIN_VALUE) ? 280 : 280): + case ((Byte.MIN_VALUE >= (byte) -1) ? 281 : 281): + case ((Byte.MIN_VALUE >= (byte) 0) ? 282 : 282): + case ((Byte.MIN_VALUE >= (byte) 1) ? 283 : 283): + case ((Byte.MIN_VALUE >= Byte.MAX_VALUE) ? 284 : 284): + case (((byte) -1 >= Byte.MIN_VALUE) ? 285 : 285): + case (((byte) -1 >= (byte) -1) ? 286 : 286): + case (((byte) -1 >= (byte) 0) ? 287 : 287): + case (((byte) -1 >= (byte) 1) ? 288 : 288): + case (((byte) -1 >= Byte.MAX_VALUE) ? 289 : 289): + case (((byte) 0 >= Byte.MIN_VALUE) ? 290 : 290): + case (((byte) 0 >= (byte) -1) ? 291 : 291): + case (((byte) 0 >= (byte) 0) ? 292 : 292): + case (((byte) 0 >= (byte) 1) ? 293 : 293): + case (((byte) 0 >= Byte.MAX_VALUE) ? 294 : 294): + case (((byte) 1 >= Byte.MIN_VALUE) ? 295 : 295): + case (((byte) 1 >= (byte) -1) ? 296 : 296): + case (((byte) 1 >= (byte) 0) ? 297 : 297): + case (((byte) 1 >= (byte) 1) ? 298 : 298): + case (((byte) 1 >= Byte.MAX_VALUE) ? 299 : 299): + case ((Byte.MAX_VALUE >= Byte.MIN_VALUE) ? 300 : 300): + case ((Byte.MAX_VALUE >= (byte) -1) ? 301 : 301): + case ((Byte.MAX_VALUE >= (byte) 0) ? 302 : 302): + case ((Byte.MAX_VALUE >= (byte) 1) ? 303 : 303): + case ((Byte.MAX_VALUE >= Byte.MAX_VALUE) ? 304 : 304): + case ((Byte.MIN_VALUE == Byte.MIN_VALUE) ? 305 : 305): + case ((Byte.MIN_VALUE == (byte) -1) ? 306 : 306): + case ((Byte.MIN_VALUE == (byte) 0) ? 307 : 307): + case ((Byte.MIN_VALUE == (byte) 1) ? 308 : 308): + case ((Byte.MIN_VALUE == Byte.MAX_VALUE) ? 309 : 309): + case (((byte) -1 == Byte.MIN_VALUE) ? 310 : 310): + case (((byte) -1 == (byte) -1) ? 311 : 311): + case (((byte) -1 == (byte) 0) ? 312 : 312): + case (((byte) -1 == (byte) 1) ? 313 : 313): + case (((byte) -1 == Byte.MAX_VALUE) ? 314 : 314): + case (((byte) 0 == Byte.MIN_VALUE) ? 315 : 315): + case (((byte) 0 == (byte) -1) ? 316 : 316): + case (((byte) 0 == (byte) 0) ? 317 : 317): + case (((byte) 0 == (byte) 1) ? 318 : 318): + case (((byte) 0 == Byte.MAX_VALUE) ? 319 : 319): + case (((byte) 1 == Byte.MIN_VALUE) ? 320 : 320): + case (((byte) 1 == (byte) -1) ? 321 : 321): + case (((byte) 1 == (byte) 0) ? 322 : 322): + case (((byte) 1 == (byte) 1) ? 323 : 323): + case (((byte) 1 == Byte.MAX_VALUE) ? 324 : 324): + case ((Byte.MAX_VALUE == Byte.MIN_VALUE) ? 325 : 325): + case ((Byte.MAX_VALUE == (byte) -1) ? 326 : 326): + case ((Byte.MAX_VALUE == (byte) 0) ? 327 : 327): + case ((Byte.MAX_VALUE == (byte) 1) ? 328 : 328): + case ((Byte.MAX_VALUE == Byte.MAX_VALUE) ? 329 : 329): + case ((Byte.MIN_VALUE != Byte.MIN_VALUE) ? 330 : 330): + case ((Byte.MIN_VALUE != (byte) -1) ? 331 : 331): + case ((Byte.MIN_VALUE != (byte) 0) ? 332 : 332): + case ((Byte.MIN_VALUE != (byte) 1) ? 333 : 333): + case ((Byte.MIN_VALUE != Byte.MAX_VALUE) ? 334 : 334): + case (((byte) -1 != Byte.MIN_VALUE) ? 335 : 335): + case (((byte) -1 != (byte) -1) ? 336 : 336): + case (((byte) -1 != (byte) 0) ? 337 : 337): + case (((byte) -1 != (byte) 1) ? 338 : 338): + case (((byte) -1 != Byte.MAX_VALUE) ? 339 : 339): + case (((byte) 0 != Byte.MIN_VALUE) ? 340 : 340): + case (((byte) 0 != (byte) -1) ? 341 : 341): + case (((byte) 0 != (byte) 0) ? 342 : 342): + case (((byte) 0 != (byte) 1) ? 343 : 343): + case (((byte) 0 != Byte.MAX_VALUE) ? 344 : 344): + case (((byte) 1 != Byte.MIN_VALUE) ? 345 : 345): + case (((byte) 1 != (byte) -1) ? 346 : 346): + case (((byte) 1 != (byte) 0) ? 347 : 347): + case (((byte) 1 != (byte) 1) ? 348 : 348): + case (((byte) 1 != Byte.MAX_VALUE) ? 349 : 349): + case ((Byte.MAX_VALUE != Byte.MIN_VALUE) ? 350 : 350): + case ((Byte.MAX_VALUE != (byte) -1) ? 351 : 351): + case ((Byte.MAX_VALUE != (byte) 0) ? 352 : 352): + case ((Byte.MAX_VALUE != (byte) 1) ? 353 : 353): + case ((Byte.MAX_VALUE != Byte.MAX_VALUE) ? 354 : 354): + case ((((byte) (Byte.MIN_VALUE & Byte.MIN_VALUE)) == 0) ? 355 : 355): + case ((((byte) (Byte.MIN_VALUE & (byte) -1)) == 0) ? 356 : 356): + case ((((byte) (Byte.MIN_VALUE & (byte) 0)) == 0) ? 357 : 357): + case ((((byte) (Byte.MIN_VALUE & (byte) 1)) == 0) ? 358 : 358): + case ((((byte) (Byte.MIN_VALUE & Byte.MAX_VALUE)) == 0) ? 359 : 359): + case ((((byte) ((byte) -1 & Byte.MIN_VALUE)) == 0) ? 360 : 360): + case ((((byte) ((byte) -1 & (byte) -1)) == 0) ? 361 : 361): + case ((((byte) ((byte) -1 & (byte) 0)) == 0) ? 362 : 362): + case ((((byte) ((byte) -1 & (byte) 1)) == 0) ? 363 : 363): + case ((((byte) ((byte) -1 & Byte.MAX_VALUE)) == 0) ? 364 : 364): + case ((((byte) ((byte) 0 & Byte.MIN_VALUE)) == 0) ? 365 : 365): + case ((((byte) ((byte) 0 & (byte) -1)) == 0) ? 366 : 366): + case ((((byte) ((byte) 0 & (byte) 0)) == 0) ? 367 : 367): + case ((((byte) ((byte) 0 & (byte) 1)) == 0) ? 368 : 368): + case ((((byte) ((byte) 0 & Byte.MAX_VALUE)) == 0) ? 369 : 369): + case ((((byte) ((byte) 1 & Byte.MIN_VALUE)) == 0) ? 370 : 370): + case ((((byte) ((byte) 1 & (byte) -1)) == 0) ? 371 : 371): + case ((((byte) ((byte) 1 & (byte) 0)) == 0) ? 372 : 372): + case ((((byte) ((byte) 1 & (byte) 1)) == 0) ? 373 : 373): + case ((((byte) ((byte) 1 & Byte.MAX_VALUE)) == 0) ? 374 : 374): + case ((((byte) (Byte.MAX_VALUE & Byte.MIN_VALUE)) == 0) ? 375 : 375): + case ((((byte) (Byte.MAX_VALUE & (byte) -1)) == 0) ? 376 : 376): + case ((((byte) (Byte.MAX_VALUE & (byte) 0)) == 0) ? 377 : 377): + case ((((byte) (Byte.MAX_VALUE & (byte) 1)) == 0) ? 378 : 378): + case ((((byte) (Byte.MAX_VALUE & Byte.MAX_VALUE)) == 0) ? 379 : 379): + case ((((byte) (Byte.MIN_VALUE ^ Byte.MIN_VALUE)) == 0) ? 380 : 380): + case ((((byte) (Byte.MIN_VALUE ^ (byte) -1)) == 0) ? 381 : 381): + case ((((byte) (Byte.MIN_VALUE ^ (byte) 0)) == 0) ? 382 : 382): + case ((((byte) (Byte.MIN_VALUE ^ (byte) 1)) == 0) ? 383 : 383): + case ((((byte) (Byte.MIN_VALUE ^ Byte.MAX_VALUE)) == 0) ? 384 : 384): + case ((((byte) ((byte) -1 ^ Byte.MIN_VALUE)) == 0) ? 385 : 385): + case ((((byte) ((byte) -1 ^ (byte) -1)) == 0) ? 386 : 386): + case ((((byte) ((byte) -1 ^ (byte) 0)) == 0) ? 387 : 387): + case ((((byte) ((byte) -1 ^ (byte) 1)) == 0) ? 388 : 388): + case ((((byte) ((byte) -1 ^ Byte.MAX_VALUE)) == 0) ? 389 : 389): + case ((((byte) ((byte) 0 ^ Byte.MIN_VALUE)) == 0) ? 390 : 390): + case ((((byte) ((byte) 0 ^ (byte) -1)) == 0) ? 391 : 391): + case ((((byte) ((byte) 0 ^ (byte) 0)) == 0) ? 392 : 392): + case ((((byte) ((byte) 0 ^ (byte) 1)) == 0) ? 393 : 393): + case ((((byte) ((byte) 0 ^ Byte.MAX_VALUE)) == 0) ? 394 : 394): + case ((((byte) ((byte) 1 ^ Byte.MIN_VALUE)) == 0) ? 395 : 395): + case ((((byte) ((byte) 1 ^ (byte) -1)) == 0) ? 396 : 396): + case ((((byte) ((byte) 1 ^ (byte) 0)) == 0) ? 397 : 397): + case ((((byte) ((byte) 1 ^ (byte) 1)) == 0) ? 398 : 398): + case ((((byte) ((byte) 1 ^ Byte.MAX_VALUE)) == 0) ? 399 : 399): + case ((((byte) (Byte.MAX_VALUE ^ Byte.MIN_VALUE)) == 0) ? 400 : 400): + case ((((byte) (Byte.MAX_VALUE ^ (byte) -1)) == 0) ? 401 : 401): + case ((((byte) (Byte.MAX_VALUE ^ (byte) 0)) == 0) ? 402 : 402): + case ((((byte) (Byte.MAX_VALUE ^ (byte) 1)) == 0) ? 403 : 403): + case ((((byte) (Byte.MAX_VALUE ^ Byte.MAX_VALUE)) == 0) ? 404 : 404): + case ((((byte) (Byte.MIN_VALUE | Byte.MIN_VALUE)) == 0) ? 405 : 405): + case ((((byte) (Byte.MIN_VALUE | (byte) -1)) == 0) ? 406 : 406): + case ((((byte) (Byte.MIN_VALUE | (byte) 0)) == 0) ? 407 : 407): + case ((((byte) (Byte.MIN_VALUE | (byte) 1)) == 0) ? 408 : 408): + case ((((byte) (Byte.MIN_VALUE | Byte.MAX_VALUE)) == 0) ? 409 : 409): + case ((((byte) ((byte) -1 | Byte.MIN_VALUE)) == 0) ? 410 : 410): + case ((((byte) ((byte) -1 | (byte) -1)) == 0) ? 411 : 411): + case ((((byte) ((byte) -1 | (byte) 0)) == 0) ? 412 : 412): + case ((((byte) ((byte) -1 | (byte) 1)) == 0) ? 413 : 413): + case ((((byte) ((byte) -1 | Byte.MAX_VALUE)) == 0) ? 414 : 414): + case ((((byte) ((byte) 0 | Byte.MIN_VALUE)) == 0) ? 415 : 415): + case ((((byte) ((byte) 0 | (byte) -1)) == 0) ? 416 : 416): + case ((((byte) ((byte) 0 | (byte) 0)) == 0) ? 417 : 417): + case ((((byte) ((byte) 0 | (byte) 1)) == 0) ? 418 : 418): + case ((((byte) ((byte) 0 | Byte.MAX_VALUE)) == 0) ? 419 : 419): + case ((((byte) ((byte) 1 | Byte.MIN_VALUE)) == 0) ? 420 : 420): + case ((((byte) ((byte) 1 | (byte) -1)) == 0) ? 421 : 421): + case ((((byte) ((byte) 1 | (byte) 0)) == 0) ? 422 : 422): + case ((((byte) ((byte) 1 | (byte) 1)) == 0) ? 423 : 423): + case ((((byte) ((byte) 1 | Byte.MAX_VALUE)) == 0) ? 424 : 424): + case ((((byte) (Byte.MAX_VALUE | Byte.MIN_VALUE)) == 0) ? 425 : 425): + case ((((byte) (Byte.MAX_VALUE | (byte) -1)) == 0) ? 426 : 426): + case ((((byte) (Byte.MAX_VALUE | (byte) 0)) == 0) ? 427 : 427): + case ((((byte) (Byte.MAX_VALUE | (byte) 1)) == 0) ? 428 : 428): + case ((((byte) (Byte.MAX_VALUE | Byte.MAX_VALUE)) == 0) ? 429 : 429): + default: + } + } + + // -------- + // short tests + static short shortPlus(short x) { return (short) + x; } + static short shortMinus(short x) { return (short) - x; } + static short shortBitNot(short x) { return (short) ~ x; } + static short shortTimes(short x, short y) { return (short) (x * y); } + static short shortDiv(short x, short y) { return (short) (x / y); } + static short shortRem(short x, short y) { return (short) (x % y); } + static short shortAdd(short x, short y) { return (short) (x + y); } + static short shortSub(short x, short y) { return (short) (x - y); } + static short shortShl(short x, short y) { return (short) (x << y); } + static short shortShr(short x, short y) { return (short) (x >> y); } + static short shortUshr(short x, short y) { return (short) (x >>> y); } + static boolean shortLt(short x, short y) { return x < y; } + static boolean shortGt(short x, short y) { return x > y; } + static boolean shortLe(short x, short y) { return x <= y; } + static boolean shortGe(short x, short y) { return x >= y; } + static boolean shortEq(short x, short y) { return x == y; } + static boolean shortNe(short x, short y) { return x != y; } + static short shortAnd(short x, short y) { return (short) (x & y); } + static short shortXor(short x, short y) { return (short) (x ^ y); } + static short shortOr(short x, short y) { return (short) (x | y); } + static void shortTest() { + Tester.checkEqual(shortPlus(Short.MIN_VALUE), (short) + Short.MIN_VALUE, "(short) + Short.MIN_VALUE"); + Tester.checkEqual(shortPlus((short) -1), (short) + (short) -1, "(short) + (short) -1"); + Tester.checkEqual(shortPlus((short) 0), (short) + (short) 0, "(short) + (short) 0"); + Tester.checkEqual(shortPlus((short) 1), (short) + (short) 1, "(short) + (short) 1"); + Tester.checkEqual(shortPlus(Short.MAX_VALUE), (short) + Short.MAX_VALUE, "(short) + Short.MAX_VALUE"); + Tester.checkEqual(shortMinus(Short.MIN_VALUE), (short) - Short.MIN_VALUE, "(short) - Short.MIN_VALUE"); + Tester.checkEqual(shortMinus((short) -1), (short) - (short) -1, "(short) - (short) -1"); + Tester.checkEqual(shortMinus((short) 0), (short) - (short) 0, "(short) - (short) 0"); + Tester.checkEqual(shortMinus((short) 1), (short) - (short) 1, "(short) - (short) 1"); + Tester.checkEqual(shortMinus(Short.MAX_VALUE), (short) - Short.MAX_VALUE, "(short) - Short.MAX_VALUE"); + Tester.checkEqual(shortBitNot(Short.MIN_VALUE), (short) ~ Short.MIN_VALUE, "(short) ~ Short.MIN_VALUE"); + Tester.checkEqual(shortBitNot((short) -1), (short) ~ (short) -1, "(short) ~ (short) -1"); + Tester.checkEqual(shortBitNot((short) 0), (short) ~ (short) 0, "(short) ~ (short) 0"); + Tester.checkEqual(shortBitNot((short) 1), (short) ~ (short) 1, "(short) ~ (short) 1"); + Tester.checkEqual(shortBitNot(Short.MAX_VALUE), (short) ~ Short.MAX_VALUE, "(short) ~ Short.MAX_VALUE"); + Tester.checkEqual(shortTimes(Short.MIN_VALUE, Short.MIN_VALUE), (short) (Short.MIN_VALUE * Short.MIN_VALUE), "(short) (Short.MIN_VALUE * Short.MIN_VALUE)"); + Tester.checkEqual(shortTimes(Short.MIN_VALUE, (short) -1), (short) (Short.MIN_VALUE * (short) -1), "(short) (Short.MIN_VALUE * (short) -1)"); + Tester.checkEqual(shortTimes(Short.MIN_VALUE, (short) 0), (short) (Short.MIN_VALUE * (short) 0), "(short) (Short.MIN_VALUE * (short) 0)"); + Tester.checkEqual(shortTimes(Short.MIN_VALUE, (short) 1), (short) (Short.MIN_VALUE * (short) 1), "(short) (Short.MIN_VALUE * (short) 1)"); + Tester.checkEqual(shortTimes(Short.MIN_VALUE, Short.MAX_VALUE), (short) (Short.MIN_VALUE * Short.MAX_VALUE), "(short) (Short.MIN_VALUE * Short.MAX_VALUE)"); + Tester.checkEqual(shortTimes((short) -1, Short.MIN_VALUE), (short) ((short) -1 * Short.MIN_VALUE), "(short) ((short) -1 * Short.MIN_VALUE)"); + Tester.checkEqual(shortTimes((short) -1, (short) -1), (short) ((short) -1 * (short) -1), "(short) ((short) -1 * (short) -1)"); + Tester.checkEqual(shortTimes((short) -1, (short) 0), (short) ((short) -1 * (short) 0), "(short) ((short) -1 * (short) 0)"); + Tester.checkEqual(shortTimes((short) -1, (short) 1), (short) ((short) -1 * (short) 1), "(short) ((short) -1 * (short) 1)"); + Tester.checkEqual(shortTimes((short) -1, Short.MAX_VALUE), (short) ((short) -1 * Short.MAX_VALUE), "(short) ((short) -1 * Short.MAX_VALUE)"); + Tester.checkEqual(shortTimes((short) 0, Short.MIN_VALUE), (short) ((short) 0 * Short.MIN_VALUE), "(short) ((short) 0 * Short.MIN_VALUE)"); + Tester.checkEqual(shortTimes((short) 0, (short) -1), (short) ((short) 0 * (short) -1), "(short) ((short) 0 * (short) -1)"); + Tester.checkEqual(shortTimes((short) 0, (short) 0), (short) ((short) 0 * (short) 0), "(short) ((short) 0 * (short) 0)"); + Tester.checkEqual(shortTimes((short) 0, (short) 1), (short) ((short) 0 * (short) 1), "(short) ((short) 0 * (short) 1)"); + Tester.checkEqual(shortTimes((short) 0, Short.MAX_VALUE), (short) ((short) 0 * Short.MAX_VALUE), "(short) ((short) 0 * Short.MAX_VALUE)"); + Tester.checkEqual(shortTimes((short) 1, Short.MIN_VALUE), (short) ((short) 1 * Short.MIN_VALUE), "(short) ((short) 1 * Short.MIN_VALUE)"); + Tester.checkEqual(shortTimes((short) 1, (short) -1), (short) ((short) 1 * (short) -1), "(short) ((short) 1 * (short) -1)"); + Tester.checkEqual(shortTimes((short) 1, (short) 0), (short) ((short) 1 * (short) 0), "(short) ((short) 1 * (short) 0)"); + Tester.checkEqual(shortTimes((short) 1, (short) 1), (short) ((short) 1 * (short) 1), "(short) ((short) 1 * (short) 1)"); + Tester.checkEqual(shortTimes((short) 1, Short.MAX_VALUE), (short) ((short) 1 * Short.MAX_VALUE), "(short) ((short) 1 * Short.MAX_VALUE)"); + Tester.checkEqual(shortTimes(Short.MAX_VALUE, Short.MIN_VALUE), (short) (Short.MAX_VALUE * Short.MIN_VALUE), "(short) (Short.MAX_VALUE * Short.MIN_VALUE)"); + Tester.checkEqual(shortTimes(Short.MAX_VALUE, (short) -1), (short) (Short.MAX_VALUE * (short) -1), "(short) (Short.MAX_VALUE * (short) -1)"); + Tester.checkEqual(shortTimes(Short.MAX_VALUE, (short) 0), (short) (Short.MAX_VALUE * (short) 0), "(short) (Short.MAX_VALUE * (short) 0)"); + Tester.checkEqual(shortTimes(Short.MAX_VALUE, (short) 1), (short) (Short.MAX_VALUE * (short) 1), "(short) (Short.MAX_VALUE * (short) 1)"); + Tester.checkEqual(shortTimes(Short.MAX_VALUE, Short.MAX_VALUE), (short) (Short.MAX_VALUE * Short.MAX_VALUE), "(short) (Short.MAX_VALUE * Short.MAX_VALUE)"); + Tester.checkEqual(shortDiv(Short.MIN_VALUE, Short.MIN_VALUE), (short) (Short.MIN_VALUE / Short.MIN_VALUE), "(short) (Short.MIN_VALUE / Short.MIN_VALUE)"); + Tester.checkEqual(shortDiv(Short.MIN_VALUE, (short) -1), (short) (Short.MIN_VALUE / (short) -1), "(short) (Short.MIN_VALUE / (short) -1)"); + Tester.checkEqual(shortDiv(Short.MIN_VALUE, (short) 1), (short) (Short.MIN_VALUE / (short) 1), "(short) (Short.MIN_VALUE / (short) 1)"); + Tester.checkEqual(shortDiv(Short.MIN_VALUE, Short.MAX_VALUE), (short) (Short.MIN_VALUE / Short.MAX_VALUE), "(short) (Short.MIN_VALUE / Short.MAX_VALUE)"); + Tester.checkEqual(shortDiv((short) -1, Short.MIN_VALUE), (short) ((short) -1 / Short.MIN_VALUE), "(short) ((short) -1 / Short.MIN_VALUE)"); + Tester.checkEqual(shortDiv((short) -1, (short) -1), (short) ((short) -1 / (short) -1), "(short) ((short) -1 / (short) -1)"); + Tester.checkEqual(shortDiv((short) -1, (short) 1), (short) ((short) -1 / (short) 1), "(short) ((short) -1 / (short) 1)"); + Tester.checkEqual(shortDiv((short) -1, Short.MAX_VALUE), (short) ((short) -1 / Short.MAX_VALUE), "(short) ((short) -1 / Short.MAX_VALUE)"); + Tester.checkEqual(shortDiv((short) 0, Short.MIN_VALUE), (short) ((short) 0 / Short.MIN_VALUE), "(short) ((short) 0 / Short.MIN_VALUE)"); + Tester.checkEqual(shortDiv((short) 0, (short) -1), (short) ((short) 0 / (short) -1), "(short) ((short) 0 / (short) -1)"); + Tester.checkEqual(shortDiv((short) 0, (short) 1), (short) ((short) 0 / (short) 1), "(short) ((short) 0 / (short) 1)"); + Tester.checkEqual(shortDiv((short) 0, Short.MAX_VALUE), (short) ((short) 0 / Short.MAX_VALUE), "(short) ((short) 0 / Short.MAX_VALUE)"); + Tester.checkEqual(shortDiv((short) 1, Short.MIN_VALUE), (short) ((short) 1 / Short.MIN_VALUE), "(short) ((short) 1 / Short.MIN_VALUE)"); + Tester.checkEqual(shortDiv((short) 1, (short) -1), (short) ((short) 1 / (short) -1), "(short) ((short) 1 / (short) -1)"); + Tester.checkEqual(shortDiv((short) 1, (short) 1), (short) ((short) 1 / (short) 1), "(short) ((short) 1 / (short) 1)"); + Tester.checkEqual(shortDiv((short) 1, Short.MAX_VALUE), (short) ((short) 1 / Short.MAX_VALUE), "(short) ((short) 1 / Short.MAX_VALUE)"); + Tester.checkEqual(shortDiv(Short.MAX_VALUE, Short.MIN_VALUE), (short) (Short.MAX_VALUE / Short.MIN_VALUE), "(short) (Short.MAX_VALUE / Short.MIN_VALUE)"); + Tester.checkEqual(shortDiv(Short.MAX_VALUE, (short) -1), (short) (Short.MAX_VALUE / (short) -1), "(short) (Short.MAX_VALUE / (short) -1)"); + Tester.checkEqual(shortDiv(Short.MAX_VALUE, (short) 1), (short) (Short.MAX_VALUE / (short) 1), "(short) (Short.MAX_VALUE / (short) 1)"); + Tester.checkEqual(shortDiv(Short.MAX_VALUE, Short.MAX_VALUE), (short) (Short.MAX_VALUE / Short.MAX_VALUE), "(short) (Short.MAX_VALUE / Short.MAX_VALUE)"); + Tester.checkEqual(shortRem(Short.MIN_VALUE, Short.MIN_VALUE), (short) (Short.MIN_VALUE % Short.MIN_VALUE), "(short) (Short.MIN_VALUE % Short.MIN_VALUE)"); + Tester.checkEqual(shortRem(Short.MIN_VALUE, (short) -1), (short) (Short.MIN_VALUE % (short) -1), "(short) (Short.MIN_VALUE % (short) -1)"); + Tester.checkEqual(shortRem(Short.MIN_VALUE, (short) 1), (short) (Short.MIN_VALUE % (short) 1), "(short) (Short.MIN_VALUE % (short) 1)"); + Tester.checkEqual(shortRem(Short.MIN_VALUE, Short.MAX_VALUE), (short) (Short.MIN_VALUE % Short.MAX_VALUE), "(short) (Short.MIN_VALUE % Short.MAX_VALUE)"); + Tester.checkEqual(shortRem((short) -1, Short.MIN_VALUE), (short) ((short) -1 % Short.MIN_VALUE), "(short) ((short) -1 % Short.MIN_VALUE)"); + Tester.checkEqual(shortRem((short) -1, (short) -1), (short) ((short) -1 % (short) -1), "(short) ((short) -1 % (short) -1)"); + Tester.checkEqual(shortRem((short) -1, (short) 1), (short) ((short) -1 % (short) 1), "(short) ((short) -1 % (short) 1)"); + Tester.checkEqual(shortRem((short) -1, Short.MAX_VALUE), (short) ((short) -1 % Short.MAX_VALUE), "(short) ((short) -1 % Short.MAX_VALUE)"); + Tester.checkEqual(shortRem((short) 0, Short.MIN_VALUE), (short) ((short) 0 % Short.MIN_VALUE), "(short) ((short) 0 % Short.MIN_VALUE)"); + Tester.checkEqual(shortRem((short) 0, (short) -1), (short) ((short) 0 % (short) -1), "(short) ((short) 0 % (short) -1)"); + Tester.checkEqual(shortRem((short) 0, (short) 1), (short) ((short) 0 % (short) 1), "(short) ((short) 0 % (short) 1)"); + Tester.checkEqual(shortRem((short) 0, Short.MAX_VALUE), (short) ((short) 0 % Short.MAX_VALUE), "(short) ((short) 0 % Short.MAX_VALUE)"); + Tester.checkEqual(shortRem((short) 1, Short.MIN_VALUE), (short) ((short) 1 % Short.MIN_VALUE), "(short) ((short) 1 % Short.MIN_VALUE)"); + Tester.checkEqual(shortRem((short) 1, (short) -1), (short) ((short) 1 % (short) -1), "(short) ((short) 1 % (short) -1)"); + Tester.checkEqual(shortRem((short) 1, (short) 1), (short) ((short) 1 % (short) 1), "(short) ((short) 1 % (short) 1)"); + Tester.checkEqual(shortRem((short) 1, Short.MAX_VALUE), (short) ((short) 1 % Short.MAX_VALUE), "(short) ((short) 1 % Short.MAX_VALUE)"); + Tester.checkEqual(shortRem(Short.MAX_VALUE, Short.MIN_VALUE), (short) (Short.MAX_VALUE % Short.MIN_VALUE), "(short) (Short.MAX_VALUE % Short.MIN_VALUE)"); + Tester.checkEqual(shortRem(Short.MAX_VALUE, (short) -1), (short) (Short.MAX_VALUE % (short) -1), "(short) (Short.MAX_VALUE % (short) -1)"); + Tester.checkEqual(shortRem(Short.MAX_VALUE, (short) 1), (short) (Short.MAX_VALUE % (short) 1), "(short) (Short.MAX_VALUE % (short) 1)"); + Tester.checkEqual(shortRem(Short.MAX_VALUE, Short.MAX_VALUE), (short) (Short.MAX_VALUE % Short.MAX_VALUE), "(short) (Short.MAX_VALUE % Short.MAX_VALUE)"); + Tester.checkEqual(shortAdd(Short.MIN_VALUE, Short.MIN_VALUE), (short) (Short.MIN_VALUE + Short.MIN_VALUE), "(short) (Short.MIN_VALUE + Short.MIN_VALUE)"); + Tester.checkEqual(shortAdd(Short.MIN_VALUE, (short) -1), (short) (Short.MIN_VALUE + (short) -1), "(short) (Short.MIN_VALUE + (short) -1)"); + Tester.checkEqual(shortAdd(Short.MIN_VALUE, (short) 0), (short) (Short.MIN_VALUE + (short) 0), "(short) (Short.MIN_VALUE + (short) 0)"); + Tester.checkEqual(shortAdd(Short.MIN_VALUE, (short) 1), (short) (Short.MIN_VALUE + (short) 1), "(short) (Short.MIN_VALUE + (short) 1)"); + Tester.checkEqual(shortAdd(Short.MIN_VALUE, Short.MAX_VALUE), (short) (Short.MIN_VALUE + Short.MAX_VALUE), "(short) (Short.MIN_VALUE + Short.MAX_VALUE)"); + Tester.checkEqual(shortAdd((short) -1, Short.MIN_VALUE), (short) ((short) -1 + Short.MIN_VALUE), "(short) ((short) -1 + Short.MIN_VALUE)"); + Tester.checkEqual(shortAdd((short) -1, (short) -1), (short) ((short) -1 + (short) -1), "(short) ((short) -1 + (short) -1)"); + Tester.checkEqual(shortAdd((short) -1, (short) 0), (short) ((short) -1 + (short) 0), "(short) ((short) -1 + (short) 0)"); + Tester.checkEqual(shortAdd((short) -1, (short) 1), (short) ((short) -1 + (short) 1), "(short) ((short) -1 + (short) 1)"); + Tester.checkEqual(shortAdd((short) -1, Short.MAX_VALUE), (short) ((short) -1 + Short.MAX_VALUE), "(short) ((short) -1 + Short.MAX_VALUE)"); + Tester.checkEqual(shortAdd((short) 0, Short.MIN_VALUE), (short) ((short) 0 + Short.MIN_VALUE), "(short) ((short) 0 + Short.MIN_VALUE)"); + Tester.checkEqual(shortAdd((short) 0, (short) -1), (short) ((short) 0 + (short) -1), "(short) ((short) 0 + (short) -1)"); + Tester.checkEqual(shortAdd((short) 0, (short) 0), (short) ((short) 0 + (short) 0), "(short) ((short) 0 + (short) 0)"); + Tester.checkEqual(shortAdd((short) 0, (short) 1), (short) ((short) 0 + (short) 1), "(short) ((short) 0 + (short) 1)"); + Tester.checkEqual(shortAdd((short) 0, Short.MAX_VALUE), (short) ((short) 0 + Short.MAX_VALUE), "(short) ((short) 0 + Short.MAX_VALUE)"); + Tester.checkEqual(shortAdd((short) 1, Short.MIN_VALUE), (short) ((short) 1 + Short.MIN_VALUE), "(short) ((short) 1 + Short.MIN_VALUE)"); + Tester.checkEqual(shortAdd((short) 1, (short) -1), (short) ((short) 1 + (short) -1), "(short) ((short) 1 + (short) -1)"); + Tester.checkEqual(shortAdd((short) 1, (short) 0), (short) ((short) 1 + (short) 0), "(short) ((short) 1 + (short) 0)"); + Tester.checkEqual(shortAdd((short) 1, (short) 1), (short) ((short) 1 + (short) 1), "(short) ((short) 1 + (short) 1)"); + Tester.checkEqual(shortAdd((short) 1, Short.MAX_VALUE), (short) ((short) 1 + Short.MAX_VALUE), "(short) ((short) 1 + Short.MAX_VALUE)"); + Tester.checkEqual(shortAdd(Short.MAX_VALUE, Short.MIN_VALUE), (short) (Short.MAX_VALUE + Short.MIN_VALUE), "(short) (Short.MAX_VALUE + Short.MIN_VALUE)"); + Tester.checkEqual(shortAdd(Short.MAX_VALUE, (short) -1), (short) (Short.MAX_VALUE + (short) -1), "(short) (Short.MAX_VALUE + (short) -1)"); + Tester.checkEqual(shortAdd(Short.MAX_VALUE, (short) 0), (short) (Short.MAX_VALUE + (short) 0), "(short) (Short.MAX_VALUE + (short) 0)"); + Tester.checkEqual(shortAdd(Short.MAX_VALUE, (short) 1), (short) (Short.MAX_VALUE + (short) 1), "(short) (Short.MAX_VALUE + (short) 1)"); + Tester.checkEqual(shortAdd(Short.MAX_VALUE, Short.MAX_VALUE), (short) (Short.MAX_VALUE + Short.MAX_VALUE), "(short) (Short.MAX_VALUE + Short.MAX_VALUE)"); + Tester.checkEqual(shortSub(Short.MIN_VALUE, Short.MIN_VALUE), (short) (Short.MIN_VALUE - Short.MIN_VALUE), "(short) (Short.MIN_VALUE - Short.MIN_VALUE)"); + Tester.checkEqual(shortSub(Short.MIN_VALUE, (short) -1), (short) (Short.MIN_VALUE - (short) -1), "(short) (Short.MIN_VALUE - (short) -1)"); + Tester.checkEqual(shortSub(Short.MIN_VALUE, (short) 0), (short) (Short.MIN_VALUE - (short) 0), "(short) (Short.MIN_VALUE - (short) 0)"); + Tester.checkEqual(shortSub(Short.MIN_VALUE, (short) 1), (short) (Short.MIN_VALUE - (short) 1), "(short) (Short.MIN_VALUE - (short) 1)"); + Tester.checkEqual(shortSub(Short.MIN_VALUE, Short.MAX_VALUE), (short) (Short.MIN_VALUE - Short.MAX_VALUE), "(short) (Short.MIN_VALUE - Short.MAX_VALUE)"); + Tester.checkEqual(shortSub((short) -1, Short.MIN_VALUE), (short) ((short) -1 - Short.MIN_VALUE), "(short) ((short) -1 - Short.MIN_VALUE)"); + Tester.checkEqual(shortSub((short) -1, (short) -1), (short) ((short) -1 - (short) -1), "(short) ((short) -1 - (short) -1)"); + Tester.checkEqual(shortSub((short) -1, (short) 0), (short) ((short) -1 - (short) 0), "(short) ((short) -1 - (short) 0)"); + Tester.checkEqual(shortSub((short) -1, (short) 1), (short) ((short) -1 - (short) 1), "(short) ((short) -1 - (short) 1)"); + Tester.checkEqual(shortSub((short) -1, Short.MAX_VALUE), (short) ((short) -1 - Short.MAX_VALUE), "(short) ((short) -1 - Short.MAX_VALUE)"); + Tester.checkEqual(shortSub((short) 0, Short.MIN_VALUE), (short) ((short) 0 - Short.MIN_VALUE), "(short) ((short) 0 - Short.MIN_VALUE)"); + Tester.checkEqual(shortSub((short) 0, (short) -1), (short) ((short) 0 - (short) -1), "(short) ((short) 0 - (short) -1)"); + Tester.checkEqual(shortSub((short) 0, (short) 0), (short) ((short) 0 - (short) 0), "(short) ((short) 0 - (short) 0)"); + Tester.checkEqual(shortSub((short) 0, (short) 1), (short) ((short) 0 - (short) 1), "(short) ((short) 0 - (short) 1)"); + Tester.checkEqual(shortSub((short) 0, Short.MAX_VALUE), (short) ((short) 0 - Short.MAX_VALUE), "(short) ((short) 0 - Short.MAX_VALUE)"); + Tester.checkEqual(shortSub((short) 1, Short.MIN_VALUE), (short) ((short) 1 - Short.MIN_VALUE), "(short) ((short) 1 - Short.MIN_VALUE)"); + Tester.checkEqual(shortSub((short) 1, (short) -1), (short) ((short) 1 - (short) -1), "(short) ((short) 1 - (short) -1)"); + Tester.checkEqual(shortSub((short) 1, (short) 0), (short) ((short) 1 - (short) 0), "(short) ((short) 1 - (short) 0)"); + Tester.checkEqual(shortSub((short) 1, (short) 1), (short) ((short) 1 - (short) 1), "(short) ((short) 1 - (short) 1)"); + Tester.checkEqual(shortSub((short) 1, Short.MAX_VALUE), (short) ((short) 1 - Short.MAX_VALUE), "(short) ((short) 1 - Short.MAX_VALUE)"); + Tester.checkEqual(shortSub(Short.MAX_VALUE, Short.MIN_VALUE), (short) (Short.MAX_VALUE - Short.MIN_VALUE), "(short) (Short.MAX_VALUE - Short.MIN_VALUE)"); + Tester.checkEqual(shortSub(Short.MAX_VALUE, (short) -1), (short) (Short.MAX_VALUE - (short) -1), "(short) (Short.MAX_VALUE - (short) -1)"); + Tester.checkEqual(shortSub(Short.MAX_VALUE, (short) 0), (short) (Short.MAX_VALUE - (short) 0), "(short) (Short.MAX_VALUE - (short) 0)"); + Tester.checkEqual(shortSub(Short.MAX_VALUE, (short) 1), (short) (Short.MAX_VALUE - (short) 1), "(short) (Short.MAX_VALUE - (short) 1)"); + Tester.checkEqual(shortSub(Short.MAX_VALUE, Short.MAX_VALUE), (short) (Short.MAX_VALUE - Short.MAX_VALUE), "(short) (Short.MAX_VALUE - Short.MAX_VALUE)"); + Tester.checkEqual(shortShl(Short.MIN_VALUE, Short.MIN_VALUE), (short) (Short.MIN_VALUE << Short.MIN_VALUE), "(short) (Short.MIN_VALUE << Short.MIN_VALUE)"); + Tester.checkEqual(shortShl(Short.MIN_VALUE, (short) -1), (short) (Short.MIN_VALUE << (short) -1), "(short) (Short.MIN_VALUE << (short) -1)"); + Tester.checkEqual(shortShl(Short.MIN_VALUE, (short) 0), (short) (Short.MIN_VALUE << (short) 0), "(short) (Short.MIN_VALUE << (short) 0)"); + Tester.checkEqual(shortShl(Short.MIN_VALUE, (short) 1), (short) (Short.MIN_VALUE << (short) 1), "(short) (Short.MIN_VALUE << (short) 1)"); + Tester.checkEqual(shortShl(Short.MIN_VALUE, Short.MAX_VALUE), (short) (Short.MIN_VALUE << Short.MAX_VALUE), "(short) (Short.MIN_VALUE << Short.MAX_VALUE)"); + Tester.checkEqual(shortShl((short) -1, Short.MIN_VALUE), (short) ((short) -1 << Short.MIN_VALUE), "(short) ((short) -1 << Short.MIN_VALUE)"); + Tester.checkEqual(shortShl((short) -1, (short) -1), (short) ((short) -1 << (short) -1), "(short) ((short) -1 << (short) -1)"); + Tester.checkEqual(shortShl((short) -1, (short) 0), (short) ((short) -1 << (short) 0), "(short) ((short) -1 << (short) 0)"); + Tester.checkEqual(shortShl((short) -1, (short) 1), (short) ((short) -1 << (short) 1), "(short) ((short) -1 << (short) 1)"); + Tester.checkEqual(shortShl((short) -1, Short.MAX_VALUE), (short) ((short) -1 << Short.MAX_VALUE), "(short) ((short) -1 << Short.MAX_VALUE)"); + Tester.checkEqual(shortShl((short) 0, Short.MIN_VALUE), (short) ((short) 0 << Short.MIN_VALUE), "(short) ((short) 0 << Short.MIN_VALUE)"); + Tester.checkEqual(shortShl((short) 0, (short) -1), (short) ((short) 0 << (short) -1), "(short) ((short) 0 << (short) -1)"); + Tester.checkEqual(shortShl((short) 0, (short) 0), (short) ((short) 0 << (short) 0), "(short) ((short) 0 << (short) 0)"); + Tester.checkEqual(shortShl((short) 0, (short) 1), (short) ((short) 0 << (short) 1), "(short) ((short) 0 << (short) 1)"); + Tester.checkEqual(shortShl((short) 0, Short.MAX_VALUE), (short) ((short) 0 << Short.MAX_VALUE), "(short) ((short) 0 << Short.MAX_VALUE)"); + Tester.checkEqual(shortShl((short) 1, Short.MIN_VALUE), (short) ((short) 1 << Short.MIN_VALUE), "(short) ((short) 1 << Short.MIN_VALUE)"); + Tester.checkEqual(shortShl((short) 1, (short) -1), (short) ((short) 1 << (short) -1), "(short) ((short) 1 << (short) -1)"); + Tester.checkEqual(shortShl((short) 1, (short) 0), (short) ((short) 1 << (short) 0), "(short) ((short) 1 << (short) 0)"); + Tester.checkEqual(shortShl((short) 1, (short) 1), (short) ((short) 1 << (short) 1), "(short) ((short) 1 << (short) 1)"); + Tester.checkEqual(shortShl((short) 1, Short.MAX_VALUE), (short) ((short) 1 << Short.MAX_VALUE), "(short) ((short) 1 << Short.MAX_VALUE)"); + Tester.checkEqual(shortShl(Short.MAX_VALUE, Short.MIN_VALUE), (short) (Short.MAX_VALUE << Short.MIN_VALUE), "(short) (Short.MAX_VALUE << Short.MIN_VALUE)"); + Tester.checkEqual(shortShl(Short.MAX_VALUE, (short) -1), (short) (Short.MAX_VALUE << (short) -1), "(short) (Short.MAX_VALUE << (short) -1)"); + Tester.checkEqual(shortShl(Short.MAX_VALUE, (short) 0), (short) (Short.MAX_VALUE << (short) 0), "(short) (Short.MAX_VALUE << (short) 0)"); + Tester.checkEqual(shortShl(Short.MAX_VALUE, (short) 1), (short) (Short.MAX_VALUE << (short) 1), "(short) (Short.MAX_VALUE << (short) 1)"); + Tester.checkEqual(shortShl(Short.MAX_VALUE, Short.MAX_VALUE), (short) (Short.MAX_VALUE << Short.MAX_VALUE), "(short) (Short.MAX_VALUE << Short.MAX_VALUE)"); + Tester.checkEqual(shortShr(Short.MIN_VALUE, Short.MIN_VALUE), (short) (Short.MIN_VALUE >> Short.MIN_VALUE), "(short) (Short.MIN_VALUE >> Short.MIN_VALUE)"); + Tester.checkEqual(shortShr(Short.MIN_VALUE, (short) -1), (short) (Short.MIN_VALUE >> (short) -1), "(short) (Short.MIN_VALUE >> (short) -1)"); + Tester.checkEqual(shortShr(Short.MIN_VALUE, (short) 0), (short) (Short.MIN_VALUE >> (short) 0), "(short) (Short.MIN_VALUE >> (short) 0)"); + Tester.checkEqual(shortShr(Short.MIN_VALUE, (short) 1), (short) (Short.MIN_VALUE >> (short) 1), "(short) (Short.MIN_VALUE >> (short) 1)"); + Tester.checkEqual(shortShr(Short.MIN_VALUE, Short.MAX_VALUE), (short) (Short.MIN_VALUE >> Short.MAX_VALUE), "(short) (Short.MIN_VALUE >> Short.MAX_VALUE)"); + Tester.checkEqual(shortShr((short) -1, Short.MIN_VALUE), (short) ((short) -1 >> Short.MIN_VALUE), "(short) ((short) -1 >> Short.MIN_VALUE)"); + Tester.checkEqual(shortShr((short) -1, (short) -1), (short) ((short) -1 >> (short) -1), "(short) ((short) -1 >> (short) -1)"); + Tester.checkEqual(shortShr((short) -1, (short) 0), (short) ((short) -1 >> (short) 0), "(short) ((short) -1 >> (short) 0)"); + Tester.checkEqual(shortShr((short) -1, (short) 1), (short) ((short) -1 >> (short) 1), "(short) ((short) -1 >> (short) 1)"); + Tester.checkEqual(shortShr((short) -1, Short.MAX_VALUE), (short) ((short) -1 >> Short.MAX_VALUE), "(short) ((short) -1 >> Short.MAX_VALUE)"); + Tester.checkEqual(shortShr((short) 0, Short.MIN_VALUE), (short) ((short) 0 >> Short.MIN_VALUE), "(short) ((short) 0 >> Short.MIN_VALUE)"); + Tester.checkEqual(shortShr((short) 0, (short) -1), (short) ((short) 0 >> (short) -1), "(short) ((short) 0 >> (short) -1)"); + Tester.checkEqual(shortShr((short) 0, (short) 0), (short) ((short) 0 >> (short) 0), "(short) ((short) 0 >> (short) 0)"); + Tester.checkEqual(shortShr((short) 0, (short) 1), (short) ((short) 0 >> (short) 1), "(short) ((short) 0 >> (short) 1)"); + Tester.checkEqual(shortShr((short) 0, Short.MAX_VALUE), (short) ((short) 0 >> Short.MAX_VALUE), "(short) ((short) 0 >> Short.MAX_VALUE)"); + Tester.checkEqual(shortShr((short) 1, Short.MIN_VALUE), (short) ((short) 1 >> Short.MIN_VALUE), "(short) ((short) 1 >> Short.MIN_VALUE)"); + Tester.checkEqual(shortShr((short) 1, (short) -1), (short) ((short) 1 >> (short) -1), "(short) ((short) 1 >> (short) -1)"); + Tester.checkEqual(shortShr((short) 1, (short) 0), (short) ((short) 1 >> (short) 0), "(short) ((short) 1 >> (short) 0)"); + Tester.checkEqual(shortShr((short) 1, (short) 1), (short) ((short) 1 >> (short) 1), "(short) ((short) 1 >> (short) 1)"); + Tester.checkEqual(shortShr((short) 1, Short.MAX_VALUE), (short) ((short) 1 >> Short.MAX_VALUE), "(short) ((short) 1 >> Short.MAX_VALUE)"); + Tester.checkEqual(shortShr(Short.MAX_VALUE, Short.MIN_VALUE), (short) (Short.MAX_VALUE >> Short.MIN_VALUE), "(short) (Short.MAX_VALUE >> Short.MIN_VALUE)"); + Tester.checkEqual(shortShr(Short.MAX_VALUE, (short) -1), (short) (Short.MAX_VALUE >> (short) -1), "(short) (Short.MAX_VALUE >> (short) -1)"); + Tester.checkEqual(shortShr(Short.MAX_VALUE, (short) 0), (short) (Short.MAX_VALUE >> (short) 0), "(short) (Short.MAX_VALUE >> (short) 0)"); + Tester.checkEqual(shortShr(Short.MAX_VALUE, (short) 1), (short) (Short.MAX_VALUE >> (short) 1), "(short) (Short.MAX_VALUE >> (short) 1)"); + Tester.checkEqual(shortShr(Short.MAX_VALUE, Short.MAX_VALUE), (short) (Short.MAX_VALUE >> Short.MAX_VALUE), "(short) (Short.MAX_VALUE >> Short.MAX_VALUE)"); + Tester.checkEqual(shortUshr(Short.MIN_VALUE, Short.MIN_VALUE), (short) (Short.MIN_VALUE >>> Short.MIN_VALUE), "(short) (Short.MIN_VALUE >>> Short.MIN_VALUE)"); + Tester.checkEqual(shortUshr(Short.MIN_VALUE, (short) -1), (short) (Short.MIN_VALUE >>> (short) -1), "(short) (Short.MIN_VALUE >>> (short) -1)"); + Tester.checkEqual(shortUshr(Short.MIN_VALUE, (short) 0), (short) (Short.MIN_VALUE >>> (short) 0), "(short) (Short.MIN_VALUE >>> (short) 0)"); + Tester.checkEqual(shortUshr(Short.MIN_VALUE, (short) 1), (short) (Short.MIN_VALUE >>> (short) 1), "(short) (Short.MIN_VALUE >>> (short) 1)"); + Tester.checkEqual(shortUshr(Short.MIN_VALUE, Short.MAX_VALUE), (short) (Short.MIN_VALUE >>> Short.MAX_VALUE), "(short) (Short.MIN_VALUE >>> Short.MAX_VALUE)"); + Tester.checkEqual(shortUshr((short) -1, Short.MIN_VALUE), (short) ((short) -1 >>> Short.MIN_VALUE), "(short) ((short) -1 >>> Short.MIN_VALUE)"); + Tester.checkEqual(shortUshr((short) -1, (short) -1), (short) ((short) -1 >>> (short) -1), "(short) ((short) -1 >>> (short) -1)"); + Tester.checkEqual(shortUshr((short) -1, (short) 0), (short) ((short) -1 >>> (short) 0), "(short) ((short) -1 >>> (short) 0)"); + Tester.checkEqual(shortUshr((short) -1, (short) 1), (short) ((short) -1 >>> (short) 1), "(short) ((short) -1 >>> (short) 1)"); + Tester.checkEqual(shortUshr((short) -1, Short.MAX_VALUE), (short) ((short) -1 >>> Short.MAX_VALUE), "(short) ((short) -1 >>> Short.MAX_VALUE)"); + Tester.checkEqual(shortUshr((short) 0, Short.MIN_VALUE), (short) ((short) 0 >>> Short.MIN_VALUE), "(short) ((short) 0 >>> Short.MIN_VALUE)"); + Tester.checkEqual(shortUshr((short) 0, (short) -1), (short) ((short) 0 >>> (short) -1), "(short) ((short) 0 >>> (short) -1)"); + Tester.checkEqual(shortUshr((short) 0, (short) 0), (short) ((short) 0 >>> (short) 0), "(short) ((short) 0 >>> (short) 0)"); + Tester.checkEqual(shortUshr((short) 0, (short) 1), (short) ((short) 0 >>> (short) 1), "(short) ((short) 0 >>> (short) 1)"); + Tester.checkEqual(shortUshr((short) 0, Short.MAX_VALUE), (short) ((short) 0 >>> Short.MAX_VALUE), "(short) ((short) 0 >>> Short.MAX_VALUE)"); + Tester.checkEqual(shortUshr((short) 1, Short.MIN_VALUE), (short) ((short) 1 >>> Short.MIN_VALUE), "(short) ((short) 1 >>> Short.MIN_VALUE)"); + Tester.checkEqual(shortUshr((short) 1, (short) -1), (short) ((short) 1 >>> (short) -1), "(short) ((short) 1 >>> (short) -1)"); + Tester.checkEqual(shortUshr((short) 1, (short) 0), (short) ((short) 1 >>> (short) 0), "(short) ((short) 1 >>> (short) 0)"); + Tester.checkEqual(shortUshr((short) 1, (short) 1), (short) ((short) 1 >>> (short) 1), "(short) ((short) 1 >>> (short) 1)"); + Tester.checkEqual(shortUshr((short) 1, Short.MAX_VALUE), (short) ((short) 1 >>> Short.MAX_VALUE), "(short) ((short) 1 >>> Short.MAX_VALUE)"); + Tester.checkEqual(shortUshr(Short.MAX_VALUE, Short.MIN_VALUE), (short) (Short.MAX_VALUE >>> Short.MIN_VALUE), "(short) (Short.MAX_VALUE >>> Short.MIN_VALUE)"); + Tester.checkEqual(shortUshr(Short.MAX_VALUE, (short) -1), (short) (Short.MAX_VALUE >>> (short) -1), "(short) (Short.MAX_VALUE >>> (short) -1)"); + Tester.checkEqual(shortUshr(Short.MAX_VALUE, (short) 0), (short) (Short.MAX_VALUE >>> (short) 0), "(short) (Short.MAX_VALUE >>> (short) 0)"); + Tester.checkEqual(shortUshr(Short.MAX_VALUE, (short) 1), (short) (Short.MAX_VALUE >>> (short) 1), "(short) (Short.MAX_VALUE >>> (short) 1)"); + Tester.checkEqual(shortUshr(Short.MAX_VALUE, Short.MAX_VALUE), (short) (Short.MAX_VALUE >>> Short.MAX_VALUE), "(short) (Short.MAX_VALUE >>> Short.MAX_VALUE)"); + Tester.checkEqual(shortLt(Short.MIN_VALUE, Short.MIN_VALUE), Short.MIN_VALUE < Short.MIN_VALUE, "Short.MIN_VALUE < Short.MIN_VALUE"); + Tester.checkEqual(shortLt(Short.MIN_VALUE, (short) -1), Short.MIN_VALUE < (short) -1, "Short.MIN_VALUE < (short) -1"); + Tester.checkEqual(shortLt(Short.MIN_VALUE, (short) 0), Short.MIN_VALUE < (short) 0, "Short.MIN_VALUE < (short) 0"); + Tester.checkEqual(shortLt(Short.MIN_VALUE, (short) 1), Short.MIN_VALUE < (short) 1, "Short.MIN_VALUE < (short) 1"); + Tester.checkEqual(shortLt(Short.MIN_VALUE, Short.MAX_VALUE), Short.MIN_VALUE < Short.MAX_VALUE, "Short.MIN_VALUE < Short.MAX_VALUE"); + Tester.checkEqual(shortLt((short) -1, Short.MIN_VALUE), (short) -1 < Short.MIN_VALUE, "(short) -1 < Short.MIN_VALUE"); + Tester.checkEqual(shortLt((short) -1, (short) -1), (short) -1 < (short) -1, "(short) -1 < (short) -1"); + Tester.checkEqual(shortLt((short) -1, (short) 0), (short) -1 < (short) 0, "(short) -1 < (short) 0"); + Tester.checkEqual(shortLt((short) -1, (short) 1), (short) -1 < (short) 1, "(short) -1 < (short) 1"); + Tester.checkEqual(shortLt((short) -1, Short.MAX_VALUE), (short) -1 < Short.MAX_VALUE, "(short) -1 < Short.MAX_VALUE"); + Tester.checkEqual(shortLt((short) 0, Short.MIN_VALUE), (short) 0 < Short.MIN_VALUE, "(short) 0 < Short.MIN_VALUE"); + Tester.checkEqual(shortLt((short) 0, (short) -1), (short) 0 < (short) -1, "(short) 0 < (short) -1"); + Tester.checkEqual(shortLt((short) 0, (short) 0), (short) 0 < (short) 0, "(short) 0 < (short) 0"); + Tester.checkEqual(shortLt((short) 0, (short) 1), (short) 0 < (short) 1, "(short) 0 < (short) 1"); + Tester.checkEqual(shortLt((short) 0, Short.MAX_VALUE), (short) 0 < Short.MAX_VALUE, "(short) 0 < Short.MAX_VALUE"); + Tester.checkEqual(shortLt((short) 1, Short.MIN_VALUE), (short) 1 < Short.MIN_VALUE, "(short) 1 < Short.MIN_VALUE"); + Tester.checkEqual(shortLt((short) 1, (short) -1), (short) 1 < (short) -1, "(short) 1 < (short) -1"); + Tester.checkEqual(shortLt((short) 1, (short) 0), (short) 1 < (short) 0, "(short) 1 < (short) 0"); + Tester.checkEqual(shortLt((short) 1, (short) 1), (short) 1 < (short) 1, "(short) 1 < (short) 1"); + Tester.checkEqual(shortLt((short) 1, Short.MAX_VALUE), (short) 1 < Short.MAX_VALUE, "(short) 1 < Short.MAX_VALUE"); + Tester.checkEqual(shortLt(Short.MAX_VALUE, Short.MIN_VALUE), Short.MAX_VALUE < Short.MIN_VALUE, "Short.MAX_VALUE < Short.MIN_VALUE"); + Tester.checkEqual(shortLt(Short.MAX_VALUE, (short) -1), Short.MAX_VALUE < (short) -1, "Short.MAX_VALUE < (short) -1"); + Tester.checkEqual(shortLt(Short.MAX_VALUE, (short) 0), Short.MAX_VALUE < (short) 0, "Short.MAX_VALUE < (short) 0"); + Tester.checkEqual(shortLt(Short.MAX_VALUE, (short) 1), Short.MAX_VALUE < (short) 1, "Short.MAX_VALUE < (short) 1"); + Tester.checkEqual(shortLt(Short.MAX_VALUE, Short.MAX_VALUE), Short.MAX_VALUE < Short.MAX_VALUE, "Short.MAX_VALUE < Short.MAX_VALUE"); + Tester.checkEqual(shortGt(Short.MIN_VALUE, Short.MIN_VALUE), Short.MIN_VALUE > Short.MIN_VALUE, "Short.MIN_VALUE > Short.MIN_VALUE"); + Tester.checkEqual(shortGt(Short.MIN_VALUE, (short) -1), Short.MIN_VALUE > (short) -1, "Short.MIN_VALUE > (short) -1"); + Tester.checkEqual(shortGt(Short.MIN_VALUE, (short) 0), Short.MIN_VALUE > (short) 0, "Short.MIN_VALUE > (short) 0"); + Tester.checkEqual(shortGt(Short.MIN_VALUE, (short) 1), Short.MIN_VALUE > (short) 1, "Short.MIN_VALUE > (short) 1"); + Tester.checkEqual(shortGt(Short.MIN_VALUE, Short.MAX_VALUE), Short.MIN_VALUE > Short.MAX_VALUE, "Short.MIN_VALUE > Short.MAX_VALUE"); + Tester.checkEqual(shortGt((short) -1, Short.MIN_VALUE), (short) -1 > Short.MIN_VALUE, "(short) -1 > Short.MIN_VALUE"); + Tester.checkEqual(shortGt((short) -1, (short) -1), (short) -1 > (short) -1, "(short) -1 > (short) -1"); + Tester.checkEqual(shortGt((short) -1, (short) 0), (short) -1 > (short) 0, "(short) -1 > (short) 0"); + Tester.checkEqual(shortGt((short) -1, (short) 1), (short) -1 > (short) 1, "(short) -1 > (short) 1"); + Tester.checkEqual(shortGt((short) -1, Short.MAX_VALUE), (short) -1 > Short.MAX_VALUE, "(short) -1 > Short.MAX_VALUE"); + Tester.checkEqual(shortGt((short) 0, Short.MIN_VALUE), (short) 0 > Short.MIN_VALUE, "(short) 0 > Short.MIN_VALUE"); + Tester.checkEqual(shortGt((short) 0, (short) -1), (short) 0 > (short) -1, "(short) 0 > (short) -1"); + Tester.checkEqual(shortGt((short) 0, (short) 0), (short) 0 > (short) 0, "(short) 0 > (short) 0"); + Tester.checkEqual(shortGt((short) 0, (short) 1), (short) 0 > (short) 1, "(short) 0 > (short) 1"); + Tester.checkEqual(shortGt((short) 0, Short.MAX_VALUE), (short) 0 > Short.MAX_VALUE, "(short) 0 > Short.MAX_VALUE"); + Tester.checkEqual(shortGt((short) 1, Short.MIN_VALUE), (short) 1 > Short.MIN_VALUE, "(short) 1 > Short.MIN_VALUE"); + Tester.checkEqual(shortGt((short) 1, (short) -1), (short) 1 > (short) -1, "(short) 1 > (short) -1"); + Tester.checkEqual(shortGt((short) 1, (short) 0), (short) 1 > (short) 0, "(short) 1 > (short) 0"); + Tester.checkEqual(shortGt((short) 1, (short) 1), (short) 1 > (short) 1, "(short) 1 > (short) 1"); + Tester.checkEqual(shortGt((short) 1, Short.MAX_VALUE), (short) 1 > Short.MAX_VALUE, "(short) 1 > Short.MAX_VALUE"); + Tester.checkEqual(shortGt(Short.MAX_VALUE, Short.MIN_VALUE), Short.MAX_VALUE > Short.MIN_VALUE, "Short.MAX_VALUE > Short.MIN_VALUE"); + Tester.checkEqual(shortGt(Short.MAX_VALUE, (short) -1), Short.MAX_VALUE > (short) -1, "Short.MAX_VALUE > (short) -1"); + Tester.checkEqual(shortGt(Short.MAX_VALUE, (short) 0), Short.MAX_VALUE > (short) 0, "Short.MAX_VALUE > (short) 0"); + Tester.checkEqual(shortGt(Short.MAX_VALUE, (short) 1), Short.MAX_VALUE > (short) 1, "Short.MAX_VALUE > (short) 1"); + Tester.checkEqual(shortGt(Short.MAX_VALUE, Short.MAX_VALUE), Short.MAX_VALUE > Short.MAX_VALUE, "Short.MAX_VALUE > Short.MAX_VALUE"); + Tester.checkEqual(shortLe(Short.MIN_VALUE, Short.MIN_VALUE), Short.MIN_VALUE <= Short.MIN_VALUE, "Short.MIN_VALUE <= Short.MIN_VALUE"); + Tester.checkEqual(shortLe(Short.MIN_VALUE, (short) -1), Short.MIN_VALUE <= (short) -1, "Short.MIN_VALUE <= (short) -1"); + Tester.checkEqual(shortLe(Short.MIN_VALUE, (short) 0), Short.MIN_VALUE <= (short) 0, "Short.MIN_VALUE <= (short) 0"); + Tester.checkEqual(shortLe(Short.MIN_VALUE, (short) 1), Short.MIN_VALUE <= (short) 1, "Short.MIN_VALUE <= (short) 1"); + Tester.checkEqual(shortLe(Short.MIN_VALUE, Short.MAX_VALUE), Short.MIN_VALUE <= Short.MAX_VALUE, "Short.MIN_VALUE <= Short.MAX_VALUE"); + Tester.checkEqual(shortLe((short) -1, Short.MIN_VALUE), (short) -1 <= Short.MIN_VALUE, "(short) -1 <= Short.MIN_VALUE"); + Tester.checkEqual(shortLe((short) -1, (short) -1), (short) -1 <= (short) -1, "(short) -1 <= (short) -1"); + Tester.checkEqual(shortLe((short) -1, (short) 0), (short) -1 <= (short) 0, "(short) -1 <= (short) 0"); + Tester.checkEqual(shortLe((short) -1, (short) 1), (short) -1 <= (short) 1, "(short) -1 <= (short) 1"); + Tester.checkEqual(shortLe((short) -1, Short.MAX_VALUE), (short) -1 <= Short.MAX_VALUE, "(short) -1 <= Short.MAX_VALUE"); + Tester.checkEqual(shortLe((short) 0, Short.MIN_VALUE), (short) 0 <= Short.MIN_VALUE, "(short) 0 <= Short.MIN_VALUE"); + Tester.checkEqual(shortLe((short) 0, (short) -1), (short) 0 <= (short) -1, "(short) 0 <= (short) -1"); + Tester.checkEqual(shortLe((short) 0, (short) 0), (short) 0 <= (short) 0, "(short) 0 <= (short) 0"); + Tester.checkEqual(shortLe((short) 0, (short) 1), (short) 0 <= (short) 1, "(short) 0 <= (short) 1"); + Tester.checkEqual(shortLe((short) 0, Short.MAX_VALUE), (short) 0 <= Short.MAX_VALUE, "(short) 0 <= Short.MAX_VALUE"); + Tester.checkEqual(shortLe((short) 1, Short.MIN_VALUE), (short) 1 <= Short.MIN_VALUE, "(short) 1 <= Short.MIN_VALUE"); + Tester.checkEqual(shortLe((short) 1, (short) -1), (short) 1 <= (short) -1, "(short) 1 <= (short) -1"); + Tester.checkEqual(shortLe((short) 1, (short) 0), (short) 1 <= (short) 0, "(short) 1 <= (short) 0"); + Tester.checkEqual(shortLe((short) 1, (short) 1), (short) 1 <= (short) 1, "(short) 1 <= (short) 1"); + Tester.checkEqual(shortLe((short) 1, Short.MAX_VALUE), (short) 1 <= Short.MAX_VALUE, "(short) 1 <= Short.MAX_VALUE"); + Tester.checkEqual(shortLe(Short.MAX_VALUE, Short.MIN_VALUE), Short.MAX_VALUE <= Short.MIN_VALUE, "Short.MAX_VALUE <= Short.MIN_VALUE"); + Tester.checkEqual(shortLe(Short.MAX_VALUE, (short) -1), Short.MAX_VALUE <= (short) -1, "Short.MAX_VALUE <= (short) -1"); + Tester.checkEqual(shortLe(Short.MAX_VALUE, (short) 0), Short.MAX_VALUE <= (short) 0, "Short.MAX_VALUE <= (short) 0"); + Tester.checkEqual(shortLe(Short.MAX_VALUE, (short) 1), Short.MAX_VALUE <= (short) 1, "Short.MAX_VALUE <= (short) 1"); + Tester.checkEqual(shortLe(Short.MAX_VALUE, Short.MAX_VALUE), Short.MAX_VALUE <= Short.MAX_VALUE, "Short.MAX_VALUE <= Short.MAX_VALUE"); + Tester.checkEqual(shortGe(Short.MIN_VALUE, Short.MIN_VALUE), Short.MIN_VALUE >= Short.MIN_VALUE, "Short.MIN_VALUE >= Short.MIN_VALUE"); + Tester.checkEqual(shortGe(Short.MIN_VALUE, (short) -1), Short.MIN_VALUE >= (short) -1, "Short.MIN_VALUE >= (short) -1"); + Tester.checkEqual(shortGe(Short.MIN_VALUE, (short) 0), Short.MIN_VALUE >= (short) 0, "Short.MIN_VALUE >= (short) 0"); + Tester.checkEqual(shortGe(Short.MIN_VALUE, (short) 1), Short.MIN_VALUE >= (short) 1, "Short.MIN_VALUE >= (short) 1"); + Tester.checkEqual(shortGe(Short.MIN_VALUE, Short.MAX_VALUE), Short.MIN_VALUE >= Short.MAX_VALUE, "Short.MIN_VALUE >= Short.MAX_VALUE"); + Tester.checkEqual(shortGe((short) -1, Short.MIN_VALUE), (short) -1 >= Short.MIN_VALUE, "(short) -1 >= Short.MIN_VALUE"); + Tester.checkEqual(shortGe((short) -1, (short) -1), (short) -1 >= (short) -1, "(short) -1 >= (short) -1"); + Tester.checkEqual(shortGe((short) -1, (short) 0), (short) -1 >= (short) 0, "(short) -1 >= (short) 0"); + Tester.checkEqual(shortGe((short) -1, (short) 1), (short) -1 >= (short) 1, "(short) -1 >= (short) 1"); + Tester.checkEqual(shortGe((short) -1, Short.MAX_VALUE), (short) -1 >= Short.MAX_VALUE, "(short) -1 >= Short.MAX_VALUE"); + Tester.checkEqual(shortGe((short) 0, Short.MIN_VALUE), (short) 0 >= Short.MIN_VALUE, "(short) 0 >= Short.MIN_VALUE"); + Tester.checkEqual(shortGe((short) 0, (short) -1), (short) 0 >= (short) -1, "(short) 0 >= (short) -1"); + Tester.checkEqual(shortGe((short) 0, (short) 0), (short) 0 >= (short) 0, "(short) 0 >= (short) 0"); + Tester.checkEqual(shortGe((short) 0, (short) 1), (short) 0 >= (short) 1, "(short) 0 >= (short) 1"); + Tester.checkEqual(shortGe((short) 0, Short.MAX_VALUE), (short) 0 >= Short.MAX_VALUE, "(short) 0 >= Short.MAX_VALUE"); + Tester.checkEqual(shortGe((short) 1, Short.MIN_VALUE), (short) 1 >= Short.MIN_VALUE, "(short) 1 >= Short.MIN_VALUE"); + Tester.checkEqual(shortGe((short) 1, (short) -1), (short) 1 >= (short) -1, "(short) 1 >= (short) -1"); + Tester.checkEqual(shortGe((short) 1, (short) 0), (short) 1 >= (short) 0, "(short) 1 >= (short) 0"); + Tester.checkEqual(shortGe((short) 1, (short) 1), (short) 1 >= (short) 1, "(short) 1 >= (short) 1"); + Tester.checkEqual(shortGe((short) 1, Short.MAX_VALUE), (short) 1 >= Short.MAX_VALUE, "(short) 1 >= Short.MAX_VALUE"); + Tester.checkEqual(shortGe(Short.MAX_VALUE, Short.MIN_VALUE), Short.MAX_VALUE >= Short.MIN_VALUE, "Short.MAX_VALUE >= Short.MIN_VALUE"); + Tester.checkEqual(shortGe(Short.MAX_VALUE, (short) -1), Short.MAX_VALUE >= (short) -1, "Short.MAX_VALUE >= (short) -1"); + Tester.checkEqual(shortGe(Short.MAX_VALUE, (short) 0), Short.MAX_VALUE >= (short) 0, "Short.MAX_VALUE >= (short) 0"); + Tester.checkEqual(shortGe(Short.MAX_VALUE, (short) 1), Short.MAX_VALUE >= (short) 1, "Short.MAX_VALUE >= (short) 1"); + Tester.checkEqual(shortGe(Short.MAX_VALUE, Short.MAX_VALUE), Short.MAX_VALUE >= Short.MAX_VALUE, "Short.MAX_VALUE >= Short.MAX_VALUE"); + Tester.checkEqual(shortEq(Short.MIN_VALUE, Short.MIN_VALUE), Short.MIN_VALUE == Short.MIN_VALUE, "Short.MIN_VALUE == Short.MIN_VALUE"); + Tester.checkEqual(shortEq(Short.MIN_VALUE, (short) -1), Short.MIN_VALUE == (short) -1, "Short.MIN_VALUE == (short) -1"); + Tester.checkEqual(shortEq(Short.MIN_VALUE, (short) 0), Short.MIN_VALUE == (short) 0, "Short.MIN_VALUE == (short) 0"); + Tester.checkEqual(shortEq(Short.MIN_VALUE, (short) 1), Short.MIN_VALUE == (short) 1, "Short.MIN_VALUE == (short) 1"); + Tester.checkEqual(shortEq(Short.MIN_VALUE, Short.MAX_VALUE), Short.MIN_VALUE == Short.MAX_VALUE, "Short.MIN_VALUE == Short.MAX_VALUE"); + Tester.checkEqual(shortEq((short) -1, Short.MIN_VALUE), (short) -1 == Short.MIN_VALUE, "(short) -1 == Short.MIN_VALUE"); + Tester.checkEqual(shortEq((short) -1, (short) -1), (short) -1 == (short) -1, "(short) -1 == (short) -1"); + Tester.checkEqual(shortEq((short) -1, (short) 0), (short) -1 == (short) 0, "(short) -1 == (short) 0"); + Tester.checkEqual(shortEq((short) -1, (short) 1), (short) -1 == (short) 1, "(short) -1 == (short) 1"); + Tester.checkEqual(shortEq((short) -1, Short.MAX_VALUE), (short) -1 == Short.MAX_VALUE, "(short) -1 == Short.MAX_VALUE"); + Tester.checkEqual(shortEq((short) 0, Short.MIN_VALUE), (short) 0 == Short.MIN_VALUE, "(short) 0 == Short.MIN_VALUE"); + Tester.checkEqual(shortEq((short) 0, (short) -1), (short) 0 == (short) -1, "(short) 0 == (short) -1"); + Tester.checkEqual(shortEq((short) 0, (short) 0), (short) 0 == (short) 0, "(short) 0 == (short) 0"); + Tester.checkEqual(shortEq((short) 0, (short) 1), (short) 0 == (short) 1, "(short) 0 == (short) 1"); + Tester.checkEqual(shortEq((short) 0, Short.MAX_VALUE), (short) 0 == Short.MAX_VALUE, "(short) 0 == Short.MAX_VALUE"); + Tester.checkEqual(shortEq((short) 1, Short.MIN_VALUE), (short) 1 == Short.MIN_VALUE, "(short) 1 == Short.MIN_VALUE"); + Tester.checkEqual(shortEq((short) 1, (short) -1), (short) 1 == (short) -1, "(short) 1 == (short) -1"); + Tester.checkEqual(shortEq((short) 1, (short) 0), (short) 1 == (short) 0, "(short) 1 == (short) 0"); + Tester.checkEqual(shortEq((short) 1, (short) 1), (short) 1 == (short) 1, "(short) 1 == (short) 1"); + Tester.checkEqual(shortEq((short) 1, Short.MAX_VALUE), (short) 1 == Short.MAX_VALUE, "(short) 1 == Short.MAX_VALUE"); + Tester.checkEqual(shortEq(Short.MAX_VALUE, Short.MIN_VALUE), Short.MAX_VALUE == Short.MIN_VALUE, "Short.MAX_VALUE == Short.MIN_VALUE"); + Tester.checkEqual(shortEq(Short.MAX_VALUE, (short) -1), Short.MAX_VALUE == (short) -1, "Short.MAX_VALUE == (short) -1"); + Tester.checkEqual(shortEq(Short.MAX_VALUE, (short) 0), Short.MAX_VALUE == (short) 0, "Short.MAX_VALUE == (short) 0"); + Tester.checkEqual(shortEq(Short.MAX_VALUE, (short) 1), Short.MAX_VALUE == (short) 1, "Short.MAX_VALUE == (short) 1"); + Tester.checkEqual(shortEq(Short.MAX_VALUE, Short.MAX_VALUE), Short.MAX_VALUE == Short.MAX_VALUE, "Short.MAX_VALUE == Short.MAX_VALUE"); + Tester.checkEqual(shortNe(Short.MIN_VALUE, Short.MIN_VALUE), Short.MIN_VALUE != Short.MIN_VALUE, "Short.MIN_VALUE != Short.MIN_VALUE"); + Tester.checkEqual(shortNe(Short.MIN_VALUE, (short) -1), Short.MIN_VALUE != (short) -1, "Short.MIN_VALUE != (short) -1"); + Tester.checkEqual(shortNe(Short.MIN_VALUE, (short) 0), Short.MIN_VALUE != (short) 0, "Short.MIN_VALUE != (short) 0"); + Tester.checkEqual(shortNe(Short.MIN_VALUE, (short) 1), Short.MIN_VALUE != (short) 1, "Short.MIN_VALUE != (short) 1"); + Tester.checkEqual(shortNe(Short.MIN_VALUE, Short.MAX_VALUE), Short.MIN_VALUE != Short.MAX_VALUE, "Short.MIN_VALUE != Short.MAX_VALUE"); + Tester.checkEqual(shortNe((short) -1, Short.MIN_VALUE), (short) -1 != Short.MIN_VALUE, "(short) -1 != Short.MIN_VALUE"); + Tester.checkEqual(shortNe((short) -1, (short) -1), (short) -1 != (short) -1, "(short) -1 != (short) -1"); + Tester.checkEqual(shortNe((short) -1, (short) 0), (short) -1 != (short) 0, "(short) -1 != (short) 0"); + Tester.checkEqual(shortNe((short) -1, (short) 1), (short) -1 != (short) 1, "(short) -1 != (short) 1"); + Tester.checkEqual(shortNe((short) -1, Short.MAX_VALUE), (short) -1 != Short.MAX_VALUE, "(short) -1 != Short.MAX_VALUE"); + Tester.checkEqual(shortNe((short) 0, Short.MIN_VALUE), (short) 0 != Short.MIN_VALUE, "(short) 0 != Short.MIN_VALUE"); + Tester.checkEqual(shortNe((short) 0, (short) -1), (short) 0 != (short) -1, "(short) 0 != (short) -1"); + Tester.checkEqual(shortNe((short) 0, (short) 0), (short) 0 != (short) 0, "(short) 0 != (short) 0"); + Tester.checkEqual(shortNe((short) 0, (short) 1), (short) 0 != (short) 1, "(short) 0 != (short) 1"); + Tester.checkEqual(shortNe((short) 0, Short.MAX_VALUE), (short) 0 != Short.MAX_VALUE, "(short) 0 != Short.MAX_VALUE"); + Tester.checkEqual(shortNe((short) 1, Short.MIN_VALUE), (short) 1 != Short.MIN_VALUE, "(short) 1 != Short.MIN_VALUE"); + Tester.checkEqual(shortNe((short) 1, (short) -1), (short) 1 != (short) -1, "(short) 1 != (short) -1"); + Tester.checkEqual(shortNe((short) 1, (short) 0), (short) 1 != (short) 0, "(short) 1 != (short) 0"); + Tester.checkEqual(shortNe((short) 1, (short) 1), (short) 1 != (short) 1, "(short) 1 != (short) 1"); + Tester.checkEqual(shortNe((short) 1, Short.MAX_VALUE), (short) 1 != Short.MAX_VALUE, "(short) 1 != Short.MAX_VALUE"); + Tester.checkEqual(shortNe(Short.MAX_VALUE, Short.MIN_VALUE), Short.MAX_VALUE != Short.MIN_VALUE, "Short.MAX_VALUE != Short.MIN_VALUE"); + Tester.checkEqual(shortNe(Short.MAX_VALUE, (short) -1), Short.MAX_VALUE != (short) -1, "Short.MAX_VALUE != (short) -1"); + Tester.checkEqual(shortNe(Short.MAX_VALUE, (short) 0), Short.MAX_VALUE != (short) 0, "Short.MAX_VALUE != (short) 0"); + Tester.checkEqual(shortNe(Short.MAX_VALUE, (short) 1), Short.MAX_VALUE != (short) 1, "Short.MAX_VALUE != (short) 1"); + Tester.checkEqual(shortNe(Short.MAX_VALUE, Short.MAX_VALUE), Short.MAX_VALUE != Short.MAX_VALUE, "Short.MAX_VALUE != Short.MAX_VALUE"); + Tester.checkEqual(shortAnd(Short.MIN_VALUE, Short.MIN_VALUE), (short) (Short.MIN_VALUE & Short.MIN_VALUE), "(short) (Short.MIN_VALUE & Short.MIN_VALUE)"); + Tester.checkEqual(shortAnd(Short.MIN_VALUE, (short) -1), (short) (Short.MIN_VALUE & (short) -1), "(short) (Short.MIN_VALUE & (short) -1)"); + Tester.checkEqual(shortAnd(Short.MIN_VALUE, (short) 0), (short) (Short.MIN_VALUE & (short) 0), "(short) (Short.MIN_VALUE & (short) 0)"); + Tester.checkEqual(shortAnd(Short.MIN_VALUE, (short) 1), (short) (Short.MIN_VALUE & (short) 1), "(short) (Short.MIN_VALUE & (short) 1)"); + Tester.checkEqual(shortAnd(Short.MIN_VALUE, Short.MAX_VALUE), (short) (Short.MIN_VALUE & Short.MAX_VALUE), "(short) (Short.MIN_VALUE & Short.MAX_VALUE)"); + Tester.checkEqual(shortAnd((short) -1, Short.MIN_VALUE), (short) ((short) -1 & Short.MIN_VALUE), "(short) ((short) -1 & Short.MIN_VALUE)"); + Tester.checkEqual(shortAnd((short) -1, (short) -1), (short) ((short) -1 & (short) -1), "(short) ((short) -1 & (short) -1)"); + Tester.checkEqual(shortAnd((short) -1, (short) 0), (short) ((short) -1 & (short) 0), "(short) ((short) -1 & (short) 0)"); + Tester.checkEqual(shortAnd((short) -1, (short) 1), (short) ((short) -1 & (short) 1), "(short) ((short) -1 & (short) 1)"); + Tester.checkEqual(shortAnd((short) -1, Short.MAX_VALUE), (short) ((short) -1 & Short.MAX_VALUE), "(short) ((short) -1 & Short.MAX_VALUE)"); + Tester.checkEqual(shortAnd((short) 0, Short.MIN_VALUE), (short) ((short) 0 & Short.MIN_VALUE), "(short) ((short) 0 & Short.MIN_VALUE)"); + Tester.checkEqual(shortAnd((short) 0, (short) -1), (short) ((short) 0 & (short) -1), "(short) ((short) 0 & (short) -1)"); + Tester.checkEqual(shortAnd((short) 0, (short) 0), (short) ((short) 0 & (short) 0), "(short) ((short) 0 & (short) 0)"); + Tester.checkEqual(shortAnd((short) 0, (short) 1), (short) ((short) 0 & (short) 1), "(short) ((short) 0 & (short) 1)"); + Tester.checkEqual(shortAnd((short) 0, Short.MAX_VALUE), (short) ((short) 0 & Short.MAX_VALUE), "(short) ((short) 0 & Short.MAX_VALUE)"); + Tester.checkEqual(shortAnd((short) 1, Short.MIN_VALUE), (short) ((short) 1 & Short.MIN_VALUE), "(short) ((short) 1 & Short.MIN_VALUE)"); + Tester.checkEqual(shortAnd((short) 1, (short) -1), (short) ((short) 1 & (short) -1), "(short) ((short) 1 & (short) -1)"); + Tester.checkEqual(shortAnd((short) 1, (short) 0), (short) ((short) 1 & (short) 0), "(short) ((short) 1 & (short) 0)"); + Tester.checkEqual(shortAnd((short) 1, (short) 1), (short) ((short) 1 & (short) 1), "(short) ((short) 1 & (short) 1)"); + Tester.checkEqual(shortAnd((short) 1, Short.MAX_VALUE), (short) ((short) 1 & Short.MAX_VALUE), "(short) ((short) 1 & Short.MAX_VALUE)"); + Tester.checkEqual(shortAnd(Short.MAX_VALUE, Short.MIN_VALUE), (short) (Short.MAX_VALUE & Short.MIN_VALUE), "(short) (Short.MAX_VALUE & Short.MIN_VALUE)"); + Tester.checkEqual(shortAnd(Short.MAX_VALUE, (short) -1), (short) (Short.MAX_VALUE & (short) -1), "(short) (Short.MAX_VALUE & (short) -1)"); + Tester.checkEqual(shortAnd(Short.MAX_VALUE, (short) 0), (short) (Short.MAX_VALUE & (short) 0), "(short) (Short.MAX_VALUE & (short) 0)"); + Tester.checkEqual(shortAnd(Short.MAX_VALUE, (short) 1), (short) (Short.MAX_VALUE & (short) 1), "(short) (Short.MAX_VALUE & (short) 1)"); + Tester.checkEqual(shortAnd(Short.MAX_VALUE, Short.MAX_VALUE), (short) (Short.MAX_VALUE & Short.MAX_VALUE), "(short) (Short.MAX_VALUE & Short.MAX_VALUE)"); + Tester.checkEqual(shortXor(Short.MIN_VALUE, Short.MIN_VALUE), (short) (Short.MIN_VALUE ^ Short.MIN_VALUE), "(short) (Short.MIN_VALUE ^ Short.MIN_VALUE)"); + Tester.checkEqual(shortXor(Short.MIN_VALUE, (short) -1), (short) (Short.MIN_VALUE ^ (short) -1), "(short) (Short.MIN_VALUE ^ (short) -1)"); + Tester.checkEqual(shortXor(Short.MIN_VALUE, (short) 0), (short) (Short.MIN_VALUE ^ (short) 0), "(short) (Short.MIN_VALUE ^ (short) 0)"); + Tester.checkEqual(shortXor(Short.MIN_VALUE, (short) 1), (short) (Short.MIN_VALUE ^ (short) 1), "(short) (Short.MIN_VALUE ^ (short) 1)"); + Tester.checkEqual(shortXor(Short.MIN_VALUE, Short.MAX_VALUE), (short) (Short.MIN_VALUE ^ Short.MAX_VALUE), "(short) (Short.MIN_VALUE ^ Short.MAX_VALUE)"); + Tester.checkEqual(shortXor((short) -1, Short.MIN_VALUE), (short) ((short) -1 ^ Short.MIN_VALUE), "(short) ((short) -1 ^ Short.MIN_VALUE)"); + Tester.checkEqual(shortXor((short) -1, (short) -1), (short) ((short) -1 ^ (short) -1), "(short) ((short) -1 ^ (short) -1)"); + Tester.checkEqual(shortXor((short) -1, (short) 0), (short) ((short) -1 ^ (short) 0), "(short) ((short) -1 ^ (short) 0)"); + Tester.checkEqual(shortXor((short) -1, (short) 1), (short) ((short) -1 ^ (short) 1), "(short) ((short) -1 ^ (short) 1)"); + Tester.checkEqual(shortXor((short) -1, Short.MAX_VALUE), (short) ((short) -1 ^ Short.MAX_VALUE), "(short) ((short) -1 ^ Short.MAX_VALUE)"); + Tester.checkEqual(shortXor((short) 0, Short.MIN_VALUE), (short) ((short) 0 ^ Short.MIN_VALUE), "(short) ((short) 0 ^ Short.MIN_VALUE)"); + Tester.checkEqual(shortXor((short) 0, (short) -1), (short) ((short) 0 ^ (short) -1), "(short) ((short) 0 ^ (short) -1)"); + Tester.checkEqual(shortXor((short) 0, (short) 0), (short) ((short) 0 ^ (short) 0), "(short) ((short) 0 ^ (short) 0)"); + Tester.checkEqual(shortXor((short) 0, (short) 1), (short) ((short) 0 ^ (short) 1), "(short) ((short) 0 ^ (short) 1)"); + Tester.checkEqual(shortXor((short) 0, Short.MAX_VALUE), (short) ((short) 0 ^ Short.MAX_VALUE), "(short) ((short) 0 ^ Short.MAX_VALUE)"); + Tester.checkEqual(shortXor((short) 1, Short.MIN_VALUE), (short) ((short) 1 ^ Short.MIN_VALUE), "(short) ((short) 1 ^ Short.MIN_VALUE)"); + Tester.checkEqual(shortXor((short) 1, (short) -1), (short) ((short) 1 ^ (short) -1), "(short) ((short) 1 ^ (short) -1)"); + Tester.checkEqual(shortXor((short) 1, (short) 0), (short) ((short) 1 ^ (short) 0), "(short) ((short) 1 ^ (short) 0)"); + Tester.checkEqual(shortXor((short) 1, (short) 1), (short) ((short) 1 ^ (short) 1), "(short) ((short) 1 ^ (short) 1)"); + Tester.checkEqual(shortXor((short) 1, Short.MAX_VALUE), (short) ((short) 1 ^ Short.MAX_VALUE), "(short) ((short) 1 ^ Short.MAX_VALUE)"); + Tester.checkEqual(shortXor(Short.MAX_VALUE, Short.MIN_VALUE), (short) (Short.MAX_VALUE ^ Short.MIN_VALUE), "(short) (Short.MAX_VALUE ^ Short.MIN_VALUE)"); + Tester.checkEqual(shortXor(Short.MAX_VALUE, (short) -1), (short) (Short.MAX_VALUE ^ (short) -1), "(short) (Short.MAX_VALUE ^ (short) -1)"); + Tester.checkEqual(shortXor(Short.MAX_VALUE, (short) 0), (short) (Short.MAX_VALUE ^ (short) 0), "(short) (Short.MAX_VALUE ^ (short) 0)"); + Tester.checkEqual(shortXor(Short.MAX_VALUE, (short) 1), (short) (Short.MAX_VALUE ^ (short) 1), "(short) (Short.MAX_VALUE ^ (short) 1)"); + Tester.checkEqual(shortXor(Short.MAX_VALUE, Short.MAX_VALUE), (short) (Short.MAX_VALUE ^ Short.MAX_VALUE), "(short) (Short.MAX_VALUE ^ Short.MAX_VALUE)"); + Tester.checkEqual(shortOr(Short.MIN_VALUE, Short.MIN_VALUE), (short) (Short.MIN_VALUE | Short.MIN_VALUE), "(short) (Short.MIN_VALUE | Short.MIN_VALUE)"); + Tester.checkEqual(shortOr(Short.MIN_VALUE, (short) -1), (short) (Short.MIN_VALUE | (short) -1), "(short) (Short.MIN_VALUE | (short) -1)"); + Tester.checkEqual(shortOr(Short.MIN_VALUE, (short) 0), (short) (Short.MIN_VALUE | (short) 0), "(short) (Short.MIN_VALUE | (short) 0)"); + Tester.checkEqual(shortOr(Short.MIN_VALUE, (short) 1), (short) (Short.MIN_VALUE | (short) 1), "(short) (Short.MIN_VALUE | (short) 1)"); + Tester.checkEqual(shortOr(Short.MIN_VALUE, Short.MAX_VALUE), (short) (Short.MIN_VALUE | Short.MAX_VALUE), "(short) (Short.MIN_VALUE | Short.MAX_VALUE)"); + Tester.checkEqual(shortOr((short) -1, Short.MIN_VALUE), (short) ((short) -1 | Short.MIN_VALUE), "(short) ((short) -1 | Short.MIN_VALUE)"); + Tester.checkEqual(shortOr((short) -1, (short) -1), (short) ((short) -1 | (short) -1), "(short) ((short) -1 | (short) -1)"); + Tester.checkEqual(shortOr((short) -1, (short) 0), (short) ((short) -1 | (short) 0), "(short) ((short) -1 | (short) 0)"); + Tester.checkEqual(shortOr((short) -1, (short) 1), (short) ((short) -1 | (short) 1), "(short) ((short) -1 | (short) 1)"); + Tester.checkEqual(shortOr((short) -1, Short.MAX_VALUE), (short) ((short) -1 | Short.MAX_VALUE), "(short) ((short) -1 | Short.MAX_VALUE)"); + Tester.checkEqual(shortOr((short) 0, Short.MIN_VALUE), (short) ((short) 0 | Short.MIN_VALUE), "(short) ((short) 0 | Short.MIN_VALUE)"); + Tester.checkEqual(shortOr((short) 0, (short) -1), (short) ((short) 0 | (short) -1), "(short) ((short) 0 | (short) -1)"); + Tester.checkEqual(shortOr((short) 0, (short) 0), (short) ((short) 0 | (short) 0), "(short) ((short) 0 | (short) 0)"); + Tester.checkEqual(shortOr((short) 0, (short) 1), (short) ((short) 0 | (short) 1), "(short) ((short) 0 | (short) 1)"); + Tester.checkEqual(shortOr((short) 0, Short.MAX_VALUE), (short) ((short) 0 | Short.MAX_VALUE), "(short) ((short) 0 | Short.MAX_VALUE)"); + Tester.checkEqual(shortOr((short) 1, Short.MIN_VALUE), (short) ((short) 1 | Short.MIN_VALUE), "(short) ((short) 1 | Short.MIN_VALUE)"); + Tester.checkEqual(shortOr((short) 1, (short) -1), (short) ((short) 1 | (short) -1), "(short) ((short) 1 | (short) -1)"); + Tester.checkEqual(shortOr((short) 1, (short) 0), (short) ((short) 1 | (short) 0), "(short) ((short) 1 | (short) 0)"); + Tester.checkEqual(shortOr((short) 1, (short) 1), (short) ((short) 1 | (short) 1), "(short) ((short) 1 | (short) 1)"); + Tester.checkEqual(shortOr((short) 1, Short.MAX_VALUE), (short) ((short) 1 | Short.MAX_VALUE), "(short) ((short) 1 | Short.MAX_VALUE)"); + Tester.checkEqual(shortOr(Short.MAX_VALUE, Short.MIN_VALUE), (short) (Short.MAX_VALUE | Short.MIN_VALUE), "(short) (Short.MAX_VALUE | Short.MIN_VALUE)"); + Tester.checkEqual(shortOr(Short.MAX_VALUE, (short) -1), (short) (Short.MAX_VALUE | (short) -1), "(short) (Short.MAX_VALUE | (short) -1)"); + Tester.checkEqual(shortOr(Short.MAX_VALUE, (short) 0), (short) (Short.MAX_VALUE | (short) 0), "(short) (Short.MAX_VALUE | (short) 0)"); + Tester.checkEqual(shortOr(Short.MAX_VALUE, (short) 1), (short) (Short.MAX_VALUE | (short) 1), "(short) (Short.MAX_VALUE | (short) 1)"); + Tester.checkEqual(shortOr(Short.MAX_VALUE, Short.MAX_VALUE), (short) (Short.MAX_VALUE | Short.MAX_VALUE), "(short) (Short.MAX_VALUE | Short.MAX_VALUE)"); + } + static void shortSwitch() { + switch(0) { + case ((((short) + Short.MIN_VALUE) == 0) ? 0 : 0): + case ((((short) + (short) -1) == 0) ? 1 : 1): + case ((((short) + (short) 0) == 0) ? 2 : 2): + case ((((short) + (short) 1) == 0) ? 3 : 3): + case ((((short) + Short.MAX_VALUE) == 0) ? 4 : 4): + case ((((short) - Short.MIN_VALUE) == 0) ? 5 : 5): + case ((((short) - (short) -1) == 0) ? 6 : 6): + case ((((short) - (short) 0) == 0) ? 7 : 7): + case ((((short) - (short) 1) == 0) ? 8 : 8): + case ((((short) - Short.MAX_VALUE) == 0) ? 9 : 9): + case ((((short) ~ Short.MIN_VALUE) == 0) ? 10 : 10): + case ((((short) ~ (short) -1) == 0) ? 11 : 11): + case ((((short) ~ (short) 0) == 0) ? 12 : 12): + case ((((short) ~ (short) 1) == 0) ? 13 : 13): + case ((((short) ~ Short.MAX_VALUE) == 0) ? 14 : 14): + case ((((short) (Short.MIN_VALUE * Short.MIN_VALUE)) == 0) ? 15 : 15): + case ((((short) (Short.MIN_VALUE * (short) -1)) == 0) ? 16 : 16): + case ((((short) (Short.MIN_VALUE * (short) 0)) == 0) ? 17 : 17): + case ((((short) (Short.MIN_VALUE * (short) 1)) == 0) ? 18 : 18): + case ((((short) (Short.MIN_VALUE * Short.MAX_VALUE)) == 0) ? 19 : 19): + case ((((short) ((short) -1 * Short.MIN_VALUE)) == 0) ? 20 : 20): + case ((((short) ((short) -1 * (short) -1)) == 0) ? 21 : 21): + case ((((short) ((short) -1 * (short) 0)) == 0) ? 22 : 22): + case ((((short) ((short) -1 * (short) 1)) == 0) ? 23 : 23): + case ((((short) ((short) -1 * Short.MAX_VALUE)) == 0) ? 24 : 24): + case ((((short) ((short) 0 * Short.MIN_VALUE)) == 0) ? 25 : 25): + case ((((short) ((short) 0 * (short) -1)) == 0) ? 26 : 26): + case ((((short) ((short) 0 * (short) 0)) == 0) ? 27 : 27): + case ((((short) ((short) 0 * (short) 1)) == 0) ? 28 : 28): + case ((((short) ((short) 0 * Short.MAX_VALUE)) == 0) ? 29 : 29): + case ((((short) ((short) 1 * Short.MIN_VALUE)) == 0) ? 30 : 30): + case ((((short) ((short) 1 * (short) -1)) == 0) ? 31 : 31): + case ((((short) ((short) 1 * (short) 0)) == 0) ? 32 : 32): + case ((((short) ((short) 1 * (short) 1)) == 0) ? 33 : 33): + case ((((short) ((short) 1 * Short.MAX_VALUE)) == 0) ? 34 : 34): + case ((((short) (Short.MAX_VALUE * Short.MIN_VALUE)) == 0) ? 35 : 35): + case ((((short) (Short.MAX_VALUE * (short) -1)) == 0) ? 36 : 36): + case ((((short) (Short.MAX_VALUE * (short) 0)) == 0) ? 37 : 37): + case ((((short) (Short.MAX_VALUE * (short) 1)) == 0) ? 38 : 38): + case ((((short) (Short.MAX_VALUE * Short.MAX_VALUE)) == 0) ? 39 : 39): + case ((((short) (Short.MIN_VALUE / Short.MIN_VALUE)) == 0) ? 40 : 40): + case ((((short) (Short.MIN_VALUE / (short) -1)) == 0) ? 41 : 41): + case ((((short) (Short.MIN_VALUE / (short) 1)) == 0) ? 42 : 42): + case ((((short) (Short.MIN_VALUE / Short.MAX_VALUE)) == 0) ? 43 : 43): + case ((((short) ((short) -1 / Short.MIN_VALUE)) == 0) ? 44 : 44): + case ((((short) ((short) -1 / (short) -1)) == 0) ? 45 : 45): + case ((((short) ((short) -1 / (short) 1)) == 0) ? 46 : 46): + case ((((short) ((short) -1 / Short.MAX_VALUE)) == 0) ? 47 : 47): + case ((((short) ((short) 0 / Short.MIN_VALUE)) == 0) ? 48 : 48): + case ((((short) ((short) 0 / (short) -1)) == 0) ? 49 : 49): + case ((((short) ((short) 0 / (short) 1)) == 0) ? 50 : 50): + case ((((short) ((short) 0 / Short.MAX_VALUE)) == 0) ? 51 : 51): + case ((((short) ((short) 1 / Short.MIN_VALUE)) == 0) ? 52 : 52): + case ((((short) ((short) 1 / (short) -1)) == 0) ? 53 : 53): + case ((((short) ((short) 1 / (short) 1)) == 0) ? 54 : 54): + case ((((short) ((short) 1 / Short.MAX_VALUE)) == 0) ? 55 : 55): + case ((((short) (Short.MAX_VALUE / Short.MIN_VALUE)) == 0) ? 56 : 56): + case ((((short) (Short.MAX_VALUE / (short) -1)) == 0) ? 57 : 57): + case ((((short) (Short.MAX_VALUE / (short) 1)) == 0) ? 58 : 58): + case ((((short) (Short.MAX_VALUE / Short.MAX_VALUE)) == 0) ? 59 : 59): + case ((((short) (Short.MIN_VALUE % Short.MIN_VALUE)) == 0) ? 60 : 60): + case ((((short) (Short.MIN_VALUE % (short) -1)) == 0) ? 61 : 61): + case ((((short) (Short.MIN_VALUE % (short) 1)) == 0) ? 62 : 62): + case ((((short) (Short.MIN_VALUE % Short.MAX_VALUE)) == 0) ? 63 : 63): + case ((((short) ((short) -1 % Short.MIN_VALUE)) == 0) ? 64 : 64): + case ((((short) ((short) -1 % (short) -1)) == 0) ? 65 : 65): + case ((((short) ((short) -1 % (short) 1)) == 0) ? 66 : 66): + case ((((short) ((short) -1 % Short.MAX_VALUE)) == 0) ? 67 : 67): + case ((((short) ((short) 0 % Short.MIN_VALUE)) == 0) ? 68 : 68): + case ((((short) ((short) 0 % (short) -1)) == 0) ? 69 : 69): + case ((((short) ((short) 0 % (short) 1)) == 0) ? 70 : 70): + case ((((short) ((short) 0 % Short.MAX_VALUE)) == 0) ? 71 : 71): + case ((((short) ((short) 1 % Short.MIN_VALUE)) == 0) ? 72 : 72): + case ((((short) ((short) 1 % (short) -1)) == 0) ? 73 : 73): + case ((((short) ((short) 1 % (short) 1)) == 0) ? 74 : 74): + case ((((short) ((short) 1 % Short.MAX_VALUE)) == 0) ? 75 : 75): + case ((((short) (Short.MAX_VALUE % Short.MIN_VALUE)) == 0) ? 76 : 76): + case ((((short) (Short.MAX_VALUE % (short) -1)) == 0) ? 77 : 77): + case ((((short) (Short.MAX_VALUE % (short) 1)) == 0) ? 78 : 78): + case ((((short) (Short.MAX_VALUE % Short.MAX_VALUE)) == 0) ? 79 : 79): + case ((((short) (Short.MIN_VALUE + Short.MIN_VALUE)) == 0) ? 80 : 80): + case ((((short) (Short.MIN_VALUE + (short) -1)) == 0) ? 81 : 81): + case ((((short) (Short.MIN_VALUE + (short) 0)) == 0) ? 82 : 82): + case ((((short) (Short.MIN_VALUE + (short) 1)) == 0) ? 83 : 83): + case ((((short) (Short.MIN_VALUE + Short.MAX_VALUE)) == 0) ? 84 : 84): + case ((((short) ((short) -1 + Short.MIN_VALUE)) == 0) ? 85 : 85): + case ((((short) ((short) -1 + (short) -1)) == 0) ? 86 : 86): + case ((((short) ((short) -1 + (short) 0)) == 0) ? 87 : 87): + case ((((short) ((short) -1 + (short) 1)) == 0) ? 88 : 88): + case ((((short) ((short) -1 + Short.MAX_VALUE)) == 0) ? 89 : 89): + case ((((short) ((short) 0 + Short.MIN_VALUE)) == 0) ? 90 : 90): + case ((((short) ((short) 0 + (short) -1)) == 0) ? 91 : 91): + case ((((short) ((short) 0 + (short) 0)) == 0) ? 92 : 92): + case ((((short) ((short) 0 + (short) 1)) == 0) ? 93 : 93): + case ((((short) ((short) 0 + Short.MAX_VALUE)) == 0) ? 94 : 94): + case ((((short) ((short) 1 + Short.MIN_VALUE)) == 0) ? 95 : 95): + case ((((short) ((short) 1 + (short) -1)) == 0) ? 96 : 96): + case ((((short) ((short) 1 + (short) 0)) == 0) ? 97 : 97): + case ((((short) ((short) 1 + (short) 1)) == 0) ? 98 : 98): + case ((((short) ((short) 1 + Short.MAX_VALUE)) == 0) ? 99 : 99): + case ((((short) (Short.MAX_VALUE + Short.MIN_VALUE)) == 0) ? 100 : 100): + case ((((short) (Short.MAX_VALUE + (short) -1)) == 0) ? 101 : 101): + case ((((short) (Short.MAX_VALUE + (short) 0)) == 0) ? 102 : 102): + case ((((short) (Short.MAX_VALUE + (short) 1)) == 0) ? 103 : 103): + case ((((short) (Short.MAX_VALUE + Short.MAX_VALUE)) == 0) ? 104 : 104): + case ((((short) (Short.MIN_VALUE - Short.MIN_VALUE)) == 0) ? 105 : 105): + case ((((short) (Short.MIN_VALUE - (short) -1)) == 0) ? 106 : 106): + case ((((short) (Short.MIN_VALUE - (short) 0)) == 0) ? 107 : 107): + case ((((short) (Short.MIN_VALUE - (short) 1)) == 0) ? 108 : 108): + case ((((short) (Short.MIN_VALUE - Short.MAX_VALUE)) == 0) ? 109 : 109): + case ((((short) ((short) -1 - Short.MIN_VALUE)) == 0) ? 110 : 110): + case ((((short) ((short) -1 - (short) -1)) == 0) ? 111 : 111): + case ((((short) ((short) -1 - (short) 0)) == 0) ? 112 : 112): + case ((((short) ((short) -1 - (short) 1)) == 0) ? 113 : 113): + case ((((short) ((short) -1 - Short.MAX_VALUE)) == 0) ? 114 : 114): + case ((((short) ((short) 0 - Short.MIN_VALUE)) == 0) ? 115 : 115): + case ((((short) ((short) 0 - (short) -1)) == 0) ? 116 : 116): + case ((((short) ((short) 0 - (short) 0)) == 0) ? 117 : 117): + case ((((short) ((short) 0 - (short) 1)) == 0) ? 118 : 118): + case ((((short) ((short) 0 - Short.MAX_VALUE)) == 0) ? 119 : 119): + case ((((short) ((short) 1 - Short.MIN_VALUE)) == 0) ? 120 : 120): + case ((((short) ((short) 1 - (short) -1)) == 0) ? 121 : 121): + case ((((short) ((short) 1 - (short) 0)) == 0) ? 122 : 122): + case ((((short) ((short) 1 - (short) 1)) == 0) ? 123 : 123): + case ((((short) ((short) 1 - Short.MAX_VALUE)) == 0) ? 124 : 124): + case ((((short) (Short.MAX_VALUE - Short.MIN_VALUE)) == 0) ? 125 : 125): + case ((((short) (Short.MAX_VALUE - (short) -1)) == 0) ? 126 : 126): + case ((((short) (Short.MAX_VALUE - (short) 0)) == 0) ? 127 : 127): + case ((((short) (Short.MAX_VALUE - (short) 1)) == 0) ? 128 : 128): + case ((((short) (Short.MAX_VALUE - Short.MAX_VALUE)) == 0) ? 129 : 129): + case ((((short) (Short.MIN_VALUE << Short.MIN_VALUE)) == 0) ? 130 : 130): + case ((((short) (Short.MIN_VALUE << (short) -1)) == 0) ? 131 : 131): + case ((((short) (Short.MIN_VALUE << (short) 0)) == 0) ? 132 : 132): + case ((((short) (Short.MIN_VALUE << (short) 1)) == 0) ? 133 : 133): + case ((((short) (Short.MIN_VALUE << Short.MAX_VALUE)) == 0) ? 134 : 134): + case ((((short) ((short) -1 << Short.MIN_VALUE)) == 0) ? 135 : 135): + case ((((short) ((short) -1 << (short) -1)) == 0) ? 136 : 136): + case ((((short) ((short) -1 << (short) 0)) == 0) ? 137 : 137): + case ((((short) ((short) -1 << (short) 1)) == 0) ? 138 : 138): + case ((((short) ((short) -1 << Short.MAX_VALUE)) == 0) ? 139 : 139): + case ((((short) ((short) 0 << Short.MIN_VALUE)) == 0) ? 140 : 140): + case ((((short) ((short) 0 << (short) -1)) == 0) ? 141 : 141): + case ((((short) ((short) 0 << (short) 0)) == 0) ? 142 : 142): + case ((((short) ((short) 0 << (short) 1)) == 0) ? 143 : 143): + case ((((short) ((short) 0 << Short.MAX_VALUE)) == 0) ? 144 : 144): + case ((((short) ((short) 1 << Short.MIN_VALUE)) == 0) ? 145 : 145): + case ((((short) ((short) 1 << (short) -1)) == 0) ? 146 : 146): + case ((((short) ((short) 1 << (short) 0)) == 0) ? 147 : 147): + case ((((short) ((short) 1 << (short) 1)) == 0) ? 148 : 148): + case ((((short) ((short) 1 << Short.MAX_VALUE)) == 0) ? 149 : 149): + case ((((short) (Short.MAX_VALUE << Short.MIN_VALUE)) == 0) ? 150 : 150): + case ((((short) (Short.MAX_VALUE << (short) -1)) == 0) ? 151 : 151): + case ((((short) (Short.MAX_VALUE << (short) 0)) == 0) ? 152 : 152): + case ((((short) (Short.MAX_VALUE << (short) 1)) == 0) ? 153 : 153): + case ((((short) (Short.MAX_VALUE << Short.MAX_VALUE)) == 0) ? 154 : 154): + case ((((short) (Short.MIN_VALUE >> Short.MIN_VALUE)) == 0) ? 155 : 155): + case ((((short) (Short.MIN_VALUE >> (short) -1)) == 0) ? 156 : 156): + case ((((short) (Short.MIN_VALUE >> (short) 0)) == 0) ? 157 : 157): + case ((((short) (Short.MIN_VALUE >> (short) 1)) == 0) ? 158 : 158): + case ((((short) (Short.MIN_VALUE >> Short.MAX_VALUE)) == 0) ? 159 : 159): + case ((((short) ((short) -1 >> Short.MIN_VALUE)) == 0) ? 160 : 160): + case ((((short) ((short) -1 >> (short) -1)) == 0) ? 161 : 161): + case ((((short) ((short) -1 >> (short) 0)) == 0) ? 162 : 162): + case ((((short) ((short) -1 >> (short) 1)) == 0) ? 163 : 163): + case ((((short) ((short) -1 >> Short.MAX_VALUE)) == 0) ? 164 : 164): + case ((((short) ((short) 0 >> Short.MIN_VALUE)) == 0) ? 165 : 165): + case ((((short) ((short) 0 >> (short) -1)) == 0) ? 166 : 166): + case ((((short) ((short) 0 >> (short) 0)) == 0) ? 167 : 167): + case ((((short) ((short) 0 >> (short) 1)) == 0) ? 168 : 168): + case ((((short) ((short) 0 >> Short.MAX_VALUE)) == 0) ? 169 : 169): + case ((((short) ((short) 1 >> Short.MIN_VALUE)) == 0) ? 170 : 170): + case ((((short) ((short) 1 >> (short) -1)) == 0) ? 171 : 171): + case ((((short) ((short) 1 >> (short) 0)) == 0) ? 172 : 172): + case ((((short) ((short) 1 >> (short) 1)) == 0) ? 173 : 173): + case ((((short) ((short) 1 >> Short.MAX_VALUE)) == 0) ? 174 : 174): + case ((((short) (Short.MAX_VALUE >> Short.MIN_VALUE)) == 0) ? 175 : 175): + case ((((short) (Short.MAX_VALUE >> (short) -1)) == 0) ? 176 : 176): + case ((((short) (Short.MAX_VALUE >> (short) 0)) == 0) ? 177 : 177): + case ((((short) (Short.MAX_VALUE >> (short) 1)) == 0) ? 178 : 178): + case ((((short) (Short.MAX_VALUE >> Short.MAX_VALUE)) == 0) ? 179 : 179): + case ((((short) (Short.MIN_VALUE >>> Short.MIN_VALUE)) == 0) ? 180 : 180): + case ((((short) (Short.MIN_VALUE >>> (short) -1)) == 0) ? 181 : 181): + case ((((short) (Short.MIN_VALUE >>> (short) 0)) == 0) ? 182 : 182): + case ((((short) (Short.MIN_VALUE >>> (short) 1)) == 0) ? 183 : 183): + case ((((short) (Short.MIN_VALUE >>> Short.MAX_VALUE)) == 0) ? 184 : 184): + case ((((short) ((short) -1 >>> Short.MIN_VALUE)) == 0) ? 185 : 185): + case ((((short) ((short) -1 >>> (short) -1)) == 0) ? 186 : 186): + case ((((short) ((short) -1 >>> (short) 0)) == 0) ? 187 : 187): + case ((((short) ((short) -1 >>> (short) 1)) == 0) ? 188 : 188): + case ((((short) ((short) -1 >>> Short.MAX_VALUE)) == 0) ? 189 : 189): + case ((((short) ((short) 0 >>> Short.MIN_VALUE)) == 0) ? 190 : 190): + case ((((short) ((short) 0 >>> (short) -1)) == 0) ? 191 : 191): + case ((((short) ((short) 0 >>> (short) 0)) == 0) ? 192 : 192): + case ((((short) ((short) 0 >>> (short) 1)) == 0) ? 193 : 193): + case ((((short) ((short) 0 >>> Short.MAX_VALUE)) == 0) ? 194 : 194): + case ((((short) ((short) 1 >>> Short.MIN_VALUE)) == 0) ? 195 : 195): + case ((((short) ((short) 1 >>> (short) -1)) == 0) ? 196 : 196): + case ((((short) ((short) 1 >>> (short) 0)) == 0) ? 197 : 197): + case ((((short) ((short) 1 >>> (short) 1)) == 0) ? 198 : 198): + case ((((short) ((short) 1 >>> Short.MAX_VALUE)) == 0) ? 199 : 199): + case ((((short) (Short.MAX_VALUE >>> Short.MIN_VALUE)) == 0) ? 200 : 200): + case ((((short) (Short.MAX_VALUE >>> (short) -1)) == 0) ? 201 : 201): + case ((((short) (Short.MAX_VALUE >>> (short) 0)) == 0) ? 202 : 202): + case ((((short) (Short.MAX_VALUE >>> (short) 1)) == 0) ? 203 : 203): + case ((((short) (Short.MAX_VALUE >>> Short.MAX_VALUE)) == 0) ? 204 : 204): + case ((Short.MIN_VALUE < Short.MIN_VALUE) ? 205 : 205): + case ((Short.MIN_VALUE < (short) -1) ? 206 : 206): + case ((Short.MIN_VALUE < (short) 0) ? 207 : 207): + case ((Short.MIN_VALUE < (short) 1) ? 208 : 208): + case ((Short.MIN_VALUE < Short.MAX_VALUE) ? 209 : 209): + case (((short) -1 < Short.MIN_VALUE) ? 210 : 210): + case (((short) -1 < (short) -1) ? 211 : 211): + case (((short) -1 < (short) 0) ? 212 : 212): + case (((short) -1 < (short) 1) ? 213 : 213): + case (((short) -1 < Short.MAX_VALUE) ? 214 : 214): + case (((short) 0 < Short.MIN_VALUE) ? 215 : 215): + case (((short) 0 < (short) -1) ? 216 : 216): + case (((short) 0 < (short) 0) ? 217 : 217): + case (((short) 0 < (short) 1) ? 218 : 218): + case (((short) 0 < Short.MAX_VALUE) ? 219 : 219): + case (((short) 1 < Short.MIN_VALUE) ? 220 : 220): + case (((short) 1 < (short) -1) ? 221 : 221): + case (((short) 1 < (short) 0) ? 222 : 222): + case (((short) 1 < (short) 1) ? 223 : 223): + case (((short) 1 < Short.MAX_VALUE) ? 224 : 224): + case ((Short.MAX_VALUE < Short.MIN_VALUE) ? 225 : 225): + case ((Short.MAX_VALUE < (short) -1) ? 226 : 226): + case ((Short.MAX_VALUE < (short) 0) ? 227 : 227): + case ((Short.MAX_VALUE < (short) 1) ? 228 : 228): + case ((Short.MAX_VALUE < Short.MAX_VALUE) ? 229 : 229): + case ((Short.MIN_VALUE > Short.MIN_VALUE) ? 230 : 230): + case ((Short.MIN_VALUE > (short) -1) ? 231 : 231): + case ((Short.MIN_VALUE > (short) 0) ? 232 : 232): + case ((Short.MIN_VALUE > (short) 1) ? 233 : 233): + case ((Short.MIN_VALUE > Short.MAX_VALUE) ? 234 : 234): + case (((short) -1 > Short.MIN_VALUE) ? 235 : 235): + case (((short) -1 > (short) -1) ? 236 : 236): + case (((short) -1 > (short) 0) ? 237 : 237): + case (((short) -1 > (short) 1) ? 238 : 238): + case (((short) -1 > Short.MAX_VALUE) ? 239 : 239): + case (((short) 0 > Short.MIN_VALUE) ? 240 : 240): + case (((short) 0 > (short) -1) ? 241 : 241): + case (((short) 0 > (short) 0) ? 242 : 242): + case (((short) 0 > (short) 1) ? 243 : 243): + case (((short) 0 > Short.MAX_VALUE) ? 244 : 244): + case (((short) 1 > Short.MIN_VALUE) ? 245 : 245): + case (((short) 1 > (short) -1) ? 246 : 246): + case (((short) 1 > (short) 0) ? 247 : 247): + case (((short) 1 > (short) 1) ? 248 : 248): + case (((short) 1 > Short.MAX_VALUE) ? 249 : 249): + case ((Short.MAX_VALUE > Short.MIN_VALUE) ? 250 : 250): + case ((Short.MAX_VALUE > (short) -1) ? 251 : 251): + case ((Short.MAX_VALUE > (short) 0) ? 252 : 252): + case ((Short.MAX_VALUE > (short) 1) ? 253 : 253): + case ((Short.MAX_VALUE > Short.MAX_VALUE) ? 254 : 254): + case ((Short.MIN_VALUE <= Short.MIN_VALUE) ? 255 : 255): + case ((Short.MIN_VALUE <= (short) -1) ? 256 : 256): + case ((Short.MIN_VALUE <= (short) 0) ? 257 : 257): + case ((Short.MIN_VALUE <= (short) 1) ? 258 : 258): + case ((Short.MIN_VALUE <= Short.MAX_VALUE) ? 259 : 259): + case (((short) -1 <= Short.MIN_VALUE) ? 260 : 260): + case (((short) -1 <= (short) -1) ? 261 : 261): + case (((short) -1 <= (short) 0) ? 262 : 262): + case (((short) -1 <= (short) 1) ? 263 : 263): + case (((short) -1 <= Short.MAX_VALUE) ? 264 : 264): + case (((short) 0 <= Short.MIN_VALUE) ? 265 : 265): + case (((short) 0 <= (short) -1) ? 266 : 266): + case (((short) 0 <= (short) 0) ? 267 : 267): + case (((short) 0 <= (short) 1) ? 268 : 268): + case (((short) 0 <= Short.MAX_VALUE) ? 269 : 269): + case (((short) 1 <= Short.MIN_VALUE) ? 270 : 270): + case (((short) 1 <= (short) -1) ? 271 : 271): + case (((short) 1 <= (short) 0) ? 272 : 272): + case (((short) 1 <= (short) 1) ? 273 : 273): + case (((short) 1 <= Short.MAX_VALUE) ? 274 : 274): + case ((Short.MAX_VALUE <= Short.MIN_VALUE) ? 275 : 275): + case ((Short.MAX_VALUE <= (short) -1) ? 276 : 276): + case ((Short.MAX_VALUE <= (short) 0) ? 277 : 277): + case ((Short.MAX_VALUE <= (short) 1) ? 278 : 278): + case ((Short.MAX_VALUE <= Short.MAX_VALUE) ? 279 : 279): + case ((Short.MIN_VALUE >= Short.MIN_VALUE) ? 280 : 280): + case ((Short.MIN_VALUE >= (short) -1) ? 281 : 281): + case ((Short.MIN_VALUE >= (short) 0) ? 282 : 282): + case ((Short.MIN_VALUE >= (short) 1) ? 283 : 283): + case ((Short.MIN_VALUE >= Short.MAX_VALUE) ? 284 : 284): + case (((short) -1 >= Short.MIN_VALUE) ? 285 : 285): + case (((short) -1 >= (short) -1) ? 286 : 286): + case (((short) -1 >= (short) 0) ? 287 : 287): + case (((short) -1 >= (short) 1) ? 288 : 288): + case (((short) -1 >= Short.MAX_VALUE) ? 289 : 289): + case (((short) 0 >= Short.MIN_VALUE) ? 290 : 290): + case (((short) 0 >= (short) -1) ? 291 : 291): + case (((short) 0 >= (short) 0) ? 292 : 292): + case (((short) 0 >= (short) 1) ? 293 : 293): + case (((short) 0 >= Short.MAX_VALUE) ? 294 : 294): + case (((short) 1 >= Short.MIN_VALUE) ? 295 : 295): + case (((short) 1 >= (short) -1) ? 296 : 296): + case (((short) 1 >= (short) 0) ? 297 : 297): + case (((short) 1 >= (short) 1) ? 298 : 298): + case (((short) 1 >= Short.MAX_VALUE) ? 299 : 299): + case ((Short.MAX_VALUE >= Short.MIN_VALUE) ? 300 : 300): + case ((Short.MAX_VALUE >= (short) -1) ? 301 : 301): + case ((Short.MAX_VALUE >= (short) 0) ? 302 : 302): + case ((Short.MAX_VALUE >= (short) 1) ? 303 : 303): + case ((Short.MAX_VALUE >= Short.MAX_VALUE) ? 304 : 304): + case ((Short.MIN_VALUE == Short.MIN_VALUE) ? 305 : 305): + case ((Short.MIN_VALUE == (short) -1) ? 306 : 306): + case ((Short.MIN_VALUE == (short) 0) ? 307 : 307): + case ((Short.MIN_VALUE == (short) 1) ? 308 : 308): + case ((Short.MIN_VALUE == Short.MAX_VALUE) ? 309 : 309): + case (((short) -1 == Short.MIN_VALUE) ? 310 : 310): + case (((short) -1 == (short) -1) ? 311 : 311): + case (((short) -1 == (short) 0) ? 312 : 312): + case (((short) -1 == (short) 1) ? 313 : 313): + case (((short) -1 == Short.MAX_VALUE) ? 314 : 314): + case (((short) 0 == Short.MIN_VALUE) ? 315 : 315): + case (((short) 0 == (short) -1) ? 316 : 316): + case (((short) 0 == (short) 0) ? 317 : 317): + case (((short) 0 == (short) 1) ? 318 : 318): + case (((short) 0 == Short.MAX_VALUE) ? 319 : 319): + case (((short) 1 == Short.MIN_VALUE) ? 320 : 320): + case (((short) 1 == (short) -1) ? 321 : 321): + case (((short) 1 == (short) 0) ? 322 : 322): + case (((short) 1 == (short) 1) ? 323 : 323): + case (((short) 1 == Short.MAX_VALUE) ? 324 : 324): + case ((Short.MAX_VALUE == Short.MIN_VALUE) ? 325 : 325): + case ((Short.MAX_VALUE == (short) -1) ? 326 : 326): + case ((Short.MAX_VALUE == (short) 0) ? 327 : 327): + case ((Short.MAX_VALUE == (short) 1) ? 328 : 328): + case ((Short.MAX_VALUE == Short.MAX_VALUE) ? 329 : 329): + case ((Short.MIN_VALUE != Short.MIN_VALUE) ? 330 : 330): + case ((Short.MIN_VALUE != (short) -1) ? 331 : 331): + case ((Short.MIN_VALUE != (short) 0) ? 332 : 332): + case ((Short.MIN_VALUE != (short) 1) ? 333 : 333): + case ((Short.MIN_VALUE != Short.MAX_VALUE) ? 334 : 334): + case (((short) -1 != Short.MIN_VALUE) ? 335 : 335): + case (((short) -1 != (short) -1) ? 336 : 336): + case (((short) -1 != (short) 0) ? 337 : 337): + case (((short) -1 != (short) 1) ? 338 : 338): + case (((short) -1 != Short.MAX_VALUE) ? 339 : 339): + case (((short) 0 != Short.MIN_VALUE) ? 340 : 340): + case (((short) 0 != (short) -1) ? 341 : 341): + case (((short) 0 != (short) 0) ? 342 : 342): + case (((short) 0 != (short) 1) ? 343 : 343): + case (((short) 0 != Short.MAX_VALUE) ? 344 : 344): + case (((short) 1 != Short.MIN_VALUE) ? 345 : 345): + case (((short) 1 != (short) -1) ? 346 : 346): + case (((short) 1 != (short) 0) ? 347 : 347): + case (((short) 1 != (short) 1) ? 348 : 348): + case (((short) 1 != Short.MAX_VALUE) ? 349 : 349): + case ((Short.MAX_VALUE != Short.MIN_VALUE) ? 350 : 350): + case ((Short.MAX_VALUE != (short) -1) ? 351 : 351): + case ((Short.MAX_VALUE != (short) 0) ? 352 : 352): + case ((Short.MAX_VALUE != (short) 1) ? 353 : 353): + case ((Short.MAX_VALUE != Short.MAX_VALUE) ? 354 : 354): + case ((((short) (Short.MIN_VALUE & Short.MIN_VALUE)) == 0) ? 355 : 355): + case ((((short) (Short.MIN_VALUE & (short) -1)) == 0) ? 356 : 356): + case ((((short) (Short.MIN_VALUE & (short) 0)) == 0) ? 357 : 357): + case ((((short) (Short.MIN_VALUE & (short) 1)) == 0) ? 358 : 358): + case ((((short) (Short.MIN_VALUE & Short.MAX_VALUE)) == 0) ? 359 : 359): + case ((((short) ((short) -1 & Short.MIN_VALUE)) == 0) ? 360 : 360): + case ((((short) ((short) -1 & (short) -1)) == 0) ? 361 : 361): + case ((((short) ((short) -1 & (short) 0)) == 0) ? 362 : 362): + case ((((short) ((short) -1 & (short) 1)) == 0) ? 363 : 363): + case ((((short) ((short) -1 & Short.MAX_VALUE)) == 0) ? 364 : 364): + case ((((short) ((short) 0 & Short.MIN_VALUE)) == 0) ? 365 : 365): + case ((((short) ((short) 0 & (short) -1)) == 0) ? 366 : 366): + case ((((short) ((short) 0 & (short) 0)) == 0) ? 367 : 367): + case ((((short) ((short) 0 & (short) 1)) == 0) ? 368 : 368): + case ((((short) ((short) 0 & Short.MAX_VALUE)) == 0) ? 369 : 369): + case ((((short) ((short) 1 & Short.MIN_VALUE)) == 0) ? 370 : 370): + case ((((short) ((short) 1 & (short) -1)) == 0) ? 371 : 371): + case ((((short) ((short) 1 & (short) 0)) == 0) ? 372 : 372): + case ((((short) ((short) 1 & (short) 1)) == 0) ? 373 : 373): + case ((((short) ((short) 1 & Short.MAX_VALUE)) == 0) ? 374 : 374): + case ((((short) (Short.MAX_VALUE & Short.MIN_VALUE)) == 0) ? 375 : 375): + case ((((short) (Short.MAX_VALUE & (short) -1)) == 0) ? 376 : 376): + case ((((short) (Short.MAX_VALUE & (short) 0)) == 0) ? 377 : 377): + case ((((short) (Short.MAX_VALUE & (short) 1)) == 0) ? 378 : 378): + case ((((short) (Short.MAX_VALUE & Short.MAX_VALUE)) == 0) ? 379 : 379): + case ((((short) (Short.MIN_VALUE ^ Short.MIN_VALUE)) == 0) ? 380 : 380): + case ((((short) (Short.MIN_VALUE ^ (short) -1)) == 0) ? 381 : 381): + case ((((short) (Short.MIN_VALUE ^ (short) 0)) == 0) ? 382 : 382): + case ((((short) (Short.MIN_VALUE ^ (short) 1)) == 0) ? 383 : 383): + case ((((short) (Short.MIN_VALUE ^ Short.MAX_VALUE)) == 0) ? 384 : 384): + case ((((short) ((short) -1 ^ Short.MIN_VALUE)) == 0) ? 385 : 385): + case ((((short) ((short) -1 ^ (short) -1)) == 0) ? 386 : 386): + case ((((short) ((short) -1 ^ (short) 0)) == 0) ? 387 : 387): + case ((((short) ((short) -1 ^ (short) 1)) == 0) ? 388 : 388): + case ((((short) ((short) -1 ^ Short.MAX_VALUE)) == 0) ? 389 : 389): + case ((((short) ((short) 0 ^ Short.MIN_VALUE)) == 0) ? 390 : 390): + case ((((short) ((short) 0 ^ (short) -1)) == 0) ? 391 : 391): + case ((((short) ((short) 0 ^ (short) 0)) == 0) ? 392 : 392): + case ((((short) ((short) 0 ^ (short) 1)) == 0) ? 393 : 393): + case ((((short) ((short) 0 ^ Short.MAX_VALUE)) == 0) ? 394 : 394): + case ((((short) ((short) 1 ^ Short.MIN_VALUE)) == 0) ? 395 : 395): + case ((((short) ((short) 1 ^ (short) -1)) == 0) ? 396 : 396): + case ((((short) ((short) 1 ^ (short) 0)) == 0) ? 397 : 397): + case ((((short) ((short) 1 ^ (short) 1)) == 0) ? 398 : 398): + case ((((short) ((short) 1 ^ Short.MAX_VALUE)) == 0) ? 399 : 399): + case ((((short) (Short.MAX_VALUE ^ Short.MIN_VALUE)) == 0) ? 400 : 400): + case ((((short) (Short.MAX_VALUE ^ (short) -1)) == 0) ? 401 : 401): + case ((((short) (Short.MAX_VALUE ^ (short) 0)) == 0) ? 402 : 402): + case ((((short) (Short.MAX_VALUE ^ (short) 1)) == 0) ? 403 : 403): + case ((((short) (Short.MAX_VALUE ^ Short.MAX_VALUE)) == 0) ? 404 : 404): + case ((((short) (Short.MIN_VALUE | Short.MIN_VALUE)) == 0) ? 405 : 405): + case ((((short) (Short.MIN_VALUE | (short) -1)) == 0) ? 406 : 406): + case ((((short) (Short.MIN_VALUE | (short) 0)) == 0) ? 407 : 407): + case ((((short) (Short.MIN_VALUE | (short) 1)) == 0) ? 408 : 408): + case ((((short) (Short.MIN_VALUE | Short.MAX_VALUE)) == 0) ? 409 : 409): + case ((((short) ((short) -1 | Short.MIN_VALUE)) == 0) ? 410 : 410): + case ((((short) ((short) -1 | (short) -1)) == 0) ? 411 : 411): + case ((((short) ((short) -1 | (short) 0)) == 0) ? 412 : 412): + case ((((short) ((short) -1 | (short) 1)) == 0) ? 413 : 413): + case ((((short) ((short) -1 | Short.MAX_VALUE)) == 0) ? 414 : 414): + case ((((short) ((short) 0 | Short.MIN_VALUE)) == 0) ? 415 : 415): + case ((((short) ((short) 0 | (short) -1)) == 0) ? 416 : 416): + case ((((short) ((short) 0 | (short) 0)) == 0) ? 417 : 417): + case ((((short) ((short) 0 | (short) 1)) == 0) ? 418 : 418): + case ((((short) ((short) 0 | Short.MAX_VALUE)) == 0) ? 419 : 419): + case ((((short) ((short) 1 | Short.MIN_VALUE)) == 0) ? 420 : 420): + case ((((short) ((short) 1 | (short) -1)) == 0) ? 421 : 421): + case ((((short) ((short) 1 | (short) 0)) == 0) ? 422 : 422): + case ((((short) ((short) 1 | (short) 1)) == 0) ? 423 : 423): + case ((((short) ((short) 1 | Short.MAX_VALUE)) == 0) ? 424 : 424): + case ((((short) (Short.MAX_VALUE | Short.MIN_VALUE)) == 0) ? 425 : 425): + case ((((short) (Short.MAX_VALUE | (short) -1)) == 0) ? 426 : 426): + case ((((short) (Short.MAX_VALUE | (short) 0)) == 0) ? 427 : 427): + case ((((short) (Short.MAX_VALUE | (short) 1)) == 0) ? 428 : 428): + case ((((short) (Short.MAX_VALUE | Short.MAX_VALUE)) == 0) ? 429 : 429): + default: + } + } + + // -------- + // char tests + static char charPlus(char x) { return (char) + x; } + static char charMinus(char x) { return (char) - x; } + static char charBitNot(char x) { return (char) ~ x; } + static char charTimes(char x, char y) { return (char) (x * y); } + static char charDiv(char x, char y) { return (char) (x / y); } + static char charRem(char x, char y) { return (char) (x % y); } + static char charAdd(char x, char y) { return (char) (x + y); } + static char charSub(char x, char y) { return (char) (x - y); } + static char charShl(char x, char y) { return (char) (x << y); } + static char charShr(char x, char y) { return (char) (x >> y); } + static char charUshr(char x, char y) { return (char) (x >>> y); } + static boolean charLt(char x, char y) { return x < y; } + static boolean charGt(char x, char y) { return x > y; } + static boolean charLe(char x, char y) { return x <= y; } + static boolean charGe(char x, char y) { return x >= y; } + static boolean charEq(char x, char y) { return x == y; } + static boolean charNe(char x, char y) { return x != y; } + static char charAnd(char x, char y) { return (char) (x & y); } + static char charXor(char x, char y) { return (char) (x ^ y); } + static char charOr(char x, char y) { return (char) (x | y); } + static void charTest() { + Tester.checkEqual(charPlus((char) 0), (char) + (char) 0, "(char) + (char) 0"); + Tester.checkEqual(charPlus((char) 1), (char) + (char) 1, "(char) + (char) 1"); + Tester.checkEqual(charPlus(Character.MAX_VALUE), (char) + Character.MAX_VALUE, "(char) + Character.MAX_VALUE"); + Tester.checkEqual(charMinus((char) 0), (char) - (char) 0, "(char) - (char) 0"); + Tester.checkEqual(charMinus((char) 1), (char) - (char) 1, "(char) - (char) 1"); + Tester.checkEqual(charMinus(Character.MAX_VALUE), (char) - Character.MAX_VALUE, "(char) - Character.MAX_VALUE"); + Tester.checkEqual(charBitNot((char) 0), (char) ~ (char) 0, "(char) ~ (char) 0"); + Tester.checkEqual(charBitNot((char) 1), (char) ~ (char) 1, "(char) ~ (char) 1"); + Tester.checkEqual(charBitNot(Character.MAX_VALUE), (char) ~ Character.MAX_VALUE, "(char) ~ Character.MAX_VALUE"); + Tester.checkEqual(charTimes((char) 0, (char) 0), (char) ((char) 0 * (char) 0), "(char) ((char) 0 * (char) 0)"); + Tester.checkEqual(charTimes((char) 0, (char) 1), (char) ((char) 0 * (char) 1), "(char) ((char) 0 * (char) 1)"); + Tester.checkEqual(charTimes((char) 0, Character.MAX_VALUE), (char) ((char) 0 * Character.MAX_VALUE), "(char) ((char) 0 * Character.MAX_VALUE)"); + Tester.checkEqual(charTimes((char) 1, (char) 0), (char) ((char) 1 * (char) 0), "(char) ((char) 1 * (char) 0)"); + Tester.checkEqual(charTimes((char) 1, (char) 1), (char) ((char) 1 * (char) 1), "(char) ((char) 1 * (char) 1)"); + Tester.checkEqual(charTimes((char) 1, Character.MAX_VALUE), (char) ((char) 1 * Character.MAX_VALUE), "(char) ((char) 1 * Character.MAX_VALUE)"); + Tester.checkEqual(charTimes(Character.MAX_VALUE, (char) 0), (char) (Character.MAX_VALUE * (char) 0), "(char) (Character.MAX_VALUE * (char) 0)"); + Tester.checkEqual(charTimes(Character.MAX_VALUE, (char) 1), (char) (Character.MAX_VALUE * (char) 1), "(char) (Character.MAX_VALUE * (char) 1)"); + Tester.checkEqual(charTimes(Character.MAX_VALUE, Character.MAX_VALUE), (char) (Character.MAX_VALUE * Character.MAX_VALUE), "(char) (Character.MAX_VALUE * Character.MAX_VALUE)"); + Tester.checkEqual(charDiv((char) 0, (char) 1), (char) ((char) 0 / (char) 1), "(char) ((char) 0 / (char) 1)"); + Tester.checkEqual(charDiv((char) 0, Character.MAX_VALUE), (char) ((char) 0 / Character.MAX_VALUE), "(char) ((char) 0 / Character.MAX_VALUE)"); + Tester.checkEqual(charDiv((char) 1, (char) 1), (char) ((char) 1 / (char) 1), "(char) ((char) 1 / (char) 1)"); + Tester.checkEqual(charDiv((char) 1, Character.MAX_VALUE), (char) ((char) 1 / Character.MAX_VALUE), "(char) ((char) 1 / Character.MAX_VALUE)"); + Tester.checkEqual(charDiv(Character.MAX_VALUE, (char) 1), (char) (Character.MAX_VALUE / (char) 1), "(char) (Character.MAX_VALUE / (char) 1)"); + Tester.checkEqual(charDiv(Character.MAX_VALUE, Character.MAX_VALUE), (char) (Character.MAX_VALUE / Character.MAX_VALUE), "(char) (Character.MAX_VALUE / Character.MAX_VALUE)"); + Tester.checkEqual(charRem((char) 0, (char) 1), (char) ((char) 0 % (char) 1), "(char) ((char) 0 % (char) 1)"); + Tester.checkEqual(charRem((char) 0, Character.MAX_VALUE), (char) ((char) 0 % Character.MAX_VALUE), "(char) ((char) 0 % Character.MAX_VALUE)"); + Tester.checkEqual(charRem((char) 1, (char) 1), (char) ((char) 1 % (char) 1), "(char) ((char) 1 % (char) 1)"); + Tester.checkEqual(charRem((char) 1, Character.MAX_VALUE), (char) ((char) 1 % Character.MAX_VALUE), "(char) ((char) 1 % Character.MAX_VALUE)"); + Tester.checkEqual(charRem(Character.MAX_VALUE, (char) 1), (char) (Character.MAX_VALUE % (char) 1), "(char) (Character.MAX_VALUE % (char) 1)"); + Tester.checkEqual(charRem(Character.MAX_VALUE, Character.MAX_VALUE), (char) (Character.MAX_VALUE % Character.MAX_VALUE), "(char) (Character.MAX_VALUE % Character.MAX_VALUE)"); + Tester.checkEqual(charAdd((char) 0, (char) 0), (char) ((char) 0 + (char) 0), "(char) ((char) 0 + (char) 0)"); + Tester.checkEqual(charAdd((char) 0, (char) 1), (char) ((char) 0 + (char) 1), "(char) ((char) 0 + (char) 1)"); + Tester.checkEqual(charAdd((char) 0, Character.MAX_VALUE), (char) ((char) 0 + Character.MAX_VALUE), "(char) ((char) 0 + Character.MAX_VALUE)"); + Tester.checkEqual(charAdd((char) 1, (char) 0), (char) ((char) 1 + (char) 0), "(char) ((char) 1 + (char) 0)"); + Tester.checkEqual(charAdd((char) 1, (char) 1), (char) ((char) 1 + (char) 1), "(char) ((char) 1 + (char) 1)"); + Tester.checkEqual(charAdd((char) 1, Character.MAX_VALUE), (char) ((char) 1 + Character.MAX_VALUE), "(char) ((char) 1 + Character.MAX_VALUE)"); + Tester.checkEqual(charAdd(Character.MAX_VALUE, (char) 0), (char) (Character.MAX_VALUE + (char) 0), "(char) (Character.MAX_VALUE + (char) 0)"); + Tester.checkEqual(charAdd(Character.MAX_VALUE, (char) 1), (char) (Character.MAX_VALUE + (char) 1), "(char) (Character.MAX_VALUE + (char) 1)"); + Tester.checkEqual(charAdd(Character.MAX_VALUE, Character.MAX_VALUE), (char) (Character.MAX_VALUE + Character.MAX_VALUE), "(char) (Character.MAX_VALUE + Character.MAX_VALUE)"); + Tester.checkEqual(charSub((char) 0, (char) 0), (char) ((char) 0 - (char) 0), "(char) ((char) 0 - (char) 0)"); + Tester.checkEqual(charSub((char) 0, (char) 1), (char) ((char) 0 - (char) 1), "(char) ((char) 0 - (char) 1)"); + Tester.checkEqual(charSub((char) 0, Character.MAX_VALUE), (char) ((char) 0 - Character.MAX_VALUE), "(char) ((char) 0 - Character.MAX_VALUE)"); + Tester.checkEqual(charSub((char) 1, (char) 0), (char) ((char) 1 - (char) 0), "(char) ((char) 1 - (char) 0)"); + Tester.checkEqual(charSub((char) 1, (char) 1), (char) ((char) 1 - (char) 1), "(char) ((char) 1 - (char) 1)"); + Tester.checkEqual(charSub((char) 1, Character.MAX_VALUE), (char) ((char) 1 - Character.MAX_VALUE), "(char) ((char) 1 - Character.MAX_VALUE)"); + Tester.checkEqual(charSub(Character.MAX_VALUE, (char) 0), (char) (Character.MAX_VALUE - (char) 0), "(char) (Character.MAX_VALUE - (char) 0)"); + Tester.checkEqual(charSub(Character.MAX_VALUE, (char) 1), (char) (Character.MAX_VALUE - (char) 1), "(char) (Character.MAX_VALUE - (char) 1)"); + Tester.checkEqual(charSub(Character.MAX_VALUE, Character.MAX_VALUE), (char) (Character.MAX_VALUE - Character.MAX_VALUE), "(char) (Character.MAX_VALUE - Character.MAX_VALUE)"); + Tester.checkEqual(charShl((char) 0, (char) 0), (char) ((char) 0 << (char) 0), "(char) ((char) 0 << (char) 0)"); + Tester.checkEqual(charShl((char) 0, (char) 1), (char) ((char) 0 << (char) 1), "(char) ((char) 0 << (char) 1)"); + Tester.checkEqual(charShl((char) 0, Character.MAX_VALUE), (char) ((char) 0 << Character.MAX_VALUE), "(char) ((char) 0 << Character.MAX_VALUE)"); + Tester.checkEqual(charShl((char) 1, (char) 0), (char) ((char) 1 << (char) 0), "(char) ((char) 1 << (char) 0)"); + Tester.checkEqual(charShl((char) 1, (char) 1), (char) ((char) 1 << (char) 1), "(char) ((char) 1 << (char) 1)"); + Tester.checkEqual(charShl((char) 1, Character.MAX_VALUE), (char) ((char) 1 << Character.MAX_VALUE), "(char) ((char) 1 << Character.MAX_VALUE)"); + Tester.checkEqual(charShl(Character.MAX_VALUE, (char) 0), (char) (Character.MAX_VALUE << (char) 0), "(char) (Character.MAX_VALUE << (char) 0)"); + Tester.checkEqual(charShl(Character.MAX_VALUE, (char) 1), (char) (Character.MAX_VALUE << (char) 1), "(char) (Character.MAX_VALUE << (char) 1)"); + Tester.checkEqual(charShl(Character.MAX_VALUE, Character.MAX_VALUE), (char) (Character.MAX_VALUE << Character.MAX_VALUE), "(char) (Character.MAX_VALUE << Character.MAX_VALUE)"); + Tester.checkEqual(charShr((char) 0, (char) 0), (char) ((char) 0 >> (char) 0), "(char) ((char) 0 >> (char) 0)"); + Tester.checkEqual(charShr((char) 0, (char) 1), (char) ((char) 0 >> (char) 1), "(char) ((char) 0 >> (char) 1)"); + Tester.checkEqual(charShr((char) 0, Character.MAX_VALUE), (char) ((char) 0 >> Character.MAX_VALUE), "(char) ((char) 0 >> Character.MAX_VALUE)"); + Tester.checkEqual(charShr((char) 1, (char) 0), (char) ((char) 1 >> (char) 0), "(char) ((char) 1 >> (char) 0)"); + Tester.checkEqual(charShr((char) 1, (char) 1), (char) ((char) 1 >> (char) 1), "(char) ((char) 1 >> (char) 1)"); + Tester.checkEqual(charShr((char) 1, Character.MAX_VALUE), (char) ((char) 1 >> Character.MAX_VALUE), "(char) ((char) 1 >> Character.MAX_VALUE)"); + Tester.checkEqual(charShr(Character.MAX_VALUE, (char) 0), (char) (Character.MAX_VALUE >> (char) 0), "(char) (Character.MAX_VALUE >> (char) 0)"); + Tester.checkEqual(charShr(Character.MAX_VALUE, (char) 1), (char) (Character.MAX_VALUE >> (char) 1), "(char) (Character.MAX_VALUE >> (char) 1)"); + Tester.checkEqual(charShr(Character.MAX_VALUE, Character.MAX_VALUE), (char) (Character.MAX_VALUE >> Character.MAX_VALUE), "(char) (Character.MAX_VALUE >> Character.MAX_VALUE)"); + Tester.checkEqual(charUshr((char) 0, (char) 0), (char) ((char) 0 >>> (char) 0), "(char) ((char) 0 >>> (char) 0)"); + Tester.checkEqual(charUshr((char) 0, (char) 1), (char) ((char) 0 >>> (char) 1), "(char) ((char) 0 >>> (char) 1)"); + Tester.checkEqual(charUshr((char) 0, Character.MAX_VALUE), (char) ((char) 0 >>> Character.MAX_VALUE), "(char) ((char) 0 >>> Character.MAX_VALUE)"); + Tester.checkEqual(charUshr((char) 1, (char) 0), (char) ((char) 1 >>> (char) 0), "(char) ((char) 1 >>> (char) 0)"); + Tester.checkEqual(charUshr((char) 1, (char) 1), (char) ((char) 1 >>> (char) 1), "(char) ((char) 1 >>> (char) 1)"); + Tester.checkEqual(charUshr((char) 1, Character.MAX_VALUE), (char) ((char) 1 >>> Character.MAX_VALUE), "(char) ((char) 1 >>> Character.MAX_VALUE)"); + Tester.checkEqual(charUshr(Character.MAX_VALUE, (char) 0), (char) (Character.MAX_VALUE >>> (char) 0), "(char) (Character.MAX_VALUE >>> (char) 0)"); + Tester.checkEqual(charUshr(Character.MAX_VALUE, (char) 1), (char) (Character.MAX_VALUE >>> (char) 1), "(char) (Character.MAX_VALUE >>> (char) 1)"); + Tester.checkEqual(charUshr(Character.MAX_VALUE, Character.MAX_VALUE), (char) (Character.MAX_VALUE >>> Character.MAX_VALUE), "(char) (Character.MAX_VALUE >>> Character.MAX_VALUE)"); + Tester.checkEqual(charLt((char) 0, (char) 0), (char) 0 < (char) 0, "(char) 0 < (char) 0"); + Tester.checkEqual(charLt((char) 0, (char) 1), (char) 0 < (char) 1, "(char) 0 < (char) 1"); + Tester.checkEqual(charLt((char) 0, Character.MAX_VALUE), (char) 0 < Character.MAX_VALUE, "(char) 0 < Character.MAX_VALUE"); + Tester.checkEqual(charLt((char) 1, (char) 0), (char) 1 < (char) 0, "(char) 1 < (char) 0"); + Tester.checkEqual(charLt((char) 1, (char) 1), (char) 1 < (char) 1, "(char) 1 < (char) 1"); + Tester.checkEqual(charLt((char) 1, Character.MAX_VALUE), (char) 1 < Character.MAX_VALUE, "(char) 1 < Character.MAX_VALUE"); + Tester.checkEqual(charLt(Character.MAX_VALUE, (char) 0), Character.MAX_VALUE < (char) 0, "Character.MAX_VALUE < (char) 0"); + Tester.checkEqual(charLt(Character.MAX_VALUE, (char) 1), Character.MAX_VALUE < (char) 1, "Character.MAX_VALUE < (char) 1"); + Tester.checkEqual(charLt(Character.MAX_VALUE, Character.MAX_VALUE), Character.MAX_VALUE < Character.MAX_VALUE, "Character.MAX_VALUE < Character.MAX_VALUE"); + Tester.checkEqual(charGt((char) 0, (char) 0), (char) 0 > (char) 0, "(char) 0 > (char) 0"); + Tester.checkEqual(charGt((char) 0, (char) 1), (char) 0 > (char) 1, "(char) 0 > (char) 1"); + Tester.checkEqual(charGt((char) 0, Character.MAX_VALUE), (char) 0 > Character.MAX_VALUE, "(char) 0 > Character.MAX_VALUE"); + Tester.checkEqual(charGt((char) 1, (char) 0), (char) 1 > (char) 0, "(char) 1 > (char) 0"); + Tester.checkEqual(charGt((char) 1, (char) 1), (char) 1 > (char) 1, "(char) 1 > (char) 1"); + Tester.checkEqual(charGt((char) 1, Character.MAX_VALUE), (char) 1 > Character.MAX_VALUE, "(char) 1 > Character.MAX_VALUE"); + Tester.checkEqual(charGt(Character.MAX_VALUE, (char) 0), Character.MAX_VALUE > (char) 0, "Character.MAX_VALUE > (char) 0"); + Tester.checkEqual(charGt(Character.MAX_VALUE, (char) 1), Character.MAX_VALUE > (char) 1, "Character.MAX_VALUE > (char) 1"); + Tester.checkEqual(charGt(Character.MAX_VALUE, Character.MAX_VALUE), Character.MAX_VALUE > Character.MAX_VALUE, "Character.MAX_VALUE > Character.MAX_VALUE"); + Tester.checkEqual(charLe((char) 0, (char) 0), (char) 0 <= (char) 0, "(char) 0 <= (char) 0"); + Tester.checkEqual(charLe((char) 0, (char) 1), (char) 0 <= (char) 1, "(char) 0 <= (char) 1"); + Tester.checkEqual(charLe((char) 0, Character.MAX_VALUE), (char) 0 <= Character.MAX_VALUE, "(char) 0 <= Character.MAX_VALUE"); + Tester.checkEqual(charLe((char) 1, (char) 0), (char) 1 <= (char) 0, "(char) 1 <= (char) 0"); + Tester.checkEqual(charLe((char) 1, (char) 1), (char) 1 <= (char) 1, "(char) 1 <= (char) 1"); + Tester.checkEqual(charLe((char) 1, Character.MAX_VALUE), (char) 1 <= Character.MAX_VALUE, "(char) 1 <= Character.MAX_VALUE"); + Tester.checkEqual(charLe(Character.MAX_VALUE, (char) 0), Character.MAX_VALUE <= (char) 0, "Character.MAX_VALUE <= (char) 0"); + Tester.checkEqual(charLe(Character.MAX_VALUE, (char) 1), Character.MAX_VALUE <= (char) 1, "Character.MAX_VALUE <= (char) 1"); + Tester.checkEqual(charLe(Character.MAX_VALUE, Character.MAX_VALUE), Character.MAX_VALUE <= Character.MAX_VALUE, "Character.MAX_VALUE <= Character.MAX_VALUE"); + Tester.checkEqual(charGe((char) 0, (char) 0), (char) 0 >= (char) 0, "(char) 0 >= (char) 0"); + Tester.checkEqual(charGe((char) 0, (char) 1), (char) 0 >= (char) 1, "(char) 0 >= (char) 1"); + Tester.checkEqual(charGe((char) 0, Character.MAX_VALUE), (char) 0 >= Character.MAX_VALUE, "(char) 0 >= Character.MAX_VALUE"); + Tester.checkEqual(charGe((char) 1, (char) 0), (char) 1 >= (char) 0, "(char) 1 >= (char) 0"); + Tester.checkEqual(charGe((char) 1, (char) 1), (char) 1 >= (char) 1, "(char) 1 >= (char) 1"); + Tester.checkEqual(charGe((char) 1, Character.MAX_VALUE), (char) 1 >= Character.MAX_VALUE, "(char) 1 >= Character.MAX_VALUE"); + Tester.checkEqual(charGe(Character.MAX_VALUE, (char) 0), Character.MAX_VALUE >= (char) 0, "Character.MAX_VALUE >= (char) 0"); + Tester.checkEqual(charGe(Character.MAX_VALUE, (char) 1), Character.MAX_VALUE >= (char) 1, "Character.MAX_VALUE >= (char) 1"); + Tester.checkEqual(charGe(Character.MAX_VALUE, Character.MAX_VALUE), Character.MAX_VALUE >= Character.MAX_VALUE, "Character.MAX_VALUE >= Character.MAX_VALUE"); + Tester.checkEqual(charEq((char) 0, (char) 0), (char) 0 == (char) 0, "(char) 0 == (char) 0"); + Tester.checkEqual(charEq((char) 0, (char) 1), (char) 0 == (char) 1, "(char) 0 == (char) 1"); + Tester.checkEqual(charEq((char) 0, Character.MAX_VALUE), (char) 0 == Character.MAX_VALUE, "(char) 0 == Character.MAX_VALUE"); + Tester.checkEqual(charEq((char) 1, (char) 0), (char) 1 == (char) 0, "(char) 1 == (char) 0"); + Tester.checkEqual(charEq((char) 1, (char) 1), (char) 1 == (char) 1, "(char) 1 == (char) 1"); + Tester.checkEqual(charEq((char) 1, Character.MAX_VALUE), (char) 1 == Character.MAX_VALUE, "(char) 1 == Character.MAX_VALUE"); + Tester.checkEqual(charEq(Character.MAX_VALUE, (char) 0), Character.MAX_VALUE == (char) 0, "Character.MAX_VALUE == (char) 0"); + Tester.checkEqual(charEq(Character.MAX_VALUE, (char) 1), Character.MAX_VALUE == (char) 1, "Character.MAX_VALUE == (char) 1"); + Tester.checkEqual(charEq(Character.MAX_VALUE, Character.MAX_VALUE), Character.MAX_VALUE == Character.MAX_VALUE, "Character.MAX_VALUE == Character.MAX_VALUE"); + Tester.checkEqual(charNe((char) 0, (char) 0), (char) 0 != (char) 0, "(char) 0 != (char) 0"); + Tester.checkEqual(charNe((char) 0, (char) 1), (char) 0 != (char) 1, "(char) 0 != (char) 1"); + Tester.checkEqual(charNe((char) 0, Character.MAX_VALUE), (char) 0 != Character.MAX_VALUE, "(char) 0 != Character.MAX_VALUE"); + Tester.checkEqual(charNe((char) 1, (char) 0), (char) 1 != (char) 0, "(char) 1 != (char) 0"); + Tester.checkEqual(charNe((char) 1, (char) 1), (char) 1 != (char) 1, "(char) 1 != (char) 1"); + Tester.checkEqual(charNe((char) 1, Character.MAX_VALUE), (char) 1 != Character.MAX_VALUE, "(char) 1 != Character.MAX_VALUE"); + Tester.checkEqual(charNe(Character.MAX_VALUE, (char) 0), Character.MAX_VALUE != (char) 0, "Character.MAX_VALUE != (char) 0"); + Tester.checkEqual(charNe(Character.MAX_VALUE, (char) 1), Character.MAX_VALUE != (char) 1, "Character.MAX_VALUE != (char) 1"); + Tester.checkEqual(charNe(Character.MAX_VALUE, Character.MAX_VALUE), Character.MAX_VALUE != Character.MAX_VALUE, "Character.MAX_VALUE != Character.MAX_VALUE"); + Tester.checkEqual(charAnd((char) 0, (char) 0), (char) ((char) 0 & (char) 0), "(char) ((char) 0 & (char) 0)"); + Tester.checkEqual(charAnd((char) 0, (char) 1), (char) ((char) 0 & (char) 1), "(char) ((char) 0 & (char) 1)"); + Tester.checkEqual(charAnd((char) 0, Character.MAX_VALUE), (char) ((char) 0 & Character.MAX_VALUE), "(char) ((char) 0 & Character.MAX_VALUE)"); + Tester.checkEqual(charAnd((char) 1, (char) 0), (char) ((char) 1 & (char) 0), "(char) ((char) 1 & (char) 0)"); + Tester.checkEqual(charAnd((char) 1, (char) 1), (char) ((char) 1 & (char) 1), "(char) ((char) 1 & (char) 1)"); + Tester.checkEqual(charAnd((char) 1, Character.MAX_VALUE), (char) ((char) 1 & Character.MAX_VALUE), "(char) ((char) 1 & Character.MAX_VALUE)"); + Tester.checkEqual(charAnd(Character.MAX_VALUE, (char) 0), (char) (Character.MAX_VALUE & (char) 0), "(char) (Character.MAX_VALUE & (char) 0)"); + Tester.checkEqual(charAnd(Character.MAX_VALUE, (char) 1), (char) (Character.MAX_VALUE & (char) 1), "(char) (Character.MAX_VALUE & (char) 1)"); + Tester.checkEqual(charAnd(Character.MAX_VALUE, Character.MAX_VALUE), (char) (Character.MAX_VALUE & Character.MAX_VALUE), "(char) (Character.MAX_VALUE & Character.MAX_VALUE)"); + Tester.checkEqual(charXor((char) 0, (char) 0), (char) ((char) 0 ^ (char) 0), "(char) ((char) 0 ^ (char) 0)"); + Tester.checkEqual(charXor((char) 0, (char) 1), (char) ((char) 0 ^ (char) 1), "(char) ((char) 0 ^ (char) 1)"); + Tester.checkEqual(charXor((char) 0, Character.MAX_VALUE), (char) ((char) 0 ^ Character.MAX_VALUE), "(char) ((char) 0 ^ Character.MAX_VALUE)"); + Tester.checkEqual(charXor((char) 1, (char) 0), (char) ((char) 1 ^ (char) 0), "(char) ((char) 1 ^ (char) 0)"); + Tester.checkEqual(charXor((char) 1, (char) 1), (char) ((char) 1 ^ (char) 1), "(char) ((char) 1 ^ (char) 1)"); + Tester.checkEqual(charXor((char) 1, Character.MAX_VALUE), (char) ((char) 1 ^ Character.MAX_VALUE), "(char) ((char) 1 ^ Character.MAX_VALUE)"); + Tester.checkEqual(charXor(Character.MAX_VALUE, (char) 0), (char) (Character.MAX_VALUE ^ (char) 0), "(char) (Character.MAX_VALUE ^ (char) 0)"); + Tester.checkEqual(charXor(Character.MAX_VALUE, (char) 1), (char) (Character.MAX_VALUE ^ (char) 1), "(char) (Character.MAX_VALUE ^ (char) 1)"); + Tester.checkEqual(charXor(Character.MAX_VALUE, Character.MAX_VALUE), (char) (Character.MAX_VALUE ^ Character.MAX_VALUE), "(char) (Character.MAX_VALUE ^ Character.MAX_VALUE)"); + Tester.checkEqual(charOr((char) 0, (char) 0), (char) ((char) 0 | (char) 0), "(char) ((char) 0 | (char) 0)"); + Tester.checkEqual(charOr((char) 0, (char) 1), (char) ((char) 0 | (char) 1), "(char) ((char) 0 | (char) 1)"); + Tester.checkEqual(charOr((char) 0, Character.MAX_VALUE), (char) ((char) 0 | Character.MAX_VALUE), "(char) ((char) 0 | Character.MAX_VALUE)"); + Tester.checkEqual(charOr((char) 1, (char) 0), (char) ((char) 1 | (char) 0), "(char) ((char) 1 | (char) 0)"); + Tester.checkEqual(charOr((char) 1, (char) 1), (char) ((char) 1 | (char) 1), "(char) ((char) 1 | (char) 1)"); + Tester.checkEqual(charOr((char) 1, Character.MAX_VALUE), (char) ((char) 1 | Character.MAX_VALUE), "(char) ((char) 1 | Character.MAX_VALUE)"); + Tester.checkEqual(charOr(Character.MAX_VALUE, (char) 0), (char) (Character.MAX_VALUE | (char) 0), "(char) (Character.MAX_VALUE | (char) 0)"); + Tester.checkEqual(charOr(Character.MAX_VALUE, (char) 1), (char) (Character.MAX_VALUE | (char) 1), "(char) (Character.MAX_VALUE | (char) 1)"); + Tester.checkEqual(charOr(Character.MAX_VALUE, Character.MAX_VALUE), (char) (Character.MAX_VALUE | Character.MAX_VALUE), "(char) (Character.MAX_VALUE | Character.MAX_VALUE)"); + } + static void charSwitch() { + switch(0) { + case ((((char) + (char) 0) == 0) ? 0 : 0): + case ((((char) + (char) 1) == 0) ? 1 : 1): + case ((((char) + Character.MAX_VALUE) == 0) ? 2 : 2): + case ((((char) - (char) 0) == 0) ? 3 : 3): + case ((((char) - (char) 1) == 0) ? 4 : 4): + case ((((char) - Character.MAX_VALUE) == 0) ? 5 : 5): + case ((((char) ~ (char) 0) == 0) ? 6 : 6): + case ((((char) ~ (char) 1) == 0) ? 7 : 7): + case ((((char) ~ Character.MAX_VALUE) == 0) ? 8 : 8): + case ((((char) ((char) 0 * (char) 0)) == 0) ? 9 : 9): + case ((((char) ((char) 0 * (char) 1)) == 0) ? 10 : 10): + case ((((char) ((char) 0 * Character.MAX_VALUE)) == 0) ? 11 : 11): + case ((((char) ((char) 1 * (char) 0)) == 0) ? 12 : 12): + case ((((char) ((char) 1 * (char) 1)) == 0) ? 13 : 13): + case ((((char) ((char) 1 * Character.MAX_VALUE)) == 0) ? 14 : 14): + case ((((char) (Character.MAX_VALUE * (char) 0)) == 0) ? 15 : 15): + case ((((char) (Character.MAX_VALUE * (char) 1)) == 0) ? 16 : 16): + case ((((char) (Character.MAX_VALUE * Character.MAX_VALUE)) == 0) ? 17 : 17): + case ((((char) ((char) 0 / (char) 1)) == 0) ? 18 : 18): + case ((((char) ((char) 0 / Character.MAX_VALUE)) == 0) ? 19 : 19): + case ((((char) ((char) 1 / (char) 1)) == 0) ? 20 : 20): + case ((((char) ((char) 1 / Character.MAX_VALUE)) == 0) ? 21 : 21): + case ((((char) (Character.MAX_VALUE / (char) 1)) == 0) ? 22 : 22): + case ((((char) (Character.MAX_VALUE / Character.MAX_VALUE)) == 0) ? 23 : 23): + case ((((char) ((char) 0 % (char) 1)) == 0) ? 24 : 24): + case ((((char) ((char) 0 % Character.MAX_VALUE)) == 0) ? 25 : 25): + case ((((char) ((char) 1 % (char) 1)) == 0) ? 26 : 26): + case ((((char) ((char) 1 % Character.MAX_VALUE)) == 0) ? 27 : 27): + case ((((char) (Character.MAX_VALUE % (char) 1)) == 0) ? 28 : 28): + case ((((char) (Character.MAX_VALUE % Character.MAX_VALUE)) == 0) ? 29 : 29): + case ((((char) ((char) 0 + (char) 0)) == 0) ? 30 : 30): + case ((((char) ((char) 0 + (char) 1)) == 0) ? 31 : 31): + case ((((char) ((char) 0 + Character.MAX_VALUE)) == 0) ? 32 : 32): + case ((((char) ((char) 1 + (char) 0)) == 0) ? 33 : 33): + case ((((char) ((char) 1 + (char) 1)) == 0) ? 34 : 34): + case ((((char) ((char) 1 + Character.MAX_VALUE)) == 0) ? 35 : 35): + case ((((char) (Character.MAX_VALUE + (char) 0)) == 0) ? 36 : 36): + case ((((char) (Character.MAX_VALUE + (char) 1)) == 0) ? 37 : 37): + case ((((char) (Character.MAX_VALUE + Character.MAX_VALUE)) == 0) ? 38 : 38): + case ((((char) ((char) 0 - (char) 0)) == 0) ? 39 : 39): + case ((((char) ((char) 0 - (char) 1)) == 0) ? 40 : 40): + case ((((char) ((char) 0 - Character.MAX_VALUE)) == 0) ? 41 : 41): + case ((((char) ((char) 1 - (char) 0)) == 0) ? 42 : 42): + case ((((char) ((char) 1 - (char) 1)) == 0) ? 43 : 43): + case ((((char) ((char) 1 - Character.MAX_VALUE)) == 0) ? 44 : 44): + case ((((char) (Character.MAX_VALUE - (char) 0)) == 0) ? 45 : 45): + case ((((char) (Character.MAX_VALUE - (char) 1)) == 0) ? 46 : 46): + case ((((char) (Character.MAX_VALUE - Character.MAX_VALUE)) == 0) ? 47 : 47): + case ((((char) ((char) 0 << (char) 0)) == 0) ? 48 : 48): + case ((((char) ((char) 0 << (char) 1)) == 0) ? 49 : 49): + case ((((char) ((char) 0 << Character.MAX_VALUE)) == 0) ? 50 : 50): + case ((((char) ((char) 1 << (char) 0)) == 0) ? 51 : 51): + case ((((char) ((char) 1 << (char) 1)) == 0) ? 52 : 52): + case ((((char) ((char) 1 << Character.MAX_VALUE)) == 0) ? 53 : 53): + case ((((char) (Character.MAX_VALUE << (char) 0)) == 0) ? 54 : 54): + case ((((char) (Character.MAX_VALUE << (char) 1)) == 0) ? 55 : 55): + case ((((char) (Character.MAX_VALUE << Character.MAX_VALUE)) == 0) ? 56 : 56): + case ((((char) ((char) 0 >> (char) 0)) == 0) ? 57 : 57): + case ((((char) ((char) 0 >> (char) 1)) == 0) ? 58 : 58): + case ((((char) ((char) 0 >> Character.MAX_VALUE)) == 0) ? 59 : 59): + case ((((char) ((char) 1 >> (char) 0)) == 0) ? 60 : 60): + case ((((char) ((char) 1 >> (char) 1)) == 0) ? 61 : 61): + case ((((char) ((char) 1 >> Character.MAX_VALUE)) == 0) ? 62 : 62): + case ((((char) (Character.MAX_VALUE >> (char) 0)) == 0) ? 63 : 63): + case ((((char) (Character.MAX_VALUE >> (char) 1)) == 0) ? 64 : 64): + case ((((char) (Character.MAX_VALUE >> Character.MAX_VALUE)) == 0) ? 65 : 65): + case ((((char) ((char) 0 >>> (char) 0)) == 0) ? 66 : 66): + case ((((char) ((char) 0 >>> (char) 1)) == 0) ? 67 : 67): + case ((((char) ((char) 0 >>> Character.MAX_VALUE)) == 0) ? 68 : 68): + case ((((char) ((char) 1 >>> (char) 0)) == 0) ? 69 : 69): + case ((((char) ((char) 1 >>> (char) 1)) == 0) ? 70 : 70): + case ((((char) ((char) 1 >>> Character.MAX_VALUE)) == 0) ? 71 : 71): + case ((((char) (Character.MAX_VALUE >>> (char) 0)) == 0) ? 72 : 72): + case ((((char) (Character.MAX_VALUE >>> (char) 1)) == 0) ? 73 : 73): + case ((((char) (Character.MAX_VALUE >>> Character.MAX_VALUE)) == 0) ? 74 : 74): + case (((char) 0 < (char) 0) ? 75 : 75): + case (((char) 0 < (char) 1) ? 76 : 76): + case (((char) 0 < Character.MAX_VALUE) ? 77 : 77): + case (((char) 1 < (char) 0) ? 78 : 78): + case (((char) 1 < (char) 1) ? 79 : 79): + case (((char) 1 < Character.MAX_VALUE) ? 80 : 80): + case ((Character.MAX_VALUE < (char) 0) ? 81 : 81): + case ((Character.MAX_VALUE < (char) 1) ? 82 : 82): + case ((Character.MAX_VALUE < Character.MAX_VALUE) ? 83 : 83): + case (((char) 0 > (char) 0) ? 84 : 84): + case (((char) 0 > (char) 1) ? 85 : 85): + case (((char) 0 > Character.MAX_VALUE) ? 86 : 86): + case (((char) 1 > (char) 0) ? 87 : 87): + case (((char) 1 > (char) 1) ? 88 : 88): + case (((char) 1 > Character.MAX_VALUE) ? 89 : 89): + case ((Character.MAX_VALUE > (char) 0) ? 90 : 90): + case ((Character.MAX_VALUE > (char) 1) ? 91 : 91): + case ((Character.MAX_VALUE > Character.MAX_VALUE) ? 92 : 92): + case (((char) 0 <= (char) 0) ? 93 : 93): + case (((char) 0 <= (char) 1) ? 94 : 94): + case (((char) 0 <= Character.MAX_VALUE) ? 95 : 95): + case (((char) 1 <= (char) 0) ? 96 : 96): + case (((char) 1 <= (char) 1) ? 97 : 97): + case (((char) 1 <= Character.MAX_VALUE) ? 98 : 98): + case ((Character.MAX_VALUE <= (char) 0) ? 99 : 99): + case ((Character.MAX_VALUE <= (char) 1) ? 100 : 100): + case ((Character.MAX_VALUE <= Character.MAX_VALUE) ? 101 : 101): + case (((char) 0 >= (char) 0) ? 102 : 102): + case (((char) 0 >= (char) 1) ? 103 : 103): + case (((char) 0 >= Character.MAX_VALUE) ? 104 : 104): + case (((char) 1 >= (char) 0) ? 105 : 105): + case (((char) 1 >= (char) 1) ? 106 : 106): + case (((char) 1 >= Character.MAX_VALUE) ? 107 : 107): + case ((Character.MAX_VALUE >= (char) 0) ? 108 : 108): + case ((Character.MAX_VALUE >= (char) 1) ? 109 : 109): + case ((Character.MAX_VALUE >= Character.MAX_VALUE) ? 110 : 110): + case (((char) 0 == (char) 0) ? 111 : 111): + case (((char) 0 == (char) 1) ? 112 : 112): + case (((char) 0 == Character.MAX_VALUE) ? 113 : 113): + case (((char) 1 == (char) 0) ? 114 : 114): + case (((char) 1 == (char) 1) ? 115 : 115): + case (((char) 1 == Character.MAX_VALUE) ? 116 : 116): + case ((Character.MAX_VALUE == (char) 0) ? 117 : 117): + case ((Character.MAX_VALUE == (char) 1) ? 118 : 118): + case ((Character.MAX_VALUE == Character.MAX_VALUE) ? 119 : 119): + case (((char) 0 != (char) 0) ? 120 : 120): + case (((char) 0 != (char) 1) ? 121 : 121): + case (((char) 0 != Character.MAX_VALUE) ? 122 : 122): + case (((char) 1 != (char) 0) ? 123 : 123): + case (((char) 1 != (char) 1) ? 124 : 124): + case (((char) 1 != Character.MAX_VALUE) ? 125 : 125): + case ((Character.MAX_VALUE != (char) 0) ? 126 : 126): + case ((Character.MAX_VALUE != (char) 1) ? 127 : 127): + case ((Character.MAX_VALUE != Character.MAX_VALUE) ? 128 : 128): + case ((((char) ((char) 0 & (char) 0)) == 0) ? 129 : 129): + case ((((char) ((char) 0 & (char) 1)) == 0) ? 130 : 130): + case ((((char) ((char) 0 & Character.MAX_VALUE)) == 0) ? 131 : 131): + case ((((char) ((char) 1 & (char) 0)) == 0) ? 132 : 132): + case ((((char) ((char) 1 & (char) 1)) == 0) ? 133 : 133): + case ((((char) ((char) 1 & Character.MAX_VALUE)) == 0) ? 134 : 134): + case ((((char) (Character.MAX_VALUE & (char) 0)) == 0) ? 135 : 135): + case ((((char) (Character.MAX_VALUE & (char) 1)) == 0) ? 136 : 136): + case ((((char) (Character.MAX_VALUE & Character.MAX_VALUE)) == 0) ? 137 : 137): + case ((((char) ((char) 0 ^ (char) 0)) == 0) ? 138 : 138): + case ((((char) ((char) 0 ^ (char) 1)) == 0) ? 139 : 139): + case ((((char) ((char) 0 ^ Character.MAX_VALUE)) == 0) ? 140 : 140): + case ((((char) ((char) 1 ^ (char) 0)) == 0) ? 141 : 141): + case ((((char) ((char) 1 ^ (char) 1)) == 0) ? 142 : 142): + case ((((char) ((char) 1 ^ Character.MAX_VALUE)) == 0) ? 143 : 143): + case ((((char) (Character.MAX_VALUE ^ (char) 0)) == 0) ? 144 : 144): + case ((((char) (Character.MAX_VALUE ^ (char) 1)) == 0) ? 145 : 145): + case ((((char) (Character.MAX_VALUE ^ Character.MAX_VALUE)) == 0) ? 146 : 146): + case ((((char) ((char) 0 | (char) 0)) == 0) ? 147 : 147): + case ((((char) ((char) 0 | (char) 1)) == 0) ? 148 : 148): + case ((((char) ((char) 0 | Character.MAX_VALUE)) == 0) ? 149 : 149): + case ((((char) ((char) 1 | (char) 0)) == 0) ? 150 : 150): + case ((((char) ((char) 1 | (char) 1)) == 0) ? 151 : 151): + case ((((char) ((char) 1 | Character.MAX_VALUE)) == 0) ? 152 : 152): + case ((((char) (Character.MAX_VALUE | (char) 0)) == 0) ? 153 : 153): + case ((((char) (Character.MAX_VALUE | (char) 1)) == 0) ? 154 : 154): + case ((((char) (Character.MAX_VALUE | Character.MAX_VALUE)) == 0) ? 155 : 155): + default: + } + } + + // -------- + // int tests + static int intPlus(int x) { return (int) + x; } + static int intMinus(int x) { return (int) - x; } + static int intBitNot(int x) { return (int) ~ x; } + static int intTimes(int x, int y) { return (int) (x * y); } + static int intDiv(int x, int y) { return (int) (x / y); } + static int intRem(int x, int y) { return (int) (x % y); } + static int intAdd(int x, int y) { return (int) (x + y); } + static int intSub(int x, int y) { return (int) (x - y); } + static int intShl(int x, int y) { return (int) (x << y); } + static int intShr(int x, int y) { return (int) (x >> y); } + static int intUshr(int x, int y) { return (int) (x >>> y); } + static boolean intLt(int x, int y) { return x < y; } + static boolean intGt(int x, int y) { return x > y; } + static boolean intLe(int x, int y) { return x <= y; } + static boolean intGe(int x, int y) { return x >= y; } + static boolean intEq(int x, int y) { return x == y; } + static boolean intNe(int x, int y) { return x != y; } + static int intAnd(int x, int y) { return (int) (x & y); } + static int intXor(int x, int y) { return (int) (x ^ y); } + static int intOr(int x, int y) { return (int) (x | y); } + static void intTest() { + Tester.checkEqual(intPlus(Integer.MIN_VALUE), (int) + Integer.MIN_VALUE, "(int) + Integer.MIN_VALUE"); + Tester.checkEqual(intPlus(-1), (int) + -1, "(int) + -1"); + Tester.checkEqual(intPlus(0), (int) + 0, "(int) + 0"); + Tester.checkEqual(intPlus(1), (int) + 1, "(int) + 1"); + Tester.checkEqual(intPlus(Integer.MAX_VALUE), (int) + Integer.MAX_VALUE, "(int) + Integer.MAX_VALUE"); + Tester.checkEqual(intMinus(Integer.MIN_VALUE), (int) - Integer.MIN_VALUE, "(int) - Integer.MIN_VALUE"); + Tester.checkEqual(intMinus(-1), (int) - -1, "(int) - -1"); + Tester.checkEqual(intMinus(0), (int) - 0, "(int) - 0"); + Tester.checkEqual(intMinus(1), (int) - 1, "(int) - 1"); + Tester.checkEqual(intMinus(Integer.MAX_VALUE), (int) - Integer.MAX_VALUE, "(int) - Integer.MAX_VALUE"); + Tester.checkEqual(intBitNot(Integer.MIN_VALUE), (int) ~ Integer.MIN_VALUE, "(int) ~ Integer.MIN_VALUE"); + Tester.checkEqual(intBitNot(-1), (int) ~ -1, "(int) ~ -1"); + Tester.checkEqual(intBitNot(0), (int) ~ 0, "(int) ~ 0"); + Tester.checkEqual(intBitNot(1), (int) ~ 1, "(int) ~ 1"); + Tester.checkEqual(intBitNot(Integer.MAX_VALUE), (int) ~ Integer.MAX_VALUE, "(int) ~ Integer.MAX_VALUE"); + Tester.checkEqual(intTimes(Integer.MIN_VALUE, Integer.MIN_VALUE), (int) (Integer.MIN_VALUE * Integer.MIN_VALUE), "(int) (Integer.MIN_VALUE * Integer.MIN_VALUE)"); + Tester.checkEqual(intTimes(Integer.MIN_VALUE, -1), (int) (Integer.MIN_VALUE * -1), "(int) (Integer.MIN_VALUE * -1)"); + Tester.checkEqual(intTimes(Integer.MIN_VALUE, 0), (int) (Integer.MIN_VALUE * 0), "(int) (Integer.MIN_VALUE * 0)"); + Tester.checkEqual(intTimes(Integer.MIN_VALUE, 1), (int) (Integer.MIN_VALUE * 1), "(int) (Integer.MIN_VALUE * 1)"); + Tester.checkEqual(intTimes(Integer.MIN_VALUE, Integer.MAX_VALUE), (int) (Integer.MIN_VALUE * Integer.MAX_VALUE), "(int) (Integer.MIN_VALUE * Integer.MAX_VALUE)"); + Tester.checkEqual(intTimes(-1, Integer.MIN_VALUE), (int) (-1 * Integer.MIN_VALUE), "(int) (-1 * Integer.MIN_VALUE)"); + Tester.checkEqual(intTimes(-1, -1), (int) (-1 * -1), "(int) (-1 * -1)"); + Tester.checkEqual(intTimes(-1, 0), (int) (-1 * 0), "(int) (-1 * 0)"); + Tester.checkEqual(intTimes(-1, 1), (int) (-1 * 1), "(int) (-1 * 1)"); + Tester.checkEqual(intTimes(-1, Integer.MAX_VALUE), (int) (-1 * Integer.MAX_VALUE), "(int) (-1 * Integer.MAX_VALUE)"); + Tester.checkEqual(intTimes(0, Integer.MIN_VALUE), (int) (0 * Integer.MIN_VALUE), "(int) (0 * Integer.MIN_VALUE)"); + Tester.checkEqual(intTimes(0, -1), (int) (0 * -1), "(int) (0 * -1)"); + Tester.checkEqual(intTimes(0, 0), (int) (0 * 0), "(int) (0 * 0)"); + Tester.checkEqual(intTimes(0, 1), (int) (0 * 1), "(int) (0 * 1)"); + Tester.checkEqual(intTimes(0, Integer.MAX_VALUE), (int) (0 * Integer.MAX_VALUE), "(int) (0 * Integer.MAX_VALUE)"); + Tester.checkEqual(intTimes(1, Integer.MIN_VALUE), (int) (1 * Integer.MIN_VALUE), "(int) (1 * Integer.MIN_VALUE)"); + Tester.checkEqual(intTimes(1, -1), (int) (1 * -1), "(int) (1 * -1)"); + Tester.checkEqual(intTimes(1, 0), (int) (1 * 0), "(int) (1 * 0)"); + Tester.checkEqual(intTimes(1, 1), (int) (1 * 1), "(int) (1 * 1)"); + Tester.checkEqual(intTimes(1, Integer.MAX_VALUE), (int) (1 * Integer.MAX_VALUE), "(int) (1 * Integer.MAX_VALUE)"); + Tester.checkEqual(intTimes(Integer.MAX_VALUE, Integer.MIN_VALUE), (int) (Integer.MAX_VALUE * Integer.MIN_VALUE), "(int) (Integer.MAX_VALUE * Integer.MIN_VALUE)"); + Tester.checkEqual(intTimes(Integer.MAX_VALUE, -1), (int) (Integer.MAX_VALUE * -1), "(int) (Integer.MAX_VALUE * -1)"); + Tester.checkEqual(intTimes(Integer.MAX_VALUE, 0), (int) (Integer.MAX_VALUE * 0), "(int) (Integer.MAX_VALUE * 0)"); + Tester.checkEqual(intTimes(Integer.MAX_VALUE, 1), (int) (Integer.MAX_VALUE * 1), "(int) (Integer.MAX_VALUE * 1)"); + Tester.checkEqual(intTimes(Integer.MAX_VALUE, Integer.MAX_VALUE), (int) (Integer.MAX_VALUE * Integer.MAX_VALUE), "(int) (Integer.MAX_VALUE * Integer.MAX_VALUE)"); + Tester.checkEqual(intDiv(Integer.MIN_VALUE, Integer.MIN_VALUE), (int) (Integer.MIN_VALUE / Integer.MIN_VALUE), "(int) (Integer.MIN_VALUE / Integer.MIN_VALUE)"); + Tester.checkEqual(intDiv(Integer.MIN_VALUE, -1), (int) (Integer.MIN_VALUE / -1), "(int) (Integer.MIN_VALUE / -1)"); + Tester.checkEqual(intDiv(Integer.MIN_VALUE, 1), (int) (Integer.MIN_VALUE / 1), "(int) (Integer.MIN_VALUE / 1)"); + Tester.checkEqual(intDiv(Integer.MIN_VALUE, Integer.MAX_VALUE), (int) (Integer.MIN_VALUE / Integer.MAX_VALUE), "(int) (Integer.MIN_VALUE / Integer.MAX_VALUE)"); + Tester.checkEqual(intDiv(-1, Integer.MIN_VALUE), (int) (-1 / Integer.MIN_VALUE), "(int) (-1 / Integer.MIN_VALUE)"); + Tester.checkEqual(intDiv(-1, -1), (int) (-1 / -1), "(int) (-1 / -1)"); + Tester.checkEqual(intDiv(-1, 1), (int) (-1 / 1), "(int) (-1 / 1)"); + Tester.checkEqual(intDiv(-1, Integer.MAX_VALUE), (int) (-1 / Integer.MAX_VALUE), "(int) (-1 / Integer.MAX_VALUE)"); + Tester.checkEqual(intDiv(0, Integer.MIN_VALUE), (int) (0 / Integer.MIN_VALUE), "(int) (0 / Integer.MIN_VALUE)"); + Tester.checkEqual(intDiv(0, -1), (int) (0 / -1), "(int) (0 / -1)"); + Tester.checkEqual(intDiv(0, 1), (int) (0 / 1), "(int) (0 / 1)"); + Tester.checkEqual(intDiv(0, Integer.MAX_VALUE), (int) (0 / Integer.MAX_VALUE), "(int) (0 / Integer.MAX_VALUE)"); + Tester.checkEqual(intDiv(1, Integer.MIN_VALUE), (int) (1 / Integer.MIN_VALUE), "(int) (1 / Integer.MIN_VALUE)"); + Tester.checkEqual(intDiv(1, -1), (int) (1 / -1), "(int) (1 / -1)"); + Tester.checkEqual(intDiv(1, 1), (int) (1 / 1), "(int) (1 / 1)"); + Tester.checkEqual(intDiv(1, Integer.MAX_VALUE), (int) (1 / Integer.MAX_VALUE), "(int) (1 / Integer.MAX_VALUE)"); + Tester.checkEqual(intDiv(Integer.MAX_VALUE, Integer.MIN_VALUE), (int) (Integer.MAX_VALUE / Integer.MIN_VALUE), "(int) (Integer.MAX_VALUE / Integer.MIN_VALUE)"); + Tester.checkEqual(intDiv(Integer.MAX_VALUE, -1), (int) (Integer.MAX_VALUE / -1), "(int) (Integer.MAX_VALUE / -1)"); + Tester.checkEqual(intDiv(Integer.MAX_VALUE, 1), (int) (Integer.MAX_VALUE / 1), "(int) (Integer.MAX_VALUE / 1)"); + Tester.checkEqual(intDiv(Integer.MAX_VALUE, Integer.MAX_VALUE), (int) (Integer.MAX_VALUE / Integer.MAX_VALUE), "(int) (Integer.MAX_VALUE / Integer.MAX_VALUE)"); + Tester.checkEqual(intRem(Integer.MIN_VALUE, Integer.MIN_VALUE), (int) (Integer.MIN_VALUE % Integer.MIN_VALUE), "(int) (Integer.MIN_VALUE % Integer.MIN_VALUE)"); + Tester.checkEqual(intRem(Integer.MIN_VALUE, -1), (int) (Integer.MIN_VALUE % -1), "(int) (Integer.MIN_VALUE % -1)"); + Tester.checkEqual(intRem(Integer.MIN_VALUE, 1), (int) (Integer.MIN_VALUE % 1), "(int) (Integer.MIN_VALUE % 1)"); + Tester.checkEqual(intRem(Integer.MIN_VALUE, Integer.MAX_VALUE), (int) (Integer.MIN_VALUE % Integer.MAX_VALUE), "(int) (Integer.MIN_VALUE % Integer.MAX_VALUE)"); + Tester.checkEqual(intRem(-1, Integer.MIN_VALUE), (int) (-1 % Integer.MIN_VALUE), "(int) (-1 % Integer.MIN_VALUE)"); + Tester.checkEqual(intRem(-1, -1), (int) (-1 % -1), "(int) (-1 % -1)"); + Tester.checkEqual(intRem(-1, 1), (int) (-1 % 1), "(int) (-1 % 1)"); + Tester.checkEqual(intRem(-1, Integer.MAX_VALUE), (int) (-1 % Integer.MAX_VALUE), "(int) (-1 % Integer.MAX_VALUE)"); + Tester.checkEqual(intRem(0, Integer.MIN_VALUE), (int) (0 % Integer.MIN_VALUE), "(int) (0 % Integer.MIN_VALUE)"); + Tester.checkEqual(intRem(0, -1), (int) (0 % -1), "(int) (0 % -1)"); + Tester.checkEqual(intRem(0, 1), (int) (0 % 1), "(int) (0 % 1)"); + Tester.checkEqual(intRem(0, Integer.MAX_VALUE), (int) (0 % Integer.MAX_VALUE), "(int) (0 % Integer.MAX_VALUE)"); + Tester.checkEqual(intRem(1, Integer.MIN_VALUE), (int) (1 % Integer.MIN_VALUE), "(int) (1 % Integer.MIN_VALUE)"); + Tester.checkEqual(intRem(1, -1), (int) (1 % -1), "(int) (1 % -1)"); + Tester.checkEqual(intRem(1, 1), (int) (1 % 1), "(int) (1 % 1)"); + Tester.checkEqual(intRem(1, Integer.MAX_VALUE), (int) (1 % Integer.MAX_VALUE), "(int) (1 % Integer.MAX_VALUE)"); + Tester.checkEqual(intRem(Integer.MAX_VALUE, Integer.MIN_VALUE), (int) (Integer.MAX_VALUE % Integer.MIN_VALUE), "(int) (Integer.MAX_VALUE % Integer.MIN_VALUE)"); + Tester.checkEqual(intRem(Integer.MAX_VALUE, -1), (int) (Integer.MAX_VALUE % -1), "(int) (Integer.MAX_VALUE % -1)"); + Tester.checkEqual(intRem(Integer.MAX_VALUE, 1), (int) (Integer.MAX_VALUE % 1), "(int) (Integer.MAX_VALUE % 1)"); + Tester.checkEqual(intRem(Integer.MAX_VALUE, Integer.MAX_VALUE), (int) (Integer.MAX_VALUE % Integer.MAX_VALUE), "(int) (Integer.MAX_VALUE % Integer.MAX_VALUE)"); + Tester.checkEqual(intAdd(Integer.MIN_VALUE, Integer.MIN_VALUE), (int) (Integer.MIN_VALUE + Integer.MIN_VALUE), "(int) (Integer.MIN_VALUE + Integer.MIN_VALUE)"); + Tester.checkEqual(intAdd(Integer.MIN_VALUE, -1), (int) (Integer.MIN_VALUE + -1), "(int) (Integer.MIN_VALUE + -1)"); + Tester.checkEqual(intAdd(Integer.MIN_VALUE, 0), (int) (Integer.MIN_VALUE + 0), "(int) (Integer.MIN_VALUE + 0)"); + Tester.checkEqual(intAdd(Integer.MIN_VALUE, 1), (int) (Integer.MIN_VALUE + 1), "(int) (Integer.MIN_VALUE + 1)"); + Tester.checkEqual(intAdd(Integer.MIN_VALUE, Integer.MAX_VALUE), (int) (Integer.MIN_VALUE + Integer.MAX_VALUE), "(int) (Integer.MIN_VALUE + Integer.MAX_VALUE)"); + Tester.checkEqual(intAdd(-1, Integer.MIN_VALUE), (int) (-1 + Integer.MIN_VALUE), "(int) (-1 + Integer.MIN_VALUE)"); + Tester.checkEqual(intAdd(-1, -1), (int) (-1 + -1), "(int) (-1 + -1)"); + Tester.checkEqual(intAdd(-1, 0), (int) (-1 + 0), "(int) (-1 + 0)"); + Tester.checkEqual(intAdd(-1, 1), (int) (-1 + 1), "(int) (-1 + 1)"); + Tester.checkEqual(intAdd(-1, Integer.MAX_VALUE), (int) (-1 + Integer.MAX_VALUE), "(int) (-1 + Integer.MAX_VALUE)"); + Tester.checkEqual(intAdd(0, Integer.MIN_VALUE), (int) (0 + Integer.MIN_VALUE), "(int) (0 + Integer.MIN_VALUE)"); + Tester.checkEqual(intAdd(0, -1), (int) (0 + -1), "(int) (0 + -1)"); + Tester.checkEqual(intAdd(0, 0), (int) (0 + 0), "(int) (0 + 0)"); + Tester.checkEqual(intAdd(0, 1), (int) (0 + 1), "(int) (0 + 1)"); + Tester.checkEqual(intAdd(0, Integer.MAX_VALUE), (int) (0 + Integer.MAX_VALUE), "(int) (0 + Integer.MAX_VALUE)"); + Tester.checkEqual(intAdd(1, Integer.MIN_VALUE), (int) (1 + Integer.MIN_VALUE), "(int) (1 + Integer.MIN_VALUE)"); + Tester.checkEqual(intAdd(1, -1), (int) (1 + -1), "(int) (1 + -1)"); + Tester.checkEqual(intAdd(1, 0), (int) (1 + 0), "(int) (1 + 0)"); + Tester.checkEqual(intAdd(1, 1), (int) (1 + 1), "(int) (1 + 1)"); + Tester.checkEqual(intAdd(1, Integer.MAX_VALUE), (int) (1 + Integer.MAX_VALUE), "(int) (1 + Integer.MAX_VALUE)"); + Tester.checkEqual(intAdd(Integer.MAX_VALUE, Integer.MIN_VALUE), (int) (Integer.MAX_VALUE + Integer.MIN_VALUE), "(int) (Integer.MAX_VALUE + Integer.MIN_VALUE)"); + Tester.checkEqual(intAdd(Integer.MAX_VALUE, -1), (int) (Integer.MAX_VALUE + -1), "(int) (Integer.MAX_VALUE + -1)"); + Tester.checkEqual(intAdd(Integer.MAX_VALUE, 0), (int) (Integer.MAX_VALUE + 0), "(int) (Integer.MAX_VALUE + 0)"); + Tester.checkEqual(intAdd(Integer.MAX_VALUE, 1), (int) (Integer.MAX_VALUE + 1), "(int) (Integer.MAX_VALUE + 1)"); + Tester.checkEqual(intAdd(Integer.MAX_VALUE, Integer.MAX_VALUE), (int) (Integer.MAX_VALUE + Integer.MAX_VALUE), "(int) (Integer.MAX_VALUE + Integer.MAX_VALUE)"); + Tester.checkEqual(intSub(Integer.MIN_VALUE, Integer.MIN_VALUE), (int) (Integer.MIN_VALUE - Integer.MIN_VALUE), "(int) (Integer.MIN_VALUE - Integer.MIN_VALUE)"); + Tester.checkEqual(intSub(Integer.MIN_VALUE, -1), (int) (Integer.MIN_VALUE - -1), "(int) (Integer.MIN_VALUE - -1)"); + Tester.checkEqual(intSub(Integer.MIN_VALUE, 0), (int) (Integer.MIN_VALUE - 0), "(int) (Integer.MIN_VALUE - 0)"); + Tester.checkEqual(intSub(Integer.MIN_VALUE, 1), (int) (Integer.MIN_VALUE - 1), "(int) (Integer.MIN_VALUE - 1)"); + Tester.checkEqual(intSub(Integer.MIN_VALUE, Integer.MAX_VALUE), (int) (Integer.MIN_VALUE - Integer.MAX_VALUE), "(int) (Integer.MIN_VALUE - Integer.MAX_VALUE)"); + Tester.checkEqual(intSub(-1, Integer.MIN_VALUE), (int) (-1 - Integer.MIN_VALUE), "(int) (-1 - Integer.MIN_VALUE)"); + Tester.checkEqual(intSub(-1, -1), (int) (-1 - -1), "(int) (-1 - -1)"); + Tester.checkEqual(intSub(-1, 0), (int) (-1 - 0), "(int) (-1 - 0)"); + Tester.checkEqual(intSub(-1, 1), (int) (-1 - 1), "(int) (-1 - 1)"); + Tester.checkEqual(intSub(-1, Integer.MAX_VALUE), (int) (-1 - Integer.MAX_VALUE), "(int) (-1 - Integer.MAX_VALUE)"); + Tester.checkEqual(intSub(0, Integer.MIN_VALUE), (int) (0 - Integer.MIN_VALUE), "(int) (0 - Integer.MIN_VALUE)"); + Tester.checkEqual(intSub(0, -1), (int) (0 - -1), "(int) (0 - -1)"); + Tester.checkEqual(intSub(0, 0), (int) (0 - 0), "(int) (0 - 0)"); + Tester.checkEqual(intSub(0, 1), (int) (0 - 1), "(int) (0 - 1)"); + Tester.checkEqual(intSub(0, Integer.MAX_VALUE), (int) (0 - Integer.MAX_VALUE), "(int) (0 - Integer.MAX_VALUE)"); + Tester.checkEqual(intSub(1, Integer.MIN_VALUE), (int) (1 - Integer.MIN_VALUE), "(int) (1 - Integer.MIN_VALUE)"); + Tester.checkEqual(intSub(1, -1), (int) (1 - -1), "(int) (1 - -1)"); + Tester.checkEqual(intSub(1, 0), (int) (1 - 0), "(int) (1 - 0)"); + Tester.checkEqual(intSub(1, 1), (int) (1 - 1), "(int) (1 - 1)"); + Tester.checkEqual(intSub(1, Integer.MAX_VALUE), (int) (1 - Integer.MAX_VALUE), "(int) (1 - Integer.MAX_VALUE)"); + Tester.checkEqual(intSub(Integer.MAX_VALUE, Integer.MIN_VALUE), (int) (Integer.MAX_VALUE - Integer.MIN_VALUE), "(int) (Integer.MAX_VALUE - Integer.MIN_VALUE)"); + Tester.checkEqual(intSub(Integer.MAX_VALUE, -1), (int) (Integer.MAX_VALUE - -1), "(int) (Integer.MAX_VALUE - -1)"); + Tester.checkEqual(intSub(Integer.MAX_VALUE, 0), (int) (Integer.MAX_VALUE - 0), "(int) (Integer.MAX_VALUE - 0)"); + Tester.checkEqual(intSub(Integer.MAX_VALUE, 1), (int) (Integer.MAX_VALUE - 1), "(int) (Integer.MAX_VALUE - 1)"); + Tester.checkEqual(intSub(Integer.MAX_VALUE, Integer.MAX_VALUE), (int) (Integer.MAX_VALUE - Integer.MAX_VALUE), "(int) (Integer.MAX_VALUE - Integer.MAX_VALUE)"); + Tester.checkEqual(intShl(Integer.MIN_VALUE, Integer.MIN_VALUE), (int) (Integer.MIN_VALUE << Integer.MIN_VALUE), "(int) (Integer.MIN_VALUE << Integer.MIN_VALUE)"); + Tester.checkEqual(intShl(Integer.MIN_VALUE, -1), (int) (Integer.MIN_VALUE << -1), "(int) (Integer.MIN_VALUE << -1)"); + Tester.checkEqual(intShl(Integer.MIN_VALUE, 0), (int) (Integer.MIN_VALUE << 0), "(int) (Integer.MIN_VALUE << 0)"); + Tester.checkEqual(intShl(Integer.MIN_VALUE, 1), (int) (Integer.MIN_VALUE << 1), "(int) (Integer.MIN_VALUE << 1)"); + Tester.checkEqual(intShl(Integer.MIN_VALUE, Integer.MAX_VALUE), (int) (Integer.MIN_VALUE << Integer.MAX_VALUE), "(int) (Integer.MIN_VALUE << Integer.MAX_VALUE)"); + Tester.checkEqual(intShl(-1, Integer.MIN_VALUE), (int) (-1 << Integer.MIN_VALUE), "(int) (-1 << Integer.MIN_VALUE)"); + Tester.checkEqual(intShl(-1, -1), (int) (-1 << -1), "(int) (-1 << -1)"); + Tester.checkEqual(intShl(-1, 0), (int) (-1 << 0), "(int) (-1 << 0)"); + Tester.checkEqual(intShl(-1, 1), (int) (-1 << 1), "(int) (-1 << 1)"); + Tester.checkEqual(intShl(-1, Integer.MAX_VALUE), (int) (-1 << Integer.MAX_VALUE), "(int) (-1 << Integer.MAX_VALUE)"); + Tester.checkEqual(intShl(0, Integer.MIN_VALUE), (int) (0 << Integer.MIN_VALUE), "(int) (0 << Integer.MIN_VALUE)"); + Tester.checkEqual(intShl(0, -1), (int) (0 << -1), "(int) (0 << -1)"); + Tester.checkEqual(intShl(0, 0), (int) (0 << 0), "(int) (0 << 0)"); + Tester.checkEqual(intShl(0, 1), (int) (0 << 1), "(int) (0 << 1)"); + Tester.checkEqual(intShl(0, Integer.MAX_VALUE), (int) (0 << Integer.MAX_VALUE), "(int) (0 << Integer.MAX_VALUE)"); + Tester.checkEqual(intShl(1, Integer.MIN_VALUE), (int) (1 << Integer.MIN_VALUE), "(int) (1 << Integer.MIN_VALUE)"); + Tester.checkEqual(intShl(1, -1), (int) (1 << -1), "(int) (1 << -1)"); + Tester.checkEqual(intShl(1, 0), (int) (1 << 0), "(int) (1 << 0)"); + Tester.checkEqual(intShl(1, 1), (int) (1 << 1), "(int) (1 << 1)"); + Tester.checkEqual(intShl(1, Integer.MAX_VALUE), (int) (1 << Integer.MAX_VALUE), "(int) (1 << Integer.MAX_VALUE)"); + Tester.checkEqual(intShl(Integer.MAX_VALUE, Integer.MIN_VALUE), (int) (Integer.MAX_VALUE << Integer.MIN_VALUE), "(int) (Integer.MAX_VALUE << Integer.MIN_VALUE)"); + Tester.checkEqual(intShl(Integer.MAX_VALUE, -1), (int) (Integer.MAX_VALUE << -1), "(int) (Integer.MAX_VALUE << -1)"); + Tester.checkEqual(intShl(Integer.MAX_VALUE, 0), (int) (Integer.MAX_VALUE << 0), "(int) (Integer.MAX_VALUE << 0)"); + Tester.checkEqual(intShl(Integer.MAX_VALUE, 1), (int) (Integer.MAX_VALUE << 1), "(int) (Integer.MAX_VALUE << 1)"); + Tester.checkEqual(intShl(Integer.MAX_VALUE, Integer.MAX_VALUE), (int) (Integer.MAX_VALUE << Integer.MAX_VALUE), "(int) (Integer.MAX_VALUE << Integer.MAX_VALUE)"); + Tester.checkEqual(intShr(Integer.MIN_VALUE, Integer.MIN_VALUE), (int) (Integer.MIN_VALUE >> Integer.MIN_VALUE), "(int) (Integer.MIN_VALUE >> Integer.MIN_VALUE)"); + Tester.checkEqual(intShr(Integer.MIN_VALUE, -1), (int) (Integer.MIN_VALUE >> -1), "(int) (Integer.MIN_VALUE >> -1)"); + Tester.checkEqual(intShr(Integer.MIN_VALUE, 0), (int) (Integer.MIN_VALUE >> 0), "(int) (Integer.MIN_VALUE >> 0)"); + Tester.checkEqual(intShr(Integer.MIN_VALUE, 1), (int) (Integer.MIN_VALUE >> 1), "(int) (Integer.MIN_VALUE >> 1)"); + Tester.checkEqual(intShr(Integer.MIN_VALUE, Integer.MAX_VALUE), (int) (Integer.MIN_VALUE >> Integer.MAX_VALUE), "(int) (Integer.MIN_VALUE >> Integer.MAX_VALUE)"); + Tester.checkEqual(intShr(-1, Integer.MIN_VALUE), (int) (-1 >> Integer.MIN_VALUE), "(int) (-1 >> Integer.MIN_VALUE)"); + Tester.checkEqual(intShr(-1, -1), (int) (-1 >> -1), "(int) (-1 >> -1)"); + Tester.checkEqual(intShr(-1, 0), (int) (-1 >> 0), "(int) (-1 >> 0)"); + Tester.checkEqual(intShr(-1, 1), (int) (-1 >> 1), "(int) (-1 >> 1)"); + Tester.checkEqual(intShr(-1, Integer.MAX_VALUE), (int) (-1 >> Integer.MAX_VALUE), "(int) (-1 >> Integer.MAX_VALUE)"); + Tester.checkEqual(intShr(0, Integer.MIN_VALUE), (int) (0 >> Integer.MIN_VALUE), "(int) (0 >> Integer.MIN_VALUE)"); + Tester.checkEqual(intShr(0, -1), (int) (0 >> -1), "(int) (0 >> -1)"); + Tester.checkEqual(intShr(0, 0), (int) (0 >> 0), "(int) (0 >> 0)"); + Tester.checkEqual(intShr(0, 1), (int) (0 >> 1), "(int) (0 >> 1)"); + Tester.checkEqual(intShr(0, Integer.MAX_VALUE), (int) (0 >> Integer.MAX_VALUE), "(int) (0 >> Integer.MAX_VALUE)"); + Tester.checkEqual(intShr(1, Integer.MIN_VALUE), (int) (1 >> Integer.MIN_VALUE), "(int) (1 >> Integer.MIN_VALUE)"); + Tester.checkEqual(intShr(1, -1), (int) (1 >> -1), "(int) (1 >> -1)"); + Tester.checkEqual(intShr(1, 0), (int) (1 >> 0), "(int) (1 >> 0)"); + Tester.checkEqual(intShr(1, 1), (int) (1 >> 1), "(int) (1 >> 1)"); + Tester.checkEqual(intShr(1, Integer.MAX_VALUE), (int) (1 >> Integer.MAX_VALUE), "(int) (1 >> Integer.MAX_VALUE)"); + Tester.checkEqual(intShr(Integer.MAX_VALUE, Integer.MIN_VALUE), (int) (Integer.MAX_VALUE >> Integer.MIN_VALUE), "(int) (Integer.MAX_VALUE >> Integer.MIN_VALUE)"); + Tester.checkEqual(intShr(Integer.MAX_VALUE, -1), (int) (Integer.MAX_VALUE >> -1), "(int) (Integer.MAX_VALUE >> -1)"); + Tester.checkEqual(intShr(Integer.MAX_VALUE, 0), (int) (Integer.MAX_VALUE >> 0), "(int) (Integer.MAX_VALUE >> 0)"); + Tester.checkEqual(intShr(Integer.MAX_VALUE, 1), (int) (Integer.MAX_VALUE >> 1), "(int) (Integer.MAX_VALUE >> 1)"); + Tester.checkEqual(intShr(Integer.MAX_VALUE, Integer.MAX_VALUE), (int) (Integer.MAX_VALUE >> Integer.MAX_VALUE), "(int) (Integer.MAX_VALUE >> Integer.MAX_VALUE)"); + Tester.checkEqual(intUshr(Integer.MIN_VALUE, Integer.MIN_VALUE), (int) (Integer.MIN_VALUE >>> Integer.MIN_VALUE), "(int) (Integer.MIN_VALUE >>> Integer.MIN_VALUE)"); + Tester.checkEqual(intUshr(Integer.MIN_VALUE, -1), (int) (Integer.MIN_VALUE >>> -1), "(int) (Integer.MIN_VALUE >>> -1)"); + Tester.checkEqual(intUshr(Integer.MIN_VALUE, 0), (int) (Integer.MIN_VALUE >>> 0), "(int) (Integer.MIN_VALUE >>> 0)"); + Tester.checkEqual(intUshr(Integer.MIN_VALUE, 1), (int) (Integer.MIN_VALUE >>> 1), "(int) (Integer.MIN_VALUE >>> 1)"); + Tester.checkEqual(intUshr(Integer.MIN_VALUE, Integer.MAX_VALUE), (int) (Integer.MIN_VALUE >>> Integer.MAX_VALUE), "(int) (Integer.MIN_VALUE >>> Integer.MAX_VALUE)"); + Tester.checkEqual(intUshr(-1, Integer.MIN_VALUE), (int) (-1 >>> Integer.MIN_VALUE), "(int) (-1 >>> Integer.MIN_VALUE)"); + Tester.checkEqual(intUshr(-1, -1), (int) (-1 >>> -1), "(int) (-1 >>> -1)"); + Tester.checkEqual(intUshr(-1, 0), (int) (-1 >>> 0), "(int) (-1 >>> 0)"); + Tester.checkEqual(intUshr(-1, 1), (int) (-1 >>> 1), "(int) (-1 >>> 1)"); + Tester.checkEqual(intUshr(-1, Integer.MAX_VALUE), (int) (-1 >>> Integer.MAX_VALUE), "(int) (-1 >>> Integer.MAX_VALUE)"); + Tester.checkEqual(intUshr(0, Integer.MIN_VALUE), (int) (0 >>> Integer.MIN_VALUE), "(int) (0 >>> Integer.MIN_VALUE)"); + Tester.checkEqual(intUshr(0, -1), (int) (0 >>> -1), "(int) (0 >>> -1)"); + Tester.checkEqual(intUshr(0, 0), (int) (0 >>> 0), "(int) (0 >>> 0)"); + Tester.checkEqual(intUshr(0, 1), (int) (0 >>> 1), "(int) (0 >>> 1)"); + Tester.checkEqual(intUshr(0, Integer.MAX_VALUE), (int) (0 >>> Integer.MAX_VALUE), "(int) (0 >>> Integer.MAX_VALUE)"); + Tester.checkEqual(intUshr(1, Integer.MIN_VALUE), (int) (1 >>> Integer.MIN_VALUE), "(int) (1 >>> Integer.MIN_VALUE)"); + Tester.checkEqual(intUshr(1, -1), (int) (1 >>> -1), "(int) (1 >>> -1)"); + Tester.checkEqual(intUshr(1, 0), (int) (1 >>> 0), "(int) (1 >>> 0)"); + Tester.checkEqual(intUshr(1, 1), (int) (1 >>> 1), "(int) (1 >>> 1)"); + Tester.checkEqual(intUshr(1, Integer.MAX_VALUE), (int) (1 >>> Integer.MAX_VALUE), "(int) (1 >>> Integer.MAX_VALUE)"); + Tester.checkEqual(intUshr(Integer.MAX_VALUE, Integer.MIN_VALUE), (int) (Integer.MAX_VALUE >>> Integer.MIN_VALUE), "(int) (Integer.MAX_VALUE >>> Integer.MIN_VALUE)"); + Tester.checkEqual(intUshr(Integer.MAX_VALUE, -1), (int) (Integer.MAX_VALUE >>> -1), "(int) (Integer.MAX_VALUE >>> -1)"); + Tester.checkEqual(intUshr(Integer.MAX_VALUE, 0), (int) (Integer.MAX_VALUE >>> 0), "(int) (Integer.MAX_VALUE >>> 0)"); + Tester.checkEqual(intUshr(Integer.MAX_VALUE, 1), (int) (Integer.MAX_VALUE >>> 1), "(int) (Integer.MAX_VALUE >>> 1)"); + Tester.checkEqual(intUshr(Integer.MAX_VALUE, Integer.MAX_VALUE), (int) (Integer.MAX_VALUE >>> Integer.MAX_VALUE), "(int) (Integer.MAX_VALUE >>> Integer.MAX_VALUE)"); + Tester.checkEqual(intLt(Integer.MIN_VALUE, Integer.MIN_VALUE), Integer.MIN_VALUE < Integer.MIN_VALUE, "Integer.MIN_VALUE < Integer.MIN_VALUE"); + Tester.checkEqual(intLt(Integer.MIN_VALUE, -1), Integer.MIN_VALUE < -1, "Integer.MIN_VALUE < -1"); + Tester.checkEqual(intLt(Integer.MIN_VALUE, 0), Integer.MIN_VALUE < 0, "Integer.MIN_VALUE < 0"); + Tester.checkEqual(intLt(Integer.MIN_VALUE, 1), Integer.MIN_VALUE < 1, "Integer.MIN_VALUE < 1"); + Tester.checkEqual(intLt(Integer.MIN_VALUE, Integer.MAX_VALUE), Integer.MIN_VALUE < Integer.MAX_VALUE, "Integer.MIN_VALUE < Integer.MAX_VALUE"); + Tester.checkEqual(intLt(-1, Integer.MIN_VALUE), -1 < Integer.MIN_VALUE, "-1 < Integer.MIN_VALUE"); + Tester.checkEqual(intLt(-1, -1), -1 < -1, "-1 < -1"); + Tester.checkEqual(intLt(-1, 0), -1 < 0, "-1 < 0"); + Tester.checkEqual(intLt(-1, 1), -1 < 1, "-1 < 1"); + Tester.checkEqual(intLt(-1, Integer.MAX_VALUE), -1 < Integer.MAX_VALUE, "-1 < Integer.MAX_VALUE"); + Tester.checkEqual(intLt(0, Integer.MIN_VALUE), 0 < Integer.MIN_VALUE, "0 < Integer.MIN_VALUE"); + Tester.checkEqual(intLt(0, -1), 0 < -1, "0 < -1"); + Tester.checkEqual(intLt(0, 0), 0 < 0, "0 < 0"); + Tester.checkEqual(intLt(0, 1), 0 < 1, "0 < 1"); + Tester.checkEqual(intLt(0, Integer.MAX_VALUE), 0 < Integer.MAX_VALUE, "0 < Integer.MAX_VALUE"); + Tester.checkEqual(intLt(1, Integer.MIN_VALUE), 1 < Integer.MIN_VALUE, "1 < Integer.MIN_VALUE"); + Tester.checkEqual(intLt(1, -1), 1 < -1, "1 < -1"); + Tester.checkEqual(intLt(1, 0), 1 < 0, "1 < 0"); + Tester.checkEqual(intLt(1, 1), 1 < 1, "1 < 1"); + Tester.checkEqual(intLt(1, Integer.MAX_VALUE), 1 < Integer.MAX_VALUE, "1 < Integer.MAX_VALUE"); + Tester.checkEqual(intLt(Integer.MAX_VALUE, Integer.MIN_VALUE), Integer.MAX_VALUE < Integer.MIN_VALUE, "Integer.MAX_VALUE < Integer.MIN_VALUE"); + Tester.checkEqual(intLt(Integer.MAX_VALUE, -1), Integer.MAX_VALUE < -1, "Integer.MAX_VALUE < -1"); + Tester.checkEqual(intLt(Integer.MAX_VALUE, 0), Integer.MAX_VALUE < 0, "Integer.MAX_VALUE < 0"); + Tester.checkEqual(intLt(Integer.MAX_VALUE, 1), Integer.MAX_VALUE < 1, "Integer.MAX_VALUE < 1"); + Tester.checkEqual(intLt(Integer.MAX_VALUE, Integer.MAX_VALUE), Integer.MAX_VALUE < Integer.MAX_VALUE, "Integer.MAX_VALUE < Integer.MAX_VALUE"); + Tester.checkEqual(intGt(Integer.MIN_VALUE, Integer.MIN_VALUE), Integer.MIN_VALUE > Integer.MIN_VALUE, "Integer.MIN_VALUE > Integer.MIN_VALUE"); + Tester.checkEqual(intGt(Integer.MIN_VALUE, -1), Integer.MIN_VALUE > -1, "Integer.MIN_VALUE > -1"); + Tester.checkEqual(intGt(Integer.MIN_VALUE, 0), Integer.MIN_VALUE > 0, "Integer.MIN_VALUE > 0"); + Tester.checkEqual(intGt(Integer.MIN_VALUE, 1), Integer.MIN_VALUE > 1, "Integer.MIN_VALUE > 1"); + Tester.checkEqual(intGt(Integer.MIN_VALUE, Integer.MAX_VALUE), Integer.MIN_VALUE > Integer.MAX_VALUE, "Integer.MIN_VALUE > Integer.MAX_VALUE"); + Tester.checkEqual(intGt(-1, Integer.MIN_VALUE), -1 > Integer.MIN_VALUE, "-1 > Integer.MIN_VALUE"); + Tester.checkEqual(intGt(-1, -1), -1 > -1, "-1 > -1"); + Tester.checkEqual(intGt(-1, 0), -1 > 0, "-1 > 0"); + Tester.checkEqual(intGt(-1, 1), -1 > 1, "-1 > 1"); + Tester.checkEqual(intGt(-1, Integer.MAX_VALUE), -1 > Integer.MAX_VALUE, "-1 > Integer.MAX_VALUE"); + Tester.checkEqual(intGt(0, Integer.MIN_VALUE), 0 > Integer.MIN_VALUE, "0 > Integer.MIN_VALUE"); + Tester.checkEqual(intGt(0, -1), 0 > -1, "0 > -1"); + Tester.checkEqual(intGt(0, 0), 0 > 0, "0 > 0"); + Tester.checkEqual(intGt(0, 1), 0 > 1, "0 > 1"); + Tester.checkEqual(intGt(0, Integer.MAX_VALUE), 0 > Integer.MAX_VALUE, "0 > Integer.MAX_VALUE"); + Tester.checkEqual(intGt(1, Integer.MIN_VALUE), 1 > Integer.MIN_VALUE, "1 > Integer.MIN_VALUE"); + Tester.checkEqual(intGt(1, -1), 1 > -1, "1 > -1"); + Tester.checkEqual(intGt(1, 0), 1 > 0, "1 > 0"); + Tester.checkEqual(intGt(1, 1), 1 > 1, "1 > 1"); + Tester.checkEqual(intGt(1, Integer.MAX_VALUE), 1 > Integer.MAX_VALUE, "1 > Integer.MAX_VALUE"); + Tester.checkEqual(intGt(Integer.MAX_VALUE, Integer.MIN_VALUE), Integer.MAX_VALUE > Integer.MIN_VALUE, "Integer.MAX_VALUE > Integer.MIN_VALUE"); + Tester.checkEqual(intGt(Integer.MAX_VALUE, -1), Integer.MAX_VALUE > -1, "Integer.MAX_VALUE > -1"); + Tester.checkEqual(intGt(Integer.MAX_VALUE, 0), Integer.MAX_VALUE > 0, "Integer.MAX_VALUE > 0"); + Tester.checkEqual(intGt(Integer.MAX_VALUE, 1), Integer.MAX_VALUE > 1, "Integer.MAX_VALUE > 1"); + Tester.checkEqual(intGt(Integer.MAX_VALUE, Integer.MAX_VALUE), Integer.MAX_VALUE > Integer.MAX_VALUE, "Integer.MAX_VALUE > Integer.MAX_VALUE"); + Tester.checkEqual(intLe(Integer.MIN_VALUE, Integer.MIN_VALUE), Integer.MIN_VALUE <= Integer.MIN_VALUE, "Integer.MIN_VALUE <= Integer.MIN_VALUE"); + Tester.checkEqual(intLe(Integer.MIN_VALUE, -1), Integer.MIN_VALUE <= -1, "Integer.MIN_VALUE <= -1"); + Tester.checkEqual(intLe(Integer.MIN_VALUE, 0), Integer.MIN_VALUE <= 0, "Integer.MIN_VALUE <= 0"); + Tester.checkEqual(intLe(Integer.MIN_VALUE, 1), Integer.MIN_VALUE <= 1, "Integer.MIN_VALUE <= 1"); + Tester.checkEqual(intLe(Integer.MIN_VALUE, Integer.MAX_VALUE), Integer.MIN_VALUE <= Integer.MAX_VALUE, "Integer.MIN_VALUE <= Integer.MAX_VALUE"); + Tester.checkEqual(intLe(-1, Integer.MIN_VALUE), -1 <= Integer.MIN_VALUE, "-1 <= Integer.MIN_VALUE"); + Tester.checkEqual(intLe(-1, -1), -1 <= -1, "-1 <= -1"); + Tester.checkEqual(intLe(-1, 0), -1 <= 0, "-1 <= 0"); + Tester.checkEqual(intLe(-1, 1), -1 <= 1, "-1 <= 1"); + Tester.checkEqual(intLe(-1, Integer.MAX_VALUE), -1 <= Integer.MAX_VALUE, "-1 <= Integer.MAX_VALUE"); + Tester.checkEqual(intLe(0, Integer.MIN_VALUE), 0 <= Integer.MIN_VALUE, "0 <= Integer.MIN_VALUE"); + Tester.checkEqual(intLe(0, -1), 0 <= -1, "0 <= -1"); + Tester.checkEqual(intLe(0, 0), 0 <= 0, "0 <= 0"); + Tester.checkEqual(intLe(0, 1), 0 <= 1, "0 <= 1"); + Tester.checkEqual(intLe(0, Integer.MAX_VALUE), 0 <= Integer.MAX_VALUE, "0 <= Integer.MAX_VALUE"); + Tester.checkEqual(intLe(1, Integer.MIN_VALUE), 1 <= Integer.MIN_VALUE, "1 <= Integer.MIN_VALUE"); + Tester.checkEqual(intLe(1, -1), 1 <= -1, "1 <= -1"); + Tester.checkEqual(intLe(1, 0), 1 <= 0, "1 <= 0"); + Tester.checkEqual(intLe(1, 1), 1 <= 1, "1 <= 1"); + Tester.checkEqual(intLe(1, Integer.MAX_VALUE), 1 <= Integer.MAX_VALUE, "1 <= Integer.MAX_VALUE"); + Tester.checkEqual(intLe(Integer.MAX_VALUE, Integer.MIN_VALUE), Integer.MAX_VALUE <= Integer.MIN_VALUE, "Integer.MAX_VALUE <= Integer.MIN_VALUE"); + Tester.checkEqual(intLe(Integer.MAX_VALUE, -1), Integer.MAX_VALUE <= -1, "Integer.MAX_VALUE <= -1"); + Tester.checkEqual(intLe(Integer.MAX_VALUE, 0), Integer.MAX_VALUE <= 0, "Integer.MAX_VALUE <= 0"); + Tester.checkEqual(intLe(Integer.MAX_VALUE, 1), Integer.MAX_VALUE <= 1, "Integer.MAX_VALUE <= 1"); + Tester.checkEqual(intLe(Integer.MAX_VALUE, Integer.MAX_VALUE), Integer.MAX_VALUE <= Integer.MAX_VALUE, "Integer.MAX_VALUE <= Integer.MAX_VALUE"); + Tester.checkEqual(intGe(Integer.MIN_VALUE, Integer.MIN_VALUE), Integer.MIN_VALUE >= Integer.MIN_VALUE, "Integer.MIN_VALUE >= Integer.MIN_VALUE"); + Tester.checkEqual(intGe(Integer.MIN_VALUE, -1), Integer.MIN_VALUE >= -1, "Integer.MIN_VALUE >= -1"); + Tester.checkEqual(intGe(Integer.MIN_VALUE, 0), Integer.MIN_VALUE >= 0, "Integer.MIN_VALUE >= 0"); + Tester.checkEqual(intGe(Integer.MIN_VALUE, 1), Integer.MIN_VALUE >= 1, "Integer.MIN_VALUE >= 1"); + Tester.checkEqual(intGe(Integer.MIN_VALUE, Integer.MAX_VALUE), Integer.MIN_VALUE >= Integer.MAX_VALUE, "Integer.MIN_VALUE >= Integer.MAX_VALUE"); + Tester.checkEqual(intGe(-1, Integer.MIN_VALUE), -1 >= Integer.MIN_VALUE, "-1 >= Integer.MIN_VALUE"); + Tester.checkEqual(intGe(-1, -1), -1 >= -1, "-1 >= -1"); + Tester.checkEqual(intGe(-1, 0), -1 >= 0, "-1 >= 0"); + Tester.checkEqual(intGe(-1, 1), -1 >= 1, "-1 >= 1"); + Tester.checkEqual(intGe(-1, Integer.MAX_VALUE), -1 >= Integer.MAX_VALUE, "-1 >= Integer.MAX_VALUE"); + Tester.checkEqual(intGe(0, Integer.MIN_VALUE), 0 >= Integer.MIN_VALUE, "0 >= Integer.MIN_VALUE"); + Tester.checkEqual(intGe(0, -1), 0 >= -1, "0 >= -1"); + Tester.checkEqual(intGe(0, 0), 0 >= 0, "0 >= 0"); + Tester.checkEqual(intGe(0, 1), 0 >= 1, "0 >= 1"); + Tester.checkEqual(intGe(0, Integer.MAX_VALUE), 0 >= Integer.MAX_VALUE, "0 >= Integer.MAX_VALUE"); + Tester.checkEqual(intGe(1, Integer.MIN_VALUE), 1 >= Integer.MIN_VALUE, "1 >= Integer.MIN_VALUE"); + Tester.checkEqual(intGe(1, -1), 1 >= -1, "1 >= -1"); + Tester.checkEqual(intGe(1, 0), 1 >= 0, "1 >= 0"); + Tester.checkEqual(intGe(1, 1), 1 >= 1, "1 >= 1"); + Tester.checkEqual(intGe(1, Integer.MAX_VALUE), 1 >= Integer.MAX_VALUE, "1 >= Integer.MAX_VALUE"); + Tester.checkEqual(intGe(Integer.MAX_VALUE, Integer.MIN_VALUE), Integer.MAX_VALUE >= Integer.MIN_VALUE, "Integer.MAX_VALUE >= Integer.MIN_VALUE"); + Tester.checkEqual(intGe(Integer.MAX_VALUE, -1), Integer.MAX_VALUE >= -1, "Integer.MAX_VALUE >= -1"); + Tester.checkEqual(intGe(Integer.MAX_VALUE, 0), Integer.MAX_VALUE >= 0, "Integer.MAX_VALUE >= 0"); + Tester.checkEqual(intGe(Integer.MAX_VALUE, 1), Integer.MAX_VALUE >= 1, "Integer.MAX_VALUE >= 1"); + Tester.checkEqual(intGe(Integer.MAX_VALUE, Integer.MAX_VALUE), Integer.MAX_VALUE >= Integer.MAX_VALUE, "Integer.MAX_VALUE >= Integer.MAX_VALUE"); + Tester.checkEqual(intEq(Integer.MIN_VALUE, Integer.MIN_VALUE), Integer.MIN_VALUE == Integer.MIN_VALUE, "Integer.MIN_VALUE == Integer.MIN_VALUE"); + Tester.checkEqual(intEq(Integer.MIN_VALUE, -1), Integer.MIN_VALUE == -1, "Integer.MIN_VALUE == -1"); + Tester.checkEqual(intEq(Integer.MIN_VALUE, 0), Integer.MIN_VALUE == 0, "Integer.MIN_VALUE == 0"); + Tester.checkEqual(intEq(Integer.MIN_VALUE, 1), Integer.MIN_VALUE == 1, "Integer.MIN_VALUE == 1"); + Tester.checkEqual(intEq(Integer.MIN_VALUE, Integer.MAX_VALUE), Integer.MIN_VALUE == Integer.MAX_VALUE, "Integer.MIN_VALUE == Integer.MAX_VALUE"); + Tester.checkEqual(intEq(-1, Integer.MIN_VALUE), -1 == Integer.MIN_VALUE, "-1 == Integer.MIN_VALUE"); + Tester.checkEqual(intEq(-1, -1), -1 == -1, "-1 == -1"); + Tester.checkEqual(intEq(-1, 0), -1 == 0, "-1 == 0"); + Tester.checkEqual(intEq(-1, 1), -1 == 1, "-1 == 1"); + Tester.checkEqual(intEq(-1, Integer.MAX_VALUE), -1 == Integer.MAX_VALUE, "-1 == Integer.MAX_VALUE"); + Tester.checkEqual(intEq(0, Integer.MIN_VALUE), 0 == Integer.MIN_VALUE, "0 == Integer.MIN_VALUE"); + Tester.checkEqual(intEq(0, -1), 0 == -1, "0 == -1"); + Tester.checkEqual(intEq(0, 0), 0 == 0, "0 == 0"); + Tester.checkEqual(intEq(0, 1), 0 == 1, "0 == 1"); + Tester.checkEqual(intEq(0, Integer.MAX_VALUE), 0 == Integer.MAX_VALUE, "0 == Integer.MAX_VALUE"); + Tester.checkEqual(intEq(1, Integer.MIN_VALUE), 1 == Integer.MIN_VALUE, "1 == Integer.MIN_VALUE"); + Tester.checkEqual(intEq(1, -1), 1 == -1, "1 == -1"); + Tester.checkEqual(intEq(1, 0), 1 == 0, "1 == 0"); + Tester.checkEqual(intEq(1, 1), 1 == 1, "1 == 1"); + Tester.checkEqual(intEq(1, Integer.MAX_VALUE), 1 == Integer.MAX_VALUE, "1 == Integer.MAX_VALUE"); + Tester.checkEqual(intEq(Integer.MAX_VALUE, Integer.MIN_VALUE), Integer.MAX_VALUE == Integer.MIN_VALUE, "Integer.MAX_VALUE == Integer.MIN_VALUE"); + Tester.checkEqual(intEq(Integer.MAX_VALUE, -1), Integer.MAX_VALUE == -1, "Integer.MAX_VALUE == -1"); + Tester.checkEqual(intEq(Integer.MAX_VALUE, 0), Integer.MAX_VALUE == 0, "Integer.MAX_VALUE == 0"); + Tester.checkEqual(intEq(Integer.MAX_VALUE, 1), Integer.MAX_VALUE == 1, "Integer.MAX_VALUE == 1"); + Tester.checkEqual(intEq(Integer.MAX_VALUE, Integer.MAX_VALUE), Integer.MAX_VALUE == Integer.MAX_VALUE, "Integer.MAX_VALUE == Integer.MAX_VALUE"); + Tester.checkEqual(intNe(Integer.MIN_VALUE, Integer.MIN_VALUE), Integer.MIN_VALUE != Integer.MIN_VALUE, "Integer.MIN_VALUE != Integer.MIN_VALUE"); + Tester.checkEqual(intNe(Integer.MIN_VALUE, -1), Integer.MIN_VALUE != -1, "Integer.MIN_VALUE != -1"); + Tester.checkEqual(intNe(Integer.MIN_VALUE, 0), Integer.MIN_VALUE != 0, "Integer.MIN_VALUE != 0"); + Tester.checkEqual(intNe(Integer.MIN_VALUE, 1), Integer.MIN_VALUE != 1, "Integer.MIN_VALUE != 1"); + Tester.checkEqual(intNe(Integer.MIN_VALUE, Integer.MAX_VALUE), Integer.MIN_VALUE != Integer.MAX_VALUE, "Integer.MIN_VALUE != Integer.MAX_VALUE"); + Tester.checkEqual(intNe(-1, Integer.MIN_VALUE), -1 != Integer.MIN_VALUE, "-1 != Integer.MIN_VALUE"); + Tester.checkEqual(intNe(-1, -1), -1 != -1, "-1 != -1"); + Tester.checkEqual(intNe(-1, 0), -1 != 0, "-1 != 0"); + Tester.checkEqual(intNe(-1, 1), -1 != 1, "-1 != 1"); + Tester.checkEqual(intNe(-1, Integer.MAX_VALUE), -1 != Integer.MAX_VALUE, "-1 != Integer.MAX_VALUE"); + Tester.checkEqual(intNe(0, Integer.MIN_VALUE), 0 != Integer.MIN_VALUE, "0 != Integer.MIN_VALUE"); + Tester.checkEqual(intNe(0, -1), 0 != -1, "0 != -1"); + Tester.checkEqual(intNe(0, 0), 0 != 0, "0 != 0"); + Tester.checkEqual(intNe(0, 1), 0 != 1, "0 != 1"); + Tester.checkEqual(intNe(0, Integer.MAX_VALUE), 0 != Integer.MAX_VALUE, "0 != Integer.MAX_VALUE"); + Tester.checkEqual(intNe(1, Integer.MIN_VALUE), 1 != Integer.MIN_VALUE, "1 != Integer.MIN_VALUE"); + Tester.checkEqual(intNe(1, -1), 1 != -1, "1 != -1"); + Tester.checkEqual(intNe(1, 0), 1 != 0, "1 != 0"); + Tester.checkEqual(intNe(1, 1), 1 != 1, "1 != 1"); + Tester.checkEqual(intNe(1, Integer.MAX_VALUE), 1 != Integer.MAX_VALUE, "1 != Integer.MAX_VALUE"); + Tester.checkEqual(intNe(Integer.MAX_VALUE, Integer.MIN_VALUE), Integer.MAX_VALUE != Integer.MIN_VALUE, "Integer.MAX_VALUE != Integer.MIN_VALUE"); + Tester.checkEqual(intNe(Integer.MAX_VALUE, -1), Integer.MAX_VALUE != -1, "Integer.MAX_VALUE != -1"); + Tester.checkEqual(intNe(Integer.MAX_VALUE, 0), Integer.MAX_VALUE != 0, "Integer.MAX_VALUE != 0"); + Tester.checkEqual(intNe(Integer.MAX_VALUE, 1), Integer.MAX_VALUE != 1, "Integer.MAX_VALUE != 1"); + Tester.checkEqual(intNe(Integer.MAX_VALUE, Integer.MAX_VALUE), Integer.MAX_VALUE != Integer.MAX_VALUE, "Integer.MAX_VALUE != Integer.MAX_VALUE"); + Tester.checkEqual(intAnd(Integer.MIN_VALUE, Integer.MIN_VALUE), (int) (Integer.MIN_VALUE & Integer.MIN_VALUE), "(int) (Integer.MIN_VALUE & Integer.MIN_VALUE)"); + Tester.checkEqual(intAnd(Integer.MIN_VALUE, -1), (int) (Integer.MIN_VALUE & -1), "(int) (Integer.MIN_VALUE & -1)"); + Tester.checkEqual(intAnd(Integer.MIN_VALUE, 0), (int) (Integer.MIN_VALUE & 0), "(int) (Integer.MIN_VALUE & 0)"); + Tester.checkEqual(intAnd(Integer.MIN_VALUE, 1), (int) (Integer.MIN_VALUE & 1), "(int) (Integer.MIN_VALUE & 1)"); + Tester.checkEqual(intAnd(Integer.MIN_VALUE, Integer.MAX_VALUE), (int) (Integer.MIN_VALUE & Integer.MAX_VALUE), "(int) (Integer.MIN_VALUE & Integer.MAX_VALUE)"); + Tester.checkEqual(intAnd(-1, Integer.MIN_VALUE), (int) (-1 & Integer.MIN_VALUE), "(int) (-1 & Integer.MIN_VALUE)"); + Tester.checkEqual(intAnd(-1, -1), (int) (-1 & -1), "(int) (-1 & -1)"); + Tester.checkEqual(intAnd(-1, 0), (int) (-1 & 0), "(int) (-1 & 0)"); + Tester.checkEqual(intAnd(-1, 1), (int) (-1 & 1), "(int) (-1 & 1)"); + Tester.checkEqual(intAnd(-1, Integer.MAX_VALUE), (int) (-1 & Integer.MAX_VALUE), "(int) (-1 & Integer.MAX_VALUE)"); + Tester.checkEqual(intAnd(0, Integer.MIN_VALUE), (int) (0 & Integer.MIN_VALUE), "(int) (0 & Integer.MIN_VALUE)"); + Tester.checkEqual(intAnd(0, -1), (int) (0 & -1), "(int) (0 & -1)"); + Tester.checkEqual(intAnd(0, 0), (int) (0 & 0), "(int) (0 & 0)"); + Tester.checkEqual(intAnd(0, 1), (int) (0 & 1), "(int) (0 & 1)"); + Tester.checkEqual(intAnd(0, Integer.MAX_VALUE), (int) (0 & Integer.MAX_VALUE), "(int) (0 & Integer.MAX_VALUE)"); + Tester.checkEqual(intAnd(1, Integer.MIN_VALUE), (int) (1 & Integer.MIN_VALUE), "(int) (1 & Integer.MIN_VALUE)"); + Tester.checkEqual(intAnd(1, -1), (int) (1 & -1), "(int) (1 & -1)"); + Tester.checkEqual(intAnd(1, 0), (int) (1 & 0), "(int) (1 & 0)"); + Tester.checkEqual(intAnd(1, 1), (int) (1 & 1), "(int) (1 & 1)"); + Tester.checkEqual(intAnd(1, Integer.MAX_VALUE), (int) (1 & Integer.MAX_VALUE), "(int) (1 & Integer.MAX_VALUE)"); + Tester.checkEqual(intAnd(Integer.MAX_VALUE, Integer.MIN_VALUE), (int) (Integer.MAX_VALUE & Integer.MIN_VALUE), "(int) (Integer.MAX_VALUE & Integer.MIN_VALUE)"); + Tester.checkEqual(intAnd(Integer.MAX_VALUE, -1), (int) (Integer.MAX_VALUE & -1), "(int) (Integer.MAX_VALUE & -1)"); + Tester.checkEqual(intAnd(Integer.MAX_VALUE, 0), (int) (Integer.MAX_VALUE & 0), "(int) (Integer.MAX_VALUE & 0)"); + Tester.checkEqual(intAnd(Integer.MAX_VALUE, 1), (int) (Integer.MAX_VALUE & 1), "(int) (Integer.MAX_VALUE & 1)"); + Tester.checkEqual(intAnd(Integer.MAX_VALUE, Integer.MAX_VALUE), (int) (Integer.MAX_VALUE & Integer.MAX_VALUE), "(int) (Integer.MAX_VALUE & Integer.MAX_VALUE)"); + Tester.checkEqual(intXor(Integer.MIN_VALUE, Integer.MIN_VALUE), (int) (Integer.MIN_VALUE ^ Integer.MIN_VALUE), "(int) (Integer.MIN_VALUE ^ Integer.MIN_VALUE)"); + Tester.checkEqual(intXor(Integer.MIN_VALUE, -1), (int) (Integer.MIN_VALUE ^ -1), "(int) (Integer.MIN_VALUE ^ -1)"); + Tester.checkEqual(intXor(Integer.MIN_VALUE, 0), (int) (Integer.MIN_VALUE ^ 0), "(int) (Integer.MIN_VALUE ^ 0)"); + Tester.checkEqual(intXor(Integer.MIN_VALUE, 1), (int) (Integer.MIN_VALUE ^ 1), "(int) (Integer.MIN_VALUE ^ 1)"); + Tester.checkEqual(intXor(Integer.MIN_VALUE, Integer.MAX_VALUE), (int) (Integer.MIN_VALUE ^ Integer.MAX_VALUE), "(int) (Integer.MIN_VALUE ^ Integer.MAX_VALUE)"); + Tester.checkEqual(intXor(-1, Integer.MIN_VALUE), (int) (-1 ^ Integer.MIN_VALUE), "(int) (-1 ^ Integer.MIN_VALUE)"); + Tester.checkEqual(intXor(-1, -1), (int) (-1 ^ -1), "(int) (-1 ^ -1)"); + Tester.checkEqual(intXor(-1, 0), (int) (-1 ^ 0), "(int) (-1 ^ 0)"); + Tester.checkEqual(intXor(-1, 1), (int) (-1 ^ 1), "(int) (-1 ^ 1)"); + Tester.checkEqual(intXor(-1, Integer.MAX_VALUE), (int) (-1 ^ Integer.MAX_VALUE), "(int) (-1 ^ Integer.MAX_VALUE)"); + Tester.checkEqual(intXor(0, Integer.MIN_VALUE), (int) (0 ^ Integer.MIN_VALUE), "(int) (0 ^ Integer.MIN_VALUE)"); + Tester.checkEqual(intXor(0, -1), (int) (0 ^ -1), "(int) (0 ^ -1)"); + Tester.checkEqual(intXor(0, 0), (int) (0 ^ 0), "(int) (0 ^ 0)"); + Tester.checkEqual(intXor(0, 1), (int) (0 ^ 1), "(int) (0 ^ 1)"); + Tester.checkEqual(intXor(0, Integer.MAX_VALUE), (int) (0 ^ Integer.MAX_VALUE), "(int) (0 ^ Integer.MAX_VALUE)"); + Tester.checkEqual(intXor(1, Integer.MIN_VALUE), (int) (1 ^ Integer.MIN_VALUE), "(int) (1 ^ Integer.MIN_VALUE)"); + Tester.checkEqual(intXor(1, -1), (int) (1 ^ -1), "(int) (1 ^ -1)"); + Tester.checkEqual(intXor(1, 0), (int) (1 ^ 0), "(int) (1 ^ 0)"); + Tester.checkEqual(intXor(1, 1), (int) (1 ^ 1), "(int) (1 ^ 1)"); + Tester.checkEqual(intXor(1, Integer.MAX_VALUE), (int) (1 ^ Integer.MAX_VALUE), "(int) (1 ^ Integer.MAX_VALUE)"); + Tester.checkEqual(intXor(Integer.MAX_VALUE, Integer.MIN_VALUE), (int) (Integer.MAX_VALUE ^ Integer.MIN_VALUE), "(int) (Integer.MAX_VALUE ^ Integer.MIN_VALUE)"); + Tester.checkEqual(intXor(Integer.MAX_VALUE, -1), (int) (Integer.MAX_VALUE ^ -1), "(int) (Integer.MAX_VALUE ^ -1)"); + Tester.checkEqual(intXor(Integer.MAX_VALUE, 0), (int) (Integer.MAX_VALUE ^ 0), "(int) (Integer.MAX_VALUE ^ 0)"); + Tester.checkEqual(intXor(Integer.MAX_VALUE, 1), (int) (Integer.MAX_VALUE ^ 1), "(int) (Integer.MAX_VALUE ^ 1)"); + Tester.checkEqual(intXor(Integer.MAX_VALUE, Integer.MAX_VALUE), (int) (Integer.MAX_VALUE ^ Integer.MAX_VALUE), "(int) (Integer.MAX_VALUE ^ Integer.MAX_VALUE)"); + Tester.checkEqual(intOr(Integer.MIN_VALUE, Integer.MIN_VALUE), (int) (Integer.MIN_VALUE | Integer.MIN_VALUE), "(int) (Integer.MIN_VALUE | Integer.MIN_VALUE)"); + Tester.checkEqual(intOr(Integer.MIN_VALUE, -1), (int) (Integer.MIN_VALUE | -1), "(int) (Integer.MIN_VALUE | -1)"); + Tester.checkEqual(intOr(Integer.MIN_VALUE, 0), (int) (Integer.MIN_VALUE | 0), "(int) (Integer.MIN_VALUE | 0)"); + Tester.checkEqual(intOr(Integer.MIN_VALUE, 1), (int) (Integer.MIN_VALUE | 1), "(int) (Integer.MIN_VALUE | 1)"); + Tester.checkEqual(intOr(Integer.MIN_VALUE, Integer.MAX_VALUE), (int) (Integer.MIN_VALUE | Integer.MAX_VALUE), "(int) (Integer.MIN_VALUE | Integer.MAX_VALUE)"); + Tester.checkEqual(intOr(-1, Integer.MIN_VALUE), (int) (-1 | Integer.MIN_VALUE), "(int) (-1 | Integer.MIN_VALUE)"); + Tester.checkEqual(intOr(-1, -1), (int) (-1 | -1), "(int) (-1 | -1)"); + Tester.checkEqual(intOr(-1, 0), (int) (-1 | 0), "(int) (-1 | 0)"); + Tester.checkEqual(intOr(-1, 1), (int) (-1 | 1), "(int) (-1 | 1)"); + Tester.checkEqual(intOr(-1, Integer.MAX_VALUE), (int) (-1 | Integer.MAX_VALUE), "(int) (-1 | Integer.MAX_VALUE)"); + Tester.checkEqual(intOr(0, Integer.MIN_VALUE), (int) (0 | Integer.MIN_VALUE), "(int) (0 | Integer.MIN_VALUE)"); + Tester.checkEqual(intOr(0, -1), (int) (0 | -1), "(int) (0 | -1)"); + Tester.checkEqual(intOr(0, 0), (int) (0 | 0), "(int) (0 | 0)"); + Tester.checkEqual(intOr(0, 1), (int) (0 | 1), "(int) (0 | 1)"); + Tester.checkEqual(intOr(0, Integer.MAX_VALUE), (int) (0 | Integer.MAX_VALUE), "(int) (0 | Integer.MAX_VALUE)"); + Tester.checkEqual(intOr(1, Integer.MIN_VALUE), (int) (1 | Integer.MIN_VALUE), "(int) (1 | Integer.MIN_VALUE)"); + Tester.checkEqual(intOr(1, -1), (int) (1 | -1), "(int) (1 | -1)"); + Tester.checkEqual(intOr(1, 0), (int) (1 | 0), "(int) (1 | 0)"); + Tester.checkEqual(intOr(1, 1), (int) (1 | 1), "(int) (1 | 1)"); + Tester.checkEqual(intOr(1, Integer.MAX_VALUE), (int) (1 | Integer.MAX_VALUE), "(int) (1 | Integer.MAX_VALUE)"); + Tester.checkEqual(intOr(Integer.MAX_VALUE, Integer.MIN_VALUE), (int) (Integer.MAX_VALUE | Integer.MIN_VALUE), "(int) (Integer.MAX_VALUE | Integer.MIN_VALUE)"); + Tester.checkEqual(intOr(Integer.MAX_VALUE, -1), (int) (Integer.MAX_VALUE | -1), "(int) (Integer.MAX_VALUE | -1)"); + Tester.checkEqual(intOr(Integer.MAX_VALUE, 0), (int) (Integer.MAX_VALUE | 0), "(int) (Integer.MAX_VALUE | 0)"); + Tester.checkEqual(intOr(Integer.MAX_VALUE, 1), (int) (Integer.MAX_VALUE | 1), "(int) (Integer.MAX_VALUE | 1)"); + Tester.checkEqual(intOr(Integer.MAX_VALUE, Integer.MAX_VALUE), (int) (Integer.MAX_VALUE | Integer.MAX_VALUE), "(int) (Integer.MAX_VALUE | Integer.MAX_VALUE)"); + } + static void intSwitch() { + switch(0) { + case ((((int) + Integer.MIN_VALUE) == 0) ? 0 : 0): + case ((((int) + -1) == 0) ? 1 : 1): + case ((((int) + 0) == 0) ? 2 : 2): + case ((((int) + 1) == 0) ? 3 : 3): + case ((((int) + Integer.MAX_VALUE) == 0) ? 4 : 4): + case ((((int) - Integer.MIN_VALUE) == 0) ? 5 : 5): + case ((((int) - -1) == 0) ? 6 : 6): + case ((((int) - 0) == 0) ? 7 : 7): + case ((((int) - 1) == 0) ? 8 : 8): + case ((((int) - Integer.MAX_VALUE) == 0) ? 9 : 9): + case ((((int) ~ Integer.MIN_VALUE) == 0) ? 10 : 10): + case ((((int) ~ -1) == 0) ? 11 : 11): + case ((((int) ~ 0) == 0) ? 12 : 12): + case ((((int) ~ 1) == 0) ? 13 : 13): + case ((((int) ~ Integer.MAX_VALUE) == 0) ? 14 : 14): + case ((((int) (Integer.MIN_VALUE * Integer.MIN_VALUE)) == 0) ? 15 : 15): + case ((((int) (Integer.MIN_VALUE * -1)) == 0) ? 16 : 16): + case ((((int) (Integer.MIN_VALUE * 0)) == 0) ? 17 : 17): + case ((((int) (Integer.MIN_VALUE * 1)) == 0) ? 18 : 18): + case ((((int) (Integer.MIN_VALUE * Integer.MAX_VALUE)) == 0) ? 19 : 19): + case ((((int) (-1 * Integer.MIN_VALUE)) == 0) ? 20 : 20): + case ((((int) (-1 * -1)) == 0) ? 21 : 21): + case ((((int) (-1 * 0)) == 0) ? 22 : 22): + case ((((int) (-1 * 1)) == 0) ? 23 : 23): + case ((((int) (-1 * Integer.MAX_VALUE)) == 0) ? 24 : 24): + case ((((int) (0 * Integer.MIN_VALUE)) == 0) ? 25 : 25): + case ((((int) (0 * -1)) == 0) ? 26 : 26): + case ((((int) (0 * 0)) == 0) ? 27 : 27): + case ((((int) (0 * 1)) == 0) ? 28 : 28): + case ((((int) (0 * Integer.MAX_VALUE)) == 0) ? 29 : 29): + case ((((int) (1 * Integer.MIN_VALUE)) == 0) ? 30 : 30): + case ((((int) (1 * -1)) == 0) ? 31 : 31): + case ((((int) (1 * 0)) == 0) ? 32 : 32): + case ((((int) (1 * 1)) == 0) ? 33 : 33): + case ((((int) (1 * Integer.MAX_VALUE)) == 0) ? 34 : 34): + case ((((int) (Integer.MAX_VALUE * Integer.MIN_VALUE)) == 0) ? 35 : 35): + case ((((int) (Integer.MAX_VALUE * -1)) == 0) ? 36 : 36): + case ((((int) (Integer.MAX_VALUE * 0)) == 0) ? 37 : 37): + case ((((int) (Integer.MAX_VALUE * 1)) == 0) ? 38 : 38): + case ((((int) (Integer.MAX_VALUE * Integer.MAX_VALUE)) == 0) ? 39 : 39): + case ((((int) (Integer.MIN_VALUE / Integer.MIN_VALUE)) == 0) ? 40 : 40): + case ((((int) (Integer.MIN_VALUE / -1)) == 0) ? 41 : 41): + case ((((int) (Integer.MIN_VALUE / 1)) == 0) ? 42 : 42): + case ((((int) (Integer.MIN_VALUE / Integer.MAX_VALUE)) == 0) ? 43 : 43): + case ((((int) (-1 / Integer.MIN_VALUE)) == 0) ? 44 : 44): + case ((((int) (-1 / -1)) == 0) ? 45 : 45): + case ((((int) (-1 / 1)) == 0) ? 46 : 46): + case ((((int) (-1 / Integer.MAX_VALUE)) == 0) ? 47 : 47): + case ((((int) (0 / Integer.MIN_VALUE)) == 0) ? 48 : 48): + case ((((int) (0 / -1)) == 0) ? 49 : 49): + case ((((int) (0 / 1)) == 0) ? 50 : 50): + case ((((int) (0 / Integer.MAX_VALUE)) == 0) ? 51 : 51): + case ((((int) (1 / Integer.MIN_VALUE)) == 0) ? 52 : 52): + case ((((int) (1 / -1)) == 0) ? 53 : 53): + case ((((int) (1 / 1)) == 0) ? 54 : 54): + case ((((int) (1 / Integer.MAX_VALUE)) == 0) ? 55 : 55): + case ((((int) (Integer.MAX_VALUE / Integer.MIN_VALUE)) == 0) ? 56 : 56): + case ((((int) (Integer.MAX_VALUE / -1)) == 0) ? 57 : 57): + case ((((int) (Integer.MAX_VALUE / 1)) == 0) ? 58 : 58): + case ((((int) (Integer.MAX_VALUE / Integer.MAX_VALUE)) == 0) ? 59 : 59): + case ((((int) (Integer.MIN_VALUE % Integer.MIN_VALUE)) == 0) ? 60 : 60): + case ((((int) (Integer.MIN_VALUE % -1)) == 0) ? 61 : 61): + case ((((int) (Integer.MIN_VALUE % 1)) == 0) ? 62 : 62): + case ((((int) (Integer.MIN_VALUE % Integer.MAX_VALUE)) == 0) ? 63 : 63): + case ((((int) (-1 % Integer.MIN_VALUE)) == 0) ? 64 : 64): + case ((((int) (-1 % -1)) == 0) ? 65 : 65): + case ((((int) (-1 % 1)) == 0) ? 66 : 66): + case ((((int) (-1 % Integer.MAX_VALUE)) == 0) ? 67 : 67): + case ((((int) (0 % Integer.MIN_VALUE)) == 0) ? 68 : 68): + case ((((int) (0 % -1)) == 0) ? 69 : 69): + case ((((int) (0 % 1)) == 0) ? 70 : 70): + case ((((int) (0 % Integer.MAX_VALUE)) == 0) ? 71 : 71): + case ((((int) (1 % Integer.MIN_VALUE)) == 0) ? 72 : 72): + case ((((int) (1 % -1)) == 0) ? 73 : 73): + case ((((int) (1 % 1)) == 0) ? 74 : 74): + case ((((int) (1 % Integer.MAX_VALUE)) == 0) ? 75 : 75): + case ((((int) (Integer.MAX_VALUE % Integer.MIN_VALUE)) == 0) ? 76 : 76): + case ((((int) (Integer.MAX_VALUE % -1)) == 0) ? 77 : 77): + case ((((int) (Integer.MAX_VALUE % 1)) == 0) ? 78 : 78): + case ((((int) (Integer.MAX_VALUE % Integer.MAX_VALUE)) == 0) ? 79 : 79): + case ((((int) (Integer.MIN_VALUE + Integer.MIN_VALUE)) == 0) ? 80 : 80): + case ((((int) (Integer.MIN_VALUE + -1)) == 0) ? 81 : 81): + case ((((int) (Integer.MIN_VALUE + 0)) == 0) ? 82 : 82): + case ((((int) (Integer.MIN_VALUE + 1)) == 0) ? 83 : 83): + case ((((int) (Integer.MIN_VALUE + Integer.MAX_VALUE)) == 0) ? 84 : 84): + case ((((int) (-1 + Integer.MIN_VALUE)) == 0) ? 85 : 85): + case ((((int) (-1 + -1)) == 0) ? 86 : 86): + case ((((int) (-1 + 0)) == 0) ? 87 : 87): + case ((((int) (-1 + 1)) == 0) ? 88 : 88): + case ((((int) (-1 + Integer.MAX_VALUE)) == 0) ? 89 : 89): + case ((((int) (0 + Integer.MIN_VALUE)) == 0) ? 90 : 90): + case ((((int) (0 + -1)) == 0) ? 91 : 91): + case ((((int) (0 + 0)) == 0) ? 92 : 92): + case ((((int) (0 + 1)) == 0) ? 93 : 93): + case ((((int) (0 + Integer.MAX_VALUE)) == 0) ? 94 : 94): + case ((((int) (1 + Integer.MIN_VALUE)) == 0) ? 95 : 95): + case ((((int) (1 + -1)) == 0) ? 96 : 96): + case ((((int) (1 + 0)) == 0) ? 97 : 97): + case ((((int) (1 + 1)) == 0) ? 98 : 98): + case ((((int) (1 + Integer.MAX_VALUE)) == 0) ? 99 : 99): + case ((((int) (Integer.MAX_VALUE + Integer.MIN_VALUE)) == 0) ? 100 : 100): + case ((((int) (Integer.MAX_VALUE + -1)) == 0) ? 101 : 101): + case ((((int) (Integer.MAX_VALUE + 0)) == 0) ? 102 : 102): + case ((((int) (Integer.MAX_VALUE + 1)) == 0) ? 103 : 103): + case ((((int) (Integer.MAX_VALUE + Integer.MAX_VALUE)) == 0) ? 104 : 104): + case ((((int) (Integer.MIN_VALUE - Integer.MIN_VALUE)) == 0) ? 105 : 105): + case ((((int) (Integer.MIN_VALUE - -1)) == 0) ? 106 : 106): + case ((((int) (Integer.MIN_VALUE - 0)) == 0) ? 107 : 107): + case ((((int) (Integer.MIN_VALUE - 1)) == 0) ? 108 : 108): + case ((((int) (Integer.MIN_VALUE - Integer.MAX_VALUE)) == 0) ? 109 : 109): + case ((((int) (-1 - Integer.MIN_VALUE)) == 0) ? 110 : 110): + case ((((int) (-1 - -1)) == 0) ? 111 : 111): + case ((((int) (-1 - 0)) == 0) ? 112 : 112): + case ((((int) (-1 - 1)) == 0) ? 113 : 113): + case ((((int) (-1 - Integer.MAX_VALUE)) == 0) ? 114 : 114): + case ((((int) (0 - Integer.MIN_VALUE)) == 0) ? 115 : 115): + case ((((int) (0 - -1)) == 0) ? 116 : 116): + case ((((int) (0 - 0)) == 0) ? 117 : 117): + case ((((int) (0 - 1)) == 0) ? 118 : 118): + case ((((int) (0 - Integer.MAX_VALUE)) == 0) ? 119 : 119): + case ((((int) (1 - Integer.MIN_VALUE)) == 0) ? 120 : 120): + case ((((int) (1 - -1)) == 0) ? 121 : 121): + case ((((int) (1 - 0)) == 0) ? 122 : 122): + case ((((int) (1 - 1)) == 0) ? 123 : 123): + case ((((int) (1 - Integer.MAX_VALUE)) == 0) ? 124 : 124): + case ((((int) (Integer.MAX_VALUE - Integer.MIN_VALUE)) == 0) ? 125 : 125): + case ((((int) (Integer.MAX_VALUE - -1)) == 0) ? 126 : 126): + case ((((int) (Integer.MAX_VALUE - 0)) == 0) ? 127 : 127): + case ((((int) (Integer.MAX_VALUE - 1)) == 0) ? 128 : 128): + case ((((int) (Integer.MAX_VALUE - Integer.MAX_VALUE)) == 0) ? 129 : 129): + case ((((int) (Integer.MIN_VALUE << Integer.MIN_VALUE)) == 0) ? 130 : 130): + case ((((int) (Integer.MIN_VALUE << -1)) == 0) ? 131 : 131): + case ((((int) (Integer.MIN_VALUE << 0)) == 0) ? 132 : 132): + case ((((int) (Integer.MIN_VALUE << 1)) == 0) ? 133 : 133): + case ((((int) (Integer.MIN_VALUE << Integer.MAX_VALUE)) == 0) ? 134 : 134): + case ((((int) (-1 << Integer.MIN_VALUE)) == 0) ? 135 : 135): + case ((((int) (-1 << -1)) == 0) ? 136 : 136): + case ((((int) (-1 << 0)) == 0) ? 137 : 137): + case ((((int) (-1 << 1)) == 0) ? 138 : 138): + case ((((int) (-1 << Integer.MAX_VALUE)) == 0) ? 139 : 139): + case ((((int) (0 << Integer.MIN_VALUE)) == 0) ? 140 : 140): + case ((((int) (0 << -1)) == 0) ? 141 : 141): + case ((((int) (0 << 0)) == 0) ? 142 : 142): + case ((((int) (0 << 1)) == 0) ? 143 : 143): + case ((((int) (0 << Integer.MAX_VALUE)) == 0) ? 144 : 144): + case ((((int) (1 << Integer.MIN_VALUE)) == 0) ? 145 : 145): + case ((((int) (1 << -1)) == 0) ? 146 : 146): + case ((((int) (1 << 0)) == 0) ? 147 : 147): + case ((((int) (1 << 1)) == 0) ? 148 : 148): + case ((((int) (1 << Integer.MAX_VALUE)) == 0) ? 149 : 149): + case ((((int) (Integer.MAX_VALUE << Integer.MIN_VALUE)) == 0) ? 150 : 150): + case ((((int) (Integer.MAX_VALUE << -1)) == 0) ? 151 : 151): + case ((((int) (Integer.MAX_VALUE << 0)) == 0) ? 152 : 152): + case ((((int) (Integer.MAX_VALUE << 1)) == 0) ? 153 : 153): + case ((((int) (Integer.MAX_VALUE << Integer.MAX_VALUE)) == 0) ? 154 : 154): + case ((((int) (Integer.MIN_VALUE >> Integer.MIN_VALUE)) == 0) ? 155 : 155): + case ((((int) (Integer.MIN_VALUE >> -1)) == 0) ? 156 : 156): + case ((((int) (Integer.MIN_VALUE >> 0)) == 0) ? 157 : 157): + case ((((int) (Integer.MIN_VALUE >> 1)) == 0) ? 158 : 158): + case ((((int) (Integer.MIN_VALUE >> Integer.MAX_VALUE)) == 0) ? 159 : 159): + case ((((int) (-1 >> Integer.MIN_VALUE)) == 0) ? 160 : 160): + case ((((int) (-1 >> -1)) == 0) ? 161 : 161): + case ((((int) (-1 >> 0)) == 0) ? 162 : 162): + case ((((int) (-1 >> 1)) == 0) ? 163 : 163): + case ((((int) (-1 >> Integer.MAX_VALUE)) == 0) ? 164 : 164): + case ((((int) (0 >> Integer.MIN_VALUE)) == 0) ? 165 : 165): + case ((((int) (0 >> -1)) == 0) ? 166 : 166): + case ((((int) (0 >> 0)) == 0) ? 167 : 167): + case ((((int) (0 >> 1)) == 0) ? 168 : 168): + case ((((int) (0 >> Integer.MAX_VALUE)) == 0) ? 169 : 169): + case ((((int) (1 >> Integer.MIN_VALUE)) == 0) ? 170 : 170): + case ((((int) (1 >> -1)) == 0) ? 171 : 171): + case ((((int) (1 >> 0)) == 0) ? 172 : 172): + case ((((int) (1 >> 1)) == 0) ? 173 : 173): + case ((((int) (1 >> Integer.MAX_VALUE)) == 0) ? 174 : 174): + case ((((int) (Integer.MAX_VALUE >> Integer.MIN_VALUE)) == 0) ? 175 : 175): + case ((((int) (Integer.MAX_VALUE >> -1)) == 0) ? 176 : 176): + case ((((int) (Integer.MAX_VALUE >> 0)) == 0) ? 177 : 177): + case ((((int) (Integer.MAX_VALUE >> 1)) == 0) ? 178 : 178): + case ((((int) (Integer.MAX_VALUE >> Integer.MAX_VALUE)) == 0) ? 179 : 179): + case ((((int) (Integer.MIN_VALUE >>> Integer.MIN_VALUE)) == 0) ? 180 : 180): + case ((((int) (Integer.MIN_VALUE >>> -1)) == 0) ? 181 : 181): + case ((((int) (Integer.MIN_VALUE >>> 0)) == 0) ? 182 : 182): + case ((((int) (Integer.MIN_VALUE >>> 1)) == 0) ? 183 : 183): + case ((((int) (Integer.MIN_VALUE >>> Integer.MAX_VALUE)) == 0) ? 184 : 184): + case ((((int) (-1 >>> Integer.MIN_VALUE)) == 0) ? 185 : 185): + case ((((int) (-1 >>> -1)) == 0) ? 186 : 186): + case ((((int) (-1 >>> 0)) == 0) ? 187 : 187): + case ((((int) (-1 >>> 1)) == 0) ? 188 : 188): + case ((((int) (-1 >>> Integer.MAX_VALUE)) == 0) ? 189 : 189): + case ((((int) (0 >>> Integer.MIN_VALUE)) == 0) ? 190 : 190): + case ((((int) (0 >>> -1)) == 0) ? 191 : 191): + case ((((int) (0 >>> 0)) == 0) ? 192 : 192): + case ((((int) (0 >>> 1)) == 0) ? 193 : 193): + case ((((int) (0 >>> Integer.MAX_VALUE)) == 0) ? 194 : 194): + case ((((int) (1 >>> Integer.MIN_VALUE)) == 0) ? 195 : 195): + case ((((int) (1 >>> -1)) == 0) ? 196 : 196): + case ((((int) (1 >>> 0)) == 0) ? 197 : 197): + case ((((int) (1 >>> 1)) == 0) ? 198 : 198): + case ((((int) (1 >>> Integer.MAX_VALUE)) == 0) ? 199 : 199): + case ((((int) (Integer.MAX_VALUE >>> Integer.MIN_VALUE)) == 0) ? 200 : 200): + case ((((int) (Integer.MAX_VALUE >>> -1)) == 0) ? 201 : 201): + case ((((int) (Integer.MAX_VALUE >>> 0)) == 0) ? 202 : 202): + case ((((int) (Integer.MAX_VALUE >>> 1)) == 0) ? 203 : 203): + case ((((int) (Integer.MAX_VALUE >>> Integer.MAX_VALUE)) == 0) ? 204 : 204): + case ((Integer.MIN_VALUE < Integer.MIN_VALUE) ? 205 : 205): + case ((Integer.MIN_VALUE < -1) ? 206 : 206): + case ((Integer.MIN_VALUE < 0) ? 207 : 207): + case ((Integer.MIN_VALUE < 1) ? 208 : 208): + case ((Integer.MIN_VALUE < Integer.MAX_VALUE) ? 209 : 209): + case ((-1 < Integer.MIN_VALUE) ? 210 : 210): + case ((-1 < -1) ? 211 : 211): + case ((-1 < 0) ? 212 : 212): + case ((-1 < 1) ? 213 : 213): + case ((-1 < Integer.MAX_VALUE) ? 214 : 214): + case ((0 < Integer.MIN_VALUE) ? 215 : 215): + case ((0 < -1) ? 216 : 216): + case ((0 < 0) ? 217 : 217): + case ((0 < 1) ? 218 : 218): + case ((0 < Integer.MAX_VALUE) ? 219 : 219): + case ((1 < Integer.MIN_VALUE) ? 220 : 220): + case ((1 < -1) ? 221 : 221): + case ((1 < 0) ? 222 : 222): + case ((1 < 1) ? 223 : 223): + case ((1 < Integer.MAX_VALUE) ? 224 : 224): + case ((Integer.MAX_VALUE < Integer.MIN_VALUE) ? 225 : 225): + case ((Integer.MAX_VALUE < -1) ? 226 : 226): + case ((Integer.MAX_VALUE < 0) ? 227 : 227): + case ((Integer.MAX_VALUE < 1) ? 228 : 228): + case ((Integer.MAX_VALUE < Integer.MAX_VALUE) ? 229 : 229): + case ((Integer.MIN_VALUE > Integer.MIN_VALUE) ? 230 : 230): + case ((Integer.MIN_VALUE > -1) ? 231 : 231): + case ((Integer.MIN_VALUE > 0) ? 232 : 232): + case ((Integer.MIN_VALUE > 1) ? 233 : 233): + case ((Integer.MIN_VALUE > Integer.MAX_VALUE) ? 234 : 234): + case ((-1 > Integer.MIN_VALUE) ? 235 : 235): + case ((-1 > -1) ? 236 : 236): + case ((-1 > 0) ? 237 : 237): + case ((-1 > 1) ? 238 : 238): + case ((-1 > Integer.MAX_VALUE) ? 239 : 239): + case ((0 > Integer.MIN_VALUE) ? 240 : 240): + case ((0 > -1) ? 241 : 241): + case ((0 > 0) ? 242 : 242): + case ((0 > 1) ? 243 : 243): + case ((0 > Integer.MAX_VALUE) ? 244 : 244): + case ((1 > Integer.MIN_VALUE) ? 245 : 245): + case ((1 > -1) ? 246 : 246): + case ((1 > 0) ? 247 : 247): + case ((1 > 1) ? 248 : 248): + case ((1 > Integer.MAX_VALUE) ? 249 : 249): + case ((Integer.MAX_VALUE > Integer.MIN_VALUE) ? 250 : 250): + case ((Integer.MAX_VALUE > -1) ? 251 : 251): + case ((Integer.MAX_VALUE > 0) ? 252 : 252): + case ((Integer.MAX_VALUE > 1) ? 253 : 253): + case ((Integer.MAX_VALUE > Integer.MAX_VALUE) ? 254 : 254): + case ((Integer.MIN_VALUE <= Integer.MIN_VALUE) ? 255 : 255): + case ((Integer.MIN_VALUE <= -1) ? 256 : 256): + case ((Integer.MIN_VALUE <= 0) ? 257 : 257): + case ((Integer.MIN_VALUE <= 1) ? 258 : 258): + case ((Integer.MIN_VALUE <= Integer.MAX_VALUE) ? 259 : 259): + case ((-1 <= Integer.MIN_VALUE) ? 260 : 260): + case ((-1 <= -1) ? 261 : 261): + case ((-1 <= 0) ? 262 : 262): + case ((-1 <= 1) ? 263 : 263): + case ((-1 <= Integer.MAX_VALUE) ? 264 : 264): + case ((0 <= Integer.MIN_VALUE) ? 265 : 265): + case ((0 <= -1) ? 266 : 266): + case ((0 <= 0) ? 267 : 267): + case ((0 <= 1) ? 268 : 268): + case ((0 <= Integer.MAX_VALUE) ? 269 : 269): + case ((1 <= Integer.MIN_VALUE) ? 270 : 270): + case ((1 <= -1) ? 271 : 271): + case ((1 <= 0) ? 272 : 272): + case ((1 <= 1) ? 273 : 273): + case ((1 <= Integer.MAX_VALUE) ? 274 : 274): + case ((Integer.MAX_VALUE <= Integer.MIN_VALUE) ? 275 : 275): + case ((Integer.MAX_VALUE <= -1) ? 276 : 276): + case ((Integer.MAX_VALUE <= 0) ? 277 : 277): + case ((Integer.MAX_VALUE <= 1) ? 278 : 278): + case ((Integer.MAX_VALUE <= Integer.MAX_VALUE) ? 279 : 279): + case ((Integer.MIN_VALUE >= Integer.MIN_VALUE) ? 280 : 280): + case ((Integer.MIN_VALUE >= -1) ? 281 : 281): + case ((Integer.MIN_VALUE >= 0) ? 282 : 282): + case ((Integer.MIN_VALUE >= 1) ? 283 : 283): + case ((Integer.MIN_VALUE >= Integer.MAX_VALUE) ? 284 : 284): + case ((-1 >= Integer.MIN_VALUE) ? 285 : 285): + case ((-1 >= -1) ? 286 : 286): + case ((-1 >= 0) ? 287 : 287): + case ((-1 >= 1) ? 288 : 288): + case ((-1 >= Integer.MAX_VALUE) ? 289 : 289): + case ((0 >= Integer.MIN_VALUE) ? 290 : 290): + case ((0 >= -1) ? 291 : 291): + case ((0 >= 0) ? 292 : 292): + case ((0 >= 1) ? 293 : 293): + case ((0 >= Integer.MAX_VALUE) ? 294 : 294): + case ((1 >= Integer.MIN_VALUE) ? 295 : 295): + case ((1 >= -1) ? 296 : 296): + case ((1 >= 0) ? 297 : 297): + case ((1 >= 1) ? 298 : 298): + case ((1 >= Integer.MAX_VALUE) ? 299 : 299): + case ((Integer.MAX_VALUE >= Integer.MIN_VALUE) ? 300 : 300): + case ((Integer.MAX_VALUE >= -1) ? 301 : 301): + case ((Integer.MAX_VALUE >= 0) ? 302 : 302): + case ((Integer.MAX_VALUE >= 1) ? 303 : 303): + case ((Integer.MAX_VALUE >= Integer.MAX_VALUE) ? 304 : 304): + case ((Integer.MIN_VALUE == Integer.MIN_VALUE) ? 305 : 305): + case ((Integer.MIN_VALUE == -1) ? 306 : 306): + case ((Integer.MIN_VALUE == 0) ? 307 : 307): + case ((Integer.MIN_VALUE == 1) ? 308 : 308): + case ((Integer.MIN_VALUE == Integer.MAX_VALUE) ? 309 : 309): + case ((-1 == Integer.MIN_VALUE) ? 310 : 310): + case ((-1 == -1) ? 311 : 311): + case ((-1 == 0) ? 312 : 312): + case ((-1 == 1) ? 313 : 313): + case ((-1 == Integer.MAX_VALUE) ? 314 : 314): + case ((0 == Integer.MIN_VALUE) ? 315 : 315): + case ((0 == -1) ? 316 : 316): + case ((0 == 0) ? 317 : 317): + case ((0 == 1) ? 318 : 318): + case ((0 == Integer.MAX_VALUE) ? 319 : 319): + case ((1 == Integer.MIN_VALUE) ? 320 : 320): + case ((1 == -1) ? 321 : 321): + case ((1 == 0) ? 322 : 322): + case ((1 == 1) ? 323 : 323): + case ((1 == Integer.MAX_VALUE) ? 324 : 324): + case ((Integer.MAX_VALUE == Integer.MIN_VALUE) ? 325 : 325): + case ((Integer.MAX_VALUE == -1) ? 326 : 326): + case ((Integer.MAX_VALUE == 0) ? 327 : 327): + case ((Integer.MAX_VALUE == 1) ? 328 : 328): + case ((Integer.MAX_VALUE == Integer.MAX_VALUE) ? 329 : 329): + case ((Integer.MIN_VALUE != Integer.MIN_VALUE) ? 330 : 330): + case ((Integer.MIN_VALUE != -1) ? 331 : 331): + case ((Integer.MIN_VALUE != 0) ? 332 : 332): + case ((Integer.MIN_VALUE != 1) ? 333 : 333): + case ((Integer.MIN_VALUE != Integer.MAX_VALUE) ? 334 : 334): + case ((-1 != Integer.MIN_VALUE) ? 335 : 335): + case ((-1 != -1) ? 336 : 336): + case ((-1 != 0) ? 337 : 337): + case ((-1 != 1) ? 338 : 338): + case ((-1 != Integer.MAX_VALUE) ? 339 : 339): + case ((0 != Integer.MIN_VALUE) ? 340 : 340): + case ((0 != -1) ? 341 : 341): + case ((0 != 0) ? 342 : 342): + case ((0 != 1) ? 343 : 343): + case ((0 != Integer.MAX_VALUE) ? 344 : 344): + case ((1 != Integer.MIN_VALUE) ? 345 : 345): + case ((1 != -1) ? 346 : 346): + case ((1 != 0) ? 347 : 347): + case ((1 != 1) ? 348 : 348): + case ((1 != Integer.MAX_VALUE) ? 349 : 349): + case ((Integer.MAX_VALUE != Integer.MIN_VALUE) ? 350 : 350): + case ((Integer.MAX_VALUE != -1) ? 351 : 351): + case ((Integer.MAX_VALUE != 0) ? 352 : 352): + case ((Integer.MAX_VALUE != 1) ? 353 : 353): + case ((Integer.MAX_VALUE != Integer.MAX_VALUE) ? 354 : 354): + case ((((int) (Integer.MIN_VALUE & Integer.MIN_VALUE)) == 0) ? 355 : 355): + case ((((int) (Integer.MIN_VALUE & -1)) == 0) ? 356 : 356): + case ((((int) (Integer.MIN_VALUE & 0)) == 0) ? 357 : 357): + case ((((int) (Integer.MIN_VALUE & 1)) == 0) ? 358 : 358): + case ((((int) (Integer.MIN_VALUE & Integer.MAX_VALUE)) == 0) ? 359 : 359): + case ((((int) (-1 & Integer.MIN_VALUE)) == 0) ? 360 : 360): + case ((((int) (-1 & -1)) == 0) ? 361 : 361): + case ((((int) (-1 & 0)) == 0) ? 362 : 362): + case ((((int) (-1 & 1)) == 0) ? 363 : 363): + case ((((int) (-1 & Integer.MAX_VALUE)) == 0) ? 364 : 364): + case ((((int) (0 & Integer.MIN_VALUE)) == 0) ? 365 : 365): + case ((((int) (0 & -1)) == 0) ? 366 : 366): + case ((((int) (0 & 0)) == 0) ? 367 : 367): + case ((((int) (0 & 1)) == 0) ? 368 : 368): + case ((((int) (0 & Integer.MAX_VALUE)) == 0) ? 369 : 369): + case ((((int) (1 & Integer.MIN_VALUE)) == 0) ? 370 : 370): + case ((((int) (1 & -1)) == 0) ? 371 : 371): + case ((((int) (1 & 0)) == 0) ? 372 : 372): + case ((((int) (1 & 1)) == 0) ? 373 : 373): + case ((((int) (1 & Integer.MAX_VALUE)) == 0) ? 374 : 374): + case ((((int) (Integer.MAX_VALUE & Integer.MIN_VALUE)) == 0) ? 375 : 375): + case ((((int) (Integer.MAX_VALUE & -1)) == 0) ? 376 : 376): + case ((((int) (Integer.MAX_VALUE & 0)) == 0) ? 377 : 377): + case ((((int) (Integer.MAX_VALUE & 1)) == 0) ? 378 : 378): + case ((((int) (Integer.MAX_VALUE & Integer.MAX_VALUE)) == 0) ? 379 : 379): + case ((((int) (Integer.MIN_VALUE ^ Integer.MIN_VALUE)) == 0) ? 380 : 380): + case ((((int) (Integer.MIN_VALUE ^ -1)) == 0) ? 381 : 381): + case ((((int) (Integer.MIN_VALUE ^ 0)) == 0) ? 382 : 382): + case ((((int) (Integer.MIN_VALUE ^ 1)) == 0) ? 383 : 383): + case ((((int) (Integer.MIN_VALUE ^ Integer.MAX_VALUE)) == 0) ? 384 : 384): + case ((((int) (-1 ^ Integer.MIN_VALUE)) == 0) ? 385 : 385): + case ((((int) (-1 ^ -1)) == 0) ? 386 : 386): + case ((((int) (-1 ^ 0)) == 0) ? 387 : 387): + case ((((int) (-1 ^ 1)) == 0) ? 388 : 388): + case ((((int) (-1 ^ Integer.MAX_VALUE)) == 0) ? 389 : 389): + case ((((int) (0 ^ Integer.MIN_VALUE)) == 0) ? 390 : 390): + case ((((int) (0 ^ -1)) == 0) ? 391 : 391): + case ((((int) (0 ^ 0)) == 0) ? 392 : 392): + case ((((int) (0 ^ 1)) == 0) ? 393 : 393): + case ((((int) (0 ^ Integer.MAX_VALUE)) == 0) ? 394 : 394): + case ((((int) (1 ^ Integer.MIN_VALUE)) == 0) ? 395 : 395): + case ((((int) (1 ^ -1)) == 0) ? 396 : 396): + case ((((int) (1 ^ 0)) == 0) ? 397 : 397): + case ((((int) (1 ^ 1)) == 0) ? 398 : 398): + case ((((int) (1 ^ Integer.MAX_VALUE)) == 0) ? 399 : 399): + case ((((int) (Integer.MAX_VALUE ^ Integer.MIN_VALUE)) == 0) ? 400 : 400): + case ((((int) (Integer.MAX_VALUE ^ -1)) == 0) ? 401 : 401): + case ((((int) (Integer.MAX_VALUE ^ 0)) == 0) ? 402 : 402): + case ((((int) (Integer.MAX_VALUE ^ 1)) == 0) ? 403 : 403): + case ((((int) (Integer.MAX_VALUE ^ Integer.MAX_VALUE)) == 0) ? 404 : 404): + case ((((int) (Integer.MIN_VALUE | Integer.MIN_VALUE)) == 0) ? 405 : 405): + case ((((int) (Integer.MIN_VALUE | -1)) == 0) ? 406 : 406): + case ((((int) (Integer.MIN_VALUE | 0)) == 0) ? 407 : 407): + case ((((int) (Integer.MIN_VALUE | 1)) == 0) ? 408 : 408): + case ((((int) (Integer.MIN_VALUE | Integer.MAX_VALUE)) == 0) ? 409 : 409): + case ((((int) (-1 | Integer.MIN_VALUE)) == 0) ? 410 : 410): + case ((((int) (-1 | -1)) == 0) ? 411 : 411): + case ((((int) (-1 | 0)) == 0) ? 412 : 412): + case ((((int) (-1 | 1)) == 0) ? 413 : 413): + case ((((int) (-1 | Integer.MAX_VALUE)) == 0) ? 414 : 414): + case ((((int) (0 | Integer.MIN_VALUE)) == 0) ? 415 : 415): + case ((((int) (0 | -1)) == 0) ? 416 : 416): + case ((((int) (0 | 0)) == 0) ? 417 : 417): + case ((((int) (0 | 1)) == 0) ? 418 : 418): + case ((((int) (0 | Integer.MAX_VALUE)) == 0) ? 419 : 419): + case ((((int) (1 | Integer.MIN_VALUE)) == 0) ? 420 : 420): + case ((((int) (1 | -1)) == 0) ? 421 : 421): + case ((((int) (1 | 0)) == 0) ? 422 : 422): + case ((((int) (1 | 1)) == 0) ? 423 : 423): + case ((((int) (1 | Integer.MAX_VALUE)) == 0) ? 424 : 424): + case ((((int) (Integer.MAX_VALUE | Integer.MIN_VALUE)) == 0) ? 425 : 425): + case ((((int) (Integer.MAX_VALUE | -1)) == 0) ? 426 : 426): + case ((((int) (Integer.MAX_VALUE | 0)) == 0) ? 427 : 427): + case ((((int) (Integer.MAX_VALUE | 1)) == 0) ? 428 : 428): + case ((((int) (Integer.MAX_VALUE | Integer.MAX_VALUE)) == 0) ? 429 : 429): + default: + } + } + + // -------- + // long tests + static long longPlus(long x) { return (long) + x; } + static long longMinus(long x) { return (long) - x; } + static long longBitNot(long x) { return (long) ~ x; } + static long longTimes(long x, long y) { return (long) (x * y); } + static long longDiv(long x, long y) { return (long) (x / y); } + static long longRem(long x, long y) { return (long) (x % y); } + static long longAdd(long x, long y) { return (long) (x + y); } + static long longSub(long x, long y) { return (long) (x - y); } + static long longShl(long x, long y) { return (long) (x << y); } + static long longShr(long x, long y) { return (long) (x >> y); } + static long longUshr(long x, long y) { return (long) (x >>> y); } + static boolean longLt(long x, long y) { return x < y; } + static boolean longGt(long x, long y) { return x > y; } + static boolean longLe(long x, long y) { return x <= y; } + static boolean longGe(long x, long y) { return x >= y; } + static boolean longEq(long x, long y) { return x == y; } + static boolean longNe(long x, long y) { return x != y; } + static long longAnd(long x, long y) { return (long) (x & y); } + static long longXor(long x, long y) { return (long) (x ^ y); } + static long longOr(long x, long y) { return (long) (x | y); } + static void longTest() { + Tester.checkEqual(longPlus(Long.MIN_VALUE), (long) + Long.MIN_VALUE, "(long) + Long.MIN_VALUE"); + Tester.checkEqual(longPlus(-1L), (long) + -1L, "(long) + -1L"); + Tester.checkEqual(longPlus(0L), (long) + 0L, "(long) + 0L"); + Tester.checkEqual(longPlus(1L), (long) + 1L, "(long) + 1L"); + Tester.checkEqual(longPlus(Long.MAX_VALUE), (long) + Long.MAX_VALUE, "(long) + Long.MAX_VALUE"); + Tester.checkEqual(longMinus(Long.MIN_VALUE), (long) - Long.MIN_VALUE, "(long) - Long.MIN_VALUE"); + Tester.checkEqual(longMinus(-1L), (long) - -1L, "(long) - -1L"); + Tester.checkEqual(longMinus(0L), (long) - 0L, "(long) - 0L"); + Tester.checkEqual(longMinus(1L), (long) - 1L, "(long) - 1L"); + Tester.checkEqual(longMinus(Long.MAX_VALUE), (long) - Long.MAX_VALUE, "(long) - Long.MAX_VALUE"); + Tester.checkEqual(longBitNot(Long.MIN_VALUE), (long) ~ Long.MIN_VALUE, "(long) ~ Long.MIN_VALUE"); + Tester.checkEqual(longBitNot(-1L), (long) ~ -1L, "(long) ~ -1L"); + Tester.checkEqual(longBitNot(0L), (long) ~ 0L, "(long) ~ 0L"); + Tester.checkEqual(longBitNot(1L), (long) ~ 1L, "(long) ~ 1L"); + Tester.checkEqual(longBitNot(Long.MAX_VALUE), (long) ~ Long.MAX_VALUE, "(long) ~ Long.MAX_VALUE"); + Tester.checkEqual(longTimes(Long.MIN_VALUE, Long.MIN_VALUE), (long) (Long.MIN_VALUE * Long.MIN_VALUE), "(long) (Long.MIN_VALUE * Long.MIN_VALUE)"); + Tester.checkEqual(longTimes(Long.MIN_VALUE, -1L), (long) (Long.MIN_VALUE * -1L), "(long) (Long.MIN_VALUE * -1L)"); + Tester.checkEqual(longTimes(Long.MIN_VALUE, 0L), (long) (Long.MIN_VALUE * 0L), "(long) (Long.MIN_VALUE * 0L)"); + Tester.checkEqual(longTimes(Long.MIN_VALUE, 1L), (long) (Long.MIN_VALUE * 1L), "(long) (Long.MIN_VALUE * 1L)"); + Tester.checkEqual(longTimes(Long.MIN_VALUE, Long.MAX_VALUE), (long) (Long.MIN_VALUE * Long.MAX_VALUE), "(long) (Long.MIN_VALUE * Long.MAX_VALUE)"); + Tester.checkEqual(longTimes(-1L, Long.MIN_VALUE), (long) (-1L * Long.MIN_VALUE), "(long) (-1L * Long.MIN_VALUE)"); + Tester.checkEqual(longTimes(-1L, -1L), (long) (-1L * -1L), "(long) (-1L * -1L)"); + Tester.checkEqual(longTimes(-1L, 0L), (long) (-1L * 0L), "(long) (-1L * 0L)"); + Tester.checkEqual(longTimes(-1L, 1L), (long) (-1L * 1L), "(long) (-1L * 1L)"); + Tester.checkEqual(longTimes(-1L, Long.MAX_VALUE), (long) (-1L * Long.MAX_VALUE), "(long) (-1L * Long.MAX_VALUE)"); + Tester.checkEqual(longTimes(0L, Long.MIN_VALUE), (long) (0L * Long.MIN_VALUE), "(long) (0L * Long.MIN_VALUE)"); + Tester.checkEqual(longTimes(0L, -1L), (long) (0L * -1L), "(long) (0L * -1L)"); + Tester.checkEqual(longTimes(0L, 0L), (long) (0L * 0L), "(long) (0L * 0L)"); + Tester.checkEqual(longTimes(0L, 1L), (long) (0L * 1L), "(long) (0L * 1L)"); + Tester.checkEqual(longTimes(0L, Long.MAX_VALUE), (long) (0L * Long.MAX_VALUE), "(long) (0L * Long.MAX_VALUE)"); + Tester.checkEqual(longTimes(1L, Long.MIN_VALUE), (long) (1L * Long.MIN_VALUE), "(long) (1L * Long.MIN_VALUE)"); + Tester.checkEqual(longTimes(1L, -1L), (long) (1L * -1L), "(long) (1L * -1L)"); + Tester.checkEqual(longTimes(1L, 0L), (long) (1L * 0L), "(long) (1L * 0L)"); + Tester.checkEqual(longTimes(1L, 1L), (long) (1L * 1L), "(long) (1L * 1L)"); + Tester.checkEqual(longTimes(1L, Long.MAX_VALUE), (long) (1L * Long.MAX_VALUE), "(long) (1L * Long.MAX_VALUE)"); + Tester.checkEqual(longTimes(Long.MAX_VALUE, Long.MIN_VALUE), (long) (Long.MAX_VALUE * Long.MIN_VALUE), "(long) (Long.MAX_VALUE * Long.MIN_VALUE)"); + Tester.checkEqual(longTimes(Long.MAX_VALUE, -1L), (long) (Long.MAX_VALUE * -1L), "(long) (Long.MAX_VALUE * -1L)"); + Tester.checkEqual(longTimes(Long.MAX_VALUE, 0L), (long) (Long.MAX_VALUE * 0L), "(long) (Long.MAX_VALUE * 0L)"); + Tester.checkEqual(longTimes(Long.MAX_VALUE, 1L), (long) (Long.MAX_VALUE * 1L), "(long) (Long.MAX_VALUE * 1L)"); + Tester.checkEqual(longTimes(Long.MAX_VALUE, Long.MAX_VALUE), (long) (Long.MAX_VALUE * Long.MAX_VALUE), "(long) (Long.MAX_VALUE * Long.MAX_VALUE)"); + Tester.checkEqual(longDiv(Long.MIN_VALUE, Long.MIN_VALUE), (long) (Long.MIN_VALUE / Long.MIN_VALUE), "(long) (Long.MIN_VALUE / Long.MIN_VALUE)"); + Tester.checkEqual(longDiv(Long.MIN_VALUE, -1L), (long) (Long.MIN_VALUE / -1L), "(long) (Long.MIN_VALUE / -1L)"); + Tester.checkEqual(longDiv(Long.MIN_VALUE, 1L), (long) (Long.MIN_VALUE / 1L), "(long) (Long.MIN_VALUE / 1L)"); + Tester.checkEqual(longDiv(Long.MIN_VALUE, Long.MAX_VALUE), (long) (Long.MIN_VALUE / Long.MAX_VALUE), "(long) (Long.MIN_VALUE / Long.MAX_VALUE)"); + Tester.checkEqual(longDiv(-1L, Long.MIN_VALUE), (long) (-1L / Long.MIN_VALUE), "(long) (-1L / Long.MIN_VALUE)"); + Tester.checkEqual(longDiv(-1L, -1L), (long) (-1L / -1L), "(long) (-1L / -1L)"); + Tester.checkEqual(longDiv(-1L, 1L), (long) (-1L / 1L), "(long) (-1L / 1L)"); + Tester.checkEqual(longDiv(-1L, Long.MAX_VALUE), (long) (-1L / Long.MAX_VALUE), "(long) (-1L / Long.MAX_VALUE)"); + Tester.checkEqual(longDiv(0L, Long.MIN_VALUE), (long) (0L / Long.MIN_VALUE), "(long) (0L / Long.MIN_VALUE)"); + Tester.checkEqual(longDiv(0L, -1L), (long) (0L / -1L), "(long) (0L / -1L)"); + Tester.checkEqual(longDiv(0L, 1L), (long) (0L / 1L), "(long) (0L / 1L)"); + Tester.checkEqual(longDiv(0L, Long.MAX_VALUE), (long) (0L / Long.MAX_VALUE), "(long) (0L / Long.MAX_VALUE)"); + Tester.checkEqual(longDiv(1L, Long.MIN_VALUE), (long) (1L / Long.MIN_VALUE), "(long) (1L / Long.MIN_VALUE)"); + Tester.checkEqual(longDiv(1L, -1L), (long) (1L / -1L), "(long) (1L / -1L)"); + Tester.checkEqual(longDiv(1L, 1L), (long) (1L / 1L), "(long) (1L / 1L)"); + Tester.checkEqual(longDiv(1L, Long.MAX_VALUE), (long) (1L / Long.MAX_VALUE), "(long) (1L / Long.MAX_VALUE)"); + Tester.checkEqual(longDiv(Long.MAX_VALUE, Long.MIN_VALUE), (long) (Long.MAX_VALUE / Long.MIN_VALUE), "(long) (Long.MAX_VALUE / Long.MIN_VALUE)"); + Tester.checkEqual(longDiv(Long.MAX_VALUE, -1L), (long) (Long.MAX_VALUE / -1L), "(long) (Long.MAX_VALUE / -1L)"); + Tester.checkEqual(longDiv(Long.MAX_VALUE, 1L), (long) (Long.MAX_VALUE / 1L), "(long) (Long.MAX_VALUE / 1L)"); + Tester.checkEqual(longDiv(Long.MAX_VALUE, Long.MAX_VALUE), (long) (Long.MAX_VALUE / Long.MAX_VALUE), "(long) (Long.MAX_VALUE / Long.MAX_VALUE)"); + Tester.checkEqual(longRem(Long.MIN_VALUE, Long.MIN_VALUE), (long) (Long.MIN_VALUE % Long.MIN_VALUE), "(long) (Long.MIN_VALUE % Long.MIN_VALUE)"); + Tester.checkEqual(longRem(Long.MIN_VALUE, -1L), (long) (Long.MIN_VALUE % -1L), "(long) (Long.MIN_VALUE % -1L)"); + Tester.checkEqual(longRem(Long.MIN_VALUE, 1L), (long) (Long.MIN_VALUE % 1L), "(long) (Long.MIN_VALUE % 1L)"); + Tester.checkEqual(longRem(Long.MIN_VALUE, Long.MAX_VALUE), (long) (Long.MIN_VALUE % Long.MAX_VALUE), "(long) (Long.MIN_VALUE % Long.MAX_VALUE)"); + Tester.checkEqual(longRem(-1L, Long.MIN_VALUE), (long) (-1L % Long.MIN_VALUE), "(long) (-1L % Long.MIN_VALUE)"); + Tester.checkEqual(longRem(-1L, -1L), (long) (-1L % -1L), "(long) (-1L % -1L)"); + Tester.checkEqual(longRem(-1L, 1L), (long) (-1L % 1L), "(long) (-1L % 1L)"); + Tester.checkEqual(longRem(-1L, Long.MAX_VALUE), (long) (-1L % Long.MAX_VALUE), "(long) (-1L % Long.MAX_VALUE)"); + Tester.checkEqual(longRem(0L, Long.MIN_VALUE), (long) (0L % Long.MIN_VALUE), "(long) (0L % Long.MIN_VALUE)"); + Tester.checkEqual(longRem(0L, -1L), (long) (0L % -1L), "(long) (0L % -1L)"); + Tester.checkEqual(longRem(0L, 1L), (long) (0L % 1L), "(long) (0L % 1L)"); + Tester.checkEqual(longRem(0L, Long.MAX_VALUE), (long) (0L % Long.MAX_VALUE), "(long) (0L % Long.MAX_VALUE)"); + Tester.checkEqual(longRem(1L, Long.MIN_VALUE), (long) (1L % Long.MIN_VALUE), "(long) (1L % Long.MIN_VALUE)"); + Tester.checkEqual(longRem(1L, -1L), (long) (1L % -1L), "(long) (1L % -1L)"); + Tester.checkEqual(longRem(1L, 1L), (long) (1L % 1L), "(long) (1L % 1L)"); + Tester.checkEqual(longRem(1L, Long.MAX_VALUE), (long) (1L % Long.MAX_VALUE), "(long) (1L % Long.MAX_VALUE)"); + Tester.checkEqual(longRem(Long.MAX_VALUE, Long.MIN_VALUE), (long) (Long.MAX_VALUE % Long.MIN_VALUE), "(long) (Long.MAX_VALUE % Long.MIN_VALUE)"); + Tester.checkEqual(longRem(Long.MAX_VALUE, -1L), (long) (Long.MAX_VALUE % -1L), "(long) (Long.MAX_VALUE % -1L)"); + Tester.checkEqual(longRem(Long.MAX_VALUE, 1L), (long) (Long.MAX_VALUE % 1L), "(long) (Long.MAX_VALUE % 1L)"); + Tester.checkEqual(longRem(Long.MAX_VALUE, Long.MAX_VALUE), (long) (Long.MAX_VALUE % Long.MAX_VALUE), "(long) (Long.MAX_VALUE % Long.MAX_VALUE)"); + Tester.checkEqual(longAdd(Long.MIN_VALUE, Long.MIN_VALUE), (long) (Long.MIN_VALUE + Long.MIN_VALUE), "(long) (Long.MIN_VALUE + Long.MIN_VALUE)"); + Tester.checkEqual(longAdd(Long.MIN_VALUE, -1L), (long) (Long.MIN_VALUE + -1L), "(long) (Long.MIN_VALUE + -1L)"); + Tester.checkEqual(longAdd(Long.MIN_VALUE, 0L), (long) (Long.MIN_VALUE + 0L), "(long) (Long.MIN_VALUE + 0L)"); + Tester.checkEqual(longAdd(Long.MIN_VALUE, 1L), (long) (Long.MIN_VALUE + 1L), "(long) (Long.MIN_VALUE + 1L)"); + Tester.checkEqual(longAdd(Long.MIN_VALUE, Long.MAX_VALUE), (long) (Long.MIN_VALUE + Long.MAX_VALUE), "(long) (Long.MIN_VALUE + Long.MAX_VALUE)"); + Tester.checkEqual(longAdd(-1L, Long.MIN_VALUE), (long) (-1L + Long.MIN_VALUE), "(long) (-1L + Long.MIN_VALUE)"); + Tester.checkEqual(longAdd(-1L, -1L), (long) (-1L + -1L), "(long) (-1L + -1L)"); + Tester.checkEqual(longAdd(-1L, 0L), (long) (-1L + 0L), "(long) (-1L + 0L)"); + Tester.checkEqual(longAdd(-1L, 1L), (long) (-1L + 1L), "(long) (-1L + 1L)"); + Tester.checkEqual(longAdd(-1L, Long.MAX_VALUE), (long) (-1L + Long.MAX_VALUE), "(long) (-1L + Long.MAX_VALUE)"); + Tester.checkEqual(longAdd(0L, Long.MIN_VALUE), (long) (0L + Long.MIN_VALUE), "(long) (0L + Long.MIN_VALUE)"); + Tester.checkEqual(longAdd(0L, -1L), (long) (0L + -1L), "(long) (0L + -1L)"); + Tester.checkEqual(longAdd(0L, 0L), (long) (0L + 0L), "(long) (0L + 0L)"); + Tester.checkEqual(longAdd(0L, 1L), (long) (0L + 1L), "(long) (0L + 1L)"); + Tester.checkEqual(longAdd(0L, Long.MAX_VALUE), (long) (0L + Long.MAX_VALUE), "(long) (0L + Long.MAX_VALUE)"); + Tester.checkEqual(longAdd(1L, Long.MIN_VALUE), (long) (1L + Long.MIN_VALUE), "(long) (1L + Long.MIN_VALUE)"); + Tester.checkEqual(longAdd(1L, -1L), (long) (1L + -1L), "(long) (1L + -1L)"); + Tester.checkEqual(longAdd(1L, 0L), (long) (1L + 0L), "(long) (1L + 0L)"); + Tester.checkEqual(longAdd(1L, 1L), (long) (1L + 1L), "(long) (1L + 1L)"); + Tester.checkEqual(longAdd(1L, Long.MAX_VALUE), (long) (1L + Long.MAX_VALUE), "(long) (1L + Long.MAX_VALUE)"); + Tester.checkEqual(longAdd(Long.MAX_VALUE, Long.MIN_VALUE), (long) (Long.MAX_VALUE + Long.MIN_VALUE), "(long) (Long.MAX_VALUE + Long.MIN_VALUE)"); + Tester.checkEqual(longAdd(Long.MAX_VALUE, -1L), (long) (Long.MAX_VALUE + -1L), "(long) (Long.MAX_VALUE + -1L)"); + Tester.checkEqual(longAdd(Long.MAX_VALUE, 0L), (long) (Long.MAX_VALUE + 0L), "(long) (Long.MAX_VALUE + 0L)"); + Tester.checkEqual(longAdd(Long.MAX_VALUE, 1L), (long) (Long.MAX_VALUE + 1L), "(long) (Long.MAX_VALUE + 1L)"); + Tester.checkEqual(longAdd(Long.MAX_VALUE, Long.MAX_VALUE), (long) (Long.MAX_VALUE + Long.MAX_VALUE), "(long) (Long.MAX_VALUE + Long.MAX_VALUE)"); + Tester.checkEqual(longSub(Long.MIN_VALUE, Long.MIN_VALUE), (long) (Long.MIN_VALUE - Long.MIN_VALUE), "(long) (Long.MIN_VALUE - Long.MIN_VALUE)"); + Tester.checkEqual(longSub(Long.MIN_VALUE, -1L), (long) (Long.MIN_VALUE - -1L), "(long) (Long.MIN_VALUE - -1L)"); + Tester.checkEqual(longSub(Long.MIN_VALUE, 0L), (long) (Long.MIN_VALUE - 0L), "(long) (Long.MIN_VALUE - 0L)"); + Tester.checkEqual(longSub(Long.MIN_VALUE, 1L), (long) (Long.MIN_VALUE - 1L), "(long) (Long.MIN_VALUE - 1L)"); + Tester.checkEqual(longSub(Long.MIN_VALUE, Long.MAX_VALUE), (long) (Long.MIN_VALUE - Long.MAX_VALUE), "(long) (Long.MIN_VALUE - Long.MAX_VALUE)"); + Tester.checkEqual(longSub(-1L, Long.MIN_VALUE), (long) (-1L - Long.MIN_VALUE), "(long) (-1L - Long.MIN_VALUE)"); + Tester.checkEqual(longSub(-1L, -1L), (long) (-1L - -1L), "(long) (-1L - -1L)"); + Tester.checkEqual(longSub(-1L, 0L), (long) (-1L - 0L), "(long) (-1L - 0L)"); + Tester.checkEqual(longSub(-1L, 1L), (long) (-1L - 1L), "(long) (-1L - 1L)"); + Tester.checkEqual(longSub(-1L, Long.MAX_VALUE), (long) (-1L - Long.MAX_VALUE), "(long) (-1L - Long.MAX_VALUE)"); + Tester.checkEqual(longSub(0L, Long.MIN_VALUE), (long) (0L - Long.MIN_VALUE), "(long) (0L - Long.MIN_VALUE)"); + Tester.checkEqual(longSub(0L, -1L), (long) (0L - -1L), "(long) (0L - -1L)"); + Tester.checkEqual(longSub(0L, 0L), (long) (0L - 0L), "(long) (0L - 0L)"); + Tester.checkEqual(longSub(0L, 1L), (long) (0L - 1L), "(long) (0L - 1L)"); + Tester.checkEqual(longSub(0L, Long.MAX_VALUE), (long) (0L - Long.MAX_VALUE), "(long) (0L - Long.MAX_VALUE)"); + Tester.checkEqual(longSub(1L, Long.MIN_VALUE), (long) (1L - Long.MIN_VALUE), "(long) (1L - Long.MIN_VALUE)"); + Tester.checkEqual(longSub(1L, -1L), (long) (1L - -1L), "(long) (1L - -1L)"); + Tester.checkEqual(longSub(1L, 0L), (long) (1L - 0L), "(long) (1L - 0L)"); + Tester.checkEqual(longSub(1L, 1L), (long) (1L - 1L), "(long) (1L - 1L)"); + Tester.checkEqual(longSub(1L, Long.MAX_VALUE), (long) (1L - Long.MAX_VALUE), "(long) (1L - Long.MAX_VALUE)"); + Tester.checkEqual(longSub(Long.MAX_VALUE, Long.MIN_VALUE), (long) (Long.MAX_VALUE - Long.MIN_VALUE), "(long) (Long.MAX_VALUE - Long.MIN_VALUE)"); + Tester.checkEqual(longSub(Long.MAX_VALUE, -1L), (long) (Long.MAX_VALUE - -1L), "(long) (Long.MAX_VALUE - -1L)"); + Tester.checkEqual(longSub(Long.MAX_VALUE, 0L), (long) (Long.MAX_VALUE - 0L), "(long) (Long.MAX_VALUE - 0L)"); + Tester.checkEqual(longSub(Long.MAX_VALUE, 1L), (long) (Long.MAX_VALUE - 1L), "(long) (Long.MAX_VALUE - 1L)"); + Tester.checkEqual(longSub(Long.MAX_VALUE, Long.MAX_VALUE), (long) (Long.MAX_VALUE - Long.MAX_VALUE), "(long) (Long.MAX_VALUE - Long.MAX_VALUE)"); + Tester.checkEqual(longShl(Long.MIN_VALUE, Long.MIN_VALUE), (long) (Long.MIN_VALUE << Long.MIN_VALUE), "(long) (Long.MIN_VALUE << Long.MIN_VALUE)"); + Tester.checkEqual(longShl(Long.MIN_VALUE, -1L), (long) (Long.MIN_VALUE << -1L), "(long) (Long.MIN_VALUE << -1L)"); + Tester.checkEqual(longShl(Long.MIN_VALUE, 0L), (long) (Long.MIN_VALUE << 0L), "(long) (Long.MIN_VALUE << 0L)"); + Tester.checkEqual(longShl(Long.MIN_VALUE, 1L), (long) (Long.MIN_VALUE << 1L), "(long) (Long.MIN_VALUE << 1L)"); + Tester.checkEqual(longShl(Long.MIN_VALUE, Long.MAX_VALUE), (long) (Long.MIN_VALUE << Long.MAX_VALUE), "(long) (Long.MIN_VALUE << Long.MAX_VALUE)"); + Tester.checkEqual(longShl(-1L, Long.MIN_VALUE), (long) (-1L << Long.MIN_VALUE), "(long) (-1L << Long.MIN_VALUE)"); + Tester.checkEqual(longShl(-1L, -1L), (long) (-1L << -1L), "(long) (-1L << -1L)"); + Tester.checkEqual(longShl(-1L, 0L), (long) (-1L << 0L), "(long) (-1L << 0L)"); + Tester.checkEqual(longShl(-1L, 1L), (long) (-1L << 1L), "(long) (-1L << 1L)"); + Tester.checkEqual(longShl(-1L, Long.MAX_VALUE), (long) (-1L << Long.MAX_VALUE), "(long) (-1L << Long.MAX_VALUE)"); + Tester.checkEqual(longShl(0L, Long.MIN_VALUE), (long) (0L << Long.MIN_VALUE), "(long) (0L << Long.MIN_VALUE)"); + Tester.checkEqual(longShl(0L, -1L), (long) (0L << -1L), "(long) (0L << -1L)"); + Tester.checkEqual(longShl(0L, 0L), (long) (0L << 0L), "(long) (0L << 0L)"); + Tester.checkEqual(longShl(0L, 1L), (long) (0L << 1L), "(long) (0L << 1L)"); + Tester.checkEqual(longShl(0L, Long.MAX_VALUE), (long) (0L << Long.MAX_VALUE), "(long) (0L << Long.MAX_VALUE)"); + Tester.checkEqual(longShl(1L, Long.MIN_VALUE), (long) (1L << Long.MIN_VALUE), "(long) (1L << Long.MIN_VALUE)"); + Tester.checkEqual(longShl(1L, -1L), (long) (1L << -1L), "(long) (1L << -1L)"); + Tester.checkEqual(longShl(1L, 0L), (long) (1L << 0L), "(long) (1L << 0L)"); + Tester.checkEqual(longShl(1L, 1L), (long) (1L << 1L), "(long) (1L << 1L)"); + Tester.checkEqual(longShl(1L, Long.MAX_VALUE), (long) (1L << Long.MAX_VALUE), "(long) (1L << Long.MAX_VALUE)"); + Tester.checkEqual(longShl(Long.MAX_VALUE, Long.MIN_VALUE), (long) (Long.MAX_VALUE << Long.MIN_VALUE), "(long) (Long.MAX_VALUE << Long.MIN_VALUE)"); + Tester.checkEqual(longShl(Long.MAX_VALUE, -1L), (long) (Long.MAX_VALUE << -1L), "(long) (Long.MAX_VALUE << -1L)"); + Tester.checkEqual(longShl(Long.MAX_VALUE, 0L), (long) (Long.MAX_VALUE << 0L), "(long) (Long.MAX_VALUE << 0L)"); + Tester.checkEqual(longShl(Long.MAX_VALUE, 1L), (long) (Long.MAX_VALUE << 1L), "(long) (Long.MAX_VALUE << 1L)"); + Tester.checkEqual(longShl(Long.MAX_VALUE, Long.MAX_VALUE), (long) (Long.MAX_VALUE << Long.MAX_VALUE), "(long) (Long.MAX_VALUE << Long.MAX_VALUE)"); + Tester.checkEqual(longShr(Long.MIN_VALUE, Long.MIN_VALUE), (long) (Long.MIN_VALUE >> Long.MIN_VALUE), "(long) (Long.MIN_VALUE >> Long.MIN_VALUE)"); + Tester.checkEqual(longShr(Long.MIN_VALUE, -1L), (long) (Long.MIN_VALUE >> -1L), "(long) (Long.MIN_VALUE >> -1L)"); + Tester.checkEqual(longShr(Long.MIN_VALUE, 0L), (long) (Long.MIN_VALUE >> 0L), "(long) (Long.MIN_VALUE >> 0L)"); + Tester.checkEqual(longShr(Long.MIN_VALUE, 1L), (long) (Long.MIN_VALUE >> 1L), "(long) (Long.MIN_VALUE >> 1L)"); + Tester.checkEqual(longShr(Long.MIN_VALUE, Long.MAX_VALUE), (long) (Long.MIN_VALUE >> Long.MAX_VALUE), "(long) (Long.MIN_VALUE >> Long.MAX_VALUE)"); + Tester.checkEqual(longShr(-1L, Long.MIN_VALUE), (long) (-1L >> Long.MIN_VALUE), "(long) (-1L >> Long.MIN_VALUE)"); + Tester.checkEqual(longShr(-1L, -1L), (long) (-1L >> -1L), "(long) (-1L >> -1L)"); + Tester.checkEqual(longShr(-1L, 0L), (long) (-1L >> 0L), "(long) (-1L >> 0L)"); + Tester.checkEqual(longShr(-1L, 1L), (long) (-1L >> 1L), "(long) (-1L >> 1L)"); + Tester.checkEqual(longShr(-1L, Long.MAX_VALUE), (long) (-1L >> Long.MAX_VALUE), "(long) (-1L >> Long.MAX_VALUE)"); + Tester.checkEqual(longShr(0L, Long.MIN_VALUE), (long) (0L >> Long.MIN_VALUE), "(long) (0L >> Long.MIN_VALUE)"); + Tester.checkEqual(longShr(0L, -1L), (long) (0L >> -1L), "(long) (0L >> -1L)"); + Tester.checkEqual(longShr(0L, 0L), (long) (0L >> 0L), "(long) (0L >> 0L)"); + Tester.checkEqual(longShr(0L, 1L), (long) (0L >> 1L), "(long) (0L >> 1L)"); + Tester.checkEqual(longShr(0L, Long.MAX_VALUE), (long) (0L >> Long.MAX_VALUE), "(long) (0L >> Long.MAX_VALUE)"); + Tester.checkEqual(longShr(1L, Long.MIN_VALUE), (long) (1L >> Long.MIN_VALUE), "(long) (1L >> Long.MIN_VALUE)"); + Tester.checkEqual(longShr(1L, -1L), (long) (1L >> -1L), "(long) (1L >> -1L)"); + Tester.checkEqual(longShr(1L, 0L), (long) (1L >> 0L), "(long) (1L >> 0L)"); + Tester.checkEqual(longShr(1L, 1L), (long) (1L >> 1L), "(long) (1L >> 1L)"); + Tester.checkEqual(longShr(1L, Long.MAX_VALUE), (long) (1L >> Long.MAX_VALUE), "(long) (1L >> Long.MAX_VALUE)"); + Tester.checkEqual(longShr(Long.MAX_VALUE, Long.MIN_VALUE), (long) (Long.MAX_VALUE >> Long.MIN_VALUE), "(long) (Long.MAX_VALUE >> Long.MIN_VALUE)"); + Tester.checkEqual(longShr(Long.MAX_VALUE, -1L), (long) (Long.MAX_VALUE >> -1L), "(long) (Long.MAX_VALUE >> -1L)"); + Tester.checkEqual(longShr(Long.MAX_VALUE, 0L), (long) (Long.MAX_VALUE >> 0L), "(long) (Long.MAX_VALUE >> 0L)"); + Tester.checkEqual(longShr(Long.MAX_VALUE, 1L), (long) (Long.MAX_VALUE >> 1L), "(long) (Long.MAX_VALUE >> 1L)"); + Tester.checkEqual(longShr(Long.MAX_VALUE, Long.MAX_VALUE), (long) (Long.MAX_VALUE >> Long.MAX_VALUE), "(long) (Long.MAX_VALUE >> Long.MAX_VALUE)"); + Tester.checkEqual(longUshr(Long.MIN_VALUE, Long.MIN_VALUE), (long) (Long.MIN_VALUE >>> Long.MIN_VALUE), "(long) (Long.MIN_VALUE >>> Long.MIN_VALUE)"); + Tester.checkEqual(longUshr(Long.MIN_VALUE, -1L), (long) (Long.MIN_VALUE >>> -1L), "(long) (Long.MIN_VALUE >>> -1L)"); + Tester.checkEqual(longUshr(Long.MIN_VALUE, 0L), (long) (Long.MIN_VALUE >>> 0L), "(long) (Long.MIN_VALUE >>> 0L)"); + Tester.checkEqual(longUshr(Long.MIN_VALUE, 1L), (long) (Long.MIN_VALUE >>> 1L), "(long) (Long.MIN_VALUE >>> 1L)"); + Tester.checkEqual(longUshr(Long.MIN_VALUE, Long.MAX_VALUE), (long) (Long.MIN_VALUE >>> Long.MAX_VALUE), "(long) (Long.MIN_VALUE >>> Long.MAX_VALUE)"); + Tester.checkEqual(longUshr(-1L, Long.MIN_VALUE), (long) (-1L >>> Long.MIN_VALUE), "(long) (-1L >>> Long.MIN_VALUE)"); + Tester.checkEqual(longUshr(-1L, -1L), (long) (-1L >>> -1L), "(long) (-1L >>> -1L)"); + Tester.checkEqual(longUshr(-1L, 0L), (long) (-1L >>> 0L), "(long) (-1L >>> 0L)"); + Tester.checkEqual(longUshr(-1L, 1L), (long) (-1L >>> 1L), "(long) (-1L >>> 1L)"); + Tester.checkEqual(longUshr(-1L, Long.MAX_VALUE), (long) (-1L >>> Long.MAX_VALUE), "(long) (-1L >>> Long.MAX_VALUE)"); + Tester.checkEqual(longUshr(0L, Long.MIN_VALUE), (long) (0L >>> Long.MIN_VALUE), "(long) (0L >>> Long.MIN_VALUE)"); + Tester.checkEqual(longUshr(0L, -1L), (long) (0L >>> -1L), "(long) (0L >>> -1L)"); + Tester.checkEqual(longUshr(0L, 0L), (long) (0L >>> 0L), "(long) (0L >>> 0L)"); + Tester.checkEqual(longUshr(0L, 1L), (long) (0L >>> 1L), "(long) (0L >>> 1L)"); + Tester.checkEqual(longUshr(0L, Long.MAX_VALUE), (long) (0L >>> Long.MAX_VALUE), "(long) (0L >>> Long.MAX_VALUE)"); + Tester.checkEqual(longUshr(1L, Long.MIN_VALUE), (long) (1L >>> Long.MIN_VALUE), "(long) (1L >>> Long.MIN_VALUE)"); + Tester.checkEqual(longUshr(1L, -1L), (long) (1L >>> -1L), "(long) (1L >>> -1L)"); + Tester.checkEqual(longUshr(1L, 0L), (long) (1L >>> 0L), "(long) (1L >>> 0L)"); + Tester.checkEqual(longUshr(1L, 1L), (long) (1L >>> 1L), "(long) (1L >>> 1L)"); + Tester.checkEqual(longUshr(1L, Long.MAX_VALUE), (long) (1L >>> Long.MAX_VALUE), "(long) (1L >>> Long.MAX_VALUE)"); + Tester.checkEqual(longUshr(Long.MAX_VALUE, Long.MIN_VALUE), (long) (Long.MAX_VALUE >>> Long.MIN_VALUE), "(long) (Long.MAX_VALUE >>> Long.MIN_VALUE)"); + Tester.checkEqual(longUshr(Long.MAX_VALUE, -1L), (long) (Long.MAX_VALUE >>> -1L), "(long) (Long.MAX_VALUE >>> -1L)"); + Tester.checkEqual(longUshr(Long.MAX_VALUE, 0L), (long) (Long.MAX_VALUE >>> 0L), "(long) (Long.MAX_VALUE >>> 0L)"); + Tester.checkEqual(longUshr(Long.MAX_VALUE, 1L), (long) (Long.MAX_VALUE >>> 1L), "(long) (Long.MAX_VALUE >>> 1L)"); + Tester.checkEqual(longUshr(Long.MAX_VALUE, Long.MAX_VALUE), (long) (Long.MAX_VALUE >>> Long.MAX_VALUE), "(long) (Long.MAX_VALUE >>> Long.MAX_VALUE)"); + Tester.checkEqual(longLt(Long.MIN_VALUE, Long.MIN_VALUE), Long.MIN_VALUE < Long.MIN_VALUE, "Long.MIN_VALUE < Long.MIN_VALUE"); + Tester.checkEqual(longLt(Long.MIN_VALUE, -1L), Long.MIN_VALUE < -1L, "Long.MIN_VALUE < -1L"); + Tester.checkEqual(longLt(Long.MIN_VALUE, 0L), Long.MIN_VALUE < 0L, "Long.MIN_VALUE < 0L"); + Tester.checkEqual(longLt(Long.MIN_VALUE, 1L), Long.MIN_VALUE < 1L, "Long.MIN_VALUE < 1L"); + Tester.checkEqual(longLt(Long.MIN_VALUE, Long.MAX_VALUE), Long.MIN_VALUE < Long.MAX_VALUE, "Long.MIN_VALUE < Long.MAX_VALUE"); + Tester.checkEqual(longLt(-1L, Long.MIN_VALUE), -1L < Long.MIN_VALUE, "-1L < Long.MIN_VALUE"); + Tester.checkEqual(longLt(-1L, -1L), -1L < -1L, "-1L < -1L"); + Tester.checkEqual(longLt(-1L, 0L), -1L < 0L, "-1L < 0L"); + Tester.checkEqual(longLt(-1L, 1L), -1L < 1L, "-1L < 1L"); + Tester.checkEqual(longLt(-1L, Long.MAX_VALUE), -1L < Long.MAX_VALUE, "-1L < Long.MAX_VALUE"); + Tester.checkEqual(longLt(0L, Long.MIN_VALUE), 0L < Long.MIN_VALUE, "0L < Long.MIN_VALUE"); + Tester.checkEqual(longLt(0L, -1L), 0L < -1L, "0L < -1L"); + Tester.checkEqual(longLt(0L, 0L), 0L < 0L, "0L < 0L"); + Tester.checkEqual(longLt(0L, 1L), 0L < 1L, "0L < 1L"); + Tester.checkEqual(longLt(0L, Long.MAX_VALUE), 0L < Long.MAX_VALUE, "0L < Long.MAX_VALUE"); + Tester.checkEqual(longLt(1L, Long.MIN_VALUE), 1L < Long.MIN_VALUE, "1L < Long.MIN_VALUE"); + Tester.checkEqual(longLt(1L, -1L), 1L < -1L, "1L < -1L"); + Tester.checkEqual(longLt(1L, 0L), 1L < 0L, "1L < 0L"); + Tester.checkEqual(longLt(1L, 1L), 1L < 1L, "1L < 1L"); + Tester.checkEqual(longLt(1L, Long.MAX_VALUE), 1L < Long.MAX_VALUE, "1L < Long.MAX_VALUE"); + Tester.checkEqual(longLt(Long.MAX_VALUE, Long.MIN_VALUE), Long.MAX_VALUE < Long.MIN_VALUE, "Long.MAX_VALUE < Long.MIN_VALUE"); + Tester.checkEqual(longLt(Long.MAX_VALUE, -1L), Long.MAX_VALUE < -1L, "Long.MAX_VALUE < -1L"); + Tester.checkEqual(longLt(Long.MAX_VALUE, 0L), Long.MAX_VALUE < 0L, "Long.MAX_VALUE < 0L"); + Tester.checkEqual(longLt(Long.MAX_VALUE, 1L), Long.MAX_VALUE < 1L, "Long.MAX_VALUE < 1L"); + Tester.checkEqual(longLt(Long.MAX_VALUE, Long.MAX_VALUE), Long.MAX_VALUE < Long.MAX_VALUE, "Long.MAX_VALUE < Long.MAX_VALUE"); + Tester.checkEqual(longGt(Long.MIN_VALUE, Long.MIN_VALUE), Long.MIN_VALUE > Long.MIN_VALUE, "Long.MIN_VALUE > Long.MIN_VALUE"); + Tester.checkEqual(longGt(Long.MIN_VALUE, -1L), Long.MIN_VALUE > -1L, "Long.MIN_VALUE > -1L"); + Tester.checkEqual(longGt(Long.MIN_VALUE, 0L), Long.MIN_VALUE > 0L, "Long.MIN_VALUE > 0L"); + Tester.checkEqual(longGt(Long.MIN_VALUE, 1L), Long.MIN_VALUE > 1L, "Long.MIN_VALUE > 1L"); + Tester.checkEqual(longGt(Long.MIN_VALUE, Long.MAX_VALUE), Long.MIN_VALUE > Long.MAX_VALUE, "Long.MIN_VALUE > Long.MAX_VALUE"); + Tester.checkEqual(longGt(-1L, Long.MIN_VALUE), -1L > Long.MIN_VALUE, "-1L > Long.MIN_VALUE"); + Tester.checkEqual(longGt(-1L, -1L), -1L > -1L, "-1L > -1L"); + Tester.checkEqual(longGt(-1L, 0L), -1L > 0L, "-1L > 0L"); + Tester.checkEqual(longGt(-1L, 1L), -1L > 1L, "-1L > 1L"); + Tester.checkEqual(longGt(-1L, Long.MAX_VALUE), -1L > Long.MAX_VALUE, "-1L > Long.MAX_VALUE"); + Tester.checkEqual(longGt(0L, Long.MIN_VALUE), 0L > Long.MIN_VALUE, "0L > Long.MIN_VALUE"); + Tester.checkEqual(longGt(0L, -1L), 0L > -1L, "0L > -1L"); + Tester.checkEqual(longGt(0L, 0L), 0L > 0L, "0L > 0L"); + Tester.checkEqual(longGt(0L, 1L), 0L > 1L, "0L > 1L"); + Tester.checkEqual(longGt(0L, Long.MAX_VALUE), 0L > Long.MAX_VALUE, "0L > Long.MAX_VALUE"); + Tester.checkEqual(longGt(1L, Long.MIN_VALUE), 1L > Long.MIN_VALUE, "1L > Long.MIN_VALUE"); + Tester.checkEqual(longGt(1L, -1L), 1L > -1L, "1L > -1L"); + Tester.checkEqual(longGt(1L, 0L), 1L > 0L, "1L > 0L"); + Tester.checkEqual(longGt(1L, 1L), 1L > 1L, "1L > 1L"); + Tester.checkEqual(longGt(1L, Long.MAX_VALUE), 1L > Long.MAX_VALUE, "1L > Long.MAX_VALUE"); + Tester.checkEqual(longGt(Long.MAX_VALUE, Long.MIN_VALUE), Long.MAX_VALUE > Long.MIN_VALUE, "Long.MAX_VALUE > Long.MIN_VALUE"); + Tester.checkEqual(longGt(Long.MAX_VALUE, -1L), Long.MAX_VALUE > -1L, "Long.MAX_VALUE > -1L"); + Tester.checkEqual(longGt(Long.MAX_VALUE, 0L), Long.MAX_VALUE > 0L, "Long.MAX_VALUE > 0L"); + Tester.checkEqual(longGt(Long.MAX_VALUE, 1L), Long.MAX_VALUE > 1L, "Long.MAX_VALUE > 1L"); + Tester.checkEqual(longGt(Long.MAX_VALUE, Long.MAX_VALUE), Long.MAX_VALUE > Long.MAX_VALUE, "Long.MAX_VALUE > Long.MAX_VALUE"); + Tester.checkEqual(longLe(Long.MIN_VALUE, Long.MIN_VALUE), Long.MIN_VALUE <= Long.MIN_VALUE, "Long.MIN_VALUE <= Long.MIN_VALUE"); + Tester.checkEqual(longLe(Long.MIN_VALUE, -1L), Long.MIN_VALUE <= -1L, "Long.MIN_VALUE <= -1L"); + Tester.checkEqual(longLe(Long.MIN_VALUE, 0L), Long.MIN_VALUE <= 0L, "Long.MIN_VALUE <= 0L"); + Tester.checkEqual(longLe(Long.MIN_VALUE, 1L), Long.MIN_VALUE <= 1L, "Long.MIN_VALUE <= 1L"); + Tester.checkEqual(longLe(Long.MIN_VALUE, Long.MAX_VALUE), Long.MIN_VALUE <= Long.MAX_VALUE, "Long.MIN_VALUE <= Long.MAX_VALUE"); + Tester.checkEqual(longLe(-1L, Long.MIN_VALUE), -1L <= Long.MIN_VALUE, "-1L <= Long.MIN_VALUE"); + Tester.checkEqual(longLe(-1L, -1L), -1L <= -1L, "-1L <= -1L"); + Tester.checkEqual(longLe(-1L, 0L), -1L <= 0L, "-1L <= 0L"); + Tester.checkEqual(longLe(-1L, 1L), -1L <= 1L, "-1L <= 1L"); + Tester.checkEqual(longLe(-1L, Long.MAX_VALUE), -1L <= Long.MAX_VALUE, "-1L <= Long.MAX_VALUE"); + Tester.checkEqual(longLe(0L, Long.MIN_VALUE), 0L <= Long.MIN_VALUE, "0L <= Long.MIN_VALUE"); + Tester.checkEqual(longLe(0L, -1L), 0L <= -1L, "0L <= -1L"); + Tester.checkEqual(longLe(0L, 0L), 0L <= 0L, "0L <= 0L"); + Tester.checkEqual(longLe(0L, 1L), 0L <= 1L, "0L <= 1L"); + Tester.checkEqual(longLe(0L, Long.MAX_VALUE), 0L <= Long.MAX_VALUE, "0L <= Long.MAX_VALUE"); + Tester.checkEqual(longLe(1L, Long.MIN_VALUE), 1L <= Long.MIN_VALUE, "1L <= Long.MIN_VALUE"); + Tester.checkEqual(longLe(1L, -1L), 1L <= -1L, "1L <= -1L"); + Tester.checkEqual(longLe(1L, 0L), 1L <= 0L, "1L <= 0L"); + Tester.checkEqual(longLe(1L, 1L), 1L <= 1L, "1L <= 1L"); + Tester.checkEqual(longLe(1L, Long.MAX_VALUE), 1L <= Long.MAX_VALUE, "1L <= Long.MAX_VALUE"); + Tester.checkEqual(longLe(Long.MAX_VALUE, Long.MIN_VALUE), Long.MAX_VALUE <= Long.MIN_VALUE, "Long.MAX_VALUE <= Long.MIN_VALUE"); + Tester.checkEqual(longLe(Long.MAX_VALUE, -1L), Long.MAX_VALUE <= -1L, "Long.MAX_VALUE <= -1L"); + Tester.checkEqual(longLe(Long.MAX_VALUE, 0L), Long.MAX_VALUE <= 0L, "Long.MAX_VALUE <= 0L"); + Tester.checkEqual(longLe(Long.MAX_VALUE, 1L), Long.MAX_VALUE <= 1L, "Long.MAX_VALUE <= 1L"); + Tester.checkEqual(longLe(Long.MAX_VALUE, Long.MAX_VALUE), Long.MAX_VALUE <= Long.MAX_VALUE, "Long.MAX_VALUE <= Long.MAX_VALUE"); + Tester.checkEqual(longGe(Long.MIN_VALUE, Long.MIN_VALUE), Long.MIN_VALUE >= Long.MIN_VALUE, "Long.MIN_VALUE >= Long.MIN_VALUE"); + Tester.checkEqual(longGe(Long.MIN_VALUE, -1L), Long.MIN_VALUE >= -1L, "Long.MIN_VALUE >= -1L"); + Tester.checkEqual(longGe(Long.MIN_VALUE, 0L), Long.MIN_VALUE >= 0L, "Long.MIN_VALUE >= 0L"); + Tester.checkEqual(longGe(Long.MIN_VALUE, 1L), Long.MIN_VALUE >= 1L, "Long.MIN_VALUE >= 1L"); + Tester.checkEqual(longGe(Long.MIN_VALUE, Long.MAX_VALUE), Long.MIN_VALUE >= Long.MAX_VALUE, "Long.MIN_VALUE >= Long.MAX_VALUE"); + Tester.checkEqual(longGe(-1L, Long.MIN_VALUE), -1L >= Long.MIN_VALUE, "-1L >= Long.MIN_VALUE"); + Tester.checkEqual(longGe(-1L, -1L), -1L >= -1L, "-1L >= -1L"); + Tester.checkEqual(longGe(-1L, 0L), -1L >= 0L, "-1L >= 0L"); + Tester.checkEqual(longGe(-1L, 1L), -1L >= 1L, "-1L >= 1L"); + Tester.checkEqual(longGe(-1L, Long.MAX_VALUE), -1L >= Long.MAX_VALUE, "-1L >= Long.MAX_VALUE"); + Tester.checkEqual(longGe(0L, Long.MIN_VALUE), 0L >= Long.MIN_VALUE, "0L >= Long.MIN_VALUE"); + Tester.checkEqual(longGe(0L, -1L), 0L >= -1L, "0L >= -1L"); + Tester.checkEqual(longGe(0L, 0L), 0L >= 0L, "0L >= 0L"); + Tester.checkEqual(longGe(0L, 1L), 0L >= 1L, "0L >= 1L"); + Tester.checkEqual(longGe(0L, Long.MAX_VALUE), 0L >= Long.MAX_VALUE, "0L >= Long.MAX_VALUE"); + Tester.checkEqual(longGe(1L, Long.MIN_VALUE), 1L >= Long.MIN_VALUE, "1L >= Long.MIN_VALUE"); + Tester.checkEqual(longGe(1L, -1L), 1L >= -1L, "1L >= -1L"); + Tester.checkEqual(longGe(1L, 0L), 1L >= 0L, "1L >= 0L"); + Tester.checkEqual(longGe(1L, 1L), 1L >= 1L, "1L >= 1L"); + Tester.checkEqual(longGe(1L, Long.MAX_VALUE), 1L >= Long.MAX_VALUE, "1L >= Long.MAX_VALUE"); + Tester.checkEqual(longGe(Long.MAX_VALUE, Long.MIN_VALUE), Long.MAX_VALUE >= Long.MIN_VALUE, "Long.MAX_VALUE >= Long.MIN_VALUE"); + Tester.checkEqual(longGe(Long.MAX_VALUE, -1L), Long.MAX_VALUE >= -1L, "Long.MAX_VALUE >= -1L"); + Tester.checkEqual(longGe(Long.MAX_VALUE, 0L), Long.MAX_VALUE >= 0L, "Long.MAX_VALUE >= 0L"); + Tester.checkEqual(longGe(Long.MAX_VALUE, 1L), Long.MAX_VALUE >= 1L, "Long.MAX_VALUE >= 1L"); + Tester.checkEqual(longGe(Long.MAX_VALUE, Long.MAX_VALUE), Long.MAX_VALUE >= Long.MAX_VALUE, "Long.MAX_VALUE >= Long.MAX_VALUE"); + Tester.checkEqual(longEq(Long.MIN_VALUE, Long.MIN_VALUE), Long.MIN_VALUE == Long.MIN_VALUE, "Long.MIN_VALUE == Long.MIN_VALUE"); + Tester.checkEqual(longEq(Long.MIN_VALUE, -1L), Long.MIN_VALUE == -1L, "Long.MIN_VALUE == -1L"); + Tester.checkEqual(longEq(Long.MIN_VALUE, 0L), Long.MIN_VALUE == 0L, "Long.MIN_VALUE == 0L"); + Tester.checkEqual(longEq(Long.MIN_VALUE, 1L), Long.MIN_VALUE == 1L, "Long.MIN_VALUE == 1L"); + Tester.checkEqual(longEq(Long.MIN_VALUE, Long.MAX_VALUE), Long.MIN_VALUE == Long.MAX_VALUE, "Long.MIN_VALUE == Long.MAX_VALUE"); + Tester.checkEqual(longEq(-1L, Long.MIN_VALUE), -1L == Long.MIN_VALUE, "-1L == Long.MIN_VALUE"); + Tester.checkEqual(longEq(-1L, -1L), -1L == -1L, "-1L == -1L"); + Tester.checkEqual(longEq(-1L, 0L), -1L == 0L, "-1L == 0L"); + Tester.checkEqual(longEq(-1L, 1L), -1L == 1L, "-1L == 1L"); + Tester.checkEqual(longEq(-1L, Long.MAX_VALUE), -1L == Long.MAX_VALUE, "-1L == Long.MAX_VALUE"); + Tester.checkEqual(longEq(0L, Long.MIN_VALUE), 0L == Long.MIN_VALUE, "0L == Long.MIN_VALUE"); + Tester.checkEqual(longEq(0L, -1L), 0L == -1L, "0L == -1L"); + Tester.checkEqual(longEq(0L, 0L), 0L == 0L, "0L == 0L"); + Tester.checkEqual(longEq(0L, 1L), 0L == 1L, "0L == 1L"); + Tester.checkEqual(longEq(0L, Long.MAX_VALUE), 0L == Long.MAX_VALUE, "0L == Long.MAX_VALUE"); + Tester.checkEqual(longEq(1L, Long.MIN_VALUE), 1L == Long.MIN_VALUE, "1L == Long.MIN_VALUE"); + Tester.checkEqual(longEq(1L, -1L), 1L == -1L, "1L == -1L"); + Tester.checkEqual(longEq(1L, 0L), 1L == 0L, "1L == 0L"); + Tester.checkEqual(longEq(1L, 1L), 1L == 1L, "1L == 1L"); + Tester.checkEqual(longEq(1L, Long.MAX_VALUE), 1L == Long.MAX_VALUE, "1L == Long.MAX_VALUE"); + Tester.checkEqual(longEq(Long.MAX_VALUE, Long.MIN_VALUE), Long.MAX_VALUE == Long.MIN_VALUE, "Long.MAX_VALUE == Long.MIN_VALUE"); + Tester.checkEqual(longEq(Long.MAX_VALUE, -1L), Long.MAX_VALUE == -1L, "Long.MAX_VALUE == -1L"); + Tester.checkEqual(longEq(Long.MAX_VALUE, 0L), Long.MAX_VALUE == 0L, "Long.MAX_VALUE == 0L"); + Tester.checkEqual(longEq(Long.MAX_VALUE, 1L), Long.MAX_VALUE == 1L, "Long.MAX_VALUE == 1L"); + Tester.checkEqual(longEq(Long.MAX_VALUE, Long.MAX_VALUE), Long.MAX_VALUE == Long.MAX_VALUE, "Long.MAX_VALUE == Long.MAX_VALUE"); + Tester.checkEqual(longNe(Long.MIN_VALUE, Long.MIN_VALUE), Long.MIN_VALUE != Long.MIN_VALUE, "Long.MIN_VALUE != Long.MIN_VALUE"); + Tester.checkEqual(longNe(Long.MIN_VALUE, -1L), Long.MIN_VALUE != -1L, "Long.MIN_VALUE != -1L"); + Tester.checkEqual(longNe(Long.MIN_VALUE, 0L), Long.MIN_VALUE != 0L, "Long.MIN_VALUE != 0L"); + Tester.checkEqual(longNe(Long.MIN_VALUE, 1L), Long.MIN_VALUE != 1L, "Long.MIN_VALUE != 1L"); + Tester.checkEqual(longNe(Long.MIN_VALUE, Long.MAX_VALUE), Long.MIN_VALUE != Long.MAX_VALUE, "Long.MIN_VALUE != Long.MAX_VALUE"); + Tester.checkEqual(longNe(-1L, Long.MIN_VALUE), -1L != Long.MIN_VALUE, "-1L != Long.MIN_VALUE"); + Tester.checkEqual(longNe(-1L, -1L), -1L != -1L, "-1L != -1L"); + Tester.checkEqual(longNe(-1L, 0L), -1L != 0L, "-1L != 0L"); + Tester.checkEqual(longNe(-1L, 1L), -1L != 1L, "-1L != 1L"); + Tester.checkEqual(longNe(-1L, Long.MAX_VALUE), -1L != Long.MAX_VALUE, "-1L != Long.MAX_VALUE"); + Tester.checkEqual(longNe(0L, Long.MIN_VALUE), 0L != Long.MIN_VALUE, "0L != Long.MIN_VALUE"); + Tester.checkEqual(longNe(0L, -1L), 0L != -1L, "0L != -1L"); + Tester.checkEqual(longNe(0L, 0L), 0L != 0L, "0L != 0L"); + Tester.checkEqual(longNe(0L, 1L), 0L != 1L, "0L != 1L"); + Tester.checkEqual(longNe(0L, Long.MAX_VALUE), 0L != Long.MAX_VALUE, "0L != Long.MAX_VALUE"); + Tester.checkEqual(longNe(1L, Long.MIN_VALUE), 1L != Long.MIN_VALUE, "1L != Long.MIN_VALUE"); + Tester.checkEqual(longNe(1L, -1L), 1L != -1L, "1L != -1L"); + Tester.checkEqual(longNe(1L, 0L), 1L != 0L, "1L != 0L"); + Tester.checkEqual(longNe(1L, 1L), 1L != 1L, "1L != 1L"); + Tester.checkEqual(longNe(1L, Long.MAX_VALUE), 1L != Long.MAX_VALUE, "1L != Long.MAX_VALUE"); + Tester.checkEqual(longNe(Long.MAX_VALUE, Long.MIN_VALUE), Long.MAX_VALUE != Long.MIN_VALUE, "Long.MAX_VALUE != Long.MIN_VALUE"); + Tester.checkEqual(longNe(Long.MAX_VALUE, -1L), Long.MAX_VALUE != -1L, "Long.MAX_VALUE != -1L"); + Tester.checkEqual(longNe(Long.MAX_VALUE, 0L), Long.MAX_VALUE != 0L, "Long.MAX_VALUE != 0L"); + Tester.checkEqual(longNe(Long.MAX_VALUE, 1L), Long.MAX_VALUE != 1L, "Long.MAX_VALUE != 1L"); + Tester.checkEqual(longNe(Long.MAX_VALUE, Long.MAX_VALUE), Long.MAX_VALUE != Long.MAX_VALUE, "Long.MAX_VALUE != Long.MAX_VALUE"); + Tester.checkEqual(longAnd(Long.MIN_VALUE, Long.MIN_VALUE), (long) (Long.MIN_VALUE & Long.MIN_VALUE), "(long) (Long.MIN_VALUE & Long.MIN_VALUE)"); + Tester.checkEqual(longAnd(Long.MIN_VALUE, -1L), (long) (Long.MIN_VALUE & -1L), "(long) (Long.MIN_VALUE & -1L)"); + Tester.checkEqual(longAnd(Long.MIN_VALUE, 0L), (long) (Long.MIN_VALUE & 0L), "(long) (Long.MIN_VALUE & 0L)"); + Tester.checkEqual(longAnd(Long.MIN_VALUE, 1L), (long) (Long.MIN_VALUE & 1L), "(long) (Long.MIN_VALUE & 1L)"); + Tester.checkEqual(longAnd(Long.MIN_VALUE, Long.MAX_VALUE), (long) (Long.MIN_VALUE & Long.MAX_VALUE), "(long) (Long.MIN_VALUE & Long.MAX_VALUE)"); + Tester.checkEqual(longAnd(-1L, Long.MIN_VALUE), (long) (-1L & Long.MIN_VALUE), "(long) (-1L & Long.MIN_VALUE)"); + Tester.checkEqual(longAnd(-1L, -1L), (long) (-1L & -1L), "(long) (-1L & -1L)"); + Tester.checkEqual(longAnd(-1L, 0L), (long) (-1L & 0L), "(long) (-1L & 0L)"); + Tester.checkEqual(longAnd(-1L, 1L), (long) (-1L & 1L), "(long) (-1L & 1L)"); + Tester.checkEqual(longAnd(-1L, Long.MAX_VALUE), (long) (-1L & Long.MAX_VALUE), "(long) (-1L & Long.MAX_VALUE)"); + Tester.checkEqual(longAnd(0L, Long.MIN_VALUE), (long) (0L & Long.MIN_VALUE), "(long) (0L & Long.MIN_VALUE)"); + Tester.checkEqual(longAnd(0L, -1L), (long) (0L & -1L), "(long) (0L & -1L)"); + Tester.checkEqual(longAnd(0L, 0L), (long) (0L & 0L), "(long) (0L & 0L)"); + Tester.checkEqual(longAnd(0L, 1L), (long) (0L & 1L), "(long) (0L & 1L)"); + Tester.checkEqual(longAnd(0L, Long.MAX_VALUE), (long) (0L & Long.MAX_VALUE), "(long) (0L & Long.MAX_VALUE)"); + Tester.checkEqual(longAnd(1L, Long.MIN_VALUE), (long) (1L & Long.MIN_VALUE), "(long) (1L & Long.MIN_VALUE)"); + Tester.checkEqual(longAnd(1L, -1L), (long) (1L & -1L), "(long) (1L & -1L)"); + Tester.checkEqual(longAnd(1L, 0L), (long) (1L & 0L), "(long) (1L & 0L)"); + Tester.checkEqual(longAnd(1L, 1L), (long) (1L & 1L), "(long) (1L & 1L)"); + Tester.checkEqual(longAnd(1L, Long.MAX_VALUE), (long) (1L & Long.MAX_VALUE), "(long) (1L & Long.MAX_VALUE)"); + Tester.checkEqual(longAnd(Long.MAX_VALUE, Long.MIN_VALUE), (long) (Long.MAX_VALUE & Long.MIN_VALUE), "(long) (Long.MAX_VALUE & Long.MIN_VALUE)"); + Tester.checkEqual(longAnd(Long.MAX_VALUE, -1L), (long) (Long.MAX_VALUE & -1L), "(long) (Long.MAX_VALUE & -1L)"); + Tester.checkEqual(longAnd(Long.MAX_VALUE, 0L), (long) (Long.MAX_VALUE & 0L), "(long) (Long.MAX_VALUE & 0L)"); + Tester.checkEqual(longAnd(Long.MAX_VALUE, 1L), (long) (Long.MAX_VALUE & 1L), "(long) (Long.MAX_VALUE & 1L)"); + Tester.checkEqual(longAnd(Long.MAX_VALUE, Long.MAX_VALUE), (long) (Long.MAX_VALUE & Long.MAX_VALUE), "(long) (Long.MAX_VALUE & Long.MAX_VALUE)"); + Tester.checkEqual(longXor(Long.MIN_VALUE, Long.MIN_VALUE), (long) (Long.MIN_VALUE ^ Long.MIN_VALUE), "(long) (Long.MIN_VALUE ^ Long.MIN_VALUE)"); + Tester.checkEqual(longXor(Long.MIN_VALUE, -1L), (long) (Long.MIN_VALUE ^ -1L), "(long) (Long.MIN_VALUE ^ -1L)"); + Tester.checkEqual(longXor(Long.MIN_VALUE, 0L), (long) (Long.MIN_VALUE ^ 0L), "(long) (Long.MIN_VALUE ^ 0L)"); + Tester.checkEqual(longXor(Long.MIN_VALUE, 1L), (long) (Long.MIN_VALUE ^ 1L), "(long) (Long.MIN_VALUE ^ 1L)"); + Tester.checkEqual(longXor(Long.MIN_VALUE, Long.MAX_VALUE), (long) (Long.MIN_VALUE ^ Long.MAX_VALUE), "(long) (Long.MIN_VALUE ^ Long.MAX_VALUE)"); + Tester.checkEqual(longXor(-1L, Long.MIN_VALUE), (long) (-1L ^ Long.MIN_VALUE), "(long) (-1L ^ Long.MIN_VALUE)"); + Tester.checkEqual(longXor(-1L, -1L), (long) (-1L ^ -1L), "(long) (-1L ^ -1L)"); + Tester.checkEqual(longXor(-1L, 0L), (long) (-1L ^ 0L), "(long) (-1L ^ 0L)"); + Tester.checkEqual(longXor(-1L, 1L), (long) (-1L ^ 1L), "(long) (-1L ^ 1L)"); + Tester.checkEqual(longXor(-1L, Long.MAX_VALUE), (long) (-1L ^ Long.MAX_VALUE), "(long) (-1L ^ Long.MAX_VALUE)"); + Tester.checkEqual(longXor(0L, Long.MIN_VALUE), (long) (0L ^ Long.MIN_VALUE), "(long) (0L ^ Long.MIN_VALUE)"); + Tester.checkEqual(longXor(0L, -1L), (long) (0L ^ -1L), "(long) (0L ^ -1L)"); + Tester.checkEqual(longXor(0L, 0L), (long) (0L ^ 0L), "(long) (0L ^ 0L)"); + Tester.checkEqual(longXor(0L, 1L), (long) (0L ^ 1L), "(long) (0L ^ 1L)"); + Tester.checkEqual(longXor(0L, Long.MAX_VALUE), (long) (0L ^ Long.MAX_VALUE), "(long) (0L ^ Long.MAX_VALUE)"); + Tester.checkEqual(longXor(1L, Long.MIN_VALUE), (long) (1L ^ Long.MIN_VALUE), "(long) (1L ^ Long.MIN_VALUE)"); + Tester.checkEqual(longXor(1L, -1L), (long) (1L ^ -1L), "(long) (1L ^ -1L)"); + Tester.checkEqual(longXor(1L, 0L), (long) (1L ^ 0L), "(long) (1L ^ 0L)"); + Tester.checkEqual(longXor(1L, 1L), (long) (1L ^ 1L), "(long) (1L ^ 1L)"); + Tester.checkEqual(longXor(1L, Long.MAX_VALUE), (long) (1L ^ Long.MAX_VALUE), "(long) (1L ^ Long.MAX_VALUE)"); + Tester.checkEqual(longXor(Long.MAX_VALUE, Long.MIN_VALUE), (long) (Long.MAX_VALUE ^ Long.MIN_VALUE), "(long) (Long.MAX_VALUE ^ Long.MIN_VALUE)"); + Tester.checkEqual(longXor(Long.MAX_VALUE, -1L), (long) (Long.MAX_VALUE ^ -1L), "(long) (Long.MAX_VALUE ^ -1L)"); + Tester.checkEqual(longXor(Long.MAX_VALUE, 0L), (long) (Long.MAX_VALUE ^ 0L), "(long) (Long.MAX_VALUE ^ 0L)"); + Tester.checkEqual(longXor(Long.MAX_VALUE, 1L), (long) (Long.MAX_VALUE ^ 1L), "(long) (Long.MAX_VALUE ^ 1L)"); + Tester.checkEqual(longXor(Long.MAX_VALUE, Long.MAX_VALUE), (long) (Long.MAX_VALUE ^ Long.MAX_VALUE), "(long) (Long.MAX_VALUE ^ Long.MAX_VALUE)"); + Tester.checkEqual(longOr(Long.MIN_VALUE, Long.MIN_VALUE), (long) (Long.MIN_VALUE | Long.MIN_VALUE), "(long) (Long.MIN_VALUE | Long.MIN_VALUE)"); + Tester.checkEqual(longOr(Long.MIN_VALUE, -1L), (long) (Long.MIN_VALUE | -1L), "(long) (Long.MIN_VALUE | -1L)"); + Tester.checkEqual(longOr(Long.MIN_VALUE, 0L), (long) (Long.MIN_VALUE | 0L), "(long) (Long.MIN_VALUE | 0L)"); + Tester.checkEqual(longOr(Long.MIN_VALUE, 1L), (long) (Long.MIN_VALUE | 1L), "(long) (Long.MIN_VALUE | 1L)"); + Tester.checkEqual(longOr(Long.MIN_VALUE, Long.MAX_VALUE), (long) (Long.MIN_VALUE | Long.MAX_VALUE), "(long) (Long.MIN_VALUE | Long.MAX_VALUE)"); + Tester.checkEqual(longOr(-1L, Long.MIN_VALUE), (long) (-1L | Long.MIN_VALUE), "(long) (-1L | Long.MIN_VALUE)"); + Tester.checkEqual(longOr(-1L, -1L), (long) (-1L | -1L), "(long) (-1L | -1L)"); + Tester.checkEqual(longOr(-1L, 0L), (long) (-1L | 0L), "(long) (-1L | 0L)"); + Tester.checkEqual(longOr(-1L, 1L), (long) (-1L | 1L), "(long) (-1L | 1L)"); + Tester.checkEqual(longOr(-1L, Long.MAX_VALUE), (long) (-1L | Long.MAX_VALUE), "(long) (-1L | Long.MAX_VALUE)"); + Tester.checkEqual(longOr(0L, Long.MIN_VALUE), (long) (0L | Long.MIN_VALUE), "(long) (0L | Long.MIN_VALUE)"); + Tester.checkEqual(longOr(0L, -1L), (long) (0L | -1L), "(long) (0L | -1L)"); + Tester.checkEqual(longOr(0L, 0L), (long) (0L | 0L), "(long) (0L | 0L)"); + Tester.checkEqual(longOr(0L, 1L), (long) (0L | 1L), "(long) (0L | 1L)"); + Tester.checkEqual(longOr(0L, Long.MAX_VALUE), (long) (0L | Long.MAX_VALUE), "(long) (0L | Long.MAX_VALUE)"); + Tester.checkEqual(longOr(1L, Long.MIN_VALUE), (long) (1L | Long.MIN_VALUE), "(long) (1L | Long.MIN_VALUE)"); + Tester.checkEqual(longOr(1L, -1L), (long) (1L | -1L), "(long) (1L | -1L)"); + Tester.checkEqual(longOr(1L, 0L), (long) (1L | 0L), "(long) (1L | 0L)"); + Tester.checkEqual(longOr(1L, 1L), (long) (1L | 1L), "(long) (1L | 1L)"); + Tester.checkEqual(longOr(1L, Long.MAX_VALUE), (long) (1L | Long.MAX_VALUE), "(long) (1L | Long.MAX_VALUE)"); + Tester.checkEqual(longOr(Long.MAX_VALUE, Long.MIN_VALUE), (long) (Long.MAX_VALUE | Long.MIN_VALUE), "(long) (Long.MAX_VALUE | Long.MIN_VALUE)"); + Tester.checkEqual(longOr(Long.MAX_VALUE, -1L), (long) (Long.MAX_VALUE | -1L), "(long) (Long.MAX_VALUE | -1L)"); + Tester.checkEqual(longOr(Long.MAX_VALUE, 0L), (long) (Long.MAX_VALUE | 0L), "(long) (Long.MAX_VALUE | 0L)"); + Tester.checkEqual(longOr(Long.MAX_VALUE, 1L), (long) (Long.MAX_VALUE | 1L), "(long) (Long.MAX_VALUE | 1L)"); + Tester.checkEqual(longOr(Long.MAX_VALUE, Long.MAX_VALUE), (long) (Long.MAX_VALUE | Long.MAX_VALUE), "(long) (Long.MAX_VALUE | Long.MAX_VALUE)"); + } + static void longSwitch() { + switch(0) { + case ((((long) + Long.MIN_VALUE) == 0) ? 0 : 0): + case ((((long) + -1L) == 0) ? 1 : 1): + case ((((long) + 0L) == 0) ? 2 : 2): + case ((((long) + 1L) == 0) ? 3 : 3): + case ((((long) + Long.MAX_VALUE) == 0) ? 4 : 4): + case ((((long) - Long.MIN_VALUE) == 0) ? 5 : 5): + case ((((long) - -1L) == 0) ? 6 : 6): + case ((((long) - 0L) == 0) ? 7 : 7): + case ((((long) - 1L) == 0) ? 8 : 8): + case ((((long) - Long.MAX_VALUE) == 0) ? 9 : 9): + case ((((long) ~ Long.MIN_VALUE) == 0) ? 10 : 10): + case ((((long) ~ -1L) == 0) ? 11 : 11): + case ((((long) ~ 0L) == 0) ? 12 : 12): + case ((((long) ~ 1L) == 0) ? 13 : 13): + case ((((long) ~ Long.MAX_VALUE) == 0) ? 14 : 14): + case ((((long) (Long.MIN_VALUE * Long.MIN_VALUE)) == 0) ? 15 : 15): + case ((((long) (Long.MIN_VALUE * -1L)) == 0) ? 16 : 16): + case ((((long) (Long.MIN_VALUE * 0L)) == 0) ? 17 : 17): + case ((((long) (Long.MIN_VALUE * 1L)) == 0) ? 18 : 18): + case ((((long) (Long.MIN_VALUE * Long.MAX_VALUE)) == 0) ? 19 : 19): + case ((((long) (-1L * Long.MIN_VALUE)) == 0) ? 20 : 20): + case ((((long) (-1L * -1L)) == 0) ? 21 : 21): + case ((((long) (-1L * 0L)) == 0) ? 22 : 22): + case ((((long) (-1L * 1L)) == 0) ? 23 : 23): + case ((((long) (-1L * Long.MAX_VALUE)) == 0) ? 24 : 24): + case ((((long) (0L * Long.MIN_VALUE)) == 0) ? 25 : 25): + case ((((long) (0L * -1L)) == 0) ? 26 : 26): + case ((((long) (0L * 0L)) == 0) ? 27 : 27): + case ((((long) (0L * 1L)) == 0) ? 28 : 28): + case ((((long) (0L * Long.MAX_VALUE)) == 0) ? 29 : 29): + case ((((long) (1L * Long.MIN_VALUE)) == 0) ? 30 : 30): + case ((((long) (1L * -1L)) == 0) ? 31 : 31): + case ((((long) (1L * 0L)) == 0) ? 32 : 32): + case ((((long) (1L * 1L)) == 0) ? 33 : 33): + case ((((long) (1L * Long.MAX_VALUE)) == 0) ? 34 : 34): + case ((((long) (Long.MAX_VALUE * Long.MIN_VALUE)) == 0) ? 35 : 35): + case ((((long) (Long.MAX_VALUE * -1L)) == 0) ? 36 : 36): + case ((((long) (Long.MAX_VALUE * 0L)) == 0) ? 37 : 37): + case ((((long) (Long.MAX_VALUE * 1L)) == 0) ? 38 : 38): + case ((((long) (Long.MAX_VALUE * Long.MAX_VALUE)) == 0) ? 39 : 39): + case ((((long) (Long.MIN_VALUE / Long.MIN_VALUE)) == 0) ? 40 : 40): + case ((((long) (Long.MIN_VALUE / -1L)) == 0) ? 41 : 41): + case ((((long) (Long.MIN_VALUE / 1L)) == 0) ? 42 : 42): + case ((((long) (Long.MIN_VALUE / Long.MAX_VALUE)) == 0) ? 43 : 43): + case ((((long) (-1L / Long.MIN_VALUE)) == 0) ? 44 : 44): + case ((((long) (-1L / -1L)) == 0) ? 45 : 45): + case ((((long) (-1L / 1L)) == 0) ? 46 : 46): + case ((((long) (-1L / Long.MAX_VALUE)) == 0) ? 47 : 47): + case ((((long) (0L / Long.MIN_VALUE)) == 0) ? 48 : 48): + case ((((long) (0L / -1L)) == 0) ? 49 : 49): + case ((((long) (0L / 1L)) == 0) ? 50 : 50): + case ((((long) (0L / Long.MAX_VALUE)) == 0) ? 51 : 51): + case ((((long) (1L / Long.MIN_VALUE)) == 0) ? 52 : 52): + case ((((long) (1L / -1L)) == 0) ? 53 : 53): + case ((((long) (1L / 1L)) == 0) ? 54 : 54): + case ((((long) (1L / Long.MAX_VALUE)) == 0) ? 55 : 55): + case ((((long) (Long.MAX_VALUE / Long.MIN_VALUE)) == 0) ? 56 : 56): + case ((((long) (Long.MAX_VALUE / -1L)) == 0) ? 57 : 57): + case ((((long) (Long.MAX_VALUE / 1L)) == 0) ? 58 : 58): + case ((((long) (Long.MAX_VALUE / Long.MAX_VALUE)) == 0) ? 59 : 59): + case ((((long) (Long.MIN_VALUE % Long.MIN_VALUE)) == 0) ? 60 : 60): + case ((((long) (Long.MIN_VALUE % -1L)) == 0) ? 61 : 61): + case ((((long) (Long.MIN_VALUE % 1L)) == 0) ? 62 : 62): + case ((((long) (Long.MIN_VALUE % Long.MAX_VALUE)) == 0) ? 63 : 63): + case ((((long) (-1L % Long.MIN_VALUE)) == 0) ? 64 : 64): + case ((((long) (-1L % -1L)) == 0) ? 65 : 65): + case ((((long) (-1L % 1L)) == 0) ? 66 : 66): + case ((((long) (-1L % Long.MAX_VALUE)) == 0) ? 67 : 67): + case ((((long) (0L % Long.MIN_VALUE)) == 0) ? 68 : 68): + case ((((long) (0L % -1L)) == 0) ? 69 : 69): + case ((((long) (0L % 1L)) == 0) ? 70 : 70): + case ((((long) (0L % Long.MAX_VALUE)) == 0) ? 71 : 71): + case ((((long) (1L % Long.MIN_VALUE)) == 0) ? 72 : 72): + case ((((long) (1L % -1L)) == 0) ? 73 : 73): + case ((((long) (1L % 1L)) == 0) ? 74 : 74): + case ((((long) (1L % Long.MAX_VALUE)) == 0) ? 75 : 75): + case ((((long) (Long.MAX_VALUE % Long.MIN_VALUE)) == 0) ? 76 : 76): + case ((((long) (Long.MAX_VALUE % -1L)) == 0) ? 77 : 77): + case ((((long) (Long.MAX_VALUE % 1L)) == 0) ? 78 : 78): + case ((((long) (Long.MAX_VALUE % Long.MAX_VALUE)) == 0) ? 79 : 79): + case ((((long) (Long.MIN_VALUE + Long.MIN_VALUE)) == 0) ? 80 : 80): + case ((((long) (Long.MIN_VALUE + -1L)) == 0) ? 81 : 81): + case ((((long) (Long.MIN_VALUE + 0L)) == 0) ? 82 : 82): + case ((((long) (Long.MIN_VALUE + 1L)) == 0) ? 83 : 83): + case ((((long) (Long.MIN_VALUE + Long.MAX_VALUE)) == 0) ? 84 : 84): + case ((((long) (-1L + Long.MIN_VALUE)) == 0) ? 85 : 85): + case ((((long) (-1L + -1L)) == 0) ? 86 : 86): + case ((((long) (-1L + 0L)) == 0) ? 87 : 87): + case ((((long) (-1L + 1L)) == 0) ? 88 : 88): + case ((((long) (-1L + Long.MAX_VALUE)) == 0) ? 89 : 89): + case ((((long) (0L + Long.MIN_VALUE)) == 0) ? 90 : 90): + case ((((long) (0L + -1L)) == 0) ? 91 : 91): + case ((((long) (0L + 0L)) == 0) ? 92 : 92): + case ((((long) (0L + 1L)) == 0) ? 93 : 93): + case ((((long) (0L + Long.MAX_VALUE)) == 0) ? 94 : 94): + case ((((long) (1L + Long.MIN_VALUE)) == 0) ? 95 : 95): + case ((((long) (1L + -1L)) == 0) ? 96 : 96): + case ((((long) (1L + 0L)) == 0) ? 97 : 97): + case ((((long) (1L + 1L)) == 0) ? 98 : 98): + case ((((long) (1L + Long.MAX_VALUE)) == 0) ? 99 : 99): + case ((((long) (Long.MAX_VALUE + Long.MIN_VALUE)) == 0) ? 100 : 100): + case ((((long) (Long.MAX_VALUE + -1L)) == 0) ? 101 : 101): + case ((((long) (Long.MAX_VALUE + 0L)) == 0) ? 102 : 102): + case ((((long) (Long.MAX_VALUE + 1L)) == 0) ? 103 : 103): + case ((((long) (Long.MAX_VALUE + Long.MAX_VALUE)) == 0) ? 104 : 104): + case ((((long) (Long.MIN_VALUE - Long.MIN_VALUE)) == 0) ? 105 : 105): + case ((((long) (Long.MIN_VALUE - -1L)) == 0) ? 106 : 106): + case ((((long) (Long.MIN_VALUE - 0L)) == 0) ? 107 : 107): + case ((((long) (Long.MIN_VALUE - 1L)) == 0) ? 108 : 108): + case ((((long) (Long.MIN_VALUE - Long.MAX_VALUE)) == 0) ? 109 : 109): + case ((((long) (-1L - Long.MIN_VALUE)) == 0) ? 110 : 110): + case ((((long) (-1L - -1L)) == 0) ? 111 : 111): + case ((((long) (-1L - 0L)) == 0) ? 112 : 112): + case ((((long) (-1L - 1L)) == 0) ? 113 : 113): + case ((((long) (-1L - Long.MAX_VALUE)) == 0) ? 114 : 114): + case ((((long) (0L - Long.MIN_VALUE)) == 0) ? 115 : 115): + case ((((long) (0L - -1L)) == 0) ? 116 : 116): + case ((((long) (0L - 0L)) == 0) ? 117 : 117): + case ((((long) (0L - 1L)) == 0) ? 118 : 118): + case ((((long) (0L - Long.MAX_VALUE)) == 0) ? 119 : 119): + case ((((long) (1L - Long.MIN_VALUE)) == 0) ? 120 : 120): + case ((((long) (1L - -1L)) == 0) ? 121 : 121): + case ((((long) (1L - 0L)) == 0) ? 122 : 122): + case ((((long) (1L - 1L)) == 0) ? 123 : 123): + case ((((long) (1L - Long.MAX_VALUE)) == 0) ? 124 : 124): + case ((((long) (Long.MAX_VALUE - Long.MIN_VALUE)) == 0) ? 125 : 125): + case ((((long) (Long.MAX_VALUE - -1L)) == 0) ? 126 : 126): + case ((((long) (Long.MAX_VALUE - 0L)) == 0) ? 127 : 127): + case ((((long) (Long.MAX_VALUE - 1L)) == 0) ? 128 : 128): + case ((((long) (Long.MAX_VALUE - Long.MAX_VALUE)) == 0) ? 129 : 129): + case ((((long) (Long.MIN_VALUE << Long.MIN_VALUE)) == 0) ? 130 : 130): + case ((((long) (Long.MIN_VALUE << -1L)) == 0) ? 131 : 131): + case ((((long) (Long.MIN_VALUE << 0L)) == 0) ? 132 : 132): + case ((((long) (Long.MIN_VALUE << 1L)) == 0) ? 133 : 133): + case ((((long) (Long.MIN_VALUE << Long.MAX_VALUE)) == 0) ? 134 : 134): + case ((((long) (-1L << Long.MIN_VALUE)) == 0) ? 135 : 135): + case ((((long) (-1L << -1L)) == 0) ? 136 : 136): + case ((((long) (-1L << 0L)) == 0) ? 137 : 137): + case ((((long) (-1L << 1L)) == 0) ? 138 : 138): + case ((((long) (-1L << Long.MAX_VALUE)) == 0) ? 139 : 139): + case ((((long) (0L << Long.MIN_VALUE)) == 0) ? 140 : 140): + case ((((long) (0L << -1L)) == 0) ? 141 : 141): + case ((((long) (0L << 0L)) == 0) ? 142 : 142): + case ((((long) (0L << 1L)) == 0) ? 143 : 143): + case ((((long) (0L << Long.MAX_VALUE)) == 0) ? 144 : 144): + case ((((long) (1L << Long.MIN_VALUE)) == 0) ? 145 : 145): + case ((((long) (1L << -1L)) == 0) ? 146 : 146): + case ((((long) (1L << 0L)) == 0) ? 147 : 147): + case ((((long) (1L << 1L)) == 0) ? 148 : 148): + case ((((long) (1L << Long.MAX_VALUE)) == 0) ? 149 : 149): + case ((((long) (Long.MAX_VALUE << Long.MIN_VALUE)) == 0) ? 150 : 150): + case ((((long) (Long.MAX_VALUE << -1L)) == 0) ? 151 : 151): + case ((((long) (Long.MAX_VALUE << 0L)) == 0) ? 152 : 152): + case ((((long) (Long.MAX_VALUE << 1L)) == 0) ? 153 : 153): + case ((((long) (Long.MAX_VALUE << Long.MAX_VALUE)) == 0) ? 154 : 154): + case ((((long) (Long.MIN_VALUE >> Long.MIN_VALUE)) == 0) ? 155 : 155): + case ((((long) (Long.MIN_VALUE >> -1L)) == 0) ? 156 : 156): + case ((((long) (Long.MIN_VALUE >> 0L)) == 0) ? 157 : 157): + case ((((long) (Long.MIN_VALUE >> 1L)) == 0) ? 158 : 158): + case ((((long) (Long.MIN_VALUE >> Long.MAX_VALUE)) == 0) ? 159 : 159): + case ((((long) (-1L >> Long.MIN_VALUE)) == 0) ? 160 : 160): + case ((((long) (-1L >> -1L)) == 0) ? 161 : 161): + case ((((long) (-1L >> 0L)) == 0) ? 162 : 162): + case ((((long) (-1L >> 1L)) == 0) ? 163 : 163): + case ((((long) (-1L >> Long.MAX_VALUE)) == 0) ? 164 : 164): + case ((((long) (0L >> Long.MIN_VALUE)) == 0) ? 165 : 165): + case ((((long) (0L >> -1L)) == 0) ? 166 : 166): + case ((((long) (0L >> 0L)) == 0) ? 167 : 167): + case ((((long) (0L >> 1L)) == 0) ? 168 : 168): + case ((((long) (0L >> Long.MAX_VALUE)) == 0) ? 169 : 169): + case ((((long) (1L >> Long.MIN_VALUE)) == 0) ? 170 : 170): + case ((((long) (1L >> -1L)) == 0) ? 171 : 171): + case ((((long) (1L >> 0L)) == 0) ? 172 : 172): + case ((((long) (1L >> 1L)) == 0) ? 173 : 173): + case ((((long) (1L >> Long.MAX_VALUE)) == 0) ? 174 : 174): + case ((((long) (Long.MAX_VALUE >> Long.MIN_VALUE)) == 0) ? 175 : 175): + case ((((long) (Long.MAX_VALUE >> -1L)) == 0) ? 176 : 176): + case ((((long) (Long.MAX_VALUE >> 0L)) == 0) ? 177 : 177): + case ((((long) (Long.MAX_VALUE >> 1L)) == 0) ? 178 : 178): + case ((((long) (Long.MAX_VALUE >> Long.MAX_VALUE)) == 0) ? 179 : 179): + case ((((long) (Long.MIN_VALUE >>> Long.MIN_VALUE)) == 0) ? 180 : 180): + case ((((long) (Long.MIN_VALUE >>> -1L)) == 0) ? 181 : 181): + case ((((long) (Long.MIN_VALUE >>> 0L)) == 0) ? 182 : 182): + case ((((long) (Long.MIN_VALUE >>> 1L)) == 0) ? 183 : 183): + case ((((long) (Long.MIN_VALUE >>> Long.MAX_VALUE)) == 0) ? 184 : 184): + case ((((long) (-1L >>> Long.MIN_VALUE)) == 0) ? 185 : 185): + case ((((long) (-1L >>> -1L)) == 0) ? 186 : 186): + case ((((long) (-1L >>> 0L)) == 0) ? 187 : 187): + case ((((long) (-1L >>> 1L)) == 0) ? 188 : 188): + case ((((long) (-1L >>> Long.MAX_VALUE)) == 0) ? 189 : 189): + case ((((long) (0L >>> Long.MIN_VALUE)) == 0) ? 190 : 190): + case ((((long) (0L >>> -1L)) == 0) ? 191 : 191): + case ((((long) (0L >>> 0L)) == 0) ? 192 : 192): + case ((((long) (0L >>> 1L)) == 0) ? 193 : 193): + case ((((long) (0L >>> Long.MAX_VALUE)) == 0) ? 194 : 194): + case ((((long) (1L >>> Long.MIN_VALUE)) == 0) ? 195 : 195): + case ((((long) (1L >>> -1L)) == 0) ? 196 : 196): + case ((((long) (1L >>> 0L)) == 0) ? 197 : 197): + case ((((long) (1L >>> 1L)) == 0) ? 198 : 198): + case ((((long) (1L >>> Long.MAX_VALUE)) == 0) ? 199 : 199): + case ((((long) (Long.MAX_VALUE >>> Long.MIN_VALUE)) == 0) ? 200 : 200): + case ((((long) (Long.MAX_VALUE >>> -1L)) == 0) ? 201 : 201): + case ((((long) (Long.MAX_VALUE >>> 0L)) == 0) ? 202 : 202): + case ((((long) (Long.MAX_VALUE >>> 1L)) == 0) ? 203 : 203): + case ((((long) (Long.MAX_VALUE >>> Long.MAX_VALUE)) == 0) ? 204 : 204): + case ((Long.MIN_VALUE < Long.MIN_VALUE) ? 205 : 205): + case ((Long.MIN_VALUE < -1L) ? 206 : 206): + case ((Long.MIN_VALUE < 0L) ? 207 : 207): + case ((Long.MIN_VALUE < 1L) ? 208 : 208): + case ((Long.MIN_VALUE < Long.MAX_VALUE) ? 209 : 209): + case ((-1L < Long.MIN_VALUE) ? 210 : 210): + case ((-1L < -1L) ? 211 : 211): + case ((-1L < 0L) ? 212 : 212): + case ((-1L < 1L) ? 213 : 213): + case ((-1L < Long.MAX_VALUE) ? 214 : 214): + case ((0L < Long.MIN_VALUE) ? 215 : 215): + case ((0L < -1L) ? 216 : 216): + case ((0L < 0L) ? 217 : 217): + case ((0L < 1L) ? 218 : 218): + case ((0L < Long.MAX_VALUE) ? 219 : 219): + case ((1L < Long.MIN_VALUE) ? 220 : 220): + case ((1L < -1L) ? 221 : 221): + case ((1L < 0L) ? 222 : 222): + case ((1L < 1L) ? 223 : 223): + case ((1L < Long.MAX_VALUE) ? 224 : 224): + case ((Long.MAX_VALUE < Long.MIN_VALUE) ? 225 : 225): + case ((Long.MAX_VALUE < -1L) ? 226 : 226): + case ((Long.MAX_VALUE < 0L) ? 227 : 227): + case ((Long.MAX_VALUE < 1L) ? 228 : 228): + case ((Long.MAX_VALUE < Long.MAX_VALUE) ? 229 : 229): + case ((Long.MIN_VALUE > Long.MIN_VALUE) ? 230 : 230): + case ((Long.MIN_VALUE > -1L) ? 231 : 231): + case ((Long.MIN_VALUE > 0L) ? 232 : 232): + case ((Long.MIN_VALUE > 1L) ? 233 : 233): + case ((Long.MIN_VALUE > Long.MAX_VALUE) ? 234 : 234): + case ((-1L > Long.MIN_VALUE) ? 235 : 235): + case ((-1L > -1L) ? 236 : 236): + case ((-1L > 0L) ? 237 : 237): + case ((-1L > 1L) ? 238 : 238): + case ((-1L > Long.MAX_VALUE) ? 239 : 239): + case ((0L > Long.MIN_VALUE) ? 240 : 240): + case ((0L > -1L) ? 241 : 241): + case ((0L > 0L) ? 242 : 242): + case ((0L > 1L) ? 243 : 243): + case ((0L > Long.MAX_VALUE) ? 244 : 244): + case ((1L > Long.MIN_VALUE) ? 245 : 245): + case ((1L > -1L) ? 246 : 246): + case ((1L > 0L) ? 247 : 247): + case ((1L > 1L) ? 248 : 248): + case ((1L > Long.MAX_VALUE) ? 249 : 249): + case ((Long.MAX_VALUE > Long.MIN_VALUE) ? 250 : 250): + case ((Long.MAX_VALUE > -1L) ? 251 : 251): + case ((Long.MAX_VALUE > 0L) ? 252 : 252): + case ((Long.MAX_VALUE > 1L) ? 253 : 253): + case ((Long.MAX_VALUE > Long.MAX_VALUE) ? 254 : 254): + case ((Long.MIN_VALUE <= Long.MIN_VALUE) ? 255 : 255): + case ((Long.MIN_VALUE <= -1L) ? 256 : 256): + case ((Long.MIN_VALUE <= 0L) ? 257 : 257): + case ((Long.MIN_VALUE <= 1L) ? 258 : 258): + case ((Long.MIN_VALUE <= Long.MAX_VALUE) ? 259 : 259): + case ((-1L <= Long.MIN_VALUE) ? 260 : 260): + case ((-1L <= -1L) ? 261 : 261): + case ((-1L <= 0L) ? 262 : 262): + case ((-1L <= 1L) ? 263 : 263): + case ((-1L <= Long.MAX_VALUE) ? 264 : 264): + case ((0L <= Long.MIN_VALUE) ? 265 : 265): + case ((0L <= -1L) ? 266 : 266): + case ((0L <= 0L) ? 267 : 267): + case ((0L <= 1L) ? 268 : 268): + case ((0L <= Long.MAX_VALUE) ? 269 : 269): + case ((1L <= Long.MIN_VALUE) ? 270 : 270): + case ((1L <= -1L) ? 271 : 271): + case ((1L <= 0L) ? 272 : 272): + case ((1L <= 1L) ? 273 : 273): + case ((1L <= Long.MAX_VALUE) ? 274 : 274): + case ((Long.MAX_VALUE <= Long.MIN_VALUE) ? 275 : 275): + case ((Long.MAX_VALUE <= -1L) ? 276 : 276): + case ((Long.MAX_VALUE <= 0L) ? 277 : 277): + case ((Long.MAX_VALUE <= 1L) ? 278 : 278): + case ((Long.MAX_VALUE <= Long.MAX_VALUE) ? 279 : 279): + case ((Long.MIN_VALUE >= Long.MIN_VALUE) ? 280 : 280): + case ((Long.MIN_VALUE >= -1L) ? 281 : 281): + case ((Long.MIN_VALUE >= 0L) ? 282 : 282): + case ((Long.MIN_VALUE >= 1L) ? 283 : 283): + case ((Long.MIN_VALUE >= Long.MAX_VALUE) ? 284 : 284): + case ((-1L >= Long.MIN_VALUE) ? 285 : 285): + case ((-1L >= -1L) ? 286 : 286): + case ((-1L >= 0L) ? 287 : 287): + case ((-1L >= 1L) ? 288 : 288): + case ((-1L >= Long.MAX_VALUE) ? 289 : 289): + case ((0L >= Long.MIN_VALUE) ? 290 : 290): + case ((0L >= -1L) ? 291 : 291): + case ((0L >= 0L) ? 292 : 292): + case ((0L >= 1L) ? 293 : 293): + case ((0L >= Long.MAX_VALUE) ? 294 : 294): + case ((1L >= Long.MIN_VALUE) ? 295 : 295): + case ((1L >= -1L) ? 296 : 296): + case ((1L >= 0L) ? 297 : 297): + case ((1L >= 1L) ? 298 : 298): + case ((1L >= Long.MAX_VALUE) ? 299 : 299): + case ((Long.MAX_VALUE >= Long.MIN_VALUE) ? 300 : 300): + case ((Long.MAX_VALUE >= -1L) ? 301 : 301): + case ((Long.MAX_VALUE >= 0L) ? 302 : 302): + case ((Long.MAX_VALUE >= 1L) ? 303 : 303): + case ((Long.MAX_VALUE >= Long.MAX_VALUE) ? 304 : 304): + case ((Long.MIN_VALUE == Long.MIN_VALUE) ? 305 : 305): + case ((Long.MIN_VALUE == -1L) ? 306 : 306): + case ((Long.MIN_VALUE == 0L) ? 307 : 307): + case ((Long.MIN_VALUE == 1L) ? 308 : 308): + case ((Long.MIN_VALUE == Long.MAX_VALUE) ? 309 : 309): + case ((-1L == Long.MIN_VALUE) ? 310 : 310): + case ((-1L == -1L) ? 311 : 311): + case ((-1L == 0L) ? 312 : 312): + case ((-1L == 1L) ? 313 : 313): + case ((-1L == Long.MAX_VALUE) ? 314 : 314): + case ((0L == Long.MIN_VALUE) ? 315 : 315): + case ((0L == -1L) ? 316 : 316): + case ((0L == 0L) ? 317 : 317): + case ((0L == 1L) ? 318 : 318): + case ((0L == Long.MAX_VALUE) ? 319 : 319): + case ((1L == Long.MIN_VALUE) ? 320 : 320): + case ((1L == -1L) ? 321 : 321): + case ((1L == 0L) ? 322 : 322): + case ((1L == 1L) ? 323 : 323): + case ((1L == Long.MAX_VALUE) ? 324 : 324): + case ((Long.MAX_VALUE == Long.MIN_VALUE) ? 325 : 325): + case ((Long.MAX_VALUE == -1L) ? 326 : 326): + case ((Long.MAX_VALUE == 0L) ? 327 : 327): + case ((Long.MAX_VALUE == 1L) ? 328 : 328): + case ((Long.MAX_VALUE == Long.MAX_VALUE) ? 329 : 329): + case ((Long.MIN_VALUE != Long.MIN_VALUE) ? 330 : 330): + case ((Long.MIN_VALUE != -1L) ? 331 : 331): + case ((Long.MIN_VALUE != 0L) ? 332 : 332): + case ((Long.MIN_VALUE != 1L) ? 333 : 333): + case ((Long.MIN_VALUE != Long.MAX_VALUE) ? 334 : 334): + case ((-1L != Long.MIN_VALUE) ? 335 : 335): + case ((-1L != -1L) ? 336 : 336): + case ((-1L != 0L) ? 337 : 337): + case ((-1L != 1L) ? 338 : 338): + case ((-1L != Long.MAX_VALUE) ? 339 : 339): + case ((0L != Long.MIN_VALUE) ? 340 : 340): + case ((0L != -1L) ? 341 : 341): + case ((0L != 0L) ? 342 : 342): + case ((0L != 1L) ? 343 : 343): + case ((0L != Long.MAX_VALUE) ? 344 : 344): + case ((1L != Long.MIN_VALUE) ? 345 : 345): + case ((1L != -1L) ? 346 : 346): + case ((1L != 0L) ? 347 : 347): + case ((1L != 1L) ? 348 : 348): + case ((1L != Long.MAX_VALUE) ? 349 : 349): + case ((Long.MAX_VALUE != Long.MIN_VALUE) ? 350 : 350): + case ((Long.MAX_VALUE != -1L) ? 351 : 351): + case ((Long.MAX_VALUE != 0L) ? 352 : 352): + case ((Long.MAX_VALUE != 1L) ? 353 : 353): + case ((Long.MAX_VALUE != Long.MAX_VALUE) ? 354 : 354): + case ((((long) (Long.MIN_VALUE & Long.MIN_VALUE)) == 0) ? 355 : 355): + case ((((long) (Long.MIN_VALUE & -1L)) == 0) ? 356 : 356): + case ((((long) (Long.MIN_VALUE & 0L)) == 0) ? 357 : 357): + case ((((long) (Long.MIN_VALUE & 1L)) == 0) ? 358 : 358): + case ((((long) (Long.MIN_VALUE & Long.MAX_VALUE)) == 0) ? 359 : 359): + case ((((long) (-1L & Long.MIN_VALUE)) == 0) ? 360 : 360): + case ((((long) (-1L & -1L)) == 0) ? 361 : 361): + case ((((long) (-1L & 0L)) == 0) ? 362 : 362): + case ((((long) (-1L & 1L)) == 0) ? 363 : 363): + case ((((long) (-1L & Long.MAX_VALUE)) == 0) ? 364 : 364): + case ((((long) (0L & Long.MIN_VALUE)) == 0) ? 365 : 365): + case ((((long) (0L & -1L)) == 0) ? 366 : 366): + case ((((long) (0L & 0L)) == 0) ? 367 : 367): + case ((((long) (0L & 1L)) == 0) ? 368 : 368): + case ((((long) (0L & Long.MAX_VALUE)) == 0) ? 369 : 369): + case ((((long) (1L & Long.MIN_VALUE)) == 0) ? 370 : 370): + case ((((long) (1L & -1L)) == 0) ? 371 : 371): + case ((((long) (1L & 0L)) == 0) ? 372 : 372): + case ((((long) (1L & 1L)) == 0) ? 373 : 373): + case ((((long) (1L & Long.MAX_VALUE)) == 0) ? 374 : 374): + case ((((long) (Long.MAX_VALUE & Long.MIN_VALUE)) == 0) ? 375 : 375): + case ((((long) (Long.MAX_VALUE & -1L)) == 0) ? 376 : 376): + case ((((long) (Long.MAX_VALUE & 0L)) == 0) ? 377 : 377): + case ((((long) (Long.MAX_VALUE & 1L)) == 0) ? 378 : 378): + case ((((long) (Long.MAX_VALUE & Long.MAX_VALUE)) == 0) ? 379 : 379): + case ((((long) (Long.MIN_VALUE ^ Long.MIN_VALUE)) == 0) ? 380 : 380): + case ((((long) (Long.MIN_VALUE ^ -1L)) == 0) ? 381 : 381): + case ((((long) (Long.MIN_VALUE ^ 0L)) == 0) ? 382 : 382): + case ((((long) (Long.MIN_VALUE ^ 1L)) == 0) ? 383 : 383): + case ((((long) (Long.MIN_VALUE ^ Long.MAX_VALUE)) == 0) ? 384 : 384): + case ((((long) (-1L ^ Long.MIN_VALUE)) == 0) ? 385 : 385): + case ((((long) (-1L ^ -1L)) == 0) ? 386 : 386): + case ((((long) (-1L ^ 0L)) == 0) ? 387 : 387): + case ((((long) (-1L ^ 1L)) == 0) ? 388 : 388): + case ((((long) (-1L ^ Long.MAX_VALUE)) == 0) ? 389 : 389): + case ((((long) (0L ^ Long.MIN_VALUE)) == 0) ? 390 : 390): + case ((((long) (0L ^ -1L)) == 0) ? 391 : 391): + case ((((long) (0L ^ 0L)) == 0) ? 392 : 392): + case ((((long) (0L ^ 1L)) == 0) ? 393 : 393): + case ((((long) (0L ^ Long.MAX_VALUE)) == 0) ? 394 : 394): + case ((((long) (1L ^ Long.MIN_VALUE)) == 0) ? 395 : 395): + case ((((long) (1L ^ -1L)) == 0) ? 396 : 396): + case ((((long) (1L ^ 0L)) == 0) ? 397 : 397): + case ((((long) (1L ^ 1L)) == 0) ? 398 : 398): + case ((((long) (1L ^ Long.MAX_VALUE)) == 0) ? 399 : 399): + case ((((long) (Long.MAX_VALUE ^ Long.MIN_VALUE)) == 0) ? 400 : 400): + case ((((long) (Long.MAX_VALUE ^ -1L)) == 0) ? 401 : 401): + case ((((long) (Long.MAX_VALUE ^ 0L)) == 0) ? 402 : 402): + case ((((long) (Long.MAX_VALUE ^ 1L)) == 0) ? 403 : 403): + case ((((long) (Long.MAX_VALUE ^ Long.MAX_VALUE)) == 0) ? 404 : 404): + case ((((long) (Long.MIN_VALUE | Long.MIN_VALUE)) == 0) ? 405 : 405): + case ((((long) (Long.MIN_VALUE | -1L)) == 0) ? 406 : 406): + case ((((long) (Long.MIN_VALUE | 0L)) == 0) ? 407 : 407): + case ((((long) (Long.MIN_VALUE | 1L)) == 0) ? 408 : 408): + case ((((long) (Long.MIN_VALUE | Long.MAX_VALUE)) == 0) ? 409 : 409): + case ((((long) (-1L | Long.MIN_VALUE)) == 0) ? 410 : 410): + case ((((long) (-1L | -1L)) == 0) ? 411 : 411): + case ((((long) (-1L | 0L)) == 0) ? 412 : 412): + case ((((long) (-1L | 1L)) == 0) ? 413 : 413): + case ((((long) (-1L | Long.MAX_VALUE)) == 0) ? 414 : 414): + case ((((long) (0L | Long.MIN_VALUE)) == 0) ? 415 : 415): + case ((((long) (0L | -1L)) == 0) ? 416 : 416): + case ((((long) (0L | 0L)) == 0) ? 417 : 417): + case ((((long) (0L | 1L)) == 0) ? 418 : 418): + case ((((long) (0L | Long.MAX_VALUE)) == 0) ? 419 : 419): + case ((((long) (1L | Long.MIN_VALUE)) == 0) ? 420 : 420): + case ((((long) (1L | -1L)) == 0) ? 421 : 421): + case ((((long) (1L | 0L)) == 0) ? 422 : 422): + case ((((long) (1L | 1L)) == 0) ? 423 : 423): + case ((((long) (1L | Long.MAX_VALUE)) == 0) ? 424 : 424): + case ((((long) (Long.MAX_VALUE | Long.MIN_VALUE)) == 0) ? 425 : 425): + case ((((long) (Long.MAX_VALUE | -1L)) == 0) ? 426 : 426): + case ((((long) (Long.MAX_VALUE | 0L)) == 0) ? 427 : 427): + case ((((long) (Long.MAX_VALUE | 1L)) == 0) ? 428 : 428): + case ((((long) (Long.MAX_VALUE | Long.MAX_VALUE)) == 0) ? 429 : 429): + default: + } + } + + // -------- + // float tests + static float floatPlus(float x) { return (float) + x; } + static float floatMinus(float x) { return (float) - x; } + static float floatTimes(float x, float y) { return (float) (x * y); } + static float floatDiv(float x, float y) { return (float) (x / y); } + static float floatRem(float x, float y) { return (float) (x % y); } + static float floatAdd(float x, float y) { return (float) (x + y); } + static float floatSub(float x, float y) { return (float) (x - y); } + static boolean floatLt(float x, float y) { return x < y; } + static boolean floatGt(float x, float y) { return x > y; } + static boolean floatLe(float x, float y) { return x <= y; } + static boolean floatGe(float x, float y) { return x >= y; } + static boolean floatEq(float x, float y) { return x == y; } + static boolean floatNe(float x, float y) { return x != y; } + static void floatTest() { + Tester.checkEqual(floatPlus(Float.NEGATIVE_INFINITY), (float) + Float.NEGATIVE_INFINITY, "(float) + Float.NEGATIVE_INFINITY"); + Tester.checkEqual(floatPlus(-1.0f), (float) + -1.0f, "(float) + -1.0f"); + Tester.checkEqual(floatPlus(-0.0f), (float) + -0.0f, "(float) + -0.0f"); + Tester.checkEqual(floatPlus(0.0f), (float) + 0.0f, "(float) + 0.0f"); + Tester.checkEqual(floatPlus(Float.MIN_VALUE), (float) + Float.MIN_VALUE, "(float) + Float.MIN_VALUE"); + Tester.checkEqual(floatPlus(1.0f), (float) + 1.0f, "(float) + 1.0f"); + Tester.checkEqual(floatPlus(Float.MAX_VALUE), (float) + Float.MAX_VALUE, "(float) + Float.MAX_VALUE"); + Tester.checkEqual(floatPlus(Float.POSITIVE_INFINITY), (float) + Float.POSITIVE_INFINITY, "(float) + Float.POSITIVE_INFINITY"); + Tester.checkEqual(floatPlus(Float.NaN), (float) + Float.NaN, "(float) + Float.NaN"); + Tester.checkEqual(floatMinus(Float.NEGATIVE_INFINITY), (float) - Float.NEGATIVE_INFINITY, "(float) - Float.NEGATIVE_INFINITY"); + Tester.checkEqual(floatMinus(-1.0f), (float) - -1.0f, "(float) - -1.0f"); + Tester.checkEqual(floatMinus(-0.0f), (float) - -0.0f, "(float) - -0.0f"); + Tester.checkEqual(floatMinus(0.0f), (float) - 0.0f, "(float) - 0.0f"); + Tester.checkEqual(floatMinus(Float.MIN_VALUE), (float) - Float.MIN_VALUE, "(float) - Float.MIN_VALUE"); + Tester.checkEqual(floatMinus(1.0f), (float) - 1.0f, "(float) - 1.0f"); + Tester.checkEqual(floatMinus(Float.MAX_VALUE), (float) - Float.MAX_VALUE, "(float) - Float.MAX_VALUE"); + Tester.checkEqual(floatMinus(Float.POSITIVE_INFINITY), (float) - Float.POSITIVE_INFINITY, "(float) - Float.POSITIVE_INFINITY"); + Tester.checkEqual(floatMinus(Float.NaN), (float) - Float.NaN, "(float) - Float.NaN"); + Tester.checkEqual(floatTimes(Float.NEGATIVE_INFINITY, Float.NEGATIVE_INFINITY), (float) (Float.NEGATIVE_INFINITY * Float.NEGATIVE_INFINITY), "(float) (Float.NEGATIVE_INFINITY * Float.NEGATIVE_INFINITY)"); + Tester.checkEqual(floatTimes(Float.NEGATIVE_INFINITY, -1.0f), (float) (Float.NEGATIVE_INFINITY * -1.0f), "(float) (Float.NEGATIVE_INFINITY * -1.0f)"); + Tester.checkEqual(floatTimes(Float.NEGATIVE_INFINITY, -0.0f), (float) (Float.NEGATIVE_INFINITY * -0.0f), "(float) (Float.NEGATIVE_INFINITY * -0.0f)"); + Tester.checkEqual(floatTimes(Float.NEGATIVE_INFINITY, 0.0f), (float) (Float.NEGATIVE_INFINITY * 0.0f), "(float) (Float.NEGATIVE_INFINITY * 0.0f)"); + Tester.checkEqual(floatTimes(Float.NEGATIVE_INFINITY, Float.MIN_VALUE), (float) (Float.NEGATIVE_INFINITY * Float.MIN_VALUE), "(float) (Float.NEGATIVE_INFINITY * Float.MIN_VALUE)"); + Tester.checkEqual(floatTimes(Float.NEGATIVE_INFINITY, 1.0f), (float) (Float.NEGATIVE_INFINITY * 1.0f), "(float) (Float.NEGATIVE_INFINITY * 1.0f)"); + Tester.checkEqual(floatTimes(Float.NEGATIVE_INFINITY, Float.MAX_VALUE), (float) (Float.NEGATIVE_INFINITY * Float.MAX_VALUE), "(float) (Float.NEGATIVE_INFINITY * Float.MAX_VALUE)"); + Tester.checkEqual(floatTimes(Float.NEGATIVE_INFINITY, Float.POSITIVE_INFINITY), (float) (Float.NEGATIVE_INFINITY * Float.POSITIVE_INFINITY), "(float) (Float.NEGATIVE_INFINITY * Float.POSITIVE_INFINITY)"); + Tester.checkEqual(floatTimes(Float.NEGATIVE_INFINITY, Float.NaN), (float) (Float.NEGATIVE_INFINITY * Float.NaN), "(float) (Float.NEGATIVE_INFINITY * Float.NaN)"); + Tester.checkEqual(floatTimes(-1.0f, Float.NEGATIVE_INFINITY), (float) (-1.0f * Float.NEGATIVE_INFINITY), "(float) (-1.0f * Float.NEGATIVE_INFINITY)"); + Tester.checkEqual(floatTimes(-1.0f, -1.0f), (float) (-1.0f * -1.0f), "(float) (-1.0f * -1.0f)"); + Tester.checkEqual(floatTimes(-1.0f, -0.0f), (float) (-1.0f * -0.0f), "(float) (-1.0f * -0.0f)"); + Tester.checkEqual(floatTimes(-1.0f, 0.0f), (float) (-1.0f * 0.0f), "(float) (-1.0f * 0.0f)"); + Tester.checkEqual(floatTimes(-1.0f, Float.MIN_VALUE), (float) (-1.0f * Float.MIN_VALUE), "(float) (-1.0f * Float.MIN_VALUE)"); + Tester.checkEqual(floatTimes(-1.0f, 1.0f), (float) (-1.0f * 1.0f), "(float) (-1.0f * 1.0f)"); + Tester.checkEqual(floatTimes(-1.0f, Float.MAX_VALUE), (float) (-1.0f * Float.MAX_VALUE), "(float) (-1.0f * Float.MAX_VALUE)"); + Tester.checkEqual(floatTimes(-1.0f, Float.POSITIVE_INFINITY), (float) (-1.0f * Float.POSITIVE_INFINITY), "(float) (-1.0f * Float.POSITIVE_INFINITY)"); + Tester.checkEqual(floatTimes(-1.0f, Float.NaN), (float) (-1.0f * Float.NaN), "(float) (-1.0f * Float.NaN)"); + Tester.checkEqual(floatTimes(-0.0f, Float.NEGATIVE_INFINITY), (float) (-0.0f * Float.NEGATIVE_INFINITY), "(float) (-0.0f * Float.NEGATIVE_INFINITY)"); + Tester.checkEqual(floatTimes(-0.0f, -1.0f), (float) (-0.0f * -1.0f), "(float) (-0.0f * -1.0f)"); + Tester.checkEqual(floatTimes(-0.0f, -0.0f), (float) (-0.0f * -0.0f), "(float) (-0.0f * -0.0f)"); + Tester.checkEqual(floatTimes(-0.0f, 0.0f), (float) (-0.0f * 0.0f), "(float) (-0.0f * 0.0f)"); + Tester.checkEqual(floatTimes(-0.0f, Float.MIN_VALUE), (float) (-0.0f * Float.MIN_VALUE), "(float) (-0.0f * Float.MIN_VALUE)"); + Tester.checkEqual(floatTimes(-0.0f, 1.0f), (float) (-0.0f * 1.0f), "(float) (-0.0f * 1.0f)"); + Tester.checkEqual(floatTimes(-0.0f, Float.MAX_VALUE), (float) (-0.0f * Float.MAX_VALUE), "(float) (-0.0f * Float.MAX_VALUE)"); + Tester.checkEqual(floatTimes(-0.0f, Float.POSITIVE_INFINITY), (float) (-0.0f * Float.POSITIVE_INFINITY), "(float) (-0.0f * Float.POSITIVE_INFINITY)"); + Tester.checkEqual(floatTimes(-0.0f, Float.NaN), (float) (-0.0f * Float.NaN), "(float) (-0.0f * Float.NaN)"); + Tester.checkEqual(floatTimes(0.0f, Float.NEGATIVE_INFINITY), (float) (0.0f * Float.NEGATIVE_INFINITY), "(float) (0.0f * Float.NEGATIVE_INFINITY)"); + Tester.checkEqual(floatTimes(0.0f, -1.0f), (float) (0.0f * -1.0f), "(float) (0.0f * -1.0f)"); + Tester.checkEqual(floatTimes(0.0f, -0.0f), (float) (0.0f * -0.0f), "(float) (0.0f * -0.0f)"); + Tester.checkEqual(floatTimes(0.0f, 0.0f), (float) (0.0f * 0.0f), "(float) (0.0f * 0.0f)"); + Tester.checkEqual(floatTimes(0.0f, Float.MIN_VALUE), (float) (0.0f * Float.MIN_VALUE), "(float) (0.0f * Float.MIN_VALUE)"); + Tester.checkEqual(floatTimes(0.0f, 1.0f), (float) (0.0f * 1.0f), "(float) (0.0f * 1.0f)"); + Tester.checkEqual(floatTimes(0.0f, Float.MAX_VALUE), (float) (0.0f * Float.MAX_VALUE), "(float) (0.0f * Float.MAX_VALUE)"); + Tester.checkEqual(floatTimes(0.0f, Float.POSITIVE_INFINITY), (float) (0.0f * Float.POSITIVE_INFINITY), "(float) (0.0f * Float.POSITIVE_INFINITY)"); + Tester.checkEqual(floatTimes(0.0f, Float.NaN), (float) (0.0f * Float.NaN), "(float) (0.0f * Float.NaN)"); + Tester.checkEqual(floatTimes(Float.MIN_VALUE, Float.NEGATIVE_INFINITY), (float) (Float.MIN_VALUE * Float.NEGATIVE_INFINITY), "(float) (Float.MIN_VALUE * Float.NEGATIVE_INFINITY)"); + Tester.checkEqual(floatTimes(Float.MIN_VALUE, -1.0f), (float) (Float.MIN_VALUE * -1.0f), "(float) (Float.MIN_VALUE * -1.0f)"); + Tester.checkEqual(floatTimes(Float.MIN_VALUE, -0.0f), (float) (Float.MIN_VALUE * -0.0f), "(float) (Float.MIN_VALUE * -0.0f)"); + Tester.checkEqual(floatTimes(Float.MIN_VALUE, 0.0f), (float) (Float.MIN_VALUE * 0.0f), "(float) (Float.MIN_VALUE * 0.0f)"); + Tester.checkEqual(floatTimes(Float.MIN_VALUE, Float.MIN_VALUE), (float) (Float.MIN_VALUE * Float.MIN_VALUE), "(float) (Float.MIN_VALUE * Float.MIN_VALUE)"); + Tester.checkEqual(floatTimes(Float.MIN_VALUE, 1.0f), (float) (Float.MIN_VALUE * 1.0f), "(float) (Float.MIN_VALUE * 1.0f)"); + Tester.checkEqual(floatTimes(Float.MIN_VALUE, Float.MAX_VALUE), (float) (Float.MIN_VALUE * Float.MAX_VALUE), "(float) (Float.MIN_VALUE * Float.MAX_VALUE)"); + Tester.checkEqual(floatTimes(Float.MIN_VALUE, Float.POSITIVE_INFINITY), (float) (Float.MIN_VALUE * Float.POSITIVE_INFINITY), "(float) (Float.MIN_VALUE * Float.POSITIVE_INFINITY)"); + Tester.checkEqual(floatTimes(Float.MIN_VALUE, Float.NaN), (float) (Float.MIN_VALUE * Float.NaN), "(float) (Float.MIN_VALUE * Float.NaN)"); + Tester.checkEqual(floatTimes(1.0f, Float.NEGATIVE_INFINITY), (float) (1.0f * Float.NEGATIVE_INFINITY), "(float) (1.0f * Float.NEGATIVE_INFINITY)"); + Tester.checkEqual(floatTimes(1.0f, -1.0f), (float) (1.0f * -1.0f), "(float) (1.0f * -1.0f)"); + Tester.checkEqual(floatTimes(1.0f, -0.0f), (float) (1.0f * -0.0f), "(float) (1.0f * -0.0f)"); + Tester.checkEqual(floatTimes(1.0f, 0.0f), (float) (1.0f * 0.0f), "(float) (1.0f * 0.0f)"); + Tester.checkEqual(floatTimes(1.0f, Float.MIN_VALUE), (float) (1.0f * Float.MIN_VALUE), "(float) (1.0f * Float.MIN_VALUE)"); + Tester.checkEqual(floatTimes(1.0f, 1.0f), (float) (1.0f * 1.0f), "(float) (1.0f * 1.0f)"); + Tester.checkEqual(floatTimes(1.0f, Float.MAX_VALUE), (float) (1.0f * Float.MAX_VALUE), "(float) (1.0f * Float.MAX_VALUE)"); + Tester.checkEqual(floatTimes(1.0f, Float.POSITIVE_INFINITY), (float) (1.0f * Float.POSITIVE_INFINITY), "(float) (1.0f * Float.POSITIVE_INFINITY)"); + Tester.checkEqual(floatTimes(1.0f, Float.NaN), (float) (1.0f * Float.NaN), "(float) (1.0f * Float.NaN)"); + Tester.checkEqual(floatTimes(Float.MAX_VALUE, Float.NEGATIVE_INFINITY), (float) (Float.MAX_VALUE * Float.NEGATIVE_INFINITY), "(float) (Float.MAX_VALUE * Float.NEGATIVE_INFINITY)"); + Tester.checkEqual(floatTimes(Float.MAX_VALUE, -1.0f), (float) (Float.MAX_VALUE * -1.0f), "(float) (Float.MAX_VALUE * -1.0f)"); + Tester.checkEqual(floatTimes(Float.MAX_VALUE, -0.0f), (float) (Float.MAX_VALUE * -0.0f), "(float) (Float.MAX_VALUE * -0.0f)"); + Tester.checkEqual(floatTimes(Float.MAX_VALUE, 0.0f), (float) (Float.MAX_VALUE * 0.0f), "(float) (Float.MAX_VALUE * 0.0f)"); + Tester.checkEqual(floatTimes(Float.MAX_VALUE, Float.MIN_VALUE), (float) (Float.MAX_VALUE * Float.MIN_VALUE), "(float) (Float.MAX_VALUE * Float.MIN_VALUE)"); + Tester.checkEqual(floatTimes(Float.MAX_VALUE, 1.0f), (float) (Float.MAX_VALUE * 1.0f), "(float) (Float.MAX_VALUE * 1.0f)"); + Tester.checkEqual(floatTimes(Float.MAX_VALUE, Float.MAX_VALUE), (float) (Float.MAX_VALUE * Float.MAX_VALUE), "(float) (Float.MAX_VALUE * Float.MAX_VALUE)"); + Tester.checkEqual(floatTimes(Float.MAX_VALUE, Float.POSITIVE_INFINITY), (float) (Float.MAX_VALUE * Float.POSITIVE_INFINITY), "(float) (Float.MAX_VALUE * Float.POSITIVE_INFINITY)"); + Tester.checkEqual(floatTimes(Float.MAX_VALUE, Float.NaN), (float) (Float.MAX_VALUE * Float.NaN), "(float) (Float.MAX_VALUE * Float.NaN)"); + Tester.checkEqual(floatTimes(Float.POSITIVE_INFINITY, Float.NEGATIVE_INFINITY), (float) (Float.POSITIVE_INFINITY * Float.NEGATIVE_INFINITY), "(float) (Float.POSITIVE_INFINITY * Float.NEGATIVE_INFINITY)"); + Tester.checkEqual(floatTimes(Float.POSITIVE_INFINITY, -1.0f), (float) (Float.POSITIVE_INFINITY * -1.0f), "(float) (Float.POSITIVE_INFINITY * -1.0f)"); + Tester.checkEqual(floatTimes(Float.POSITIVE_INFINITY, -0.0f), (float) (Float.POSITIVE_INFINITY * -0.0f), "(float) (Float.POSITIVE_INFINITY * -0.0f)"); + Tester.checkEqual(floatTimes(Float.POSITIVE_INFINITY, 0.0f), (float) (Float.POSITIVE_INFINITY * 0.0f), "(float) (Float.POSITIVE_INFINITY * 0.0f)"); + Tester.checkEqual(floatTimes(Float.POSITIVE_INFINITY, Float.MIN_VALUE), (float) (Float.POSITIVE_INFINITY * Float.MIN_VALUE), "(float) (Float.POSITIVE_INFINITY * Float.MIN_VALUE)"); + Tester.checkEqual(floatTimes(Float.POSITIVE_INFINITY, 1.0f), (float) (Float.POSITIVE_INFINITY * 1.0f), "(float) (Float.POSITIVE_INFINITY * 1.0f)"); + Tester.checkEqual(floatTimes(Float.POSITIVE_INFINITY, Float.MAX_VALUE), (float) (Float.POSITIVE_INFINITY * Float.MAX_VALUE), "(float) (Float.POSITIVE_INFINITY * Float.MAX_VALUE)"); + Tester.checkEqual(floatTimes(Float.POSITIVE_INFINITY, Float.POSITIVE_INFINITY), (float) (Float.POSITIVE_INFINITY * Float.POSITIVE_INFINITY), "(float) (Float.POSITIVE_INFINITY * Float.POSITIVE_INFINITY)"); + Tester.checkEqual(floatTimes(Float.POSITIVE_INFINITY, Float.NaN), (float) (Float.POSITIVE_INFINITY * Float.NaN), "(float) (Float.POSITIVE_INFINITY * Float.NaN)"); + Tester.checkEqual(floatTimes(Float.NaN, Float.NEGATIVE_INFINITY), (float) (Float.NaN * Float.NEGATIVE_INFINITY), "(float) (Float.NaN * Float.NEGATIVE_INFINITY)"); + Tester.checkEqual(floatTimes(Float.NaN, -1.0f), (float) (Float.NaN * -1.0f), "(float) (Float.NaN * -1.0f)"); + Tester.checkEqual(floatTimes(Float.NaN, -0.0f), (float) (Float.NaN * -0.0f), "(float) (Float.NaN * -0.0f)"); + Tester.checkEqual(floatTimes(Float.NaN, 0.0f), (float) (Float.NaN * 0.0f), "(float) (Float.NaN * 0.0f)"); + Tester.checkEqual(floatTimes(Float.NaN, Float.MIN_VALUE), (float) (Float.NaN * Float.MIN_VALUE), "(float) (Float.NaN * Float.MIN_VALUE)"); + Tester.checkEqual(floatTimes(Float.NaN, 1.0f), (float) (Float.NaN * 1.0f), "(float) (Float.NaN * 1.0f)"); + Tester.checkEqual(floatTimes(Float.NaN, Float.MAX_VALUE), (float) (Float.NaN * Float.MAX_VALUE), "(float) (Float.NaN * Float.MAX_VALUE)"); + Tester.checkEqual(floatTimes(Float.NaN, Float.POSITIVE_INFINITY), (float) (Float.NaN * Float.POSITIVE_INFINITY), "(float) (Float.NaN * Float.POSITIVE_INFINITY)"); + Tester.checkEqual(floatTimes(Float.NaN, Float.NaN), (float) (Float.NaN * Float.NaN), "(float) (Float.NaN * Float.NaN)"); + Tester.checkEqual(floatDiv(Float.NEGATIVE_INFINITY, Float.NEGATIVE_INFINITY), (float) (Float.NEGATIVE_INFINITY / Float.NEGATIVE_INFINITY), "(float) (Float.NEGATIVE_INFINITY / Float.NEGATIVE_INFINITY)"); + Tester.checkEqual(floatDiv(Float.NEGATIVE_INFINITY, -1.0f), (float) (Float.NEGATIVE_INFINITY / -1.0f), "(float) (Float.NEGATIVE_INFINITY / -1.0f)"); + Tester.checkEqual(floatDiv(Float.NEGATIVE_INFINITY, -0.0f), (float) (Float.NEGATIVE_INFINITY / -0.0f), "(float) (Float.NEGATIVE_INFINITY / -0.0f)"); + Tester.checkEqual(floatDiv(Float.NEGATIVE_INFINITY, 0.0f), (float) (Float.NEGATIVE_INFINITY / 0.0f), "(float) (Float.NEGATIVE_INFINITY / 0.0f)"); + Tester.checkEqual(floatDiv(Float.NEGATIVE_INFINITY, Float.MIN_VALUE), (float) (Float.NEGATIVE_INFINITY / Float.MIN_VALUE), "(float) (Float.NEGATIVE_INFINITY / Float.MIN_VALUE)"); + Tester.checkEqual(floatDiv(Float.NEGATIVE_INFINITY, 1.0f), (float) (Float.NEGATIVE_INFINITY / 1.0f), "(float) (Float.NEGATIVE_INFINITY / 1.0f)"); + Tester.checkEqual(floatDiv(Float.NEGATIVE_INFINITY, Float.MAX_VALUE), (float) (Float.NEGATIVE_INFINITY / Float.MAX_VALUE), "(float) (Float.NEGATIVE_INFINITY / Float.MAX_VALUE)"); + Tester.checkEqual(floatDiv(Float.NEGATIVE_INFINITY, Float.POSITIVE_INFINITY), (float) (Float.NEGATIVE_INFINITY / Float.POSITIVE_INFINITY), "(float) (Float.NEGATIVE_INFINITY / Float.POSITIVE_INFINITY)"); + Tester.checkEqual(floatDiv(Float.NEGATIVE_INFINITY, Float.NaN), (float) (Float.NEGATIVE_INFINITY / Float.NaN), "(float) (Float.NEGATIVE_INFINITY / Float.NaN)"); + Tester.checkEqual(floatDiv(-1.0f, Float.NEGATIVE_INFINITY), (float) (-1.0f / Float.NEGATIVE_INFINITY), "(float) (-1.0f / Float.NEGATIVE_INFINITY)"); + Tester.checkEqual(floatDiv(-1.0f, -1.0f), (float) (-1.0f / -1.0f), "(float) (-1.0f / -1.0f)"); + Tester.checkEqual(floatDiv(-1.0f, -0.0f), (float) (-1.0f / -0.0f), "(float) (-1.0f / -0.0f)"); + Tester.checkEqual(floatDiv(-1.0f, 0.0f), (float) (-1.0f / 0.0f), "(float) (-1.0f / 0.0f)"); + Tester.checkEqual(floatDiv(-1.0f, Float.MIN_VALUE), (float) (-1.0f / Float.MIN_VALUE), "(float) (-1.0f / Float.MIN_VALUE)"); + Tester.checkEqual(floatDiv(-1.0f, 1.0f), (float) (-1.0f / 1.0f), "(float) (-1.0f / 1.0f)"); + Tester.checkEqual(floatDiv(-1.0f, Float.MAX_VALUE), (float) (-1.0f / Float.MAX_VALUE), "(float) (-1.0f / Float.MAX_VALUE)"); + Tester.checkEqual(floatDiv(-1.0f, Float.POSITIVE_INFINITY), (float) (-1.0f / Float.POSITIVE_INFINITY), "(float) (-1.0f / Float.POSITIVE_INFINITY)"); + Tester.checkEqual(floatDiv(-1.0f, Float.NaN), (float) (-1.0f / Float.NaN), "(float) (-1.0f / Float.NaN)"); + Tester.checkEqual(floatDiv(-0.0f, Float.NEGATIVE_INFINITY), (float) (-0.0f / Float.NEGATIVE_INFINITY), "(float) (-0.0f / Float.NEGATIVE_INFINITY)"); + Tester.checkEqual(floatDiv(-0.0f, -1.0f), (float) (-0.0f / -1.0f), "(float) (-0.0f / -1.0f)"); + Tester.checkEqual(floatDiv(-0.0f, -0.0f), (float) (-0.0f / -0.0f), "(float) (-0.0f / -0.0f)"); + Tester.checkEqual(floatDiv(-0.0f, 0.0f), (float) (-0.0f / 0.0f), "(float) (-0.0f / 0.0f)"); + Tester.checkEqual(floatDiv(-0.0f, Float.MIN_VALUE), (float) (-0.0f / Float.MIN_VALUE), "(float) (-0.0f / Float.MIN_VALUE)"); + Tester.checkEqual(floatDiv(-0.0f, 1.0f), (float) (-0.0f / 1.0f), "(float) (-0.0f / 1.0f)"); + Tester.checkEqual(floatDiv(-0.0f, Float.MAX_VALUE), (float) (-0.0f / Float.MAX_VALUE), "(float) (-0.0f / Float.MAX_VALUE)"); + Tester.checkEqual(floatDiv(-0.0f, Float.POSITIVE_INFINITY), (float) (-0.0f / Float.POSITIVE_INFINITY), "(float) (-0.0f / Float.POSITIVE_INFINITY)"); + Tester.checkEqual(floatDiv(-0.0f, Float.NaN), (float) (-0.0f / Float.NaN), "(float) (-0.0f / Float.NaN)"); + Tester.checkEqual(floatDiv(0.0f, Float.NEGATIVE_INFINITY), (float) (0.0f / Float.NEGATIVE_INFINITY), "(float) (0.0f / Float.NEGATIVE_INFINITY)"); + Tester.checkEqual(floatDiv(0.0f, -1.0f), (float) (0.0f / -1.0f), "(float) (0.0f / -1.0f)"); + Tester.checkEqual(floatDiv(0.0f, -0.0f), (float) (0.0f / -0.0f), "(float) (0.0f / -0.0f)"); + Tester.checkEqual(floatDiv(0.0f, 0.0f), (float) (0.0f / 0.0f), "(float) (0.0f / 0.0f)"); + Tester.checkEqual(floatDiv(0.0f, Float.MIN_VALUE), (float) (0.0f / Float.MIN_VALUE), "(float) (0.0f / Float.MIN_VALUE)"); + Tester.checkEqual(floatDiv(0.0f, 1.0f), (float) (0.0f / 1.0f), "(float) (0.0f / 1.0f)"); + Tester.checkEqual(floatDiv(0.0f, Float.MAX_VALUE), (float) (0.0f / Float.MAX_VALUE), "(float) (0.0f / Float.MAX_VALUE)"); + Tester.checkEqual(floatDiv(0.0f, Float.POSITIVE_INFINITY), (float) (0.0f / Float.POSITIVE_INFINITY), "(float) (0.0f / Float.POSITIVE_INFINITY)"); + Tester.checkEqual(floatDiv(0.0f, Float.NaN), (float) (0.0f / Float.NaN), "(float) (0.0f / Float.NaN)"); + Tester.checkEqual(floatDiv(Float.MIN_VALUE, Float.NEGATIVE_INFINITY), (float) (Float.MIN_VALUE / Float.NEGATIVE_INFINITY), "(float) (Float.MIN_VALUE / Float.NEGATIVE_INFINITY)"); + Tester.checkEqual(floatDiv(Float.MIN_VALUE, -1.0f), (float) (Float.MIN_VALUE / -1.0f), "(float) (Float.MIN_VALUE / -1.0f)"); + Tester.checkEqual(floatDiv(Float.MIN_VALUE, -0.0f), (float) (Float.MIN_VALUE / -0.0f), "(float) (Float.MIN_VALUE / -0.0f)"); + Tester.checkEqual(floatDiv(Float.MIN_VALUE, 0.0f), (float) (Float.MIN_VALUE / 0.0f), "(float) (Float.MIN_VALUE / 0.0f)"); + Tester.checkEqual(floatDiv(Float.MIN_VALUE, Float.MIN_VALUE), (float) (Float.MIN_VALUE / Float.MIN_VALUE), "(float) (Float.MIN_VALUE / Float.MIN_VALUE)"); + Tester.checkEqual(floatDiv(Float.MIN_VALUE, 1.0f), (float) (Float.MIN_VALUE / 1.0f), "(float) (Float.MIN_VALUE / 1.0f)"); + Tester.checkEqual(floatDiv(Float.MIN_VALUE, Float.MAX_VALUE), (float) (Float.MIN_VALUE / Float.MAX_VALUE), "(float) (Float.MIN_VALUE / Float.MAX_VALUE)"); + Tester.checkEqual(floatDiv(Float.MIN_VALUE, Float.POSITIVE_INFINITY), (float) (Float.MIN_VALUE / Float.POSITIVE_INFINITY), "(float) (Float.MIN_VALUE / Float.POSITIVE_INFINITY)"); + Tester.checkEqual(floatDiv(Float.MIN_VALUE, Float.NaN), (float) (Float.MIN_VALUE / Float.NaN), "(float) (Float.MIN_VALUE / Float.NaN)"); + Tester.checkEqual(floatDiv(1.0f, Float.NEGATIVE_INFINITY), (float) (1.0f / Float.NEGATIVE_INFINITY), "(float) (1.0f / Float.NEGATIVE_INFINITY)"); + Tester.checkEqual(floatDiv(1.0f, -1.0f), (float) (1.0f / -1.0f), "(float) (1.0f / -1.0f)"); + Tester.checkEqual(floatDiv(1.0f, -0.0f), (float) (1.0f / -0.0f), "(float) (1.0f / -0.0f)"); + Tester.checkEqual(floatDiv(1.0f, 0.0f), (float) (1.0f / 0.0f), "(float) (1.0f / 0.0f)"); + Tester.checkEqual(floatDiv(1.0f, Float.MIN_VALUE), (float) (1.0f / Float.MIN_VALUE), "(float) (1.0f / Float.MIN_VALUE)"); + Tester.checkEqual(floatDiv(1.0f, 1.0f), (float) (1.0f / 1.0f), "(float) (1.0f / 1.0f)"); + Tester.checkEqual(floatDiv(1.0f, Float.MAX_VALUE), (float) (1.0f / Float.MAX_VALUE), "(float) (1.0f / Float.MAX_VALUE)"); + Tester.checkEqual(floatDiv(1.0f, Float.POSITIVE_INFINITY), (float) (1.0f / Float.POSITIVE_INFINITY), "(float) (1.0f / Float.POSITIVE_INFINITY)"); + Tester.checkEqual(floatDiv(1.0f, Float.NaN), (float) (1.0f / Float.NaN), "(float) (1.0f / Float.NaN)"); + Tester.checkEqual(floatDiv(Float.MAX_VALUE, Float.NEGATIVE_INFINITY), (float) (Float.MAX_VALUE / Float.NEGATIVE_INFINITY), "(float) (Float.MAX_VALUE / Float.NEGATIVE_INFINITY)"); + Tester.checkEqual(floatDiv(Float.MAX_VALUE, -1.0f), (float) (Float.MAX_VALUE / -1.0f), "(float) (Float.MAX_VALUE / -1.0f)"); + Tester.checkEqual(floatDiv(Float.MAX_VALUE, -0.0f), (float) (Float.MAX_VALUE / -0.0f), "(float) (Float.MAX_VALUE / -0.0f)"); + Tester.checkEqual(floatDiv(Float.MAX_VALUE, 0.0f), (float) (Float.MAX_VALUE / 0.0f), "(float) (Float.MAX_VALUE / 0.0f)"); + Tester.checkEqual(floatDiv(Float.MAX_VALUE, Float.MIN_VALUE), (float) (Float.MAX_VALUE / Float.MIN_VALUE), "(float) (Float.MAX_VALUE / Float.MIN_VALUE)"); + Tester.checkEqual(floatDiv(Float.MAX_VALUE, 1.0f), (float) (Float.MAX_VALUE / 1.0f), "(float) (Float.MAX_VALUE / 1.0f)"); + Tester.checkEqual(floatDiv(Float.MAX_VALUE, Float.MAX_VALUE), (float) (Float.MAX_VALUE / Float.MAX_VALUE), "(float) (Float.MAX_VALUE / Float.MAX_VALUE)"); + Tester.checkEqual(floatDiv(Float.MAX_VALUE, Float.POSITIVE_INFINITY), (float) (Float.MAX_VALUE / Float.POSITIVE_INFINITY), "(float) (Float.MAX_VALUE / Float.POSITIVE_INFINITY)"); + Tester.checkEqual(floatDiv(Float.MAX_VALUE, Float.NaN), (float) (Float.MAX_VALUE / Float.NaN), "(float) (Float.MAX_VALUE / Float.NaN)"); + Tester.checkEqual(floatDiv(Float.POSITIVE_INFINITY, Float.NEGATIVE_INFINITY), (float) (Float.POSITIVE_INFINITY / Float.NEGATIVE_INFINITY), "(float) (Float.POSITIVE_INFINITY / Float.NEGATIVE_INFINITY)"); + Tester.checkEqual(floatDiv(Float.POSITIVE_INFINITY, -1.0f), (float) (Float.POSITIVE_INFINITY / -1.0f), "(float) (Float.POSITIVE_INFINITY / -1.0f)"); + Tester.checkEqual(floatDiv(Float.POSITIVE_INFINITY, -0.0f), (float) (Float.POSITIVE_INFINITY / -0.0f), "(float) (Float.POSITIVE_INFINITY / -0.0f)"); + Tester.checkEqual(floatDiv(Float.POSITIVE_INFINITY, 0.0f), (float) (Float.POSITIVE_INFINITY / 0.0f), "(float) (Float.POSITIVE_INFINITY / 0.0f)"); + Tester.checkEqual(floatDiv(Float.POSITIVE_INFINITY, Float.MIN_VALUE), (float) (Float.POSITIVE_INFINITY / Float.MIN_VALUE), "(float) (Float.POSITIVE_INFINITY / Float.MIN_VALUE)"); + Tester.checkEqual(floatDiv(Float.POSITIVE_INFINITY, 1.0f), (float) (Float.POSITIVE_INFINITY / 1.0f), "(float) (Float.POSITIVE_INFINITY / 1.0f)"); + Tester.checkEqual(floatDiv(Float.POSITIVE_INFINITY, Float.MAX_VALUE), (float) (Float.POSITIVE_INFINITY / Float.MAX_VALUE), "(float) (Float.POSITIVE_INFINITY / Float.MAX_VALUE)"); + Tester.checkEqual(floatDiv(Float.POSITIVE_INFINITY, Float.POSITIVE_INFINITY), (float) (Float.POSITIVE_INFINITY / Float.POSITIVE_INFINITY), "(float) (Float.POSITIVE_INFINITY / Float.POSITIVE_INFINITY)"); + Tester.checkEqual(floatDiv(Float.POSITIVE_INFINITY, Float.NaN), (float) (Float.POSITIVE_INFINITY / Float.NaN), "(float) (Float.POSITIVE_INFINITY / Float.NaN)"); + Tester.checkEqual(floatDiv(Float.NaN, Float.NEGATIVE_INFINITY), (float) (Float.NaN / Float.NEGATIVE_INFINITY), "(float) (Float.NaN / Float.NEGATIVE_INFINITY)"); + Tester.checkEqual(floatDiv(Float.NaN, -1.0f), (float) (Float.NaN / -1.0f), "(float) (Float.NaN / -1.0f)"); + Tester.checkEqual(floatDiv(Float.NaN, -0.0f), (float) (Float.NaN / -0.0f), "(float) (Float.NaN / -0.0f)"); + Tester.checkEqual(floatDiv(Float.NaN, 0.0f), (float) (Float.NaN / 0.0f), "(float) (Float.NaN / 0.0f)"); + Tester.checkEqual(floatDiv(Float.NaN, Float.MIN_VALUE), (float) (Float.NaN / Float.MIN_VALUE), "(float) (Float.NaN / Float.MIN_VALUE)"); + Tester.checkEqual(floatDiv(Float.NaN, 1.0f), (float) (Float.NaN / 1.0f), "(float) (Float.NaN / 1.0f)"); + Tester.checkEqual(floatDiv(Float.NaN, Float.MAX_VALUE), (float) (Float.NaN / Float.MAX_VALUE), "(float) (Float.NaN / Float.MAX_VALUE)"); + Tester.checkEqual(floatDiv(Float.NaN, Float.POSITIVE_INFINITY), (float) (Float.NaN / Float.POSITIVE_INFINITY), "(float) (Float.NaN / Float.POSITIVE_INFINITY)"); + Tester.checkEqual(floatDiv(Float.NaN, Float.NaN), (float) (Float.NaN / Float.NaN), "(float) (Float.NaN / Float.NaN)"); + Tester.checkEqual(floatRem(Float.NEGATIVE_INFINITY, Float.NEGATIVE_INFINITY), (float) (Float.NEGATIVE_INFINITY % Float.NEGATIVE_INFINITY), "(float) (Float.NEGATIVE_INFINITY % Float.NEGATIVE_INFINITY)"); + Tester.checkEqual(floatRem(Float.NEGATIVE_INFINITY, -1.0f), (float) (Float.NEGATIVE_INFINITY % -1.0f), "(float) (Float.NEGATIVE_INFINITY % -1.0f)"); + Tester.checkEqual(floatRem(Float.NEGATIVE_INFINITY, -0.0f), (float) (Float.NEGATIVE_INFINITY % -0.0f), "(float) (Float.NEGATIVE_INFINITY % -0.0f)"); + Tester.checkEqual(floatRem(Float.NEGATIVE_INFINITY, 0.0f), (float) (Float.NEGATIVE_INFINITY % 0.0f), "(float) (Float.NEGATIVE_INFINITY % 0.0f)"); + Tester.checkEqual(floatRem(Float.NEGATIVE_INFINITY, Float.MIN_VALUE), (float) (Float.NEGATIVE_INFINITY % Float.MIN_VALUE), "(float) (Float.NEGATIVE_INFINITY % Float.MIN_VALUE)"); + Tester.checkEqual(floatRem(Float.NEGATIVE_INFINITY, 1.0f), (float) (Float.NEGATIVE_INFINITY % 1.0f), "(float) (Float.NEGATIVE_INFINITY % 1.0f)"); + Tester.checkEqual(floatRem(Float.NEGATIVE_INFINITY, Float.MAX_VALUE), (float) (Float.NEGATIVE_INFINITY % Float.MAX_VALUE), "(float) (Float.NEGATIVE_INFINITY % Float.MAX_VALUE)"); + Tester.checkEqual(floatRem(Float.NEGATIVE_INFINITY, Float.POSITIVE_INFINITY), (float) (Float.NEGATIVE_INFINITY % Float.POSITIVE_INFINITY), "(float) (Float.NEGATIVE_INFINITY % Float.POSITIVE_INFINITY)"); + Tester.checkEqual(floatRem(Float.NEGATIVE_INFINITY, Float.NaN), (float) (Float.NEGATIVE_INFINITY % Float.NaN), "(float) (Float.NEGATIVE_INFINITY % Float.NaN)"); + Tester.checkEqual(floatRem(-1.0f, Float.NEGATIVE_INFINITY), (float) (-1.0f % Float.NEGATIVE_INFINITY), "(float) (-1.0f % Float.NEGATIVE_INFINITY)"); + Tester.checkEqual(floatRem(-1.0f, -1.0f), (float) (-1.0f % -1.0f), "(float) (-1.0f % -1.0f)"); + Tester.checkEqual(floatRem(-1.0f, -0.0f), (float) (-1.0f % -0.0f), "(float) (-1.0f % -0.0f)"); + Tester.checkEqual(floatRem(-1.0f, 0.0f), (float) (-1.0f % 0.0f), "(float) (-1.0f % 0.0f)"); + Tester.checkEqual(floatRem(-1.0f, Float.MIN_VALUE), (float) (-1.0f % Float.MIN_VALUE), "(float) (-1.0f % Float.MIN_VALUE)"); + Tester.checkEqual(floatRem(-1.0f, 1.0f), (float) (-1.0f % 1.0f), "(float) (-1.0f % 1.0f)"); + Tester.checkEqual(floatRem(-1.0f, Float.MAX_VALUE), (float) (-1.0f % Float.MAX_VALUE), "(float) (-1.0f % Float.MAX_VALUE)"); + Tester.checkEqual(floatRem(-1.0f, Float.POSITIVE_INFINITY), (float) (-1.0f % Float.POSITIVE_INFINITY), "(float) (-1.0f % Float.POSITIVE_INFINITY)"); + Tester.checkEqual(floatRem(-1.0f, Float.NaN), (float) (-1.0f % Float.NaN), "(float) (-1.0f % Float.NaN)"); + Tester.checkEqual(floatRem(-0.0f, Float.NEGATIVE_INFINITY), (float) (-0.0f % Float.NEGATIVE_INFINITY), "(float) (-0.0f % Float.NEGATIVE_INFINITY)"); + Tester.checkEqual(floatRem(-0.0f, -1.0f), (float) (-0.0f % -1.0f), "(float) (-0.0f % -1.0f)"); + Tester.checkEqual(floatRem(-0.0f, -0.0f), (float) (-0.0f % -0.0f), "(float) (-0.0f % -0.0f)"); + Tester.checkEqual(floatRem(-0.0f, 0.0f), (float) (-0.0f % 0.0f), "(float) (-0.0f % 0.0f)"); + Tester.checkEqual(floatRem(-0.0f, Float.MIN_VALUE), (float) (-0.0f % Float.MIN_VALUE), "(float) (-0.0f % Float.MIN_VALUE)"); + Tester.checkEqual(floatRem(-0.0f, 1.0f), (float) (-0.0f % 1.0f), "(float) (-0.0f % 1.0f)"); + Tester.checkEqual(floatRem(-0.0f, Float.MAX_VALUE), (float) (-0.0f % Float.MAX_VALUE), "(float) (-0.0f % Float.MAX_VALUE)"); + Tester.checkEqual(floatRem(-0.0f, Float.POSITIVE_INFINITY), (float) (-0.0f % Float.POSITIVE_INFINITY), "(float) (-0.0f % Float.POSITIVE_INFINITY)"); + Tester.checkEqual(floatRem(-0.0f, Float.NaN), (float) (-0.0f % Float.NaN), "(float) (-0.0f % Float.NaN)"); + Tester.checkEqual(floatRem(0.0f, Float.NEGATIVE_INFINITY), (float) (0.0f % Float.NEGATIVE_INFINITY), "(float) (0.0f % Float.NEGATIVE_INFINITY)"); + Tester.checkEqual(floatRem(0.0f, -1.0f), (float) (0.0f % -1.0f), "(float) (0.0f % -1.0f)"); + Tester.checkEqual(floatRem(0.0f, -0.0f), (float) (0.0f % -0.0f), "(float) (0.0f % -0.0f)"); + Tester.checkEqual(floatRem(0.0f, 0.0f), (float) (0.0f % 0.0f), "(float) (0.0f % 0.0f)"); + Tester.checkEqual(floatRem(0.0f, Float.MIN_VALUE), (float) (0.0f % Float.MIN_VALUE), "(float) (0.0f % Float.MIN_VALUE)"); + Tester.checkEqual(floatRem(0.0f, 1.0f), (float) (0.0f % 1.0f), "(float) (0.0f % 1.0f)"); + Tester.checkEqual(floatRem(0.0f, Float.MAX_VALUE), (float) (0.0f % Float.MAX_VALUE), "(float) (0.0f % Float.MAX_VALUE)"); + Tester.checkEqual(floatRem(0.0f, Float.POSITIVE_INFINITY), (float) (0.0f % Float.POSITIVE_INFINITY), "(float) (0.0f % Float.POSITIVE_INFINITY)"); + Tester.checkEqual(floatRem(0.0f, Float.NaN), (float) (0.0f % Float.NaN), "(float) (0.0f % Float.NaN)"); + Tester.checkEqual(floatRem(Float.MIN_VALUE, Float.NEGATIVE_INFINITY), (float) (Float.MIN_VALUE % Float.NEGATIVE_INFINITY), "(float) (Float.MIN_VALUE % Float.NEGATIVE_INFINITY)"); + Tester.checkEqual(floatRem(Float.MIN_VALUE, -1.0f), (float) (Float.MIN_VALUE % -1.0f), "(float) (Float.MIN_VALUE % -1.0f)"); + Tester.checkEqual(floatRem(Float.MIN_VALUE, -0.0f), (float) (Float.MIN_VALUE % -0.0f), "(float) (Float.MIN_VALUE % -0.0f)"); + Tester.checkEqual(floatRem(Float.MIN_VALUE, 0.0f), (float) (Float.MIN_VALUE % 0.0f), "(float) (Float.MIN_VALUE % 0.0f)"); + Tester.checkEqual(floatRem(Float.MIN_VALUE, Float.MIN_VALUE), (float) (Float.MIN_VALUE % Float.MIN_VALUE), "(float) (Float.MIN_VALUE % Float.MIN_VALUE)"); + Tester.checkEqual(floatRem(Float.MIN_VALUE, 1.0f), (float) (Float.MIN_VALUE % 1.0f), "(float) (Float.MIN_VALUE % 1.0f)"); + Tester.checkEqual(floatRem(Float.MIN_VALUE, Float.MAX_VALUE), (float) (Float.MIN_VALUE % Float.MAX_VALUE), "(float) (Float.MIN_VALUE % Float.MAX_VALUE)"); + Tester.checkEqual(floatRem(Float.MIN_VALUE, Float.POSITIVE_INFINITY), (float) (Float.MIN_VALUE % Float.POSITIVE_INFINITY), "(float) (Float.MIN_VALUE % Float.POSITIVE_INFINITY)"); + Tester.checkEqual(floatRem(Float.MIN_VALUE, Float.NaN), (float) (Float.MIN_VALUE % Float.NaN), "(float) (Float.MIN_VALUE % Float.NaN)"); + Tester.checkEqual(floatRem(1.0f, Float.NEGATIVE_INFINITY), (float) (1.0f % Float.NEGATIVE_INFINITY), "(float) (1.0f % Float.NEGATIVE_INFINITY)"); + Tester.checkEqual(floatRem(1.0f, -1.0f), (float) (1.0f % -1.0f), "(float) (1.0f % -1.0f)"); + Tester.checkEqual(floatRem(1.0f, -0.0f), (float) (1.0f % -0.0f), "(float) (1.0f % -0.0f)"); + Tester.checkEqual(floatRem(1.0f, 0.0f), (float) (1.0f % 0.0f), "(float) (1.0f % 0.0f)"); + Tester.checkEqual(floatRem(1.0f, Float.MIN_VALUE), (float) (1.0f % Float.MIN_VALUE), "(float) (1.0f % Float.MIN_VALUE)"); + Tester.checkEqual(floatRem(1.0f, 1.0f), (float) (1.0f % 1.0f), "(float) (1.0f % 1.0f)"); + Tester.checkEqual(floatRem(1.0f, Float.MAX_VALUE), (float) (1.0f % Float.MAX_VALUE), "(float) (1.0f % Float.MAX_VALUE)"); + Tester.checkEqual(floatRem(1.0f, Float.POSITIVE_INFINITY), (float) (1.0f % Float.POSITIVE_INFINITY), "(float) (1.0f % Float.POSITIVE_INFINITY)"); + Tester.checkEqual(floatRem(1.0f, Float.NaN), (float) (1.0f % Float.NaN), "(float) (1.0f % Float.NaN)"); + Tester.checkEqual(floatRem(Float.MAX_VALUE, Float.NEGATIVE_INFINITY), (float) (Float.MAX_VALUE % Float.NEGATIVE_INFINITY), "(float) (Float.MAX_VALUE % Float.NEGATIVE_INFINITY)"); + Tester.checkEqual(floatRem(Float.MAX_VALUE, -1.0f), (float) (Float.MAX_VALUE % -1.0f), "(float) (Float.MAX_VALUE % -1.0f)"); + Tester.checkEqual(floatRem(Float.MAX_VALUE, -0.0f), (float) (Float.MAX_VALUE % -0.0f), "(float) (Float.MAX_VALUE % -0.0f)"); + Tester.checkEqual(floatRem(Float.MAX_VALUE, 0.0f), (float) (Float.MAX_VALUE % 0.0f), "(float) (Float.MAX_VALUE % 0.0f)"); + Tester.checkEqual(floatRem(Float.MAX_VALUE, Float.MIN_VALUE), (float) (Float.MAX_VALUE % Float.MIN_VALUE), "(float) (Float.MAX_VALUE % Float.MIN_VALUE)"); + Tester.checkEqual(floatRem(Float.MAX_VALUE, 1.0f), (float) (Float.MAX_VALUE % 1.0f), "(float) (Float.MAX_VALUE % 1.0f)"); + Tester.checkEqual(floatRem(Float.MAX_VALUE, Float.MAX_VALUE), (float) (Float.MAX_VALUE % Float.MAX_VALUE), "(float) (Float.MAX_VALUE % Float.MAX_VALUE)"); + Tester.checkEqual(floatRem(Float.MAX_VALUE, Float.POSITIVE_INFINITY), (float) (Float.MAX_VALUE % Float.POSITIVE_INFINITY), "(float) (Float.MAX_VALUE % Float.POSITIVE_INFINITY)"); + Tester.checkEqual(floatRem(Float.MAX_VALUE, Float.NaN), (float) (Float.MAX_VALUE % Float.NaN), "(float) (Float.MAX_VALUE % Float.NaN)"); + Tester.checkEqual(floatRem(Float.POSITIVE_INFINITY, Float.NEGATIVE_INFINITY), (float) (Float.POSITIVE_INFINITY % Float.NEGATIVE_INFINITY), "(float) (Float.POSITIVE_INFINITY % Float.NEGATIVE_INFINITY)"); + Tester.checkEqual(floatRem(Float.POSITIVE_INFINITY, -1.0f), (float) (Float.POSITIVE_INFINITY % -1.0f), "(float) (Float.POSITIVE_INFINITY % -1.0f)"); + Tester.checkEqual(floatRem(Float.POSITIVE_INFINITY, -0.0f), (float) (Float.POSITIVE_INFINITY % -0.0f), "(float) (Float.POSITIVE_INFINITY % -0.0f)"); + Tester.checkEqual(floatRem(Float.POSITIVE_INFINITY, 0.0f), (float) (Float.POSITIVE_INFINITY % 0.0f), "(float) (Float.POSITIVE_INFINITY % 0.0f)"); + Tester.checkEqual(floatRem(Float.POSITIVE_INFINITY, Float.MIN_VALUE), (float) (Float.POSITIVE_INFINITY % Float.MIN_VALUE), "(float) (Float.POSITIVE_INFINITY % Float.MIN_VALUE)"); + Tester.checkEqual(floatRem(Float.POSITIVE_INFINITY, 1.0f), (float) (Float.POSITIVE_INFINITY % 1.0f), "(float) (Float.POSITIVE_INFINITY % 1.0f)"); + Tester.checkEqual(floatRem(Float.POSITIVE_INFINITY, Float.MAX_VALUE), (float) (Float.POSITIVE_INFINITY % Float.MAX_VALUE), "(float) (Float.POSITIVE_INFINITY % Float.MAX_VALUE)"); + Tester.checkEqual(floatRem(Float.POSITIVE_INFINITY, Float.POSITIVE_INFINITY), (float) (Float.POSITIVE_INFINITY % Float.POSITIVE_INFINITY), "(float) (Float.POSITIVE_INFINITY % Float.POSITIVE_INFINITY)"); + Tester.checkEqual(floatRem(Float.POSITIVE_INFINITY, Float.NaN), (float) (Float.POSITIVE_INFINITY % Float.NaN), "(float) (Float.POSITIVE_INFINITY % Float.NaN)"); + Tester.checkEqual(floatRem(Float.NaN, Float.NEGATIVE_INFINITY), (float) (Float.NaN % Float.NEGATIVE_INFINITY), "(float) (Float.NaN % Float.NEGATIVE_INFINITY)"); + Tester.checkEqual(floatRem(Float.NaN, -1.0f), (float) (Float.NaN % -1.0f), "(float) (Float.NaN % -1.0f)"); + Tester.checkEqual(floatRem(Float.NaN, -0.0f), (float) (Float.NaN % -0.0f), "(float) (Float.NaN % -0.0f)"); + Tester.checkEqual(floatRem(Float.NaN, 0.0f), (float) (Float.NaN % 0.0f), "(float) (Float.NaN % 0.0f)"); + Tester.checkEqual(floatRem(Float.NaN, Float.MIN_VALUE), (float) (Float.NaN % Float.MIN_VALUE), "(float) (Float.NaN % Float.MIN_VALUE)"); + Tester.checkEqual(floatRem(Float.NaN, 1.0f), (float) (Float.NaN % 1.0f), "(float) (Float.NaN % 1.0f)"); + Tester.checkEqual(floatRem(Float.NaN, Float.MAX_VALUE), (float) (Float.NaN % Float.MAX_VALUE), "(float) (Float.NaN % Float.MAX_VALUE)"); + Tester.checkEqual(floatRem(Float.NaN, Float.POSITIVE_INFINITY), (float) (Float.NaN % Float.POSITIVE_INFINITY), "(float) (Float.NaN % Float.POSITIVE_INFINITY)"); + Tester.checkEqual(floatRem(Float.NaN, Float.NaN), (float) (Float.NaN % Float.NaN), "(float) (Float.NaN % Float.NaN)"); + Tester.checkEqual(floatAdd(Float.NEGATIVE_INFINITY, Float.NEGATIVE_INFINITY), (float) (Float.NEGATIVE_INFINITY + Float.NEGATIVE_INFINITY), "(float) (Float.NEGATIVE_INFINITY + Float.NEGATIVE_INFINITY)"); + Tester.checkEqual(floatAdd(Float.NEGATIVE_INFINITY, -1.0f), (float) (Float.NEGATIVE_INFINITY + -1.0f), "(float) (Float.NEGATIVE_INFINITY + -1.0f)"); + Tester.checkEqual(floatAdd(Float.NEGATIVE_INFINITY, -0.0f), (float) (Float.NEGATIVE_INFINITY + -0.0f), "(float) (Float.NEGATIVE_INFINITY + -0.0f)"); + Tester.checkEqual(floatAdd(Float.NEGATIVE_INFINITY, 0.0f), (float) (Float.NEGATIVE_INFINITY + 0.0f), "(float) (Float.NEGATIVE_INFINITY + 0.0f)"); + Tester.checkEqual(floatAdd(Float.NEGATIVE_INFINITY, Float.MIN_VALUE), (float) (Float.NEGATIVE_INFINITY + Float.MIN_VALUE), "(float) (Float.NEGATIVE_INFINITY + Float.MIN_VALUE)"); + Tester.checkEqual(floatAdd(Float.NEGATIVE_INFINITY, 1.0f), (float) (Float.NEGATIVE_INFINITY + 1.0f), "(float) (Float.NEGATIVE_INFINITY + 1.0f)"); + Tester.checkEqual(floatAdd(Float.NEGATIVE_INFINITY, Float.MAX_VALUE), (float) (Float.NEGATIVE_INFINITY + Float.MAX_VALUE), "(float) (Float.NEGATIVE_INFINITY + Float.MAX_VALUE)"); + Tester.checkEqual(floatAdd(Float.NEGATIVE_INFINITY, Float.POSITIVE_INFINITY), (float) (Float.NEGATIVE_INFINITY + Float.POSITIVE_INFINITY), "(float) (Float.NEGATIVE_INFINITY + Float.POSITIVE_INFINITY)"); + Tester.checkEqual(floatAdd(Float.NEGATIVE_INFINITY, Float.NaN), (float) (Float.NEGATIVE_INFINITY + Float.NaN), "(float) (Float.NEGATIVE_INFINITY + Float.NaN)"); + Tester.checkEqual(floatAdd(-1.0f, Float.NEGATIVE_INFINITY), (float) (-1.0f + Float.NEGATIVE_INFINITY), "(float) (-1.0f + Float.NEGATIVE_INFINITY)"); + Tester.checkEqual(floatAdd(-1.0f, -1.0f), (float) (-1.0f + -1.0f), "(float) (-1.0f + -1.0f)"); + Tester.checkEqual(floatAdd(-1.0f, -0.0f), (float) (-1.0f + -0.0f), "(float) (-1.0f + -0.0f)"); + Tester.checkEqual(floatAdd(-1.0f, 0.0f), (float) (-1.0f + 0.0f), "(float) (-1.0f + 0.0f)"); + Tester.checkEqual(floatAdd(-1.0f, Float.MIN_VALUE), (float) (-1.0f + Float.MIN_VALUE), "(float) (-1.0f + Float.MIN_VALUE)"); + Tester.checkEqual(floatAdd(-1.0f, 1.0f), (float) (-1.0f + 1.0f), "(float) (-1.0f + 1.0f)"); + Tester.checkEqual(floatAdd(-1.0f, Float.MAX_VALUE), (float) (-1.0f + Float.MAX_VALUE), "(float) (-1.0f + Float.MAX_VALUE)"); + Tester.checkEqual(floatAdd(-1.0f, Float.POSITIVE_INFINITY), (float) (-1.0f + Float.POSITIVE_INFINITY), "(float) (-1.0f + Float.POSITIVE_INFINITY)"); + Tester.checkEqual(floatAdd(-1.0f, Float.NaN), (float) (-1.0f + Float.NaN), "(float) (-1.0f + Float.NaN)"); + Tester.checkEqual(floatAdd(-0.0f, Float.NEGATIVE_INFINITY), (float) (-0.0f + Float.NEGATIVE_INFINITY), "(float) (-0.0f + Float.NEGATIVE_INFINITY)"); + Tester.checkEqual(floatAdd(-0.0f, -1.0f), (float) (-0.0f + -1.0f), "(float) (-0.0f + -1.0f)"); + Tester.checkEqual(floatAdd(-0.0f, -0.0f), (float) (-0.0f + -0.0f), "(float) (-0.0f + -0.0f)"); + Tester.checkEqual(floatAdd(-0.0f, 0.0f), (float) (-0.0f + 0.0f), "(float) (-0.0f + 0.0f)"); + Tester.checkEqual(floatAdd(-0.0f, Float.MIN_VALUE), (float) (-0.0f + Float.MIN_VALUE), "(float) (-0.0f + Float.MIN_VALUE)"); + Tester.checkEqual(floatAdd(-0.0f, 1.0f), (float) (-0.0f + 1.0f), "(float) (-0.0f + 1.0f)"); + Tester.checkEqual(floatAdd(-0.0f, Float.MAX_VALUE), (float) (-0.0f + Float.MAX_VALUE), "(float) (-0.0f + Float.MAX_VALUE)"); + Tester.checkEqual(floatAdd(-0.0f, Float.POSITIVE_INFINITY), (float) (-0.0f + Float.POSITIVE_INFINITY), "(float) (-0.0f + Float.POSITIVE_INFINITY)"); + Tester.checkEqual(floatAdd(-0.0f, Float.NaN), (float) (-0.0f + Float.NaN), "(float) (-0.0f + Float.NaN)"); + Tester.checkEqual(floatAdd(0.0f, Float.NEGATIVE_INFINITY), (float) (0.0f + Float.NEGATIVE_INFINITY), "(float) (0.0f + Float.NEGATIVE_INFINITY)"); + Tester.checkEqual(floatAdd(0.0f, -1.0f), (float) (0.0f + -1.0f), "(float) (0.0f + -1.0f)"); + Tester.checkEqual(floatAdd(0.0f, -0.0f), (float) (0.0f + -0.0f), "(float) (0.0f + -0.0f)"); + Tester.checkEqual(floatAdd(0.0f, 0.0f), (float) (0.0f + 0.0f), "(float) (0.0f + 0.0f)"); + Tester.checkEqual(floatAdd(0.0f, Float.MIN_VALUE), (float) (0.0f + Float.MIN_VALUE), "(float) (0.0f + Float.MIN_VALUE)"); + Tester.checkEqual(floatAdd(0.0f, 1.0f), (float) (0.0f + 1.0f), "(float) (0.0f + 1.0f)"); + Tester.checkEqual(floatAdd(0.0f, Float.MAX_VALUE), (float) (0.0f + Float.MAX_VALUE), "(float) (0.0f + Float.MAX_VALUE)"); + Tester.checkEqual(floatAdd(0.0f, Float.POSITIVE_INFINITY), (float) (0.0f + Float.POSITIVE_INFINITY), "(float) (0.0f + Float.POSITIVE_INFINITY)"); + Tester.checkEqual(floatAdd(0.0f, Float.NaN), (float) (0.0f + Float.NaN), "(float) (0.0f + Float.NaN)"); + Tester.checkEqual(floatAdd(Float.MIN_VALUE, Float.NEGATIVE_INFINITY), (float) (Float.MIN_VALUE + Float.NEGATIVE_INFINITY), "(float) (Float.MIN_VALUE + Float.NEGATIVE_INFINITY)"); + Tester.checkEqual(floatAdd(Float.MIN_VALUE, -1.0f), (float) (Float.MIN_VALUE + -1.0f), "(float) (Float.MIN_VALUE + -1.0f)"); + Tester.checkEqual(floatAdd(Float.MIN_VALUE, -0.0f), (float) (Float.MIN_VALUE + -0.0f), "(float) (Float.MIN_VALUE + -0.0f)"); + Tester.checkEqual(floatAdd(Float.MIN_VALUE, 0.0f), (float) (Float.MIN_VALUE + 0.0f), "(float) (Float.MIN_VALUE + 0.0f)"); + Tester.checkEqual(floatAdd(Float.MIN_VALUE, Float.MIN_VALUE), (float) (Float.MIN_VALUE + Float.MIN_VALUE), "(float) (Float.MIN_VALUE + Float.MIN_VALUE)"); + Tester.checkEqual(floatAdd(Float.MIN_VALUE, 1.0f), (float) (Float.MIN_VALUE + 1.0f), "(float) (Float.MIN_VALUE + 1.0f)"); + Tester.checkEqual(floatAdd(Float.MIN_VALUE, Float.MAX_VALUE), (float) (Float.MIN_VALUE + Float.MAX_VALUE), "(float) (Float.MIN_VALUE + Float.MAX_VALUE)"); + Tester.checkEqual(floatAdd(Float.MIN_VALUE, Float.POSITIVE_INFINITY), (float) (Float.MIN_VALUE + Float.POSITIVE_INFINITY), "(float) (Float.MIN_VALUE + Float.POSITIVE_INFINITY)"); + Tester.checkEqual(floatAdd(Float.MIN_VALUE, Float.NaN), (float) (Float.MIN_VALUE + Float.NaN), "(float) (Float.MIN_VALUE + Float.NaN)"); + Tester.checkEqual(floatAdd(1.0f, Float.NEGATIVE_INFINITY), (float) (1.0f + Float.NEGATIVE_INFINITY), "(float) (1.0f + Float.NEGATIVE_INFINITY)"); + Tester.checkEqual(floatAdd(1.0f, -1.0f), (float) (1.0f + -1.0f), "(float) (1.0f + -1.0f)"); + Tester.checkEqual(floatAdd(1.0f, -0.0f), (float) (1.0f + -0.0f), "(float) (1.0f + -0.0f)"); + Tester.checkEqual(floatAdd(1.0f, 0.0f), (float) (1.0f + 0.0f), "(float) (1.0f + 0.0f)"); + Tester.checkEqual(floatAdd(1.0f, Float.MIN_VALUE), (float) (1.0f + Float.MIN_VALUE), "(float) (1.0f + Float.MIN_VALUE)"); + Tester.checkEqual(floatAdd(1.0f, 1.0f), (float) (1.0f + 1.0f), "(float) (1.0f + 1.0f)"); + Tester.checkEqual(floatAdd(1.0f, Float.MAX_VALUE), (float) (1.0f + Float.MAX_VALUE), "(float) (1.0f + Float.MAX_VALUE)"); + Tester.checkEqual(floatAdd(1.0f, Float.POSITIVE_INFINITY), (float) (1.0f + Float.POSITIVE_INFINITY), "(float) (1.0f + Float.POSITIVE_INFINITY)"); + Tester.checkEqual(floatAdd(1.0f, Float.NaN), (float) (1.0f + Float.NaN), "(float) (1.0f + Float.NaN)"); + Tester.checkEqual(floatAdd(Float.MAX_VALUE, Float.NEGATIVE_INFINITY), (float) (Float.MAX_VALUE + Float.NEGATIVE_INFINITY), "(float) (Float.MAX_VALUE + Float.NEGATIVE_INFINITY)"); + Tester.checkEqual(floatAdd(Float.MAX_VALUE, -1.0f), (float) (Float.MAX_VALUE + -1.0f), "(float) (Float.MAX_VALUE + -1.0f)"); + Tester.checkEqual(floatAdd(Float.MAX_VALUE, -0.0f), (float) (Float.MAX_VALUE + -0.0f), "(float) (Float.MAX_VALUE + -0.0f)"); + Tester.checkEqual(floatAdd(Float.MAX_VALUE, 0.0f), (float) (Float.MAX_VALUE + 0.0f), "(float) (Float.MAX_VALUE + 0.0f)"); + Tester.checkEqual(floatAdd(Float.MAX_VALUE, Float.MIN_VALUE), (float) (Float.MAX_VALUE + Float.MIN_VALUE), "(float) (Float.MAX_VALUE + Float.MIN_VALUE)"); + Tester.checkEqual(floatAdd(Float.MAX_VALUE, 1.0f), (float) (Float.MAX_VALUE + 1.0f), "(float) (Float.MAX_VALUE + 1.0f)"); + Tester.checkEqual(floatAdd(Float.MAX_VALUE, Float.MAX_VALUE), (float) (Float.MAX_VALUE + Float.MAX_VALUE), "(float) (Float.MAX_VALUE + Float.MAX_VALUE)"); + Tester.checkEqual(floatAdd(Float.MAX_VALUE, Float.POSITIVE_INFINITY), (float) (Float.MAX_VALUE + Float.POSITIVE_INFINITY), "(float) (Float.MAX_VALUE + Float.POSITIVE_INFINITY)"); + Tester.checkEqual(floatAdd(Float.MAX_VALUE, Float.NaN), (float) (Float.MAX_VALUE + Float.NaN), "(float) (Float.MAX_VALUE + Float.NaN)"); + Tester.checkEqual(floatAdd(Float.POSITIVE_INFINITY, Float.NEGATIVE_INFINITY), (float) (Float.POSITIVE_INFINITY + Float.NEGATIVE_INFINITY), "(float) (Float.POSITIVE_INFINITY + Float.NEGATIVE_INFINITY)"); + Tester.checkEqual(floatAdd(Float.POSITIVE_INFINITY, -1.0f), (float) (Float.POSITIVE_INFINITY + -1.0f), "(float) (Float.POSITIVE_INFINITY + -1.0f)"); + Tester.checkEqual(floatAdd(Float.POSITIVE_INFINITY, -0.0f), (float) (Float.POSITIVE_INFINITY + -0.0f), "(float) (Float.POSITIVE_INFINITY + -0.0f)"); + Tester.checkEqual(floatAdd(Float.POSITIVE_INFINITY, 0.0f), (float) (Float.POSITIVE_INFINITY + 0.0f), "(float) (Float.POSITIVE_INFINITY + 0.0f)"); + Tester.checkEqual(floatAdd(Float.POSITIVE_INFINITY, Float.MIN_VALUE), (float) (Float.POSITIVE_INFINITY + Float.MIN_VALUE), "(float) (Float.POSITIVE_INFINITY + Float.MIN_VALUE)"); + Tester.checkEqual(floatAdd(Float.POSITIVE_INFINITY, 1.0f), (float) (Float.POSITIVE_INFINITY + 1.0f), "(float) (Float.POSITIVE_INFINITY + 1.0f)"); + Tester.checkEqual(floatAdd(Float.POSITIVE_INFINITY, Float.MAX_VALUE), (float) (Float.POSITIVE_INFINITY + Float.MAX_VALUE), "(float) (Float.POSITIVE_INFINITY + Float.MAX_VALUE)"); + Tester.checkEqual(floatAdd(Float.POSITIVE_INFINITY, Float.POSITIVE_INFINITY), (float) (Float.POSITIVE_INFINITY + Float.POSITIVE_INFINITY), "(float) (Float.POSITIVE_INFINITY + Float.POSITIVE_INFINITY)"); + Tester.checkEqual(floatAdd(Float.POSITIVE_INFINITY, Float.NaN), (float) (Float.POSITIVE_INFINITY + Float.NaN), "(float) (Float.POSITIVE_INFINITY + Float.NaN)"); + Tester.checkEqual(floatAdd(Float.NaN, Float.NEGATIVE_INFINITY), (float) (Float.NaN + Float.NEGATIVE_INFINITY), "(float) (Float.NaN + Float.NEGATIVE_INFINITY)"); + Tester.checkEqual(floatAdd(Float.NaN, -1.0f), (float) (Float.NaN + -1.0f), "(float) (Float.NaN + -1.0f)"); + Tester.checkEqual(floatAdd(Float.NaN, -0.0f), (float) (Float.NaN + -0.0f), "(float) (Float.NaN + -0.0f)"); + Tester.checkEqual(floatAdd(Float.NaN, 0.0f), (float) (Float.NaN + 0.0f), "(float) (Float.NaN + 0.0f)"); + Tester.checkEqual(floatAdd(Float.NaN, Float.MIN_VALUE), (float) (Float.NaN + Float.MIN_VALUE), "(float) (Float.NaN + Float.MIN_VALUE)"); + Tester.checkEqual(floatAdd(Float.NaN, 1.0f), (float) (Float.NaN + 1.0f), "(float) (Float.NaN + 1.0f)"); + Tester.checkEqual(floatAdd(Float.NaN, Float.MAX_VALUE), (float) (Float.NaN + Float.MAX_VALUE), "(float) (Float.NaN + Float.MAX_VALUE)"); + Tester.checkEqual(floatAdd(Float.NaN, Float.POSITIVE_INFINITY), (float) (Float.NaN + Float.POSITIVE_INFINITY), "(float) (Float.NaN + Float.POSITIVE_INFINITY)"); + Tester.checkEqual(floatAdd(Float.NaN, Float.NaN), (float) (Float.NaN + Float.NaN), "(float) (Float.NaN + Float.NaN)"); + Tester.checkEqual(floatSub(Float.NEGATIVE_INFINITY, Float.NEGATIVE_INFINITY), (float) (Float.NEGATIVE_INFINITY - Float.NEGATIVE_INFINITY), "(float) (Float.NEGATIVE_INFINITY - Float.NEGATIVE_INFINITY)"); + Tester.checkEqual(floatSub(Float.NEGATIVE_INFINITY, -1.0f), (float) (Float.NEGATIVE_INFINITY - -1.0f), "(float) (Float.NEGATIVE_INFINITY - -1.0f)"); + Tester.checkEqual(floatSub(Float.NEGATIVE_INFINITY, -0.0f), (float) (Float.NEGATIVE_INFINITY - -0.0f), "(float) (Float.NEGATIVE_INFINITY - -0.0f)"); + Tester.checkEqual(floatSub(Float.NEGATIVE_INFINITY, 0.0f), (float) (Float.NEGATIVE_INFINITY - 0.0f), "(float) (Float.NEGATIVE_INFINITY - 0.0f)"); + Tester.checkEqual(floatSub(Float.NEGATIVE_INFINITY, Float.MIN_VALUE), (float) (Float.NEGATIVE_INFINITY - Float.MIN_VALUE), "(float) (Float.NEGATIVE_INFINITY - Float.MIN_VALUE)"); + Tester.checkEqual(floatSub(Float.NEGATIVE_INFINITY, 1.0f), (float) (Float.NEGATIVE_INFINITY - 1.0f), "(float) (Float.NEGATIVE_INFINITY - 1.0f)"); + Tester.checkEqual(floatSub(Float.NEGATIVE_INFINITY, Float.MAX_VALUE), (float) (Float.NEGATIVE_INFINITY - Float.MAX_VALUE), "(float) (Float.NEGATIVE_INFINITY - Float.MAX_VALUE)"); + Tester.checkEqual(floatSub(Float.NEGATIVE_INFINITY, Float.POSITIVE_INFINITY), (float) (Float.NEGATIVE_INFINITY - Float.POSITIVE_INFINITY), "(float) (Float.NEGATIVE_INFINITY - Float.POSITIVE_INFINITY)"); + Tester.checkEqual(floatSub(Float.NEGATIVE_INFINITY, Float.NaN), (float) (Float.NEGATIVE_INFINITY - Float.NaN), "(float) (Float.NEGATIVE_INFINITY - Float.NaN)"); + Tester.checkEqual(floatSub(-1.0f, Float.NEGATIVE_INFINITY), (float) (-1.0f - Float.NEGATIVE_INFINITY), "(float) (-1.0f - Float.NEGATIVE_INFINITY)"); + Tester.checkEqual(floatSub(-1.0f, -1.0f), (float) (-1.0f - -1.0f), "(float) (-1.0f - -1.0f)"); + Tester.checkEqual(floatSub(-1.0f, -0.0f), (float) (-1.0f - -0.0f), "(float) (-1.0f - -0.0f)"); + Tester.checkEqual(floatSub(-1.0f, 0.0f), (float) (-1.0f - 0.0f), "(float) (-1.0f - 0.0f)"); + Tester.checkEqual(floatSub(-1.0f, Float.MIN_VALUE), (float) (-1.0f - Float.MIN_VALUE), "(float) (-1.0f - Float.MIN_VALUE)"); + Tester.checkEqual(floatSub(-1.0f, 1.0f), (float) (-1.0f - 1.0f), "(float) (-1.0f - 1.0f)"); + Tester.checkEqual(floatSub(-1.0f, Float.MAX_VALUE), (float) (-1.0f - Float.MAX_VALUE), "(float) (-1.0f - Float.MAX_VALUE)"); + Tester.checkEqual(floatSub(-1.0f, Float.POSITIVE_INFINITY), (float) (-1.0f - Float.POSITIVE_INFINITY), "(float) (-1.0f - Float.POSITIVE_INFINITY)"); + Tester.checkEqual(floatSub(-1.0f, Float.NaN), (float) (-1.0f - Float.NaN), "(float) (-1.0f - Float.NaN)"); + Tester.checkEqual(floatSub(-0.0f, Float.NEGATIVE_INFINITY), (float) (-0.0f - Float.NEGATIVE_INFINITY), "(float) (-0.0f - Float.NEGATIVE_INFINITY)"); + Tester.checkEqual(floatSub(-0.0f, -1.0f), (float) (-0.0f - -1.0f), "(float) (-0.0f - -1.0f)"); + Tester.checkEqual(floatSub(-0.0f, -0.0f), (float) (-0.0f - -0.0f), "(float) (-0.0f - -0.0f)"); + Tester.checkEqual(floatSub(-0.0f, 0.0f), (float) (-0.0f - 0.0f), "(float) (-0.0f - 0.0f)"); + Tester.checkEqual(floatSub(-0.0f, Float.MIN_VALUE), (float) (-0.0f - Float.MIN_VALUE), "(float) (-0.0f - Float.MIN_VALUE)"); + Tester.checkEqual(floatSub(-0.0f, 1.0f), (float) (-0.0f - 1.0f), "(float) (-0.0f - 1.0f)"); + Tester.checkEqual(floatSub(-0.0f, Float.MAX_VALUE), (float) (-0.0f - Float.MAX_VALUE), "(float) (-0.0f - Float.MAX_VALUE)"); + Tester.checkEqual(floatSub(-0.0f, Float.POSITIVE_INFINITY), (float) (-0.0f - Float.POSITIVE_INFINITY), "(float) (-0.0f - Float.POSITIVE_INFINITY)"); + Tester.checkEqual(floatSub(-0.0f, Float.NaN), (float) (-0.0f - Float.NaN), "(float) (-0.0f - Float.NaN)"); + Tester.checkEqual(floatSub(0.0f, Float.NEGATIVE_INFINITY), (float) (0.0f - Float.NEGATIVE_INFINITY), "(float) (0.0f - Float.NEGATIVE_INFINITY)"); + Tester.checkEqual(floatSub(0.0f, -1.0f), (float) (0.0f - -1.0f), "(float) (0.0f - -1.0f)"); + Tester.checkEqual(floatSub(0.0f, -0.0f), (float) (0.0f - -0.0f), "(float) (0.0f - -0.0f)"); + Tester.checkEqual(floatSub(0.0f, 0.0f), (float) (0.0f - 0.0f), "(float) (0.0f - 0.0f)"); + Tester.checkEqual(floatSub(0.0f, Float.MIN_VALUE), (float) (0.0f - Float.MIN_VALUE), "(float) (0.0f - Float.MIN_VALUE)"); + Tester.checkEqual(floatSub(0.0f, 1.0f), (float) (0.0f - 1.0f), "(float) (0.0f - 1.0f)"); + Tester.checkEqual(floatSub(0.0f, Float.MAX_VALUE), (float) (0.0f - Float.MAX_VALUE), "(float) (0.0f - Float.MAX_VALUE)"); + Tester.checkEqual(floatSub(0.0f, Float.POSITIVE_INFINITY), (float) (0.0f - Float.POSITIVE_INFINITY), "(float) (0.0f - Float.POSITIVE_INFINITY)"); + Tester.checkEqual(floatSub(0.0f, Float.NaN), (float) (0.0f - Float.NaN), "(float) (0.0f - Float.NaN)"); + Tester.checkEqual(floatSub(Float.MIN_VALUE, Float.NEGATIVE_INFINITY), (float) (Float.MIN_VALUE - Float.NEGATIVE_INFINITY), "(float) (Float.MIN_VALUE - Float.NEGATIVE_INFINITY)"); + Tester.checkEqual(floatSub(Float.MIN_VALUE, -1.0f), (float) (Float.MIN_VALUE - -1.0f), "(float) (Float.MIN_VALUE - -1.0f)"); + Tester.checkEqual(floatSub(Float.MIN_VALUE, -0.0f), (float) (Float.MIN_VALUE - -0.0f), "(float) (Float.MIN_VALUE - -0.0f)"); + Tester.checkEqual(floatSub(Float.MIN_VALUE, 0.0f), (float) (Float.MIN_VALUE - 0.0f), "(float) (Float.MIN_VALUE - 0.0f)"); + Tester.checkEqual(floatSub(Float.MIN_VALUE, Float.MIN_VALUE), (float) (Float.MIN_VALUE - Float.MIN_VALUE), "(float) (Float.MIN_VALUE - Float.MIN_VALUE)"); + Tester.checkEqual(floatSub(Float.MIN_VALUE, 1.0f), (float) (Float.MIN_VALUE - 1.0f), "(float) (Float.MIN_VALUE - 1.0f)"); + Tester.checkEqual(floatSub(Float.MIN_VALUE, Float.MAX_VALUE), (float) (Float.MIN_VALUE - Float.MAX_VALUE), "(float) (Float.MIN_VALUE - Float.MAX_VALUE)"); + Tester.checkEqual(floatSub(Float.MIN_VALUE, Float.POSITIVE_INFINITY), (float) (Float.MIN_VALUE - Float.POSITIVE_INFINITY), "(float) (Float.MIN_VALUE - Float.POSITIVE_INFINITY)"); + Tester.checkEqual(floatSub(Float.MIN_VALUE, Float.NaN), (float) (Float.MIN_VALUE - Float.NaN), "(float) (Float.MIN_VALUE - Float.NaN)"); + Tester.checkEqual(floatSub(1.0f, Float.NEGATIVE_INFINITY), (float) (1.0f - Float.NEGATIVE_INFINITY), "(float) (1.0f - Float.NEGATIVE_INFINITY)"); + Tester.checkEqual(floatSub(1.0f, -1.0f), (float) (1.0f - -1.0f), "(float) (1.0f - -1.0f)"); + Tester.checkEqual(floatSub(1.0f, -0.0f), (float) (1.0f - -0.0f), "(float) (1.0f - -0.0f)"); + Tester.checkEqual(floatSub(1.0f, 0.0f), (float) (1.0f - 0.0f), "(float) (1.0f - 0.0f)"); + Tester.checkEqual(floatSub(1.0f, Float.MIN_VALUE), (float) (1.0f - Float.MIN_VALUE), "(float) (1.0f - Float.MIN_VALUE)"); + Tester.checkEqual(floatSub(1.0f, 1.0f), (float) (1.0f - 1.0f), "(float) (1.0f - 1.0f)"); + Tester.checkEqual(floatSub(1.0f, Float.MAX_VALUE), (float) (1.0f - Float.MAX_VALUE), "(float) (1.0f - Float.MAX_VALUE)"); + Tester.checkEqual(floatSub(1.0f, Float.POSITIVE_INFINITY), (float) (1.0f - Float.POSITIVE_INFINITY), "(float) (1.0f - Float.POSITIVE_INFINITY)"); + Tester.checkEqual(floatSub(1.0f, Float.NaN), (float) (1.0f - Float.NaN), "(float) (1.0f - Float.NaN)"); + Tester.checkEqual(floatSub(Float.MAX_VALUE, Float.NEGATIVE_INFINITY), (float) (Float.MAX_VALUE - Float.NEGATIVE_INFINITY), "(float) (Float.MAX_VALUE - Float.NEGATIVE_INFINITY)"); + Tester.checkEqual(floatSub(Float.MAX_VALUE, -1.0f), (float) (Float.MAX_VALUE - -1.0f), "(float) (Float.MAX_VALUE - -1.0f)"); + Tester.checkEqual(floatSub(Float.MAX_VALUE, -0.0f), (float) (Float.MAX_VALUE - -0.0f), "(float) (Float.MAX_VALUE - -0.0f)"); + Tester.checkEqual(floatSub(Float.MAX_VALUE, 0.0f), (float) (Float.MAX_VALUE - 0.0f), "(float) (Float.MAX_VALUE - 0.0f)"); + Tester.checkEqual(floatSub(Float.MAX_VALUE, Float.MIN_VALUE), (float) (Float.MAX_VALUE - Float.MIN_VALUE), "(float) (Float.MAX_VALUE - Float.MIN_VALUE)"); + Tester.checkEqual(floatSub(Float.MAX_VALUE, 1.0f), (float) (Float.MAX_VALUE - 1.0f), "(float) (Float.MAX_VALUE - 1.0f)"); + Tester.checkEqual(floatSub(Float.MAX_VALUE, Float.MAX_VALUE), (float) (Float.MAX_VALUE - Float.MAX_VALUE), "(float) (Float.MAX_VALUE - Float.MAX_VALUE)"); + Tester.checkEqual(floatSub(Float.MAX_VALUE, Float.POSITIVE_INFINITY), (float) (Float.MAX_VALUE - Float.POSITIVE_INFINITY), "(float) (Float.MAX_VALUE - Float.POSITIVE_INFINITY)"); + Tester.checkEqual(floatSub(Float.MAX_VALUE, Float.NaN), (float) (Float.MAX_VALUE - Float.NaN), "(float) (Float.MAX_VALUE - Float.NaN)"); + Tester.checkEqual(floatSub(Float.POSITIVE_INFINITY, Float.NEGATIVE_INFINITY), (float) (Float.POSITIVE_INFINITY - Float.NEGATIVE_INFINITY), "(float) (Float.POSITIVE_INFINITY - Float.NEGATIVE_INFINITY)"); + Tester.checkEqual(floatSub(Float.POSITIVE_INFINITY, -1.0f), (float) (Float.POSITIVE_INFINITY - -1.0f), "(float) (Float.POSITIVE_INFINITY - -1.0f)"); + Tester.checkEqual(floatSub(Float.POSITIVE_INFINITY, -0.0f), (float) (Float.POSITIVE_INFINITY - -0.0f), "(float) (Float.POSITIVE_INFINITY - -0.0f)"); + Tester.checkEqual(floatSub(Float.POSITIVE_INFINITY, 0.0f), (float) (Float.POSITIVE_INFINITY - 0.0f), "(float) (Float.POSITIVE_INFINITY - 0.0f)"); + Tester.checkEqual(floatSub(Float.POSITIVE_INFINITY, Float.MIN_VALUE), (float) (Float.POSITIVE_INFINITY - Float.MIN_VALUE), "(float) (Float.POSITIVE_INFINITY - Float.MIN_VALUE)"); + Tester.checkEqual(floatSub(Float.POSITIVE_INFINITY, 1.0f), (float) (Float.POSITIVE_INFINITY - 1.0f), "(float) (Float.POSITIVE_INFINITY - 1.0f)"); + Tester.checkEqual(floatSub(Float.POSITIVE_INFINITY, Float.MAX_VALUE), (float) (Float.POSITIVE_INFINITY - Float.MAX_VALUE), "(float) (Float.POSITIVE_INFINITY - Float.MAX_VALUE)"); + Tester.checkEqual(floatSub(Float.POSITIVE_INFINITY, Float.POSITIVE_INFINITY), (float) (Float.POSITIVE_INFINITY - Float.POSITIVE_INFINITY), "(float) (Float.POSITIVE_INFINITY - Float.POSITIVE_INFINITY)"); + Tester.checkEqual(floatSub(Float.POSITIVE_INFINITY, Float.NaN), (float) (Float.POSITIVE_INFINITY - Float.NaN), "(float) (Float.POSITIVE_INFINITY - Float.NaN)"); + Tester.checkEqual(floatSub(Float.NaN, Float.NEGATIVE_INFINITY), (float) (Float.NaN - Float.NEGATIVE_INFINITY), "(float) (Float.NaN - Float.NEGATIVE_INFINITY)"); + Tester.checkEqual(floatSub(Float.NaN, -1.0f), (float) (Float.NaN - -1.0f), "(float) (Float.NaN - -1.0f)"); + Tester.checkEqual(floatSub(Float.NaN, -0.0f), (float) (Float.NaN - -0.0f), "(float) (Float.NaN - -0.0f)"); + Tester.checkEqual(floatSub(Float.NaN, 0.0f), (float) (Float.NaN - 0.0f), "(float) (Float.NaN - 0.0f)"); + Tester.checkEqual(floatSub(Float.NaN, Float.MIN_VALUE), (float) (Float.NaN - Float.MIN_VALUE), "(float) (Float.NaN - Float.MIN_VALUE)"); + Tester.checkEqual(floatSub(Float.NaN, 1.0f), (float) (Float.NaN - 1.0f), "(float) (Float.NaN - 1.0f)"); + Tester.checkEqual(floatSub(Float.NaN, Float.MAX_VALUE), (float) (Float.NaN - Float.MAX_VALUE), "(float) (Float.NaN - Float.MAX_VALUE)"); + Tester.checkEqual(floatSub(Float.NaN, Float.POSITIVE_INFINITY), (float) (Float.NaN - Float.POSITIVE_INFINITY), "(float) (Float.NaN - Float.POSITIVE_INFINITY)"); + Tester.checkEqual(floatSub(Float.NaN, Float.NaN), (float) (Float.NaN - Float.NaN), "(float) (Float.NaN - Float.NaN)"); + Tester.checkEqual(floatLt(Float.NEGATIVE_INFINITY, Float.NEGATIVE_INFINITY), Float.NEGATIVE_INFINITY < Float.NEGATIVE_INFINITY, "Float.NEGATIVE_INFINITY < Float.NEGATIVE_INFINITY"); + Tester.checkEqual(floatLt(Float.NEGATIVE_INFINITY, -1.0f), Float.NEGATIVE_INFINITY < -1.0f, "Float.NEGATIVE_INFINITY < -1.0f"); + Tester.checkEqual(floatLt(Float.NEGATIVE_INFINITY, -0.0f), Float.NEGATIVE_INFINITY < -0.0f, "Float.NEGATIVE_INFINITY < -0.0f"); + Tester.checkEqual(floatLt(Float.NEGATIVE_INFINITY, 0.0f), Float.NEGATIVE_INFINITY < 0.0f, "Float.NEGATIVE_INFINITY < 0.0f"); + Tester.checkEqual(floatLt(Float.NEGATIVE_INFINITY, Float.MIN_VALUE), Float.NEGATIVE_INFINITY < Float.MIN_VALUE, "Float.NEGATIVE_INFINITY < Float.MIN_VALUE"); + Tester.checkEqual(floatLt(Float.NEGATIVE_INFINITY, 1.0f), Float.NEGATIVE_INFINITY < 1.0f, "Float.NEGATIVE_INFINITY < 1.0f"); + Tester.checkEqual(floatLt(Float.NEGATIVE_INFINITY, Float.MAX_VALUE), Float.NEGATIVE_INFINITY < Float.MAX_VALUE, "Float.NEGATIVE_INFINITY < Float.MAX_VALUE"); + Tester.checkEqual(floatLt(Float.NEGATIVE_INFINITY, Float.POSITIVE_INFINITY), Float.NEGATIVE_INFINITY < Float.POSITIVE_INFINITY, "Float.NEGATIVE_INFINITY < Float.POSITIVE_INFINITY"); + Tester.checkEqual(floatLt(Float.NEGATIVE_INFINITY, Float.NaN), Float.NEGATIVE_INFINITY < Float.NaN, "Float.NEGATIVE_INFINITY < Float.NaN"); + Tester.checkEqual(floatLt(-1.0f, Float.NEGATIVE_INFINITY), -1.0f < Float.NEGATIVE_INFINITY, "-1.0f < Float.NEGATIVE_INFINITY"); + Tester.checkEqual(floatLt(-1.0f, -1.0f), -1.0f < -1.0f, "-1.0f < -1.0f"); + Tester.checkEqual(floatLt(-1.0f, -0.0f), -1.0f < -0.0f, "-1.0f < -0.0f"); + Tester.checkEqual(floatLt(-1.0f, 0.0f), -1.0f < 0.0f, "-1.0f < 0.0f"); + Tester.checkEqual(floatLt(-1.0f, Float.MIN_VALUE), -1.0f < Float.MIN_VALUE, "-1.0f < Float.MIN_VALUE"); + Tester.checkEqual(floatLt(-1.0f, 1.0f), -1.0f < 1.0f, "-1.0f < 1.0f"); + Tester.checkEqual(floatLt(-1.0f, Float.MAX_VALUE), -1.0f < Float.MAX_VALUE, "-1.0f < Float.MAX_VALUE"); + Tester.checkEqual(floatLt(-1.0f, Float.POSITIVE_INFINITY), -1.0f < Float.POSITIVE_INFINITY, "-1.0f < Float.POSITIVE_INFINITY"); + Tester.checkEqual(floatLt(-1.0f, Float.NaN), -1.0f < Float.NaN, "-1.0f < Float.NaN"); + Tester.checkEqual(floatLt(-0.0f, Float.NEGATIVE_INFINITY), -0.0f < Float.NEGATIVE_INFINITY, "-0.0f < Float.NEGATIVE_INFINITY"); + Tester.checkEqual(floatLt(-0.0f, -1.0f), -0.0f < -1.0f, "-0.0f < -1.0f"); + Tester.checkEqual(floatLt(-0.0f, -0.0f), -0.0f < -0.0f, "-0.0f < -0.0f"); + Tester.checkEqual(floatLt(-0.0f, 0.0f), -0.0f < 0.0f, "-0.0f < 0.0f"); + Tester.checkEqual(floatLt(-0.0f, Float.MIN_VALUE), -0.0f < Float.MIN_VALUE, "-0.0f < Float.MIN_VALUE"); + Tester.checkEqual(floatLt(-0.0f, 1.0f), -0.0f < 1.0f, "-0.0f < 1.0f"); + Tester.checkEqual(floatLt(-0.0f, Float.MAX_VALUE), -0.0f < Float.MAX_VALUE, "-0.0f < Float.MAX_VALUE"); + Tester.checkEqual(floatLt(-0.0f, Float.POSITIVE_INFINITY), -0.0f < Float.POSITIVE_INFINITY, "-0.0f < Float.POSITIVE_INFINITY"); + Tester.checkEqual(floatLt(-0.0f, Float.NaN), -0.0f < Float.NaN, "-0.0f < Float.NaN"); + Tester.checkEqual(floatLt(0.0f, Float.NEGATIVE_INFINITY), 0.0f < Float.NEGATIVE_INFINITY, "0.0f < Float.NEGATIVE_INFINITY"); + Tester.checkEqual(floatLt(0.0f, -1.0f), 0.0f < -1.0f, "0.0f < -1.0f"); + Tester.checkEqual(floatLt(0.0f, -0.0f), 0.0f < -0.0f, "0.0f < -0.0f"); + Tester.checkEqual(floatLt(0.0f, 0.0f), 0.0f < 0.0f, "0.0f < 0.0f"); + Tester.checkEqual(floatLt(0.0f, Float.MIN_VALUE), 0.0f < Float.MIN_VALUE, "0.0f < Float.MIN_VALUE"); + Tester.checkEqual(floatLt(0.0f, 1.0f), 0.0f < 1.0f, "0.0f < 1.0f"); + Tester.checkEqual(floatLt(0.0f, Float.MAX_VALUE), 0.0f < Float.MAX_VALUE, "0.0f < Float.MAX_VALUE"); + Tester.checkEqual(floatLt(0.0f, Float.POSITIVE_INFINITY), 0.0f < Float.POSITIVE_INFINITY, "0.0f < Float.POSITIVE_INFINITY"); + Tester.checkEqual(floatLt(0.0f, Float.NaN), 0.0f < Float.NaN, "0.0f < Float.NaN"); + Tester.checkEqual(floatLt(Float.MIN_VALUE, Float.NEGATIVE_INFINITY), Float.MIN_VALUE < Float.NEGATIVE_INFINITY, "Float.MIN_VALUE < Float.NEGATIVE_INFINITY"); + Tester.checkEqual(floatLt(Float.MIN_VALUE, -1.0f), Float.MIN_VALUE < -1.0f, "Float.MIN_VALUE < -1.0f"); + Tester.checkEqual(floatLt(Float.MIN_VALUE, -0.0f), Float.MIN_VALUE < -0.0f, "Float.MIN_VALUE < -0.0f"); + Tester.checkEqual(floatLt(Float.MIN_VALUE, 0.0f), Float.MIN_VALUE < 0.0f, "Float.MIN_VALUE < 0.0f"); + Tester.checkEqual(floatLt(Float.MIN_VALUE, Float.MIN_VALUE), Float.MIN_VALUE < Float.MIN_VALUE, "Float.MIN_VALUE < Float.MIN_VALUE"); + Tester.checkEqual(floatLt(Float.MIN_VALUE, 1.0f), Float.MIN_VALUE < 1.0f, "Float.MIN_VALUE < 1.0f"); + Tester.checkEqual(floatLt(Float.MIN_VALUE, Float.MAX_VALUE), Float.MIN_VALUE < Float.MAX_VALUE, "Float.MIN_VALUE < Float.MAX_VALUE"); + Tester.checkEqual(floatLt(Float.MIN_VALUE, Float.POSITIVE_INFINITY), Float.MIN_VALUE < Float.POSITIVE_INFINITY, "Float.MIN_VALUE < Float.POSITIVE_INFINITY"); + Tester.checkEqual(floatLt(Float.MIN_VALUE, Float.NaN), Float.MIN_VALUE < Float.NaN, "Float.MIN_VALUE < Float.NaN"); + Tester.checkEqual(floatLt(1.0f, Float.NEGATIVE_INFINITY), 1.0f < Float.NEGATIVE_INFINITY, "1.0f < Float.NEGATIVE_INFINITY"); + Tester.checkEqual(floatLt(1.0f, -1.0f), 1.0f < -1.0f, "1.0f < -1.0f"); + Tester.checkEqual(floatLt(1.0f, -0.0f), 1.0f < -0.0f, "1.0f < -0.0f"); + Tester.checkEqual(floatLt(1.0f, 0.0f), 1.0f < 0.0f, "1.0f < 0.0f"); + Tester.checkEqual(floatLt(1.0f, Float.MIN_VALUE), 1.0f < Float.MIN_VALUE, "1.0f < Float.MIN_VALUE"); + Tester.checkEqual(floatLt(1.0f, 1.0f), 1.0f < 1.0f, "1.0f < 1.0f"); + Tester.checkEqual(floatLt(1.0f, Float.MAX_VALUE), 1.0f < Float.MAX_VALUE, "1.0f < Float.MAX_VALUE"); + Tester.checkEqual(floatLt(1.0f, Float.POSITIVE_INFINITY), 1.0f < Float.POSITIVE_INFINITY, "1.0f < Float.POSITIVE_INFINITY"); + Tester.checkEqual(floatLt(1.0f, Float.NaN), 1.0f < Float.NaN, "1.0f < Float.NaN"); + Tester.checkEqual(floatLt(Float.MAX_VALUE, Float.NEGATIVE_INFINITY), Float.MAX_VALUE < Float.NEGATIVE_INFINITY, "Float.MAX_VALUE < Float.NEGATIVE_INFINITY"); + Tester.checkEqual(floatLt(Float.MAX_VALUE, -1.0f), Float.MAX_VALUE < -1.0f, "Float.MAX_VALUE < -1.0f"); + Tester.checkEqual(floatLt(Float.MAX_VALUE, -0.0f), Float.MAX_VALUE < -0.0f, "Float.MAX_VALUE < -0.0f"); + Tester.checkEqual(floatLt(Float.MAX_VALUE, 0.0f), Float.MAX_VALUE < 0.0f, "Float.MAX_VALUE < 0.0f"); + Tester.checkEqual(floatLt(Float.MAX_VALUE, Float.MIN_VALUE), Float.MAX_VALUE < Float.MIN_VALUE, "Float.MAX_VALUE < Float.MIN_VALUE"); + Tester.checkEqual(floatLt(Float.MAX_VALUE, 1.0f), Float.MAX_VALUE < 1.0f, "Float.MAX_VALUE < 1.0f"); + Tester.checkEqual(floatLt(Float.MAX_VALUE, Float.MAX_VALUE), Float.MAX_VALUE < Float.MAX_VALUE, "Float.MAX_VALUE < Float.MAX_VALUE"); + Tester.checkEqual(floatLt(Float.MAX_VALUE, Float.POSITIVE_INFINITY), Float.MAX_VALUE < Float.POSITIVE_INFINITY, "Float.MAX_VALUE < Float.POSITIVE_INFINITY"); + Tester.checkEqual(floatLt(Float.MAX_VALUE, Float.NaN), Float.MAX_VALUE < Float.NaN, "Float.MAX_VALUE < Float.NaN"); + Tester.checkEqual(floatLt(Float.POSITIVE_INFINITY, Float.NEGATIVE_INFINITY), Float.POSITIVE_INFINITY < Float.NEGATIVE_INFINITY, "Float.POSITIVE_INFINITY < Float.NEGATIVE_INFINITY"); + Tester.checkEqual(floatLt(Float.POSITIVE_INFINITY, -1.0f), Float.POSITIVE_INFINITY < -1.0f, "Float.POSITIVE_INFINITY < -1.0f"); + Tester.checkEqual(floatLt(Float.POSITIVE_INFINITY, -0.0f), Float.POSITIVE_INFINITY < -0.0f, "Float.POSITIVE_INFINITY < -0.0f"); + Tester.checkEqual(floatLt(Float.POSITIVE_INFINITY, 0.0f), Float.POSITIVE_INFINITY < 0.0f, "Float.POSITIVE_INFINITY < 0.0f"); + Tester.checkEqual(floatLt(Float.POSITIVE_INFINITY, Float.MIN_VALUE), Float.POSITIVE_INFINITY < Float.MIN_VALUE, "Float.POSITIVE_INFINITY < Float.MIN_VALUE"); + Tester.checkEqual(floatLt(Float.POSITIVE_INFINITY, 1.0f), Float.POSITIVE_INFINITY < 1.0f, "Float.POSITIVE_INFINITY < 1.0f"); + Tester.checkEqual(floatLt(Float.POSITIVE_INFINITY, Float.MAX_VALUE), Float.POSITIVE_INFINITY < Float.MAX_VALUE, "Float.POSITIVE_INFINITY < Float.MAX_VALUE"); + Tester.checkEqual(floatLt(Float.POSITIVE_INFINITY, Float.POSITIVE_INFINITY), Float.POSITIVE_INFINITY < Float.POSITIVE_INFINITY, "Float.POSITIVE_INFINITY < Float.POSITIVE_INFINITY"); + Tester.checkEqual(floatLt(Float.POSITIVE_INFINITY, Float.NaN), Float.POSITIVE_INFINITY < Float.NaN, "Float.POSITIVE_INFINITY < Float.NaN"); + Tester.checkEqual(floatLt(Float.NaN, Float.NEGATIVE_INFINITY), Float.NaN < Float.NEGATIVE_INFINITY, "Float.NaN < Float.NEGATIVE_INFINITY"); + Tester.checkEqual(floatLt(Float.NaN, -1.0f), Float.NaN < -1.0f, "Float.NaN < -1.0f"); + Tester.checkEqual(floatLt(Float.NaN, -0.0f), Float.NaN < -0.0f, "Float.NaN < -0.0f"); + Tester.checkEqual(floatLt(Float.NaN, 0.0f), Float.NaN < 0.0f, "Float.NaN < 0.0f"); + Tester.checkEqual(floatLt(Float.NaN, Float.MIN_VALUE), Float.NaN < Float.MIN_VALUE, "Float.NaN < Float.MIN_VALUE"); + Tester.checkEqual(floatLt(Float.NaN, 1.0f), Float.NaN < 1.0f, "Float.NaN < 1.0f"); + Tester.checkEqual(floatLt(Float.NaN, Float.MAX_VALUE), Float.NaN < Float.MAX_VALUE, "Float.NaN < Float.MAX_VALUE"); + Tester.checkEqual(floatLt(Float.NaN, Float.POSITIVE_INFINITY), Float.NaN < Float.POSITIVE_INFINITY, "Float.NaN < Float.POSITIVE_INFINITY"); + Tester.checkEqual(floatLt(Float.NaN, Float.NaN), Float.NaN < Float.NaN, "Float.NaN < Float.NaN"); + Tester.checkEqual(floatGt(Float.NEGATIVE_INFINITY, Float.NEGATIVE_INFINITY), Float.NEGATIVE_INFINITY > Float.NEGATIVE_INFINITY, "Float.NEGATIVE_INFINITY > Float.NEGATIVE_INFINITY"); + Tester.checkEqual(floatGt(Float.NEGATIVE_INFINITY, -1.0f), Float.NEGATIVE_INFINITY > -1.0f, "Float.NEGATIVE_INFINITY > -1.0f"); + Tester.checkEqual(floatGt(Float.NEGATIVE_INFINITY, -0.0f), Float.NEGATIVE_INFINITY > -0.0f, "Float.NEGATIVE_INFINITY > -0.0f"); + Tester.checkEqual(floatGt(Float.NEGATIVE_INFINITY, 0.0f), Float.NEGATIVE_INFINITY > 0.0f, "Float.NEGATIVE_INFINITY > 0.0f"); + Tester.checkEqual(floatGt(Float.NEGATIVE_INFINITY, Float.MIN_VALUE), Float.NEGATIVE_INFINITY > Float.MIN_VALUE, "Float.NEGATIVE_INFINITY > Float.MIN_VALUE"); + Tester.checkEqual(floatGt(Float.NEGATIVE_INFINITY, 1.0f), Float.NEGATIVE_INFINITY > 1.0f, "Float.NEGATIVE_INFINITY > 1.0f"); + Tester.checkEqual(floatGt(Float.NEGATIVE_INFINITY, Float.MAX_VALUE), Float.NEGATIVE_INFINITY > Float.MAX_VALUE, "Float.NEGATIVE_INFINITY > Float.MAX_VALUE"); + Tester.checkEqual(floatGt(Float.NEGATIVE_INFINITY, Float.POSITIVE_INFINITY), Float.NEGATIVE_INFINITY > Float.POSITIVE_INFINITY, "Float.NEGATIVE_INFINITY > Float.POSITIVE_INFINITY"); + Tester.checkEqual(floatGt(Float.NEGATIVE_INFINITY, Float.NaN), Float.NEGATIVE_INFINITY > Float.NaN, "Float.NEGATIVE_INFINITY > Float.NaN"); + Tester.checkEqual(floatGt(-1.0f, Float.NEGATIVE_INFINITY), -1.0f > Float.NEGATIVE_INFINITY, "-1.0f > Float.NEGATIVE_INFINITY"); + Tester.checkEqual(floatGt(-1.0f, -1.0f), -1.0f > -1.0f, "-1.0f > -1.0f"); + Tester.checkEqual(floatGt(-1.0f, -0.0f), -1.0f > -0.0f, "-1.0f > -0.0f"); + Tester.checkEqual(floatGt(-1.0f, 0.0f), -1.0f > 0.0f, "-1.0f > 0.0f"); + Tester.checkEqual(floatGt(-1.0f, Float.MIN_VALUE), -1.0f > Float.MIN_VALUE, "-1.0f > Float.MIN_VALUE"); + Tester.checkEqual(floatGt(-1.0f, 1.0f), -1.0f > 1.0f, "-1.0f > 1.0f"); + Tester.checkEqual(floatGt(-1.0f, Float.MAX_VALUE), -1.0f > Float.MAX_VALUE, "-1.0f > Float.MAX_VALUE"); + Tester.checkEqual(floatGt(-1.0f, Float.POSITIVE_INFINITY), -1.0f > Float.POSITIVE_INFINITY, "-1.0f > Float.POSITIVE_INFINITY"); + Tester.checkEqual(floatGt(-1.0f, Float.NaN), -1.0f > Float.NaN, "-1.0f > Float.NaN"); + Tester.checkEqual(floatGt(-0.0f, Float.NEGATIVE_INFINITY), -0.0f > Float.NEGATIVE_INFINITY, "-0.0f > Float.NEGATIVE_INFINITY"); + Tester.checkEqual(floatGt(-0.0f, -1.0f), -0.0f > -1.0f, "-0.0f > -1.0f"); + Tester.checkEqual(floatGt(-0.0f, -0.0f), -0.0f > -0.0f, "-0.0f > -0.0f"); + Tester.checkEqual(floatGt(-0.0f, 0.0f), -0.0f > 0.0f, "-0.0f > 0.0f"); + Tester.checkEqual(floatGt(-0.0f, Float.MIN_VALUE), -0.0f > Float.MIN_VALUE, "-0.0f > Float.MIN_VALUE"); + Tester.checkEqual(floatGt(-0.0f, 1.0f), -0.0f > 1.0f, "-0.0f > 1.0f"); + Tester.checkEqual(floatGt(-0.0f, Float.MAX_VALUE), -0.0f > Float.MAX_VALUE, "-0.0f > Float.MAX_VALUE"); + Tester.checkEqual(floatGt(-0.0f, Float.POSITIVE_INFINITY), -0.0f > Float.POSITIVE_INFINITY, "-0.0f > Float.POSITIVE_INFINITY"); + Tester.checkEqual(floatGt(-0.0f, Float.NaN), -0.0f > Float.NaN, "-0.0f > Float.NaN"); + Tester.checkEqual(floatGt(0.0f, Float.NEGATIVE_INFINITY), 0.0f > Float.NEGATIVE_INFINITY, "0.0f > Float.NEGATIVE_INFINITY"); + Tester.checkEqual(floatGt(0.0f, -1.0f), 0.0f > -1.0f, "0.0f > -1.0f"); + Tester.checkEqual(floatGt(0.0f, -0.0f), 0.0f > -0.0f, "0.0f > -0.0f"); + Tester.checkEqual(floatGt(0.0f, 0.0f), 0.0f > 0.0f, "0.0f > 0.0f"); + Tester.checkEqual(floatGt(0.0f, Float.MIN_VALUE), 0.0f > Float.MIN_VALUE, "0.0f > Float.MIN_VALUE"); + Tester.checkEqual(floatGt(0.0f, 1.0f), 0.0f > 1.0f, "0.0f > 1.0f"); + Tester.checkEqual(floatGt(0.0f, Float.MAX_VALUE), 0.0f > Float.MAX_VALUE, "0.0f > Float.MAX_VALUE"); + Tester.checkEqual(floatGt(0.0f, Float.POSITIVE_INFINITY), 0.0f > Float.POSITIVE_INFINITY, "0.0f > Float.POSITIVE_INFINITY"); + Tester.checkEqual(floatGt(0.0f, Float.NaN), 0.0f > Float.NaN, "0.0f > Float.NaN"); + Tester.checkEqual(floatGt(Float.MIN_VALUE, Float.NEGATIVE_INFINITY), Float.MIN_VALUE > Float.NEGATIVE_INFINITY, "Float.MIN_VALUE > Float.NEGATIVE_INFINITY"); + Tester.checkEqual(floatGt(Float.MIN_VALUE, -1.0f), Float.MIN_VALUE > -1.0f, "Float.MIN_VALUE > -1.0f"); + Tester.checkEqual(floatGt(Float.MIN_VALUE, -0.0f), Float.MIN_VALUE > -0.0f, "Float.MIN_VALUE > -0.0f"); + Tester.checkEqual(floatGt(Float.MIN_VALUE, 0.0f), Float.MIN_VALUE > 0.0f, "Float.MIN_VALUE > 0.0f"); + Tester.checkEqual(floatGt(Float.MIN_VALUE, Float.MIN_VALUE), Float.MIN_VALUE > Float.MIN_VALUE, "Float.MIN_VALUE > Float.MIN_VALUE"); + Tester.checkEqual(floatGt(Float.MIN_VALUE, 1.0f), Float.MIN_VALUE > 1.0f, "Float.MIN_VALUE > 1.0f"); + Tester.checkEqual(floatGt(Float.MIN_VALUE, Float.MAX_VALUE), Float.MIN_VALUE > Float.MAX_VALUE, "Float.MIN_VALUE > Float.MAX_VALUE"); + Tester.checkEqual(floatGt(Float.MIN_VALUE, Float.POSITIVE_INFINITY), Float.MIN_VALUE > Float.POSITIVE_INFINITY, "Float.MIN_VALUE > Float.POSITIVE_INFINITY"); + Tester.checkEqual(floatGt(Float.MIN_VALUE, Float.NaN), Float.MIN_VALUE > Float.NaN, "Float.MIN_VALUE > Float.NaN"); + Tester.checkEqual(floatGt(1.0f, Float.NEGATIVE_INFINITY), 1.0f > Float.NEGATIVE_INFINITY, "1.0f > Float.NEGATIVE_INFINITY"); + Tester.checkEqual(floatGt(1.0f, -1.0f), 1.0f > -1.0f, "1.0f > -1.0f"); + Tester.checkEqual(floatGt(1.0f, -0.0f), 1.0f > -0.0f, "1.0f > -0.0f"); + Tester.checkEqual(floatGt(1.0f, 0.0f), 1.0f > 0.0f, "1.0f > 0.0f"); + Tester.checkEqual(floatGt(1.0f, Float.MIN_VALUE), 1.0f > Float.MIN_VALUE, "1.0f > Float.MIN_VALUE"); + Tester.checkEqual(floatGt(1.0f, 1.0f), 1.0f > 1.0f, "1.0f > 1.0f"); + Tester.checkEqual(floatGt(1.0f, Float.MAX_VALUE), 1.0f > Float.MAX_VALUE, "1.0f > Float.MAX_VALUE"); + Tester.checkEqual(floatGt(1.0f, Float.POSITIVE_INFINITY), 1.0f > Float.POSITIVE_INFINITY, "1.0f > Float.POSITIVE_INFINITY"); + Tester.checkEqual(floatGt(1.0f, Float.NaN), 1.0f > Float.NaN, "1.0f > Float.NaN"); + Tester.checkEqual(floatGt(Float.MAX_VALUE, Float.NEGATIVE_INFINITY), Float.MAX_VALUE > Float.NEGATIVE_INFINITY, "Float.MAX_VALUE > Float.NEGATIVE_INFINITY"); + Tester.checkEqual(floatGt(Float.MAX_VALUE, -1.0f), Float.MAX_VALUE > -1.0f, "Float.MAX_VALUE > -1.0f"); + Tester.checkEqual(floatGt(Float.MAX_VALUE, -0.0f), Float.MAX_VALUE > -0.0f, "Float.MAX_VALUE > -0.0f"); + Tester.checkEqual(floatGt(Float.MAX_VALUE, 0.0f), Float.MAX_VALUE > 0.0f, "Float.MAX_VALUE > 0.0f"); + Tester.checkEqual(floatGt(Float.MAX_VALUE, Float.MIN_VALUE), Float.MAX_VALUE > Float.MIN_VALUE, "Float.MAX_VALUE > Float.MIN_VALUE"); + Tester.checkEqual(floatGt(Float.MAX_VALUE, 1.0f), Float.MAX_VALUE > 1.0f, "Float.MAX_VALUE > 1.0f"); + Tester.checkEqual(floatGt(Float.MAX_VALUE, Float.MAX_VALUE), Float.MAX_VALUE > Float.MAX_VALUE, "Float.MAX_VALUE > Float.MAX_VALUE"); + Tester.checkEqual(floatGt(Float.MAX_VALUE, Float.POSITIVE_INFINITY), Float.MAX_VALUE > Float.POSITIVE_INFINITY, "Float.MAX_VALUE > Float.POSITIVE_INFINITY"); + Tester.checkEqual(floatGt(Float.MAX_VALUE, Float.NaN), Float.MAX_VALUE > Float.NaN, "Float.MAX_VALUE > Float.NaN"); + Tester.checkEqual(floatGt(Float.POSITIVE_INFINITY, Float.NEGATIVE_INFINITY), Float.POSITIVE_INFINITY > Float.NEGATIVE_INFINITY, "Float.POSITIVE_INFINITY > Float.NEGATIVE_INFINITY"); + Tester.checkEqual(floatGt(Float.POSITIVE_INFINITY, -1.0f), Float.POSITIVE_INFINITY > -1.0f, "Float.POSITIVE_INFINITY > -1.0f"); + Tester.checkEqual(floatGt(Float.POSITIVE_INFINITY, -0.0f), Float.POSITIVE_INFINITY > -0.0f, "Float.POSITIVE_INFINITY > -0.0f"); + Tester.checkEqual(floatGt(Float.POSITIVE_INFINITY, 0.0f), Float.POSITIVE_INFINITY > 0.0f, "Float.POSITIVE_INFINITY > 0.0f"); + Tester.checkEqual(floatGt(Float.POSITIVE_INFINITY, Float.MIN_VALUE), Float.POSITIVE_INFINITY > Float.MIN_VALUE, "Float.POSITIVE_INFINITY > Float.MIN_VALUE"); + Tester.checkEqual(floatGt(Float.POSITIVE_INFINITY, 1.0f), Float.POSITIVE_INFINITY > 1.0f, "Float.POSITIVE_INFINITY > 1.0f"); + Tester.checkEqual(floatGt(Float.POSITIVE_INFINITY, Float.MAX_VALUE), Float.POSITIVE_INFINITY > Float.MAX_VALUE, "Float.POSITIVE_INFINITY > Float.MAX_VALUE"); + Tester.checkEqual(floatGt(Float.POSITIVE_INFINITY, Float.POSITIVE_INFINITY), Float.POSITIVE_INFINITY > Float.POSITIVE_INFINITY, "Float.POSITIVE_INFINITY > Float.POSITIVE_INFINITY"); + Tester.checkEqual(floatGt(Float.POSITIVE_INFINITY, Float.NaN), Float.POSITIVE_INFINITY > Float.NaN, "Float.POSITIVE_INFINITY > Float.NaN"); + Tester.checkEqual(floatGt(Float.NaN, Float.NEGATIVE_INFINITY), Float.NaN > Float.NEGATIVE_INFINITY, "Float.NaN > Float.NEGATIVE_INFINITY"); + Tester.checkEqual(floatGt(Float.NaN, -1.0f), Float.NaN > -1.0f, "Float.NaN > -1.0f"); + Tester.checkEqual(floatGt(Float.NaN, -0.0f), Float.NaN > -0.0f, "Float.NaN > -0.0f"); + Tester.checkEqual(floatGt(Float.NaN, 0.0f), Float.NaN > 0.0f, "Float.NaN > 0.0f"); + Tester.checkEqual(floatGt(Float.NaN, Float.MIN_VALUE), Float.NaN > Float.MIN_VALUE, "Float.NaN > Float.MIN_VALUE"); + Tester.checkEqual(floatGt(Float.NaN, 1.0f), Float.NaN > 1.0f, "Float.NaN > 1.0f"); + Tester.checkEqual(floatGt(Float.NaN, Float.MAX_VALUE), Float.NaN > Float.MAX_VALUE, "Float.NaN > Float.MAX_VALUE"); + Tester.checkEqual(floatGt(Float.NaN, Float.POSITIVE_INFINITY), Float.NaN > Float.POSITIVE_INFINITY, "Float.NaN > Float.POSITIVE_INFINITY"); + Tester.checkEqual(floatGt(Float.NaN, Float.NaN), Float.NaN > Float.NaN, "Float.NaN > Float.NaN"); + Tester.checkEqual(floatLe(Float.NEGATIVE_INFINITY, Float.NEGATIVE_INFINITY), Float.NEGATIVE_INFINITY <= Float.NEGATIVE_INFINITY, "Float.NEGATIVE_INFINITY <= Float.NEGATIVE_INFINITY"); + Tester.checkEqual(floatLe(Float.NEGATIVE_INFINITY, -1.0f), Float.NEGATIVE_INFINITY <= -1.0f, "Float.NEGATIVE_INFINITY <= -1.0f"); + Tester.checkEqual(floatLe(Float.NEGATIVE_INFINITY, -0.0f), Float.NEGATIVE_INFINITY <= -0.0f, "Float.NEGATIVE_INFINITY <= -0.0f"); + Tester.checkEqual(floatLe(Float.NEGATIVE_INFINITY, 0.0f), Float.NEGATIVE_INFINITY <= 0.0f, "Float.NEGATIVE_INFINITY <= 0.0f"); + Tester.checkEqual(floatLe(Float.NEGATIVE_INFINITY, Float.MIN_VALUE), Float.NEGATIVE_INFINITY <= Float.MIN_VALUE, "Float.NEGATIVE_INFINITY <= Float.MIN_VALUE"); + Tester.checkEqual(floatLe(Float.NEGATIVE_INFINITY, 1.0f), Float.NEGATIVE_INFINITY <= 1.0f, "Float.NEGATIVE_INFINITY <= 1.0f"); + Tester.checkEqual(floatLe(Float.NEGATIVE_INFINITY, Float.MAX_VALUE), Float.NEGATIVE_INFINITY <= Float.MAX_VALUE, "Float.NEGATIVE_INFINITY <= Float.MAX_VALUE"); + Tester.checkEqual(floatLe(Float.NEGATIVE_INFINITY, Float.POSITIVE_INFINITY), Float.NEGATIVE_INFINITY <= Float.POSITIVE_INFINITY, "Float.NEGATIVE_INFINITY <= Float.POSITIVE_INFINITY"); + Tester.checkEqual(floatLe(Float.NEGATIVE_INFINITY, Float.NaN), Float.NEGATIVE_INFINITY <= Float.NaN, "Float.NEGATIVE_INFINITY <= Float.NaN"); + Tester.checkEqual(floatLe(-1.0f, Float.NEGATIVE_INFINITY), -1.0f <= Float.NEGATIVE_INFINITY, "-1.0f <= Float.NEGATIVE_INFINITY"); + Tester.checkEqual(floatLe(-1.0f, -1.0f), -1.0f <= -1.0f, "-1.0f <= -1.0f"); + Tester.checkEqual(floatLe(-1.0f, -0.0f), -1.0f <= -0.0f, "-1.0f <= -0.0f"); + Tester.checkEqual(floatLe(-1.0f, 0.0f), -1.0f <= 0.0f, "-1.0f <= 0.0f"); + Tester.checkEqual(floatLe(-1.0f, Float.MIN_VALUE), -1.0f <= Float.MIN_VALUE, "-1.0f <= Float.MIN_VALUE"); + Tester.checkEqual(floatLe(-1.0f, 1.0f), -1.0f <= 1.0f, "-1.0f <= 1.0f"); + Tester.checkEqual(floatLe(-1.0f, Float.MAX_VALUE), -1.0f <= Float.MAX_VALUE, "-1.0f <= Float.MAX_VALUE"); + Tester.checkEqual(floatLe(-1.0f, Float.POSITIVE_INFINITY), -1.0f <= Float.POSITIVE_INFINITY, "-1.0f <= Float.POSITIVE_INFINITY"); + Tester.checkEqual(floatLe(-1.0f, Float.NaN), -1.0f <= Float.NaN, "-1.0f <= Float.NaN"); + Tester.checkEqual(floatLe(-0.0f, Float.NEGATIVE_INFINITY), -0.0f <= Float.NEGATIVE_INFINITY, "-0.0f <= Float.NEGATIVE_INFINITY"); + Tester.checkEqual(floatLe(-0.0f, -1.0f), -0.0f <= -1.0f, "-0.0f <= -1.0f"); + Tester.checkEqual(floatLe(-0.0f, -0.0f), -0.0f <= -0.0f, "-0.0f <= -0.0f"); + Tester.checkEqual(floatLe(-0.0f, 0.0f), -0.0f <= 0.0f, "-0.0f <= 0.0f"); + Tester.checkEqual(floatLe(-0.0f, Float.MIN_VALUE), -0.0f <= Float.MIN_VALUE, "-0.0f <= Float.MIN_VALUE"); + Tester.checkEqual(floatLe(-0.0f, 1.0f), -0.0f <= 1.0f, "-0.0f <= 1.0f"); + Tester.checkEqual(floatLe(-0.0f, Float.MAX_VALUE), -0.0f <= Float.MAX_VALUE, "-0.0f <= Float.MAX_VALUE"); + Tester.checkEqual(floatLe(-0.0f, Float.POSITIVE_INFINITY), -0.0f <= Float.POSITIVE_INFINITY, "-0.0f <= Float.POSITIVE_INFINITY"); + Tester.checkEqual(floatLe(-0.0f, Float.NaN), -0.0f <= Float.NaN, "-0.0f <= Float.NaN"); + Tester.checkEqual(floatLe(0.0f, Float.NEGATIVE_INFINITY), 0.0f <= Float.NEGATIVE_INFINITY, "0.0f <= Float.NEGATIVE_INFINITY"); + Tester.checkEqual(floatLe(0.0f, -1.0f), 0.0f <= -1.0f, "0.0f <= -1.0f"); + Tester.checkEqual(floatLe(0.0f, -0.0f), 0.0f <= -0.0f, "0.0f <= -0.0f"); + Tester.checkEqual(floatLe(0.0f, 0.0f), 0.0f <= 0.0f, "0.0f <= 0.0f"); + Tester.checkEqual(floatLe(0.0f, Float.MIN_VALUE), 0.0f <= Float.MIN_VALUE, "0.0f <= Float.MIN_VALUE"); + Tester.checkEqual(floatLe(0.0f, 1.0f), 0.0f <= 1.0f, "0.0f <= 1.0f"); + Tester.checkEqual(floatLe(0.0f, Float.MAX_VALUE), 0.0f <= Float.MAX_VALUE, "0.0f <= Float.MAX_VALUE"); + Tester.checkEqual(floatLe(0.0f, Float.POSITIVE_INFINITY), 0.0f <= Float.POSITIVE_INFINITY, "0.0f <= Float.POSITIVE_INFINITY"); + Tester.checkEqual(floatLe(0.0f, Float.NaN), 0.0f <= Float.NaN, "0.0f <= Float.NaN"); + Tester.checkEqual(floatLe(Float.MIN_VALUE, Float.NEGATIVE_INFINITY), Float.MIN_VALUE <= Float.NEGATIVE_INFINITY, "Float.MIN_VALUE <= Float.NEGATIVE_INFINITY"); + Tester.checkEqual(floatLe(Float.MIN_VALUE, -1.0f), Float.MIN_VALUE <= -1.0f, "Float.MIN_VALUE <= -1.0f"); + Tester.checkEqual(floatLe(Float.MIN_VALUE, -0.0f), Float.MIN_VALUE <= -0.0f, "Float.MIN_VALUE <= -0.0f"); + Tester.checkEqual(floatLe(Float.MIN_VALUE, 0.0f), Float.MIN_VALUE <= 0.0f, "Float.MIN_VALUE <= 0.0f"); + Tester.checkEqual(floatLe(Float.MIN_VALUE, Float.MIN_VALUE), Float.MIN_VALUE <= Float.MIN_VALUE, "Float.MIN_VALUE <= Float.MIN_VALUE"); + Tester.checkEqual(floatLe(Float.MIN_VALUE, 1.0f), Float.MIN_VALUE <= 1.0f, "Float.MIN_VALUE <= 1.0f"); + Tester.checkEqual(floatLe(Float.MIN_VALUE, Float.MAX_VALUE), Float.MIN_VALUE <= Float.MAX_VALUE, "Float.MIN_VALUE <= Float.MAX_VALUE"); + Tester.checkEqual(floatLe(Float.MIN_VALUE, Float.POSITIVE_INFINITY), Float.MIN_VALUE <= Float.POSITIVE_INFINITY, "Float.MIN_VALUE <= Float.POSITIVE_INFINITY"); + Tester.checkEqual(floatLe(Float.MIN_VALUE, Float.NaN), Float.MIN_VALUE <= Float.NaN, "Float.MIN_VALUE <= Float.NaN"); + Tester.checkEqual(floatLe(1.0f, Float.NEGATIVE_INFINITY), 1.0f <= Float.NEGATIVE_INFINITY, "1.0f <= Float.NEGATIVE_INFINITY"); + Tester.checkEqual(floatLe(1.0f, -1.0f), 1.0f <= -1.0f, "1.0f <= -1.0f"); + Tester.checkEqual(floatLe(1.0f, -0.0f), 1.0f <= -0.0f, "1.0f <= -0.0f"); + Tester.checkEqual(floatLe(1.0f, 0.0f), 1.0f <= 0.0f, "1.0f <= 0.0f"); + Tester.checkEqual(floatLe(1.0f, Float.MIN_VALUE), 1.0f <= Float.MIN_VALUE, "1.0f <= Float.MIN_VALUE"); + Tester.checkEqual(floatLe(1.0f, 1.0f), 1.0f <= 1.0f, "1.0f <= 1.0f"); + Tester.checkEqual(floatLe(1.0f, Float.MAX_VALUE), 1.0f <= Float.MAX_VALUE, "1.0f <= Float.MAX_VALUE"); + Tester.checkEqual(floatLe(1.0f, Float.POSITIVE_INFINITY), 1.0f <= Float.POSITIVE_INFINITY, "1.0f <= Float.POSITIVE_INFINITY"); + Tester.checkEqual(floatLe(1.0f, Float.NaN), 1.0f <= Float.NaN, "1.0f <= Float.NaN"); + Tester.checkEqual(floatLe(Float.MAX_VALUE, Float.NEGATIVE_INFINITY), Float.MAX_VALUE <= Float.NEGATIVE_INFINITY, "Float.MAX_VALUE <= Float.NEGATIVE_INFINITY"); + Tester.checkEqual(floatLe(Float.MAX_VALUE, -1.0f), Float.MAX_VALUE <= -1.0f, "Float.MAX_VALUE <= -1.0f"); + Tester.checkEqual(floatLe(Float.MAX_VALUE, -0.0f), Float.MAX_VALUE <= -0.0f, "Float.MAX_VALUE <= -0.0f"); + Tester.checkEqual(floatLe(Float.MAX_VALUE, 0.0f), Float.MAX_VALUE <= 0.0f, "Float.MAX_VALUE <= 0.0f"); + Tester.checkEqual(floatLe(Float.MAX_VALUE, Float.MIN_VALUE), Float.MAX_VALUE <= Float.MIN_VALUE, "Float.MAX_VALUE <= Float.MIN_VALUE"); + Tester.checkEqual(floatLe(Float.MAX_VALUE, 1.0f), Float.MAX_VALUE <= 1.0f, "Float.MAX_VALUE <= 1.0f"); + Tester.checkEqual(floatLe(Float.MAX_VALUE, Float.MAX_VALUE), Float.MAX_VALUE <= Float.MAX_VALUE, "Float.MAX_VALUE <= Float.MAX_VALUE"); + Tester.checkEqual(floatLe(Float.MAX_VALUE, Float.POSITIVE_INFINITY), Float.MAX_VALUE <= Float.POSITIVE_INFINITY, "Float.MAX_VALUE <= Float.POSITIVE_INFINITY"); + Tester.checkEqual(floatLe(Float.MAX_VALUE, Float.NaN), Float.MAX_VALUE <= Float.NaN, "Float.MAX_VALUE <= Float.NaN"); + Tester.checkEqual(floatLe(Float.POSITIVE_INFINITY, Float.NEGATIVE_INFINITY), Float.POSITIVE_INFINITY <= Float.NEGATIVE_INFINITY, "Float.POSITIVE_INFINITY <= Float.NEGATIVE_INFINITY"); + Tester.checkEqual(floatLe(Float.POSITIVE_INFINITY, -1.0f), Float.POSITIVE_INFINITY <= -1.0f, "Float.POSITIVE_INFINITY <= -1.0f"); + Tester.checkEqual(floatLe(Float.POSITIVE_INFINITY, -0.0f), Float.POSITIVE_INFINITY <= -0.0f, "Float.POSITIVE_INFINITY <= -0.0f"); + Tester.checkEqual(floatLe(Float.POSITIVE_INFINITY, 0.0f), Float.POSITIVE_INFINITY <= 0.0f, "Float.POSITIVE_INFINITY <= 0.0f"); + Tester.checkEqual(floatLe(Float.POSITIVE_INFINITY, Float.MIN_VALUE), Float.POSITIVE_INFINITY <= Float.MIN_VALUE, "Float.POSITIVE_INFINITY <= Float.MIN_VALUE"); + Tester.checkEqual(floatLe(Float.POSITIVE_INFINITY, 1.0f), Float.POSITIVE_INFINITY <= 1.0f, "Float.POSITIVE_INFINITY <= 1.0f"); + Tester.checkEqual(floatLe(Float.POSITIVE_INFINITY, Float.MAX_VALUE), Float.POSITIVE_INFINITY <= Float.MAX_VALUE, "Float.POSITIVE_INFINITY <= Float.MAX_VALUE"); + Tester.checkEqual(floatLe(Float.POSITIVE_INFINITY, Float.POSITIVE_INFINITY), Float.POSITIVE_INFINITY <= Float.POSITIVE_INFINITY, "Float.POSITIVE_INFINITY <= Float.POSITIVE_INFINITY"); + Tester.checkEqual(floatLe(Float.POSITIVE_INFINITY, Float.NaN), Float.POSITIVE_INFINITY <= Float.NaN, "Float.POSITIVE_INFINITY <= Float.NaN"); + Tester.checkEqual(floatLe(Float.NaN, Float.NEGATIVE_INFINITY), Float.NaN <= Float.NEGATIVE_INFINITY, "Float.NaN <= Float.NEGATIVE_INFINITY"); + Tester.checkEqual(floatLe(Float.NaN, -1.0f), Float.NaN <= -1.0f, "Float.NaN <= -1.0f"); + Tester.checkEqual(floatLe(Float.NaN, -0.0f), Float.NaN <= -0.0f, "Float.NaN <= -0.0f"); + Tester.checkEqual(floatLe(Float.NaN, 0.0f), Float.NaN <= 0.0f, "Float.NaN <= 0.0f"); + Tester.checkEqual(floatLe(Float.NaN, Float.MIN_VALUE), Float.NaN <= Float.MIN_VALUE, "Float.NaN <= Float.MIN_VALUE"); + Tester.checkEqual(floatLe(Float.NaN, 1.0f), Float.NaN <= 1.0f, "Float.NaN <= 1.0f"); + Tester.checkEqual(floatLe(Float.NaN, Float.MAX_VALUE), Float.NaN <= Float.MAX_VALUE, "Float.NaN <= Float.MAX_VALUE"); + Tester.checkEqual(floatLe(Float.NaN, Float.POSITIVE_INFINITY), Float.NaN <= Float.POSITIVE_INFINITY, "Float.NaN <= Float.POSITIVE_INFINITY"); + Tester.checkEqual(floatLe(Float.NaN, Float.NaN), Float.NaN <= Float.NaN, "Float.NaN <= Float.NaN"); + Tester.checkEqual(floatGe(Float.NEGATIVE_INFINITY, Float.NEGATIVE_INFINITY), Float.NEGATIVE_INFINITY >= Float.NEGATIVE_INFINITY, "Float.NEGATIVE_INFINITY >= Float.NEGATIVE_INFINITY"); + Tester.checkEqual(floatGe(Float.NEGATIVE_INFINITY, -1.0f), Float.NEGATIVE_INFINITY >= -1.0f, "Float.NEGATIVE_INFINITY >= -1.0f"); + Tester.checkEqual(floatGe(Float.NEGATIVE_INFINITY, -0.0f), Float.NEGATIVE_INFINITY >= -0.0f, "Float.NEGATIVE_INFINITY >= -0.0f"); + Tester.checkEqual(floatGe(Float.NEGATIVE_INFINITY, 0.0f), Float.NEGATIVE_INFINITY >= 0.0f, "Float.NEGATIVE_INFINITY >= 0.0f"); + Tester.checkEqual(floatGe(Float.NEGATIVE_INFINITY, Float.MIN_VALUE), Float.NEGATIVE_INFINITY >= Float.MIN_VALUE, "Float.NEGATIVE_INFINITY >= Float.MIN_VALUE"); + Tester.checkEqual(floatGe(Float.NEGATIVE_INFINITY, 1.0f), Float.NEGATIVE_INFINITY >= 1.0f, "Float.NEGATIVE_INFINITY >= 1.0f"); + Tester.checkEqual(floatGe(Float.NEGATIVE_INFINITY, Float.MAX_VALUE), Float.NEGATIVE_INFINITY >= Float.MAX_VALUE, "Float.NEGATIVE_INFINITY >= Float.MAX_VALUE"); + Tester.checkEqual(floatGe(Float.NEGATIVE_INFINITY, Float.POSITIVE_INFINITY), Float.NEGATIVE_INFINITY >= Float.POSITIVE_INFINITY, "Float.NEGATIVE_INFINITY >= Float.POSITIVE_INFINITY"); + Tester.checkEqual(floatGe(Float.NEGATIVE_INFINITY, Float.NaN), Float.NEGATIVE_INFINITY >= Float.NaN, "Float.NEGATIVE_INFINITY >= Float.NaN"); + Tester.checkEqual(floatGe(-1.0f, Float.NEGATIVE_INFINITY), -1.0f >= Float.NEGATIVE_INFINITY, "-1.0f >= Float.NEGATIVE_INFINITY"); + Tester.checkEqual(floatGe(-1.0f, -1.0f), -1.0f >= -1.0f, "-1.0f >= -1.0f"); + Tester.checkEqual(floatGe(-1.0f, -0.0f), -1.0f >= -0.0f, "-1.0f >= -0.0f"); + Tester.checkEqual(floatGe(-1.0f, 0.0f), -1.0f >= 0.0f, "-1.0f >= 0.0f"); + Tester.checkEqual(floatGe(-1.0f, Float.MIN_VALUE), -1.0f >= Float.MIN_VALUE, "-1.0f >= Float.MIN_VALUE"); + Tester.checkEqual(floatGe(-1.0f, 1.0f), -1.0f >= 1.0f, "-1.0f >= 1.0f"); + Tester.checkEqual(floatGe(-1.0f, Float.MAX_VALUE), -1.0f >= Float.MAX_VALUE, "-1.0f >= Float.MAX_VALUE"); + Tester.checkEqual(floatGe(-1.0f, Float.POSITIVE_INFINITY), -1.0f >= Float.POSITIVE_INFINITY, "-1.0f >= Float.POSITIVE_INFINITY"); + Tester.checkEqual(floatGe(-1.0f, Float.NaN), -1.0f >= Float.NaN, "-1.0f >= Float.NaN"); + Tester.checkEqual(floatGe(-0.0f, Float.NEGATIVE_INFINITY), -0.0f >= Float.NEGATIVE_INFINITY, "-0.0f >= Float.NEGATIVE_INFINITY"); + Tester.checkEqual(floatGe(-0.0f, -1.0f), -0.0f >= -1.0f, "-0.0f >= -1.0f"); + Tester.checkEqual(floatGe(-0.0f, -0.0f), -0.0f >= -0.0f, "-0.0f >= -0.0f"); + Tester.checkEqual(floatGe(-0.0f, 0.0f), -0.0f >= 0.0f, "-0.0f >= 0.0f"); + Tester.checkEqual(floatGe(-0.0f, Float.MIN_VALUE), -0.0f >= Float.MIN_VALUE, "-0.0f >= Float.MIN_VALUE"); + Tester.checkEqual(floatGe(-0.0f, 1.0f), -0.0f >= 1.0f, "-0.0f >= 1.0f"); + Tester.checkEqual(floatGe(-0.0f, Float.MAX_VALUE), -0.0f >= Float.MAX_VALUE, "-0.0f >= Float.MAX_VALUE"); + Tester.checkEqual(floatGe(-0.0f, Float.POSITIVE_INFINITY), -0.0f >= Float.POSITIVE_INFINITY, "-0.0f >= Float.POSITIVE_INFINITY"); + Tester.checkEqual(floatGe(-0.0f, Float.NaN), -0.0f >= Float.NaN, "-0.0f >= Float.NaN"); + Tester.checkEqual(floatGe(0.0f, Float.NEGATIVE_INFINITY), 0.0f >= Float.NEGATIVE_INFINITY, "0.0f >= Float.NEGATIVE_INFINITY"); + Tester.checkEqual(floatGe(0.0f, -1.0f), 0.0f >= -1.0f, "0.0f >= -1.0f"); + Tester.checkEqual(floatGe(0.0f, -0.0f), 0.0f >= -0.0f, "0.0f >= -0.0f"); + Tester.checkEqual(floatGe(0.0f, 0.0f), 0.0f >= 0.0f, "0.0f >= 0.0f"); + Tester.checkEqual(floatGe(0.0f, Float.MIN_VALUE), 0.0f >= Float.MIN_VALUE, "0.0f >= Float.MIN_VALUE"); + Tester.checkEqual(floatGe(0.0f, 1.0f), 0.0f >= 1.0f, "0.0f >= 1.0f"); + Tester.checkEqual(floatGe(0.0f, Float.MAX_VALUE), 0.0f >= Float.MAX_VALUE, "0.0f >= Float.MAX_VALUE"); + Tester.checkEqual(floatGe(0.0f, Float.POSITIVE_INFINITY), 0.0f >= Float.POSITIVE_INFINITY, "0.0f >= Float.POSITIVE_INFINITY"); + Tester.checkEqual(floatGe(0.0f, Float.NaN), 0.0f >= Float.NaN, "0.0f >= Float.NaN"); + Tester.checkEqual(floatGe(Float.MIN_VALUE, Float.NEGATIVE_INFINITY), Float.MIN_VALUE >= Float.NEGATIVE_INFINITY, "Float.MIN_VALUE >= Float.NEGATIVE_INFINITY"); + Tester.checkEqual(floatGe(Float.MIN_VALUE, -1.0f), Float.MIN_VALUE >= -1.0f, "Float.MIN_VALUE >= -1.0f"); + Tester.checkEqual(floatGe(Float.MIN_VALUE, -0.0f), Float.MIN_VALUE >= -0.0f, "Float.MIN_VALUE >= -0.0f"); + Tester.checkEqual(floatGe(Float.MIN_VALUE, 0.0f), Float.MIN_VALUE >= 0.0f, "Float.MIN_VALUE >= 0.0f"); + Tester.checkEqual(floatGe(Float.MIN_VALUE, Float.MIN_VALUE), Float.MIN_VALUE >= Float.MIN_VALUE, "Float.MIN_VALUE >= Float.MIN_VALUE"); + Tester.checkEqual(floatGe(Float.MIN_VALUE, 1.0f), Float.MIN_VALUE >= 1.0f, "Float.MIN_VALUE >= 1.0f"); + Tester.checkEqual(floatGe(Float.MIN_VALUE, Float.MAX_VALUE), Float.MIN_VALUE >= Float.MAX_VALUE, "Float.MIN_VALUE >= Float.MAX_VALUE"); + Tester.checkEqual(floatGe(Float.MIN_VALUE, Float.POSITIVE_INFINITY), Float.MIN_VALUE >= Float.POSITIVE_INFINITY, "Float.MIN_VALUE >= Float.POSITIVE_INFINITY"); + Tester.checkEqual(floatGe(Float.MIN_VALUE, Float.NaN), Float.MIN_VALUE >= Float.NaN, "Float.MIN_VALUE >= Float.NaN"); + Tester.checkEqual(floatGe(1.0f, Float.NEGATIVE_INFINITY), 1.0f >= Float.NEGATIVE_INFINITY, "1.0f >= Float.NEGATIVE_INFINITY"); + Tester.checkEqual(floatGe(1.0f, -1.0f), 1.0f >= -1.0f, "1.0f >= -1.0f"); + Tester.checkEqual(floatGe(1.0f, -0.0f), 1.0f >= -0.0f, "1.0f >= -0.0f"); + Tester.checkEqual(floatGe(1.0f, 0.0f), 1.0f >= 0.0f, "1.0f >= 0.0f"); + Tester.checkEqual(floatGe(1.0f, Float.MIN_VALUE), 1.0f >= Float.MIN_VALUE, "1.0f >= Float.MIN_VALUE"); + Tester.checkEqual(floatGe(1.0f, 1.0f), 1.0f >= 1.0f, "1.0f >= 1.0f"); + Tester.checkEqual(floatGe(1.0f, Float.MAX_VALUE), 1.0f >= Float.MAX_VALUE, "1.0f >= Float.MAX_VALUE"); + Tester.checkEqual(floatGe(1.0f, Float.POSITIVE_INFINITY), 1.0f >= Float.POSITIVE_INFINITY, "1.0f >= Float.POSITIVE_INFINITY"); + Tester.checkEqual(floatGe(1.0f, Float.NaN), 1.0f >= Float.NaN, "1.0f >= Float.NaN"); + Tester.checkEqual(floatGe(Float.MAX_VALUE, Float.NEGATIVE_INFINITY), Float.MAX_VALUE >= Float.NEGATIVE_INFINITY, "Float.MAX_VALUE >= Float.NEGATIVE_INFINITY"); + Tester.checkEqual(floatGe(Float.MAX_VALUE, -1.0f), Float.MAX_VALUE >= -1.0f, "Float.MAX_VALUE >= -1.0f"); + Tester.checkEqual(floatGe(Float.MAX_VALUE, -0.0f), Float.MAX_VALUE >= -0.0f, "Float.MAX_VALUE >= -0.0f"); + Tester.checkEqual(floatGe(Float.MAX_VALUE, 0.0f), Float.MAX_VALUE >= 0.0f, "Float.MAX_VALUE >= 0.0f"); + Tester.checkEqual(floatGe(Float.MAX_VALUE, Float.MIN_VALUE), Float.MAX_VALUE >= Float.MIN_VALUE, "Float.MAX_VALUE >= Float.MIN_VALUE"); + Tester.checkEqual(floatGe(Float.MAX_VALUE, 1.0f), Float.MAX_VALUE >= 1.0f, "Float.MAX_VALUE >= 1.0f"); + Tester.checkEqual(floatGe(Float.MAX_VALUE, Float.MAX_VALUE), Float.MAX_VALUE >= Float.MAX_VALUE, "Float.MAX_VALUE >= Float.MAX_VALUE"); + Tester.checkEqual(floatGe(Float.MAX_VALUE, Float.POSITIVE_INFINITY), Float.MAX_VALUE >= Float.POSITIVE_INFINITY, "Float.MAX_VALUE >= Float.POSITIVE_INFINITY"); + Tester.checkEqual(floatGe(Float.MAX_VALUE, Float.NaN), Float.MAX_VALUE >= Float.NaN, "Float.MAX_VALUE >= Float.NaN"); + Tester.checkEqual(floatGe(Float.POSITIVE_INFINITY, Float.NEGATIVE_INFINITY), Float.POSITIVE_INFINITY >= Float.NEGATIVE_INFINITY, "Float.POSITIVE_INFINITY >= Float.NEGATIVE_INFINITY"); + Tester.checkEqual(floatGe(Float.POSITIVE_INFINITY, -1.0f), Float.POSITIVE_INFINITY >= -1.0f, "Float.POSITIVE_INFINITY >= -1.0f"); + Tester.checkEqual(floatGe(Float.POSITIVE_INFINITY, -0.0f), Float.POSITIVE_INFINITY >= -0.0f, "Float.POSITIVE_INFINITY >= -0.0f"); + Tester.checkEqual(floatGe(Float.POSITIVE_INFINITY, 0.0f), Float.POSITIVE_INFINITY >= 0.0f, "Float.POSITIVE_INFINITY >= 0.0f"); + Tester.checkEqual(floatGe(Float.POSITIVE_INFINITY, Float.MIN_VALUE), Float.POSITIVE_INFINITY >= Float.MIN_VALUE, "Float.POSITIVE_INFINITY >= Float.MIN_VALUE"); + Tester.checkEqual(floatGe(Float.POSITIVE_INFINITY, 1.0f), Float.POSITIVE_INFINITY >= 1.0f, "Float.POSITIVE_INFINITY >= 1.0f"); + Tester.checkEqual(floatGe(Float.POSITIVE_INFINITY, Float.MAX_VALUE), Float.POSITIVE_INFINITY >= Float.MAX_VALUE, "Float.POSITIVE_INFINITY >= Float.MAX_VALUE"); + Tester.checkEqual(floatGe(Float.POSITIVE_INFINITY, Float.POSITIVE_INFINITY), Float.POSITIVE_INFINITY >= Float.POSITIVE_INFINITY, "Float.POSITIVE_INFINITY >= Float.POSITIVE_INFINITY"); + Tester.checkEqual(floatGe(Float.POSITIVE_INFINITY, Float.NaN), Float.POSITIVE_INFINITY >= Float.NaN, "Float.POSITIVE_INFINITY >= Float.NaN"); + Tester.checkEqual(floatGe(Float.NaN, Float.NEGATIVE_INFINITY), Float.NaN >= Float.NEGATIVE_INFINITY, "Float.NaN >= Float.NEGATIVE_INFINITY"); + Tester.checkEqual(floatGe(Float.NaN, -1.0f), Float.NaN >= -1.0f, "Float.NaN >= -1.0f"); + Tester.checkEqual(floatGe(Float.NaN, -0.0f), Float.NaN >= -0.0f, "Float.NaN >= -0.0f"); + Tester.checkEqual(floatGe(Float.NaN, 0.0f), Float.NaN >= 0.0f, "Float.NaN >= 0.0f"); + Tester.checkEqual(floatGe(Float.NaN, Float.MIN_VALUE), Float.NaN >= Float.MIN_VALUE, "Float.NaN >= Float.MIN_VALUE"); + Tester.checkEqual(floatGe(Float.NaN, 1.0f), Float.NaN >= 1.0f, "Float.NaN >= 1.0f"); + Tester.checkEqual(floatGe(Float.NaN, Float.MAX_VALUE), Float.NaN >= Float.MAX_VALUE, "Float.NaN >= Float.MAX_VALUE"); + Tester.checkEqual(floatGe(Float.NaN, Float.POSITIVE_INFINITY), Float.NaN >= Float.POSITIVE_INFINITY, "Float.NaN >= Float.POSITIVE_INFINITY"); + Tester.checkEqual(floatGe(Float.NaN, Float.NaN), Float.NaN >= Float.NaN, "Float.NaN >= Float.NaN"); + Tester.checkEqual(floatEq(Float.NEGATIVE_INFINITY, Float.NEGATIVE_INFINITY), Float.NEGATIVE_INFINITY == Float.NEGATIVE_INFINITY, "Float.NEGATIVE_INFINITY == Float.NEGATIVE_INFINITY"); + Tester.checkEqual(floatEq(Float.NEGATIVE_INFINITY, -1.0f), Float.NEGATIVE_INFINITY == -1.0f, "Float.NEGATIVE_INFINITY == -1.0f"); + Tester.checkEqual(floatEq(Float.NEGATIVE_INFINITY, -0.0f), Float.NEGATIVE_INFINITY == -0.0f, "Float.NEGATIVE_INFINITY == -0.0f"); + Tester.checkEqual(floatEq(Float.NEGATIVE_INFINITY, 0.0f), Float.NEGATIVE_INFINITY == 0.0f, "Float.NEGATIVE_INFINITY == 0.0f"); + Tester.checkEqual(floatEq(Float.NEGATIVE_INFINITY, Float.MIN_VALUE), Float.NEGATIVE_INFINITY == Float.MIN_VALUE, "Float.NEGATIVE_INFINITY == Float.MIN_VALUE"); + Tester.checkEqual(floatEq(Float.NEGATIVE_INFINITY, 1.0f), Float.NEGATIVE_INFINITY == 1.0f, "Float.NEGATIVE_INFINITY == 1.0f"); + Tester.checkEqual(floatEq(Float.NEGATIVE_INFINITY, Float.MAX_VALUE), Float.NEGATIVE_INFINITY == Float.MAX_VALUE, "Float.NEGATIVE_INFINITY == Float.MAX_VALUE"); + Tester.checkEqual(floatEq(Float.NEGATIVE_INFINITY, Float.POSITIVE_INFINITY), Float.NEGATIVE_INFINITY == Float.POSITIVE_INFINITY, "Float.NEGATIVE_INFINITY == Float.POSITIVE_INFINITY"); + Tester.checkEqual(floatEq(Float.NEGATIVE_INFINITY, Float.NaN), Float.NEGATIVE_INFINITY == Float.NaN, "Float.NEGATIVE_INFINITY == Float.NaN"); + Tester.checkEqual(floatEq(-1.0f, Float.NEGATIVE_INFINITY), -1.0f == Float.NEGATIVE_INFINITY, "-1.0f == Float.NEGATIVE_INFINITY"); + Tester.checkEqual(floatEq(-1.0f, -1.0f), -1.0f == -1.0f, "-1.0f == -1.0f"); + Tester.checkEqual(floatEq(-1.0f, -0.0f), -1.0f == -0.0f, "-1.0f == -0.0f"); + Tester.checkEqual(floatEq(-1.0f, 0.0f), -1.0f == 0.0f, "-1.0f == 0.0f"); + Tester.checkEqual(floatEq(-1.0f, Float.MIN_VALUE), -1.0f == Float.MIN_VALUE, "-1.0f == Float.MIN_VALUE"); + Tester.checkEqual(floatEq(-1.0f, 1.0f), -1.0f == 1.0f, "-1.0f == 1.0f"); + Tester.checkEqual(floatEq(-1.0f, Float.MAX_VALUE), -1.0f == Float.MAX_VALUE, "-1.0f == Float.MAX_VALUE"); + Tester.checkEqual(floatEq(-1.0f, Float.POSITIVE_INFINITY), -1.0f == Float.POSITIVE_INFINITY, "-1.0f == Float.POSITIVE_INFINITY"); + Tester.checkEqual(floatEq(-1.0f, Float.NaN), -1.0f == Float.NaN, "-1.0f == Float.NaN"); + Tester.checkEqual(floatEq(-0.0f, Float.NEGATIVE_INFINITY), -0.0f == Float.NEGATIVE_INFINITY, "-0.0f == Float.NEGATIVE_INFINITY"); + Tester.checkEqual(floatEq(-0.0f, -1.0f), -0.0f == -1.0f, "-0.0f == -1.0f"); + Tester.checkEqual(floatEq(-0.0f, -0.0f), -0.0f == -0.0f, "-0.0f == -0.0f"); + Tester.checkEqual(floatEq(-0.0f, 0.0f), -0.0f == 0.0f, "-0.0f == 0.0f"); + Tester.checkEqual(floatEq(-0.0f, Float.MIN_VALUE), -0.0f == Float.MIN_VALUE, "-0.0f == Float.MIN_VALUE"); + Tester.checkEqual(floatEq(-0.0f, 1.0f), -0.0f == 1.0f, "-0.0f == 1.0f"); + Tester.checkEqual(floatEq(-0.0f, Float.MAX_VALUE), -0.0f == Float.MAX_VALUE, "-0.0f == Float.MAX_VALUE"); + Tester.checkEqual(floatEq(-0.0f, Float.POSITIVE_INFINITY), -0.0f == Float.POSITIVE_INFINITY, "-0.0f == Float.POSITIVE_INFINITY"); + Tester.checkEqual(floatEq(-0.0f, Float.NaN), -0.0f == Float.NaN, "-0.0f == Float.NaN"); + Tester.checkEqual(floatEq(0.0f, Float.NEGATIVE_INFINITY), 0.0f == Float.NEGATIVE_INFINITY, "0.0f == Float.NEGATIVE_INFINITY"); + Tester.checkEqual(floatEq(0.0f, -1.0f), 0.0f == -1.0f, "0.0f == -1.0f"); + Tester.checkEqual(floatEq(0.0f, -0.0f), 0.0f == -0.0f, "0.0f == -0.0f"); + Tester.checkEqual(floatEq(0.0f, 0.0f), 0.0f == 0.0f, "0.0f == 0.0f"); + Tester.checkEqual(floatEq(0.0f, Float.MIN_VALUE), 0.0f == Float.MIN_VALUE, "0.0f == Float.MIN_VALUE"); + Tester.checkEqual(floatEq(0.0f, 1.0f), 0.0f == 1.0f, "0.0f == 1.0f"); + Tester.checkEqual(floatEq(0.0f, Float.MAX_VALUE), 0.0f == Float.MAX_VALUE, "0.0f == Float.MAX_VALUE"); + Tester.checkEqual(floatEq(0.0f, Float.POSITIVE_INFINITY), 0.0f == Float.POSITIVE_INFINITY, "0.0f == Float.POSITIVE_INFINITY"); + Tester.checkEqual(floatEq(0.0f, Float.NaN), 0.0f == Float.NaN, "0.0f == Float.NaN"); + Tester.checkEqual(floatEq(Float.MIN_VALUE, Float.NEGATIVE_INFINITY), Float.MIN_VALUE == Float.NEGATIVE_INFINITY, "Float.MIN_VALUE == Float.NEGATIVE_INFINITY"); + Tester.checkEqual(floatEq(Float.MIN_VALUE, -1.0f), Float.MIN_VALUE == -1.0f, "Float.MIN_VALUE == -1.0f"); + Tester.checkEqual(floatEq(Float.MIN_VALUE, -0.0f), Float.MIN_VALUE == -0.0f, "Float.MIN_VALUE == -0.0f"); + Tester.checkEqual(floatEq(Float.MIN_VALUE, 0.0f), Float.MIN_VALUE == 0.0f, "Float.MIN_VALUE == 0.0f"); + Tester.checkEqual(floatEq(Float.MIN_VALUE, Float.MIN_VALUE), Float.MIN_VALUE == Float.MIN_VALUE, "Float.MIN_VALUE == Float.MIN_VALUE"); + Tester.checkEqual(floatEq(Float.MIN_VALUE, 1.0f), Float.MIN_VALUE == 1.0f, "Float.MIN_VALUE == 1.0f"); + Tester.checkEqual(floatEq(Float.MIN_VALUE, Float.MAX_VALUE), Float.MIN_VALUE == Float.MAX_VALUE, "Float.MIN_VALUE == Float.MAX_VALUE"); + Tester.checkEqual(floatEq(Float.MIN_VALUE, Float.POSITIVE_INFINITY), Float.MIN_VALUE == Float.POSITIVE_INFINITY, "Float.MIN_VALUE == Float.POSITIVE_INFINITY"); + Tester.checkEqual(floatEq(Float.MIN_VALUE, Float.NaN), Float.MIN_VALUE == Float.NaN, "Float.MIN_VALUE == Float.NaN"); + Tester.checkEqual(floatEq(1.0f, Float.NEGATIVE_INFINITY), 1.0f == Float.NEGATIVE_INFINITY, "1.0f == Float.NEGATIVE_INFINITY"); + Tester.checkEqual(floatEq(1.0f, -1.0f), 1.0f == -1.0f, "1.0f == -1.0f"); + Tester.checkEqual(floatEq(1.0f, -0.0f), 1.0f == -0.0f, "1.0f == -0.0f"); + Tester.checkEqual(floatEq(1.0f, 0.0f), 1.0f == 0.0f, "1.0f == 0.0f"); + Tester.checkEqual(floatEq(1.0f, Float.MIN_VALUE), 1.0f == Float.MIN_VALUE, "1.0f == Float.MIN_VALUE"); + Tester.checkEqual(floatEq(1.0f, 1.0f), 1.0f == 1.0f, "1.0f == 1.0f"); + Tester.checkEqual(floatEq(1.0f, Float.MAX_VALUE), 1.0f == Float.MAX_VALUE, "1.0f == Float.MAX_VALUE"); + Tester.checkEqual(floatEq(1.0f, Float.POSITIVE_INFINITY), 1.0f == Float.POSITIVE_INFINITY, "1.0f == Float.POSITIVE_INFINITY"); + Tester.checkEqual(floatEq(1.0f, Float.NaN), 1.0f == Float.NaN, "1.0f == Float.NaN"); + Tester.checkEqual(floatEq(Float.MAX_VALUE, Float.NEGATIVE_INFINITY), Float.MAX_VALUE == Float.NEGATIVE_INFINITY, "Float.MAX_VALUE == Float.NEGATIVE_INFINITY"); + Tester.checkEqual(floatEq(Float.MAX_VALUE, -1.0f), Float.MAX_VALUE == -1.0f, "Float.MAX_VALUE == -1.0f"); + Tester.checkEqual(floatEq(Float.MAX_VALUE, -0.0f), Float.MAX_VALUE == -0.0f, "Float.MAX_VALUE == -0.0f"); + Tester.checkEqual(floatEq(Float.MAX_VALUE, 0.0f), Float.MAX_VALUE == 0.0f, "Float.MAX_VALUE == 0.0f"); + Tester.checkEqual(floatEq(Float.MAX_VALUE, Float.MIN_VALUE), Float.MAX_VALUE == Float.MIN_VALUE, "Float.MAX_VALUE == Float.MIN_VALUE"); + Tester.checkEqual(floatEq(Float.MAX_VALUE, 1.0f), Float.MAX_VALUE == 1.0f, "Float.MAX_VALUE == 1.0f"); + Tester.checkEqual(floatEq(Float.MAX_VALUE, Float.MAX_VALUE), Float.MAX_VALUE == Float.MAX_VALUE, "Float.MAX_VALUE == Float.MAX_VALUE"); + Tester.checkEqual(floatEq(Float.MAX_VALUE, Float.POSITIVE_INFINITY), Float.MAX_VALUE == Float.POSITIVE_INFINITY, "Float.MAX_VALUE == Float.POSITIVE_INFINITY"); + Tester.checkEqual(floatEq(Float.MAX_VALUE, Float.NaN), Float.MAX_VALUE == Float.NaN, "Float.MAX_VALUE == Float.NaN"); + Tester.checkEqual(floatEq(Float.POSITIVE_INFINITY, Float.NEGATIVE_INFINITY), Float.POSITIVE_INFINITY == Float.NEGATIVE_INFINITY, "Float.POSITIVE_INFINITY == Float.NEGATIVE_INFINITY"); + Tester.checkEqual(floatEq(Float.POSITIVE_INFINITY, -1.0f), Float.POSITIVE_INFINITY == -1.0f, "Float.POSITIVE_INFINITY == -1.0f"); + Tester.checkEqual(floatEq(Float.POSITIVE_INFINITY, -0.0f), Float.POSITIVE_INFINITY == -0.0f, "Float.POSITIVE_INFINITY == -0.0f"); + Tester.checkEqual(floatEq(Float.POSITIVE_INFINITY, 0.0f), Float.POSITIVE_INFINITY == 0.0f, "Float.POSITIVE_INFINITY == 0.0f"); + Tester.checkEqual(floatEq(Float.POSITIVE_INFINITY, Float.MIN_VALUE), Float.POSITIVE_INFINITY == Float.MIN_VALUE, "Float.POSITIVE_INFINITY == Float.MIN_VALUE"); + Tester.checkEqual(floatEq(Float.POSITIVE_INFINITY, 1.0f), Float.POSITIVE_INFINITY == 1.0f, "Float.POSITIVE_INFINITY == 1.0f"); + Tester.checkEqual(floatEq(Float.POSITIVE_INFINITY, Float.MAX_VALUE), Float.POSITIVE_INFINITY == Float.MAX_VALUE, "Float.POSITIVE_INFINITY == Float.MAX_VALUE"); + Tester.checkEqual(floatEq(Float.POSITIVE_INFINITY, Float.POSITIVE_INFINITY), Float.POSITIVE_INFINITY == Float.POSITIVE_INFINITY, "Float.POSITIVE_INFINITY == Float.POSITIVE_INFINITY"); + Tester.checkEqual(floatEq(Float.POSITIVE_INFINITY, Float.NaN), Float.POSITIVE_INFINITY == Float.NaN, "Float.POSITIVE_INFINITY == Float.NaN"); + Tester.checkEqual(floatEq(Float.NaN, Float.NEGATIVE_INFINITY), Float.NaN == Float.NEGATIVE_INFINITY, "Float.NaN == Float.NEGATIVE_INFINITY"); + Tester.checkEqual(floatEq(Float.NaN, -1.0f), Float.NaN == -1.0f, "Float.NaN == -1.0f"); + Tester.checkEqual(floatEq(Float.NaN, -0.0f), Float.NaN == -0.0f, "Float.NaN == -0.0f"); + Tester.checkEqual(floatEq(Float.NaN, 0.0f), Float.NaN == 0.0f, "Float.NaN == 0.0f"); + Tester.checkEqual(floatEq(Float.NaN, Float.MIN_VALUE), Float.NaN == Float.MIN_VALUE, "Float.NaN == Float.MIN_VALUE"); + Tester.checkEqual(floatEq(Float.NaN, 1.0f), Float.NaN == 1.0f, "Float.NaN == 1.0f"); + Tester.checkEqual(floatEq(Float.NaN, Float.MAX_VALUE), Float.NaN == Float.MAX_VALUE, "Float.NaN == Float.MAX_VALUE"); + Tester.checkEqual(floatEq(Float.NaN, Float.POSITIVE_INFINITY), Float.NaN == Float.POSITIVE_INFINITY, "Float.NaN == Float.POSITIVE_INFINITY"); + Tester.checkEqual(floatEq(Float.NaN, Float.NaN), Float.NaN == Float.NaN, "Float.NaN == Float.NaN"); + Tester.checkEqual(floatNe(Float.NEGATIVE_INFINITY, Float.NEGATIVE_INFINITY), Float.NEGATIVE_INFINITY != Float.NEGATIVE_INFINITY, "Float.NEGATIVE_INFINITY != Float.NEGATIVE_INFINITY"); + Tester.checkEqual(floatNe(Float.NEGATIVE_INFINITY, -1.0f), Float.NEGATIVE_INFINITY != -1.0f, "Float.NEGATIVE_INFINITY != -1.0f"); + Tester.checkEqual(floatNe(Float.NEGATIVE_INFINITY, -0.0f), Float.NEGATIVE_INFINITY != -0.0f, "Float.NEGATIVE_INFINITY != -0.0f"); + Tester.checkEqual(floatNe(Float.NEGATIVE_INFINITY, 0.0f), Float.NEGATIVE_INFINITY != 0.0f, "Float.NEGATIVE_INFINITY != 0.0f"); + Tester.checkEqual(floatNe(Float.NEGATIVE_INFINITY, Float.MIN_VALUE), Float.NEGATIVE_INFINITY != Float.MIN_VALUE, "Float.NEGATIVE_INFINITY != Float.MIN_VALUE"); + Tester.checkEqual(floatNe(Float.NEGATIVE_INFINITY, 1.0f), Float.NEGATIVE_INFINITY != 1.0f, "Float.NEGATIVE_INFINITY != 1.0f"); + Tester.checkEqual(floatNe(Float.NEGATIVE_INFINITY, Float.MAX_VALUE), Float.NEGATIVE_INFINITY != Float.MAX_VALUE, "Float.NEGATIVE_INFINITY != Float.MAX_VALUE"); + Tester.checkEqual(floatNe(Float.NEGATIVE_INFINITY, Float.POSITIVE_INFINITY), Float.NEGATIVE_INFINITY != Float.POSITIVE_INFINITY, "Float.NEGATIVE_INFINITY != Float.POSITIVE_INFINITY"); + Tester.checkEqual(floatNe(Float.NEGATIVE_INFINITY, Float.NaN), Float.NEGATIVE_INFINITY != Float.NaN, "Float.NEGATIVE_INFINITY != Float.NaN"); + Tester.checkEqual(floatNe(-1.0f, Float.NEGATIVE_INFINITY), -1.0f != Float.NEGATIVE_INFINITY, "-1.0f != Float.NEGATIVE_INFINITY"); + Tester.checkEqual(floatNe(-1.0f, -1.0f), -1.0f != -1.0f, "-1.0f != -1.0f"); + Tester.checkEqual(floatNe(-1.0f, -0.0f), -1.0f != -0.0f, "-1.0f != -0.0f"); + Tester.checkEqual(floatNe(-1.0f, 0.0f), -1.0f != 0.0f, "-1.0f != 0.0f"); + Tester.checkEqual(floatNe(-1.0f, Float.MIN_VALUE), -1.0f != Float.MIN_VALUE, "-1.0f != Float.MIN_VALUE"); + Tester.checkEqual(floatNe(-1.0f, 1.0f), -1.0f != 1.0f, "-1.0f != 1.0f"); + Tester.checkEqual(floatNe(-1.0f, Float.MAX_VALUE), -1.0f != Float.MAX_VALUE, "-1.0f != Float.MAX_VALUE"); + Tester.checkEqual(floatNe(-1.0f, Float.POSITIVE_INFINITY), -1.0f != Float.POSITIVE_INFINITY, "-1.0f != Float.POSITIVE_INFINITY"); + Tester.checkEqual(floatNe(-1.0f, Float.NaN), -1.0f != Float.NaN, "-1.0f != Float.NaN"); + Tester.checkEqual(floatNe(-0.0f, Float.NEGATIVE_INFINITY), -0.0f != Float.NEGATIVE_INFINITY, "-0.0f != Float.NEGATIVE_INFINITY"); + Tester.checkEqual(floatNe(-0.0f, -1.0f), -0.0f != -1.0f, "-0.0f != -1.0f"); + Tester.checkEqual(floatNe(-0.0f, -0.0f), -0.0f != -0.0f, "-0.0f != -0.0f"); + Tester.checkEqual(floatNe(-0.0f, 0.0f), -0.0f != 0.0f, "-0.0f != 0.0f"); + Tester.checkEqual(floatNe(-0.0f, Float.MIN_VALUE), -0.0f != Float.MIN_VALUE, "-0.0f != Float.MIN_VALUE"); + Tester.checkEqual(floatNe(-0.0f, 1.0f), -0.0f != 1.0f, "-0.0f != 1.0f"); + Tester.checkEqual(floatNe(-0.0f, Float.MAX_VALUE), -0.0f != Float.MAX_VALUE, "-0.0f != Float.MAX_VALUE"); + Tester.checkEqual(floatNe(-0.0f, Float.POSITIVE_INFINITY), -0.0f != Float.POSITIVE_INFINITY, "-0.0f != Float.POSITIVE_INFINITY"); + Tester.checkEqual(floatNe(-0.0f, Float.NaN), -0.0f != Float.NaN, "-0.0f != Float.NaN"); + Tester.checkEqual(floatNe(0.0f, Float.NEGATIVE_INFINITY), 0.0f != Float.NEGATIVE_INFINITY, "0.0f != Float.NEGATIVE_INFINITY"); + Tester.checkEqual(floatNe(0.0f, -1.0f), 0.0f != -1.0f, "0.0f != -1.0f"); + Tester.checkEqual(floatNe(0.0f, -0.0f), 0.0f != -0.0f, "0.0f != -0.0f"); + Tester.checkEqual(floatNe(0.0f, 0.0f), 0.0f != 0.0f, "0.0f != 0.0f"); + Tester.checkEqual(floatNe(0.0f, Float.MIN_VALUE), 0.0f != Float.MIN_VALUE, "0.0f != Float.MIN_VALUE"); + Tester.checkEqual(floatNe(0.0f, 1.0f), 0.0f != 1.0f, "0.0f != 1.0f"); + Tester.checkEqual(floatNe(0.0f, Float.MAX_VALUE), 0.0f != Float.MAX_VALUE, "0.0f != Float.MAX_VALUE"); + Tester.checkEqual(floatNe(0.0f, Float.POSITIVE_INFINITY), 0.0f != Float.POSITIVE_INFINITY, "0.0f != Float.POSITIVE_INFINITY"); + Tester.checkEqual(floatNe(0.0f, Float.NaN), 0.0f != Float.NaN, "0.0f != Float.NaN"); + Tester.checkEqual(floatNe(Float.MIN_VALUE, Float.NEGATIVE_INFINITY), Float.MIN_VALUE != Float.NEGATIVE_INFINITY, "Float.MIN_VALUE != Float.NEGATIVE_INFINITY"); + Tester.checkEqual(floatNe(Float.MIN_VALUE, -1.0f), Float.MIN_VALUE != -1.0f, "Float.MIN_VALUE != -1.0f"); + Tester.checkEqual(floatNe(Float.MIN_VALUE, -0.0f), Float.MIN_VALUE != -0.0f, "Float.MIN_VALUE != -0.0f"); + Tester.checkEqual(floatNe(Float.MIN_VALUE, 0.0f), Float.MIN_VALUE != 0.0f, "Float.MIN_VALUE != 0.0f"); + Tester.checkEqual(floatNe(Float.MIN_VALUE, Float.MIN_VALUE), Float.MIN_VALUE != Float.MIN_VALUE, "Float.MIN_VALUE != Float.MIN_VALUE"); + Tester.checkEqual(floatNe(Float.MIN_VALUE, 1.0f), Float.MIN_VALUE != 1.0f, "Float.MIN_VALUE != 1.0f"); + Tester.checkEqual(floatNe(Float.MIN_VALUE, Float.MAX_VALUE), Float.MIN_VALUE != Float.MAX_VALUE, "Float.MIN_VALUE != Float.MAX_VALUE"); + Tester.checkEqual(floatNe(Float.MIN_VALUE, Float.POSITIVE_INFINITY), Float.MIN_VALUE != Float.POSITIVE_INFINITY, "Float.MIN_VALUE != Float.POSITIVE_INFINITY"); + Tester.checkEqual(floatNe(Float.MIN_VALUE, Float.NaN), Float.MIN_VALUE != Float.NaN, "Float.MIN_VALUE != Float.NaN"); + Tester.checkEqual(floatNe(1.0f, Float.NEGATIVE_INFINITY), 1.0f != Float.NEGATIVE_INFINITY, "1.0f != Float.NEGATIVE_INFINITY"); + Tester.checkEqual(floatNe(1.0f, -1.0f), 1.0f != -1.0f, "1.0f != -1.0f"); + Tester.checkEqual(floatNe(1.0f, -0.0f), 1.0f != -0.0f, "1.0f != -0.0f"); + Tester.checkEqual(floatNe(1.0f, 0.0f), 1.0f != 0.0f, "1.0f != 0.0f"); + Tester.checkEqual(floatNe(1.0f, Float.MIN_VALUE), 1.0f != Float.MIN_VALUE, "1.0f != Float.MIN_VALUE"); + Tester.checkEqual(floatNe(1.0f, 1.0f), 1.0f != 1.0f, "1.0f != 1.0f"); + Tester.checkEqual(floatNe(1.0f, Float.MAX_VALUE), 1.0f != Float.MAX_VALUE, "1.0f != Float.MAX_VALUE"); + Tester.checkEqual(floatNe(1.0f, Float.POSITIVE_INFINITY), 1.0f != Float.POSITIVE_INFINITY, "1.0f != Float.POSITIVE_INFINITY"); + Tester.checkEqual(floatNe(1.0f, Float.NaN), 1.0f != Float.NaN, "1.0f != Float.NaN"); + Tester.checkEqual(floatNe(Float.MAX_VALUE, Float.NEGATIVE_INFINITY), Float.MAX_VALUE != Float.NEGATIVE_INFINITY, "Float.MAX_VALUE != Float.NEGATIVE_INFINITY"); + Tester.checkEqual(floatNe(Float.MAX_VALUE, -1.0f), Float.MAX_VALUE != -1.0f, "Float.MAX_VALUE != -1.0f"); + Tester.checkEqual(floatNe(Float.MAX_VALUE, -0.0f), Float.MAX_VALUE != -0.0f, "Float.MAX_VALUE != -0.0f"); + Tester.checkEqual(floatNe(Float.MAX_VALUE, 0.0f), Float.MAX_VALUE != 0.0f, "Float.MAX_VALUE != 0.0f"); + Tester.checkEqual(floatNe(Float.MAX_VALUE, Float.MIN_VALUE), Float.MAX_VALUE != Float.MIN_VALUE, "Float.MAX_VALUE != Float.MIN_VALUE"); + Tester.checkEqual(floatNe(Float.MAX_VALUE, 1.0f), Float.MAX_VALUE != 1.0f, "Float.MAX_VALUE != 1.0f"); + Tester.checkEqual(floatNe(Float.MAX_VALUE, Float.MAX_VALUE), Float.MAX_VALUE != Float.MAX_VALUE, "Float.MAX_VALUE != Float.MAX_VALUE"); + Tester.checkEqual(floatNe(Float.MAX_VALUE, Float.POSITIVE_INFINITY), Float.MAX_VALUE != Float.POSITIVE_INFINITY, "Float.MAX_VALUE != Float.POSITIVE_INFINITY"); + Tester.checkEqual(floatNe(Float.MAX_VALUE, Float.NaN), Float.MAX_VALUE != Float.NaN, "Float.MAX_VALUE != Float.NaN"); + Tester.checkEqual(floatNe(Float.POSITIVE_INFINITY, Float.NEGATIVE_INFINITY), Float.POSITIVE_INFINITY != Float.NEGATIVE_INFINITY, "Float.POSITIVE_INFINITY != Float.NEGATIVE_INFINITY"); + Tester.checkEqual(floatNe(Float.POSITIVE_INFINITY, -1.0f), Float.POSITIVE_INFINITY != -1.0f, "Float.POSITIVE_INFINITY != -1.0f"); + Tester.checkEqual(floatNe(Float.POSITIVE_INFINITY, -0.0f), Float.POSITIVE_INFINITY != -0.0f, "Float.POSITIVE_INFINITY != -0.0f"); + Tester.checkEqual(floatNe(Float.POSITIVE_INFINITY, 0.0f), Float.POSITIVE_INFINITY != 0.0f, "Float.POSITIVE_INFINITY != 0.0f"); + Tester.checkEqual(floatNe(Float.POSITIVE_INFINITY, Float.MIN_VALUE), Float.POSITIVE_INFINITY != Float.MIN_VALUE, "Float.POSITIVE_INFINITY != Float.MIN_VALUE"); + Tester.checkEqual(floatNe(Float.POSITIVE_INFINITY, 1.0f), Float.POSITIVE_INFINITY != 1.0f, "Float.POSITIVE_INFINITY != 1.0f"); + Tester.checkEqual(floatNe(Float.POSITIVE_INFINITY, Float.MAX_VALUE), Float.POSITIVE_INFINITY != Float.MAX_VALUE, "Float.POSITIVE_INFINITY != Float.MAX_VALUE"); + Tester.checkEqual(floatNe(Float.POSITIVE_INFINITY, Float.POSITIVE_INFINITY), Float.POSITIVE_INFINITY != Float.POSITIVE_INFINITY, "Float.POSITIVE_INFINITY != Float.POSITIVE_INFINITY"); + Tester.checkEqual(floatNe(Float.POSITIVE_INFINITY, Float.NaN), Float.POSITIVE_INFINITY != Float.NaN, "Float.POSITIVE_INFINITY != Float.NaN"); + Tester.checkEqual(floatNe(Float.NaN, Float.NEGATIVE_INFINITY), Float.NaN != Float.NEGATIVE_INFINITY, "Float.NaN != Float.NEGATIVE_INFINITY"); + Tester.checkEqual(floatNe(Float.NaN, -1.0f), Float.NaN != -1.0f, "Float.NaN != -1.0f"); + Tester.checkEqual(floatNe(Float.NaN, -0.0f), Float.NaN != -0.0f, "Float.NaN != -0.0f"); + Tester.checkEqual(floatNe(Float.NaN, 0.0f), Float.NaN != 0.0f, "Float.NaN != 0.0f"); + Tester.checkEqual(floatNe(Float.NaN, Float.MIN_VALUE), Float.NaN != Float.MIN_VALUE, "Float.NaN != Float.MIN_VALUE"); + Tester.checkEqual(floatNe(Float.NaN, 1.0f), Float.NaN != 1.0f, "Float.NaN != 1.0f"); + Tester.checkEqual(floatNe(Float.NaN, Float.MAX_VALUE), Float.NaN != Float.MAX_VALUE, "Float.NaN != Float.MAX_VALUE"); + Tester.checkEqual(floatNe(Float.NaN, Float.POSITIVE_INFINITY), Float.NaN != Float.POSITIVE_INFINITY, "Float.NaN != Float.POSITIVE_INFINITY"); + Tester.checkEqual(floatNe(Float.NaN, Float.NaN), Float.NaN != Float.NaN, "Float.NaN != Float.NaN"); + } + static void floatSwitch() { + switch(0) { + case ((((float) + Float.NEGATIVE_INFINITY) == 0) ? 0 : 0): + case ((((float) + -1.0f) == 0) ? 1 : 1): + case ((((float) + -0.0f) == 0) ? 2 : 2): + case ((((float) + 0.0f) == 0) ? 3 : 3): + case ((((float) + Float.MIN_VALUE) == 0) ? 4 : 4): + case ((((float) + 1.0f) == 0) ? 5 : 5): + case ((((float) + Float.MAX_VALUE) == 0) ? 6 : 6): + case ((((float) + Float.POSITIVE_INFINITY) == 0) ? 7 : 7): + case ((((float) + Float.NaN) == 0) ? 8 : 8): + case ((((float) - Float.NEGATIVE_INFINITY) == 0) ? 9 : 9): + case ((((float) - -1.0f) == 0) ? 10 : 10): + case ((((float) - -0.0f) == 0) ? 11 : 11): + case ((((float) - 0.0f) == 0) ? 12 : 12): + case ((((float) - Float.MIN_VALUE) == 0) ? 13 : 13): + case ((((float) - 1.0f) == 0) ? 14 : 14): + case ((((float) - Float.MAX_VALUE) == 0) ? 15 : 15): + case ((((float) - Float.POSITIVE_INFINITY) == 0) ? 16 : 16): + case ((((float) - Float.NaN) == 0) ? 17 : 17): + case ((((float) (Float.NEGATIVE_INFINITY * Float.NEGATIVE_INFINITY)) == 0) ? 18 : 18): + case ((((float) (Float.NEGATIVE_INFINITY * -1.0f)) == 0) ? 19 : 19): + case ((((float) (Float.NEGATIVE_INFINITY * -0.0f)) == 0) ? 20 : 20): + case ((((float) (Float.NEGATIVE_INFINITY * 0.0f)) == 0) ? 21 : 21): + case ((((float) (Float.NEGATIVE_INFINITY * Float.MIN_VALUE)) == 0) ? 22 : 22): + case ((((float) (Float.NEGATIVE_INFINITY * 1.0f)) == 0) ? 23 : 23): + case ((((float) (Float.NEGATIVE_INFINITY * Float.MAX_VALUE)) == 0) ? 24 : 24): + case ((((float) (Float.NEGATIVE_INFINITY * Float.POSITIVE_INFINITY)) == 0) ? 25 : 25): + case ((((float) (Float.NEGATIVE_INFINITY * Float.NaN)) == 0) ? 26 : 26): + case ((((float) (-1.0f * Float.NEGATIVE_INFINITY)) == 0) ? 27 : 27): + case ((((float) (-1.0f * -1.0f)) == 0) ? 28 : 28): + case ((((float) (-1.0f * -0.0f)) == 0) ? 29 : 29): + case ((((float) (-1.0f * 0.0f)) == 0) ? 30 : 30): + case ((((float) (-1.0f * Float.MIN_VALUE)) == 0) ? 31 : 31): + case ((((float) (-1.0f * 1.0f)) == 0) ? 32 : 32): + case ((((float) (-1.0f * Float.MAX_VALUE)) == 0) ? 33 : 33): + case ((((float) (-1.0f * Float.POSITIVE_INFINITY)) == 0) ? 34 : 34): + case ((((float) (-1.0f * Float.NaN)) == 0) ? 35 : 35): + case ((((float) (-0.0f * Float.NEGATIVE_INFINITY)) == 0) ? 36 : 36): + case ((((float) (-0.0f * -1.0f)) == 0) ? 37 : 37): + case ((((float) (-0.0f * -0.0f)) == 0) ? 38 : 38): + case ((((float) (-0.0f * 0.0f)) == 0) ? 39 : 39): + case ((((float) (-0.0f * Float.MIN_VALUE)) == 0) ? 40 : 40): + case ((((float) (-0.0f * 1.0f)) == 0) ? 41 : 41): + case ((((float) (-0.0f * Float.MAX_VALUE)) == 0) ? 42 : 42): + case ((((float) (-0.0f * Float.POSITIVE_INFINITY)) == 0) ? 43 : 43): + case ((((float) (-0.0f * Float.NaN)) == 0) ? 44 : 44): + case ((((float) (0.0f * Float.NEGATIVE_INFINITY)) == 0) ? 45 : 45): + case ((((float) (0.0f * -1.0f)) == 0) ? 46 : 46): + case ((((float) (0.0f * -0.0f)) == 0) ? 47 : 47): + case ((((float) (0.0f * 0.0f)) == 0) ? 48 : 48): + case ((((float) (0.0f * Float.MIN_VALUE)) == 0) ? 49 : 49): + case ((((float) (0.0f * 1.0f)) == 0) ? 50 : 50): + case ((((float) (0.0f * Float.MAX_VALUE)) == 0) ? 51 : 51): + case ((((float) (0.0f * Float.POSITIVE_INFINITY)) == 0) ? 52 : 52): + case ((((float) (0.0f * Float.NaN)) == 0) ? 53 : 53): + case ((((float) (Float.MIN_VALUE * Float.NEGATIVE_INFINITY)) == 0) ? 54 : 54): + case ((((float) (Float.MIN_VALUE * -1.0f)) == 0) ? 55 : 55): + case ((((float) (Float.MIN_VALUE * -0.0f)) == 0) ? 56 : 56): + case ((((float) (Float.MIN_VALUE * 0.0f)) == 0) ? 57 : 57): + case ((((float) (Float.MIN_VALUE * Float.MIN_VALUE)) == 0) ? 58 : 58): + case ((((float) (Float.MIN_VALUE * 1.0f)) == 0) ? 59 : 59): + case ((((float) (Float.MIN_VALUE * Float.MAX_VALUE)) == 0) ? 60 : 60): + case ((((float) (Float.MIN_VALUE * Float.POSITIVE_INFINITY)) == 0) ? 61 : 61): + case ((((float) (Float.MIN_VALUE * Float.NaN)) == 0) ? 62 : 62): + case ((((float) (1.0f * Float.NEGATIVE_INFINITY)) == 0) ? 63 : 63): + case ((((float) (1.0f * -1.0f)) == 0) ? 64 : 64): + case ((((float) (1.0f * -0.0f)) == 0) ? 65 : 65): + case ((((float) (1.0f * 0.0f)) == 0) ? 66 : 66): + case ((((float) (1.0f * Float.MIN_VALUE)) == 0) ? 67 : 67): + case ((((float) (1.0f * 1.0f)) == 0) ? 68 : 68): + case ((((float) (1.0f * Float.MAX_VALUE)) == 0) ? 69 : 69): + case ((((float) (1.0f * Float.POSITIVE_INFINITY)) == 0) ? 70 : 70): + case ((((float) (1.0f * Float.NaN)) == 0) ? 71 : 71): + case ((((float) (Float.MAX_VALUE * Float.NEGATIVE_INFINITY)) == 0) ? 72 : 72): + case ((((float) (Float.MAX_VALUE * -1.0f)) == 0) ? 73 : 73): + case ((((float) (Float.MAX_VALUE * -0.0f)) == 0) ? 74 : 74): + case ((((float) (Float.MAX_VALUE * 0.0f)) == 0) ? 75 : 75): + case ((((float) (Float.MAX_VALUE * Float.MIN_VALUE)) == 0) ? 76 : 76): + case ((((float) (Float.MAX_VALUE * 1.0f)) == 0) ? 77 : 77): + case ((((float) (Float.MAX_VALUE * Float.MAX_VALUE)) == 0) ? 78 : 78): + case ((((float) (Float.MAX_VALUE * Float.POSITIVE_INFINITY)) == 0) ? 79 : 79): + case ((((float) (Float.MAX_VALUE * Float.NaN)) == 0) ? 80 : 80): + case ((((float) (Float.POSITIVE_INFINITY * Float.NEGATIVE_INFINITY)) == 0) ? 81 : 81): + case ((((float) (Float.POSITIVE_INFINITY * -1.0f)) == 0) ? 82 : 82): + case ((((float) (Float.POSITIVE_INFINITY * -0.0f)) == 0) ? 83 : 83): + case ((((float) (Float.POSITIVE_INFINITY * 0.0f)) == 0) ? 84 : 84): + case ((((float) (Float.POSITIVE_INFINITY * Float.MIN_VALUE)) == 0) ? 85 : 85): + case ((((float) (Float.POSITIVE_INFINITY * 1.0f)) == 0) ? 86 : 86): + case ((((float) (Float.POSITIVE_INFINITY * Float.MAX_VALUE)) == 0) ? 87 : 87): + case ((((float) (Float.POSITIVE_INFINITY * Float.POSITIVE_INFINITY)) == 0) ? 88 : 88): + case ((((float) (Float.POSITIVE_INFINITY * Float.NaN)) == 0) ? 89 : 89): + case ((((float) (Float.NaN * Float.NEGATIVE_INFINITY)) == 0) ? 90 : 90): + case ((((float) (Float.NaN * -1.0f)) == 0) ? 91 : 91): + case ((((float) (Float.NaN * -0.0f)) == 0) ? 92 : 92): + case ((((float) (Float.NaN * 0.0f)) == 0) ? 93 : 93): + case ((((float) (Float.NaN * Float.MIN_VALUE)) == 0) ? 94 : 94): + case ((((float) (Float.NaN * 1.0f)) == 0) ? 95 : 95): + case ((((float) (Float.NaN * Float.MAX_VALUE)) == 0) ? 96 : 96): + case ((((float) (Float.NaN * Float.POSITIVE_INFINITY)) == 0) ? 97 : 97): + case ((((float) (Float.NaN * Float.NaN)) == 0) ? 98 : 98): + case ((((float) (Float.NEGATIVE_INFINITY / Float.NEGATIVE_INFINITY)) == 0) ? 99 : 99): + case ((((float) (Float.NEGATIVE_INFINITY / -1.0f)) == 0) ? 100 : 100): + case ((((float) (Float.NEGATIVE_INFINITY / -0.0f)) == 0) ? 101 : 101): + case ((((float) (Float.NEGATIVE_INFINITY / 0.0f)) == 0) ? 102 : 102): + case ((((float) (Float.NEGATIVE_INFINITY / Float.MIN_VALUE)) == 0) ? 103 : 103): + case ((((float) (Float.NEGATIVE_INFINITY / 1.0f)) == 0) ? 104 : 104): + case ((((float) (Float.NEGATIVE_INFINITY / Float.MAX_VALUE)) == 0) ? 105 : 105): + case ((((float) (Float.NEGATIVE_INFINITY / Float.POSITIVE_INFINITY)) == 0) ? 106 : 106): + case ((((float) (Float.NEGATIVE_INFINITY / Float.NaN)) == 0) ? 107 : 107): + case ((((float) (-1.0f / Float.NEGATIVE_INFINITY)) == 0) ? 108 : 108): + case ((((float) (-1.0f / -1.0f)) == 0) ? 109 : 109): + case ((((float) (-1.0f / -0.0f)) == 0) ? 110 : 110): + case ((((float) (-1.0f / 0.0f)) == 0) ? 111 : 111): + case ((((float) (-1.0f / Float.MIN_VALUE)) == 0) ? 112 : 112): + case ((((float) (-1.0f / 1.0f)) == 0) ? 113 : 113): + case ((((float) (-1.0f / Float.MAX_VALUE)) == 0) ? 114 : 114): + case ((((float) (-1.0f / Float.POSITIVE_INFINITY)) == 0) ? 115 : 115): + case ((((float) (-1.0f / Float.NaN)) == 0) ? 116 : 116): + case ((((float) (-0.0f / Float.NEGATIVE_INFINITY)) == 0) ? 117 : 117): + case ((((float) (-0.0f / -1.0f)) == 0) ? 118 : 118): + case ((((float) (-0.0f / -0.0f)) == 0) ? 119 : 119): + case ((((float) (-0.0f / 0.0f)) == 0) ? 120 : 120): + case ((((float) (-0.0f / Float.MIN_VALUE)) == 0) ? 121 : 121): + case ((((float) (-0.0f / 1.0f)) == 0) ? 122 : 122): + case ((((float) (-0.0f / Float.MAX_VALUE)) == 0) ? 123 : 123): + case ((((float) (-0.0f / Float.POSITIVE_INFINITY)) == 0) ? 124 : 124): + case ((((float) (-0.0f / Float.NaN)) == 0) ? 125 : 125): + case ((((float) (0.0f / Float.NEGATIVE_INFINITY)) == 0) ? 126 : 126): + case ((((float) (0.0f / -1.0f)) == 0) ? 127 : 127): + case ((((float) (0.0f / -0.0f)) == 0) ? 128 : 128): + case ((((float) (0.0f / 0.0f)) == 0) ? 129 : 129): + case ((((float) (0.0f / Float.MIN_VALUE)) == 0) ? 130 : 130): + case ((((float) (0.0f / 1.0f)) == 0) ? 131 : 131): + case ((((float) (0.0f / Float.MAX_VALUE)) == 0) ? 132 : 132): + case ((((float) (0.0f / Float.POSITIVE_INFINITY)) == 0) ? 133 : 133): + case ((((float) (0.0f / Float.NaN)) == 0) ? 134 : 134): + case ((((float) (Float.MIN_VALUE / Float.NEGATIVE_INFINITY)) == 0) ? 135 : 135): + case ((((float) (Float.MIN_VALUE / -1.0f)) == 0) ? 136 : 136): + case ((((float) (Float.MIN_VALUE / -0.0f)) == 0) ? 137 : 137): + case ((((float) (Float.MIN_VALUE / 0.0f)) == 0) ? 138 : 138): + case ((((float) (Float.MIN_VALUE / Float.MIN_VALUE)) == 0) ? 139 : 139): + case ((((float) (Float.MIN_VALUE / 1.0f)) == 0) ? 140 : 140): + case ((((float) (Float.MIN_VALUE / Float.MAX_VALUE)) == 0) ? 141 : 141): + case ((((float) (Float.MIN_VALUE / Float.POSITIVE_INFINITY)) == 0) ? 142 : 142): + case ((((float) (Float.MIN_VALUE / Float.NaN)) == 0) ? 143 : 143): + case ((((float) (1.0f / Float.NEGATIVE_INFINITY)) == 0) ? 144 : 144): + case ((((float) (1.0f / -1.0f)) == 0) ? 145 : 145): + case ((((float) (1.0f / -0.0f)) == 0) ? 146 : 146): + case ((((float) (1.0f / 0.0f)) == 0) ? 147 : 147): + case ((((float) (1.0f / Float.MIN_VALUE)) == 0) ? 148 : 148): + case ((((float) (1.0f / 1.0f)) == 0) ? 149 : 149): + case ((((float) (1.0f / Float.MAX_VALUE)) == 0) ? 150 : 150): + case ((((float) (1.0f / Float.POSITIVE_INFINITY)) == 0) ? 151 : 151): + case ((((float) (1.0f / Float.NaN)) == 0) ? 152 : 152): + case ((((float) (Float.MAX_VALUE / Float.NEGATIVE_INFINITY)) == 0) ? 153 : 153): + case ((((float) (Float.MAX_VALUE / -1.0f)) == 0) ? 154 : 154): + case ((((float) (Float.MAX_VALUE / -0.0f)) == 0) ? 155 : 155): + case ((((float) (Float.MAX_VALUE / 0.0f)) == 0) ? 156 : 156): + case ((((float) (Float.MAX_VALUE / Float.MIN_VALUE)) == 0) ? 157 : 157): + case ((((float) (Float.MAX_VALUE / 1.0f)) == 0) ? 158 : 158): + case ((((float) (Float.MAX_VALUE / Float.MAX_VALUE)) == 0) ? 159 : 159): + case ((((float) (Float.MAX_VALUE / Float.POSITIVE_INFINITY)) == 0) ? 160 : 160): + case ((((float) (Float.MAX_VALUE / Float.NaN)) == 0) ? 161 : 161): + case ((((float) (Float.POSITIVE_INFINITY / Float.NEGATIVE_INFINITY)) == 0) ? 162 : 162): + case ((((float) (Float.POSITIVE_INFINITY / -1.0f)) == 0) ? 163 : 163): + case ((((float) (Float.POSITIVE_INFINITY / -0.0f)) == 0) ? 164 : 164): + case ((((float) (Float.POSITIVE_INFINITY / 0.0f)) == 0) ? 165 : 165): + case ((((float) (Float.POSITIVE_INFINITY / Float.MIN_VALUE)) == 0) ? 166 : 166): + case ((((float) (Float.POSITIVE_INFINITY / 1.0f)) == 0) ? 167 : 167): + case ((((float) (Float.POSITIVE_INFINITY / Float.MAX_VALUE)) == 0) ? 168 : 168): + case ((((float) (Float.POSITIVE_INFINITY / Float.POSITIVE_INFINITY)) == 0) ? 169 : 169): + case ((((float) (Float.POSITIVE_INFINITY / Float.NaN)) == 0) ? 170 : 170): + case ((((float) (Float.NaN / Float.NEGATIVE_INFINITY)) == 0) ? 171 : 171): + case ((((float) (Float.NaN / -1.0f)) == 0) ? 172 : 172): + case ((((float) (Float.NaN / -0.0f)) == 0) ? 173 : 173): + case ((((float) (Float.NaN / 0.0f)) == 0) ? 174 : 174): + case ((((float) (Float.NaN / Float.MIN_VALUE)) == 0) ? 175 : 175): + case ((((float) (Float.NaN / 1.0f)) == 0) ? 176 : 176): + case ((((float) (Float.NaN / Float.MAX_VALUE)) == 0) ? 177 : 177): + case ((((float) (Float.NaN / Float.POSITIVE_INFINITY)) == 0) ? 178 : 178): + case ((((float) (Float.NaN / Float.NaN)) == 0) ? 179 : 179): + case ((((float) (Float.NEGATIVE_INFINITY % Float.NEGATIVE_INFINITY)) == 0) ? 180 : 180): + case ((((float) (Float.NEGATIVE_INFINITY % -1.0f)) == 0) ? 181 : 181): + case ((((float) (Float.NEGATIVE_INFINITY % -0.0f)) == 0) ? 182 : 182): + case ((((float) (Float.NEGATIVE_INFINITY % 0.0f)) == 0) ? 183 : 183): + case ((((float) (Float.NEGATIVE_INFINITY % Float.MIN_VALUE)) == 0) ? 184 : 184): + case ((((float) (Float.NEGATIVE_INFINITY % 1.0f)) == 0) ? 185 : 185): + case ((((float) (Float.NEGATIVE_INFINITY % Float.MAX_VALUE)) == 0) ? 186 : 186): + case ((((float) (Float.NEGATIVE_INFINITY % Float.POSITIVE_INFINITY)) == 0) ? 187 : 187): + case ((((float) (Float.NEGATIVE_INFINITY % Float.NaN)) == 0) ? 188 : 188): + case ((((float) (-1.0f % Float.NEGATIVE_INFINITY)) == 0) ? 189 : 189): + case ((((float) (-1.0f % -1.0f)) == 0) ? 190 : 190): + case ((((float) (-1.0f % -0.0f)) == 0) ? 191 : 191): + case ((((float) (-1.0f % 0.0f)) == 0) ? 192 : 192): + case ((((float) (-1.0f % Float.MIN_VALUE)) == 0) ? 193 : 193): + case ((((float) (-1.0f % 1.0f)) == 0) ? 194 : 194): + case ((((float) (-1.0f % Float.MAX_VALUE)) == 0) ? 195 : 195): + case ((((float) (-1.0f % Float.POSITIVE_INFINITY)) == 0) ? 196 : 196): + case ((((float) (-1.0f % Float.NaN)) == 0) ? 197 : 197): + case ((((float) (-0.0f % Float.NEGATIVE_INFINITY)) == 0) ? 198 : 198): + case ((((float) (-0.0f % -1.0f)) == 0) ? 199 : 199): + case ((((float) (-0.0f % -0.0f)) == 0) ? 200 : 200): + case ((((float) (-0.0f % 0.0f)) == 0) ? 201 : 201): + case ((((float) (-0.0f % Float.MIN_VALUE)) == 0) ? 202 : 202): + case ((((float) (-0.0f % 1.0f)) == 0) ? 203 : 203): + case ((((float) (-0.0f % Float.MAX_VALUE)) == 0) ? 204 : 204): + case ((((float) (-0.0f % Float.POSITIVE_INFINITY)) == 0) ? 205 : 205): + case ((((float) (-0.0f % Float.NaN)) == 0) ? 206 : 206): + case ((((float) (0.0f % Float.NEGATIVE_INFINITY)) == 0) ? 207 : 207): + case ((((float) (0.0f % -1.0f)) == 0) ? 208 : 208): + case ((((float) (0.0f % -0.0f)) == 0) ? 209 : 209): + case ((((float) (0.0f % 0.0f)) == 0) ? 210 : 210): + case ((((float) (0.0f % Float.MIN_VALUE)) == 0) ? 211 : 211): + case ((((float) (0.0f % 1.0f)) == 0) ? 212 : 212): + case ((((float) (0.0f % Float.MAX_VALUE)) == 0) ? 213 : 213): + case ((((float) (0.0f % Float.POSITIVE_INFINITY)) == 0) ? 214 : 214): + case ((((float) (0.0f % Float.NaN)) == 0) ? 215 : 215): + case ((((float) (Float.MIN_VALUE % Float.NEGATIVE_INFINITY)) == 0) ? 216 : 216): + case ((((float) (Float.MIN_VALUE % -1.0f)) == 0) ? 217 : 217): + case ((((float) (Float.MIN_VALUE % -0.0f)) == 0) ? 218 : 218): + case ((((float) (Float.MIN_VALUE % 0.0f)) == 0) ? 219 : 219): + case ((((float) (Float.MIN_VALUE % Float.MIN_VALUE)) == 0) ? 220 : 220): + case ((((float) (Float.MIN_VALUE % 1.0f)) == 0) ? 221 : 221): + case ((((float) (Float.MIN_VALUE % Float.MAX_VALUE)) == 0) ? 222 : 222): + case ((((float) (Float.MIN_VALUE % Float.POSITIVE_INFINITY)) == 0) ? 223 : 223): + case ((((float) (Float.MIN_VALUE % Float.NaN)) == 0) ? 224 : 224): + case ((((float) (1.0f % Float.NEGATIVE_INFINITY)) == 0) ? 225 : 225): + case ((((float) (1.0f % -1.0f)) == 0) ? 226 : 226): + case ((((float) (1.0f % -0.0f)) == 0) ? 227 : 227): + case ((((float) (1.0f % 0.0f)) == 0) ? 228 : 228): + case ((((float) (1.0f % Float.MIN_VALUE)) == 0) ? 229 : 229): + case ((((float) (1.0f % 1.0f)) == 0) ? 230 : 230): + case ((((float) (1.0f % Float.MAX_VALUE)) == 0) ? 231 : 231): + case ((((float) (1.0f % Float.POSITIVE_INFINITY)) == 0) ? 232 : 232): + case ((((float) (1.0f % Float.NaN)) == 0) ? 233 : 233): + case ((((float) (Float.MAX_VALUE % Float.NEGATIVE_INFINITY)) == 0) ? 234 : 234): + case ((((float) (Float.MAX_VALUE % -1.0f)) == 0) ? 235 : 235): + case ((((float) (Float.MAX_VALUE % -0.0f)) == 0) ? 236 : 236): + case ((((float) (Float.MAX_VALUE % 0.0f)) == 0) ? 237 : 237): + case ((((float) (Float.MAX_VALUE % Float.MIN_VALUE)) == 0) ? 238 : 238): + case ((((float) (Float.MAX_VALUE % 1.0f)) == 0) ? 239 : 239): + case ((((float) (Float.MAX_VALUE % Float.MAX_VALUE)) == 0) ? 240 : 240): + case ((((float) (Float.MAX_VALUE % Float.POSITIVE_INFINITY)) == 0) ? 241 : 241): + case ((((float) (Float.MAX_VALUE % Float.NaN)) == 0) ? 242 : 242): + case ((((float) (Float.POSITIVE_INFINITY % Float.NEGATIVE_INFINITY)) == 0) ? 243 : 243): + case ((((float) (Float.POSITIVE_INFINITY % -1.0f)) == 0) ? 244 : 244): + case ((((float) (Float.POSITIVE_INFINITY % -0.0f)) == 0) ? 245 : 245): + case ((((float) (Float.POSITIVE_INFINITY % 0.0f)) == 0) ? 246 : 246): + case ((((float) (Float.POSITIVE_INFINITY % Float.MIN_VALUE)) == 0) ? 247 : 247): + case ((((float) (Float.POSITIVE_INFINITY % 1.0f)) == 0) ? 248 : 248): + case ((((float) (Float.POSITIVE_INFINITY % Float.MAX_VALUE)) == 0) ? 249 : 249): + case ((((float) (Float.POSITIVE_INFINITY % Float.POSITIVE_INFINITY)) == 0) ? 250 : 250): + case ((((float) (Float.POSITIVE_INFINITY % Float.NaN)) == 0) ? 251 : 251): + case ((((float) (Float.NaN % Float.NEGATIVE_INFINITY)) == 0) ? 252 : 252): + case ((((float) (Float.NaN % -1.0f)) == 0) ? 253 : 253): + case ((((float) (Float.NaN % -0.0f)) == 0) ? 254 : 254): + case ((((float) (Float.NaN % 0.0f)) == 0) ? 255 : 255): + case ((((float) (Float.NaN % Float.MIN_VALUE)) == 0) ? 256 : 256): + case ((((float) (Float.NaN % 1.0f)) == 0) ? 257 : 257): + case ((((float) (Float.NaN % Float.MAX_VALUE)) == 0) ? 258 : 258): + case ((((float) (Float.NaN % Float.POSITIVE_INFINITY)) == 0) ? 259 : 259): + case ((((float) (Float.NaN % Float.NaN)) == 0) ? 260 : 260): + case ((((float) (Float.NEGATIVE_INFINITY + Float.NEGATIVE_INFINITY)) == 0) ? 261 : 261): + case ((((float) (Float.NEGATIVE_INFINITY + -1.0f)) == 0) ? 262 : 262): + case ((((float) (Float.NEGATIVE_INFINITY + -0.0f)) == 0) ? 263 : 263): + case ((((float) (Float.NEGATIVE_INFINITY + 0.0f)) == 0) ? 264 : 264): + case ((((float) (Float.NEGATIVE_INFINITY + Float.MIN_VALUE)) == 0) ? 265 : 265): + case ((((float) (Float.NEGATIVE_INFINITY + 1.0f)) == 0) ? 266 : 266): + case ((((float) (Float.NEGATIVE_INFINITY + Float.MAX_VALUE)) == 0) ? 267 : 267): + case ((((float) (Float.NEGATIVE_INFINITY + Float.POSITIVE_INFINITY)) == 0) ? 268 : 268): + case ((((float) (Float.NEGATIVE_INFINITY + Float.NaN)) == 0) ? 269 : 269): + case ((((float) (-1.0f + Float.NEGATIVE_INFINITY)) == 0) ? 270 : 270): + case ((((float) (-1.0f + -1.0f)) == 0) ? 271 : 271): + case ((((float) (-1.0f + -0.0f)) == 0) ? 272 : 272): + case ((((float) (-1.0f + 0.0f)) == 0) ? 273 : 273): + case ((((float) (-1.0f + Float.MIN_VALUE)) == 0) ? 274 : 274): + case ((((float) (-1.0f + 1.0f)) == 0) ? 275 : 275): + case ((((float) (-1.0f + Float.MAX_VALUE)) == 0) ? 276 : 276): + case ((((float) (-1.0f + Float.POSITIVE_INFINITY)) == 0) ? 277 : 277): + case ((((float) (-1.0f + Float.NaN)) == 0) ? 278 : 278): + case ((((float) (-0.0f + Float.NEGATIVE_INFINITY)) == 0) ? 279 : 279): + case ((((float) (-0.0f + -1.0f)) == 0) ? 280 : 280): + case ((((float) (-0.0f + -0.0f)) == 0) ? 281 : 281): + case ((((float) (-0.0f + 0.0f)) == 0) ? 282 : 282): + case ((((float) (-0.0f + Float.MIN_VALUE)) == 0) ? 283 : 283): + case ((((float) (-0.0f + 1.0f)) == 0) ? 284 : 284): + case ((((float) (-0.0f + Float.MAX_VALUE)) == 0) ? 285 : 285): + case ((((float) (-0.0f + Float.POSITIVE_INFINITY)) == 0) ? 286 : 286): + case ((((float) (-0.0f + Float.NaN)) == 0) ? 287 : 287): + case ((((float) (0.0f + Float.NEGATIVE_INFINITY)) == 0) ? 288 : 288): + case ((((float) (0.0f + -1.0f)) == 0) ? 289 : 289): + case ((((float) (0.0f + -0.0f)) == 0) ? 290 : 290): + case ((((float) (0.0f + 0.0f)) == 0) ? 291 : 291): + case ((((float) (0.0f + Float.MIN_VALUE)) == 0) ? 292 : 292): + case ((((float) (0.0f + 1.0f)) == 0) ? 293 : 293): + case ((((float) (0.0f + Float.MAX_VALUE)) == 0) ? 294 : 294): + case ((((float) (0.0f + Float.POSITIVE_INFINITY)) == 0) ? 295 : 295): + case ((((float) (0.0f + Float.NaN)) == 0) ? 296 : 296): + case ((((float) (Float.MIN_VALUE + Float.NEGATIVE_INFINITY)) == 0) ? 297 : 297): + case ((((float) (Float.MIN_VALUE + -1.0f)) == 0) ? 298 : 298): + case ((((float) (Float.MIN_VALUE + -0.0f)) == 0) ? 299 : 299): + case ((((float) (Float.MIN_VALUE + 0.0f)) == 0) ? 300 : 300): + case ((((float) (Float.MIN_VALUE + Float.MIN_VALUE)) == 0) ? 301 : 301): + case ((((float) (Float.MIN_VALUE + 1.0f)) == 0) ? 302 : 302): + case ((((float) (Float.MIN_VALUE + Float.MAX_VALUE)) == 0) ? 303 : 303): + case ((((float) (Float.MIN_VALUE + Float.POSITIVE_INFINITY)) == 0) ? 304 : 304): + case ((((float) (Float.MIN_VALUE + Float.NaN)) == 0) ? 305 : 305): + case ((((float) (1.0f + Float.NEGATIVE_INFINITY)) == 0) ? 306 : 306): + case ((((float) (1.0f + -1.0f)) == 0) ? 307 : 307): + case ((((float) (1.0f + -0.0f)) == 0) ? 308 : 308): + case ((((float) (1.0f + 0.0f)) == 0) ? 309 : 309): + case ((((float) (1.0f + Float.MIN_VALUE)) == 0) ? 310 : 310): + case ((((float) (1.0f + 1.0f)) == 0) ? 311 : 311): + case ((((float) (1.0f + Float.MAX_VALUE)) == 0) ? 312 : 312): + case ((((float) (1.0f + Float.POSITIVE_INFINITY)) == 0) ? 313 : 313): + case ((((float) (1.0f + Float.NaN)) == 0) ? 314 : 314): + case ((((float) (Float.MAX_VALUE + Float.NEGATIVE_INFINITY)) == 0) ? 315 : 315): + case ((((float) (Float.MAX_VALUE + -1.0f)) == 0) ? 316 : 316): + case ((((float) (Float.MAX_VALUE + -0.0f)) == 0) ? 317 : 317): + case ((((float) (Float.MAX_VALUE + 0.0f)) == 0) ? 318 : 318): + case ((((float) (Float.MAX_VALUE + Float.MIN_VALUE)) == 0) ? 319 : 319): + case ((((float) (Float.MAX_VALUE + 1.0f)) == 0) ? 320 : 320): + case ((((float) (Float.MAX_VALUE + Float.MAX_VALUE)) == 0) ? 321 : 321): + case ((((float) (Float.MAX_VALUE + Float.POSITIVE_INFINITY)) == 0) ? 322 : 322): + case ((((float) (Float.MAX_VALUE + Float.NaN)) == 0) ? 323 : 323): + case ((((float) (Float.POSITIVE_INFINITY + Float.NEGATIVE_INFINITY)) == 0) ? 324 : 324): + case ((((float) (Float.POSITIVE_INFINITY + -1.0f)) == 0) ? 325 : 325): + case ((((float) (Float.POSITIVE_INFINITY + -0.0f)) == 0) ? 326 : 326): + case ((((float) (Float.POSITIVE_INFINITY + 0.0f)) == 0) ? 327 : 327): + case ((((float) (Float.POSITIVE_INFINITY + Float.MIN_VALUE)) == 0) ? 328 : 328): + case ((((float) (Float.POSITIVE_INFINITY + 1.0f)) == 0) ? 329 : 329): + case ((((float) (Float.POSITIVE_INFINITY + Float.MAX_VALUE)) == 0) ? 330 : 330): + case ((((float) (Float.POSITIVE_INFINITY + Float.POSITIVE_INFINITY)) == 0) ? 331 : 331): + case ((((float) (Float.POSITIVE_INFINITY + Float.NaN)) == 0) ? 332 : 332): + case ((((float) (Float.NaN + Float.NEGATIVE_INFINITY)) == 0) ? 333 : 333): + case ((((float) (Float.NaN + -1.0f)) == 0) ? 334 : 334): + case ((((float) (Float.NaN + -0.0f)) == 0) ? 335 : 335): + case ((((float) (Float.NaN + 0.0f)) == 0) ? 336 : 336): + case ((((float) (Float.NaN + Float.MIN_VALUE)) == 0) ? 337 : 337): + case ((((float) (Float.NaN + 1.0f)) == 0) ? 338 : 338): + case ((((float) (Float.NaN + Float.MAX_VALUE)) == 0) ? 339 : 339): + case ((((float) (Float.NaN + Float.POSITIVE_INFINITY)) == 0) ? 340 : 340): + case ((((float) (Float.NaN + Float.NaN)) == 0) ? 341 : 341): + case ((((float) (Float.NEGATIVE_INFINITY - Float.NEGATIVE_INFINITY)) == 0) ? 342 : 342): + case ((((float) (Float.NEGATIVE_INFINITY - -1.0f)) == 0) ? 343 : 343): + case ((((float) (Float.NEGATIVE_INFINITY - -0.0f)) == 0) ? 344 : 344): + case ((((float) (Float.NEGATIVE_INFINITY - 0.0f)) == 0) ? 345 : 345): + case ((((float) (Float.NEGATIVE_INFINITY - Float.MIN_VALUE)) == 0) ? 346 : 346): + case ((((float) (Float.NEGATIVE_INFINITY - 1.0f)) == 0) ? 347 : 347): + case ((((float) (Float.NEGATIVE_INFINITY - Float.MAX_VALUE)) == 0) ? 348 : 348): + case ((((float) (Float.NEGATIVE_INFINITY - Float.POSITIVE_INFINITY)) == 0) ? 349 : 349): + case ((((float) (Float.NEGATIVE_INFINITY - Float.NaN)) == 0) ? 350 : 350): + case ((((float) (-1.0f - Float.NEGATIVE_INFINITY)) == 0) ? 351 : 351): + case ((((float) (-1.0f - -1.0f)) == 0) ? 352 : 352): + case ((((float) (-1.0f - -0.0f)) == 0) ? 353 : 353): + case ((((float) (-1.0f - 0.0f)) == 0) ? 354 : 354): + case ((((float) (-1.0f - Float.MIN_VALUE)) == 0) ? 355 : 355): + case ((((float) (-1.0f - 1.0f)) == 0) ? 356 : 356): + case ((((float) (-1.0f - Float.MAX_VALUE)) == 0) ? 357 : 357): + case ((((float) (-1.0f - Float.POSITIVE_INFINITY)) == 0) ? 358 : 358): + case ((((float) (-1.0f - Float.NaN)) == 0) ? 359 : 359): + case ((((float) (-0.0f - Float.NEGATIVE_INFINITY)) == 0) ? 360 : 360): + case ((((float) (-0.0f - -1.0f)) == 0) ? 361 : 361): + case ((((float) (-0.0f - -0.0f)) == 0) ? 362 : 362): + case ((((float) (-0.0f - 0.0f)) == 0) ? 363 : 363): + case ((((float) (-0.0f - Float.MIN_VALUE)) == 0) ? 364 : 364): + case ((((float) (-0.0f - 1.0f)) == 0) ? 365 : 365): + case ((((float) (-0.0f - Float.MAX_VALUE)) == 0) ? 366 : 366): + case ((((float) (-0.0f - Float.POSITIVE_INFINITY)) == 0) ? 367 : 367): + case ((((float) (-0.0f - Float.NaN)) == 0) ? 368 : 368): + case ((((float) (0.0f - Float.NEGATIVE_INFINITY)) == 0) ? 369 : 369): + case ((((float) (0.0f - -1.0f)) == 0) ? 370 : 370): + case ((((float) (0.0f - -0.0f)) == 0) ? 371 : 371): + case ((((float) (0.0f - 0.0f)) == 0) ? 372 : 372): + case ((((float) (0.0f - Float.MIN_VALUE)) == 0) ? 373 : 373): + case ((((float) (0.0f - 1.0f)) == 0) ? 374 : 374): + case ((((float) (0.0f - Float.MAX_VALUE)) == 0) ? 375 : 375): + case ((((float) (0.0f - Float.POSITIVE_INFINITY)) == 0) ? 376 : 376): + case ((((float) (0.0f - Float.NaN)) == 0) ? 377 : 377): + case ((((float) (Float.MIN_VALUE - Float.NEGATIVE_INFINITY)) == 0) ? 378 : 378): + case ((((float) (Float.MIN_VALUE - -1.0f)) == 0) ? 379 : 379): + case ((((float) (Float.MIN_VALUE - -0.0f)) == 0) ? 380 : 380): + case ((((float) (Float.MIN_VALUE - 0.0f)) == 0) ? 381 : 381): + case ((((float) (Float.MIN_VALUE - Float.MIN_VALUE)) == 0) ? 382 : 382): + case ((((float) (Float.MIN_VALUE - 1.0f)) == 0) ? 383 : 383): + case ((((float) (Float.MIN_VALUE - Float.MAX_VALUE)) == 0) ? 384 : 384): + case ((((float) (Float.MIN_VALUE - Float.POSITIVE_INFINITY)) == 0) ? 385 : 385): + case ((((float) (Float.MIN_VALUE - Float.NaN)) == 0) ? 386 : 386): + case ((((float) (1.0f - Float.NEGATIVE_INFINITY)) == 0) ? 387 : 387): + case ((((float) (1.0f - -1.0f)) == 0) ? 388 : 388): + case ((((float) (1.0f - -0.0f)) == 0) ? 389 : 389): + case ((((float) (1.0f - 0.0f)) == 0) ? 390 : 390): + case ((((float) (1.0f - Float.MIN_VALUE)) == 0) ? 391 : 391): + case ((((float) (1.0f - 1.0f)) == 0) ? 392 : 392): + case ((((float) (1.0f - Float.MAX_VALUE)) == 0) ? 393 : 393): + case ((((float) (1.0f - Float.POSITIVE_INFINITY)) == 0) ? 394 : 394): + case ((((float) (1.0f - Float.NaN)) == 0) ? 395 : 395): + case ((((float) (Float.MAX_VALUE - Float.NEGATIVE_INFINITY)) == 0) ? 396 : 396): + case ((((float) (Float.MAX_VALUE - -1.0f)) == 0) ? 397 : 397): + case ((((float) (Float.MAX_VALUE - -0.0f)) == 0) ? 398 : 398): + case ((((float) (Float.MAX_VALUE - 0.0f)) == 0) ? 399 : 399): + case ((((float) (Float.MAX_VALUE - Float.MIN_VALUE)) == 0) ? 400 : 400): + case ((((float) (Float.MAX_VALUE - 1.0f)) == 0) ? 401 : 401): + case ((((float) (Float.MAX_VALUE - Float.MAX_VALUE)) == 0) ? 402 : 402): + case ((((float) (Float.MAX_VALUE - Float.POSITIVE_INFINITY)) == 0) ? 403 : 403): + case ((((float) (Float.MAX_VALUE - Float.NaN)) == 0) ? 404 : 404): + case ((((float) (Float.POSITIVE_INFINITY - Float.NEGATIVE_INFINITY)) == 0) ? 405 : 405): + case ((((float) (Float.POSITIVE_INFINITY - -1.0f)) == 0) ? 406 : 406): + case ((((float) (Float.POSITIVE_INFINITY - -0.0f)) == 0) ? 407 : 407): + case ((((float) (Float.POSITIVE_INFINITY - 0.0f)) == 0) ? 408 : 408): + case ((((float) (Float.POSITIVE_INFINITY - Float.MIN_VALUE)) == 0) ? 409 : 409): + case ((((float) (Float.POSITIVE_INFINITY - 1.0f)) == 0) ? 410 : 410): + case ((((float) (Float.POSITIVE_INFINITY - Float.MAX_VALUE)) == 0) ? 411 : 411): + case ((((float) (Float.POSITIVE_INFINITY - Float.POSITIVE_INFINITY)) == 0) ? 412 : 412): + case ((((float) (Float.POSITIVE_INFINITY - Float.NaN)) == 0) ? 413 : 413): + case ((((float) (Float.NaN - Float.NEGATIVE_INFINITY)) == 0) ? 414 : 414): + case ((((float) (Float.NaN - -1.0f)) == 0) ? 415 : 415): + case ((((float) (Float.NaN - -0.0f)) == 0) ? 416 : 416): + case ((((float) (Float.NaN - 0.0f)) == 0) ? 417 : 417): + case ((((float) (Float.NaN - Float.MIN_VALUE)) == 0) ? 418 : 418): + case ((((float) (Float.NaN - 1.0f)) == 0) ? 419 : 419): + case ((((float) (Float.NaN - Float.MAX_VALUE)) == 0) ? 420 : 420): + case ((((float) (Float.NaN - Float.POSITIVE_INFINITY)) == 0) ? 421 : 421): + case ((((float) (Float.NaN - Float.NaN)) == 0) ? 422 : 422): + case ((Float.NEGATIVE_INFINITY < Float.NEGATIVE_INFINITY) ? 423 : 423): + case ((Float.NEGATIVE_INFINITY < -1.0f) ? 424 : 424): + case ((Float.NEGATIVE_INFINITY < -0.0f) ? 425 : 425): + case ((Float.NEGATIVE_INFINITY < 0.0f) ? 426 : 426): + case ((Float.NEGATIVE_INFINITY < Float.MIN_VALUE) ? 427 : 427): + case ((Float.NEGATIVE_INFINITY < 1.0f) ? 428 : 428): + case ((Float.NEGATIVE_INFINITY < Float.MAX_VALUE) ? 429 : 429): + case ((Float.NEGATIVE_INFINITY < Float.POSITIVE_INFINITY) ? 430 : 430): + case ((Float.NEGATIVE_INFINITY < Float.NaN) ? 431 : 431): + case ((-1.0f < Float.NEGATIVE_INFINITY) ? 432 : 432): + case ((-1.0f < -1.0f) ? 433 : 433): + case ((-1.0f < -0.0f) ? 434 : 434): + case ((-1.0f < 0.0f) ? 435 : 435): + case ((-1.0f < Float.MIN_VALUE) ? 436 : 436): + case ((-1.0f < 1.0f) ? 437 : 437): + case ((-1.0f < Float.MAX_VALUE) ? 438 : 438): + case ((-1.0f < Float.POSITIVE_INFINITY) ? 439 : 439): + case ((-1.0f < Float.NaN) ? 440 : 440): + case ((-0.0f < Float.NEGATIVE_INFINITY) ? 441 : 441): + case ((-0.0f < -1.0f) ? 442 : 442): + case ((-0.0f < -0.0f) ? 443 : 443): + case ((-0.0f < 0.0f) ? 444 : 444): + case ((-0.0f < Float.MIN_VALUE) ? 445 : 445): + case ((-0.0f < 1.0f) ? 446 : 446): + case ((-0.0f < Float.MAX_VALUE) ? 447 : 447): + case ((-0.0f < Float.POSITIVE_INFINITY) ? 448 : 448): + case ((-0.0f < Float.NaN) ? 449 : 449): + case ((0.0f < Float.NEGATIVE_INFINITY) ? 450 : 450): + case ((0.0f < -1.0f) ? 451 : 451): + case ((0.0f < -0.0f) ? 452 : 452): + case ((0.0f < 0.0f) ? 453 : 453): + case ((0.0f < Float.MIN_VALUE) ? 454 : 454): + case ((0.0f < 1.0f) ? 455 : 455): + case ((0.0f < Float.MAX_VALUE) ? 456 : 456): + case ((0.0f < Float.POSITIVE_INFINITY) ? 457 : 457): + case ((0.0f < Float.NaN) ? 458 : 458): + case ((Float.MIN_VALUE < Float.NEGATIVE_INFINITY) ? 459 : 459): + case ((Float.MIN_VALUE < -1.0f) ? 460 : 460): + case ((Float.MIN_VALUE < -0.0f) ? 461 : 461): + case ((Float.MIN_VALUE < 0.0f) ? 462 : 462): + case ((Float.MIN_VALUE < Float.MIN_VALUE) ? 463 : 463): + case ((Float.MIN_VALUE < 1.0f) ? 464 : 464): + case ((Float.MIN_VALUE < Float.MAX_VALUE) ? 465 : 465): + case ((Float.MIN_VALUE < Float.POSITIVE_INFINITY) ? 466 : 466): + case ((Float.MIN_VALUE < Float.NaN) ? 467 : 467): + case ((1.0f < Float.NEGATIVE_INFINITY) ? 468 : 468): + case ((1.0f < -1.0f) ? 469 : 469): + case ((1.0f < -0.0f) ? 470 : 470): + case ((1.0f < 0.0f) ? 471 : 471): + case ((1.0f < Float.MIN_VALUE) ? 472 : 472): + case ((1.0f < 1.0f) ? 473 : 473): + case ((1.0f < Float.MAX_VALUE) ? 474 : 474): + case ((1.0f < Float.POSITIVE_INFINITY) ? 475 : 475): + case ((1.0f < Float.NaN) ? 476 : 476): + case ((Float.MAX_VALUE < Float.NEGATIVE_INFINITY) ? 477 : 477): + case ((Float.MAX_VALUE < -1.0f) ? 478 : 478): + case ((Float.MAX_VALUE < -0.0f) ? 479 : 479): + case ((Float.MAX_VALUE < 0.0f) ? 480 : 480): + case ((Float.MAX_VALUE < Float.MIN_VALUE) ? 481 : 481): + case ((Float.MAX_VALUE < 1.0f) ? 482 : 482): + case ((Float.MAX_VALUE < Float.MAX_VALUE) ? 483 : 483): + case ((Float.MAX_VALUE < Float.POSITIVE_INFINITY) ? 484 : 484): + case ((Float.MAX_VALUE < Float.NaN) ? 485 : 485): + case ((Float.POSITIVE_INFINITY < Float.NEGATIVE_INFINITY) ? 486 : 486): + case ((Float.POSITIVE_INFINITY < -1.0f) ? 487 : 487): + case ((Float.POSITIVE_INFINITY < -0.0f) ? 488 : 488): + case ((Float.POSITIVE_INFINITY < 0.0f) ? 489 : 489): + case ((Float.POSITIVE_INFINITY < Float.MIN_VALUE) ? 490 : 490): + case ((Float.POSITIVE_INFINITY < 1.0f) ? 491 : 491): + case ((Float.POSITIVE_INFINITY < Float.MAX_VALUE) ? 492 : 492): + case ((Float.POSITIVE_INFINITY < Float.POSITIVE_INFINITY) ? 493 : 493): + case ((Float.POSITIVE_INFINITY < Float.NaN) ? 494 : 494): + case ((Float.NaN < Float.NEGATIVE_INFINITY) ? 495 : 495): + case ((Float.NaN < -1.0f) ? 496 : 496): + case ((Float.NaN < -0.0f) ? 497 : 497): + case ((Float.NaN < 0.0f) ? 498 : 498): + case ((Float.NaN < Float.MIN_VALUE) ? 499 : 499): + case ((Float.NaN < 1.0f) ? 500 : 500): + case ((Float.NaN < Float.MAX_VALUE) ? 501 : 501): + case ((Float.NaN < Float.POSITIVE_INFINITY) ? 502 : 502): + case ((Float.NaN < Float.NaN) ? 503 : 503): + case ((Float.NEGATIVE_INFINITY > Float.NEGATIVE_INFINITY) ? 504 : 504): + case ((Float.NEGATIVE_INFINITY > -1.0f) ? 505 : 505): + case ((Float.NEGATIVE_INFINITY > -0.0f) ? 506 : 506): + case ((Float.NEGATIVE_INFINITY > 0.0f) ? 507 : 507): + case ((Float.NEGATIVE_INFINITY > Float.MIN_VALUE) ? 508 : 508): + case ((Float.NEGATIVE_INFINITY > 1.0f) ? 509 : 509): + case ((Float.NEGATIVE_INFINITY > Float.MAX_VALUE) ? 510 : 510): + case ((Float.NEGATIVE_INFINITY > Float.POSITIVE_INFINITY) ? 511 : 511): + case ((Float.NEGATIVE_INFINITY > Float.NaN) ? 512 : 512): + case ((-1.0f > Float.NEGATIVE_INFINITY) ? 513 : 513): + case ((-1.0f > -1.0f) ? 514 : 514): + case ((-1.0f > -0.0f) ? 515 : 515): + case ((-1.0f > 0.0f) ? 516 : 516): + case ((-1.0f > Float.MIN_VALUE) ? 517 : 517): + case ((-1.0f > 1.0f) ? 518 : 518): + case ((-1.0f > Float.MAX_VALUE) ? 519 : 519): + case ((-1.0f > Float.POSITIVE_INFINITY) ? 520 : 520): + case ((-1.0f > Float.NaN) ? 521 : 521): + case ((-0.0f > Float.NEGATIVE_INFINITY) ? 522 : 522): + case ((-0.0f > -1.0f) ? 523 : 523): + case ((-0.0f > -0.0f) ? 524 : 524): + case ((-0.0f > 0.0f) ? 525 : 525): + case ((-0.0f > Float.MIN_VALUE) ? 526 : 526): + case ((-0.0f > 1.0f) ? 527 : 527): + case ((-0.0f > Float.MAX_VALUE) ? 528 : 528): + case ((-0.0f > Float.POSITIVE_INFINITY) ? 529 : 529): + case ((-0.0f > Float.NaN) ? 530 : 530): + case ((0.0f > Float.NEGATIVE_INFINITY) ? 531 : 531): + case ((0.0f > -1.0f) ? 532 : 532): + case ((0.0f > -0.0f) ? 533 : 533): + case ((0.0f > 0.0f) ? 534 : 534): + case ((0.0f > Float.MIN_VALUE) ? 535 : 535): + case ((0.0f > 1.0f) ? 536 : 536): + case ((0.0f > Float.MAX_VALUE) ? 537 : 537): + case ((0.0f > Float.POSITIVE_INFINITY) ? 538 : 538): + case ((0.0f > Float.NaN) ? 539 : 539): + case ((Float.MIN_VALUE > Float.NEGATIVE_INFINITY) ? 540 : 540): + case ((Float.MIN_VALUE > -1.0f) ? 541 : 541): + case ((Float.MIN_VALUE > -0.0f) ? 542 : 542): + case ((Float.MIN_VALUE > 0.0f) ? 543 : 543): + case ((Float.MIN_VALUE > Float.MIN_VALUE) ? 544 : 544): + case ((Float.MIN_VALUE > 1.0f) ? 545 : 545): + case ((Float.MIN_VALUE > Float.MAX_VALUE) ? 546 : 546): + case ((Float.MIN_VALUE > Float.POSITIVE_INFINITY) ? 547 : 547): + case ((Float.MIN_VALUE > Float.NaN) ? 548 : 548): + case ((1.0f > Float.NEGATIVE_INFINITY) ? 549 : 549): + case ((1.0f > -1.0f) ? 550 : 550): + case ((1.0f > -0.0f) ? 551 : 551): + case ((1.0f > 0.0f) ? 552 : 552): + case ((1.0f > Float.MIN_VALUE) ? 553 : 553): + case ((1.0f > 1.0f) ? 554 : 554): + case ((1.0f > Float.MAX_VALUE) ? 555 : 555): + case ((1.0f > Float.POSITIVE_INFINITY) ? 556 : 556): + case ((1.0f > Float.NaN) ? 557 : 557): + case ((Float.MAX_VALUE > Float.NEGATIVE_INFINITY) ? 558 : 558): + case ((Float.MAX_VALUE > -1.0f) ? 559 : 559): + case ((Float.MAX_VALUE > -0.0f) ? 560 : 560): + case ((Float.MAX_VALUE > 0.0f) ? 561 : 561): + case ((Float.MAX_VALUE > Float.MIN_VALUE) ? 562 : 562): + case ((Float.MAX_VALUE > 1.0f) ? 563 : 563): + case ((Float.MAX_VALUE > Float.MAX_VALUE) ? 564 : 564): + case ((Float.MAX_VALUE > Float.POSITIVE_INFINITY) ? 565 : 565): + case ((Float.MAX_VALUE > Float.NaN) ? 566 : 566): + case ((Float.POSITIVE_INFINITY > Float.NEGATIVE_INFINITY) ? 567 : 567): + case ((Float.POSITIVE_INFINITY > -1.0f) ? 568 : 568): + case ((Float.POSITIVE_INFINITY > -0.0f) ? 569 : 569): + case ((Float.POSITIVE_INFINITY > 0.0f) ? 570 : 570): + case ((Float.POSITIVE_INFINITY > Float.MIN_VALUE) ? 571 : 571): + case ((Float.POSITIVE_INFINITY > 1.0f) ? 572 : 572): + case ((Float.POSITIVE_INFINITY > Float.MAX_VALUE) ? 573 : 573): + case ((Float.POSITIVE_INFINITY > Float.POSITIVE_INFINITY) ? 574 : 574): + case ((Float.POSITIVE_INFINITY > Float.NaN) ? 575 : 575): + case ((Float.NaN > Float.NEGATIVE_INFINITY) ? 576 : 576): + case ((Float.NaN > -1.0f) ? 577 : 577): + case ((Float.NaN > -0.0f) ? 578 : 578): + case ((Float.NaN > 0.0f) ? 579 : 579): + case ((Float.NaN > Float.MIN_VALUE) ? 580 : 580): + case ((Float.NaN > 1.0f) ? 581 : 581): + case ((Float.NaN > Float.MAX_VALUE) ? 582 : 582): + case ((Float.NaN > Float.POSITIVE_INFINITY) ? 583 : 583): + case ((Float.NaN > Float.NaN) ? 584 : 584): + case ((Float.NEGATIVE_INFINITY <= Float.NEGATIVE_INFINITY) ? 585 : 585): + case ((Float.NEGATIVE_INFINITY <= -1.0f) ? 586 : 586): + case ((Float.NEGATIVE_INFINITY <= -0.0f) ? 587 : 587): + case ((Float.NEGATIVE_INFINITY <= 0.0f) ? 588 : 588): + case ((Float.NEGATIVE_INFINITY <= Float.MIN_VALUE) ? 589 : 589): + case ((Float.NEGATIVE_INFINITY <= 1.0f) ? 590 : 590): + case ((Float.NEGATIVE_INFINITY <= Float.MAX_VALUE) ? 591 : 591): + case ((Float.NEGATIVE_INFINITY <= Float.POSITIVE_INFINITY) ? 592 : 592): + case ((Float.NEGATIVE_INFINITY <= Float.NaN) ? 593 : 593): + case ((-1.0f <= Float.NEGATIVE_INFINITY) ? 594 : 594): + case ((-1.0f <= -1.0f) ? 595 : 595): + case ((-1.0f <= -0.0f) ? 596 : 596): + case ((-1.0f <= 0.0f) ? 597 : 597): + case ((-1.0f <= Float.MIN_VALUE) ? 598 : 598): + case ((-1.0f <= 1.0f) ? 599 : 599): + case ((-1.0f <= Float.MAX_VALUE) ? 600 : 600): + case ((-1.0f <= Float.POSITIVE_INFINITY) ? 601 : 601): + case ((-1.0f <= Float.NaN) ? 602 : 602): + case ((-0.0f <= Float.NEGATIVE_INFINITY) ? 603 : 603): + case ((-0.0f <= -1.0f) ? 604 : 604): + case ((-0.0f <= -0.0f) ? 605 : 605): + case ((-0.0f <= 0.0f) ? 606 : 606): + case ((-0.0f <= Float.MIN_VALUE) ? 607 : 607): + case ((-0.0f <= 1.0f) ? 608 : 608): + case ((-0.0f <= Float.MAX_VALUE) ? 609 : 609): + case ((-0.0f <= Float.POSITIVE_INFINITY) ? 610 : 610): + case ((-0.0f <= Float.NaN) ? 611 : 611): + case ((0.0f <= Float.NEGATIVE_INFINITY) ? 612 : 612): + case ((0.0f <= -1.0f) ? 613 : 613): + case ((0.0f <= -0.0f) ? 614 : 614): + case ((0.0f <= 0.0f) ? 615 : 615): + case ((0.0f <= Float.MIN_VALUE) ? 616 : 616): + case ((0.0f <= 1.0f) ? 617 : 617): + case ((0.0f <= Float.MAX_VALUE) ? 618 : 618): + case ((0.0f <= Float.POSITIVE_INFINITY) ? 619 : 619): + case ((0.0f <= Float.NaN) ? 620 : 620): + case ((Float.MIN_VALUE <= Float.NEGATIVE_INFINITY) ? 621 : 621): + case ((Float.MIN_VALUE <= -1.0f) ? 622 : 622): + case ((Float.MIN_VALUE <= -0.0f) ? 623 : 623): + case ((Float.MIN_VALUE <= 0.0f) ? 624 : 624): + case ((Float.MIN_VALUE <= Float.MIN_VALUE) ? 625 : 625): + case ((Float.MIN_VALUE <= 1.0f) ? 626 : 626): + case ((Float.MIN_VALUE <= Float.MAX_VALUE) ? 627 : 627): + case ((Float.MIN_VALUE <= Float.POSITIVE_INFINITY) ? 628 : 628): + case ((Float.MIN_VALUE <= Float.NaN) ? 629 : 629): + case ((1.0f <= Float.NEGATIVE_INFINITY) ? 630 : 630): + case ((1.0f <= -1.0f) ? 631 : 631): + case ((1.0f <= -0.0f) ? 632 : 632): + case ((1.0f <= 0.0f) ? 633 : 633): + case ((1.0f <= Float.MIN_VALUE) ? 634 : 634): + case ((1.0f <= 1.0f) ? 635 : 635): + case ((1.0f <= Float.MAX_VALUE) ? 636 : 636): + case ((1.0f <= Float.POSITIVE_INFINITY) ? 637 : 637): + case ((1.0f <= Float.NaN) ? 638 : 638): + case ((Float.MAX_VALUE <= Float.NEGATIVE_INFINITY) ? 639 : 639): + case ((Float.MAX_VALUE <= -1.0f) ? 640 : 640): + case ((Float.MAX_VALUE <= -0.0f) ? 641 : 641): + case ((Float.MAX_VALUE <= 0.0f) ? 642 : 642): + case ((Float.MAX_VALUE <= Float.MIN_VALUE) ? 643 : 643): + case ((Float.MAX_VALUE <= 1.0f) ? 644 : 644): + case ((Float.MAX_VALUE <= Float.MAX_VALUE) ? 645 : 645): + case ((Float.MAX_VALUE <= Float.POSITIVE_INFINITY) ? 646 : 646): + case ((Float.MAX_VALUE <= Float.NaN) ? 647 : 647): + case ((Float.POSITIVE_INFINITY <= Float.NEGATIVE_INFINITY) ? 648 : 648): + case ((Float.POSITIVE_INFINITY <= -1.0f) ? 649 : 649): + case ((Float.POSITIVE_INFINITY <= -0.0f) ? 650 : 650): + case ((Float.POSITIVE_INFINITY <= 0.0f) ? 651 : 651): + case ((Float.POSITIVE_INFINITY <= Float.MIN_VALUE) ? 652 : 652): + case ((Float.POSITIVE_INFINITY <= 1.0f) ? 653 : 653): + case ((Float.POSITIVE_INFINITY <= Float.MAX_VALUE) ? 654 : 654): + case ((Float.POSITIVE_INFINITY <= Float.POSITIVE_INFINITY) ? 655 : 655): + case ((Float.POSITIVE_INFINITY <= Float.NaN) ? 656 : 656): + case ((Float.NaN <= Float.NEGATIVE_INFINITY) ? 657 : 657): + case ((Float.NaN <= -1.0f) ? 658 : 658): + case ((Float.NaN <= -0.0f) ? 659 : 659): + case ((Float.NaN <= 0.0f) ? 660 : 660): + case ((Float.NaN <= Float.MIN_VALUE) ? 661 : 661): + case ((Float.NaN <= 1.0f) ? 662 : 662): + case ((Float.NaN <= Float.MAX_VALUE) ? 663 : 663): + case ((Float.NaN <= Float.POSITIVE_INFINITY) ? 664 : 664): + case ((Float.NaN <= Float.NaN) ? 665 : 665): + case ((Float.NEGATIVE_INFINITY >= Float.NEGATIVE_INFINITY) ? 666 : 666): + case ((Float.NEGATIVE_INFINITY >= -1.0f) ? 667 : 667): + case ((Float.NEGATIVE_INFINITY >= -0.0f) ? 668 : 668): + case ((Float.NEGATIVE_INFINITY >= 0.0f) ? 669 : 669): + case ((Float.NEGATIVE_INFINITY >= Float.MIN_VALUE) ? 670 : 670): + case ((Float.NEGATIVE_INFINITY >= 1.0f) ? 671 : 671): + case ((Float.NEGATIVE_INFINITY >= Float.MAX_VALUE) ? 672 : 672): + case ((Float.NEGATIVE_INFINITY >= Float.POSITIVE_INFINITY) ? 673 : 673): + case ((Float.NEGATIVE_INFINITY >= Float.NaN) ? 674 : 674): + case ((-1.0f >= Float.NEGATIVE_INFINITY) ? 675 : 675): + case ((-1.0f >= -1.0f) ? 676 : 676): + case ((-1.0f >= -0.0f) ? 677 : 677): + case ((-1.0f >= 0.0f) ? 678 : 678): + case ((-1.0f >= Float.MIN_VALUE) ? 679 : 679): + case ((-1.0f >= 1.0f) ? 680 : 680): + case ((-1.0f >= Float.MAX_VALUE) ? 681 : 681): + case ((-1.0f >= Float.POSITIVE_INFINITY) ? 682 : 682): + case ((-1.0f >= Float.NaN) ? 683 : 683): + case ((-0.0f >= Float.NEGATIVE_INFINITY) ? 684 : 684): + case ((-0.0f >= -1.0f) ? 685 : 685): + case ((-0.0f >= -0.0f) ? 686 : 686): + case ((-0.0f >= 0.0f) ? 687 : 687): + case ((-0.0f >= Float.MIN_VALUE) ? 688 : 688): + case ((-0.0f >= 1.0f) ? 689 : 689): + case ((-0.0f >= Float.MAX_VALUE) ? 690 : 690): + case ((-0.0f >= Float.POSITIVE_INFINITY) ? 691 : 691): + case ((-0.0f >= Float.NaN) ? 692 : 692): + case ((0.0f >= Float.NEGATIVE_INFINITY) ? 693 : 693): + case ((0.0f >= -1.0f) ? 694 : 694): + case ((0.0f >= -0.0f) ? 695 : 695): + case ((0.0f >= 0.0f) ? 696 : 696): + case ((0.0f >= Float.MIN_VALUE) ? 697 : 697): + case ((0.0f >= 1.0f) ? 698 : 698): + case ((0.0f >= Float.MAX_VALUE) ? 699 : 699): + case ((0.0f >= Float.POSITIVE_INFINITY) ? 700 : 700): + case ((0.0f >= Float.NaN) ? 701 : 701): + case ((Float.MIN_VALUE >= Float.NEGATIVE_INFINITY) ? 702 : 702): + case ((Float.MIN_VALUE >= -1.0f) ? 703 : 703): + case ((Float.MIN_VALUE >= -0.0f) ? 704 : 704): + case ((Float.MIN_VALUE >= 0.0f) ? 705 : 705): + case ((Float.MIN_VALUE >= Float.MIN_VALUE) ? 706 : 706): + case ((Float.MIN_VALUE >= 1.0f) ? 707 : 707): + case ((Float.MIN_VALUE >= Float.MAX_VALUE) ? 708 : 708): + case ((Float.MIN_VALUE >= Float.POSITIVE_INFINITY) ? 709 : 709): + case ((Float.MIN_VALUE >= Float.NaN) ? 710 : 710): + case ((1.0f >= Float.NEGATIVE_INFINITY) ? 711 : 711): + case ((1.0f >= -1.0f) ? 712 : 712): + case ((1.0f >= -0.0f) ? 713 : 713): + case ((1.0f >= 0.0f) ? 714 : 714): + case ((1.0f >= Float.MIN_VALUE) ? 715 : 715): + case ((1.0f >= 1.0f) ? 716 : 716): + case ((1.0f >= Float.MAX_VALUE) ? 717 : 717): + case ((1.0f >= Float.POSITIVE_INFINITY) ? 718 : 718): + case ((1.0f >= Float.NaN) ? 719 : 719): + case ((Float.MAX_VALUE >= Float.NEGATIVE_INFINITY) ? 720 : 720): + case ((Float.MAX_VALUE >= -1.0f) ? 721 : 721): + case ((Float.MAX_VALUE >= -0.0f) ? 722 : 722): + case ((Float.MAX_VALUE >= 0.0f) ? 723 : 723): + case ((Float.MAX_VALUE >= Float.MIN_VALUE) ? 724 : 724): + case ((Float.MAX_VALUE >= 1.0f) ? 725 : 725): + case ((Float.MAX_VALUE >= Float.MAX_VALUE) ? 726 : 726): + case ((Float.MAX_VALUE >= Float.POSITIVE_INFINITY) ? 727 : 727): + case ((Float.MAX_VALUE >= Float.NaN) ? 728 : 728): + case ((Float.POSITIVE_INFINITY >= Float.NEGATIVE_INFINITY) ? 729 : 729): + case ((Float.POSITIVE_INFINITY >= -1.0f) ? 730 : 730): + case ((Float.POSITIVE_INFINITY >= -0.0f) ? 731 : 731): + case ((Float.POSITIVE_INFINITY >= 0.0f) ? 732 : 732): + case ((Float.POSITIVE_INFINITY >= Float.MIN_VALUE) ? 733 : 733): + case ((Float.POSITIVE_INFINITY >= 1.0f) ? 734 : 734): + case ((Float.POSITIVE_INFINITY >= Float.MAX_VALUE) ? 735 : 735): + case ((Float.POSITIVE_INFINITY >= Float.POSITIVE_INFINITY) ? 736 : 736): + case ((Float.POSITIVE_INFINITY >= Float.NaN) ? 737 : 737): + case ((Float.NaN >= Float.NEGATIVE_INFINITY) ? 738 : 738): + case ((Float.NaN >= -1.0f) ? 739 : 739): + case ((Float.NaN >= -0.0f) ? 740 : 740): + case ((Float.NaN >= 0.0f) ? 741 : 741): + case ((Float.NaN >= Float.MIN_VALUE) ? 742 : 742): + case ((Float.NaN >= 1.0f) ? 743 : 743): + case ((Float.NaN >= Float.MAX_VALUE) ? 744 : 744): + case ((Float.NaN >= Float.POSITIVE_INFINITY) ? 745 : 745): + case ((Float.NaN >= Float.NaN) ? 746 : 746): + case ((Float.NEGATIVE_INFINITY == Float.NEGATIVE_INFINITY) ? 747 : 747): + case ((Float.NEGATIVE_INFINITY == -1.0f) ? 748 : 748): + case ((Float.NEGATIVE_INFINITY == -0.0f) ? 749 : 749): + case ((Float.NEGATIVE_INFINITY == 0.0f) ? 750 : 750): + case ((Float.NEGATIVE_INFINITY == Float.MIN_VALUE) ? 751 : 751): + case ((Float.NEGATIVE_INFINITY == 1.0f) ? 752 : 752): + case ((Float.NEGATIVE_INFINITY == Float.MAX_VALUE) ? 753 : 753): + case ((Float.NEGATIVE_INFINITY == Float.POSITIVE_INFINITY) ? 754 : 754): + case ((Float.NEGATIVE_INFINITY == Float.NaN) ? 755 : 755): + case ((-1.0f == Float.NEGATIVE_INFINITY) ? 756 : 756): + case ((-1.0f == -1.0f) ? 757 : 757): + case ((-1.0f == -0.0f) ? 758 : 758): + case ((-1.0f == 0.0f) ? 759 : 759): + case ((-1.0f == Float.MIN_VALUE) ? 760 : 760): + case ((-1.0f == 1.0f) ? 761 : 761): + case ((-1.0f == Float.MAX_VALUE) ? 762 : 762): + case ((-1.0f == Float.POSITIVE_INFINITY) ? 763 : 763): + case ((-1.0f == Float.NaN) ? 764 : 764): + case ((-0.0f == Float.NEGATIVE_INFINITY) ? 765 : 765): + case ((-0.0f == -1.0f) ? 766 : 766): + case ((-0.0f == -0.0f) ? 767 : 767): + case ((-0.0f == 0.0f) ? 768 : 768): + case ((-0.0f == Float.MIN_VALUE) ? 769 : 769): + case ((-0.0f == 1.0f) ? 770 : 770): + case ((-0.0f == Float.MAX_VALUE) ? 771 : 771): + case ((-0.0f == Float.POSITIVE_INFINITY) ? 772 : 772): + case ((-0.0f == Float.NaN) ? 773 : 773): + case ((0.0f == Float.NEGATIVE_INFINITY) ? 774 : 774): + case ((0.0f == -1.0f) ? 775 : 775): + case ((0.0f == -0.0f) ? 776 : 776): + case ((0.0f == 0.0f) ? 777 : 777): + case ((0.0f == Float.MIN_VALUE) ? 778 : 778): + case ((0.0f == 1.0f) ? 779 : 779): + case ((0.0f == Float.MAX_VALUE) ? 780 : 780): + case ((0.0f == Float.POSITIVE_INFINITY) ? 781 : 781): + case ((0.0f == Float.NaN) ? 782 : 782): + case ((Float.MIN_VALUE == Float.NEGATIVE_INFINITY) ? 783 : 783): + case ((Float.MIN_VALUE == -1.0f) ? 784 : 784): + case ((Float.MIN_VALUE == -0.0f) ? 785 : 785): + case ((Float.MIN_VALUE == 0.0f) ? 786 : 786): + case ((Float.MIN_VALUE == Float.MIN_VALUE) ? 787 : 787): + case ((Float.MIN_VALUE == 1.0f) ? 788 : 788): + case ((Float.MIN_VALUE == Float.MAX_VALUE) ? 789 : 789): + case ((Float.MIN_VALUE == Float.POSITIVE_INFINITY) ? 790 : 790): + case ((Float.MIN_VALUE == Float.NaN) ? 791 : 791): + case ((1.0f == Float.NEGATIVE_INFINITY) ? 792 : 792): + case ((1.0f == -1.0f) ? 793 : 793): + case ((1.0f == -0.0f) ? 794 : 794): + case ((1.0f == 0.0f) ? 795 : 795): + case ((1.0f == Float.MIN_VALUE) ? 796 : 796): + case ((1.0f == 1.0f) ? 797 : 797): + case ((1.0f == Float.MAX_VALUE) ? 798 : 798): + case ((1.0f == Float.POSITIVE_INFINITY) ? 799 : 799): + case ((1.0f == Float.NaN) ? 800 : 800): + case ((Float.MAX_VALUE == Float.NEGATIVE_INFINITY) ? 801 : 801): + case ((Float.MAX_VALUE == -1.0f) ? 802 : 802): + case ((Float.MAX_VALUE == -0.0f) ? 803 : 803): + case ((Float.MAX_VALUE == 0.0f) ? 804 : 804): + case ((Float.MAX_VALUE == Float.MIN_VALUE) ? 805 : 805): + case ((Float.MAX_VALUE == 1.0f) ? 806 : 806): + case ((Float.MAX_VALUE == Float.MAX_VALUE) ? 807 : 807): + case ((Float.MAX_VALUE == Float.POSITIVE_INFINITY) ? 808 : 808): + case ((Float.MAX_VALUE == Float.NaN) ? 809 : 809): + case ((Float.POSITIVE_INFINITY == Float.NEGATIVE_INFINITY) ? 810 : 810): + case ((Float.POSITIVE_INFINITY == -1.0f) ? 811 : 811): + case ((Float.POSITIVE_INFINITY == -0.0f) ? 812 : 812): + case ((Float.POSITIVE_INFINITY == 0.0f) ? 813 : 813): + case ((Float.POSITIVE_INFINITY == Float.MIN_VALUE) ? 814 : 814): + case ((Float.POSITIVE_INFINITY == 1.0f) ? 815 : 815): + case ((Float.POSITIVE_INFINITY == Float.MAX_VALUE) ? 816 : 816): + case ((Float.POSITIVE_INFINITY == Float.POSITIVE_INFINITY) ? 817 : 817): + case ((Float.POSITIVE_INFINITY == Float.NaN) ? 818 : 818): + case ((Float.NaN == Float.NEGATIVE_INFINITY) ? 819 : 819): + case ((Float.NaN == -1.0f) ? 820 : 820): + case ((Float.NaN == -0.0f) ? 821 : 821): + case ((Float.NaN == 0.0f) ? 822 : 822): + case ((Float.NaN == Float.MIN_VALUE) ? 823 : 823): + case ((Float.NaN == 1.0f) ? 824 : 824): + case ((Float.NaN == Float.MAX_VALUE) ? 825 : 825): + case ((Float.NaN == Float.POSITIVE_INFINITY) ? 826 : 826): + case ((Float.NaN == Float.NaN) ? 827 : 827): + case ((Float.NEGATIVE_INFINITY != Float.NEGATIVE_INFINITY) ? 828 : 828): + case ((Float.NEGATIVE_INFINITY != -1.0f) ? 829 : 829): + case ((Float.NEGATIVE_INFINITY != -0.0f) ? 830 : 830): + case ((Float.NEGATIVE_INFINITY != 0.0f) ? 831 : 831): + case ((Float.NEGATIVE_INFINITY != Float.MIN_VALUE) ? 832 : 832): + case ((Float.NEGATIVE_INFINITY != 1.0f) ? 833 : 833): + case ((Float.NEGATIVE_INFINITY != Float.MAX_VALUE) ? 834 : 834): + case ((Float.NEGATIVE_INFINITY != Float.POSITIVE_INFINITY) ? 835 : 835): + case ((Float.NEGATIVE_INFINITY != Float.NaN) ? 836 : 836): + case ((-1.0f != Float.NEGATIVE_INFINITY) ? 837 : 837): + case ((-1.0f != -1.0f) ? 838 : 838): + case ((-1.0f != -0.0f) ? 839 : 839): + case ((-1.0f != 0.0f) ? 840 : 840): + case ((-1.0f != Float.MIN_VALUE) ? 841 : 841): + case ((-1.0f != 1.0f) ? 842 : 842): + case ((-1.0f != Float.MAX_VALUE) ? 843 : 843): + case ((-1.0f != Float.POSITIVE_INFINITY) ? 844 : 844): + case ((-1.0f != Float.NaN) ? 845 : 845): + case ((-0.0f != Float.NEGATIVE_INFINITY) ? 846 : 846): + case ((-0.0f != -1.0f) ? 847 : 847): + case ((-0.0f != -0.0f) ? 848 : 848): + case ((-0.0f != 0.0f) ? 849 : 849): + case ((-0.0f != Float.MIN_VALUE) ? 850 : 850): + case ((-0.0f != 1.0f) ? 851 : 851): + case ((-0.0f != Float.MAX_VALUE) ? 852 : 852): + case ((-0.0f != Float.POSITIVE_INFINITY) ? 853 : 853): + case ((-0.0f != Float.NaN) ? 854 : 854): + case ((0.0f != Float.NEGATIVE_INFINITY) ? 855 : 855): + case ((0.0f != -1.0f) ? 856 : 856): + case ((0.0f != -0.0f) ? 857 : 857): + case ((0.0f != 0.0f) ? 858 : 858): + case ((0.0f != Float.MIN_VALUE) ? 859 : 859): + case ((0.0f != 1.0f) ? 860 : 860): + case ((0.0f != Float.MAX_VALUE) ? 861 : 861): + case ((0.0f != Float.POSITIVE_INFINITY) ? 862 : 862): + case ((0.0f != Float.NaN) ? 863 : 863): + case ((Float.MIN_VALUE != Float.NEGATIVE_INFINITY) ? 864 : 864): + case ((Float.MIN_VALUE != -1.0f) ? 865 : 865): + case ((Float.MIN_VALUE != -0.0f) ? 866 : 866): + case ((Float.MIN_VALUE != 0.0f) ? 867 : 867): + case ((Float.MIN_VALUE != Float.MIN_VALUE) ? 868 : 868): + case ((Float.MIN_VALUE != 1.0f) ? 869 : 869): + case ((Float.MIN_VALUE != Float.MAX_VALUE) ? 870 : 870): + case ((Float.MIN_VALUE != Float.POSITIVE_INFINITY) ? 871 : 871): + case ((Float.MIN_VALUE != Float.NaN) ? 872 : 872): + case ((1.0f != Float.NEGATIVE_INFINITY) ? 873 : 873): + case ((1.0f != -1.0f) ? 874 : 874): + case ((1.0f != -0.0f) ? 875 : 875): + case ((1.0f != 0.0f) ? 876 : 876): + case ((1.0f != Float.MIN_VALUE) ? 877 : 877): + case ((1.0f != 1.0f) ? 878 : 878): + case ((1.0f != Float.MAX_VALUE) ? 879 : 879): + case ((1.0f != Float.POSITIVE_INFINITY) ? 880 : 880): + case ((1.0f != Float.NaN) ? 881 : 881): + case ((Float.MAX_VALUE != Float.NEGATIVE_INFINITY) ? 882 : 882): + case ((Float.MAX_VALUE != -1.0f) ? 883 : 883): + case ((Float.MAX_VALUE != -0.0f) ? 884 : 884): + case ((Float.MAX_VALUE != 0.0f) ? 885 : 885): + case ((Float.MAX_VALUE != Float.MIN_VALUE) ? 886 : 886): + case ((Float.MAX_VALUE != 1.0f) ? 887 : 887): + case ((Float.MAX_VALUE != Float.MAX_VALUE) ? 888 : 888): + case ((Float.MAX_VALUE != Float.POSITIVE_INFINITY) ? 889 : 889): + case ((Float.MAX_VALUE != Float.NaN) ? 890 : 890): + case ((Float.POSITIVE_INFINITY != Float.NEGATIVE_INFINITY) ? 891 : 891): + case ((Float.POSITIVE_INFINITY != -1.0f) ? 892 : 892): + case ((Float.POSITIVE_INFINITY != -0.0f) ? 893 : 893): + case ((Float.POSITIVE_INFINITY != 0.0f) ? 894 : 894): + case ((Float.POSITIVE_INFINITY != Float.MIN_VALUE) ? 895 : 895): + case ((Float.POSITIVE_INFINITY != 1.0f) ? 896 : 896): + case ((Float.POSITIVE_INFINITY != Float.MAX_VALUE) ? 897 : 897): + case ((Float.POSITIVE_INFINITY != Float.POSITIVE_INFINITY) ? 898 : 898): + case ((Float.POSITIVE_INFINITY != Float.NaN) ? 899 : 899): + case ((Float.NaN != Float.NEGATIVE_INFINITY) ? 900 : 900): + case ((Float.NaN != -1.0f) ? 901 : 901): + case ((Float.NaN != -0.0f) ? 902 : 902): + case ((Float.NaN != 0.0f) ? 903 : 903): + case ((Float.NaN != Float.MIN_VALUE) ? 904 : 904): + case ((Float.NaN != 1.0f) ? 905 : 905): + case ((Float.NaN != Float.MAX_VALUE) ? 906 : 906): + case ((Float.NaN != Float.POSITIVE_INFINITY) ? 907 : 907): + case ((Float.NaN != Float.NaN) ? 908 : 908): + default: + } + } + + // -------- + // double tests + static double doublePlus(double x) { return (double) + x; } + static double doubleMinus(double x) { return (double) - x; } + static double doubleTimes(double x, double y) { return (double) (x * y); } + static double doubleDiv(double x, double y) { return (double) (x / y); } + static double doubleRem(double x, double y) { return (double) (x % y); } + static double doubleAdd(double x, double y) { return (double) (x + y); } + static double doubleSub(double x, double y) { return (double) (x - y); } + static boolean doubleLt(double x, double y) { return x < y; } + static boolean doubleGt(double x, double y) { return x > y; } + static boolean doubleLe(double x, double y) { return x <= y; } + static boolean doubleGe(double x, double y) { return x >= y; } + static boolean doubleEq(double x, double y) { return x == y; } + static boolean doubleNe(double x, double y) { return x != y; } + static void doubleTest() { + Tester.checkEqual(doublePlus(Double.NEGATIVE_INFINITY), (double) + Double.NEGATIVE_INFINITY, "(double) + Double.NEGATIVE_INFINITY"); + Tester.checkEqual(doublePlus(-1.0), (double) + -1.0, "(double) + -1.0"); + Tester.checkEqual(doublePlus(-0.0), (double) + -0.0, "(double) + -0.0"); + Tester.checkEqual(doublePlus(0.0), (double) + 0.0, "(double) + 0.0"); + Tester.checkEqual(doublePlus(1.0), (double) + 1.0, "(double) + 1.0"); + Tester.checkEqual(doublePlus(Double.MAX_VALUE), (double) + Double.MAX_VALUE, "(double) + Double.MAX_VALUE"); + Tester.checkEqual(doublePlus(Double.POSITIVE_INFINITY), (double) + Double.POSITIVE_INFINITY, "(double) + Double.POSITIVE_INFINITY"); + Tester.checkEqual(doublePlus(Double.NaN), (double) + Double.NaN, "(double) + Double.NaN"); + Tester.checkEqual(doubleMinus(Double.NEGATIVE_INFINITY), (double) - Double.NEGATIVE_INFINITY, "(double) - Double.NEGATIVE_INFINITY"); + Tester.checkEqual(doubleMinus(-1.0), (double) - -1.0, "(double) - -1.0"); + Tester.checkEqual(doubleMinus(-0.0), (double) - -0.0, "(double) - -0.0"); + Tester.checkEqual(doubleMinus(0.0), (double) - 0.0, "(double) - 0.0"); + Tester.checkEqual(doubleMinus(1.0), (double) - 1.0, "(double) - 1.0"); + Tester.checkEqual(doubleMinus(Double.MAX_VALUE), (double) - Double.MAX_VALUE, "(double) - Double.MAX_VALUE"); + Tester.checkEqual(doubleMinus(Double.POSITIVE_INFINITY), (double) - Double.POSITIVE_INFINITY, "(double) - Double.POSITIVE_INFINITY"); + Tester.checkEqual(doubleMinus(Double.NaN), (double) - Double.NaN, "(double) - Double.NaN"); + Tester.checkEqual(doubleTimes(Double.NEGATIVE_INFINITY, Double.NEGATIVE_INFINITY), (double) (Double.NEGATIVE_INFINITY * Double.NEGATIVE_INFINITY), "(double) (Double.NEGATIVE_INFINITY * Double.NEGATIVE_INFINITY)"); + Tester.checkEqual(doubleTimes(Double.NEGATIVE_INFINITY, -1.0), (double) (Double.NEGATIVE_INFINITY * -1.0), "(double) (Double.NEGATIVE_INFINITY * -1.0)"); + Tester.checkEqual(doubleTimes(Double.NEGATIVE_INFINITY, -0.0), (double) (Double.NEGATIVE_INFINITY * -0.0), "(double) (Double.NEGATIVE_INFINITY * -0.0)"); + Tester.checkEqual(doubleTimes(Double.NEGATIVE_INFINITY, 0.0), (double) (Double.NEGATIVE_INFINITY * 0.0), "(double) (Double.NEGATIVE_INFINITY * 0.0)"); + Tester.checkEqual(doubleTimes(Double.NEGATIVE_INFINITY, 1.0), (double) (Double.NEGATIVE_INFINITY * 1.0), "(double) (Double.NEGATIVE_INFINITY * 1.0)"); + Tester.checkEqual(doubleTimes(Double.NEGATIVE_INFINITY, Double.MAX_VALUE), (double) (Double.NEGATIVE_INFINITY * Double.MAX_VALUE), "(double) (Double.NEGATIVE_INFINITY * Double.MAX_VALUE)"); + Tester.checkEqual(doubleTimes(Double.NEGATIVE_INFINITY, Double.POSITIVE_INFINITY), (double) (Double.NEGATIVE_INFINITY * Double.POSITIVE_INFINITY), "(double) (Double.NEGATIVE_INFINITY * Double.POSITIVE_INFINITY)"); + Tester.checkEqual(doubleTimes(Double.NEGATIVE_INFINITY, Double.NaN), (double) (Double.NEGATIVE_INFINITY * Double.NaN), "(double) (Double.NEGATIVE_INFINITY * Double.NaN)"); + Tester.checkEqual(doubleTimes(-1.0, Double.NEGATIVE_INFINITY), (double) (-1.0 * Double.NEGATIVE_INFINITY), "(double) (-1.0 * Double.NEGATIVE_INFINITY)"); + Tester.checkEqual(doubleTimes(-1.0, -1.0), (double) (-1.0 * -1.0), "(double) (-1.0 * -1.0)"); + Tester.checkEqual(doubleTimes(-1.0, -0.0), (double) (-1.0 * -0.0), "(double) (-1.0 * -0.0)"); + Tester.checkEqual(doubleTimes(-1.0, 0.0), (double) (-1.0 * 0.0), "(double) (-1.0 * 0.0)"); + Tester.checkEqual(doubleTimes(-1.0, 1.0), (double) (-1.0 * 1.0), "(double) (-1.0 * 1.0)"); + Tester.checkEqual(doubleTimes(-1.0, Double.MAX_VALUE), (double) (-1.0 * Double.MAX_VALUE), "(double) (-1.0 * Double.MAX_VALUE)"); + Tester.checkEqual(doubleTimes(-1.0, Double.POSITIVE_INFINITY), (double) (-1.0 * Double.POSITIVE_INFINITY), "(double) (-1.0 * Double.POSITIVE_INFINITY)"); + Tester.checkEqual(doubleTimes(-1.0, Double.NaN), (double) (-1.0 * Double.NaN), "(double) (-1.0 * Double.NaN)"); + Tester.checkEqual(doubleTimes(-0.0, Double.NEGATIVE_INFINITY), (double) (-0.0 * Double.NEGATIVE_INFINITY), "(double) (-0.0 * Double.NEGATIVE_INFINITY)"); + Tester.checkEqual(doubleTimes(-0.0, -1.0), (double) (-0.0 * -1.0), "(double) (-0.0 * -1.0)"); + Tester.checkEqual(doubleTimes(-0.0, -0.0), (double) (-0.0 * -0.0), "(double) (-0.0 * -0.0)"); + Tester.checkEqual(doubleTimes(-0.0, 0.0), (double) (-0.0 * 0.0), "(double) (-0.0 * 0.0)"); + Tester.checkEqual(doubleTimes(-0.0, 1.0), (double) (-0.0 * 1.0), "(double) (-0.0 * 1.0)"); + Tester.checkEqual(doubleTimes(-0.0, Double.MAX_VALUE), (double) (-0.0 * Double.MAX_VALUE), "(double) (-0.0 * Double.MAX_VALUE)"); + Tester.checkEqual(doubleTimes(-0.0, Double.POSITIVE_INFINITY), (double) (-0.0 * Double.POSITIVE_INFINITY), "(double) (-0.0 * Double.POSITIVE_INFINITY)"); + Tester.checkEqual(doubleTimes(-0.0, Double.NaN), (double) (-0.0 * Double.NaN), "(double) (-0.0 * Double.NaN)"); + Tester.checkEqual(doubleTimes(0.0, Double.NEGATIVE_INFINITY), (double) (0.0 * Double.NEGATIVE_INFINITY), "(double) (0.0 * Double.NEGATIVE_INFINITY)"); + Tester.checkEqual(doubleTimes(0.0, -1.0), (double) (0.0 * -1.0), "(double) (0.0 * -1.0)"); + Tester.checkEqual(doubleTimes(0.0, -0.0), (double) (0.0 * -0.0), "(double) (0.0 * -0.0)"); + Tester.checkEqual(doubleTimes(0.0, 0.0), (double) (0.0 * 0.0), "(double) (0.0 * 0.0)"); + Tester.checkEqual(doubleTimes(0.0, 1.0), (double) (0.0 * 1.0), "(double) (0.0 * 1.0)"); + Tester.checkEqual(doubleTimes(0.0, Double.MAX_VALUE), (double) (0.0 * Double.MAX_VALUE), "(double) (0.0 * Double.MAX_VALUE)"); + Tester.checkEqual(doubleTimes(0.0, Double.POSITIVE_INFINITY), (double) (0.0 * Double.POSITIVE_INFINITY), "(double) (0.0 * Double.POSITIVE_INFINITY)"); + Tester.checkEqual(doubleTimes(0.0, Double.NaN), (double) (0.0 * Double.NaN), "(double) (0.0 * Double.NaN)"); + Tester.checkEqual(doubleTimes(1.0, Double.NEGATIVE_INFINITY), (double) (1.0 * Double.NEGATIVE_INFINITY), "(double) (1.0 * Double.NEGATIVE_INFINITY)"); + Tester.checkEqual(doubleTimes(1.0, -1.0), (double) (1.0 * -1.0), "(double) (1.0 * -1.0)"); + Tester.checkEqual(doubleTimes(1.0, -0.0), (double) (1.0 * -0.0), "(double) (1.0 * -0.0)"); + Tester.checkEqual(doubleTimes(1.0, 0.0), (double) (1.0 * 0.0), "(double) (1.0 * 0.0)"); + Tester.checkEqual(doubleTimes(1.0, 1.0), (double) (1.0 * 1.0), "(double) (1.0 * 1.0)"); + Tester.checkEqual(doubleTimes(1.0, Double.MAX_VALUE), (double) (1.0 * Double.MAX_VALUE), "(double) (1.0 * Double.MAX_VALUE)"); + Tester.checkEqual(doubleTimes(1.0, Double.POSITIVE_INFINITY), (double) (1.0 * Double.POSITIVE_INFINITY), "(double) (1.0 * Double.POSITIVE_INFINITY)"); + Tester.checkEqual(doubleTimes(1.0, Double.NaN), (double) (1.0 * Double.NaN), "(double) (1.0 * Double.NaN)"); + Tester.checkEqual(doubleTimes(Double.MAX_VALUE, Double.NEGATIVE_INFINITY), (double) (Double.MAX_VALUE * Double.NEGATIVE_INFINITY), "(double) (Double.MAX_VALUE * Double.NEGATIVE_INFINITY)"); + Tester.checkEqual(doubleTimes(Double.MAX_VALUE, -1.0), (double) (Double.MAX_VALUE * -1.0), "(double) (Double.MAX_VALUE * -1.0)"); + Tester.checkEqual(doubleTimes(Double.MAX_VALUE, -0.0), (double) (Double.MAX_VALUE * -0.0), "(double) (Double.MAX_VALUE * -0.0)"); + Tester.checkEqual(doubleTimes(Double.MAX_VALUE, 0.0), (double) (Double.MAX_VALUE * 0.0), "(double) (Double.MAX_VALUE * 0.0)"); + Tester.checkEqual(doubleTimes(Double.MAX_VALUE, 1.0), (double) (Double.MAX_VALUE * 1.0), "(double) (Double.MAX_VALUE * 1.0)"); + Tester.checkEqual(doubleTimes(Double.MAX_VALUE, Double.MAX_VALUE), (double) (Double.MAX_VALUE * Double.MAX_VALUE), "(double) (Double.MAX_VALUE * Double.MAX_VALUE)"); + Tester.checkEqual(doubleTimes(Double.MAX_VALUE, Double.POSITIVE_INFINITY), (double) (Double.MAX_VALUE * Double.POSITIVE_INFINITY), "(double) (Double.MAX_VALUE * Double.POSITIVE_INFINITY)"); + Tester.checkEqual(doubleTimes(Double.MAX_VALUE, Double.NaN), (double) (Double.MAX_VALUE * Double.NaN), "(double) (Double.MAX_VALUE * Double.NaN)"); + Tester.checkEqual(doubleTimes(Double.POSITIVE_INFINITY, Double.NEGATIVE_INFINITY), (double) (Double.POSITIVE_INFINITY * Double.NEGATIVE_INFINITY), "(double) (Double.POSITIVE_INFINITY * Double.NEGATIVE_INFINITY)"); + Tester.checkEqual(doubleTimes(Double.POSITIVE_INFINITY, -1.0), (double) (Double.POSITIVE_INFINITY * -1.0), "(double) (Double.POSITIVE_INFINITY * -1.0)"); + Tester.checkEqual(doubleTimes(Double.POSITIVE_INFINITY, -0.0), (double) (Double.POSITIVE_INFINITY * -0.0), "(double) (Double.POSITIVE_INFINITY * -0.0)"); + Tester.checkEqual(doubleTimes(Double.POSITIVE_INFINITY, 0.0), (double) (Double.POSITIVE_INFINITY * 0.0), "(double) (Double.POSITIVE_INFINITY * 0.0)"); + Tester.checkEqual(doubleTimes(Double.POSITIVE_INFINITY, 1.0), (double) (Double.POSITIVE_INFINITY * 1.0), "(double) (Double.POSITIVE_INFINITY * 1.0)"); + Tester.checkEqual(doubleTimes(Double.POSITIVE_INFINITY, Double.MAX_VALUE), (double) (Double.POSITIVE_INFINITY * Double.MAX_VALUE), "(double) (Double.POSITIVE_INFINITY * Double.MAX_VALUE)"); + Tester.checkEqual(doubleTimes(Double.POSITIVE_INFINITY, Double.POSITIVE_INFINITY), (double) (Double.POSITIVE_INFINITY * Double.POSITIVE_INFINITY), "(double) (Double.POSITIVE_INFINITY * Double.POSITIVE_INFINITY)"); + Tester.checkEqual(doubleTimes(Double.POSITIVE_INFINITY, Double.NaN), (double) (Double.POSITIVE_INFINITY * Double.NaN), "(double) (Double.POSITIVE_INFINITY * Double.NaN)"); + Tester.checkEqual(doubleTimes(Double.NaN, Double.NEGATIVE_INFINITY), (double) (Double.NaN * Double.NEGATIVE_INFINITY), "(double) (Double.NaN * Double.NEGATIVE_INFINITY)"); + Tester.checkEqual(doubleTimes(Double.NaN, -1.0), (double) (Double.NaN * -1.0), "(double) (Double.NaN * -1.0)"); + Tester.checkEqual(doubleTimes(Double.NaN, -0.0), (double) (Double.NaN * -0.0), "(double) (Double.NaN * -0.0)"); + Tester.checkEqual(doubleTimes(Double.NaN, 0.0), (double) (Double.NaN * 0.0), "(double) (Double.NaN * 0.0)"); + Tester.checkEqual(doubleTimes(Double.NaN, 1.0), (double) (Double.NaN * 1.0), "(double) (Double.NaN * 1.0)"); + Tester.checkEqual(doubleTimes(Double.NaN, Double.MAX_VALUE), (double) (Double.NaN * Double.MAX_VALUE), "(double) (Double.NaN * Double.MAX_VALUE)"); + Tester.checkEqual(doubleTimes(Double.NaN, Double.POSITIVE_INFINITY), (double) (Double.NaN * Double.POSITIVE_INFINITY), "(double) (Double.NaN * Double.POSITIVE_INFINITY)"); + Tester.checkEqual(doubleTimes(Double.NaN, Double.NaN), (double) (Double.NaN * Double.NaN), "(double) (Double.NaN * Double.NaN)"); + Tester.checkEqual(doubleDiv(Double.NEGATIVE_INFINITY, Double.NEGATIVE_INFINITY), (double) (Double.NEGATIVE_INFINITY / Double.NEGATIVE_INFINITY), "(double) (Double.NEGATIVE_INFINITY / Double.NEGATIVE_INFINITY)"); + Tester.checkEqual(doubleDiv(Double.NEGATIVE_INFINITY, -1.0), (double) (Double.NEGATIVE_INFINITY / -1.0), "(double) (Double.NEGATIVE_INFINITY / -1.0)"); + Tester.checkEqual(doubleDiv(Double.NEGATIVE_INFINITY, -0.0), (double) (Double.NEGATIVE_INFINITY / -0.0), "(double) (Double.NEGATIVE_INFINITY / -0.0)"); + Tester.checkEqual(doubleDiv(Double.NEGATIVE_INFINITY, 0.0), (double) (Double.NEGATIVE_INFINITY / 0.0), "(double) (Double.NEGATIVE_INFINITY / 0.0)"); + Tester.checkEqual(doubleDiv(Double.NEGATIVE_INFINITY, 1.0), (double) (Double.NEGATIVE_INFINITY / 1.0), "(double) (Double.NEGATIVE_INFINITY / 1.0)"); + Tester.checkEqual(doubleDiv(Double.NEGATIVE_INFINITY, Double.MAX_VALUE), (double) (Double.NEGATIVE_INFINITY / Double.MAX_VALUE), "(double) (Double.NEGATIVE_INFINITY / Double.MAX_VALUE)"); + Tester.checkEqual(doubleDiv(Double.NEGATIVE_INFINITY, Double.POSITIVE_INFINITY), (double) (Double.NEGATIVE_INFINITY / Double.POSITIVE_INFINITY), "(double) (Double.NEGATIVE_INFINITY / Double.POSITIVE_INFINITY)"); + Tester.checkEqual(doubleDiv(Double.NEGATIVE_INFINITY, Double.NaN), (double) (Double.NEGATIVE_INFINITY / Double.NaN), "(double) (Double.NEGATIVE_INFINITY / Double.NaN)"); + Tester.checkEqual(doubleDiv(-1.0, Double.NEGATIVE_INFINITY), (double) (-1.0 / Double.NEGATIVE_INFINITY), "(double) (-1.0 / Double.NEGATIVE_INFINITY)"); + Tester.checkEqual(doubleDiv(-1.0, -1.0), (double) (-1.0 / -1.0), "(double) (-1.0 / -1.0)"); + Tester.checkEqual(doubleDiv(-1.0, -0.0), (double) (-1.0 / -0.0), "(double) (-1.0 / -0.0)"); + Tester.checkEqual(doubleDiv(-1.0, 0.0), (double) (-1.0 / 0.0), "(double) (-1.0 / 0.0)"); + Tester.checkEqual(doubleDiv(-1.0, 1.0), (double) (-1.0 / 1.0), "(double) (-1.0 / 1.0)"); + Tester.checkEqual(doubleDiv(-1.0, Double.MAX_VALUE), (double) (-1.0 / Double.MAX_VALUE), "(double) (-1.0 / Double.MAX_VALUE)"); + Tester.checkEqual(doubleDiv(-1.0, Double.POSITIVE_INFINITY), (double) (-1.0 / Double.POSITIVE_INFINITY), "(double) (-1.0 / Double.POSITIVE_INFINITY)"); + Tester.checkEqual(doubleDiv(-1.0, Double.NaN), (double) (-1.0 / Double.NaN), "(double) (-1.0 / Double.NaN)"); + Tester.checkEqual(doubleDiv(-0.0, Double.NEGATIVE_INFINITY), (double) (-0.0 / Double.NEGATIVE_INFINITY), "(double) (-0.0 / Double.NEGATIVE_INFINITY)"); + Tester.checkEqual(doubleDiv(-0.0, -1.0), (double) (-0.0 / -1.0), "(double) (-0.0 / -1.0)"); + Tester.checkEqual(doubleDiv(-0.0, -0.0), (double) (-0.0 / -0.0), "(double) (-0.0 / -0.0)"); + Tester.checkEqual(doubleDiv(-0.0, 0.0), (double) (-0.0 / 0.0), "(double) (-0.0 / 0.0)"); + Tester.checkEqual(doubleDiv(-0.0, 1.0), (double) (-0.0 / 1.0), "(double) (-0.0 / 1.0)"); + Tester.checkEqual(doubleDiv(-0.0, Double.MAX_VALUE), (double) (-0.0 / Double.MAX_VALUE), "(double) (-0.0 / Double.MAX_VALUE)"); + Tester.checkEqual(doubleDiv(-0.0, Double.POSITIVE_INFINITY), (double) (-0.0 / Double.POSITIVE_INFINITY), "(double) (-0.0 / Double.POSITIVE_INFINITY)"); + Tester.checkEqual(doubleDiv(-0.0, Double.NaN), (double) (-0.0 / Double.NaN), "(double) (-0.0 / Double.NaN)"); + Tester.checkEqual(doubleDiv(0.0, Double.NEGATIVE_INFINITY), (double) (0.0 / Double.NEGATIVE_INFINITY), "(double) (0.0 / Double.NEGATIVE_INFINITY)"); + Tester.checkEqual(doubleDiv(0.0, -1.0), (double) (0.0 / -1.0), "(double) (0.0 / -1.0)"); + Tester.checkEqual(doubleDiv(0.0, -0.0), (double) (0.0 / -0.0), "(double) (0.0 / -0.0)"); + Tester.checkEqual(doubleDiv(0.0, 0.0), (double) (0.0 / 0.0), "(double) (0.0 / 0.0)"); + Tester.checkEqual(doubleDiv(0.0, 1.0), (double) (0.0 / 1.0), "(double) (0.0 / 1.0)"); + Tester.checkEqual(doubleDiv(0.0, Double.MAX_VALUE), (double) (0.0 / Double.MAX_VALUE), "(double) (0.0 / Double.MAX_VALUE)"); + Tester.checkEqual(doubleDiv(0.0, Double.POSITIVE_INFINITY), (double) (0.0 / Double.POSITIVE_INFINITY), "(double) (0.0 / Double.POSITIVE_INFINITY)"); + Tester.checkEqual(doubleDiv(0.0, Double.NaN), (double) (0.0 / Double.NaN), "(double) (0.0 / Double.NaN)"); + Tester.checkEqual(doubleDiv(1.0, Double.NEGATIVE_INFINITY), (double) (1.0 / Double.NEGATIVE_INFINITY), "(double) (1.0 / Double.NEGATIVE_INFINITY)"); + Tester.checkEqual(doubleDiv(1.0, -1.0), (double) (1.0 / -1.0), "(double) (1.0 / -1.0)"); + Tester.checkEqual(doubleDiv(1.0, -0.0), (double) (1.0 / -0.0), "(double) (1.0 / -0.0)"); + Tester.checkEqual(doubleDiv(1.0, 0.0), (double) (1.0 / 0.0), "(double) (1.0 / 0.0)"); + Tester.checkEqual(doubleDiv(1.0, 1.0), (double) (1.0 / 1.0), "(double) (1.0 / 1.0)"); + Tester.checkEqual(doubleDiv(1.0, Double.MAX_VALUE), (double) (1.0 / Double.MAX_VALUE), "(double) (1.0 / Double.MAX_VALUE)"); + Tester.checkEqual(doubleDiv(1.0, Double.POSITIVE_INFINITY), (double) (1.0 / Double.POSITIVE_INFINITY), "(double) (1.0 / Double.POSITIVE_INFINITY)"); + Tester.checkEqual(doubleDiv(1.0, Double.NaN), (double) (1.0 / Double.NaN), "(double) (1.0 / Double.NaN)"); + Tester.checkEqual(doubleDiv(Double.MAX_VALUE, Double.NEGATIVE_INFINITY), (double) (Double.MAX_VALUE / Double.NEGATIVE_INFINITY), "(double) (Double.MAX_VALUE / Double.NEGATIVE_INFINITY)"); + Tester.checkEqual(doubleDiv(Double.MAX_VALUE, -1.0), (double) (Double.MAX_VALUE / -1.0), "(double) (Double.MAX_VALUE / -1.0)"); + Tester.checkEqual(doubleDiv(Double.MAX_VALUE, -0.0), (double) (Double.MAX_VALUE / -0.0), "(double) (Double.MAX_VALUE / -0.0)"); + Tester.checkEqual(doubleDiv(Double.MAX_VALUE, 0.0), (double) (Double.MAX_VALUE / 0.0), "(double) (Double.MAX_VALUE / 0.0)"); + Tester.checkEqual(doubleDiv(Double.MAX_VALUE, 1.0), (double) (Double.MAX_VALUE / 1.0), "(double) (Double.MAX_VALUE / 1.0)"); + Tester.checkEqual(doubleDiv(Double.MAX_VALUE, Double.MAX_VALUE), (double) (Double.MAX_VALUE / Double.MAX_VALUE), "(double) (Double.MAX_VALUE / Double.MAX_VALUE)"); + Tester.checkEqual(doubleDiv(Double.MAX_VALUE, Double.POSITIVE_INFINITY), (double) (Double.MAX_VALUE / Double.POSITIVE_INFINITY), "(double) (Double.MAX_VALUE / Double.POSITIVE_INFINITY)"); + Tester.checkEqual(doubleDiv(Double.MAX_VALUE, Double.NaN), (double) (Double.MAX_VALUE / Double.NaN), "(double) (Double.MAX_VALUE / Double.NaN)"); + Tester.checkEqual(doubleDiv(Double.POSITIVE_INFINITY, Double.NEGATIVE_INFINITY), (double) (Double.POSITIVE_INFINITY / Double.NEGATIVE_INFINITY), "(double) (Double.POSITIVE_INFINITY / Double.NEGATIVE_INFINITY)"); + Tester.checkEqual(doubleDiv(Double.POSITIVE_INFINITY, -1.0), (double) (Double.POSITIVE_INFINITY / -1.0), "(double) (Double.POSITIVE_INFINITY / -1.0)"); + Tester.checkEqual(doubleDiv(Double.POSITIVE_INFINITY, -0.0), (double) (Double.POSITIVE_INFINITY / -0.0), "(double) (Double.POSITIVE_INFINITY / -0.0)"); + Tester.checkEqual(doubleDiv(Double.POSITIVE_INFINITY, 0.0), (double) (Double.POSITIVE_INFINITY / 0.0), "(double) (Double.POSITIVE_INFINITY / 0.0)"); + Tester.checkEqual(doubleDiv(Double.POSITIVE_INFINITY, 1.0), (double) (Double.POSITIVE_INFINITY / 1.0), "(double) (Double.POSITIVE_INFINITY / 1.0)"); + Tester.checkEqual(doubleDiv(Double.POSITIVE_INFINITY, Double.MAX_VALUE), (double) (Double.POSITIVE_INFINITY / Double.MAX_VALUE), "(double) (Double.POSITIVE_INFINITY / Double.MAX_VALUE)"); + Tester.checkEqual(doubleDiv(Double.POSITIVE_INFINITY, Double.POSITIVE_INFINITY), (double) (Double.POSITIVE_INFINITY / Double.POSITIVE_INFINITY), "(double) (Double.POSITIVE_INFINITY / Double.POSITIVE_INFINITY)"); + Tester.checkEqual(doubleDiv(Double.POSITIVE_INFINITY, Double.NaN), (double) (Double.POSITIVE_INFINITY / Double.NaN), "(double) (Double.POSITIVE_INFINITY / Double.NaN)"); + Tester.checkEqual(doubleDiv(Double.NaN, Double.NEGATIVE_INFINITY), (double) (Double.NaN / Double.NEGATIVE_INFINITY), "(double) (Double.NaN / Double.NEGATIVE_INFINITY)"); + Tester.checkEqual(doubleDiv(Double.NaN, -1.0), (double) (Double.NaN / -1.0), "(double) (Double.NaN / -1.0)"); + Tester.checkEqual(doubleDiv(Double.NaN, -0.0), (double) (Double.NaN / -0.0), "(double) (Double.NaN / -0.0)"); + Tester.checkEqual(doubleDiv(Double.NaN, 0.0), (double) (Double.NaN / 0.0), "(double) (Double.NaN / 0.0)"); + Tester.checkEqual(doubleDiv(Double.NaN, 1.0), (double) (Double.NaN / 1.0), "(double) (Double.NaN / 1.0)"); + Tester.checkEqual(doubleDiv(Double.NaN, Double.MAX_VALUE), (double) (Double.NaN / Double.MAX_VALUE), "(double) (Double.NaN / Double.MAX_VALUE)"); + Tester.checkEqual(doubleDiv(Double.NaN, Double.POSITIVE_INFINITY), (double) (Double.NaN / Double.POSITIVE_INFINITY), "(double) (Double.NaN / Double.POSITIVE_INFINITY)"); + Tester.checkEqual(doubleDiv(Double.NaN, Double.NaN), (double) (Double.NaN / Double.NaN), "(double) (Double.NaN / Double.NaN)"); + Tester.checkEqual(doubleRem(Double.NEGATIVE_INFINITY, Double.NEGATIVE_INFINITY), (double) (Double.NEGATIVE_INFINITY % Double.NEGATIVE_INFINITY), "(double) (Double.NEGATIVE_INFINITY % Double.NEGATIVE_INFINITY)"); + Tester.checkEqual(doubleRem(Double.NEGATIVE_INFINITY, -1.0), (double) (Double.NEGATIVE_INFINITY % -1.0), "(double) (Double.NEGATIVE_INFINITY % -1.0)"); + Tester.checkEqual(doubleRem(Double.NEGATIVE_INFINITY, -0.0), (double) (Double.NEGATIVE_INFINITY % -0.0), "(double) (Double.NEGATIVE_INFINITY % -0.0)"); + Tester.checkEqual(doubleRem(Double.NEGATIVE_INFINITY, 0.0), (double) (Double.NEGATIVE_INFINITY % 0.0), "(double) (Double.NEGATIVE_INFINITY % 0.0)"); + Tester.checkEqual(doubleRem(Double.NEGATIVE_INFINITY, 1.0), (double) (Double.NEGATIVE_INFINITY % 1.0), "(double) (Double.NEGATIVE_INFINITY % 1.0)"); + Tester.checkEqual(doubleRem(Double.NEGATIVE_INFINITY, Double.MAX_VALUE), (double) (Double.NEGATIVE_INFINITY % Double.MAX_VALUE), "(double) (Double.NEGATIVE_INFINITY % Double.MAX_VALUE)"); + Tester.checkEqual(doubleRem(Double.NEGATIVE_INFINITY, Double.POSITIVE_INFINITY), (double) (Double.NEGATIVE_INFINITY % Double.POSITIVE_INFINITY), "(double) (Double.NEGATIVE_INFINITY % Double.POSITIVE_INFINITY)"); + Tester.checkEqual(doubleRem(Double.NEGATIVE_INFINITY, Double.NaN), (double) (Double.NEGATIVE_INFINITY % Double.NaN), "(double) (Double.NEGATIVE_INFINITY % Double.NaN)"); + Tester.checkEqual(doubleRem(-1.0, Double.NEGATIVE_INFINITY), (double) (-1.0 % Double.NEGATIVE_INFINITY), "(double) (-1.0 % Double.NEGATIVE_INFINITY)"); + Tester.checkEqual(doubleRem(-1.0, -1.0), (double) (-1.0 % -1.0), "(double) (-1.0 % -1.0)"); + Tester.checkEqual(doubleRem(-1.0, -0.0), (double) (-1.0 % -0.0), "(double) (-1.0 % -0.0)"); + Tester.checkEqual(doubleRem(-1.0, 0.0), (double) (-1.0 % 0.0), "(double) (-1.0 % 0.0)"); + Tester.checkEqual(doubleRem(-1.0, 1.0), (double) (-1.0 % 1.0), "(double) (-1.0 % 1.0)"); + Tester.checkEqual(doubleRem(-1.0, Double.MAX_VALUE), (double) (-1.0 % Double.MAX_VALUE), "(double) (-1.0 % Double.MAX_VALUE)"); + Tester.checkEqual(doubleRem(-1.0, Double.POSITIVE_INFINITY), (double) (-1.0 % Double.POSITIVE_INFINITY), "(double) (-1.0 % Double.POSITIVE_INFINITY)"); + Tester.checkEqual(doubleRem(-1.0, Double.NaN), (double) (-1.0 % Double.NaN), "(double) (-1.0 % Double.NaN)"); + Tester.checkEqual(doubleRem(-0.0, Double.NEGATIVE_INFINITY), (double) (-0.0 % Double.NEGATIVE_INFINITY), "(double) (-0.0 % Double.NEGATIVE_INFINITY)"); + Tester.checkEqual(doubleRem(-0.0, -1.0), (double) (-0.0 % -1.0), "(double) (-0.0 % -1.0)"); + Tester.checkEqual(doubleRem(-0.0, -0.0), (double) (-0.0 % -0.0), "(double) (-0.0 % -0.0)"); + Tester.checkEqual(doubleRem(-0.0, 0.0), (double) (-0.0 % 0.0), "(double) (-0.0 % 0.0)"); + Tester.checkEqual(doubleRem(-0.0, 1.0), (double) (-0.0 % 1.0), "(double) (-0.0 % 1.0)"); + Tester.checkEqual(doubleRem(-0.0, Double.MAX_VALUE), (double) (-0.0 % Double.MAX_VALUE), "(double) (-0.0 % Double.MAX_VALUE)"); + Tester.checkEqual(doubleRem(-0.0, Double.POSITIVE_INFINITY), (double) (-0.0 % Double.POSITIVE_INFINITY), "(double) (-0.0 % Double.POSITIVE_INFINITY)"); + Tester.checkEqual(doubleRem(-0.0, Double.NaN), (double) (-0.0 % Double.NaN), "(double) (-0.0 % Double.NaN)"); + Tester.checkEqual(doubleRem(0.0, Double.NEGATIVE_INFINITY), (double) (0.0 % Double.NEGATIVE_INFINITY), "(double) (0.0 % Double.NEGATIVE_INFINITY)"); + Tester.checkEqual(doubleRem(0.0, -1.0), (double) (0.0 % -1.0), "(double) (0.0 % -1.0)"); + Tester.checkEqual(doubleRem(0.0, -0.0), (double) (0.0 % -0.0), "(double) (0.0 % -0.0)"); + Tester.checkEqual(doubleRem(0.0, 0.0), (double) (0.0 % 0.0), "(double) (0.0 % 0.0)"); + Tester.checkEqual(doubleRem(0.0, 1.0), (double) (0.0 % 1.0), "(double) (0.0 % 1.0)"); + Tester.checkEqual(doubleRem(0.0, Double.MAX_VALUE), (double) (0.0 % Double.MAX_VALUE), "(double) (0.0 % Double.MAX_VALUE)"); + Tester.checkEqual(doubleRem(0.0, Double.POSITIVE_INFINITY), (double) (0.0 % Double.POSITIVE_INFINITY), "(double) (0.0 % Double.POSITIVE_INFINITY)"); + Tester.checkEqual(doubleRem(0.0, Double.NaN), (double) (0.0 % Double.NaN), "(double) (0.0 % Double.NaN)"); + Tester.checkEqual(doubleRem(1.0, Double.NEGATIVE_INFINITY), (double) (1.0 % Double.NEGATIVE_INFINITY), "(double) (1.0 % Double.NEGATIVE_INFINITY)"); + Tester.checkEqual(doubleRem(1.0, -1.0), (double) (1.0 % -1.0), "(double) (1.0 % -1.0)"); + Tester.checkEqual(doubleRem(1.0, -0.0), (double) (1.0 % -0.0), "(double) (1.0 % -0.0)"); + Tester.checkEqual(doubleRem(1.0, 0.0), (double) (1.0 % 0.0), "(double) (1.0 % 0.0)"); + Tester.checkEqual(doubleRem(1.0, 1.0), (double) (1.0 % 1.0), "(double) (1.0 % 1.0)"); + Tester.checkEqual(doubleRem(1.0, Double.MAX_VALUE), (double) (1.0 % Double.MAX_VALUE), "(double) (1.0 % Double.MAX_VALUE)"); + Tester.checkEqual(doubleRem(1.0, Double.POSITIVE_INFINITY), (double) (1.0 % Double.POSITIVE_INFINITY), "(double) (1.0 % Double.POSITIVE_INFINITY)"); + Tester.checkEqual(doubleRem(1.0, Double.NaN), (double) (1.0 % Double.NaN), "(double) (1.0 % Double.NaN)"); + Tester.checkEqual(doubleRem(Double.MAX_VALUE, Double.NEGATIVE_INFINITY), (double) (Double.MAX_VALUE % Double.NEGATIVE_INFINITY), "(double) (Double.MAX_VALUE % Double.NEGATIVE_INFINITY)"); + Tester.checkEqual(doubleRem(Double.MAX_VALUE, -1.0), (double) (Double.MAX_VALUE % -1.0), "(double) (Double.MAX_VALUE % -1.0)"); + Tester.checkEqual(doubleRem(Double.MAX_VALUE, -0.0), (double) (Double.MAX_VALUE % -0.0), "(double) (Double.MAX_VALUE % -0.0)"); + Tester.checkEqual(doubleRem(Double.MAX_VALUE, 0.0), (double) (Double.MAX_VALUE % 0.0), "(double) (Double.MAX_VALUE % 0.0)"); + Tester.checkEqual(doubleRem(Double.MAX_VALUE, 1.0), (double) (Double.MAX_VALUE % 1.0), "(double) (Double.MAX_VALUE % 1.0)"); + Tester.checkEqual(doubleRem(Double.MAX_VALUE, Double.MAX_VALUE), (double) (Double.MAX_VALUE % Double.MAX_VALUE), "(double) (Double.MAX_VALUE % Double.MAX_VALUE)"); + Tester.checkEqual(doubleRem(Double.MAX_VALUE, Double.POSITIVE_INFINITY), (double) (Double.MAX_VALUE % Double.POSITIVE_INFINITY), "(double) (Double.MAX_VALUE % Double.POSITIVE_INFINITY)"); + Tester.checkEqual(doubleRem(Double.MAX_VALUE, Double.NaN), (double) (Double.MAX_VALUE % Double.NaN), "(double) (Double.MAX_VALUE % Double.NaN)"); + Tester.checkEqual(doubleRem(Double.POSITIVE_INFINITY, Double.NEGATIVE_INFINITY), (double) (Double.POSITIVE_INFINITY % Double.NEGATIVE_INFINITY), "(double) (Double.POSITIVE_INFINITY % Double.NEGATIVE_INFINITY)"); + Tester.checkEqual(doubleRem(Double.POSITIVE_INFINITY, -1.0), (double) (Double.POSITIVE_INFINITY % -1.0), "(double) (Double.POSITIVE_INFINITY % -1.0)"); + Tester.checkEqual(doubleRem(Double.POSITIVE_INFINITY, -0.0), (double) (Double.POSITIVE_INFINITY % -0.0), "(double) (Double.POSITIVE_INFINITY % -0.0)"); + Tester.checkEqual(doubleRem(Double.POSITIVE_INFINITY, 0.0), (double) (Double.POSITIVE_INFINITY % 0.0), "(double) (Double.POSITIVE_INFINITY % 0.0)"); + Tester.checkEqual(doubleRem(Double.POSITIVE_INFINITY, 1.0), (double) (Double.POSITIVE_INFINITY % 1.0), "(double) (Double.POSITIVE_INFINITY % 1.0)"); + Tester.checkEqual(doubleRem(Double.POSITIVE_INFINITY, Double.MAX_VALUE), (double) (Double.POSITIVE_INFINITY % Double.MAX_VALUE), "(double) (Double.POSITIVE_INFINITY % Double.MAX_VALUE)"); + Tester.checkEqual(doubleRem(Double.POSITIVE_INFINITY, Double.POSITIVE_INFINITY), (double) (Double.POSITIVE_INFINITY % Double.POSITIVE_INFINITY), "(double) (Double.POSITIVE_INFINITY % Double.POSITIVE_INFINITY)"); + Tester.checkEqual(doubleRem(Double.POSITIVE_INFINITY, Double.NaN), (double) (Double.POSITIVE_INFINITY % Double.NaN), "(double) (Double.POSITIVE_INFINITY % Double.NaN)"); + Tester.checkEqual(doubleRem(Double.NaN, Double.NEGATIVE_INFINITY), (double) (Double.NaN % Double.NEGATIVE_INFINITY), "(double) (Double.NaN % Double.NEGATIVE_INFINITY)"); + Tester.checkEqual(doubleRem(Double.NaN, -1.0), (double) (Double.NaN % -1.0), "(double) (Double.NaN % -1.0)"); + Tester.checkEqual(doubleRem(Double.NaN, -0.0), (double) (Double.NaN % -0.0), "(double) (Double.NaN % -0.0)"); + Tester.checkEqual(doubleRem(Double.NaN, 0.0), (double) (Double.NaN % 0.0), "(double) (Double.NaN % 0.0)"); + Tester.checkEqual(doubleRem(Double.NaN, 1.0), (double) (Double.NaN % 1.0), "(double) (Double.NaN % 1.0)"); + Tester.checkEqual(doubleRem(Double.NaN, Double.MAX_VALUE), (double) (Double.NaN % Double.MAX_VALUE), "(double) (Double.NaN % Double.MAX_VALUE)"); + Tester.checkEqual(doubleRem(Double.NaN, Double.POSITIVE_INFINITY), (double) (Double.NaN % Double.POSITIVE_INFINITY), "(double) (Double.NaN % Double.POSITIVE_INFINITY)"); + Tester.checkEqual(doubleRem(Double.NaN, Double.NaN), (double) (Double.NaN % Double.NaN), "(double) (Double.NaN % Double.NaN)"); + Tester.checkEqual(doubleAdd(Double.NEGATIVE_INFINITY, Double.NEGATIVE_INFINITY), (double) (Double.NEGATIVE_INFINITY + Double.NEGATIVE_INFINITY), "(double) (Double.NEGATIVE_INFINITY + Double.NEGATIVE_INFINITY)"); + Tester.checkEqual(doubleAdd(Double.NEGATIVE_INFINITY, -1.0), (double) (Double.NEGATIVE_INFINITY + -1.0), "(double) (Double.NEGATIVE_INFINITY + -1.0)"); + Tester.checkEqual(doubleAdd(Double.NEGATIVE_INFINITY, -0.0), (double) (Double.NEGATIVE_INFINITY + -0.0), "(double) (Double.NEGATIVE_INFINITY + -0.0)"); + Tester.checkEqual(doubleAdd(Double.NEGATIVE_INFINITY, 0.0), (double) (Double.NEGATIVE_INFINITY + 0.0), "(double) (Double.NEGATIVE_INFINITY + 0.0)"); + Tester.checkEqual(doubleAdd(Double.NEGATIVE_INFINITY, 1.0), (double) (Double.NEGATIVE_INFINITY + 1.0), "(double) (Double.NEGATIVE_INFINITY + 1.0)"); + Tester.checkEqual(doubleAdd(Double.NEGATIVE_INFINITY, Double.MAX_VALUE), (double) (Double.NEGATIVE_INFINITY + Double.MAX_VALUE), "(double) (Double.NEGATIVE_INFINITY + Double.MAX_VALUE)"); + Tester.checkEqual(doubleAdd(Double.NEGATIVE_INFINITY, Double.POSITIVE_INFINITY), (double) (Double.NEGATIVE_INFINITY + Double.POSITIVE_INFINITY), "(double) (Double.NEGATIVE_INFINITY + Double.POSITIVE_INFINITY)"); + Tester.checkEqual(doubleAdd(Double.NEGATIVE_INFINITY, Double.NaN), (double) (Double.NEGATIVE_INFINITY + Double.NaN), "(double) (Double.NEGATIVE_INFINITY + Double.NaN)"); + Tester.checkEqual(doubleAdd(-1.0, Double.NEGATIVE_INFINITY), (double) (-1.0 + Double.NEGATIVE_INFINITY), "(double) (-1.0 + Double.NEGATIVE_INFINITY)"); + Tester.checkEqual(doubleAdd(-1.0, -1.0), (double) (-1.0 + -1.0), "(double) (-1.0 + -1.0)"); + Tester.checkEqual(doubleAdd(-1.0, -0.0), (double) (-1.0 + -0.0), "(double) (-1.0 + -0.0)"); + Tester.checkEqual(doubleAdd(-1.0, 0.0), (double) (-1.0 + 0.0), "(double) (-1.0 + 0.0)"); + Tester.checkEqual(doubleAdd(-1.0, 1.0), (double) (-1.0 + 1.0), "(double) (-1.0 + 1.0)"); + Tester.checkEqual(doubleAdd(-1.0, Double.MAX_VALUE), (double) (-1.0 + Double.MAX_VALUE), "(double) (-1.0 + Double.MAX_VALUE)"); + Tester.checkEqual(doubleAdd(-1.0, Double.POSITIVE_INFINITY), (double) (-1.0 + Double.POSITIVE_INFINITY), "(double) (-1.0 + Double.POSITIVE_INFINITY)"); + Tester.checkEqual(doubleAdd(-1.0, Double.NaN), (double) (-1.0 + Double.NaN), "(double) (-1.0 + Double.NaN)"); + Tester.checkEqual(doubleAdd(-0.0, Double.NEGATIVE_INFINITY), (double) (-0.0 + Double.NEGATIVE_INFINITY), "(double) (-0.0 + Double.NEGATIVE_INFINITY)"); + Tester.checkEqual(doubleAdd(-0.0, -1.0), (double) (-0.0 + -1.0), "(double) (-0.0 + -1.0)"); + Tester.checkEqual(doubleAdd(-0.0, -0.0), (double) (-0.0 + -0.0), "(double) (-0.0 + -0.0)"); + Tester.checkEqual(doubleAdd(-0.0, 0.0), (double) (-0.0 + 0.0), "(double) (-0.0 + 0.0)"); + Tester.checkEqual(doubleAdd(-0.0, 1.0), (double) (-0.0 + 1.0), "(double) (-0.0 + 1.0)"); + Tester.checkEqual(doubleAdd(-0.0, Double.MAX_VALUE), (double) (-0.0 + Double.MAX_VALUE), "(double) (-0.0 + Double.MAX_VALUE)"); + Tester.checkEqual(doubleAdd(-0.0, Double.POSITIVE_INFINITY), (double) (-0.0 + Double.POSITIVE_INFINITY), "(double) (-0.0 + Double.POSITIVE_INFINITY)"); + Tester.checkEqual(doubleAdd(-0.0, Double.NaN), (double) (-0.0 + Double.NaN), "(double) (-0.0 + Double.NaN)"); + Tester.checkEqual(doubleAdd(0.0, Double.NEGATIVE_INFINITY), (double) (0.0 + Double.NEGATIVE_INFINITY), "(double) (0.0 + Double.NEGATIVE_INFINITY)"); + Tester.checkEqual(doubleAdd(0.0, -1.0), (double) (0.0 + -1.0), "(double) (0.0 + -1.0)"); + Tester.checkEqual(doubleAdd(0.0, -0.0), (double) (0.0 + -0.0), "(double) (0.0 + -0.0)"); + Tester.checkEqual(doubleAdd(0.0, 0.0), (double) (0.0 + 0.0), "(double) (0.0 + 0.0)"); + Tester.checkEqual(doubleAdd(0.0, 1.0), (double) (0.0 + 1.0), "(double) (0.0 + 1.0)"); + Tester.checkEqual(doubleAdd(0.0, Double.MAX_VALUE), (double) (0.0 + Double.MAX_VALUE), "(double) (0.0 + Double.MAX_VALUE)"); + Tester.checkEqual(doubleAdd(0.0, Double.POSITIVE_INFINITY), (double) (0.0 + Double.POSITIVE_INFINITY), "(double) (0.0 + Double.POSITIVE_INFINITY)"); + Tester.checkEqual(doubleAdd(0.0, Double.NaN), (double) (0.0 + Double.NaN), "(double) (0.0 + Double.NaN)"); + Tester.checkEqual(doubleAdd(1.0, Double.NEGATIVE_INFINITY), (double) (1.0 + Double.NEGATIVE_INFINITY), "(double) (1.0 + Double.NEGATIVE_INFINITY)"); + Tester.checkEqual(doubleAdd(1.0, -1.0), (double) (1.0 + -1.0), "(double) (1.0 + -1.0)"); + Tester.checkEqual(doubleAdd(1.0, -0.0), (double) (1.0 + -0.0), "(double) (1.0 + -0.0)"); + Tester.checkEqual(doubleAdd(1.0, 0.0), (double) (1.0 + 0.0), "(double) (1.0 + 0.0)"); + Tester.checkEqual(doubleAdd(1.0, 1.0), (double) (1.0 + 1.0), "(double) (1.0 + 1.0)"); + Tester.checkEqual(doubleAdd(1.0, Double.MAX_VALUE), (double) (1.0 + Double.MAX_VALUE), "(double) (1.0 + Double.MAX_VALUE)"); + Tester.checkEqual(doubleAdd(1.0, Double.POSITIVE_INFINITY), (double) (1.0 + Double.POSITIVE_INFINITY), "(double) (1.0 + Double.POSITIVE_INFINITY)"); + Tester.checkEqual(doubleAdd(1.0, Double.NaN), (double) (1.0 + Double.NaN), "(double) (1.0 + Double.NaN)"); + Tester.checkEqual(doubleAdd(Double.MAX_VALUE, Double.NEGATIVE_INFINITY), (double) (Double.MAX_VALUE + Double.NEGATIVE_INFINITY), "(double) (Double.MAX_VALUE + Double.NEGATIVE_INFINITY)"); + Tester.checkEqual(doubleAdd(Double.MAX_VALUE, -1.0), (double) (Double.MAX_VALUE + -1.0), "(double) (Double.MAX_VALUE + -1.0)"); + Tester.checkEqual(doubleAdd(Double.MAX_VALUE, -0.0), (double) (Double.MAX_VALUE + -0.0), "(double) (Double.MAX_VALUE + -0.0)"); + Tester.checkEqual(doubleAdd(Double.MAX_VALUE, 0.0), (double) (Double.MAX_VALUE + 0.0), "(double) (Double.MAX_VALUE + 0.0)"); + Tester.checkEqual(doubleAdd(Double.MAX_VALUE, 1.0), (double) (Double.MAX_VALUE + 1.0), "(double) (Double.MAX_VALUE + 1.0)"); + Tester.checkEqual(doubleAdd(Double.MAX_VALUE, Double.MAX_VALUE), (double) (Double.MAX_VALUE + Double.MAX_VALUE), "(double) (Double.MAX_VALUE + Double.MAX_VALUE)"); + Tester.checkEqual(doubleAdd(Double.MAX_VALUE, Double.POSITIVE_INFINITY), (double) (Double.MAX_VALUE + Double.POSITIVE_INFINITY), "(double) (Double.MAX_VALUE + Double.POSITIVE_INFINITY)"); + Tester.checkEqual(doubleAdd(Double.MAX_VALUE, Double.NaN), (double) (Double.MAX_VALUE + Double.NaN), "(double) (Double.MAX_VALUE + Double.NaN)"); + Tester.checkEqual(doubleAdd(Double.POSITIVE_INFINITY, Double.NEGATIVE_INFINITY), (double) (Double.POSITIVE_INFINITY + Double.NEGATIVE_INFINITY), "(double) (Double.POSITIVE_INFINITY + Double.NEGATIVE_INFINITY)"); + Tester.checkEqual(doubleAdd(Double.POSITIVE_INFINITY, -1.0), (double) (Double.POSITIVE_INFINITY + -1.0), "(double) (Double.POSITIVE_INFINITY + -1.0)"); + Tester.checkEqual(doubleAdd(Double.POSITIVE_INFINITY, -0.0), (double) (Double.POSITIVE_INFINITY + -0.0), "(double) (Double.POSITIVE_INFINITY + -0.0)"); + Tester.checkEqual(doubleAdd(Double.POSITIVE_INFINITY, 0.0), (double) (Double.POSITIVE_INFINITY + 0.0), "(double) (Double.POSITIVE_INFINITY + 0.0)"); + Tester.checkEqual(doubleAdd(Double.POSITIVE_INFINITY, 1.0), (double) (Double.POSITIVE_INFINITY + 1.0), "(double) (Double.POSITIVE_INFINITY + 1.0)"); + Tester.checkEqual(doubleAdd(Double.POSITIVE_INFINITY, Double.MAX_VALUE), (double) (Double.POSITIVE_INFINITY + Double.MAX_VALUE), "(double) (Double.POSITIVE_INFINITY + Double.MAX_VALUE)"); + Tester.checkEqual(doubleAdd(Double.POSITIVE_INFINITY, Double.POSITIVE_INFINITY), (double) (Double.POSITIVE_INFINITY + Double.POSITIVE_INFINITY), "(double) (Double.POSITIVE_INFINITY + Double.POSITIVE_INFINITY)"); + Tester.checkEqual(doubleAdd(Double.POSITIVE_INFINITY, Double.NaN), (double) (Double.POSITIVE_INFINITY + Double.NaN), "(double) (Double.POSITIVE_INFINITY + Double.NaN)"); + Tester.checkEqual(doubleAdd(Double.NaN, Double.NEGATIVE_INFINITY), (double) (Double.NaN + Double.NEGATIVE_INFINITY), "(double) (Double.NaN + Double.NEGATIVE_INFINITY)"); + Tester.checkEqual(doubleAdd(Double.NaN, -1.0), (double) (Double.NaN + -1.0), "(double) (Double.NaN + -1.0)"); + Tester.checkEqual(doubleAdd(Double.NaN, -0.0), (double) (Double.NaN + -0.0), "(double) (Double.NaN + -0.0)"); + Tester.checkEqual(doubleAdd(Double.NaN, 0.0), (double) (Double.NaN + 0.0), "(double) (Double.NaN + 0.0)"); + Tester.checkEqual(doubleAdd(Double.NaN, 1.0), (double) (Double.NaN + 1.0), "(double) (Double.NaN + 1.0)"); + Tester.checkEqual(doubleAdd(Double.NaN, Double.MAX_VALUE), (double) (Double.NaN + Double.MAX_VALUE), "(double) (Double.NaN + Double.MAX_VALUE)"); + Tester.checkEqual(doubleAdd(Double.NaN, Double.POSITIVE_INFINITY), (double) (Double.NaN + Double.POSITIVE_INFINITY), "(double) (Double.NaN + Double.POSITIVE_INFINITY)"); + Tester.checkEqual(doubleAdd(Double.NaN, Double.NaN), (double) (Double.NaN + Double.NaN), "(double) (Double.NaN + Double.NaN)"); + Tester.checkEqual(doubleSub(Double.NEGATIVE_INFINITY, Double.NEGATIVE_INFINITY), (double) (Double.NEGATIVE_INFINITY - Double.NEGATIVE_INFINITY), "(double) (Double.NEGATIVE_INFINITY - Double.NEGATIVE_INFINITY)"); + Tester.checkEqual(doubleSub(Double.NEGATIVE_INFINITY, -1.0), (double) (Double.NEGATIVE_INFINITY - -1.0), "(double) (Double.NEGATIVE_INFINITY - -1.0)"); + Tester.checkEqual(doubleSub(Double.NEGATIVE_INFINITY, -0.0), (double) (Double.NEGATIVE_INFINITY - -0.0), "(double) (Double.NEGATIVE_INFINITY - -0.0)"); + Tester.checkEqual(doubleSub(Double.NEGATIVE_INFINITY, 0.0), (double) (Double.NEGATIVE_INFINITY - 0.0), "(double) (Double.NEGATIVE_INFINITY - 0.0)"); + Tester.checkEqual(doubleSub(Double.NEGATIVE_INFINITY, 1.0), (double) (Double.NEGATIVE_INFINITY - 1.0), "(double) (Double.NEGATIVE_INFINITY - 1.0)"); + Tester.checkEqual(doubleSub(Double.NEGATIVE_INFINITY, Double.MAX_VALUE), (double) (Double.NEGATIVE_INFINITY - Double.MAX_VALUE), "(double) (Double.NEGATIVE_INFINITY - Double.MAX_VALUE)"); + Tester.checkEqual(doubleSub(Double.NEGATIVE_INFINITY, Double.POSITIVE_INFINITY), (double) (Double.NEGATIVE_INFINITY - Double.POSITIVE_INFINITY), "(double) (Double.NEGATIVE_INFINITY - Double.POSITIVE_INFINITY)"); + Tester.checkEqual(doubleSub(Double.NEGATIVE_INFINITY, Double.NaN), (double) (Double.NEGATIVE_INFINITY - Double.NaN), "(double) (Double.NEGATIVE_INFINITY - Double.NaN)"); + Tester.checkEqual(doubleSub(-1.0, Double.NEGATIVE_INFINITY), (double) (-1.0 - Double.NEGATIVE_INFINITY), "(double) (-1.0 - Double.NEGATIVE_INFINITY)"); + Tester.checkEqual(doubleSub(-1.0, -1.0), (double) (-1.0 - -1.0), "(double) (-1.0 - -1.0)"); + Tester.checkEqual(doubleSub(-1.0, -0.0), (double) (-1.0 - -0.0), "(double) (-1.0 - -0.0)"); + Tester.checkEqual(doubleSub(-1.0, 0.0), (double) (-1.0 - 0.0), "(double) (-1.0 - 0.0)"); + Tester.checkEqual(doubleSub(-1.0, 1.0), (double) (-1.0 - 1.0), "(double) (-1.0 - 1.0)"); + Tester.checkEqual(doubleSub(-1.0, Double.MAX_VALUE), (double) (-1.0 - Double.MAX_VALUE), "(double) (-1.0 - Double.MAX_VALUE)"); + Tester.checkEqual(doubleSub(-1.0, Double.POSITIVE_INFINITY), (double) (-1.0 - Double.POSITIVE_INFINITY), "(double) (-1.0 - Double.POSITIVE_INFINITY)"); + Tester.checkEqual(doubleSub(-1.0, Double.NaN), (double) (-1.0 - Double.NaN), "(double) (-1.0 - Double.NaN)"); + Tester.checkEqual(doubleSub(-0.0, Double.NEGATIVE_INFINITY), (double) (-0.0 - Double.NEGATIVE_INFINITY), "(double) (-0.0 - Double.NEGATIVE_INFINITY)"); + Tester.checkEqual(doubleSub(-0.0, -1.0), (double) (-0.0 - -1.0), "(double) (-0.0 - -1.0)"); + Tester.checkEqual(doubleSub(-0.0, -0.0), (double) (-0.0 - -0.0), "(double) (-0.0 - -0.0)"); + Tester.checkEqual(doubleSub(-0.0, 0.0), (double) (-0.0 - 0.0), "(double) (-0.0 - 0.0)"); + Tester.checkEqual(doubleSub(-0.0, 1.0), (double) (-0.0 - 1.0), "(double) (-0.0 - 1.0)"); + Tester.checkEqual(doubleSub(-0.0, Double.MAX_VALUE), (double) (-0.0 - Double.MAX_VALUE), "(double) (-0.0 - Double.MAX_VALUE)"); + Tester.checkEqual(doubleSub(-0.0, Double.POSITIVE_INFINITY), (double) (-0.0 - Double.POSITIVE_INFINITY), "(double) (-0.0 - Double.POSITIVE_INFINITY)"); + Tester.checkEqual(doubleSub(-0.0, Double.NaN), (double) (-0.0 - Double.NaN), "(double) (-0.0 - Double.NaN)"); + Tester.checkEqual(doubleSub(0.0, Double.NEGATIVE_INFINITY), (double) (0.0 - Double.NEGATIVE_INFINITY), "(double) (0.0 - Double.NEGATIVE_INFINITY)"); + Tester.checkEqual(doubleSub(0.0, -1.0), (double) (0.0 - -1.0), "(double) (0.0 - -1.0)"); + Tester.checkEqual(doubleSub(0.0, -0.0), (double) (0.0 - -0.0), "(double) (0.0 - -0.0)"); + Tester.checkEqual(doubleSub(0.0, 0.0), (double) (0.0 - 0.0), "(double) (0.0 - 0.0)"); + Tester.checkEqual(doubleSub(0.0, 1.0), (double) (0.0 - 1.0), "(double) (0.0 - 1.0)"); + Tester.checkEqual(doubleSub(0.0, Double.MAX_VALUE), (double) (0.0 - Double.MAX_VALUE), "(double) (0.0 - Double.MAX_VALUE)"); + Tester.checkEqual(doubleSub(0.0, Double.POSITIVE_INFINITY), (double) (0.0 - Double.POSITIVE_INFINITY), "(double) (0.0 - Double.POSITIVE_INFINITY)"); + Tester.checkEqual(doubleSub(0.0, Double.NaN), (double) (0.0 - Double.NaN), "(double) (0.0 - Double.NaN)"); + Tester.checkEqual(doubleSub(1.0, Double.NEGATIVE_INFINITY), (double) (1.0 - Double.NEGATIVE_INFINITY), "(double) (1.0 - Double.NEGATIVE_INFINITY)"); + Tester.checkEqual(doubleSub(1.0, -1.0), (double) (1.0 - -1.0), "(double) (1.0 - -1.0)"); + Tester.checkEqual(doubleSub(1.0, -0.0), (double) (1.0 - -0.0), "(double) (1.0 - -0.0)"); + Tester.checkEqual(doubleSub(1.0, 0.0), (double) (1.0 - 0.0), "(double) (1.0 - 0.0)"); + Tester.checkEqual(doubleSub(1.0, 1.0), (double) (1.0 - 1.0), "(double) (1.0 - 1.0)"); + Tester.checkEqual(doubleSub(1.0, Double.MAX_VALUE), (double) (1.0 - Double.MAX_VALUE), "(double) (1.0 - Double.MAX_VALUE)"); + Tester.checkEqual(doubleSub(1.0, Double.POSITIVE_INFINITY), (double) (1.0 - Double.POSITIVE_INFINITY), "(double) (1.0 - Double.POSITIVE_INFINITY)"); + Tester.checkEqual(doubleSub(1.0, Double.NaN), (double) (1.0 - Double.NaN), "(double) (1.0 - Double.NaN)"); + Tester.checkEqual(doubleSub(Double.MAX_VALUE, Double.NEGATIVE_INFINITY), (double) (Double.MAX_VALUE - Double.NEGATIVE_INFINITY), "(double) (Double.MAX_VALUE - Double.NEGATIVE_INFINITY)"); + Tester.checkEqual(doubleSub(Double.MAX_VALUE, -1.0), (double) (Double.MAX_VALUE - -1.0), "(double) (Double.MAX_VALUE - -1.0)"); + Tester.checkEqual(doubleSub(Double.MAX_VALUE, -0.0), (double) (Double.MAX_VALUE - -0.0), "(double) (Double.MAX_VALUE - -0.0)"); + Tester.checkEqual(doubleSub(Double.MAX_VALUE, 0.0), (double) (Double.MAX_VALUE - 0.0), "(double) (Double.MAX_VALUE - 0.0)"); + Tester.checkEqual(doubleSub(Double.MAX_VALUE, 1.0), (double) (Double.MAX_VALUE - 1.0), "(double) (Double.MAX_VALUE - 1.0)"); + Tester.checkEqual(doubleSub(Double.MAX_VALUE, Double.MAX_VALUE), (double) (Double.MAX_VALUE - Double.MAX_VALUE), "(double) (Double.MAX_VALUE - Double.MAX_VALUE)"); + Tester.checkEqual(doubleSub(Double.MAX_VALUE, Double.POSITIVE_INFINITY), (double) (Double.MAX_VALUE - Double.POSITIVE_INFINITY), "(double) (Double.MAX_VALUE - Double.POSITIVE_INFINITY)"); + Tester.checkEqual(doubleSub(Double.MAX_VALUE, Double.NaN), (double) (Double.MAX_VALUE - Double.NaN), "(double) (Double.MAX_VALUE - Double.NaN)"); + Tester.checkEqual(doubleSub(Double.POSITIVE_INFINITY, Double.NEGATIVE_INFINITY), (double) (Double.POSITIVE_INFINITY - Double.NEGATIVE_INFINITY), "(double) (Double.POSITIVE_INFINITY - Double.NEGATIVE_INFINITY)"); + Tester.checkEqual(doubleSub(Double.POSITIVE_INFINITY, -1.0), (double) (Double.POSITIVE_INFINITY - -1.0), "(double) (Double.POSITIVE_INFINITY - -1.0)"); + Tester.checkEqual(doubleSub(Double.POSITIVE_INFINITY, -0.0), (double) (Double.POSITIVE_INFINITY - -0.0), "(double) (Double.POSITIVE_INFINITY - -0.0)"); + Tester.checkEqual(doubleSub(Double.POSITIVE_INFINITY, 0.0), (double) (Double.POSITIVE_INFINITY - 0.0), "(double) (Double.POSITIVE_INFINITY - 0.0)"); + Tester.checkEqual(doubleSub(Double.POSITIVE_INFINITY, 1.0), (double) (Double.POSITIVE_INFINITY - 1.0), "(double) (Double.POSITIVE_INFINITY - 1.0)"); + Tester.checkEqual(doubleSub(Double.POSITIVE_INFINITY, Double.MAX_VALUE), (double) (Double.POSITIVE_INFINITY - Double.MAX_VALUE), "(double) (Double.POSITIVE_INFINITY - Double.MAX_VALUE)"); + Tester.checkEqual(doubleSub(Double.POSITIVE_INFINITY, Double.POSITIVE_INFINITY), (double) (Double.POSITIVE_INFINITY - Double.POSITIVE_INFINITY), "(double) (Double.POSITIVE_INFINITY - Double.POSITIVE_INFINITY)"); + Tester.checkEqual(doubleSub(Double.POSITIVE_INFINITY, Double.NaN), (double) (Double.POSITIVE_INFINITY - Double.NaN), "(double) (Double.POSITIVE_INFINITY - Double.NaN)"); + Tester.checkEqual(doubleSub(Double.NaN, Double.NEGATIVE_INFINITY), (double) (Double.NaN - Double.NEGATIVE_INFINITY), "(double) (Double.NaN - Double.NEGATIVE_INFINITY)"); + Tester.checkEqual(doubleSub(Double.NaN, -1.0), (double) (Double.NaN - -1.0), "(double) (Double.NaN - -1.0)"); + Tester.checkEqual(doubleSub(Double.NaN, -0.0), (double) (Double.NaN - -0.0), "(double) (Double.NaN - -0.0)"); + Tester.checkEqual(doubleSub(Double.NaN, 0.0), (double) (Double.NaN - 0.0), "(double) (Double.NaN - 0.0)"); + Tester.checkEqual(doubleSub(Double.NaN, 1.0), (double) (Double.NaN - 1.0), "(double) (Double.NaN - 1.0)"); + Tester.checkEqual(doubleSub(Double.NaN, Double.MAX_VALUE), (double) (Double.NaN - Double.MAX_VALUE), "(double) (Double.NaN - Double.MAX_VALUE)"); + Tester.checkEqual(doubleSub(Double.NaN, Double.POSITIVE_INFINITY), (double) (Double.NaN - Double.POSITIVE_INFINITY), "(double) (Double.NaN - Double.POSITIVE_INFINITY)"); + Tester.checkEqual(doubleSub(Double.NaN, Double.NaN), (double) (Double.NaN - Double.NaN), "(double) (Double.NaN - Double.NaN)"); + Tester.checkEqual(doubleLt(Double.NEGATIVE_INFINITY, Double.NEGATIVE_INFINITY), Double.NEGATIVE_INFINITY < Double.NEGATIVE_INFINITY, "Double.NEGATIVE_INFINITY < Double.NEGATIVE_INFINITY"); + Tester.checkEqual(doubleLt(Double.NEGATIVE_INFINITY, -1.0), Double.NEGATIVE_INFINITY < -1.0, "Double.NEGATIVE_INFINITY < -1.0"); + Tester.checkEqual(doubleLt(Double.NEGATIVE_INFINITY, -0.0), Double.NEGATIVE_INFINITY < -0.0, "Double.NEGATIVE_INFINITY < -0.0"); + Tester.checkEqual(doubleLt(Double.NEGATIVE_INFINITY, 0.0), Double.NEGATIVE_INFINITY < 0.0, "Double.NEGATIVE_INFINITY < 0.0"); + Tester.checkEqual(doubleLt(Double.NEGATIVE_INFINITY, 1.0), Double.NEGATIVE_INFINITY < 1.0, "Double.NEGATIVE_INFINITY < 1.0"); + Tester.checkEqual(doubleLt(Double.NEGATIVE_INFINITY, Double.MAX_VALUE), Double.NEGATIVE_INFINITY < Double.MAX_VALUE, "Double.NEGATIVE_INFINITY < Double.MAX_VALUE"); + Tester.checkEqual(doubleLt(Double.NEGATIVE_INFINITY, Double.POSITIVE_INFINITY), Double.NEGATIVE_INFINITY < Double.POSITIVE_INFINITY, "Double.NEGATIVE_INFINITY < Double.POSITIVE_INFINITY"); + Tester.checkEqual(doubleLt(Double.NEGATIVE_INFINITY, Double.NaN), Double.NEGATIVE_INFINITY < Double.NaN, "Double.NEGATIVE_INFINITY < Double.NaN"); + Tester.checkEqual(doubleLt(-1.0, Double.NEGATIVE_INFINITY), -1.0 < Double.NEGATIVE_INFINITY, "-1.0 < Double.NEGATIVE_INFINITY"); + Tester.checkEqual(doubleLt(-1.0, -1.0), -1.0 < -1.0, "-1.0 < -1.0"); + Tester.checkEqual(doubleLt(-1.0, -0.0), -1.0 < -0.0, "-1.0 < -0.0"); + Tester.checkEqual(doubleLt(-1.0, 0.0), -1.0 < 0.0, "-1.0 < 0.0"); + Tester.checkEqual(doubleLt(-1.0, 1.0), -1.0 < 1.0, "-1.0 < 1.0"); + Tester.checkEqual(doubleLt(-1.0, Double.MAX_VALUE), -1.0 < Double.MAX_VALUE, "-1.0 < Double.MAX_VALUE"); + Tester.checkEqual(doubleLt(-1.0, Double.POSITIVE_INFINITY), -1.0 < Double.POSITIVE_INFINITY, "-1.0 < Double.POSITIVE_INFINITY"); + Tester.checkEqual(doubleLt(-1.0, Double.NaN), -1.0 < Double.NaN, "-1.0 < Double.NaN"); + Tester.checkEqual(doubleLt(-0.0, Double.NEGATIVE_INFINITY), -0.0 < Double.NEGATIVE_INFINITY, "-0.0 < Double.NEGATIVE_INFINITY"); + Tester.checkEqual(doubleLt(-0.0, -1.0), -0.0 < -1.0, "-0.0 < -1.0"); + Tester.checkEqual(doubleLt(-0.0, -0.0), -0.0 < -0.0, "-0.0 < -0.0"); + Tester.checkEqual(doubleLt(-0.0, 0.0), -0.0 < 0.0, "-0.0 < 0.0"); + Tester.checkEqual(doubleLt(-0.0, 1.0), -0.0 < 1.0, "-0.0 < 1.0"); + Tester.checkEqual(doubleLt(-0.0, Double.MAX_VALUE), -0.0 < Double.MAX_VALUE, "-0.0 < Double.MAX_VALUE"); + Tester.checkEqual(doubleLt(-0.0, Double.POSITIVE_INFINITY), -0.0 < Double.POSITIVE_INFINITY, "-0.0 < Double.POSITIVE_INFINITY"); + Tester.checkEqual(doubleLt(-0.0, Double.NaN), -0.0 < Double.NaN, "-0.0 < Double.NaN"); + Tester.checkEqual(doubleLt(0.0, Double.NEGATIVE_INFINITY), 0.0 < Double.NEGATIVE_INFINITY, "0.0 < Double.NEGATIVE_INFINITY"); + Tester.checkEqual(doubleLt(0.0, -1.0), 0.0 < -1.0, "0.0 < -1.0"); + Tester.checkEqual(doubleLt(0.0, -0.0), 0.0 < -0.0, "0.0 < -0.0"); + Tester.checkEqual(doubleLt(0.0, 0.0), 0.0 < 0.0, "0.0 < 0.0"); + Tester.checkEqual(doubleLt(0.0, 1.0), 0.0 < 1.0, "0.0 < 1.0"); + Tester.checkEqual(doubleLt(0.0, Double.MAX_VALUE), 0.0 < Double.MAX_VALUE, "0.0 < Double.MAX_VALUE"); + Tester.checkEqual(doubleLt(0.0, Double.POSITIVE_INFINITY), 0.0 < Double.POSITIVE_INFINITY, "0.0 < Double.POSITIVE_INFINITY"); + Tester.checkEqual(doubleLt(0.0, Double.NaN), 0.0 < Double.NaN, "0.0 < Double.NaN"); + Tester.checkEqual(doubleLt(1.0, Double.NEGATIVE_INFINITY), 1.0 < Double.NEGATIVE_INFINITY, "1.0 < Double.NEGATIVE_INFINITY"); + Tester.checkEqual(doubleLt(1.0, -1.0), 1.0 < -1.0, "1.0 < -1.0"); + Tester.checkEqual(doubleLt(1.0, -0.0), 1.0 < -0.0, "1.0 < -0.0"); + Tester.checkEqual(doubleLt(1.0, 0.0), 1.0 < 0.0, "1.0 < 0.0"); + Tester.checkEqual(doubleLt(1.0, 1.0), 1.0 < 1.0, "1.0 < 1.0"); + Tester.checkEqual(doubleLt(1.0, Double.MAX_VALUE), 1.0 < Double.MAX_VALUE, "1.0 < Double.MAX_VALUE"); + Tester.checkEqual(doubleLt(1.0, Double.POSITIVE_INFINITY), 1.0 < Double.POSITIVE_INFINITY, "1.0 < Double.POSITIVE_INFINITY"); + Tester.checkEqual(doubleLt(1.0, Double.NaN), 1.0 < Double.NaN, "1.0 < Double.NaN"); + Tester.checkEqual(doubleLt(Double.MAX_VALUE, Double.NEGATIVE_INFINITY), Double.MAX_VALUE < Double.NEGATIVE_INFINITY, "Double.MAX_VALUE < Double.NEGATIVE_INFINITY"); + Tester.checkEqual(doubleLt(Double.MAX_VALUE, -1.0), Double.MAX_VALUE < -1.0, "Double.MAX_VALUE < -1.0"); + Tester.checkEqual(doubleLt(Double.MAX_VALUE, -0.0), Double.MAX_VALUE < -0.0, "Double.MAX_VALUE < -0.0"); + Tester.checkEqual(doubleLt(Double.MAX_VALUE, 0.0), Double.MAX_VALUE < 0.0, "Double.MAX_VALUE < 0.0"); + Tester.checkEqual(doubleLt(Double.MAX_VALUE, 1.0), Double.MAX_VALUE < 1.0, "Double.MAX_VALUE < 1.0"); + Tester.checkEqual(doubleLt(Double.MAX_VALUE, Double.MAX_VALUE), Double.MAX_VALUE < Double.MAX_VALUE, "Double.MAX_VALUE < Double.MAX_VALUE"); + Tester.checkEqual(doubleLt(Double.MAX_VALUE, Double.POSITIVE_INFINITY), Double.MAX_VALUE < Double.POSITIVE_INFINITY, "Double.MAX_VALUE < Double.POSITIVE_INFINITY"); + Tester.checkEqual(doubleLt(Double.MAX_VALUE, Double.NaN), Double.MAX_VALUE < Double.NaN, "Double.MAX_VALUE < Double.NaN"); + Tester.checkEqual(doubleLt(Double.POSITIVE_INFINITY, Double.NEGATIVE_INFINITY), Double.POSITIVE_INFINITY < Double.NEGATIVE_INFINITY, "Double.POSITIVE_INFINITY < Double.NEGATIVE_INFINITY"); + Tester.checkEqual(doubleLt(Double.POSITIVE_INFINITY, -1.0), Double.POSITIVE_INFINITY < -1.0, "Double.POSITIVE_INFINITY < -1.0"); + Tester.checkEqual(doubleLt(Double.POSITIVE_INFINITY, -0.0), Double.POSITIVE_INFINITY < -0.0, "Double.POSITIVE_INFINITY < -0.0"); + Tester.checkEqual(doubleLt(Double.POSITIVE_INFINITY, 0.0), Double.POSITIVE_INFINITY < 0.0, "Double.POSITIVE_INFINITY < 0.0"); + Tester.checkEqual(doubleLt(Double.POSITIVE_INFINITY, 1.0), Double.POSITIVE_INFINITY < 1.0, "Double.POSITIVE_INFINITY < 1.0"); + Tester.checkEqual(doubleLt(Double.POSITIVE_INFINITY, Double.MAX_VALUE), Double.POSITIVE_INFINITY < Double.MAX_VALUE, "Double.POSITIVE_INFINITY < Double.MAX_VALUE"); + Tester.checkEqual(doubleLt(Double.POSITIVE_INFINITY, Double.POSITIVE_INFINITY), Double.POSITIVE_INFINITY < Double.POSITIVE_INFINITY, "Double.POSITIVE_INFINITY < Double.POSITIVE_INFINITY"); + Tester.checkEqual(doubleLt(Double.POSITIVE_INFINITY, Double.NaN), Double.POSITIVE_INFINITY < Double.NaN, "Double.POSITIVE_INFINITY < Double.NaN"); + Tester.checkEqual(doubleLt(Double.NaN, Double.NEGATIVE_INFINITY), Double.NaN < Double.NEGATIVE_INFINITY, "Double.NaN < Double.NEGATIVE_INFINITY"); + Tester.checkEqual(doubleLt(Double.NaN, -1.0), Double.NaN < -1.0, "Double.NaN < -1.0"); + Tester.checkEqual(doubleLt(Double.NaN, -0.0), Double.NaN < -0.0, "Double.NaN < -0.0"); + Tester.checkEqual(doubleLt(Double.NaN, 0.0), Double.NaN < 0.0, "Double.NaN < 0.0"); + Tester.checkEqual(doubleLt(Double.NaN, 1.0), Double.NaN < 1.0, "Double.NaN < 1.0"); + Tester.checkEqual(doubleLt(Double.NaN, Double.MAX_VALUE), Double.NaN < Double.MAX_VALUE, "Double.NaN < Double.MAX_VALUE"); + Tester.checkEqual(doubleLt(Double.NaN, Double.POSITIVE_INFINITY), Double.NaN < Double.POSITIVE_INFINITY, "Double.NaN < Double.POSITIVE_INFINITY"); + Tester.checkEqual(doubleLt(Double.NaN, Double.NaN), Double.NaN < Double.NaN, "Double.NaN < Double.NaN"); + Tester.checkEqual(doubleGt(Double.NEGATIVE_INFINITY, Double.NEGATIVE_INFINITY), Double.NEGATIVE_INFINITY > Double.NEGATIVE_INFINITY, "Double.NEGATIVE_INFINITY > Double.NEGATIVE_INFINITY"); + Tester.checkEqual(doubleGt(Double.NEGATIVE_INFINITY, -1.0), Double.NEGATIVE_INFINITY > -1.0, "Double.NEGATIVE_INFINITY > -1.0"); + Tester.checkEqual(doubleGt(Double.NEGATIVE_INFINITY, -0.0), Double.NEGATIVE_INFINITY > -0.0, "Double.NEGATIVE_INFINITY > -0.0"); + Tester.checkEqual(doubleGt(Double.NEGATIVE_INFINITY, 0.0), Double.NEGATIVE_INFINITY > 0.0, "Double.NEGATIVE_INFINITY > 0.0"); + Tester.checkEqual(doubleGt(Double.NEGATIVE_INFINITY, 1.0), Double.NEGATIVE_INFINITY > 1.0, "Double.NEGATIVE_INFINITY > 1.0"); + Tester.checkEqual(doubleGt(Double.NEGATIVE_INFINITY, Double.MAX_VALUE), Double.NEGATIVE_INFINITY > Double.MAX_VALUE, "Double.NEGATIVE_INFINITY > Double.MAX_VALUE"); + Tester.checkEqual(doubleGt(Double.NEGATIVE_INFINITY, Double.POSITIVE_INFINITY), Double.NEGATIVE_INFINITY > Double.POSITIVE_INFINITY, "Double.NEGATIVE_INFINITY > Double.POSITIVE_INFINITY"); + Tester.checkEqual(doubleGt(Double.NEGATIVE_INFINITY, Double.NaN), Double.NEGATIVE_INFINITY > Double.NaN, "Double.NEGATIVE_INFINITY > Double.NaN"); + Tester.checkEqual(doubleGt(-1.0, Double.NEGATIVE_INFINITY), -1.0 > Double.NEGATIVE_INFINITY, "-1.0 > Double.NEGATIVE_INFINITY"); + Tester.checkEqual(doubleGt(-1.0, -1.0), -1.0 > -1.0, "-1.0 > -1.0"); + Tester.checkEqual(doubleGt(-1.0, -0.0), -1.0 > -0.0, "-1.0 > -0.0"); + Tester.checkEqual(doubleGt(-1.0, 0.0), -1.0 > 0.0, "-1.0 > 0.0"); + Tester.checkEqual(doubleGt(-1.0, 1.0), -1.0 > 1.0, "-1.0 > 1.0"); + Tester.checkEqual(doubleGt(-1.0, Double.MAX_VALUE), -1.0 > Double.MAX_VALUE, "-1.0 > Double.MAX_VALUE"); + Tester.checkEqual(doubleGt(-1.0, Double.POSITIVE_INFINITY), -1.0 > Double.POSITIVE_INFINITY, "-1.0 > Double.POSITIVE_INFINITY"); + Tester.checkEqual(doubleGt(-1.0, Double.NaN), -1.0 > Double.NaN, "-1.0 > Double.NaN"); + Tester.checkEqual(doubleGt(-0.0, Double.NEGATIVE_INFINITY), -0.0 > Double.NEGATIVE_INFINITY, "-0.0 > Double.NEGATIVE_INFINITY"); + Tester.checkEqual(doubleGt(-0.0, -1.0), -0.0 > -1.0, "-0.0 > -1.0"); + Tester.checkEqual(doubleGt(-0.0, -0.0), -0.0 > -0.0, "-0.0 > -0.0"); + Tester.checkEqual(doubleGt(-0.0, 0.0), -0.0 > 0.0, "-0.0 > 0.0"); + Tester.checkEqual(doubleGt(-0.0, 1.0), -0.0 > 1.0, "-0.0 > 1.0"); + Tester.checkEqual(doubleGt(-0.0, Double.MAX_VALUE), -0.0 > Double.MAX_VALUE, "-0.0 > Double.MAX_VALUE"); + Tester.checkEqual(doubleGt(-0.0, Double.POSITIVE_INFINITY), -0.0 > Double.POSITIVE_INFINITY, "-0.0 > Double.POSITIVE_INFINITY"); + Tester.checkEqual(doubleGt(-0.0, Double.NaN), -0.0 > Double.NaN, "-0.0 > Double.NaN"); + Tester.checkEqual(doubleGt(0.0, Double.NEGATIVE_INFINITY), 0.0 > Double.NEGATIVE_INFINITY, "0.0 > Double.NEGATIVE_INFINITY"); + Tester.checkEqual(doubleGt(0.0, -1.0), 0.0 > -1.0, "0.0 > -1.0"); + Tester.checkEqual(doubleGt(0.0, -0.0), 0.0 > -0.0, "0.0 > -0.0"); + Tester.checkEqual(doubleGt(0.0, 0.0), 0.0 > 0.0, "0.0 > 0.0"); + Tester.checkEqual(doubleGt(0.0, 1.0), 0.0 > 1.0, "0.0 > 1.0"); + Tester.checkEqual(doubleGt(0.0, Double.MAX_VALUE), 0.0 > Double.MAX_VALUE, "0.0 > Double.MAX_VALUE"); + Tester.checkEqual(doubleGt(0.0, Double.POSITIVE_INFINITY), 0.0 > Double.POSITIVE_INFINITY, "0.0 > Double.POSITIVE_INFINITY"); + Tester.checkEqual(doubleGt(0.0, Double.NaN), 0.0 > Double.NaN, "0.0 > Double.NaN"); + Tester.checkEqual(doubleGt(1.0, Double.NEGATIVE_INFINITY), 1.0 > Double.NEGATIVE_INFINITY, "1.0 > Double.NEGATIVE_INFINITY"); + Tester.checkEqual(doubleGt(1.0, -1.0), 1.0 > -1.0, "1.0 > -1.0"); + Tester.checkEqual(doubleGt(1.0, -0.0), 1.0 > -0.0, "1.0 > -0.0"); + Tester.checkEqual(doubleGt(1.0, 0.0), 1.0 > 0.0, "1.0 > 0.0"); + Tester.checkEqual(doubleGt(1.0, 1.0), 1.0 > 1.0, "1.0 > 1.0"); + Tester.checkEqual(doubleGt(1.0, Double.MAX_VALUE), 1.0 > Double.MAX_VALUE, "1.0 > Double.MAX_VALUE"); + Tester.checkEqual(doubleGt(1.0, Double.POSITIVE_INFINITY), 1.0 > Double.POSITIVE_INFINITY, "1.0 > Double.POSITIVE_INFINITY"); + Tester.checkEqual(doubleGt(1.0, Double.NaN), 1.0 > Double.NaN, "1.0 > Double.NaN"); + Tester.checkEqual(doubleGt(Double.MAX_VALUE, Double.NEGATIVE_INFINITY), Double.MAX_VALUE > Double.NEGATIVE_INFINITY, "Double.MAX_VALUE > Double.NEGATIVE_INFINITY"); + Tester.checkEqual(doubleGt(Double.MAX_VALUE, -1.0), Double.MAX_VALUE > -1.0, "Double.MAX_VALUE > -1.0"); + Tester.checkEqual(doubleGt(Double.MAX_VALUE, -0.0), Double.MAX_VALUE > -0.0, "Double.MAX_VALUE > -0.0"); + Tester.checkEqual(doubleGt(Double.MAX_VALUE, 0.0), Double.MAX_VALUE > 0.0, "Double.MAX_VALUE > 0.0"); + Tester.checkEqual(doubleGt(Double.MAX_VALUE, 1.0), Double.MAX_VALUE > 1.0, "Double.MAX_VALUE > 1.0"); + Tester.checkEqual(doubleGt(Double.MAX_VALUE, Double.MAX_VALUE), Double.MAX_VALUE > Double.MAX_VALUE, "Double.MAX_VALUE > Double.MAX_VALUE"); + Tester.checkEqual(doubleGt(Double.MAX_VALUE, Double.POSITIVE_INFINITY), Double.MAX_VALUE > Double.POSITIVE_INFINITY, "Double.MAX_VALUE > Double.POSITIVE_INFINITY"); + Tester.checkEqual(doubleGt(Double.MAX_VALUE, Double.NaN), Double.MAX_VALUE > Double.NaN, "Double.MAX_VALUE > Double.NaN"); + Tester.checkEqual(doubleGt(Double.POSITIVE_INFINITY, Double.NEGATIVE_INFINITY), Double.POSITIVE_INFINITY > Double.NEGATIVE_INFINITY, "Double.POSITIVE_INFINITY > Double.NEGATIVE_INFINITY"); + Tester.checkEqual(doubleGt(Double.POSITIVE_INFINITY, -1.0), Double.POSITIVE_INFINITY > -1.0, "Double.POSITIVE_INFINITY > -1.0"); + Tester.checkEqual(doubleGt(Double.POSITIVE_INFINITY, -0.0), Double.POSITIVE_INFINITY > -0.0, "Double.POSITIVE_INFINITY > -0.0"); + Tester.checkEqual(doubleGt(Double.POSITIVE_INFINITY, 0.0), Double.POSITIVE_INFINITY > 0.0, "Double.POSITIVE_INFINITY > 0.0"); + Tester.checkEqual(doubleGt(Double.POSITIVE_INFINITY, 1.0), Double.POSITIVE_INFINITY > 1.0, "Double.POSITIVE_INFINITY > 1.0"); + Tester.checkEqual(doubleGt(Double.POSITIVE_INFINITY, Double.MAX_VALUE), Double.POSITIVE_INFINITY > Double.MAX_VALUE, "Double.POSITIVE_INFINITY > Double.MAX_VALUE"); + Tester.checkEqual(doubleGt(Double.POSITIVE_INFINITY, Double.POSITIVE_INFINITY), Double.POSITIVE_INFINITY > Double.POSITIVE_INFINITY, "Double.POSITIVE_INFINITY > Double.POSITIVE_INFINITY"); + Tester.checkEqual(doubleGt(Double.POSITIVE_INFINITY, Double.NaN), Double.POSITIVE_INFINITY > Double.NaN, "Double.POSITIVE_INFINITY > Double.NaN"); + Tester.checkEqual(doubleGt(Double.NaN, Double.NEGATIVE_INFINITY), Double.NaN > Double.NEGATIVE_INFINITY, "Double.NaN > Double.NEGATIVE_INFINITY"); + Tester.checkEqual(doubleGt(Double.NaN, -1.0), Double.NaN > -1.0, "Double.NaN > -1.0"); + Tester.checkEqual(doubleGt(Double.NaN, -0.0), Double.NaN > -0.0, "Double.NaN > -0.0"); + Tester.checkEqual(doubleGt(Double.NaN, 0.0), Double.NaN > 0.0, "Double.NaN > 0.0"); + Tester.checkEqual(doubleGt(Double.NaN, 1.0), Double.NaN > 1.0, "Double.NaN > 1.0"); + Tester.checkEqual(doubleGt(Double.NaN, Double.MAX_VALUE), Double.NaN > Double.MAX_VALUE, "Double.NaN > Double.MAX_VALUE"); + Tester.checkEqual(doubleGt(Double.NaN, Double.POSITIVE_INFINITY), Double.NaN > Double.POSITIVE_INFINITY, "Double.NaN > Double.POSITIVE_INFINITY"); + Tester.checkEqual(doubleGt(Double.NaN, Double.NaN), Double.NaN > Double.NaN, "Double.NaN > Double.NaN"); + Tester.checkEqual(doubleLe(Double.NEGATIVE_INFINITY, Double.NEGATIVE_INFINITY), Double.NEGATIVE_INFINITY <= Double.NEGATIVE_INFINITY, "Double.NEGATIVE_INFINITY <= Double.NEGATIVE_INFINITY"); + Tester.checkEqual(doubleLe(Double.NEGATIVE_INFINITY, -1.0), Double.NEGATIVE_INFINITY <= -1.0, "Double.NEGATIVE_INFINITY <= -1.0"); + Tester.checkEqual(doubleLe(Double.NEGATIVE_INFINITY, -0.0), Double.NEGATIVE_INFINITY <= -0.0, "Double.NEGATIVE_INFINITY <= -0.0"); + Tester.checkEqual(doubleLe(Double.NEGATIVE_INFINITY, 0.0), Double.NEGATIVE_INFINITY <= 0.0, "Double.NEGATIVE_INFINITY <= 0.0"); + Tester.checkEqual(doubleLe(Double.NEGATIVE_INFINITY, 1.0), Double.NEGATIVE_INFINITY <= 1.0, "Double.NEGATIVE_INFINITY <= 1.0"); + Tester.checkEqual(doubleLe(Double.NEGATIVE_INFINITY, Double.MAX_VALUE), Double.NEGATIVE_INFINITY <= Double.MAX_VALUE, "Double.NEGATIVE_INFINITY <= Double.MAX_VALUE"); + Tester.checkEqual(doubleLe(Double.NEGATIVE_INFINITY, Double.POSITIVE_INFINITY), Double.NEGATIVE_INFINITY <= Double.POSITIVE_INFINITY, "Double.NEGATIVE_INFINITY <= Double.POSITIVE_INFINITY"); + Tester.checkEqual(doubleLe(Double.NEGATIVE_INFINITY, Double.NaN), Double.NEGATIVE_INFINITY <= Double.NaN, "Double.NEGATIVE_INFINITY <= Double.NaN"); + Tester.checkEqual(doubleLe(-1.0, Double.NEGATIVE_INFINITY), -1.0 <= Double.NEGATIVE_INFINITY, "-1.0 <= Double.NEGATIVE_INFINITY"); + Tester.checkEqual(doubleLe(-1.0, -1.0), -1.0 <= -1.0, "-1.0 <= -1.0"); + Tester.checkEqual(doubleLe(-1.0, -0.0), -1.0 <= -0.0, "-1.0 <= -0.0"); + Tester.checkEqual(doubleLe(-1.0, 0.0), -1.0 <= 0.0, "-1.0 <= 0.0"); + Tester.checkEqual(doubleLe(-1.0, 1.0), -1.0 <= 1.0, "-1.0 <= 1.0"); + Tester.checkEqual(doubleLe(-1.0, Double.MAX_VALUE), -1.0 <= Double.MAX_VALUE, "-1.0 <= Double.MAX_VALUE"); + Tester.checkEqual(doubleLe(-1.0, Double.POSITIVE_INFINITY), -1.0 <= Double.POSITIVE_INFINITY, "-1.0 <= Double.POSITIVE_INFINITY"); + Tester.checkEqual(doubleLe(-1.0, Double.NaN), -1.0 <= Double.NaN, "-1.0 <= Double.NaN"); + Tester.checkEqual(doubleLe(-0.0, Double.NEGATIVE_INFINITY), -0.0 <= Double.NEGATIVE_INFINITY, "-0.0 <= Double.NEGATIVE_INFINITY"); + Tester.checkEqual(doubleLe(-0.0, -1.0), -0.0 <= -1.0, "-0.0 <= -1.0"); + Tester.checkEqual(doubleLe(-0.0, -0.0), -0.0 <= -0.0, "-0.0 <= -0.0"); + Tester.checkEqual(doubleLe(-0.0, 0.0), -0.0 <= 0.0, "-0.0 <= 0.0"); + Tester.checkEqual(doubleLe(-0.0, 1.0), -0.0 <= 1.0, "-0.0 <= 1.0"); + Tester.checkEqual(doubleLe(-0.0, Double.MAX_VALUE), -0.0 <= Double.MAX_VALUE, "-0.0 <= Double.MAX_VALUE"); + Tester.checkEqual(doubleLe(-0.0, Double.POSITIVE_INFINITY), -0.0 <= Double.POSITIVE_INFINITY, "-0.0 <= Double.POSITIVE_INFINITY"); + Tester.checkEqual(doubleLe(-0.0, Double.NaN), -0.0 <= Double.NaN, "-0.0 <= Double.NaN"); + Tester.checkEqual(doubleLe(0.0, Double.NEGATIVE_INFINITY), 0.0 <= Double.NEGATIVE_INFINITY, "0.0 <= Double.NEGATIVE_INFINITY"); + Tester.checkEqual(doubleLe(0.0, -1.0), 0.0 <= -1.0, "0.0 <= -1.0"); + Tester.checkEqual(doubleLe(0.0, -0.0), 0.0 <= -0.0, "0.0 <= -0.0"); + Tester.checkEqual(doubleLe(0.0, 0.0), 0.0 <= 0.0, "0.0 <= 0.0"); + Tester.checkEqual(doubleLe(0.0, 1.0), 0.0 <= 1.0, "0.0 <= 1.0"); + Tester.checkEqual(doubleLe(0.0, Double.MAX_VALUE), 0.0 <= Double.MAX_VALUE, "0.0 <= Double.MAX_VALUE"); + Tester.checkEqual(doubleLe(0.0, Double.POSITIVE_INFINITY), 0.0 <= Double.POSITIVE_INFINITY, "0.0 <= Double.POSITIVE_INFINITY"); + Tester.checkEqual(doubleLe(0.0, Double.NaN), 0.0 <= Double.NaN, "0.0 <= Double.NaN"); + Tester.checkEqual(doubleLe(1.0, Double.NEGATIVE_INFINITY), 1.0 <= Double.NEGATIVE_INFINITY, "1.0 <= Double.NEGATIVE_INFINITY"); + Tester.checkEqual(doubleLe(1.0, -1.0), 1.0 <= -1.0, "1.0 <= -1.0"); + Tester.checkEqual(doubleLe(1.0, -0.0), 1.0 <= -0.0, "1.0 <= -0.0"); + Tester.checkEqual(doubleLe(1.0, 0.0), 1.0 <= 0.0, "1.0 <= 0.0"); + Tester.checkEqual(doubleLe(1.0, 1.0), 1.0 <= 1.0, "1.0 <= 1.0"); + Tester.checkEqual(doubleLe(1.0, Double.MAX_VALUE), 1.0 <= Double.MAX_VALUE, "1.0 <= Double.MAX_VALUE"); + Tester.checkEqual(doubleLe(1.0, Double.POSITIVE_INFINITY), 1.0 <= Double.POSITIVE_INFINITY, "1.0 <= Double.POSITIVE_INFINITY"); + Tester.checkEqual(doubleLe(1.0, Double.NaN), 1.0 <= Double.NaN, "1.0 <= Double.NaN"); + Tester.checkEqual(doubleLe(Double.MAX_VALUE, Double.NEGATIVE_INFINITY), Double.MAX_VALUE <= Double.NEGATIVE_INFINITY, "Double.MAX_VALUE <= Double.NEGATIVE_INFINITY"); + Tester.checkEqual(doubleLe(Double.MAX_VALUE, -1.0), Double.MAX_VALUE <= -1.0, "Double.MAX_VALUE <= -1.0"); + Tester.checkEqual(doubleLe(Double.MAX_VALUE, -0.0), Double.MAX_VALUE <= -0.0, "Double.MAX_VALUE <= -0.0"); + Tester.checkEqual(doubleLe(Double.MAX_VALUE, 0.0), Double.MAX_VALUE <= 0.0, "Double.MAX_VALUE <= 0.0"); + Tester.checkEqual(doubleLe(Double.MAX_VALUE, 1.0), Double.MAX_VALUE <= 1.0, "Double.MAX_VALUE <= 1.0"); + Tester.checkEqual(doubleLe(Double.MAX_VALUE, Double.MAX_VALUE), Double.MAX_VALUE <= Double.MAX_VALUE, "Double.MAX_VALUE <= Double.MAX_VALUE"); + Tester.checkEqual(doubleLe(Double.MAX_VALUE, Double.POSITIVE_INFINITY), Double.MAX_VALUE <= Double.POSITIVE_INFINITY, "Double.MAX_VALUE <= Double.POSITIVE_INFINITY"); + Tester.checkEqual(doubleLe(Double.MAX_VALUE, Double.NaN), Double.MAX_VALUE <= Double.NaN, "Double.MAX_VALUE <= Double.NaN"); + Tester.checkEqual(doubleLe(Double.POSITIVE_INFINITY, Double.NEGATIVE_INFINITY), Double.POSITIVE_INFINITY <= Double.NEGATIVE_INFINITY, "Double.POSITIVE_INFINITY <= Double.NEGATIVE_INFINITY"); + Tester.checkEqual(doubleLe(Double.POSITIVE_INFINITY, -1.0), Double.POSITIVE_INFINITY <= -1.0, "Double.POSITIVE_INFINITY <= -1.0"); + Tester.checkEqual(doubleLe(Double.POSITIVE_INFINITY, -0.0), Double.POSITIVE_INFINITY <= -0.0, "Double.POSITIVE_INFINITY <= -0.0"); + Tester.checkEqual(doubleLe(Double.POSITIVE_INFINITY, 0.0), Double.POSITIVE_INFINITY <= 0.0, "Double.POSITIVE_INFINITY <= 0.0"); + Tester.checkEqual(doubleLe(Double.POSITIVE_INFINITY, 1.0), Double.POSITIVE_INFINITY <= 1.0, "Double.POSITIVE_INFINITY <= 1.0"); + Tester.checkEqual(doubleLe(Double.POSITIVE_INFINITY, Double.MAX_VALUE), Double.POSITIVE_INFINITY <= Double.MAX_VALUE, "Double.POSITIVE_INFINITY <= Double.MAX_VALUE"); + Tester.checkEqual(doubleLe(Double.POSITIVE_INFINITY, Double.POSITIVE_INFINITY), Double.POSITIVE_INFINITY <= Double.POSITIVE_INFINITY, "Double.POSITIVE_INFINITY <= Double.POSITIVE_INFINITY"); + Tester.checkEqual(doubleLe(Double.POSITIVE_INFINITY, Double.NaN), Double.POSITIVE_INFINITY <= Double.NaN, "Double.POSITIVE_INFINITY <= Double.NaN"); + Tester.checkEqual(doubleLe(Double.NaN, Double.NEGATIVE_INFINITY), Double.NaN <= Double.NEGATIVE_INFINITY, "Double.NaN <= Double.NEGATIVE_INFINITY"); + Tester.checkEqual(doubleLe(Double.NaN, -1.0), Double.NaN <= -1.0, "Double.NaN <= -1.0"); + Tester.checkEqual(doubleLe(Double.NaN, -0.0), Double.NaN <= -0.0, "Double.NaN <= -0.0"); + Tester.checkEqual(doubleLe(Double.NaN, 0.0), Double.NaN <= 0.0, "Double.NaN <= 0.0"); + Tester.checkEqual(doubleLe(Double.NaN, 1.0), Double.NaN <= 1.0, "Double.NaN <= 1.0"); + Tester.checkEqual(doubleLe(Double.NaN, Double.MAX_VALUE), Double.NaN <= Double.MAX_VALUE, "Double.NaN <= Double.MAX_VALUE"); + Tester.checkEqual(doubleLe(Double.NaN, Double.POSITIVE_INFINITY), Double.NaN <= Double.POSITIVE_INFINITY, "Double.NaN <= Double.POSITIVE_INFINITY"); + Tester.checkEqual(doubleLe(Double.NaN, Double.NaN), Double.NaN <= Double.NaN, "Double.NaN <= Double.NaN"); + Tester.checkEqual(doubleGe(Double.NEGATIVE_INFINITY, Double.NEGATIVE_INFINITY), Double.NEGATIVE_INFINITY >= Double.NEGATIVE_INFINITY, "Double.NEGATIVE_INFINITY >= Double.NEGATIVE_INFINITY"); + Tester.checkEqual(doubleGe(Double.NEGATIVE_INFINITY, -1.0), Double.NEGATIVE_INFINITY >= -1.0, "Double.NEGATIVE_INFINITY >= -1.0"); + Tester.checkEqual(doubleGe(Double.NEGATIVE_INFINITY, -0.0), Double.NEGATIVE_INFINITY >= -0.0, "Double.NEGATIVE_INFINITY >= -0.0"); + Tester.checkEqual(doubleGe(Double.NEGATIVE_INFINITY, 0.0), Double.NEGATIVE_INFINITY >= 0.0, "Double.NEGATIVE_INFINITY >= 0.0"); + Tester.checkEqual(doubleGe(Double.NEGATIVE_INFINITY, 1.0), Double.NEGATIVE_INFINITY >= 1.0, "Double.NEGATIVE_INFINITY >= 1.0"); + Tester.checkEqual(doubleGe(Double.NEGATIVE_INFINITY, Double.MAX_VALUE), Double.NEGATIVE_INFINITY >= Double.MAX_VALUE, "Double.NEGATIVE_INFINITY >= Double.MAX_VALUE"); + Tester.checkEqual(doubleGe(Double.NEGATIVE_INFINITY, Double.POSITIVE_INFINITY), Double.NEGATIVE_INFINITY >= Double.POSITIVE_INFINITY, "Double.NEGATIVE_INFINITY >= Double.POSITIVE_INFINITY"); + Tester.checkEqual(doubleGe(Double.NEGATIVE_INFINITY, Double.NaN), Double.NEGATIVE_INFINITY >= Double.NaN, "Double.NEGATIVE_INFINITY >= Double.NaN"); + Tester.checkEqual(doubleGe(-1.0, Double.NEGATIVE_INFINITY), -1.0 >= Double.NEGATIVE_INFINITY, "-1.0 >= Double.NEGATIVE_INFINITY"); + Tester.checkEqual(doubleGe(-1.0, -1.0), -1.0 >= -1.0, "-1.0 >= -1.0"); + Tester.checkEqual(doubleGe(-1.0, -0.0), -1.0 >= -0.0, "-1.0 >= -0.0"); + Tester.checkEqual(doubleGe(-1.0, 0.0), -1.0 >= 0.0, "-1.0 >= 0.0"); + Tester.checkEqual(doubleGe(-1.0, 1.0), -1.0 >= 1.0, "-1.0 >= 1.0"); + Tester.checkEqual(doubleGe(-1.0, Double.MAX_VALUE), -1.0 >= Double.MAX_VALUE, "-1.0 >= Double.MAX_VALUE"); + Tester.checkEqual(doubleGe(-1.0, Double.POSITIVE_INFINITY), -1.0 >= Double.POSITIVE_INFINITY, "-1.0 >= Double.POSITIVE_INFINITY"); + Tester.checkEqual(doubleGe(-1.0, Double.NaN), -1.0 >= Double.NaN, "-1.0 >= Double.NaN"); + Tester.checkEqual(doubleGe(-0.0, Double.NEGATIVE_INFINITY), -0.0 >= Double.NEGATIVE_INFINITY, "-0.0 >= Double.NEGATIVE_INFINITY"); + Tester.checkEqual(doubleGe(-0.0, -1.0), -0.0 >= -1.0, "-0.0 >= -1.0"); + Tester.checkEqual(doubleGe(-0.0, -0.0), -0.0 >= -0.0, "-0.0 >= -0.0"); + Tester.checkEqual(doubleGe(-0.0, 0.0), -0.0 >= 0.0, "-0.0 >= 0.0"); + Tester.checkEqual(doubleGe(-0.0, 1.0), -0.0 >= 1.0, "-0.0 >= 1.0"); + Tester.checkEqual(doubleGe(-0.0, Double.MAX_VALUE), -0.0 >= Double.MAX_VALUE, "-0.0 >= Double.MAX_VALUE"); + Tester.checkEqual(doubleGe(-0.0, Double.POSITIVE_INFINITY), -0.0 >= Double.POSITIVE_INFINITY, "-0.0 >= Double.POSITIVE_INFINITY"); + Tester.checkEqual(doubleGe(-0.0, Double.NaN), -0.0 >= Double.NaN, "-0.0 >= Double.NaN"); + Tester.checkEqual(doubleGe(0.0, Double.NEGATIVE_INFINITY), 0.0 >= Double.NEGATIVE_INFINITY, "0.0 >= Double.NEGATIVE_INFINITY"); + Tester.checkEqual(doubleGe(0.0, -1.0), 0.0 >= -1.0, "0.0 >= -1.0"); + Tester.checkEqual(doubleGe(0.0, -0.0), 0.0 >= -0.0, "0.0 >= -0.0"); + Tester.checkEqual(doubleGe(0.0, 0.0), 0.0 >= 0.0, "0.0 >= 0.0"); + Tester.checkEqual(doubleGe(0.0, 1.0), 0.0 >= 1.0, "0.0 >= 1.0"); + Tester.checkEqual(doubleGe(0.0, Double.MAX_VALUE), 0.0 >= Double.MAX_VALUE, "0.0 >= Double.MAX_VALUE"); + Tester.checkEqual(doubleGe(0.0, Double.POSITIVE_INFINITY), 0.0 >= Double.POSITIVE_INFINITY, "0.0 >= Double.POSITIVE_INFINITY"); + Tester.checkEqual(doubleGe(0.0, Double.NaN), 0.0 >= Double.NaN, "0.0 >= Double.NaN"); + Tester.checkEqual(doubleGe(1.0, Double.NEGATIVE_INFINITY), 1.0 >= Double.NEGATIVE_INFINITY, "1.0 >= Double.NEGATIVE_INFINITY"); + Tester.checkEqual(doubleGe(1.0, -1.0), 1.0 >= -1.0, "1.0 >= -1.0"); + Tester.checkEqual(doubleGe(1.0, -0.0), 1.0 >= -0.0, "1.0 >= -0.0"); + Tester.checkEqual(doubleGe(1.0, 0.0), 1.0 >= 0.0, "1.0 >= 0.0"); + Tester.checkEqual(doubleGe(1.0, 1.0), 1.0 >= 1.0, "1.0 >= 1.0"); + Tester.checkEqual(doubleGe(1.0, Double.MAX_VALUE), 1.0 >= Double.MAX_VALUE, "1.0 >= Double.MAX_VALUE"); + Tester.checkEqual(doubleGe(1.0, Double.POSITIVE_INFINITY), 1.0 >= Double.POSITIVE_INFINITY, "1.0 >= Double.POSITIVE_INFINITY"); + Tester.checkEqual(doubleGe(1.0, Double.NaN), 1.0 >= Double.NaN, "1.0 >= Double.NaN"); + Tester.checkEqual(doubleGe(Double.MAX_VALUE, Double.NEGATIVE_INFINITY), Double.MAX_VALUE >= Double.NEGATIVE_INFINITY, "Double.MAX_VALUE >= Double.NEGATIVE_INFINITY"); + Tester.checkEqual(doubleGe(Double.MAX_VALUE, -1.0), Double.MAX_VALUE >= -1.0, "Double.MAX_VALUE >= -1.0"); + Tester.checkEqual(doubleGe(Double.MAX_VALUE, -0.0), Double.MAX_VALUE >= -0.0, "Double.MAX_VALUE >= -0.0"); + Tester.checkEqual(doubleGe(Double.MAX_VALUE, 0.0), Double.MAX_VALUE >= 0.0, "Double.MAX_VALUE >= 0.0"); + Tester.checkEqual(doubleGe(Double.MAX_VALUE, 1.0), Double.MAX_VALUE >= 1.0, "Double.MAX_VALUE >= 1.0"); + Tester.checkEqual(doubleGe(Double.MAX_VALUE, Double.MAX_VALUE), Double.MAX_VALUE >= Double.MAX_VALUE, "Double.MAX_VALUE >= Double.MAX_VALUE"); + Tester.checkEqual(doubleGe(Double.MAX_VALUE, Double.POSITIVE_INFINITY), Double.MAX_VALUE >= Double.POSITIVE_INFINITY, "Double.MAX_VALUE >= Double.POSITIVE_INFINITY"); + Tester.checkEqual(doubleGe(Double.MAX_VALUE, Double.NaN), Double.MAX_VALUE >= Double.NaN, "Double.MAX_VALUE >= Double.NaN"); + Tester.checkEqual(doubleGe(Double.POSITIVE_INFINITY, Double.NEGATIVE_INFINITY), Double.POSITIVE_INFINITY >= Double.NEGATIVE_INFINITY, "Double.POSITIVE_INFINITY >= Double.NEGATIVE_INFINITY"); + Tester.checkEqual(doubleGe(Double.POSITIVE_INFINITY, -1.0), Double.POSITIVE_INFINITY >= -1.0, "Double.POSITIVE_INFINITY >= -1.0"); + Tester.checkEqual(doubleGe(Double.POSITIVE_INFINITY, -0.0), Double.POSITIVE_INFINITY >= -0.0, "Double.POSITIVE_INFINITY >= -0.0"); + Tester.checkEqual(doubleGe(Double.POSITIVE_INFINITY, 0.0), Double.POSITIVE_INFINITY >= 0.0, "Double.POSITIVE_INFINITY >= 0.0"); + Tester.checkEqual(doubleGe(Double.POSITIVE_INFINITY, 1.0), Double.POSITIVE_INFINITY >= 1.0, "Double.POSITIVE_INFINITY >= 1.0"); + Tester.checkEqual(doubleGe(Double.POSITIVE_INFINITY, Double.MAX_VALUE), Double.POSITIVE_INFINITY >= Double.MAX_VALUE, "Double.POSITIVE_INFINITY >= Double.MAX_VALUE"); + Tester.checkEqual(doubleGe(Double.POSITIVE_INFINITY, Double.POSITIVE_INFINITY), Double.POSITIVE_INFINITY >= Double.POSITIVE_INFINITY, "Double.POSITIVE_INFINITY >= Double.POSITIVE_INFINITY"); + Tester.checkEqual(doubleGe(Double.POSITIVE_INFINITY, Double.NaN), Double.POSITIVE_INFINITY >= Double.NaN, "Double.POSITIVE_INFINITY >= Double.NaN"); + Tester.checkEqual(doubleGe(Double.NaN, Double.NEGATIVE_INFINITY), Double.NaN >= Double.NEGATIVE_INFINITY, "Double.NaN >= Double.NEGATIVE_INFINITY"); + Tester.checkEqual(doubleGe(Double.NaN, -1.0), Double.NaN >= -1.0, "Double.NaN >= -1.0"); + Tester.checkEqual(doubleGe(Double.NaN, -0.0), Double.NaN >= -0.0, "Double.NaN >= -0.0"); + Tester.checkEqual(doubleGe(Double.NaN, 0.0), Double.NaN >= 0.0, "Double.NaN >= 0.0"); + Tester.checkEqual(doubleGe(Double.NaN, 1.0), Double.NaN >= 1.0, "Double.NaN >= 1.0"); + Tester.checkEqual(doubleGe(Double.NaN, Double.MAX_VALUE), Double.NaN >= Double.MAX_VALUE, "Double.NaN >= Double.MAX_VALUE"); + Tester.checkEqual(doubleGe(Double.NaN, Double.POSITIVE_INFINITY), Double.NaN >= Double.POSITIVE_INFINITY, "Double.NaN >= Double.POSITIVE_INFINITY"); + Tester.checkEqual(doubleGe(Double.NaN, Double.NaN), Double.NaN >= Double.NaN, "Double.NaN >= Double.NaN"); + Tester.checkEqual(doubleEq(Double.NEGATIVE_INFINITY, Double.NEGATIVE_INFINITY), Double.NEGATIVE_INFINITY == Double.NEGATIVE_INFINITY, "Double.NEGATIVE_INFINITY == Double.NEGATIVE_INFINITY"); + Tester.checkEqual(doubleEq(Double.NEGATIVE_INFINITY, -1.0), Double.NEGATIVE_INFINITY == -1.0, "Double.NEGATIVE_INFINITY == -1.0"); + Tester.checkEqual(doubleEq(Double.NEGATIVE_INFINITY, -0.0), Double.NEGATIVE_INFINITY == -0.0, "Double.NEGATIVE_INFINITY == -0.0"); + Tester.checkEqual(doubleEq(Double.NEGATIVE_INFINITY, 0.0), Double.NEGATIVE_INFINITY == 0.0, "Double.NEGATIVE_INFINITY == 0.0"); + Tester.checkEqual(doubleEq(Double.NEGATIVE_INFINITY, 1.0), Double.NEGATIVE_INFINITY == 1.0, "Double.NEGATIVE_INFINITY == 1.0"); + Tester.checkEqual(doubleEq(Double.NEGATIVE_INFINITY, Double.MAX_VALUE), Double.NEGATIVE_INFINITY == Double.MAX_VALUE, "Double.NEGATIVE_INFINITY == Double.MAX_VALUE"); + Tester.checkEqual(doubleEq(Double.NEGATIVE_INFINITY, Double.POSITIVE_INFINITY), Double.NEGATIVE_INFINITY == Double.POSITIVE_INFINITY, "Double.NEGATIVE_INFINITY == Double.POSITIVE_INFINITY"); + Tester.checkEqual(doubleEq(Double.NEGATIVE_INFINITY, Double.NaN), Double.NEGATIVE_INFINITY == Double.NaN, "Double.NEGATIVE_INFINITY == Double.NaN"); + Tester.checkEqual(doubleEq(-1.0, Double.NEGATIVE_INFINITY), -1.0 == Double.NEGATIVE_INFINITY, "-1.0 == Double.NEGATIVE_INFINITY"); + Tester.checkEqual(doubleEq(-1.0, -1.0), -1.0 == -1.0, "-1.0 == -1.0"); + Tester.checkEqual(doubleEq(-1.0, -0.0), -1.0 == -0.0, "-1.0 == -0.0"); + Tester.checkEqual(doubleEq(-1.0, 0.0), -1.0 == 0.0, "-1.0 == 0.0"); + Tester.checkEqual(doubleEq(-1.0, 1.0), -1.0 == 1.0, "-1.0 == 1.0"); + Tester.checkEqual(doubleEq(-1.0, Double.MAX_VALUE), -1.0 == Double.MAX_VALUE, "-1.0 == Double.MAX_VALUE"); + Tester.checkEqual(doubleEq(-1.0, Double.POSITIVE_INFINITY), -1.0 == Double.POSITIVE_INFINITY, "-1.0 == Double.POSITIVE_INFINITY"); + Tester.checkEqual(doubleEq(-1.0, Double.NaN), -1.0 == Double.NaN, "-1.0 == Double.NaN"); + Tester.checkEqual(doubleEq(-0.0, Double.NEGATIVE_INFINITY), -0.0 == Double.NEGATIVE_INFINITY, "-0.0 == Double.NEGATIVE_INFINITY"); + Tester.checkEqual(doubleEq(-0.0, -1.0), -0.0 == -1.0, "-0.0 == -1.0"); + Tester.checkEqual(doubleEq(-0.0, -0.0), -0.0 == -0.0, "-0.0 == -0.0"); + Tester.checkEqual(doubleEq(-0.0, 0.0), -0.0 == 0.0, "-0.0 == 0.0"); + Tester.checkEqual(doubleEq(-0.0, 1.0), -0.0 == 1.0, "-0.0 == 1.0"); + Tester.checkEqual(doubleEq(-0.0, Double.MAX_VALUE), -0.0 == Double.MAX_VALUE, "-0.0 == Double.MAX_VALUE"); + Tester.checkEqual(doubleEq(-0.0, Double.POSITIVE_INFINITY), -0.0 == Double.POSITIVE_INFINITY, "-0.0 == Double.POSITIVE_INFINITY"); + Tester.checkEqual(doubleEq(-0.0, Double.NaN), -0.0 == Double.NaN, "-0.0 == Double.NaN"); + Tester.checkEqual(doubleEq(0.0, Double.NEGATIVE_INFINITY), 0.0 == Double.NEGATIVE_INFINITY, "0.0 == Double.NEGATIVE_INFINITY"); + Tester.checkEqual(doubleEq(0.0, -1.0), 0.0 == -1.0, "0.0 == -1.0"); + Tester.checkEqual(doubleEq(0.0, -0.0), 0.0 == -0.0, "0.0 == -0.0"); + Tester.checkEqual(doubleEq(0.0, 0.0), 0.0 == 0.0, "0.0 == 0.0"); + Tester.checkEqual(doubleEq(0.0, 1.0), 0.0 == 1.0, "0.0 == 1.0"); + Tester.checkEqual(doubleEq(0.0, Double.MAX_VALUE), 0.0 == Double.MAX_VALUE, "0.0 == Double.MAX_VALUE"); + Tester.checkEqual(doubleEq(0.0, Double.POSITIVE_INFINITY), 0.0 == Double.POSITIVE_INFINITY, "0.0 == Double.POSITIVE_INFINITY"); + Tester.checkEqual(doubleEq(0.0, Double.NaN), 0.0 == Double.NaN, "0.0 == Double.NaN"); + Tester.checkEqual(doubleEq(1.0, Double.NEGATIVE_INFINITY), 1.0 == Double.NEGATIVE_INFINITY, "1.0 == Double.NEGATIVE_INFINITY"); + Tester.checkEqual(doubleEq(1.0, -1.0), 1.0 == -1.0, "1.0 == -1.0"); + Tester.checkEqual(doubleEq(1.0, -0.0), 1.0 == -0.0, "1.0 == -0.0"); + Tester.checkEqual(doubleEq(1.0, 0.0), 1.0 == 0.0, "1.0 == 0.0"); + Tester.checkEqual(doubleEq(1.0, 1.0), 1.0 == 1.0, "1.0 == 1.0"); + Tester.checkEqual(doubleEq(1.0, Double.MAX_VALUE), 1.0 == Double.MAX_VALUE, "1.0 == Double.MAX_VALUE"); + Tester.checkEqual(doubleEq(1.0, Double.POSITIVE_INFINITY), 1.0 == Double.POSITIVE_INFINITY, "1.0 == Double.POSITIVE_INFINITY"); + Tester.checkEqual(doubleEq(1.0, Double.NaN), 1.0 == Double.NaN, "1.0 == Double.NaN"); + Tester.checkEqual(doubleEq(Double.MAX_VALUE, Double.NEGATIVE_INFINITY), Double.MAX_VALUE == Double.NEGATIVE_INFINITY, "Double.MAX_VALUE == Double.NEGATIVE_INFINITY"); + Tester.checkEqual(doubleEq(Double.MAX_VALUE, -1.0), Double.MAX_VALUE == -1.0, "Double.MAX_VALUE == -1.0"); + Tester.checkEqual(doubleEq(Double.MAX_VALUE, -0.0), Double.MAX_VALUE == -0.0, "Double.MAX_VALUE == -0.0"); + Tester.checkEqual(doubleEq(Double.MAX_VALUE, 0.0), Double.MAX_VALUE == 0.0, "Double.MAX_VALUE == 0.0"); + Tester.checkEqual(doubleEq(Double.MAX_VALUE, 1.0), Double.MAX_VALUE == 1.0, "Double.MAX_VALUE == 1.0"); + Tester.checkEqual(doubleEq(Double.MAX_VALUE, Double.MAX_VALUE), Double.MAX_VALUE == Double.MAX_VALUE, "Double.MAX_VALUE == Double.MAX_VALUE"); + Tester.checkEqual(doubleEq(Double.MAX_VALUE, Double.POSITIVE_INFINITY), Double.MAX_VALUE == Double.POSITIVE_INFINITY, "Double.MAX_VALUE == Double.POSITIVE_INFINITY"); + Tester.checkEqual(doubleEq(Double.MAX_VALUE, Double.NaN), Double.MAX_VALUE == Double.NaN, "Double.MAX_VALUE == Double.NaN"); + Tester.checkEqual(doubleEq(Double.POSITIVE_INFINITY, Double.NEGATIVE_INFINITY), Double.POSITIVE_INFINITY == Double.NEGATIVE_INFINITY, "Double.POSITIVE_INFINITY == Double.NEGATIVE_INFINITY"); + Tester.checkEqual(doubleEq(Double.POSITIVE_INFINITY, -1.0), Double.POSITIVE_INFINITY == -1.0, "Double.POSITIVE_INFINITY == -1.0"); + Tester.checkEqual(doubleEq(Double.POSITIVE_INFINITY, -0.0), Double.POSITIVE_INFINITY == -0.0, "Double.POSITIVE_INFINITY == -0.0"); + Tester.checkEqual(doubleEq(Double.POSITIVE_INFINITY, 0.0), Double.POSITIVE_INFINITY == 0.0, "Double.POSITIVE_INFINITY == 0.0"); + Tester.checkEqual(doubleEq(Double.POSITIVE_INFINITY, 1.0), Double.POSITIVE_INFINITY == 1.0, "Double.POSITIVE_INFINITY == 1.0"); + Tester.checkEqual(doubleEq(Double.POSITIVE_INFINITY, Double.MAX_VALUE), Double.POSITIVE_INFINITY == Double.MAX_VALUE, "Double.POSITIVE_INFINITY == Double.MAX_VALUE"); + Tester.checkEqual(doubleEq(Double.POSITIVE_INFINITY, Double.POSITIVE_INFINITY), Double.POSITIVE_INFINITY == Double.POSITIVE_INFINITY, "Double.POSITIVE_INFINITY == Double.POSITIVE_INFINITY"); + Tester.checkEqual(doubleEq(Double.POSITIVE_INFINITY, Double.NaN), Double.POSITIVE_INFINITY == Double.NaN, "Double.POSITIVE_INFINITY == Double.NaN"); + Tester.checkEqual(doubleEq(Double.NaN, Double.NEGATIVE_INFINITY), Double.NaN == Double.NEGATIVE_INFINITY, "Double.NaN == Double.NEGATIVE_INFINITY"); + Tester.checkEqual(doubleEq(Double.NaN, -1.0), Double.NaN == -1.0, "Double.NaN == -1.0"); + Tester.checkEqual(doubleEq(Double.NaN, -0.0), Double.NaN == -0.0, "Double.NaN == -0.0"); + Tester.checkEqual(doubleEq(Double.NaN, 0.0), Double.NaN == 0.0, "Double.NaN == 0.0"); + Tester.checkEqual(doubleEq(Double.NaN, 1.0), Double.NaN == 1.0, "Double.NaN == 1.0"); + Tester.checkEqual(doubleEq(Double.NaN, Double.MAX_VALUE), Double.NaN == Double.MAX_VALUE, "Double.NaN == Double.MAX_VALUE"); + Tester.checkEqual(doubleEq(Double.NaN, Double.POSITIVE_INFINITY), Double.NaN == Double.POSITIVE_INFINITY, "Double.NaN == Double.POSITIVE_INFINITY"); + Tester.checkEqual(doubleEq(Double.NaN, Double.NaN), Double.NaN == Double.NaN, "Double.NaN == Double.NaN"); + Tester.checkEqual(doubleNe(Double.NEGATIVE_INFINITY, Double.NEGATIVE_INFINITY), Double.NEGATIVE_INFINITY != Double.NEGATIVE_INFINITY, "Double.NEGATIVE_INFINITY != Double.NEGATIVE_INFINITY"); + Tester.checkEqual(doubleNe(Double.NEGATIVE_INFINITY, -1.0), Double.NEGATIVE_INFINITY != -1.0, "Double.NEGATIVE_INFINITY != -1.0"); + Tester.checkEqual(doubleNe(Double.NEGATIVE_INFINITY, -0.0), Double.NEGATIVE_INFINITY != -0.0, "Double.NEGATIVE_INFINITY != -0.0"); + Tester.checkEqual(doubleNe(Double.NEGATIVE_INFINITY, 0.0), Double.NEGATIVE_INFINITY != 0.0, "Double.NEGATIVE_INFINITY != 0.0"); + Tester.checkEqual(doubleNe(Double.NEGATIVE_INFINITY, 1.0), Double.NEGATIVE_INFINITY != 1.0, "Double.NEGATIVE_INFINITY != 1.0"); + Tester.checkEqual(doubleNe(Double.NEGATIVE_INFINITY, Double.MAX_VALUE), Double.NEGATIVE_INFINITY != Double.MAX_VALUE, "Double.NEGATIVE_INFINITY != Double.MAX_VALUE"); + Tester.checkEqual(doubleNe(Double.NEGATIVE_INFINITY, Double.POSITIVE_INFINITY), Double.NEGATIVE_INFINITY != Double.POSITIVE_INFINITY, "Double.NEGATIVE_INFINITY != Double.POSITIVE_INFINITY"); + Tester.checkEqual(doubleNe(Double.NEGATIVE_INFINITY, Double.NaN), Double.NEGATIVE_INFINITY != Double.NaN, "Double.NEGATIVE_INFINITY != Double.NaN"); + Tester.checkEqual(doubleNe(-1.0, Double.NEGATIVE_INFINITY), -1.0 != Double.NEGATIVE_INFINITY, "-1.0 != Double.NEGATIVE_INFINITY"); + Tester.checkEqual(doubleNe(-1.0, -1.0), -1.0 != -1.0, "-1.0 != -1.0"); + Tester.checkEqual(doubleNe(-1.0, -0.0), -1.0 != -0.0, "-1.0 != -0.0"); + Tester.checkEqual(doubleNe(-1.0, 0.0), -1.0 != 0.0, "-1.0 != 0.0"); + Tester.checkEqual(doubleNe(-1.0, 1.0), -1.0 != 1.0, "-1.0 != 1.0"); + Tester.checkEqual(doubleNe(-1.0, Double.MAX_VALUE), -1.0 != Double.MAX_VALUE, "-1.0 != Double.MAX_VALUE"); + Tester.checkEqual(doubleNe(-1.0, Double.POSITIVE_INFINITY), -1.0 != Double.POSITIVE_INFINITY, "-1.0 != Double.POSITIVE_INFINITY"); + Tester.checkEqual(doubleNe(-1.0, Double.NaN), -1.0 != Double.NaN, "-1.0 != Double.NaN"); + Tester.checkEqual(doubleNe(-0.0, Double.NEGATIVE_INFINITY), -0.0 != Double.NEGATIVE_INFINITY, "-0.0 != Double.NEGATIVE_INFINITY"); + Tester.checkEqual(doubleNe(-0.0, -1.0), -0.0 != -1.0, "-0.0 != -1.0"); + Tester.checkEqual(doubleNe(-0.0, -0.0), -0.0 != -0.0, "-0.0 != -0.0"); + Tester.checkEqual(doubleNe(-0.0, 0.0), -0.0 != 0.0, "-0.0 != 0.0"); + Tester.checkEqual(doubleNe(-0.0, 1.0), -0.0 != 1.0, "-0.0 != 1.0"); + Tester.checkEqual(doubleNe(-0.0, Double.MAX_VALUE), -0.0 != Double.MAX_VALUE, "-0.0 != Double.MAX_VALUE"); + Tester.checkEqual(doubleNe(-0.0, Double.POSITIVE_INFINITY), -0.0 != Double.POSITIVE_INFINITY, "-0.0 != Double.POSITIVE_INFINITY"); + Tester.checkEqual(doubleNe(-0.0, Double.NaN), -0.0 != Double.NaN, "-0.0 != Double.NaN"); + Tester.checkEqual(doubleNe(0.0, Double.NEGATIVE_INFINITY), 0.0 != Double.NEGATIVE_INFINITY, "0.0 != Double.NEGATIVE_INFINITY"); + Tester.checkEqual(doubleNe(0.0, -1.0), 0.0 != -1.0, "0.0 != -1.0"); + Tester.checkEqual(doubleNe(0.0, -0.0), 0.0 != -0.0, "0.0 != -0.0"); + Tester.checkEqual(doubleNe(0.0, 0.0), 0.0 != 0.0, "0.0 != 0.0"); + Tester.checkEqual(doubleNe(0.0, 1.0), 0.0 != 1.0, "0.0 != 1.0"); + Tester.checkEqual(doubleNe(0.0, Double.MAX_VALUE), 0.0 != Double.MAX_VALUE, "0.0 != Double.MAX_VALUE"); + Tester.checkEqual(doubleNe(0.0, Double.POSITIVE_INFINITY), 0.0 != Double.POSITIVE_INFINITY, "0.0 != Double.POSITIVE_INFINITY"); + Tester.checkEqual(doubleNe(0.0, Double.NaN), 0.0 != Double.NaN, "0.0 != Double.NaN"); + Tester.checkEqual(doubleNe(1.0, Double.NEGATIVE_INFINITY), 1.0 != Double.NEGATIVE_INFINITY, "1.0 != Double.NEGATIVE_INFINITY"); + Tester.checkEqual(doubleNe(1.0, -1.0), 1.0 != -1.0, "1.0 != -1.0"); + Tester.checkEqual(doubleNe(1.0, -0.0), 1.0 != -0.0, "1.0 != -0.0"); + Tester.checkEqual(doubleNe(1.0, 0.0), 1.0 != 0.0, "1.0 != 0.0"); + Tester.checkEqual(doubleNe(1.0, 1.0), 1.0 != 1.0, "1.0 != 1.0"); + Tester.checkEqual(doubleNe(1.0, Double.MAX_VALUE), 1.0 != Double.MAX_VALUE, "1.0 != Double.MAX_VALUE"); + Tester.checkEqual(doubleNe(1.0, Double.POSITIVE_INFINITY), 1.0 != Double.POSITIVE_INFINITY, "1.0 != Double.POSITIVE_INFINITY"); + Tester.checkEqual(doubleNe(1.0, Double.NaN), 1.0 != Double.NaN, "1.0 != Double.NaN"); + Tester.checkEqual(doubleNe(Double.MAX_VALUE, Double.NEGATIVE_INFINITY), Double.MAX_VALUE != Double.NEGATIVE_INFINITY, "Double.MAX_VALUE != Double.NEGATIVE_INFINITY"); + Tester.checkEqual(doubleNe(Double.MAX_VALUE, -1.0), Double.MAX_VALUE != -1.0, "Double.MAX_VALUE != -1.0"); + Tester.checkEqual(doubleNe(Double.MAX_VALUE, -0.0), Double.MAX_VALUE != -0.0, "Double.MAX_VALUE != -0.0"); + Tester.checkEqual(doubleNe(Double.MAX_VALUE, 0.0), Double.MAX_VALUE != 0.0, "Double.MAX_VALUE != 0.0"); + Tester.checkEqual(doubleNe(Double.MAX_VALUE, 1.0), Double.MAX_VALUE != 1.0, "Double.MAX_VALUE != 1.0"); + Tester.checkEqual(doubleNe(Double.MAX_VALUE, Double.MAX_VALUE), Double.MAX_VALUE != Double.MAX_VALUE, "Double.MAX_VALUE != Double.MAX_VALUE"); + Tester.checkEqual(doubleNe(Double.MAX_VALUE, Double.POSITIVE_INFINITY), Double.MAX_VALUE != Double.POSITIVE_INFINITY, "Double.MAX_VALUE != Double.POSITIVE_INFINITY"); + Tester.checkEqual(doubleNe(Double.MAX_VALUE, Double.NaN), Double.MAX_VALUE != Double.NaN, "Double.MAX_VALUE != Double.NaN"); + Tester.checkEqual(doubleNe(Double.POSITIVE_INFINITY, Double.NEGATIVE_INFINITY), Double.POSITIVE_INFINITY != Double.NEGATIVE_INFINITY, "Double.POSITIVE_INFINITY != Double.NEGATIVE_INFINITY"); + Tester.checkEqual(doubleNe(Double.POSITIVE_INFINITY, -1.0), Double.POSITIVE_INFINITY != -1.0, "Double.POSITIVE_INFINITY != -1.0"); + Tester.checkEqual(doubleNe(Double.POSITIVE_INFINITY, -0.0), Double.POSITIVE_INFINITY != -0.0, "Double.POSITIVE_INFINITY != -0.0"); + Tester.checkEqual(doubleNe(Double.POSITIVE_INFINITY, 0.0), Double.POSITIVE_INFINITY != 0.0, "Double.POSITIVE_INFINITY != 0.0"); + Tester.checkEqual(doubleNe(Double.POSITIVE_INFINITY, 1.0), Double.POSITIVE_INFINITY != 1.0, "Double.POSITIVE_INFINITY != 1.0"); + Tester.checkEqual(doubleNe(Double.POSITIVE_INFINITY, Double.MAX_VALUE), Double.POSITIVE_INFINITY != Double.MAX_VALUE, "Double.POSITIVE_INFINITY != Double.MAX_VALUE"); + Tester.checkEqual(doubleNe(Double.POSITIVE_INFINITY, Double.POSITIVE_INFINITY), Double.POSITIVE_INFINITY != Double.POSITIVE_INFINITY, "Double.POSITIVE_INFINITY != Double.POSITIVE_INFINITY"); + Tester.checkEqual(doubleNe(Double.POSITIVE_INFINITY, Double.NaN), Double.POSITIVE_INFINITY != Double.NaN, "Double.POSITIVE_INFINITY != Double.NaN"); + Tester.checkEqual(doubleNe(Double.NaN, Double.NEGATIVE_INFINITY), Double.NaN != Double.NEGATIVE_INFINITY, "Double.NaN != Double.NEGATIVE_INFINITY"); + Tester.checkEqual(doubleNe(Double.NaN, -1.0), Double.NaN != -1.0, "Double.NaN != -1.0"); + Tester.checkEqual(doubleNe(Double.NaN, -0.0), Double.NaN != -0.0, "Double.NaN != -0.0"); + Tester.checkEqual(doubleNe(Double.NaN, 0.0), Double.NaN != 0.0, "Double.NaN != 0.0"); + Tester.checkEqual(doubleNe(Double.NaN, 1.0), Double.NaN != 1.0, "Double.NaN != 1.0"); + Tester.checkEqual(doubleNe(Double.NaN, Double.MAX_VALUE), Double.NaN != Double.MAX_VALUE, "Double.NaN != Double.MAX_VALUE"); + Tester.checkEqual(doubleNe(Double.NaN, Double.POSITIVE_INFINITY), Double.NaN != Double.POSITIVE_INFINITY, "Double.NaN != Double.POSITIVE_INFINITY"); + Tester.checkEqual(doubleNe(Double.NaN, Double.NaN), Double.NaN != Double.NaN, "Double.NaN != Double.NaN"); + } + static void doubleSwitch() { + switch(0) { + case ((((double) + Double.NEGATIVE_INFINITY) == 0) ? 0 : 0): + case ((((double) + -1.0) == 0) ? 1 : 1): + case ((((double) + -0.0) == 0) ? 2 : 2): + case ((((double) + 0.0) == 0) ? 3 : 3): + case ((((double) + 1.0) == 0) ? 4 : 4): + case ((((double) + Double.MAX_VALUE) == 0) ? 5 : 5): + case ((((double) + Double.POSITIVE_INFINITY) == 0) ? 6 : 6): + case ((((double) + Double.NaN) == 0) ? 7 : 7): + case ((((double) - Double.NEGATIVE_INFINITY) == 0) ? 8 : 8): + case ((((double) - -1.0) == 0) ? 9 : 9): + case ((((double) - -0.0) == 0) ? 10 : 10): + case ((((double) - 0.0) == 0) ? 11 : 11): + case ((((double) - 1.0) == 0) ? 12 : 12): + case ((((double) - Double.MAX_VALUE) == 0) ? 13 : 13): + case ((((double) - Double.POSITIVE_INFINITY) == 0) ? 14 : 14): + case ((((double) - Double.NaN) == 0) ? 15 : 15): + case ((((double) (Double.NEGATIVE_INFINITY * Double.NEGATIVE_INFINITY)) == 0) ? 16 : 16): + case ((((double) (Double.NEGATIVE_INFINITY * -1.0)) == 0) ? 17 : 17): + case ((((double) (Double.NEGATIVE_INFINITY * -0.0)) == 0) ? 18 : 18): + case ((((double) (Double.NEGATIVE_INFINITY * 0.0)) == 0) ? 19 : 19): + case ((((double) (Double.NEGATIVE_INFINITY * 1.0)) == 0) ? 20 : 20): + case ((((double) (Double.NEGATIVE_INFINITY * Double.MAX_VALUE)) == 0) ? 21 : 21): + case ((((double) (Double.NEGATIVE_INFINITY * Double.POSITIVE_INFINITY)) == 0) ? 22 : 22): + case ((((double) (Double.NEGATIVE_INFINITY * Double.NaN)) == 0) ? 23 : 23): + case ((((double) (-1.0 * Double.NEGATIVE_INFINITY)) == 0) ? 24 : 24): + case ((((double) (-1.0 * -1.0)) == 0) ? 25 : 25): + case ((((double) (-1.0 * -0.0)) == 0) ? 26 : 26): + case ((((double) (-1.0 * 0.0)) == 0) ? 27 : 27): + case ((((double) (-1.0 * 1.0)) == 0) ? 28 : 28): + case ((((double) (-1.0 * Double.MAX_VALUE)) == 0) ? 29 : 29): + case ((((double) (-1.0 * Double.POSITIVE_INFINITY)) == 0) ? 30 : 30): + case ((((double) (-1.0 * Double.NaN)) == 0) ? 31 : 31): + case ((((double) (-0.0 * Double.NEGATIVE_INFINITY)) == 0) ? 32 : 32): + case ((((double) (-0.0 * -1.0)) == 0) ? 33 : 33): + case ((((double) (-0.0 * -0.0)) == 0) ? 34 : 34): + case ((((double) (-0.0 * 0.0)) == 0) ? 35 : 35): + case ((((double) (-0.0 * 1.0)) == 0) ? 36 : 36): + case ((((double) (-0.0 * Double.MAX_VALUE)) == 0) ? 37 : 37): + case ((((double) (-0.0 * Double.POSITIVE_INFINITY)) == 0) ? 38 : 38): + case ((((double) (-0.0 * Double.NaN)) == 0) ? 39 : 39): + case ((((double) (0.0 * Double.NEGATIVE_INFINITY)) == 0) ? 40 : 40): + case ((((double) (0.0 * -1.0)) == 0) ? 41 : 41): + case ((((double) (0.0 * -0.0)) == 0) ? 42 : 42): + case ((((double) (0.0 * 0.0)) == 0) ? 43 : 43): + case ((((double) (0.0 * 1.0)) == 0) ? 44 : 44): + case ((((double) (0.0 * Double.MAX_VALUE)) == 0) ? 45 : 45): + case ((((double) (0.0 * Double.POSITIVE_INFINITY)) == 0) ? 46 : 46): + case ((((double) (0.0 * Double.NaN)) == 0) ? 47 : 47): + case ((((double) (1.0 * Double.NEGATIVE_INFINITY)) == 0) ? 48 : 48): + case ((((double) (1.0 * -1.0)) == 0) ? 49 : 49): + case ((((double) (1.0 * -0.0)) == 0) ? 50 : 50): + case ((((double) (1.0 * 0.0)) == 0) ? 51 : 51): + case ((((double) (1.0 * 1.0)) == 0) ? 52 : 52): + case ((((double) (1.0 * Double.MAX_VALUE)) == 0) ? 53 : 53): + case ((((double) (1.0 * Double.POSITIVE_INFINITY)) == 0) ? 54 : 54): + case ((((double) (1.0 * Double.NaN)) == 0) ? 55 : 55): + case ((((double) (Double.MAX_VALUE * Double.NEGATIVE_INFINITY)) == 0) ? 56 : 56): + case ((((double) (Double.MAX_VALUE * -1.0)) == 0) ? 57 : 57): + case ((((double) (Double.MAX_VALUE * -0.0)) == 0) ? 58 : 58): + case ((((double) (Double.MAX_VALUE * 0.0)) == 0) ? 59 : 59): + case ((((double) (Double.MAX_VALUE * 1.0)) == 0) ? 60 : 60): + case ((((double) (Double.MAX_VALUE * Double.MAX_VALUE)) == 0) ? 61 : 61): + case ((((double) (Double.MAX_VALUE * Double.POSITIVE_INFINITY)) == 0) ? 62 : 62): + case ((((double) (Double.MAX_VALUE * Double.NaN)) == 0) ? 63 : 63): + case ((((double) (Double.POSITIVE_INFINITY * Double.NEGATIVE_INFINITY)) == 0) ? 64 : 64): + case ((((double) (Double.POSITIVE_INFINITY * -1.0)) == 0) ? 65 : 65): + case ((((double) (Double.POSITIVE_INFINITY * -0.0)) == 0) ? 66 : 66): + case ((((double) (Double.POSITIVE_INFINITY * 0.0)) == 0) ? 67 : 67): + case ((((double) (Double.POSITIVE_INFINITY * 1.0)) == 0) ? 68 : 68): + case ((((double) (Double.POSITIVE_INFINITY * Double.MAX_VALUE)) == 0) ? 69 : 69): + case ((((double) (Double.POSITIVE_INFINITY * Double.POSITIVE_INFINITY)) == 0) ? 70 : 70): + case ((((double) (Double.POSITIVE_INFINITY * Double.NaN)) == 0) ? 71 : 71): + case ((((double) (Double.NaN * Double.NEGATIVE_INFINITY)) == 0) ? 72 : 72): + case ((((double) (Double.NaN * -1.0)) == 0) ? 73 : 73): + case ((((double) (Double.NaN * -0.0)) == 0) ? 74 : 74): + case ((((double) (Double.NaN * 0.0)) == 0) ? 75 : 75): + case ((((double) (Double.NaN * 1.0)) == 0) ? 76 : 76): + case ((((double) (Double.NaN * Double.MAX_VALUE)) == 0) ? 77 : 77): + case ((((double) (Double.NaN * Double.POSITIVE_INFINITY)) == 0) ? 78 : 78): + case ((((double) (Double.NaN * Double.NaN)) == 0) ? 79 : 79): + case ((((double) (Double.NEGATIVE_INFINITY / Double.NEGATIVE_INFINITY)) == 0) ? 80 : 80): + case ((((double) (Double.NEGATIVE_INFINITY / -1.0)) == 0) ? 81 : 81): + case ((((double) (Double.NEGATIVE_INFINITY / -0.0)) == 0) ? 82 : 82): + case ((((double) (Double.NEGATIVE_INFINITY / 0.0)) == 0) ? 83 : 83): + case ((((double) (Double.NEGATIVE_INFINITY / 1.0)) == 0) ? 84 : 84): + case ((((double) (Double.NEGATIVE_INFINITY / Double.MAX_VALUE)) == 0) ? 85 : 85): + case ((((double) (Double.NEGATIVE_INFINITY / Double.POSITIVE_INFINITY)) == 0) ? 86 : 86): + case ((((double) (Double.NEGATIVE_INFINITY / Double.NaN)) == 0) ? 87 : 87): + case ((((double) (-1.0 / Double.NEGATIVE_INFINITY)) == 0) ? 88 : 88): + case ((((double) (-1.0 / -1.0)) == 0) ? 89 : 89): + case ((((double) (-1.0 / -0.0)) == 0) ? 90 : 90): + case ((((double) (-1.0 / 0.0)) == 0) ? 91 : 91): + case ((((double) (-1.0 / 1.0)) == 0) ? 92 : 92): + case ((((double) (-1.0 / Double.MAX_VALUE)) == 0) ? 93 : 93): + case ((((double) (-1.0 / Double.POSITIVE_INFINITY)) == 0) ? 94 : 94): + case ((((double) (-1.0 / Double.NaN)) == 0) ? 95 : 95): + case ((((double) (-0.0 / Double.NEGATIVE_INFINITY)) == 0) ? 96 : 96): + case ((((double) (-0.0 / -1.0)) == 0) ? 97 : 97): + case ((((double) (-0.0 / -0.0)) == 0) ? 98 : 98): + case ((((double) (-0.0 / 0.0)) == 0) ? 99 : 99): + case ((((double) (-0.0 / 1.0)) == 0) ? 100 : 100): + case ((((double) (-0.0 / Double.MAX_VALUE)) == 0) ? 101 : 101): + case ((((double) (-0.0 / Double.POSITIVE_INFINITY)) == 0) ? 102 : 102): + case ((((double) (-0.0 / Double.NaN)) == 0) ? 103 : 103): + case ((((double) (0.0 / Double.NEGATIVE_INFINITY)) == 0) ? 104 : 104): + case ((((double) (0.0 / -1.0)) == 0) ? 105 : 105): + case ((((double) (0.0 / -0.0)) == 0) ? 106 : 106): + case ((((double) (0.0 / 0.0)) == 0) ? 107 : 107): + case ((((double) (0.0 / 1.0)) == 0) ? 108 : 108): + case ((((double) (0.0 / Double.MAX_VALUE)) == 0) ? 109 : 109): + case ((((double) (0.0 / Double.POSITIVE_INFINITY)) == 0) ? 110 : 110): + case ((((double) (0.0 / Double.NaN)) == 0) ? 111 : 111): + case ((((double) (1.0 / Double.NEGATIVE_INFINITY)) == 0) ? 112 : 112): + case ((((double) (1.0 / -1.0)) == 0) ? 113 : 113): + case ((((double) (1.0 / -0.0)) == 0) ? 114 : 114): + case ((((double) (1.0 / 0.0)) == 0) ? 115 : 115): + case ((((double) (1.0 / 1.0)) == 0) ? 116 : 116): + case ((((double) (1.0 / Double.MAX_VALUE)) == 0) ? 117 : 117): + case ((((double) (1.0 / Double.POSITIVE_INFINITY)) == 0) ? 118 : 118): + case ((((double) (1.0 / Double.NaN)) == 0) ? 119 : 119): + case ((((double) (Double.MAX_VALUE / Double.NEGATIVE_INFINITY)) == 0) ? 120 : 120): + case ((((double) (Double.MAX_VALUE / -1.0)) == 0) ? 121 : 121): + case ((((double) (Double.MAX_VALUE / -0.0)) == 0) ? 122 : 122): + case ((((double) (Double.MAX_VALUE / 0.0)) == 0) ? 123 : 123): + case ((((double) (Double.MAX_VALUE / 1.0)) == 0) ? 124 : 124): + case ((((double) (Double.MAX_VALUE / Double.MAX_VALUE)) == 0) ? 125 : 125): + case ((((double) (Double.MAX_VALUE / Double.POSITIVE_INFINITY)) == 0) ? 126 : 126): + case ((((double) (Double.MAX_VALUE / Double.NaN)) == 0) ? 127 : 127): + case ((((double) (Double.POSITIVE_INFINITY / Double.NEGATIVE_INFINITY)) == 0) ? 128 : 128): + case ((((double) (Double.POSITIVE_INFINITY / -1.0)) == 0) ? 129 : 129): + case ((((double) (Double.POSITIVE_INFINITY / -0.0)) == 0) ? 130 : 130): + case ((((double) (Double.POSITIVE_INFINITY / 0.0)) == 0) ? 131 : 131): + case ((((double) (Double.POSITIVE_INFINITY / 1.0)) == 0) ? 132 : 132): + case ((((double) (Double.POSITIVE_INFINITY / Double.MAX_VALUE)) == 0) ? 133 : 133): + case ((((double) (Double.POSITIVE_INFINITY / Double.POSITIVE_INFINITY)) == 0) ? 134 : 134): + case ((((double) (Double.POSITIVE_INFINITY / Double.NaN)) == 0) ? 135 : 135): + case ((((double) (Double.NaN / Double.NEGATIVE_INFINITY)) == 0) ? 136 : 136): + case ((((double) (Double.NaN / -1.0)) == 0) ? 137 : 137): + case ((((double) (Double.NaN / -0.0)) == 0) ? 138 : 138): + case ((((double) (Double.NaN / 0.0)) == 0) ? 139 : 139): + case ((((double) (Double.NaN / 1.0)) == 0) ? 140 : 140): + case ((((double) (Double.NaN / Double.MAX_VALUE)) == 0) ? 141 : 141): + case ((((double) (Double.NaN / Double.POSITIVE_INFINITY)) == 0) ? 142 : 142): + case ((((double) (Double.NaN / Double.NaN)) == 0) ? 143 : 143): + case ((((double) (Double.NEGATIVE_INFINITY % Double.NEGATIVE_INFINITY)) == 0) ? 144 : 144): + case ((((double) (Double.NEGATIVE_INFINITY % -1.0)) == 0) ? 145 : 145): + case ((((double) (Double.NEGATIVE_INFINITY % -0.0)) == 0) ? 146 : 146): + case ((((double) (Double.NEGATIVE_INFINITY % 0.0)) == 0) ? 147 : 147): + case ((((double) (Double.NEGATIVE_INFINITY % 1.0)) == 0) ? 148 : 148): + case ((((double) (Double.NEGATIVE_INFINITY % Double.MAX_VALUE)) == 0) ? 149 : 149): + case ((((double) (Double.NEGATIVE_INFINITY % Double.POSITIVE_INFINITY)) == 0) ? 150 : 150): + case ((((double) (Double.NEGATIVE_INFINITY % Double.NaN)) == 0) ? 151 : 151): + case ((((double) (-1.0 % Double.NEGATIVE_INFINITY)) == 0) ? 152 : 152): + case ((((double) (-1.0 % -1.0)) == 0) ? 153 : 153): + case ((((double) (-1.0 % -0.0)) == 0) ? 154 : 154): + case ((((double) (-1.0 % 0.0)) == 0) ? 155 : 155): + case ((((double) (-1.0 % 1.0)) == 0) ? 156 : 156): + case ((((double) (-1.0 % Double.MAX_VALUE)) == 0) ? 157 : 157): + case ((((double) (-1.0 % Double.POSITIVE_INFINITY)) == 0) ? 158 : 158): + case ((((double) (-1.0 % Double.NaN)) == 0) ? 159 : 159): + case ((((double) (-0.0 % Double.NEGATIVE_INFINITY)) == 0) ? 160 : 160): + case ((((double) (-0.0 % -1.0)) == 0) ? 161 : 161): + case ((((double) (-0.0 % -0.0)) == 0) ? 162 : 162): + case ((((double) (-0.0 % 0.0)) == 0) ? 163 : 163): + case ((((double) (-0.0 % 1.0)) == 0) ? 164 : 164): + case ((((double) (-0.0 % Double.MAX_VALUE)) == 0) ? 165 : 165): + case ((((double) (-0.0 % Double.POSITIVE_INFINITY)) == 0) ? 166 : 166): + case ((((double) (-0.0 % Double.NaN)) == 0) ? 167 : 167): + case ((((double) (0.0 % Double.NEGATIVE_INFINITY)) == 0) ? 168 : 168): + case ((((double) (0.0 % -1.0)) == 0) ? 169 : 169): + case ((((double) (0.0 % -0.0)) == 0) ? 170 : 170): + case ((((double) (0.0 % 0.0)) == 0) ? 171 : 171): + case ((((double) (0.0 % 1.0)) == 0) ? 172 : 172): + case ((((double) (0.0 % Double.MAX_VALUE)) == 0) ? 173 : 173): + case ((((double) (0.0 % Double.POSITIVE_INFINITY)) == 0) ? 174 : 174): + case ((((double) (0.0 % Double.NaN)) == 0) ? 175 : 175): + case ((((double) (1.0 % Double.NEGATIVE_INFINITY)) == 0) ? 176 : 176): + case ((((double) (1.0 % -1.0)) == 0) ? 177 : 177): + case ((((double) (1.0 % -0.0)) == 0) ? 178 : 178): + case ((((double) (1.0 % 0.0)) == 0) ? 179 : 179): + case ((((double) (1.0 % 1.0)) == 0) ? 180 : 180): + case ((((double) (1.0 % Double.MAX_VALUE)) == 0) ? 181 : 181): + case ((((double) (1.0 % Double.POSITIVE_INFINITY)) == 0) ? 182 : 182): + case ((((double) (1.0 % Double.NaN)) == 0) ? 183 : 183): + case ((((double) (Double.MAX_VALUE % Double.NEGATIVE_INFINITY)) == 0) ? 184 : 184): + case ((((double) (Double.MAX_VALUE % -1.0)) == 0) ? 185 : 185): + case ((((double) (Double.MAX_VALUE % -0.0)) == 0) ? 186 : 186): + case ((((double) (Double.MAX_VALUE % 0.0)) == 0) ? 187 : 187): + case ((((double) (Double.MAX_VALUE % 1.0)) == 0) ? 188 : 188): + case ((((double) (Double.MAX_VALUE % Double.MAX_VALUE)) == 0) ? 189 : 189): + case ((((double) (Double.MAX_VALUE % Double.POSITIVE_INFINITY)) == 0) ? 190 : 190): + case ((((double) (Double.MAX_VALUE % Double.NaN)) == 0) ? 191 : 191): + case ((((double) (Double.POSITIVE_INFINITY % Double.NEGATIVE_INFINITY)) == 0) ? 192 : 192): + case ((((double) (Double.POSITIVE_INFINITY % -1.0)) == 0) ? 193 : 193): + case ((((double) (Double.POSITIVE_INFINITY % -0.0)) == 0) ? 194 : 194): + case ((((double) (Double.POSITIVE_INFINITY % 0.0)) == 0) ? 195 : 195): + case ((((double) (Double.POSITIVE_INFINITY % 1.0)) == 0) ? 196 : 196): + case ((((double) (Double.POSITIVE_INFINITY % Double.MAX_VALUE)) == 0) ? 197 : 197): + case ((((double) (Double.POSITIVE_INFINITY % Double.POSITIVE_INFINITY)) == 0) ? 198 : 198): + case ((((double) (Double.POSITIVE_INFINITY % Double.NaN)) == 0) ? 199 : 199): + case ((((double) (Double.NaN % Double.NEGATIVE_INFINITY)) == 0) ? 200 : 200): + case ((((double) (Double.NaN % -1.0)) == 0) ? 201 : 201): + case ((((double) (Double.NaN % -0.0)) == 0) ? 202 : 202): + case ((((double) (Double.NaN % 0.0)) == 0) ? 203 : 203): + case ((((double) (Double.NaN % 1.0)) == 0) ? 204 : 204): + case ((((double) (Double.NaN % Double.MAX_VALUE)) == 0) ? 205 : 205): + case ((((double) (Double.NaN % Double.POSITIVE_INFINITY)) == 0) ? 206 : 206): + case ((((double) (Double.NaN % Double.NaN)) == 0) ? 207 : 207): + case ((((double) (Double.NEGATIVE_INFINITY + Double.NEGATIVE_INFINITY)) == 0) ? 208 : 208): + case ((((double) (Double.NEGATIVE_INFINITY + -1.0)) == 0) ? 209 : 209): + case ((((double) (Double.NEGATIVE_INFINITY + -0.0)) == 0) ? 210 : 210): + case ((((double) (Double.NEGATIVE_INFINITY + 0.0)) == 0) ? 211 : 211): + case ((((double) (Double.NEGATIVE_INFINITY + 1.0)) == 0) ? 212 : 212): + case ((((double) (Double.NEGATIVE_INFINITY + Double.MAX_VALUE)) == 0) ? 213 : 213): + case ((((double) (Double.NEGATIVE_INFINITY + Double.POSITIVE_INFINITY)) == 0) ? 214 : 214): + case ((((double) (Double.NEGATIVE_INFINITY + Double.NaN)) == 0) ? 215 : 215): + case ((((double) (-1.0 + Double.NEGATIVE_INFINITY)) == 0) ? 216 : 216): + case ((((double) (-1.0 + -1.0)) == 0) ? 217 : 217): + case ((((double) (-1.0 + -0.0)) == 0) ? 218 : 218): + case ((((double) (-1.0 + 0.0)) == 0) ? 219 : 219): + case ((((double) (-1.0 + 1.0)) == 0) ? 220 : 220): + case ((((double) (-1.0 + Double.MAX_VALUE)) == 0) ? 221 : 221): + case ((((double) (-1.0 + Double.POSITIVE_INFINITY)) == 0) ? 222 : 222): + case ((((double) (-1.0 + Double.NaN)) == 0) ? 223 : 223): + case ((((double) (-0.0 + Double.NEGATIVE_INFINITY)) == 0) ? 224 : 224): + case ((((double) (-0.0 + -1.0)) == 0) ? 225 : 225): + case ((((double) (-0.0 + -0.0)) == 0) ? 226 : 226): + case ((((double) (-0.0 + 0.0)) == 0) ? 227 : 227): + case ((((double) (-0.0 + 1.0)) == 0) ? 228 : 228): + case ((((double) (-0.0 + Double.MAX_VALUE)) == 0) ? 229 : 229): + case ((((double) (-0.0 + Double.POSITIVE_INFINITY)) == 0) ? 230 : 230): + case ((((double) (-0.0 + Double.NaN)) == 0) ? 231 : 231): + case ((((double) (0.0 + Double.NEGATIVE_INFINITY)) == 0) ? 232 : 232): + case ((((double) (0.0 + -1.0)) == 0) ? 233 : 233): + case ((((double) (0.0 + -0.0)) == 0) ? 234 : 234): + case ((((double) (0.0 + 0.0)) == 0) ? 235 : 235): + case ((((double) (0.0 + 1.0)) == 0) ? 236 : 236): + case ((((double) (0.0 + Double.MAX_VALUE)) == 0) ? 237 : 237): + case ((((double) (0.0 + Double.POSITIVE_INFINITY)) == 0) ? 238 : 238): + case ((((double) (0.0 + Double.NaN)) == 0) ? 239 : 239): + case ((((double) (1.0 + Double.NEGATIVE_INFINITY)) == 0) ? 240 : 240): + case ((((double) (1.0 + -1.0)) == 0) ? 241 : 241): + case ((((double) (1.0 + -0.0)) == 0) ? 242 : 242): + case ((((double) (1.0 + 0.0)) == 0) ? 243 : 243): + case ((((double) (1.0 + 1.0)) == 0) ? 244 : 244): + case ((((double) (1.0 + Double.MAX_VALUE)) == 0) ? 245 : 245): + case ((((double) (1.0 + Double.POSITIVE_INFINITY)) == 0) ? 246 : 246): + case ((((double) (1.0 + Double.NaN)) == 0) ? 247 : 247): + case ((((double) (Double.MAX_VALUE + Double.NEGATIVE_INFINITY)) == 0) ? 248 : 248): + case ((((double) (Double.MAX_VALUE + -1.0)) == 0) ? 249 : 249): + case ((((double) (Double.MAX_VALUE + -0.0)) == 0) ? 250 : 250): + case ((((double) (Double.MAX_VALUE + 0.0)) == 0) ? 251 : 251): + case ((((double) (Double.MAX_VALUE + 1.0)) == 0) ? 252 : 252): + case ((((double) (Double.MAX_VALUE + Double.MAX_VALUE)) == 0) ? 253 : 253): + case ((((double) (Double.MAX_VALUE + Double.POSITIVE_INFINITY)) == 0) ? 254 : 254): + case ((((double) (Double.MAX_VALUE + Double.NaN)) == 0) ? 255 : 255): + case ((((double) (Double.POSITIVE_INFINITY + Double.NEGATIVE_INFINITY)) == 0) ? 256 : 256): + case ((((double) (Double.POSITIVE_INFINITY + -1.0)) == 0) ? 257 : 257): + case ((((double) (Double.POSITIVE_INFINITY + -0.0)) == 0) ? 258 : 258): + case ((((double) (Double.POSITIVE_INFINITY + 0.0)) == 0) ? 259 : 259): + case ((((double) (Double.POSITIVE_INFINITY + 1.0)) == 0) ? 260 : 260): + case ((((double) (Double.POSITIVE_INFINITY + Double.MAX_VALUE)) == 0) ? 261 : 261): + case ((((double) (Double.POSITIVE_INFINITY + Double.POSITIVE_INFINITY)) == 0) ? 262 : 262): + case ((((double) (Double.POSITIVE_INFINITY + Double.NaN)) == 0) ? 263 : 263): + case ((((double) (Double.NaN + Double.NEGATIVE_INFINITY)) == 0) ? 264 : 264): + case ((((double) (Double.NaN + -1.0)) == 0) ? 265 : 265): + case ((((double) (Double.NaN + -0.0)) == 0) ? 266 : 266): + case ((((double) (Double.NaN + 0.0)) == 0) ? 267 : 267): + case ((((double) (Double.NaN + 1.0)) == 0) ? 268 : 268): + case ((((double) (Double.NaN + Double.MAX_VALUE)) == 0) ? 269 : 269): + case ((((double) (Double.NaN + Double.POSITIVE_INFINITY)) == 0) ? 270 : 270): + case ((((double) (Double.NaN + Double.NaN)) == 0) ? 271 : 271): + case ((((double) (Double.NEGATIVE_INFINITY - Double.NEGATIVE_INFINITY)) == 0) ? 272 : 272): + case ((((double) (Double.NEGATIVE_INFINITY - -1.0)) == 0) ? 273 : 273): + case ((((double) (Double.NEGATIVE_INFINITY - -0.0)) == 0) ? 274 : 274): + case ((((double) (Double.NEGATIVE_INFINITY - 0.0)) == 0) ? 275 : 275): + case ((((double) (Double.NEGATIVE_INFINITY - 1.0)) == 0) ? 276 : 276): + case ((((double) (Double.NEGATIVE_INFINITY - Double.MAX_VALUE)) == 0) ? 277 : 277): + case ((((double) (Double.NEGATIVE_INFINITY - Double.POSITIVE_INFINITY)) == 0) ? 278 : 278): + case ((((double) (Double.NEGATIVE_INFINITY - Double.NaN)) == 0) ? 279 : 279): + case ((((double) (-1.0 - Double.NEGATIVE_INFINITY)) == 0) ? 280 : 280): + case ((((double) (-1.0 - -1.0)) == 0) ? 281 : 281): + case ((((double) (-1.0 - -0.0)) == 0) ? 282 : 282): + case ((((double) (-1.0 - 0.0)) == 0) ? 283 : 283): + case ((((double) (-1.0 - 1.0)) == 0) ? 284 : 284): + case ((((double) (-1.0 - Double.MAX_VALUE)) == 0) ? 285 : 285): + case ((((double) (-1.0 - Double.POSITIVE_INFINITY)) == 0) ? 286 : 286): + case ((((double) (-1.0 - Double.NaN)) == 0) ? 287 : 287): + case ((((double) (-0.0 - Double.NEGATIVE_INFINITY)) == 0) ? 288 : 288): + case ((((double) (-0.0 - -1.0)) == 0) ? 289 : 289): + case ((((double) (-0.0 - -0.0)) == 0) ? 290 : 290): + case ((((double) (-0.0 - 0.0)) == 0) ? 291 : 291): + case ((((double) (-0.0 - 1.0)) == 0) ? 292 : 292): + case ((((double) (-0.0 - Double.MAX_VALUE)) == 0) ? 293 : 293): + case ((((double) (-0.0 - Double.POSITIVE_INFINITY)) == 0) ? 294 : 294): + case ((((double) (-0.0 - Double.NaN)) == 0) ? 295 : 295): + case ((((double) (0.0 - Double.NEGATIVE_INFINITY)) == 0) ? 296 : 296): + case ((((double) (0.0 - -1.0)) == 0) ? 297 : 297): + case ((((double) (0.0 - -0.0)) == 0) ? 298 : 298): + case ((((double) (0.0 - 0.0)) == 0) ? 299 : 299): + case ((((double) (0.0 - 1.0)) == 0) ? 300 : 300): + case ((((double) (0.0 - Double.MAX_VALUE)) == 0) ? 301 : 301): + case ((((double) (0.0 - Double.POSITIVE_INFINITY)) == 0) ? 302 : 302): + case ((((double) (0.0 - Double.NaN)) == 0) ? 303 : 303): + case ((((double) (1.0 - Double.NEGATIVE_INFINITY)) == 0) ? 304 : 304): + case ((((double) (1.0 - -1.0)) == 0) ? 305 : 305): + case ((((double) (1.0 - -0.0)) == 0) ? 306 : 306): + case ((((double) (1.0 - 0.0)) == 0) ? 307 : 307): + case ((((double) (1.0 - 1.0)) == 0) ? 308 : 308): + case ((((double) (1.0 - Double.MAX_VALUE)) == 0) ? 309 : 309): + case ((((double) (1.0 - Double.POSITIVE_INFINITY)) == 0) ? 310 : 310): + case ((((double) (1.0 - Double.NaN)) == 0) ? 311 : 311): + case ((((double) (Double.MAX_VALUE - Double.NEGATIVE_INFINITY)) == 0) ? 312 : 312): + case ((((double) (Double.MAX_VALUE - -1.0)) == 0) ? 313 : 313): + case ((((double) (Double.MAX_VALUE - -0.0)) == 0) ? 314 : 314): + case ((((double) (Double.MAX_VALUE - 0.0)) == 0) ? 315 : 315): + case ((((double) (Double.MAX_VALUE - 1.0)) == 0) ? 316 : 316): + case ((((double) (Double.MAX_VALUE - Double.MAX_VALUE)) == 0) ? 317 : 317): + case ((((double) (Double.MAX_VALUE - Double.POSITIVE_INFINITY)) == 0) ? 318 : 318): + case ((((double) (Double.MAX_VALUE - Double.NaN)) == 0) ? 319 : 319): + case ((((double) (Double.POSITIVE_INFINITY - Double.NEGATIVE_INFINITY)) == 0) ? 320 : 320): + case ((((double) (Double.POSITIVE_INFINITY - -1.0)) == 0) ? 321 : 321): + case ((((double) (Double.POSITIVE_INFINITY - -0.0)) == 0) ? 322 : 322): + case ((((double) (Double.POSITIVE_INFINITY - 0.0)) == 0) ? 323 : 323): + case ((((double) (Double.POSITIVE_INFINITY - 1.0)) == 0) ? 324 : 324): + case ((((double) (Double.POSITIVE_INFINITY - Double.MAX_VALUE)) == 0) ? 325 : 325): + case ((((double) (Double.POSITIVE_INFINITY - Double.POSITIVE_INFINITY)) == 0) ? 326 : 326): + case ((((double) (Double.POSITIVE_INFINITY - Double.NaN)) == 0) ? 327 : 327): + case ((((double) (Double.NaN - Double.NEGATIVE_INFINITY)) == 0) ? 328 : 328): + case ((((double) (Double.NaN - -1.0)) == 0) ? 329 : 329): + case ((((double) (Double.NaN - -0.0)) == 0) ? 330 : 330): + case ((((double) (Double.NaN - 0.0)) == 0) ? 331 : 331): + case ((((double) (Double.NaN - 1.0)) == 0) ? 332 : 332): + case ((((double) (Double.NaN - Double.MAX_VALUE)) == 0) ? 333 : 333): + case ((((double) (Double.NaN - Double.POSITIVE_INFINITY)) == 0) ? 334 : 334): + case ((((double) (Double.NaN - Double.NaN)) == 0) ? 335 : 335): + case ((Double.NEGATIVE_INFINITY < Double.NEGATIVE_INFINITY) ? 336 : 336): + case ((Double.NEGATIVE_INFINITY < -1.0) ? 337 : 337): + case ((Double.NEGATIVE_INFINITY < -0.0) ? 338 : 338): + case ((Double.NEGATIVE_INFINITY < 0.0) ? 339 : 339): + case ((Double.NEGATIVE_INFINITY < 1.0) ? 340 : 340): + case ((Double.NEGATIVE_INFINITY < Double.MAX_VALUE) ? 341 : 341): + case ((Double.NEGATIVE_INFINITY < Double.POSITIVE_INFINITY) ? 342 : 342): + case ((Double.NEGATIVE_INFINITY < Double.NaN) ? 343 : 343): + case ((-1.0 < Double.NEGATIVE_INFINITY) ? 344 : 344): + case ((-1.0 < -1.0) ? 345 : 345): + case ((-1.0 < -0.0) ? 346 : 346): + case ((-1.0 < 0.0) ? 347 : 347): + case ((-1.0 < 1.0) ? 348 : 348): + case ((-1.0 < Double.MAX_VALUE) ? 349 : 349): + case ((-1.0 < Double.POSITIVE_INFINITY) ? 350 : 350): + case ((-1.0 < Double.NaN) ? 351 : 351): + case ((-0.0 < Double.NEGATIVE_INFINITY) ? 352 : 352): + case ((-0.0 < -1.0) ? 353 : 353): + case ((-0.0 < -0.0) ? 354 : 354): + case ((-0.0 < 0.0) ? 355 : 355): + case ((-0.0 < 1.0) ? 356 : 356): + case ((-0.0 < Double.MAX_VALUE) ? 357 : 357): + case ((-0.0 < Double.POSITIVE_INFINITY) ? 358 : 358): + case ((-0.0 < Double.NaN) ? 359 : 359): + case ((0.0 < Double.NEGATIVE_INFINITY) ? 360 : 360): + case ((0.0 < -1.0) ? 361 : 361): + case ((0.0 < -0.0) ? 362 : 362): + case ((0.0 < 0.0) ? 363 : 363): + case ((0.0 < 1.0) ? 364 : 364): + case ((0.0 < Double.MAX_VALUE) ? 365 : 365): + case ((0.0 < Double.POSITIVE_INFINITY) ? 366 : 366): + case ((0.0 < Double.NaN) ? 367 : 367): + case ((1.0 < Double.NEGATIVE_INFINITY) ? 368 : 368): + case ((1.0 < -1.0) ? 369 : 369): + case ((1.0 < -0.0) ? 370 : 370): + case ((1.0 < 0.0) ? 371 : 371): + case ((1.0 < 1.0) ? 372 : 372): + case ((1.0 < Double.MAX_VALUE) ? 373 : 373): + case ((1.0 < Double.POSITIVE_INFINITY) ? 374 : 374): + case ((1.0 < Double.NaN) ? 375 : 375): + case ((Double.MAX_VALUE < Double.NEGATIVE_INFINITY) ? 376 : 376): + case ((Double.MAX_VALUE < -1.0) ? 377 : 377): + case ((Double.MAX_VALUE < -0.0) ? 378 : 378): + case ((Double.MAX_VALUE < 0.0) ? 379 : 379): + case ((Double.MAX_VALUE < 1.0) ? 380 : 380): + case ((Double.MAX_VALUE < Double.MAX_VALUE) ? 381 : 381): + case ((Double.MAX_VALUE < Double.POSITIVE_INFINITY) ? 382 : 382): + case ((Double.MAX_VALUE < Double.NaN) ? 383 : 383): + case ((Double.POSITIVE_INFINITY < Double.NEGATIVE_INFINITY) ? 384 : 384): + case ((Double.POSITIVE_INFINITY < -1.0) ? 385 : 385): + case ((Double.POSITIVE_INFINITY < -0.0) ? 386 : 386): + case ((Double.POSITIVE_INFINITY < 0.0) ? 387 : 387): + case ((Double.POSITIVE_INFINITY < 1.0) ? 388 : 388): + case ((Double.POSITIVE_INFINITY < Double.MAX_VALUE) ? 389 : 389): + case ((Double.POSITIVE_INFINITY < Double.POSITIVE_INFINITY) ? 390 : 390): + case ((Double.POSITIVE_INFINITY < Double.NaN) ? 391 : 391): + case ((Double.NaN < Double.NEGATIVE_INFINITY) ? 392 : 392): + case ((Double.NaN < -1.0) ? 393 : 393): + case ((Double.NaN < -0.0) ? 394 : 394): + case ((Double.NaN < 0.0) ? 395 : 395): + case ((Double.NaN < 1.0) ? 396 : 396): + case ((Double.NaN < Double.MAX_VALUE) ? 397 : 397): + case ((Double.NaN < Double.POSITIVE_INFINITY) ? 398 : 398): + case ((Double.NaN < Double.NaN) ? 399 : 399): + case ((Double.NEGATIVE_INFINITY > Double.NEGATIVE_INFINITY) ? 400 : 400): + case ((Double.NEGATIVE_INFINITY > -1.0) ? 401 : 401): + case ((Double.NEGATIVE_INFINITY > -0.0) ? 402 : 402): + case ((Double.NEGATIVE_INFINITY > 0.0) ? 403 : 403): + case ((Double.NEGATIVE_INFINITY > 1.0) ? 404 : 404): + case ((Double.NEGATIVE_INFINITY > Double.MAX_VALUE) ? 405 : 405): + case ((Double.NEGATIVE_INFINITY > Double.POSITIVE_INFINITY) ? 406 : 406): + case ((Double.NEGATIVE_INFINITY > Double.NaN) ? 407 : 407): + case ((-1.0 > Double.NEGATIVE_INFINITY) ? 408 : 408): + case ((-1.0 > -1.0) ? 409 : 409): + case ((-1.0 > -0.0) ? 410 : 410): + case ((-1.0 > 0.0) ? 411 : 411): + case ((-1.0 > 1.0) ? 412 : 412): + case ((-1.0 > Double.MAX_VALUE) ? 413 : 413): + case ((-1.0 > Double.POSITIVE_INFINITY) ? 414 : 414): + case ((-1.0 > Double.NaN) ? 415 : 415): + case ((-0.0 > Double.NEGATIVE_INFINITY) ? 416 : 416): + case ((-0.0 > -1.0) ? 417 : 417): + case ((-0.0 > -0.0) ? 418 : 418): + case ((-0.0 > 0.0) ? 419 : 419): + case ((-0.0 > 1.0) ? 420 : 420): + case ((-0.0 > Double.MAX_VALUE) ? 421 : 421): + case ((-0.0 > Double.POSITIVE_INFINITY) ? 422 : 422): + case ((-0.0 > Double.NaN) ? 423 : 423): + case ((0.0 > Double.NEGATIVE_INFINITY) ? 424 : 424): + case ((0.0 > -1.0) ? 425 : 425): + case ((0.0 > -0.0) ? 426 : 426): + case ((0.0 > 0.0) ? 427 : 427): + case ((0.0 > 1.0) ? 428 : 428): + case ((0.0 > Double.MAX_VALUE) ? 429 : 429): + case ((0.0 > Double.POSITIVE_INFINITY) ? 430 : 430): + case ((0.0 > Double.NaN) ? 431 : 431): + case ((1.0 > Double.NEGATIVE_INFINITY) ? 432 : 432): + case ((1.0 > -1.0) ? 433 : 433): + case ((1.0 > -0.0) ? 434 : 434): + case ((1.0 > 0.0) ? 435 : 435): + case ((1.0 > 1.0) ? 436 : 436): + case ((1.0 > Double.MAX_VALUE) ? 437 : 437): + case ((1.0 > Double.POSITIVE_INFINITY) ? 438 : 438): + case ((1.0 > Double.NaN) ? 439 : 439): + case ((Double.MAX_VALUE > Double.NEGATIVE_INFINITY) ? 440 : 440): + case ((Double.MAX_VALUE > -1.0) ? 441 : 441): + case ((Double.MAX_VALUE > -0.0) ? 442 : 442): + case ((Double.MAX_VALUE > 0.0) ? 443 : 443): + case ((Double.MAX_VALUE > 1.0) ? 444 : 444): + case ((Double.MAX_VALUE > Double.MAX_VALUE) ? 445 : 445): + case ((Double.MAX_VALUE > Double.POSITIVE_INFINITY) ? 446 : 446): + case ((Double.MAX_VALUE > Double.NaN) ? 447 : 447): + case ((Double.POSITIVE_INFINITY > Double.NEGATIVE_INFINITY) ? 448 : 448): + case ((Double.POSITIVE_INFINITY > -1.0) ? 449 : 449): + case ((Double.POSITIVE_INFINITY > -0.0) ? 450 : 450): + case ((Double.POSITIVE_INFINITY > 0.0) ? 451 : 451): + case ((Double.POSITIVE_INFINITY > 1.0) ? 452 : 452): + case ((Double.POSITIVE_INFINITY > Double.MAX_VALUE) ? 453 : 453): + case ((Double.POSITIVE_INFINITY > Double.POSITIVE_INFINITY) ? 454 : 454): + case ((Double.POSITIVE_INFINITY > Double.NaN) ? 455 : 455): + case ((Double.NaN > Double.NEGATIVE_INFINITY) ? 456 : 456): + case ((Double.NaN > -1.0) ? 457 : 457): + case ((Double.NaN > -0.0) ? 458 : 458): + case ((Double.NaN > 0.0) ? 459 : 459): + case ((Double.NaN > 1.0) ? 460 : 460): + case ((Double.NaN > Double.MAX_VALUE) ? 461 : 461): + case ((Double.NaN > Double.POSITIVE_INFINITY) ? 462 : 462): + case ((Double.NaN > Double.NaN) ? 463 : 463): + case ((Double.NEGATIVE_INFINITY <= Double.NEGATIVE_INFINITY) ? 464 : 464): + case ((Double.NEGATIVE_INFINITY <= -1.0) ? 465 : 465): + case ((Double.NEGATIVE_INFINITY <= -0.0) ? 466 : 466): + case ((Double.NEGATIVE_INFINITY <= 0.0) ? 467 : 467): + case ((Double.NEGATIVE_INFINITY <= 1.0) ? 468 : 468): + case ((Double.NEGATIVE_INFINITY <= Double.MAX_VALUE) ? 469 : 469): + case ((Double.NEGATIVE_INFINITY <= Double.POSITIVE_INFINITY) ? 470 : 470): + case ((Double.NEGATIVE_INFINITY <= Double.NaN) ? 471 : 471): + case ((-1.0 <= Double.NEGATIVE_INFINITY) ? 472 : 472): + case ((-1.0 <= -1.0) ? 473 : 473): + case ((-1.0 <= -0.0) ? 474 : 474): + case ((-1.0 <= 0.0) ? 475 : 475): + case ((-1.0 <= 1.0) ? 476 : 476): + case ((-1.0 <= Double.MAX_VALUE) ? 477 : 477): + case ((-1.0 <= Double.POSITIVE_INFINITY) ? 478 : 478): + case ((-1.0 <= Double.NaN) ? 479 : 479): + case ((-0.0 <= Double.NEGATIVE_INFINITY) ? 480 : 480): + case ((-0.0 <= -1.0) ? 481 : 481): + case ((-0.0 <= -0.0) ? 482 : 482): + case ((-0.0 <= 0.0) ? 483 : 483): + case ((-0.0 <= 1.0) ? 484 : 484): + case ((-0.0 <= Double.MAX_VALUE) ? 485 : 485): + case ((-0.0 <= Double.POSITIVE_INFINITY) ? 486 : 486): + case ((-0.0 <= Double.NaN) ? 487 : 487): + case ((0.0 <= Double.NEGATIVE_INFINITY) ? 488 : 488): + case ((0.0 <= -1.0) ? 489 : 489): + case ((0.0 <= -0.0) ? 490 : 490): + case ((0.0 <= 0.0) ? 491 : 491): + case ((0.0 <= 1.0) ? 492 : 492): + case ((0.0 <= Double.MAX_VALUE) ? 493 : 493): + case ((0.0 <= Double.POSITIVE_INFINITY) ? 494 : 494): + case ((0.0 <= Double.NaN) ? 495 : 495): + case ((1.0 <= Double.NEGATIVE_INFINITY) ? 496 : 496): + case ((1.0 <= -1.0) ? 497 : 497): + case ((1.0 <= -0.0) ? 498 : 498): + case ((1.0 <= 0.0) ? 499 : 499): + case ((1.0 <= 1.0) ? 500 : 500): + case ((1.0 <= Double.MAX_VALUE) ? 501 : 501): + case ((1.0 <= Double.POSITIVE_INFINITY) ? 502 : 502): + case ((1.0 <= Double.NaN) ? 503 : 503): + case ((Double.MAX_VALUE <= Double.NEGATIVE_INFINITY) ? 504 : 504): + case ((Double.MAX_VALUE <= -1.0) ? 505 : 505): + case ((Double.MAX_VALUE <= -0.0) ? 506 : 506): + case ((Double.MAX_VALUE <= 0.0) ? 507 : 507): + case ((Double.MAX_VALUE <= 1.0) ? 508 : 508): + case ((Double.MAX_VALUE <= Double.MAX_VALUE) ? 509 : 509): + case ((Double.MAX_VALUE <= Double.POSITIVE_INFINITY) ? 510 : 510): + case ((Double.MAX_VALUE <= Double.NaN) ? 511 : 511): + case ((Double.POSITIVE_INFINITY <= Double.NEGATIVE_INFINITY) ? 512 : 512): + case ((Double.POSITIVE_INFINITY <= -1.0) ? 513 : 513): + case ((Double.POSITIVE_INFINITY <= -0.0) ? 514 : 514): + case ((Double.POSITIVE_INFINITY <= 0.0) ? 515 : 515): + case ((Double.POSITIVE_INFINITY <= 1.0) ? 516 : 516): + case ((Double.POSITIVE_INFINITY <= Double.MAX_VALUE) ? 517 : 517): + case ((Double.POSITIVE_INFINITY <= Double.POSITIVE_INFINITY) ? 518 : 518): + case ((Double.POSITIVE_INFINITY <= Double.NaN) ? 519 : 519): + case ((Double.NaN <= Double.NEGATIVE_INFINITY) ? 520 : 520): + case ((Double.NaN <= -1.0) ? 521 : 521): + case ((Double.NaN <= -0.0) ? 522 : 522): + case ((Double.NaN <= 0.0) ? 523 : 523): + case ((Double.NaN <= 1.0) ? 524 : 524): + case ((Double.NaN <= Double.MAX_VALUE) ? 525 : 525): + case ((Double.NaN <= Double.POSITIVE_INFINITY) ? 526 : 526): + case ((Double.NaN <= Double.NaN) ? 527 : 527): + case ((Double.NEGATIVE_INFINITY >= Double.NEGATIVE_INFINITY) ? 528 : 528): + case ((Double.NEGATIVE_INFINITY >= -1.0) ? 529 : 529): + case ((Double.NEGATIVE_INFINITY >= -0.0) ? 530 : 530): + case ((Double.NEGATIVE_INFINITY >= 0.0) ? 531 : 531): + case ((Double.NEGATIVE_INFINITY >= 1.0) ? 532 : 532): + case ((Double.NEGATIVE_INFINITY >= Double.MAX_VALUE) ? 533 : 533): + case ((Double.NEGATIVE_INFINITY >= Double.POSITIVE_INFINITY) ? 534 : 534): + case ((Double.NEGATIVE_INFINITY >= Double.NaN) ? 535 : 535): + case ((-1.0 >= Double.NEGATIVE_INFINITY) ? 536 : 536): + case ((-1.0 >= -1.0) ? 537 : 537): + case ((-1.0 >= -0.0) ? 538 : 538): + case ((-1.0 >= 0.0) ? 539 : 539): + case ((-1.0 >= 1.0) ? 540 : 540): + case ((-1.0 >= Double.MAX_VALUE) ? 541 : 541): + case ((-1.0 >= Double.POSITIVE_INFINITY) ? 542 : 542): + case ((-1.0 >= Double.NaN) ? 543 : 543): + case ((-0.0 >= Double.NEGATIVE_INFINITY) ? 544 : 544): + case ((-0.0 >= -1.0) ? 545 : 545): + case ((-0.0 >= -0.0) ? 546 : 546): + case ((-0.0 >= 0.0) ? 547 : 547): + case ((-0.0 >= 1.0) ? 548 : 548): + case ((-0.0 >= Double.MAX_VALUE) ? 549 : 549): + case ((-0.0 >= Double.POSITIVE_INFINITY) ? 550 : 550): + case ((-0.0 >= Double.NaN) ? 551 : 551): + case ((0.0 >= Double.NEGATIVE_INFINITY) ? 552 : 552): + case ((0.0 >= -1.0) ? 553 : 553): + case ((0.0 >= -0.0) ? 554 : 554): + case ((0.0 >= 0.0) ? 555 : 555): + case ((0.0 >= 1.0) ? 556 : 556): + case ((0.0 >= Double.MAX_VALUE) ? 557 : 557): + case ((0.0 >= Double.POSITIVE_INFINITY) ? 558 : 558): + case ((0.0 >= Double.NaN) ? 559 : 559): + case ((1.0 >= Double.NEGATIVE_INFINITY) ? 560 : 560): + case ((1.0 >= -1.0) ? 561 : 561): + case ((1.0 >= -0.0) ? 562 : 562): + case ((1.0 >= 0.0) ? 563 : 563): + case ((1.0 >= 1.0) ? 564 : 564): + case ((1.0 >= Double.MAX_VALUE) ? 565 : 565): + case ((1.0 >= Double.POSITIVE_INFINITY) ? 566 : 566): + case ((1.0 >= Double.NaN) ? 567 : 567): + case ((Double.MAX_VALUE >= Double.NEGATIVE_INFINITY) ? 568 : 568): + case ((Double.MAX_VALUE >= -1.0) ? 569 : 569): + case ((Double.MAX_VALUE >= -0.0) ? 570 : 570): + case ((Double.MAX_VALUE >= 0.0) ? 571 : 571): + case ((Double.MAX_VALUE >= 1.0) ? 572 : 572): + case ((Double.MAX_VALUE >= Double.MAX_VALUE) ? 573 : 573): + case ((Double.MAX_VALUE >= Double.POSITIVE_INFINITY) ? 574 : 574): + case ((Double.MAX_VALUE >= Double.NaN) ? 575 : 575): + case ((Double.POSITIVE_INFINITY >= Double.NEGATIVE_INFINITY) ? 576 : 576): + case ((Double.POSITIVE_INFINITY >= -1.0) ? 577 : 577): + case ((Double.POSITIVE_INFINITY >= -0.0) ? 578 : 578): + case ((Double.POSITIVE_INFINITY >= 0.0) ? 579 : 579): + case ((Double.POSITIVE_INFINITY >= 1.0) ? 580 : 580): + case ((Double.POSITIVE_INFINITY >= Double.MAX_VALUE) ? 581 : 581): + case ((Double.POSITIVE_INFINITY >= Double.POSITIVE_INFINITY) ? 582 : 582): + case ((Double.POSITIVE_INFINITY >= Double.NaN) ? 583 : 583): + case ((Double.NaN >= Double.NEGATIVE_INFINITY) ? 584 : 584): + case ((Double.NaN >= -1.0) ? 585 : 585): + case ((Double.NaN >= -0.0) ? 586 : 586): + case ((Double.NaN >= 0.0) ? 587 : 587): + case ((Double.NaN >= 1.0) ? 588 : 588): + case ((Double.NaN >= Double.MAX_VALUE) ? 589 : 589): + case ((Double.NaN >= Double.POSITIVE_INFINITY) ? 590 : 590): + case ((Double.NaN >= Double.NaN) ? 591 : 591): + case ((Double.NEGATIVE_INFINITY == Double.NEGATIVE_INFINITY) ? 592 : 592): + case ((Double.NEGATIVE_INFINITY == -1.0) ? 593 : 593): + case ((Double.NEGATIVE_INFINITY == -0.0) ? 594 : 594): + case ((Double.NEGATIVE_INFINITY == 0.0) ? 595 : 595): + case ((Double.NEGATIVE_INFINITY == 1.0) ? 596 : 596): + case ((Double.NEGATIVE_INFINITY == Double.MAX_VALUE) ? 597 : 597): + case ((Double.NEGATIVE_INFINITY == Double.POSITIVE_INFINITY) ? 598 : 598): + case ((Double.NEGATIVE_INFINITY == Double.NaN) ? 599 : 599): + case ((-1.0 == Double.NEGATIVE_INFINITY) ? 600 : 600): + case ((-1.0 == -1.0) ? 601 : 601): + case ((-1.0 == -0.0) ? 602 : 602): + case ((-1.0 == 0.0) ? 603 : 603): + case ((-1.0 == 1.0) ? 604 : 604): + case ((-1.0 == Double.MAX_VALUE) ? 605 : 605): + case ((-1.0 == Double.POSITIVE_INFINITY) ? 606 : 606): + case ((-1.0 == Double.NaN) ? 607 : 607): + case ((-0.0 == Double.NEGATIVE_INFINITY) ? 608 : 608): + case ((-0.0 == -1.0) ? 609 : 609): + case ((-0.0 == -0.0) ? 610 : 610): + case ((-0.0 == 0.0) ? 611 : 611): + case ((-0.0 == 1.0) ? 612 : 612): + case ((-0.0 == Double.MAX_VALUE) ? 613 : 613): + case ((-0.0 == Double.POSITIVE_INFINITY) ? 614 : 614): + case ((-0.0 == Double.NaN) ? 615 : 615): + case ((0.0 == Double.NEGATIVE_INFINITY) ? 616 : 616): + case ((0.0 == -1.0) ? 617 : 617): + case ((0.0 == -0.0) ? 618 : 618): + case ((0.0 == 0.0) ? 619 : 619): + case ((0.0 == 1.0) ? 620 : 620): + case ((0.0 == Double.MAX_VALUE) ? 621 : 621): + case ((0.0 == Double.POSITIVE_INFINITY) ? 622 : 622): + case ((0.0 == Double.NaN) ? 623 : 623): + case ((1.0 == Double.NEGATIVE_INFINITY) ? 624 : 624): + case ((1.0 == -1.0) ? 625 : 625): + case ((1.0 == -0.0) ? 626 : 626): + case ((1.0 == 0.0) ? 627 : 627): + case ((1.0 == 1.0) ? 628 : 628): + case ((1.0 == Double.MAX_VALUE) ? 629 : 629): + case ((1.0 == Double.POSITIVE_INFINITY) ? 630 : 630): + case ((1.0 == Double.NaN) ? 631 : 631): + case ((Double.MAX_VALUE == Double.NEGATIVE_INFINITY) ? 632 : 632): + case ((Double.MAX_VALUE == -1.0) ? 633 : 633): + case ((Double.MAX_VALUE == -0.0) ? 634 : 634): + case ((Double.MAX_VALUE == 0.0) ? 635 : 635): + case ((Double.MAX_VALUE == 1.0) ? 636 : 636): + case ((Double.MAX_VALUE == Double.MAX_VALUE) ? 637 : 637): + case ((Double.MAX_VALUE == Double.POSITIVE_INFINITY) ? 638 : 638): + case ((Double.MAX_VALUE == Double.NaN) ? 639 : 639): + case ((Double.POSITIVE_INFINITY == Double.NEGATIVE_INFINITY) ? 640 : 640): + case ((Double.POSITIVE_INFINITY == -1.0) ? 641 : 641): + case ((Double.POSITIVE_INFINITY == -0.0) ? 642 : 642): + case ((Double.POSITIVE_INFINITY == 0.0) ? 643 : 643): + case ((Double.POSITIVE_INFINITY == 1.0) ? 644 : 644): + case ((Double.POSITIVE_INFINITY == Double.MAX_VALUE) ? 645 : 645): + case ((Double.POSITIVE_INFINITY == Double.POSITIVE_INFINITY) ? 646 : 646): + case ((Double.POSITIVE_INFINITY == Double.NaN) ? 647 : 647): + case ((Double.NaN == Double.NEGATIVE_INFINITY) ? 648 : 648): + case ((Double.NaN == -1.0) ? 649 : 649): + case ((Double.NaN == -0.0) ? 650 : 650): + case ((Double.NaN == 0.0) ? 651 : 651): + case ((Double.NaN == 1.0) ? 652 : 652): + case ((Double.NaN == Double.MAX_VALUE) ? 653 : 653): + case ((Double.NaN == Double.POSITIVE_INFINITY) ? 654 : 654): + case ((Double.NaN == Double.NaN) ? 655 : 655): + case ((Double.NEGATIVE_INFINITY != Double.NEGATIVE_INFINITY) ? 656 : 656): + case ((Double.NEGATIVE_INFINITY != -1.0) ? 657 : 657): + case ((Double.NEGATIVE_INFINITY != -0.0) ? 658 : 658): + case ((Double.NEGATIVE_INFINITY != 0.0) ? 659 : 659): + case ((Double.NEGATIVE_INFINITY != 1.0) ? 660 : 660): + case ((Double.NEGATIVE_INFINITY != Double.MAX_VALUE) ? 661 : 661): + case ((Double.NEGATIVE_INFINITY != Double.POSITIVE_INFINITY) ? 662 : 662): + case ((Double.NEGATIVE_INFINITY != Double.NaN) ? 663 : 663): + case ((-1.0 != Double.NEGATIVE_INFINITY) ? 664 : 664): + case ((-1.0 != -1.0) ? 665 : 665): + case ((-1.0 != -0.0) ? 666 : 666): + case ((-1.0 != 0.0) ? 667 : 667): + case ((-1.0 != 1.0) ? 668 : 668): + case ((-1.0 != Double.MAX_VALUE) ? 669 : 669): + case ((-1.0 != Double.POSITIVE_INFINITY) ? 670 : 670): + case ((-1.0 != Double.NaN) ? 671 : 671): + case ((-0.0 != Double.NEGATIVE_INFINITY) ? 672 : 672): + case ((-0.0 != -1.0) ? 673 : 673): + case ((-0.0 != -0.0) ? 674 : 674): + case ((-0.0 != 0.0) ? 675 : 675): + case ((-0.0 != 1.0) ? 676 : 676): + case ((-0.0 != Double.MAX_VALUE) ? 677 : 677): + case ((-0.0 != Double.POSITIVE_INFINITY) ? 678 : 678): + case ((-0.0 != Double.NaN) ? 679 : 679): + case ((0.0 != Double.NEGATIVE_INFINITY) ? 680 : 680): + case ((0.0 != -1.0) ? 681 : 681): + case ((0.0 != -0.0) ? 682 : 682): + case ((0.0 != 0.0) ? 683 : 683): + case ((0.0 != 1.0) ? 684 : 684): + case ((0.0 != Double.MAX_VALUE) ? 685 : 685): + case ((0.0 != Double.POSITIVE_INFINITY) ? 686 : 686): + case ((0.0 != Double.NaN) ? 687 : 687): + case ((1.0 != Double.NEGATIVE_INFINITY) ? 688 : 688): + case ((1.0 != -1.0) ? 689 : 689): + case ((1.0 != -0.0) ? 690 : 690): + case ((1.0 != 0.0) ? 691 : 691): + case ((1.0 != 1.0) ? 692 : 692): + case ((1.0 != Double.MAX_VALUE) ? 693 : 693): + case ((1.0 != Double.POSITIVE_INFINITY) ? 694 : 694): + case ((1.0 != Double.NaN) ? 695 : 695): + case ((Double.MAX_VALUE != Double.NEGATIVE_INFINITY) ? 696 : 696): + case ((Double.MAX_VALUE != -1.0) ? 697 : 697): + case ((Double.MAX_VALUE != -0.0) ? 698 : 698): + case ((Double.MAX_VALUE != 0.0) ? 699 : 699): + case ((Double.MAX_VALUE != 1.0) ? 700 : 700): + case ((Double.MAX_VALUE != Double.MAX_VALUE) ? 701 : 701): + case ((Double.MAX_VALUE != Double.POSITIVE_INFINITY) ? 702 : 702): + case ((Double.MAX_VALUE != Double.NaN) ? 703 : 703): + case ((Double.POSITIVE_INFINITY != Double.NEGATIVE_INFINITY) ? 704 : 704): + case ((Double.POSITIVE_INFINITY != -1.0) ? 705 : 705): + case ((Double.POSITIVE_INFINITY != -0.0) ? 706 : 706): + case ((Double.POSITIVE_INFINITY != 0.0) ? 707 : 707): + case ((Double.POSITIVE_INFINITY != 1.0) ? 708 : 708): + case ((Double.POSITIVE_INFINITY != Double.MAX_VALUE) ? 709 : 709): + case ((Double.POSITIVE_INFINITY != Double.POSITIVE_INFINITY) ? 710 : 710): + case ((Double.POSITIVE_INFINITY != Double.NaN) ? 711 : 711): + case ((Double.NaN != Double.NEGATIVE_INFINITY) ? 712 : 712): + case ((Double.NaN != -1.0) ? 713 : 713): + case ((Double.NaN != -0.0) ? 714 : 714): + case ((Double.NaN != 0.0) ? 715 : 715): + case ((Double.NaN != 1.0) ? 716 : 716): + case ((Double.NaN != Double.MAX_VALUE) ? 717 : 717): + case ((Double.NaN != Double.POSITIVE_INFINITY) ? 718 : 718): + case ((Double.NaN != Double.NaN) ? 719 : 719): + default: + } + } + + // -------- + // boolean tests + static boolean booleanLogNot(boolean x) { return ! x; } + static boolean booleanEq(boolean x, boolean y) { return x == y; } + static boolean booleanNe(boolean x, boolean y) { return x != y; } + static boolean booleanAnd(boolean x, boolean y) { return (boolean) (x & y); } + static boolean booleanXor(boolean x, boolean y) { return (boolean) (x ^ y); } + static boolean booleanOr(boolean x, boolean y) { return (boolean) (x | y); } + static void booleanTest() { + Tester.checkEqual(booleanLogNot(true), ! true, "! true"); + Tester.checkEqual(booleanLogNot(false), ! false, "! false"); + Tester.checkEqual(booleanEq(true, true), true == true, "true == true"); + Tester.checkEqual(booleanEq(true, false), true == false, "true == false"); + Tester.checkEqual(booleanEq(false, true), false == true, "false == true"); + Tester.checkEqual(booleanEq(false, false), false == false, "false == false"); + Tester.checkEqual(booleanNe(true, true), true != true, "true != true"); + Tester.checkEqual(booleanNe(true, false), true != false, "true != false"); + Tester.checkEqual(booleanNe(false, true), false != true, "false != true"); + Tester.checkEqual(booleanNe(false, false), false != false, "false != false"); + Tester.checkEqual(booleanAnd(true, true), (boolean) (true & true), "(boolean) (true & true)"); + Tester.checkEqual(booleanAnd(true, false), (boolean) (true & false), "(boolean) (true & false)"); + Tester.checkEqual(booleanAnd(false, true), (boolean) (false & true), "(boolean) (false & true)"); + Tester.checkEqual(booleanAnd(false, false), (boolean) (false & false), "(boolean) (false & false)"); + Tester.checkEqual(booleanXor(true, true), (boolean) (true ^ true), "(boolean) (true ^ true)"); + Tester.checkEqual(booleanXor(true, false), (boolean) (true ^ false), "(boolean) (true ^ false)"); + Tester.checkEqual(booleanXor(false, true), (boolean) (false ^ true), "(boolean) (false ^ true)"); + Tester.checkEqual(booleanXor(false, false), (boolean) (false ^ false), "(boolean) (false ^ false)"); + Tester.checkEqual(booleanOr(true, true), (boolean) (true | true), "(boolean) (true | true)"); + Tester.checkEqual(booleanOr(true, false), (boolean) (true | false), "(boolean) (true | false)"); + Tester.checkEqual(booleanOr(false, true), (boolean) (false | true), "(boolean) (false | true)"); + Tester.checkEqual(booleanOr(false, false), (boolean) (false | false), "(boolean) (false | false)"); + } + static void booleanSwitch() { + switch(0) { + case ((! true) ? 0 : 0): + case ((! false) ? 1 : 1): + case ((true == true) ? 2 : 2): + case ((true == false) ? 3 : 3): + case ((false == true) ? 4 : 4): + case ((false == false) ? 5 : 5): + case ((true != true) ? 6 : 6): + case ((true != false) ? 7 : 7): + case ((false != true) ? 8 : 8): + case ((false != false) ? 9 : 9): + case ((((boolean) (true & true)) == true) ? 10 : 10): + case ((((boolean) (true & false)) == true) ? 11 : 11): + case ((((boolean) (false & true)) == true) ? 12 : 12): + case ((((boolean) (false & false)) == true) ? 13 : 13): + case ((((boolean) (true ^ true)) == true) ? 14 : 14): + case ((((boolean) (true ^ false)) == true) ? 15 : 15): + case ((((boolean) (false ^ true)) == true) ? 16 : 16): + case ((((boolean) (false ^ false)) == true) ? 17 : 17): + case ((((boolean) (true | true)) == true) ? 18 : 18): + case ((((boolean) (true | false)) == true) ? 19 : 19): + case ((((boolean) (false | true)) == true) ? 20 : 20): + case ((((boolean) (false | false)) == true) ? 21 : 21): + default: + } + } +} + + +/* + +(define table + '((byte ("Byte.MIN_VALUE" "(byte) -1" "(byte) 0" "(byte) 1" "Byte.MAX_VALUE") + ("+" "-" "~") + ("*" "/" "%" "+" "-" "<<" ">>" ">>>" "<" ">" "<=" ">=" "==" "!=" "&" "^" "|")) + (short ("Short.MIN_VALUE" "(short) -1" "(short) 0" "(short) 1" "Short.MAX_VALUE") + ("+" "-" "~") + ("*" "/" "%" "+" "-" "<<" ">>" ">>>" "<" ">" "<=" ">=" "==" "!=" "&" "^" "|")) + (char ("(char) 0" "(char) 1" "Character.MAX_VALUE") + ("+" "-" "~") + ("*" "/" "%" "+" "-" "<<" ">>" ">>>" "<" ">" "<=" ">=" "==" "!=" "&" "^" "|")) + (int ("Integer.MIN_VALUE" "-1" "0" "1" "Integer.MAX_VALUE") + ("+" "-" "~") + ("*" "/" "%" "+" "-" "<<" ">>" ">>>" "<" ">" "<=" ">=" "==" "!=" "&" "^" "|")) + (long ("Long.MIN_VALUE" "-1L" "0L" "1L" "Long.MAX_VALUE") + ("+" "-" "~") + ("*" "/" "%" "+" "-" "<<" ">>" ">>>" "<" ">" "<=" ">=" "==" "!=" "&" "^" "|")) + (float ("Float.NEGATIVE_INFINITY" "-1.0f" "-0.0f" "0.0f" "Float.MIN_VALUE" "1.0f" "Float.MAX_VALUE" "Float.POSITIVE_INFINITY" "Float.NaN") + ("+" "-") + ("*" "/" "%" "+" "-" "<" ">" "<=" ">=" "==" "!=")) + (double ("Double.NEGATIVE_INFINITY" "-1.0" "-0.0" "0.0" + ;; "Double.MIN_VALUE" NOT CORRECT IN 1.3 + "1.0" "Double.MAX_VALUE" "Double.POSITIVE_INFINITY" "Double.NaN") + ("+" "-") + ("*" "/" "%" "+" "-" "<" ">" "<=" ">=" "==" "!=")) + (boolean (true false) + ("!") + ("==" "!=" "&" "^" "|")))) + +(define booleanOps '("<" ">" "<=" ">=" "==" "!=" "!")) +(define divisionOps '("/" "%")) +(define zeroes '("(byte) 0" "(char) 0" "(short) 0" "0" "0L")) + +(define unames + '(("+" "Plus") ("-" "Minus") ("~" "BitNot") ("!" "LogNot"))) + +(define binames + '(("*" "Times") ("/" "Div") ("%" "Rem") ("+" "Add") ("-" "Sub") + ("<<" "Shl") (">>" "Shr") (">>>" "Ushr") + ("<" "Lt") (">" "Gt") ("<=" "Le") (">=" "Ge") ("==" "Eq") ("!=" "Ne") + ("&" "And") ("^" "Xor") ("|" "Or"))) + +(define gen + (lambda () + (printf "import org.aspectj.testing.Tester;~n~n") + (printf "public strictfp class BigOps {~n") + (printf " public static void main(String[] args) {~n") + (for-each (lambda (elem) + (display (format " ~aTest();~n" (car elem)))) + table) + (printf " }~n") + (display (apply string-append (map tyGen table))) + (printf "}~n"))) + +;; elems == ((exprfun callfun op args) ...) + +(define tyGen + (lambda (ls) + (let ((type (car ls)) + (vals (cadr ls)) + (unops (caddr ls)) + (binops (cadddr ls))) + (let* ((elems (filterElems (make-elems vals unops binops))) + (uvals vals) + (ufuns (map (lambda (op) (genUnopFun type op)) unops)) + (bifuns (map (lambda (op) (genBinopFun type op)) binops))) + (string-append + (format "~n // --------~n") + (format " // ~a tests~n" type) + (apply string-append ufuns) + (apply string-append bifuns) + (genTester type elems) + (genSwitch type elems)))))) + +(define filterElems + (lambda (ls) + (let f ((ls ls)) + (if (null? ls) '() + (apply (lambda (exprfun callfun op args) + (if (and (member op divisionOps) + (member (cadr args) zeroes)) + (f (cdr ls)) + (cons (car ls) (f (cdr ls))))) + (car ls)))))) + +(define make-elems + (lambda (vals unops binops) + (append + (map (lambda (x) (cons genUnopExpr (cons genUnopCall x))) + (cross unops (map list vals))) + (map (lambda (x) (cons genBinopExpr (cons genBinopCall x))) + (cross binops (cross vals vals)))))) + +(define genTester + (lambda (type ls) + (string-append (format " static void ~aTest() {~n" type) + (apply string-append + (map (lambda (ls) + (apply (lambda (exprfun callfun op args) + (apply callfun type op args)) + ls)) + ls)) + (format " }~n")))) + +(define genSwitch + (lambda (type ls) + (string-append (format " static void ~aSwitch() {~n switch(0) {~n" type) + (apply string-append + (map (lambda (elem num) (apply genCase type num elem)) + ls (iota ls))) + (format " default:~n }~n }~n")))) + +(define genCase + (lambda (type num exprfun callfun op args) + (if (member op booleanOps) + (format " case ((~a) ? ~a : ~a):~n" (apply exprfun type op args) num num) + (format " case (((~a) == ~a) ? ~a : ~a):~n" + (apply exprfun type op args) + (if (eq? type 'boolean) 'true "0") + num num)))) + +(define genUnopExpr + (lambda (type op val0) + (if (member op booleanOps) + (format "~a ~a" op val0) + (format "(~a) ~a ~a" type op val0)))) + +(define genUnopFun + (lambda (type op) + (format " static ~a ~a~a(~a x) { return ~a; }~n" + (if (member op booleanOps) "boolean" type) + type (cadr (assoc op unames)) + type + (genUnopExpr type op "x")))) + +(define genUnopCall + (lambda (type op val) + (format " Tester.checkEqual(~a~a(~a), ~a, \"~a\");~n" + type (cadr (assoc op unames)) + val + (genUnopExpr type op val) + (genUnopExpr type op val)))) + +(define genBinopExpr + (lambda (type op val0 val1) + (if (member op booleanOps) + (format "~a ~a ~a" val0 op val1) + (format "(~a) (~a ~a ~a)" type val0 op val1)))) + +(define genBinopFun + (lambda (type op) + (format " static ~a ~a~a(~a x, ~a y) { return ~a; }~n" + (if (member op booleanOps) "boolean" type) + type (cadr (assoc op binames)) + type type + (genBinopExpr type op "x" "y")))) + +(define genBinopCall + (lambda (type op val0 val1) + (format " Tester.checkEqual(~a~a(~a, ~a), ~a, \"~a\");~n" + type (cadr (assoc op binames)) + val0 + val1 + (genBinopExpr type op val0 val1) + (genBinopExpr type op val0 val1)))) + +(define cross2 + (lambda (a b c) + (map (lambda (x) (cons (car x ) (cadr x))) + (cross a (cross b c))))) + +(define cross + (lambda (a b) + (apply append + (map (lambda (x) + (map (lambda (y) + (list x y)) + b)) + a)))) + +(define iota + (lambda (ls) + (let f ((ls ls) (i 0)) + (if (null? ls) '() + (cons i (f (cdr ls) (+ i 1))))))) + +*/ diff --git a/tests/pureJava/BigString.java b/tests/pureJava/BigString.java new file mode 100644 index 000000000..76d5d33f8 --- /dev/null +++ b/tests/pureJava/BigString.java @@ -0,0 +1,1030 @@ +// This is a GENERATED file. Use the scheme program at the end to +// regenerate. Note that in jdk 1.3, Float.MIN_VALUE does not have a +// proper constant value. If that ever gets fixed, look for "NOT +// CORRECT IN 1.3" and uncomment that line. + +import org.aspectj.testing.Tester; + +public strictfp class BigString { + public static void main(String[] args) { + byteTest(); + shortTest(); + charTest(); + intTest(); + longTest(); + floatTest(); + doubleTest(); + booleanTest(); + StringTest(); + } + + // -------- + // byte tests + static String byteOp(String x, byte y) { return x + y; } + static String byteAssign(String x, byte y) { x += y; return x; } + static void byteTest() { + Tester.checkEqual(byteOp("" + Byte.MIN_VALUE, Byte.MIN_VALUE), ("" + Byte.MIN_VALUE) + Byte.MIN_VALUE, "byteOp(\"\" + Byte.MIN_VALUE, Byte.MIN_VALUE)"); + Tester.checkEqual(byteAssign("" + Byte.MIN_VALUE, Byte.MIN_VALUE), ("" + Byte.MIN_VALUE) + Byte.MIN_VALUE, "byteOp(\"\" + Byte.MIN_VALUE, Byte.MIN_VALUE)"); + Tester.checkEqual(byteOp("" + Byte.MIN_VALUE, (byte) -1), ("" + Byte.MIN_VALUE) + (byte) -1, "byteOp(\"\" + Byte.MIN_VALUE, (byte) -1)"); + Tester.checkEqual(byteAssign("" + Byte.MIN_VALUE, (byte) -1), ("" + Byte.MIN_VALUE) + (byte) -1, "byteOp(\"\" + Byte.MIN_VALUE, (byte) -1)"); + Tester.checkEqual(byteOp("" + Byte.MIN_VALUE, (byte) 0), ("" + Byte.MIN_VALUE) + (byte) 0, "byteOp(\"\" + Byte.MIN_VALUE, (byte) 0)"); + Tester.checkEqual(byteAssign("" + Byte.MIN_VALUE, (byte) 0), ("" + Byte.MIN_VALUE) + (byte) 0, "byteOp(\"\" + Byte.MIN_VALUE, (byte) 0)"); + Tester.checkEqual(byteOp("" + Byte.MIN_VALUE, (byte) 1), ("" + Byte.MIN_VALUE) + (byte) 1, "byteOp(\"\" + Byte.MIN_VALUE, (byte) 1)"); + Tester.checkEqual(byteAssign("" + Byte.MIN_VALUE, (byte) 1), ("" + Byte.MIN_VALUE) + (byte) 1, "byteOp(\"\" + Byte.MIN_VALUE, (byte) 1)"); + Tester.checkEqual(byteOp("" + Byte.MIN_VALUE, Byte.MAX_VALUE), ("" + Byte.MIN_VALUE) + Byte.MAX_VALUE, "byteOp(\"\" + Byte.MIN_VALUE, Byte.MAX_VALUE)"); + Tester.checkEqual(byteAssign("" + Byte.MIN_VALUE, Byte.MAX_VALUE), ("" + Byte.MIN_VALUE) + Byte.MAX_VALUE, "byteOp(\"\" + Byte.MIN_VALUE, Byte.MAX_VALUE)"); + Tester.checkEqual(byteOp("" + (byte) -1, Byte.MIN_VALUE), ("" + (byte) -1) + Byte.MIN_VALUE, "byteOp(\"\" + (byte) -1, Byte.MIN_VALUE)"); + Tester.checkEqual(byteAssign("" + (byte) -1, Byte.MIN_VALUE), ("" + (byte) -1) + Byte.MIN_VALUE, "byteOp(\"\" + (byte) -1, Byte.MIN_VALUE)"); + Tester.checkEqual(byteOp("" + (byte) -1, (byte) -1), ("" + (byte) -1) + (byte) -1, "byteOp(\"\" + (byte) -1, (byte) -1)"); + Tester.checkEqual(byteAssign("" + (byte) -1, (byte) -1), ("" + (byte) -1) + (byte) -1, "byteOp(\"\" + (byte) -1, (byte) -1)"); + Tester.checkEqual(byteOp("" + (byte) -1, (byte) 0), ("" + (byte) -1) + (byte) 0, "byteOp(\"\" + (byte) -1, (byte) 0)"); + Tester.checkEqual(byteAssign("" + (byte) -1, (byte) 0), ("" + (byte) -1) + (byte) 0, "byteOp(\"\" + (byte) -1, (byte) 0)"); + Tester.checkEqual(byteOp("" + (byte) -1, (byte) 1), ("" + (byte) -1) + (byte) 1, "byteOp(\"\" + (byte) -1, (byte) 1)"); + Tester.checkEqual(byteAssign("" + (byte) -1, (byte) 1), ("" + (byte) -1) + (byte) 1, "byteOp(\"\" + (byte) -1, (byte) 1)"); + Tester.checkEqual(byteOp("" + (byte) -1, Byte.MAX_VALUE), ("" + (byte) -1) + Byte.MAX_VALUE, "byteOp(\"\" + (byte) -1, Byte.MAX_VALUE)"); + Tester.checkEqual(byteAssign("" + (byte) -1, Byte.MAX_VALUE), ("" + (byte) -1) + Byte.MAX_VALUE, "byteOp(\"\" + (byte) -1, Byte.MAX_VALUE)"); + Tester.checkEqual(byteOp("" + (byte) 0, Byte.MIN_VALUE), ("" + (byte) 0) + Byte.MIN_VALUE, "byteOp(\"\" + (byte) 0, Byte.MIN_VALUE)"); + Tester.checkEqual(byteAssign("" + (byte) 0, Byte.MIN_VALUE), ("" + (byte) 0) + Byte.MIN_VALUE, "byteOp(\"\" + (byte) 0, Byte.MIN_VALUE)"); + Tester.checkEqual(byteOp("" + (byte) 0, (byte) -1), ("" + (byte) 0) + (byte) -1, "byteOp(\"\" + (byte) 0, (byte) -1)"); + Tester.checkEqual(byteAssign("" + (byte) 0, (byte) -1), ("" + (byte) 0) + (byte) -1, "byteOp(\"\" + (byte) 0, (byte) -1)"); + Tester.checkEqual(byteOp("" + (byte) 0, (byte) 0), ("" + (byte) 0) + (byte) 0, "byteOp(\"\" + (byte) 0, (byte) 0)"); + Tester.checkEqual(byteAssign("" + (byte) 0, (byte) 0), ("" + (byte) 0) + (byte) 0, "byteOp(\"\" + (byte) 0, (byte) 0)"); + Tester.checkEqual(byteOp("" + (byte) 0, (byte) 1), ("" + (byte) 0) + (byte) 1, "byteOp(\"\" + (byte) 0, (byte) 1)"); + Tester.checkEqual(byteAssign("" + (byte) 0, (byte) 1), ("" + (byte) 0) + (byte) 1, "byteOp(\"\" + (byte) 0, (byte) 1)"); + Tester.checkEqual(byteOp("" + (byte) 0, Byte.MAX_VALUE), ("" + (byte) 0) + Byte.MAX_VALUE, "byteOp(\"\" + (byte) 0, Byte.MAX_VALUE)"); + Tester.checkEqual(byteAssign("" + (byte) 0, Byte.MAX_VALUE), ("" + (byte) 0) + Byte.MAX_VALUE, "byteOp(\"\" + (byte) 0, Byte.MAX_VALUE)"); + Tester.checkEqual(byteOp("" + (byte) 1, Byte.MIN_VALUE), ("" + (byte) 1) + Byte.MIN_VALUE, "byteOp(\"\" + (byte) 1, Byte.MIN_VALUE)"); + Tester.checkEqual(byteAssign("" + (byte) 1, Byte.MIN_VALUE), ("" + (byte) 1) + Byte.MIN_VALUE, "byteOp(\"\" + (byte) 1, Byte.MIN_VALUE)"); + Tester.checkEqual(byteOp("" + (byte) 1, (byte) -1), ("" + (byte) 1) + (byte) -1, "byteOp(\"\" + (byte) 1, (byte) -1)"); + Tester.checkEqual(byteAssign("" + (byte) 1, (byte) -1), ("" + (byte) 1) + (byte) -1, "byteOp(\"\" + (byte) 1, (byte) -1)"); + Tester.checkEqual(byteOp("" + (byte) 1, (byte) 0), ("" + (byte) 1) + (byte) 0, "byteOp(\"\" + (byte) 1, (byte) 0)"); + Tester.checkEqual(byteAssign("" + (byte) 1, (byte) 0), ("" + (byte) 1) + (byte) 0, "byteOp(\"\" + (byte) 1, (byte) 0)"); + Tester.checkEqual(byteOp("" + (byte) 1, (byte) 1), ("" + (byte) 1) + (byte) 1, "byteOp(\"\" + (byte) 1, (byte) 1)"); + Tester.checkEqual(byteAssign("" + (byte) 1, (byte) 1), ("" + (byte) 1) + (byte) 1, "byteOp(\"\" + (byte) 1, (byte) 1)"); + Tester.checkEqual(byteOp("" + (byte) 1, Byte.MAX_VALUE), ("" + (byte) 1) + Byte.MAX_VALUE, "byteOp(\"\" + (byte) 1, Byte.MAX_VALUE)"); + Tester.checkEqual(byteAssign("" + (byte) 1, Byte.MAX_VALUE), ("" + (byte) 1) + Byte.MAX_VALUE, "byteOp(\"\" + (byte) 1, Byte.MAX_VALUE)"); + Tester.checkEqual(byteOp("" + Byte.MAX_VALUE, Byte.MIN_VALUE), ("" + Byte.MAX_VALUE) + Byte.MIN_VALUE, "byteOp(\"\" + Byte.MAX_VALUE, Byte.MIN_VALUE)"); + Tester.checkEqual(byteAssign("" + Byte.MAX_VALUE, Byte.MIN_VALUE), ("" + Byte.MAX_VALUE) + Byte.MIN_VALUE, "byteOp(\"\" + Byte.MAX_VALUE, Byte.MIN_VALUE)"); + Tester.checkEqual(byteOp("" + Byte.MAX_VALUE, (byte) -1), ("" + Byte.MAX_VALUE) + (byte) -1, "byteOp(\"\" + Byte.MAX_VALUE, (byte) -1)"); + Tester.checkEqual(byteAssign("" + Byte.MAX_VALUE, (byte) -1), ("" + Byte.MAX_VALUE) + (byte) -1, "byteOp(\"\" + Byte.MAX_VALUE, (byte) -1)"); + Tester.checkEqual(byteOp("" + Byte.MAX_VALUE, (byte) 0), ("" + Byte.MAX_VALUE) + (byte) 0, "byteOp(\"\" + Byte.MAX_VALUE, (byte) 0)"); + Tester.checkEqual(byteAssign("" + Byte.MAX_VALUE, (byte) 0), ("" + Byte.MAX_VALUE) + (byte) 0, "byteOp(\"\" + Byte.MAX_VALUE, (byte) 0)"); + Tester.checkEqual(byteOp("" + Byte.MAX_VALUE, (byte) 1), ("" + Byte.MAX_VALUE) + (byte) 1, "byteOp(\"\" + Byte.MAX_VALUE, (byte) 1)"); + Tester.checkEqual(byteAssign("" + Byte.MAX_VALUE, (byte) 1), ("" + Byte.MAX_VALUE) + (byte) 1, "byteOp(\"\" + Byte.MAX_VALUE, (byte) 1)"); + Tester.checkEqual(byteOp("" + Byte.MAX_VALUE, Byte.MAX_VALUE), ("" + Byte.MAX_VALUE) + Byte.MAX_VALUE, "byteOp(\"\" + Byte.MAX_VALUE, Byte.MAX_VALUE)"); + Tester.checkEqual(byteAssign("" + Byte.MAX_VALUE, Byte.MAX_VALUE), ("" + Byte.MAX_VALUE) + Byte.MAX_VALUE, "byteOp(\"\" + Byte.MAX_VALUE, Byte.MAX_VALUE)"); + } + static void byteSwitch() { + switch(-1) { + case (((("" + Byte.MIN_VALUE) + Byte.MIN_VALUE) == "") ? 0 : 0): + case (((("" + Byte.MIN_VALUE) + (byte) -1) == "") ? 1 : 1): + case (((("" + Byte.MIN_VALUE) + (byte) 0) == "") ? 2 : 2): + case (((("" + Byte.MIN_VALUE) + (byte) 1) == "") ? 3 : 3): + case (((("" + Byte.MIN_VALUE) + Byte.MAX_VALUE) == "") ? 4 : 4): + case (((("" + (byte) -1) + Byte.MIN_VALUE) == "") ? 5 : 5): + case (((("" + (byte) -1) + (byte) -1) == "") ? 6 : 6): + case (((("" + (byte) -1) + (byte) 0) == "") ? 7 : 7): + case (((("" + (byte) -1) + (byte) 1) == "") ? 8 : 8): + case (((("" + (byte) -1) + Byte.MAX_VALUE) == "") ? 9 : 9): + case (((("" + (byte) 0) + Byte.MIN_VALUE) == "") ? 10 : 10): + case (((("" + (byte) 0) + (byte) -1) == "") ? 11 : 11): + case (((("" + (byte) 0) + (byte) 0) == "") ? 12 : 12): + case (((("" + (byte) 0) + (byte) 1) == "") ? 13 : 13): + case (((("" + (byte) 0) + Byte.MAX_VALUE) == "") ? 14 : 14): + case (((("" + (byte) 1) + Byte.MIN_VALUE) == "") ? 15 : 15): + case (((("" + (byte) 1) + (byte) -1) == "") ? 16 : 16): + case (((("" + (byte) 1) + (byte) 0) == "") ? 17 : 17): + case (((("" + (byte) 1) + (byte) 1) == "") ? 18 : 18): + case (((("" + (byte) 1) + Byte.MAX_VALUE) == "") ? 19 : 19): + case (((("" + Byte.MAX_VALUE) + Byte.MIN_VALUE) == "") ? 20 : 20): + case (((("" + Byte.MAX_VALUE) + (byte) -1) == "") ? 21 : 21): + case (((("" + Byte.MAX_VALUE) + (byte) 0) == "") ? 22 : 22): + case (((("" + Byte.MAX_VALUE) + (byte) 1) == "") ? 23 : 23): + case (((("" + Byte.MAX_VALUE) + Byte.MAX_VALUE) == "") ? 24 : 24): + default: + } + } + + // -------- + // short tests + static String shortOp(String x, short y) { return x + y; } + static String shortAssign(String x, short y) { x += y; return x; } + static void shortTest() { + Tester.checkEqual(shortOp("" + Short.MIN_VALUE, Short.MIN_VALUE), ("" + Short.MIN_VALUE) + Short.MIN_VALUE, "shortOp(\"\" + Short.MIN_VALUE, Short.MIN_VALUE)"); + Tester.checkEqual(shortAssign("" + Short.MIN_VALUE, Short.MIN_VALUE), ("" + Short.MIN_VALUE) + Short.MIN_VALUE, "shortOp(\"\" + Short.MIN_VALUE, Short.MIN_VALUE)"); + Tester.checkEqual(shortOp("" + Short.MIN_VALUE, (short) -1), ("" + Short.MIN_VALUE) + (short) -1, "shortOp(\"\" + Short.MIN_VALUE, (short) -1)"); + Tester.checkEqual(shortAssign("" + Short.MIN_VALUE, (short) -1), ("" + Short.MIN_VALUE) + (short) -1, "shortOp(\"\" + Short.MIN_VALUE, (short) -1)"); + Tester.checkEqual(shortOp("" + Short.MIN_VALUE, (short) 0), ("" + Short.MIN_VALUE) + (short) 0, "shortOp(\"\" + Short.MIN_VALUE, (short) 0)"); + Tester.checkEqual(shortAssign("" + Short.MIN_VALUE, (short) 0), ("" + Short.MIN_VALUE) + (short) 0, "shortOp(\"\" + Short.MIN_VALUE, (short) 0)"); + Tester.checkEqual(shortOp("" + Short.MIN_VALUE, (short) 1), ("" + Short.MIN_VALUE) + (short) 1, "shortOp(\"\" + Short.MIN_VALUE, (short) 1)"); + Tester.checkEqual(shortAssign("" + Short.MIN_VALUE, (short) 1), ("" + Short.MIN_VALUE) + (short) 1, "shortOp(\"\" + Short.MIN_VALUE, (short) 1)"); + Tester.checkEqual(shortOp("" + Short.MIN_VALUE, Short.MAX_VALUE), ("" + Short.MIN_VALUE) + Short.MAX_VALUE, "shortOp(\"\" + Short.MIN_VALUE, Short.MAX_VALUE)"); + Tester.checkEqual(shortAssign("" + Short.MIN_VALUE, Short.MAX_VALUE), ("" + Short.MIN_VALUE) + Short.MAX_VALUE, "shortOp(\"\" + Short.MIN_VALUE, Short.MAX_VALUE)"); + Tester.checkEqual(shortOp("" + (short) -1, Short.MIN_VALUE), ("" + (short) -1) + Short.MIN_VALUE, "shortOp(\"\" + (short) -1, Short.MIN_VALUE)"); + Tester.checkEqual(shortAssign("" + (short) -1, Short.MIN_VALUE), ("" + (short) -1) + Short.MIN_VALUE, "shortOp(\"\" + (short) -1, Short.MIN_VALUE)"); + Tester.checkEqual(shortOp("" + (short) -1, (short) -1), ("" + (short) -1) + (short) -1, "shortOp(\"\" + (short) -1, (short) -1)"); + Tester.checkEqual(shortAssign("" + (short) -1, (short) -1), ("" + (short) -1) + (short) -1, "shortOp(\"\" + (short) -1, (short) -1)"); + Tester.checkEqual(shortOp("" + (short) -1, (short) 0), ("" + (short) -1) + (short) 0, "shortOp(\"\" + (short) -1, (short) 0)"); + Tester.checkEqual(shortAssign("" + (short) -1, (short) 0), ("" + (short) -1) + (short) 0, "shortOp(\"\" + (short) -1, (short) 0)"); + Tester.checkEqual(shortOp("" + (short) -1, (short) 1), ("" + (short) -1) + (short) 1, "shortOp(\"\" + (short) -1, (short) 1)"); + Tester.checkEqual(shortAssign("" + (short) -1, (short) 1), ("" + (short) -1) + (short) 1, "shortOp(\"\" + (short) -1, (short) 1)"); + Tester.checkEqual(shortOp("" + (short) -1, Short.MAX_VALUE), ("" + (short) -1) + Short.MAX_VALUE, "shortOp(\"\" + (short) -1, Short.MAX_VALUE)"); + Tester.checkEqual(shortAssign("" + (short) -1, Short.MAX_VALUE), ("" + (short) -1) + Short.MAX_VALUE, "shortOp(\"\" + (short) -1, Short.MAX_VALUE)"); + Tester.checkEqual(shortOp("" + (short) 0, Short.MIN_VALUE), ("" + (short) 0) + Short.MIN_VALUE, "shortOp(\"\" + (short) 0, Short.MIN_VALUE)"); + Tester.checkEqual(shortAssign("" + (short) 0, Short.MIN_VALUE), ("" + (short) 0) + Short.MIN_VALUE, "shortOp(\"\" + (short) 0, Short.MIN_VALUE)"); + Tester.checkEqual(shortOp("" + (short) 0, (short) -1), ("" + (short) 0) + (short) -1, "shortOp(\"\" + (short) 0, (short) -1)"); + Tester.checkEqual(shortAssign("" + (short) 0, (short) -1), ("" + (short) 0) + (short) -1, "shortOp(\"\" + (short) 0, (short) -1)"); + Tester.checkEqual(shortOp("" + (short) 0, (short) 0), ("" + (short) 0) + (short) 0, "shortOp(\"\" + (short) 0, (short) 0)"); + Tester.checkEqual(shortAssign("" + (short) 0, (short) 0), ("" + (short) 0) + (short) 0, "shortOp(\"\" + (short) 0, (short) 0)"); + Tester.checkEqual(shortOp("" + (short) 0, (short) 1), ("" + (short) 0) + (short) 1, "shortOp(\"\" + (short) 0, (short) 1)"); + Tester.checkEqual(shortAssign("" + (short) 0, (short) 1), ("" + (short) 0) + (short) 1, "shortOp(\"\" + (short) 0, (short) 1)"); + Tester.checkEqual(shortOp("" + (short) 0, Short.MAX_VALUE), ("" + (short) 0) + Short.MAX_VALUE, "shortOp(\"\" + (short) 0, Short.MAX_VALUE)"); + Tester.checkEqual(shortAssign("" + (short) 0, Short.MAX_VALUE), ("" + (short) 0) + Short.MAX_VALUE, "shortOp(\"\" + (short) 0, Short.MAX_VALUE)"); + Tester.checkEqual(shortOp("" + (short) 1, Short.MIN_VALUE), ("" + (short) 1) + Short.MIN_VALUE, "shortOp(\"\" + (short) 1, Short.MIN_VALUE)"); + Tester.checkEqual(shortAssign("" + (short) 1, Short.MIN_VALUE), ("" + (short) 1) + Short.MIN_VALUE, "shortOp(\"\" + (short) 1, Short.MIN_VALUE)"); + Tester.checkEqual(shortOp("" + (short) 1, (short) -1), ("" + (short) 1) + (short) -1, "shortOp(\"\" + (short) 1, (short) -1)"); + Tester.checkEqual(shortAssign("" + (short) 1, (short) -1), ("" + (short) 1) + (short) -1, "shortOp(\"\" + (short) 1, (short) -1)"); + Tester.checkEqual(shortOp("" + (short) 1, (short) 0), ("" + (short) 1) + (short) 0, "shortOp(\"\" + (short) 1, (short) 0)"); + Tester.checkEqual(shortAssign("" + (short) 1, (short) 0), ("" + (short) 1) + (short) 0, "shortOp(\"\" + (short) 1, (short) 0)"); + Tester.checkEqual(shortOp("" + (short) 1, (short) 1), ("" + (short) 1) + (short) 1, "shortOp(\"\" + (short) 1, (short) 1)"); + Tester.checkEqual(shortAssign("" + (short) 1, (short) 1), ("" + (short) 1) + (short) 1, "shortOp(\"\" + (short) 1, (short) 1)"); + Tester.checkEqual(shortOp("" + (short) 1, Short.MAX_VALUE), ("" + (short) 1) + Short.MAX_VALUE, "shortOp(\"\" + (short) 1, Short.MAX_VALUE)"); + Tester.checkEqual(shortAssign("" + (short) 1, Short.MAX_VALUE), ("" + (short) 1) + Short.MAX_VALUE, "shortOp(\"\" + (short) 1, Short.MAX_VALUE)"); + Tester.checkEqual(shortOp("" + Short.MAX_VALUE, Short.MIN_VALUE), ("" + Short.MAX_VALUE) + Short.MIN_VALUE, "shortOp(\"\" + Short.MAX_VALUE, Short.MIN_VALUE)"); + Tester.checkEqual(shortAssign("" + Short.MAX_VALUE, Short.MIN_VALUE), ("" + Short.MAX_VALUE) + Short.MIN_VALUE, "shortOp(\"\" + Short.MAX_VALUE, Short.MIN_VALUE)"); + Tester.checkEqual(shortOp("" + Short.MAX_VALUE, (short) -1), ("" + Short.MAX_VALUE) + (short) -1, "shortOp(\"\" + Short.MAX_VALUE, (short) -1)"); + Tester.checkEqual(shortAssign("" + Short.MAX_VALUE, (short) -1), ("" + Short.MAX_VALUE) + (short) -1, "shortOp(\"\" + Short.MAX_VALUE, (short) -1)"); + Tester.checkEqual(shortOp("" + Short.MAX_VALUE, (short) 0), ("" + Short.MAX_VALUE) + (short) 0, "shortOp(\"\" + Short.MAX_VALUE, (short) 0)"); + Tester.checkEqual(shortAssign("" + Short.MAX_VALUE, (short) 0), ("" + Short.MAX_VALUE) + (short) 0, "shortOp(\"\" + Short.MAX_VALUE, (short) 0)"); + Tester.checkEqual(shortOp("" + Short.MAX_VALUE, (short) 1), ("" + Short.MAX_VALUE) + (short) 1, "shortOp(\"\" + Short.MAX_VALUE, (short) 1)"); + Tester.checkEqual(shortAssign("" + Short.MAX_VALUE, (short) 1), ("" + Short.MAX_VALUE) + (short) 1, "shortOp(\"\" + Short.MAX_VALUE, (short) 1)"); + Tester.checkEqual(shortOp("" + Short.MAX_VALUE, Short.MAX_VALUE), ("" + Short.MAX_VALUE) + Short.MAX_VALUE, "shortOp(\"\" + Short.MAX_VALUE, Short.MAX_VALUE)"); + Tester.checkEqual(shortAssign("" + Short.MAX_VALUE, Short.MAX_VALUE), ("" + Short.MAX_VALUE) + Short.MAX_VALUE, "shortOp(\"\" + Short.MAX_VALUE, Short.MAX_VALUE)"); + } + static void shortSwitch() { + switch(-1) { + case (((("" + Short.MIN_VALUE) + Short.MIN_VALUE) == "") ? 0 : 0): + case (((("" + Short.MIN_VALUE) + (short) -1) == "") ? 1 : 1): + case (((("" + Short.MIN_VALUE) + (short) 0) == "") ? 2 : 2): + case (((("" + Short.MIN_VALUE) + (short) 1) == "") ? 3 : 3): + case (((("" + Short.MIN_VALUE) + Short.MAX_VALUE) == "") ? 4 : 4): + case (((("" + (short) -1) + Short.MIN_VALUE) == "") ? 5 : 5): + case (((("" + (short) -1) + (short) -1) == "") ? 6 : 6): + case (((("" + (short) -1) + (short) 0) == "") ? 7 : 7): + case (((("" + (short) -1) + (short) 1) == "") ? 8 : 8): + case (((("" + (short) -1) + Short.MAX_VALUE) == "") ? 9 : 9): + case (((("" + (short) 0) + Short.MIN_VALUE) == "") ? 10 : 10): + case (((("" + (short) 0) + (short) -1) == "") ? 11 : 11): + case (((("" + (short) 0) + (short) 0) == "") ? 12 : 12): + case (((("" + (short) 0) + (short) 1) == "") ? 13 : 13): + case (((("" + (short) 0) + Short.MAX_VALUE) == "") ? 14 : 14): + case (((("" + (short) 1) + Short.MIN_VALUE) == "") ? 15 : 15): + case (((("" + (short) 1) + (short) -1) == "") ? 16 : 16): + case (((("" + (short) 1) + (short) 0) == "") ? 17 : 17): + case (((("" + (short) 1) + (short) 1) == "") ? 18 : 18): + case (((("" + (short) 1) + Short.MAX_VALUE) == "") ? 19 : 19): + case (((("" + Short.MAX_VALUE) + Short.MIN_VALUE) == "") ? 20 : 20): + case (((("" + Short.MAX_VALUE) + (short) -1) == "") ? 21 : 21): + case (((("" + Short.MAX_VALUE) + (short) 0) == "") ? 22 : 22): + case (((("" + Short.MAX_VALUE) + (short) 1) == "") ? 23 : 23): + case (((("" + Short.MAX_VALUE) + Short.MAX_VALUE) == "") ? 24 : 24): + default: + } + } + + // -------- + // char tests + static String charOp(String x, char y) { return x + y; } + static String charAssign(String x, char y) { x += y; return x; } + static void charTest() { + Tester.checkEqual(charOp("" + (char) 0, (char) 0), ("" + (char) 0) + (char) 0, "charOp(\"\" + (char) 0, (char) 0)"); + Tester.checkEqual(charAssign("" + (char) 0, (char) 0), ("" + (char) 0) + (char) 0, "charOp(\"\" + (char) 0, (char) 0)"); + Tester.checkEqual(charOp("" + (char) 0, (char) 1), ("" + (char) 0) + (char) 1, "charOp(\"\" + (char) 0, (char) 1)"); + Tester.checkEqual(charAssign("" + (char) 0, (char) 1), ("" + (char) 0) + (char) 1, "charOp(\"\" + (char) 0, (char) 1)"); + Tester.checkEqual(charOp("" + (char) 0, Character.MAX_VALUE), ("" + (char) 0) + Character.MAX_VALUE, "charOp(\"\" + (char) 0, Character.MAX_VALUE)"); + Tester.checkEqual(charAssign("" + (char) 0, Character.MAX_VALUE), ("" + (char) 0) + Character.MAX_VALUE, "charOp(\"\" + (char) 0, Character.MAX_VALUE)"); + Tester.checkEqual(charOp("" + (char) 1, (char) 0), ("" + (char) 1) + (char) 0, "charOp(\"\" + (char) 1, (char) 0)"); + Tester.checkEqual(charAssign("" + (char) 1, (char) 0), ("" + (char) 1) + (char) 0, "charOp(\"\" + (char) 1, (char) 0)"); + Tester.checkEqual(charOp("" + (char) 1, (char) 1), ("" + (char) 1) + (char) 1, "charOp(\"\" + (char) 1, (char) 1)"); + Tester.checkEqual(charAssign("" + (char) 1, (char) 1), ("" + (char) 1) + (char) 1, "charOp(\"\" + (char) 1, (char) 1)"); + Tester.checkEqual(charOp("" + (char) 1, Character.MAX_VALUE), ("" + (char) 1) + Character.MAX_VALUE, "charOp(\"\" + (char) 1, Character.MAX_VALUE)"); + Tester.checkEqual(charAssign("" + (char) 1, Character.MAX_VALUE), ("" + (char) 1) + Character.MAX_VALUE, "charOp(\"\" + (char) 1, Character.MAX_VALUE)"); + Tester.checkEqual(charOp("" + Character.MAX_VALUE, (char) 0), ("" + Character.MAX_VALUE) + (char) 0, "charOp(\"\" + Character.MAX_VALUE, (char) 0)"); + Tester.checkEqual(charAssign("" + Character.MAX_VALUE, (char) 0), ("" + Character.MAX_VALUE) + (char) 0, "charOp(\"\" + Character.MAX_VALUE, (char) 0)"); + Tester.checkEqual(charOp("" + Character.MAX_VALUE, (char) 1), ("" + Character.MAX_VALUE) + (char) 1, "charOp(\"\" + Character.MAX_VALUE, (char) 1)"); + Tester.checkEqual(charAssign("" + Character.MAX_VALUE, (char) 1), ("" + Character.MAX_VALUE) + (char) 1, "charOp(\"\" + Character.MAX_VALUE, (char) 1)"); + Tester.checkEqual(charOp("" + Character.MAX_VALUE, Character.MAX_VALUE), ("" + Character.MAX_VALUE) + Character.MAX_VALUE, "charOp(\"\" + Character.MAX_VALUE, Character.MAX_VALUE)"); + Tester.checkEqual(charAssign("" + Character.MAX_VALUE, Character.MAX_VALUE), ("" + Character.MAX_VALUE) + Character.MAX_VALUE, "charOp(\"\" + Character.MAX_VALUE, Character.MAX_VALUE)"); + } + static void charSwitch() { + switch(-1) { + case (((("" + (char) 0) + (char) 0) == "") ? 0 : 0): + case (((("" + (char) 0) + (char) 1) == "") ? 1 : 1): + case (((("" + (char) 0) + Character.MAX_VALUE) == "") ? 2 : 2): + case (((("" + (char) 1) + (char) 0) == "") ? 3 : 3): + case (((("" + (char) 1) + (char) 1) == "") ? 4 : 4): + case (((("" + (char) 1) + Character.MAX_VALUE) == "") ? 5 : 5): + case (((("" + Character.MAX_VALUE) + (char) 0) == "") ? 6 : 6): + case (((("" + Character.MAX_VALUE) + (char) 1) == "") ? 7 : 7): + case (((("" + Character.MAX_VALUE) + Character.MAX_VALUE) == "") ? 8 : 8): + default: + } + } + + // -------- + // int tests + static String intOp(String x, int y) { return x + y; } + static String intAssign(String x, int y) { x += y; return x; } + static void intTest() { + Tester.checkEqual(intOp("" + Integer.MIN_VALUE, Integer.MIN_VALUE), ("" + Integer.MIN_VALUE) + Integer.MIN_VALUE, "intOp(\"\" + Integer.MIN_VALUE, Integer.MIN_VALUE)"); + Tester.checkEqual(intAssign("" + Integer.MIN_VALUE, Integer.MIN_VALUE), ("" + Integer.MIN_VALUE) + Integer.MIN_VALUE, "intOp(\"\" + Integer.MIN_VALUE, Integer.MIN_VALUE)"); + Tester.checkEqual(intOp("" + Integer.MIN_VALUE, -1), ("" + Integer.MIN_VALUE) + -1, "intOp(\"\" + Integer.MIN_VALUE, -1)"); + Tester.checkEqual(intAssign("" + Integer.MIN_VALUE, -1), ("" + Integer.MIN_VALUE) + -1, "intOp(\"\" + Integer.MIN_VALUE, -1)"); + Tester.checkEqual(intOp("" + Integer.MIN_VALUE, 0), ("" + Integer.MIN_VALUE) + 0, "intOp(\"\" + Integer.MIN_VALUE, 0)"); + Tester.checkEqual(intAssign("" + Integer.MIN_VALUE, 0), ("" + Integer.MIN_VALUE) + 0, "intOp(\"\" + Integer.MIN_VALUE, 0)"); + Tester.checkEqual(intOp("" + Integer.MIN_VALUE, 1), ("" + Integer.MIN_VALUE) + 1, "intOp(\"\" + Integer.MIN_VALUE, 1)"); + Tester.checkEqual(intAssign("" + Integer.MIN_VALUE, 1), ("" + Integer.MIN_VALUE) + 1, "intOp(\"\" + Integer.MIN_VALUE, 1)"); + Tester.checkEqual(intOp("" + Integer.MIN_VALUE, Integer.MAX_VALUE), ("" + Integer.MIN_VALUE) + Integer.MAX_VALUE, "intOp(\"\" + Integer.MIN_VALUE, Integer.MAX_VALUE)"); + Tester.checkEqual(intAssign("" + Integer.MIN_VALUE, Integer.MAX_VALUE), ("" + Integer.MIN_VALUE) + Integer.MAX_VALUE, "intOp(\"\" + Integer.MIN_VALUE, Integer.MAX_VALUE)"); + Tester.checkEqual(intOp("" + -1, Integer.MIN_VALUE), ("" + -1) + Integer.MIN_VALUE, "intOp(\"\" + -1, Integer.MIN_VALUE)"); + Tester.checkEqual(intAssign("" + -1, Integer.MIN_VALUE), ("" + -1) + Integer.MIN_VALUE, "intOp(\"\" + -1, Integer.MIN_VALUE)"); + Tester.checkEqual(intOp("" + -1, -1), ("" + -1) + -1, "intOp(\"\" + -1, -1)"); + Tester.checkEqual(intAssign("" + -1, -1), ("" + -1) + -1, "intOp(\"\" + -1, -1)"); + Tester.checkEqual(intOp("" + -1, 0), ("" + -1) + 0, "intOp(\"\" + -1, 0)"); + Tester.checkEqual(intAssign("" + -1, 0), ("" + -1) + 0, "intOp(\"\" + -1, 0)"); + Tester.checkEqual(intOp("" + -1, 1), ("" + -1) + 1, "intOp(\"\" + -1, 1)"); + Tester.checkEqual(intAssign("" + -1, 1), ("" + -1) + 1, "intOp(\"\" + -1, 1)"); + Tester.checkEqual(intOp("" + -1, Integer.MAX_VALUE), ("" + -1) + Integer.MAX_VALUE, "intOp(\"\" + -1, Integer.MAX_VALUE)"); + Tester.checkEqual(intAssign("" + -1, Integer.MAX_VALUE), ("" + -1) + Integer.MAX_VALUE, "intOp(\"\" + -1, Integer.MAX_VALUE)"); + Tester.checkEqual(intOp("" + 0, Integer.MIN_VALUE), ("" + 0) + Integer.MIN_VALUE, "intOp(\"\" + 0, Integer.MIN_VALUE)"); + Tester.checkEqual(intAssign("" + 0, Integer.MIN_VALUE), ("" + 0) + Integer.MIN_VALUE, "intOp(\"\" + 0, Integer.MIN_VALUE)"); + Tester.checkEqual(intOp("" + 0, -1), ("" + 0) + -1, "intOp(\"\" + 0, -1)"); + Tester.checkEqual(intAssign("" + 0, -1), ("" + 0) + -1, "intOp(\"\" + 0, -1)"); + Tester.checkEqual(intOp("" + 0, 0), ("" + 0) + 0, "intOp(\"\" + 0, 0)"); + Tester.checkEqual(intAssign("" + 0, 0), ("" + 0) + 0, "intOp(\"\" + 0, 0)"); + Tester.checkEqual(intOp("" + 0, 1), ("" + 0) + 1, "intOp(\"\" + 0, 1)"); + Tester.checkEqual(intAssign("" + 0, 1), ("" + 0) + 1, "intOp(\"\" + 0, 1)"); + Tester.checkEqual(intOp("" + 0, Integer.MAX_VALUE), ("" + 0) + Integer.MAX_VALUE, "intOp(\"\" + 0, Integer.MAX_VALUE)"); + Tester.checkEqual(intAssign("" + 0, Integer.MAX_VALUE), ("" + 0) + Integer.MAX_VALUE, "intOp(\"\" + 0, Integer.MAX_VALUE)"); + Tester.checkEqual(intOp("" + 1, Integer.MIN_VALUE), ("" + 1) + Integer.MIN_VALUE, "intOp(\"\" + 1, Integer.MIN_VALUE)"); + Tester.checkEqual(intAssign("" + 1, Integer.MIN_VALUE), ("" + 1) + Integer.MIN_VALUE, "intOp(\"\" + 1, Integer.MIN_VALUE)"); + Tester.checkEqual(intOp("" + 1, -1), ("" + 1) + -1, "intOp(\"\" + 1, -1)"); + Tester.checkEqual(intAssign("" + 1, -1), ("" + 1) + -1, "intOp(\"\" + 1, -1)"); + Tester.checkEqual(intOp("" + 1, 0), ("" + 1) + 0, "intOp(\"\" + 1, 0)"); + Tester.checkEqual(intAssign("" + 1, 0), ("" + 1) + 0, "intOp(\"\" + 1, 0)"); + Tester.checkEqual(intOp("" + 1, 1), ("" + 1) + 1, "intOp(\"\" + 1, 1)"); + Tester.checkEqual(intAssign("" + 1, 1), ("" + 1) + 1, "intOp(\"\" + 1, 1)"); + Tester.checkEqual(intOp("" + 1, Integer.MAX_VALUE), ("" + 1) + Integer.MAX_VALUE, "intOp(\"\" + 1, Integer.MAX_VALUE)"); + Tester.checkEqual(intAssign("" + 1, Integer.MAX_VALUE), ("" + 1) + Integer.MAX_VALUE, "intOp(\"\" + 1, Integer.MAX_VALUE)"); + Tester.checkEqual(intOp("" + Integer.MAX_VALUE, Integer.MIN_VALUE), ("" + Integer.MAX_VALUE) + Integer.MIN_VALUE, "intOp(\"\" + Integer.MAX_VALUE, Integer.MIN_VALUE)"); + Tester.checkEqual(intAssign("" + Integer.MAX_VALUE, Integer.MIN_VALUE), ("" + Integer.MAX_VALUE) + Integer.MIN_VALUE, "intOp(\"\" + Integer.MAX_VALUE, Integer.MIN_VALUE)"); + Tester.checkEqual(intOp("" + Integer.MAX_VALUE, -1), ("" + Integer.MAX_VALUE) + -1, "intOp(\"\" + Integer.MAX_VALUE, -1)"); + Tester.checkEqual(intAssign("" + Integer.MAX_VALUE, -1), ("" + Integer.MAX_VALUE) + -1, "intOp(\"\" + Integer.MAX_VALUE, -1)"); + Tester.checkEqual(intOp("" + Integer.MAX_VALUE, 0), ("" + Integer.MAX_VALUE) + 0, "intOp(\"\" + Integer.MAX_VALUE, 0)"); + Tester.checkEqual(intAssign("" + Integer.MAX_VALUE, 0), ("" + Integer.MAX_VALUE) + 0, "intOp(\"\" + Integer.MAX_VALUE, 0)"); + Tester.checkEqual(intOp("" + Integer.MAX_VALUE, 1), ("" + Integer.MAX_VALUE) + 1, "intOp(\"\" + Integer.MAX_VALUE, 1)"); + Tester.checkEqual(intAssign("" + Integer.MAX_VALUE, 1), ("" + Integer.MAX_VALUE) + 1, "intOp(\"\" + Integer.MAX_VALUE, 1)"); + Tester.checkEqual(intOp("" + Integer.MAX_VALUE, Integer.MAX_VALUE), ("" + Integer.MAX_VALUE) + Integer.MAX_VALUE, "intOp(\"\" + Integer.MAX_VALUE, Integer.MAX_VALUE)"); + Tester.checkEqual(intAssign("" + Integer.MAX_VALUE, Integer.MAX_VALUE), ("" + Integer.MAX_VALUE) + Integer.MAX_VALUE, "intOp(\"\" + Integer.MAX_VALUE, Integer.MAX_VALUE)"); + } + static void intSwitch() { + switch(-1) { + case (((("" + Integer.MIN_VALUE) + Integer.MIN_VALUE) == "") ? 0 : 0): + case (((("" + Integer.MIN_VALUE) + -1) == "") ? 1 : 1): + case (((("" + Integer.MIN_VALUE) + 0) == "") ? 2 : 2): + case (((("" + Integer.MIN_VALUE) + 1) == "") ? 3 : 3): + case (((("" + Integer.MIN_VALUE) + Integer.MAX_VALUE) == "") ? 4 : 4): + case (((("" + -1) + Integer.MIN_VALUE) == "") ? 5 : 5): + case (((("" + -1) + -1) == "") ? 6 : 6): + case (((("" + -1) + 0) == "") ? 7 : 7): + case (((("" + -1) + 1) == "") ? 8 : 8): + case (((("" + -1) + Integer.MAX_VALUE) == "") ? 9 : 9): + case (((("" + 0) + Integer.MIN_VALUE) == "") ? 10 : 10): + case (((("" + 0) + -1) == "") ? 11 : 11): + case (((("" + 0) + 0) == "") ? 12 : 12): + case (((("" + 0) + 1) == "") ? 13 : 13): + case (((("" + 0) + Integer.MAX_VALUE) == "") ? 14 : 14): + case (((("" + 1) + Integer.MIN_VALUE) == "") ? 15 : 15): + case (((("" + 1) + -1) == "") ? 16 : 16): + case (((("" + 1) + 0) == "") ? 17 : 17): + case (((("" + 1) + 1) == "") ? 18 : 18): + case (((("" + 1) + Integer.MAX_VALUE) == "") ? 19 : 19): + case (((("" + Integer.MAX_VALUE) + Integer.MIN_VALUE) == "") ? 20 : 20): + case (((("" + Integer.MAX_VALUE) + -1) == "") ? 21 : 21): + case (((("" + Integer.MAX_VALUE) + 0) == "") ? 22 : 22): + case (((("" + Integer.MAX_VALUE) + 1) == "") ? 23 : 23): + case (((("" + Integer.MAX_VALUE) + Integer.MAX_VALUE) == "") ? 24 : 24): + default: + } + } + + // -------- + // long tests + static String longOp(String x, long y) { return x + y; } + static String longAssign(String x, long y) { x += y; return x; } + static void longTest() { + Tester.checkEqual(longOp("" + Long.MIN_VALUE, Long.MIN_VALUE), ("" + Long.MIN_VALUE) + Long.MIN_VALUE, "longOp(\"\" + Long.MIN_VALUE, Long.MIN_VALUE)"); + Tester.checkEqual(longAssign("" + Long.MIN_VALUE, Long.MIN_VALUE), ("" + Long.MIN_VALUE) + Long.MIN_VALUE, "longOp(\"\" + Long.MIN_VALUE, Long.MIN_VALUE)"); + Tester.checkEqual(longOp("" + Long.MIN_VALUE, -1L), ("" + Long.MIN_VALUE) + -1L, "longOp(\"\" + Long.MIN_VALUE, -1L)"); + Tester.checkEqual(longAssign("" + Long.MIN_VALUE, -1L), ("" + Long.MIN_VALUE) + -1L, "longOp(\"\" + Long.MIN_VALUE, -1L)"); + Tester.checkEqual(longOp("" + Long.MIN_VALUE, 0L), ("" + Long.MIN_VALUE) + 0L, "longOp(\"\" + Long.MIN_VALUE, 0L)"); + Tester.checkEqual(longAssign("" + Long.MIN_VALUE, 0L), ("" + Long.MIN_VALUE) + 0L, "longOp(\"\" + Long.MIN_VALUE, 0L)"); + Tester.checkEqual(longOp("" + Long.MIN_VALUE, 1L), ("" + Long.MIN_VALUE) + 1L, "longOp(\"\" + Long.MIN_VALUE, 1L)"); + Tester.checkEqual(longAssign("" + Long.MIN_VALUE, 1L), ("" + Long.MIN_VALUE) + 1L, "longOp(\"\" + Long.MIN_VALUE, 1L)"); + Tester.checkEqual(longOp("" + Long.MIN_VALUE, Long.MAX_VALUE), ("" + Long.MIN_VALUE) + Long.MAX_VALUE, "longOp(\"\" + Long.MIN_VALUE, Long.MAX_VALUE)"); + Tester.checkEqual(longAssign("" + Long.MIN_VALUE, Long.MAX_VALUE), ("" + Long.MIN_VALUE) + Long.MAX_VALUE, "longOp(\"\" + Long.MIN_VALUE, Long.MAX_VALUE)"); + Tester.checkEqual(longOp("" + -1L, Long.MIN_VALUE), ("" + -1L) + Long.MIN_VALUE, "longOp(\"\" + -1L, Long.MIN_VALUE)"); + Tester.checkEqual(longAssign("" + -1L, Long.MIN_VALUE), ("" + -1L) + Long.MIN_VALUE, "longOp(\"\" + -1L, Long.MIN_VALUE)"); + Tester.checkEqual(longOp("" + -1L, -1L), ("" + -1L) + -1L, "longOp(\"\" + -1L, -1L)"); + Tester.checkEqual(longAssign("" + -1L, -1L), ("" + -1L) + -1L, "longOp(\"\" + -1L, -1L)"); + Tester.checkEqual(longOp("" + -1L, 0L), ("" + -1L) + 0L, "longOp(\"\" + -1L, 0L)"); + Tester.checkEqual(longAssign("" + -1L, 0L), ("" + -1L) + 0L, "longOp(\"\" + -1L, 0L)"); + Tester.checkEqual(longOp("" + -1L, 1L), ("" + -1L) + 1L, "longOp(\"\" + -1L, 1L)"); + Tester.checkEqual(longAssign("" + -1L, 1L), ("" + -1L) + 1L, "longOp(\"\" + -1L, 1L)"); + Tester.checkEqual(longOp("" + -1L, Long.MAX_VALUE), ("" + -1L) + Long.MAX_VALUE, "longOp(\"\" + -1L, Long.MAX_VALUE)"); + Tester.checkEqual(longAssign("" + -1L, Long.MAX_VALUE), ("" + -1L) + Long.MAX_VALUE, "longOp(\"\" + -1L, Long.MAX_VALUE)"); + Tester.checkEqual(longOp("" + 0L, Long.MIN_VALUE), ("" + 0L) + Long.MIN_VALUE, "longOp(\"\" + 0L, Long.MIN_VALUE)"); + Tester.checkEqual(longAssign("" + 0L, Long.MIN_VALUE), ("" + 0L) + Long.MIN_VALUE, "longOp(\"\" + 0L, Long.MIN_VALUE)"); + Tester.checkEqual(longOp("" + 0L, -1L), ("" + 0L) + -1L, "longOp(\"\" + 0L, -1L)"); + Tester.checkEqual(longAssign("" + 0L, -1L), ("" + 0L) + -1L, "longOp(\"\" + 0L, -1L)"); + Tester.checkEqual(longOp("" + 0L, 0L), ("" + 0L) + 0L, "longOp(\"\" + 0L, 0L)"); + Tester.checkEqual(longAssign("" + 0L, 0L), ("" + 0L) + 0L, "longOp(\"\" + 0L, 0L)"); + Tester.checkEqual(longOp("" + 0L, 1L), ("" + 0L) + 1L, "longOp(\"\" + 0L, 1L)"); + Tester.checkEqual(longAssign("" + 0L, 1L), ("" + 0L) + 1L, "longOp(\"\" + 0L, 1L)"); + Tester.checkEqual(longOp("" + 0L, Long.MAX_VALUE), ("" + 0L) + Long.MAX_VALUE, "longOp(\"\" + 0L, Long.MAX_VALUE)"); + Tester.checkEqual(longAssign("" + 0L, Long.MAX_VALUE), ("" + 0L) + Long.MAX_VALUE, "longOp(\"\" + 0L, Long.MAX_VALUE)"); + Tester.checkEqual(longOp("" + 1L, Long.MIN_VALUE), ("" + 1L) + Long.MIN_VALUE, "longOp(\"\" + 1L, Long.MIN_VALUE)"); + Tester.checkEqual(longAssign("" + 1L, Long.MIN_VALUE), ("" + 1L) + Long.MIN_VALUE, "longOp(\"\" + 1L, Long.MIN_VALUE)"); + Tester.checkEqual(longOp("" + 1L, -1L), ("" + 1L) + -1L, "longOp(\"\" + 1L, -1L)"); + Tester.checkEqual(longAssign("" + 1L, -1L), ("" + 1L) + -1L, "longOp(\"\" + 1L, -1L)"); + Tester.checkEqual(longOp("" + 1L, 0L), ("" + 1L) + 0L, "longOp(\"\" + 1L, 0L)"); + Tester.checkEqual(longAssign("" + 1L, 0L), ("" + 1L) + 0L, "longOp(\"\" + 1L, 0L)"); + Tester.checkEqual(longOp("" + 1L, 1L), ("" + 1L) + 1L, "longOp(\"\" + 1L, 1L)"); + Tester.checkEqual(longAssign("" + 1L, 1L), ("" + 1L) + 1L, "longOp(\"\" + 1L, 1L)"); + Tester.checkEqual(longOp("" + 1L, Long.MAX_VALUE), ("" + 1L) + Long.MAX_VALUE, "longOp(\"\" + 1L, Long.MAX_VALUE)"); + Tester.checkEqual(longAssign("" + 1L, Long.MAX_VALUE), ("" + 1L) + Long.MAX_VALUE, "longOp(\"\" + 1L, Long.MAX_VALUE)"); + Tester.checkEqual(longOp("" + Long.MAX_VALUE, Long.MIN_VALUE), ("" + Long.MAX_VALUE) + Long.MIN_VALUE, "longOp(\"\" + Long.MAX_VALUE, Long.MIN_VALUE)"); + Tester.checkEqual(longAssign("" + Long.MAX_VALUE, Long.MIN_VALUE), ("" + Long.MAX_VALUE) + Long.MIN_VALUE, "longOp(\"\" + Long.MAX_VALUE, Long.MIN_VALUE)"); + Tester.checkEqual(longOp("" + Long.MAX_VALUE, -1L), ("" + Long.MAX_VALUE) + -1L, "longOp(\"\" + Long.MAX_VALUE, -1L)"); + Tester.checkEqual(longAssign("" + Long.MAX_VALUE, -1L), ("" + Long.MAX_VALUE) + -1L, "longOp(\"\" + Long.MAX_VALUE, -1L)"); + Tester.checkEqual(longOp("" + Long.MAX_VALUE, 0L), ("" + Long.MAX_VALUE) + 0L, "longOp(\"\" + Long.MAX_VALUE, 0L)"); + Tester.checkEqual(longAssign("" + Long.MAX_VALUE, 0L), ("" + Long.MAX_VALUE) + 0L, "longOp(\"\" + Long.MAX_VALUE, 0L)"); + Tester.checkEqual(longOp("" + Long.MAX_VALUE, 1L), ("" + Long.MAX_VALUE) + 1L, "longOp(\"\" + Long.MAX_VALUE, 1L)"); + Tester.checkEqual(longAssign("" + Long.MAX_VALUE, 1L), ("" + Long.MAX_VALUE) + 1L, "longOp(\"\" + Long.MAX_VALUE, 1L)"); + Tester.checkEqual(longOp("" + Long.MAX_VALUE, Long.MAX_VALUE), ("" + Long.MAX_VALUE) + Long.MAX_VALUE, "longOp(\"\" + Long.MAX_VALUE, Long.MAX_VALUE)"); + Tester.checkEqual(longAssign("" + Long.MAX_VALUE, Long.MAX_VALUE), ("" + Long.MAX_VALUE) + Long.MAX_VALUE, "longOp(\"\" + Long.MAX_VALUE, Long.MAX_VALUE)"); + } + static void longSwitch() { + switch(-1) { + case (((("" + Long.MIN_VALUE) + Long.MIN_VALUE) == "") ? 0 : 0): + case (((("" + Long.MIN_VALUE) + -1L) == "") ? 1 : 1): + case (((("" + Long.MIN_VALUE) + 0L) == "") ? 2 : 2): + case (((("" + Long.MIN_VALUE) + 1L) == "") ? 3 : 3): + case (((("" + Long.MIN_VALUE) + Long.MAX_VALUE) == "") ? 4 : 4): + case (((("" + -1L) + Long.MIN_VALUE) == "") ? 5 : 5): + case (((("" + -1L) + -1L) == "") ? 6 : 6): + case (((("" + -1L) + 0L) == "") ? 7 : 7): + case (((("" + -1L) + 1L) == "") ? 8 : 8): + case (((("" + -1L) + Long.MAX_VALUE) == "") ? 9 : 9): + case (((("" + 0L) + Long.MIN_VALUE) == "") ? 10 : 10): + case (((("" + 0L) + -1L) == "") ? 11 : 11): + case (((("" + 0L) + 0L) == "") ? 12 : 12): + case (((("" + 0L) + 1L) == "") ? 13 : 13): + case (((("" + 0L) + Long.MAX_VALUE) == "") ? 14 : 14): + case (((("" + 1L) + Long.MIN_VALUE) == "") ? 15 : 15): + case (((("" + 1L) + -1L) == "") ? 16 : 16): + case (((("" + 1L) + 0L) == "") ? 17 : 17): + case (((("" + 1L) + 1L) == "") ? 18 : 18): + case (((("" + 1L) + Long.MAX_VALUE) == "") ? 19 : 19): + case (((("" + Long.MAX_VALUE) + Long.MIN_VALUE) == "") ? 20 : 20): + case (((("" + Long.MAX_VALUE) + -1L) == "") ? 21 : 21): + case (((("" + Long.MAX_VALUE) + 0L) == "") ? 22 : 22): + case (((("" + Long.MAX_VALUE) + 1L) == "") ? 23 : 23): + case (((("" + Long.MAX_VALUE) + Long.MAX_VALUE) == "") ? 24 : 24): + default: + } + } + + // -------- + // float tests + static String floatOp(String x, float y) { return x + y; } + static String floatAssign(String x, float y) { x += y; return x; } + static void floatTest() { + Tester.checkEqual(floatOp("" + Float.NEGATIVE_INFINITY, Float.NEGATIVE_INFINITY), ("" + Float.NEGATIVE_INFINITY) + Float.NEGATIVE_INFINITY, "floatOp(\"\" + Float.NEGATIVE_INFINITY, Float.NEGATIVE_INFINITY)"); + Tester.checkEqual(floatAssign("" + Float.NEGATIVE_INFINITY, Float.NEGATIVE_INFINITY), ("" + Float.NEGATIVE_INFINITY) + Float.NEGATIVE_INFINITY, "floatOp(\"\" + Float.NEGATIVE_INFINITY, Float.NEGATIVE_INFINITY)"); + Tester.checkEqual(floatOp("" + Float.NEGATIVE_INFINITY, -1.0f), ("" + Float.NEGATIVE_INFINITY) + -1.0f, "floatOp(\"\" + Float.NEGATIVE_INFINITY, -1.0f)"); + Tester.checkEqual(floatAssign("" + Float.NEGATIVE_INFINITY, -1.0f), ("" + Float.NEGATIVE_INFINITY) + -1.0f, "floatOp(\"\" + Float.NEGATIVE_INFINITY, -1.0f)"); + Tester.checkEqual(floatOp("" + Float.NEGATIVE_INFINITY, -0.0f), ("" + Float.NEGATIVE_INFINITY) + -0.0f, "floatOp(\"\" + Float.NEGATIVE_INFINITY, -0.0f)"); + Tester.checkEqual(floatAssign("" + Float.NEGATIVE_INFINITY, -0.0f), ("" + Float.NEGATIVE_INFINITY) + -0.0f, "floatOp(\"\" + Float.NEGATIVE_INFINITY, -0.0f)"); + Tester.checkEqual(floatOp("" + Float.NEGATIVE_INFINITY, 0.0f), ("" + Float.NEGATIVE_INFINITY) + 0.0f, "floatOp(\"\" + Float.NEGATIVE_INFINITY, 0.0f)"); + Tester.checkEqual(floatAssign("" + Float.NEGATIVE_INFINITY, 0.0f), ("" + Float.NEGATIVE_INFINITY) + 0.0f, "floatOp(\"\" + Float.NEGATIVE_INFINITY, 0.0f)"); + Tester.checkEqual(floatOp("" + Float.NEGATIVE_INFINITY, Float.MIN_VALUE), ("" + Float.NEGATIVE_INFINITY) + Float.MIN_VALUE, "floatOp(\"\" + Float.NEGATIVE_INFINITY, Float.MIN_VALUE)"); + Tester.checkEqual(floatAssign("" + Float.NEGATIVE_INFINITY, Float.MIN_VALUE), ("" + Float.NEGATIVE_INFINITY) + Float.MIN_VALUE, "floatOp(\"\" + Float.NEGATIVE_INFINITY, Float.MIN_VALUE)"); + Tester.checkEqual(floatOp("" + Float.NEGATIVE_INFINITY, 1.0f), ("" + Float.NEGATIVE_INFINITY) + 1.0f, "floatOp(\"\" + Float.NEGATIVE_INFINITY, 1.0f)"); + Tester.checkEqual(floatAssign("" + Float.NEGATIVE_INFINITY, 1.0f), ("" + Float.NEGATIVE_INFINITY) + 1.0f, "floatOp(\"\" + Float.NEGATIVE_INFINITY, 1.0f)"); + Tester.checkEqual(floatOp("" + Float.NEGATIVE_INFINITY, Float.MAX_VALUE), ("" + Float.NEGATIVE_INFINITY) + Float.MAX_VALUE, "floatOp(\"\" + Float.NEGATIVE_INFINITY, Float.MAX_VALUE)"); + Tester.checkEqual(floatAssign("" + Float.NEGATIVE_INFINITY, Float.MAX_VALUE), ("" + Float.NEGATIVE_INFINITY) + Float.MAX_VALUE, "floatOp(\"\" + Float.NEGATIVE_INFINITY, Float.MAX_VALUE)"); + Tester.checkEqual(floatOp("" + Float.NEGATIVE_INFINITY, Float.POSITIVE_INFINITY), ("" + Float.NEGATIVE_INFINITY) + Float.POSITIVE_INFINITY, "floatOp(\"\" + Float.NEGATIVE_INFINITY, Float.POSITIVE_INFINITY)"); + Tester.checkEqual(floatAssign("" + Float.NEGATIVE_INFINITY, Float.POSITIVE_INFINITY), ("" + Float.NEGATIVE_INFINITY) + Float.POSITIVE_INFINITY, "floatOp(\"\" + Float.NEGATIVE_INFINITY, Float.POSITIVE_INFINITY)"); + Tester.checkEqual(floatOp("" + Float.NEGATIVE_INFINITY, Float.NaN), ("" + Float.NEGATIVE_INFINITY) + Float.NaN, "floatOp(\"\" + Float.NEGATIVE_INFINITY, Float.NaN)"); + Tester.checkEqual(floatAssign("" + Float.NEGATIVE_INFINITY, Float.NaN), ("" + Float.NEGATIVE_INFINITY) + Float.NaN, "floatOp(\"\" + Float.NEGATIVE_INFINITY, Float.NaN)"); + Tester.checkEqual(floatOp("" + -1.0f, Float.NEGATIVE_INFINITY), ("" + -1.0f) + Float.NEGATIVE_INFINITY, "floatOp(\"\" + -1.0f, Float.NEGATIVE_INFINITY)"); + Tester.checkEqual(floatAssign("" + -1.0f, Float.NEGATIVE_INFINITY), ("" + -1.0f) + Float.NEGATIVE_INFINITY, "floatOp(\"\" + -1.0f, Float.NEGATIVE_INFINITY)"); + Tester.checkEqual(floatOp("" + -1.0f, -1.0f), ("" + -1.0f) + -1.0f, "floatOp(\"\" + -1.0f, -1.0f)"); + Tester.checkEqual(floatAssign("" + -1.0f, -1.0f), ("" + -1.0f) + -1.0f, "floatOp(\"\" + -1.0f, -1.0f)"); + Tester.checkEqual(floatOp("" + -1.0f, -0.0f), ("" + -1.0f) + -0.0f, "floatOp(\"\" + -1.0f, -0.0f)"); + Tester.checkEqual(floatAssign("" + -1.0f, -0.0f), ("" + -1.0f) + -0.0f, "floatOp(\"\" + -1.0f, -0.0f)"); + Tester.checkEqual(floatOp("" + -1.0f, 0.0f), ("" + -1.0f) + 0.0f, "floatOp(\"\" + -1.0f, 0.0f)"); + Tester.checkEqual(floatAssign("" + -1.0f, 0.0f), ("" + -1.0f) + 0.0f, "floatOp(\"\" + -1.0f, 0.0f)"); + Tester.checkEqual(floatOp("" + -1.0f, Float.MIN_VALUE), ("" + -1.0f) + Float.MIN_VALUE, "floatOp(\"\" + -1.0f, Float.MIN_VALUE)"); + Tester.checkEqual(floatAssign("" + -1.0f, Float.MIN_VALUE), ("" + -1.0f) + Float.MIN_VALUE, "floatOp(\"\" + -1.0f, Float.MIN_VALUE)"); + Tester.checkEqual(floatOp("" + -1.0f, 1.0f), ("" + -1.0f) + 1.0f, "floatOp(\"\" + -1.0f, 1.0f)"); + Tester.checkEqual(floatAssign("" + -1.0f, 1.0f), ("" + -1.0f) + 1.0f, "floatOp(\"\" + -1.0f, 1.0f)"); + Tester.checkEqual(floatOp("" + -1.0f, Float.MAX_VALUE), ("" + -1.0f) + Float.MAX_VALUE, "floatOp(\"\" + -1.0f, Float.MAX_VALUE)"); + Tester.checkEqual(floatAssign("" + -1.0f, Float.MAX_VALUE), ("" + -1.0f) + Float.MAX_VALUE, "floatOp(\"\" + -1.0f, Float.MAX_VALUE)"); + Tester.checkEqual(floatOp("" + -1.0f, Float.POSITIVE_INFINITY), ("" + -1.0f) + Float.POSITIVE_INFINITY, "floatOp(\"\" + -1.0f, Float.POSITIVE_INFINITY)"); + Tester.checkEqual(floatAssign("" + -1.0f, Float.POSITIVE_INFINITY), ("" + -1.0f) + Float.POSITIVE_INFINITY, "floatOp(\"\" + -1.0f, Float.POSITIVE_INFINITY)"); + Tester.checkEqual(floatOp("" + -1.0f, Float.NaN), ("" + -1.0f) + Float.NaN, "floatOp(\"\" + -1.0f, Float.NaN)"); + Tester.checkEqual(floatAssign("" + -1.0f, Float.NaN), ("" + -1.0f) + Float.NaN, "floatOp(\"\" + -1.0f, Float.NaN)"); + Tester.checkEqual(floatOp("" + -0.0f, Float.NEGATIVE_INFINITY), ("" + -0.0f) + Float.NEGATIVE_INFINITY, "floatOp(\"\" + -0.0f, Float.NEGATIVE_INFINITY)"); + Tester.checkEqual(floatAssign("" + -0.0f, Float.NEGATIVE_INFINITY), ("" + -0.0f) + Float.NEGATIVE_INFINITY, "floatOp(\"\" + -0.0f, Float.NEGATIVE_INFINITY)"); + Tester.checkEqual(floatOp("" + -0.0f, -1.0f), ("" + -0.0f) + -1.0f, "floatOp(\"\" + -0.0f, -1.0f)"); + Tester.checkEqual(floatAssign("" + -0.0f, -1.0f), ("" + -0.0f) + -1.0f, "floatOp(\"\" + -0.0f, -1.0f)"); + Tester.checkEqual(floatOp("" + -0.0f, -0.0f), ("" + -0.0f) + -0.0f, "floatOp(\"\" + -0.0f, -0.0f)"); + Tester.checkEqual(floatAssign("" + -0.0f, -0.0f), ("" + -0.0f) + -0.0f, "floatOp(\"\" + -0.0f, -0.0f)"); + Tester.checkEqual(floatOp("" + -0.0f, 0.0f), ("" + -0.0f) + 0.0f, "floatOp(\"\" + -0.0f, 0.0f)"); + Tester.checkEqual(floatAssign("" + -0.0f, 0.0f), ("" + -0.0f) + 0.0f, "floatOp(\"\" + -0.0f, 0.0f)"); + Tester.checkEqual(floatOp("" + -0.0f, Float.MIN_VALUE), ("" + -0.0f) + Float.MIN_VALUE, "floatOp(\"\" + -0.0f, Float.MIN_VALUE)"); + Tester.checkEqual(floatAssign("" + -0.0f, Float.MIN_VALUE), ("" + -0.0f) + Float.MIN_VALUE, "floatOp(\"\" + -0.0f, Float.MIN_VALUE)"); + Tester.checkEqual(floatOp("" + -0.0f, 1.0f), ("" + -0.0f) + 1.0f, "floatOp(\"\" + -0.0f, 1.0f)"); + Tester.checkEqual(floatAssign("" + -0.0f, 1.0f), ("" + -0.0f) + 1.0f, "floatOp(\"\" + -0.0f, 1.0f)"); + Tester.checkEqual(floatOp("" + -0.0f, Float.MAX_VALUE), ("" + -0.0f) + Float.MAX_VALUE, "floatOp(\"\" + -0.0f, Float.MAX_VALUE)"); + Tester.checkEqual(floatAssign("" + -0.0f, Float.MAX_VALUE), ("" + -0.0f) + Float.MAX_VALUE, "floatOp(\"\" + -0.0f, Float.MAX_VALUE)"); + Tester.checkEqual(floatOp("" + -0.0f, Float.POSITIVE_INFINITY), ("" + -0.0f) + Float.POSITIVE_INFINITY, "floatOp(\"\" + -0.0f, Float.POSITIVE_INFINITY)"); + Tester.checkEqual(floatAssign("" + -0.0f, Float.POSITIVE_INFINITY), ("" + -0.0f) + Float.POSITIVE_INFINITY, "floatOp(\"\" + -0.0f, Float.POSITIVE_INFINITY)"); + Tester.checkEqual(floatOp("" + -0.0f, Float.NaN), ("" + -0.0f) + Float.NaN, "floatOp(\"\" + -0.0f, Float.NaN)"); + Tester.checkEqual(floatAssign("" + -0.0f, Float.NaN), ("" + -0.0f) + Float.NaN, "floatOp(\"\" + -0.0f, Float.NaN)"); + Tester.checkEqual(floatOp("" + 0.0f, Float.NEGATIVE_INFINITY), ("" + 0.0f) + Float.NEGATIVE_INFINITY, "floatOp(\"\" + 0.0f, Float.NEGATIVE_INFINITY)"); + Tester.checkEqual(floatAssign("" + 0.0f, Float.NEGATIVE_INFINITY), ("" + 0.0f) + Float.NEGATIVE_INFINITY, "floatOp(\"\" + 0.0f, Float.NEGATIVE_INFINITY)"); + Tester.checkEqual(floatOp("" + 0.0f, -1.0f), ("" + 0.0f) + -1.0f, "floatOp(\"\" + 0.0f, -1.0f)"); + Tester.checkEqual(floatAssign("" + 0.0f, -1.0f), ("" + 0.0f) + -1.0f, "floatOp(\"\" + 0.0f, -1.0f)"); + Tester.checkEqual(floatOp("" + 0.0f, -0.0f), ("" + 0.0f) + -0.0f, "floatOp(\"\" + 0.0f, -0.0f)"); + Tester.checkEqual(floatAssign("" + 0.0f, -0.0f), ("" + 0.0f) + -0.0f, "floatOp(\"\" + 0.0f, -0.0f)"); + Tester.checkEqual(floatOp("" + 0.0f, 0.0f), ("" + 0.0f) + 0.0f, "floatOp(\"\" + 0.0f, 0.0f)"); + Tester.checkEqual(floatAssign("" + 0.0f, 0.0f), ("" + 0.0f) + 0.0f, "floatOp(\"\" + 0.0f, 0.0f)"); + Tester.checkEqual(floatOp("" + 0.0f, Float.MIN_VALUE), ("" + 0.0f) + Float.MIN_VALUE, "floatOp(\"\" + 0.0f, Float.MIN_VALUE)"); + Tester.checkEqual(floatAssign("" + 0.0f, Float.MIN_VALUE), ("" + 0.0f) + Float.MIN_VALUE, "floatOp(\"\" + 0.0f, Float.MIN_VALUE)"); + Tester.checkEqual(floatOp("" + 0.0f, 1.0f), ("" + 0.0f) + 1.0f, "floatOp(\"\" + 0.0f, 1.0f)"); + Tester.checkEqual(floatAssign("" + 0.0f, 1.0f), ("" + 0.0f) + 1.0f, "floatOp(\"\" + 0.0f, 1.0f)"); + Tester.checkEqual(floatOp("" + 0.0f, Float.MAX_VALUE), ("" + 0.0f) + Float.MAX_VALUE, "floatOp(\"\" + 0.0f, Float.MAX_VALUE)"); + Tester.checkEqual(floatAssign("" + 0.0f, Float.MAX_VALUE), ("" + 0.0f) + Float.MAX_VALUE, "floatOp(\"\" + 0.0f, Float.MAX_VALUE)"); + Tester.checkEqual(floatOp("" + 0.0f, Float.POSITIVE_INFINITY), ("" + 0.0f) + Float.POSITIVE_INFINITY, "floatOp(\"\" + 0.0f, Float.POSITIVE_INFINITY)"); + Tester.checkEqual(floatAssign("" + 0.0f, Float.POSITIVE_INFINITY), ("" + 0.0f) + Float.POSITIVE_INFINITY, "floatOp(\"\" + 0.0f, Float.POSITIVE_INFINITY)"); + Tester.checkEqual(floatOp("" + 0.0f, Float.NaN), ("" + 0.0f) + Float.NaN, "floatOp(\"\" + 0.0f, Float.NaN)"); + Tester.checkEqual(floatAssign("" + 0.0f, Float.NaN), ("" + 0.0f) + Float.NaN, "floatOp(\"\" + 0.0f, Float.NaN)"); + Tester.checkEqual(floatOp("" + Float.MIN_VALUE, Float.NEGATIVE_INFINITY), ("" + Float.MIN_VALUE) + Float.NEGATIVE_INFINITY, "floatOp(\"\" + Float.MIN_VALUE, Float.NEGATIVE_INFINITY)"); + Tester.checkEqual(floatAssign("" + Float.MIN_VALUE, Float.NEGATIVE_INFINITY), ("" + Float.MIN_VALUE) + Float.NEGATIVE_INFINITY, "floatOp(\"\" + Float.MIN_VALUE, Float.NEGATIVE_INFINITY)"); + Tester.checkEqual(floatOp("" + Float.MIN_VALUE, -1.0f), ("" + Float.MIN_VALUE) + -1.0f, "floatOp(\"\" + Float.MIN_VALUE, -1.0f)"); + Tester.checkEqual(floatAssign("" + Float.MIN_VALUE, -1.0f), ("" + Float.MIN_VALUE) + -1.0f, "floatOp(\"\" + Float.MIN_VALUE, -1.0f)"); + Tester.checkEqual(floatOp("" + Float.MIN_VALUE, -0.0f), ("" + Float.MIN_VALUE) + -0.0f, "floatOp(\"\" + Float.MIN_VALUE, -0.0f)"); + Tester.checkEqual(floatAssign("" + Float.MIN_VALUE, -0.0f), ("" + Float.MIN_VALUE) + -0.0f, "floatOp(\"\" + Float.MIN_VALUE, -0.0f)"); + Tester.checkEqual(floatOp("" + Float.MIN_VALUE, 0.0f), ("" + Float.MIN_VALUE) + 0.0f, "floatOp(\"\" + Float.MIN_VALUE, 0.0f)"); + Tester.checkEqual(floatAssign("" + Float.MIN_VALUE, 0.0f), ("" + Float.MIN_VALUE) + 0.0f, "floatOp(\"\" + Float.MIN_VALUE, 0.0f)"); + Tester.checkEqual(floatOp("" + Float.MIN_VALUE, Float.MIN_VALUE), ("" + Float.MIN_VALUE) + Float.MIN_VALUE, "floatOp(\"\" + Float.MIN_VALUE, Float.MIN_VALUE)"); + Tester.checkEqual(floatAssign("" + Float.MIN_VALUE, Float.MIN_VALUE), ("" + Float.MIN_VALUE) + Float.MIN_VALUE, "floatOp(\"\" + Float.MIN_VALUE, Float.MIN_VALUE)"); + Tester.checkEqual(floatOp("" + Float.MIN_VALUE, 1.0f), ("" + Float.MIN_VALUE) + 1.0f, "floatOp(\"\" + Float.MIN_VALUE, 1.0f)"); + Tester.checkEqual(floatAssign("" + Float.MIN_VALUE, 1.0f), ("" + Float.MIN_VALUE) + 1.0f, "floatOp(\"\" + Float.MIN_VALUE, 1.0f)"); + Tester.checkEqual(floatOp("" + Float.MIN_VALUE, Float.MAX_VALUE), ("" + Float.MIN_VALUE) + Float.MAX_VALUE, "floatOp(\"\" + Float.MIN_VALUE, Float.MAX_VALUE)"); + Tester.checkEqual(floatAssign("" + Float.MIN_VALUE, Float.MAX_VALUE), ("" + Float.MIN_VALUE) + Float.MAX_VALUE, "floatOp(\"\" + Float.MIN_VALUE, Float.MAX_VALUE)"); + Tester.checkEqual(floatOp("" + Float.MIN_VALUE, Float.POSITIVE_INFINITY), ("" + Float.MIN_VALUE) + Float.POSITIVE_INFINITY, "floatOp(\"\" + Float.MIN_VALUE, Float.POSITIVE_INFINITY)"); + Tester.checkEqual(floatAssign("" + Float.MIN_VALUE, Float.POSITIVE_INFINITY), ("" + Float.MIN_VALUE) + Float.POSITIVE_INFINITY, "floatOp(\"\" + Float.MIN_VALUE, Float.POSITIVE_INFINITY)"); + Tester.checkEqual(floatOp("" + Float.MIN_VALUE, Float.NaN), ("" + Float.MIN_VALUE) + Float.NaN, "floatOp(\"\" + Float.MIN_VALUE, Float.NaN)"); + Tester.checkEqual(floatAssign("" + Float.MIN_VALUE, Float.NaN), ("" + Float.MIN_VALUE) + Float.NaN, "floatOp(\"\" + Float.MIN_VALUE, Float.NaN)"); + Tester.checkEqual(floatOp("" + 1.0f, Float.NEGATIVE_INFINITY), ("" + 1.0f) + Float.NEGATIVE_INFINITY, "floatOp(\"\" + 1.0f, Float.NEGATIVE_INFINITY)"); + Tester.checkEqual(floatAssign("" + 1.0f, Float.NEGATIVE_INFINITY), ("" + 1.0f) + Float.NEGATIVE_INFINITY, "floatOp(\"\" + 1.0f, Float.NEGATIVE_INFINITY)"); + Tester.checkEqual(floatOp("" + 1.0f, -1.0f), ("" + 1.0f) + -1.0f, "floatOp(\"\" + 1.0f, -1.0f)"); + Tester.checkEqual(floatAssign("" + 1.0f, -1.0f), ("" + 1.0f) + -1.0f, "floatOp(\"\" + 1.0f, -1.0f)"); + Tester.checkEqual(floatOp("" + 1.0f, -0.0f), ("" + 1.0f) + -0.0f, "floatOp(\"\" + 1.0f, -0.0f)"); + Tester.checkEqual(floatAssign("" + 1.0f, -0.0f), ("" + 1.0f) + -0.0f, "floatOp(\"\" + 1.0f, -0.0f)"); + Tester.checkEqual(floatOp("" + 1.0f, 0.0f), ("" + 1.0f) + 0.0f, "floatOp(\"\" + 1.0f, 0.0f)"); + Tester.checkEqual(floatAssign("" + 1.0f, 0.0f), ("" + 1.0f) + 0.0f, "floatOp(\"\" + 1.0f, 0.0f)"); + Tester.checkEqual(floatOp("" + 1.0f, Float.MIN_VALUE), ("" + 1.0f) + Float.MIN_VALUE, "floatOp(\"\" + 1.0f, Float.MIN_VALUE)"); + Tester.checkEqual(floatAssign("" + 1.0f, Float.MIN_VALUE), ("" + 1.0f) + Float.MIN_VALUE, "floatOp(\"\" + 1.0f, Float.MIN_VALUE)"); + Tester.checkEqual(floatOp("" + 1.0f, 1.0f), ("" + 1.0f) + 1.0f, "floatOp(\"\" + 1.0f, 1.0f)"); + Tester.checkEqual(floatAssign("" + 1.0f, 1.0f), ("" + 1.0f) + 1.0f, "floatOp(\"\" + 1.0f, 1.0f)"); + Tester.checkEqual(floatOp("" + 1.0f, Float.MAX_VALUE), ("" + 1.0f) + Float.MAX_VALUE, "floatOp(\"\" + 1.0f, Float.MAX_VALUE)"); + Tester.checkEqual(floatAssign("" + 1.0f, Float.MAX_VALUE), ("" + 1.0f) + Float.MAX_VALUE, "floatOp(\"\" + 1.0f, Float.MAX_VALUE)"); + Tester.checkEqual(floatOp("" + 1.0f, Float.POSITIVE_INFINITY), ("" + 1.0f) + Float.POSITIVE_INFINITY, "floatOp(\"\" + 1.0f, Float.POSITIVE_INFINITY)"); + Tester.checkEqual(floatAssign("" + 1.0f, Float.POSITIVE_INFINITY), ("" + 1.0f) + Float.POSITIVE_INFINITY, "floatOp(\"\" + 1.0f, Float.POSITIVE_INFINITY)"); + Tester.checkEqual(floatOp("" + 1.0f, Float.NaN), ("" + 1.0f) + Float.NaN, "floatOp(\"\" + 1.0f, Float.NaN)"); + Tester.checkEqual(floatAssign("" + 1.0f, Float.NaN), ("" + 1.0f) + Float.NaN, "floatOp(\"\" + 1.0f, Float.NaN)"); + Tester.checkEqual(floatOp("" + Float.MAX_VALUE, Float.NEGATIVE_INFINITY), ("" + Float.MAX_VALUE) + Float.NEGATIVE_INFINITY, "floatOp(\"\" + Float.MAX_VALUE, Float.NEGATIVE_INFINITY)"); + Tester.checkEqual(floatAssign("" + Float.MAX_VALUE, Float.NEGATIVE_INFINITY), ("" + Float.MAX_VALUE) + Float.NEGATIVE_INFINITY, "floatOp(\"\" + Float.MAX_VALUE, Float.NEGATIVE_INFINITY)"); + Tester.checkEqual(floatOp("" + Float.MAX_VALUE, -1.0f), ("" + Float.MAX_VALUE) + -1.0f, "floatOp(\"\" + Float.MAX_VALUE, -1.0f)"); + Tester.checkEqual(floatAssign("" + Float.MAX_VALUE, -1.0f), ("" + Float.MAX_VALUE) + -1.0f, "floatOp(\"\" + Float.MAX_VALUE, -1.0f)"); + Tester.checkEqual(floatOp("" + Float.MAX_VALUE, -0.0f), ("" + Float.MAX_VALUE) + -0.0f, "floatOp(\"\" + Float.MAX_VALUE, -0.0f)"); + Tester.checkEqual(floatAssign("" + Float.MAX_VALUE, -0.0f), ("" + Float.MAX_VALUE) + -0.0f, "floatOp(\"\" + Float.MAX_VALUE, -0.0f)"); + Tester.checkEqual(floatOp("" + Float.MAX_VALUE, 0.0f), ("" + Float.MAX_VALUE) + 0.0f, "floatOp(\"\" + Float.MAX_VALUE, 0.0f)"); + Tester.checkEqual(floatAssign("" + Float.MAX_VALUE, 0.0f), ("" + Float.MAX_VALUE) + 0.0f, "floatOp(\"\" + Float.MAX_VALUE, 0.0f)"); + Tester.checkEqual(floatOp("" + Float.MAX_VALUE, Float.MIN_VALUE), ("" + Float.MAX_VALUE) + Float.MIN_VALUE, "floatOp(\"\" + Float.MAX_VALUE, Float.MIN_VALUE)"); + Tester.checkEqual(floatAssign("" + Float.MAX_VALUE, Float.MIN_VALUE), ("" + Float.MAX_VALUE) + Float.MIN_VALUE, "floatOp(\"\" + Float.MAX_VALUE, Float.MIN_VALUE)"); + Tester.checkEqual(floatOp("" + Float.MAX_VALUE, 1.0f), ("" + Float.MAX_VALUE) + 1.0f, "floatOp(\"\" + Float.MAX_VALUE, 1.0f)"); + Tester.checkEqual(floatAssign("" + Float.MAX_VALUE, 1.0f), ("" + Float.MAX_VALUE) + 1.0f, "floatOp(\"\" + Float.MAX_VALUE, 1.0f)"); + Tester.checkEqual(floatOp("" + Float.MAX_VALUE, Float.MAX_VALUE), ("" + Float.MAX_VALUE) + Float.MAX_VALUE, "floatOp(\"\" + Float.MAX_VALUE, Float.MAX_VALUE)"); + Tester.checkEqual(floatAssign("" + Float.MAX_VALUE, Float.MAX_VALUE), ("" + Float.MAX_VALUE) + Float.MAX_VALUE, "floatOp(\"\" + Float.MAX_VALUE, Float.MAX_VALUE)"); + Tester.checkEqual(floatOp("" + Float.MAX_VALUE, Float.POSITIVE_INFINITY), ("" + Float.MAX_VALUE) + Float.POSITIVE_INFINITY, "floatOp(\"\" + Float.MAX_VALUE, Float.POSITIVE_INFINITY)"); + Tester.checkEqual(floatAssign("" + Float.MAX_VALUE, Float.POSITIVE_INFINITY), ("" + Float.MAX_VALUE) + Float.POSITIVE_INFINITY, "floatOp(\"\" + Float.MAX_VALUE, Float.POSITIVE_INFINITY)"); + Tester.checkEqual(floatOp("" + Float.MAX_VALUE, Float.NaN), ("" + Float.MAX_VALUE) + Float.NaN, "floatOp(\"\" + Float.MAX_VALUE, Float.NaN)"); + Tester.checkEqual(floatAssign("" + Float.MAX_VALUE, Float.NaN), ("" + Float.MAX_VALUE) + Float.NaN, "floatOp(\"\" + Float.MAX_VALUE, Float.NaN)"); + Tester.checkEqual(floatOp("" + Float.POSITIVE_INFINITY, Float.NEGATIVE_INFINITY), ("" + Float.POSITIVE_INFINITY) + Float.NEGATIVE_INFINITY, "floatOp(\"\" + Float.POSITIVE_INFINITY, Float.NEGATIVE_INFINITY)"); + Tester.checkEqual(floatAssign("" + Float.POSITIVE_INFINITY, Float.NEGATIVE_INFINITY), ("" + Float.POSITIVE_INFINITY) + Float.NEGATIVE_INFINITY, "floatOp(\"\" + Float.POSITIVE_INFINITY, Float.NEGATIVE_INFINITY)"); + Tester.checkEqual(floatOp("" + Float.POSITIVE_INFINITY, -1.0f), ("" + Float.POSITIVE_INFINITY) + -1.0f, "floatOp(\"\" + Float.POSITIVE_INFINITY, -1.0f)"); + Tester.checkEqual(floatAssign("" + Float.POSITIVE_INFINITY, -1.0f), ("" + Float.POSITIVE_INFINITY) + -1.0f, "floatOp(\"\" + Float.POSITIVE_INFINITY, -1.0f)"); + Tester.checkEqual(floatOp("" + Float.POSITIVE_INFINITY, -0.0f), ("" + Float.POSITIVE_INFINITY) + -0.0f, "floatOp(\"\" + Float.POSITIVE_INFINITY, -0.0f)"); + Tester.checkEqual(floatAssign("" + Float.POSITIVE_INFINITY, -0.0f), ("" + Float.POSITIVE_INFINITY) + -0.0f, "floatOp(\"\" + Float.POSITIVE_INFINITY, -0.0f)"); + Tester.checkEqual(floatOp("" + Float.POSITIVE_INFINITY, 0.0f), ("" + Float.POSITIVE_INFINITY) + 0.0f, "floatOp(\"\" + Float.POSITIVE_INFINITY, 0.0f)"); + Tester.checkEqual(floatAssign("" + Float.POSITIVE_INFINITY, 0.0f), ("" + Float.POSITIVE_INFINITY) + 0.0f, "floatOp(\"\" + Float.POSITIVE_INFINITY, 0.0f)"); + Tester.checkEqual(floatOp("" + Float.POSITIVE_INFINITY, Float.MIN_VALUE), ("" + Float.POSITIVE_INFINITY) + Float.MIN_VALUE, "floatOp(\"\" + Float.POSITIVE_INFINITY, Float.MIN_VALUE)"); + Tester.checkEqual(floatAssign("" + Float.POSITIVE_INFINITY, Float.MIN_VALUE), ("" + Float.POSITIVE_INFINITY) + Float.MIN_VALUE, "floatOp(\"\" + Float.POSITIVE_INFINITY, Float.MIN_VALUE)"); + Tester.checkEqual(floatOp("" + Float.POSITIVE_INFINITY, 1.0f), ("" + Float.POSITIVE_INFINITY) + 1.0f, "floatOp(\"\" + Float.POSITIVE_INFINITY, 1.0f)"); + Tester.checkEqual(floatAssign("" + Float.POSITIVE_INFINITY, 1.0f), ("" + Float.POSITIVE_INFINITY) + 1.0f, "floatOp(\"\" + Float.POSITIVE_INFINITY, 1.0f)"); + Tester.checkEqual(floatOp("" + Float.POSITIVE_INFINITY, Float.MAX_VALUE), ("" + Float.POSITIVE_INFINITY) + Float.MAX_VALUE, "floatOp(\"\" + Float.POSITIVE_INFINITY, Float.MAX_VALUE)"); + Tester.checkEqual(floatAssign("" + Float.POSITIVE_INFINITY, Float.MAX_VALUE), ("" + Float.POSITIVE_INFINITY) + Float.MAX_VALUE, "floatOp(\"\" + Float.POSITIVE_INFINITY, Float.MAX_VALUE)"); + Tester.checkEqual(floatOp("" + Float.POSITIVE_INFINITY, Float.POSITIVE_INFINITY), ("" + Float.POSITIVE_INFINITY) + Float.POSITIVE_INFINITY, "floatOp(\"\" + Float.POSITIVE_INFINITY, Float.POSITIVE_INFINITY)"); + Tester.checkEqual(floatAssign("" + Float.POSITIVE_INFINITY, Float.POSITIVE_INFINITY), ("" + Float.POSITIVE_INFINITY) + Float.POSITIVE_INFINITY, "floatOp(\"\" + Float.POSITIVE_INFINITY, Float.POSITIVE_INFINITY)"); + Tester.checkEqual(floatOp("" + Float.POSITIVE_INFINITY, Float.NaN), ("" + Float.POSITIVE_INFINITY) + Float.NaN, "floatOp(\"\" + Float.POSITIVE_INFINITY, Float.NaN)"); + Tester.checkEqual(floatAssign("" + Float.POSITIVE_INFINITY, Float.NaN), ("" + Float.POSITIVE_INFINITY) + Float.NaN, "floatOp(\"\" + Float.POSITIVE_INFINITY, Float.NaN)"); + Tester.checkEqual(floatOp("" + Float.NaN, Float.NEGATIVE_INFINITY), ("" + Float.NaN) + Float.NEGATIVE_INFINITY, "floatOp(\"\" + Float.NaN, Float.NEGATIVE_INFINITY)"); + Tester.checkEqual(floatAssign("" + Float.NaN, Float.NEGATIVE_INFINITY), ("" + Float.NaN) + Float.NEGATIVE_INFINITY, "floatOp(\"\" + Float.NaN, Float.NEGATIVE_INFINITY)"); + Tester.checkEqual(floatOp("" + Float.NaN, -1.0f), ("" + Float.NaN) + -1.0f, "floatOp(\"\" + Float.NaN, -1.0f)"); + Tester.checkEqual(floatAssign("" + Float.NaN, -1.0f), ("" + Float.NaN) + -1.0f, "floatOp(\"\" + Float.NaN, -1.0f)"); + Tester.checkEqual(floatOp("" + Float.NaN, -0.0f), ("" + Float.NaN) + -0.0f, "floatOp(\"\" + Float.NaN, -0.0f)"); + Tester.checkEqual(floatAssign("" + Float.NaN, -0.0f), ("" + Float.NaN) + -0.0f, "floatOp(\"\" + Float.NaN, -0.0f)"); + Tester.checkEqual(floatOp("" + Float.NaN, 0.0f), ("" + Float.NaN) + 0.0f, "floatOp(\"\" + Float.NaN, 0.0f)"); + Tester.checkEqual(floatAssign("" + Float.NaN, 0.0f), ("" + Float.NaN) + 0.0f, "floatOp(\"\" + Float.NaN, 0.0f)"); + Tester.checkEqual(floatOp("" + Float.NaN, Float.MIN_VALUE), ("" + Float.NaN) + Float.MIN_VALUE, "floatOp(\"\" + Float.NaN, Float.MIN_VALUE)"); + Tester.checkEqual(floatAssign("" + Float.NaN, Float.MIN_VALUE), ("" + Float.NaN) + Float.MIN_VALUE, "floatOp(\"\" + Float.NaN, Float.MIN_VALUE)"); + Tester.checkEqual(floatOp("" + Float.NaN, 1.0f), ("" + Float.NaN) + 1.0f, "floatOp(\"\" + Float.NaN, 1.0f)"); + Tester.checkEqual(floatAssign("" + Float.NaN, 1.0f), ("" + Float.NaN) + 1.0f, "floatOp(\"\" + Float.NaN, 1.0f)"); + Tester.checkEqual(floatOp("" + Float.NaN, Float.MAX_VALUE), ("" + Float.NaN) + Float.MAX_VALUE, "floatOp(\"\" + Float.NaN, Float.MAX_VALUE)"); + Tester.checkEqual(floatAssign("" + Float.NaN, Float.MAX_VALUE), ("" + Float.NaN) + Float.MAX_VALUE, "floatOp(\"\" + Float.NaN, Float.MAX_VALUE)"); + Tester.checkEqual(floatOp("" + Float.NaN, Float.POSITIVE_INFINITY), ("" + Float.NaN) + Float.POSITIVE_INFINITY, "floatOp(\"\" + Float.NaN, Float.POSITIVE_INFINITY)"); + Tester.checkEqual(floatAssign("" + Float.NaN, Float.POSITIVE_INFINITY), ("" + Float.NaN) + Float.POSITIVE_INFINITY, "floatOp(\"\" + Float.NaN, Float.POSITIVE_INFINITY)"); + Tester.checkEqual(floatOp("" + Float.NaN, Float.NaN), ("" + Float.NaN) + Float.NaN, "floatOp(\"\" + Float.NaN, Float.NaN)"); + Tester.checkEqual(floatAssign("" + Float.NaN, Float.NaN), ("" + Float.NaN) + Float.NaN, "floatOp(\"\" + Float.NaN, Float.NaN)"); + } + static void floatSwitch() { + switch(-1) { + case (((("" + Float.NEGATIVE_INFINITY) + Float.NEGATIVE_INFINITY) == "") ? 0 : 0): + case (((("" + Float.NEGATIVE_INFINITY) + -1.0f) == "") ? 1 : 1): + case (((("" + Float.NEGATIVE_INFINITY) + -0.0f) == "") ? 2 : 2): + case (((("" + Float.NEGATIVE_INFINITY) + 0.0f) == "") ? 3 : 3): + case (((("" + Float.NEGATIVE_INFINITY) + Float.MIN_VALUE) == "") ? 4 : 4): + case (((("" + Float.NEGATIVE_INFINITY) + 1.0f) == "") ? 5 : 5): + case (((("" + Float.NEGATIVE_INFINITY) + Float.MAX_VALUE) == "") ? 6 : 6): + case (((("" + Float.NEGATIVE_INFINITY) + Float.POSITIVE_INFINITY) == "") ? 7 : 7): + case (((("" + Float.NEGATIVE_INFINITY) + Float.NaN) == "") ? 8 : 8): + case (((("" + -1.0f) + Float.NEGATIVE_INFINITY) == "") ? 9 : 9): + case (((("" + -1.0f) + -1.0f) == "") ? 10 : 10): + case (((("" + -1.0f) + -0.0f) == "") ? 11 : 11): + case (((("" + -1.0f) + 0.0f) == "") ? 12 : 12): + case (((("" + -1.0f) + Float.MIN_VALUE) == "") ? 13 : 13): + case (((("" + -1.0f) + 1.0f) == "") ? 14 : 14): + case (((("" + -1.0f) + Float.MAX_VALUE) == "") ? 15 : 15): + case (((("" + -1.0f) + Float.POSITIVE_INFINITY) == "") ? 16 : 16): + case (((("" + -1.0f) + Float.NaN) == "") ? 17 : 17): + case (((("" + -0.0f) + Float.NEGATIVE_INFINITY) == "") ? 18 : 18): + case (((("" + -0.0f) + -1.0f) == "") ? 19 : 19): + case (((("" + -0.0f) + -0.0f) == "") ? 20 : 20): + case (((("" + -0.0f) + 0.0f) == "") ? 21 : 21): + case (((("" + -0.0f) + Float.MIN_VALUE) == "") ? 22 : 22): + case (((("" + -0.0f) + 1.0f) == "") ? 23 : 23): + case (((("" + -0.0f) + Float.MAX_VALUE) == "") ? 24 : 24): + case (((("" + -0.0f) + Float.POSITIVE_INFINITY) == "") ? 25 : 25): + case (((("" + -0.0f) + Float.NaN) == "") ? 26 : 26): + case (((("" + 0.0f) + Float.NEGATIVE_INFINITY) == "") ? 27 : 27): + case (((("" + 0.0f) + -1.0f) == "") ? 28 : 28): + case (((("" + 0.0f) + -0.0f) == "") ? 29 : 29): + case (((("" + 0.0f) + 0.0f) == "") ? 30 : 30): + case (((("" + 0.0f) + Float.MIN_VALUE) == "") ? 31 : 31): + case (((("" + 0.0f) + 1.0f) == "") ? 32 : 32): + case (((("" + 0.0f) + Float.MAX_VALUE) == "") ? 33 : 33): + case (((("" + 0.0f) + Float.POSITIVE_INFINITY) == "") ? 34 : 34): + case (((("" + 0.0f) + Float.NaN) == "") ? 35 : 35): + case (((("" + Float.MIN_VALUE) + Float.NEGATIVE_INFINITY) == "") ? 36 : 36): + case (((("" + Float.MIN_VALUE) + -1.0f) == "") ? 37 : 37): + case (((("" + Float.MIN_VALUE) + -0.0f) == "") ? 38 : 38): + case (((("" + Float.MIN_VALUE) + 0.0f) == "") ? 39 : 39): + case (((("" + Float.MIN_VALUE) + Float.MIN_VALUE) == "") ? 40 : 40): + case (((("" + Float.MIN_VALUE) + 1.0f) == "") ? 41 : 41): + case (((("" + Float.MIN_VALUE) + Float.MAX_VALUE) == "") ? 42 : 42): + case (((("" + Float.MIN_VALUE) + Float.POSITIVE_INFINITY) == "") ? 43 : 43): + case (((("" + Float.MIN_VALUE) + Float.NaN) == "") ? 44 : 44): + case (((("" + 1.0f) + Float.NEGATIVE_INFINITY) == "") ? 45 : 45): + case (((("" + 1.0f) + -1.0f) == "") ? 46 : 46): + case (((("" + 1.0f) + -0.0f) == "") ? 47 : 47): + case (((("" + 1.0f) + 0.0f) == "") ? 48 : 48): + case (((("" + 1.0f) + Float.MIN_VALUE) == "") ? 49 : 49): + case (((("" + 1.0f) + 1.0f) == "") ? 50 : 50): + case (((("" + 1.0f) + Float.MAX_VALUE) == "") ? 51 : 51): + case (((("" + 1.0f) + Float.POSITIVE_INFINITY) == "") ? 52 : 52): + case (((("" + 1.0f) + Float.NaN) == "") ? 53 : 53): + case (((("" + Float.MAX_VALUE) + Float.NEGATIVE_INFINITY) == "") ? 54 : 54): + case (((("" + Float.MAX_VALUE) + -1.0f) == "") ? 55 : 55): + case (((("" + Float.MAX_VALUE) + -0.0f) == "") ? 56 : 56): + case (((("" + Float.MAX_VALUE) + 0.0f) == "") ? 57 : 57): + case (((("" + Float.MAX_VALUE) + Float.MIN_VALUE) == "") ? 58 : 58): + case (((("" + Float.MAX_VALUE) + 1.0f) == "") ? 59 : 59): + case (((("" + Float.MAX_VALUE) + Float.MAX_VALUE) == "") ? 60 : 60): + case (((("" + Float.MAX_VALUE) + Float.POSITIVE_INFINITY) == "") ? 61 : 61): + case (((("" + Float.MAX_VALUE) + Float.NaN) == "") ? 62 : 62): + case (((("" + Float.POSITIVE_INFINITY) + Float.NEGATIVE_INFINITY) == "") ? 63 : 63): + case (((("" + Float.POSITIVE_INFINITY) + -1.0f) == "") ? 64 : 64): + case (((("" + Float.POSITIVE_INFINITY) + -0.0f) == "") ? 65 : 65): + case (((("" + Float.POSITIVE_INFINITY) + 0.0f) == "") ? 66 : 66): + case (((("" + Float.POSITIVE_INFINITY) + Float.MIN_VALUE) == "") ? 67 : 67): + case (((("" + Float.POSITIVE_INFINITY) + 1.0f) == "") ? 68 : 68): + case (((("" + Float.POSITIVE_INFINITY) + Float.MAX_VALUE) == "") ? 69 : 69): + case (((("" + Float.POSITIVE_INFINITY) + Float.POSITIVE_INFINITY) == "") ? 70 : 70): + case (((("" + Float.POSITIVE_INFINITY) + Float.NaN) == "") ? 71 : 71): + case (((("" + Float.NaN) + Float.NEGATIVE_INFINITY) == "") ? 72 : 72): + case (((("" + Float.NaN) + -1.0f) == "") ? 73 : 73): + case (((("" + Float.NaN) + -0.0f) == "") ? 74 : 74): + case (((("" + Float.NaN) + 0.0f) == "") ? 75 : 75): + case (((("" + Float.NaN) + Float.MIN_VALUE) == "") ? 76 : 76): + case (((("" + Float.NaN) + 1.0f) == "") ? 77 : 77): + case (((("" + Float.NaN) + Float.MAX_VALUE) == "") ? 78 : 78): + case (((("" + Float.NaN) + Float.POSITIVE_INFINITY) == "") ? 79 : 79): + case (((("" + Float.NaN) + Float.NaN) == "") ? 80 : 80): + default: + } + } + + // -------- + // double tests + static String doubleOp(String x, double y) { return x + y; } + static String doubleAssign(String x, double y) { x += y; return x; } + static void doubleTest() { + Tester.checkEqual(doubleOp("" + Double.NEGATIVE_INFINITY, Double.NEGATIVE_INFINITY), ("" + Double.NEGATIVE_INFINITY) + Double.NEGATIVE_INFINITY, "doubleOp(\"\" + Double.NEGATIVE_INFINITY, Double.NEGATIVE_INFINITY)"); + Tester.checkEqual(doubleAssign("" + Double.NEGATIVE_INFINITY, Double.NEGATIVE_INFINITY), ("" + Double.NEGATIVE_INFINITY) + Double.NEGATIVE_INFINITY, "doubleOp(\"\" + Double.NEGATIVE_INFINITY, Double.NEGATIVE_INFINITY)"); + Tester.checkEqual(doubleOp("" + Double.NEGATIVE_INFINITY, -1.0), ("" + Double.NEGATIVE_INFINITY) + -1.0, "doubleOp(\"\" + Double.NEGATIVE_INFINITY, -1.0)"); + Tester.checkEqual(doubleAssign("" + Double.NEGATIVE_INFINITY, -1.0), ("" + Double.NEGATIVE_INFINITY) + -1.0, "doubleOp(\"\" + Double.NEGATIVE_INFINITY, -1.0)"); + Tester.checkEqual(doubleOp("" + Double.NEGATIVE_INFINITY, -0.0), ("" + Double.NEGATIVE_INFINITY) + -0.0, "doubleOp(\"\" + Double.NEGATIVE_INFINITY, -0.0)"); + Tester.checkEqual(doubleAssign("" + Double.NEGATIVE_INFINITY, -0.0), ("" + Double.NEGATIVE_INFINITY) + -0.0, "doubleOp(\"\" + Double.NEGATIVE_INFINITY, -0.0)"); + Tester.checkEqual(doubleOp("" + Double.NEGATIVE_INFINITY, 0.0), ("" + Double.NEGATIVE_INFINITY) + 0.0, "doubleOp(\"\" + Double.NEGATIVE_INFINITY, 0.0)"); + Tester.checkEqual(doubleAssign("" + Double.NEGATIVE_INFINITY, 0.0), ("" + Double.NEGATIVE_INFINITY) + 0.0, "doubleOp(\"\" + Double.NEGATIVE_INFINITY, 0.0)"); + Tester.checkEqual(doubleOp("" + Double.NEGATIVE_INFINITY, 1.0), ("" + Double.NEGATIVE_INFINITY) + 1.0, "doubleOp(\"\" + Double.NEGATIVE_INFINITY, 1.0)"); + Tester.checkEqual(doubleAssign("" + Double.NEGATIVE_INFINITY, 1.0), ("" + Double.NEGATIVE_INFINITY) + 1.0, "doubleOp(\"\" + Double.NEGATIVE_INFINITY, 1.0)"); + Tester.checkEqual(doubleOp("" + Double.NEGATIVE_INFINITY, Double.MAX_VALUE), ("" + Double.NEGATIVE_INFINITY) + Double.MAX_VALUE, "doubleOp(\"\" + Double.NEGATIVE_INFINITY, Double.MAX_VALUE)"); + Tester.checkEqual(doubleAssign("" + Double.NEGATIVE_INFINITY, Double.MAX_VALUE), ("" + Double.NEGATIVE_INFINITY) + Double.MAX_VALUE, "doubleOp(\"\" + Double.NEGATIVE_INFINITY, Double.MAX_VALUE)"); + Tester.checkEqual(doubleOp("" + Double.NEGATIVE_INFINITY, Double.POSITIVE_INFINITY), ("" + Double.NEGATIVE_INFINITY) + Double.POSITIVE_INFINITY, "doubleOp(\"\" + Double.NEGATIVE_INFINITY, Double.POSITIVE_INFINITY)"); + Tester.checkEqual(doubleAssign("" + Double.NEGATIVE_INFINITY, Double.POSITIVE_INFINITY), ("" + Double.NEGATIVE_INFINITY) + Double.POSITIVE_INFINITY, "doubleOp(\"\" + Double.NEGATIVE_INFINITY, Double.POSITIVE_INFINITY)"); + Tester.checkEqual(doubleOp("" + Double.NEGATIVE_INFINITY, Double.NaN), ("" + Double.NEGATIVE_INFINITY) + Double.NaN, "doubleOp(\"\" + Double.NEGATIVE_INFINITY, Double.NaN)"); + Tester.checkEqual(doubleAssign("" + Double.NEGATIVE_INFINITY, Double.NaN), ("" + Double.NEGATIVE_INFINITY) + Double.NaN, "doubleOp(\"\" + Double.NEGATIVE_INFINITY, Double.NaN)"); + Tester.checkEqual(doubleOp("" + -1.0, Double.NEGATIVE_INFINITY), ("" + -1.0) + Double.NEGATIVE_INFINITY, "doubleOp(\"\" + -1.0, Double.NEGATIVE_INFINITY)"); + Tester.checkEqual(doubleAssign("" + -1.0, Double.NEGATIVE_INFINITY), ("" + -1.0) + Double.NEGATIVE_INFINITY, "doubleOp(\"\" + -1.0, Double.NEGATIVE_INFINITY)"); + Tester.checkEqual(doubleOp("" + -1.0, -1.0), ("" + -1.0) + -1.0, "doubleOp(\"\" + -1.0, -1.0)"); + Tester.checkEqual(doubleAssign("" + -1.0, -1.0), ("" + -1.0) + -1.0, "doubleOp(\"\" + -1.0, -1.0)"); + Tester.checkEqual(doubleOp("" + -1.0, -0.0), ("" + -1.0) + -0.0, "doubleOp(\"\" + -1.0, -0.0)"); + Tester.checkEqual(doubleAssign("" + -1.0, -0.0), ("" + -1.0) + -0.0, "doubleOp(\"\" + -1.0, -0.0)"); + Tester.checkEqual(doubleOp("" + -1.0, 0.0), ("" + -1.0) + 0.0, "doubleOp(\"\" + -1.0, 0.0)"); + Tester.checkEqual(doubleAssign("" + -1.0, 0.0), ("" + -1.0) + 0.0, "doubleOp(\"\" + -1.0, 0.0)"); + Tester.checkEqual(doubleOp("" + -1.0, 1.0), ("" + -1.0) + 1.0, "doubleOp(\"\" + -1.0, 1.0)"); + Tester.checkEqual(doubleAssign("" + -1.0, 1.0), ("" + -1.0) + 1.0, "doubleOp(\"\" + -1.0, 1.0)"); + Tester.checkEqual(doubleOp("" + -1.0, Double.MAX_VALUE), ("" + -1.0) + Double.MAX_VALUE, "doubleOp(\"\" + -1.0, Double.MAX_VALUE)"); + Tester.checkEqual(doubleAssign("" + -1.0, Double.MAX_VALUE), ("" + -1.0) + Double.MAX_VALUE, "doubleOp(\"\" + -1.0, Double.MAX_VALUE)"); + Tester.checkEqual(doubleOp("" + -1.0, Double.POSITIVE_INFINITY), ("" + -1.0) + Double.POSITIVE_INFINITY, "doubleOp(\"\" + -1.0, Double.POSITIVE_INFINITY)"); + Tester.checkEqual(doubleAssign("" + -1.0, Double.POSITIVE_INFINITY), ("" + -1.0) + Double.POSITIVE_INFINITY, "doubleOp(\"\" + -1.0, Double.POSITIVE_INFINITY)"); + Tester.checkEqual(doubleOp("" + -1.0, Double.NaN), ("" + -1.0) + Double.NaN, "doubleOp(\"\" + -1.0, Double.NaN)"); + Tester.checkEqual(doubleAssign("" + -1.0, Double.NaN), ("" + -1.0) + Double.NaN, "doubleOp(\"\" + -1.0, Double.NaN)"); + Tester.checkEqual(doubleOp("" + -0.0, Double.NEGATIVE_INFINITY), ("" + -0.0) + Double.NEGATIVE_INFINITY, "doubleOp(\"\" + -0.0, Double.NEGATIVE_INFINITY)"); + Tester.checkEqual(doubleAssign("" + -0.0, Double.NEGATIVE_INFINITY), ("" + -0.0) + Double.NEGATIVE_INFINITY, "doubleOp(\"\" + -0.0, Double.NEGATIVE_INFINITY)"); + Tester.checkEqual(doubleOp("" + -0.0, -1.0), ("" + -0.0) + -1.0, "doubleOp(\"\" + -0.0, -1.0)"); + Tester.checkEqual(doubleAssign("" + -0.0, -1.0), ("" + -0.0) + -1.0, "doubleOp(\"\" + -0.0, -1.0)"); + Tester.checkEqual(doubleOp("" + -0.0, -0.0), ("" + -0.0) + -0.0, "doubleOp(\"\" + -0.0, -0.0)"); + Tester.checkEqual(doubleAssign("" + -0.0, -0.0), ("" + -0.0) + -0.0, "doubleOp(\"\" + -0.0, -0.0)"); + Tester.checkEqual(doubleOp("" + -0.0, 0.0), ("" + -0.0) + 0.0, "doubleOp(\"\" + -0.0, 0.0)"); + Tester.checkEqual(doubleAssign("" + -0.0, 0.0), ("" + -0.0) + 0.0, "doubleOp(\"\" + -0.0, 0.0)"); + Tester.checkEqual(doubleOp("" + -0.0, 1.0), ("" + -0.0) + 1.0, "doubleOp(\"\" + -0.0, 1.0)"); + Tester.checkEqual(doubleAssign("" + -0.0, 1.0), ("" + -0.0) + 1.0, "doubleOp(\"\" + -0.0, 1.0)"); + Tester.checkEqual(doubleOp("" + -0.0, Double.MAX_VALUE), ("" + -0.0) + Double.MAX_VALUE, "doubleOp(\"\" + -0.0, Double.MAX_VALUE)"); + Tester.checkEqual(doubleAssign("" + -0.0, Double.MAX_VALUE), ("" + -0.0) + Double.MAX_VALUE, "doubleOp(\"\" + -0.0, Double.MAX_VALUE)"); + Tester.checkEqual(doubleOp("" + -0.0, Double.POSITIVE_INFINITY), ("" + -0.0) + Double.POSITIVE_INFINITY, "doubleOp(\"\" + -0.0, Double.POSITIVE_INFINITY)"); + Tester.checkEqual(doubleAssign("" + -0.0, Double.POSITIVE_INFINITY), ("" + -0.0) + Double.POSITIVE_INFINITY, "doubleOp(\"\" + -0.0, Double.POSITIVE_INFINITY)"); + Tester.checkEqual(doubleOp("" + -0.0, Double.NaN), ("" + -0.0) + Double.NaN, "doubleOp(\"\" + -0.0, Double.NaN)"); + Tester.checkEqual(doubleAssign("" + -0.0, Double.NaN), ("" + -0.0) + Double.NaN, "doubleOp(\"\" + -0.0, Double.NaN)"); + Tester.checkEqual(doubleOp("" + 0.0, Double.NEGATIVE_INFINITY), ("" + 0.0) + Double.NEGATIVE_INFINITY, "doubleOp(\"\" + 0.0, Double.NEGATIVE_INFINITY)"); + Tester.checkEqual(doubleAssign("" + 0.0, Double.NEGATIVE_INFINITY), ("" + 0.0) + Double.NEGATIVE_INFINITY, "doubleOp(\"\" + 0.0, Double.NEGATIVE_INFINITY)"); + Tester.checkEqual(doubleOp("" + 0.0, -1.0), ("" + 0.0) + -1.0, "doubleOp(\"\" + 0.0, -1.0)"); + Tester.checkEqual(doubleAssign("" + 0.0, -1.0), ("" + 0.0) + -1.0, "doubleOp(\"\" + 0.0, -1.0)"); + Tester.checkEqual(doubleOp("" + 0.0, -0.0), ("" + 0.0) + -0.0, "doubleOp(\"\" + 0.0, -0.0)"); + Tester.checkEqual(doubleAssign("" + 0.0, -0.0), ("" + 0.0) + -0.0, "doubleOp(\"\" + 0.0, -0.0)"); + Tester.checkEqual(doubleOp("" + 0.0, 0.0), ("" + 0.0) + 0.0, "doubleOp(\"\" + 0.0, 0.0)"); + Tester.checkEqual(doubleAssign("" + 0.0, 0.0), ("" + 0.0) + 0.0, "doubleOp(\"\" + 0.0, 0.0)"); + Tester.checkEqual(doubleOp("" + 0.0, 1.0), ("" + 0.0) + 1.0, "doubleOp(\"\" + 0.0, 1.0)"); + Tester.checkEqual(doubleAssign("" + 0.0, 1.0), ("" + 0.0) + 1.0, "doubleOp(\"\" + 0.0, 1.0)"); + Tester.checkEqual(doubleOp("" + 0.0, Double.MAX_VALUE), ("" + 0.0) + Double.MAX_VALUE, "doubleOp(\"\" + 0.0, Double.MAX_VALUE)"); + Tester.checkEqual(doubleAssign("" + 0.0, Double.MAX_VALUE), ("" + 0.0) + Double.MAX_VALUE, "doubleOp(\"\" + 0.0, Double.MAX_VALUE)"); + Tester.checkEqual(doubleOp("" + 0.0, Double.POSITIVE_INFINITY), ("" + 0.0) + Double.POSITIVE_INFINITY, "doubleOp(\"\" + 0.0, Double.POSITIVE_INFINITY)"); + Tester.checkEqual(doubleAssign("" + 0.0, Double.POSITIVE_INFINITY), ("" + 0.0) + Double.POSITIVE_INFINITY, "doubleOp(\"\" + 0.0, Double.POSITIVE_INFINITY)"); + Tester.checkEqual(doubleOp("" + 0.0, Double.NaN), ("" + 0.0) + Double.NaN, "doubleOp(\"\" + 0.0, Double.NaN)"); + Tester.checkEqual(doubleAssign("" + 0.0, Double.NaN), ("" + 0.0) + Double.NaN, "doubleOp(\"\" + 0.0, Double.NaN)"); + Tester.checkEqual(doubleOp("" + 1.0, Double.NEGATIVE_INFINITY), ("" + 1.0) + Double.NEGATIVE_INFINITY, "doubleOp(\"\" + 1.0, Double.NEGATIVE_INFINITY)"); + Tester.checkEqual(doubleAssign("" + 1.0, Double.NEGATIVE_INFINITY), ("" + 1.0) + Double.NEGATIVE_INFINITY, "doubleOp(\"\" + 1.0, Double.NEGATIVE_INFINITY)"); + Tester.checkEqual(doubleOp("" + 1.0, -1.0), ("" + 1.0) + -1.0, "doubleOp(\"\" + 1.0, -1.0)"); + Tester.checkEqual(doubleAssign("" + 1.0, -1.0), ("" + 1.0) + -1.0, "doubleOp(\"\" + 1.0, -1.0)"); + Tester.checkEqual(doubleOp("" + 1.0, -0.0), ("" + 1.0) + -0.0, "doubleOp(\"\" + 1.0, -0.0)"); + Tester.checkEqual(doubleAssign("" + 1.0, -0.0), ("" + 1.0) + -0.0, "doubleOp(\"\" + 1.0, -0.0)"); + Tester.checkEqual(doubleOp("" + 1.0, 0.0), ("" + 1.0) + 0.0, "doubleOp(\"\" + 1.0, 0.0)"); + Tester.checkEqual(doubleAssign("" + 1.0, 0.0), ("" + 1.0) + 0.0, "doubleOp(\"\" + 1.0, 0.0)"); + Tester.checkEqual(doubleOp("" + 1.0, 1.0), ("" + 1.0) + 1.0, "doubleOp(\"\" + 1.0, 1.0)"); + Tester.checkEqual(doubleAssign("" + 1.0, 1.0), ("" + 1.0) + 1.0, "doubleOp(\"\" + 1.0, 1.0)"); + Tester.checkEqual(doubleOp("" + 1.0, Double.MAX_VALUE), ("" + 1.0) + Double.MAX_VALUE, "doubleOp(\"\" + 1.0, Double.MAX_VALUE)"); + Tester.checkEqual(doubleAssign("" + 1.0, Double.MAX_VALUE), ("" + 1.0) + Double.MAX_VALUE, "doubleOp(\"\" + 1.0, Double.MAX_VALUE)"); + Tester.checkEqual(doubleOp("" + 1.0, Double.POSITIVE_INFINITY), ("" + 1.0) + Double.POSITIVE_INFINITY, "doubleOp(\"\" + 1.0, Double.POSITIVE_INFINITY)"); + Tester.checkEqual(doubleAssign("" + 1.0, Double.POSITIVE_INFINITY), ("" + 1.0) + Double.POSITIVE_INFINITY, "doubleOp(\"\" + 1.0, Double.POSITIVE_INFINITY)"); + Tester.checkEqual(doubleOp("" + 1.0, Double.NaN), ("" + 1.0) + Double.NaN, "doubleOp(\"\" + 1.0, Double.NaN)"); + Tester.checkEqual(doubleAssign("" + 1.0, Double.NaN), ("" + 1.0) + Double.NaN, "doubleOp(\"\" + 1.0, Double.NaN)"); + Tester.checkEqual(doubleOp("" + Double.MAX_VALUE, Double.NEGATIVE_INFINITY), ("" + Double.MAX_VALUE) + Double.NEGATIVE_INFINITY, "doubleOp(\"\" + Double.MAX_VALUE, Double.NEGATIVE_INFINITY)"); + Tester.checkEqual(doubleAssign("" + Double.MAX_VALUE, Double.NEGATIVE_INFINITY), ("" + Double.MAX_VALUE) + Double.NEGATIVE_INFINITY, "doubleOp(\"\" + Double.MAX_VALUE, Double.NEGATIVE_INFINITY)"); + Tester.checkEqual(doubleOp("" + Double.MAX_VALUE, -1.0), ("" + Double.MAX_VALUE) + -1.0, "doubleOp(\"\" + Double.MAX_VALUE, -1.0)"); + Tester.checkEqual(doubleAssign("" + Double.MAX_VALUE, -1.0), ("" + Double.MAX_VALUE) + -1.0, "doubleOp(\"\" + Double.MAX_VALUE, -1.0)"); + Tester.checkEqual(doubleOp("" + Double.MAX_VALUE, -0.0), ("" + Double.MAX_VALUE) + -0.0, "doubleOp(\"\" + Double.MAX_VALUE, -0.0)"); + Tester.checkEqual(doubleAssign("" + Double.MAX_VALUE, -0.0), ("" + Double.MAX_VALUE) + -0.0, "doubleOp(\"\" + Double.MAX_VALUE, -0.0)"); + Tester.checkEqual(doubleOp("" + Double.MAX_VALUE, 0.0), ("" + Double.MAX_VALUE) + 0.0, "doubleOp(\"\" + Double.MAX_VALUE, 0.0)"); + Tester.checkEqual(doubleAssign("" + Double.MAX_VALUE, 0.0), ("" + Double.MAX_VALUE) + 0.0, "doubleOp(\"\" + Double.MAX_VALUE, 0.0)"); + Tester.checkEqual(doubleOp("" + Double.MAX_VALUE, 1.0), ("" + Double.MAX_VALUE) + 1.0, "doubleOp(\"\" + Double.MAX_VALUE, 1.0)"); + Tester.checkEqual(doubleAssign("" + Double.MAX_VALUE, 1.0), ("" + Double.MAX_VALUE) + 1.0, "doubleOp(\"\" + Double.MAX_VALUE, 1.0)"); + Tester.checkEqual(doubleOp("" + Double.MAX_VALUE, Double.MAX_VALUE), ("" + Double.MAX_VALUE) + Double.MAX_VALUE, "doubleOp(\"\" + Double.MAX_VALUE, Double.MAX_VALUE)"); + Tester.checkEqual(doubleAssign("" + Double.MAX_VALUE, Double.MAX_VALUE), ("" + Double.MAX_VALUE) + Double.MAX_VALUE, "doubleOp(\"\" + Double.MAX_VALUE, Double.MAX_VALUE)"); + Tester.checkEqual(doubleOp("" + Double.MAX_VALUE, Double.POSITIVE_INFINITY), ("" + Double.MAX_VALUE) + Double.POSITIVE_INFINITY, "doubleOp(\"\" + Double.MAX_VALUE, Double.POSITIVE_INFINITY)"); + Tester.checkEqual(doubleAssign("" + Double.MAX_VALUE, Double.POSITIVE_INFINITY), ("" + Double.MAX_VALUE) + Double.POSITIVE_INFINITY, "doubleOp(\"\" + Double.MAX_VALUE, Double.POSITIVE_INFINITY)"); + Tester.checkEqual(doubleOp("" + Double.MAX_VALUE, Double.NaN), ("" + Double.MAX_VALUE) + Double.NaN, "doubleOp(\"\" + Double.MAX_VALUE, Double.NaN)"); + Tester.checkEqual(doubleAssign("" + Double.MAX_VALUE, Double.NaN), ("" + Double.MAX_VALUE) + Double.NaN, "doubleOp(\"\" + Double.MAX_VALUE, Double.NaN)"); + Tester.checkEqual(doubleOp("" + Double.POSITIVE_INFINITY, Double.NEGATIVE_INFINITY), ("" + Double.POSITIVE_INFINITY) + Double.NEGATIVE_INFINITY, "doubleOp(\"\" + Double.POSITIVE_INFINITY, Double.NEGATIVE_INFINITY)"); + Tester.checkEqual(doubleAssign("" + Double.POSITIVE_INFINITY, Double.NEGATIVE_INFINITY), ("" + Double.POSITIVE_INFINITY) + Double.NEGATIVE_INFINITY, "doubleOp(\"\" + Double.POSITIVE_INFINITY, Double.NEGATIVE_INFINITY)"); + Tester.checkEqual(doubleOp("" + Double.POSITIVE_INFINITY, -1.0), ("" + Double.POSITIVE_INFINITY) + -1.0, "doubleOp(\"\" + Double.POSITIVE_INFINITY, -1.0)"); + Tester.checkEqual(doubleAssign("" + Double.POSITIVE_INFINITY, -1.0), ("" + Double.POSITIVE_INFINITY) + -1.0, "doubleOp(\"\" + Double.POSITIVE_INFINITY, -1.0)"); + Tester.checkEqual(doubleOp("" + Double.POSITIVE_INFINITY, -0.0), ("" + Double.POSITIVE_INFINITY) + -0.0, "doubleOp(\"\" + Double.POSITIVE_INFINITY, -0.0)"); + Tester.checkEqual(doubleAssign("" + Double.POSITIVE_INFINITY, -0.0), ("" + Double.POSITIVE_INFINITY) + -0.0, "doubleOp(\"\" + Double.POSITIVE_INFINITY, -0.0)"); + Tester.checkEqual(doubleOp("" + Double.POSITIVE_INFINITY, 0.0), ("" + Double.POSITIVE_INFINITY) + 0.0, "doubleOp(\"\" + Double.POSITIVE_INFINITY, 0.0)"); + Tester.checkEqual(doubleAssign("" + Double.POSITIVE_INFINITY, 0.0), ("" + Double.POSITIVE_INFINITY) + 0.0, "doubleOp(\"\" + Double.POSITIVE_INFINITY, 0.0)"); + Tester.checkEqual(doubleOp("" + Double.POSITIVE_INFINITY, 1.0), ("" + Double.POSITIVE_INFINITY) + 1.0, "doubleOp(\"\" + Double.POSITIVE_INFINITY, 1.0)"); + Tester.checkEqual(doubleAssign("" + Double.POSITIVE_INFINITY, 1.0), ("" + Double.POSITIVE_INFINITY) + 1.0, "doubleOp(\"\" + Double.POSITIVE_INFINITY, 1.0)"); + Tester.checkEqual(doubleOp("" + Double.POSITIVE_INFINITY, Double.MAX_VALUE), ("" + Double.POSITIVE_INFINITY) + Double.MAX_VALUE, "doubleOp(\"\" + Double.POSITIVE_INFINITY, Double.MAX_VALUE)"); + Tester.checkEqual(doubleAssign("" + Double.POSITIVE_INFINITY, Double.MAX_VALUE), ("" + Double.POSITIVE_INFINITY) + Double.MAX_VALUE, "doubleOp(\"\" + Double.POSITIVE_INFINITY, Double.MAX_VALUE)"); + Tester.checkEqual(doubleOp("" + Double.POSITIVE_INFINITY, Double.POSITIVE_INFINITY), ("" + Double.POSITIVE_INFINITY) + Double.POSITIVE_INFINITY, "doubleOp(\"\" + Double.POSITIVE_INFINITY, Double.POSITIVE_INFINITY)"); + Tester.checkEqual(doubleAssign("" + Double.POSITIVE_INFINITY, Double.POSITIVE_INFINITY), ("" + Double.POSITIVE_INFINITY) + Double.POSITIVE_INFINITY, "doubleOp(\"\" + Double.POSITIVE_INFINITY, Double.POSITIVE_INFINITY)"); + Tester.checkEqual(doubleOp("" + Double.POSITIVE_INFINITY, Double.NaN), ("" + Double.POSITIVE_INFINITY) + Double.NaN, "doubleOp(\"\" + Double.POSITIVE_INFINITY, Double.NaN)"); + Tester.checkEqual(doubleAssign("" + Double.POSITIVE_INFINITY, Double.NaN), ("" + Double.POSITIVE_INFINITY) + Double.NaN, "doubleOp(\"\" + Double.POSITIVE_INFINITY, Double.NaN)"); + Tester.checkEqual(doubleOp("" + Double.NaN, Double.NEGATIVE_INFINITY), ("" + Double.NaN) + Double.NEGATIVE_INFINITY, "doubleOp(\"\" + Double.NaN, Double.NEGATIVE_INFINITY)"); + Tester.checkEqual(doubleAssign("" + Double.NaN, Double.NEGATIVE_INFINITY), ("" + Double.NaN) + Double.NEGATIVE_INFINITY, "doubleOp(\"\" + Double.NaN, Double.NEGATIVE_INFINITY)"); + Tester.checkEqual(doubleOp("" + Double.NaN, -1.0), ("" + Double.NaN) + -1.0, "doubleOp(\"\" + Double.NaN, -1.0)"); + Tester.checkEqual(doubleAssign("" + Double.NaN, -1.0), ("" + Double.NaN) + -1.0, "doubleOp(\"\" + Double.NaN, -1.0)"); + Tester.checkEqual(doubleOp("" + Double.NaN, -0.0), ("" + Double.NaN) + -0.0, "doubleOp(\"\" + Double.NaN, -0.0)"); + Tester.checkEqual(doubleAssign("" + Double.NaN, -0.0), ("" + Double.NaN) + -0.0, "doubleOp(\"\" + Double.NaN, -0.0)"); + Tester.checkEqual(doubleOp("" + Double.NaN, 0.0), ("" + Double.NaN) + 0.0, "doubleOp(\"\" + Double.NaN, 0.0)"); + Tester.checkEqual(doubleAssign("" + Double.NaN, 0.0), ("" + Double.NaN) + 0.0, "doubleOp(\"\" + Double.NaN, 0.0)"); + Tester.checkEqual(doubleOp("" + Double.NaN, 1.0), ("" + Double.NaN) + 1.0, "doubleOp(\"\" + Double.NaN, 1.0)"); + Tester.checkEqual(doubleAssign("" + Double.NaN, 1.0), ("" + Double.NaN) + 1.0, "doubleOp(\"\" + Double.NaN, 1.0)"); + Tester.checkEqual(doubleOp("" + Double.NaN, Double.MAX_VALUE), ("" + Double.NaN) + Double.MAX_VALUE, "doubleOp(\"\" + Double.NaN, Double.MAX_VALUE)"); + Tester.checkEqual(doubleAssign("" + Double.NaN, Double.MAX_VALUE), ("" + Double.NaN) + Double.MAX_VALUE, "doubleOp(\"\" + Double.NaN, Double.MAX_VALUE)"); + Tester.checkEqual(doubleOp("" + Double.NaN, Double.POSITIVE_INFINITY), ("" + Double.NaN) + Double.POSITIVE_INFINITY, "doubleOp(\"\" + Double.NaN, Double.POSITIVE_INFINITY)"); + Tester.checkEqual(doubleAssign("" + Double.NaN, Double.POSITIVE_INFINITY), ("" + Double.NaN) + Double.POSITIVE_INFINITY, "doubleOp(\"\" + Double.NaN, Double.POSITIVE_INFINITY)"); + Tester.checkEqual(doubleOp("" + Double.NaN, Double.NaN), ("" + Double.NaN) + Double.NaN, "doubleOp(\"\" + Double.NaN, Double.NaN)"); + Tester.checkEqual(doubleAssign("" + Double.NaN, Double.NaN), ("" + Double.NaN) + Double.NaN, "doubleOp(\"\" + Double.NaN, Double.NaN)"); + } + static void doubleSwitch() { + switch(-1) { + case (((("" + Double.NEGATIVE_INFINITY) + Double.NEGATIVE_INFINITY) == "") ? 0 : 0): + case (((("" + Double.NEGATIVE_INFINITY) + -1.0) == "") ? 1 : 1): + case (((("" + Double.NEGATIVE_INFINITY) + -0.0) == "") ? 2 : 2): + case (((("" + Double.NEGATIVE_INFINITY) + 0.0) == "") ? 3 : 3): + case (((("" + Double.NEGATIVE_INFINITY) + 1.0) == "") ? 4 : 4): + case (((("" + Double.NEGATIVE_INFINITY) + Double.MAX_VALUE) == "") ? 5 : 5): + case (((("" + Double.NEGATIVE_INFINITY) + Double.POSITIVE_INFINITY) == "") ? 6 : 6): + case (((("" + Double.NEGATIVE_INFINITY) + Double.NaN) == "") ? 7 : 7): + case (((("" + -1.0) + Double.NEGATIVE_INFINITY) == "") ? 8 : 8): + case (((("" + -1.0) + -1.0) == "") ? 9 : 9): + case (((("" + -1.0) + -0.0) == "") ? 10 : 10): + case (((("" + -1.0) + 0.0) == "") ? 11 : 11): + case (((("" + -1.0) + 1.0) == "") ? 12 : 12): + case (((("" + -1.0) + Double.MAX_VALUE) == "") ? 13 : 13): + case (((("" + -1.0) + Double.POSITIVE_INFINITY) == "") ? 14 : 14): + case (((("" + -1.0) + Double.NaN) == "") ? 15 : 15): + case (((("" + -0.0) + Double.NEGATIVE_INFINITY) == "") ? 16 : 16): + case (((("" + -0.0) + -1.0) == "") ? 17 : 17): + case (((("" + -0.0) + -0.0) == "") ? 18 : 18): + case (((("" + -0.0) + 0.0) == "") ? 19 : 19): + case (((("" + -0.0) + 1.0) == "") ? 20 : 20): + case (((("" + -0.0) + Double.MAX_VALUE) == "") ? 21 : 21): + case (((("" + -0.0) + Double.POSITIVE_INFINITY) == "") ? 22 : 22): + case (((("" + -0.0) + Double.NaN) == "") ? 23 : 23): + case (((("" + 0.0) + Double.NEGATIVE_INFINITY) == "") ? 24 : 24): + case (((("" + 0.0) + -1.0) == "") ? 25 : 25): + case (((("" + 0.0) + -0.0) == "") ? 26 : 26): + case (((("" + 0.0) + 0.0) == "") ? 27 : 27): + case (((("" + 0.0) + 1.0) == "") ? 28 : 28): + case (((("" + 0.0) + Double.MAX_VALUE) == "") ? 29 : 29): + case (((("" + 0.0) + Double.POSITIVE_INFINITY) == "") ? 30 : 30): + case (((("" + 0.0) + Double.NaN) == "") ? 31 : 31): + case (((("" + 1.0) + Double.NEGATIVE_INFINITY) == "") ? 32 : 32): + case (((("" + 1.0) + -1.0) == "") ? 33 : 33): + case (((("" + 1.0) + -0.0) == "") ? 34 : 34): + case (((("" + 1.0) + 0.0) == "") ? 35 : 35): + case (((("" + 1.0) + 1.0) == "") ? 36 : 36): + case (((("" + 1.0) + Double.MAX_VALUE) == "") ? 37 : 37): + case (((("" + 1.0) + Double.POSITIVE_INFINITY) == "") ? 38 : 38): + case (((("" + 1.0) + Double.NaN) == "") ? 39 : 39): + case (((("" + Double.MAX_VALUE) + Double.NEGATIVE_INFINITY) == "") ? 40 : 40): + case (((("" + Double.MAX_VALUE) + -1.0) == "") ? 41 : 41): + case (((("" + Double.MAX_VALUE) + -0.0) == "") ? 42 : 42): + case (((("" + Double.MAX_VALUE) + 0.0) == "") ? 43 : 43): + case (((("" + Double.MAX_VALUE) + 1.0) == "") ? 44 : 44): + case (((("" + Double.MAX_VALUE) + Double.MAX_VALUE) == "") ? 45 : 45): + case (((("" + Double.MAX_VALUE) + Double.POSITIVE_INFINITY) == "") ? 46 : 46): + case (((("" + Double.MAX_VALUE) + Double.NaN) == "") ? 47 : 47): + case (((("" + Double.POSITIVE_INFINITY) + Double.NEGATIVE_INFINITY) == "") ? 48 : 48): + case (((("" + Double.POSITIVE_INFINITY) + -1.0) == "") ? 49 : 49): + case (((("" + Double.POSITIVE_INFINITY) + -0.0) == "") ? 50 : 50): + case (((("" + Double.POSITIVE_INFINITY) + 0.0) == "") ? 51 : 51): + case (((("" + Double.POSITIVE_INFINITY) + 1.0) == "") ? 52 : 52): + case (((("" + Double.POSITIVE_INFINITY) + Double.MAX_VALUE) == "") ? 53 : 53): + case (((("" + Double.POSITIVE_INFINITY) + Double.POSITIVE_INFINITY) == "") ? 54 : 54): + case (((("" + Double.POSITIVE_INFINITY) + Double.NaN) == "") ? 55 : 55): + case (((("" + Double.NaN) + Double.NEGATIVE_INFINITY) == "") ? 56 : 56): + case (((("" + Double.NaN) + -1.0) == "") ? 57 : 57): + case (((("" + Double.NaN) + -0.0) == "") ? 58 : 58): + case (((("" + Double.NaN) + 0.0) == "") ? 59 : 59): + case (((("" + Double.NaN) + 1.0) == "") ? 60 : 60): + case (((("" + Double.NaN) + Double.MAX_VALUE) == "") ? 61 : 61): + case (((("" + Double.NaN) + Double.POSITIVE_INFINITY) == "") ? 62 : 62): + case (((("" + Double.NaN) + Double.NaN) == "") ? 63 : 63): + default: + } + } + + // -------- + // boolean tests + static String booleanOp(String x, boolean y) { return x + y; } + static String booleanAssign(String x, boolean y) { x += y; return x; } + static void booleanTest() { + Tester.checkEqual(booleanOp("" + true, true), ("" + true) + true, "booleanOp(\"\" + true, true)"); + Tester.checkEqual(booleanAssign("" + true, true), ("" + true) + true, "booleanOp(\"\" + true, true)"); + Tester.checkEqual(booleanOp("" + true, false), ("" + true) + false, "booleanOp(\"\" + true, false)"); + Tester.checkEqual(booleanAssign("" + true, false), ("" + true) + false, "booleanOp(\"\" + true, false)"); + Tester.checkEqual(booleanOp("" + false, true), ("" + false) + true, "booleanOp(\"\" + false, true)"); + Tester.checkEqual(booleanAssign("" + false, true), ("" + false) + true, "booleanOp(\"\" + false, true)"); + Tester.checkEqual(booleanOp("" + false, false), ("" + false) + false, "booleanOp(\"\" + false, false)"); + Tester.checkEqual(booleanAssign("" + false, false), ("" + false) + false, "booleanOp(\"\" + false, false)"); + } + static void booleanSwitch() { + switch(-1) { + case (((("" + true) + true) == "") ? 0 : 0): + case (((("" + true) + false) == "") ? 1 : 1): + case (((("" + false) + true) == "") ? 2 : 2): + case (((("" + false) + false) == "") ? 3 : 3): + default: + } + } + + // -------- + // String tests + static String StringOp(String x, String y) { return x + y; } + static String StringAssign(String x, String y) { x += y; return x; } + static void StringTest() { + Tester.checkEqual(StringOp("" + "hello", "hello"), ("" + "hello") + "hello", "StringOp(\"\" + \"hello\", \"hello\")"); + Tester.checkEqual(StringAssign("" + "hello", "hello"), ("" + "hello") + "hello", "StringOp(\"\" + \"hello\", \"hello\")"); + Tester.checkEqual(StringOp("" + "hello", ""), ("" + "hello") + "", "StringOp(\"\" + \"hello\", \"\")"); + Tester.checkEqual(StringAssign("" + "hello", ""), ("" + "hello") + "", "StringOp(\"\" + \"hello\", \"\")"); + Tester.checkEqual(StringOp("" + "", "hello"), ("" + "") + "hello", "StringOp(\"\" + \"\", \"hello\")"); + Tester.checkEqual(StringAssign("" + "", "hello"), ("" + "") + "hello", "StringOp(\"\" + \"\", \"hello\")"); + Tester.checkEqual(StringOp("" + "", ""), ("" + "") + "", "StringOp(\"\" + \"\", \"\")"); + Tester.checkEqual(StringAssign("" + "", ""), ("" + "") + "", "StringOp(\"\" + \"\", \"\")"); + } + static void StringSwitch() { + switch(-1) { + case (((("" + "hello") + "hello") == "") ? 0 : 0): + case (((("" + "hello") + "") == "") ? 1 : 1): + case (((("" + "") + "hello") == "") ? 2 : 2): + case (((("" + "") + "") == "") ? 3 : 3): + default: + } + } +} + /* + +(define table + '((byte ("Byte.MIN_VALUE" "(byte) -1" "(byte) 0" "(byte) 1" "Byte.MAX_VALUE")) + (short ("Short.MIN_VALUE" "(short) -1" "(short) 0" "(short) 1" "Short.MAX_VALUE") ) + (char ("(char) 0" "(char) 1" "Character.MAX_VALUE") ) + (int ("Integer.MIN_VALUE" "-1" "0" "1" "Integer.MAX_VALUE") ) + (long ("Long.MIN_VALUE" "-1L" "0L" "1L" "Long.MAX_VALUE") ) + (float ("Float.NEGATIVE_INFINITY" "-1.0f" "-0.0f" "0.0f" "Float.MIN_VALUE" "1.0f" "Float.MAX_VALUE" "Float.POSITIVE_INFINITY" "Float.NaN") ) + (double ("Double.NEGATIVE_INFINITY" "-1.0" "-0.0" "0.0" + ;; "Double.MIN_VALUE" NOT CORRECT IN 1.3 + "1.0" "Double.MAX_VALUE" "Double.POSITIVE_INFINITY" "Double.NaN") ) + (boolean (true false) ) + ;;("Object" ("null" "new int[3]")) + ("String" ("\"hello\"" "\"\"")))) + +(define gen + (lambda () + (printf "import org.aspectj.testing.Tester;~n~n") + (printf "public strictfp class BigString {~n") + (printf " public static void main(String[] args) {~n") + (for-each (lambda (elem) + (display (format " ~aTest();~n" (car elem)))) + table) + (printf " }~n") + (display (apply string-append (map tyGen table))) + (printf "}~n"))) + +;; elems == ((exprfun callfun op args) ...) + +(define tyGen + (lambda (ls) + (let ((type (car ls)) + (vals (cadr ls))) + (let ((args (cross vals vals))) + (string-append + (format "~n // --------~n") + (format " // ~a tests~n" type) + (genOpFun type) + (genAssignFun type) + (genTester type args) + (genSwitch type args)))))) + +(define genTester + (lambda (type argss) + (string-append (format " static void ~aTest() {~n" type) + (apply string-append + (map (lambda (args) + (apply genCall type args)) + argss)) + (format " }~n")))) + +(define genSwitch + (lambda (type argss) + (string-append (format " static void ~aSwitch() {~n switch(-1) {~n" type) + (apply string-append + (map (lambda (args num) (genCase type num args)) + argss (iota argss))) + (format " default:~n }~n }~n")))) + +(define genCase + (lambda (type num args) + (format " case (((~a) == \"\") ? ~a : ~a):~n" + (apply exprfun args) + num num))) + +(define exprfun + (lambda (a b) (format "(\"\" + ~a) + ~a" a b))) + +(define genOpFun + (lambda (type) + (format " static String ~aOp(String x, ~a y) { return x + y; }~n" + type type))) + +(define genAssignFun + (lambda (type) + (format " static String ~aAssign(String x, ~a y) { x += y; return x; }~n" + type type))) + +(define genCall + (lambda (type val0 val1) + (string-append + (format " Tester.checkEqual(~aOp(\"\" + ~a, ~a), ~a, \"~aOp(\\\"\\\" + ~a, ~a)\");~n" + type val0 val1 (exprfun val0 val1) type + (escape-quotes val0) (escape-quotes val1)) + (format " Tester.checkEqual(~aAssign(\"\" + ~a, ~a), ~a, \"~aOp(\\\"\\\" + ~a, ~a)\");~n" + type val0 val1 (exprfun val0 val1) type + (escape-quotes val0) (escape-quotes val1))))) + +(define escape-quotes + (lambda (str) + (if (string? str) + (list->string + (let f ((ls (string->list str))) + (if (null? ls) '() + (if (eq? (car ls) #\") + (cons #\\ (cons #\" (f (cdr ls)))) + (cons (car ls) (f (cdr ls))))))) + str))) + +(define cross + (lambda (a b) + (apply append + (map (lambda (x) + (map (lambda (y) + (list x y)) + b)) + a)))) + +(define iota + (lambda (ls) + (let f ((ls ls) (i 0)) + (if (null? ls) '() + (cons i (f (cdr ls) (+ i 1))))))) + +*/ diff --git a/tests/pureJava/BoundaryNums.java b/tests/pureJava/BoundaryNums.java new file mode 100644 index 000000000..10889a6b9 --- /dev/null +++ b/tests/pureJava/BoundaryNums.java @@ -0,0 +1,62 @@ +import org.aspectj.testing.Tester; + +//Boundary base values can be parsed +public class BoundaryNums { + public static void main(String[] args) { + byte minByte = -128; + byte maxByte = 127; + byte minByteHex = -0x80; + byte maxByteHex = 0x7F; + Tester.checkEqual(minByte, Byte.MIN_VALUE); + Tester.checkEqual(maxByte, Byte.MAX_VALUE); + Tester.checkEqual(minByteHex, Byte.MIN_VALUE); + Tester.checkEqual(maxByteHex, Byte.MAX_VALUE); + + short minShort = -32768; + short maxShort = 32767; + short minShortHex = -0x8000; + short maxShortHex = 0x7FFF; + Tester.checkEqual(minShort, Short.MIN_VALUE); + Tester.checkEqual(maxShort, Short.MAX_VALUE); + Tester.checkEqual(minShortHex, Short.MIN_VALUE); + Tester.checkEqual(maxShortHex, Short.MAX_VALUE); + + + char maxChar = 65535; + char maxCharHex = 0xffff; + char maxCharChar = '\uffff'; + Tester.checkEqual(maxChar, Character.MAX_VALUE); + Tester.checkEqual(maxCharHex, Character.MAX_VALUE); + Tester.checkEqual(maxCharChar, Character.MAX_VALUE); + + + int minInt = -2147483648; + int maxInt = 2147483647; + int minIntHex = -0x80000000; + int maxIntHex = 0x7fffffff; + Tester.checkEqual(minInt, Integer.MIN_VALUE); + Tester.checkEqual(maxInt, Integer.MAX_VALUE); + Tester.checkEqual(minIntHex, Integer.MIN_VALUE); + Tester.checkEqual(maxIntHex, Integer.MAX_VALUE); + + + long minLong = -9223372036854775808L; + long maxLong = 9223372036854775807L; + long minLongHex = -0x8000000000000000L; + long maxLongHex = 0x7fffffffffffffffL; + Tester.checkEqual(minLong, Long.MIN_VALUE); + Tester.checkEqual(maxLong, Long.MAX_VALUE); + Tester.checkEqual(minLongHex, Long.MIN_VALUE); + Tester.checkEqual(maxLongHex, Long.MAX_VALUE); + + float minPosFloat = 1.40239846e-45f; + float maxPosFloat = 3.40282347e+38f; + Tester.checkEqual(minPosFloat, Float.MIN_VALUE); + Tester.checkEqual(maxPosFloat, Float.MAX_VALUE); + + double minPosDouble = 4.94065645841246544e-324; + double maxPosDouble = 1.79769313486231570e+308; + Tester.checkEqual(minPosDouble, Double.MIN_VALUE); + Tester.checkEqual(maxPosDouble, Double.MAX_VALUE); + } +} diff --git a/tests/pureJava/Breaks.java b/tests/pureJava/Breaks.java new file mode 100644 index 000000000..cf8729fcf --- /dev/null +++ b/tests/pureJava/Breaks.java @@ -0,0 +1,39 @@ +import org.aspectj.testing.Tester; + +public class Breaks { + static boolean sawTrue, sawFalse; + + public static void main(String[] args) { + m(true); + Tester.check(sawTrue, "true"); + Tester.check(!sawFalse, "!false"); + + } + + static void m(boolean t) { + BLOCK: { + if (t) { + sawTrue = true; + System.out.println("true"); + break BLOCK; + } else { + sawFalse = true; + System.out.println("false"); + } + } + } + + static int m1(boolean t) { + loop: while (true) { + if (t) break loop; + } + return 1; + } + + static int m2(boolean t) { + while (true) { + if (t) break; + } + return 1; + } +} diff --git a/tests/pureJava/CaseClauses.java b/tests/pureJava/CaseClauses.java new file mode 100644 index 000000000..d164ff5a0 --- /dev/null +++ b/tests/pureJava/CaseClauses.java @@ -0,0 +1,278 @@ +import org.aspectj.testing.Tester; +public class CaseClauses { + public static void main(String[] args) { + new CaseClauses().realMain(args); + } + public void realMain(String[] args) { + int SIZE = 0377; + boolean[] bs = new boolean[SIZE]; + for (int i = 0; i < bs.length; i++) { + bs[i] = false; + } + for (int i = 0; i < SIZE; i++) { + switch((char)i) { + case '\0': bs[0] = true; break; + case '\1': bs[1] = true; break; + case '\2': bs[2] = true; break; + case '\3': bs[3] = true; break; + case '\4': bs[4] = true; break; + case '\5': bs[5] = true; break; + case '\6': bs[6] = true; break; + case '\7': bs[7] = true; break; + case '\10': bs[8] = true; break; + case '\11': bs[9] = true; break; + case '\12': bs[10] = true; break; + case '\13': bs[11] = true; break; + case '\14': bs[12] = true; break; + case '\15': bs[13] = true; break; + case '\16': bs[14] = true; break; + case '\17': bs[15] = true; break; + case '\20': bs[16] = true; break; + case '\21': bs[17] = true; break; + case '\22': bs[18] = true; break; + case '\23': bs[19] = true; break; + case '\24': bs[20] = true; break; + case '\25': bs[21] = true; break; + case '\26': bs[22] = true; break; + case '\27': bs[23] = true; break; + case '\30': bs[24] = true; break; + case '\31': bs[25] = true; break; + case '\32': bs[26] = true; break; + case '\33': bs[27] = true; break; + case '\34': bs[28] = true; break; + case '\35': bs[29] = true; break; + case '\36': bs[30] = true; break; + case '\37': bs[31] = true; break; + case '\40': bs[32] = true; break; + case '\41': bs[33] = true; break; + case '\42': bs[34] = true; break; + case '\43': bs[35] = true; break; + case '\44': bs[36] = true; break; + case '\45': bs[37] = true; break; + case '\46': bs[38] = true; break; + case '\47': bs[39] = true; break; + case '\50': bs[40] = true; break; + case '\51': bs[41] = true; break; + case '\52': bs[42] = true; break; + case '\53': bs[43] = true; break; + case '\54': bs[44] = true; break; + case '\55': bs[45] = true; break; + case '\56': bs[46] = true; break; + case '\57': bs[47] = true; break; + case '\60': bs[48] = true; break; + case '\61': bs[49] = true; break; + case '\62': bs[50] = true; break; + case '\63': bs[51] = true; break; + case '\64': bs[52] = true; break; + case '\65': bs[53] = true; break; + case '\66': bs[54] = true; break; + case '\67': bs[55] = true; break; + case '\70': bs[56] = true; break; + case '\71': bs[57] = true; break; + case '\72': bs[58] = true; break; + case '\73': bs[59] = true; break; + case '\74': bs[60] = true; break; + case '\75': bs[61] = true; break; + case '\76': bs[62] = true; break; + case '\77': bs[63] = true; break; + case '\100': bs[64] = true; break; + case '\101': bs[65] = true; break; + case '\102': bs[66] = true; break; + case '\103': bs[67] = true; break; + case '\104': bs[68] = true; break; + case '\105': bs[69] = true; break; + case '\106': bs[70] = true; break; + case '\107': bs[71] = true; break; + case '\110': bs[72] = true; break; + case '\111': bs[73] = true; break; + case '\112': bs[74] = true; break; + case '\113': bs[75] = true; break; + case '\114': bs[76] = true; break; + case '\115': bs[77] = true; break; + case '\116': bs[78] = true; break; + case '\117': bs[79] = true; break; + case '\120': bs[80] = true; break; + case '\121': bs[81] = true; break; + case '\122': bs[82] = true; break; + case '\123': bs[83] = true; break; + case '\124': bs[84] = true; break; + case '\125': bs[85] = true; break; + case '\126': bs[86] = true; break; + case '\127': bs[87] = true; break; + case '\130': bs[88] = true; break; + case '\131': bs[89] = true; break; + case '\132': bs[90] = true; break; + case '\133': bs[91] = true; break; + case '\134': bs[92] = true; break; + case '\135': bs[93] = true; break; + case '\136': bs[94] = true; break; + case '\137': bs[95] = true; break; + case '\140': bs[96] = true; break; + case '\141': bs[97] = true; break; + case '\142': bs[98] = true; break; + case '\143': bs[99] = true; break; + case '\144': bs[100] = true; break; + case '\145': bs[101] = true; break; + case '\146': bs[102] = true; break; + case '\147': bs[103] = true; break; + case '\150': bs[104] = true; break; + case '\151': bs[105] = true; break; + case '\152': bs[106] = true; break; + case '\153': bs[107] = true; break; + case '\154': bs[108] = true; break; + case '\155': bs[109] = true; break; + case '\156': bs[110] = true; break; + case '\157': bs[111] = true; break; + case '\160': bs[112] = true; break; + case '\161': bs[113] = true; break; + case '\162': bs[114] = true; break; + case '\163': bs[115] = true; break; + case '\164': bs[116] = true; break; + case '\165': bs[117] = true; break; + case '\166': bs[118] = true; break; + case '\167': bs[119] = true; break; + case '\170': bs[120] = true; break; + case '\171': bs[121] = true; break; + case '\172': bs[122] = true; break; + case '\173': bs[123] = true; break; + case '\174': bs[124] = true; break; + case '\175': bs[125] = true; break; + case '\176': bs[126] = true; break; + case '\177': bs[127] = true; break; + case '\200': bs[128] = true; break; + case '\201': bs[129] = true; break; + case '\202': bs[130] = true; break; + case '\203': bs[131] = true; break; + case '\204': bs[132] = true; break; + case '\205': bs[133] = true; break; + case '\206': bs[134] = true; break; + case '\207': bs[135] = true; break; + case '\210': bs[136] = true; break; + case '\211': bs[137] = true; break; + case '\212': bs[138] = true; break; + case '\213': bs[139] = true; break; + case '\214': bs[140] = true; break; + case '\215': bs[141] = true; break; + case '\216': bs[142] = true; break; + case '\217': bs[143] = true; break; + case '\220': bs[144] = true; break; + case '\221': bs[145] = true; break; + case '\222': bs[146] = true; break; + case '\223': bs[147] = true; break; + case '\224': bs[148] = true; break; + case '\225': bs[149] = true; break; + case '\226': bs[150] = true; break; + case '\227': bs[151] = true; break; + case '\230': bs[152] = true; break; + case '\231': bs[153] = true; break; + case '\232': bs[154] = true; break; + case '\233': bs[155] = true; break; + case '\234': bs[156] = true; break; + case '\235': bs[157] = true; break; + case '\236': bs[158] = true; break; + case '\237': bs[159] = true; break; + case '\240': bs[160] = true; break; + case '\241': bs[161] = true; break; + case '\242': bs[162] = true; break; + case '\243': bs[163] = true; break; + case '\244': bs[164] = true; break; + case '\245': bs[165] = true; break; + case '\246': bs[166] = true; break; + case '\247': bs[167] = true; break; + case '\250': bs[168] = true; break; + case '\251': bs[169] = true; break; + case '\252': bs[170] = true; break; + case '\253': bs[171] = true; break; + case '\254': bs[172] = true; break; + case '\255': bs[173] = true; break; + case '\256': bs[174] = true; break; + case '\257': bs[175] = true; break; + case '\260': bs[176] = true; break; + case '\261': bs[177] = true; break; + case '\262': bs[178] = true; break; + case '\263': bs[179] = true; break; + case '\264': bs[180] = true; break; + case '\265': bs[181] = true; break; + case '\266': bs[182] = true; break; + case '\267': bs[183] = true; break; + case '\270': bs[184] = true; break; + case '\271': bs[185] = true; break; + case '\272': bs[186] = true; break; + case '\273': bs[187] = true; break; + case '\274': bs[188] = true; break; + case '\275': bs[189] = true; break; + case '\276': bs[190] = true; break; + case '\277': bs[191] = true; break; + case '\300': bs[192] = true; break; + case '\301': bs[193] = true; break; + case '\302': bs[194] = true; break; + case '\303': bs[195] = true; break; + case '\304': bs[196] = true; break; + case '\305': bs[197] = true; break; + case '\306': bs[198] = true; break; + case '\307': bs[199] = true; break; + case '\310': bs[200] = true; break; + case '\311': bs[201] = true; break; + case '\312': bs[202] = true; break; + case '\313': bs[203] = true; break; + case '\314': bs[204] = true; break; + case '\315': bs[205] = true; break; + case '\316': bs[206] = true; break; + case '\317': bs[207] = true; break; + case '\320': bs[208] = true; break; + case '\321': bs[209] = true; break; + case '\322': bs[210] = true; break; + case '\323': bs[211] = true; break; + case '\324': bs[212] = true; break; + case '\325': bs[213] = true; break; + case '\326': bs[214] = true; break; + case '\327': bs[215] = true; break; + case '\330': bs[216] = true; break; + case '\331': bs[217] = true; break; + case '\332': bs[218] = true; break; + case '\333': bs[219] = true; break; + case '\334': bs[220] = true; break; + case '\335': bs[221] = true; break; + case '\336': bs[222] = true; break; + case '\337': bs[223] = true; break; + case '\340': bs[224] = true; break; + case '\341': bs[225] = true; break; + case '\342': bs[226] = true; break; + case '\343': bs[227] = true; break; + case '\344': bs[228] = true; break; + case '\345': bs[229] = true; break; + case '\346': bs[230] = true; break; + case '\347': bs[231] = true; break; + case '\350': bs[232] = true; break; + case '\351': bs[233] = true; break; + case '\352': bs[234] = true; break; + case '\353': bs[235] = true; break; + case '\354': bs[236] = true; break; + case '\355': bs[237] = true; break; + case '\356': bs[238] = true; break; + case '\357': bs[239] = true; break; + case '\360': bs[240] = true; break; + case '\361': bs[241] = true; break; + case '\362': bs[242] = true; break; + case '\363': bs[243] = true; break; + case '\364': bs[244] = true; break; + case '\365': bs[245] = true; break; + case '\366': bs[246] = true; break; + case '\367': bs[247] = true; break; + case '\370': bs[248] = true; break; + case '\371': bs[249] = true; break; + case '\372': bs[250] = true; break; + case '\373': bs[251] = true; break; + case '\374': bs[252] = true; break; + case '\375': bs[253] = true; break; + case '\376': bs[254] = true; break; + case '\377': bs[255] = true; break; + default: Tester.check(false, "should be here:" + i); + } + } + + for (int i = 0; i < bs.length; i++) { + Tester.check(bs[i], "bs["+i+"] wasn't caught --> '\\"+Integer.toOctalString(i)+"'"); + } + } +} diff --git a/tests/pureJava/CastAndBinary.java b/tests/pureJava/CastAndBinary.java new file mode 100644 index 000000000..5c489137a --- /dev/null +++ b/tests/pureJava/CastAndBinary.java @@ -0,0 +1,5 @@ +public class CastAndBinary { + public static void main(String[] args) { + System.out.println((int)3 == 5); + } +} diff --git a/tests/pureJava/CastStringToObject.java b/tests/pureJava/CastStringToObject.java new file mode 100644 index 000000000..32bda041a --- /dev/null +++ b/tests/pureJava/CastStringToObject.java @@ -0,0 +1,5 @@ +class CastStringToObject { + public static void main(String[] args) { + Object o = (Object)"hello"; + } +} diff --git a/tests/pureJava/CastVsParen.java b/tests/pureJava/CastVsParen.java new file mode 100644 index 000000000..0e18b9171 --- /dev/null +++ b/tests/pureJava/CastVsParen.java @@ -0,0 +1,13 @@ +import org.aspectj.testing.Tester; + +public class CastVsParen { + public static void main(String[] args) { + int N = 1; + boolean T = true; + + int i = (N); + i = ((N)); + + i = (T) ? N : 2; + } +} diff --git a/tests/pureJava/CastingFoldedValues.java b/tests/pureJava/CastingFoldedValues.java new file mode 100644 index 000000000..ad77586b3 --- /dev/null +++ b/tests/pureJava/CastingFoldedValues.java @@ -0,0 +1,15 @@ +import org.aspectj.testing.Tester; + +public class CastingFoldedValues { + static final char i = 'c'; + + static boolean foundChar = false; + + static void foo(char c) { foundChar = true; } + static void foo(int c) { } + + public static void main(String[] args) { + foo(i); + Tester.check(foundChar, "forgot to cast folded char down to char type"); + } +} diff --git a/tests/pureJava/Chars.java b/tests/pureJava/Chars.java new file mode 100644 index 000000000..6655ecf59 --- /dev/null +++ b/tests/pureJava/Chars.java @@ -0,0 +1,46 @@ +import org.aspectj.testing.Tester; +public class Chars { + public static void main(String[] args) { + new Chars().realMain(args); + } + public void realMain(String[] args) { + char[] cs = new char[] { + '\0','\1','\2','\3','\4','\5','\6','\7', + '\10','\11','\12','\13','\14','\15','\16','\17', + '\20','\21','\22','\23','\24','\25','\26','\27', + '\30','\31','\32','\33','\34','\35','\36','\37', + '\40','\41','\42','\43','\44','\45','\46','\47', + '\50','\51','\52','\53','\54','\55','\56','\57', + '\60','\61','\62','\63','\64','\65','\66','\67', + '\70','\71','\72','\73','\74','\75','\76','\77', + '\100','\101','\102','\103','\104','\105','\106','\107', + '\110','\111','\112','\113','\114','\115','\116','\117', + '\120','\121','\122','\123','\124','\125','\126','\127', + '\130','\131','\132','\133','\134','\135','\136','\137', + '\140','\141','\142','\143','\144','\145','\146','\147', + '\150','\151','\152','\153','\154','\155','\156','\157', + '\160','\161','\162','\163','\164','\165','\166','\167', + '\170','\171','\172','\173','\174','\175','\176','\177', + '\200','\201','\202','\203','\204','\205','\206','\207', + '\210','\211','\212','\213','\214','\215','\216','\217', + '\220','\221','\222','\223','\224','\225','\226','\227', + '\230','\231','\232','\233','\234','\235','\236','\237', + '\240','\241','\242','\243','\244','\245','\246','\247', + '\250','\251','\252','\253','\254','\255','\256','\257', + '\260','\261','\262','\263','\264','\265','\266','\267', + '\270','\271','\272','\273','\274','\275','\276','\277', + '\300','\301','\302','\303','\304','\305','\306','\307', + '\310','\311','\312','\313','\314','\315','\316','\317', + '\320','\321','\322','\323','\324','\325','\326','\327', + '\330','\331','\332','\333','\334','\335','\336','\337', + '\340','\341','\342','\343','\344','\345','\346','\347', + '\350','\351','\352','\353','\354','\355','\356','\357', + '\360','\361','\362','\363','\364','\365','\366','\367', + '\370','\371','\372','\373','\374','\375','\376','\377', + }; + + for (int i = 0; i < cs.length; i++) { + Tester.check((int)cs[i]==i, i + "!='\\"+Integer.toOctalString(i)+"'"); + } + } +} diff --git a/tests/pureJava/CharsUnicode.java b/tests/pureJava/CharsUnicode.java new file mode 100644 index 000000000..bdb6950e0 --- /dev/null +++ b/tests/pureJava/CharsUnicode.java @@ -0,0 +1,11781 @@ +import org.aspectj.testing.Tester; +public class CharsUnicode{ + static void f0() { + char[] cs = new char[] { + '\u0000','\uu0001','\uuuu0002','\uuuuu0003','\uuuuuu0004','\uuuuuuu0005','\u0006', + '\u0007','\u0008','\u0009','\n','\u000b','\f','\r', + '\u000e','\u000f','\u0010','\u0011','\u0012','\u0013','\u0014', + '\u0015','\u0016','\u0017','\u0018','\u0019','\u001a','\u001b', + '\u001c','\u001d','\u001e','\u001f','\u0020','\u0021','\u0022', + '\u0023','\u0024','\u0025','\u0026','\'','\u0028','\u0029', + '\u002a','\u002b','\u002c','\u002d','\u002e','\u002f','\u0030', + '\u0031','\u0032','\u0033','\u0034','\u0035','\u0036','\u0037', + '\u0038','\u0039','\u003a','\u003b','\u003c','\u003d','\u003e', + '\u003f','\u0040','\u0041','\u0042','\u0043','\u0044','\u0045', + '\u0046','\u0047','\u0048','\u0049','\u004a','\u004b','\u004c', + '\u004d','\u004e','\u004f','\u0050','\u0051','\u0052','\u0053', + '\u0054','\u0055','\u0056','\u0057','\u0058','\u0059','\u005a', + '\u005b','\\','\u005d','\u005e','\u005f','\u0060','\u0061', + '\u0062','\u0063','\u0064','\u0065','\u0066','\u0067','\u0068', + '\u0069','\u006a','\u006b','\u006c','\u006d','\u006e','\u006f', + '\u0070','\u0071','\u0072','\u0073','\u0074','\u0075','\u0076', + '\u0077','\u0078','\u0079','\u007a','\u007b','\u007c','\u007d', + '\u007e','\u007f','\u0080','\u0081','\u0082','\u0083','\u0084', + '\u0085','\u0086','\u0087','\u0088','\u0089','\u008a','\u008b', + '\u008c','\u008d','\u008e','\u008f','\u0090','\u0091','\u0092', + '\u0093','\u0094','\u0095','\u0096','\u0097','\u0098','\u0099', + '\u009a','\u009b','\u009c','\u009d','\u009e','\u009f','\u00a0', + '\u00a1','\u00a2','\u00a3','\u00a4','\u00a5','\u00a6','\u00a7', + '\u00a8','\u00a9','\u00aa','\u00ab','\u00ac','\u00ad','\u00ae', + '\u00af','\u00b0','\u00b1','\u00b2','\u00b3','\u00b4','\u00b5', + '\u00b6','\u00b7','\u00b8','\u00b9','\u00ba','\u00bb','\u00bc', + '\u00bd','\u00be','\u00bf','\u00c0','\u00c1','\u00c2','\u00c3', + '\u00c4','\u00c5','\u00c6','\u00c7','\u00c8','\u00c9','\u00ca', + '\u00cb','\u00cc','\u00cd','\u00ce','\u00cf','\u00d0','\u00d1', + '\u00d2','\u00d3','\u00d4','\u00d5','\u00d6','\u00d7','\u00d8', + '\u00d9','\u00da','\u00db','\u00dc','\u00dd','\u00de','\u00df', + '\u00e0','\u00e1','\u00e2','\u00e3','\u00e4','\u00e5','\u00e6', + '\u00e7','\u00e8','\u00e9','\u00ea','\u00eb','\u00ec','\u00ed', + '\u00ee','\u00ef','\u00f0','\u00f1','\u00f2','\u00f3','\u00f4', + '\u00f5','\u00f6','\u00f7','\u00f8','\u00f9','\u00fa','\u00fb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+0; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void f100() { + char[] cs = new char[] { + '\u0100','\u0101','\u0102','\u0103','\u0104','\u0105','\u0106', + '\u0107','\u0108','\u0109','\u010a','\u010b','\u010c','\u010d', + '\u010e','\u010f','\u0110','\u0111','\u0112','\u0113','\u0114', + '\u0115','\u0116','\u0117','\u0118','\u0119','\u011a','\u011b', + '\u011c','\u011d','\u011e','\u011f','\u0120','\u0121','\u0122', + '\u0123','\u0124','\u0125','\u0126','\u0127','\u0128','\u0129', + '\u012a','\u012b','\u012c','\u012d','\u012e','\u012f','\u0130', + '\u0131','\u0132','\u0133','\u0134','\u0135','\u0136','\u0137', + '\u0138','\u0139','\u013a','\u013b','\u013c','\u013d','\u013e', + '\u013f','\u0140','\u0141','\u0142','\u0143','\u0144','\u0145', + '\u0146','\u0147','\u0148','\u0149','\u014a','\u014b','\u014c', + '\u014d','\u014e','\u014f','\u0150','\u0151','\u0152','\u0153', + '\u0154','\u0155','\u0156','\u0157','\u0158','\u0159','\u015a', + '\u015b','\u015c','\u015d','\u015e','\u015f','\u0160','\u0161', + '\u0162','\u0163','\u0164','\u0165','\u0166','\u0167','\u0168', + '\u0169','\u016a','\u016b','\u016c','\u016d','\u016e','\u016f', + '\u0170','\u0171','\u0172','\u0173','\u0174','\u0175','\u0176', + '\u0177','\u0178','\u0179','\u017a','\u017b','\u017c','\u017d', + '\u017e','\u017f','\u0180','\u0181','\u0182','\u0183','\u0184', + '\u0185','\u0186','\u0187','\u0188','\u0189','\u018a','\u018b', + '\u018c','\u018d','\u018e','\u018f','\u0190','\u0191','\u0192', + '\u0193','\u0194','\u0195','\u0196','\u0197','\u0198','\u0199', + '\u019a','\u019b','\u019c','\u019d','\u019e','\u019f','\u01a0', + '\u01a1','\u01a2','\u01a3','\u01a4','\u01a5','\u01a6','\u01a7', + '\u01a8','\u01a9','\u01aa','\u01ab','\u01ac','\u01ad','\u01ae', + '\u01af','\u01b0','\u01b1','\u01b2','\u01b3','\u01b4','\u01b5', + '\u01b6','\u01b7','\u01b8','\u01b9','\u01ba','\u01bb','\u01bc', + '\u01bd','\u01be','\u01bf','\u01c0','\u01c1','\u01c2','\u01c3', + '\u01c4','\u01c5','\u01c6','\u01c7','\u01c8','\u01c9','\u01ca', + '\u01cb','\u01cc','\u01cd','\u01ce','\u01cf','\u01d0','\u01d1', + '\u01d2','\u01d3','\u01d4','\u01d5','\u01d6','\u01d7','\u01d8', + '\u01d9','\u01da','\u01db','\u01dc','\u01dd','\u01de','\u01df', + '\u01e0','\u01e1','\u01e2','\u01e3','\u01e4','\u01e5','\u01e6', + '\u01e7','\u01e8','\u01e9','\u01ea','\u01eb','\u01ec','\u01ed', + '\u01ee','\u01ef','\u01f0','\u01f1','\u01f2','\u01f3','\u01f4', + '\u01f5','\u01f6','\u01f7','\u01f8','\u01f9','\u01fa','\u01fb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+256; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void f200() { + char[] cs = new char[] { + '\u0200','\u0201','\u0202','\u0203','\u0204','\u0205','\u0206', + '\u0207','\u0208','\u0209','\u020a','\u020b','\u020c','\u020d', + '\u020e','\u020f','\u0210','\u0211','\u0212','\u0213','\u0214', + '\u0215','\u0216','\u0217','\u0218','\u0219','\u021a','\u021b', + '\u021c','\u021d','\u021e','\u021f','\u0220','\u0221','\u0222', + '\u0223','\u0224','\u0225','\u0226','\u0227','\u0228','\u0229', + '\u022a','\u022b','\u022c','\u022d','\u022e','\u022f','\u0230', + '\u0231','\u0232','\u0233','\u0234','\u0235','\u0236','\u0237', + '\u0238','\u0239','\u023a','\u023b','\u023c','\u023d','\u023e', + '\u023f','\u0240','\u0241','\u0242','\u0243','\u0244','\u0245', + '\u0246','\u0247','\u0248','\u0249','\u024a','\u024b','\u024c', + '\u024d','\u024e','\u024f','\u0250','\u0251','\u0252','\u0253', + '\u0254','\u0255','\u0256','\u0257','\u0258','\u0259','\u025a', + '\u025b','\u025c','\u025d','\u025e','\u025f','\u0260','\u0261', + '\u0262','\u0263','\u0264','\u0265','\u0266','\u0267','\u0268', + '\u0269','\u026a','\u026b','\u026c','\u026d','\u026e','\u026f', + '\u0270','\u0271','\u0272','\u0273','\u0274','\u0275','\u0276', + '\u0277','\u0278','\u0279','\u027a','\u027b','\u027c','\u027d', + '\u027e','\u027f','\u0280','\u0281','\u0282','\u0283','\u0284', + '\u0285','\u0286','\u0287','\u0288','\u0289','\u028a','\u028b', + '\u028c','\u028d','\u028e','\u028f','\u0290','\u0291','\u0292', + '\u0293','\u0294','\u0295','\u0296','\u0297','\u0298','\u0299', + '\u029a','\u029b','\u029c','\u029d','\u029e','\u029f','\u02a0', + '\u02a1','\u02a2','\u02a3','\u02a4','\u02a5','\u02a6','\u02a7', + '\u02a8','\u02a9','\u02aa','\u02ab','\u02ac','\u02ad','\u02ae', + '\u02af','\u02b0','\u02b1','\u02b2','\u02b3','\u02b4','\u02b5', + '\u02b6','\u02b7','\u02b8','\u02b9','\u02ba','\u02bb','\u02bc', + '\u02bd','\u02be','\u02bf','\u02c0','\u02c1','\u02c2','\u02c3', + '\u02c4','\u02c5','\u02c6','\u02c7','\u02c8','\u02c9','\u02ca', + '\u02cb','\u02cc','\u02cd','\u02ce','\u02cf','\u02d0','\u02d1', + '\u02d2','\u02d3','\u02d4','\u02d5','\u02d6','\u02d7','\u02d8', + '\u02d9','\u02da','\u02db','\u02dc','\u02dd','\u02de','\u02df', + '\u02e0','\u02e1','\u02e2','\u02e3','\u02e4','\u02e5','\u02e6', + '\u02e7','\u02e8','\u02e9','\u02ea','\u02eb','\u02ec','\u02ed', + '\u02ee','\u02ef','\u02f0','\u02f1','\u02f2','\u02f3','\u02f4', + '\u02f5','\u02f6','\u02f7','\u02f8','\u02f9','\u02fa','\u02fb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+512; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void f300() { + char[] cs = new char[] { + '\u0300','\u0301','\u0302','\u0303','\u0304','\u0305','\u0306', + '\u0307','\u0308','\u0309','\u030a','\u030b','\u030c','\u030d', + '\u030e','\u030f','\u0310','\u0311','\u0312','\u0313','\u0314', + '\u0315','\u0316','\u0317','\u0318','\u0319','\u031a','\u031b', + '\u031c','\u031d','\u031e','\u031f','\u0320','\u0321','\u0322', + '\u0323','\u0324','\u0325','\u0326','\u0327','\u0328','\u0329', + '\u032a','\u032b','\u032c','\u032d','\u032e','\u032f','\u0330', + '\u0331','\u0332','\u0333','\u0334','\u0335','\u0336','\u0337', + '\u0338','\u0339','\u033a','\u033b','\u033c','\u033d','\u033e', + '\u033f','\u0340','\u0341','\u0342','\u0343','\u0344','\u0345', + '\u0346','\u0347','\u0348','\u0349','\u034a','\u034b','\u034c', + '\u034d','\u034e','\u034f','\u0350','\u0351','\u0352','\u0353', + '\u0354','\u0355','\u0356','\u0357','\u0358','\u0359','\u035a', + '\u035b','\u035c','\u035d','\u035e','\u035f','\u0360','\u0361', + '\u0362','\u0363','\u0364','\u0365','\u0366','\u0367','\u0368', + '\u0369','\u036a','\u036b','\u036c','\u036d','\u036e','\u036f', + '\u0370','\u0371','\u0372','\u0373','\u0374','\u0375','\u0376', + '\u0377','\u0378','\u0379','\u037a','\u037b','\u037c','\u037d', + '\u037e','\u037f','\u0380','\u0381','\u0382','\u0383','\u0384', + '\u0385','\u0386','\u0387','\u0388','\u0389','\u038a','\u038b', + '\u038c','\u038d','\u038e','\u038f','\u0390','\u0391','\u0392', + '\u0393','\u0394','\u0395','\u0396','\u0397','\u0398','\u0399', + '\u039a','\u039b','\u039c','\u039d','\u039e','\u039f','\u03a0', + '\u03a1','\u03a2','\u03a3','\u03a4','\u03a5','\u03a6','\u03a7', + '\u03a8','\u03a9','\u03aa','\u03ab','\u03ac','\u03ad','\u03ae', + '\u03af','\u03b0','\u03b1','\u03b2','\u03b3','\u03b4','\u03b5', + '\u03b6','\u03b7','\u03b8','\u03b9','\u03ba','\u03bb','\u03bc', + '\u03bd','\u03be','\u03bf','\u03c0','\u03c1','\u03c2','\u03c3', + '\u03c4','\u03c5','\u03c6','\u03c7','\u03c8','\u03c9','\u03ca', + '\u03cb','\u03cc','\u03cd','\u03ce','\u03cf','\u03d0','\u03d1', + '\u03d2','\u03d3','\u03d4','\u03d5','\u03d6','\u03d7','\u03d8', + '\u03d9','\u03da','\u03db','\u03dc','\u03dd','\u03de','\u03df', + '\u03e0','\u03e1','\u03e2','\u03e3','\u03e4','\u03e5','\u03e6', + '\u03e7','\u03e8','\u03e9','\u03ea','\u03eb','\u03ec','\u03ed', + '\u03ee','\u03ef','\u03f0','\u03f1','\u03f2','\u03f3','\u03f4', + '\u03f5','\u03f6','\u03f7','\u03f8','\u03f9','\u03fa','\u03fb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+768; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void f400() { + char[] cs = new char[] { + '\u0400','\u0401','\u0402','\u0403','\u0404','\u0405','\u0406', + '\u0407','\u0408','\u0409','\u040a','\u040b','\u040c','\u040d', + '\u040e','\u040f','\u0410','\u0411','\u0412','\u0413','\u0414', + '\u0415','\u0416','\u0417','\u0418','\u0419','\u041a','\u041b', + '\u041c','\u041d','\u041e','\u041f','\u0420','\u0421','\u0422', + '\u0423','\u0424','\u0425','\u0426','\u0427','\u0428','\u0429', + '\u042a','\u042b','\u042c','\u042d','\u042e','\u042f','\u0430', + '\u0431','\u0432','\u0433','\u0434','\u0435','\u0436','\u0437', + '\u0438','\u0439','\u043a','\u043b','\u043c','\u043d','\u043e', + '\u043f','\u0440','\u0441','\u0442','\u0443','\u0444','\u0445', + '\u0446','\u0447','\u0448','\u0449','\u044a','\u044b','\u044c', + '\u044d','\u044e','\u044f','\u0450','\u0451','\u0452','\u0453', + '\u0454','\u0455','\u0456','\u0457','\u0458','\u0459','\u045a', + '\u045b','\u045c','\u045d','\u045e','\u045f','\u0460','\u0461', + '\u0462','\u0463','\u0464','\u0465','\u0466','\u0467','\u0468', + '\u0469','\u046a','\u046b','\u046c','\u046d','\u046e','\u046f', + '\u0470','\u0471','\u0472','\u0473','\u0474','\u0475','\u0476', + '\u0477','\u0478','\u0479','\u047a','\u047b','\u047c','\u047d', + '\u047e','\u047f','\u0480','\u0481','\u0482','\u0483','\u0484', + '\u0485','\u0486','\u0487','\u0488','\u0489','\u048a','\u048b', + '\u048c','\u048d','\u048e','\u048f','\u0490','\u0491','\u0492', + '\u0493','\u0494','\u0495','\u0496','\u0497','\u0498','\u0499', + '\u049a','\u049b','\u049c','\u049d','\u049e','\u049f','\u04a0', + '\u04a1','\u04a2','\u04a3','\u04a4','\u04a5','\u04a6','\u04a7', + '\u04a8','\u04a9','\u04aa','\u04ab','\u04ac','\u04ad','\u04ae', + '\u04af','\u04b0','\u04b1','\u04b2','\u04b3','\u04b4','\u04b5', + '\u04b6','\u04b7','\u04b8','\u04b9','\u04ba','\u04bb','\u04bc', + '\u04bd','\u04be','\u04bf','\u04c0','\u04c1','\u04c2','\u04c3', + '\u04c4','\u04c5','\u04c6','\u04c7','\u04c8','\u04c9','\u04ca', + '\u04cb','\u04cc','\u04cd','\u04ce','\u04cf','\u04d0','\u04d1', + '\u04d2','\u04d3','\u04d4','\u04d5','\u04d6','\u04d7','\u04d8', + '\u04d9','\u04da','\u04db','\u04dc','\u04dd','\u04de','\u04df', + '\u04e0','\u04e1','\u04e2','\u04e3','\u04e4','\u04e5','\u04e6', + '\u04e7','\u04e8','\u04e9','\u04ea','\u04eb','\u04ec','\u04ed', + '\u04ee','\u04ef','\u04f0','\u04f1','\u04f2','\u04f3','\u04f4', + '\u04f5','\u04f6','\u04f7','\u04f8','\u04f9','\u04fa','\u04fb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+1024; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void f500() { + char[] cs = new char[] { + '\u0500','\u0501','\u0502','\u0503','\u0504','\u0505','\u0506', + '\u0507','\u0508','\u0509','\u050a','\u050b','\u050c','\u050d', + '\u050e','\u050f','\u0510','\u0511','\u0512','\u0513','\u0514', + '\u0515','\u0516','\u0517','\u0518','\u0519','\u051a','\u051b', + '\u051c','\u051d','\u051e','\u051f','\u0520','\u0521','\u0522', + '\u0523','\u0524','\u0525','\u0526','\u0527','\u0528','\u0529', + '\u052a','\u052b','\u052c','\u052d','\u052e','\u052f','\u0530', + '\u0531','\u0532','\u0533','\u0534','\u0535','\u0536','\u0537', + '\u0538','\u0539','\u053a','\u053b','\u053c','\u053d','\u053e', + '\u053f','\u0540','\u0541','\u0542','\u0543','\u0544','\u0545', + '\u0546','\u0547','\u0548','\u0549','\u054a','\u054b','\u054c', + '\u054d','\u054e','\u054f','\u0550','\u0551','\u0552','\u0553', + '\u0554','\u0555','\u0556','\u0557','\u0558','\u0559','\u055a', + '\u055b','\u055c','\u055d','\u055e','\u055f','\u0560','\u0561', + '\u0562','\u0563','\u0564','\u0565','\u0566','\u0567','\u0568', + '\u0569','\u056a','\u056b','\u056c','\u056d','\u056e','\u056f', + '\u0570','\u0571','\u0572','\u0573','\u0574','\u0575','\u0576', + '\u0577','\u0578','\u0579','\u057a','\u057b','\u057c','\u057d', + '\u057e','\u057f','\u0580','\u0581','\u0582','\u0583','\u0584', + '\u0585','\u0586','\u0587','\u0588','\u0589','\u058a','\u058b', + '\u058c','\u058d','\u058e','\u058f','\u0590','\u0591','\u0592', + '\u0593','\u0594','\u0595','\u0596','\u0597','\u0598','\u0599', + '\u059a','\u059b','\u059c','\u059d','\u059e','\u059f','\u05a0', + '\u05a1','\u05a2','\u05a3','\u05a4','\u05a5','\u05a6','\u05a7', + '\u05a8','\u05a9','\u05aa','\u05ab','\u05ac','\u05ad','\u05ae', + '\u05af','\u05b0','\u05b1','\u05b2','\u05b3','\u05b4','\u05b5', + '\u05b6','\u05b7','\u05b8','\u05b9','\u05ba','\u05bb','\u05bc', + '\u05bd','\u05be','\u05bf','\u05c0','\u05c1','\u05c2','\u05c3', + '\u05c4','\u05c5','\u05c6','\u05c7','\u05c8','\u05c9','\u05ca', + '\u05cb','\u05cc','\u05cd','\u05ce','\u05cf','\u05d0','\u05d1', + '\u05d2','\u05d3','\u05d4','\u05d5','\u05d6','\u05d7','\u05d8', + '\u05d9','\u05da','\u05db','\u05dc','\u05dd','\u05de','\u05df', + '\u05e0','\u05e1','\u05e2','\u05e3','\u05e4','\u05e5','\u05e6', + '\u05e7','\u05e8','\u05e9','\u05ea','\u05eb','\u05ec','\u05ed', + '\u05ee','\u05ef','\u05f0','\u05f1','\u05f2','\u05f3','\u05f4', + '\u05f5','\u05f6','\u05f7','\u05f8','\u05f9','\u05fa','\u05fb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+1280; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void f600() { + char[] cs = new char[] { + '\u0600','\u0601','\u0602','\u0603','\u0604','\u0605','\u0606', + '\u0607','\u0608','\u0609','\u060a','\u060b','\u060c','\u060d', + '\u060e','\u060f','\u0610','\u0611','\u0612','\u0613','\u0614', + '\u0615','\u0616','\u0617','\u0618','\u0619','\u061a','\u061b', + '\u061c','\u061d','\u061e','\u061f','\u0620','\u0621','\u0622', + '\u0623','\u0624','\u0625','\u0626','\u0627','\u0628','\u0629', + '\u062a','\u062b','\u062c','\u062d','\u062e','\u062f','\u0630', + '\u0631','\u0632','\u0633','\u0634','\u0635','\u0636','\u0637', + '\u0638','\u0639','\u063a','\u063b','\u063c','\u063d','\u063e', + '\u063f','\u0640','\u0641','\u0642','\u0643','\u0644','\u0645', + '\u0646','\u0647','\u0648','\u0649','\u064a','\u064b','\u064c', + '\u064d','\u064e','\u064f','\u0650','\u0651','\u0652','\u0653', + '\u0654','\u0655','\u0656','\u0657','\u0658','\u0659','\u065a', + '\u065b','\u065c','\u065d','\u065e','\u065f','\u0660','\u0661', + '\u0662','\u0663','\u0664','\u0665','\u0666','\u0667','\u0668', + '\u0669','\u066a','\u066b','\u066c','\u066d','\u066e','\u066f', + '\u0670','\u0671','\u0672','\u0673','\u0674','\u0675','\u0676', + '\u0677','\u0678','\u0679','\u067a','\u067b','\u067c','\u067d', + '\u067e','\u067f','\u0680','\u0681','\u0682','\u0683','\u0684', + '\u0685','\u0686','\u0687','\u0688','\u0689','\u068a','\u068b', + '\u068c','\u068d','\u068e','\u068f','\u0690','\u0691','\u0692', + '\u0693','\u0694','\u0695','\u0696','\u0697','\u0698','\u0699', + '\u069a','\u069b','\u069c','\u069d','\u069e','\u069f','\u06a0', + '\u06a1','\u06a2','\u06a3','\u06a4','\u06a5','\u06a6','\u06a7', + '\u06a8','\u06a9','\u06aa','\u06ab','\u06ac','\u06ad','\u06ae', + '\u06af','\u06b0','\u06b1','\u06b2','\u06b3','\u06b4','\u06b5', + '\u06b6','\u06b7','\u06b8','\u06b9','\u06ba','\u06bb','\u06bc', + '\u06bd','\u06be','\u06bf','\u06c0','\u06c1','\u06c2','\u06c3', + '\u06c4','\u06c5','\u06c6','\u06c7','\u06c8','\u06c9','\u06ca', + '\u06cb','\u06cc','\u06cd','\u06ce','\u06cf','\u06d0','\u06d1', + '\u06d2','\u06d3','\u06d4','\u06d5','\u06d6','\u06d7','\u06d8', + '\u06d9','\u06da','\u06db','\u06dc','\u06dd','\u06de','\u06df', + '\u06e0','\u06e1','\u06e2','\u06e3','\u06e4','\u06e5','\u06e6', + '\u06e7','\u06e8','\u06e9','\u06ea','\u06eb','\u06ec','\u06ed', + '\u06ee','\u06ef','\u06f0','\u06f1','\u06f2','\u06f3','\u06f4', + '\u06f5','\u06f6','\u06f7','\u06f8','\u06f9','\u06fa','\u06fb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+1536; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void f700() { + char[] cs = new char[] { + '\u0700','\u0701','\u0702','\u0703','\u0704','\u0705','\u0706', + '\u0707','\u0708','\u0709','\u070a','\u070b','\u070c','\u070d', + '\u070e','\u070f','\u0710','\u0711','\u0712','\u0713','\u0714', + '\u0715','\u0716','\u0717','\u0718','\u0719','\u071a','\u071b', + '\u071c','\u071d','\u071e','\u071f','\u0720','\u0721','\u0722', + '\u0723','\u0724','\u0725','\u0726','\u0727','\u0728','\u0729', + '\u072a','\u072b','\u072c','\u072d','\u072e','\u072f','\u0730', + '\u0731','\u0732','\u0733','\u0734','\u0735','\u0736','\u0737', + '\u0738','\u0739','\u073a','\u073b','\u073c','\u073d','\u073e', + '\u073f','\u0740','\u0741','\u0742','\u0743','\u0744','\u0745', + '\u0746','\u0747','\u0748','\u0749','\u074a','\u074b','\u074c', + '\u074d','\u074e','\u074f','\u0750','\u0751','\u0752','\u0753', + '\u0754','\u0755','\u0756','\u0757','\u0758','\u0759','\u075a', + '\u075b','\u075c','\u075d','\u075e','\u075f','\u0760','\u0761', + '\u0762','\u0763','\u0764','\u0765','\u0766','\u0767','\u0768', + '\u0769','\u076a','\u076b','\u076c','\u076d','\u076e','\u076f', + '\u0770','\u0771','\u0772','\u0773','\u0774','\u0775','\u0776', + '\u0777','\u0778','\u0779','\u077a','\u077b','\u077c','\u077d', + '\u077e','\u077f','\u0780','\u0781','\u0782','\u0783','\u0784', + '\u0785','\u0786','\u0787','\u0788','\u0789','\u078a','\u078b', + '\u078c','\u078d','\u078e','\u078f','\u0790','\u0791','\u0792', + '\u0793','\u0794','\u0795','\u0796','\u0797','\u0798','\u0799', + '\u079a','\u079b','\u079c','\u079d','\u079e','\u079f','\u07a0', + '\u07a1','\u07a2','\u07a3','\u07a4','\u07a5','\u07a6','\u07a7', + '\u07a8','\u07a9','\u07aa','\u07ab','\u07ac','\u07ad','\u07ae', + '\u07af','\u07b0','\u07b1','\u07b2','\u07b3','\u07b4','\u07b5', + '\u07b6','\u07b7','\u07b8','\u07b9','\u07ba','\u07bb','\u07bc', + '\u07bd','\u07be','\u07bf','\u07c0','\u07c1','\u07c2','\u07c3', + '\u07c4','\u07c5','\u07c6','\u07c7','\u07c8','\u07c9','\u07ca', + '\u07cb','\u07cc','\u07cd','\u07ce','\u07cf','\u07d0','\u07d1', + '\u07d2','\u07d3','\u07d4','\u07d5','\u07d6','\u07d7','\u07d8', + '\u07d9','\u07da','\u07db','\u07dc','\u07dd','\u07de','\u07df', + '\u07e0','\u07e1','\u07e2','\u07e3','\u07e4','\u07e5','\u07e6', + '\u07e7','\u07e8','\u07e9','\u07ea','\u07eb','\u07ec','\u07ed', + '\u07ee','\u07ef','\u07f0','\u07f1','\u07f2','\u07f3','\u07f4', + '\u07f5','\u07f6','\u07f7','\u07f8','\u07f9','\u07fa','\u07fb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+1792; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void f800() { + char[] cs = new char[] { + '\u0800','\u0801','\u0802','\u0803','\u0804','\u0805','\u0806', + '\u0807','\u0808','\u0809','\u080a','\u080b','\u080c','\u080d', + '\u080e','\u080f','\u0810','\u0811','\u0812','\u0813','\u0814', + '\u0815','\u0816','\u0817','\u0818','\u0819','\u081a','\u081b', + '\u081c','\u081d','\u081e','\u081f','\u0820','\u0821','\u0822', + '\u0823','\u0824','\u0825','\u0826','\u0827','\u0828','\u0829', + '\u082a','\u082b','\u082c','\u082d','\u082e','\u082f','\u0830', + '\u0831','\u0832','\u0833','\u0834','\u0835','\u0836','\u0837', + '\u0838','\u0839','\u083a','\u083b','\u083c','\u083d','\u083e', + '\u083f','\u0840','\u0841','\u0842','\u0843','\u0844','\u0845', + '\u0846','\u0847','\u0848','\u0849','\u084a','\u084b','\u084c', + '\u084d','\u084e','\u084f','\u0850','\u0851','\u0852','\u0853', + '\u0854','\u0855','\u0856','\u0857','\u0858','\u0859','\u085a', + '\u085b','\u085c','\u085d','\u085e','\u085f','\u0860','\u0861', + '\u0862','\u0863','\u0864','\u0865','\u0866','\u0867','\u0868', + '\u0869','\u086a','\u086b','\u086c','\u086d','\u086e','\u086f', + '\u0870','\u0871','\u0872','\u0873','\u0874','\u0875','\u0876', + '\u0877','\u0878','\u0879','\u087a','\u087b','\u087c','\u087d', + '\u087e','\u087f','\u0880','\u0881','\u0882','\u0883','\u0884', + '\u0885','\u0886','\u0887','\u0888','\u0889','\u088a','\u088b', + '\u088c','\u088d','\u088e','\u088f','\u0890','\u0891','\u0892', + '\u0893','\u0894','\u0895','\u0896','\u0897','\u0898','\u0899', + '\u089a','\u089b','\u089c','\u089d','\u089e','\u089f','\u08a0', + '\u08a1','\u08a2','\u08a3','\u08a4','\u08a5','\u08a6','\u08a7', + '\u08a8','\u08a9','\u08aa','\u08ab','\u08ac','\u08ad','\u08ae', + '\u08af','\u08b0','\u08b1','\u08b2','\u08b3','\u08b4','\u08b5', + '\u08b6','\u08b7','\u08b8','\u08b9','\u08ba','\u08bb','\u08bc', + '\u08bd','\u08be','\u08bf','\u08c0','\u08c1','\u08c2','\u08c3', + '\u08c4','\u08c5','\u08c6','\u08c7','\u08c8','\u08c9','\u08ca', + '\u08cb','\u08cc','\u08cd','\u08ce','\u08cf','\u08d0','\u08d1', + '\u08d2','\u08d3','\u08d4','\u08d5','\u08d6','\u08d7','\u08d8', + '\u08d9','\u08da','\u08db','\u08dc','\u08dd','\u08de','\u08df', + '\u08e0','\u08e1','\u08e2','\u08e3','\u08e4','\u08e5','\u08e6', + '\u08e7','\u08e8','\u08e9','\u08ea','\u08eb','\u08ec','\u08ed', + '\u08ee','\u08ef','\u08f0','\u08f1','\u08f2','\u08f3','\u08f4', + '\u08f5','\u08f6','\u08f7','\u08f8','\u08f9','\u08fa','\u08fb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+2048; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void f900() { + char[] cs = new char[] { + '\u0900','\u0901','\u0902','\u0903','\u0904','\u0905','\u0906', + '\u0907','\u0908','\u0909','\u090a','\u090b','\u090c','\u090d', + '\u090e','\u090f','\u0910','\u0911','\u0912','\u0913','\u0914', + '\u0915','\u0916','\u0917','\u0918','\u0919','\u091a','\u091b', + '\u091c','\u091d','\u091e','\u091f','\u0920','\u0921','\u0922', + '\u0923','\u0924','\u0925','\u0926','\u0927','\u0928','\u0929', + '\u092a','\u092b','\u092c','\u092d','\u092e','\u092f','\u0930', + '\u0931','\u0932','\u0933','\u0934','\u0935','\u0936','\u0937', + '\u0938','\u0939','\u093a','\u093b','\u093c','\u093d','\u093e', + '\u093f','\u0940','\u0941','\u0942','\u0943','\u0944','\u0945', + '\u0946','\u0947','\u0948','\u0949','\u094a','\u094b','\u094c', + '\u094d','\u094e','\u094f','\u0950','\u0951','\u0952','\u0953', + '\u0954','\u0955','\u0956','\u0957','\u0958','\u0959','\u095a', + '\u095b','\u095c','\u095d','\u095e','\u095f','\u0960','\u0961', + '\u0962','\u0963','\u0964','\u0965','\u0966','\u0967','\u0968', + '\u0969','\u096a','\u096b','\u096c','\u096d','\u096e','\u096f', + '\u0970','\u0971','\u0972','\u0973','\u0974','\u0975','\u0976', + '\u0977','\u0978','\u0979','\u097a','\u097b','\u097c','\u097d', + '\u097e','\u097f','\u0980','\u0981','\u0982','\u0983','\u0984', + '\u0985','\u0986','\u0987','\u0988','\u0989','\u098a','\u098b', + '\u098c','\u098d','\u098e','\u098f','\u0990','\u0991','\u0992', + '\u0993','\u0994','\u0995','\u0996','\u0997','\u0998','\u0999', + '\u099a','\u099b','\u099c','\u099d','\u099e','\u099f','\u09a0', + '\u09a1','\u09a2','\u09a3','\u09a4','\u09a5','\u09a6','\u09a7', + '\u09a8','\u09a9','\u09aa','\u09ab','\u09ac','\u09ad','\u09ae', + '\u09af','\u09b0','\u09b1','\u09b2','\u09b3','\u09b4','\u09b5', + '\u09b6','\u09b7','\u09b8','\u09b9','\u09ba','\u09bb','\u09bc', + '\u09bd','\u09be','\u09bf','\u09c0','\u09c1','\u09c2','\u09c3', + '\u09c4','\u09c5','\u09c6','\u09c7','\u09c8','\u09c9','\u09ca', + '\u09cb','\u09cc','\u09cd','\u09ce','\u09cf','\u09d0','\u09d1', + '\u09d2','\u09d3','\u09d4','\u09d5','\u09d6','\u09d7','\u09d8', + '\u09d9','\u09da','\u09db','\u09dc','\u09dd','\u09de','\u09df', + '\u09e0','\u09e1','\u09e2','\u09e3','\u09e4','\u09e5','\u09e6', + '\u09e7','\u09e8','\u09e9','\u09ea','\u09eb','\u09ec','\u09ed', + '\u09ee','\u09ef','\u09f0','\u09f1','\u09f2','\u09f3','\u09f4', + '\u09f5','\u09f6','\u09f7','\u09f8','\u09f9','\u09fa','\u09fb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+2304; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void fa00() { + char[] cs = new char[] { + '\u0a00','\u0a01','\u0a02','\u0a03','\u0a04','\u0a05','\u0a06', + '\u0a07','\u0a08','\u0a09','\u0a0a','\u0a0b','\u0a0c','\u0a0d', + '\u0a0e','\u0a0f','\u0a10','\u0a11','\u0a12','\u0a13','\u0a14', + '\u0a15','\u0a16','\u0a17','\u0a18','\u0a19','\u0a1a','\u0a1b', + '\u0a1c','\u0a1d','\u0a1e','\u0a1f','\u0a20','\u0a21','\u0a22', + '\u0a23','\u0a24','\u0a25','\u0a26','\u0a27','\u0a28','\u0a29', + '\u0a2a','\u0a2b','\u0a2c','\u0a2d','\u0a2e','\u0a2f','\u0a30', + '\u0a31','\u0a32','\u0a33','\u0a34','\u0a35','\u0a36','\u0a37', + '\u0a38','\u0a39','\u0a3a','\u0a3b','\u0a3c','\u0a3d','\u0a3e', + '\u0a3f','\u0a40','\u0a41','\u0a42','\u0a43','\u0a44','\u0a45', + '\u0a46','\u0a47','\u0a48','\u0a49','\u0a4a','\u0a4b','\u0a4c', + '\u0a4d','\u0a4e','\u0a4f','\u0a50','\u0a51','\u0a52','\u0a53', + '\u0a54','\u0a55','\u0a56','\u0a57','\u0a58','\u0a59','\u0a5a', + '\u0a5b','\u0a5c','\u0a5d','\u0a5e','\u0a5f','\u0a60','\u0a61', + '\u0a62','\u0a63','\u0a64','\u0a65','\u0a66','\u0a67','\u0a68', + '\u0a69','\u0a6a','\u0a6b','\u0a6c','\u0a6d','\u0a6e','\u0a6f', + '\u0a70','\u0a71','\u0a72','\u0a73','\u0a74','\u0a75','\u0a76', + '\u0a77','\u0a78','\u0a79','\u0a7a','\u0a7b','\u0a7c','\u0a7d', + '\u0a7e','\u0a7f','\u0a80','\u0a81','\u0a82','\u0a83','\u0a84', + '\u0a85','\u0a86','\u0a87','\u0a88','\u0a89','\u0a8a','\u0a8b', + '\u0a8c','\u0a8d','\u0a8e','\u0a8f','\u0a90','\u0a91','\u0a92', + '\u0a93','\u0a94','\u0a95','\u0a96','\u0a97','\u0a98','\u0a99', + '\u0a9a','\u0a9b','\u0a9c','\u0a9d','\u0a9e','\u0a9f','\u0aa0', + '\u0aa1','\u0aa2','\u0aa3','\u0aa4','\u0aa5','\u0aa6','\u0aa7', + '\u0aa8','\u0aa9','\u0aaa','\u0aab','\u0aac','\u0aad','\u0aae', + '\u0aaf','\u0ab0','\u0ab1','\u0ab2','\u0ab3','\u0ab4','\u0ab5', + '\u0ab6','\u0ab7','\u0ab8','\u0ab9','\u0aba','\u0abb','\u0abc', + '\u0abd','\u0abe','\u0abf','\u0ac0','\u0ac1','\u0ac2','\u0ac3', + '\u0ac4','\u0ac5','\u0ac6','\u0ac7','\u0ac8','\u0ac9','\u0aca', + '\u0acb','\u0acc','\u0acd','\u0ace','\u0acf','\u0ad0','\u0ad1', + '\u0ad2','\u0ad3','\u0ad4','\u0ad5','\u0ad6','\u0ad7','\u0ad8', + '\u0ad9','\u0ada','\u0adb','\u0adc','\u0add','\u0ade','\u0adf', + '\u0ae0','\u0ae1','\u0ae2','\u0ae3','\u0ae4','\u0ae5','\u0ae6', + '\u0ae7','\u0ae8','\u0ae9','\u0aea','\u0aeb','\u0aec','\u0aed', + '\u0aee','\u0aef','\u0af0','\u0af1','\u0af2','\u0af3','\u0af4', + '\u0af5','\u0af6','\u0af7','\u0af8','\u0af9','\u0afa','\u0afb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+2560; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void fb00() { + char[] cs = new char[] { + '\u0b00','\u0b01','\u0b02','\u0b03','\u0b04','\u0b05','\u0b06', + '\u0b07','\u0b08','\u0b09','\u0b0a','\u0b0b','\u0b0c','\u0b0d', + '\u0b0e','\u0b0f','\u0b10','\u0b11','\u0b12','\u0b13','\u0b14', + '\u0b15','\u0b16','\u0b17','\u0b18','\u0b19','\u0b1a','\u0b1b', + '\u0b1c','\u0b1d','\u0b1e','\u0b1f','\u0b20','\u0b21','\u0b22', + '\u0b23','\u0b24','\u0b25','\u0b26','\u0b27','\u0b28','\u0b29', + '\u0b2a','\u0b2b','\u0b2c','\u0b2d','\u0b2e','\u0b2f','\u0b30', + '\u0b31','\u0b32','\u0b33','\u0b34','\u0b35','\u0b36','\u0b37', + '\u0b38','\u0b39','\u0b3a','\u0b3b','\u0b3c','\u0b3d','\u0b3e', + '\u0b3f','\u0b40','\u0b41','\u0b42','\u0b43','\u0b44','\u0b45', + '\u0b46','\u0b47','\u0b48','\u0b49','\u0b4a','\u0b4b','\u0b4c', + '\u0b4d','\u0b4e','\u0b4f','\u0b50','\u0b51','\u0b52','\u0b53', + '\u0b54','\u0b55','\u0b56','\u0b57','\u0b58','\u0b59','\u0b5a', + '\u0b5b','\u0b5c','\u0b5d','\u0b5e','\u0b5f','\u0b60','\u0b61', + '\u0b62','\u0b63','\u0b64','\u0b65','\u0b66','\u0b67','\u0b68', + '\u0b69','\u0b6a','\u0b6b','\u0b6c','\u0b6d','\u0b6e','\u0b6f', + '\u0b70','\u0b71','\u0b72','\u0b73','\u0b74','\u0b75','\u0b76', + '\u0b77','\u0b78','\u0b79','\u0b7a','\u0b7b','\u0b7c','\u0b7d', + '\u0b7e','\u0b7f','\u0b80','\u0b81','\u0b82','\u0b83','\u0b84', + '\u0b85','\u0b86','\u0b87','\u0b88','\u0b89','\u0b8a','\u0b8b', + '\u0b8c','\u0b8d','\u0b8e','\u0b8f','\u0b90','\u0b91','\u0b92', + '\u0b93','\u0b94','\u0b95','\u0b96','\u0b97','\u0b98','\u0b99', + '\u0b9a','\u0b9b','\u0b9c','\u0b9d','\u0b9e','\u0b9f','\u0ba0', + '\u0ba1','\u0ba2','\u0ba3','\u0ba4','\u0ba5','\u0ba6','\u0ba7', + '\u0ba8','\u0ba9','\u0baa','\u0bab','\u0bac','\u0bad','\u0bae', + '\u0baf','\u0bb0','\u0bb1','\u0bb2','\u0bb3','\u0bb4','\u0bb5', + '\u0bb6','\u0bb7','\u0bb8','\u0bb9','\u0bba','\u0bbb','\u0bbc', + '\u0bbd','\u0bbe','\u0bbf','\u0bc0','\u0bc1','\u0bc2','\u0bc3', + '\u0bc4','\u0bc5','\u0bc6','\u0bc7','\u0bc8','\u0bc9','\u0bca', + '\u0bcb','\u0bcc','\u0bcd','\u0bce','\u0bcf','\u0bd0','\u0bd1', + '\u0bd2','\u0bd3','\u0bd4','\u0bd5','\u0bd6','\u0bd7','\u0bd8', + '\u0bd9','\u0bda','\u0bdb','\u0bdc','\u0bdd','\u0bde','\u0bdf', + '\u0be0','\u0be1','\u0be2','\u0be3','\u0be4','\u0be5','\u0be6', + '\u0be7','\u0be8','\u0be9','\u0bea','\u0beb','\u0bec','\u0bed', + '\u0bee','\u0bef','\u0bf0','\u0bf1','\u0bf2','\u0bf3','\u0bf4', + '\u0bf5','\u0bf6','\u0bf7','\u0bf8','\u0bf9','\u0bfa','\u0bfb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+2816; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void fc00() { + char[] cs = new char[] { + '\u0c00','\u0c01','\u0c02','\u0c03','\u0c04','\u0c05','\u0c06', + '\u0c07','\u0c08','\u0c09','\u0c0a','\u0c0b','\u0c0c','\u0c0d', + '\u0c0e','\u0c0f','\u0c10','\u0c11','\u0c12','\u0c13','\u0c14', + '\u0c15','\u0c16','\u0c17','\u0c18','\u0c19','\u0c1a','\u0c1b', + '\u0c1c','\u0c1d','\u0c1e','\u0c1f','\u0c20','\u0c21','\u0c22', + '\u0c23','\u0c24','\u0c25','\u0c26','\u0c27','\u0c28','\u0c29', + '\u0c2a','\u0c2b','\u0c2c','\u0c2d','\u0c2e','\u0c2f','\u0c30', + '\u0c31','\u0c32','\u0c33','\u0c34','\u0c35','\u0c36','\u0c37', + '\u0c38','\u0c39','\u0c3a','\u0c3b','\u0c3c','\u0c3d','\u0c3e', + '\u0c3f','\u0c40','\u0c41','\u0c42','\u0c43','\u0c44','\u0c45', + '\u0c46','\u0c47','\u0c48','\u0c49','\u0c4a','\u0c4b','\u0c4c', + '\u0c4d','\u0c4e','\u0c4f','\u0c50','\u0c51','\u0c52','\u0c53', + '\u0c54','\u0c55','\u0c56','\u0c57','\u0c58','\u0c59','\u0c5a', + '\u0c5b','\u0c5c','\u0c5d','\u0c5e','\u0c5f','\u0c60','\u0c61', + '\u0c62','\u0c63','\u0c64','\u0c65','\u0c66','\u0c67','\u0c68', + '\u0c69','\u0c6a','\u0c6b','\u0c6c','\u0c6d','\u0c6e','\u0c6f', + '\u0c70','\u0c71','\u0c72','\u0c73','\u0c74','\u0c75','\u0c76', + '\u0c77','\u0c78','\u0c79','\u0c7a','\u0c7b','\u0c7c','\u0c7d', + '\u0c7e','\u0c7f','\u0c80','\u0c81','\u0c82','\u0c83','\u0c84', + '\u0c85','\u0c86','\u0c87','\u0c88','\u0c89','\u0c8a','\u0c8b', + '\u0c8c','\u0c8d','\u0c8e','\u0c8f','\u0c90','\u0c91','\u0c92', + '\u0c93','\u0c94','\u0c95','\u0c96','\u0c97','\u0c98','\u0c99', + '\u0c9a','\u0c9b','\u0c9c','\u0c9d','\u0c9e','\u0c9f','\u0ca0', + '\u0ca1','\u0ca2','\u0ca3','\u0ca4','\u0ca5','\u0ca6','\u0ca7', + '\u0ca8','\u0ca9','\u0caa','\u0cab','\u0cac','\u0cad','\u0cae', + '\u0caf','\u0cb0','\u0cb1','\u0cb2','\u0cb3','\u0cb4','\u0cb5', + '\u0cb6','\u0cb7','\u0cb8','\u0cb9','\u0cba','\u0cbb','\u0cbc', + '\u0cbd','\u0cbe','\u0cbf','\u0cc0','\u0cc1','\u0cc2','\u0cc3', + '\u0cc4','\u0cc5','\u0cc6','\u0cc7','\u0cc8','\u0cc9','\u0cca', + '\u0ccb','\u0ccc','\u0ccd','\u0cce','\u0ccf','\u0cd0','\u0cd1', + '\u0cd2','\u0cd3','\u0cd4','\u0cd5','\u0cd6','\u0cd7','\u0cd8', + '\u0cd9','\u0cda','\u0cdb','\u0cdc','\u0cdd','\u0cde','\u0cdf', + '\u0ce0','\u0ce1','\u0ce2','\u0ce3','\u0ce4','\u0ce5','\u0ce6', + '\u0ce7','\u0ce8','\u0ce9','\u0cea','\u0ceb','\u0cec','\u0ced', + '\u0cee','\u0cef','\u0cf0','\u0cf1','\u0cf2','\u0cf3','\u0cf4', + '\u0cf5','\u0cf6','\u0cf7','\u0cf8','\u0cf9','\u0cfa','\u0cfb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+3072; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void fd00() { + char[] cs = new char[] { + '\u0d00','\u0d01','\u0d02','\u0d03','\u0d04','\u0d05','\u0d06', + '\u0d07','\u0d08','\u0d09','\u0d0a','\u0d0b','\u0d0c','\u0d0d', + '\u0d0e','\u0d0f','\u0d10','\u0d11','\u0d12','\u0d13','\u0d14', + '\u0d15','\u0d16','\u0d17','\u0d18','\u0d19','\u0d1a','\u0d1b', + '\u0d1c','\u0d1d','\u0d1e','\u0d1f','\u0d20','\u0d21','\u0d22', + '\u0d23','\u0d24','\u0d25','\u0d26','\u0d27','\u0d28','\u0d29', + '\u0d2a','\u0d2b','\u0d2c','\u0d2d','\u0d2e','\u0d2f','\u0d30', + '\u0d31','\u0d32','\u0d33','\u0d34','\u0d35','\u0d36','\u0d37', + '\u0d38','\u0d39','\u0d3a','\u0d3b','\u0d3c','\u0d3d','\u0d3e', + '\u0d3f','\u0d40','\u0d41','\u0d42','\u0d43','\u0d44','\u0d45', + '\u0d46','\u0d47','\u0d48','\u0d49','\u0d4a','\u0d4b','\u0d4c', + '\u0d4d','\u0d4e','\u0d4f','\u0d50','\u0d51','\u0d52','\u0d53', + '\u0d54','\u0d55','\u0d56','\u0d57','\u0d58','\u0d59','\u0d5a', + '\u0d5b','\u0d5c','\u0d5d','\u0d5e','\u0d5f','\u0d60','\u0d61', + '\u0d62','\u0d63','\u0d64','\u0d65','\u0d66','\u0d67','\u0d68', + '\u0d69','\u0d6a','\u0d6b','\u0d6c','\u0d6d','\u0d6e','\u0d6f', + '\u0d70','\u0d71','\u0d72','\u0d73','\u0d74','\u0d75','\u0d76', + '\u0d77','\u0d78','\u0d79','\u0d7a','\u0d7b','\u0d7c','\u0d7d', + '\u0d7e','\u0d7f','\u0d80','\u0d81','\u0d82','\u0d83','\u0d84', + '\u0d85','\u0d86','\u0d87','\u0d88','\u0d89','\u0d8a','\u0d8b', + '\u0d8c','\u0d8d','\u0d8e','\u0d8f','\u0d90','\u0d91','\u0d92', + '\u0d93','\u0d94','\u0d95','\u0d96','\u0d97','\u0d98','\u0d99', + '\u0d9a','\u0d9b','\u0d9c','\u0d9d','\u0d9e','\u0d9f','\u0da0', + '\u0da1','\u0da2','\u0da3','\u0da4','\u0da5','\u0da6','\u0da7', + '\u0da8','\u0da9','\u0daa','\u0dab','\u0dac','\u0dad','\u0dae', + '\u0daf','\u0db0','\u0db1','\u0db2','\u0db3','\u0db4','\u0db5', + '\u0db6','\u0db7','\u0db8','\u0db9','\u0dba','\u0dbb','\u0dbc', + '\u0dbd','\u0dbe','\u0dbf','\u0dc0','\u0dc1','\u0dc2','\u0dc3', + '\u0dc4','\u0dc5','\u0dc6','\u0dc7','\u0dc8','\u0dc9','\u0dca', + '\u0dcb','\u0dcc','\u0dcd','\u0dce','\u0dcf','\u0dd0','\u0dd1', + '\u0dd2','\u0dd3','\u0dd4','\u0dd5','\u0dd6','\u0dd7','\u0dd8', + '\u0dd9','\u0dda','\u0ddb','\u0ddc','\u0ddd','\u0dde','\u0ddf', + '\u0de0','\u0de1','\u0de2','\u0de3','\u0de4','\u0de5','\u0de6', + '\u0de7','\u0de8','\u0de9','\u0dea','\u0deb','\u0dec','\u0ded', + '\u0dee','\u0def','\u0df0','\u0df1','\u0df2','\u0df3','\u0df4', + '\u0df5','\u0df6','\u0df7','\u0df8','\u0df9','\u0dfa','\u0dfb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+3328; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void fe00() { + char[] cs = new char[] { + '\u0e00','\u0e01','\u0e02','\u0e03','\u0e04','\u0e05','\u0e06', + '\u0e07','\u0e08','\u0e09','\u0e0a','\u0e0b','\u0e0c','\u0e0d', + '\u0e0e','\u0e0f','\u0e10','\u0e11','\u0e12','\u0e13','\u0e14', + '\u0e15','\u0e16','\u0e17','\u0e18','\u0e19','\u0e1a','\u0e1b', + '\u0e1c','\u0e1d','\u0e1e','\u0e1f','\u0e20','\u0e21','\u0e22', + '\u0e23','\u0e24','\u0e25','\u0e26','\u0e27','\u0e28','\u0e29', + '\u0e2a','\u0e2b','\u0e2c','\u0e2d','\u0e2e','\u0e2f','\u0e30', + '\u0e31','\u0e32','\u0e33','\u0e34','\u0e35','\u0e36','\u0e37', + '\u0e38','\u0e39','\u0e3a','\u0e3b','\u0e3c','\u0e3d','\u0e3e', + '\u0e3f','\u0e40','\u0e41','\u0e42','\u0e43','\u0e44','\u0e45', + '\u0e46','\u0e47','\u0e48','\u0e49','\u0e4a','\u0e4b','\u0e4c', + '\u0e4d','\u0e4e','\u0e4f','\u0e50','\u0e51','\u0e52','\u0e53', + '\u0e54','\u0e55','\u0e56','\u0e57','\u0e58','\u0e59','\u0e5a', + '\u0e5b','\u0e5c','\u0e5d','\u0e5e','\u0e5f','\u0e60','\u0e61', + '\u0e62','\u0e63','\u0e64','\u0e65','\u0e66','\u0e67','\u0e68', + '\u0e69','\u0e6a','\u0e6b','\u0e6c','\u0e6d','\u0e6e','\u0e6f', + '\u0e70','\u0e71','\u0e72','\u0e73','\u0e74','\u0e75','\u0e76', + '\u0e77','\u0e78','\u0e79','\u0e7a','\u0e7b','\u0e7c','\u0e7d', + '\u0e7e','\u0e7f','\u0e80','\u0e81','\u0e82','\u0e83','\u0e84', + '\u0e85','\u0e86','\u0e87','\u0e88','\u0e89','\u0e8a','\u0e8b', + '\u0e8c','\u0e8d','\u0e8e','\u0e8f','\u0e90','\u0e91','\u0e92', + '\u0e93','\u0e94','\u0e95','\u0e96','\u0e97','\u0e98','\u0e99', + '\u0e9a','\u0e9b','\u0e9c','\u0e9d','\u0e9e','\u0e9f','\u0ea0', + '\u0ea1','\u0ea2','\u0ea3','\u0ea4','\u0ea5','\u0ea6','\u0ea7', + '\u0ea8','\u0ea9','\u0eaa','\u0eab','\u0eac','\u0ead','\u0eae', + '\u0eaf','\u0eb0','\u0eb1','\u0eb2','\u0eb3','\u0eb4','\u0eb5', + '\u0eb6','\u0eb7','\u0eb8','\u0eb9','\u0eba','\u0ebb','\u0ebc', + '\u0ebd','\u0ebe','\u0ebf','\u0ec0','\u0ec1','\u0ec2','\u0ec3', + '\u0ec4','\u0ec5','\u0ec6','\u0ec7','\u0ec8','\u0ec9','\u0eca', + '\u0ecb','\u0ecc','\u0ecd','\u0ece','\u0ecf','\u0ed0','\u0ed1', + '\u0ed2','\u0ed3','\u0ed4','\u0ed5','\u0ed6','\u0ed7','\u0ed8', + '\u0ed9','\u0eda','\u0edb','\u0edc','\u0edd','\u0ede','\u0edf', + '\u0ee0','\u0ee1','\u0ee2','\u0ee3','\u0ee4','\u0ee5','\u0ee6', + '\u0ee7','\u0ee8','\u0ee9','\u0eea','\u0eeb','\u0eec','\u0eed', + '\u0eee','\u0eef','\u0ef0','\u0ef1','\u0ef2','\u0ef3','\u0ef4', + '\u0ef5','\u0ef6','\u0ef7','\u0ef8','\u0ef9','\u0efa','\u0efb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+3584; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void ff00() { + char[] cs = new char[] { + '\u0f00','\u0f01','\u0f02','\u0f03','\u0f04','\u0f05','\u0f06', + '\u0f07','\u0f08','\u0f09','\u0f0a','\u0f0b','\u0f0c','\u0f0d', + '\u0f0e','\u0f0f','\u0f10','\u0f11','\u0f12','\u0f13','\u0f14', + '\u0f15','\u0f16','\u0f17','\u0f18','\u0f19','\u0f1a','\u0f1b', + '\u0f1c','\u0f1d','\u0f1e','\u0f1f','\u0f20','\u0f21','\u0f22', + '\u0f23','\u0f24','\u0f25','\u0f26','\u0f27','\u0f28','\u0f29', + '\u0f2a','\u0f2b','\u0f2c','\u0f2d','\u0f2e','\u0f2f','\u0f30', + '\u0f31','\u0f32','\u0f33','\u0f34','\u0f35','\u0f36','\u0f37', + '\u0f38','\u0f39','\u0f3a','\u0f3b','\u0f3c','\u0f3d','\u0f3e', + '\u0f3f','\u0f40','\u0f41','\u0f42','\u0f43','\u0f44','\u0f45', + '\u0f46','\u0f47','\u0f48','\u0f49','\u0f4a','\u0f4b','\u0f4c', + '\u0f4d','\u0f4e','\u0f4f','\u0f50','\u0f51','\u0f52','\u0f53', + '\u0f54','\u0f55','\u0f56','\u0f57','\u0f58','\u0f59','\u0f5a', + '\u0f5b','\u0f5c','\u0f5d','\u0f5e','\u0f5f','\u0f60','\u0f61', + '\u0f62','\u0f63','\u0f64','\u0f65','\u0f66','\u0f67','\u0f68', + '\u0f69','\u0f6a','\u0f6b','\u0f6c','\u0f6d','\u0f6e','\u0f6f', + '\u0f70','\u0f71','\u0f72','\u0f73','\u0f74','\u0f75','\u0f76', + '\u0f77','\u0f78','\u0f79','\u0f7a','\u0f7b','\u0f7c','\u0f7d', + '\u0f7e','\u0f7f','\u0f80','\u0f81','\u0f82','\u0f83','\u0f84', + '\u0f85','\u0f86','\u0f87','\u0f88','\u0f89','\u0f8a','\u0f8b', + '\u0f8c','\u0f8d','\u0f8e','\u0f8f','\u0f90','\u0f91','\u0f92', + '\u0f93','\u0f94','\u0f95','\u0f96','\u0f97','\u0f98','\u0f99', + '\u0f9a','\u0f9b','\u0f9c','\u0f9d','\u0f9e','\u0f9f','\u0fa0', + '\u0fa1','\u0fa2','\u0fa3','\u0fa4','\u0fa5','\u0fa6','\u0fa7', + '\u0fa8','\u0fa9','\u0faa','\u0fab','\u0fac','\u0fad','\u0fae', + '\u0faf','\u0fb0','\u0fb1','\u0fb2','\u0fb3','\u0fb4','\u0fb5', + '\u0fb6','\u0fb7','\u0fb8','\u0fb9','\u0fba','\u0fbb','\u0fbc', + '\u0fbd','\u0fbe','\u0fbf','\u0fc0','\u0fc1','\u0fc2','\u0fc3', + '\u0fc4','\u0fc5','\u0fc6','\u0fc7','\u0fc8','\u0fc9','\u0fca', + '\u0fcb','\u0fcc','\u0fcd','\u0fce','\u0fcf','\u0fd0','\u0fd1', + '\u0fd2','\u0fd3','\u0fd4','\u0fd5','\u0fd6','\u0fd7','\u0fd8', + '\u0fd9','\u0fda','\u0fdb','\u0fdc','\u0fdd','\u0fde','\u0fdf', + '\u0fe0','\u0fe1','\u0fe2','\u0fe3','\u0fe4','\u0fe5','\u0fe6', + '\u0fe7','\u0fe8','\u0fe9','\u0fea','\u0feb','\u0fec','\u0fed', + '\u0fee','\u0fef','\u0ff0','\u0ff1','\u0ff2','\u0ff3','\u0ff4', + '\u0ff5','\u0ff6','\u0ff7','\u0ff8','\u0ff9','\u0ffa','\u0ffb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+3840; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void f1000() { + char[] cs = new char[] { + '\u1000','\u1001','\u1002','\u1003','\u1004','\u1005','\u1006', + '\u1007','\u1008','\u1009','\u100a','\u100b','\u100c','\u100d', + '\u100e','\u100f','\u1010','\u1011','\u1012','\u1013','\u1014', + '\u1015','\u1016','\u1017','\u1018','\u1019','\u101a','\u101b', + '\u101c','\u101d','\u101e','\u101f','\u1020','\u1021','\u1022', + '\u1023','\u1024','\u1025','\u1026','\u1027','\u1028','\u1029', + '\u102a','\u102b','\u102c','\u102d','\u102e','\u102f','\u1030', + '\u1031','\u1032','\u1033','\u1034','\u1035','\u1036','\u1037', + '\u1038','\u1039','\u103a','\u103b','\u103c','\u103d','\u103e', + '\u103f','\u1040','\u1041','\u1042','\u1043','\u1044','\u1045', + '\u1046','\u1047','\u1048','\u1049','\u104a','\u104b','\u104c', + '\u104d','\u104e','\u104f','\u1050','\u1051','\u1052','\u1053', + '\u1054','\u1055','\u1056','\u1057','\u1058','\u1059','\u105a', + '\u105b','\u105c','\u105d','\u105e','\u105f','\u1060','\u1061', + '\u1062','\u1063','\u1064','\u1065','\u1066','\u1067','\u1068', + '\u1069','\u106a','\u106b','\u106c','\u106d','\u106e','\u106f', + '\u1070','\u1071','\u1072','\u1073','\u1074','\u1075','\u1076', + '\u1077','\u1078','\u1079','\u107a','\u107b','\u107c','\u107d', + '\u107e','\u107f','\u1080','\u1081','\u1082','\u1083','\u1084', + '\u1085','\u1086','\u1087','\u1088','\u1089','\u108a','\u108b', + '\u108c','\u108d','\u108e','\u108f','\u1090','\u1091','\u1092', + '\u1093','\u1094','\u1095','\u1096','\u1097','\u1098','\u1099', + '\u109a','\u109b','\u109c','\u109d','\u109e','\u109f','\u10a0', + '\u10a1','\u10a2','\u10a3','\u10a4','\u10a5','\u10a6','\u10a7', + '\u10a8','\u10a9','\u10aa','\u10ab','\u10ac','\u10ad','\u10ae', + '\u10af','\u10b0','\u10b1','\u10b2','\u10b3','\u10b4','\u10b5', + '\u10b6','\u10b7','\u10b8','\u10b9','\u10ba','\u10bb','\u10bc', + '\u10bd','\u10be','\u10bf','\u10c0','\u10c1','\u10c2','\u10c3', + '\u10c4','\u10c5','\u10c6','\u10c7','\u10c8','\u10c9','\u10ca', + '\u10cb','\u10cc','\u10cd','\u10ce','\u10cf','\u10d0','\u10d1', + '\u10d2','\u10d3','\u10d4','\u10d5','\u10d6','\u10d7','\u10d8', + '\u10d9','\u10da','\u10db','\u10dc','\u10dd','\u10de','\u10df', + '\u10e0','\u10e1','\u10e2','\u10e3','\u10e4','\u10e5','\u10e6', + '\u10e7','\u10e8','\u10e9','\u10ea','\u10eb','\u10ec','\u10ed', + '\u10ee','\u10ef','\u10f0','\u10f1','\u10f2','\u10f3','\u10f4', + '\u10f5','\u10f6','\u10f7','\u10f8','\u10f9','\u10fa','\u10fb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+4096; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void f1100() { + char[] cs = new char[] { + '\u1100','\u1101','\u1102','\u1103','\u1104','\u1105','\u1106', + '\u1107','\u1108','\u1109','\u110a','\u110b','\u110c','\u110d', + '\u110e','\u110f','\u1110','\u1111','\u1112','\u1113','\u1114', + '\u1115','\u1116','\u1117','\u1118','\u1119','\u111a','\u111b', + '\u111c','\u111d','\u111e','\u111f','\u1120','\u1121','\u1122', + '\u1123','\u1124','\u1125','\u1126','\u1127','\u1128','\u1129', + '\u112a','\u112b','\u112c','\u112d','\u112e','\u112f','\u1130', + '\u1131','\u1132','\u1133','\u1134','\u1135','\u1136','\u1137', + '\u1138','\u1139','\u113a','\u113b','\u113c','\u113d','\u113e', + '\u113f','\u1140','\u1141','\u1142','\u1143','\u1144','\u1145', + '\u1146','\u1147','\u1148','\u1149','\u114a','\u114b','\u114c', + '\u114d','\u114e','\u114f','\u1150','\u1151','\u1152','\u1153', + '\u1154','\u1155','\u1156','\u1157','\u1158','\u1159','\u115a', + '\u115b','\u115c','\u115d','\u115e','\u115f','\u1160','\u1161', + '\u1162','\u1163','\u1164','\u1165','\u1166','\u1167','\u1168', + '\u1169','\u116a','\u116b','\u116c','\u116d','\u116e','\u116f', + '\u1170','\u1171','\u1172','\u1173','\u1174','\u1175','\u1176', + '\u1177','\u1178','\u1179','\u117a','\u117b','\u117c','\u117d', + '\u117e','\u117f','\u1180','\u1181','\u1182','\u1183','\u1184', + '\u1185','\u1186','\u1187','\u1188','\u1189','\u118a','\u118b', + '\u118c','\u118d','\u118e','\u118f','\u1190','\u1191','\u1192', + '\u1193','\u1194','\u1195','\u1196','\u1197','\u1198','\u1199', + '\u119a','\u119b','\u119c','\u119d','\u119e','\u119f','\u11a0', + '\u11a1','\u11a2','\u11a3','\u11a4','\u11a5','\u11a6','\u11a7', + '\u11a8','\u11a9','\u11aa','\u11ab','\u11ac','\u11ad','\u11ae', + '\u11af','\u11b0','\u11b1','\u11b2','\u11b3','\u11b4','\u11b5', + '\u11b6','\u11b7','\u11b8','\u11b9','\u11ba','\u11bb','\u11bc', + '\u11bd','\u11be','\u11bf','\u11c0','\u11c1','\u11c2','\u11c3', + '\u11c4','\u11c5','\u11c6','\u11c7','\u11c8','\u11c9','\u11ca', + '\u11cb','\u11cc','\u11cd','\u11ce','\u11cf','\u11d0','\u11d1', + '\u11d2','\u11d3','\u11d4','\u11d5','\u11d6','\u11d7','\u11d8', + '\u11d9','\u11da','\u11db','\u11dc','\u11dd','\u11de','\u11df', + '\u11e0','\u11e1','\u11e2','\u11e3','\u11e4','\u11e5','\u11e6', + '\u11e7','\u11e8','\u11e9','\u11ea','\u11eb','\u11ec','\u11ed', + '\u11ee','\u11ef','\u11f0','\u11f1','\u11f2','\u11f3','\u11f4', + '\u11f5','\u11f6','\u11f7','\u11f8','\u11f9','\u11fa','\u11fb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+4352; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void f1200() { + char[] cs = new char[] { + '\u1200','\u1201','\u1202','\u1203','\u1204','\u1205','\u1206', + '\u1207','\u1208','\u1209','\u120a','\u120b','\u120c','\u120d', + '\u120e','\u120f','\u1210','\u1211','\u1212','\u1213','\u1214', + '\u1215','\u1216','\u1217','\u1218','\u1219','\u121a','\u121b', + '\u121c','\u121d','\u121e','\u121f','\u1220','\u1221','\u1222', + '\u1223','\u1224','\u1225','\u1226','\u1227','\u1228','\u1229', + '\u122a','\u122b','\u122c','\u122d','\u122e','\u122f','\u1230', + '\u1231','\u1232','\u1233','\u1234','\u1235','\u1236','\u1237', + '\u1238','\u1239','\u123a','\u123b','\u123c','\u123d','\u123e', + '\u123f','\u1240','\u1241','\u1242','\u1243','\u1244','\u1245', + '\u1246','\u1247','\u1248','\u1249','\u124a','\u124b','\u124c', + '\u124d','\u124e','\u124f','\u1250','\u1251','\u1252','\u1253', + '\u1254','\u1255','\u1256','\u1257','\u1258','\u1259','\u125a', + '\u125b','\u125c','\u125d','\u125e','\u125f','\u1260','\u1261', + '\u1262','\u1263','\u1264','\u1265','\u1266','\u1267','\u1268', + '\u1269','\u126a','\u126b','\u126c','\u126d','\u126e','\u126f', + '\u1270','\u1271','\u1272','\u1273','\u1274','\u1275','\u1276', + '\u1277','\u1278','\u1279','\u127a','\u127b','\u127c','\u127d', + '\u127e','\u127f','\u1280','\u1281','\u1282','\u1283','\u1284', + '\u1285','\u1286','\u1287','\u1288','\u1289','\u128a','\u128b', + '\u128c','\u128d','\u128e','\u128f','\u1290','\u1291','\u1292', + '\u1293','\u1294','\u1295','\u1296','\u1297','\u1298','\u1299', + '\u129a','\u129b','\u129c','\u129d','\u129e','\u129f','\u12a0', + '\u12a1','\u12a2','\u12a3','\u12a4','\u12a5','\u12a6','\u12a7', + '\u12a8','\u12a9','\u12aa','\u12ab','\u12ac','\u12ad','\u12ae', + '\u12af','\u12b0','\u12b1','\u12b2','\u12b3','\u12b4','\u12b5', + '\u12b6','\u12b7','\u12b8','\u12b9','\u12ba','\u12bb','\u12bc', + '\u12bd','\u12be','\u12bf','\u12c0','\u12c1','\u12c2','\u12c3', + '\u12c4','\u12c5','\u12c6','\u12c7','\u12c8','\u12c9','\u12ca', + '\u12cb','\u12cc','\u12cd','\u12ce','\u12cf','\u12d0','\u12d1', + '\u12d2','\u12d3','\u12d4','\u12d5','\u12d6','\u12d7','\u12d8', + '\u12d9','\u12da','\u12db','\u12dc','\u12dd','\u12de','\u12df', + '\u12e0','\u12e1','\u12e2','\u12e3','\u12e4','\u12e5','\u12e6', + '\u12e7','\u12e8','\u12e9','\u12ea','\u12eb','\u12ec','\u12ed', + '\u12ee','\u12ef','\u12f0','\u12f1','\u12f2','\u12f3','\u12f4', + '\u12f5','\u12f6','\u12f7','\u12f8','\u12f9','\u12fa','\u12fb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+4608; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void f1300() { + char[] cs = new char[] { + '\u1300','\u1301','\u1302','\u1303','\u1304','\u1305','\u1306', + '\u1307','\u1308','\u1309','\u130a','\u130b','\u130c','\u130d', + '\u130e','\u130f','\u1310','\u1311','\u1312','\u1313','\u1314', + '\u1315','\u1316','\u1317','\u1318','\u1319','\u131a','\u131b', + '\u131c','\u131d','\u131e','\u131f','\u1320','\u1321','\u1322', + '\u1323','\u1324','\u1325','\u1326','\u1327','\u1328','\u1329', + '\u132a','\u132b','\u132c','\u132d','\u132e','\u132f','\u1330', + '\u1331','\u1332','\u1333','\u1334','\u1335','\u1336','\u1337', + '\u1338','\u1339','\u133a','\u133b','\u133c','\u133d','\u133e', + '\u133f','\u1340','\u1341','\u1342','\u1343','\u1344','\u1345', + '\u1346','\u1347','\u1348','\u1349','\u134a','\u134b','\u134c', + '\u134d','\u134e','\u134f','\u1350','\u1351','\u1352','\u1353', + '\u1354','\u1355','\u1356','\u1357','\u1358','\u1359','\u135a', + '\u135b','\u135c','\u135d','\u135e','\u135f','\u1360','\u1361', + '\u1362','\u1363','\u1364','\u1365','\u1366','\u1367','\u1368', + '\u1369','\u136a','\u136b','\u136c','\u136d','\u136e','\u136f', + '\u1370','\u1371','\u1372','\u1373','\u1374','\u1375','\u1376', + '\u1377','\u1378','\u1379','\u137a','\u137b','\u137c','\u137d', + '\u137e','\u137f','\u1380','\u1381','\u1382','\u1383','\u1384', + '\u1385','\u1386','\u1387','\u1388','\u1389','\u138a','\u138b', + '\u138c','\u138d','\u138e','\u138f','\u1390','\u1391','\u1392', + '\u1393','\u1394','\u1395','\u1396','\u1397','\u1398','\u1399', + '\u139a','\u139b','\u139c','\u139d','\u139e','\u139f','\u13a0', + '\u13a1','\u13a2','\u13a3','\u13a4','\u13a5','\u13a6','\u13a7', + '\u13a8','\u13a9','\u13aa','\u13ab','\u13ac','\u13ad','\u13ae', + '\u13af','\u13b0','\u13b1','\u13b2','\u13b3','\u13b4','\u13b5', + '\u13b6','\u13b7','\u13b8','\u13b9','\u13ba','\u13bb','\u13bc', + '\u13bd','\u13be','\u13bf','\u13c0','\u13c1','\u13c2','\u13c3', + '\u13c4','\u13c5','\u13c6','\u13c7','\u13c8','\u13c9','\u13ca', + '\u13cb','\u13cc','\u13cd','\u13ce','\u13cf','\u13d0','\u13d1', + '\u13d2','\u13d3','\u13d4','\u13d5','\u13d6','\u13d7','\u13d8', + '\u13d9','\u13da','\u13db','\u13dc','\u13dd','\u13de','\u13df', + '\u13e0','\u13e1','\u13e2','\u13e3','\u13e4','\u13e5','\u13e6', + '\u13e7','\u13e8','\u13e9','\u13ea','\u13eb','\u13ec','\u13ed', + '\u13ee','\u13ef','\u13f0','\u13f1','\u13f2','\u13f3','\u13f4', + '\u13f5','\u13f6','\u13f7','\u13f8','\u13f9','\u13fa','\u13fb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+4864; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void f1400() { + char[] cs = new char[] { + '\u1400','\u1401','\u1402','\u1403','\u1404','\u1405','\u1406', + '\u1407','\u1408','\u1409','\u140a','\u140b','\u140c','\u140d', + '\u140e','\u140f','\u1410','\u1411','\u1412','\u1413','\u1414', + '\u1415','\u1416','\u1417','\u1418','\u1419','\u141a','\u141b', + '\u141c','\u141d','\u141e','\u141f','\u1420','\u1421','\u1422', + '\u1423','\u1424','\u1425','\u1426','\u1427','\u1428','\u1429', + '\u142a','\u142b','\u142c','\u142d','\u142e','\u142f','\u1430', + '\u1431','\u1432','\u1433','\u1434','\u1435','\u1436','\u1437', + '\u1438','\u1439','\u143a','\u143b','\u143c','\u143d','\u143e', + '\u143f','\u1440','\u1441','\u1442','\u1443','\u1444','\u1445', + '\u1446','\u1447','\u1448','\u1449','\u144a','\u144b','\u144c', + '\u144d','\u144e','\u144f','\u1450','\u1451','\u1452','\u1453', + '\u1454','\u1455','\u1456','\u1457','\u1458','\u1459','\u145a', + '\u145b','\u145c','\u145d','\u145e','\u145f','\u1460','\u1461', + '\u1462','\u1463','\u1464','\u1465','\u1466','\u1467','\u1468', + '\u1469','\u146a','\u146b','\u146c','\u146d','\u146e','\u146f', + '\u1470','\u1471','\u1472','\u1473','\u1474','\u1475','\u1476', + '\u1477','\u1478','\u1479','\u147a','\u147b','\u147c','\u147d', + '\u147e','\u147f','\u1480','\u1481','\u1482','\u1483','\u1484', + '\u1485','\u1486','\u1487','\u1488','\u1489','\u148a','\u148b', + '\u148c','\u148d','\u148e','\u148f','\u1490','\u1491','\u1492', + '\u1493','\u1494','\u1495','\u1496','\u1497','\u1498','\u1499', + '\u149a','\u149b','\u149c','\u149d','\u149e','\u149f','\u14a0', + '\u14a1','\u14a2','\u14a3','\u14a4','\u14a5','\u14a6','\u14a7', + '\u14a8','\u14a9','\u14aa','\u14ab','\u14ac','\u14ad','\u14ae', + '\u14af','\u14b0','\u14b1','\u14b2','\u14b3','\u14b4','\u14b5', + '\u14b6','\u14b7','\u14b8','\u14b9','\u14ba','\u14bb','\u14bc', + '\u14bd','\u14be','\u14bf','\u14c0','\u14c1','\u14c2','\u14c3', + '\u14c4','\u14c5','\u14c6','\u14c7','\u14c8','\u14c9','\u14ca', + '\u14cb','\u14cc','\u14cd','\u14ce','\u14cf','\u14d0','\u14d1', + '\u14d2','\u14d3','\u14d4','\u14d5','\u14d6','\u14d7','\u14d8', + '\u14d9','\u14da','\u14db','\u14dc','\u14dd','\u14de','\u14df', + '\u14e0','\u14e1','\u14e2','\u14e3','\u14e4','\u14e5','\u14e6', + '\u14e7','\u14e8','\u14e9','\u14ea','\u14eb','\u14ec','\u14ed', + '\u14ee','\u14ef','\u14f0','\u14f1','\u14f2','\u14f3','\u14f4', + '\u14f5','\u14f6','\u14f7','\u14f8','\u14f9','\u14fa','\u14fb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+5120; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void f1500() { + char[] cs = new char[] { + '\u1500','\u1501','\u1502','\u1503','\u1504','\u1505','\u1506', + '\u1507','\u1508','\u1509','\u150a','\u150b','\u150c','\u150d', + '\u150e','\u150f','\u1510','\u1511','\u1512','\u1513','\u1514', + '\u1515','\u1516','\u1517','\u1518','\u1519','\u151a','\u151b', + '\u151c','\u151d','\u151e','\u151f','\u1520','\u1521','\u1522', + '\u1523','\u1524','\u1525','\u1526','\u1527','\u1528','\u1529', + '\u152a','\u152b','\u152c','\u152d','\u152e','\u152f','\u1530', + '\u1531','\u1532','\u1533','\u1534','\u1535','\u1536','\u1537', + '\u1538','\u1539','\u153a','\u153b','\u153c','\u153d','\u153e', + '\u153f','\u1540','\u1541','\u1542','\u1543','\u1544','\u1545', + '\u1546','\u1547','\u1548','\u1549','\u154a','\u154b','\u154c', + '\u154d','\u154e','\u154f','\u1550','\u1551','\u1552','\u1553', + '\u1554','\u1555','\u1556','\u1557','\u1558','\u1559','\u155a', + '\u155b','\u155c','\u155d','\u155e','\u155f','\u1560','\u1561', + '\u1562','\u1563','\u1564','\u1565','\u1566','\u1567','\u1568', + '\u1569','\u156a','\u156b','\u156c','\u156d','\u156e','\u156f', + '\u1570','\u1571','\u1572','\u1573','\u1574','\u1575','\u1576', + '\u1577','\u1578','\u1579','\u157a','\u157b','\u157c','\u157d', + '\u157e','\u157f','\u1580','\u1581','\u1582','\u1583','\u1584', + '\u1585','\u1586','\u1587','\u1588','\u1589','\u158a','\u158b', + '\u158c','\u158d','\u158e','\u158f','\u1590','\u1591','\u1592', + '\u1593','\u1594','\u1595','\u1596','\u1597','\u1598','\u1599', + '\u159a','\u159b','\u159c','\u159d','\u159e','\u159f','\u15a0', + '\u15a1','\u15a2','\u15a3','\u15a4','\u15a5','\u15a6','\u15a7', + '\u15a8','\u15a9','\u15aa','\u15ab','\u15ac','\u15ad','\u15ae', + '\u15af','\u15b0','\u15b1','\u15b2','\u15b3','\u15b4','\u15b5', + '\u15b6','\u15b7','\u15b8','\u15b9','\u15ba','\u15bb','\u15bc', + '\u15bd','\u15be','\u15bf','\u15c0','\u15c1','\u15c2','\u15c3', + '\u15c4','\u15c5','\u15c6','\u15c7','\u15c8','\u15c9','\u15ca', + '\u15cb','\u15cc','\u15cd','\u15ce','\u15cf','\u15d0','\u15d1', + '\u15d2','\u15d3','\u15d4','\u15d5','\u15d6','\u15d7','\u15d8', + '\u15d9','\u15da','\u15db','\u15dc','\u15dd','\u15de','\u15df', + '\u15e0','\u15e1','\u15e2','\u15e3','\u15e4','\u15e5','\u15e6', + '\u15e7','\u15e8','\u15e9','\u15ea','\u15eb','\u15ec','\u15ed', + '\u15ee','\u15ef','\u15f0','\u15f1','\u15f2','\u15f3','\u15f4', + '\u15f5','\u15f6','\u15f7','\u15f8','\u15f9','\u15fa','\u15fb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+5376; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void f1600() { + char[] cs = new char[] { + '\u1600','\u1601','\u1602','\u1603','\u1604','\u1605','\u1606', + '\u1607','\u1608','\u1609','\u160a','\u160b','\u160c','\u160d', + '\u160e','\u160f','\u1610','\u1611','\u1612','\u1613','\u1614', + '\u1615','\u1616','\u1617','\u1618','\u1619','\u161a','\u161b', + '\u161c','\u161d','\u161e','\u161f','\u1620','\u1621','\u1622', + '\u1623','\u1624','\u1625','\u1626','\u1627','\u1628','\u1629', + '\u162a','\u162b','\u162c','\u162d','\u162e','\u162f','\u1630', + '\u1631','\u1632','\u1633','\u1634','\u1635','\u1636','\u1637', + '\u1638','\u1639','\u163a','\u163b','\u163c','\u163d','\u163e', + '\u163f','\u1640','\u1641','\u1642','\u1643','\u1644','\u1645', + '\u1646','\u1647','\u1648','\u1649','\u164a','\u164b','\u164c', + '\u164d','\u164e','\u164f','\u1650','\u1651','\u1652','\u1653', + '\u1654','\u1655','\u1656','\u1657','\u1658','\u1659','\u165a', + '\u165b','\u165c','\u165d','\u165e','\u165f','\u1660','\u1661', + '\u1662','\u1663','\u1664','\u1665','\u1666','\u1667','\u1668', + '\u1669','\u166a','\u166b','\u166c','\u166d','\u166e','\u166f', + '\u1670','\u1671','\u1672','\u1673','\u1674','\u1675','\u1676', + '\u1677','\u1678','\u1679','\u167a','\u167b','\u167c','\u167d', + '\u167e','\u167f','\u1680','\u1681','\u1682','\u1683','\u1684', + '\u1685','\u1686','\u1687','\u1688','\u1689','\u168a','\u168b', + '\u168c','\u168d','\u168e','\u168f','\u1690','\u1691','\u1692', + '\u1693','\u1694','\u1695','\u1696','\u1697','\u1698','\u1699', + '\u169a','\u169b','\u169c','\u169d','\u169e','\u169f','\u16a0', + '\u16a1','\u16a2','\u16a3','\u16a4','\u16a5','\u16a6','\u16a7', + '\u16a8','\u16a9','\u16aa','\u16ab','\u16ac','\u16ad','\u16ae', + '\u16af','\u16b0','\u16b1','\u16b2','\u16b3','\u16b4','\u16b5', + '\u16b6','\u16b7','\u16b8','\u16b9','\u16ba','\u16bb','\u16bc', + '\u16bd','\u16be','\u16bf','\u16c0','\u16c1','\u16c2','\u16c3', + '\u16c4','\u16c5','\u16c6','\u16c7','\u16c8','\u16c9','\u16ca', + '\u16cb','\u16cc','\u16cd','\u16ce','\u16cf','\u16d0','\u16d1', + '\u16d2','\u16d3','\u16d4','\u16d5','\u16d6','\u16d7','\u16d8', + '\u16d9','\u16da','\u16db','\u16dc','\u16dd','\u16de','\u16df', + '\u16e0','\u16e1','\u16e2','\u16e3','\u16e4','\u16e5','\u16e6', + '\u16e7','\u16e8','\u16e9','\u16ea','\u16eb','\u16ec','\u16ed', + '\u16ee','\u16ef','\u16f0','\u16f1','\u16f2','\u16f3','\u16f4', + '\u16f5','\u16f6','\u16f7','\u16f8','\u16f9','\u16fa','\u16fb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+5632; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void f1700() { + char[] cs = new char[] { + '\u1700','\u1701','\u1702','\u1703','\u1704','\u1705','\u1706', + '\u1707','\u1708','\u1709','\u170a','\u170b','\u170c','\u170d', + '\u170e','\u170f','\u1710','\u1711','\u1712','\u1713','\u1714', + '\u1715','\u1716','\u1717','\u1718','\u1719','\u171a','\u171b', + '\u171c','\u171d','\u171e','\u171f','\u1720','\u1721','\u1722', + '\u1723','\u1724','\u1725','\u1726','\u1727','\u1728','\u1729', + '\u172a','\u172b','\u172c','\u172d','\u172e','\u172f','\u1730', + '\u1731','\u1732','\u1733','\u1734','\u1735','\u1736','\u1737', + '\u1738','\u1739','\u173a','\u173b','\u173c','\u173d','\u173e', + '\u173f','\u1740','\u1741','\u1742','\u1743','\u1744','\u1745', + '\u1746','\u1747','\u1748','\u1749','\u174a','\u174b','\u174c', + '\u174d','\u174e','\u174f','\u1750','\u1751','\u1752','\u1753', + '\u1754','\u1755','\u1756','\u1757','\u1758','\u1759','\u175a', + '\u175b','\u175c','\u175d','\u175e','\u175f','\u1760','\u1761', + '\u1762','\u1763','\u1764','\u1765','\u1766','\u1767','\u1768', + '\u1769','\u176a','\u176b','\u176c','\u176d','\u176e','\u176f', + '\u1770','\u1771','\u1772','\u1773','\u1774','\u1775','\u1776', + '\u1777','\u1778','\u1779','\u177a','\u177b','\u177c','\u177d', + '\u177e','\u177f','\u1780','\u1781','\u1782','\u1783','\u1784', + '\u1785','\u1786','\u1787','\u1788','\u1789','\u178a','\u178b', + '\u178c','\u178d','\u178e','\u178f','\u1790','\u1791','\u1792', + '\u1793','\u1794','\u1795','\u1796','\u1797','\u1798','\u1799', + '\u179a','\u179b','\u179c','\u179d','\u179e','\u179f','\u17a0', + '\u17a1','\u17a2','\u17a3','\u17a4','\u17a5','\u17a6','\u17a7', + '\u17a8','\u17a9','\u17aa','\u17ab','\u17ac','\u17ad','\u17ae', + '\u17af','\u17b0','\u17b1','\u17b2','\u17b3','\u17b4','\u17b5', + '\u17b6','\u17b7','\u17b8','\u17b9','\u17ba','\u17bb','\u17bc', + '\u17bd','\u17be','\u17bf','\u17c0','\u17c1','\u17c2','\u17c3', + '\u17c4','\u17c5','\u17c6','\u17c7','\u17c8','\u17c9','\u17ca', + '\u17cb','\u17cc','\u17cd','\u17ce','\u17cf','\u17d0','\u17d1', + '\u17d2','\u17d3','\u17d4','\u17d5','\u17d6','\u17d7','\u17d8', + '\u17d9','\u17da','\u17db','\u17dc','\u17dd','\u17de','\u17df', + '\u17e0','\u17e1','\u17e2','\u17e3','\u17e4','\u17e5','\u17e6', + '\u17e7','\u17e8','\u17e9','\u17ea','\u17eb','\u17ec','\u17ed', + '\u17ee','\u17ef','\u17f0','\u17f1','\u17f2','\u17f3','\u17f4', + '\u17f5','\u17f6','\u17f7','\u17f8','\u17f9','\u17fa','\u17fb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+5888; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void f1800() { + char[] cs = new char[] { + '\u1800','\u1801','\u1802','\u1803','\u1804','\u1805','\u1806', + '\u1807','\u1808','\u1809','\u180a','\u180b','\u180c','\u180d', + '\u180e','\u180f','\u1810','\u1811','\u1812','\u1813','\u1814', + '\u1815','\u1816','\u1817','\u1818','\u1819','\u181a','\u181b', + '\u181c','\u181d','\u181e','\u181f','\u1820','\u1821','\u1822', + '\u1823','\u1824','\u1825','\u1826','\u1827','\u1828','\u1829', + '\u182a','\u182b','\u182c','\u182d','\u182e','\u182f','\u1830', + '\u1831','\u1832','\u1833','\u1834','\u1835','\u1836','\u1837', + '\u1838','\u1839','\u183a','\u183b','\u183c','\u183d','\u183e', + '\u183f','\u1840','\u1841','\u1842','\u1843','\u1844','\u1845', + '\u1846','\u1847','\u1848','\u1849','\u184a','\u184b','\u184c', + '\u184d','\u184e','\u184f','\u1850','\u1851','\u1852','\u1853', + '\u1854','\u1855','\u1856','\u1857','\u1858','\u1859','\u185a', + '\u185b','\u185c','\u185d','\u185e','\u185f','\u1860','\u1861', + '\u1862','\u1863','\u1864','\u1865','\u1866','\u1867','\u1868', + '\u1869','\u186a','\u186b','\u186c','\u186d','\u186e','\u186f', + '\u1870','\u1871','\u1872','\u1873','\u1874','\u1875','\u1876', + '\u1877','\u1878','\u1879','\u187a','\u187b','\u187c','\u187d', + '\u187e','\u187f','\u1880','\u1881','\u1882','\u1883','\u1884', + '\u1885','\u1886','\u1887','\u1888','\u1889','\u188a','\u188b', + '\u188c','\u188d','\u188e','\u188f','\u1890','\u1891','\u1892', + '\u1893','\u1894','\u1895','\u1896','\u1897','\u1898','\u1899', + '\u189a','\u189b','\u189c','\u189d','\u189e','\u189f','\u18a0', + '\u18a1','\u18a2','\u18a3','\u18a4','\u18a5','\u18a6','\u18a7', + '\u18a8','\u18a9','\u18aa','\u18ab','\u18ac','\u18ad','\u18ae', + '\u18af','\u18b0','\u18b1','\u18b2','\u18b3','\u18b4','\u18b5', + '\u18b6','\u18b7','\u18b8','\u18b9','\u18ba','\u18bb','\u18bc', + '\u18bd','\u18be','\u18bf','\u18c0','\u18c1','\u18c2','\u18c3', + '\u18c4','\u18c5','\u18c6','\u18c7','\u18c8','\u18c9','\u18ca', + '\u18cb','\u18cc','\u18cd','\u18ce','\u18cf','\u18d0','\u18d1', + '\u18d2','\u18d3','\u18d4','\u18d5','\u18d6','\u18d7','\u18d8', + '\u18d9','\u18da','\u18db','\u18dc','\u18dd','\u18de','\u18df', + '\u18e0','\u18e1','\u18e2','\u18e3','\u18e4','\u18e5','\u18e6', + '\u18e7','\u18e8','\u18e9','\u18ea','\u18eb','\u18ec','\u18ed', + '\u18ee','\u18ef','\u18f0','\u18f1','\u18f2','\u18f3','\u18f4', + '\u18f5','\u18f6','\u18f7','\u18f8','\u18f9','\u18fa','\u18fb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+6144; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void f1900() { + char[] cs = new char[] { + '\u1900','\u1901','\u1902','\u1903','\u1904','\u1905','\u1906', + '\u1907','\u1908','\u1909','\u190a','\u190b','\u190c','\u190d', + '\u190e','\u190f','\u1910','\u1911','\u1912','\u1913','\u1914', + '\u1915','\u1916','\u1917','\u1918','\u1919','\u191a','\u191b', + '\u191c','\u191d','\u191e','\u191f','\u1920','\u1921','\u1922', + '\u1923','\u1924','\u1925','\u1926','\u1927','\u1928','\u1929', + '\u192a','\u192b','\u192c','\u192d','\u192e','\u192f','\u1930', + '\u1931','\u1932','\u1933','\u1934','\u1935','\u1936','\u1937', + '\u1938','\u1939','\u193a','\u193b','\u193c','\u193d','\u193e', + '\u193f','\u1940','\u1941','\u1942','\u1943','\u1944','\u1945', + '\u1946','\u1947','\u1948','\u1949','\u194a','\u194b','\u194c', + '\u194d','\u194e','\u194f','\u1950','\u1951','\u1952','\u1953', + '\u1954','\u1955','\u1956','\u1957','\u1958','\u1959','\u195a', + '\u195b','\u195c','\u195d','\u195e','\u195f','\u1960','\u1961', + '\u1962','\u1963','\u1964','\u1965','\u1966','\u1967','\u1968', + '\u1969','\u196a','\u196b','\u196c','\u196d','\u196e','\u196f', + '\u1970','\u1971','\u1972','\u1973','\u1974','\u1975','\u1976', + '\u1977','\u1978','\u1979','\u197a','\u197b','\u197c','\u197d', + '\u197e','\u197f','\u1980','\u1981','\u1982','\u1983','\u1984', + '\u1985','\u1986','\u1987','\u1988','\u1989','\u198a','\u198b', + '\u198c','\u198d','\u198e','\u198f','\u1990','\u1991','\u1992', + '\u1993','\u1994','\u1995','\u1996','\u1997','\u1998','\u1999', + '\u199a','\u199b','\u199c','\u199d','\u199e','\u199f','\u19a0', + '\u19a1','\u19a2','\u19a3','\u19a4','\u19a5','\u19a6','\u19a7', + '\u19a8','\u19a9','\u19aa','\u19ab','\u19ac','\u19ad','\u19ae', + '\u19af','\u19b0','\u19b1','\u19b2','\u19b3','\u19b4','\u19b5', + '\u19b6','\u19b7','\u19b8','\u19b9','\u19ba','\u19bb','\u19bc', + '\u19bd','\u19be','\u19bf','\u19c0','\u19c1','\u19c2','\u19c3', + '\u19c4','\u19c5','\u19c6','\u19c7','\u19c8','\u19c9','\u19ca', + '\u19cb','\u19cc','\u19cd','\u19ce','\u19cf','\u19d0','\u19d1', + '\u19d2','\u19d3','\u19d4','\u19d5','\u19d6','\u19d7','\u19d8', + '\u19d9','\u19da','\u19db','\u19dc','\u19dd','\u19de','\u19df', + '\u19e0','\u19e1','\u19e2','\u19e3','\u19e4','\u19e5','\u19e6', + '\u19e7','\u19e8','\u19e9','\u19ea','\u19eb','\u19ec','\u19ed', + '\u19ee','\u19ef','\u19f0','\u19f1','\u19f2','\u19f3','\u19f4', + '\u19f5','\u19f6','\u19f7','\u19f8','\u19f9','\u19fa','\u19fb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+6400; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void f1a00() { + char[] cs = new char[] { + '\u1a00','\u1a01','\u1a02','\u1a03','\u1a04','\u1a05','\u1a06', + '\u1a07','\u1a08','\u1a09','\u1a0a','\u1a0b','\u1a0c','\u1a0d', + '\u1a0e','\u1a0f','\u1a10','\u1a11','\u1a12','\u1a13','\u1a14', + '\u1a15','\u1a16','\u1a17','\u1a18','\u1a19','\u1a1a','\u1a1b', + '\u1a1c','\u1a1d','\u1a1e','\u1a1f','\u1a20','\u1a21','\u1a22', + '\u1a23','\u1a24','\u1a25','\u1a26','\u1a27','\u1a28','\u1a29', + '\u1a2a','\u1a2b','\u1a2c','\u1a2d','\u1a2e','\u1a2f','\u1a30', + '\u1a31','\u1a32','\u1a33','\u1a34','\u1a35','\u1a36','\u1a37', + '\u1a38','\u1a39','\u1a3a','\u1a3b','\u1a3c','\u1a3d','\u1a3e', + '\u1a3f','\u1a40','\u1a41','\u1a42','\u1a43','\u1a44','\u1a45', + '\u1a46','\u1a47','\u1a48','\u1a49','\u1a4a','\u1a4b','\u1a4c', + '\u1a4d','\u1a4e','\u1a4f','\u1a50','\u1a51','\u1a52','\u1a53', + '\u1a54','\u1a55','\u1a56','\u1a57','\u1a58','\u1a59','\u1a5a', + '\u1a5b','\u1a5c','\u1a5d','\u1a5e','\u1a5f','\u1a60','\u1a61', + '\u1a62','\u1a63','\u1a64','\u1a65','\u1a66','\u1a67','\u1a68', + '\u1a69','\u1a6a','\u1a6b','\u1a6c','\u1a6d','\u1a6e','\u1a6f', + '\u1a70','\u1a71','\u1a72','\u1a73','\u1a74','\u1a75','\u1a76', + '\u1a77','\u1a78','\u1a79','\u1a7a','\u1a7b','\u1a7c','\u1a7d', + '\u1a7e','\u1a7f','\u1a80','\u1a81','\u1a82','\u1a83','\u1a84', + '\u1a85','\u1a86','\u1a87','\u1a88','\u1a89','\u1a8a','\u1a8b', + '\u1a8c','\u1a8d','\u1a8e','\u1a8f','\u1a90','\u1a91','\u1a92', + '\u1a93','\u1a94','\u1a95','\u1a96','\u1a97','\u1a98','\u1a99', + '\u1a9a','\u1a9b','\u1a9c','\u1a9d','\u1a9e','\u1a9f','\u1aa0', + '\u1aa1','\u1aa2','\u1aa3','\u1aa4','\u1aa5','\u1aa6','\u1aa7', + '\u1aa8','\u1aa9','\u1aaa','\u1aab','\u1aac','\u1aad','\u1aae', + '\u1aaf','\u1ab0','\u1ab1','\u1ab2','\u1ab3','\u1ab4','\u1ab5', + '\u1ab6','\u1ab7','\u1ab8','\u1ab9','\u1aba','\u1abb','\u1abc', + '\u1abd','\u1abe','\u1abf','\u1ac0','\u1ac1','\u1ac2','\u1ac3', + '\u1ac4','\u1ac5','\u1ac6','\u1ac7','\u1ac8','\u1ac9','\u1aca', + '\u1acb','\u1acc','\u1acd','\u1ace','\u1acf','\u1ad0','\u1ad1', + '\u1ad2','\u1ad3','\u1ad4','\u1ad5','\u1ad6','\u1ad7','\u1ad8', + '\u1ad9','\u1ada','\u1adb','\u1adc','\u1add','\u1ade','\u1adf', + '\u1ae0','\u1ae1','\u1ae2','\u1ae3','\u1ae4','\u1ae5','\u1ae6', + '\u1ae7','\u1ae8','\u1ae9','\u1aea','\u1aeb','\u1aec','\u1aed', + '\u1aee','\u1aef','\u1af0','\u1af1','\u1af2','\u1af3','\u1af4', + '\u1af5','\u1af6','\u1af7','\u1af8','\u1af9','\u1afa','\u1afb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+6656; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void f1b00() { + char[] cs = new char[] { + '\u1b00','\u1b01','\u1b02','\u1b03','\u1b04','\u1b05','\u1b06', + '\u1b07','\u1b08','\u1b09','\u1b0a','\u1b0b','\u1b0c','\u1b0d', + '\u1b0e','\u1b0f','\u1b10','\u1b11','\u1b12','\u1b13','\u1b14', + '\u1b15','\u1b16','\u1b17','\u1b18','\u1b19','\u1b1a','\u1b1b', + '\u1b1c','\u1b1d','\u1b1e','\u1b1f','\u1b20','\u1b21','\u1b22', + '\u1b23','\u1b24','\u1b25','\u1b26','\u1b27','\u1b28','\u1b29', + '\u1b2a','\u1b2b','\u1b2c','\u1b2d','\u1b2e','\u1b2f','\u1b30', + '\u1b31','\u1b32','\u1b33','\u1b34','\u1b35','\u1b36','\u1b37', + '\u1b38','\u1b39','\u1b3a','\u1b3b','\u1b3c','\u1b3d','\u1b3e', + '\u1b3f','\u1b40','\u1b41','\u1b42','\u1b43','\u1b44','\u1b45', + '\u1b46','\u1b47','\u1b48','\u1b49','\u1b4a','\u1b4b','\u1b4c', + '\u1b4d','\u1b4e','\u1b4f','\u1b50','\u1b51','\u1b52','\u1b53', + '\u1b54','\u1b55','\u1b56','\u1b57','\u1b58','\u1b59','\u1b5a', + '\u1b5b','\u1b5c','\u1b5d','\u1b5e','\u1b5f','\u1b60','\u1b61', + '\u1b62','\u1b63','\u1b64','\u1b65','\u1b66','\u1b67','\u1b68', + '\u1b69','\u1b6a','\u1b6b','\u1b6c','\u1b6d','\u1b6e','\u1b6f', + '\u1b70','\u1b71','\u1b72','\u1b73','\u1b74','\u1b75','\u1b76', + '\u1b77','\u1b78','\u1b79','\u1b7a','\u1b7b','\u1b7c','\u1b7d', + '\u1b7e','\u1b7f','\u1b80','\u1b81','\u1b82','\u1b83','\u1b84', + '\u1b85','\u1b86','\u1b87','\u1b88','\u1b89','\u1b8a','\u1b8b', + '\u1b8c','\u1b8d','\u1b8e','\u1b8f','\u1b90','\u1b91','\u1b92', + '\u1b93','\u1b94','\u1b95','\u1b96','\u1b97','\u1b98','\u1b99', + '\u1b9a','\u1b9b','\u1b9c','\u1b9d','\u1b9e','\u1b9f','\u1ba0', + '\u1ba1','\u1ba2','\u1ba3','\u1ba4','\u1ba5','\u1ba6','\u1ba7', + '\u1ba8','\u1ba9','\u1baa','\u1bab','\u1bac','\u1bad','\u1bae', + '\u1baf','\u1bb0','\u1bb1','\u1bb2','\u1bb3','\u1bb4','\u1bb5', + '\u1bb6','\u1bb7','\u1bb8','\u1bb9','\u1bba','\u1bbb','\u1bbc', + '\u1bbd','\u1bbe','\u1bbf','\u1bc0','\u1bc1','\u1bc2','\u1bc3', + '\u1bc4','\u1bc5','\u1bc6','\u1bc7','\u1bc8','\u1bc9','\u1bca', + '\u1bcb','\u1bcc','\u1bcd','\u1bce','\u1bcf','\u1bd0','\u1bd1', + '\u1bd2','\u1bd3','\u1bd4','\u1bd5','\u1bd6','\u1bd7','\u1bd8', + '\u1bd9','\u1bda','\u1bdb','\u1bdc','\u1bdd','\u1bde','\u1bdf', + '\u1be0','\u1be1','\u1be2','\u1be3','\u1be4','\u1be5','\u1be6', + '\u1be7','\u1be8','\u1be9','\u1bea','\u1beb','\u1bec','\u1bed', + '\u1bee','\u1bef','\u1bf0','\u1bf1','\u1bf2','\u1bf3','\u1bf4', + '\u1bf5','\u1bf6','\u1bf7','\u1bf8','\u1bf9','\u1bfa','\u1bfb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+6912; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void f1c00() { + char[] cs = new char[] { + '\u1c00','\u1c01','\u1c02','\u1c03','\u1c04','\u1c05','\u1c06', + '\u1c07','\u1c08','\u1c09','\u1c0a','\u1c0b','\u1c0c','\u1c0d', + '\u1c0e','\u1c0f','\u1c10','\u1c11','\u1c12','\u1c13','\u1c14', + '\u1c15','\u1c16','\u1c17','\u1c18','\u1c19','\u1c1a','\u1c1b', + '\u1c1c','\u1c1d','\u1c1e','\u1c1f','\u1c20','\u1c21','\u1c22', + '\u1c23','\u1c24','\u1c25','\u1c26','\u1c27','\u1c28','\u1c29', + '\u1c2a','\u1c2b','\u1c2c','\u1c2d','\u1c2e','\u1c2f','\u1c30', + '\u1c31','\u1c32','\u1c33','\u1c34','\u1c35','\u1c36','\u1c37', + '\u1c38','\u1c39','\u1c3a','\u1c3b','\u1c3c','\u1c3d','\u1c3e', + '\u1c3f','\u1c40','\u1c41','\u1c42','\u1c43','\u1c44','\u1c45', + '\u1c46','\u1c47','\u1c48','\u1c49','\u1c4a','\u1c4b','\u1c4c', + '\u1c4d','\u1c4e','\u1c4f','\u1c50','\u1c51','\u1c52','\u1c53', + '\u1c54','\u1c55','\u1c56','\u1c57','\u1c58','\u1c59','\u1c5a', + '\u1c5b','\u1c5c','\u1c5d','\u1c5e','\u1c5f','\u1c60','\u1c61', + '\u1c62','\u1c63','\u1c64','\u1c65','\u1c66','\u1c67','\u1c68', + '\u1c69','\u1c6a','\u1c6b','\u1c6c','\u1c6d','\u1c6e','\u1c6f', + '\u1c70','\u1c71','\u1c72','\u1c73','\u1c74','\u1c75','\u1c76', + '\u1c77','\u1c78','\u1c79','\u1c7a','\u1c7b','\u1c7c','\u1c7d', + '\u1c7e','\u1c7f','\u1c80','\u1c81','\u1c82','\u1c83','\u1c84', + '\u1c85','\u1c86','\u1c87','\u1c88','\u1c89','\u1c8a','\u1c8b', + '\u1c8c','\u1c8d','\u1c8e','\u1c8f','\u1c90','\u1c91','\u1c92', + '\u1c93','\u1c94','\u1c95','\u1c96','\u1c97','\u1c98','\u1c99', + '\u1c9a','\u1c9b','\u1c9c','\u1c9d','\u1c9e','\u1c9f','\u1ca0', + '\u1ca1','\u1ca2','\u1ca3','\u1ca4','\u1ca5','\u1ca6','\u1ca7', + '\u1ca8','\u1ca9','\u1caa','\u1cab','\u1cac','\u1cad','\u1cae', + '\u1caf','\u1cb0','\u1cb1','\u1cb2','\u1cb3','\u1cb4','\u1cb5', + '\u1cb6','\u1cb7','\u1cb8','\u1cb9','\u1cba','\u1cbb','\u1cbc', + '\u1cbd','\u1cbe','\u1cbf','\u1cc0','\u1cc1','\u1cc2','\u1cc3', + '\u1cc4','\u1cc5','\u1cc6','\u1cc7','\u1cc8','\u1cc9','\u1cca', + '\u1ccb','\u1ccc','\u1ccd','\u1cce','\u1ccf','\u1cd0','\u1cd1', + '\u1cd2','\u1cd3','\u1cd4','\u1cd5','\u1cd6','\u1cd7','\u1cd8', + '\u1cd9','\u1cda','\u1cdb','\u1cdc','\u1cdd','\u1cde','\u1cdf', + '\u1ce0','\u1ce1','\u1ce2','\u1ce3','\u1ce4','\u1ce5','\u1ce6', + '\u1ce7','\u1ce8','\u1ce9','\u1cea','\u1ceb','\u1cec','\u1ced', + '\u1cee','\u1cef','\u1cf0','\u1cf1','\u1cf2','\u1cf3','\u1cf4', + '\u1cf5','\u1cf6','\u1cf7','\u1cf8','\u1cf9','\u1cfa','\u1cfb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+7168; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void f1d00() { + char[] cs = new char[] { + '\u1d00','\u1d01','\u1d02','\u1d03','\u1d04','\u1d05','\u1d06', + '\u1d07','\u1d08','\u1d09','\u1d0a','\u1d0b','\u1d0c','\u1d0d', + '\u1d0e','\u1d0f','\u1d10','\u1d11','\u1d12','\u1d13','\u1d14', + '\u1d15','\u1d16','\u1d17','\u1d18','\u1d19','\u1d1a','\u1d1b', + '\u1d1c','\u1d1d','\u1d1e','\u1d1f','\u1d20','\u1d21','\u1d22', + '\u1d23','\u1d24','\u1d25','\u1d26','\u1d27','\u1d28','\u1d29', + '\u1d2a','\u1d2b','\u1d2c','\u1d2d','\u1d2e','\u1d2f','\u1d30', + '\u1d31','\u1d32','\u1d33','\u1d34','\u1d35','\u1d36','\u1d37', + '\u1d38','\u1d39','\u1d3a','\u1d3b','\u1d3c','\u1d3d','\u1d3e', + '\u1d3f','\u1d40','\u1d41','\u1d42','\u1d43','\u1d44','\u1d45', + '\u1d46','\u1d47','\u1d48','\u1d49','\u1d4a','\u1d4b','\u1d4c', + '\u1d4d','\u1d4e','\u1d4f','\u1d50','\u1d51','\u1d52','\u1d53', + '\u1d54','\u1d55','\u1d56','\u1d57','\u1d58','\u1d59','\u1d5a', + '\u1d5b','\u1d5c','\u1d5d','\u1d5e','\u1d5f','\u1d60','\u1d61', + '\u1d62','\u1d63','\u1d64','\u1d65','\u1d66','\u1d67','\u1d68', + '\u1d69','\u1d6a','\u1d6b','\u1d6c','\u1d6d','\u1d6e','\u1d6f', + '\u1d70','\u1d71','\u1d72','\u1d73','\u1d74','\u1d75','\u1d76', + '\u1d77','\u1d78','\u1d79','\u1d7a','\u1d7b','\u1d7c','\u1d7d', + '\u1d7e','\u1d7f','\u1d80','\u1d81','\u1d82','\u1d83','\u1d84', + '\u1d85','\u1d86','\u1d87','\u1d88','\u1d89','\u1d8a','\u1d8b', + '\u1d8c','\u1d8d','\u1d8e','\u1d8f','\u1d90','\u1d91','\u1d92', + '\u1d93','\u1d94','\u1d95','\u1d96','\u1d97','\u1d98','\u1d99', + '\u1d9a','\u1d9b','\u1d9c','\u1d9d','\u1d9e','\u1d9f','\u1da0', + '\u1da1','\u1da2','\u1da3','\u1da4','\u1da5','\u1da6','\u1da7', + '\u1da8','\u1da9','\u1daa','\u1dab','\u1dac','\u1dad','\u1dae', + '\u1daf','\u1db0','\u1db1','\u1db2','\u1db3','\u1db4','\u1db5', + '\u1db6','\u1db7','\u1db8','\u1db9','\u1dba','\u1dbb','\u1dbc', + '\u1dbd','\u1dbe','\u1dbf','\u1dc0','\u1dc1','\u1dc2','\u1dc3', + '\u1dc4','\u1dc5','\u1dc6','\u1dc7','\u1dc8','\u1dc9','\u1dca', + '\u1dcb','\u1dcc','\u1dcd','\u1dce','\u1dcf','\u1dd0','\u1dd1', + '\u1dd2','\u1dd3','\u1dd4','\u1dd5','\u1dd6','\u1dd7','\u1dd8', + '\u1dd9','\u1dda','\u1ddb','\u1ddc','\u1ddd','\u1dde','\u1ddf', + '\u1de0','\u1de1','\u1de2','\u1de3','\u1de4','\u1de5','\u1de6', + '\u1de7','\u1de8','\u1de9','\u1dea','\u1deb','\u1dec','\u1ded', + '\u1dee','\u1def','\u1df0','\u1df1','\u1df2','\u1df3','\u1df4', + '\u1df5','\u1df6','\u1df7','\u1df8','\u1df9','\u1dfa','\u1dfb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+7424; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void f1e00() { + char[] cs = new char[] { + '\u1e00','\u1e01','\u1e02','\u1e03','\u1e04','\u1e05','\u1e06', + '\u1e07','\u1e08','\u1e09','\u1e0a','\u1e0b','\u1e0c','\u1e0d', + '\u1e0e','\u1e0f','\u1e10','\u1e11','\u1e12','\u1e13','\u1e14', + '\u1e15','\u1e16','\u1e17','\u1e18','\u1e19','\u1e1a','\u1e1b', + '\u1e1c','\u1e1d','\u1e1e','\u1e1f','\u1e20','\u1e21','\u1e22', + '\u1e23','\u1e24','\u1e25','\u1e26','\u1e27','\u1e28','\u1e29', + '\u1e2a','\u1e2b','\u1e2c','\u1e2d','\u1e2e','\u1e2f','\u1e30', + '\u1e31','\u1e32','\u1e33','\u1e34','\u1e35','\u1e36','\u1e37', + '\u1e38','\u1e39','\u1e3a','\u1e3b','\u1e3c','\u1e3d','\u1e3e', + '\u1e3f','\u1e40','\u1e41','\u1e42','\u1e43','\u1e44','\u1e45', + '\u1e46','\u1e47','\u1e48','\u1e49','\u1e4a','\u1e4b','\u1e4c', + '\u1e4d','\u1e4e','\u1e4f','\u1e50','\u1e51','\u1e52','\u1e53', + '\u1e54','\u1e55','\u1e56','\u1e57','\u1e58','\u1e59','\u1e5a', + '\u1e5b','\u1e5c','\u1e5d','\u1e5e','\u1e5f','\u1e60','\u1e61', + '\u1e62','\u1e63','\u1e64','\u1e65','\u1e66','\u1e67','\u1e68', + '\u1e69','\u1e6a','\u1e6b','\u1e6c','\u1e6d','\u1e6e','\u1e6f', + '\u1e70','\u1e71','\u1e72','\u1e73','\u1e74','\u1e75','\u1e76', + '\u1e77','\u1e78','\u1e79','\u1e7a','\u1e7b','\u1e7c','\u1e7d', + '\u1e7e','\u1e7f','\u1e80','\u1e81','\u1e82','\u1e83','\u1e84', + '\u1e85','\u1e86','\u1e87','\u1e88','\u1e89','\u1e8a','\u1e8b', + '\u1e8c','\u1e8d','\u1e8e','\u1e8f','\u1e90','\u1e91','\u1e92', + '\u1e93','\u1e94','\u1e95','\u1e96','\u1e97','\u1e98','\u1e99', + '\u1e9a','\u1e9b','\u1e9c','\u1e9d','\u1e9e','\u1e9f','\u1ea0', + '\u1ea1','\u1ea2','\u1ea3','\u1ea4','\u1ea5','\u1ea6','\u1ea7', + '\u1ea8','\u1ea9','\u1eaa','\u1eab','\u1eac','\u1ead','\u1eae', + '\u1eaf','\u1eb0','\u1eb1','\u1eb2','\u1eb3','\u1eb4','\u1eb5', + '\u1eb6','\u1eb7','\u1eb8','\u1eb9','\u1eba','\u1ebb','\u1ebc', + '\u1ebd','\u1ebe','\u1ebf','\u1ec0','\u1ec1','\u1ec2','\u1ec3', + '\u1ec4','\u1ec5','\u1ec6','\u1ec7','\u1ec8','\u1ec9','\u1eca', + '\u1ecb','\u1ecc','\u1ecd','\u1ece','\u1ecf','\u1ed0','\u1ed1', + '\u1ed2','\u1ed3','\u1ed4','\u1ed5','\u1ed6','\u1ed7','\u1ed8', + '\u1ed9','\u1eda','\u1edb','\u1edc','\u1edd','\u1ede','\u1edf', + '\u1ee0','\u1ee1','\u1ee2','\u1ee3','\u1ee4','\u1ee5','\u1ee6', + '\u1ee7','\u1ee8','\u1ee9','\u1eea','\u1eeb','\u1eec','\u1eed', + '\u1eee','\u1eef','\u1ef0','\u1ef1','\u1ef2','\u1ef3','\u1ef4', + '\u1ef5','\u1ef6','\u1ef7','\u1ef8','\u1ef9','\u1efa','\u1efb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+7680; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void f1f00() { + char[] cs = new char[] { + '\u1f00','\u1f01','\u1f02','\u1f03','\u1f04','\u1f05','\u1f06', + '\u1f07','\u1f08','\u1f09','\u1f0a','\u1f0b','\u1f0c','\u1f0d', + '\u1f0e','\u1f0f','\u1f10','\u1f11','\u1f12','\u1f13','\u1f14', + '\u1f15','\u1f16','\u1f17','\u1f18','\u1f19','\u1f1a','\u1f1b', + '\u1f1c','\u1f1d','\u1f1e','\u1f1f','\u1f20','\u1f21','\u1f22', + '\u1f23','\u1f24','\u1f25','\u1f26','\u1f27','\u1f28','\u1f29', + '\u1f2a','\u1f2b','\u1f2c','\u1f2d','\u1f2e','\u1f2f','\u1f30', + '\u1f31','\u1f32','\u1f33','\u1f34','\u1f35','\u1f36','\u1f37', + '\u1f38','\u1f39','\u1f3a','\u1f3b','\u1f3c','\u1f3d','\u1f3e', + '\u1f3f','\u1f40','\u1f41','\u1f42','\u1f43','\u1f44','\u1f45', + '\u1f46','\u1f47','\u1f48','\u1f49','\u1f4a','\u1f4b','\u1f4c', + '\u1f4d','\u1f4e','\u1f4f','\u1f50','\u1f51','\u1f52','\u1f53', + '\u1f54','\u1f55','\u1f56','\u1f57','\u1f58','\u1f59','\u1f5a', + '\u1f5b','\u1f5c','\u1f5d','\u1f5e','\u1f5f','\u1f60','\u1f61', + '\u1f62','\u1f63','\u1f64','\u1f65','\u1f66','\u1f67','\u1f68', + '\u1f69','\u1f6a','\u1f6b','\u1f6c','\u1f6d','\u1f6e','\u1f6f', + '\u1f70','\u1f71','\u1f72','\u1f73','\u1f74','\u1f75','\u1f76', + '\u1f77','\u1f78','\u1f79','\u1f7a','\u1f7b','\u1f7c','\u1f7d', + '\u1f7e','\u1f7f','\u1f80','\u1f81','\u1f82','\u1f83','\u1f84', + '\u1f85','\u1f86','\u1f87','\u1f88','\u1f89','\u1f8a','\u1f8b', + '\u1f8c','\u1f8d','\u1f8e','\u1f8f','\u1f90','\u1f91','\u1f92', + '\u1f93','\u1f94','\u1f95','\u1f96','\u1f97','\u1f98','\u1f99', + '\u1f9a','\u1f9b','\u1f9c','\u1f9d','\u1f9e','\u1f9f','\u1fa0', + '\u1fa1','\u1fa2','\u1fa3','\u1fa4','\u1fa5','\u1fa6','\u1fa7', + '\u1fa8','\u1fa9','\u1faa','\u1fab','\u1fac','\u1fad','\u1fae', + '\u1faf','\u1fb0','\u1fb1','\u1fb2','\u1fb3','\u1fb4','\u1fb5', + '\u1fb6','\u1fb7','\u1fb8','\u1fb9','\u1fba','\u1fbb','\u1fbc', + '\u1fbd','\u1fbe','\u1fbf','\u1fc0','\u1fc1','\u1fc2','\u1fc3', + '\u1fc4','\u1fc5','\u1fc6','\u1fc7','\u1fc8','\u1fc9','\u1fca', + '\u1fcb','\u1fcc','\u1fcd','\u1fce','\u1fcf','\u1fd0','\u1fd1', + '\u1fd2','\u1fd3','\u1fd4','\u1fd5','\u1fd6','\u1fd7','\u1fd8', + '\u1fd9','\u1fda','\u1fdb','\u1fdc','\u1fdd','\u1fde','\u1fdf', + '\u1fe0','\u1fe1','\u1fe2','\u1fe3','\u1fe4','\u1fe5','\u1fe6', + '\u1fe7','\u1fe8','\u1fe9','\u1fea','\u1feb','\u1fec','\u1fed', + '\u1fee','\u1fef','\u1ff0','\u1ff1','\u1ff2','\u1ff3','\u1ff4', + '\u1ff5','\u1ff6','\u1ff7','\u1ff8','\u1ff9','\u1ffa','\u1ffb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+7936; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void f2000() { + char[] cs = new char[] { + '\u2000','\u2001','\u2002','\u2003','\u2004','\u2005','\u2006', + '\u2007','\u2008','\u2009','\u200a','\u200b','\u200c','\u200d', + '\u200e','\u200f','\u2010','\u2011','\u2012','\u2013','\u2014', + '\u2015','\u2016','\u2017','\u2018','\u2019','\u201a','\u201b', + '\u201c','\u201d','\u201e','\u201f','\u2020','\u2021','\u2022', + '\u2023','\u2024','\u2025','\u2026','\u2027','\u2028','\u2029', + '\u202a','\u202b','\u202c','\u202d','\u202e','\u202f','\u2030', + '\u2031','\u2032','\u2033','\u2034','\u2035','\u2036','\u2037', + '\u2038','\u2039','\u203a','\u203b','\u203c','\u203d','\u203e', + '\u203f','\u2040','\u2041','\u2042','\u2043','\u2044','\u2045', + '\u2046','\u2047','\u2048','\u2049','\u204a','\u204b','\u204c', + '\u204d','\u204e','\u204f','\u2050','\u2051','\u2052','\u2053', + '\u2054','\u2055','\u2056','\u2057','\u2058','\u2059','\u205a', + '\u205b','\u205c','\u205d','\u205e','\u205f','\u2060','\u2061', + '\u2062','\u2063','\u2064','\u2065','\u2066','\u2067','\u2068', + '\u2069','\u206a','\u206b','\u206c','\u206d','\u206e','\u206f', + '\u2070','\u2071','\u2072','\u2073','\u2074','\u2075','\u2076', + '\u2077','\u2078','\u2079','\u207a','\u207b','\u207c','\u207d', + '\u207e','\u207f','\u2080','\u2081','\u2082','\u2083','\u2084', + '\u2085','\u2086','\u2087','\u2088','\u2089','\u208a','\u208b', + '\u208c','\u208d','\u208e','\u208f','\u2090','\u2091','\u2092', + '\u2093','\u2094','\u2095','\u2096','\u2097','\u2098','\u2099', + '\u209a','\u209b','\u209c','\u209d','\u209e','\u209f','\u20a0', + '\u20a1','\u20a2','\u20a3','\u20a4','\u20a5','\u20a6','\u20a7', + '\u20a8','\u20a9','\u20aa','\u20ab','\u20ac','\u20ad','\u20ae', + '\u20af','\u20b0','\u20b1','\u20b2','\u20b3','\u20b4','\u20b5', + '\u20b6','\u20b7','\u20b8','\u20b9','\u20ba','\u20bb','\u20bc', + '\u20bd','\u20be','\u20bf','\u20c0','\u20c1','\u20c2','\u20c3', + '\u20c4','\u20c5','\u20c6','\u20c7','\u20c8','\u20c9','\u20ca', + '\u20cb','\u20cc','\u20cd','\u20ce','\u20cf','\u20d0','\u20d1', + '\u20d2','\u20d3','\u20d4','\u20d5','\u20d6','\u20d7','\u20d8', + '\u20d9','\u20da','\u20db','\u20dc','\u20dd','\u20de','\u20df', + '\u20e0','\u20e1','\u20e2','\u20e3','\u20e4','\u20e5','\u20e6', + '\u20e7','\u20e8','\u20e9','\u20ea','\u20eb','\u20ec','\u20ed', + '\u20ee','\u20ef','\u20f0','\u20f1','\u20f2','\u20f3','\u20f4', + '\u20f5','\u20f6','\u20f7','\u20f8','\u20f9','\u20fa','\u20fb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+8192; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void f2100() { + char[] cs = new char[] { + '\u2100','\u2101','\u2102','\u2103','\u2104','\u2105','\u2106', + '\u2107','\u2108','\u2109','\u210a','\u210b','\u210c','\u210d', + '\u210e','\u210f','\u2110','\u2111','\u2112','\u2113','\u2114', + '\u2115','\u2116','\u2117','\u2118','\u2119','\u211a','\u211b', + '\u211c','\u211d','\u211e','\u211f','\u2120','\u2121','\u2122', + '\u2123','\u2124','\u2125','\u2126','\u2127','\u2128','\u2129', + '\u212a','\u212b','\u212c','\u212d','\u212e','\u212f','\u2130', + '\u2131','\u2132','\u2133','\u2134','\u2135','\u2136','\u2137', + '\u2138','\u2139','\u213a','\u213b','\u213c','\u213d','\u213e', + '\u213f','\u2140','\u2141','\u2142','\u2143','\u2144','\u2145', + '\u2146','\u2147','\u2148','\u2149','\u214a','\u214b','\u214c', + '\u214d','\u214e','\u214f','\u2150','\u2151','\u2152','\u2153', + '\u2154','\u2155','\u2156','\u2157','\u2158','\u2159','\u215a', + '\u215b','\u215c','\u215d','\u215e','\u215f','\u2160','\u2161', + '\u2162','\u2163','\u2164','\u2165','\u2166','\u2167','\u2168', + '\u2169','\u216a','\u216b','\u216c','\u216d','\u216e','\u216f', + '\u2170','\u2171','\u2172','\u2173','\u2174','\u2175','\u2176', + '\u2177','\u2178','\u2179','\u217a','\u217b','\u217c','\u217d', + '\u217e','\u217f','\u2180','\u2181','\u2182','\u2183','\u2184', + '\u2185','\u2186','\u2187','\u2188','\u2189','\u218a','\u218b', + '\u218c','\u218d','\u218e','\u218f','\u2190','\u2191','\u2192', + '\u2193','\u2194','\u2195','\u2196','\u2197','\u2198','\u2199', + '\u219a','\u219b','\u219c','\u219d','\u219e','\u219f','\u21a0', + '\u21a1','\u21a2','\u21a3','\u21a4','\u21a5','\u21a6','\u21a7', + '\u21a8','\u21a9','\u21aa','\u21ab','\u21ac','\u21ad','\u21ae', + '\u21af','\u21b0','\u21b1','\u21b2','\u21b3','\u21b4','\u21b5', + '\u21b6','\u21b7','\u21b8','\u21b9','\u21ba','\u21bb','\u21bc', + '\u21bd','\u21be','\u21bf','\u21c0','\u21c1','\u21c2','\u21c3', + '\u21c4','\u21c5','\u21c6','\u21c7','\u21c8','\u21c9','\u21ca', + '\u21cb','\u21cc','\u21cd','\u21ce','\u21cf','\u21d0','\u21d1', + '\u21d2','\u21d3','\u21d4','\u21d5','\u21d6','\u21d7','\u21d8', + '\u21d9','\u21da','\u21db','\u21dc','\u21dd','\u21de','\u21df', + '\u21e0','\u21e1','\u21e2','\u21e3','\u21e4','\u21e5','\u21e6', + '\u21e7','\u21e8','\u21e9','\u21ea','\u21eb','\u21ec','\u21ed', + '\u21ee','\u21ef','\u21f0','\u21f1','\u21f2','\u21f3','\u21f4', + '\u21f5','\u21f6','\u21f7','\u21f8','\u21f9','\u21fa','\u21fb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+8448; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void f2200() { + char[] cs = new char[] { + '\u2200','\u2201','\u2202','\u2203','\u2204','\u2205','\u2206', + '\u2207','\u2208','\u2209','\u220a','\u220b','\u220c','\u220d', + '\u220e','\u220f','\u2210','\u2211','\u2212','\u2213','\u2214', + '\u2215','\u2216','\u2217','\u2218','\u2219','\u221a','\u221b', + '\u221c','\u221d','\u221e','\u221f','\u2220','\u2221','\u2222', + '\u2223','\u2224','\u2225','\u2226','\u2227','\u2228','\u2229', + '\u222a','\u222b','\u222c','\u222d','\u222e','\u222f','\u2230', + '\u2231','\u2232','\u2233','\u2234','\u2235','\u2236','\u2237', + '\u2238','\u2239','\u223a','\u223b','\u223c','\u223d','\u223e', + '\u223f','\u2240','\u2241','\u2242','\u2243','\u2244','\u2245', + '\u2246','\u2247','\u2248','\u2249','\u224a','\u224b','\u224c', + '\u224d','\u224e','\u224f','\u2250','\u2251','\u2252','\u2253', + '\u2254','\u2255','\u2256','\u2257','\u2258','\u2259','\u225a', + '\u225b','\u225c','\u225d','\u225e','\u225f','\u2260','\u2261', + '\u2262','\u2263','\u2264','\u2265','\u2266','\u2267','\u2268', + '\u2269','\u226a','\u226b','\u226c','\u226d','\u226e','\u226f', + '\u2270','\u2271','\u2272','\u2273','\u2274','\u2275','\u2276', + '\u2277','\u2278','\u2279','\u227a','\u227b','\u227c','\u227d', + '\u227e','\u227f','\u2280','\u2281','\u2282','\u2283','\u2284', + '\u2285','\u2286','\u2287','\u2288','\u2289','\u228a','\u228b', + '\u228c','\u228d','\u228e','\u228f','\u2290','\u2291','\u2292', + '\u2293','\u2294','\u2295','\u2296','\u2297','\u2298','\u2299', + '\u229a','\u229b','\u229c','\u229d','\u229e','\u229f','\u22a0', + '\u22a1','\u22a2','\u22a3','\u22a4','\u22a5','\u22a6','\u22a7', + '\u22a8','\u22a9','\u22aa','\u22ab','\u22ac','\u22ad','\u22ae', + '\u22af','\u22b0','\u22b1','\u22b2','\u22b3','\u22b4','\u22b5', + '\u22b6','\u22b7','\u22b8','\u22b9','\u22ba','\u22bb','\u22bc', + '\u22bd','\u22be','\u22bf','\u22c0','\u22c1','\u22c2','\u22c3', + '\u22c4','\u22c5','\u22c6','\u22c7','\u22c8','\u22c9','\u22ca', + '\u22cb','\u22cc','\u22cd','\u22ce','\u22cf','\u22d0','\u22d1', + '\u22d2','\u22d3','\u22d4','\u22d5','\u22d6','\u22d7','\u22d8', + '\u22d9','\u22da','\u22db','\u22dc','\u22dd','\u22de','\u22df', + '\u22e0','\u22e1','\u22e2','\u22e3','\u22e4','\u22e5','\u22e6', + '\u22e7','\u22e8','\u22e9','\u22ea','\u22eb','\u22ec','\u22ed', + '\u22ee','\u22ef','\u22f0','\u22f1','\u22f2','\u22f3','\u22f4', + '\u22f5','\u22f6','\u22f7','\u22f8','\u22f9','\u22fa','\u22fb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+8704; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void f2300() { + char[] cs = new char[] { + '\u2300','\u2301','\u2302','\u2303','\u2304','\u2305','\u2306', + '\u2307','\u2308','\u2309','\u230a','\u230b','\u230c','\u230d', + '\u230e','\u230f','\u2310','\u2311','\u2312','\u2313','\u2314', + '\u2315','\u2316','\u2317','\u2318','\u2319','\u231a','\u231b', + '\u231c','\u231d','\u231e','\u231f','\u2320','\u2321','\u2322', + '\u2323','\u2324','\u2325','\u2326','\u2327','\u2328','\u2329', + '\u232a','\u232b','\u232c','\u232d','\u232e','\u232f','\u2330', + '\u2331','\u2332','\u2333','\u2334','\u2335','\u2336','\u2337', + '\u2338','\u2339','\u233a','\u233b','\u233c','\u233d','\u233e', + '\u233f','\u2340','\u2341','\u2342','\u2343','\u2344','\u2345', + '\u2346','\u2347','\u2348','\u2349','\u234a','\u234b','\u234c', + '\u234d','\u234e','\u234f','\u2350','\u2351','\u2352','\u2353', + '\u2354','\u2355','\u2356','\u2357','\u2358','\u2359','\u235a', + '\u235b','\u235c','\u235d','\u235e','\u235f','\u2360','\u2361', + '\u2362','\u2363','\u2364','\u2365','\u2366','\u2367','\u2368', + '\u2369','\u236a','\u236b','\u236c','\u236d','\u236e','\u236f', + '\u2370','\u2371','\u2372','\u2373','\u2374','\u2375','\u2376', + '\u2377','\u2378','\u2379','\u237a','\u237b','\u237c','\u237d', + '\u237e','\u237f','\u2380','\u2381','\u2382','\u2383','\u2384', + '\u2385','\u2386','\u2387','\u2388','\u2389','\u238a','\u238b', + '\u238c','\u238d','\u238e','\u238f','\u2390','\u2391','\u2392', + '\u2393','\u2394','\u2395','\u2396','\u2397','\u2398','\u2399', + '\u239a','\u239b','\u239c','\u239d','\u239e','\u239f','\u23a0', + '\u23a1','\u23a2','\u23a3','\u23a4','\u23a5','\u23a6','\u23a7', + '\u23a8','\u23a9','\u23aa','\u23ab','\u23ac','\u23ad','\u23ae', + '\u23af','\u23b0','\u23b1','\u23b2','\u23b3','\u23b4','\u23b5', + '\u23b6','\u23b7','\u23b8','\u23b9','\u23ba','\u23bb','\u23bc', + '\u23bd','\u23be','\u23bf','\u23c0','\u23c1','\u23c2','\u23c3', + '\u23c4','\u23c5','\u23c6','\u23c7','\u23c8','\u23c9','\u23ca', + '\u23cb','\u23cc','\u23cd','\u23ce','\u23cf','\u23d0','\u23d1', + '\u23d2','\u23d3','\u23d4','\u23d5','\u23d6','\u23d7','\u23d8', + '\u23d9','\u23da','\u23db','\u23dc','\u23dd','\u23de','\u23df', + '\u23e0','\u23e1','\u23e2','\u23e3','\u23e4','\u23e5','\u23e6', + '\u23e7','\u23e8','\u23e9','\u23ea','\u23eb','\u23ec','\u23ed', + '\u23ee','\u23ef','\u23f0','\u23f1','\u23f2','\u23f3','\u23f4', + '\u23f5','\u23f6','\u23f7','\u23f8','\u23f9','\u23fa','\u23fb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+8960; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void f2400() { + char[] cs = new char[] { + '\u2400','\u2401','\u2402','\u2403','\u2404','\u2405','\u2406', + '\u2407','\u2408','\u2409','\u240a','\u240b','\u240c','\u240d', + '\u240e','\u240f','\u2410','\u2411','\u2412','\u2413','\u2414', + '\u2415','\u2416','\u2417','\u2418','\u2419','\u241a','\u241b', + '\u241c','\u241d','\u241e','\u241f','\u2420','\u2421','\u2422', + '\u2423','\u2424','\u2425','\u2426','\u2427','\u2428','\u2429', + '\u242a','\u242b','\u242c','\u242d','\u242e','\u242f','\u2430', + '\u2431','\u2432','\u2433','\u2434','\u2435','\u2436','\u2437', + '\u2438','\u2439','\u243a','\u243b','\u243c','\u243d','\u243e', + '\u243f','\u2440','\u2441','\u2442','\u2443','\u2444','\u2445', + '\u2446','\u2447','\u2448','\u2449','\u244a','\u244b','\u244c', + '\u244d','\u244e','\u244f','\u2450','\u2451','\u2452','\u2453', + '\u2454','\u2455','\u2456','\u2457','\u2458','\u2459','\u245a', + '\u245b','\u245c','\u245d','\u245e','\u245f','\u2460','\u2461', + '\u2462','\u2463','\u2464','\u2465','\u2466','\u2467','\u2468', + '\u2469','\u246a','\u246b','\u246c','\u246d','\u246e','\u246f', + '\u2470','\u2471','\u2472','\u2473','\u2474','\u2475','\u2476', + '\u2477','\u2478','\u2479','\u247a','\u247b','\u247c','\u247d', + '\u247e','\u247f','\u2480','\u2481','\u2482','\u2483','\u2484', + '\u2485','\u2486','\u2487','\u2488','\u2489','\u248a','\u248b', + '\u248c','\u248d','\u248e','\u248f','\u2490','\u2491','\u2492', + '\u2493','\u2494','\u2495','\u2496','\u2497','\u2498','\u2499', + '\u249a','\u249b','\u249c','\u249d','\u249e','\u249f','\u24a0', + '\u24a1','\u24a2','\u24a3','\u24a4','\u24a5','\u24a6','\u24a7', + '\u24a8','\u24a9','\u24aa','\u24ab','\u24ac','\u24ad','\u24ae', + '\u24af','\u24b0','\u24b1','\u24b2','\u24b3','\u24b4','\u24b5', + '\u24b6','\u24b7','\u24b8','\u24b9','\u24ba','\u24bb','\u24bc', + '\u24bd','\u24be','\u24bf','\u24c0','\u24c1','\u24c2','\u24c3', + '\u24c4','\u24c5','\u24c6','\u24c7','\u24c8','\u24c9','\u24ca', + '\u24cb','\u24cc','\u24cd','\u24ce','\u24cf','\u24d0','\u24d1', + '\u24d2','\u24d3','\u24d4','\u24d5','\u24d6','\u24d7','\u24d8', + '\u24d9','\u24da','\u24db','\u24dc','\u24dd','\u24de','\u24df', + '\u24e0','\u24e1','\u24e2','\u24e3','\u24e4','\u24e5','\u24e6', + '\u24e7','\u24e8','\u24e9','\u24ea','\u24eb','\u24ec','\u24ed', + '\u24ee','\u24ef','\u24f0','\u24f1','\u24f2','\u24f3','\u24f4', + '\u24f5','\u24f6','\u24f7','\u24f8','\u24f9','\u24fa','\u24fb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+9216; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void f2500() { + char[] cs = new char[] { + '\u2500','\u2501','\u2502','\u2503','\u2504','\u2505','\u2506', + '\u2507','\u2508','\u2509','\u250a','\u250b','\u250c','\u250d', + '\u250e','\u250f','\u2510','\u2511','\u2512','\u2513','\u2514', + '\u2515','\u2516','\u2517','\u2518','\u2519','\u251a','\u251b', + '\u251c','\u251d','\u251e','\u251f','\u2520','\u2521','\u2522', + '\u2523','\u2524','\u2525','\u2526','\u2527','\u2528','\u2529', + '\u252a','\u252b','\u252c','\u252d','\u252e','\u252f','\u2530', + '\u2531','\u2532','\u2533','\u2534','\u2535','\u2536','\u2537', + '\u2538','\u2539','\u253a','\u253b','\u253c','\u253d','\u253e', + '\u253f','\u2540','\u2541','\u2542','\u2543','\u2544','\u2545', + '\u2546','\u2547','\u2548','\u2549','\u254a','\u254b','\u254c', + '\u254d','\u254e','\u254f','\u2550','\u2551','\u2552','\u2553', + '\u2554','\u2555','\u2556','\u2557','\u2558','\u2559','\u255a', + '\u255b','\u255c','\u255d','\u255e','\u255f','\u2560','\u2561', + '\u2562','\u2563','\u2564','\u2565','\u2566','\u2567','\u2568', + '\u2569','\u256a','\u256b','\u256c','\u256d','\u256e','\u256f', + '\u2570','\u2571','\u2572','\u2573','\u2574','\u2575','\u2576', + '\u2577','\u2578','\u2579','\u257a','\u257b','\u257c','\u257d', + '\u257e','\u257f','\u2580','\u2581','\u2582','\u2583','\u2584', + '\u2585','\u2586','\u2587','\u2588','\u2589','\u258a','\u258b', + '\u258c','\u258d','\u258e','\u258f','\u2590','\u2591','\u2592', + '\u2593','\u2594','\u2595','\u2596','\u2597','\u2598','\u2599', + '\u259a','\u259b','\u259c','\u259d','\u259e','\u259f','\u25a0', + '\u25a1','\u25a2','\u25a3','\u25a4','\u25a5','\u25a6','\u25a7', + '\u25a8','\u25a9','\u25aa','\u25ab','\u25ac','\u25ad','\u25ae', + '\u25af','\u25b0','\u25b1','\u25b2','\u25b3','\u25b4','\u25b5', + '\u25b6','\u25b7','\u25b8','\u25b9','\u25ba','\u25bb','\u25bc', + '\u25bd','\u25be','\u25bf','\u25c0','\u25c1','\u25c2','\u25c3', + '\u25c4','\u25c5','\u25c6','\u25c7','\u25c8','\u25c9','\u25ca', + '\u25cb','\u25cc','\u25cd','\u25ce','\u25cf','\u25d0','\u25d1', + '\u25d2','\u25d3','\u25d4','\u25d5','\u25d6','\u25d7','\u25d8', + '\u25d9','\u25da','\u25db','\u25dc','\u25dd','\u25de','\u25df', + '\u25e0','\u25e1','\u25e2','\u25e3','\u25e4','\u25e5','\u25e6', + '\u25e7','\u25e8','\u25e9','\u25ea','\u25eb','\u25ec','\u25ed', + '\u25ee','\u25ef','\u25f0','\u25f1','\u25f2','\u25f3','\u25f4', + '\u25f5','\u25f6','\u25f7','\u25f8','\u25f9','\u25fa','\u25fb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+9472; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void f2600() { + char[] cs = new char[] { + '\u2600','\u2601','\u2602','\u2603','\u2604','\u2605','\u2606', + '\u2607','\u2608','\u2609','\u260a','\u260b','\u260c','\u260d', + '\u260e','\u260f','\u2610','\u2611','\u2612','\u2613','\u2614', + '\u2615','\u2616','\u2617','\u2618','\u2619','\u261a','\u261b', + '\u261c','\u261d','\u261e','\u261f','\u2620','\u2621','\u2622', + '\u2623','\u2624','\u2625','\u2626','\u2627','\u2628','\u2629', + '\u262a','\u262b','\u262c','\u262d','\u262e','\u262f','\u2630', + '\u2631','\u2632','\u2633','\u2634','\u2635','\u2636','\u2637', + '\u2638','\u2639','\u263a','\u263b','\u263c','\u263d','\u263e', + '\u263f','\u2640','\u2641','\u2642','\u2643','\u2644','\u2645', + '\u2646','\u2647','\u2648','\u2649','\u264a','\u264b','\u264c', + '\u264d','\u264e','\u264f','\u2650','\u2651','\u2652','\u2653', + '\u2654','\u2655','\u2656','\u2657','\u2658','\u2659','\u265a', + '\u265b','\u265c','\u265d','\u265e','\u265f','\u2660','\u2661', + '\u2662','\u2663','\u2664','\u2665','\u2666','\u2667','\u2668', + '\u2669','\u266a','\u266b','\u266c','\u266d','\u266e','\u266f', + '\u2670','\u2671','\u2672','\u2673','\u2674','\u2675','\u2676', + '\u2677','\u2678','\u2679','\u267a','\u267b','\u267c','\u267d', + '\u267e','\u267f','\u2680','\u2681','\u2682','\u2683','\u2684', + '\u2685','\u2686','\u2687','\u2688','\u2689','\u268a','\u268b', + '\u268c','\u268d','\u268e','\u268f','\u2690','\u2691','\u2692', + '\u2693','\u2694','\u2695','\u2696','\u2697','\u2698','\u2699', + '\u269a','\u269b','\u269c','\u269d','\u269e','\u269f','\u26a0', + '\u26a1','\u26a2','\u26a3','\u26a4','\u26a5','\u26a6','\u26a7', + '\u26a8','\u26a9','\u26aa','\u26ab','\u26ac','\u26ad','\u26ae', + '\u26af','\u26b0','\u26b1','\u26b2','\u26b3','\u26b4','\u26b5', + '\u26b6','\u26b7','\u26b8','\u26b9','\u26ba','\u26bb','\u26bc', + '\u26bd','\u26be','\u26bf','\u26c0','\u26c1','\u26c2','\u26c3', + '\u26c4','\u26c5','\u26c6','\u26c7','\u26c8','\u26c9','\u26ca', + '\u26cb','\u26cc','\u26cd','\u26ce','\u26cf','\u26d0','\u26d1', + '\u26d2','\u26d3','\u26d4','\u26d5','\u26d6','\u26d7','\u26d8', + '\u26d9','\u26da','\u26db','\u26dc','\u26dd','\u26de','\u26df', + '\u26e0','\u26e1','\u26e2','\u26e3','\u26e4','\u26e5','\u26e6', + '\u26e7','\u26e8','\u26e9','\u26ea','\u26eb','\u26ec','\u26ed', + '\u26ee','\u26ef','\u26f0','\u26f1','\u26f2','\u26f3','\u26f4', + '\u26f5','\u26f6','\u26f7','\u26f8','\u26f9','\u26fa','\u26fb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+9728; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void f2700() { + char[] cs = new char[] { + '\u2700','\u2701','\u2702','\u2703','\u2704','\u2705','\u2706', + '\u2707','\u2708','\u2709','\u270a','\u270b','\u270c','\u270d', + '\u270e','\u270f','\u2710','\u2711','\u2712','\u2713','\u2714', + '\u2715','\u2716','\u2717','\u2718','\u2719','\u271a','\u271b', + '\u271c','\u271d','\u271e','\u271f','\u2720','\u2721','\u2722', + '\u2723','\u2724','\u2725','\u2726','\u2727','\u2728','\u2729', + '\u272a','\u272b','\u272c','\u272d','\u272e','\u272f','\u2730', + '\u2731','\u2732','\u2733','\u2734','\u2735','\u2736','\u2737', + '\u2738','\u2739','\u273a','\u273b','\u273c','\u273d','\u273e', + '\u273f','\u2740','\u2741','\u2742','\u2743','\u2744','\u2745', + '\u2746','\u2747','\u2748','\u2749','\u274a','\u274b','\u274c', + '\u274d','\u274e','\u274f','\u2750','\u2751','\u2752','\u2753', + '\u2754','\u2755','\u2756','\u2757','\u2758','\u2759','\u275a', + '\u275b','\u275c','\u275d','\u275e','\u275f','\u2760','\u2761', + '\u2762','\u2763','\u2764','\u2765','\u2766','\u2767','\u2768', + '\u2769','\u276a','\u276b','\u276c','\u276d','\u276e','\u276f', + '\u2770','\u2771','\u2772','\u2773','\u2774','\u2775','\u2776', + '\u2777','\u2778','\u2779','\u277a','\u277b','\u277c','\u277d', + '\u277e','\u277f','\u2780','\u2781','\u2782','\u2783','\u2784', + '\u2785','\u2786','\u2787','\u2788','\u2789','\u278a','\u278b', + '\u278c','\u278d','\u278e','\u278f','\u2790','\u2791','\u2792', + '\u2793','\u2794','\u2795','\u2796','\u2797','\u2798','\u2799', + '\u279a','\u279b','\u279c','\u279d','\u279e','\u279f','\u27a0', + '\u27a1','\u27a2','\u27a3','\u27a4','\u27a5','\u27a6','\u27a7', + '\u27a8','\u27a9','\u27aa','\u27ab','\u27ac','\u27ad','\u27ae', + '\u27af','\u27b0','\u27b1','\u27b2','\u27b3','\u27b4','\u27b5', + '\u27b6','\u27b7','\u27b8','\u27b9','\u27ba','\u27bb','\u27bc', + '\u27bd','\u27be','\u27bf','\u27c0','\u27c1','\u27c2','\u27c3', + '\u27c4','\u27c5','\u27c6','\u27c7','\u27c8','\u27c9','\u27ca', + '\u27cb','\u27cc','\u27cd','\u27ce','\u27cf','\u27d0','\u27d1', + '\u27d2','\u27d3','\u27d4','\u27d5','\u27d6','\u27d7','\u27d8', + '\u27d9','\u27da','\u27db','\u27dc','\u27dd','\u27de','\u27df', + '\u27e0','\u27e1','\u27e2','\u27e3','\u27e4','\u27e5','\u27e6', + '\u27e7','\u27e8','\u27e9','\u27ea','\u27eb','\u27ec','\u27ed', + '\u27ee','\u27ef','\u27f0','\u27f1','\u27f2','\u27f3','\u27f4', + '\u27f5','\u27f6','\u27f7','\u27f8','\u27f9','\u27fa','\u27fb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+9984; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void f2800() { + char[] cs = new char[] { + '\u2800','\u2801','\u2802','\u2803','\u2804','\u2805','\u2806', + '\u2807','\u2808','\u2809','\u280a','\u280b','\u280c','\u280d', + '\u280e','\u280f','\u2810','\u2811','\u2812','\u2813','\u2814', + '\u2815','\u2816','\u2817','\u2818','\u2819','\u281a','\u281b', + '\u281c','\u281d','\u281e','\u281f','\u2820','\u2821','\u2822', + '\u2823','\u2824','\u2825','\u2826','\u2827','\u2828','\u2829', + '\u282a','\u282b','\u282c','\u282d','\u282e','\u282f','\u2830', + '\u2831','\u2832','\u2833','\u2834','\u2835','\u2836','\u2837', + '\u2838','\u2839','\u283a','\u283b','\u283c','\u283d','\u283e', + '\u283f','\u2840','\u2841','\u2842','\u2843','\u2844','\u2845', + '\u2846','\u2847','\u2848','\u2849','\u284a','\u284b','\u284c', + '\u284d','\u284e','\u284f','\u2850','\u2851','\u2852','\u2853', + '\u2854','\u2855','\u2856','\u2857','\u2858','\u2859','\u285a', + '\u285b','\u285c','\u285d','\u285e','\u285f','\u2860','\u2861', + '\u2862','\u2863','\u2864','\u2865','\u2866','\u2867','\u2868', + '\u2869','\u286a','\u286b','\u286c','\u286d','\u286e','\u286f', + '\u2870','\u2871','\u2872','\u2873','\u2874','\u2875','\u2876', + '\u2877','\u2878','\u2879','\u287a','\u287b','\u287c','\u287d', + '\u287e','\u287f','\u2880','\u2881','\u2882','\u2883','\u2884', + '\u2885','\u2886','\u2887','\u2888','\u2889','\u288a','\u288b', + '\u288c','\u288d','\u288e','\u288f','\u2890','\u2891','\u2892', + '\u2893','\u2894','\u2895','\u2896','\u2897','\u2898','\u2899', + '\u289a','\u289b','\u289c','\u289d','\u289e','\u289f','\u28a0', + '\u28a1','\u28a2','\u28a3','\u28a4','\u28a5','\u28a6','\u28a7', + '\u28a8','\u28a9','\u28aa','\u28ab','\u28ac','\u28ad','\u28ae', + '\u28af','\u28b0','\u28b1','\u28b2','\u28b3','\u28b4','\u28b5', + '\u28b6','\u28b7','\u28b8','\u28b9','\u28ba','\u28bb','\u28bc', + '\u28bd','\u28be','\u28bf','\u28c0','\u28c1','\u28c2','\u28c3', + '\u28c4','\u28c5','\u28c6','\u28c7','\u28c8','\u28c9','\u28ca', + '\u28cb','\u28cc','\u28cd','\u28ce','\u28cf','\u28d0','\u28d1', + '\u28d2','\u28d3','\u28d4','\u28d5','\u28d6','\u28d7','\u28d8', + '\u28d9','\u28da','\u28db','\u28dc','\u28dd','\u28de','\u28df', + '\u28e0','\u28e1','\u28e2','\u28e3','\u28e4','\u28e5','\u28e6', + '\u28e7','\u28e8','\u28e9','\u28ea','\u28eb','\u28ec','\u28ed', + '\u28ee','\u28ef','\u28f0','\u28f1','\u28f2','\u28f3','\u28f4', + '\u28f5','\u28f6','\u28f7','\u28f8','\u28f9','\u28fa','\u28fb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+10240; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void f2900() { + char[] cs = new char[] { + '\u2900','\u2901','\u2902','\u2903','\u2904','\u2905','\u2906', + '\u2907','\u2908','\u2909','\u290a','\u290b','\u290c','\u290d', + '\u290e','\u290f','\u2910','\u2911','\u2912','\u2913','\u2914', + '\u2915','\u2916','\u2917','\u2918','\u2919','\u291a','\u291b', + '\u291c','\u291d','\u291e','\u291f','\u2920','\u2921','\u2922', + '\u2923','\u2924','\u2925','\u2926','\u2927','\u2928','\u2929', + '\u292a','\u292b','\u292c','\u292d','\u292e','\u292f','\u2930', + '\u2931','\u2932','\u2933','\u2934','\u2935','\u2936','\u2937', + '\u2938','\u2939','\u293a','\u293b','\u293c','\u293d','\u293e', + '\u293f','\u2940','\u2941','\u2942','\u2943','\u2944','\u2945', + '\u2946','\u2947','\u2948','\u2949','\u294a','\u294b','\u294c', + '\u294d','\u294e','\u294f','\u2950','\u2951','\u2952','\u2953', + '\u2954','\u2955','\u2956','\u2957','\u2958','\u2959','\u295a', + '\u295b','\u295c','\u295d','\u295e','\u295f','\u2960','\u2961', + '\u2962','\u2963','\u2964','\u2965','\u2966','\u2967','\u2968', + '\u2969','\u296a','\u296b','\u296c','\u296d','\u296e','\u296f', + '\u2970','\u2971','\u2972','\u2973','\u2974','\u2975','\u2976', + '\u2977','\u2978','\u2979','\u297a','\u297b','\u297c','\u297d', + '\u297e','\u297f','\u2980','\u2981','\u2982','\u2983','\u2984', + '\u2985','\u2986','\u2987','\u2988','\u2989','\u298a','\u298b', + '\u298c','\u298d','\u298e','\u298f','\u2990','\u2991','\u2992', + '\u2993','\u2994','\u2995','\u2996','\u2997','\u2998','\u2999', + '\u299a','\u299b','\u299c','\u299d','\u299e','\u299f','\u29a0', + '\u29a1','\u29a2','\u29a3','\u29a4','\u29a5','\u29a6','\u29a7', + '\u29a8','\u29a9','\u29aa','\u29ab','\u29ac','\u29ad','\u29ae', + '\u29af','\u29b0','\u29b1','\u29b2','\u29b3','\u29b4','\u29b5', + '\u29b6','\u29b7','\u29b8','\u29b9','\u29ba','\u29bb','\u29bc', + '\u29bd','\u29be','\u29bf','\u29c0','\u29c1','\u29c2','\u29c3', + '\u29c4','\u29c5','\u29c6','\u29c7','\u29c8','\u29c9','\u29ca', + '\u29cb','\u29cc','\u29cd','\u29ce','\u29cf','\u29d0','\u29d1', + '\u29d2','\u29d3','\u29d4','\u29d5','\u29d6','\u29d7','\u29d8', + '\u29d9','\u29da','\u29db','\u29dc','\u29dd','\u29de','\u29df', + '\u29e0','\u29e1','\u29e2','\u29e3','\u29e4','\u29e5','\u29e6', + '\u29e7','\u29e8','\u29e9','\u29ea','\u29eb','\u29ec','\u29ed', + '\u29ee','\u29ef','\u29f0','\u29f1','\u29f2','\u29f3','\u29f4', + '\u29f5','\u29f6','\u29f7','\u29f8','\u29f9','\u29fa','\u29fb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+10496; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void f2a00() { + char[] cs = new char[] { + '\u2a00','\u2a01','\u2a02','\u2a03','\u2a04','\u2a05','\u2a06', + '\u2a07','\u2a08','\u2a09','\u2a0a','\u2a0b','\u2a0c','\u2a0d', + '\u2a0e','\u2a0f','\u2a10','\u2a11','\u2a12','\u2a13','\u2a14', + '\u2a15','\u2a16','\u2a17','\u2a18','\u2a19','\u2a1a','\u2a1b', + '\u2a1c','\u2a1d','\u2a1e','\u2a1f','\u2a20','\u2a21','\u2a22', + '\u2a23','\u2a24','\u2a25','\u2a26','\u2a27','\u2a28','\u2a29', + '\u2a2a','\u2a2b','\u2a2c','\u2a2d','\u2a2e','\u2a2f','\u2a30', + '\u2a31','\u2a32','\u2a33','\u2a34','\u2a35','\u2a36','\u2a37', + '\u2a38','\u2a39','\u2a3a','\u2a3b','\u2a3c','\u2a3d','\u2a3e', + '\u2a3f','\u2a40','\u2a41','\u2a42','\u2a43','\u2a44','\u2a45', + '\u2a46','\u2a47','\u2a48','\u2a49','\u2a4a','\u2a4b','\u2a4c', + '\u2a4d','\u2a4e','\u2a4f','\u2a50','\u2a51','\u2a52','\u2a53', + '\u2a54','\u2a55','\u2a56','\u2a57','\u2a58','\u2a59','\u2a5a', + '\u2a5b','\u2a5c','\u2a5d','\u2a5e','\u2a5f','\u2a60','\u2a61', + '\u2a62','\u2a63','\u2a64','\u2a65','\u2a66','\u2a67','\u2a68', + '\u2a69','\u2a6a','\u2a6b','\u2a6c','\u2a6d','\u2a6e','\u2a6f', + '\u2a70','\u2a71','\u2a72','\u2a73','\u2a74','\u2a75','\u2a76', + '\u2a77','\u2a78','\u2a79','\u2a7a','\u2a7b','\u2a7c','\u2a7d', + '\u2a7e','\u2a7f','\u2a80','\u2a81','\u2a82','\u2a83','\u2a84', + '\u2a85','\u2a86','\u2a87','\u2a88','\u2a89','\u2a8a','\u2a8b', + '\u2a8c','\u2a8d','\u2a8e','\u2a8f','\u2a90','\u2a91','\u2a92', + '\u2a93','\u2a94','\u2a95','\u2a96','\u2a97','\u2a98','\u2a99', + '\u2a9a','\u2a9b','\u2a9c','\u2a9d','\u2a9e','\u2a9f','\u2aa0', + '\u2aa1','\u2aa2','\u2aa3','\u2aa4','\u2aa5','\u2aa6','\u2aa7', + '\u2aa8','\u2aa9','\u2aaa','\u2aab','\u2aac','\u2aad','\u2aae', + '\u2aaf','\u2ab0','\u2ab1','\u2ab2','\u2ab3','\u2ab4','\u2ab5', + '\u2ab6','\u2ab7','\u2ab8','\u2ab9','\u2aba','\u2abb','\u2abc', + '\u2abd','\u2abe','\u2abf','\u2ac0','\u2ac1','\u2ac2','\u2ac3', + '\u2ac4','\u2ac5','\u2ac6','\u2ac7','\u2ac8','\u2ac9','\u2aca', + '\u2acb','\u2acc','\u2acd','\u2ace','\u2acf','\u2ad0','\u2ad1', + '\u2ad2','\u2ad3','\u2ad4','\u2ad5','\u2ad6','\u2ad7','\u2ad8', + '\u2ad9','\u2ada','\u2adb','\u2adc','\u2add','\u2ade','\u2adf', + '\u2ae0','\u2ae1','\u2ae2','\u2ae3','\u2ae4','\u2ae5','\u2ae6', + '\u2ae7','\u2ae8','\u2ae9','\u2aea','\u2aeb','\u2aec','\u2aed', + '\u2aee','\u2aef','\u2af0','\u2af1','\u2af2','\u2af3','\u2af4', + '\u2af5','\u2af6','\u2af7','\u2af8','\u2af9','\u2afa','\u2afb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+10752; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void f2b00() { + char[] cs = new char[] { + '\u2b00','\u2b01','\u2b02','\u2b03','\u2b04','\u2b05','\u2b06', + '\u2b07','\u2b08','\u2b09','\u2b0a','\u2b0b','\u2b0c','\u2b0d', + '\u2b0e','\u2b0f','\u2b10','\u2b11','\u2b12','\u2b13','\u2b14', + '\u2b15','\u2b16','\u2b17','\u2b18','\u2b19','\u2b1a','\u2b1b', + '\u2b1c','\u2b1d','\u2b1e','\u2b1f','\u2b20','\u2b21','\u2b22', + '\u2b23','\u2b24','\u2b25','\u2b26','\u2b27','\u2b28','\u2b29', + '\u2b2a','\u2b2b','\u2b2c','\u2b2d','\u2b2e','\u2b2f','\u2b30', + '\u2b31','\u2b32','\u2b33','\u2b34','\u2b35','\u2b36','\u2b37', + '\u2b38','\u2b39','\u2b3a','\u2b3b','\u2b3c','\u2b3d','\u2b3e', + '\u2b3f','\u2b40','\u2b41','\u2b42','\u2b43','\u2b44','\u2b45', + '\u2b46','\u2b47','\u2b48','\u2b49','\u2b4a','\u2b4b','\u2b4c', + '\u2b4d','\u2b4e','\u2b4f','\u2b50','\u2b51','\u2b52','\u2b53', + '\u2b54','\u2b55','\u2b56','\u2b57','\u2b58','\u2b59','\u2b5a', + '\u2b5b','\u2b5c','\u2b5d','\u2b5e','\u2b5f','\u2b60','\u2b61', + '\u2b62','\u2b63','\u2b64','\u2b65','\u2b66','\u2b67','\u2b68', + '\u2b69','\u2b6a','\u2b6b','\u2b6c','\u2b6d','\u2b6e','\u2b6f', + '\u2b70','\u2b71','\u2b72','\u2b73','\u2b74','\u2b75','\u2b76', + '\u2b77','\u2b78','\u2b79','\u2b7a','\u2b7b','\u2b7c','\u2b7d', + '\u2b7e','\u2b7f','\u2b80','\u2b81','\u2b82','\u2b83','\u2b84', + '\u2b85','\u2b86','\u2b87','\u2b88','\u2b89','\u2b8a','\u2b8b', + '\u2b8c','\u2b8d','\u2b8e','\u2b8f','\u2b90','\u2b91','\u2b92', + '\u2b93','\u2b94','\u2b95','\u2b96','\u2b97','\u2b98','\u2b99', + '\u2b9a','\u2b9b','\u2b9c','\u2b9d','\u2b9e','\u2b9f','\u2ba0', + '\u2ba1','\u2ba2','\u2ba3','\u2ba4','\u2ba5','\u2ba6','\u2ba7', + '\u2ba8','\u2ba9','\u2baa','\u2bab','\u2bac','\u2bad','\u2bae', + '\u2baf','\u2bb0','\u2bb1','\u2bb2','\u2bb3','\u2bb4','\u2bb5', + '\u2bb6','\u2bb7','\u2bb8','\u2bb9','\u2bba','\u2bbb','\u2bbc', + '\u2bbd','\u2bbe','\u2bbf','\u2bc0','\u2bc1','\u2bc2','\u2bc3', + '\u2bc4','\u2bc5','\u2bc6','\u2bc7','\u2bc8','\u2bc9','\u2bca', + '\u2bcb','\u2bcc','\u2bcd','\u2bce','\u2bcf','\u2bd0','\u2bd1', + '\u2bd2','\u2bd3','\u2bd4','\u2bd5','\u2bd6','\u2bd7','\u2bd8', + '\u2bd9','\u2bda','\u2bdb','\u2bdc','\u2bdd','\u2bde','\u2bdf', + '\u2be0','\u2be1','\u2be2','\u2be3','\u2be4','\u2be5','\u2be6', + '\u2be7','\u2be8','\u2be9','\u2bea','\u2beb','\u2bec','\u2bed', + '\u2bee','\u2bef','\u2bf0','\u2bf1','\u2bf2','\u2bf3','\u2bf4', + '\u2bf5','\u2bf6','\u2bf7','\u2bf8','\u2bf9','\u2bfa','\u2bfb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+11008; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void f2c00() { + char[] cs = new char[] { + '\u2c00','\u2c01','\u2c02','\u2c03','\u2c04','\u2c05','\u2c06', + '\u2c07','\u2c08','\u2c09','\u2c0a','\u2c0b','\u2c0c','\u2c0d', + '\u2c0e','\u2c0f','\u2c10','\u2c11','\u2c12','\u2c13','\u2c14', + '\u2c15','\u2c16','\u2c17','\u2c18','\u2c19','\u2c1a','\u2c1b', + '\u2c1c','\u2c1d','\u2c1e','\u2c1f','\u2c20','\u2c21','\u2c22', + '\u2c23','\u2c24','\u2c25','\u2c26','\u2c27','\u2c28','\u2c29', + '\u2c2a','\u2c2b','\u2c2c','\u2c2d','\u2c2e','\u2c2f','\u2c30', + '\u2c31','\u2c32','\u2c33','\u2c34','\u2c35','\u2c36','\u2c37', + '\u2c38','\u2c39','\u2c3a','\u2c3b','\u2c3c','\u2c3d','\u2c3e', + '\u2c3f','\u2c40','\u2c41','\u2c42','\u2c43','\u2c44','\u2c45', + '\u2c46','\u2c47','\u2c48','\u2c49','\u2c4a','\u2c4b','\u2c4c', + '\u2c4d','\u2c4e','\u2c4f','\u2c50','\u2c51','\u2c52','\u2c53', + '\u2c54','\u2c55','\u2c56','\u2c57','\u2c58','\u2c59','\u2c5a', + '\u2c5b','\u2c5c','\u2c5d','\u2c5e','\u2c5f','\u2c60','\u2c61', + '\u2c62','\u2c63','\u2c64','\u2c65','\u2c66','\u2c67','\u2c68', + '\u2c69','\u2c6a','\u2c6b','\u2c6c','\u2c6d','\u2c6e','\u2c6f', + '\u2c70','\u2c71','\u2c72','\u2c73','\u2c74','\u2c75','\u2c76', + '\u2c77','\u2c78','\u2c79','\u2c7a','\u2c7b','\u2c7c','\u2c7d', + '\u2c7e','\u2c7f','\u2c80','\u2c81','\u2c82','\u2c83','\u2c84', + '\u2c85','\u2c86','\u2c87','\u2c88','\u2c89','\u2c8a','\u2c8b', + '\u2c8c','\u2c8d','\u2c8e','\u2c8f','\u2c90','\u2c91','\u2c92', + '\u2c93','\u2c94','\u2c95','\u2c96','\u2c97','\u2c98','\u2c99', + '\u2c9a','\u2c9b','\u2c9c','\u2c9d','\u2c9e','\u2c9f','\u2ca0', + '\u2ca1','\u2ca2','\u2ca3','\u2ca4','\u2ca5','\u2ca6','\u2ca7', + '\u2ca8','\u2ca9','\u2caa','\u2cab','\u2cac','\u2cad','\u2cae', + '\u2caf','\u2cb0','\u2cb1','\u2cb2','\u2cb3','\u2cb4','\u2cb5', + '\u2cb6','\u2cb7','\u2cb8','\u2cb9','\u2cba','\u2cbb','\u2cbc', + '\u2cbd','\u2cbe','\u2cbf','\u2cc0','\u2cc1','\u2cc2','\u2cc3', + '\u2cc4','\u2cc5','\u2cc6','\u2cc7','\u2cc8','\u2cc9','\u2cca', + '\u2ccb','\u2ccc','\u2ccd','\u2cce','\u2ccf','\u2cd0','\u2cd1', + '\u2cd2','\u2cd3','\u2cd4','\u2cd5','\u2cd6','\u2cd7','\u2cd8', + '\u2cd9','\u2cda','\u2cdb','\u2cdc','\u2cdd','\u2cde','\u2cdf', + '\u2ce0','\u2ce1','\u2ce2','\u2ce3','\u2ce4','\u2ce5','\u2ce6', + '\u2ce7','\u2ce8','\u2ce9','\u2cea','\u2ceb','\u2cec','\u2ced', + '\u2cee','\u2cef','\u2cf0','\u2cf1','\u2cf2','\u2cf3','\u2cf4', + '\u2cf5','\u2cf6','\u2cf7','\u2cf8','\u2cf9','\u2cfa','\u2cfb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+11264; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void f2d00() { + char[] cs = new char[] { + '\u2d00','\u2d01','\u2d02','\u2d03','\u2d04','\u2d05','\u2d06', + '\u2d07','\u2d08','\u2d09','\u2d0a','\u2d0b','\u2d0c','\u2d0d', + '\u2d0e','\u2d0f','\u2d10','\u2d11','\u2d12','\u2d13','\u2d14', + '\u2d15','\u2d16','\u2d17','\u2d18','\u2d19','\u2d1a','\u2d1b', + '\u2d1c','\u2d1d','\u2d1e','\u2d1f','\u2d20','\u2d21','\u2d22', + '\u2d23','\u2d24','\u2d25','\u2d26','\u2d27','\u2d28','\u2d29', + '\u2d2a','\u2d2b','\u2d2c','\u2d2d','\u2d2e','\u2d2f','\u2d30', + '\u2d31','\u2d32','\u2d33','\u2d34','\u2d35','\u2d36','\u2d37', + '\u2d38','\u2d39','\u2d3a','\u2d3b','\u2d3c','\u2d3d','\u2d3e', + '\u2d3f','\u2d40','\u2d41','\u2d42','\u2d43','\u2d44','\u2d45', + '\u2d46','\u2d47','\u2d48','\u2d49','\u2d4a','\u2d4b','\u2d4c', + '\u2d4d','\u2d4e','\u2d4f','\u2d50','\u2d51','\u2d52','\u2d53', + '\u2d54','\u2d55','\u2d56','\u2d57','\u2d58','\u2d59','\u2d5a', + '\u2d5b','\u2d5c','\u2d5d','\u2d5e','\u2d5f','\u2d60','\u2d61', + '\u2d62','\u2d63','\u2d64','\u2d65','\u2d66','\u2d67','\u2d68', + '\u2d69','\u2d6a','\u2d6b','\u2d6c','\u2d6d','\u2d6e','\u2d6f', + '\u2d70','\u2d71','\u2d72','\u2d73','\u2d74','\u2d75','\u2d76', + '\u2d77','\u2d78','\u2d79','\u2d7a','\u2d7b','\u2d7c','\u2d7d', + '\u2d7e','\u2d7f','\u2d80','\u2d81','\u2d82','\u2d83','\u2d84', + '\u2d85','\u2d86','\u2d87','\u2d88','\u2d89','\u2d8a','\u2d8b', + '\u2d8c','\u2d8d','\u2d8e','\u2d8f','\u2d90','\u2d91','\u2d92', + '\u2d93','\u2d94','\u2d95','\u2d96','\u2d97','\u2d98','\u2d99', + '\u2d9a','\u2d9b','\u2d9c','\u2d9d','\u2d9e','\u2d9f','\u2da0', + '\u2da1','\u2da2','\u2da3','\u2da4','\u2da5','\u2da6','\u2da7', + '\u2da8','\u2da9','\u2daa','\u2dab','\u2dac','\u2dad','\u2dae', + '\u2daf','\u2db0','\u2db1','\u2db2','\u2db3','\u2db4','\u2db5', + '\u2db6','\u2db7','\u2db8','\u2db9','\u2dba','\u2dbb','\u2dbc', + '\u2dbd','\u2dbe','\u2dbf','\u2dc0','\u2dc1','\u2dc2','\u2dc3', + '\u2dc4','\u2dc5','\u2dc6','\u2dc7','\u2dc8','\u2dc9','\u2dca', + '\u2dcb','\u2dcc','\u2dcd','\u2dce','\u2dcf','\u2dd0','\u2dd1', + '\u2dd2','\u2dd3','\u2dd4','\u2dd5','\u2dd6','\u2dd7','\u2dd8', + '\u2dd9','\u2dda','\u2ddb','\u2ddc','\u2ddd','\u2dde','\u2ddf', + '\u2de0','\u2de1','\u2de2','\u2de3','\u2de4','\u2de5','\u2de6', + '\u2de7','\u2de8','\u2de9','\u2dea','\u2deb','\u2dec','\u2ded', + '\u2dee','\u2def','\u2df0','\u2df1','\u2df2','\u2df3','\u2df4', + '\u2df5','\u2df6','\u2df7','\u2df8','\u2df9','\u2dfa','\u2dfb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+11520; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void f2e00() { + char[] cs = new char[] { + '\u2e00','\u2e01','\u2e02','\u2e03','\u2e04','\u2e05','\u2e06', + '\u2e07','\u2e08','\u2e09','\u2e0a','\u2e0b','\u2e0c','\u2e0d', + '\u2e0e','\u2e0f','\u2e10','\u2e11','\u2e12','\u2e13','\u2e14', + '\u2e15','\u2e16','\u2e17','\u2e18','\u2e19','\u2e1a','\u2e1b', + '\u2e1c','\u2e1d','\u2e1e','\u2e1f','\u2e20','\u2e21','\u2e22', + '\u2e23','\u2e24','\u2e25','\u2e26','\u2e27','\u2e28','\u2e29', + '\u2e2a','\u2e2b','\u2e2c','\u2e2d','\u2e2e','\u2e2f','\u2e30', + '\u2e31','\u2e32','\u2e33','\u2e34','\u2e35','\u2e36','\u2e37', + '\u2e38','\u2e39','\u2e3a','\u2e3b','\u2e3c','\u2e3d','\u2e3e', + '\u2e3f','\u2e40','\u2e41','\u2e42','\u2e43','\u2e44','\u2e45', + '\u2e46','\u2e47','\u2e48','\u2e49','\u2e4a','\u2e4b','\u2e4c', + '\u2e4d','\u2e4e','\u2e4f','\u2e50','\u2e51','\u2e52','\u2e53', + '\u2e54','\u2e55','\u2e56','\u2e57','\u2e58','\u2e59','\u2e5a', + '\u2e5b','\u2e5c','\u2e5d','\u2e5e','\u2e5f','\u2e60','\u2e61', + '\u2e62','\u2e63','\u2e64','\u2e65','\u2e66','\u2e67','\u2e68', + '\u2e69','\u2e6a','\u2e6b','\u2e6c','\u2e6d','\u2e6e','\u2e6f', + '\u2e70','\u2e71','\u2e72','\u2e73','\u2e74','\u2e75','\u2e76', + '\u2e77','\u2e78','\u2e79','\u2e7a','\u2e7b','\u2e7c','\u2e7d', + '\u2e7e','\u2e7f','\u2e80','\u2e81','\u2e82','\u2e83','\u2e84', + '\u2e85','\u2e86','\u2e87','\u2e88','\u2e89','\u2e8a','\u2e8b', + '\u2e8c','\u2e8d','\u2e8e','\u2e8f','\u2e90','\u2e91','\u2e92', + '\u2e93','\u2e94','\u2e95','\u2e96','\u2e97','\u2e98','\u2e99', + '\u2e9a','\u2e9b','\u2e9c','\u2e9d','\u2e9e','\u2e9f','\u2ea0', + '\u2ea1','\u2ea2','\u2ea3','\u2ea4','\u2ea5','\u2ea6','\u2ea7', + '\u2ea8','\u2ea9','\u2eaa','\u2eab','\u2eac','\u2ead','\u2eae', + '\u2eaf','\u2eb0','\u2eb1','\u2eb2','\u2eb3','\u2eb4','\u2eb5', + '\u2eb6','\u2eb7','\u2eb8','\u2eb9','\u2eba','\u2ebb','\u2ebc', + '\u2ebd','\u2ebe','\u2ebf','\u2ec0','\u2ec1','\u2ec2','\u2ec3', + '\u2ec4','\u2ec5','\u2ec6','\u2ec7','\u2ec8','\u2ec9','\u2eca', + '\u2ecb','\u2ecc','\u2ecd','\u2ece','\u2ecf','\u2ed0','\u2ed1', + '\u2ed2','\u2ed3','\u2ed4','\u2ed5','\u2ed6','\u2ed7','\u2ed8', + '\u2ed9','\u2eda','\u2edb','\u2edc','\u2edd','\u2ede','\u2edf', + '\u2ee0','\u2ee1','\u2ee2','\u2ee3','\u2ee4','\u2ee5','\u2ee6', + '\u2ee7','\u2ee8','\u2ee9','\u2eea','\u2eeb','\u2eec','\u2eed', + '\u2eee','\u2eef','\u2ef0','\u2ef1','\u2ef2','\u2ef3','\u2ef4', + '\u2ef5','\u2ef6','\u2ef7','\u2ef8','\u2ef9','\u2efa','\u2efb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+11776; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void f2f00() { + char[] cs = new char[] { + '\u2f00','\u2f01','\u2f02','\u2f03','\u2f04','\u2f05','\u2f06', + '\u2f07','\u2f08','\u2f09','\u2f0a','\u2f0b','\u2f0c','\u2f0d', + '\u2f0e','\u2f0f','\u2f10','\u2f11','\u2f12','\u2f13','\u2f14', + '\u2f15','\u2f16','\u2f17','\u2f18','\u2f19','\u2f1a','\u2f1b', + '\u2f1c','\u2f1d','\u2f1e','\u2f1f','\u2f20','\u2f21','\u2f22', + '\u2f23','\u2f24','\u2f25','\u2f26','\u2f27','\u2f28','\u2f29', + '\u2f2a','\u2f2b','\u2f2c','\u2f2d','\u2f2e','\u2f2f','\u2f30', + '\u2f31','\u2f32','\u2f33','\u2f34','\u2f35','\u2f36','\u2f37', + '\u2f38','\u2f39','\u2f3a','\u2f3b','\u2f3c','\u2f3d','\u2f3e', + '\u2f3f','\u2f40','\u2f41','\u2f42','\u2f43','\u2f44','\u2f45', + '\u2f46','\u2f47','\u2f48','\u2f49','\u2f4a','\u2f4b','\u2f4c', + '\u2f4d','\u2f4e','\u2f4f','\u2f50','\u2f51','\u2f52','\u2f53', + '\u2f54','\u2f55','\u2f56','\u2f57','\u2f58','\u2f59','\u2f5a', + '\u2f5b','\u2f5c','\u2f5d','\u2f5e','\u2f5f','\u2f60','\u2f61', + '\u2f62','\u2f63','\u2f64','\u2f65','\u2f66','\u2f67','\u2f68', + '\u2f69','\u2f6a','\u2f6b','\u2f6c','\u2f6d','\u2f6e','\u2f6f', + '\u2f70','\u2f71','\u2f72','\u2f73','\u2f74','\u2f75','\u2f76', + '\u2f77','\u2f78','\u2f79','\u2f7a','\u2f7b','\u2f7c','\u2f7d', + '\u2f7e','\u2f7f','\u2f80','\u2f81','\u2f82','\u2f83','\u2f84', + '\u2f85','\u2f86','\u2f87','\u2f88','\u2f89','\u2f8a','\u2f8b', + '\u2f8c','\u2f8d','\u2f8e','\u2f8f','\u2f90','\u2f91','\u2f92', + '\u2f93','\u2f94','\u2f95','\u2f96','\u2f97','\u2f98','\u2f99', + '\u2f9a','\u2f9b','\u2f9c','\u2f9d','\u2f9e','\u2f9f','\u2fa0', + '\u2fa1','\u2fa2','\u2fa3','\u2fa4','\u2fa5','\u2fa6','\u2fa7', + '\u2fa8','\u2fa9','\u2faa','\u2fab','\u2fac','\u2fad','\u2fae', + '\u2faf','\u2fb0','\u2fb1','\u2fb2','\u2fb3','\u2fb4','\u2fb5', + '\u2fb6','\u2fb7','\u2fb8','\u2fb9','\u2fba','\u2fbb','\u2fbc', + '\u2fbd','\u2fbe','\u2fbf','\u2fc0','\u2fc1','\u2fc2','\u2fc3', + '\u2fc4','\u2fc5','\u2fc6','\u2fc7','\u2fc8','\u2fc9','\u2fca', + '\u2fcb','\u2fcc','\u2fcd','\u2fce','\u2fcf','\u2fd0','\u2fd1', + '\u2fd2','\u2fd3','\u2fd4','\u2fd5','\u2fd6','\u2fd7','\u2fd8', + '\u2fd9','\u2fda','\u2fdb','\u2fdc','\u2fdd','\u2fde','\u2fdf', + '\u2fe0','\u2fe1','\u2fe2','\u2fe3','\u2fe4','\u2fe5','\u2fe6', + '\u2fe7','\u2fe8','\u2fe9','\u2fea','\u2feb','\u2fec','\u2fed', + '\u2fee','\u2fef','\u2ff0','\u2ff1','\u2ff2','\u2ff3','\u2ff4', + '\u2ff5','\u2ff6','\u2ff7','\u2ff8','\u2ff9','\u2ffa','\u2ffb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+12032; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void f3000() { + char[] cs = new char[] { + '\u3000','\u3001','\u3002','\u3003','\u3004','\u3005','\u3006', + '\u3007','\u3008','\u3009','\u300a','\u300b','\u300c','\u300d', + '\u300e','\u300f','\u3010','\u3011','\u3012','\u3013','\u3014', + '\u3015','\u3016','\u3017','\u3018','\u3019','\u301a','\u301b', + '\u301c','\u301d','\u301e','\u301f','\u3020','\u3021','\u3022', + '\u3023','\u3024','\u3025','\u3026','\u3027','\u3028','\u3029', + '\u302a','\u302b','\u302c','\u302d','\u302e','\u302f','\u3030', + '\u3031','\u3032','\u3033','\u3034','\u3035','\u3036','\u3037', + '\u3038','\u3039','\u303a','\u303b','\u303c','\u303d','\u303e', + '\u303f','\u3040','\u3041','\u3042','\u3043','\u3044','\u3045', + '\u3046','\u3047','\u3048','\u3049','\u304a','\u304b','\u304c', + '\u304d','\u304e','\u304f','\u3050','\u3051','\u3052','\u3053', + '\u3054','\u3055','\u3056','\u3057','\u3058','\u3059','\u305a', + '\u305b','\u305c','\u305d','\u305e','\u305f','\u3060','\u3061', + '\u3062','\u3063','\u3064','\u3065','\u3066','\u3067','\u3068', + '\u3069','\u306a','\u306b','\u306c','\u306d','\u306e','\u306f', + '\u3070','\u3071','\u3072','\u3073','\u3074','\u3075','\u3076', + '\u3077','\u3078','\u3079','\u307a','\u307b','\u307c','\u307d', + '\u307e','\u307f','\u3080','\u3081','\u3082','\u3083','\u3084', + '\u3085','\u3086','\u3087','\u3088','\u3089','\u308a','\u308b', + '\u308c','\u308d','\u308e','\u308f','\u3090','\u3091','\u3092', + '\u3093','\u3094','\u3095','\u3096','\u3097','\u3098','\u3099', + '\u309a','\u309b','\u309c','\u309d','\u309e','\u309f','\u30a0', + '\u30a1','\u30a2','\u30a3','\u30a4','\u30a5','\u30a6','\u30a7', + '\u30a8','\u30a9','\u30aa','\u30ab','\u30ac','\u30ad','\u30ae', + '\u30af','\u30b0','\u30b1','\u30b2','\u30b3','\u30b4','\u30b5', + '\u30b6','\u30b7','\u30b8','\u30b9','\u30ba','\u30bb','\u30bc', + '\u30bd','\u30be','\u30bf','\u30c0','\u30c1','\u30c2','\u30c3', + '\u30c4','\u30c5','\u30c6','\u30c7','\u30c8','\u30c9','\u30ca', + '\u30cb','\u30cc','\u30cd','\u30ce','\u30cf','\u30d0','\u30d1', + '\u30d2','\u30d3','\u30d4','\u30d5','\u30d6','\u30d7','\u30d8', + '\u30d9','\u30da','\u30db','\u30dc','\u30dd','\u30de','\u30df', + '\u30e0','\u30e1','\u30e2','\u30e3','\u30e4','\u30e5','\u30e6', + '\u30e7','\u30e8','\u30e9','\u30ea','\u30eb','\u30ec','\u30ed', + '\u30ee','\u30ef','\u30f0','\u30f1','\u30f2','\u30f3','\u30f4', + '\u30f5','\u30f6','\u30f7','\u30f8','\u30f9','\u30fa','\u30fb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+12288; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void f3100() { + char[] cs = new char[] { + '\u3100','\u3101','\u3102','\u3103','\u3104','\u3105','\u3106', + '\u3107','\u3108','\u3109','\u310a','\u310b','\u310c','\u310d', + '\u310e','\u310f','\u3110','\u3111','\u3112','\u3113','\u3114', + '\u3115','\u3116','\u3117','\u3118','\u3119','\u311a','\u311b', + '\u311c','\u311d','\u311e','\u311f','\u3120','\u3121','\u3122', + '\u3123','\u3124','\u3125','\u3126','\u3127','\u3128','\u3129', + '\u312a','\u312b','\u312c','\u312d','\u312e','\u312f','\u3130', + '\u3131','\u3132','\u3133','\u3134','\u3135','\u3136','\u3137', + '\u3138','\u3139','\u313a','\u313b','\u313c','\u313d','\u313e', + '\u313f','\u3140','\u3141','\u3142','\u3143','\u3144','\u3145', + '\u3146','\u3147','\u3148','\u3149','\u314a','\u314b','\u314c', + '\u314d','\u314e','\u314f','\u3150','\u3151','\u3152','\u3153', + '\u3154','\u3155','\u3156','\u3157','\u3158','\u3159','\u315a', + '\u315b','\u315c','\u315d','\u315e','\u315f','\u3160','\u3161', + '\u3162','\u3163','\u3164','\u3165','\u3166','\u3167','\u3168', + '\u3169','\u316a','\u316b','\u316c','\u316d','\u316e','\u316f', + '\u3170','\u3171','\u3172','\u3173','\u3174','\u3175','\u3176', + '\u3177','\u3178','\u3179','\u317a','\u317b','\u317c','\u317d', + '\u317e','\u317f','\u3180','\u3181','\u3182','\u3183','\u3184', + '\u3185','\u3186','\u3187','\u3188','\u3189','\u318a','\u318b', + '\u318c','\u318d','\u318e','\u318f','\u3190','\u3191','\u3192', + '\u3193','\u3194','\u3195','\u3196','\u3197','\u3198','\u3199', + '\u319a','\u319b','\u319c','\u319d','\u319e','\u319f','\u31a0', + '\u31a1','\u31a2','\u31a3','\u31a4','\u31a5','\u31a6','\u31a7', + '\u31a8','\u31a9','\u31aa','\u31ab','\u31ac','\u31ad','\u31ae', + '\u31af','\u31b0','\u31b1','\u31b2','\u31b3','\u31b4','\u31b5', + '\u31b6','\u31b7','\u31b8','\u31b9','\u31ba','\u31bb','\u31bc', + '\u31bd','\u31be','\u31bf','\u31c0','\u31c1','\u31c2','\u31c3', + '\u31c4','\u31c5','\u31c6','\u31c7','\u31c8','\u31c9','\u31ca', + '\u31cb','\u31cc','\u31cd','\u31ce','\u31cf','\u31d0','\u31d1', + '\u31d2','\u31d3','\u31d4','\u31d5','\u31d6','\u31d7','\u31d8', + '\u31d9','\u31da','\u31db','\u31dc','\u31dd','\u31de','\u31df', + '\u31e0','\u31e1','\u31e2','\u31e3','\u31e4','\u31e5','\u31e6', + '\u31e7','\u31e8','\u31e9','\u31ea','\u31eb','\u31ec','\u31ed', + '\u31ee','\u31ef','\u31f0','\u31f1','\u31f2','\u31f3','\u31f4', + '\u31f5','\u31f6','\u31f7','\u31f8','\u31f9','\u31fa','\u31fb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+12544; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void f3200() { + char[] cs = new char[] { + '\u3200','\u3201','\u3202','\u3203','\u3204','\u3205','\u3206', + '\u3207','\u3208','\u3209','\u320a','\u320b','\u320c','\u320d', + '\u320e','\u320f','\u3210','\u3211','\u3212','\u3213','\u3214', + '\u3215','\u3216','\u3217','\u3218','\u3219','\u321a','\u321b', + '\u321c','\u321d','\u321e','\u321f','\u3220','\u3221','\u3222', + '\u3223','\u3224','\u3225','\u3226','\u3227','\u3228','\u3229', + '\u322a','\u322b','\u322c','\u322d','\u322e','\u322f','\u3230', + '\u3231','\u3232','\u3233','\u3234','\u3235','\u3236','\u3237', + '\u3238','\u3239','\u323a','\u323b','\u323c','\u323d','\u323e', + '\u323f','\u3240','\u3241','\u3242','\u3243','\u3244','\u3245', + '\u3246','\u3247','\u3248','\u3249','\u324a','\u324b','\u324c', + '\u324d','\u324e','\u324f','\u3250','\u3251','\u3252','\u3253', + '\u3254','\u3255','\u3256','\u3257','\u3258','\u3259','\u325a', + '\u325b','\u325c','\u325d','\u325e','\u325f','\u3260','\u3261', + '\u3262','\u3263','\u3264','\u3265','\u3266','\u3267','\u3268', + '\u3269','\u326a','\u326b','\u326c','\u326d','\u326e','\u326f', + '\u3270','\u3271','\u3272','\u3273','\u3274','\u3275','\u3276', + '\u3277','\u3278','\u3279','\u327a','\u327b','\u327c','\u327d', + '\u327e','\u327f','\u3280','\u3281','\u3282','\u3283','\u3284', + '\u3285','\u3286','\u3287','\u3288','\u3289','\u328a','\u328b', + '\u328c','\u328d','\u328e','\u328f','\u3290','\u3291','\u3292', + '\u3293','\u3294','\u3295','\u3296','\u3297','\u3298','\u3299', + '\u329a','\u329b','\u329c','\u329d','\u329e','\u329f','\u32a0', + '\u32a1','\u32a2','\u32a3','\u32a4','\u32a5','\u32a6','\u32a7', + '\u32a8','\u32a9','\u32aa','\u32ab','\u32ac','\u32ad','\u32ae', + '\u32af','\u32b0','\u32b1','\u32b2','\u32b3','\u32b4','\u32b5', + '\u32b6','\u32b7','\u32b8','\u32b9','\u32ba','\u32bb','\u32bc', + '\u32bd','\u32be','\u32bf','\u32c0','\u32c1','\u32c2','\u32c3', + '\u32c4','\u32c5','\u32c6','\u32c7','\u32c8','\u32c9','\u32ca', + '\u32cb','\u32cc','\u32cd','\u32ce','\u32cf','\u32d0','\u32d1', + '\u32d2','\u32d3','\u32d4','\u32d5','\u32d6','\u32d7','\u32d8', + '\u32d9','\u32da','\u32db','\u32dc','\u32dd','\u32de','\u32df', + '\u32e0','\u32e1','\u32e2','\u32e3','\u32e4','\u32e5','\u32e6', + '\u32e7','\u32e8','\u32e9','\u32ea','\u32eb','\u32ec','\u32ed', + '\u32ee','\u32ef','\u32f0','\u32f1','\u32f2','\u32f3','\u32f4', + '\u32f5','\u32f6','\u32f7','\u32f8','\u32f9','\u32fa','\u32fb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+12800; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void f3300() { + char[] cs = new char[] { + '\u3300','\u3301','\u3302','\u3303','\u3304','\u3305','\u3306', + '\u3307','\u3308','\u3309','\u330a','\u330b','\u330c','\u330d', + '\u330e','\u330f','\u3310','\u3311','\u3312','\u3313','\u3314', + '\u3315','\u3316','\u3317','\u3318','\u3319','\u331a','\u331b', + '\u331c','\u331d','\u331e','\u331f','\u3320','\u3321','\u3322', + '\u3323','\u3324','\u3325','\u3326','\u3327','\u3328','\u3329', + '\u332a','\u332b','\u332c','\u332d','\u332e','\u332f','\u3330', + '\u3331','\u3332','\u3333','\u3334','\u3335','\u3336','\u3337', + '\u3338','\u3339','\u333a','\u333b','\u333c','\u333d','\u333e', + '\u333f','\u3340','\u3341','\u3342','\u3343','\u3344','\u3345', + '\u3346','\u3347','\u3348','\u3349','\u334a','\u334b','\u334c', + '\u334d','\u334e','\u334f','\u3350','\u3351','\u3352','\u3353', + '\u3354','\u3355','\u3356','\u3357','\u3358','\u3359','\u335a', + '\u335b','\u335c','\u335d','\u335e','\u335f','\u3360','\u3361', + '\u3362','\u3363','\u3364','\u3365','\u3366','\u3367','\u3368', + '\u3369','\u336a','\u336b','\u336c','\u336d','\u336e','\u336f', + '\u3370','\u3371','\u3372','\u3373','\u3374','\u3375','\u3376', + '\u3377','\u3378','\u3379','\u337a','\u337b','\u337c','\u337d', + '\u337e','\u337f','\u3380','\u3381','\u3382','\u3383','\u3384', + '\u3385','\u3386','\u3387','\u3388','\u3389','\u338a','\u338b', + '\u338c','\u338d','\u338e','\u338f','\u3390','\u3391','\u3392', + '\u3393','\u3394','\u3395','\u3396','\u3397','\u3398','\u3399', + '\u339a','\u339b','\u339c','\u339d','\u339e','\u339f','\u33a0', + '\u33a1','\u33a2','\u33a3','\u33a4','\u33a5','\u33a6','\u33a7', + '\u33a8','\u33a9','\u33aa','\u33ab','\u33ac','\u33ad','\u33ae', + '\u33af','\u33b0','\u33b1','\u33b2','\u33b3','\u33b4','\u33b5', + '\u33b6','\u33b7','\u33b8','\u33b9','\u33ba','\u33bb','\u33bc', + '\u33bd','\u33be','\u33bf','\u33c0','\u33c1','\u33c2','\u33c3', + '\u33c4','\u33c5','\u33c6','\u33c7','\u33c8','\u33c9','\u33ca', + '\u33cb','\u33cc','\u33cd','\u33ce','\u33cf','\u33d0','\u33d1', + '\u33d2','\u33d3','\u33d4','\u33d5','\u33d6','\u33d7','\u33d8', + '\u33d9','\u33da','\u33db','\u33dc','\u33dd','\u33de','\u33df', + '\u33e0','\u33e1','\u33e2','\u33e3','\u33e4','\u33e5','\u33e6', + '\u33e7','\u33e8','\u33e9','\u33ea','\u33eb','\u33ec','\u33ed', + '\u33ee','\u33ef','\u33f0','\u33f1','\u33f2','\u33f3','\u33f4', + '\u33f5','\u33f6','\u33f7','\u33f8','\u33f9','\u33fa','\u33fb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+13056; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void f3400() { + char[] cs = new char[] { + '\u3400','\u3401','\u3402','\u3403','\u3404','\u3405','\u3406', + '\u3407','\u3408','\u3409','\u340a','\u340b','\u340c','\u340d', + '\u340e','\u340f','\u3410','\u3411','\u3412','\u3413','\u3414', + '\u3415','\u3416','\u3417','\u3418','\u3419','\u341a','\u341b', + '\u341c','\u341d','\u341e','\u341f','\u3420','\u3421','\u3422', + '\u3423','\u3424','\u3425','\u3426','\u3427','\u3428','\u3429', + '\u342a','\u342b','\u342c','\u342d','\u342e','\u342f','\u3430', + '\u3431','\u3432','\u3433','\u3434','\u3435','\u3436','\u3437', + '\u3438','\u3439','\u343a','\u343b','\u343c','\u343d','\u343e', + '\u343f','\u3440','\u3441','\u3442','\u3443','\u3444','\u3445', + '\u3446','\u3447','\u3448','\u3449','\u344a','\u344b','\u344c', + '\u344d','\u344e','\u344f','\u3450','\u3451','\u3452','\u3453', + '\u3454','\u3455','\u3456','\u3457','\u3458','\u3459','\u345a', + '\u345b','\u345c','\u345d','\u345e','\u345f','\u3460','\u3461', + '\u3462','\u3463','\u3464','\u3465','\u3466','\u3467','\u3468', + '\u3469','\u346a','\u346b','\u346c','\u346d','\u346e','\u346f', + '\u3470','\u3471','\u3472','\u3473','\u3474','\u3475','\u3476', + '\u3477','\u3478','\u3479','\u347a','\u347b','\u347c','\u347d', + '\u347e','\u347f','\u3480','\u3481','\u3482','\u3483','\u3484', + '\u3485','\u3486','\u3487','\u3488','\u3489','\u348a','\u348b', + '\u348c','\u348d','\u348e','\u348f','\u3490','\u3491','\u3492', + '\u3493','\u3494','\u3495','\u3496','\u3497','\u3498','\u3499', + '\u349a','\u349b','\u349c','\u349d','\u349e','\u349f','\u34a0', + '\u34a1','\u34a2','\u34a3','\u34a4','\u34a5','\u34a6','\u34a7', + '\u34a8','\u34a9','\u34aa','\u34ab','\u34ac','\u34ad','\u34ae', + '\u34af','\u34b0','\u34b1','\u34b2','\u34b3','\u34b4','\u34b5', + '\u34b6','\u34b7','\u34b8','\u34b9','\u34ba','\u34bb','\u34bc', + '\u34bd','\u34be','\u34bf','\u34c0','\u34c1','\u34c2','\u34c3', + '\u34c4','\u34c5','\u34c6','\u34c7','\u34c8','\u34c9','\u34ca', + '\u34cb','\u34cc','\u34cd','\u34ce','\u34cf','\u34d0','\u34d1', + '\u34d2','\u34d3','\u34d4','\u34d5','\u34d6','\u34d7','\u34d8', + '\u34d9','\u34da','\u34db','\u34dc','\u34dd','\u34de','\u34df', + '\u34e0','\u34e1','\u34e2','\u34e3','\u34e4','\u34e5','\u34e6', + '\u34e7','\u34e8','\u34e9','\u34ea','\u34eb','\u34ec','\u34ed', + '\u34ee','\u34ef','\u34f0','\u34f1','\u34f2','\u34f3','\u34f4', + '\u34f5','\u34f6','\u34f7','\u34f8','\u34f9','\u34fa','\u34fb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+13312; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void f3500() { + char[] cs = new char[] { + '\u3500','\u3501','\u3502','\u3503','\u3504','\u3505','\u3506', + '\u3507','\u3508','\u3509','\u350a','\u350b','\u350c','\u350d', + '\u350e','\u350f','\u3510','\u3511','\u3512','\u3513','\u3514', + '\u3515','\u3516','\u3517','\u3518','\u3519','\u351a','\u351b', + '\u351c','\u351d','\u351e','\u351f','\u3520','\u3521','\u3522', + '\u3523','\u3524','\u3525','\u3526','\u3527','\u3528','\u3529', + '\u352a','\u352b','\u352c','\u352d','\u352e','\u352f','\u3530', + '\u3531','\u3532','\u3533','\u3534','\u3535','\u3536','\u3537', + '\u3538','\u3539','\u353a','\u353b','\u353c','\u353d','\u353e', + '\u353f','\u3540','\u3541','\u3542','\u3543','\u3544','\u3545', + '\u3546','\u3547','\u3548','\u3549','\u354a','\u354b','\u354c', + '\u354d','\u354e','\u354f','\u3550','\u3551','\u3552','\u3553', + '\u3554','\u3555','\u3556','\u3557','\u3558','\u3559','\u355a', + '\u355b','\u355c','\u355d','\u355e','\u355f','\u3560','\u3561', + '\u3562','\u3563','\u3564','\u3565','\u3566','\u3567','\u3568', + '\u3569','\u356a','\u356b','\u356c','\u356d','\u356e','\u356f', + '\u3570','\u3571','\u3572','\u3573','\u3574','\u3575','\u3576', + '\u3577','\u3578','\u3579','\u357a','\u357b','\u357c','\u357d', + '\u357e','\u357f','\u3580','\u3581','\u3582','\u3583','\u3584', + '\u3585','\u3586','\u3587','\u3588','\u3589','\u358a','\u358b', + '\u358c','\u358d','\u358e','\u358f','\u3590','\u3591','\u3592', + '\u3593','\u3594','\u3595','\u3596','\u3597','\u3598','\u3599', + '\u359a','\u359b','\u359c','\u359d','\u359e','\u359f','\u35a0', + '\u35a1','\u35a2','\u35a3','\u35a4','\u35a5','\u35a6','\u35a7', + '\u35a8','\u35a9','\u35aa','\u35ab','\u35ac','\u35ad','\u35ae', + '\u35af','\u35b0','\u35b1','\u35b2','\u35b3','\u35b4','\u35b5', + '\u35b6','\u35b7','\u35b8','\u35b9','\u35ba','\u35bb','\u35bc', + '\u35bd','\u35be','\u35bf','\u35c0','\u35c1','\u35c2','\u35c3', + '\u35c4','\u35c5','\u35c6','\u35c7','\u35c8','\u35c9','\u35ca', + '\u35cb','\u35cc','\u35cd','\u35ce','\u35cf','\u35d0','\u35d1', + '\u35d2','\u35d3','\u35d4','\u35d5','\u35d6','\u35d7','\u35d8', + '\u35d9','\u35da','\u35db','\u35dc','\u35dd','\u35de','\u35df', + '\u35e0','\u35e1','\u35e2','\u35e3','\u35e4','\u35e5','\u35e6', + '\u35e7','\u35e8','\u35e9','\u35ea','\u35eb','\u35ec','\u35ed', + '\u35ee','\u35ef','\u35f0','\u35f1','\u35f2','\u35f3','\u35f4', + '\u35f5','\u35f6','\u35f7','\u35f8','\u35f9','\u35fa','\u35fb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+13568; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void f3600() { + char[] cs = new char[] { + '\u3600','\u3601','\u3602','\u3603','\u3604','\u3605','\u3606', + '\u3607','\u3608','\u3609','\u360a','\u360b','\u360c','\u360d', + '\u360e','\u360f','\u3610','\u3611','\u3612','\u3613','\u3614', + '\u3615','\u3616','\u3617','\u3618','\u3619','\u361a','\u361b', + '\u361c','\u361d','\u361e','\u361f','\u3620','\u3621','\u3622', + '\u3623','\u3624','\u3625','\u3626','\u3627','\u3628','\u3629', + '\u362a','\u362b','\u362c','\u362d','\u362e','\u362f','\u3630', + '\u3631','\u3632','\u3633','\u3634','\u3635','\u3636','\u3637', + '\u3638','\u3639','\u363a','\u363b','\u363c','\u363d','\u363e', + '\u363f','\u3640','\u3641','\u3642','\u3643','\u3644','\u3645', + '\u3646','\u3647','\u3648','\u3649','\u364a','\u364b','\u364c', + '\u364d','\u364e','\u364f','\u3650','\u3651','\u3652','\u3653', + '\u3654','\u3655','\u3656','\u3657','\u3658','\u3659','\u365a', + '\u365b','\u365c','\u365d','\u365e','\u365f','\u3660','\u3661', + '\u3662','\u3663','\u3664','\u3665','\u3666','\u3667','\u3668', + '\u3669','\u366a','\u366b','\u366c','\u366d','\u366e','\u366f', + '\u3670','\u3671','\u3672','\u3673','\u3674','\u3675','\u3676', + '\u3677','\u3678','\u3679','\u367a','\u367b','\u367c','\u367d', + '\u367e','\u367f','\u3680','\u3681','\u3682','\u3683','\u3684', + '\u3685','\u3686','\u3687','\u3688','\u3689','\u368a','\u368b', + '\u368c','\u368d','\u368e','\u368f','\u3690','\u3691','\u3692', + '\u3693','\u3694','\u3695','\u3696','\u3697','\u3698','\u3699', + '\u369a','\u369b','\u369c','\u369d','\u369e','\u369f','\u36a0', + '\u36a1','\u36a2','\u36a3','\u36a4','\u36a5','\u36a6','\u36a7', + '\u36a8','\u36a9','\u36aa','\u36ab','\u36ac','\u36ad','\u36ae', + '\u36af','\u36b0','\u36b1','\u36b2','\u36b3','\u36b4','\u36b5', + '\u36b6','\u36b7','\u36b8','\u36b9','\u36ba','\u36bb','\u36bc', + '\u36bd','\u36be','\u36bf','\u36c0','\u36c1','\u36c2','\u36c3', + '\u36c4','\u36c5','\u36c6','\u36c7','\u36c8','\u36c9','\u36ca', + '\u36cb','\u36cc','\u36cd','\u36ce','\u36cf','\u36d0','\u36d1', + '\u36d2','\u36d3','\u36d4','\u36d5','\u36d6','\u36d7','\u36d8', + '\u36d9','\u36da','\u36db','\u36dc','\u36dd','\u36de','\u36df', + '\u36e0','\u36e1','\u36e2','\u36e3','\u36e4','\u36e5','\u36e6', + '\u36e7','\u36e8','\u36e9','\u36ea','\u36eb','\u36ec','\u36ed', + '\u36ee','\u36ef','\u36f0','\u36f1','\u36f2','\u36f3','\u36f4', + '\u36f5','\u36f6','\u36f7','\u36f8','\u36f9','\u36fa','\u36fb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+13824; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void f3700() { + char[] cs = new char[] { + '\u3700','\u3701','\u3702','\u3703','\u3704','\u3705','\u3706', + '\u3707','\u3708','\u3709','\u370a','\u370b','\u370c','\u370d', + '\u370e','\u370f','\u3710','\u3711','\u3712','\u3713','\u3714', + '\u3715','\u3716','\u3717','\u3718','\u3719','\u371a','\u371b', + '\u371c','\u371d','\u371e','\u371f','\u3720','\u3721','\u3722', + '\u3723','\u3724','\u3725','\u3726','\u3727','\u3728','\u3729', + '\u372a','\u372b','\u372c','\u372d','\u372e','\u372f','\u3730', + '\u3731','\u3732','\u3733','\u3734','\u3735','\u3736','\u3737', + '\u3738','\u3739','\u373a','\u373b','\u373c','\u373d','\u373e', + '\u373f','\u3740','\u3741','\u3742','\u3743','\u3744','\u3745', + '\u3746','\u3747','\u3748','\u3749','\u374a','\u374b','\u374c', + '\u374d','\u374e','\u374f','\u3750','\u3751','\u3752','\u3753', + '\u3754','\u3755','\u3756','\u3757','\u3758','\u3759','\u375a', + '\u375b','\u375c','\u375d','\u375e','\u375f','\u3760','\u3761', + '\u3762','\u3763','\u3764','\u3765','\u3766','\u3767','\u3768', + '\u3769','\u376a','\u376b','\u376c','\u376d','\u376e','\u376f', + '\u3770','\u3771','\u3772','\u3773','\u3774','\u3775','\u3776', + '\u3777','\u3778','\u3779','\u377a','\u377b','\u377c','\u377d', + '\u377e','\u377f','\u3780','\u3781','\u3782','\u3783','\u3784', + '\u3785','\u3786','\u3787','\u3788','\u3789','\u378a','\u378b', + '\u378c','\u378d','\u378e','\u378f','\u3790','\u3791','\u3792', + '\u3793','\u3794','\u3795','\u3796','\u3797','\u3798','\u3799', + '\u379a','\u379b','\u379c','\u379d','\u379e','\u379f','\u37a0', + '\u37a1','\u37a2','\u37a3','\u37a4','\u37a5','\u37a6','\u37a7', + '\u37a8','\u37a9','\u37aa','\u37ab','\u37ac','\u37ad','\u37ae', + '\u37af','\u37b0','\u37b1','\u37b2','\u37b3','\u37b4','\u37b5', + '\u37b6','\u37b7','\u37b8','\u37b9','\u37ba','\u37bb','\u37bc', + '\u37bd','\u37be','\u37bf','\u37c0','\u37c1','\u37c2','\u37c3', + '\u37c4','\u37c5','\u37c6','\u37c7','\u37c8','\u37c9','\u37ca', + '\u37cb','\u37cc','\u37cd','\u37ce','\u37cf','\u37d0','\u37d1', + '\u37d2','\u37d3','\u37d4','\u37d5','\u37d6','\u37d7','\u37d8', + '\u37d9','\u37da','\u37db','\u37dc','\u37dd','\u37de','\u37df', + '\u37e0','\u37e1','\u37e2','\u37e3','\u37e4','\u37e5','\u37e6', + '\u37e7','\u37e8','\u37e9','\u37ea','\u37eb','\u37ec','\u37ed', + '\u37ee','\u37ef','\u37f0','\u37f1','\u37f2','\u37f3','\u37f4', + '\u37f5','\u37f6','\u37f7','\u37f8','\u37f9','\u37fa','\u37fb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+14080; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void f3800() { + char[] cs = new char[] { + '\u3800','\u3801','\u3802','\u3803','\u3804','\u3805','\u3806', + '\u3807','\u3808','\u3809','\u380a','\u380b','\u380c','\u380d', + '\u380e','\u380f','\u3810','\u3811','\u3812','\u3813','\u3814', + '\u3815','\u3816','\u3817','\u3818','\u3819','\u381a','\u381b', + '\u381c','\u381d','\u381e','\u381f','\u3820','\u3821','\u3822', + '\u3823','\u3824','\u3825','\u3826','\u3827','\u3828','\u3829', + '\u382a','\u382b','\u382c','\u382d','\u382e','\u382f','\u3830', + '\u3831','\u3832','\u3833','\u3834','\u3835','\u3836','\u3837', + '\u3838','\u3839','\u383a','\u383b','\u383c','\u383d','\u383e', + '\u383f','\u3840','\u3841','\u3842','\u3843','\u3844','\u3845', + '\u3846','\u3847','\u3848','\u3849','\u384a','\u384b','\u384c', + '\u384d','\u384e','\u384f','\u3850','\u3851','\u3852','\u3853', + '\u3854','\u3855','\u3856','\u3857','\u3858','\u3859','\u385a', + '\u385b','\u385c','\u385d','\u385e','\u385f','\u3860','\u3861', + '\u3862','\u3863','\u3864','\u3865','\u3866','\u3867','\u3868', + '\u3869','\u386a','\u386b','\u386c','\u386d','\u386e','\u386f', + '\u3870','\u3871','\u3872','\u3873','\u3874','\u3875','\u3876', + '\u3877','\u3878','\u3879','\u387a','\u387b','\u387c','\u387d', + '\u387e','\u387f','\u3880','\u3881','\u3882','\u3883','\u3884', + '\u3885','\u3886','\u3887','\u3888','\u3889','\u388a','\u388b', + '\u388c','\u388d','\u388e','\u388f','\u3890','\u3891','\u3892', + '\u3893','\u3894','\u3895','\u3896','\u3897','\u3898','\u3899', + '\u389a','\u389b','\u389c','\u389d','\u389e','\u389f','\u38a0', + '\u38a1','\u38a2','\u38a3','\u38a4','\u38a5','\u38a6','\u38a7', + '\u38a8','\u38a9','\u38aa','\u38ab','\u38ac','\u38ad','\u38ae', + '\u38af','\u38b0','\u38b1','\u38b2','\u38b3','\u38b4','\u38b5', + '\u38b6','\u38b7','\u38b8','\u38b9','\u38ba','\u38bb','\u38bc', + '\u38bd','\u38be','\u38bf','\u38c0','\u38c1','\u38c2','\u38c3', + '\u38c4','\u38c5','\u38c6','\u38c7','\u38c8','\u38c9','\u38ca', + '\u38cb','\u38cc','\u38cd','\u38ce','\u38cf','\u38d0','\u38d1', + '\u38d2','\u38d3','\u38d4','\u38d5','\u38d6','\u38d7','\u38d8', + '\u38d9','\u38da','\u38db','\u38dc','\u38dd','\u38de','\u38df', + '\u38e0','\u38e1','\u38e2','\u38e3','\u38e4','\u38e5','\u38e6', + '\u38e7','\u38e8','\u38e9','\u38ea','\u38eb','\u38ec','\u38ed', + '\u38ee','\u38ef','\u38f0','\u38f1','\u38f2','\u38f3','\u38f4', + '\u38f5','\u38f6','\u38f7','\u38f8','\u38f9','\u38fa','\u38fb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+14336; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void f3900() { + char[] cs = new char[] { + '\u3900','\u3901','\u3902','\u3903','\u3904','\u3905','\u3906', + '\u3907','\u3908','\u3909','\u390a','\u390b','\u390c','\u390d', + '\u390e','\u390f','\u3910','\u3911','\u3912','\u3913','\u3914', + '\u3915','\u3916','\u3917','\u3918','\u3919','\u391a','\u391b', + '\u391c','\u391d','\u391e','\u391f','\u3920','\u3921','\u3922', + '\u3923','\u3924','\u3925','\u3926','\u3927','\u3928','\u3929', + '\u392a','\u392b','\u392c','\u392d','\u392e','\u392f','\u3930', + '\u3931','\u3932','\u3933','\u3934','\u3935','\u3936','\u3937', + '\u3938','\u3939','\u393a','\u393b','\u393c','\u393d','\u393e', + '\u393f','\u3940','\u3941','\u3942','\u3943','\u3944','\u3945', + '\u3946','\u3947','\u3948','\u3949','\u394a','\u394b','\u394c', + '\u394d','\u394e','\u394f','\u3950','\u3951','\u3952','\u3953', + '\u3954','\u3955','\u3956','\u3957','\u3958','\u3959','\u395a', + '\u395b','\u395c','\u395d','\u395e','\u395f','\u3960','\u3961', + '\u3962','\u3963','\u3964','\u3965','\u3966','\u3967','\u3968', + '\u3969','\u396a','\u396b','\u396c','\u396d','\u396e','\u396f', + '\u3970','\u3971','\u3972','\u3973','\u3974','\u3975','\u3976', + '\u3977','\u3978','\u3979','\u397a','\u397b','\u397c','\u397d', + '\u397e','\u397f','\u3980','\u3981','\u3982','\u3983','\u3984', + '\u3985','\u3986','\u3987','\u3988','\u3989','\u398a','\u398b', + '\u398c','\u398d','\u398e','\u398f','\u3990','\u3991','\u3992', + '\u3993','\u3994','\u3995','\u3996','\u3997','\u3998','\u3999', + '\u399a','\u399b','\u399c','\u399d','\u399e','\u399f','\u39a0', + '\u39a1','\u39a2','\u39a3','\u39a4','\u39a5','\u39a6','\u39a7', + '\u39a8','\u39a9','\u39aa','\u39ab','\u39ac','\u39ad','\u39ae', + '\u39af','\u39b0','\u39b1','\u39b2','\u39b3','\u39b4','\u39b5', + '\u39b6','\u39b7','\u39b8','\u39b9','\u39ba','\u39bb','\u39bc', + '\u39bd','\u39be','\u39bf','\u39c0','\u39c1','\u39c2','\u39c3', + '\u39c4','\u39c5','\u39c6','\u39c7','\u39c8','\u39c9','\u39ca', + '\u39cb','\u39cc','\u39cd','\u39ce','\u39cf','\u39d0','\u39d1', + '\u39d2','\u39d3','\u39d4','\u39d5','\u39d6','\u39d7','\u39d8', + '\u39d9','\u39da','\u39db','\u39dc','\u39dd','\u39de','\u39df', + '\u39e0','\u39e1','\u39e2','\u39e3','\u39e4','\u39e5','\u39e6', + '\u39e7','\u39e8','\u39e9','\u39ea','\u39eb','\u39ec','\u39ed', + '\u39ee','\u39ef','\u39f0','\u39f1','\u39f2','\u39f3','\u39f4', + '\u39f5','\u39f6','\u39f7','\u39f8','\u39f9','\u39fa','\u39fb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+14592; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void f3a00() { + char[] cs = new char[] { + '\u3a00','\u3a01','\u3a02','\u3a03','\u3a04','\u3a05','\u3a06', + '\u3a07','\u3a08','\u3a09','\u3a0a','\u3a0b','\u3a0c','\u3a0d', + '\u3a0e','\u3a0f','\u3a10','\u3a11','\u3a12','\u3a13','\u3a14', + '\u3a15','\u3a16','\u3a17','\u3a18','\u3a19','\u3a1a','\u3a1b', + '\u3a1c','\u3a1d','\u3a1e','\u3a1f','\u3a20','\u3a21','\u3a22', + '\u3a23','\u3a24','\u3a25','\u3a26','\u3a27','\u3a28','\u3a29', + '\u3a2a','\u3a2b','\u3a2c','\u3a2d','\u3a2e','\u3a2f','\u3a30', + '\u3a31','\u3a32','\u3a33','\u3a34','\u3a35','\u3a36','\u3a37', + '\u3a38','\u3a39','\u3a3a','\u3a3b','\u3a3c','\u3a3d','\u3a3e', + '\u3a3f','\u3a40','\u3a41','\u3a42','\u3a43','\u3a44','\u3a45', + '\u3a46','\u3a47','\u3a48','\u3a49','\u3a4a','\u3a4b','\u3a4c', + '\u3a4d','\u3a4e','\u3a4f','\u3a50','\u3a51','\u3a52','\u3a53', + '\u3a54','\u3a55','\u3a56','\u3a57','\u3a58','\u3a59','\u3a5a', + '\u3a5b','\u3a5c','\u3a5d','\u3a5e','\u3a5f','\u3a60','\u3a61', + '\u3a62','\u3a63','\u3a64','\u3a65','\u3a66','\u3a67','\u3a68', + '\u3a69','\u3a6a','\u3a6b','\u3a6c','\u3a6d','\u3a6e','\u3a6f', + '\u3a70','\u3a71','\u3a72','\u3a73','\u3a74','\u3a75','\u3a76', + '\u3a77','\u3a78','\u3a79','\u3a7a','\u3a7b','\u3a7c','\u3a7d', + '\u3a7e','\u3a7f','\u3a80','\u3a81','\u3a82','\u3a83','\u3a84', + '\u3a85','\u3a86','\u3a87','\u3a88','\u3a89','\u3a8a','\u3a8b', + '\u3a8c','\u3a8d','\u3a8e','\u3a8f','\u3a90','\u3a91','\u3a92', + '\u3a93','\u3a94','\u3a95','\u3a96','\u3a97','\u3a98','\u3a99', + '\u3a9a','\u3a9b','\u3a9c','\u3a9d','\u3a9e','\u3a9f','\u3aa0', + '\u3aa1','\u3aa2','\u3aa3','\u3aa4','\u3aa5','\u3aa6','\u3aa7', + '\u3aa8','\u3aa9','\u3aaa','\u3aab','\u3aac','\u3aad','\u3aae', + '\u3aaf','\u3ab0','\u3ab1','\u3ab2','\u3ab3','\u3ab4','\u3ab5', + '\u3ab6','\u3ab7','\u3ab8','\u3ab9','\u3aba','\u3abb','\u3abc', + '\u3abd','\u3abe','\u3abf','\u3ac0','\u3ac1','\u3ac2','\u3ac3', + '\u3ac4','\u3ac5','\u3ac6','\u3ac7','\u3ac8','\u3ac9','\u3aca', + '\u3acb','\u3acc','\u3acd','\u3ace','\u3acf','\u3ad0','\u3ad1', + '\u3ad2','\u3ad3','\u3ad4','\u3ad5','\u3ad6','\u3ad7','\u3ad8', + '\u3ad9','\u3ada','\u3adb','\u3adc','\u3add','\u3ade','\u3adf', + '\u3ae0','\u3ae1','\u3ae2','\u3ae3','\u3ae4','\u3ae5','\u3ae6', + '\u3ae7','\u3ae8','\u3ae9','\u3aea','\u3aeb','\u3aec','\u3aed', + '\u3aee','\u3aef','\u3af0','\u3af1','\u3af2','\u3af3','\u3af4', + '\u3af5','\u3af6','\u3af7','\u3af8','\u3af9','\u3afa','\u3afb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+14848; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void f3b00() { + char[] cs = new char[] { + '\u3b00','\u3b01','\u3b02','\u3b03','\u3b04','\u3b05','\u3b06', + '\u3b07','\u3b08','\u3b09','\u3b0a','\u3b0b','\u3b0c','\u3b0d', + '\u3b0e','\u3b0f','\u3b10','\u3b11','\u3b12','\u3b13','\u3b14', + '\u3b15','\u3b16','\u3b17','\u3b18','\u3b19','\u3b1a','\u3b1b', + '\u3b1c','\u3b1d','\u3b1e','\u3b1f','\u3b20','\u3b21','\u3b22', + '\u3b23','\u3b24','\u3b25','\u3b26','\u3b27','\u3b28','\u3b29', + '\u3b2a','\u3b2b','\u3b2c','\u3b2d','\u3b2e','\u3b2f','\u3b30', + '\u3b31','\u3b32','\u3b33','\u3b34','\u3b35','\u3b36','\u3b37', + '\u3b38','\u3b39','\u3b3a','\u3b3b','\u3b3c','\u3b3d','\u3b3e', + '\u3b3f','\u3b40','\u3b41','\u3b42','\u3b43','\u3b44','\u3b45', + '\u3b46','\u3b47','\u3b48','\u3b49','\u3b4a','\u3b4b','\u3b4c', + '\u3b4d','\u3b4e','\u3b4f','\u3b50','\u3b51','\u3b52','\u3b53', + '\u3b54','\u3b55','\u3b56','\u3b57','\u3b58','\u3b59','\u3b5a', + '\u3b5b','\u3b5c','\u3b5d','\u3b5e','\u3b5f','\u3b60','\u3b61', + '\u3b62','\u3b63','\u3b64','\u3b65','\u3b66','\u3b67','\u3b68', + '\u3b69','\u3b6a','\u3b6b','\u3b6c','\u3b6d','\u3b6e','\u3b6f', + '\u3b70','\u3b71','\u3b72','\u3b73','\u3b74','\u3b75','\u3b76', + '\u3b77','\u3b78','\u3b79','\u3b7a','\u3b7b','\u3b7c','\u3b7d', + '\u3b7e','\u3b7f','\u3b80','\u3b81','\u3b82','\u3b83','\u3b84', + '\u3b85','\u3b86','\u3b87','\u3b88','\u3b89','\u3b8a','\u3b8b', + '\u3b8c','\u3b8d','\u3b8e','\u3b8f','\u3b90','\u3b91','\u3b92', + '\u3b93','\u3b94','\u3b95','\u3b96','\u3b97','\u3b98','\u3b99', + '\u3b9a','\u3b9b','\u3b9c','\u3b9d','\u3b9e','\u3b9f','\u3ba0', + '\u3ba1','\u3ba2','\u3ba3','\u3ba4','\u3ba5','\u3ba6','\u3ba7', + '\u3ba8','\u3ba9','\u3baa','\u3bab','\u3bac','\u3bad','\u3bae', + '\u3baf','\u3bb0','\u3bb1','\u3bb2','\u3bb3','\u3bb4','\u3bb5', + '\u3bb6','\u3bb7','\u3bb8','\u3bb9','\u3bba','\u3bbb','\u3bbc', + '\u3bbd','\u3bbe','\u3bbf','\u3bc0','\u3bc1','\u3bc2','\u3bc3', + '\u3bc4','\u3bc5','\u3bc6','\u3bc7','\u3bc8','\u3bc9','\u3bca', + '\u3bcb','\u3bcc','\u3bcd','\u3bce','\u3bcf','\u3bd0','\u3bd1', + '\u3bd2','\u3bd3','\u3bd4','\u3bd5','\u3bd6','\u3bd7','\u3bd8', + '\u3bd9','\u3bda','\u3bdb','\u3bdc','\u3bdd','\u3bde','\u3bdf', + '\u3be0','\u3be1','\u3be2','\u3be3','\u3be4','\u3be5','\u3be6', + '\u3be7','\u3be8','\u3be9','\u3bea','\u3beb','\u3bec','\u3bed', + '\u3bee','\u3bef','\u3bf0','\u3bf1','\u3bf2','\u3bf3','\u3bf4', + '\u3bf5','\u3bf6','\u3bf7','\u3bf8','\u3bf9','\u3bfa','\u3bfb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+15104; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void f3c00() { + char[] cs = new char[] { + '\u3c00','\u3c01','\u3c02','\u3c03','\u3c04','\u3c05','\u3c06', + '\u3c07','\u3c08','\u3c09','\u3c0a','\u3c0b','\u3c0c','\u3c0d', + '\u3c0e','\u3c0f','\u3c10','\u3c11','\u3c12','\u3c13','\u3c14', + '\u3c15','\u3c16','\u3c17','\u3c18','\u3c19','\u3c1a','\u3c1b', + '\u3c1c','\u3c1d','\u3c1e','\u3c1f','\u3c20','\u3c21','\u3c22', + '\u3c23','\u3c24','\u3c25','\u3c26','\u3c27','\u3c28','\u3c29', + '\u3c2a','\u3c2b','\u3c2c','\u3c2d','\u3c2e','\u3c2f','\u3c30', + '\u3c31','\u3c32','\u3c33','\u3c34','\u3c35','\u3c36','\u3c37', + '\u3c38','\u3c39','\u3c3a','\u3c3b','\u3c3c','\u3c3d','\u3c3e', + '\u3c3f','\u3c40','\u3c41','\u3c42','\u3c43','\u3c44','\u3c45', + '\u3c46','\u3c47','\u3c48','\u3c49','\u3c4a','\u3c4b','\u3c4c', + '\u3c4d','\u3c4e','\u3c4f','\u3c50','\u3c51','\u3c52','\u3c53', + '\u3c54','\u3c55','\u3c56','\u3c57','\u3c58','\u3c59','\u3c5a', + '\u3c5b','\u3c5c','\u3c5d','\u3c5e','\u3c5f','\u3c60','\u3c61', + '\u3c62','\u3c63','\u3c64','\u3c65','\u3c66','\u3c67','\u3c68', + '\u3c69','\u3c6a','\u3c6b','\u3c6c','\u3c6d','\u3c6e','\u3c6f', + '\u3c70','\u3c71','\u3c72','\u3c73','\u3c74','\u3c75','\u3c76', + '\u3c77','\u3c78','\u3c79','\u3c7a','\u3c7b','\u3c7c','\u3c7d', + '\u3c7e','\u3c7f','\u3c80','\u3c81','\u3c82','\u3c83','\u3c84', + '\u3c85','\u3c86','\u3c87','\u3c88','\u3c89','\u3c8a','\u3c8b', + '\u3c8c','\u3c8d','\u3c8e','\u3c8f','\u3c90','\u3c91','\u3c92', + '\u3c93','\u3c94','\u3c95','\u3c96','\u3c97','\u3c98','\u3c99', + '\u3c9a','\u3c9b','\u3c9c','\u3c9d','\u3c9e','\u3c9f','\u3ca0', + '\u3ca1','\u3ca2','\u3ca3','\u3ca4','\u3ca5','\u3ca6','\u3ca7', + '\u3ca8','\u3ca9','\u3caa','\u3cab','\u3cac','\u3cad','\u3cae', + '\u3caf','\u3cb0','\u3cb1','\u3cb2','\u3cb3','\u3cb4','\u3cb5', + '\u3cb6','\u3cb7','\u3cb8','\u3cb9','\u3cba','\u3cbb','\u3cbc', + '\u3cbd','\u3cbe','\u3cbf','\u3cc0','\u3cc1','\u3cc2','\u3cc3', + '\u3cc4','\u3cc5','\u3cc6','\u3cc7','\u3cc8','\u3cc9','\u3cca', + '\u3ccb','\u3ccc','\u3ccd','\u3cce','\u3ccf','\u3cd0','\u3cd1', + '\u3cd2','\u3cd3','\u3cd4','\u3cd5','\u3cd6','\u3cd7','\u3cd8', + '\u3cd9','\u3cda','\u3cdb','\u3cdc','\u3cdd','\u3cde','\u3cdf', + '\u3ce0','\u3ce1','\u3ce2','\u3ce3','\u3ce4','\u3ce5','\u3ce6', + '\u3ce7','\u3ce8','\u3ce9','\u3cea','\u3ceb','\u3cec','\u3ced', + '\u3cee','\u3cef','\u3cf0','\u3cf1','\u3cf2','\u3cf3','\u3cf4', + '\u3cf5','\u3cf6','\u3cf7','\u3cf8','\u3cf9','\u3cfa','\u3cfb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+15360; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void f3d00() { + char[] cs = new char[] { + '\u3d00','\u3d01','\u3d02','\u3d03','\u3d04','\u3d05','\u3d06', + '\u3d07','\u3d08','\u3d09','\u3d0a','\u3d0b','\u3d0c','\u3d0d', + '\u3d0e','\u3d0f','\u3d10','\u3d11','\u3d12','\u3d13','\u3d14', + '\u3d15','\u3d16','\u3d17','\u3d18','\u3d19','\u3d1a','\u3d1b', + '\u3d1c','\u3d1d','\u3d1e','\u3d1f','\u3d20','\u3d21','\u3d22', + '\u3d23','\u3d24','\u3d25','\u3d26','\u3d27','\u3d28','\u3d29', + '\u3d2a','\u3d2b','\u3d2c','\u3d2d','\u3d2e','\u3d2f','\u3d30', + '\u3d31','\u3d32','\u3d33','\u3d34','\u3d35','\u3d36','\u3d37', + '\u3d38','\u3d39','\u3d3a','\u3d3b','\u3d3c','\u3d3d','\u3d3e', + '\u3d3f','\u3d40','\u3d41','\u3d42','\u3d43','\u3d44','\u3d45', + '\u3d46','\u3d47','\u3d48','\u3d49','\u3d4a','\u3d4b','\u3d4c', + '\u3d4d','\u3d4e','\u3d4f','\u3d50','\u3d51','\u3d52','\u3d53', + '\u3d54','\u3d55','\u3d56','\u3d57','\u3d58','\u3d59','\u3d5a', + '\u3d5b','\u3d5c','\u3d5d','\u3d5e','\u3d5f','\u3d60','\u3d61', + '\u3d62','\u3d63','\u3d64','\u3d65','\u3d66','\u3d67','\u3d68', + '\u3d69','\u3d6a','\u3d6b','\u3d6c','\u3d6d','\u3d6e','\u3d6f', + '\u3d70','\u3d71','\u3d72','\u3d73','\u3d74','\u3d75','\u3d76', + '\u3d77','\u3d78','\u3d79','\u3d7a','\u3d7b','\u3d7c','\u3d7d', + '\u3d7e','\u3d7f','\u3d80','\u3d81','\u3d82','\u3d83','\u3d84', + '\u3d85','\u3d86','\u3d87','\u3d88','\u3d89','\u3d8a','\u3d8b', + '\u3d8c','\u3d8d','\u3d8e','\u3d8f','\u3d90','\u3d91','\u3d92', + '\u3d93','\u3d94','\u3d95','\u3d96','\u3d97','\u3d98','\u3d99', + '\u3d9a','\u3d9b','\u3d9c','\u3d9d','\u3d9e','\u3d9f','\u3da0', + '\u3da1','\u3da2','\u3da3','\u3da4','\u3da5','\u3da6','\u3da7', + '\u3da8','\u3da9','\u3daa','\u3dab','\u3dac','\u3dad','\u3dae', + '\u3daf','\u3db0','\u3db1','\u3db2','\u3db3','\u3db4','\u3db5', + '\u3db6','\u3db7','\u3db8','\u3db9','\u3dba','\u3dbb','\u3dbc', + '\u3dbd','\u3dbe','\u3dbf','\u3dc0','\u3dc1','\u3dc2','\u3dc3', + '\u3dc4','\u3dc5','\u3dc6','\u3dc7','\u3dc8','\u3dc9','\u3dca', + '\u3dcb','\u3dcc','\u3dcd','\u3dce','\u3dcf','\u3dd0','\u3dd1', + '\u3dd2','\u3dd3','\u3dd4','\u3dd5','\u3dd6','\u3dd7','\u3dd8', + '\u3dd9','\u3dda','\u3ddb','\u3ddc','\u3ddd','\u3dde','\u3ddf', + '\u3de0','\u3de1','\u3de2','\u3de3','\u3de4','\u3de5','\u3de6', + '\u3de7','\u3de8','\u3de9','\u3dea','\u3deb','\u3dec','\u3ded', + '\u3dee','\u3def','\u3df0','\u3df1','\u3df2','\u3df3','\u3df4', + '\u3df5','\u3df6','\u3df7','\u3df8','\u3df9','\u3dfa','\u3dfb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+15616; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void f3e00() { + char[] cs = new char[] { + '\u3e00','\u3e01','\u3e02','\u3e03','\u3e04','\u3e05','\u3e06', + '\u3e07','\u3e08','\u3e09','\u3e0a','\u3e0b','\u3e0c','\u3e0d', + '\u3e0e','\u3e0f','\u3e10','\u3e11','\u3e12','\u3e13','\u3e14', + '\u3e15','\u3e16','\u3e17','\u3e18','\u3e19','\u3e1a','\u3e1b', + '\u3e1c','\u3e1d','\u3e1e','\u3e1f','\u3e20','\u3e21','\u3e22', + '\u3e23','\u3e24','\u3e25','\u3e26','\u3e27','\u3e28','\u3e29', + '\u3e2a','\u3e2b','\u3e2c','\u3e2d','\u3e2e','\u3e2f','\u3e30', + '\u3e31','\u3e32','\u3e33','\u3e34','\u3e35','\u3e36','\u3e37', + '\u3e38','\u3e39','\u3e3a','\u3e3b','\u3e3c','\u3e3d','\u3e3e', + '\u3e3f','\u3e40','\u3e41','\u3e42','\u3e43','\u3e44','\u3e45', + '\u3e46','\u3e47','\u3e48','\u3e49','\u3e4a','\u3e4b','\u3e4c', + '\u3e4d','\u3e4e','\u3e4f','\u3e50','\u3e51','\u3e52','\u3e53', + '\u3e54','\u3e55','\u3e56','\u3e57','\u3e58','\u3e59','\u3e5a', + '\u3e5b','\u3e5c','\u3e5d','\u3e5e','\u3e5f','\u3e60','\u3e61', + '\u3e62','\u3e63','\u3e64','\u3e65','\u3e66','\u3e67','\u3e68', + '\u3e69','\u3e6a','\u3e6b','\u3e6c','\u3e6d','\u3e6e','\u3e6f', + '\u3e70','\u3e71','\u3e72','\u3e73','\u3e74','\u3e75','\u3e76', + '\u3e77','\u3e78','\u3e79','\u3e7a','\u3e7b','\u3e7c','\u3e7d', + '\u3e7e','\u3e7f','\u3e80','\u3e81','\u3e82','\u3e83','\u3e84', + '\u3e85','\u3e86','\u3e87','\u3e88','\u3e89','\u3e8a','\u3e8b', + '\u3e8c','\u3e8d','\u3e8e','\u3e8f','\u3e90','\u3e91','\u3e92', + '\u3e93','\u3e94','\u3e95','\u3e96','\u3e97','\u3e98','\u3e99', + '\u3e9a','\u3e9b','\u3e9c','\u3e9d','\u3e9e','\u3e9f','\u3ea0', + '\u3ea1','\u3ea2','\u3ea3','\u3ea4','\u3ea5','\u3ea6','\u3ea7', + '\u3ea8','\u3ea9','\u3eaa','\u3eab','\u3eac','\u3ead','\u3eae', + '\u3eaf','\u3eb0','\u3eb1','\u3eb2','\u3eb3','\u3eb4','\u3eb5', + '\u3eb6','\u3eb7','\u3eb8','\u3eb9','\u3eba','\u3ebb','\u3ebc', + '\u3ebd','\u3ebe','\u3ebf','\u3ec0','\u3ec1','\u3ec2','\u3ec3', + '\u3ec4','\u3ec5','\u3ec6','\u3ec7','\u3ec8','\u3ec9','\u3eca', + '\u3ecb','\u3ecc','\u3ecd','\u3ece','\u3ecf','\u3ed0','\u3ed1', + '\u3ed2','\u3ed3','\u3ed4','\u3ed5','\u3ed6','\u3ed7','\u3ed8', + '\u3ed9','\u3eda','\u3edb','\u3edc','\u3edd','\u3ede','\u3edf', + '\u3ee0','\u3ee1','\u3ee2','\u3ee3','\u3ee4','\u3ee5','\u3ee6', + '\u3ee7','\u3ee8','\u3ee9','\u3eea','\u3eeb','\u3eec','\u3eed', + '\u3eee','\u3eef','\u3ef0','\u3ef1','\u3ef2','\u3ef3','\u3ef4', + '\u3ef5','\u3ef6','\u3ef7','\u3ef8','\u3ef9','\u3efa','\u3efb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+15872; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void f3f00() { + char[] cs = new char[] { + '\u3f00','\u3f01','\u3f02','\u3f03','\u3f04','\u3f05','\u3f06', + '\u3f07','\u3f08','\u3f09','\u3f0a','\u3f0b','\u3f0c','\u3f0d', + '\u3f0e','\u3f0f','\u3f10','\u3f11','\u3f12','\u3f13','\u3f14', + '\u3f15','\u3f16','\u3f17','\u3f18','\u3f19','\u3f1a','\u3f1b', + '\u3f1c','\u3f1d','\u3f1e','\u3f1f','\u3f20','\u3f21','\u3f22', + '\u3f23','\u3f24','\u3f25','\u3f26','\u3f27','\u3f28','\u3f29', + '\u3f2a','\u3f2b','\u3f2c','\u3f2d','\u3f2e','\u3f2f','\u3f30', + '\u3f31','\u3f32','\u3f33','\u3f34','\u3f35','\u3f36','\u3f37', + '\u3f38','\u3f39','\u3f3a','\u3f3b','\u3f3c','\u3f3d','\u3f3e', + '\u3f3f','\u3f40','\u3f41','\u3f42','\u3f43','\u3f44','\u3f45', + '\u3f46','\u3f47','\u3f48','\u3f49','\u3f4a','\u3f4b','\u3f4c', + '\u3f4d','\u3f4e','\u3f4f','\u3f50','\u3f51','\u3f52','\u3f53', + '\u3f54','\u3f55','\u3f56','\u3f57','\u3f58','\u3f59','\u3f5a', + '\u3f5b','\u3f5c','\u3f5d','\u3f5e','\u3f5f','\u3f60','\u3f61', + '\u3f62','\u3f63','\u3f64','\u3f65','\u3f66','\u3f67','\u3f68', + '\u3f69','\u3f6a','\u3f6b','\u3f6c','\u3f6d','\u3f6e','\u3f6f', + '\u3f70','\u3f71','\u3f72','\u3f73','\u3f74','\u3f75','\u3f76', + '\u3f77','\u3f78','\u3f79','\u3f7a','\u3f7b','\u3f7c','\u3f7d', + '\u3f7e','\u3f7f','\u3f80','\u3f81','\u3f82','\u3f83','\u3f84', + '\u3f85','\u3f86','\u3f87','\u3f88','\u3f89','\u3f8a','\u3f8b', + '\u3f8c','\u3f8d','\u3f8e','\u3f8f','\u3f90','\u3f91','\u3f92', + '\u3f93','\u3f94','\u3f95','\u3f96','\u3f97','\u3f98','\u3f99', + '\u3f9a','\u3f9b','\u3f9c','\u3f9d','\u3f9e','\u3f9f','\u3fa0', + '\u3fa1','\u3fa2','\u3fa3','\u3fa4','\u3fa5','\u3fa6','\u3fa7', + '\u3fa8','\u3fa9','\u3faa','\u3fab','\u3fac','\u3fad','\u3fae', + '\u3faf','\u3fb0','\u3fb1','\u3fb2','\u3fb3','\u3fb4','\u3fb5', + '\u3fb6','\u3fb7','\u3fb8','\u3fb9','\u3fba','\u3fbb','\u3fbc', + '\u3fbd','\u3fbe','\u3fbf','\u3fc0','\u3fc1','\u3fc2','\u3fc3', + '\u3fc4','\u3fc5','\u3fc6','\u3fc7','\u3fc8','\u3fc9','\u3fca', + '\u3fcb','\u3fcc','\u3fcd','\u3fce','\u3fcf','\u3fd0','\u3fd1', + '\u3fd2','\u3fd3','\u3fd4','\u3fd5','\u3fd6','\u3fd7','\u3fd8', + '\u3fd9','\u3fda','\u3fdb','\u3fdc','\u3fdd','\u3fde','\u3fdf', + '\u3fe0','\u3fe1','\u3fe2','\u3fe3','\u3fe4','\u3fe5','\u3fe6', + '\u3fe7','\u3fe8','\u3fe9','\u3fea','\u3feb','\u3fec','\u3fed', + '\u3fee','\u3fef','\u3ff0','\u3ff1','\u3ff2','\u3ff3','\u3ff4', + '\u3ff5','\u3ff6','\u3ff7','\u3ff8','\u3ff9','\u3ffa','\u3ffb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+16128; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void f4000() { + char[] cs = new char[] { + '\u4000','\u4001','\u4002','\u4003','\u4004','\u4005','\u4006', + '\u4007','\u4008','\u4009','\u400a','\u400b','\u400c','\u400d', + '\u400e','\u400f','\u4010','\u4011','\u4012','\u4013','\u4014', + '\u4015','\u4016','\u4017','\u4018','\u4019','\u401a','\u401b', + '\u401c','\u401d','\u401e','\u401f','\u4020','\u4021','\u4022', + '\u4023','\u4024','\u4025','\u4026','\u4027','\u4028','\u4029', + '\u402a','\u402b','\u402c','\u402d','\u402e','\u402f','\u4030', + '\u4031','\u4032','\u4033','\u4034','\u4035','\u4036','\u4037', + '\u4038','\u4039','\u403a','\u403b','\u403c','\u403d','\u403e', + '\u403f','\u4040','\u4041','\u4042','\u4043','\u4044','\u4045', + '\u4046','\u4047','\u4048','\u4049','\u404a','\u404b','\u404c', + '\u404d','\u404e','\u404f','\u4050','\u4051','\u4052','\u4053', + '\u4054','\u4055','\u4056','\u4057','\u4058','\u4059','\u405a', + '\u405b','\u405c','\u405d','\u405e','\u405f','\u4060','\u4061', + '\u4062','\u4063','\u4064','\u4065','\u4066','\u4067','\u4068', + '\u4069','\u406a','\u406b','\u406c','\u406d','\u406e','\u406f', + '\u4070','\u4071','\u4072','\u4073','\u4074','\u4075','\u4076', + '\u4077','\u4078','\u4079','\u407a','\u407b','\u407c','\u407d', + '\u407e','\u407f','\u4080','\u4081','\u4082','\u4083','\u4084', + '\u4085','\u4086','\u4087','\u4088','\u4089','\u408a','\u408b', + '\u408c','\u408d','\u408e','\u408f','\u4090','\u4091','\u4092', + '\u4093','\u4094','\u4095','\u4096','\u4097','\u4098','\u4099', + '\u409a','\u409b','\u409c','\u409d','\u409e','\u409f','\u40a0', + '\u40a1','\u40a2','\u40a3','\u40a4','\u40a5','\u40a6','\u40a7', + '\u40a8','\u40a9','\u40aa','\u40ab','\u40ac','\u40ad','\u40ae', + '\u40af','\u40b0','\u40b1','\u40b2','\u40b3','\u40b4','\u40b5', + '\u40b6','\u40b7','\u40b8','\u40b9','\u40ba','\u40bb','\u40bc', + '\u40bd','\u40be','\u40bf','\u40c0','\u40c1','\u40c2','\u40c3', + '\u40c4','\u40c5','\u40c6','\u40c7','\u40c8','\u40c9','\u40ca', + '\u40cb','\u40cc','\u40cd','\u40ce','\u40cf','\u40d0','\u40d1', + '\u40d2','\u40d3','\u40d4','\u40d5','\u40d6','\u40d7','\u40d8', + '\u40d9','\u40da','\u40db','\u40dc','\u40dd','\u40de','\u40df', + '\u40e0','\u40e1','\u40e2','\u40e3','\u40e4','\u40e5','\u40e6', + '\u40e7','\u40e8','\u40e9','\u40ea','\u40eb','\u40ec','\u40ed', + '\u40ee','\u40ef','\u40f0','\u40f1','\u40f2','\u40f3','\u40f4', + '\u40f5','\u40f6','\u40f7','\u40f8','\u40f9','\u40fa','\u40fb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+16384; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void f4100() { + char[] cs = new char[] { + '\u4100','\u4101','\u4102','\u4103','\u4104','\u4105','\u4106', + '\u4107','\u4108','\u4109','\u410a','\u410b','\u410c','\u410d', + '\u410e','\u410f','\u4110','\u4111','\u4112','\u4113','\u4114', + '\u4115','\u4116','\u4117','\u4118','\u4119','\u411a','\u411b', + '\u411c','\u411d','\u411e','\u411f','\u4120','\u4121','\u4122', + '\u4123','\u4124','\u4125','\u4126','\u4127','\u4128','\u4129', + '\u412a','\u412b','\u412c','\u412d','\u412e','\u412f','\u4130', + '\u4131','\u4132','\u4133','\u4134','\u4135','\u4136','\u4137', + '\u4138','\u4139','\u413a','\u413b','\u413c','\u413d','\u413e', + '\u413f','\u4140','\u4141','\u4142','\u4143','\u4144','\u4145', + '\u4146','\u4147','\u4148','\u4149','\u414a','\u414b','\u414c', + '\u414d','\u414e','\u414f','\u4150','\u4151','\u4152','\u4153', + '\u4154','\u4155','\u4156','\u4157','\u4158','\u4159','\u415a', + '\u415b','\u415c','\u415d','\u415e','\u415f','\u4160','\u4161', + '\u4162','\u4163','\u4164','\u4165','\u4166','\u4167','\u4168', + '\u4169','\u416a','\u416b','\u416c','\u416d','\u416e','\u416f', + '\u4170','\u4171','\u4172','\u4173','\u4174','\u4175','\u4176', + '\u4177','\u4178','\u4179','\u417a','\u417b','\u417c','\u417d', + '\u417e','\u417f','\u4180','\u4181','\u4182','\u4183','\u4184', + '\u4185','\u4186','\u4187','\u4188','\u4189','\u418a','\u418b', + '\u418c','\u418d','\u418e','\u418f','\u4190','\u4191','\u4192', + '\u4193','\u4194','\u4195','\u4196','\u4197','\u4198','\u4199', + '\u419a','\u419b','\u419c','\u419d','\u419e','\u419f','\u41a0', + '\u41a1','\u41a2','\u41a3','\u41a4','\u41a5','\u41a6','\u41a7', + '\u41a8','\u41a9','\u41aa','\u41ab','\u41ac','\u41ad','\u41ae', + '\u41af','\u41b0','\u41b1','\u41b2','\u41b3','\u41b4','\u41b5', + '\u41b6','\u41b7','\u41b8','\u41b9','\u41ba','\u41bb','\u41bc', + '\u41bd','\u41be','\u41bf','\u41c0','\u41c1','\u41c2','\u41c3', + '\u41c4','\u41c5','\u41c6','\u41c7','\u41c8','\u41c9','\u41ca', + '\u41cb','\u41cc','\u41cd','\u41ce','\u41cf','\u41d0','\u41d1', + '\u41d2','\u41d3','\u41d4','\u41d5','\u41d6','\u41d7','\u41d8', + '\u41d9','\u41da','\u41db','\u41dc','\u41dd','\u41de','\u41df', + '\u41e0','\u41e1','\u41e2','\u41e3','\u41e4','\u41e5','\u41e6', + '\u41e7','\u41e8','\u41e9','\u41ea','\u41eb','\u41ec','\u41ed', + '\u41ee','\u41ef','\u41f0','\u41f1','\u41f2','\u41f3','\u41f4', + '\u41f5','\u41f6','\u41f7','\u41f8','\u41f9','\u41fa','\u41fb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+16640; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void f4200() { + char[] cs = new char[] { + '\u4200','\u4201','\u4202','\u4203','\u4204','\u4205','\u4206', + '\u4207','\u4208','\u4209','\u420a','\u420b','\u420c','\u420d', + '\u420e','\u420f','\u4210','\u4211','\u4212','\u4213','\u4214', + '\u4215','\u4216','\u4217','\u4218','\u4219','\u421a','\u421b', + '\u421c','\u421d','\u421e','\u421f','\u4220','\u4221','\u4222', + '\u4223','\u4224','\u4225','\u4226','\u4227','\u4228','\u4229', + '\u422a','\u422b','\u422c','\u422d','\u422e','\u422f','\u4230', + '\u4231','\u4232','\u4233','\u4234','\u4235','\u4236','\u4237', + '\u4238','\u4239','\u423a','\u423b','\u423c','\u423d','\u423e', + '\u423f','\u4240','\u4241','\u4242','\u4243','\u4244','\u4245', + '\u4246','\u4247','\u4248','\u4249','\u424a','\u424b','\u424c', + '\u424d','\u424e','\u424f','\u4250','\u4251','\u4252','\u4253', + '\u4254','\u4255','\u4256','\u4257','\u4258','\u4259','\u425a', + '\u425b','\u425c','\u425d','\u425e','\u425f','\u4260','\u4261', + '\u4262','\u4263','\u4264','\u4265','\u4266','\u4267','\u4268', + '\u4269','\u426a','\u426b','\u426c','\u426d','\u426e','\u426f', + '\u4270','\u4271','\u4272','\u4273','\u4274','\u4275','\u4276', + '\u4277','\u4278','\u4279','\u427a','\u427b','\u427c','\u427d', + '\u427e','\u427f','\u4280','\u4281','\u4282','\u4283','\u4284', + '\u4285','\u4286','\u4287','\u4288','\u4289','\u428a','\u428b', + '\u428c','\u428d','\u428e','\u428f','\u4290','\u4291','\u4292', + '\u4293','\u4294','\u4295','\u4296','\u4297','\u4298','\u4299', + '\u429a','\u429b','\u429c','\u429d','\u429e','\u429f','\u42a0', + '\u42a1','\u42a2','\u42a3','\u42a4','\u42a5','\u42a6','\u42a7', + '\u42a8','\u42a9','\u42aa','\u42ab','\u42ac','\u42ad','\u42ae', + '\u42af','\u42b0','\u42b1','\u42b2','\u42b3','\u42b4','\u42b5', + '\u42b6','\u42b7','\u42b8','\u42b9','\u42ba','\u42bb','\u42bc', + '\u42bd','\u42be','\u42bf','\u42c0','\u42c1','\u42c2','\u42c3', + '\u42c4','\u42c5','\u42c6','\u42c7','\u42c8','\u42c9','\u42ca', + '\u42cb','\u42cc','\u42cd','\u42ce','\u42cf','\u42d0','\u42d1', + '\u42d2','\u42d3','\u42d4','\u42d5','\u42d6','\u42d7','\u42d8', + '\u42d9','\u42da','\u42db','\u42dc','\u42dd','\u42de','\u42df', + '\u42e0','\u42e1','\u42e2','\u42e3','\u42e4','\u42e5','\u42e6', + '\u42e7','\u42e8','\u42e9','\u42ea','\u42eb','\u42ec','\u42ed', + '\u42ee','\u42ef','\u42f0','\u42f1','\u42f2','\u42f3','\u42f4', + '\u42f5','\u42f6','\u42f7','\u42f8','\u42f9','\u42fa','\u42fb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+16896; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void f4300() { + char[] cs = new char[] { + '\u4300','\u4301','\u4302','\u4303','\u4304','\u4305','\u4306', + '\u4307','\u4308','\u4309','\u430a','\u430b','\u430c','\u430d', + '\u430e','\u430f','\u4310','\u4311','\u4312','\u4313','\u4314', + '\u4315','\u4316','\u4317','\u4318','\u4319','\u431a','\u431b', + '\u431c','\u431d','\u431e','\u431f','\u4320','\u4321','\u4322', + '\u4323','\u4324','\u4325','\u4326','\u4327','\u4328','\u4329', + '\u432a','\u432b','\u432c','\u432d','\u432e','\u432f','\u4330', + '\u4331','\u4332','\u4333','\u4334','\u4335','\u4336','\u4337', + '\u4338','\u4339','\u433a','\u433b','\u433c','\u433d','\u433e', + '\u433f','\u4340','\u4341','\u4342','\u4343','\u4344','\u4345', + '\u4346','\u4347','\u4348','\u4349','\u434a','\u434b','\u434c', + '\u434d','\u434e','\u434f','\u4350','\u4351','\u4352','\u4353', + '\u4354','\u4355','\u4356','\u4357','\u4358','\u4359','\u435a', + '\u435b','\u435c','\u435d','\u435e','\u435f','\u4360','\u4361', + '\u4362','\u4363','\u4364','\u4365','\u4366','\u4367','\u4368', + '\u4369','\u436a','\u436b','\u436c','\u436d','\u436e','\u436f', + '\u4370','\u4371','\u4372','\u4373','\u4374','\u4375','\u4376', + '\u4377','\u4378','\u4379','\u437a','\u437b','\u437c','\u437d', + '\u437e','\u437f','\u4380','\u4381','\u4382','\u4383','\u4384', + '\u4385','\u4386','\u4387','\u4388','\u4389','\u438a','\u438b', + '\u438c','\u438d','\u438e','\u438f','\u4390','\u4391','\u4392', + '\u4393','\u4394','\u4395','\u4396','\u4397','\u4398','\u4399', + '\u439a','\u439b','\u439c','\u439d','\u439e','\u439f','\u43a0', + '\u43a1','\u43a2','\u43a3','\u43a4','\u43a5','\u43a6','\u43a7', + '\u43a8','\u43a9','\u43aa','\u43ab','\u43ac','\u43ad','\u43ae', + '\u43af','\u43b0','\u43b1','\u43b2','\u43b3','\u43b4','\u43b5', + '\u43b6','\u43b7','\u43b8','\u43b9','\u43ba','\u43bb','\u43bc', + '\u43bd','\u43be','\u43bf','\u43c0','\u43c1','\u43c2','\u43c3', + '\u43c4','\u43c5','\u43c6','\u43c7','\u43c8','\u43c9','\u43ca', + '\u43cb','\u43cc','\u43cd','\u43ce','\u43cf','\u43d0','\u43d1', + '\u43d2','\u43d3','\u43d4','\u43d5','\u43d6','\u43d7','\u43d8', + '\u43d9','\u43da','\u43db','\u43dc','\u43dd','\u43de','\u43df', + '\u43e0','\u43e1','\u43e2','\u43e3','\u43e4','\u43e5','\u43e6', + '\u43e7','\u43e8','\u43e9','\u43ea','\u43eb','\u43ec','\u43ed', + '\u43ee','\u43ef','\u43f0','\u43f1','\u43f2','\u43f3','\u43f4', + '\u43f5','\u43f6','\u43f7','\u43f8','\u43f9','\u43fa','\u43fb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+17152; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void f4400() { + char[] cs = new char[] { + '\u4400','\u4401','\u4402','\u4403','\u4404','\u4405','\u4406', + '\u4407','\u4408','\u4409','\u440a','\u440b','\u440c','\u440d', + '\u440e','\u440f','\u4410','\u4411','\u4412','\u4413','\u4414', + '\u4415','\u4416','\u4417','\u4418','\u4419','\u441a','\u441b', + '\u441c','\u441d','\u441e','\u441f','\u4420','\u4421','\u4422', + '\u4423','\u4424','\u4425','\u4426','\u4427','\u4428','\u4429', + '\u442a','\u442b','\u442c','\u442d','\u442e','\u442f','\u4430', + '\u4431','\u4432','\u4433','\u4434','\u4435','\u4436','\u4437', + '\u4438','\u4439','\u443a','\u443b','\u443c','\u443d','\u443e', + '\u443f','\u4440','\u4441','\u4442','\u4443','\u4444','\u4445', + '\u4446','\u4447','\u4448','\u4449','\u444a','\u444b','\u444c', + '\u444d','\u444e','\u444f','\u4450','\u4451','\u4452','\u4453', + '\u4454','\u4455','\u4456','\u4457','\u4458','\u4459','\u445a', + '\u445b','\u445c','\u445d','\u445e','\u445f','\u4460','\u4461', + '\u4462','\u4463','\u4464','\u4465','\u4466','\u4467','\u4468', + '\u4469','\u446a','\u446b','\u446c','\u446d','\u446e','\u446f', + '\u4470','\u4471','\u4472','\u4473','\u4474','\u4475','\u4476', + '\u4477','\u4478','\u4479','\u447a','\u447b','\u447c','\u447d', + '\u447e','\u447f','\u4480','\u4481','\u4482','\u4483','\u4484', + '\u4485','\u4486','\u4487','\u4488','\u4489','\u448a','\u448b', + '\u448c','\u448d','\u448e','\u448f','\u4490','\u4491','\u4492', + '\u4493','\u4494','\u4495','\u4496','\u4497','\u4498','\u4499', + '\u449a','\u449b','\u449c','\u449d','\u449e','\u449f','\u44a0', + '\u44a1','\u44a2','\u44a3','\u44a4','\u44a5','\u44a6','\u44a7', + '\u44a8','\u44a9','\u44aa','\u44ab','\u44ac','\u44ad','\u44ae', + '\u44af','\u44b0','\u44b1','\u44b2','\u44b3','\u44b4','\u44b5', + '\u44b6','\u44b7','\u44b8','\u44b9','\u44ba','\u44bb','\u44bc', + '\u44bd','\u44be','\u44bf','\u44c0','\u44c1','\u44c2','\u44c3', + '\u44c4','\u44c5','\u44c6','\u44c7','\u44c8','\u44c9','\u44ca', + '\u44cb','\u44cc','\u44cd','\u44ce','\u44cf','\u44d0','\u44d1', + '\u44d2','\u44d3','\u44d4','\u44d5','\u44d6','\u44d7','\u44d8', + '\u44d9','\u44da','\u44db','\u44dc','\u44dd','\u44de','\u44df', + '\u44e0','\u44e1','\u44e2','\u44e3','\u44e4','\u44e5','\u44e6', + '\u44e7','\u44e8','\u44e9','\u44ea','\u44eb','\u44ec','\u44ed', + '\u44ee','\u44ef','\u44f0','\u44f1','\u44f2','\u44f3','\u44f4', + '\u44f5','\u44f6','\u44f7','\u44f8','\u44f9','\u44fa','\u44fb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+17408; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void f4500() { + char[] cs = new char[] { + '\u4500','\u4501','\u4502','\u4503','\u4504','\u4505','\u4506', + '\u4507','\u4508','\u4509','\u450a','\u450b','\u450c','\u450d', + '\u450e','\u450f','\u4510','\u4511','\u4512','\u4513','\u4514', + '\u4515','\u4516','\u4517','\u4518','\u4519','\u451a','\u451b', + '\u451c','\u451d','\u451e','\u451f','\u4520','\u4521','\u4522', + '\u4523','\u4524','\u4525','\u4526','\u4527','\u4528','\u4529', + '\u452a','\u452b','\u452c','\u452d','\u452e','\u452f','\u4530', + '\u4531','\u4532','\u4533','\u4534','\u4535','\u4536','\u4537', + '\u4538','\u4539','\u453a','\u453b','\u453c','\u453d','\u453e', + '\u453f','\u4540','\u4541','\u4542','\u4543','\u4544','\u4545', + '\u4546','\u4547','\u4548','\u4549','\u454a','\u454b','\u454c', + '\u454d','\u454e','\u454f','\u4550','\u4551','\u4552','\u4553', + '\u4554','\u4555','\u4556','\u4557','\u4558','\u4559','\u455a', + '\u455b','\u455c','\u455d','\u455e','\u455f','\u4560','\u4561', + '\u4562','\u4563','\u4564','\u4565','\u4566','\u4567','\u4568', + '\u4569','\u456a','\u456b','\u456c','\u456d','\u456e','\u456f', + '\u4570','\u4571','\u4572','\u4573','\u4574','\u4575','\u4576', + '\u4577','\u4578','\u4579','\u457a','\u457b','\u457c','\u457d', + '\u457e','\u457f','\u4580','\u4581','\u4582','\u4583','\u4584', + '\u4585','\u4586','\u4587','\u4588','\u4589','\u458a','\u458b', + '\u458c','\u458d','\u458e','\u458f','\u4590','\u4591','\u4592', + '\u4593','\u4594','\u4595','\u4596','\u4597','\u4598','\u4599', + '\u459a','\u459b','\u459c','\u459d','\u459e','\u459f','\u45a0', + '\u45a1','\u45a2','\u45a3','\u45a4','\u45a5','\u45a6','\u45a7', + '\u45a8','\u45a9','\u45aa','\u45ab','\u45ac','\u45ad','\u45ae', + '\u45af','\u45b0','\u45b1','\u45b2','\u45b3','\u45b4','\u45b5', + '\u45b6','\u45b7','\u45b8','\u45b9','\u45ba','\u45bb','\u45bc', + '\u45bd','\u45be','\u45bf','\u45c0','\u45c1','\u45c2','\u45c3', + '\u45c4','\u45c5','\u45c6','\u45c7','\u45c8','\u45c9','\u45ca', + '\u45cb','\u45cc','\u45cd','\u45ce','\u45cf','\u45d0','\u45d1', + '\u45d2','\u45d3','\u45d4','\u45d5','\u45d6','\u45d7','\u45d8', + '\u45d9','\u45da','\u45db','\u45dc','\u45dd','\u45de','\u45df', + '\u45e0','\u45e1','\u45e2','\u45e3','\u45e4','\u45e5','\u45e6', + '\u45e7','\u45e8','\u45e9','\u45ea','\u45eb','\u45ec','\u45ed', + '\u45ee','\u45ef','\u45f0','\u45f1','\u45f2','\u45f3','\u45f4', + '\u45f5','\u45f6','\u45f7','\u45f8','\u45f9','\u45fa','\u45fb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+17664; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void f4600() { + char[] cs = new char[] { + '\u4600','\u4601','\u4602','\u4603','\u4604','\u4605','\u4606', + '\u4607','\u4608','\u4609','\u460a','\u460b','\u460c','\u460d', + '\u460e','\u460f','\u4610','\u4611','\u4612','\u4613','\u4614', + '\u4615','\u4616','\u4617','\u4618','\u4619','\u461a','\u461b', + '\u461c','\u461d','\u461e','\u461f','\u4620','\u4621','\u4622', + '\u4623','\u4624','\u4625','\u4626','\u4627','\u4628','\u4629', + '\u462a','\u462b','\u462c','\u462d','\u462e','\u462f','\u4630', + '\u4631','\u4632','\u4633','\u4634','\u4635','\u4636','\u4637', + '\u4638','\u4639','\u463a','\u463b','\u463c','\u463d','\u463e', + '\u463f','\u4640','\u4641','\u4642','\u4643','\u4644','\u4645', + '\u4646','\u4647','\u4648','\u4649','\u464a','\u464b','\u464c', + '\u464d','\u464e','\u464f','\u4650','\u4651','\u4652','\u4653', + '\u4654','\u4655','\u4656','\u4657','\u4658','\u4659','\u465a', + '\u465b','\u465c','\u465d','\u465e','\u465f','\u4660','\u4661', + '\u4662','\u4663','\u4664','\u4665','\u4666','\u4667','\u4668', + '\u4669','\u466a','\u466b','\u466c','\u466d','\u466e','\u466f', + '\u4670','\u4671','\u4672','\u4673','\u4674','\u4675','\u4676', + '\u4677','\u4678','\u4679','\u467a','\u467b','\u467c','\u467d', + '\u467e','\u467f','\u4680','\u4681','\u4682','\u4683','\u4684', + '\u4685','\u4686','\u4687','\u4688','\u4689','\u468a','\u468b', + '\u468c','\u468d','\u468e','\u468f','\u4690','\u4691','\u4692', + '\u4693','\u4694','\u4695','\u4696','\u4697','\u4698','\u4699', + '\u469a','\u469b','\u469c','\u469d','\u469e','\u469f','\u46a0', + '\u46a1','\u46a2','\u46a3','\u46a4','\u46a5','\u46a6','\u46a7', + '\u46a8','\u46a9','\u46aa','\u46ab','\u46ac','\u46ad','\u46ae', + '\u46af','\u46b0','\u46b1','\u46b2','\u46b3','\u46b4','\u46b5', + '\u46b6','\u46b7','\u46b8','\u46b9','\u46ba','\u46bb','\u46bc', + '\u46bd','\u46be','\u46bf','\u46c0','\u46c1','\u46c2','\u46c3', + '\u46c4','\u46c5','\u46c6','\u46c7','\u46c8','\u46c9','\u46ca', + '\u46cb','\u46cc','\u46cd','\u46ce','\u46cf','\u46d0','\u46d1', + '\u46d2','\u46d3','\u46d4','\u46d5','\u46d6','\u46d7','\u46d8', + '\u46d9','\u46da','\u46db','\u46dc','\u46dd','\u46de','\u46df', + '\u46e0','\u46e1','\u46e2','\u46e3','\u46e4','\u46e5','\u46e6', + '\u46e7','\u46e8','\u46e9','\u46ea','\u46eb','\u46ec','\u46ed', + '\u46ee','\u46ef','\u46f0','\u46f1','\u46f2','\u46f3','\u46f4', + '\u46f5','\u46f6','\u46f7','\u46f8','\u46f9','\u46fa','\u46fb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+17920; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void f4700() { + char[] cs = new char[] { + '\u4700','\u4701','\u4702','\u4703','\u4704','\u4705','\u4706', + '\u4707','\u4708','\u4709','\u470a','\u470b','\u470c','\u470d', + '\u470e','\u470f','\u4710','\u4711','\u4712','\u4713','\u4714', + '\u4715','\u4716','\u4717','\u4718','\u4719','\u471a','\u471b', + '\u471c','\u471d','\u471e','\u471f','\u4720','\u4721','\u4722', + '\u4723','\u4724','\u4725','\u4726','\u4727','\u4728','\u4729', + '\u472a','\u472b','\u472c','\u472d','\u472e','\u472f','\u4730', + '\u4731','\u4732','\u4733','\u4734','\u4735','\u4736','\u4737', + '\u4738','\u4739','\u473a','\u473b','\u473c','\u473d','\u473e', + '\u473f','\u4740','\u4741','\u4742','\u4743','\u4744','\u4745', + '\u4746','\u4747','\u4748','\u4749','\u474a','\u474b','\u474c', + '\u474d','\u474e','\u474f','\u4750','\u4751','\u4752','\u4753', + '\u4754','\u4755','\u4756','\u4757','\u4758','\u4759','\u475a', + '\u475b','\u475c','\u475d','\u475e','\u475f','\u4760','\u4761', + '\u4762','\u4763','\u4764','\u4765','\u4766','\u4767','\u4768', + '\u4769','\u476a','\u476b','\u476c','\u476d','\u476e','\u476f', + '\u4770','\u4771','\u4772','\u4773','\u4774','\u4775','\u4776', + '\u4777','\u4778','\u4779','\u477a','\u477b','\u477c','\u477d', + '\u477e','\u477f','\u4780','\u4781','\u4782','\u4783','\u4784', + '\u4785','\u4786','\u4787','\u4788','\u4789','\u478a','\u478b', + '\u478c','\u478d','\u478e','\u478f','\u4790','\u4791','\u4792', + '\u4793','\u4794','\u4795','\u4796','\u4797','\u4798','\u4799', + '\u479a','\u479b','\u479c','\u479d','\u479e','\u479f','\u47a0', + '\u47a1','\u47a2','\u47a3','\u47a4','\u47a5','\u47a6','\u47a7', + '\u47a8','\u47a9','\u47aa','\u47ab','\u47ac','\u47ad','\u47ae', + '\u47af','\u47b0','\u47b1','\u47b2','\u47b3','\u47b4','\u47b5', + '\u47b6','\u47b7','\u47b8','\u47b9','\u47ba','\u47bb','\u47bc', + '\u47bd','\u47be','\u47bf','\u47c0','\u47c1','\u47c2','\u47c3', + '\u47c4','\u47c5','\u47c6','\u47c7','\u47c8','\u47c9','\u47ca', + '\u47cb','\u47cc','\u47cd','\u47ce','\u47cf','\u47d0','\u47d1', + '\u47d2','\u47d3','\u47d4','\u47d5','\u47d6','\u47d7','\u47d8', + '\u47d9','\u47da','\u47db','\u47dc','\u47dd','\u47de','\u47df', + '\u47e0','\u47e1','\u47e2','\u47e3','\u47e4','\u47e5','\u47e6', + '\u47e7','\u47e8','\u47e9','\u47ea','\u47eb','\u47ec','\u47ed', + '\u47ee','\u47ef','\u47f0','\u47f1','\u47f2','\u47f3','\u47f4', + '\u47f5','\u47f6','\u47f7','\u47f8','\u47f9','\u47fa','\u47fb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+18176; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void f4800() { + char[] cs = new char[] { + '\u4800','\u4801','\u4802','\u4803','\u4804','\u4805','\u4806', + '\u4807','\u4808','\u4809','\u480a','\u480b','\u480c','\u480d', + '\u480e','\u480f','\u4810','\u4811','\u4812','\u4813','\u4814', + '\u4815','\u4816','\u4817','\u4818','\u4819','\u481a','\u481b', + '\u481c','\u481d','\u481e','\u481f','\u4820','\u4821','\u4822', + '\u4823','\u4824','\u4825','\u4826','\u4827','\u4828','\u4829', + '\u482a','\u482b','\u482c','\u482d','\u482e','\u482f','\u4830', + '\u4831','\u4832','\u4833','\u4834','\u4835','\u4836','\u4837', + '\u4838','\u4839','\u483a','\u483b','\u483c','\u483d','\u483e', + '\u483f','\u4840','\u4841','\u4842','\u4843','\u4844','\u4845', + '\u4846','\u4847','\u4848','\u4849','\u484a','\u484b','\u484c', + '\u484d','\u484e','\u484f','\u4850','\u4851','\u4852','\u4853', + '\u4854','\u4855','\u4856','\u4857','\u4858','\u4859','\u485a', + '\u485b','\u485c','\u485d','\u485e','\u485f','\u4860','\u4861', + '\u4862','\u4863','\u4864','\u4865','\u4866','\u4867','\u4868', + '\u4869','\u486a','\u486b','\u486c','\u486d','\u486e','\u486f', + '\u4870','\u4871','\u4872','\u4873','\u4874','\u4875','\u4876', + '\u4877','\u4878','\u4879','\u487a','\u487b','\u487c','\u487d', + '\u487e','\u487f','\u4880','\u4881','\u4882','\u4883','\u4884', + '\u4885','\u4886','\u4887','\u4888','\u4889','\u488a','\u488b', + '\u488c','\u488d','\u488e','\u488f','\u4890','\u4891','\u4892', + '\u4893','\u4894','\u4895','\u4896','\u4897','\u4898','\u4899', + '\u489a','\u489b','\u489c','\u489d','\u489e','\u489f','\u48a0', + '\u48a1','\u48a2','\u48a3','\u48a4','\u48a5','\u48a6','\u48a7', + '\u48a8','\u48a9','\u48aa','\u48ab','\u48ac','\u48ad','\u48ae', + '\u48af','\u48b0','\u48b1','\u48b2','\u48b3','\u48b4','\u48b5', + '\u48b6','\u48b7','\u48b8','\u48b9','\u48ba','\u48bb','\u48bc', + '\u48bd','\u48be','\u48bf','\u48c0','\u48c1','\u48c2','\u48c3', + '\u48c4','\u48c5','\u48c6','\u48c7','\u48c8','\u48c9','\u48ca', + '\u48cb','\u48cc','\u48cd','\u48ce','\u48cf','\u48d0','\u48d1', + '\u48d2','\u48d3','\u48d4','\u48d5','\u48d6','\u48d7','\u48d8', + '\u48d9','\u48da','\u48db','\u48dc','\u48dd','\u48de','\u48df', + '\u48e0','\u48e1','\u48e2','\u48e3','\u48e4','\u48e5','\u48e6', + '\u48e7','\u48e8','\u48e9','\u48ea','\u48eb','\u48ec','\u48ed', + '\u48ee','\u48ef','\u48f0','\u48f1','\u48f2','\u48f3','\u48f4', + '\u48f5','\u48f6','\u48f7','\u48f8','\u48f9','\u48fa','\u48fb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+18432; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void f4900() { + char[] cs = new char[] { + '\u4900','\u4901','\u4902','\u4903','\u4904','\u4905','\u4906', + '\u4907','\u4908','\u4909','\u490a','\u490b','\u490c','\u490d', + '\u490e','\u490f','\u4910','\u4911','\u4912','\u4913','\u4914', + '\u4915','\u4916','\u4917','\u4918','\u4919','\u491a','\u491b', + '\u491c','\u491d','\u491e','\u491f','\u4920','\u4921','\u4922', + '\u4923','\u4924','\u4925','\u4926','\u4927','\u4928','\u4929', + '\u492a','\u492b','\u492c','\u492d','\u492e','\u492f','\u4930', + '\u4931','\u4932','\u4933','\u4934','\u4935','\u4936','\u4937', + '\u4938','\u4939','\u493a','\u493b','\u493c','\u493d','\u493e', + '\u493f','\u4940','\u4941','\u4942','\u4943','\u4944','\u4945', + '\u4946','\u4947','\u4948','\u4949','\u494a','\u494b','\u494c', + '\u494d','\u494e','\u494f','\u4950','\u4951','\u4952','\u4953', + '\u4954','\u4955','\u4956','\u4957','\u4958','\u4959','\u495a', + '\u495b','\u495c','\u495d','\u495e','\u495f','\u4960','\u4961', + '\u4962','\u4963','\u4964','\u4965','\u4966','\u4967','\u4968', + '\u4969','\u496a','\u496b','\u496c','\u496d','\u496e','\u496f', + '\u4970','\u4971','\u4972','\u4973','\u4974','\u4975','\u4976', + '\u4977','\u4978','\u4979','\u497a','\u497b','\u497c','\u497d', + '\u497e','\u497f','\u4980','\u4981','\u4982','\u4983','\u4984', + '\u4985','\u4986','\u4987','\u4988','\u4989','\u498a','\u498b', + '\u498c','\u498d','\u498e','\u498f','\u4990','\u4991','\u4992', + '\u4993','\u4994','\u4995','\u4996','\u4997','\u4998','\u4999', + '\u499a','\u499b','\u499c','\u499d','\u499e','\u499f','\u49a0', + '\u49a1','\u49a2','\u49a3','\u49a4','\u49a5','\u49a6','\u49a7', + '\u49a8','\u49a9','\u49aa','\u49ab','\u49ac','\u49ad','\u49ae', + '\u49af','\u49b0','\u49b1','\u49b2','\u49b3','\u49b4','\u49b5', + '\u49b6','\u49b7','\u49b8','\u49b9','\u49ba','\u49bb','\u49bc', + '\u49bd','\u49be','\u49bf','\u49c0','\u49c1','\u49c2','\u49c3', + '\u49c4','\u49c5','\u49c6','\u49c7','\u49c8','\u49c9','\u49ca', + '\u49cb','\u49cc','\u49cd','\u49ce','\u49cf','\u49d0','\u49d1', + '\u49d2','\u49d3','\u49d4','\u49d5','\u49d6','\u49d7','\u49d8', + '\u49d9','\u49da','\u49db','\u49dc','\u49dd','\u49de','\u49df', + '\u49e0','\u49e1','\u49e2','\u49e3','\u49e4','\u49e5','\u49e6', + '\u49e7','\u49e8','\u49e9','\u49ea','\u49eb','\u49ec','\u49ed', + '\u49ee','\u49ef','\u49f0','\u49f1','\u49f2','\u49f3','\u49f4', + '\u49f5','\u49f6','\u49f7','\u49f8','\u49f9','\u49fa','\u49fb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+18688; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void f4a00() { + char[] cs = new char[] { + '\u4a00','\u4a01','\u4a02','\u4a03','\u4a04','\u4a05','\u4a06', + '\u4a07','\u4a08','\u4a09','\u4a0a','\u4a0b','\u4a0c','\u4a0d', + '\u4a0e','\u4a0f','\u4a10','\u4a11','\u4a12','\u4a13','\u4a14', + '\u4a15','\u4a16','\u4a17','\u4a18','\u4a19','\u4a1a','\u4a1b', + '\u4a1c','\u4a1d','\u4a1e','\u4a1f','\u4a20','\u4a21','\u4a22', + '\u4a23','\u4a24','\u4a25','\u4a26','\u4a27','\u4a28','\u4a29', + '\u4a2a','\u4a2b','\u4a2c','\u4a2d','\u4a2e','\u4a2f','\u4a30', + '\u4a31','\u4a32','\u4a33','\u4a34','\u4a35','\u4a36','\u4a37', + '\u4a38','\u4a39','\u4a3a','\u4a3b','\u4a3c','\u4a3d','\u4a3e', + '\u4a3f','\u4a40','\u4a41','\u4a42','\u4a43','\u4a44','\u4a45', + '\u4a46','\u4a47','\u4a48','\u4a49','\u4a4a','\u4a4b','\u4a4c', + '\u4a4d','\u4a4e','\u4a4f','\u4a50','\u4a51','\u4a52','\u4a53', + '\u4a54','\u4a55','\u4a56','\u4a57','\u4a58','\u4a59','\u4a5a', + '\u4a5b','\u4a5c','\u4a5d','\u4a5e','\u4a5f','\u4a60','\u4a61', + '\u4a62','\u4a63','\u4a64','\u4a65','\u4a66','\u4a67','\u4a68', + '\u4a69','\u4a6a','\u4a6b','\u4a6c','\u4a6d','\u4a6e','\u4a6f', + '\u4a70','\u4a71','\u4a72','\u4a73','\u4a74','\u4a75','\u4a76', + '\u4a77','\u4a78','\u4a79','\u4a7a','\u4a7b','\u4a7c','\u4a7d', + '\u4a7e','\u4a7f','\u4a80','\u4a81','\u4a82','\u4a83','\u4a84', + '\u4a85','\u4a86','\u4a87','\u4a88','\u4a89','\u4a8a','\u4a8b', + '\u4a8c','\u4a8d','\u4a8e','\u4a8f','\u4a90','\u4a91','\u4a92', + '\u4a93','\u4a94','\u4a95','\u4a96','\u4a97','\u4a98','\u4a99', + '\u4a9a','\u4a9b','\u4a9c','\u4a9d','\u4a9e','\u4a9f','\u4aa0', + '\u4aa1','\u4aa2','\u4aa3','\u4aa4','\u4aa5','\u4aa6','\u4aa7', + '\u4aa8','\u4aa9','\u4aaa','\u4aab','\u4aac','\u4aad','\u4aae', + '\u4aaf','\u4ab0','\u4ab1','\u4ab2','\u4ab3','\u4ab4','\u4ab5', + '\u4ab6','\u4ab7','\u4ab8','\u4ab9','\u4aba','\u4abb','\u4abc', + '\u4abd','\u4abe','\u4abf','\u4ac0','\u4ac1','\u4ac2','\u4ac3', + '\u4ac4','\u4ac5','\u4ac6','\u4ac7','\u4ac8','\u4ac9','\u4aca', + '\u4acb','\u4acc','\u4acd','\u4ace','\u4acf','\u4ad0','\u4ad1', + '\u4ad2','\u4ad3','\u4ad4','\u4ad5','\u4ad6','\u4ad7','\u4ad8', + '\u4ad9','\u4ada','\u4adb','\u4adc','\u4add','\u4ade','\u4adf', + '\u4ae0','\u4ae1','\u4ae2','\u4ae3','\u4ae4','\u4ae5','\u4ae6', + '\u4ae7','\u4ae8','\u4ae9','\u4aea','\u4aeb','\u4aec','\u4aed', + '\u4aee','\u4aef','\u4af0','\u4af1','\u4af2','\u4af3','\u4af4', + '\u4af5','\u4af6','\u4af7','\u4af8','\u4af9','\u4afa','\u4afb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+18944; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void f4b00() { + char[] cs = new char[] { + '\u4b00','\u4b01','\u4b02','\u4b03','\u4b04','\u4b05','\u4b06', + '\u4b07','\u4b08','\u4b09','\u4b0a','\u4b0b','\u4b0c','\u4b0d', + '\u4b0e','\u4b0f','\u4b10','\u4b11','\u4b12','\u4b13','\u4b14', + '\u4b15','\u4b16','\u4b17','\u4b18','\u4b19','\u4b1a','\u4b1b', + '\u4b1c','\u4b1d','\u4b1e','\u4b1f','\u4b20','\u4b21','\u4b22', + '\u4b23','\u4b24','\u4b25','\u4b26','\u4b27','\u4b28','\u4b29', + '\u4b2a','\u4b2b','\u4b2c','\u4b2d','\u4b2e','\u4b2f','\u4b30', + '\u4b31','\u4b32','\u4b33','\u4b34','\u4b35','\u4b36','\u4b37', + '\u4b38','\u4b39','\u4b3a','\u4b3b','\u4b3c','\u4b3d','\u4b3e', + '\u4b3f','\u4b40','\u4b41','\u4b42','\u4b43','\u4b44','\u4b45', + '\u4b46','\u4b47','\u4b48','\u4b49','\u4b4a','\u4b4b','\u4b4c', + '\u4b4d','\u4b4e','\u4b4f','\u4b50','\u4b51','\u4b52','\u4b53', + '\u4b54','\u4b55','\u4b56','\u4b57','\u4b58','\u4b59','\u4b5a', + '\u4b5b','\u4b5c','\u4b5d','\u4b5e','\u4b5f','\u4b60','\u4b61', + '\u4b62','\u4b63','\u4b64','\u4b65','\u4b66','\u4b67','\u4b68', + '\u4b69','\u4b6a','\u4b6b','\u4b6c','\u4b6d','\u4b6e','\u4b6f', + '\u4b70','\u4b71','\u4b72','\u4b73','\u4b74','\u4b75','\u4b76', + '\u4b77','\u4b78','\u4b79','\u4b7a','\u4b7b','\u4b7c','\u4b7d', + '\u4b7e','\u4b7f','\u4b80','\u4b81','\u4b82','\u4b83','\u4b84', + '\u4b85','\u4b86','\u4b87','\u4b88','\u4b89','\u4b8a','\u4b8b', + '\u4b8c','\u4b8d','\u4b8e','\u4b8f','\u4b90','\u4b91','\u4b92', + '\u4b93','\u4b94','\u4b95','\u4b96','\u4b97','\u4b98','\u4b99', + '\u4b9a','\u4b9b','\u4b9c','\u4b9d','\u4b9e','\u4b9f','\u4ba0', + '\u4ba1','\u4ba2','\u4ba3','\u4ba4','\u4ba5','\u4ba6','\u4ba7', + '\u4ba8','\u4ba9','\u4baa','\u4bab','\u4bac','\u4bad','\u4bae', + '\u4baf','\u4bb0','\u4bb1','\u4bb2','\u4bb3','\u4bb4','\u4bb5', + '\u4bb6','\u4bb7','\u4bb8','\u4bb9','\u4bba','\u4bbb','\u4bbc', + '\u4bbd','\u4bbe','\u4bbf','\u4bc0','\u4bc1','\u4bc2','\u4bc3', + '\u4bc4','\u4bc5','\u4bc6','\u4bc7','\u4bc8','\u4bc9','\u4bca', + '\u4bcb','\u4bcc','\u4bcd','\u4bce','\u4bcf','\u4bd0','\u4bd1', + '\u4bd2','\u4bd3','\u4bd4','\u4bd5','\u4bd6','\u4bd7','\u4bd8', + '\u4bd9','\u4bda','\u4bdb','\u4bdc','\u4bdd','\u4bde','\u4bdf', + '\u4be0','\u4be1','\u4be2','\u4be3','\u4be4','\u4be5','\u4be6', + '\u4be7','\u4be8','\u4be9','\u4bea','\u4beb','\u4bec','\u4bed', + '\u4bee','\u4bef','\u4bf0','\u4bf1','\u4bf2','\u4bf3','\u4bf4', + '\u4bf5','\u4bf6','\u4bf7','\u4bf8','\u4bf9','\u4bfa','\u4bfb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+19200; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void f4c00() { + char[] cs = new char[] { + '\u4c00','\u4c01','\u4c02','\u4c03','\u4c04','\u4c05','\u4c06', + '\u4c07','\u4c08','\u4c09','\u4c0a','\u4c0b','\u4c0c','\u4c0d', + '\u4c0e','\u4c0f','\u4c10','\u4c11','\u4c12','\u4c13','\u4c14', + '\u4c15','\u4c16','\u4c17','\u4c18','\u4c19','\u4c1a','\u4c1b', + '\u4c1c','\u4c1d','\u4c1e','\u4c1f','\u4c20','\u4c21','\u4c22', + '\u4c23','\u4c24','\u4c25','\u4c26','\u4c27','\u4c28','\u4c29', + '\u4c2a','\u4c2b','\u4c2c','\u4c2d','\u4c2e','\u4c2f','\u4c30', + '\u4c31','\u4c32','\u4c33','\u4c34','\u4c35','\u4c36','\u4c37', + '\u4c38','\u4c39','\u4c3a','\u4c3b','\u4c3c','\u4c3d','\u4c3e', + '\u4c3f','\u4c40','\u4c41','\u4c42','\u4c43','\u4c44','\u4c45', + '\u4c46','\u4c47','\u4c48','\u4c49','\u4c4a','\u4c4b','\u4c4c', + '\u4c4d','\u4c4e','\u4c4f','\u4c50','\u4c51','\u4c52','\u4c53', + '\u4c54','\u4c55','\u4c56','\u4c57','\u4c58','\u4c59','\u4c5a', + '\u4c5b','\u4c5c','\u4c5d','\u4c5e','\u4c5f','\u4c60','\u4c61', + '\u4c62','\u4c63','\u4c64','\u4c65','\u4c66','\u4c67','\u4c68', + '\u4c69','\u4c6a','\u4c6b','\u4c6c','\u4c6d','\u4c6e','\u4c6f', + '\u4c70','\u4c71','\u4c72','\u4c73','\u4c74','\u4c75','\u4c76', + '\u4c77','\u4c78','\u4c79','\u4c7a','\u4c7b','\u4c7c','\u4c7d', + '\u4c7e','\u4c7f','\u4c80','\u4c81','\u4c82','\u4c83','\u4c84', + '\u4c85','\u4c86','\u4c87','\u4c88','\u4c89','\u4c8a','\u4c8b', + '\u4c8c','\u4c8d','\u4c8e','\u4c8f','\u4c90','\u4c91','\u4c92', + '\u4c93','\u4c94','\u4c95','\u4c96','\u4c97','\u4c98','\u4c99', + '\u4c9a','\u4c9b','\u4c9c','\u4c9d','\u4c9e','\u4c9f','\u4ca0', + '\u4ca1','\u4ca2','\u4ca3','\u4ca4','\u4ca5','\u4ca6','\u4ca7', + '\u4ca8','\u4ca9','\u4caa','\u4cab','\u4cac','\u4cad','\u4cae', + '\u4caf','\u4cb0','\u4cb1','\u4cb2','\u4cb3','\u4cb4','\u4cb5', + '\u4cb6','\u4cb7','\u4cb8','\u4cb9','\u4cba','\u4cbb','\u4cbc', + '\u4cbd','\u4cbe','\u4cbf','\u4cc0','\u4cc1','\u4cc2','\u4cc3', + '\u4cc4','\u4cc5','\u4cc6','\u4cc7','\u4cc8','\u4cc9','\u4cca', + '\u4ccb','\u4ccc','\u4ccd','\u4cce','\u4ccf','\u4cd0','\u4cd1', + '\u4cd2','\u4cd3','\u4cd4','\u4cd5','\u4cd6','\u4cd7','\u4cd8', + '\u4cd9','\u4cda','\u4cdb','\u4cdc','\u4cdd','\u4cde','\u4cdf', + '\u4ce0','\u4ce1','\u4ce2','\u4ce3','\u4ce4','\u4ce5','\u4ce6', + '\u4ce7','\u4ce8','\u4ce9','\u4cea','\u4ceb','\u4cec','\u4ced', + '\u4cee','\u4cef','\u4cf0','\u4cf1','\u4cf2','\u4cf3','\u4cf4', + '\u4cf5','\u4cf6','\u4cf7','\u4cf8','\u4cf9','\u4cfa','\u4cfb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+19456; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void f4d00() { + char[] cs = new char[] { + '\u4d00','\u4d01','\u4d02','\u4d03','\u4d04','\u4d05','\u4d06', + '\u4d07','\u4d08','\u4d09','\u4d0a','\u4d0b','\u4d0c','\u4d0d', + '\u4d0e','\u4d0f','\u4d10','\u4d11','\u4d12','\u4d13','\u4d14', + '\u4d15','\u4d16','\u4d17','\u4d18','\u4d19','\u4d1a','\u4d1b', + '\u4d1c','\u4d1d','\u4d1e','\u4d1f','\u4d20','\u4d21','\u4d22', + '\u4d23','\u4d24','\u4d25','\u4d26','\u4d27','\u4d28','\u4d29', + '\u4d2a','\u4d2b','\u4d2c','\u4d2d','\u4d2e','\u4d2f','\u4d30', + '\u4d31','\u4d32','\u4d33','\u4d34','\u4d35','\u4d36','\u4d37', + '\u4d38','\u4d39','\u4d3a','\u4d3b','\u4d3c','\u4d3d','\u4d3e', + '\u4d3f','\u4d40','\u4d41','\u4d42','\u4d43','\u4d44','\u4d45', + '\u4d46','\u4d47','\u4d48','\u4d49','\u4d4a','\u4d4b','\u4d4c', + '\u4d4d','\u4d4e','\u4d4f','\u4d50','\u4d51','\u4d52','\u4d53', + '\u4d54','\u4d55','\u4d56','\u4d57','\u4d58','\u4d59','\u4d5a', + '\u4d5b','\u4d5c','\u4d5d','\u4d5e','\u4d5f','\u4d60','\u4d61', + '\u4d62','\u4d63','\u4d64','\u4d65','\u4d66','\u4d67','\u4d68', + '\u4d69','\u4d6a','\u4d6b','\u4d6c','\u4d6d','\u4d6e','\u4d6f', + '\u4d70','\u4d71','\u4d72','\u4d73','\u4d74','\u4d75','\u4d76', + '\u4d77','\u4d78','\u4d79','\u4d7a','\u4d7b','\u4d7c','\u4d7d', + '\u4d7e','\u4d7f','\u4d80','\u4d81','\u4d82','\u4d83','\u4d84', + '\u4d85','\u4d86','\u4d87','\u4d88','\u4d89','\u4d8a','\u4d8b', + '\u4d8c','\u4d8d','\u4d8e','\u4d8f','\u4d90','\u4d91','\u4d92', + '\u4d93','\u4d94','\u4d95','\u4d96','\u4d97','\u4d98','\u4d99', + '\u4d9a','\u4d9b','\u4d9c','\u4d9d','\u4d9e','\u4d9f','\u4da0', + '\u4da1','\u4da2','\u4da3','\u4da4','\u4da5','\u4da6','\u4da7', + '\u4da8','\u4da9','\u4daa','\u4dab','\u4dac','\u4dad','\u4dae', + '\u4daf','\u4db0','\u4db1','\u4db2','\u4db3','\u4db4','\u4db5', + '\u4db6','\u4db7','\u4db8','\u4db9','\u4dba','\u4dbb','\u4dbc', + '\u4dbd','\u4dbe','\u4dbf','\u4dc0','\u4dc1','\u4dc2','\u4dc3', + '\u4dc4','\u4dc5','\u4dc6','\u4dc7','\u4dc8','\u4dc9','\u4dca', + '\u4dcb','\u4dcc','\u4dcd','\u4dce','\u4dcf','\u4dd0','\u4dd1', + '\u4dd2','\u4dd3','\u4dd4','\u4dd5','\u4dd6','\u4dd7','\u4dd8', + '\u4dd9','\u4dda','\u4ddb','\u4ddc','\u4ddd','\u4dde','\u4ddf', + '\u4de0','\u4de1','\u4de2','\u4de3','\u4de4','\u4de5','\u4de6', + '\u4de7','\u4de8','\u4de9','\u4dea','\u4deb','\u4dec','\u4ded', + '\u4dee','\u4def','\u4df0','\u4df1','\u4df2','\u4df3','\u4df4', + '\u4df5','\u4df6','\u4df7','\u4df8','\u4df9','\u4dfa','\u4dfb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+19712; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void f4e00() { + char[] cs = new char[] { + '\u4e00','\u4e01','\u4e02','\u4e03','\u4e04','\u4e05','\u4e06', + '\u4e07','\u4e08','\u4e09','\u4e0a','\u4e0b','\u4e0c','\u4e0d', + '\u4e0e','\u4e0f','\u4e10','\u4e11','\u4e12','\u4e13','\u4e14', + '\u4e15','\u4e16','\u4e17','\u4e18','\u4e19','\u4e1a','\u4e1b', + '\u4e1c','\u4e1d','\u4e1e','\u4e1f','\u4e20','\u4e21','\u4e22', + '\u4e23','\u4e24','\u4e25','\u4e26','\u4e27','\u4e28','\u4e29', + '\u4e2a','\u4e2b','\u4e2c','\u4e2d','\u4e2e','\u4e2f','\u4e30', + '\u4e31','\u4e32','\u4e33','\u4e34','\u4e35','\u4e36','\u4e37', + '\u4e38','\u4e39','\u4e3a','\u4e3b','\u4e3c','\u4e3d','\u4e3e', + '\u4e3f','\u4e40','\u4e41','\u4e42','\u4e43','\u4e44','\u4e45', + '\u4e46','\u4e47','\u4e48','\u4e49','\u4e4a','\u4e4b','\u4e4c', + '\u4e4d','\u4e4e','\u4e4f','\u4e50','\u4e51','\u4e52','\u4e53', + '\u4e54','\u4e55','\u4e56','\u4e57','\u4e58','\u4e59','\u4e5a', + '\u4e5b','\u4e5c','\u4e5d','\u4e5e','\u4e5f','\u4e60','\u4e61', + '\u4e62','\u4e63','\u4e64','\u4e65','\u4e66','\u4e67','\u4e68', + '\u4e69','\u4e6a','\u4e6b','\u4e6c','\u4e6d','\u4e6e','\u4e6f', + '\u4e70','\u4e71','\u4e72','\u4e73','\u4e74','\u4e75','\u4e76', + '\u4e77','\u4e78','\u4e79','\u4e7a','\u4e7b','\u4e7c','\u4e7d', + '\u4e7e','\u4e7f','\u4e80','\u4e81','\u4e82','\u4e83','\u4e84', + '\u4e85','\u4e86','\u4e87','\u4e88','\u4e89','\u4e8a','\u4e8b', + '\u4e8c','\u4e8d','\u4e8e','\u4e8f','\u4e90','\u4e91','\u4e92', + '\u4e93','\u4e94','\u4e95','\u4e96','\u4e97','\u4e98','\u4e99', + '\u4e9a','\u4e9b','\u4e9c','\u4e9d','\u4e9e','\u4e9f','\u4ea0', + '\u4ea1','\u4ea2','\u4ea3','\u4ea4','\u4ea5','\u4ea6','\u4ea7', + '\u4ea8','\u4ea9','\u4eaa','\u4eab','\u4eac','\u4ead','\u4eae', + '\u4eaf','\u4eb0','\u4eb1','\u4eb2','\u4eb3','\u4eb4','\u4eb5', + '\u4eb6','\u4eb7','\u4eb8','\u4eb9','\u4eba','\u4ebb','\u4ebc', + '\u4ebd','\u4ebe','\u4ebf','\u4ec0','\u4ec1','\u4ec2','\u4ec3', + '\u4ec4','\u4ec5','\u4ec6','\u4ec7','\u4ec8','\u4ec9','\u4eca', + '\u4ecb','\u4ecc','\u4ecd','\u4ece','\u4ecf','\u4ed0','\u4ed1', + '\u4ed2','\u4ed3','\u4ed4','\u4ed5','\u4ed6','\u4ed7','\u4ed8', + '\u4ed9','\u4eda','\u4edb','\u4edc','\u4edd','\u4ede','\u4edf', + '\u4ee0','\u4ee1','\u4ee2','\u4ee3','\u4ee4','\u4ee5','\u4ee6', + '\u4ee7','\u4ee8','\u4ee9','\u4eea','\u4eeb','\u4eec','\u4eed', + '\u4eee','\u4eef','\u4ef0','\u4ef1','\u4ef2','\u4ef3','\u4ef4', + '\u4ef5','\u4ef6','\u4ef7','\u4ef8','\u4ef9','\u4efa','\u4efb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+19968; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void f4f00() { + char[] cs = new char[] { + '\u4f00','\u4f01','\u4f02','\u4f03','\u4f04','\u4f05','\u4f06', + '\u4f07','\u4f08','\u4f09','\u4f0a','\u4f0b','\u4f0c','\u4f0d', + '\u4f0e','\u4f0f','\u4f10','\u4f11','\u4f12','\u4f13','\u4f14', + '\u4f15','\u4f16','\u4f17','\u4f18','\u4f19','\u4f1a','\u4f1b', + '\u4f1c','\u4f1d','\u4f1e','\u4f1f','\u4f20','\u4f21','\u4f22', + '\u4f23','\u4f24','\u4f25','\u4f26','\u4f27','\u4f28','\u4f29', + '\u4f2a','\u4f2b','\u4f2c','\u4f2d','\u4f2e','\u4f2f','\u4f30', + '\u4f31','\u4f32','\u4f33','\u4f34','\u4f35','\u4f36','\u4f37', + '\u4f38','\u4f39','\u4f3a','\u4f3b','\u4f3c','\u4f3d','\u4f3e', + '\u4f3f','\u4f40','\u4f41','\u4f42','\u4f43','\u4f44','\u4f45', + '\u4f46','\u4f47','\u4f48','\u4f49','\u4f4a','\u4f4b','\u4f4c', + '\u4f4d','\u4f4e','\u4f4f','\u4f50','\u4f51','\u4f52','\u4f53', + '\u4f54','\u4f55','\u4f56','\u4f57','\u4f58','\u4f59','\u4f5a', + '\u4f5b','\u4f5c','\u4f5d','\u4f5e','\u4f5f','\u4f60','\u4f61', + '\u4f62','\u4f63','\u4f64','\u4f65','\u4f66','\u4f67','\u4f68', + '\u4f69','\u4f6a','\u4f6b','\u4f6c','\u4f6d','\u4f6e','\u4f6f', + '\u4f70','\u4f71','\u4f72','\u4f73','\u4f74','\u4f75','\u4f76', + '\u4f77','\u4f78','\u4f79','\u4f7a','\u4f7b','\u4f7c','\u4f7d', + '\u4f7e','\u4f7f','\u4f80','\u4f81','\u4f82','\u4f83','\u4f84', + '\u4f85','\u4f86','\u4f87','\u4f88','\u4f89','\u4f8a','\u4f8b', + '\u4f8c','\u4f8d','\u4f8e','\u4f8f','\u4f90','\u4f91','\u4f92', + '\u4f93','\u4f94','\u4f95','\u4f96','\u4f97','\u4f98','\u4f99', + '\u4f9a','\u4f9b','\u4f9c','\u4f9d','\u4f9e','\u4f9f','\u4fa0', + '\u4fa1','\u4fa2','\u4fa3','\u4fa4','\u4fa5','\u4fa6','\u4fa7', + '\u4fa8','\u4fa9','\u4faa','\u4fab','\u4fac','\u4fad','\u4fae', + '\u4faf','\u4fb0','\u4fb1','\u4fb2','\u4fb3','\u4fb4','\u4fb5', + '\u4fb6','\u4fb7','\u4fb8','\u4fb9','\u4fba','\u4fbb','\u4fbc', + '\u4fbd','\u4fbe','\u4fbf','\u4fc0','\u4fc1','\u4fc2','\u4fc3', + '\u4fc4','\u4fc5','\u4fc6','\u4fc7','\u4fc8','\u4fc9','\u4fca', + '\u4fcb','\u4fcc','\u4fcd','\u4fce','\u4fcf','\u4fd0','\u4fd1', + '\u4fd2','\u4fd3','\u4fd4','\u4fd5','\u4fd6','\u4fd7','\u4fd8', + '\u4fd9','\u4fda','\u4fdb','\u4fdc','\u4fdd','\u4fde','\u4fdf', + '\u4fe0','\u4fe1','\u4fe2','\u4fe3','\u4fe4','\u4fe5','\u4fe6', + '\u4fe7','\u4fe8','\u4fe9','\u4fea','\u4feb','\u4fec','\u4fed', + '\u4fee','\u4fef','\u4ff0','\u4ff1','\u4ff2','\u4ff3','\u4ff4', + '\u4ff5','\u4ff6','\u4ff7','\u4ff8','\u4ff9','\u4ffa','\u4ffb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+20224; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void f5000() { + char[] cs = new char[] { + '\u5000','\u5001','\u5002','\u5003','\u5004','\u5005','\u5006', + '\u5007','\u5008','\u5009','\u500a','\u500b','\u500c','\u500d', + '\u500e','\u500f','\u5010','\u5011','\u5012','\u5013','\u5014', + '\u5015','\u5016','\u5017','\u5018','\u5019','\u501a','\u501b', + '\u501c','\u501d','\u501e','\u501f','\u5020','\u5021','\u5022', + '\u5023','\u5024','\u5025','\u5026','\u5027','\u5028','\u5029', + '\u502a','\u502b','\u502c','\u502d','\u502e','\u502f','\u5030', + '\u5031','\u5032','\u5033','\u5034','\u5035','\u5036','\u5037', + '\u5038','\u5039','\u503a','\u503b','\u503c','\u503d','\u503e', + '\u503f','\u5040','\u5041','\u5042','\u5043','\u5044','\u5045', + '\u5046','\u5047','\u5048','\u5049','\u504a','\u504b','\u504c', + '\u504d','\u504e','\u504f','\u5050','\u5051','\u5052','\u5053', + '\u5054','\u5055','\u5056','\u5057','\u5058','\u5059','\u505a', + '\u505b','\u505c','\u505d','\u505e','\u505f','\u5060','\u5061', + '\u5062','\u5063','\u5064','\u5065','\u5066','\u5067','\u5068', + '\u5069','\u506a','\u506b','\u506c','\u506d','\u506e','\u506f', + '\u5070','\u5071','\u5072','\u5073','\u5074','\u5075','\u5076', + '\u5077','\u5078','\u5079','\u507a','\u507b','\u507c','\u507d', + '\u507e','\u507f','\u5080','\u5081','\u5082','\u5083','\u5084', + '\u5085','\u5086','\u5087','\u5088','\u5089','\u508a','\u508b', + '\u508c','\u508d','\u508e','\u508f','\u5090','\u5091','\u5092', + '\u5093','\u5094','\u5095','\u5096','\u5097','\u5098','\u5099', + '\u509a','\u509b','\u509c','\u509d','\u509e','\u509f','\u50a0', + '\u50a1','\u50a2','\u50a3','\u50a4','\u50a5','\u50a6','\u50a7', + '\u50a8','\u50a9','\u50aa','\u50ab','\u50ac','\u50ad','\u50ae', + '\u50af','\u50b0','\u50b1','\u50b2','\u50b3','\u50b4','\u50b5', + '\u50b6','\u50b7','\u50b8','\u50b9','\u50ba','\u50bb','\u50bc', + '\u50bd','\u50be','\u50bf','\u50c0','\u50c1','\u50c2','\u50c3', + '\u50c4','\u50c5','\u50c6','\u50c7','\u50c8','\u50c9','\u50ca', + '\u50cb','\u50cc','\u50cd','\u50ce','\u50cf','\u50d0','\u50d1', + '\u50d2','\u50d3','\u50d4','\u50d5','\u50d6','\u50d7','\u50d8', + '\u50d9','\u50da','\u50db','\u50dc','\u50dd','\u50de','\u50df', + '\u50e0','\u50e1','\u50e2','\u50e3','\u50e4','\u50e5','\u50e6', + '\u50e7','\u50e8','\u50e9','\u50ea','\u50eb','\u50ec','\u50ed', + '\u50ee','\u50ef','\u50f0','\u50f1','\u50f2','\u50f3','\u50f4', + '\u50f5','\u50f6','\u50f7','\u50f8','\u50f9','\u50fa','\u50fb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+20480; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void f5100() { + char[] cs = new char[] { + '\u5100','\u5101','\u5102','\u5103','\u5104','\u5105','\u5106', + '\u5107','\u5108','\u5109','\u510a','\u510b','\u510c','\u510d', + '\u510e','\u510f','\u5110','\u5111','\u5112','\u5113','\u5114', + '\u5115','\u5116','\u5117','\u5118','\u5119','\u511a','\u511b', + '\u511c','\u511d','\u511e','\u511f','\u5120','\u5121','\u5122', + '\u5123','\u5124','\u5125','\u5126','\u5127','\u5128','\u5129', + '\u512a','\u512b','\u512c','\u512d','\u512e','\u512f','\u5130', + '\u5131','\u5132','\u5133','\u5134','\u5135','\u5136','\u5137', + '\u5138','\u5139','\u513a','\u513b','\u513c','\u513d','\u513e', + '\u513f','\u5140','\u5141','\u5142','\u5143','\u5144','\u5145', + '\u5146','\u5147','\u5148','\u5149','\u514a','\u514b','\u514c', + '\u514d','\u514e','\u514f','\u5150','\u5151','\u5152','\u5153', + '\u5154','\u5155','\u5156','\u5157','\u5158','\u5159','\u515a', + '\u515b','\u515c','\u515d','\u515e','\u515f','\u5160','\u5161', + '\u5162','\u5163','\u5164','\u5165','\u5166','\u5167','\u5168', + '\u5169','\u516a','\u516b','\u516c','\u516d','\u516e','\u516f', + '\u5170','\u5171','\u5172','\u5173','\u5174','\u5175','\u5176', + '\u5177','\u5178','\u5179','\u517a','\u517b','\u517c','\u517d', + '\u517e','\u517f','\u5180','\u5181','\u5182','\u5183','\u5184', + '\u5185','\u5186','\u5187','\u5188','\u5189','\u518a','\u518b', + '\u518c','\u518d','\u518e','\u518f','\u5190','\u5191','\u5192', + '\u5193','\u5194','\u5195','\u5196','\u5197','\u5198','\u5199', + '\u519a','\u519b','\u519c','\u519d','\u519e','\u519f','\u51a0', + '\u51a1','\u51a2','\u51a3','\u51a4','\u51a5','\u51a6','\u51a7', + '\u51a8','\u51a9','\u51aa','\u51ab','\u51ac','\u51ad','\u51ae', + '\u51af','\u51b0','\u51b1','\u51b2','\u51b3','\u51b4','\u51b5', + '\u51b6','\u51b7','\u51b8','\u51b9','\u51ba','\u51bb','\u51bc', + '\u51bd','\u51be','\u51bf','\u51c0','\u51c1','\u51c2','\u51c3', + '\u51c4','\u51c5','\u51c6','\u51c7','\u51c8','\u51c9','\u51ca', + '\u51cb','\u51cc','\u51cd','\u51ce','\u51cf','\u51d0','\u51d1', + '\u51d2','\u51d3','\u51d4','\u51d5','\u51d6','\u51d7','\u51d8', + '\u51d9','\u51da','\u51db','\u51dc','\u51dd','\u51de','\u51df', + '\u51e0','\u51e1','\u51e2','\u51e3','\u51e4','\u51e5','\u51e6', + '\u51e7','\u51e8','\u51e9','\u51ea','\u51eb','\u51ec','\u51ed', + '\u51ee','\u51ef','\u51f0','\u51f1','\u51f2','\u51f3','\u51f4', + '\u51f5','\u51f6','\u51f7','\u51f8','\u51f9','\u51fa','\u51fb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+20736; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void f5200() { + char[] cs = new char[] { + '\u5200','\u5201','\u5202','\u5203','\u5204','\u5205','\u5206', + '\u5207','\u5208','\u5209','\u520a','\u520b','\u520c','\u520d', + '\u520e','\u520f','\u5210','\u5211','\u5212','\u5213','\u5214', + '\u5215','\u5216','\u5217','\u5218','\u5219','\u521a','\u521b', + '\u521c','\u521d','\u521e','\u521f','\u5220','\u5221','\u5222', + '\u5223','\u5224','\u5225','\u5226','\u5227','\u5228','\u5229', + '\u522a','\u522b','\u522c','\u522d','\u522e','\u522f','\u5230', + '\u5231','\u5232','\u5233','\u5234','\u5235','\u5236','\u5237', + '\u5238','\u5239','\u523a','\u523b','\u523c','\u523d','\u523e', + '\u523f','\u5240','\u5241','\u5242','\u5243','\u5244','\u5245', + '\u5246','\u5247','\u5248','\u5249','\u524a','\u524b','\u524c', + '\u524d','\u524e','\u524f','\u5250','\u5251','\u5252','\u5253', + '\u5254','\u5255','\u5256','\u5257','\u5258','\u5259','\u525a', + '\u525b','\u525c','\u525d','\u525e','\u525f','\u5260','\u5261', + '\u5262','\u5263','\u5264','\u5265','\u5266','\u5267','\u5268', + '\u5269','\u526a','\u526b','\u526c','\u526d','\u526e','\u526f', + '\u5270','\u5271','\u5272','\u5273','\u5274','\u5275','\u5276', + '\u5277','\u5278','\u5279','\u527a','\u527b','\u527c','\u527d', + '\u527e','\u527f','\u5280','\u5281','\u5282','\u5283','\u5284', + '\u5285','\u5286','\u5287','\u5288','\u5289','\u528a','\u528b', + '\u528c','\u528d','\u528e','\u528f','\u5290','\u5291','\u5292', + '\u5293','\u5294','\u5295','\u5296','\u5297','\u5298','\u5299', + '\u529a','\u529b','\u529c','\u529d','\u529e','\u529f','\u52a0', + '\u52a1','\u52a2','\u52a3','\u52a4','\u52a5','\u52a6','\u52a7', + '\u52a8','\u52a9','\u52aa','\u52ab','\u52ac','\u52ad','\u52ae', + '\u52af','\u52b0','\u52b1','\u52b2','\u52b3','\u52b4','\u52b5', + '\u52b6','\u52b7','\u52b8','\u52b9','\u52ba','\u52bb','\u52bc', + '\u52bd','\u52be','\u52bf','\u52c0','\u52c1','\u52c2','\u52c3', + '\u52c4','\u52c5','\u52c6','\u52c7','\u52c8','\u52c9','\u52ca', + '\u52cb','\u52cc','\u52cd','\u52ce','\u52cf','\u52d0','\u52d1', + '\u52d2','\u52d3','\u52d4','\u52d5','\u52d6','\u52d7','\u52d8', + '\u52d9','\u52da','\u52db','\u52dc','\u52dd','\u52de','\u52df', + '\u52e0','\u52e1','\u52e2','\u52e3','\u52e4','\u52e5','\u52e6', + '\u52e7','\u52e8','\u52e9','\u52ea','\u52eb','\u52ec','\u52ed', + '\u52ee','\u52ef','\u52f0','\u52f1','\u52f2','\u52f3','\u52f4', + '\u52f5','\u52f6','\u52f7','\u52f8','\u52f9','\u52fa','\u52fb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+20992; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void f5300() { + char[] cs = new char[] { + '\u5300','\u5301','\u5302','\u5303','\u5304','\u5305','\u5306', + '\u5307','\u5308','\u5309','\u530a','\u530b','\u530c','\u530d', + '\u530e','\u530f','\u5310','\u5311','\u5312','\u5313','\u5314', + '\u5315','\u5316','\u5317','\u5318','\u5319','\u531a','\u531b', + '\u531c','\u531d','\u531e','\u531f','\u5320','\u5321','\u5322', + '\u5323','\u5324','\u5325','\u5326','\u5327','\u5328','\u5329', + '\u532a','\u532b','\u532c','\u532d','\u532e','\u532f','\u5330', + '\u5331','\u5332','\u5333','\u5334','\u5335','\u5336','\u5337', + '\u5338','\u5339','\u533a','\u533b','\u533c','\u533d','\u533e', + '\u533f','\u5340','\u5341','\u5342','\u5343','\u5344','\u5345', + '\u5346','\u5347','\u5348','\u5349','\u534a','\u534b','\u534c', + '\u534d','\u534e','\u534f','\u5350','\u5351','\u5352','\u5353', + '\u5354','\u5355','\u5356','\u5357','\u5358','\u5359','\u535a', + '\u535b','\u535c','\u535d','\u535e','\u535f','\u5360','\u5361', + '\u5362','\u5363','\u5364','\u5365','\u5366','\u5367','\u5368', + '\u5369','\u536a','\u536b','\u536c','\u536d','\u536e','\u536f', + '\u5370','\u5371','\u5372','\u5373','\u5374','\u5375','\u5376', + '\u5377','\u5378','\u5379','\u537a','\u537b','\u537c','\u537d', + '\u537e','\u537f','\u5380','\u5381','\u5382','\u5383','\u5384', + '\u5385','\u5386','\u5387','\u5388','\u5389','\u538a','\u538b', + '\u538c','\u538d','\u538e','\u538f','\u5390','\u5391','\u5392', + '\u5393','\u5394','\u5395','\u5396','\u5397','\u5398','\u5399', + '\u539a','\u539b','\u539c','\u539d','\u539e','\u539f','\u53a0', + '\u53a1','\u53a2','\u53a3','\u53a4','\u53a5','\u53a6','\u53a7', + '\u53a8','\u53a9','\u53aa','\u53ab','\u53ac','\u53ad','\u53ae', + '\u53af','\u53b0','\u53b1','\u53b2','\u53b3','\u53b4','\u53b5', + '\u53b6','\u53b7','\u53b8','\u53b9','\u53ba','\u53bb','\u53bc', + '\u53bd','\u53be','\u53bf','\u53c0','\u53c1','\u53c2','\u53c3', + '\u53c4','\u53c5','\u53c6','\u53c7','\u53c8','\u53c9','\u53ca', + '\u53cb','\u53cc','\u53cd','\u53ce','\u53cf','\u53d0','\u53d1', + '\u53d2','\u53d3','\u53d4','\u53d5','\u53d6','\u53d7','\u53d8', + '\u53d9','\u53da','\u53db','\u53dc','\u53dd','\u53de','\u53df', + '\u53e0','\u53e1','\u53e2','\u53e3','\u53e4','\u53e5','\u53e6', + '\u53e7','\u53e8','\u53e9','\u53ea','\u53eb','\u53ec','\u53ed', + '\u53ee','\u53ef','\u53f0','\u53f1','\u53f2','\u53f3','\u53f4', + '\u53f5','\u53f6','\u53f7','\u53f8','\u53f9','\u53fa','\u53fb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+21248; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void f5400() { + char[] cs = new char[] { + '\u5400','\u5401','\u5402','\u5403','\u5404','\u5405','\u5406', + '\u5407','\u5408','\u5409','\u540a','\u540b','\u540c','\u540d', + '\u540e','\u540f','\u5410','\u5411','\u5412','\u5413','\u5414', + '\u5415','\u5416','\u5417','\u5418','\u5419','\u541a','\u541b', + '\u541c','\u541d','\u541e','\u541f','\u5420','\u5421','\u5422', + '\u5423','\u5424','\u5425','\u5426','\u5427','\u5428','\u5429', + '\u542a','\u542b','\u542c','\u542d','\u542e','\u542f','\u5430', + '\u5431','\u5432','\u5433','\u5434','\u5435','\u5436','\u5437', + '\u5438','\u5439','\u543a','\u543b','\u543c','\u543d','\u543e', + '\u543f','\u5440','\u5441','\u5442','\u5443','\u5444','\u5445', + '\u5446','\u5447','\u5448','\u5449','\u544a','\u544b','\u544c', + '\u544d','\u544e','\u544f','\u5450','\u5451','\u5452','\u5453', + '\u5454','\u5455','\u5456','\u5457','\u5458','\u5459','\u545a', + '\u545b','\u545c','\u545d','\u545e','\u545f','\u5460','\u5461', + '\u5462','\u5463','\u5464','\u5465','\u5466','\u5467','\u5468', + '\u5469','\u546a','\u546b','\u546c','\u546d','\u546e','\u546f', + '\u5470','\u5471','\u5472','\u5473','\u5474','\u5475','\u5476', + '\u5477','\u5478','\u5479','\u547a','\u547b','\u547c','\u547d', + '\u547e','\u547f','\u5480','\u5481','\u5482','\u5483','\u5484', + '\u5485','\u5486','\u5487','\u5488','\u5489','\u548a','\u548b', + '\u548c','\u548d','\u548e','\u548f','\u5490','\u5491','\u5492', + '\u5493','\u5494','\u5495','\u5496','\u5497','\u5498','\u5499', + '\u549a','\u549b','\u549c','\u549d','\u549e','\u549f','\u54a0', + '\u54a1','\u54a2','\u54a3','\u54a4','\u54a5','\u54a6','\u54a7', + '\u54a8','\u54a9','\u54aa','\u54ab','\u54ac','\u54ad','\u54ae', + '\u54af','\u54b0','\u54b1','\u54b2','\u54b3','\u54b4','\u54b5', + '\u54b6','\u54b7','\u54b8','\u54b9','\u54ba','\u54bb','\u54bc', + '\u54bd','\u54be','\u54bf','\u54c0','\u54c1','\u54c2','\u54c3', + '\u54c4','\u54c5','\u54c6','\u54c7','\u54c8','\u54c9','\u54ca', + '\u54cb','\u54cc','\u54cd','\u54ce','\u54cf','\u54d0','\u54d1', + '\u54d2','\u54d3','\u54d4','\u54d5','\u54d6','\u54d7','\u54d8', + '\u54d9','\u54da','\u54db','\u54dc','\u54dd','\u54de','\u54df', + '\u54e0','\u54e1','\u54e2','\u54e3','\u54e4','\u54e5','\u54e6', + '\u54e7','\u54e8','\u54e9','\u54ea','\u54eb','\u54ec','\u54ed', + '\u54ee','\u54ef','\u54f0','\u54f1','\u54f2','\u54f3','\u54f4', + '\u54f5','\u54f6','\u54f7','\u54f8','\u54f9','\u54fa','\u54fb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+21504; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void f5500() { + char[] cs = new char[] { + '\u5500','\u5501','\u5502','\u5503','\u5504','\u5505','\u5506', + '\u5507','\u5508','\u5509','\u550a','\u550b','\u550c','\u550d', + '\u550e','\u550f','\u5510','\u5511','\u5512','\u5513','\u5514', + '\u5515','\u5516','\u5517','\u5518','\u5519','\u551a','\u551b', + '\u551c','\u551d','\u551e','\u551f','\u5520','\u5521','\u5522', + '\u5523','\u5524','\u5525','\u5526','\u5527','\u5528','\u5529', + '\u552a','\u552b','\u552c','\u552d','\u552e','\u552f','\u5530', + '\u5531','\u5532','\u5533','\u5534','\u5535','\u5536','\u5537', + '\u5538','\u5539','\u553a','\u553b','\u553c','\u553d','\u553e', + '\u553f','\u5540','\u5541','\u5542','\u5543','\u5544','\u5545', + '\u5546','\u5547','\u5548','\u5549','\u554a','\u554b','\u554c', + '\u554d','\u554e','\u554f','\u5550','\u5551','\u5552','\u5553', + '\u5554','\u5555','\u5556','\u5557','\u5558','\u5559','\u555a', + '\u555b','\u555c','\u555d','\u555e','\u555f','\u5560','\u5561', + '\u5562','\u5563','\u5564','\u5565','\u5566','\u5567','\u5568', + '\u5569','\u556a','\u556b','\u556c','\u556d','\u556e','\u556f', + '\u5570','\u5571','\u5572','\u5573','\u5574','\u5575','\u5576', + '\u5577','\u5578','\u5579','\u557a','\u557b','\u557c','\u557d', + '\u557e','\u557f','\u5580','\u5581','\u5582','\u5583','\u5584', + '\u5585','\u5586','\u5587','\u5588','\u5589','\u558a','\u558b', + '\u558c','\u558d','\u558e','\u558f','\u5590','\u5591','\u5592', + '\u5593','\u5594','\u5595','\u5596','\u5597','\u5598','\u5599', + '\u559a','\u559b','\u559c','\u559d','\u559e','\u559f','\u55a0', + '\u55a1','\u55a2','\u55a3','\u55a4','\u55a5','\u55a6','\u55a7', + '\u55a8','\u55a9','\u55aa','\u55ab','\u55ac','\u55ad','\u55ae', + '\u55af','\u55b0','\u55b1','\u55b2','\u55b3','\u55b4','\u55b5', + '\u55b6','\u55b7','\u55b8','\u55b9','\u55ba','\u55bb','\u55bc', + '\u55bd','\u55be','\u55bf','\u55c0','\u55c1','\u55c2','\u55c3', + '\u55c4','\u55c5','\u55c6','\u55c7','\u55c8','\u55c9','\u55ca', + '\u55cb','\u55cc','\u55cd','\u55ce','\u55cf','\u55d0','\u55d1', + '\u55d2','\u55d3','\u55d4','\u55d5','\u55d6','\u55d7','\u55d8', + '\u55d9','\u55da','\u55db','\u55dc','\u55dd','\u55de','\u55df', + '\u55e0','\u55e1','\u55e2','\u55e3','\u55e4','\u55e5','\u55e6', + '\u55e7','\u55e8','\u55e9','\u55ea','\u55eb','\u55ec','\u55ed', + '\u55ee','\u55ef','\u55f0','\u55f1','\u55f2','\u55f3','\u55f4', + '\u55f5','\u55f6','\u55f7','\u55f8','\u55f9','\u55fa','\u55fb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+21760; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void f5600() { + char[] cs = new char[] { + '\u5600','\u5601','\u5602','\u5603','\u5604','\u5605','\u5606', + '\u5607','\u5608','\u5609','\u560a','\u560b','\u560c','\u560d', + '\u560e','\u560f','\u5610','\u5611','\u5612','\u5613','\u5614', + '\u5615','\u5616','\u5617','\u5618','\u5619','\u561a','\u561b', + '\u561c','\u561d','\u561e','\u561f','\u5620','\u5621','\u5622', + '\u5623','\u5624','\u5625','\u5626','\u5627','\u5628','\u5629', + '\u562a','\u562b','\u562c','\u562d','\u562e','\u562f','\u5630', + '\u5631','\u5632','\u5633','\u5634','\u5635','\u5636','\u5637', + '\u5638','\u5639','\u563a','\u563b','\u563c','\u563d','\u563e', + '\u563f','\u5640','\u5641','\u5642','\u5643','\u5644','\u5645', + '\u5646','\u5647','\u5648','\u5649','\u564a','\u564b','\u564c', + '\u564d','\u564e','\u564f','\u5650','\u5651','\u5652','\u5653', + '\u5654','\u5655','\u5656','\u5657','\u5658','\u5659','\u565a', + '\u565b','\u565c','\u565d','\u565e','\u565f','\u5660','\u5661', + '\u5662','\u5663','\u5664','\u5665','\u5666','\u5667','\u5668', + '\u5669','\u566a','\u566b','\u566c','\u566d','\u566e','\u566f', + '\u5670','\u5671','\u5672','\u5673','\u5674','\u5675','\u5676', + '\u5677','\u5678','\u5679','\u567a','\u567b','\u567c','\u567d', + '\u567e','\u567f','\u5680','\u5681','\u5682','\u5683','\u5684', + '\u5685','\u5686','\u5687','\u5688','\u5689','\u568a','\u568b', + '\u568c','\u568d','\u568e','\u568f','\u5690','\u5691','\u5692', + '\u5693','\u5694','\u5695','\u5696','\u5697','\u5698','\u5699', + '\u569a','\u569b','\u569c','\u569d','\u569e','\u569f','\u56a0', + '\u56a1','\u56a2','\u56a3','\u56a4','\u56a5','\u56a6','\u56a7', + '\u56a8','\u56a9','\u56aa','\u56ab','\u56ac','\u56ad','\u56ae', + '\u56af','\u56b0','\u56b1','\u56b2','\u56b3','\u56b4','\u56b5', + '\u56b6','\u56b7','\u56b8','\u56b9','\u56ba','\u56bb','\u56bc', + '\u56bd','\u56be','\u56bf','\u56c0','\u56c1','\u56c2','\u56c3', + '\u56c4','\u56c5','\u56c6','\u56c7','\u56c8','\u56c9','\u56ca', + '\u56cb','\u56cc','\u56cd','\u56ce','\u56cf','\u56d0','\u56d1', + '\u56d2','\u56d3','\u56d4','\u56d5','\u56d6','\u56d7','\u56d8', + '\u56d9','\u56da','\u56db','\u56dc','\u56dd','\u56de','\u56df', + '\u56e0','\u56e1','\u56e2','\u56e3','\u56e4','\u56e5','\u56e6', + '\u56e7','\u56e8','\u56e9','\u56ea','\u56eb','\u56ec','\u56ed', + '\u56ee','\u56ef','\u56f0','\u56f1','\u56f2','\u56f3','\u56f4', + '\u56f5','\u56f6','\u56f7','\u56f8','\u56f9','\u56fa','\u56fb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+22016; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void f5700() { + char[] cs = new char[] { + '\u5700','\u5701','\u5702','\u5703','\u5704','\u5705','\u5706', + '\u5707','\u5708','\u5709','\u570a','\u570b','\u570c','\u570d', + '\u570e','\u570f','\u5710','\u5711','\u5712','\u5713','\u5714', + '\u5715','\u5716','\u5717','\u5718','\u5719','\u571a','\u571b', + '\u571c','\u571d','\u571e','\u571f','\u5720','\u5721','\u5722', + '\u5723','\u5724','\u5725','\u5726','\u5727','\u5728','\u5729', + '\u572a','\u572b','\u572c','\u572d','\u572e','\u572f','\u5730', + '\u5731','\u5732','\u5733','\u5734','\u5735','\u5736','\u5737', + '\u5738','\u5739','\u573a','\u573b','\u573c','\u573d','\u573e', + '\u573f','\u5740','\u5741','\u5742','\u5743','\u5744','\u5745', + '\u5746','\u5747','\u5748','\u5749','\u574a','\u574b','\u574c', + '\u574d','\u574e','\u574f','\u5750','\u5751','\u5752','\u5753', + '\u5754','\u5755','\u5756','\u5757','\u5758','\u5759','\u575a', + '\u575b','\u575c','\u575d','\u575e','\u575f','\u5760','\u5761', + '\u5762','\u5763','\u5764','\u5765','\u5766','\u5767','\u5768', + '\u5769','\u576a','\u576b','\u576c','\u576d','\u576e','\u576f', + '\u5770','\u5771','\u5772','\u5773','\u5774','\u5775','\u5776', + '\u5777','\u5778','\u5779','\u577a','\u577b','\u577c','\u577d', + '\u577e','\u577f','\u5780','\u5781','\u5782','\u5783','\u5784', + '\u5785','\u5786','\u5787','\u5788','\u5789','\u578a','\u578b', + '\u578c','\u578d','\u578e','\u578f','\u5790','\u5791','\u5792', + '\u5793','\u5794','\u5795','\u5796','\u5797','\u5798','\u5799', + '\u579a','\u579b','\u579c','\u579d','\u579e','\u579f','\u57a0', + '\u57a1','\u57a2','\u57a3','\u57a4','\u57a5','\u57a6','\u57a7', + '\u57a8','\u57a9','\u57aa','\u57ab','\u57ac','\u57ad','\u57ae', + '\u57af','\u57b0','\u57b1','\u57b2','\u57b3','\u57b4','\u57b5', + '\u57b6','\u57b7','\u57b8','\u57b9','\u57ba','\u57bb','\u57bc', + '\u57bd','\u57be','\u57bf','\u57c0','\u57c1','\u57c2','\u57c3', + '\u57c4','\u57c5','\u57c6','\u57c7','\u57c8','\u57c9','\u57ca', + '\u57cb','\u57cc','\u57cd','\u57ce','\u57cf','\u57d0','\u57d1', + '\u57d2','\u57d3','\u57d4','\u57d5','\u57d6','\u57d7','\u57d8', + '\u57d9','\u57da','\u57db','\u57dc','\u57dd','\u57de','\u57df', + '\u57e0','\u57e1','\u57e2','\u57e3','\u57e4','\u57e5','\u57e6', + '\u57e7','\u57e8','\u57e9','\u57ea','\u57eb','\u57ec','\u57ed', + '\u57ee','\u57ef','\u57f0','\u57f1','\u57f2','\u57f3','\u57f4', + '\u57f5','\u57f6','\u57f7','\u57f8','\u57f9','\u57fa','\u57fb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+22272; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void f5800() { + char[] cs = new char[] { + '\u5800','\u5801','\u5802','\u5803','\u5804','\u5805','\u5806', + '\u5807','\u5808','\u5809','\u580a','\u580b','\u580c','\u580d', + '\u580e','\u580f','\u5810','\u5811','\u5812','\u5813','\u5814', + '\u5815','\u5816','\u5817','\u5818','\u5819','\u581a','\u581b', + '\u581c','\u581d','\u581e','\u581f','\u5820','\u5821','\u5822', + '\u5823','\u5824','\u5825','\u5826','\u5827','\u5828','\u5829', + '\u582a','\u582b','\u582c','\u582d','\u582e','\u582f','\u5830', + '\u5831','\u5832','\u5833','\u5834','\u5835','\u5836','\u5837', + '\u5838','\u5839','\u583a','\u583b','\u583c','\u583d','\u583e', + '\u583f','\u5840','\u5841','\u5842','\u5843','\u5844','\u5845', + '\u5846','\u5847','\u5848','\u5849','\u584a','\u584b','\u584c', + '\u584d','\u584e','\u584f','\u5850','\u5851','\u5852','\u5853', + '\u5854','\u5855','\u5856','\u5857','\u5858','\u5859','\u585a', + '\u585b','\u585c','\u585d','\u585e','\u585f','\u5860','\u5861', + '\u5862','\u5863','\u5864','\u5865','\u5866','\u5867','\u5868', + '\u5869','\u586a','\u586b','\u586c','\u586d','\u586e','\u586f', + '\u5870','\u5871','\u5872','\u5873','\u5874','\u5875','\u5876', + '\u5877','\u5878','\u5879','\u587a','\u587b','\u587c','\u587d', + '\u587e','\u587f','\u5880','\u5881','\u5882','\u5883','\u5884', + '\u5885','\u5886','\u5887','\u5888','\u5889','\u588a','\u588b', + '\u588c','\u588d','\u588e','\u588f','\u5890','\u5891','\u5892', + '\u5893','\u5894','\u5895','\u5896','\u5897','\u5898','\u5899', + '\u589a','\u589b','\u589c','\u589d','\u589e','\u589f','\u58a0', + '\u58a1','\u58a2','\u58a3','\u58a4','\u58a5','\u58a6','\u58a7', + '\u58a8','\u58a9','\u58aa','\u58ab','\u58ac','\u58ad','\u58ae', + '\u58af','\u58b0','\u58b1','\u58b2','\u58b3','\u58b4','\u58b5', + '\u58b6','\u58b7','\u58b8','\u58b9','\u58ba','\u58bb','\u58bc', + '\u58bd','\u58be','\u58bf','\u58c0','\u58c1','\u58c2','\u58c3', + '\u58c4','\u58c5','\u58c6','\u58c7','\u58c8','\u58c9','\u58ca', + '\u58cb','\u58cc','\u58cd','\u58ce','\u58cf','\u58d0','\u58d1', + '\u58d2','\u58d3','\u58d4','\u58d5','\u58d6','\u58d7','\u58d8', + '\u58d9','\u58da','\u58db','\u58dc','\u58dd','\u58de','\u58df', + '\u58e0','\u58e1','\u58e2','\u58e3','\u58e4','\u58e5','\u58e6', + '\u58e7','\u58e8','\u58e9','\u58ea','\u58eb','\u58ec','\u58ed', + '\u58ee','\u58ef','\u58f0','\u58f1','\u58f2','\u58f3','\u58f4', + '\u58f5','\u58f6','\u58f7','\u58f8','\u58f9','\u58fa','\u58fb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+22528; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void f5900() { + char[] cs = new char[] { + '\u5900','\u5901','\u5902','\u5903','\u5904','\u5905','\u5906', + '\u5907','\u5908','\u5909','\u590a','\u590b','\u590c','\u590d', + '\u590e','\u590f','\u5910','\u5911','\u5912','\u5913','\u5914', + '\u5915','\u5916','\u5917','\u5918','\u5919','\u591a','\u591b', + '\u591c','\u591d','\u591e','\u591f','\u5920','\u5921','\u5922', + '\u5923','\u5924','\u5925','\u5926','\u5927','\u5928','\u5929', + '\u592a','\u592b','\u592c','\u592d','\u592e','\u592f','\u5930', + '\u5931','\u5932','\u5933','\u5934','\u5935','\u5936','\u5937', + '\u5938','\u5939','\u593a','\u593b','\u593c','\u593d','\u593e', + '\u593f','\u5940','\u5941','\u5942','\u5943','\u5944','\u5945', + '\u5946','\u5947','\u5948','\u5949','\u594a','\u594b','\u594c', + '\u594d','\u594e','\u594f','\u5950','\u5951','\u5952','\u5953', + '\u5954','\u5955','\u5956','\u5957','\u5958','\u5959','\u595a', + '\u595b','\u595c','\u595d','\u595e','\u595f','\u5960','\u5961', + '\u5962','\u5963','\u5964','\u5965','\u5966','\u5967','\u5968', + '\u5969','\u596a','\u596b','\u596c','\u596d','\u596e','\u596f', + '\u5970','\u5971','\u5972','\u5973','\u5974','\u5975','\u5976', + '\u5977','\u5978','\u5979','\u597a','\u597b','\u597c','\u597d', + '\u597e','\u597f','\u5980','\u5981','\u5982','\u5983','\u5984', + '\u5985','\u5986','\u5987','\u5988','\u5989','\u598a','\u598b', + '\u598c','\u598d','\u598e','\u598f','\u5990','\u5991','\u5992', + '\u5993','\u5994','\u5995','\u5996','\u5997','\u5998','\u5999', + '\u599a','\u599b','\u599c','\u599d','\u599e','\u599f','\u59a0', + '\u59a1','\u59a2','\u59a3','\u59a4','\u59a5','\u59a6','\u59a7', + '\u59a8','\u59a9','\u59aa','\u59ab','\u59ac','\u59ad','\u59ae', + '\u59af','\u59b0','\u59b1','\u59b2','\u59b3','\u59b4','\u59b5', + '\u59b6','\u59b7','\u59b8','\u59b9','\u59ba','\u59bb','\u59bc', + '\u59bd','\u59be','\u59bf','\u59c0','\u59c1','\u59c2','\u59c3', + '\u59c4','\u59c5','\u59c6','\u59c7','\u59c8','\u59c9','\u59ca', + '\u59cb','\u59cc','\u59cd','\u59ce','\u59cf','\u59d0','\u59d1', + '\u59d2','\u59d3','\u59d4','\u59d5','\u59d6','\u59d7','\u59d8', + '\u59d9','\u59da','\u59db','\u59dc','\u59dd','\u59de','\u59df', + '\u59e0','\u59e1','\u59e2','\u59e3','\u59e4','\u59e5','\u59e6', + '\u59e7','\u59e8','\u59e9','\u59ea','\u59eb','\u59ec','\u59ed', + '\u59ee','\u59ef','\u59f0','\u59f1','\u59f2','\u59f3','\u59f4', + '\u59f5','\u59f6','\u59f7','\u59f8','\u59f9','\u59fa','\u59fb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+22784; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void f5a00() { + char[] cs = new char[] { + '\u5a00','\u5a01','\u5a02','\u5a03','\u5a04','\u5a05','\u5a06', + '\u5a07','\u5a08','\u5a09','\u5a0a','\u5a0b','\u5a0c','\u5a0d', + '\u5a0e','\u5a0f','\u5a10','\u5a11','\u5a12','\u5a13','\u5a14', + '\u5a15','\u5a16','\u5a17','\u5a18','\u5a19','\u5a1a','\u5a1b', + '\u5a1c','\u5a1d','\u5a1e','\u5a1f','\u5a20','\u5a21','\u5a22', + '\u5a23','\u5a24','\u5a25','\u5a26','\u5a27','\u5a28','\u5a29', + '\u5a2a','\u5a2b','\u5a2c','\u5a2d','\u5a2e','\u5a2f','\u5a30', + '\u5a31','\u5a32','\u5a33','\u5a34','\u5a35','\u5a36','\u5a37', + '\u5a38','\u5a39','\u5a3a','\u5a3b','\u5a3c','\u5a3d','\u5a3e', + '\u5a3f','\u5a40','\u5a41','\u5a42','\u5a43','\u5a44','\u5a45', + '\u5a46','\u5a47','\u5a48','\u5a49','\u5a4a','\u5a4b','\u5a4c', + '\u5a4d','\u5a4e','\u5a4f','\u5a50','\u5a51','\u5a52','\u5a53', + '\u5a54','\u5a55','\u5a56','\u5a57','\u5a58','\u5a59','\u5a5a', + '\u5a5b','\u5a5c','\u5a5d','\u5a5e','\u5a5f','\u5a60','\u5a61', + '\u5a62','\u5a63','\u5a64','\u5a65','\u5a66','\u5a67','\u5a68', + '\u5a69','\u5a6a','\u5a6b','\u5a6c','\u5a6d','\u5a6e','\u5a6f', + '\u5a70','\u5a71','\u5a72','\u5a73','\u5a74','\u5a75','\u5a76', + '\u5a77','\u5a78','\u5a79','\u5a7a','\u5a7b','\u5a7c','\u5a7d', + '\u5a7e','\u5a7f','\u5a80','\u5a81','\u5a82','\u5a83','\u5a84', + '\u5a85','\u5a86','\u5a87','\u5a88','\u5a89','\u5a8a','\u5a8b', + '\u5a8c','\u5a8d','\u5a8e','\u5a8f','\u5a90','\u5a91','\u5a92', + '\u5a93','\u5a94','\u5a95','\u5a96','\u5a97','\u5a98','\u5a99', + '\u5a9a','\u5a9b','\u5a9c','\u5a9d','\u5a9e','\u5a9f','\u5aa0', + '\u5aa1','\u5aa2','\u5aa3','\u5aa4','\u5aa5','\u5aa6','\u5aa7', + '\u5aa8','\u5aa9','\u5aaa','\u5aab','\u5aac','\u5aad','\u5aae', + '\u5aaf','\u5ab0','\u5ab1','\u5ab2','\u5ab3','\u5ab4','\u5ab5', + '\u5ab6','\u5ab7','\u5ab8','\u5ab9','\u5aba','\u5abb','\u5abc', + '\u5abd','\u5abe','\u5abf','\u5ac0','\u5ac1','\u5ac2','\u5ac3', + '\u5ac4','\u5ac5','\u5ac6','\u5ac7','\u5ac8','\u5ac9','\u5aca', + '\u5acb','\u5acc','\u5acd','\u5ace','\u5acf','\u5ad0','\u5ad1', + '\u5ad2','\u5ad3','\u5ad4','\u5ad5','\u5ad6','\u5ad7','\u5ad8', + '\u5ad9','\u5ada','\u5adb','\u5adc','\u5add','\u5ade','\u5adf', + '\u5ae0','\u5ae1','\u5ae2','\u5ae3','\u5ae4','\u5ae5','\u5ae6', + '\u5ae7','\u5ae8','\u5ae9','\u5aea','\u5aeb','\u5aec','\u5aed', + '\u5aee','\u5aef','\u5af0','\u5af1','\u5af2','\u5af3','\u5af4', + '\u5af5','\u5af6','\u5af7','\u5af8','\u5af9','\u5afa','\u5afb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+23040; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void f5b00() { + char[] cs = new char[] { + '\u5b00','\u5b01','\u5b02','\u5b03','\u5b04','\u5b05','\u5b06', + '\u5b07','\u5b08','\u5b09','\u5b0a','\u5b0b','\u5b0c','\u5b0d', + '\u5b0e','\u5b0f','\u5b10','\u5b11','\u5b12','\u5b13','\u5b14', + '\u5b15','\u5b16','\u5b17','\u5b18','\u5b19','\u5b1a','\u5b1b', + '\u5b1c','\u5b1d','\u5b1e','\u5b1f','\u5b20','\u5b21','\u5b22', + '\u5b23','\u5b24','\u5b25','\u5b26','\u5b27','\u5b28','\u5b29', + '\u5b2a','\u5b2b','\u5b2c','\u5b2d','\u5b2e','\u5b2f','\u5b30', + '\u5b31','\u5b32','\u5b33','\u5b34','\u5b35','\u5b36','\u5b37', + '\u5b38','\u5b39','\u5b3a','\u5b3b','\u5b3c','\u5b3d','\u5b3e', + '\u5b3f','\u5b40','\u5b41','\u5b42','\u5b43','\u5b44','\u5b45', + '\u5b46','\u5b47','\u5b48','\u5b49','\u5b4a','\u5b4b','\u5b4c', + '\u5b4d','\u5b4e','\u5b4f','\u5b50','\u5b51','\u5b52','\u5b53', + '\u5b54','\u5b55','\u5b56','\u5b57','\u5b58','\u5b59','\u5b5a', + '\u5b5b','\u5b5c','\u5b5d','\u5b5e','\u5b5f','\u5b60','\u5b61', + '\u5b62','\u5b63','\u5b64','\u5b65','\u5b66','\u5b67','\u5b68', + '\u5b69','\u5b6a','\u5b6b','\u5b6c','\u5b6d','\u5b6e','\u5b6f', + '\u5b70','\u5b71','\u5b72','\u5b73','\u5b74','\u5b75','\u5b76', + '\u5b77','\u5b78','\u5b79','\u5b7a','\u5b7b','\u5b7c','\u5b7d', + '\u5b7e','\u5b7f','\u5b80','\u5b81','\u5b82','\u5b83','\u5b84', + '\u5b85','\u5b86','\u5b87','\u5b88','\u5b89','\u5b8a','\u5b8b', + '\u5b8c','\u5b8d','\u5b8e','\u5b8f','\u5b90','\u5b91','\u5b92', + '\u5b93','\u5b94','\u5b95','\u5b96','\u5b97','\u5b98','\u5b99', + '\u5b9a','\u5b9b','\u5b9c','\u5b9d','\u5b9e','\u5b9f','\u5ba0', + '\u5ba1','\u5ba2','\u5ba3','\u5ba4','\u5ba5','\u5ba6','\u5ba7', + '\u5ba8','\u5ba9','\u5baa','\u5bab','\u5bac','\u5bad','\u5bae', + '\u5baf','\u5bb0','\u5bb1','\u5bb2','\u5bb3','\u5bb4','\u5bb5', + '\u5bb6','\u5bb7','\u5bb8','\u5bb9','\u5bba','\u5bbb','\u5bbc', + '\u5bbd','\u5bbe','\u5bbf','\u5bc0','\u5bc1','\u5bc2','\u5bc3', + '\u5bc4','\u5bc5','\u5bc6','\u5bc7','\u5bc8','\u5bc9','\u5bca', + '\u5bcb','\u5bcc','\u5bcd','\u5bce','\u5bcf','\u5bd0','\u5bd1', + '\u5bd2','\u5bd3','\u5bd4','\u5bd5','\u5bd6','\u5bd7','\u5bd8', + '\u5bd9','\u5bda','\u5bdb','\u5bdc','\u5bdd','\u5bde','\u5bdf', + '\u5be0','\u5be1','\u5be2','\u5be3','\u5be4','\u5be5','\u5be6', + '\u5be7','\u5be8','\u5be9','\u5bea','\u5beb','\u5bec','\u5bed', + '\u5bee','\u5bef','\u5bf0','\u5bf1','\u5bf2','\u5bf3','\u5bf4', + '\u5bf5','\u5bf6','\u5bf7','\u5bf8','\u5bf9','\u5bfa','\u5bfb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+23296; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void f5c00() { + char[] cs = new char[] { + '\u5c00','\u5c01','\u5c02','\u5c03','\u5c04','\u5c05','\u5c06', + '\u5c07','\u5c08','\u5c09','\u5c0a','\u5c0b','\u5c0c','\u5c0d', + '\u5c0e','\u5c0f','\u5c10','\u5c11','\u5c12','\u5c13','\u5c14', + '\u5c15','\u5c16','\u5c17','\u5c18','\u5c19','\u5c1a','\u5c1b', + '\u5c1c','\u5c1d','\u5c1e','\u5c1f','\u5c20','\u5c21','\u5c22', + '\u5c23','\u5c24','\u5c25','\u5c26','\u5c27','\u5c28','\u5c29', + '\u5c2a','\u5c2b','\u5c2c','\u5c2d','\u5c2e','\u5c2f','\u5c30', + '\u5c31','\u5c32','\u5c33','\u5c34','\u5c35','\u5c36','\u5c37', + '\u5c38','\u5c39','\u5c3a','\u5c3b','\u5c3c','\u5c3d','\u5c3e', + '\u5c3f','\u5c40','\u5c41','\u5c42','\u5c43','\u5c44','\u5c45', + '\u5c46','\u5c47','\u5c48','\u5c49','\u5c4a','\u5c4b','\u5c4c', + '\u5c4d','\u5c4e','\u5c4f','\u5c50','\u5c51','\u5c52','\u5c53', + '\u5c54','\u5c55','\u5c56','\u5c57','\u5c58','\u5c59','\u5c5a', + '\u5c5b','\u5c5c','\u5c5d','\u5c5e','\u5c5f','\u5c60','\u5c61', + '\u5c62','\u5c63','\u5c64','\u5c65','\u5c66','\u5c67','\u5c68', + '\u5c69','\u5c6a','\u5c6b','\u5c6c','\u5c6d','\u5c6e','\u5c6f', + '\u5c70','\u5c71','\u5c72','\u5c73','\u5c74','\u5c75','\u5c76', + '\u5c77','\u5c78','\u5c79','\u5c7a','\u5c7b','\u5c7c','\u5c7d', + '\u5c7e','\u5c7f','\u5c80','\u5c81','\u5c82','\u5c83','\u5c84', + '\u5c85','\u5c86','\u5c87','\u5c88','\u5c89','\u5c8a','\u5c8b', + '\u5c8c','\u5c8d','\u5c8e','\u5c8f','\u5c90','\u5c91','\u5c92', + '\u5c93','\u5c94','\u5c95','\u5c96','\u5c97','\u5c98','\u5c99', + '\u5c9a','\u5c9b','\u5c9c','\u5c9d','\u5c9e','\u5c9f','\u5ca0', + '\u5ca1','\u5ca2','\u5ca3','\u5ca4','\u5ca5','\u5ca6','\u5ca7', + '\u5ca8','\u5ca9','\u5caa','\u5cab','\u5cac','\u5cad','\u5cae', + '\u5caf','\u5cb0','\u5cb1','\u5cb2','\u5cb3','\u5cb4','\u5cb5', + '\u5cb6','\u5cb7','\u5cb8','\u5cb9','\u5cba','\u5cbb','\u5cbc', + '\u5cbd','\u5cbe','\u5cbf','\u5cc0','\u5cc1','\u5cc2','\u5cc3', + '\u5cc4','\u5cc5','\u5cc6','\u5cc7','\u5cc8','\u5cc9','\u5cca', + '\u5ccb','\u5ccc','\u5ccd','\u5cce','\u5ccf','\u5cd0','\u5cd1', + '\u5cd2','\u5cd3','\u5cd4','\u5cd5','\u5cd6','\u5cd7','\u5cd8', + '\u5cd9','\u5cda','\u5cdb','\u5cdc','\u5cdd','\u5cde','\u5cdf', + '\u5ce0','\u5ce1','\u5ce2','\u5ce3','\u5ce4','\u5ce5','\u5ce6', + '\u5ce7','\u5ce8','\u5ce9','\u5cea','\u5ceb','\u5cec','\u5ced', + '\u5cee','\u5cef','\u5cf0','\u5cf1','\u5cf2','\u5cf3','\u5cf4', + '\u5cf5','\u5cf6','\u5cf7','\u5cf8','\u5cf9','\u5cfa','\u5cfb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+23552; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void f5d00() { + char[] cs = new char[] { + '\u5d00','\u5d01','\u5d02','\u5d03','\u5d04','\u5d05','\u5d06', + '\u5d07','\u5d08','\u5d09','\u5d0a','\u5d0b','\u5d0c','\u5d0d', + '\u5d0e','\u5d0f','\u5d10','\u5d11','\u5d12','\u5d13','\u5d14', + '\u5d15','\u5d16','\u5d17','\u5d18','\u5d19','\u5d1a','\u5d1b', + '\u5d1c','\u5d1d','\u5d1e','\u5d1f','\u5d20','\u5d21','\u5d22', + '\u5d23','\u5d24','\u5d25','\u5d26','\u5d27','\u5d28','\u5d29', + '\u5d2a','\u5d2b','\u5d2c','\u5d2d','\u5d2e','\u5d2f','\u5d30', + '\u5d31','\u5d32','\u5d33','\u5d34','\u5d35','\u5d36','\u5d37', + '\u5d38','\u5d39','\u5d3a','\u5d3b','\u5d3c','\u5d3d','\u5d3e', + '\u5d3f','\u5d40','\u5d41','\u5d42','\u5d43','\u5d44','\u5d45', + '\u5d46','\u5d47','\u5d48','\u5d49','\u5d4a','\u5d4b','\u5d4c', + '\u5d4d','\u5d4e','\u5d4f','\u5d50','\u5d51','\u5d52','\u5d53', + '\u5d54','\u5d55','\u5d56','\u5d57','\u5d58','\u5d59','\u5d5a', + '\u5d5b','\u5d5c','\u5d5d','\u5d5e','\u5d5f','\u5d60','\u5d61', + '\u5d62','\u5d63','\u5d64','\u5d65','\u5d66','\u5d67','\u5d68', + '\u5d69','\u5d6a','\u5d6b','\u5d6c','\u5d6d','\u5d6e','\u5d6f', + '\u5d70','\u5d71','\u5d72','\u5d73','\u5d74','\u5d75','\u5d76', + '\u5d77','\u5d78','\u5d79','\u5d7a','\u5d7b','\u5d7c','\u5d7d', + '\u5d7e','\u5d7f','\u5d80','\u5d81','\u5d82','\u5d83','\u5d84', + '\u5d85','\u5d86','\u5d87','\u5d88','\u5d89','\u5d8a','\u5d8b', + '\u5d8c','\u5d8d','\u5d8e','\u5d8f','\u5d90','\u5d91','\u5d92', + '\u5d93','\u5d94','\u5d95','\u5d96','\u5d97','\u5d98','\u5d99', + '\u5d9a','\u5d9b','\u5d9c','\u5d9d','\u5d9e','\u5d9f','\u5da0', + '\u5da1','\u5da2','\u5da3','\u5da4','\u5da5','\u5da6','\u5da7', + '\u5da8','\u5da9','\u5daa','\u5dab','\u5dac','\u5dad','\u5dae', + '\u5daf','\u5db0','\u5db1','\u5db2','\u5db3','\u5db4','\u5db5', + '\u5db6','\u5db7','\u5db8','\u5db9','\u5dba','\u5dbb','\u5dbc', + '\u5dbd','\u5dbe','\u5dbf','\u5dc0','\u5dc1','\u5dc2','\u5dc3', + '\u5dc4','\u5dc5','\u5dc6','\u5dc7','\u5dc8','\u5dc9','\u5dca', + '\u5dcb','\u5dcc','\u5dcd','\u5dce','\u5dcf','\u5dd0','\u5dd1', + '\u5dd2','\u5dd3','\u5dd4','\u5dd5','\u5dd6','\u5dd7','\u5dd8', + '\u5dd9','\u5dda','\u5ddb','\u5ddc','\u5ddd','\u5dde','\u5ddf', + '\u5de0','\u5de1','\u5de2','\u5de3','\u5de4','\u5de5','\u5de6', + '\u5de7','\u5de8','\u5de9','\u5dea','\u5deb','\u5dec','\u5ded', + '\u5dee','\u5def','\u5df0','\u5df1','\u5df2','\u5df3','\u5df4', + '\u5df5','\u5df6','\u5df7','\u5df8','\u5df9','\u5dfa','\u5dfb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+23808; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void f5e00() { + char[] cs = new char[] { + '\u5e00','\u5e01','\u5e02','\u5e03','\u5e04','\u5e05','\u5e06', + '\u5e07','\u5e08','\u5e09','\u5e0a','\u5e0b','\u5e0c','\u5e0d', + '\u5e0e','\u5e0f','\u5e10','\u5e11','\u5e12','\u5e13','\u5e14', + '\u5e15','\u5e16','\u5e17','\u5e18','\u5e19','\u5e1a','\u5e1b', + '\u5e1c','\u5e1d','\u5e1e','\u5e1f','\u5e20','\u5e21','\u5e22', + '\u5e23','\u5e24','\u5e25','\u5e26','\u5e27','\u5e28','\u5e29', + '\u5e2a','\u5e2b','\u5e2c','\u5e2d','\u5e2e','\u5e2f','\u5e30', + '\u5e31','\u5e32','\u5e33','\u5e34','\u5e35','\u5e36','\u5e37', + '\u5e38','\u5e39','\u5e3a','\u5e3b','\u5e3c','\u5e3d','\u5e3e', + '\u5e3f','\u5e40','\u5e41','\u5e42','\u5e43','\u5e44','\u5e45', + '\u5e46','\u5e47','\u5e48','\u5e49','\u5e4a','\u5e4b','\u5e4c', + '\u5e4d','\u5e4e','\u5e4f','\u5e50','\u5e51','\u5e52','\u5e53', + '\u5e54','\u5e55','\u5e56','\u5e57','\u5e58','\u5e59','\u5e5a', + '\u5e5b','\u5e5c','\u5e5d','\u5e5e','\u5e5f','\u5e60','\u5e61', + '\u5e62','\u5e63','\u5e64','\u5e65','\u5e66','\u5e67','\u5e68', + '\u5e69','\u5e6a','\u5e6b','\u5e6c','\u5e6d','\u5e6e','\u5e6f', + '\u5e70','\u5e71','\u5e72','\u5e73','\u5e74','\u5e75','\u5e76', + '\u5e77','\u5e78','\u5e79','\u5e7a','\u5e7b','\u5e7c','\u5e7d', + '\u5e7e','\u5e7f','\u5e80','\u5e81','\u5e82','\u5e83','\u5e84', + '\u5e85','\u5e86','\u5e87','\u5e88','\u5e89','\u5e8a','\u5e8b', + '\u5e8c','\u5e8d','\u5e8e','\u5e8f','\u5e90','\u5e91','\u5e92', + '\u5e93','\u5e94','\u5e95','\u5e96','\u5e97','\u5e98','\u5e99', + '\u5e9a','\u5e9b','\u5e9c','\u5e9d','\u5e9e','\u5e9f','\u5ea0', + '\u5ea1','\u5ea2','\u5ea3','\u5ea4','\u5ea5','\u5ea6','\u5ea7', + '\u5ea8','\u5ea9','\u5eaa','\u5eab','\u5eac','\u5ead','\u5eae', + '\u5eaf','\u5eb0','\u5eb1','\u5eb2','\u5eb3','\u5eb4','\u5eb5', + '\u5eb6','\u5eb7','\u5eb8','\u5eb9','\u5eba','\u5ebb','\u5ebc', + '\u5ebd','\u5ebe','\u5ebf','\u5ec0','\u5ec1','\u5ec2','\u5ec3', + '\u5ec4','\u5ec5','\u5ec6','\u5ec7','\u5ec8','\u5ec9','\u5eca', + '\u5ecb','\u5ecc','\u5ecd','\u5ece','\u5ecf','\u5ed0','\u5ed1', + '\u5ed2','\u5ed3','\u5ed4','\u5ed5','\u5ed6','\u5ed7','\u5ed8', + '\u5ed9','\u5eda','\u5edb','\u5edc','\u5edd','\u5ede','\u5edf', + '\u5ee0','\u5ee1','\u5ee2','\u5ee3','\u5ee4','\u5ee5','\u5ee6', + '\u5ee7','\u5ee8','\u5ee9','\u5eea','\u5eeb','\u5eec','\u5eed', + '\u5eee','\u5eef','\u5ef0','\u5ef1','\u5ef2','\u5ef3','\u5ef4', + '\u5ef5','\u5ef6','\u5ef7','\u5ef8','\u5ef9','\u5efa','\u5efb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+24064; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void f5f00() { + char[] cs = new char[] { + '\u5f00','\u5f01','\u5f02','\u5f03','\u5f04','\u5f05','\u5f06', + '\u5f07','\u5f08','\u5f09','\u5f0a','\u5f0b','\u5f0c','\u5f0d', + '\u5f0e','\u5f0f','\u5f10','\u5f11','\u5f12','\u5f13','\u5f14', + '\u5f15','\u5f16','\u5f17','\u5f18','\u5f19','\u5f1a','\u5f1b', + '\u5f1c','\u5f1d','\u5f1e','\u5f1f','\u5f20','\u5f21','\u5f22', + '\u5f23','\u5f24','\u5f25','\u5f26','\u5f27','\u5f28','\u5f29', + '\u5f2a','\u5f2b','\u5f2c','\u5f2d','\u5f2e','\u5f2f','\u5f30', + '\u5f31','\u5f32','\u5f33','\u5f34','\u5f35','\u5f36','\u5f37', + '\u5f38','\u5f39','\u5f3a','\u5f3b','\u5f3c','\u5f3d','\u5f3e', + '\u5f3f','\u5f40','\u5f41','\u5f42','\u5f43','\u5f44','\u5f45', + '\u5f46','\u5f47','\u5f48','\u5f49','\u5f4a','\u5f4b','\u5f4c', + '\u5f4d','\u5f4e','\u5f4f','\u5f50','\u5f51','\u5f52','\u5f53', + '\u5f54','\u5f55','\u5f56','\u5f57','\u5f58','\u5f59','\u5f5a', + '\u5f5b','\u5f5c','\u5f5d','\u5f5e','\u5f5f','\u5f60','\u5f61', + '\u5f62','\u5f63','\u5f64','\u5f65','\u5f66','\u5f67','\u5f68', + '\u5f69','\u5f6a','\u5f6b','\u5f6c','\u5f6d','\u5f6e','\u5f6f', + '\u5f70','\u5f71','\u5f72','\u5f73','\u5f74','\u5f75','\u5f76', + '\u5f77','\u5f78','\u5f79','\u5f7a','\u5f7b','\u5f7c','\u5f7d', + '\u5f7e','\u5f7f','\u5f80','\u5f81','\u5f82','\u5f83','\u5f84', + '\u5f85','\u5f86','\u5f87','\u5f88','\u5f89','\u5f8a','\u5f8b', + '\u5f8c','\u5f8d','\u5f8e','\u5f8f','\u5f90','\u5f91','\u5f92', + '\u5f93','\u5f94','\u5f95','\u5f96','\u5f97','\u5f98','\u5f99', + '\u5f9a','\u5f9b','\u5f9c','\u5f9d','\u5f9e','\u5f9f','\u5fa0', + '\u5fa1','\u5fa2','\u5fa3','\u5fa4','\u5fa5','\u5fa6','\u5fa7', + '\u5fa8','\u5fa9','\u5faa','\u5fab','\u5fac','\u5fad','\u5fae', + '\u5faf','\u5fb0','\u5fb1','\u5fb2','\u5fb3','\u5fb4','\u5fb5', + '\u5fb6','\u5fb7','\u5fb8','\u5fb9','\u5fba','\u5fbb','\u5fbc', + '\u5fbd','\u5fbe','\u5fbf','\u5fc0','\u5fc1','\u5fc2','\u5fc3', + '\u5fc4','\u5fc5','\u5fc6','\u5fc7','\u5fc8','\u5fc9','\u5fca', + '\u5fcb','\u5fcc','\u5fcd','\u5fce','\u5fcf','\u5fd0','\u5fd1', + '\u5fd2','\u5fd3','\u5fd4','\u5fd5','\u5fd6','\u5fd7','\u5fd8', + '\u5fd9','\u5fda','\u5fdb','\u5fdc','\u5fdd','\u5fde','\u5fdf', + '\u5fe0','\u5fe1','\u5fe2','\u5fe3','\u5fe4','\u5fe5','\u5fe6', + '\u5fe7','\u5fe8','\u5fe9','\u5fea','\u5feb','\u5fec','\u5fed', + '\u5fee','\u5fef','\u5ff0','\u5ff1','\u5ff2','\u5ff3','\u5ff4', + '\u5ff5','\u5ff6','\u5ff7','\u5ff8','\u5ff9','\u5ffa','\u5ffb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+24320; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void f6000() { + char[] cs = new char[] { + '\u6000','\u6001','\u6002','\u6003','\u6004','\u6005','\u6006', + '\u6007','\u6008','\u6009','\u600a','\u600b','\u600c','\u600d', + '\u600e','\u600f','\u6010','\u6011','\u6012','\u6013','\u6014', + '\u6015','\u6016','\u6017','\u6018','\u6019','\u601a','\u601b', + '\u601c','\u601d','\u601e','\u601f','\u6020','\u6021','\u6022', + '\u6023','\u6024','\u6025','\u6026','\u6027','\u6028','\u6029', + '\u602a','\u602b','\u602c','\u602d','\u602e','\u602f','\u6030', + '\u6031','\u6032','\u6033','\u6034','\u6035','\u6036','\u6037', + '\u6038','\u6039','\u603a','\u603b','\u603c','\u603d','\u603e', + '\u603f','\u6040','\u6041','\u6042','\u6043','\u6044','\u6045', + '\u6046','\u6047','\u6048','\u6049','\u604a','\u604b','\u604c', + '\u604d','\u604e','\u604f','\u6050','\u6051','\u6052','\u6053', + '\u6054','\u6055','\u6056','\u6057','\u6058','\u6059','\u605a', + '\u605b','\u605c','\u605d','\u605e','\u605f','\u6060','\u6061', + '\u6062','\u6063','\u6064','\u6065','\u6066','\u6067','\u6068', + '\u6069','\u606a','\u606b','\u606c','\u606d','\u606e','\u606f', + '\u6070','\u6071','\u6072','\u6073','\u6074','\u6075','\u6076', + '\u6077','\u6078','\u6079','\u607a','\u607b','\u607c','\u607d', + '\u607e','\u607f','\u6080','\u6081','\u6082','\u6083','\u6084', + '\u6085','\u6086','\u6087','\u6088','\u6089','\u608a','\u608b', + '\u608c','\u608d','\u608e','\u608f','\u6090','\u6091','\u6092', + '\u6093','\u6094','\u6095','\u6096','\u6097','\u6098','\u6099', + '\u609a','\u609b','\u609c','\u609d','\u609e','\u609f','\u60a0', + '\u60a1','\u60a2','\u60a3','\u60a4','\u60a5','\u60a6','\u60a7', + '\u60a8','\u60a9','\u60aa','\u60ab','\u60ac','\u60ad','\u60ae', + '\u60af','\u60b0','\u60b1','\u60b2','\u60b3','\u60b4','\u60b5', + '\u60b6','\u60b7','\u60b8','\u60b9','\u60ba','\u60bb','\u60bc', + '\u60bd','\u60be','\u60bf','\u60c0','\u60c1','\u60c2','\u60c3', + '\u60c4','\u60c5','\u60c6','\u60c7','\u60c8','\u60c9','\u60ca', + '\u60cb','\u60cc','\u60cd','\u60ce','\u60cf','\u60d0','\u60d1', + '\u60d2','\u60d3','\u60d4','\u60d5','\u60d6','\u60d7','\u60d8', + '\u60d9','\u60da','\u60db','\u60dc','\u60dd','\u60de','\u60df', + '\u60e0','\u60e1','\u60e2','\u60e3','\u60e4','\u60e5','\u60e6', + '\u60e7','\u60e8','\u60e9','\u60ea','\u60eb','\u60ec','\u60ed', + '\u60ee','\u60ef','\u60f0','\u60f1','\u60f2','\u60f3','\u60f4', + '\u60f5','\u60f6','\u60f7','\u60f8','\u60f9','\u60fa','\u60fb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+24576; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void f6100() { + char[] cs = new char[] { + '\u6100','\u6101','\u6102','\u6103','\u6104','\u6105','\u6106', + '\u6107','\u6108','\u6109','\u610a','\u610b','\u610c','\u610d', + '\u610e','\u610f','\u6110','\u6111','\u6112','\u6113','\u6114', + '\u6115','\u6116','\u6117','\u6118','\u6119','\u611a','\u611b', + '\u611c','\u611d','\u611e','\u611f','\u6120','\u6121','\u6122', + '\u6123','\u6124','\u6125','\u6126','\u6127','\u6128','\u6129', + '\u612a','\u612b','\u612c','\u612d','\u612e','\u612f','\u6130', + '\u6131','\u6132','\u6133','\u6134','\u6135','\u6136','\u6137', + '\u6138','\u6139','\u613a','\u613b','\u613c','\u613d','\u613e', + '\u613f','\u6140','\u6141','\u6142','\u6143','\u6144','\u6145', + '\u6146','\u6147','\u6148','\u6149','\u614a','\u614b','\u614c', + '\u614d','\u614e','\u614f','\u6150','\u6151','\u6152','\u6153', + '\u6154','\u6155','\u6156','\u6157','\u6158','\u6159','\u615a', + '\u615b','\u615c','\u615d','\u615e','\u615f','\u6160','\u6161', + '\u6162','\u6163','\u6164','\u6165','\u6166','\u6167','\u6168', + '\u6169','\u616a','\u616b','\u616c','\u616d','\u616e','\u616f', + '\u6170','\u6171','\u6172','\u6173','\u6174','\u6175','\u6176', + '\u6177','\u6178','\u6179','\u617a','\u617b','\u617c','\u617d', + '\u617e','\u617f','\u6180','\u6181','\u6182','\u6183','\u6184', + '\u6185','\u6186','\u6187','\u6188','\u6189','\u618a','\u618b', + '\u618c','\u618d','\u618e','\u618f','\u6190','\u6191','\u6192', + '\u6193','\u6194','\u6195','\u6196','\u6197','\u6198','\u6199', + '\u619a','\u619b','\u619c','\u619d','\u619e','\u619f','\u61a0', + '\u61a1','\u61a2','\u61a3','\u61a4','\u61a5','\u61a6','\u61a7', + '\u61a8','\u61a9','\u61aa','\u61ab','\u61ac','\u61ad','\u61ae', + '\u61af','\u61b0','\u61b1','\u61b2','\u61b3','\u61b4','\u61b5', + '\u61b6','\u61b7','\u61b8','\u61b9','\u61ba','\u61bb','\u61bc', + '\u61bd','\u61be','\u61bf','\u61c0','\u61c1','\u61c2','\u61c3', + '\u61c4','\u61c5','\u61c6','\u61c7','\u61c8','\u61c9','\u61ca', + '\u61cb','\u61cc','\u61cd','\u61ce','\u61cf','\u61d0','\u61d1', + '\u61d2','\u61d3','\u61d4','\u61d5','\u61d6','\u61d7','\u61d8', + '\u61d9','\u61da','\u61db','\u61dc','\u61dd','\u61de','\u61df', + '\u61e0','\u61e1','\u61e2','\u61e3','\u61e4','\u61e5','\u61e6', + '\u61e7','\u61e8','\u61e9','\u61ea','\u61eb','\u61ec','\u61ed', + '\u61ee','\u61ef','\u61f0','\u61f1','\u61f2','\u61f3','\u61f4', + '\u61f5','\u61f6','\u61f7','\u61f8','\u61f9','\u61fa','\u61fb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+24832; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void f6200() { + char[] cs = new char[] { + '\u6200','\u6201','\u6202','\u6203','\u6204','\u6205','\u6206', + '\u6207','\u6208','\u6209','\u620a','\u620b','\u620c','\u620d', + '\u620e','\u620f','\u6210','\u6211','\u6212','\u6213','\u6214', + '\u6215','\u6216','\u6217','\u6218','\u6219','\u621a','\u621b', + '\u621c','\u621d','\u621e','\u621f','\u6220','\u6221','\u6222', + '\u6223','\u6224','\u6225','\u6226','\u6227','\u6228','\u6229', + '\u622a','\u622b','\u622c','\u622d','\u622e','\u622f','\u6230', + '\u6231','\u6232','\u6233','\u6234','\u6235','\u6236','\u6237', + '\u6238','\u6239','\u623a','\u623b','\u623c','\u623d','\u623e', + '\u623f','\u6240','\u6241','\u6242','\u6243','\u6244','\u6245', + '\u6246','\u6247','\u6248','\u6249','\u624a','\u624b','\u624c', + '\u624d','\u624e','\u624f','\u6250','\u6251','\u6252','\u6253', + '\u6254','\u6255','\u6256','\u6257','\u6258','\u6259','\u625a', + '\u625b','\u625c','\u625d','\u625e','\u625f','\u6260','\u6261', + '\u6262','\u6263','\u6264','\u6265','\u6266','\u6267','\u6268', + '\u6269','\u626a','\u626b','\u626c','\u626d','\u626e','\u626f', + '\u6270','\u6271','\u6272','\u6273','\u6274','\u6275','\u6276', + '\u6277','\u6278','\u6279','\u627a','\u627b','\u627c','\u627d', + '\u627e','\u627f','\u6280','\u6281','\u6282','\u6283','\u6284', + '\u6285','\u6286','\u6287','\u6288','\u6289','\u628a','\u628b', + '\u628c','\u628d','\u628e','\u628f','\u6290','\u6291','\u6292', + '\u6293','\u6294','\u6295','\u6296','\u6297','\u6298','\u6299', + '\u629a','\u629b','\u629c','\u629d','\u629e','\u629f','\u62a0', + '\u62a1','\u62a2','\u62a3','\u62a4','\u62a5','\u62a6','\u62a7', + '\u62a8','\u62a9','\u62aa','\u62ab','\u62ac','\u62ad','\u62ae', + '\u62af','\u62b0','\u62b1','\u62b2','\u62b3','\u62b4','\u62b5', + '\u62b6','\u62b7','\u62b8','\u62b9','\u62ba','\u62bb','\u62bc', + '\u62bd','\u62be','\u62bf','\u62c0','\u62c1','\u62c2','\u62c3', + '\u62c4','\u62c5','\u62c6','\u62c7','\u62c8','\u62c9','\u62ca', + '\u62cb','\u62cc','\u62cd','\u62ce','\u62cf','\u62d0','\u62d1', + '\u62d2','\u62d3','\u62d4','\u62d5','\u62d6','\u62d7','\u62d8', + '\u62d9','\u62da','\u62db','\u62dc','\u62dd','\u62de','\u62df', + '\u62e0','\u62e1','\u62e2','\u62e3','\u62e4','\u62e5','\u62e6', + '\u62e7','\u62e8','\u62e9','\u62ea','\u62eb','\u62ec','\u62ed', + '\u62ee','\u62ef','\u62f0','\u62f1','\u62f2','\u62f3','\u62f4', + '\u62f5','\u62f6','\u62f7','\u62f8','\u62f9','\u62fa','\u62fb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+25088; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void f6300() { + char[] cs = new char[] { + '\u6300','\u6301','\u6302','\u6303','\u6304','\u6305','\u6306', + '\u6307','\u6308','\u6309','\u630a','\u630b','\u630c','\u630d', + '\u630e','\u630f','\u6310','\u6311','\u6312','\u6313','\u6314', + '\u6315','\u6316','\u6317','\u6318','\u6319','\u631a','\u631b', + '\u631c','\u631d','\u631e','\u631f','\u6320','\u6321','\u6322', + '\u6323','\u6324','\u6325','\u6326','\u6327','\u6328','\u6329', + '\u632a','\u632b','\u632c','\u632d','\u632e','\u632f','\u6330', + '\u6331','\u6332','\u6333','\u6334','\u6335','\u6336','\u6337', + '\u6338','\u6339','\u633a','\u633b','\u633c','\u633d','\u633e', + '\u633f','\u6340','\u6341','\u6342','\u6343','\u6344','\u6345', + '\u6346','\u6347','\u6348','\u6349','\u634a','\u634b','\u634c', + '\u634d','\u634e','\u634f','\u6350','\u6351','\u6352','\u6353', + '\u6354','\u6355','\u6356','\u6357','\u6358','\u6359','\u635a', + '\u635b','\u635c','\u635d','\u635e','\u635f','\u6360','\u6361', + '\u6362','\u6363','\u6364','\u6365','\u6366','\u6367','\u6368', + '\u6369','\u636a','\u636b','\u636c','\u636d','\u636e','\u636f', + '\u6370','\u6371','\u6372','\u6373','\u6374','\u6375','\u6376', + '\u6377','\u6378','\u6379','\u637a','\u637b','\u637c','\u637d', + '\u637e','\u637f','\u6380','\u6381','\u6382','\u6383','\u6384', + '\u6385','\u6386','\u6387','\u6388','\u6389','\u638a','\u638b', + '\u638c','\u638d','\u638e','\u638f','\u6390','\u6391','\u6392', + '\u6393','\u6394','\u6395','\u6396','\u6397','\u6398','\u6399', + '\u639a','\u639b','\u639c','\u639d','\u639e','\u639f','\u63a0', + '\u63a1','\u63a2','\u63a3','\u63a4','\u63a5','\u63a6','\u63a7', + '\u63a8','\u63a9','\u63aa','\u63ab','\u63ac','\u63ad','\u63ae', + '\u63af','\u63b0','\u63b1','\u63b2','\u63b3','\u63b4','\u63b5', + '\u63b6','\u63b7','\u63b8','\u63b9','\u63ba','\u63bb','\u63bc', + '\u63bd','\u63be','\u63bf','\u63c0','\u63c1','\u63c2','\u63c3', + '\u63c4','\u63c5','\u63c6','\u63c7','\u63c8','\u63c9','\u63ca', + '\u63cb','\u63cc','\u63cd','\u63ce','\u63cf','\u63d0','\u63d1', + '\u63d2','\u63d3','\u63d4','\u63d5','\u63d6','\u63d7','\u63d8', + '\u63d9','\u63da','\u63db','\u63dc','\u63dd','\u63de','\u63df', + '\u63e0','\u63e1','\u63e2','\u63e3','\u63e4','\u63e5','\u63e6', + '\u63e7','\u63e8','\u63e9','\u63ea','\u63eb','\u63ec','\u63ed', + '\u63ee','\u63ef','\u63f0','\u63f1','\u63f2','\u63f3','\u63f4', + '\u63f5','\u63f6','\u63f7','\u63f8','\u63f9','\u63fa','\u63fb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+25344; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void f6400() { + char[] cs = new char[] { + '\u6400','\u6401','\u6402','\u6403','\u6404','\u6405','\u6406', + '\u6407','\u6408','\u6409','\u640a','\u640b','\u640c','\u640d', + '\u640e','\u640f','\u6410','\u6411','\u6412','\u6413','\u6414', + '\u6415','\u6416','\u6417','\u6418','\u6419','\u641a','\u641b', + '\u641c','\u641d','\u641e','\u641f','\u6420','\u6421','\u6422', + '\u6423','\u6424','\u6425','\u6426','\u6427','\u6428','\u6429', + '\u642a','\u642b','\u642c','\u642d','\u642e','\u642f','\u6430', + '\u6431','\u6432','\u6433','\u6434','\u6435','\u6436','\u6437', + '\u6438','\u6439','\u643a','\u643b','\u643c','\u643d','\u643e', + '\u643f','\u6440','\u6441','\u6442','\u6443','\u6444','\u6445', + '\u6446','\u6447','\u6448','\u6449','\u644a','\u644b','\u644c', + '\u644d','\u644e','\u644f','\u6450','\u6451','\u6452','\u6453', + '\u6454','\u6455','\u6456','\u6457','\u6458','\u6459','\u645a', + '\u645b','\u645c','\u645d','\u645e','\u645f','\u6460','\u6461', + '\u6462','\u6463','\u6464','\u6465','\u6466','\u6467','\u6468', + '\u6469','\u646a','\u646b','\u646c','\u646d','\u646e','\u646f', + '\u6470','\u6471','\u6472','\u6473','\u6474','\u6475','\u6476', + '\u6477','\u6478','\u6479','\u647a','\u647b','\u647c','\u647d', + '\u647e','\u647f','\u6480','\u6481','\u6482','\u6483','\u6484', + '\u6485','\u6486','\u6487','\u6488','\u6489','\u648a','\u648b', + '\u648c','\u648d','\u648e','\u648f','\u6490','\u6491','\u6492', + '\u6493','\u6494','\u6495','\u6496','\u6497','\u6498','\u6499', + '\u649a','\u649b','\u649c','\u649d','\u649e','\u649f','\u64a0', + '\u64a1','\u64a2','\u64a3','\u64a4','\u64a5','\u64a6','\u64a7', + '\u64a8','\u64a9','\u64aa','\u64ab','\u64ac','\u64ad','\u64ae', + '\u64af','\u64b0','\u64b1','\u64b2','\u64b3','\u64b4','\u64b5', + '\u64b6','\u64b7','\u64b8','\u64b9','\u64ba','\u64bb','\u64bc', + '\u64bd','\u64be','\u64bf','\u64c0','\u64c1','\u64c2','\u64c3', + '\u64c4','\u64c5','\u64c6','\u64c7','\u64c8','\u64c9','\u64ca', + '\u64cb','\u64cc','\u64cd','\u64ce','\u64cf','\u64d0','\u64d1', + '\u64d2','\u64d3','\u64d4','\u64d5','\u64d6','\u64d7','\u64d8', + '\u64d9','\u64da','\u64db','\u64dc','\u64dd','\u64de','\u64df', + '\u64e0','\u64e1','\u64e2','\u64e3','\u64e4','\u64e5','\u64e6', + '\u64e7','\u64e8','\u64e9','\u64ea','\u64eb','\u64ec','\u64ed', + '\u64ee','\u64ef','\u64f0','\u64f1','\u64f2','\u64f3','\u64f4', + '\u64f5','\u64f6','\u64f7','\u64f8','\u64f9','\u64fa','\u64fb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+25600; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void f6500() { + char[] cs = new char[] { + '\u6500','\u6501','\u6502','\u6503','\u6504','\u6505','\u6506', + '\u6507','\u6508','\u6509','\u650a','\u650b','\u650c','\u650d', + '\u650e','\u650f','\u6510','\u6511','\u6512','\u6513','\u6514', + '\u6515','\u6516','\u6517','\u6518','\u6519','\u651a','\u651b', + '\u651c','\u651d','\u651e','\u651f','\u6520','\u6521','\u6522', + '\u6523','\u6524','\u6525','\u6526','\u6527','\u6528','\u6529', + '\u652a','\u652b','\u652c','\u652d','\u652e','\u652f','\u6530', + '\u6531','\u6532','\u6533','\u6534','\u6535','\u6536','\u6537', + '\u6538','\u6539','\u653a','\u653b','\u653c','\u653d','\u653e', + '\u653f','\u6540','\u6541','\u6542','\u6543','\u6544','\u6545', + '\u6546','\u6547','\u6548','\u6549','\u654a','\u654b','\u654c', + '\u654d','\u654e','\u654f','\u6550','\u6551','\u6552','\u6553', + '\u6554','\u6555','\u6556','\u6557','\u6558','\u6559','\u655a', + '\u655b','\u655c','\u655d','\u655e','\u655f','\u6560','\u6561', + '\u6562','\u6563','\u6564','\u6565','\u6566','\u6567','\u6568', + '\u6569','\u656a','\u656b','\u656c','\u656d','\u656e','\u656f', + '\u6570','\u6571','\u6572','\u6573','\u6574','\u6575','\u6576', + '\u6577','\u6578','\u6579','\u657a','\u657b','\u657c','\u657d', + '\u657e','\u657f','\u6580','\u6581','\u6582','\u6583','\u6584', + '\u6585','\u6586','\u6587','\u6588','\u6589','\u658a','\u658b', + '\u658c','\u658d','\u658e','\u658f','\u6590','\u6591','\u6592', + '\u6593','\u6594','\u6595','\u6596','\u6597','\u6598','\u6599', + '\u659a','\u659b','\u659c','\u659d','\u659e','\u659f','\u65a0', + '\u65a1','\u65a2','\u65a3','\u65a4','\u65a5','\u65a6','\u65a7', + '\u65a8','\u65a9','\u65aa','\u65ab','\u65ac','\u65ad','\u65ae', + '\u65af','\u65b0','\u65b1','\u65b2','\u65b3','\u65b4','\u65b5', + '\u65b6','\u65b7','\u65b8','\u65b9','\u65ba','\u65bb','\u65bc', + '\u65bd','\u65be','\u65bf','\u65c0','\u65c1','\u65c2','\u65c3', + '\u65c4','\u65c5','\u65c6','\u65c7','\u65c8','\u65c9','\u65ca', + '\u65cb','\u65cc','\u65cd','\u65ce','\u65cf','\u65d0','\u65d1', + '\u65d2','\u65d3','\u65d4','\u65d5','\u65d6','\u65d7','\u65d8', + '\u65d9','\u65da','\u65db','\u65dc','\u65dd','\u65de','\u65df', + '\u65e0','\u65e1','\u65e2','\u65e3','\u65e4','\u65e5','\u65e6', + '\u65e7','\u65e8','\u65e9','\u65ea','\u65eb','\u65ec','\u65ed', + '\u65ee','\u65ef','\u65f0','\u65f1','\u65f2','\u65f3','\u65f4', + '\u65f5','\u65f6','\u65f7','\u65f8','\u65f9','\u65fa','\u65fb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+25856; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void f6600() { + char[] cs = new char[] { + '\u6600','\u6601','\u6602','\u6603','\u6604','\u6605','\u6606', + '\u6607','\u6608','\u6609','\u660a','\u660b','\u660c','\u660d', + '\u660e','\u660f','\u6610','\u6611','\u6612','\u6613','\u6614', + '\u6615','\u6616','\u6617','\u6618','\u6619','\u661a','\u661b', + '\u661c','\u661d','\u661e','\u661f','\u6620','\u6621','\u6622', + '\u6623','\u6624','\u6625','\u6626','\u6627','\u6628','\u6629', + '\u662a','\u662b','\u662c','\u662d','\u662e','\u662f','\u6630', + '\u6631','\u6632','\u6633','\u6634','\u6635','\u6636','\u6637', + '\u6638','\u6639','\u663a','\u663b','\u663c','\u663d','\u663e', + '\u663f','\u6640','\u6641','\u6642','\u6643','\u6644','\u6645', + '\u6646','\u6647','\u6648','\u6649','\u664a','\u664b','\u664c', + '\u664d','\u664e','\u664f','\u6650','\u6651','\u6652','\u6653', + '\u6654','\u6655','\u6656','\u6657','\u6658','\u6659','\u665a', + '\u665b','\u665c','\u665d','\u665e','\u665f','\u6660','\u6661', + '\u6662','\u6663','\u6664','\u6665','\u6666','\u6667','\u6668', + '\u6669','\u666a','\u666b','\u666c','\u666d','\u666e','\u666f', + '\u6670','\u6671','\u6672','\u6673','\u6674','\u6675','\u6676', + '\u6677','\u6678','\u6679','\u667a','\u667b','\u667c','\u667d', + '\u667e','\u667f','\u6680','\u6681','\u6682','\u6683','\u6684', + '\u6685','\u6686','\u6687','\u6688','\u6689','\u668a','\u668b', + '\u668c','\u668d','\u668e','\u668f','\u6690','\u6691','\u6692', + '\u6693','\u6694','\u6695','\u6696','\u6697','\u6698','\u6699', + '\u669a','\u669b','\u669c','\u669d','\u669e','\u669f','\u66a0', + '\u66a1','\u66a2','\u66a3','\u66a4','\u66a5','\u66a6','\u66a7', + '\u66a8','\u66a9','\u66aa','\u66ab','\u66ac','\u66ad','\u66ae', + '\u66af','\u66b0','\u66b1','\u66b2','\u66b3','\u66b4','\u66b5', + '\u66b6','\u66b7','\u66b8','\u66b9','\u66ba','\u66bb','\u66bc', + '\u66bd','\u66be','\u66bf','\u66c0','\u66c1','\u66c2','\u66c3', + '\u66c4','\u66c5','\u66c6','\u66c7','\u66c8','\u66c9','\u66ca', + '\u66cb','\u66cc','\u66cd','\u66ce','\u66cf','\u66d0','\u66d1', + '\u66d2','\u66d3','\u66d4','\u66d5','\u66d6','\u66d7','\u66d8', + '\u66d9','\u66da','\u66db','\u66dc','\u66dd','\u66de','\u66df', + '\u66e0','\u66e1','\u66e2','\u66e3','\u66e4','\u66e5','\u66e6', + '\u66e7','\u66e8','\u66e9','\u66ea','\u66eb','\u66ec','\u66ed', + '\u66ee','\u66ef','\u66f0','\u66f1','\u66f2','\u66f3','\u66f4', + '\u66f5','\u66f6','\u66f7','\u66f8','\u66f9','\u66fa','\u66fb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+26112; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void f6700() { + char[] cs = new char[] { + '\u6700','\u6701','\u6702','\u6703','\u6704','\u6705','\u6706', + '\u6707','\u6708','\u6709','\u670a','\u670b','\u670c','\u670d', + '\u670e','\u670f','\u6710','\u6711','\u6712','\u6713','\u6714', + '\u6715','\u6716','\u6717','\u6718','\u6719','\u671a','\u671b', + '\u671c','\u671d','\u671e','\u671f','\u6720','\u6721','\u6722', + '\u6723','\u6724','\u6725','\u6726','\u6727','\u6728','\u6729', + '\u672a','\u672b','\u672c','\u672d','\u672e','\u672f','\u6730', + '\u6731','\u6732','\u6733','\u6734','\u6735','\u6736','\u6737', + '\u6738','\u6739','\u673a','\u673b','\u673c','\u673d','\u673e', + '\u673f','\u6740','\u6741','\u6742','\u6743','\u6744','\u6745', + '\u6746','\u6747','\u6748','\u6749','\u674a','\u674b','\u674c', + '\u674d','\u674e','\u674f','\u6750','\u6751','\u6752','\u6753', + '\u6754','\u6755','\u6756','\u6757','\u6758','\u6759','\u675a', + '\u675b','\u675c','\u675d','\u675e','\u675f','\u6760','\u6761', + '\u6762','\u6763','\u6764','\u6765','\u6766','\u6767','\u6768', + '\u6769','\u676a','\u676b','\u676c','\u676d','\u676e','\u676f', + '\u6770','\u6771','\u6772','\u6773','\u6774','\u6775','\u6776', + '\u6777','\u6778','\u6779','\u677a','\u677b','\u677c','\u677d', + '\u677e','\u677f','\u6780','\u6781','\u6782','\u6783','\u6784', + '\u6785','\u6786','\u6787','\u6788','\u6789','\u678a','\u678b', + '\u678c','\u678d','\u678e','\u678f','\u6790','\u6791','\u6792', + '\u6793','\u6794','\u6795','\u6796','\u6797','\u6798','\u6799', + '\u679a','\u679b','\u679c','\u679d','\u679e','\u679f','\u67a0', + '\u67a1','\u67a2','\u67a3','\u67a4','\u67a5','\u67a6','\u67a7', + '\u67a8','\u67a9','\u67aa','\u67ab','\u67ac','\u67ad','\u67ae', + '\u67af','\u67b0','\u67b1','\u67b2','\u67b3','\u67b4','\u67b5', + '\u67b6','\u67b7','\u67b8','\u67b9','\u67ba','\u67bb','\u67bc', + '\u67bd','\u67be','\u67bf','\u67c0','\u67c1','\u67c2','\u67c3', + '\u67c4','\u67c5','\u67c6','\u67c7','\u67c8','\u67c9','\u67ca', + '\u67cb','\u67cc','\u67cd','\u67ce','\u67cf','\u67d0','\u67d1', + '\u67d2','\u67d3','\u67d4','\u67d5','\u67d6','\u67d7','\u67d8', + '\u67d9','\u67da','\u67db','\u67dc','\u67dd','\u67de','\u67df', + '\u67e0','\u67e1','\u67e2','\u67e3','\u67e4','\u67e5','\u67e6', + '\u67e7','\u67e8','\u67e9','\u67ea','\u67eb','\u67ec','\u67ed', + '\u67ee','\u67ef','\u67f0','\u67f1','\u67f2','\u67f3','\u67f4', + '\u67f5','\u67f6','\u67f7','\u67f8','\u67f9','\u67fa','\u67fb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+26368; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void f6800() { + char[] cs = new char[] { + '\u6800','\u6801','\u6802','\u6803','\u6804','\u6805','\u6806', + '\u6807','\u6808','\u6809','\u680a','\u680b','\u680c','\u680d', + '\u680e','\u680f','\u6810','\u6811','\u6812','\u6813','\u6814', + '\u6815','\u6816','\u6817','\u6818','\u6819','\u681a','\u681b', + '\u681c','\u681d','\u681e','\u681f','\u6820','\u6821','\u6822', + '\u6823','\u6824','\u6825','\u6826','\u6827','\u6828','\u6829', + '\u682a','\u682b','\u682c','\u682d','\u682e','\u682f','\u6830', + '\u6831','\u6832','\u6833','\u6834','\u6835','\u6836','\u6837', + '\u6838','\u6839','\u683a','\u683b','\u683c','\u683d','\u683e', + '\u683f','\u6840','\u6841','\u6842','\u6843','\u6844','\u6845', + '\u6846','\u6847','\u6848','\u6849','\u684a','\u684b','\u684c', + '\u684d','\u684e','\u684f','\u6850','\u6851','\u6852','\u6853', + '\u6854','\u6855','\u6856','\u6857','\u6858','\u6859','\u685a', + '\u685b','\u685c','\u685d','\u685e','\u685f','\u6860','\u6861', + '\u6862','\u6863','\u6864','\u6865','\u6866','\u6867','\u6868', + '\u6869','\u686a','\u686b','\u686c','\u686d','\u686e','\u686f', + '\u6870','\u6871','\u6872','\u6873','\u6874','\u6875','\u6876', + '\u6877','\u6878','\u6879','\u687a','\u687b','\u687c','\u687d', + '\u687e','\u687f','\u6880','\u6881','\u6882','\u6883','\u6884', + '\u6885','\u6886','\u6887','\u6888','\u6889','\u688a','\u688b', + '\u688c','\u688d','\u688e','\u688f','\u6890','\u6891','\u6892', + '\u6893','\u6894','\u6895','\u6896','\u6897','\u6898','\u6899', + '\u689a','\u689b','\u689c','\u689d','\u689e','\u689f','\u68a0', + '\u68a1','\u68a2','\u68a3','\u68a4','\u68a5','\u68a6','\u68a7', + '\u68a8','\u68a9','\u68aa','\u68ab','\u68ac','\u68ad','\u68ae', + '\u68af','\u68b0','\u68b1','\u68b2','\u68b3','\u68b4','\u68b5', + '\u68b6','\u68b7','\u68b8','\u68b9','\u68ba','\u68bb','\u68bc', + '\u68bd','\u68be','\u68bf','\u68c0','\u68c1','\u68c2','\u68c3', + '\u68c4','\u68c5','\u68c6','\u68c7','\u68c8','\u68c9','\u68ca', + '\u68cb','\u68cc','\u68cd','\u68ce','\u68cf','\u68d0','\u68d1', + '\u68d2','\u68d3','\u68d4','\u68d5','\u68d6','\u68d7','\u68d8', + '\u68d9','\u68da','\u68db','\u68dc','\u68dd','\u68de','\u68df', + '\u68e0','\u68e1','\u68e2','\u68e3','\u68e4','\u68e5','\u68e6', + '\u68e7','\u68e8','\u68e9','\u68ea','\u68eb','\u68ec','\u68ed', + '\u68ee','\u68ef','\u68f0','\u68f1','\u68f2','\u68f3','\u68f4', + '\u68f5','\u68f6','\u68f7','\u68f8','\u68f9','\u68fa','\u68fb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+26624; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void f6900() { + char[] cs = new char[] { + '\u6900','\u6901','\u6902','\u6903','\u6904','\u6905','\u6906', + '\u6907','\u6908','\u6909','\u690a','\u690b','\u690c','\u690d', + '\u690e','\u690f','\u6910','\u6911','\u6912','\u6913','\u6914', + '\u6915','\u6916','\u6917','\u6918','\u6919','\u691a','\u691b', + '\u691c','\u691d','\u691e','\u691f','\u6920','\u6921','\u6922', + '\u6923','\u6924','\u6925','\u6926','\u6927','\u6928','\u6929', + '\u692a','\u692b','\u692c','\u692d','\u692e','\u692f','\u6930', + '\u6931','\u6932','\u6933','\u6934','\u6935','\u6936','\u6937', + '\u6938','\u6939','\u693a','\u693b','\u693c','\u693d','\u693e', + '\u693f','\u6940','\u6941','\u6942','\u6943','\u6944','\u6945', + '\u6946','\u6947','\u6948','\u6949','\u694a','\u694b','\u694c', + '\u694d','\u694e','\u694f','\u6950','\u6951','\u6952','\u6953', + '\u6954','\u6955','\u6956','\u6957','\u6958','\u6959','\u695a', + '\u695b','\u695c','\u695d','\u695e','\u695f','\u6960','\u6961', + '\u6962','\u6963','\u6964','\u6965','\u6966','\u6967','\u6968', + '\u6969','\u696a','\u696b','\u696c','\u696d','\u696e','\u696f', + '\u6970','\u6971','\u6972','\u6973','\u6974','\u6975','\u6976', + '\u6977','\u6978','\u6979','\u697a','\u697b','\u697c','\u697d', + '\u697e','\u697f','\u6980','\u6981','\u6982','\u6983','\u6984', + '\u6985','\u6986','\u6987','\u6988','\u6989','\u698a','\u698b', + '\u698c','\u698d','\u698e','\u698f','\u6990','\u6991','\u6992', + '\u6993','\u6994','\u6995','\u6996','\u6997','\u6998','\u6999', + '\u699a','\u699b','\u699c','\u699d','\u699e','\u699f','\u69a0', + '\u69a1','\u69a2','\u69a3','\u69a4','\u69a5','\u69a6','\u69a7', + '\u69a8','\u69a9','\u69aa','\u69ab','\u69ac','\u69ad','\u69ae', + '\u69af','\u69b0','\u69b1','\u69b2','\u69b3','\u69b4','\u69b5', + '\u69b6','\u69b7','\u69b8','\u69b9','\u69ba','\u69bb','\u69bc', + '\u69bd','\u69be','\u69bf','\u69c0','\u69c1','\u69c2','\u69c3', + '\u69c4','\u69c5','\u69c6','\u69c7','\u69c8','\u69c9','\u69ca', + '\u69cb','\u69cc','\u69cd','\u69ce','\u69cf','\u69d0','\u69d1', + '\u69d2','\u69d3','\u69d4','\u69d5','\u69d6','\u69d7','\u69d8', + '\u69d9','\u69da','\u69db','\u69dc','\u69dd','\u69de','\u69df', + '\u69e0','\u69e1','\u69e2','\u69e3','\u69e4','\u69e5','\u69e6', + '\u69e7','\u69e8','\u69e9','\u69ea','\u69eb','\u69ec','\u69ed', + '\u69ee','\u69ef','\u69f0','\u69f1','\u69f2','\u69f3','\u69f4', + '\u69f5','\u69f6','\u69f7','\u69f8','\u69f9','\u69fa','\u69fb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+26880; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void f6a00() { + char[] cs = new char[] { + '\u6a00','\u6a01','\u6a02','\u6a03','\u6a04','\u6a05','\u6a06', + '\u6a07','\u6a08','\u6a09','\u6a0a','\u6a0b','\u6a0c','\u6a0d', + '\u6a0e','\u6a0f','\u6a10','\u6a11','\u6a12','\u6a13','\u6a14', + '\u6a15','\u6a16','\u6a17','\u6a18','\u6a19','\u6a1a','\u6a1b', + '\u6a1c','\u6a1d','\u6a1e','\u6a1f','\u6a20','\u6a21','\u6a22', + '\u6a23','\u6a24','\u6a25','\u6a26','\u6a27','\u6a28','\u6a29', + '\u6a2a','\u6a2b','\u6a2c','\u6a2d','\u6a2e','\u6a2f','\u6a30', + '\u6a31','\u6a32','\u6a33','\u6a34','\u6a35','\u6a36','\u6a37', + '\u6a38','\u6a39','\u6a3a','\u6a3b','\u6a3c','\u6a3d','\u6a3e', + '\u6a3f','\u6a40','\u6a41','\u6a42','\u6a43','\u6a44','\u6a45', + '\u6a46','\u6a47','\u6a48','\u6a49','\u6a4a','\u6a4b','\u6a4c', + '\u6a4d','\u6a4e','\u6a4f','\u6a50','\u6a51','\u6a52','\u6a53', + '\u6a54','\u6a55','\u6a56','\u6a57','\u6a58','\u6a59','\u6a5a', + '\u6a5b','\u6a5c','\u6a5d','\u6a5e','\u6a5f','\u6a60','\u6a61', + '\u6a62','\u6a63','\u6a64','\u6a65','\u6a66','\u6a67','\u6a68', + '\u6a69','\u6a6a','\u6a6b','\u6a6c','\u6a6d','\u6a6e','\u6a6f', + '\u6a70','\u6a71','\u6a72','\u6a73','\u6a74','\u6a75','\u6a76', + '\u6a77','\u6a78','\u6a79','\u6a7a','\u6a7b','\u6a7c','\u6a7d', + '\u6a7e','\u6a7f','\u6a80','\u6a81','\u6a82','\u6a83','\u6a84', + '\u6a85','\u6a86','\u6a87','\u6a88','\u6a89','\u6a8a','\u6a8b', + '\u6a8c','\u6a8d','\u6a8e','\u6a8f','\u6a90','\u6a91','\u6a92', + '\u6a93','\u6a94','\u6a95','\u6a96','\u6a97','\u6a98','\u6a99', + '\u6a9a','\u6a9b','\u6a9c','\u6a9d','\u6a9e','\u6a9f','\u6aa0', + '\u6aa1','\u6aa2','\u6aa3','\u6aa4','\u6aa5','\u6aa6','\u6aa7', + '\u6aa8','\u6aa9','\u6aaa','\u6aab','\u6aac','\u6aad','\u6aae', + '\u6aaf','\u6ab0','\u6ab1','\u6ab2','\u6ab3','\u6ab4','\u6ab5', + '\u6ab6','\u6ab7','\u6ab8','\u6ab9','\u6aba','\u6abb','\u6abc', + '\u6abd','\u6abe','\u6abf','\u6ac0','\u6ac1','\u6ac2','\u6ac3', + '\u6ac4','\u6ac5','\u6ac6','\u6ac7','\u6ac8','\u6ac9','\u6aca', + '\u6acb','\u6acc','\u6acd','\u6ace','\u6acf','\u6ad0','\u6ad1', + '\u6ad2','\u6ad3','\u6ad4','\u6ad5','\u6ad6','\u6ad7','\u6ad8', + '\u6ad9','\u6ada','\u6adb','\u6adc','\u6add','\u6ade','\u6adf', + '\u6ae0','\u6ae1','\u6ae2','\u6ae3','\u6ae4','\u6ae5','\u6ae6', + '\u6ae7','\u6ae8','\u6ae9','\u6aea','\u6aeb','\u6aec','\u6aed', + '\u6aee','\u6aef','\u6af0','\u6af1','\u6af2','\u6af3','\u6af4', + '\u6af5','\u6af6','\u6af7','\u6af8','\u6af9','\u6afa','\u6afb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+27136; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void f6b00() { + char[] cs = new char[] { + '\u6b00','\u6b01','\u6b02','\u6b03','\u6b04','\u6b05','\u6b06', + '\u6b07','\u6b08','\u6b09','\u6b0a','\u6b0b','\u6b0c','\u6b0d', + '\u6b0e','\u6b0f','\u6b10','\u6b11','\u6b12','\u6b13','\u6b14', + '\u6b15','\u6b16','\u6b17','\u6b18','\u6b19','\u6b1a','\u6b1b', + '\u6b1c','\u6b1d','\u6b1e','\u6b1f','\u6b20','\u6b21','\u6b22', + '\u6b23','\u6b24','\u6b25','\u6b26','\u6b27','\u6b28','\u6b29', + '\u6b2a','\u6b2b','\u6b2c','\u6b2d','\u6b2e','\u6b2f','\u6b30', + '\u6b31','\u6b32','\u6b33','\u6b34','\u6b35','\u6b36','\u6b37', + '\u6b38','\u6b39','\u6b3a','\u6b3b','\u6b3c','\u6b3d','\u6b3e', + '\u6b3f','\u6b40','\u6b41','\u6b42','\u6b43','\u6b44','\u6b45', + '\u6b46','\u6b47','\u6b48','\u6b49','\u6b4a','\u6b4b','\u6b4c', + '\u6b4d','\u6b4e','\u6b4f','\u6b50','\u6b51','\u6b52','\u6b53', + '\u6b54','\u6b55','\u6b56','\u6b57','\u6b58','\u6b59','\u6b5a', + '\u6b5b','\u6b5c','\u6b5d','\u6b5e','\u6b5f','\u6b60','\u6b61', + '\u6b62','\u6b63','\u6b64','\u6b65','\u6b66','\u6b67','\u6b68', + '\u6b69','\u6b6a','\u6b6b','\u6b6c','\u6b6d','\u6b6e','\u6b6f', + '\u6b70','\u6b71','\u6b72','\u6b73','\u6b74','\u6b75','\u6b76', + '\u6b77','\u6b78','\u6b79','\u6b7a','\u6b7b','\u6b7c','\u6b7d', + '\u6b7e','\u6b7f','\u6b80','\u6b81','\u6b82','\u6b83','\u6b84', + '\u6b85','\u6b86','\u6b87','\u6b88','\u6b89','\u6b8a','\u6b8b', + '\u6b8c','\u6b8d','\u6b8e','\u6b8f','\u6b90','\u6b91','\u6b92', + '\u6b93','\u6b94','\u6b95','\u6b96','\u6b97','\u6b98','\u6b99', + '\u6b9a','\u6b9b','\u6b9c','\u6b9d','\u6b9e','\u6b9f','\u6ba0', + '\u6ba1','\u6ba2','\u6ba3','\u6ba4','\u6ba5','\u6ba6','\u6ba7', + '\u6ba8','\u6ba9','\u6baa','\u6bab','\u6bac','\u6bad','\u6bae', + '\u6baf','\u6bb0','\u6bb1','\u6bb2','\u6bb3','\u6bb4','\u6bb5', + '\u6bb6','\u6bb7','\u6bb8','\u6bb9','\u6bba','\u6bbb','\u6bbc', + '\u6bbd','\u6bbe','\u6bbf','\u6bc0','\u6bc1','\u6bc2','\u6bc3', + '\u6bc4','\u6bc5','\u6bc6','\u6bc7','\u6bc8','\u6bc9','\u6bca', + '\u6bcb','\u6bcc','\u6bcd','\u6bce','\u6bcf','\u6bd0','\u6bd1', + '\u6bd2','\u6bd3','\u6bd4','\u6bd5','\u6bd6','\u6bd7','\u6bd8', + '\u6bd9','\u6bda','\u6bdb','\u6bdc','\u6bdd','\u6bde','\u6bdf', + '\u6be0','\u6be1','\u6be2','\u6be3','\u6be4','\u6be5','\u6be6', + '\u6be7','\u6be8','\u6be9','\u6bea','\u6beb','\u6bec','\u6bed', + '\u6bee','\u6bef','\u6bf0','\u6bf1','\u6bf2','\u6bf3','\u6bf4', + '\u6bf5','\u6bf6','\u6bf7','\u6bf8','\u6bf9','\u6bfa','\u6bfb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+27392; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void f6c00() { + char[] cs = new char[] { + '\u6c00','\u6c01','\u6c02','\u6c03','\u6c04','\u6c05','\u6c06', + '\u6c07','\u6c08','\u6c09','\u6c0a','\u6c0b','\u6c0c','\u6c0d', + '\u6c0e','\u6c0f','\u6c10','\u6c11','\u6c12','\u6c13','\u6c14', + '\u6c15','\u6c16','\u6c17','\u6c18','\u6c19','\u6c1a','\u6c1b', + '\u6c1c','\u6c1d','\u6c1e','\u6c1f','\u6c20','\u6c21','\u6c22', + '\u6c23','\u6c24','\u6c25','\u6c26','\u6c27','\u6c28','\u6c29', + '\u6c2a','\u6c2b','\u6c2c','\u6c2d','\u6c2e','\u6c2f','\u6c30', + '\u6c31','\u6c32','\u6c33','\u6c34','\u6c35','\u6c36','\u6c37', + '\u6c38','\u6c39','\u6c3a','\u6c3b','\u6c3c','\u6c3d','\u6c3e', + '\u6c3f','\u6c40','\u6c41','\u6c42','\u6c43','\u6c44','\u6c45', + '\u6c46','\u6c47','\u6c48','\u6c49','\u6c4a','\u6c4b','\u6c4c', + '\u6c4d','\u6c4e','\u6c4f','\u6c50','\u6c51','\u6c52','\u6c53', + '\u6c54','\u6c55','\u6c56','\u6c57','\u6c58','\u6c59','\u6c5a', + '\u6c5b','\u6c5c','\u6c5d','\u6c5e','\u6c5f','\u6c60','\u6c61', + '\u6c62','\u6c63','\u6c64','\u6c65','\u6c66','\u6c67','\u6c68', + '\u6c69','\u6c6a','\u6c6b','\u6c6c','\u6c6d','\u6c6e','\u6c6f', + '\u6c70','\u6c71','\u6c72','\u6c73','\u6c74','\u6c75','\u6c76', + '\u6c77','\u6c78','\u6c79','\u6c7a','\u6c7b','\u6c7c','\u6c7d', + '\u6c7e','\u6c7f','\u6c80','\u6c81','\u6c82','\u6c83','\u6c84', + '\u6c85','\u6c86','\u6c87','\u6c88','\u6c89','\u6c8a','\u6c8b', + '\u6c8c','\u6c8d','\u6c8e','\u6c8f','\u6c90','\u6c91','\u6c92', + '\u6c93','\u6c94','\u6c95','\u6c96','\u6c97','\u6c98','\u6c99', + '\u6c9a','\u6c9b','\u6c9c','\u6c9d','\u6c9e','\u6c9f','\u6ca0', + '\u6ca1','\u6ca2','\u6ca3','\u6ca4','\u6ca5','\u6ca6','\u6ca7', + '\u6ca8','\u6ca9','\u6caa','\u6cab','\u6cac','\u6cad','\u6cae', + '\u6caf','\u6cb0','\u6cb1','\u6cb2','\u6cb3','\u6cb4','\u6cb5', + '\u6cb6','\u6cb7','\u6cb8','\u6cb9','\u6cba','\u6cbb','\u6cbc', + '\u6cbd','\u6cbe','\u6cbf','\u6cc0','\u6cc1','\u6cc2','\u6cc3', + '\u6cc4','\u6cc5','\u6cc6','\u6cc7','\u6cc8','\u6cc9','\u6cca', + '\u6ccb','\u6ccc','\u6ccd','\u6cce','\u6ccf','\u6cd0','\u6cd1', + '\u6cd2','\u6cd3','\u6cd4','\u6cd5','\u6cd6','\u6cd7','\u6cd8', + '\u6cd9','\u6cda','\u6cdb','\u6cdc','\u6cdd','\u6cde','\u6cdf', + '\u6ce0','\u6ce1','\u6ce2','\u6ce3','\u6ce4','\u6ce5','\u6ce6', + '\u6ce7','\u6ce8','\u6ce9','\u6cea','\u6ceb','\u6cec','\u6ced', + '\u6cee','\u6cef','\u6cf0','\u6cf1','\u6cf2','\u6cf3','\u6cf4', + '\u6cf5','\u6cf6','\u6cf7','\u6cf8','\u6cf9','\u6cfa','\u6cfb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+27648; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void f6d00() { + char[] cs = new char[] { + '\u6d00','\u6d01','\u6d02','\u6d03','\u6d04','\u6d05','\u6d06', + '\u6d07','\u6d08','\u6d09','\u6d0a','\u6d0b','\u6d0c','\u6d0d', + '\u6d0e','\u6d0f','\u6d10','\u6d11','\u6d12','\u6d13','\u6d14', + '\u6d15','\u6d16','\u6d17','\u6d18','\u6d19','\u6d1a','\u6d1b', + '\u6d1c','\u6d1d','\u6d1e','\u6d1f','\u6d20','\u6d21','\u6d22', + '\u6d23','\u6d24','\u6d25','\u6d26','\u6d27','\u6d28','\u6d29', + '\u6d2a','\u6d2b','\u6d2c','\u6d2d','\u6d2e','\u6d2f','\u6d30', + '\u6d31','\u6d32','\u6d33','\u6d34','\u6d35','\u6d36','\u6d37', + '\u6d38','\u6d39','\u6d3a','\u6d3b','\u6d3c','\u6d3d','\u6d3e', + '\u6d3f','\u6d40','\u6d41','\u6d42','\u6d43','\u6d44','\u6d45', + '\u6d46','\u6d47','\u6d48','\u6d49','\u6d4a','\u6d4b','\u6d4c', + '\u6d4d','\u6d4e','\u6d4f','\u6d50','\u6d51','\u6d52','\u6d53', + '\u6d54','\u6d55','\u6d56','\u6d57','\u6d58','\u6d59','\u6d5a', + '\u6d5b','\u6d5c','\u6d5d','\u6d5e','\u6d5f','\u6d60','\u6d61', + '\u6d62','\u6d63','\u6d64','\u6d65','\u6d66','\u6d67','\u6d68', + '\u6d69','\u6d6a','\u6d6b','\u6d6c','\u6d6d','\u6d6e','\u6d6f', + '\u6d70','\u6d71','\u6d72','\u6d73','\u6d74','\u6d75','\u6d76', + '\u6d77','\u6d78','\u6d79','\u6d7a','\u6d7b','\u6d7c','\u6d7d', + '\u6d7e','\u6d7f','\u6d80','\u6d81','\u6d82','\u6d83','\u6d84', + '\u6d85','\u6d86','\u6d87','\u6d88','\u6d89','\u6d8a','\u6d8b', + '\u6d8c','\u6d8d','\u6d8e','\u6d8f','\u6d90','\u6d91','\u6d92', + '\u6d93','\u6d94','\u6d95','\u6d96','\u6d97','\u6d98','\u6d99', + '\u6d9a','\u6d9b','\u6d9c','\u6d9d','\u6d9e','\u6d9f','\u6da0', + '\u6da1','\u6da2','\u6da3','\u6da4','\u6da5','\u6da6','\u6da7', + '\u6da8','\u6da9','\u6daa','\u6dab','\u6dac','\u6dad','\u6dae', + '\u6daf','\u6db0','\u6db1','\u6db2','\u6db3','\u6db4','\u6db5', + '\u6db6','\u6db7','\u6db8','\u6db9','\u6dba','\u6dbb','\u6dbc', + '\u6dbd','\u6dbe','\u6dbf','\u6dc0','\u6dc1','\u6dc2','\u6dc3', + '\u6dc4','\u6dc5','\u6dc6','\u6dc7','\u6dc8','\u6dc9','\u6dca', + '\u6dcb','\u6dcc','\u6dcd','\u6dce','\u6dcf','\u6dd0','\u6dd1', + '\u6dd2','\u6dd3','\u6dd4','\u6dd5','\u6dd6','\u6dd7','\u6dd8', + '\u6dd9','\u6dda','\u6ddb','\u6ddc','\u6ddd','\u6dde','\u6ddf', + '\u6de0','\u6de1','\u6de2','\u6de3','\u6de4','\u6de5','\u6de6', + '\u6de7','\u6de8','\u6de9','\u6dea','\u6deb','\u6dec','\u6ded', + '\u6dee','\u6def','\u6df0','\u6df1','\u6df2','\u6df3','\u6df4', + '\u6df5','\u6df6','\u6df7','\u6df8','\u6df9','\u6dfa','\u6dfb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+27904; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void f6e00() { + char[] cs = new char[] { + '\u6e00','\u6e01','\u6e02','\u6e03','\u6e04','\u6e05','\u6e06', + '\u6e07','\u6e08','\u6e09','\u6e0a','\u6e0b','\u6e0c','\u6e0d', + '\u6e0e','\u6e0f','\u6e10','\u6e11','\u6e12','\u6e13','\u6e14', + '\u6e15','\u6e16','\u6e17','\u6e18','\u6e19','\u6e1a','\u6e1b', + '\u6e1c','\u6e1d','\u6e1e','\u6e1f','\u6e20','\u6e21','\u6e22', + '\u6e23','\u6e24','\u6e25','\u6e26','\u6e27','\u6e28','\u6e29', + '\u6e2a','\u6e2b','\u6e2c','\u6e2d','\u6e2e','\u6e2f','\u6e30', + '\u6e31','\u6e32','\u6e33','\u6e34','\u6e35','\u6e36','\u6e37', + '\u6e38','\u6e39','\u6e3a','\u6e3b','\u6e3c','\u6e3d','\u6e3e', + '\u6e3f','\u6e40','\u6e41','\u6e42','\u6e43','\u6e44','\u6e45', + '\u6e46','\u6e47','\u6e48','\u6e49','\u6e4a','\u6e4b','\u6e4c', + '\u6e4d','\u6e4e','\u6e4f','\u6e50','\u6e51','\u6e52','\u6e53', + '\u6e54','\u6e55','\u6e56','\u6e57','\u6e58','\u6e59','\u6e5a', + '\u6e5b','\u6e5c','\u6e5d','\u6e5e','\u6e5f','\u6e60','\u6e61', + '\u6e62','\u6e63','\u6e64','\u6e65','\u6e66','\u6e67','\u6e68', + '\u6e69','\u6e6a','\u6e6b','\u6e6c','\u6e6d','\u6e6e','\u6e6f', + '\u6e70','\u6e71','\u6e72','\u6e73','\u6e74','\u6e75','\u6e76', + '\u6e77','\u6e78','\u6e79','\u6e7a','\u6e7b','\u6e7c','\u6e7d', + '\u6e7e','\u6e7f','\u6e80','\u6e81','\u6e82','\u6e83','\u6e84', + '\u6e85','\u6e86','\u6e87','\u6e88','\u6e89','\u6e8a','\u6e8b', + '\u6e8c','\u6e8d','\u6e8e','\u6e8f','\u6e90','\u6e91','\u6e92', + '\u6e93','\u6e94','\u6e95','\u6e96','\u6e97','\u6e98','\u6e99', + '\u6e9a','\u6e9b','\u6e9c','\u6e9d','\u6e9e','\u6e9f','\u6ea0', + '\u6ea1','\u6ea2','\u6ea3','\u6ea4','\u6ea5','\u6ea6','\u6ea7', + '\u6ea8','\u6ea9','\u6eaa','\u6eab','\u6eac','\u6ead','\u6eae', + '\u6eaf','\u6eb0','\u6eb1','\u6eb2','\u6eb3','\u6eb4','\u6eb5', + '\u6eb6','\u6eb7','\u6eb8','\u6eb9','\u6eba','\u6ebb','\u6ebc', + '\u6ebd','\u6ebe','\u6ebf','\u6ec0','\u6ec1','\u6ec2','\u6ec3', + '\u6ec4','\u6ec5','\u6ec6','\u6ec7','\u6ec8','\u6ec9','\u6eca', + '\u6ecb','\u6ecc','\u6ecd','\u6ece','\u6ecf','\u6ed0','\u6ed1', + '\u6ed2','\u6ed3','\u6ed4','\u6ed5','\u6ed6','\u6ed7','\u6ed8', + '\u6ed9','\u6eda','\u6edb','\u6edc','\u6edd','\u6ede','\u6edf', + '\u6ee0','\u6ee1','\u6ee2','\u6ee3','\u6ee4','\u6ee5','\u6ee6', + '\u6ee7','\u6ee8','\u6ee9','\u6eea','\u6eeb','\u6eec','\u6eed', + '\u6eee','\u6eef','\u6ef0','\u6ef1','\u6ef2','\u6ef3','\u6ef4', + '\u6ef5','\u6ef6','\u6ef7','\u6ef8','\u6ef9','\u6efa','\u6efb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+28160; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void f6f00() { + char[] cs = new char[] { + '\u6f00','\u6f01','\u6f02','\u6f03','\u6f04','\u6f05','\u6f06', + '\u6f07','\u6f08','\u6f09','\u6f0a','\u6f0b','\u6f0c','\u6f0d', + '\u6f0e','\u6f0f','\u6f10','\u6f11','\u6f12','\u6f13','\u6f14', + '\u6f15','\u6f16','\u6f17','\u6f18','\u6f19','\u6f1a','\u6f1b', + '\u6f1c','\u6f1d','\u6f1e','\u6f1f','\u6f20','\u6f21','\u6f22', + '\u6f23','\u6f24','\u6f25','\u6f26','\u6f27','\u6f28','\u6f29', + '\u6f2a','\u6f2b','\u6f2c','\u6f2d','\u6f2e','\u6f2f','\u6f30', + '\u6f31','\u6f32','\u6f33','\u6f34','\u6f35','\u6f36','\u6f37', + '\u6f38','\u6f39','\u6f3a','\u6f3b','\u6f3c','\u6f3d','\u6f3e', + '\u6f3f','\u6f40','\u6f41','\u6f42','\u6f43','\u6f44','\u6f45', + '\u6f46','\u6f47','\u6f48','\u6f49','\u6f4a','\u6f4b','\u6f4c', + '\u6f4d','\u6f4e','\u6f4f','\u6f50','\u6f51','\u6f52','\u6f53', + '\u6f54','\u6f55','\u6f56','\u6f57','\u6f58','\u6f59','\u6f5a', + '\u6f5b','\u6f5c','\u6f5d','\u6f5e','\u6f5f','\u6f60','\u6f61', + '\u6f62','\u6f63','\u6f64','\u6f65','\u6f66','\u6f67','\u6f68', + '\u6f69','\u6f6a','\u6f6b','\u6f6c','\u6f6d','\u6f6e','\u6f6f', + '\u6f70','\u6f71','\u6f72','\u6f73','\u6f74','\u6f75','\u6f76', + '\u6f77','\u6f78','\u6f79','\u6f7a','\u6f7b','\u6f7c','\u6f7d', + '\u6f7e','\u6f7f','\u6f80','\u6f81','\u6f82','\u6f83','\u6f84', + '\u6f85','\u6f86','\u6f87','\u6f88','\u6f89','\u6f8a','\u6f8b', + '\u6f8c','\u6f8d','\u6f8e','\u6f8f','\u6f90','\u6f91','\u6f92', + '\u6f93','\u6f94','\u6f95','\u6f96','\u6f97','\u6f98','\u6f99', + '\u6f9a','\u6f9b','\u6f9c','\u6f9d','\u6f9e','\u6f9f','\u6fa0', + '\u6fa1','\u6fa2','\u6fa3','\u6fa4','\u6fa5','\u6fa6','\u6fa7', + '\u6fa8','\u6fa9','\u6faa','\u6fab','\u6fac','\u6fad','\u6fae', + '\u6faf','\u6fb0','\u6fb1','\u6fb2','\u6fb3','\u6fb4','\u6fb5', + '\u6fb6','\u6fb7','\u6fb8','\u6fb9','\u6fba','\u6fbb','\u6fbc', + '\u6fbd','\u6fbe','\u6fbf','\u6fc0','\u6fc1','\u6fc2','\u6fc3', + '\u6fc4','\u6fc5','\u6fc6','\u6fc7','\u6fc8','\u6fc9','\u6fca', + '\u6fcb','\u6fcc','\u6fcd','\u6fce','\u6fcf','\u6fd0','\u6fd1', + '\u6fd2','\u6fd3','\u6fd4','\u6fd5','\u6fd6','\u6fd7','\u6fd8', + '\u6fd9','\u6fda','\u6fdb','\u6fdc','\u6fdd','\u6fde','\u6fdf', + '\u6fe0','\u6fe1','\u6fe2','\u6fe3','\u6fe4','\u6fe5','\u6fe6', + '\u6fe7','\u6fe8','\u6fe9','\u6fea','\u6feb','\u6fec','\u6fed', + '\u6fee','\u6fef','\u6ff0','\u6ff1','\u6ff2','\u6ff3','\u6ff4', + '\u6ff5','\u6ff6','\u6ff7','\u6ff8','\u6ff9','\u6ffa','\u6ffb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+28416; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void f7000() { + char[] cs = new char[] { + '\u7000','\u7001','\u7002','\u7003','\u7004','\u7005','\u7006', + '\u7007','\u7008','\u7009','\u700a','\u700b','\u700c','\u700d', + '\u700e','\u700f','\u7010','\u7011','\u7012','\u7013','\u7014', + '\u7015','\u7016','\u7017','\u7018','\u7019','\u701a','\u701b', + '\u701c','\u701d','\u701e','\u701f','\u7020','\u7021','\u7022', + '\u7023','\u7024','\u7025','\u7026','\u7027','\u7028','\u7029', + '\u702a','\u702b','\u702c','\u702d','\u702e','\u702f','\u7030', + '\u7031','\u7032','\u7033','\u7034','\u7035','\u7036','\u7037', + '\u7038','\u7039','\u703a','\u703b','\u703c','\u703d','\u703e', + '\u703f','\u7040','\u7041','\u7042','\u7043','\u7044','\u7045', + '\u7046','\u7047','\u7048','\u7049','\u704a','\u704b','\u704c', + '\u704d','\u704e','\u704f','\u7050','\u7051','\u7052','\u7053', + '\u7054','\u7055','\u7056','\u7057','\u7058','\u7059','\u705a', + '\u705b','\u705c','\u705d','\u705e','\u705f','\u7060','\u7061', + '\u7062','\u7063','\u7064','\u7065','\u7066','\u7067','\u7068', + '\u7069','\u706a','\u706b','\u706c','\u706d','\u706e','\u706f', + '\u7070','\u7071','\u7072','\u7073','\u7074','\u7075','\u7076', + '\u7077','\u7078','\u7079','\u707a','\u707b','\u707c','\u707d', + '\u707e','\u707f','\u7080','\u7081','\u7082','\u7083','\u7084', + '\u7085','\u7086','\u7087','\u7088','\u7089','\u708a','\u708b', + '\u708c','\u708d','\u708e','\u708f','\u7090','\u7091','\u7092', + '\u7093','\u7094','\u7095','\u7096','\u7097','\u7098','\u7099', + '\u709a','\u709b','\u709c','\u709d','\u709e','\u709f','\u70a0', + '\u70a1','\u70a2','\u70a3','\u70a4','\u70a5','\u70a6','\u70a7', + '\u70a8','\u70a9','\u70aa','\u70ab','\u70ac','\u70ad','\u70ae', + '\u70af','\u70b0','\u70b1','\u70b2','\u70b3','\u70b4','\u70b5', + '\u70b6','\u70b7','\u70b8','\u70b9','\u70ba','\u70bb','\u70bc', + '\u70bd','\u70be','\u70bf','\u70c0','\u70c1','\u70c2','\u70c3', + '\u70c4','\u70c5','\u70c6','\u70c7','\u70c8','\u70c9','\u70ca', + '\u70cb','\u70cc','\u70cd','\u70ce','\u70cf','\u70d0','\u70d1', + '\u70d2','\u70d3','\u70d4','\u70d5','\u70d6','\u70d7','\u70d8', + '\u70d9','\u70da','\u70db','\u70dc','\u70dd','\u70de','\u70df', + '\u70e0','\u70e1','\u70e2','\u70e3','\u70e4','\u70e5','\u70e6', + '\u70e7','\u70e8','\u70e9','\u70ea','\u70eb','\u70ec','\u70ed', + '\u70ee','\u70ef','\u70f0','\u70f1','\u70f2','\u70f3','\u70f4', + '\u70f5','\u70f6','\u70f7','\u70f8','\u70f9','\u70fa','\u70fb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+28672; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void f7100() { + char[] cs = new char[] { + '\u7100','\u7101','\u7102','\u7103','\u7104','\u7105','\u7106', + '\u7107','\u7108','\u7109','\u710a','\u710b','\u710c','\u710d', + '\u710e','\u710f','\u7110','\u7111','\u7112','\u7113','\u7114', + '\u7115','\u7116','\u7117','\u7118','\u7119','\u711a','\u711b', + '\u711c','\u711d','\u711e','\u711f','\u7120','\u7121','\u7122', + '\u7123','\u7124','\u7125','\u7126','\u7127','\u7128','\u7129', + '\u712a','\u712b','\u712c','\u712d','\u712e','\u712f','\u7130', + '\u7131','\u7132','\u7133','\u7134','\u7135','\u7136','\u7137', + '\u7138','\u7139','\u713a','\u713b','\u713c','\u713d','\u713e', + '\u713f','\u7140','\u7141','\u7142','\u7143','\u7144','\u7145', + '\u7146','\u7147','\u7148','\u7149','\u714a','\u714b','\u714c', + '\u714d','\u714e','\u714f','\u7150','\u7151','\u7152','\u7153', + '\u7154','\u7155','\u7156','\u7157','\u7158','\u7159','\u715a', + '\u715b','\u715c','\u715d','\u715e','\u715f','\u7160','\u7161', + '\u7162','\u7163','\u7164','\u7165','\u7166','\u7167','\u7168', + '\u7169','\u716a','\u716b','\u716c','\u716d','\u716e','\u716f', + '\u7170','\u7171','\u7172','\u7173','\u7174','\u7175','\u7176', + '\u7177','\u7178','\u7179','\u717a','\u717b','\u717c','\u717d', + '\u717e','\u717f','\u7180','\u7181','\u7182','\u7183','\u7184', + '\u7185','\u7186','\u7187','\u7188','\u7189','\u718a','\u718b', + '\u718c','\u718d','\u718e','\u718f','\u7190','\u7191','\u7192', + '\u7193','\u7194','\u7195','\u7196','\u7197','\u7198','\u7199', + '\u719a','\u719b','\u719c','\u719d','\u719e','\u719f','\u71a0', + '\u71a1','\u71a2','\u71a3','\u71a4','\u71a5','\u71a6','\u71a7', + '\u71a8','\u71a9','\u71aa','\u71ab','\u71ac','\u71ad','\u71ae', + '\u71af','\u71b0','\u71b1','\u71b2','\u71b3','\u71b4','\u71b5', + '\u71b6','\u71b7','\u71b8','\u71b9','\u71ba','\u71bb','\u71bc', + '\u71bd','\u71be','\u71bf','\u71c0','\u71c1','\u71c2','\u71c3', + '\u71c4','\u71c5','\u71c6','\u71c7','\u71c8','\u71c9','\u71ca', + '\u71cb','\u71cc','\u71cd','\u71ce','\u71cf','\u71d0','\u71d1', + '\u71d2','\u71d3','\u71d4','\u71d5','\u71d6','\u71d7','\u71d8', + '\u71d9','\u71da','\u71db','\u71dc','\u71dd','\u71de','\u71df', + '\u71e0','\u71e1','\u71e2','\u71e3','\u71e4','\u71e5','\u71e6', + '\u71e7','\u71e8','\u71e9','\u71ea','\u71eb','\u71ec','\u71ed', + '\u71ee','\u71ef','\u71f0','\u71f1','\u71f2','\u71f3','\u71f4', + '\u71f5','\u71f6','\u71f7','\u71f8','\u71f9','\u71fa','\u71fb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+28928; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void f7200() { + char[] cs = new char[] { + '\u7200','\u7201','\u7202','\u7203','\u7204','\u7205','\u7206', + '\u7207','\u7208','\u7209','\u720a','\u720b','\u720c','\u720d', + '\u720e','\u720f','\u7210','\u7211','\u7212','\u7213','\u7214', + '\u7215','\u7216','\u7217','\u7218','\u7219','\u721a','\u721b', + '\u721c','\u721d','\u721e','\u721f','\u7220','\u7221','\u7222', + '\u7223','\u7224','\u7225','\u7226','\u7227','\u7228','\u7229', + '\u722a','\u722b','\u722c','\u722d','\u722e','\u722f','\u7230', + '\u7231','\u7232','\u7233','\u7234','\u7235','\u7236','\u7237', + '\u7238','\u7239','\u723a','\u723b','\u723c','\u723d','\u723e', + '\u723f','\u7240','\u7241','\u7242','\u7243','\u7244','\u7245', + '\u7246','\u7247','\u7248','\u7249','\u724a','\u724b','\u724c', + '\u724d','\u724e','\u724f','\u7250','\u7251','\u7252','\u7253', + '\u7254','\u7255','\u7256','\u7257','\u7258','\u7259','\u725a', + '\u725b','\u725c','\u725d','\u725e','\u725f','\u7260','\u7261', + '\u7262','\u7263','\u7264','\u7265','\u7266','\u7267','\u7268', + '\u7269','\u726a','\u726b','\u726c','\u726d','\u726e','\u726f', + '\u7270','\u7271','\u7272','\u7273','\u7274','\u7275','\u7276', + '\u7277','\u7278','\u7279','\u727a','\u727b','\u727c','\u727d', + '\u727e','\u727f','\u7280','\u7281','\u7282','\u7283','\u7284', + '\u7285','\u7286','\u7287','\u7288','\u7289','\u728a','\u728b', + '\u728c','\u728d','\u728e','\u728f','\u7290','\u7291','\u7292', + '\u7293','\u7294','\u7295','\u7296','\u7297','\u7298','\u7299', + '\u729a','\u729b','\u729c','\u729d','\u729e','\u729f','\u72a0', + '\u72a1','\u72a2','\u72a3','\u72a4','\u72a5','\u72a6','\u72a7', + '\u72a8','\u72a9','\u72aa','\u72ab','\u72ac','\u72ad','\u72ae', + '\u72af','\u72b0','\u72b1','\u72b2','\u72b3','\u72b4','\u72b5', + '\u72b6','\u72b7','\u72b8','\u72b9','\u72ba','\u72bb','\u72bc', + '\u72bd','\u72be','\u72bf','\u72c0','\u72c1','\u72c2','\u72c3', + '\u72c4','\u72c5','\u72c6','\u72c7','\u72c8','\u72c9','\u72ca', + '\u72cb','\u72cc','\u72cd','\u72ce','\u72cf','\u72d0','\u72d1', + '\u72d2','\u72d3','\u72d4','\u72d5','\u72d6','\u72d7','\u72d8', + '\u72d9','\u72da','\u72db','\u72dc','\u72dd','\u72de','\u72df', + '\u72e0','\u72e1','\u72e2','\u72e3','\u72e4','\u72e5','\u72e6', + '\u72e7','\u72e8','\u72e9','\u72ea','\u72eb','\u72ec','\u72ed', + '\u72ee','\u72ef','\u72f0','\u72f1','\u72f2','\u72f3','\u72f4', + '\u72f5','\u72f6','\u72f7','\u72f8','\u72f9','\u72fa','\u72fb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+29184; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void f7300() { + char[] cs = new char[] { + '\u7300','\u7301','\u7302','\u7303','\u7304','\u7305','\u7306', + '\u7307','\u7308','\u7309','\u730a','\u730b','\u730c','\u730d', + '\u730e','\u730f','\u7310','\u7311','\u7312','\u7313','\u7314', + '\u7315','\u7316','\u7317','\u7318','\u7319','\u731a','\u731b', + '\u731c','\u731d','\u731e','\u731f','\u7320','\u7321','\u7322', + '\u7323','\u7324','\u7325','\u7326','\u7327','\u7328','\u7329', + '\u732a','\u732b','\u732c','\u732d','\u732e','\u732f','\u7330', + '\u7331','\u7332','\u7333','\u7334','\u7335','\u7336','\u7337', + '\u7338','\u7339','\u733a','\u733b','\u733c','\u733d','\u733e', + '\u733f','\u7340','\u7341','\u7342','\u7343','\u7344','\u7345', + '\u7346','\u7347','\u7348','\u7349','\u734a','\u734b','\u734c', + '\u734d','\u734e','\u734f','\u7350','\u7351','\u7352','\u7353', + '\u7354','\u7355','\u7356','\u7357','\u7358','\u7359','\u735a', + '\u735b','\u735c','\u735d','\u735e','\u735f','\u7360','\u7361', + '\u7362','\u7363','\u7364','\u7365','\u7366','\u7367','\u7368', + '\u7369','\u736a','\u736b','\u736c','\u736d','\u736e','\u736f', + '\u7370','\u7371','\u7372','\u7373','\u7374','\u7375','\u7376', + '\u7377','\u7378','\u7379','\u737a','\u737b','\u737c','\u737d', + '\u737e','\u737f','\u7380','\u7381','\u7382','\u7383','\u7384', + '\u7385','\u7386','\u7387','\u7388','\u7389','\u738a','\u738b', + '\u738c','\u738d','\u738e','\u738f','\u7390','\u7391','\u7392', + '\u7393','\u7394','\u7395','\u7396','\u7397','\u7398','\u7399', + '\u739a','\u739b','\u739c','\u739d','\u739e','\u739f','\u73a0', + '\u73a1','\u73a2','\u73a3','\u73a4','\u73a5','\u73a6','\u73a7', + '\u73a8','\u73a9','\u73aa','\u73ab','\u73ac','\u73ad','\u73ae', + '\u73af','\u73b0','\u73b1','\u73b2','\u73b3','\u73b4','\u73b5', + '\u73b6','\u73b7','\u73b8','\u73b9','\u73ba','\u73bb','\u73bc', + '\u73bd','\u73be','\u73bf','\u73c0','\u73c1','\u73c2','\u73c3', + '\u73c4','\u73c5','\u73c6','\u73c7','\u73c8','\u73c9','\u73ca', + '\u73cb','\u73cc','\u73cd','\u73ce','\u73cf','\u73d0','\u73d1', + '\u73d2','\u73d3','\u73d4','\u73d5','\u73d6','\u73d7','\u73d8', + '\u73d9','\u73da','\u73db','\u73dc','\u73dd','\u73de','\u73df', + '\u73e0','\u73e1','\u73e2','\u73e3','\u73e4','\u73e5','\u73e6', + '\u73e7','\u73e8','\u73e9','\u73ea','\u73eb','\u73ec','\u73ed', + '\u73ee','\u73ef','\u73f0','\u73f1','\u73f2','\u73f3','\u73f4', + '\u73f5','\u73f6','\u73f7','\u73f8','\u73f9','\u73fa','\u73fb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+29440; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void f7400() { + char[] cs = new char[] { + '\u7400','\u7401','\u7402','\u7403','\u7404','\u7405','\u7406', + '\u7407','\u7408','\u7409','\u740a','\u740b','\u740c','\u740d', + '\u740e','\u740f','\u7410','\u7411','\u7412','\u7413','\u7414', + '\u7415','\u7416','\u7417','\u7418','\u7419','\u741a','\u741b', + '\u741c','\u741d','\u741e','\u741f','\u7420','\u7421','\u7422', + '\u7423','\u7424','\u7425','\u7426','\u7427','\u7428','\u7429', + '\u742a','\u742b','\u742c','\u742d','\u742e','\u742f','\u7430', + '\u7431','\u7432','\u7433','\u7434','\u7435','\u7436','\u7437', + '\u7438','\u7439','\u743a','\u743b','\u743c','\u743d','\u743e', + '\u743f','\u7440','\u7441','\u7442','\u7443','\u7444','\u7445', + '\u7446','\u7447','\u7448','\u7449','\u744a','\u744b','\u744c', + '\u744d','\u744e','\u744f','\u7450','\u7451','\u7452','\u7453', + '\u7454','\u7455','\u7456','\u7457','\u7458','\u7459','\u745a', + '\u745b','\u745c','\u745d','\u745e','\u745f','\u7460','\u7461', + '\u7462','\u7463','\u7464','\u7465','\u7466','\u7467','\u7468', + '\u7469','\u746a','\u746b','\u746c','\u746d','\u746e','\u746f', + '\u7470','\u7471','\u7472','\u7473','\u7474','\u7475','\u7476', + '\u7477','\u7478','\u7479','\u747a','\u747b','\u747c','\u747d', + '\u747e','\u747f','\u7480','\u7481','\u7482','\u7483','\u7484', + '\u7485','\u7486','\u7487','\u7488','\u7489','\u748a','\u748b', + '\u748c','\u748d','\u748e','\u748f','\u7490','\u7491','\u7492', + '\u7493','\u7494','\u7495','\u7496','\u7497','\u7498','\u7499', + '\u749a','\u749b','\u749c','\u749d','\u749e','\u749f','\u74a0', + '\u74a1','\u74a2','\u74a3','\u74a4','\u74a5','\u74a6','\u74a7', + '\u74a8','\u74a9','\u74aa','\u74ab','\u74ac','\u74ad','\u74ae', + '\u74af','\u74b0','\u74b1','\u74b2','\u74b3','\u74b4','\u74b5', + '\u74b6','\u74b7','\u74b8','\u74b9','\u74ba','\u74bb','\u74bc', + '\u74bd','\u74be','\u74bf','\u74c0','\u74c1','\u74c2','\u74c3', + '\u74c4','\u74c5','\u74c6','\u74c7','\u74c8','\u74c9','\u74ca', + '\u74cb','\u74cc','\u74cd','\u74ce','\u74cf','\u74d0','\u74d1', + '\u74d2','\u74d3','\u74d4','\u74d5','\u74d6','\u74d7','\u74d8', + '\u74d9','\u74da','\u74db','\u74dc','\u74dd','\u74de','\u74df', + '\u74e0','\u74e1','\u74e2','\u74e3','\u74e4','\u74e5','\u74e6', + '\u74e7','\u74e8','\u74e9','\u74ea','\u74eb','\u74ec','\u74ed', + '\u74ee','\u74ef','\u74f0','\u74f1','\u74f2','\u74f3','\u74f4', + '\u74f5','\u74f6','\u74f7','\u74f8','\u74f9','\u74fa','\u74fb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+29696; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void f7500() { + char[] cs = new char[] { + '\u7500','\u7501','\u7502','\u7503','\u7504','\u7505','\u7506', + '\u7507','\u7508','\u7509','\u750a','\u750b','\u750c','\u750d', + '\u750e','\u750f','\u7510','\u7511','\u7512','\u7513','\u7514', + '\u7515','\u7516','\u7517','\u7518','\u7519','\u751a','\u751b', + '\u751c','\u751d','\u751e','\u751f','\u7520','\u7521','\u7522', + '\u7523','\u7524','\u7525','\u7526','\u7527','\u7528','\u7529', + '\u752a','\u752b','\u752c','\u752d','\u752e','\u752f','\u7530', + '\u7531','\u7532','\u7533','\u7534','\u7535','\u7536','\u7537', + '\u7538','\u7539','\u753a','\u753b','\u753c','\u753d','\u753e', + '\u753f','\u7540','\u7541','\u7542','\u7543','\u7544','\u7545', + '\u7546','\u7547','\u7548','\u7549','\u754a','\u754b','\u754c', + '\u754d','\u754e','\u754f','\u7550','\u7551','\u7552','\u7553', + '\u7554','\u7555','\u7556','\u7557','\u7558','\u7559','\u755a', + '\u755b','\u755c','\u755d','\u755e','\u755f','\u7560','\u7561', + '\u7562','\u7563','\u7564','\u7565','\u7566','\u7567','\u7568', + '\u7569','\u756a','\u756b','\u756c','\u756d','\u756e','\u756f', + '\u7570','\u7571','\u7572','\u7573','\u7574','\u7575','\u7576', + '\u7577','\u7578','\u7579','\u757a','\u757b','\u757c','\u757d', + '\u757e','\u757f','\u7580','\u7581','\u7582','\u7583','\u7584', + '\u7585','\u7586','\u7587','\u7588','\u7589','\u758a','\u758b', + '\u758c','\u758d','\u758e','\u758f','\u7590','\u7591','\u7592', + '\u7593','\u7594','\u7595','\u7596','\u7597','\u7598','\u7599', + '\u759a','\u759b','\u759c','\u759d','\u759e','\u759f','\u75a0', + '\u75a1','\u75a2','\u75a3','\u75a4','\u75a5','\u75a6','\u75a7', + '\u75a8','\u75a9','\u75aa','\u75ab','\u75ac','\u75ad','\u75ae', + '\u75af','\u75b0','\u75b1','\u75b2','\u75b3','\u75b4','\u75b5', + '\u75b6','\u75b7','\u75b8','\u75b9','\u75ba','\u75bb','\u75bc', + '\u75bd','\u75be','\u75bf','\u75c0','\u75c1','\u75c2','\u75c3', + '\u75c4','\u75c5','\u75c6','\u75c7','\u75c8','\u75c9','\u75ca', + '\u75cb','\u75cc','\u75cd','\u75ce','\u75cf','\u75d0','\u75d1', + '\u75d2','\u75d3','\u75d4','\u75d5','\u75d6','\u75d7','\u75d8', + '\u75d9','\u75da','\u75db','\u75dc','\u75dd','\u75de','\u75df', + '\u75e0','\u75e1','\u75e2','\u75e3','\u75e4','\u75e5','\u75e6', + '\u75e7','\u75e8','\u75e9','\u75ea','\u75eb','\u75ec','\u75ed', + '\u75ee','\u75ef','\u75f0','\u75f1','\u75f2','\u75f3','\u75f4', + '\u75f5','\u75f6','\u75f7','\u75f8','\u75f9','\u75fa','\u75fb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+29952; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void f7600() { + char[] cs = new char[] { + '\u7600','\u7601','\u7602','\u7603','\u7604','\u7605','\u7606', + '\u7607','\u7608','\u7609','\u760a','\u760b','\u760c','\u760d', + '\u760e','\u760f','\u7610','\u7611','\u7612','\u7613','\u7614', + '\u7615','\u7616','\u7617','\u7618','\u7619','\u761a','\u761b', + '\u761c','\u761d','\u761e','\u761f','\u7620','\u7621','\u7622', + '\u7623','\u7624','\u7625','\u7626','\u7627','\u7628','\u7629', + '\u762a','\u762b','\u762c','\u762d','\u762e','\u762f','\u7630', + '\u7631','\u7632','\u7633','\u7634','\u7635','\u7636','\u7637', + '\u7638','\u7639','\u763a','\u763b','\u763c','\u763d','\u763e', + '\u763f','\u7640','\u7641','\u7642','\u7643','\u7644','\u7645', + '\u7646','\u7647','\u7648','\u7649','\u764a','\u764b','\u764c', + '\u764d','\u764e','\u764f','\u7650','\u7651','\u7652','\u7653', + '\u7654','\u7655','\u7656','\u7657','\u7658','\u7659','\u765a', + '\u765b','\u765c','\u765d','\u765e','\u765f','\u7660','\u7661', + '\u7662','\u7663','\u7664','\u7665','\u7666','\u7667','\u7668', + '\u7669','\u766a','\u766b','\u766c','\u766d','\u766e','\u766f', + '\u7670','\u7671','\u7672','\u7673','\u7674','\u7675','\u7676', + '\u7677','\u7678','\u7679','\u767a','\u767b','\u767c','\u767d', + '\u767e','\u767f','\u7680','\u7681','\u7682','\u7683','\u7684', + '\u7685','\u7686','\u7687','\u7688','\u7689','\u768a','\u768b', + '\u768c','\u768d','\u768e','\u768f','\u7690','\u7691','\u7692', + '\u7693','\u7694','\u7695','\u7696','\u7697','\u7698','\u7699', + '\u769a','\u769b','\u769c','\u769d','\u769e','\u769f','\u76a0', + '\u76a1','\u76a2','\u76a3','\u76a4','\u76a5','\u76a6','\u76a7', + '\u76a8','\u76a9','\u76aa','\u76ab','\u76ac','\u76ad','\u76ae', + '\u76af','\u76b0','\u76b1','\u76b2','\u76b3','\u76b4','\u76b5', + '\u76b6','\u76b7','\u76b8','\u76b9','\u76ba','\u76bb','\u76bc', + '\u76bd','\u76be','\u76bf','\u76c0','\u76c1','\u76c2','\u76c3', + '\u76c4','\u76c5','\u76c6','\u76c7','\u76c8','\u76c9','\u76ca', + '\u76cb','\u76cc','\u76cd','\u76ce','\u76cf','\u76d0','\u76d1', + '\u76d2','\u76d3','\u76d4','\u76d5','\u76d6','\u76d7','\u76d8', + '\u76d9','\u76da','\u76db','\u76dc','\u76dd','\u76de','\u76df', + '\u76e0','\u76e1','\u76e2','\u76e3','\u76e4','\u76e5','\u76e6', + '\u76e7','\u76e8','\u76e9','\u76ea','\u76eb','\u76ec','\u76ed', + '\u76ee','\u76ef','\u76f0','\u76f1','\u76f2','\u76f3','\u76f4', + '\u76f5','\u76f6','\u76f7','\u76f8','\u76f9','\u76fa','\u76fb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+30208; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void f7700() { + char[] cs = new char[] { + '\u7700','\u7701','\u7702','\u7703','\u7704','\u7705','\u7706', + '\u7707','\u7708','\u7709','\u770a','\u770b','\u770c','\u770d', + '\u770e','\u770f','\u7710','\u7711','\u7712','\u7713','\u7714', + '\u7715','\u7716','\u7717','\u7718','\u7719','\u771a','\u771b', + '\u771c','\u771d','\u771e','\u771f','\u7720','\u7721','\u7722', + '\u7723','\u7724','\u7725','\u7726','\u7727','\u7728','\u7729', + '\u772a','\u772b','\u772c','\u772d','\u772e','\u772f','\u7730', + '\u7731','\u7732','\u7733','\u7734','\u7735','\u7736','\u7737', + '\u7738','\u7739','\u773a','\u773b','\u773c','\u773d','\u773e', + '\u773f','\u7740','\u7741','\u7742','\u7743','\u7744','\u7745', + '\u7746','\u7747','\u7748','\u7749','\u774a','\u774b','\u774c', + '\u774d','\u774e','\u774f','\u7750','\u7751','\u7752','\u7753', + '\u7754','\u7755','\u7756','\u7757','\u7758','\u7759','\u775a', + '\u775b','\u775c','\u775d','\u775e','\u775f','\u7760','\u7761', + '\u7762','\u7763','\u7764','\u7765','\u7766','\u7767','\u7768', + '\u7769','\u776a','\u776b','\u776c','\u776d','\u776e','\u776f', + '\u7770','\u7771','\u7772','\u7773','\u7774','\u7775','\u7776', + '\u7777','\u7778','\u7779','\u777a','\u777b','\u777c','\u777d', + '\u777e','\u777f','\u7780','\u7781','\u7782','\u7783','\u7784', + '\u7785','\u7786','\u7787','\u7788','\u7789','\u778a','\u778b', + '\u778c','\u778d','\u778e','\u778f','\u7790','\u7791','\u7792', + '\u7793','\u7794','\u7795','\u7796','\u7797','\u7798','\u7799', + '\u779a','\u779b','\u779c','\u779d','\u779e','\u779f','\u77a0', + '\u77a1','\u77a2','\u77a3','\u77a4','\u77a5','\u77a6','\u77a7', + '\u77a8','\u77a9','\u77aa','\u77ab','\u77ac','\u77ad','\u77ae', + '\u77af','\u77b0','\u77b1','\u77b2','\u77b3','\u77b4','\u77b5', + '\u77b6','\u77b7','\u77b8','\u77b9','\u77ba','\u77bb','\u77bc', + '\u77bd','\u77be','\u77bf','\u77c0','\u77c1','\u77c2','\u77c3', + '\u77c4','\u77c5','\u77c6','\u77c7','\u77c8','\u77c9','\u77ca', + '\u77cb','\u77cc','\u77cd','\u77ce','\u77cf','\u77d0','\u77d1', + '\u77d2','\u77d3','\u77d4','\u77d5','\u77d6','\u77d7','\u77d8', + '\u77d9','\u77da','\u77db','\u77dc','\u77dd','\u77de','\u77df', + '\u77e0','\u77e1','\u77e2','\u77e3','\u77e4','\u77e5','\u77e6', + '\u77e7','\u77e8','\u77e9','\u77ea','\u77eb','\u77ec','\u77ed', + '\u77ee','\u77ef','\u77f0','\u77f1','\u77f2','\u77f3','\u77f4', + '\u77f5','\u77f6','\u77f7','\u77f8','\u77f9','\u77fa','\u77fb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+30464; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void f7800() { + char[] cs = new char[] { + '\u7800','\u7801','\u7802','\u7803','\u7804','\u7805','\u7806', + '\u7807','\u7808','\u7809','\u780a','\u780b','\u780c','\u780d', + '\u780e','\u780f','\u7810','\u7811','\u7812','\u7813','\u7814', + '\u7815','\u7816','\u7817','\u7818','\u7819','\u781a','\u781b', + '\u781c','\u781d','\u781e','\u781f','\u7820','\u7821','\u7822', + '\u7823','\u7824','\u7825','\u7826','\u7827','\u7828','\u7829', + '\u782a','\u782b','\u782c','\u782d','\u782e','\u782f','\u7830', + '\u7831','\u7832','\u7833','\u7834','\u7835','\u7836','\u7837', + '\u7838','\u7839','\u783a','\u783b','\u783c','\u783d','\u783e', + '\u783f','\u7840','\u7841','\u7842','\u7843','\u7844','\u7845', + '\u7846','\u7847','\u7848','\u7849','\u784a','\u784b','\u784c', + '\u784d','\u784e','\u784f','\u7850','\u7851','\u7852','\u7853', + '\u7854','\u7855','\u7856','\u7857','\u7858','\u7859','\u785a', + '\u785b','\u785c','\u785d','\u785e','\u785f','\u7860','\u7861', + '\u7862','\u7863','\u7864','\u7865','\u7866','\u7867','\u7868', + '\u7869','\u786a','\u786b','\u786c','\u786d','\u786e','\u786f', + '\u7870','\u7871','\u7872','\u7873','\u7874','\u7875','\u7876', + '\u7877','\u7878','\u7879','\u787a','\u787b','\u787c','\u787d', + '\u787e','\u787f','\u7880','\u7881','\u7882','\u7883','\u7884', + '\u7885','\u7886','\u7887','\u7888','\u7889','\u788a','\u788b', + '\u788c','\u788d','\u788e','\u788f','\u7890','\u7891','\u7892', + '\u7893','\u7894','\u7895','\u7896','\u7897','\u7898','\u7899', + '\u789a','\u789b','\u789c','\u789d','\u789e','\u789f','\u78a0', + '\u78a1','\u78a2','\u78a3','\u78a4','\u78a5','\u78a6','\u78a7', + '\u78a8','\u78a9','\u78aa','\u78ab','\u78ac','\u78ad','\u78ae', + '\u78af','\u78b0','\u78b1','\u78b2','\u78b3','\u78b4','\u78b5', + '\u78b6','\u78b7','\u78b8','\u78b9','\u78ba','\u78bb','\u78bc', + '\u78bd','\u78be','\u78bf','\u78c0','\u78c1','\u78c2','\u78c3', + '\u78c4','\u78c5','\u78c6','\u78c7','\u78c8','\u78c9','\u78ca', + '\u78cb','\u78cc','\u78cd','\u78ce','\u78cf','\u78d0','\u78d1', + '\u78d2','\u78d3','\u78d4','\u78d5','\u78d6','\u78d7','\u78d8', + '\u78d9','\u78da','\u78db','\u78dc','\u78dd','\u78de','\u78df', + '\u78e0','\u78e1','\u78e2','\u78e3','\u78e4','\u78e5','\u78e6', + '\u78e7','\u78e8','\u78e9','\u78ea','\u78eb','\u78ec','\u78ed', + '\u78ee','\u78ef','\u78f0','\u78f1','\u78f2','\u78f3','\u78f4', + '\u78f5','\u78f6','\u78f7','\u78f8','\u78f9','\u78fa','\u78fb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+30720; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void f7900() { + char[] cs = new char[] { + '\u7900','\u7901','\u7902','\u7903','\u7904','\u7905','\u7906', + '\u7907','\u7908','\u7909','\u790a','\u790b','\u790c','\u790d', + '\u790e','\u790f','\u7910','\u7911','\u7912','\u7913','\u7914', + '\u7915','\u7916','\u7917','\u7918','\u7919','\u791a','\u791b', + '\u791c','\u791d','\u791e','\u791f','\u7920','\u7921','\u7922', + '\u7923','\u7924','\u7925','\u7926','\u7927','\u7928','\u7929', + '\u792a','\u792b','\u792c','\u792d','\u792e','\u792f','\u7930', + '\u7931','\u7932','\u7933','\u7934','\u7935','\u7936','\u7937', + '\u7938','\u7939','\u793a','\u793b','\u793c','\u793d','\u793e', + '\u793f','\u7940','\u7941','\u7942','\u7943','\u7944','\u7945', + '\u7946','\u7947','\u7948','\u7949','\u794a','\u794b','\u794c', + '\u794d','\u794e','\u794f','\u7950','\u7951','\u7952','\u7953', + '\u7954','\u7955','\u7956','\u7957','\u7958','\u7959','\u795a', + '\u795b','\u795c','\u795d','\u795e','\u795f','\u7960','\u7961', + '\u7962','\u7963','\u7964','\u7965','\u7966','\u7967','\u7968', + '\u7969','\u796a','\u796b','\u796c','\u796d','\u796e','\u796f', + '\u7970','\u7971','\u7972','\u7973','\u7974','\u7975','\u7976', + '\u7977','\u7978','\u7979','\u797a','\u797b','\u797c','\u797d', + '\u797e','\u797f','\u7980','\u7981','\u7982','\u7983','\u7984', + '\u7985','\u7986','\u7987','\u7988','\u7989','\u798a','\u798b', + '\u798c','\u798d','\u798e','\u798f','\u7990','\u7991','\u7992', + '\u7993','\u7994','\u7995','\u7996','\u7997','\u7998','\u7999', + '\u799a','\u799b','\u799c','\u799d','\u799e','\u799f','\u79a0', + '\u79a1','\u79a2','\u79a3','\u79a4','\u79a5','\u79a6','\u79a7', + '\u79a8','\u79a9','\u79aa','\u79ab','\u79ac','\u79ad','\u79ae', + '\u79af','\u79b0','\u79b1','\u79b2','\u79b3','\u79b4','\u79b5', + '\u79b6','\u79b7','\u79b8','\u79b9','\u79ba','\u79bb','\u79bc', + '\u79bd','\u79be','\u79bf','\u79c0','\u79c1','\u79c2','\u79c3', + '\u79c4','\u79c5','\u79c6','\u79c7','\u79c8','\u79c9','\u79ca', + '\u79cb','\u79cc','\u79cd','\u79ce','\u79cf','\u79d0','\u79d1', + '\u79d2','\u79d3','\u79d4','\u79d5','\u79d6','\u79d7','\u79d8', + '\u79d9','\u79da','\u79db','\u79dc','\u79dd','\u79de','\u79df', + '\u79e0','\u79e1','\u79e2','\u79e3','\u79e4','\u79e5','\u79e6', + '\u79e7','\u79e8','\u79e9','\u79ea','\u79eb','\u79ec','\u79ed', + '\u79ee','\u79ef','\u79f0','\u79f1','\u79f2','\u79f3','\u79f4', + '\u79f5','\u79f6','\u79f7','\u79f8','\u79f9','\u79fa','\u79fb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+30976; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void f7a00() { + char[] cs = new char[] { + '\u7a00','\u7a01','\u7a02','\u7a03','\u7a04','\u7a05','\u7a06', + '\u7a07','\u7a08','\u7a09','\u7a0a','\u7a0b','\u7a0c','\u7a0d', + '\u7a0e','\u7a0f','\u7a10','\u7a11','\u7a12','\u7a13','\u7a14', + '\u7a15','\u7a16','\u7a17','\u7a18','\u7a19','\u7a1a','\u7a1b', + '\u7a1c','\u7a1d','\u7a1e','\u7a1f','\u7a20','\u7a21','\u7a22', + '\u7a23','\u7a24','\u7a25','\u7a26','\u7a27','\u7a28','\u7a29', + '\u7a2a','\u7a2b','\u7a2c','\u7a2d','\u7a2e','\u7a2f','\u7a30', + '\u7a31','\u7a32','\u7a33','\u7a34','\u7a35','\u7a36','\u7a37', + '\u7a38','\u7a39','\u7a3a','\u7a3b','\u7a3c','\u7a3d','\u7a3e', + '\u7a3f','\u7a40','\u7a41','\u7a42','\u7a43','\u7a44','\u7a45', + '\u7a46','\u7a47','\u7a48','\u7a49','\u7a4a','\u7a4b','\u7a4c', + '\u7a4d','\u7a4e','\u7a4f','\u7a50','\u7a51','\u7a52','\u7a53', + '\u7a54','\u7a55','\u7a56','\u7a57','\u7a58','\u7a59','\u7a5a', + '\u7a5b','\u7a5c','\u7a5d','\u7a5e','\u7a5f','\u7a60','\u7a61', + '\u7a62','\u7a63','\u7a64','\u7a65','\u7a66','\u7a67','\u7a68', + '\u7a69','\u7a6a','\u7a6b','\u7a6c','\u7a6d','\u7a6e','\u7a6f', + '\u7a70','\u7a71','\u7a72','\u7a73','\u7a74','\u7a75','\u7a76', + '\u7a77','\u7a78','\u7a79','\u7a7a','\u7a7b','\u7a7c','\u7a7d', + '\u7a7e','\u7a7f','\u7a80','\u7a81','\u7a82','\u7a83','\u7a84', + '\u7a85','\u7a86','\u7a87','\u7a88','\u7a89','\u7a8a','\u7a8b', + '\u7a8c','\u7a8d','\u7a8e','\u7a8f','\u7a90','\u7a91','\u7a92', + '\u7a93','\u7a94','\u7a95','\u7a96','\u7a97','\u7a98','\u7a99', + '\u7a9a','\u7a9b','\u7a9c','\u7a9d','\u7a9e','\u7a9f','\u7aa0', + '\u7aa1','\u7aa2','\u7aa3','\u7aa4','\u7aa5','\u7aa6','\u7aa7', + '\u7aa8','\u7aa9','\u7aaa','\u7aab','\u7aac','\u7aad','\u7aae', + '\u7aaf','\u7ab0','\u7ab1','\u7ab2','\u7ab3','\u7ab4','\u7ab5', + '\u7ab6','\u7ab7','\u7ab8','\u7ab9','\u7aba','\u7abb','\u7abc', + '\u7abd','\u7abe','\u7abf','\u7ac0','\u7ac1','\u7ac2','\u7ac3', + '\u7ac4','\u7ac5','\u7ac6','\u7ac7','\u7ac8','\u7ac9','\u7aca', + '\u7acb','\u7acc','\u7acd','\u7ace','\u7acf','\u7ad0','\u7ad1', + '\u7ad2','\u7ad3','\u7ad4','\u7ad5','\u7ad6','\u7ad7','\u7ad8', + '\u7ad9','\u7ada','\u7adb','\u7adc','\u7add','\u7ade','\u7adf', + '\u7ae0','\u7ae1','\u7ae2','\u7ae3','\u7ae4','\u7ae5','\u7ae6', + '\u7ae7','\u7ae8','\u7ae9','\u7aea','\u7aeb','\u7aec','\u7aed', + '\u7aee','\u7aef','\u7af0','\u7af1','\u7af2','\u7af3','\u7af4', + '\u7af5','\u7af6','\u7af7','\u7af8','\u7af9','\u7afa','\u7afb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+31232; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void f7b00() { + char[] cs = new char[] { + '\u7b00','\u7b01','\u7b02','\u7b03','\u7b04','\u7b05','\u7b06', + '\u7b07','\u7b08','\u7b09','\u7b0a','\u7b0b','\u7b0c','\u7b0d', + '\u7b0e','\u7b0f','\u7b10','\u7b11','\u7b12','\u7b13','\u7b14', + '\u7b15','\u7b16','\u7b17','\u7b18','\u7b19','\u7b1a','\u7b1b', + '\u7b1c','\u7b1d','\u7b1e','\u7b1f','\u7b20','\u7b21','\u7b22', + '\u7b23','\u7b24','\u7b25','\u7b26','\u7b27','\u7b28','\u7b29', + '\u7b2a','\u7b2b','\u7b2c','\u7b2d','\u7b2e','\u7b2f','\u7b30', + '\u7b31','\u7b32','\u7b33','\u7b34','\u7b35','\u7b36','\u7b37', + '\u7b38','\u7b39','\u7b3a','\u7b3b','\u7b3c','\u7b3d','\u7b3e', + '\u7b3f','\u7b40','\u7b41','\u7b42','\u7b43','\u7b44','\u7b45', + '\u7b46','\u7b47','\u7b48','\u7b49','\u7b4a','\u7b4b','\u7b4c', + '\u7b4d','\u7b4e','\u7b4f','\u7b50','\u7b51','\u7b52','\u7b53', + '\u7b54','\u7b55','\u7b56','\u7b57','\u7b58','\u7b59','\u7b5a', + '\u7b5b','\u7b5c','\u7b5d','\u7b5e','\u7b5f','\u7b60','\u7b61', + '\u7b62','\u7b63','\u7b64','\u7b65','\u7b66','\u7b67','\u7b68', + '\u7b69','\u7b6a','\u7b6b','\u7b6c','\u7b6d','\u7b6e','\u7b6f', + '\u7b70','\u7b71','\u7b72','\u7b73','\u7b74','\u7b75','\u7b76', + '\u7b77','\u7b78','\u7b79','\u7b7a','\u7b7b','\u7b7c','\u7b7d', + '\u7b7e','\u7b7f','\u7b80','\u7b81','\u7b82','\u7b83','\u7b84', + '\u7b85','\u7b86','\u7b87','\u7b88','\u7b89','\u7b8a','\u7b8b', + '\u7b8c','\u7b8d','\u7b8e','\u7b8f','\u7b90','\u7b91','\u7b92', + '\u7b93','\u7b94','\u7b95','\u7b96','\u7b97','\u7b98','\u7b99', + '\u7b9a','\u7b9b','\u7b9c','\u7b9d','\u7b9e','\u7b9f','\u7ba0', + '\u7ba1','\u7ba2','\u7ba3','\u7ba4','\u7ba5','\u7ba6','\u7ba7', + '\u7ba8','\u7ba9','\u7baa','\u7bab','\u7bac','\u7bad','\u7bae', + '\u7baf','\u7bb0','\u7bb1','\u7bb2','\u7bb3','\u7bb4','\u7bb5', + '\u7bb6','\u7bb7','\u7bb8','\u7bb9','\u7bba','\u7bbb','\u7bbc', + '\u7bbd','\u7bbe','\u7bbf','\u7bc0','\u7bc1','\u7bc2','\u7bc3', + '\u7bc4','\u7bc5','\u7bc6','\u7bc7','\u7bc8','\u7bc9','\u7bca', + '\u7bcb','\u7bcc','\u7bcd','\u7bce','\u7bcf','\u7bd0','\u7bd1', + '\u7bd2','\u7bd3','\u7bd4','\u7bd5','\u7bd6','\u7bd7','\u7bd8', + '\u7bd9','\u7bda','\u7bdb','\u7bdc','\u7bdd','\u7bde','\u7bdf', + '\u7be0','\u7be1','\u7be2','\u7be3','\u7be4','\u7be5','\u7be6', + '\u7be7','\u7be8','\u7be9','\u7bea','\u7beb','\u7bec','\u7bed', + '\u7bee','\u7bef','\u7bf0','\u7bf1','\u7bf2','\u7bf3','\u7bf4', + '\u7bf5','\u7bf6','\u7bf7','\u7bf8','\u7bf9','\u7bfa','\u7bfb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+31488; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void f7c00() { + char[] cs = new char[] { + '\u7c00','\u7c01','\u7c02','\u7c03','\u7c04','\u7c05','\u7c06', + '\u7c07','\u7c08','\u7c09','\u7c0a','\u7c0b','\u7c0c','\u7c0d', + '\u7c0e','\u7c0f','\u7c10','\u7c11','\u7c12','\u7c13','\u7c14', + '\u7c15','\u7c16','\u7c17','\u7c18','\u7c19','\u7c1a','\u7c1b', + '\u7c1c','\u7c1d','\u7c1e','\u7c1f','\u7c20','\u7c21','\u7c22', + '\u7c23','\u7c24','\u7c25','\u7c26','\u7c27','\u7c28','\u7c29', + '\u7c2a','\u7c2b','\u7c2c','\u7c2d','\u7c2e','\u7c2f','\u7c30', + '\u7c31','\u7c32','\u7c33','\u7c34','\u7c35','\u7c36','\u7c37', + '\u7c38','\u7c39','\u7c3a','\u7c3b','\u7c3c','\u7c3d','\u7c3e', + '\u7c3f','\u7c40','\u7c41','\u7c42','\u7c43','\u7c44','\u7c45', + '\u7c46','\u7c47','\u7c48','\u7c49','\u7c4a','\u7c4b','\u7c4c', + '\u7c4d','\u7c4e','\u7c4f','\u7c50','\u7c51','\u7c52','\u7c53', + '\u7c54','\u7c55','\u7c56','\u7c57','\u7c58','\u7c59','\u7c5a', + '\u7c5b','\u7c5c','\u7c5d','\u7c5e','\u7c5f','\u7c60','\u7c61', + '\u7c62','\u7c63','\u7c64','\u7c65','\u7c66','\u7c67','\u7c68', + '\u7c69','\u7c6a','\u7c6b','\u7c6c','\u7c6d','\u7c6e','\u7c6f', + '\u7c70','\u7c71','\u7c72','\u7c73','\u7c74','\u7c75','\u7c76', + '\u7c77','\u7c78','\u7c79','\u7c7a','\u7c7b','\u7c7c','\u7c7d', + '\u7c7e','\u7c7f','\u7c80','\u7c81','\u7c82','\u7c83','\u7c84', + '\u7c85','\u7c86','\u7c87','\u7c88','\u7c89','\u7c8a','\u7c8b', + '\u7c8c','\u7c8d','\u7c8e','\u7c8f','\u7c90','\u7c91','\u7c92', + '\u7c93','\u7c94','\u7c95','\u7c96','\u7c97','\u7c98','\u7c99', + '\u7c9a','\u7c9b','\u7c9c','\u7c9d','\u7c9e','\u7c9f','\u7ca0', + '\u7ca1','\u7ca2','\u7ca3','\u7ca4','\u7ca5','\u7ca6','\u7ca7', + '\u7ca8','\u7ca9','\u7caa','\u7cab','\u7cac','\u7cad','\u7cae', + '\u7caf','\u7cb0','\u7cb1','\u7cb2','\u7cb3','\u7cb4','\u7cb5', + '\u7cb6','\u7cb7','\u7cb8','\u7cb9','\u7cba','\u7cbb','\u7cbc', + '\u7cbd','\u7cbe','\u7cbf','\u7cc0','\u7cc1','\u7cc2','\u7cc3', + '\u7cc4','\u7cc5','\u7cc6','\u7cc7','\u7cc8','\u7cc9','\u7cca', + '\u7ccb','\u7ccc','\u7ccd','\u7cce','\u7ccf','\u7cd0','\u7cd1', + '\u7cd2','\u7cd3','\u7cd4','\u7cd5','\u7cd6','\u7cd7','\u7cd8', + '\u7cd9','\u7cda','\u7cdb','\u7cdc','\u7cdd','\u7cde','\u7cdf', + '\u7ce0','\u7ce1','\u7ce2','\u7ce3','\u7ce4','\u7ce5','\u7ce6', + '\u7ce7','\u7ce8','\u7ce9','\u7cea','\u7ceb','\u7cec','\u7ced', + '\u7cee','\u7cef','\u7cf0','\u7cf1','\u7cf2','\u7cf3','\u7cf4', + '\u7cf5','\u7cf6','\u7cf7','\u7cf8','\u7cf9','\u7cfa','\u7cfb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+31744; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void f7d00() { + char[] cs = new char[] { + '\u7d00','\u7d01','\u7d02','\u7d03','\u7d04','\u7d05','\u7d06', + '\u7d07','\u7d08','\u7d09','\u7d0a','\u7d0b','\u7d0c','\u7d0d', + '\u7d0e','\u7d0f','\u7d10','\u7d11','\u7d12','\u7d13','\u7d14', + '\u7d15','\u7d16','\u7d17','\u7d18','\u7d19','\u7d1a','\u7d1b', + '\u7d1c','\u7d1d','\u7d1e','\u7d1f','\u7d20','\u7d21','\u7d22', + '\u7d23','\u7d24','\u7d25','\u7d26','\u7d27','\u7d28','\u7d29', + '\u7d2a','\u7d2b','\u7d2c','\u7d2d','\u7d2e','\u7d2f','\u7d30', + '\u7d31','\u7d32','\u7d33','\u7d34','\u7d35','\u7d36','\u7d37', + '\u7d38','\u7d39','\u7d3a','\u7d3b','\u7d3c','\u7d3d','\u7d3e', + '\u7d3f','\u7d40','\u7d41','\u7d42','\u7d43','\u7d44','\u7d45', + '\u7d46','\u7d47','\u7d48','\u7d49','\u7d4a','\u7d4b','\u7d4c', + '\u7d4d','\u7d4e','\u7d4f','\u7d50','\u7d51','\u7d52','\u7d53', + '\u7d54','\u7d55','\u7d56','\u7d57','\u7d58','\u7d59','\u7d5a', + '\u7d5b','\u7d5c','\u7d5d','\u7d5e','\u7d5f','\u7d60','\u7d61', + '\u7d62','\u7d63','\u7d64','\u7d65','\u7d66','\u7d67','\u7d68', + '\u7d69','\u7d6a','\u7d6b','\u7d6c','\u7d6d','\u7d6e','\u7d6f', + '\u7d70','\u7d71','\u7d72','\u7d73','\u7d74','\u7d75','\u7d76', + '\u7d77','\u7d78','\u7d79','\u7d7a','\u7d7b','\u7d7c','\u7d7d', + '\u7d7e','\u7d7f','\u7d80','\u7d81','\u7d82','\u7d83','\u7d84', + '\u7d85','\u7d86','\u7d87','\u7d88','\u7d89','\u7d8a','\u7d8b', + '\u7d8c','\u7d8d','\u7d8e','\u7d8f','\u7d90','\u7d91','\u7d92', + '\u7d93','\u7d94','\u7d95','\u7d96','\u7d97','\u7d98','\u7d99', + '\u7d9a','\u7d9b','\u7d9c','\u7d9d','\u7d9e','\u7d9f','\u7da0', + '\u7da1','\u7da2','\u7da3','\u7da4','\u7da5','\u7da6','\u7da7', + '\u7da8','\u7da9','\u7daa','\u7dab','\u7dac','\u7dad','\u7dae', + '\u7daf','\u7db0','\u7db1','\u7db2','\u7db3','\u7db4','\u7db5', + '\u7db6','\u7db7','\u7db8','\u7db9','\u7dba','\u7dbb','\u7dbc', + '\u7dbd','\u7dbe','\u7dbf','\u7dc0','\u7dc1','\u7dc2','\u7dc3', + '\u7dc4','\u7dc5','\u7dc6','\u7dc7','\u7dc8','\u7dc9','\u7dca', + '\u7dcb','\u7dcc','\u7dcd','\u7dce','\u7dcf','\u7dd0','\u7dd1', + '\u7dd2','\u7dd3','\u7dd4','\u7dd5','\u7dd6','\u7dd7','\u7dd8', + '\u7dd9','\u7dda','\u7ddb','\u7ddc','\u7ddd','\u7dde','\u7ddf', + '\u7de0','\u7de1','\u7de2','\u7de3','\u7de4','\u7de5','\u7de6', + '\u7de7','\u7de8','\u7de9','\u7dea','\u7deb','\u7dec','\u7ded', + '\u7dee','\u7def','\u7df0','\u7df1','\u7df2','\u7df3','\u7df4', + '\u7df5','\u7df6','\u7df7','\u7df8','\u7df9','\u7dfa','\u7dfb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+32000; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void f7e00() { + char[] cs = new char[] { + '\u7e00','\u7e01','\u7e02','\u7e03','\u7e04','\u7e05','\u7e06', + '\u7e07','\u7e08','\u7e09','\u7e0a','\u7e0b','\u7e0c','\u7e0d', + '\u7e0e','\u7e0f','\u7e10','\u7e11','\u7e12','\u7e13','\u7e14', + '\u7e15','\u7e16','\u7e17','\u7e18','\u7e19','\u7e1a','\u7e1b', + '\u7e1c','\u7e1d','\u7e1e','\u7e1f','\u7e20','\u7e21','\u7e22', + '\u7e23','\u7e24','\u7e25','\u7e26','\u7e27','\u7e28','\u7e29', + '\u7e2a','\u7e2b','\u7e2c','\u7e2d','\u7e2e','\u7e2f','\u7e30', + '\u7e31','\u7e32','\u7e33','\u7e34','\u7e35','\u7e36','\u7e37', + '\u7e38','\u7e39','\u7e3a','\u7e3b','\u7e3c','\u7e3d','\u7e3e', + '\u7e3f','\u7e40','\u7e41','\u7e42','\u7e43','\u7e44','\u7e45', + '\u7e46','\u7e47','\u7e48','\u7e49','\u7e4a','\u7e4b','\u7e4c', + '\u7e4d','\u7e4e','\u7e4f','\u7e50','\u7e51','\u7e52','\u7e53', + '\u7e54','\u7e55','\u7e56','\u7e57','\u7e58','\u7e59','\u7e5a', + '\u7e5b','\u7e5c','\u7e5d','\u7e5e','\u7e5f','\u7e60','\u7e61', + '\u7e62','\u7e63','\u7e64','\u7e65','\u7e66','\u7e67','\u7e68', + '\u7e69','\u7e6a','\u7e6b','\u7e6c','\u7e6d','\u7e6e','\u7e6f', + '\u7e70','\u7e71','\u7e72','\u7e73','\u7e74','\u7e75','\u7e76', + '\u7e77','\u7e78','\u7e79','\u7e7a','\u7e7b','\u7e7c','\u7e7d', + '\u7e7e','\u7e7f','\u7e80','\u7e81','\u7e82','\u7e83','\u7e84', + '\u7e85','\u7e86','\u7e87','\u7e88','\u7e89','\u7e8a','\u7e8b', + '\u7e8c','\u7e8d','\u7e8e','\u7e8f','\u7e90','\u7e91','\u7e92', + '\u7e93','\u7e94','\u7e95','\u7e96','\u7e97','\u7e98','\u7e99', + '\u7e9a','\u7e9b','\u7e9c','\u7e9d','\u7e9e','\u7e9f','\u7ea0', + '\u7ea1','\u7ea2','\u7ea3','\u7ea4','\u7ea5','\u7ea6','\u7ea7', + '\u7ea8','\u7ea9','\u7eaa','\u7eab','\u7eac','\u7ead','\u7eae', + '\u7eaf','\u7eb0','\u7eb1','\u7eb2','\u7eb3','\u7eb4','\u7eb5', + '\u7eb6','\u7eb7','\u7eb8','\u7eb9','\u7eba','\u7ebb','\u7ebc', + '\u7ebd','\u7ebe','\u7ebf','\u7ec0','\u7ec1','\u7ec2','\u7ec3', + '\u7ec4','\u7ec5','\u7ec6','\u7ec7','\u7ec8','\u7ec9','\u7eca', + '\u7ecb','\u7ecc','\u7ecd','\u7ece','\u7ecf','\u7ed0','\u7ed1', + '\u7ed2','\u7ed3','\u7ed4','\u7ed5','\u7ed6','\u7ed7','\u7ed8', + '\u7ed9','\u7eda','\u7edb','\u7edc','\u7edd','\u7ede','\u7edf', + '\u7ee0','\u7ee1','\u7ee2','\u7ee3','\u7ee4','\u7ee5','\u7ee6', + '\u7ee7','\u7ee8','\u7ee9','\u7eea','\u7eeb','\u7eec','\u7eed', + '\u7eee','\u7eef','\u7ef0','\u7ef1','\u7ef2','\u7ef3','\u7ef4', + '\u7ef5','\u7ef6','\u7ef7','\u7ef8','\u7ef9','\u7efa','\u7efb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+32256; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void f7f00() { + char[] cs = new char[] { + '\u7f00','\u7f01','\u7f02','\u7f03','\u7f04','\u7f05','\u7f06', + '\u7f07','\u7f08','\u7f09','\u7f0a','\u7f0b','\u7f0c','\u7f0d', + '\u7f0e','\u7f0f','\u7f10','\u7f11','\u7f12','\u7f13','\u7f14', + '\u7f15','\u7f16','\u7f17','\u7f18','\u7f19','\u7f1a','\u7f1b', + '\u7f1c','\u7f1d','\u7f1e','\u7f1f','\u7f20','\u7f21','\u7f22', + '\u7f23','\u7f24','\u7f25','\u7f26','\u7f27','\u7f28','\u7f29', + '\u7f2a','\u7f2b','\u7f2c','\u7f2d','\u7f2e','\u7f2f','\u7f30', + '\u7f31','\u7f32','\u7f33','\u7f34','\u7f35','\u7f36','\u7f37', + '\u7f38','\u7f39','\u7f3a','\u7f3b','\u7f3c','\u7f3d','\u7f3e', + '\u7f3f','\u7f40','\u7f41','\u7f42','\u7f43','\u7f44','\u7f45', + '\u7f46','\u7f47','\u7f48','\u7f49','\u7f4a','\u7f4b','\u7f4c', + '\u7f4d','\u7f4e','\u7f4f','\u7f50','\u7f51','\u7f52','\u7f53', + '\u7f54','\u7f55','\u7f56','\u7f57','\u7f58','\u7f59','\u7f5a', + '\u7f5b','\u7f5c','\u7f5d','\u7f5e','\u7f5f','\u7f60','\u7f61', + '\u7f62','\u7f63','\u7f64','\u7f65','\u7f66','\u7f67','\u7f68', + '\u7f69','\u7f6a','\u7f6b','\u7f6c','\u7f6d','\u7f6e','\u7f6f', + '\u7f70','\u7f71','\u7f72','\u7f73','\u7f74','\u7f75','\u7f76', + '\u7f77','\u7f78','\u7f79','\u7f7a','\u7f7b','\u7f7c','\u7f7d', + '\u7f7e','\u7f7f','\u7f80','\u7f81','\u7f82','\u7f83','\u7f84', + '\u7f85','\u7f86','\u7f87','\u7f88','\u7f89','\u7f8a','\u7f8b', + '\u7f8c','\u7f8d','\u7f8e','\u7f8f','\u7f90','\u7f91','\u7f92', + '\u7f93','\u7f94','\u7f95','\u7f96','\u7f97','\u7f98','\u7f99', + '\u7f9a','\u7f9b','\u7f9c','\u7f9d','\u7f9e','\u7f9f','\u7fa0', + '\u7fa1','\u7fa2','\u7fa3','\u7fa4','\u7fa5','\u7fa6','\u7fa7', + '\u7fa8','\u7fa9','\u7faa','\u7fab','\u7fac','\u7fad','\u7fae', + '\u7faf','\u7fb0','\u7fb1','\u7fb2','\u7fb3','\u7fb4','\u7fb5', + '\u7fb6','\u7fb7','\u7fb8','\u7fb9','\u7fba','\u7fbb','\u7fbc', + '\u7fbd','\u7fbe','\u7fbf','\u7fc0','\u7fc1','\u7fc2','\u7fc3', + '\u7fc4','\u7fc5','\u7fc6','\u7fc7','\u7fc8','\u7fc9','\u7fca', + '\u7fcb','\u7fcc','\u7fcd','\u7fce','\u7fcf','\u7fd0','\u7fd1', + '\u7fd2','\u7fd3','\u7fd4','\u7fd5','\u7fd6','\u7fd7','\u7fd8', + '\u7fd9','\u7fda','\u7fdb','\u7fdc','\u7fdd','\u7fde','\u7fdf', + '\u7fe0','\u7fe1','\u7fe2','\u7fe3','\u7fe4','\u7fe5','\u7fe6', + '\u7fe7','\u7fe8','\u7fe9','\u7fea','\u7feb','\u7fec','\u7fed', + '\u7fee','\u7fef','\u7ff0','\u7ff1','\u7ff2','\u7ff3','\u7ff4', + '\u7ff5','\u7ff6','\u7ff7','\u7ff8','\u7ff9','\u7ffa','\u7ffb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+32512; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void f8000() { + char[] cs = new char[] { + '\u8000','\u8001','\u8002','\u8003','\u8004','\u8005','\u8006', + '\u8007','\u8008','\u8009','\u800a','\u800b','\u800c','\u800d', + '\u800e','\u800f','\u8010','\u8011','\u8012','\u8013','\u8014', + '\u8015','\u8016','\u8017','\u8018','\u8019','\u801a','\u801b', + '\u801c','\u801d','\u801e','\u801f','\u8020','\u8021','\u8022', + '\u8023','\u8024','\u8025','\u8026','\u8027','\u8028','\u8029', + '\u802a','\u802b','\u802c','\u802d','\u802e','\u802f','\u8030', + '\u8031','\u8032','\u8033','\u8034','\u8035','\u8036','\u8037', + '\u8038','\u8039','\u803a','\u803b','\u803c','\u803d','\u803e', + '\u803f','\u8040','\u8041','\u8042','\u8043','\u8044','\u8045', + '\u8046','\u8047','\u8048','\u8049','\u804a','\u804b','\u804c', + '\u804d','\u804e','\u804f','\u8050','\u8051','\u8052','\u8053', + '\u8054','\u8055','\u8056','\u8057','\u8058','\u8059','\u805a', + '\u805b','\u805c','\u805d','\u805e','\u805f','\u8060','\u8061', + '\u8062','\u8063','\u8064','\u8065','\u8066','\u8067','\u8068', + '\u8069','\u806a','\u806b','\u806c','\u806d','\u806e','\u806f', + '\u8070','\u8071','\u8072','\u8073','\u8074','\u8075','\u8076', + '\u8077','\u8078','\u8079','\u807a','\u807b','\u807c','\u807d', + '\u807e','\u807f','\u8080','\u8081','\u8082','\u8083','\u8084', + '\u8085','\u8086','\u8087','\u8088','\u8089','\u808a','\u808b', + '\u808c','\u808d','\u808e','\u808f','\u8090','\u8091','\u8092', + '\u8093','\u8094','\u8095','\u8096','\u8097','\u8098','\u8099', + '\u809a','\u809b','\u809c','\u809d','\u809e','\u809f','\u80a0', + '\u80a1','\u80a2','\u80a3','\u80a4','\u80a5','\u80a6','\u80a7', + '\u80a8','\u80a9','\u80aa','\u80ab','\u80ac','\u80ad','\u80ae', + '\u80af','\u80b0','\u80b1','\u80b2','\u80b3','\u80b4','\u80b5', + '\u80b6','\u80b7','\u80b8','\u80b9','\u80ba','\u80bb','\u80bc', + '\u80bd','\u80be','\u80bf','\u80c0','\u80c1','\u80c2','\u80c3', + '\u80c4','\u80c5','\u80c6','\u80c7','\u80c8','\u80c9','\u80ca', + '\u80cb','\u80cc','\u80cd','\u80ce','\u80cf','\u80d0','\u80d1', + '\u80d2','\u80d3','\u80d4','\u80d5','\u80d6','\u80d7','\u80d8', + '\u80d9','\u80da','\u80db','\u80dc','\u80dd','\u80de','\u80df', + '\u80e0','\u80e1','\u80e2','\u80e3','\u80e4','\u80e5','\u80e6', + '\u80e7','\u80e8','\u80e9','\u80ea','\u80eb','\u80ec','\u80ed', + '\u80ee','\u80ef','\u80f0','\u80f1','\u80f2','\u80f3','\u80f4', + '\u80f5','\u80f6','\u80f7','\u80f8','\u80f9','\u80fa','\u80fb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+32768; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void f8100() { + char[] cs = new char[] { + '\u8100','\u8101','\u8102','\u8103','\u8104','\u8105','\u8106', + '\u8107','\u8108','\u8109','\u810a','\u810b','\u810c','\u810d', + '\u810e','\u810f','\u8110','\u8111','\u8112','\u8113','\u8114', + '\u8115','\u8116','\u8117','\u8118','\u8119','\u811a','\u811b', + '\u811c','\u811d','\u811e','\u811f','\u8120','\u8121','\u8122', + '\u8123','\u8124','\u8125','\u8126','\u8127','\u8128','\u8129', + '\u812a','\u812b','\u812c','\u812d','\u812e','\u812f','\u8130', + '\u8131','\u8132','\u8133','\u8134','\u8135','\u8136','\u8137', + '\u8138','\u8139','\u813a','\u813b','\u813c','\u813d','\u813e', + '\u813f','\u8140','\u8141','\u8142','\u8143','\u8144','\u8145', + '\u8146','\u8147','\u8148','\u8149','\u814a','\u814b','\u814c', + '\u814d','\u814e','\u814f','\u8150','\u8151','\u8152','\u8153', + '\u8154','\u8155','\u8156','\u8157','\u8158','\u8159','\u815a', + '\u815b','\u815c','\u815d','\u815e','\u815f','\u8160','\u8161', + '\u8162','\u8163','\u8164','\u8165','\u8166','\u8167','\u8168', + '\u8169','\u816a','\u816b','\u816c','\u816d','\u816e','\u816f', + '\u8170','\u8171','\u8172','\u8173','\u8174','\u8175','\u8176', + '\u8177','\u8178','\u8179','\u817a','\u817b','\u817c','\u817d', + '\u817e','\u817f','\u8180','\u8181','\u8182','\u8183','\u8184', + '\u8185','\u8186','\u8187','\u8188','\u8189','\u818a','\u818b', + '\u818c','\u818d','\u818e','\u818f','\u8190','\u8191','\u8192', + '\u8193','\u8194','\u8195','\u8196','\u8197','\u8198','\u8199', + '\u819a','\u819b','\u819c','\u819d','\u819e','\u819f','\u81a0', + '\u81a1','\u81a2','\u81a3','\u81a4','\u81a5','\u81a6','\u81a7', + '\u81a8','\u81a9','\u81aa','\u81ab','\u81ac','\u81ad','\u81ae', + '\u81af','\u81b0','\u81b1','\u81b2','\u81b3','\u81b4','\u81b5', + '\u81b6','\u81b7','\u81b8','\u81b9','\u81ba','\u81bb','\u81bc', + '\u81bd','\u81be','\u81bf','\u81c0','\u81c1','\u81c2','\u81c3', + '\u81c4','\u81c5','\u81c6','\u81c7','\u81c8','\u81c9','\u81ca', + '\u81cb','\u81cc','\u81cd','\u81ce','\u81cf','\u81d0','\u81d1', + '\u81d2','\u81d3','\u81d4','\u81d5','\u81d6','\u81d7','\u81d8', + '\u81d9','\u81da','\u81db','\u81dc','\u81dd','\u81de','\u81df', + '\u81e0','\u81e1','\u81e2','\u81e3','\u81e4','\u81e5','\u81e6', + '\u81e7','\u81e8','\u81e9','\u81ea','\u81eb','\u81ec','\u81ed', + '\u81ee','\u81ef','\u81f0','\u81f1','\u81f2','\u81f3','\u81f4', + '\u81f5','\u81f6','\u81f7','\u81f8','\u81f9','\u81fa','\u81fb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+33024; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void f8200() { + char[] cs = new char[] { + '\u8200','\u8201','\u8202','\u8203','\u8204','\u8205','\u8206', + '\u8207','\u8208','\u8209','\u820a','\u820b','\u820c','\u820d', + '\u820e','\u820f','\u8210','\u8211','\u8212','\u8213','\u8214', + '\u8215','\u8216','\u8217','\u8218','\u8219','\u821a','\u821b', + '\u821c','\u821d','\u821e','\u821f','\u8220','\u8221','\u8222', + '\u8223','\u8224','\u8225','\u8226','\u8227','\u8228','\u8229', + '\u822a','\u822b','\u822c','\u822d','\u822e','\u822f','\u8230', + '\u8231','\u8232','\u8233','\u8234','\u8235','\u8236','\u8237', + '\u8238','\u8239','\u823a','\u823b','\u823c','\u823d','\u823e', + '\u823f','\u8240','\u8241','\u8242','\u8243','\u8244','\u8245', + '\u8246','\u8247','\u8248','\u8249','\u824a','\u824b','\u824c', + '\u824d','\u824e','\u824f','\u8250','\u8251','\u8252','\u8253', + '\u8254','\u8255','\u8256','\u8257','\u8258','\u8259','\u825a', + '\u825b','\u825c','\u825d','\u825e','\u825f','\u8260','\u8261', + '\u8262','\u8263','\u8264','\u8265','\u8266','\u8267','\u8268', + '\u8269','\u826a','\u826b','\u826c','\u826d','\u826e','\u826f', + '\u8270','\u8271','\u8272','\u8273','\u8274','\u8275','\u8276', + '\u8277','\u8278','\u8279','\u827a','\u827b','\u827c','\u827d', + '\u827e','\u827f','\u8280','\u8281','\u8282','\u8283','\u8284', + '\u8285','\u8286','\u8287','\u8288','\u8289','\u828a','\u828b', + '\u828c','\u828d','\u828e','\u828f','\u8290','\u8291','\u8292', + '\u8293','\u8294','\u8295','\u8296','\u8297','\u8298','\u8299', + '\u829a','\u829b','\u829c','\u829d','\u829e','\u829f','\u82a0', + '\u82a1','\u82a2','\u82a3','\u82a4','\u82a5','\u82a6','\u82a7', + '\u82a8','\u82a9','\u82aa','\u82ab','\u82ac','\u82ad','\u82ae', + '\u82af','\u82b0','\u82b1','\u82b2','\u82b3','\u82b4','\u82b5', + '\u82b6','\u82b7','\u82b8','\u82b9','\u82ba','\u82bb','\u82bc', + '\u82bd','\u82be','\u82bf','\u82c0','\u82c1','\u82c2','\u82c3', + '\u82c4','\u82c5','\u82c6','\u82c7','\u82c8','\u82c9','\u82ca', + '\u82cb','\u82cc','\u82cd','\u82ce','\u82cf','\u82d0','\u82d1', + '\u82d2','\u82d3','\u82d4','\u82d5','\u82d6','\u82d7','\u82d8', + '\u82d9','\u82da','\u82db','\u82dc','\u82dd','\u82de','\u82df', + '\u82e0','\u82e1','\u82e2','\u82e3','\u82e4','\u82e5','\u82e6', + '\u82e7','\u82e8','\u82e9','\u82ea','\u82eb','\u82ec','\u82ed', + '\u82ee','\u82ef','\u82f0','\u82f1','\u82f2','\u82f3','\u82f4', + '\u82f5','\u82f6','\u82f7','\u82f8','\u82f9','\u82fa','\u82fb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+33280; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void f8300() { + char[] cs = new char[] { + '\u8300','\u8301','\u8302','\u8303','\u8304','\u8305','\u8306', + '\u8307','\u8308','\u8309','\u830a','\u830b','\u830c','\u830d', + '\u830e','\u830f','\u8310','\u8311','\u8312','\u8313','\u8314', + '\u8315','\u8316','\u8317','\u8318','\u8319','\u831a','\u831b', + '\u831c','\u831d','\u831e','\u831f','\u8320','\u8321','\u8322', + '\u8323','\u8324','\u8325','\u8326','\u8327','\u8328','\u8329', + '\u832a','\u832b','\u832c','\u832d','\u832e','\u832f','\u8330', + '\u8331','\u8332','\u8333','\u8334','\u8335','\u8336','\u8337', + '\u8338','\u8339','\u833a','\u833b','\u833c','\u833d','\u833e', + '\u833f','\u8340','\u8341','\u8342','\u8343','\u8344','\u8345', + '\u8346','\u8347','\u8348','\u8349','\u834a','\u834b','\u834c', + '\u834d','\u834e','\u834f','\u8350','\u8351','\u8352','\u8353', + '\u8354','\u8355','\u8356','\u8357','\u8358','\u8359','\u835a', + '\u835b','\u835c','\u835d','\u835e','\u835f','\u8360','\u8361', + '\u8362','\u8363','\u8364','\u8365','\u8366','\u8367','\u8368', + '\u8369','\u836a','\u836b','\u836c','\u836d','\u836e','\u836f', + '\u8370','\u8371','\u8372','\u8373','\u8374','\u8375','\u8376', + '\u8377','\u8378','\u8379','\u837a','\u837b','\u837c','\u837d', + '\u837e','\u837f','\u8380','\u8381','\u8382','\u8383','\u8384', + '\u8385','\u8386','\u8387','\u8388','\u8389','\u838a','\u838b', + '\u838c','\u838d','\u838e','\u838f','\u8390','\u8391','\u8392', + '\u8393','\u8394','\u8395','\u8396','\u8397','\u8398','\u8399', + '\u839a','\u839b','\u839c','\u839d','\u839e','\u839f','\u83a0', + '\u83a1','\u83a2','\u83a3','\u83a4','\u83a5','\u83a6','\u83a7', + '\u83a8','\u83a9','\u83aa','\u83ab','\u83ac','\u83ad','\u83ae', + '\u83af','\u83b0','\u83b1','\u83b2','\u83b3','\u83b4','\u83b5', + '\u83b6','\u83b7','\u83b8','\u83b9','\u83ba','\u83bb','\u83bc', + '\u83bd','\u83be','\u83bf','\u83c0','\u83c1','\u83c2','\u83c3', + '\u83c4','\u83c5','\u83c6','\u83c7','\u83c8','\u83c9','\u83ca', + '\u83cb','\u83cc','\u83cd','\u83ce','\u83cf','\u83d0','\u83d1', + '\u83d2','\u83d3','\u83d4','\u83d5','\u83d6','\u83d7','\u83d8', + '\u83d9','\u83da','\u83db','\u83dc','\u83dd','\u83de','\u83df', + '\u83e0','\u83e1','\u83e2','\u83e3','\u83e4','\u83e5','\u83e6', + '\u83e7','\u83e8','\u83e9','\u83ea','\u83eb','\u83ec','\u83ed', + '\u83ee','\u83ef','\u83f0','\u83f1','\u83f2','\u83f3','\u83f4', + '\u83f5','\u83f6','\u83f7','\u83f8','\u83f9','\u83fa','\u83fb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+33536; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void f8400() { + char[] cs = new char[] { + '\u8400','\u8401','\u8402','\u8403','\u8404','\u8405','\u8406', + '\u8407','\u8408','\u8409','\u840a','\u840b','\u840c','\u840d', + '\u840e','\u840f','\u8410','\u8411','\u8412','\u8413','\u8414', + '\u8415','\u8416','\u8417','\u8418','\u8419','\u841a','\u841b', + '\u841c','\u841d','\u841e','\u841f','\u8420','\u8421','\u8422', + '\u8423','\u8424','\u8425','\u8426','\u8427','\u8428','\u8429', + '\u842a','\u842b','\u842c','\u842d','\u842e','\u842f','\u8430', + '\u8431','\u8432','\u8433','\u8434','\u8435','\u8436','\u8437', + '\u8438','\u8439','\u843a','\u843b','\u843c','\u843d','\u843e', + '\u843f','\u8440','\u8441','\u8442','\u8443','\u8444','\u8445', + '\u8446','\u8447','\u8448','\u8449','\u844a','\u844b','\u844c', + '\u844d','\u844e','\u844f','\u8450','\u8451','\u8452','\u8453', + '\u8454','\u8455','\u8456','\u8457','\u8458','\u8459','\u845a', + '\u845b','\u845c','\u845d','\u845e','\u845f','\u8460','\u8461', + '\u8462','\u8463','\u8464','\u8465','\u8466','\u8467','\u8468', + '\u8469','\u846a','\u846b','\u846c','\u846d','\u846e','\u846f', + '\u8470','\u8471','\u8472','\u8473','\u8474','\u8475','\u8476', + '\u8477','\u8478','\u8479','\u847a','\u847b','\u847c','\u847d', + '\u847e','\u847f','\u8480','\u8481','\u8482','\u8483','\u8484', + '\u8485','\u8486','\u8487','\u8488','\u8489','\u848a','\u848b', + '\u848c','\u848d','\u848e','\u848f','\u8490','\u8491','\u8492', + '\u8493','\u8494','\u8495','\u8496','\u8497','\u8498','\u8499', + '\u849a','\u849b','\u849c','\u849d','\u849e','\u849f','\u84a0', + '\u84a1','\u84a2','\u84a3','\u84a4','\u84a5','\u84a6','\u84a7', + '\u84a8','\u84a9','\u84aa','\u84ab','\u84ac','\u84ad','\u84ae', + '\u84af','\u84b0','\u84b1','\u84b2','\u84b3','\u84b4','\u84b5', + '\u84b6','\u84b7','\u84b8','\u84b9','\u84ba','\u84bb','\u84bc', + '\u84bd','\u84be','\u84bf','\u84c0','\u84c1','\u84c2','\u84c3', + '\u84c4','\u84c5','\u84c6','\u84c7','\u84c8','\u84c9','\u84ca', + '\u84cb','\u84cc','\u84cd','\u84ce','\u84cf','\u84d0','\u84d1', + '\u84d2','\u84d3','\u84d4','\u84d5','\u84d6','\u84d7','\u84d8', + '\u84d9','\u84da','\u84db','\u84dc','\u84dd','\u84de','\u84df', + '\u84e0','\u84e1','\u84e2','\u84e3','\u84e4','\u84e5','\u84e6', + '\u84e7','\u84e8','\u84e9','\u84ea','\u84eb','\u84ec','\u84ed', + '\u84ee','\u84ef','\u84f0','\u84f1','\u84f2','\u84f3','\u84f4', + '\u84f5','\u84f6','\u84f7','\u84f8','\u84f9','\u84fa','\u84fb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+33792; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void f8500() { + char[] cs = new char[] { + '\u8500','\u8501','\u8502','\u8503','\u8504','\u8505','\u8506', + '\u8507','\u8508','\u8509','\u850a','\u850b','\u850c','\u850d', + '\u850e','\u850f','\u8510','\u8511','\u8512','\u8513','\u8514', + '\u8515','\u8516','\u8517','\u8518','\u8519','\u851a','\u851b', + '\u851c','\u851d','\u851e','\u851f','\u8520','\u8521','\u8522', + '\u8523','\u8524','\u8525','\u8526','\u8527','\u8528','\u8529', + '\u852a','\u852b','\u852c','\u852d','\u852e','\u852f','\u8530', + '\u8531','\u8532','\u8533','\u8534','\u8535','\u8536','\u8537', + '\u8538','\u8539','\u853a','\u853b','\u853c','\u853d','\u853e', + '\u853f','\u8540','\u8541','\u8542','\u8543','\u8544','\u8545', + '\u8546','\u8547','\u8548','\u8549','\u854a','\u854b','\u854c', + '\u854d','\u854e','\u854f','\u8550','\u8551','\u8552','\u8553', + '\u8554','\u8555','\u8556','\u8557','\u8558','\u8559','\u855a', + '\u855b','\u855c','\u855d','\u855e','\u855f','\u8560','\u8561', + '\u8562','\u8563','\u8564','\u8565','\u8566','\u8567','\u8568', + '\u8569','\u856a','\u856b','\u856c','\u856d','\u856e','\u856f', + '\u8570','\u8571','\u8572','\u8573','\u8574','\u8575','\u8576', + '\u8577','\u8578','\u8579','\u857a','\u857b','\u857c','\u857d', + '\u857e','\u857f','\u8580','\u8581','\u8582','\u8583','\u8584', + '\u8585','\u8586','\u8587','\u8588','\u8589','\u858a','\u858b', + '\u858c','\u858d','\u858e','\u858f','\u8590','\u8591','\u8592', + '\u8593','\u8594','\u8595','\u8596','\u8597','\u8598','\u8599', + '\u859a','\u859b','\u859c','\u859d','\u859e','\u859f','\u85a0', + '\u85a1','\u85a2','\u85a3','\u85a4','\u85a5','\u85a6','\u85a7', + '\u85a8','\u85a9','\u85aa','\u85ab','\u85ac','\u85ad','\u85ae', + '\u85af','\u85b0','\u85b1','\u85b2','\u85b3','\u85b4','\u85b5', + '\u85b6','\u85b7','\u85b8','\u85b9','\u85ba','\u85bb','\u85bc', + '\u85bd','\u85be','\u85bf','\u85c0','\u85c1','\u85c2','\u85c3', + '\u85c4','\u85c5','\u85c6','\u85c7','\u85c8','\u85c9','\u85ca', + '\u85cb','\u85cc','\u85cd','\u85ce','\u85cf','\u85d0','\u85d1', + '\u85d2','\u85d3','\u85d4','\u85d5','\u85d6','\u85d7','\u85d8', + '\u85d9','\u85da','\u85db','\u85dc','\u85dd','\u85de','\u85df', + '\u85e0','\u85e1','\u85e2','\u85e3','\u85e4','\u85e5','\u85e6', + '\u85e7','\u85e8','\u85e9','\u85ea','\u85eb','\u85ec','\u85ed', + '\u85ee','\u85ef','\u85f0','\u85f1','\u85f2','\u85f3','\u85f4', + '\u85f5','\u85f6','\u85f7','\u85f8','\u85f9','\u85fa','\u85fb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+34048; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void f8600() { + char[] cs = new char[] { + '\u8600','\u8601','\u8602','\u8603','\u8604','\u8605','\u8606', + '\u8607','\u8608','\u8609','\u860a','\u860b','\u860c','\u860d', + '\u860e','\u860f','\u8610','\u8611','\u8612','\u8613','\u8614', + '\u8615','\u8616','\u8617','\u8618','\u8619','\u861a','\u861b', + '\u861c','\u861d','\u861e','\u861f','\u8620','\u8621','\u8622', + '\u8623','\u8624','\u8625','\u8626','\u8627','\u8628','\u8629', + '\u862a','\u862b','\u862c','\u862d','\u862e','\u862f','\u8630', + '\u8631','\u8632','\u8633','\u8634','\u8635','\u8636','\u8637', + '\u8638','\u8639','\u863a','\u863b','\u863c','\u863d','\u863e', + '\u863f','\u8640','\u8641','\u8642','\u8643','\u8644','\u8645', + '\u8646','\u8647','\u8648','\u8649','\u864a','\u864b','\u864c', + '\u864d','\u864e','\u864f','\u8650','\u8651','\u8652','\u8653', + '\u8654','\u8655','\u8656','\u8657','\u8658','\u8659','\u865a', + '\u865b','\u865c','\u865d','\u865e','\u865f','\u8660','\u8661', + '\u8662','\u8663','\u8664','\u8665','\u8666','\u8667','\u8668', + '\u8669','\u866a','\u866b','\u866c','\u866d','\u866e','\u866f', + '\u8670','\u8671','\u8672','\u8673','\u8674','\u8675','\u8676', + '\u8677','\u8678','\u8679','\u867a','\u867b','\u867c','\u867d', + '\u867e','\u867f','\u8680','\u8681','\u8682','\u8683','\u8684', + '\u8685','\u8686','\u8687','\u8688','\u8689','\u868a','\u868b', + '\u868c','\u868d','\u868e','\u868f','\u8690','\u8691','\u8692', + '\u8693','\u8694','\u8695','\u8696','\u8697','\u8698','\u8699', + '\u869a','\u869b','\u869c','\u869d','\u869e','\u869f','\u86a0', + '\u86a1','\u86a2','\u86a3','\u86a4','\u86a5','\u86a6','\u86a7', + '\u86a8','\u86a9','\u86aa','\u86ab','\u86ac','\u86ad','\u86ae', + '\u86af','\u86b0','\u86b1','\u86b2','\u86b3','\u86b4','\u86b5', + '\u86b6','\u86b7','\u86b8','\u86b9','\u86ba','\u86bb','\u86bc', + '\u86bd','\u86be','\u86bf','\u86c0','\u86c1','\u86c2','\u86c3', + '\u86c4','\u86c5','\u86c6','\u86c7','\u86c8','\u86c9','\u86ca', + '\u86cb','\u86cc','\u86cd','\u86ce','\u86cf','\u86d0','\u86d1', + '\u86d2','\u86d3','\u86d4','\u86d5','\u86d6','\u86d7','\u86d8', + '\u86d9','\u86da','\u86db','\u86dc','\u86dd','\u86de','\u86df', + '\u86e0','\u86e1','\u86e2','\u86e3','\u86e4','\u86e5','\u86e6', + '\u86e7','\u86e8','\u86e9','\u86ea','\u86eb','\u86ec','\u86ed', + '\u86ee','\u86ef','\u86f0','\u86f1','\u86f2','\u86f3','\u86f4', + '\u86f5','\u86f6','\u86f7','\u86f8','\u86f9','\u86fa','\u86fb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+34304; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void f8700() { + char[] cs = new char[] { + '\u8700','\u8701','\u8702','\u8703','\u8704','\u8705','\u8706', + '\u8707','\u8708','\u8709','\u870a','\u870b','\u870c','\u870d', + '\u870e','\u870f','\u8710','\u8711','\u8712','\u8713','\u8714', + '\u8715','\u8716','\u8717','\u8718','\u8719','\u871a','\u871b', + '\u871c','\u871d','\u871e','\u871f','\u8720','\u8721','\u8722', + '\u8723','\u8724','\u8725','\u8726','\u8727','\u8728','\u8729', + '\u872a','\u872b','\u872c','\u872d','\u872e','\u872f','\u8730', + '\u8731','\u8732','\u8733','\u8734','\u8735','\u8736','\u8737', + '\u8738','\u8739','\u873a','\u873b','\u873c','\u873d','\u873e', + '\u873f','\u8740','\u8741','\u8742','\u8743','\u8744','\u8745', + '\u8746','\u8747','\u8748','\u8749','\u874a','\u874b','\u874c', + '\u874d','\u874e','\u874f','\u8750','\u8751','\u8752','\u8753', + '\u8754','\u8755','\u8756','\u8757','\u8758','\u8759','\u875a', + '\u875b','\u875c','\u875d','\u875e','\u875f','\u8760','\u8761', + '\u8762','\u8763','\u8764','\u8765','\u8766','\u8767','\u8768', + '\u8769','\u876a','\u876b','\u876c','\u876d','\u876e','\u876f', + '\u8770','\u8771','\u8772','\u8773','\u8774','\u8775','\u8776', + '\u8777','\u8778','\u8779','\u877a','\u877b','\u877c','\u877d', + '\u877e','\u877f','\u8780','\u8781','\u8782','\u8783','\u8784', + '\u8785','\u8786','\u8787','\u8788','\u8789','\u878a','\u878b', + '\u878c','\u878d','\u878e','\u878f','\u8790','\u8791','\u8792', + '\u8793','\u8794','\u8795','\u8796','\u8797','\u8798','\u8799', + '\u879a','\u879b','\u879c','\u879d','\u879e','\u879f','\u87a0', + '\u87a1','\u87a2','\u87a3','\u87a4','\u87a5','\u87a6','\u87a7', + '\u87a8','\u87a9','\u87aa','\u87ab','\u87ac','\u87ad','\u87ae', + '\u87af','\u87b0','\u87b1','\u87b2','\u87b3','\u87b4','\u87b5', + '\u87b6','\u87b7','\u87b8','\u87b9','\u87ba','\u87bb','\u87bc', + '\u87bd','\u87be','\u87bf','\u87c0','\u87c1','\u87c2','\u87c3', + '\u87c4','\u87c5','\u87c6','\u87c7','\u87c8','\u87c9','\u87ca', + '\u87cb','\u87cc','\u87cd','\u87ce','\u87cf','\u87d0','\u87d1', + '\u87d2','\u87d3','\u87d4','\u87d5','\u87d6','\u87d7','\u87d8', + '\u87d9','\u87da','\u87db','\u87dc','\u87dd','\u87de','\u87df', + '\u87e0','\u87e1','\u87e2','\u87e3','\u87e4','\u87e5','\u87e6', + '\u87e7','\u87e8','\u87e9','\u87ea','\u87eb','\u87ec','\u87ed', + '\u87ee','\u87ef','\u87f0','\u87f1','\u87f2','\u87f3','\u87f4', + '\u87f5','\u87f6','\u87f7','\u87f8','\u87f9','\u87fa','\u87fb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+34560; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void f8800() { + char[] cs = new char[] { + '\u8800','\u8801','\u8802','\u8803','\u8804','\u8805','\u8806', + '\u8807','\u8808','\u8809','\u880a','\u880b','\u880c','\u880d', + '\u880e','\u880f','\u8810','\u8811','\u8812','\u8813','\u8814', + '\u8815','\u8816','\u8817','\u8818','\u8819','\u881a','\u881b', + '\u881c','\u881d','\u881e','\u881f','\u8820','\u8821','\u8822', + '\u8823','\u8824','\u8825','\u8826','\u8827','\u8828','\u8829', + '\u882a','\u882b','\u882c','\u882d','\u882e','\u882f','\u8830', + '\u8831','\u8832','\u8833','\u8834','\u8835','\u8836','\u8837', + '\u8838','\u8839','\u883a','\u883b','\u883c','\u883d','\u883e', + '\u883f','\u8840','\u8841','\u8842','\u8843','\u8844','\u8845', + '\u8846','\u8847','\u8848','\u8849','\u884a','\u884b','\u884c', + '\u884d','\u884e','\u884f','\u8850','\u8851','\u8852','\u8853', + '\u8854','\u8855','\u8856','\u8857','\u8858','\u8859','\u885a', + '\u885b','\u885c','\u885d','\u885e','\u885f','\u8860','\u8861', + '\u8862','\u8863','\u8864','\u8865','\u8866','\u8867','\u8868', + '\u8869','\u886a','\u886b','\u886c','\u886d','\u886e','\u886f', + '\u8870','\u8871','\u8872','\u8873','\u8874','\u8875','\u8876', + '\u8877','\u8878','\u8879','\u887a','\u887b','\u887c','\u887d', + '\u887e','\u887f','\u8880','\u8881','\u8882','\u8883','\u8884', + '\u8885','\u8886','\u8887','\u8888','\u8889','\u888a','\u888b', + '\u888c','\u888d','\u888e','\u888f','\u8890','\u8891','\u8892', + '\u8893','\u8894','\u8895','\u8896','\u8897','\u8898','\u8899', + '\u889a','\u889b','\u889c','\u889d','\u889e','\u889f','\u88a0', + '\u88a1','\u88a2','\u88a3','\u88a4','\u88a5','\u88a6','\u88a7', + '\u88a8','\u88a9','\u88aa','\u88ab','\u88ac','\u88ad','\u88ae', + '\u88af','\u88b0','\u88b1','\u88b2','\u88b3','\u88b4','\u88b5', + '\u88b6','\u88b7','\u88b8','\u88b9','\u88ba','\u88bb','\u88bc', + '\u88bd','\u88be','\u88bf','\u88c0','\u88c1','\u88c2','\u88c3', + '\u88c4','\u88c5','\u88c6','\u88c7','\u88c8','\u88c9','\u88ca', + '\u88cb','\u88cc','\u88cd','\u88ce','\u88cf','\u88d0','\u88d1', + '\u88d2','\u88d3','\u88d4','\u88d5','\u88d6','\u88d7','\u88d8', + '\u88d9','\u88da','\u88db','\u88dc','\u88dd','\u88de','\u88df', + '\u88e0','\u88e1','\u88e2','\u88e3','\u88e4','\u88e5','\u88e6', + '\u88e7','\u88e8','\u88e9','\u88ea','\u88eb','\u88ec','\u88ed', + '\u88ee','\u88ef','\u88f0','\u88f1','\u88f2','\u88f3','\u88f4', + '\u88f5','\u88f6','\u88f7','\u88f8','\u88f9','\u88fa','\u88fb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+34816; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void f8900() { + char[] cs = new char[] { + '\u8900','\u8901','\u8902','\u8903','\u8904','\u8905','\u8906', + '\u8907','\u8908','\u8909','\u890a','\u890b','\u890c','\u890d', + '\u890e','\u890f','\u8910','\u8911','\u8912','\u8913','\u8914', + '\u8915','\u8916','\u8917','\u8918','\u8919','\u891a','\u891b', + '\u891c','\u891d','\u891e','\u891f','\u8920','\u8921','\u8922', + '\u8923','\u8924','\u8925','\u8926','\u8927','\u8928','\u8929', + '\u892a','\u892b','\u892c','\u892d','\u892e','\u892f','\u8930', + '\u8931','\u8932','\u8933','\u8934','\u8935','\u8936','\u8937', + '\u8938','\u8939','\u893a','\u893b','\u893c','\u893d','\u893e', + '\u893f','\u8940','\u8941','\u8942','\u8943','\u8944','\u8945', + '\u8946','\u8947','\u8948','\u8949','\u894a','\u894b','\u894c', + '\u894d','\u894e','\u894f','\u8950','\u8951','\u8952','\u8953', + '\u8954','\u8955','\u8956','\u8957','\u8958','\u8959','\u895a', + '\u895b','\u895c','\u895d','\u895e','\u895f','\u8960','\u8961', + '\u8962','\u8963','\u8964','\u8965','\u8966','\u8967','\u8968', + '\u8969','\u896a','\u896b','\u896c','\u896d','\u896e','\u896f', + '\u8970','\u8971','\u8972','\u8973','\u8974','\u8975','\u8976', + '\u8977','\u8978','\u8979','\u897a','\u897b','\u897c','\u897d', + '\u897e','\u897f','\u8980','\u8981','\u8982','\u8983','\u8984', + '\u8985','\u8986','\u8987','\u8988','\u8989','\u898a','\u898b', + '\u898c','\u898d','\u898e','\u898f','\u8990','\u8991','\u8992', + '\u8993','\u8994','\u8995','\u8996','\u8997','\u8998','\u8999', + '\u899a','\u899b','\u899c','\u899d','\u899e','\u899f','\u89a0', + '\u89a1','\u89a2','\u89a3','\u89a4','\u89a5','\u89a6','\u89a7', + '\u89a8','\u89a9','\u89aa','\u89ab','\u89ac','\u89ad','\u89ae', + '\u89af','\u89b0','\u89b1','\u89b2','\u89b3','\u89b4','\u89b5', + '\u89b6','\u89b7','\u89b8','\u89b9','\u89ba','\u89bb','\u89bc', + '\u89bd','\u89be','\u89bf','\u89c0','\u89c1','\u89c2','\u89c3', + '\u89c4','\u89c5','\u89c6','\u89c7','\u89c8','\u89c9','\u89ca', + '\u89cb','\u89cc','\u89cd','\u89ce','\u89cf','\u89d0','\u89d1', + '\u89d2','\u89d3','\u89d4','\u89d5','\u89d6','\u89d7','\u89d8', + '\u89d9','\u89da','\u89db','\u89dc','\u89dd','\u89de','\u89df', + '\u89e0','\u89e1','\u89e2','\u89e3','\u89e4','\u89e5','\u89e6', + '\u89e7','\u89e8','\u89e9','\u89ea','\u89eb','\u89ec','\u89ed', + '\u89ee','\u89ef','\u89f0','\u89f1','\u89f2','\u89f3','\u89f4', + '\u89f5','\u89f6','\u89f7','\u89f8','\u89f9','\u89fa','\u89fb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+35072; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void f8a00() { + char[] cs = new char[] { + '\u8a00','\u8a01','\u8a02','\u8a03','\u8a04','\u8a05','\u8a06', + '\u8a07','\u8a08','\u8a09','\u8a0a','\u8a0b','\u8a0c','\u8a0d', + '\u8a0e','\u8a0f','\u8a10','\u8a11','\u8a12','\u8a13','\u8a14', + '\u8a15','\u8a16','\u8a17','\u8a18','\u8a19','\u8a1a','\u8a1b', + '\u8a1c','\u8a1d','\u8a1e','\u8a1f','\u8a20','\u8a21','\u8a22', + '\u8a23','\u8a24','\u8a25','\u8a26','\u8a27','\u8a28','\u8a29', + '\u8a2a','\u8a2b','\u8a2c','\u8a2d','\u8a2e','\u8a2f','\u8a30', + '\u8a31','\u8a32','\u8a33','\u8a34','\u8a35','\u8a36','\u8a37', + '\u8a38','\u8a39','\u8a3a','\u8a3b','\u8a3c','\u8a3d','\u8a3e', + '\u8a3f','\u8a40','\u8a41','\u8a42','\u8a43','\u8a44','\u8a45', + '\u8a46','\u8a47','\u8a48','\u8a49','\u8a4a','\u8a4b','\u8a4c', + '\u8a4d','\u8a4e','\u8a4f','\u8a50','\u8a51','\u8a52','\u8a53', + '\u8a54','\u8a55','\u8a56','\u8a57','\u8a58','\u8a59','\u8a5a', + '\u8a5b','\u8a5c','\u8a5d','\u8a5e','\u8a5f','\u8a60','\u8a61', + '\u8a62','\u8a63','\u8a64','\u8a65','\u8a66','\u8a67','\u8a68', + '\u8a69','\u8a6a','\u8a6b','\u8a6c','\u8a6d','\u8a6e','\u8a6f', + '\u8a70','\u8a71','\u8a72','\u8a73','\u8a74','\u8a75','\u8a76', + '\u8a77','\u8a78','\u8a79','\u8a7a','\u8a7b','\u8a7c','\u8a7d', + '\u8a7e','\u8a7f','\u8a80','\u8a81','\u8a82','\u8a83','\u8a84', + '\u8a85','\u8a86','\u8a87','\u8a88','\u8a89','\u8a8a','\u8a8b', + '\u8a8c','\u8a8d','\u8a8e','\u8a8f','\u8a90','\u8a91','\u8a92', + '\u8a93','\u8a94','\u8a95','\u8a96','\u8a97','\u8a98','\u8a99', + '\u8a9a','\u8a9b','\u8a9c','\u8a9d','\u8a9e','\u8a9f','\u8aa0', + '\u8aa1','\u8aa2','\u8aa3','\u8aa4','\u8aa5','\u8aa6','\u8aa7', + '\u8aa8','\u8aa9','\u8aaa','\u8aab','\u8aac','\u8aad','\u8aae', + '\u8aaf','\u8ab0','\u8ab1','\u8ab2','\u8ab3','\u8ab4','\u8ab5', + '\u8ab6','\u8ab7','\u8ab8','\u8ab9','\u8aba','\u8abb','\u8abc', + '\u8abd','\u8abe','\u8abf','\u8ac0','\u8ac1','\u8ac2','\u8ac3', + '\u8ac4','\u8ac5','\u8ac6','\u8ac7','\u8ac8','\u8ac9','\u8aca', + '\u8acb','\u8acc','\u8acd','\u8ace','\u8acf','\u8ad0','\u8ad1', + '\u8ad2','\u8ad3','\u8ad4','\u8ad5','\u8ad6','\u8ad7','\u8ad8', + '\u8ad9','\u8ada','\u8adb','\u8adc','\u8add','\u8ade','\u8adf', + '\u8ae0','\u8ae1','\u8ae2','\u8ae3','\u8ae4','\u8ae5','\u8ae6', + '\u8ae7','\u8ae8','\u8ae9','\u8aea','\u8aeb','\u8aec','\u8aed', + '\u8aee','\u8aef','\u8af0','\u8af1','\u8af2','\u8af3','\u8af4', + '\u8af5','\u8af6','\u8af7','\u8af8','\u8af9','\u8afa','\u8afb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+35328; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void f8b00() { + char[] cs = new char[] { + '\u8b00','\u8b01','\u8b02','\u8b03','\u8b04','\u8b05','\u8b06', + '\u8b07','\u8b08','\u8b09','\u8b0a','\u8b0b','\u8b0c','\u8b0d', + '\u8b0e','\u8b0f','\u8b10','\u8b11','\u8b12','\u8b13','\u8b14', + '\u8b15','\u8b16','\u8b17','\u8b18','\u8b19','\u8b1a','\u8b1b', + '\u8b1c','\u8b1d','\u8b1e','\u8b1f','\u8b20','\u8b21','\u8b22', + '\u8b23','\u8b24','\u8b25','\u8b26','\u8b27','\u8b28','\u8b29', + '\u8b2a','\u8b2b','\u8b2c','\u8b2d','\u8b2e','\u8b2f','\u8b30', + '\u8b31','\u8b32','\u8b33','\u8b34','\u8b35','\u8b36','\u8b37', + '\u8b38','\u8b39','\u8b3a','\u8b3b','\u8b3c','\u8b3d','\u8b3e', + '\u8b3f','\u8b40','\u8b41','\u8b42','\u8b43','\u8b44','\u8b45', + '\u8b46','\u8b47','\u8b48','\u8b49','\u8b4a','\u8b4b','\u8b4c', + '\u8b4d','\u8b4e','\u8b4f','\u8b50','\u8b51','\u8b52','\u8b53', + '\u8b54','\u8b55','\u8b56','\u8b57','\u8b58','\u8b59','\u8b5a', + '\u8b5b','\u8b5c','\u8b5d','\u8b5e','\u8b5f','\u8b60','\u8b61', + '\u8b62','\u8b63','\u8b64','\u8b65','\u8b66','\u8b67','\u8b68', + '\u8b69','\u8b6a','\u8b6b','\u8b6c','\u8b6d','\u8b6e','\u8b6f', + '\u8b70','\u8b71','\u8b72','\u8b73','\u8b74','\u8b75','\u8b76', + '\u8b77','\u8b78','\u8b79','\u8b7a','\u8b7b','\u8b7c','\u8b7d', + '\u8b7e','\u8b7f','\u8b80','\u8b81','\u8b82','\u8b83','\u8b84', + '\u8b85','\u8b86','\u8b87','\u8b88','\u8b89','\u8b8a','\u8b8b', + '\u8b8c','\u8b8d','\u8b8e','\u8b8f','\u8b90','\u8b91','\u8b92', + '\u8b93','\u8b94','\u8b95','\u8b96','\u8b97','\u8b98','\u8b99', + '\u8b9a','\u8b9b','\u8b9c','\u8b9d','\u8b9e','\u8b9f','\u8ba0', + '\u8ba1','\u8ba2','\u8ba3','\u8ba4','\u8ba5','\u8ba6','\u8ba7', + '\u8ba8','\u8ba9','\u8baa','\u8bab','\u8bac','\u8bad','\u8bae', + '\u8baf','\u8bb0','\u8bb1','\u8bb2','\u8bb3','\u8bb4','\u8bb5', + '\u8bb6','\u8bb7','\u8bb8','\u8bb9','\u8bba','\u8bbb','\u8bbc', + '\u8bbd','\u8bbe','\u8bbf','\u8bc0','\u8bc1','\u8bc2','\u8bc3', + '\u8bc4','\u8bc5','\u8bc6','\u8bc7','\u8bc8','\u8bc9','\u8bca', + '\u8bcb','\u8bcc','\u8bcd','\u8bce','\u8bcf','\u8bd0','\u8bd1', + '\u8bd2','\u8bd3','\u8bd4','\u8bd5','\u8bd6','\u8bd7','\u8bd8', + '\u8bd9','\u8bda','\u8bdb','\u8bdc','\u8bdd','\u8bde','\u8bdf', + '\u8be0','\u8be1','\u8be2','\u8be3','\u8be4','\u8be5','\u8be6', + '\u8be7','\u8be8','\u8be9','\u8bea','\u8beb','\u8bec','\u8bed', + '\u8bee','\u8bef','\u8bf0','\u8bf1','\u8bf2','\u8bf3','\u8bf4', + '\u8bf5','\u8bf6','\u8bf7','\u8bf8','\u8bf9','\u8bfa','\u8bfb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+35584; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void f8c00() { + char[] cs = new char[] { + '\u8c00','\u8c01','\u8c02','\u8c03','\u8c04','\u8c05','\u8c06', + '\u8c07','\u8c08','\u8c09','\u8c0a','\u8c0b','\u8c0c','\u8c0d', + '\u8c0e','\u8c0f','\u8c10','\u8c11','\u8c12','\u8c13','\u8c14', + '\u8c15','\u8c16','\u8c17','\u8c18','\u8c19','\u8c1a','\u8c1b', + '\u8c1c','\u8c1d','\u8c1e','\u8c1f','\u8c20','\u8c21','\u8c22', + '\u8c23','\u8c24','\u8c25','\u8c26','\u8c27','\u8c28','\u8c29', + '\u8c2a','\u8c2b','\u8c2c','\u8c2d','\u8c2e','\u8c2f','\u8c30', + '\u8c31','\u8c32','\u8c33','\u8c34','\u8c35','\u8c36','\u8c37', + '\u8c38','\u8c39','\u8c3a','\u8c3b','\u8c3c','\u8c3d','\u8c3e', + '\u8c3f','\u8c40','\u8c41','\u8c42','\u8c43','\u8c44','\u8c45', + '\u8c46','\u8c47','\u8c48','\u8c49','\u8c4a','\u8c4b','\u8c4c', + '\u8c4d','\u8c4e','\u8c4f','\u8c50','\u8c51','\u8c52','\u8c53', + '\u8c54','\u8c55','\u8c56','\u8c57','\u8c58','\u8c59','\u8c5a', + '\u8c5b','\u8c5c','\u8c5d','\u8c5e','\u8c5f','\u8c60','\u8c61', + '\u8c62','\u8c63','\u8c64','\u8c65','\u8c66','\u8c67','\u8c68', + '\u8c69','\u8c6a','\u8c6b','\u8c6c','\u8c6d','\u8c6e','\u8c6f', + '\u8c70','\u8c71','\u8c72','\u8c73','\u8c74','\u8c75','\u8c76', + '\u8c77','\u8c78','\u8c79','\u8c7a','\u8c7b','\u8c7c','\u8c7d', + '\u8c7e','\u8c7f','\u8c80','\u8c81','\u8c82','\u8c83','\u8c84', + '\u8c85','\u8c86','\u8c87','\u8c88','\u8c89','\u8c8a','\u8c8b', + '\u8c8c','\u8c8d','\u8c8e','\u8c8f','\u8c90','\u8c91','\u8c92', + '\u8c93','\u8c94','\u8c95','\u8c96','\u8c97','\u8c98','\u8c99', + '\u8c9a','\u8c9b','\u8c9c','\u8c9d','\u8c9e','\u8c9f','\u8ca0', + '\u8ca1','\u8ca2','\u8ca3','\u8ca4','\u8ca5','\u8ca6','\u8ca7', + '\u8ca8','\u8ca9','\u8caa','\u8cab','\u8cac','\u8cad','\u8cae', + '\u8caf','\u8cb0','\u8cb1','\u8cb2','\u8cb3','\u8cb4','\u8cb5', + '\u8cb6','\u8cb7','\u8cb8','\u8cb9','\u8cba','\u8cbb','\u8cbc', + '\u8cbd','\u8cbe','\u8cbf','\u8cc0','\u8cc1','\u8cc2','\u8cc3', + '\u8cc4','\u8cc5','\u8cc6','\u8cc7','\u8cc8','\u8cc9','\u8cca', + '\u8ccb','\u8ccc','\u8ccd','\u8cce','\u8ccf','\u8cd0','\u8cd1', + '\u8cd2','\u8cd3','\u8cd4','\u8cd5','\u8cd6','\u8cd7','\u8cd8', + '\u8cd9','\u8cda','\u8cdb','\u8cdc','\u8cdd','\u8cde','\u8cdf', + '\u8ce0','\u8ce1','\u8ce2','\u8ce3','\u8ce4','\u8ce5','\u8ce6', + '\u8ce7','\u8ce8','\u8ce9','\u8cea','\u8ceb','\u8cec','\u8ced', + '\u8cee','\u8cef','\u8cf0','\u8cf1','\u8cf2','\u8cf3','\u8cf4', + '\u8cf5','\u8cf6','\u8cf7','\u8cf8','\u8cf9','\u8cfa','\u8cfb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+35840; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void f8d00() { + char[] cs = new char[] { + '\u8d00','\u8d01','\u8d02','\u8d03','\u8d04','\u8d05','\u8d06', + '\u8d07','\u8d08','\u8d09','\u8d0a','\u8d0b','\u8d0c','\u8d0d', + '\u8d0e','\u8d0f','\u8d10','\u8d11','\u8d12','\u8d13','\u8d14', + '\u8d15','\u8d16','\u8d17','\u8d18','\u8d19','\u8d1a','\u8d1b', + '\u8d1c','\u8d1d','\u8d1e','\u8d1f','\u8d20','\u8d21','\u8d22', + '\u8d23','\u8d24','\u8d25','\u8d26','\u8d27','\u8d28','\u8d29', + '\u8d2a','\u8d2b','\u8d2c','\u8d2d','\u8d2e','\u8d2f','\u8d30', + '\u8d31','\u8d32','\u8d33','\u8d34','\u8d35','\u8d36','\u8d37', + '\u8d38','\u8d39','\u8d3a','\u8d3b','\u8d3c','\u8d3d','\u8d3e', + '\u8d3f','\u8d40','\u8d41','\u8d42','\u8d43','\u8d44','\u8d45', + '\u8d46','\u8d47','\u8d48','\u8d49','\u8d4a','\u8d4b','\u8d4c', + '\u8d4d','\u8d4e','\u8d4f','\u8d50','\u8d51','\u8d52','\u8d53', + '\u8d54','\u8d55','\u8d56','\u8d57','\u8d58','\u8d59','\u8d5a', + '\u8d5b','\u8d5c','\u8d5d','\u8d5e','\u8d5f','\u8d60','\u8d61', + '\u8d62','\u8d63','\u8d64','\u8d65','\u8d66','\u8d67','\u8d68', + '\u8d69','\u8d6a','\u8d6b','\u8d6c','\u8d6d','\u8d6e','\u8d6f', + '\u8d70','\u8d71','\u8d72','\u8d73','\u8d74','\u8d75','\u8d76', + '\u8d77','\u8d78','\u8d79','\u8d7a','\u8d7b','\u8d7c','\u8d7d', + '\u8d7e','\u8d7f','\u8d80','\u8d81','\u8d82','\u8d83','\u8d84', + '\u8d85','\u8d86','\u8d87','\u8d88','\u8d89','\u8d8a','\u8d8b', + '\u8d8c','\u8d8d','\u8d8e','\u8d8f','\u8d90','\u8d91','\u8d92', + '\u8d93','\u8d94','\u8d95','\u8d96','\u8d97','\u8d98','\u8d99', + '\u8d9a','\u8d9b','\u8d9c','\u8d9d','\u8d9e','\u8d9f','\u8da0', + '\u8da1','\u8da2','\u8da3','\u8da4','\u8da5','\u8da6','\u8da7', + '\u8da8','\u8da9','\u8daa','\u8dab','\u8dac','\u8dad','\u8dae', + '\u8daf','\u8db0','\u8db1','\u8db2','\u8db3','\u8db4','\u8db5', + '\u8db6','\u8db7','\u8db8','\u8db9','\u8dba','\u8dbb','\u8dbc', + '\u8dbd','\u8dbe','\u8dbf','\u8dc0','\u8dc1','\u8dc2','\u8dc3', + '\u8dc4','\u8dc5','\u8dc6','\u8dc7','\u8dc8','\u8dc9','\u8dca', + '\u8dcb','\u8dcc','\u8dcd','\u8dce','\u8dcf','\u8dd0','\u8dd1', + '\u8dd2','\u8dd3','\u8dd4','\u8dd5','\u8dd6','\u8dd7','\u8dd8', + '\u8dd9','\u8dda','\u8ddb','\u8ddc','\u8ddd','\u8dde','\u8ddf', + '\u8de0','\u8de1','\u8de2','\u8de3','\u8de4','\u8de5','\u8de6', + '\u8de7','\u8de8','\u8de9','\u8dea','\u8deb','\u8dec','\u8ded', + '\u8dee','\u8def','\u8df0','\u8df1','\u8df2','\u8df3','\u8df4', + '\u8df5','\u8df6','\u8df7','\u8df8','\u8df9','\u8dfa','\u8dfb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+36096; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void f8e00() { + char[] cs = new char[] { + '\u8e00','\u8e01','\u8e02','\u8e03','\u8e04','\u8e05','\u8e06', + '\u8e07','\u8e08','\u8e09','\u8e0a','\u8e0b','\u8e0c','\u8e0d', + '\u8e0e','\u8e0f','\u8e10','\u8e11','\u8e12','\u8e13','\u8e14', + '\u8e15','\u8e16','\u8e17','\u8e18','\u8e19','\u8e1a','\u8e1b', + '\u8e1c','\u8e1d','\u8e1e','\u8e1f','\u8e20','\u8e21','\u8e22', + '\u8e23','\u8e24','\u8e25','\u8e26','\u8e27','\u8e28','\u8e29', + '\u8e2a','\u8e2b','\u8e2c','\u8e2d','\u8e2e','\u8e2f','\u8e30', + '\u8e31','\u8e32','\u8e33','\u8e34','\u8e35','\u8e36','\u8e37', + '\u8e38','\u8e39','\u8e3a','\u8e3b','\u8e3c','\u8e3d','\u8e3e', + '\u8e3f','\u8e40','\u8e41','\u8e42','\u8e43','\u8e44','\u8e45', + '\u8e46','\u8e47','\u8e48','\u8e49','\u8e4a','\u8e4b','\u8e4c', + '\u8e4d','\u8e4e','\u8e4f','\u8e50','\u8e51','\u8e52','\u8e53', + '\u8e54','\u8e55','\u8e56','\u8e57','\u8e58','\u8e59','\u8e5a', + '\u8e5b','\u8e5c','\u8e5d','\u8e5e','\u8e5f','\u8e60','\u8e61', + '\u8e62','\u8e63','\u8e64','\u8e65','\u8e66','\u8e67','\u8e68', + '\u8e69','\u8e6a','\u8e6b','\u8e6c','\u8e6d','\u8e6e','\u8e6f', + '\u8e70','\u8e71','\u8e72','\u8e73','\u8e74','\u8e75','\u8e76', + '\u8e77','\u8e78','\u8e79','\u8e7a','\u8e7b','\u8e7c','\u8e7d', + '\u8e7e','\u8e7f','\u8e80','\u8e81','\u8e82','\u8e83','\u8e84', + '\u8e85','\u8e86','\u8e87','\u8e88','\u8e89','\u8e8a','\u8e8b', + '\u8e8c','\u8e8d','\u8e8e','\u8e8f','\u8e90','\u8e91','\u8e92', + '\u8e93','\u8e94','\u8e95','\u8e96','\u8e97','\u8e98','\u8e99', + '\u8e9a','\u8e9b','\u8e9c','\u8e9d','\u8e9e','\u8e9f','\u8ea0', + '\u8ea1','\u8ea2','\u8ea3','\u8ea4','\u8ea5','\u8ea6','\u8ea7', + '\u8ea8','\u8ea9','\u8eaa','\u8eab','\u8eac','\u8ead','\u8eae', + '\u8eaf','\u8eb0','\u8eb1','\u8eb2','\u8eb3','\u8eb4','\u8eb5', + '\u8eb6','\u8eb7','\u8eb8','\u8eb9','\u8eba','\u8ebb','\u8ebc', + '\u8ebd','\u8ebe','\u8ebf','\u8ec0','\u8ec1','\u8ec2','\u8ec3', + '\u8ec4','\u8ec5','\u8ec6','\u8ec7','\u8ec8','\u8ec9','\u8eca', + '\u8ecb','\u8ecc','\u8ecd','\u8ece','\u8ecf','\u8ed0','\u8ed1', + '\u8ed2','\u8ed3','\u8ed4','\u8ed5','\u8ed6','\u8ed7','\u8ed8', + '\u8ed9','\u8eda','\u8edb','\u8edc','\u8edd','\u8ede','\u8edf', + '\u8ee0','\u8ee1','\u8ee2','\u8ee3','\u8ee4','\u8ee5','\u8ee6', + '\u8ee7','\u8ee8','\u8ee9','\u8eea','\u8eeb','\u8eec','\u8eed', + '\u8eee','\u8eef','\u8ef0','\u8ef1','\u8ef2','\u8ef3','\u8ef4', + '\u8ef5','\u8ef6','\u8ef7','\u8ef8','\u8ef9','\u8efa','\u8efb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+36352; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void f8f00() { + char[] cs = new char[] { + '\u8f00','\u8f01','\u8f02','\u8f03','\u8f04','\u8f05','\u8f06', + '\u8f07','\u8f08','\u8f09','\u8f0a','\u8f0b','\u8f0c','\u8f0d', + '\u8f0e','\u8f0f','\u8f10','\u8f11','\u8f12','\u8f13','\u8f14', + '\u8f15','\u8f16','\u8f17','\u8f18','\u8f19','\u8f1a','\u8f1b', + '\u8f1c','\u8f1d','\u8f1e','\u8f1f','\u8f20','\u8f21','\u8f22', + '\u8f23','\u8f24','\u8f25','\u8f26','\u8f27','\u8f28','\u8f29', + '\u8f2a','\u8f2b','\u8f2c','\u8f2d','\u8f2e','\u8f2f','\u8f30', + '\u8f31','\u8f32','\u8f33','\u8f34','\u8f35','\u8f36','\u8f37', + '\u8f38','\u8f39','\u8f3a','\u8f3b','\u8f3c','\u8f3d','\u8f3e', + '\u8f3f','\u8f40','\u8f41','\u8f42','\u8f43','\u8f44','\u8f45', + '\u8f46','\u8f47','\u8f48','\u8f49','\u8f4a','\u8f4b','\u8f4c', + '\u8f4d','\u8f4e','\u8f4f','\u8f50','\u8f51','\u8f52','\u8f53', + '\u8f54','\u8f55','\u8f56','\u8f57','\u8f58','\u8f59','\u8f5a', + '\u8f5b','\u8f5c','\u8f5d','\u8f5e','\u8f5f','\u8f60','\u8f61', + '\u8f62','\u8f63','\u8f64','\u8f65','\u8f66','\u8f67','\u8f68', + '\u8f69','\u8f6a','\u8f6b','\u8f6c','\u8f6d','\u8f6e','\u8f6f', + '\u8f70','\u8f71','\u8f72','\u8f73','\u8f74','\u8f75','\u8f76', + '\u8f77','\u8f78','\u8f79','\u8f7a','\u8f7b','\u8f7c','\u8f7d', + '\u8f7e','\u8f7f','\u8f80','\u8f81','\u8f82','\u8f83','\u8f84', + '\u8f85','\u8f86','\u8f87','\u8f88','\u8f89','\u8f8a','\u8f8b', + '\u8f8c','\u8f8d','\u8f8e','\u8f8f','\u8f90','\u8f91','\u8f92', + '\u8f93','\u8f94','\u8f95','\u8f96','\u8f97','\u8f98','\u8f99', + '\u8f9a','\u8f9b','\u8f9c','\u8f9d','\u8f9e','\u8f9f','\u8fa0', + '\u8fa1','\u8fa2','\u8fa3','\u8fa4','\u8fa5','\u8fa6','\u8fa7', + '\u8fa8','\u8fa9','\u8faa','\u8fab','\u8fac','\u8fad','\u8fae', + '\u8faf','\u8fb0','\u8fb1','\u8fb2','\u8fb3','\u8fb4','\u8fb5', + '\u8fb6','\u8fb7','\u8fb8','\u8fb9','\u8fba','\u8fbb','\u8fbc', + '\u8fbd','\u8fbe','\u8fbf','\u8fc0','\u8fc1','\u8fc2','\u8fc3', + '\u8fc4','\u8fc5','\u8fc6','\u8fc7','\u8fc8','\u8fc9','\u8fca', + '\u8fcb','\u8fcc','\u8fcd','\u8fce','\u8fcf','\u8fd0','\u8fd1', + '\u8fd2','\u8fd3','\u8fd4','\u8fd5','\u8fd6','\u8fd7','\u8fd8', + '\u8fd9','\u8fda','\u8fdb','\u8fdc','\u8fdd','\u8fde','\u8fdf', + '\u8fe0','\u8fe1','\u8fe2','\u8fe3','\u8fe4','\u8fe5','\u8fe6', + '\u8fe7','\u8fe8','\u8fe9','\u8fea','\u8feb','\u8fec','\u8fed', + '\u8fee','\u8fef','\u8ff0','\u8ff1','\u8ff2','\u8ff3','\u8ff4', + '\u8ff5','\u8ff6','\u8ff7','\u8ff8','\u8ff9','\u8ffa','\u8ffb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+36608; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void f9000() { + char[] cs = new char[] { + '\u9000','\u9001','\u9002','\u9003','\u9004','\u9005','\u9006', + '\u9007','\u9008','\u9009','\u900a','\u900b','\u900c','\u900d', + '\u900e','\u900f','\u9010','\u9011','\u9012','\u9013','\u9014', + '\u9015','\u9016','\u9017','\u9018','\u9019','\u901a','\u901b', + '\u901c','\u901d','\u901e','\u901f','\u9020','\u9021','\u9022', + '\u9023','\u9024','\u9025','\u9026','\u9027','\u9028','\u9029', + '\u902a','\u902b','\u902c','\u902d','\u902e','\u902f','\u9030', + '\u9031','\u9032','\u9033','\u9034','\u9035','\u9036','\u9037', + '\u9038','\u9039','\u903a','\u903b','\u903c','\u903d','\u903e', + '\u903f','\u9040','\u9041','\u9042','\u9043','\u9044','\u9045', + '\u9046','\u9047','\u9048','\u9049','\u904a','\u904b','\u904c', + '\u904d','\u904e','\u904f','\u9050','\u9051','\u9052','\u9053', + '\u9054','\u9055','\u9056','\u9057','\u9058','\u9059','\u905a', + '\u905b','\u905c','\u905d','\u905e','\u905f','\u9060','\u9061', + '\u9062','\u9063','\u9064','\u9065','\u9066','\u9067','\u9068', + '\u9069','\u906a','\u906b','\u906c','\u906d','\u906e','\u906f', + '\u9070','\u9071','\u9072','\u9073','\u9074','\u9075','\u9076', + '\u9077','\u9078','\u9079','\u907a','\u907b','\u907c','\u907d', + '\u907e','\u907f','\u9080','\u9081','\u9082','\u9083','\u9084', + '\u9085','\u9086','\u9087','\u9088','\u9089','\u908a','\u908b', + '\u908c','\u908d','\u908e','\u908f','\u9090','\u9091','\u9092', + '\u9093','\u9094','\u9095','\u9096','\u9097','\u9098','\u9099', + '\u909a','\u909b','\u909c','\u909d','\u909e','\u909f','\u90a0', + '\u90a1','\u90a2','\u90a3','\u90a4','\u90a5','\u90a6','\u90a7', + '\u90a8','\u90a9','\u90aa','\u90ab','\u90ac','\u90ad','\u90ae', + '\u90af','\u90b0','\u90b1','\u90b2','\u90b3','\u90b4','\u90b5', + '\u90b6','\u90b7','\u90b8','\u90b9','\u90ba','\u90bb','\u90bc', + '\u90bd','\u90be','\u90bf','\u90c0','\u90c1','\u90c2','\u90c3', + '\u90c4','\u90c5','\u90c6','\u90c7','\u90c8','\u90c9','\u90ca', + '\u90cb','\u90cc','\u90cd','\u90ce','\u90cf','\u90d0','\u90d1', + '\u90d2','\u90d3','\u90d4','\u90d5','\u90d6','\u90d7','\u90d8', + '\u90d9','\u90da','\u90db','\u90dc','\u90dd','\u90de','\u90df', + '\u90e0','\u90e1','\u90e2','\u90e3','\u90e4','\u90e5','\u90e6', + '\u90e7','\u90e8','\u90e9','\u90ea','\u90eb','\u90ec','\u90ed', + '\u90ee','\u90ef','\u90f0','\u90f1','\u90f2','\u90f3','\u90f4', + '\u90f5','\u90f6','\u90f7','\u90f8','\u90f9','\u90fa','\u90fb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+36864; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void f9100() { + char[] cs = new char[] { + '\u9100','\u9101','\u9102','\u9103','\u9104','\u9105','\u9106', + '\u9107','\u9108','\u9109','\u910a','\u910b','\u910c','\u910d', + '\u910e','\u910f','\u9110','\u9111','\u9112','\u9113','\u9114', + '\u9115','\u9116','\u9117','\u9118','\u9119','\u911a','\u911b', + '\u911c','\u911d','\u911e','\u911f','\u9120','\u9121','\u9122', + '\u9123','\u9124','\u9125','\u9126','\u9127','\u9128','\u9129', + '\u912a','\u912b','\u912c','\u912d','\u912e','\u912f','\u9130', + '\u9131','\u9132','\u9133','\u9134','\u9135','\u9136','\u9137', + '\u9138','\u9139','\u913a','\u913b','\u913c','\u913d','\u913e', + '\u913f','\u9140','\u9141','\u9142','\u9143','\u9144','\u9145', + '\u9146','\u9147','\u9148','\u9149','\u914a','\u914b','\u914c', + '\u914d','\u914e','\u914f','\u9150','\u9151','\u9152','\u9153', + '\u9154','\u9155','\u9156','\u9157','\u9158','\u9159','\u915a', + '\u915b','\u915c','\u915d','\u915e','\u915f','\u9160','\u9161', + '\u9162','\u9163','\u9164','\u9165','\u9166','\u9167','\u9168', + '\u9169','\u916a','\u916b','\u916c','\u916d','\u916e','\u916f', + '\u9170','\u9171','\u9172','\u9173','\u9174','\u9175','\u9176', + '\u9177','\u9178','\u9179','\u917a','\u917b','\u917c','\u917d', + '\u917e','\u917f','\u9180','\u9181','\u9182','\u9183','\u9184', + '\u9185','\u9186','\u9187','\u9188','\u9189','\u918a','\u918b', + '\u918c','\u918d','\u918e','\u918f','\u9190','\u9191','\u9192', + '\u9193','\u9194','\u9195','\u9196','\u9197','\u9198','\u9199', + '\u919a','\u919b','\u919c','\u919d','\u919e','\u919f','\u91a0', + '\u91a1','\u91a2','\u91a3','\u91a4','\u91a5','\u91a6','\u91a7', + '\u91a8','\u91a9','\u91aa','\u91ab','\u91ac','\u91ad','\u91ae', + '\u91af','\u91b0','\u91b1','\u91b2','\u91b3','\u91b4','\u91b5', + '\u91b6','\u91b7','\u91b8','\u91b9','\u91ba','\u91bb','\u91bc', + '\u91bd','\u91be','\u91bf','\u91c0','\u91c1','\u91c2','\u91c3', + '\u91c4','\u91c5','\u91c6','\u91c7','\u91c8','\u91c9','\u91ca', + '\u91cb','\u91cc','\u91cd','\u91ce','\u91cf','\u91d0','\u91d1', + '\u91d2','\u91d3','\u91d4','\u91d5','\u91d6','\u91d7','\u91d8', + '\u91d9','\u91da','\u91db','\u91dc','\u91dd','\u91de','\u91df', + '\u91e0','\u91e1','\u91e2','\u91e3','\u91e4','\u91e5','\u91e6', + '\u91e7','\u91e8','\u91e9','\u91ea','\u91eb','\u91ec','\u91ed', + '\u91ee','\u91ef','\u91f0','\u91f1','\u91f2','\u91f3','\u91f4', + '\u91f5','\u91f6','\u91f7','\u91f8','\u91f9','\u91fa','\u91fb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+37120; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void f9200() { + char[] cs = new char[] { + '\u9200','\u9201','\u9202','\u9203','\u9204','\u9205','\u9206', + '\u9207','\u9208','\u9209','\u920a','\u920b','\u920c','\u920d', + '\u920e','\u920f','\u9210','\u9211','\u9212','\u9213','\u9214', + '\u9215','\u9216','\u9217','\u9218','\u9219','\u921a','\u921b', + '\u921c','\u921d','\u921e','\u921f','\u9220','\u9221','\u9222', + '\u9223','\u9224','\u9225','\u9226','\u9227','\u9228','\u9229', + '\u922a','\u922b','\u922c','\u922d','\u922e','\u922f','\u9230', + '\u9231','\u9232','\u9233','\u9234','\u9235','\u9236','\u9237', + '\u9238','\u9239','\u923a','\u923b','\u923c','\u923d','\u923e', + '\u923f','\u9240','\u9241','\u9242','\u9243','\u9244','\u9245', + '\u9246','\u9247','\u9248','\u9249','\u924a','\u924b','\u924c', + '\u924d','\u924e','\u924f','\u9250','\u9251','\u9252','\u9253', + '\u9254','\u9255','\u9256','\u9257','\u9258','\u9259','\u925a', + '\u925b','\u925c','\u925d','\u925e','\u925f','\u9260','\u9261', + '\u9262','\u9263','\u9264','\u9265','\u9266','\u9267','\u9268', + '\u9269','\u926a','\u926b','\u926c','\u926d','\u926e','\u926f', + '\u9270','\u9271','\u9272','\u9273','\u9274','\u9275','\u9276', + '\u9277','\u9278','\u9279','\u927a','\u927b','\u927c','\u927d', + '\u927e','\u927f','\u9280','\u9281','\u9282','\u9283','\u9284', + '\u9285','\u9286','\u9287','\u9288','\u9289','\u928a','\u928b', + '\u928c','\u928d','\u928e','\u928f','\u9290','\u9291','\u9292', + '\u9293','\u9294','\u9295','\u9296','\u9297','\u9298','\u9299', + '\u929a','\u929b','\u929c','\u929d','\u929e','\u929f','\u92a0', + '\u92a1','\u92a2','\u92a3','\u92a4','\u92a5','\u92a6','\u92a7', + '\u92a8','\u92a9','\u92aa','\u92ab','\u92ac','\u92ad','\u92ae', + '\u92af','\u92b0','\u92b1','\u92b2','\u92b3','\u92b4','\u92b5', + '\u92b6','\u92b7','\u92b8','\u92b9','\u92ba','\u92bb','\u92bc', + '\u92bd','\u92be','\u92bf','\u92c0','\u92c1','\u92c2','\u92c3', + '\u92c4','\u92c5','\u92c6','\u92c7','\u92c8','\u92c9','\u92ca', + '\u92cb','\u92cc','\u92cd','\u92ce','\u92cf','\u92d0','\u92d1', + '\u92d2','\u92d3','\u92d4','\u92d5','\u92d6','\u92d7','\u92d8', + '\u92d9','\u92da','\u92db','\u92dc','\u92dd','\u92de','\u92df', + '\u92e0','\u92e1','\u92e2','\u92e3','\u92e4','\u92e5','\u92e6', + '\u92e7','\u92e8','\u92e9','\u92ea','\u92eb','\u92ec','\u92ed', + '\u92ee','\u92ef','\u92f0','\u92f1','\u92f2','\u92f3','\u92f4', + '\u92f5','\u92f6','\u92f7','\u92f8','\u92f9','\u92fa','\u92fb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+37376; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void f9300() { + char[] cs = new char[] { + '\u9300','\u9301','\u9302','\u9303','\u9304','\u9305','\u9306', + '\u9307','\u9308','\u9309','\u930a','\u930b','\u930c','\u930d', + '\u930e','\u930f','\u9310','\u9311','\u9312','\u9313','\u9314', + '\u9315','\u9316','\u9317','\u9318','\u9319','\u931a','\u931b', + '\u931c','\u931d','\u931e','\u931f','\u9320','\u9321','\u9322', + '\u9323','\u9324','\u9325','\u9326','\u9327','\u9328','\u9329', + '\u932a','\u932b','\u932c','\u932d','\u932e','\u932f','\u9330', + '\u9331','\u9332','\u9333','\u9334','\u9335','\u9336','\u9337', + '\u9338','\u9339','\u933a','\u933b','\u933c','\u933d','\u933e', + '\u933f','\u9340','\u9341','\u9342','\u9343','\u9344','\u9345', + '\u9346','\u9347','\u9348','\u9349','\u934a','\u934b','\u934c', + '\u934d','\u934e','\u934f','\u9350','\u9351','\u9352','\u9353', + '\u9354','\u9355','\u9356','\u9357','\u9358','\u9359','\u935a', + '\u935b','\u935c','\u935d','\u935e','\u935f','\u9360','\u9361', + '\u9362','\u9363','\u9364','\u9365','\u9366','\u9367','\u9368', + '\u9369','\u936a','\u936b','\u936c','\u936d','\u936e','\u936f', + '\u9370','\u9371','\u9372','\u9373','\u9374','\u9375','\u9376', + '\u9377','\u9378','\u9379','\u937a','\u937b','\u937c','\u937d', + '\u937e','\u937f','\u9380','\u9381','\u9382','\u9383','\u9384', + '\u9385','\u9386','\u9387','\u9388','\u9389','\u938a','\u938b', + '\u938c','\u938d','\u938e','\u938f','\u9390','\u9391','\u9392', + '\u9393','\u9394','\u9395','\u9396','\u9397','\u9398','\u9399', + '\u939a','\u939b','\u939c','\u939d','\u939e','\u939f','\u93a0', + '\u93a1','\u93a2','\u93a3','\u93a4','\u93a5','\u93a6','\u93a7', + '\u93a8','\u93a9','\u93aa','\u93ab','\u93ac','\u93ad','\u93ae', + '\u93af','\u93b0','\u93b1','\u93b2','\u93b3','\u93b4','\u93b5', + '\u93b6','\u93b7','\u93b8','\u93b9','\u93ba','\u93bb','\u93bc', + '\u93bd','\u93be','\u93bf','\u93c0','\u93c1','\u93c2','\u93c3', + '\u93c4','\u93c5','\u93c6','\u93c7','\u93c8','\u93c9','\u93ca', + '\u93cb','\u93cc','\u93cd','\u93ce','\u93cf','\u93d0','\u93d1', + '\u93d2','\u93d3','\u93d4','\u93d5','\u93d6','\u93d7','\u93d8', + '\u93d9','\u93da','\u93db','\u93dc','\u93dd','\u93de','\u93df', + '\u93e0','\u93e1','\u93e2','\u93e3','\u93e4','\u93e5','\u93e6', + '\u93e7','\u93e8','\u93e9','\u93ea','\u93eb','\u93ec','\u93ed', + '\u93ee','\u93ef','\u93f0','\u93f1','\u93f2','\u93f3','\u93f4', + '\u93f5','\u93f6','\u93f7','\u93f8','\u93f9','\u93fa','\u93fb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+37632; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void f9400() { + char[] cs = new char[] { + '\u9400','\u9401','\u9402','\u9403','\u9404','\u9405','\u9406', + '\u9407','\u9408','\u9409','\u940a','\u940b','\u940c','\u940d', + '\u940e','\u940f','\u9410','\u9411','\u9412','\u9413','\u9414', + '\u9415','\u9416','\u9417','\u9418','\u9419','\u941a','\u941b', + '\u941c','\u941d','\u941e','\u941f','\u9420','\u9421','\u9422', + '\u9423','\u9424','\u9425','\u9426','\u9427','\u9428','\u9429', + '\u942a','\u942b','\u942c','\u942d','\u942e','\u942f','\u9430', + '\u9431','\u9432','\u9433','\u9434','\u9435','\u9436','\u9437', + '\u9438','\u9439','\u943a','\u943b','\u943c','\u943d','\u943e', + '\u943f','\u9440','\u9441','\u9442','\u9443','\u9444','\u9445', + '\u9446','\u9447','\u9448','\u9449','\u944a','\u944b','\u944c', + '\u944d','\u944e','\u944f','\u9450','\u9451','\u9452','\u9453', + '\u9454','\u9455','\u9456','\u9457','\u9458','\u9459','\u945a', + '\u945b','\u945c','\u945d','\u945e','\u945f','\u9460','\u9461', + '\u9462','\u9463','\u9464','\u9465','\u9466','\u9467','\u9468', + '\u9469','\u946a','\u946b','\u946c','\u946d','\u946e','\u946f', + '\u9470','\u9471','\u9472','\u9473','\u9474','\u9475','\u9476', + '\u9477','\u9478','\u9479','\u947a','\u947b','\u947c','\u947d', + '\u947e','\u947f','\u9480','\u9481','\u9482','\u9483','\u9484', + '\u9485','\u9486','\u9487','\u9488','\u9489','\u948a','\u948b', + '\u948c','\u948d','\u948e','\u948f','\u9490','\u9491','\u9492', + '\u9493','\u9494','\u9495','\u9496','\u9497','\u9498','\u9499', + '\u949a','\u949b','\u949c','\u949d','\u949e','\u949f','\u94a0', + '\u94a1','\u94a2','\u94a3','\u94a4','\u94a5','\u94a6','\u94a7', + '\u94a8','\u94a9','\u94aa','\u94ab','\u94ac','\u94ad','\u94ae', + '\u94af','\u94b0','\u94b1','\u94b2','\u94b3','\u94b4','\u94b5', + '\u94b6','\u94b7','\u94b8','\u94b9','\u94ba','\u94bb','\u94bc', + '\u94bd','\u94be','\u94bf','\u94c0','\u94c1','\u94c2','\u94c3', + '\u94c4','\u94c5','\u94c6','\u94c7','\u94c8','\u94c9','\u94ca', + '\u94cb','\u94cc','\u94cd','\u94ce','\u94cf','\u94d0','\u94d1', + '\u94d2','\u94d3','\u94d4','\u94d5','\u94d6','\u94d7','\u94d8', + '\u94d9','\u94da','\u94db','\u94dc','\u94dd','\u94de','\u94df', + '\u94e0','\u94e1','\u94e2','\u94e3','\u94e4','\u94e5','\u94e6', + '\u94e7','\u94e8','\u94e9','\u94ea','\u94eb','\u94ec','\u94ed', + '\u94ee','\u94ef','\u94f0','\u94f1','\u94f2','\u94f3','\u94f4', + '\u94f5','\u94f6','\u94f7','\u94f8','\u94f9','\u94fa','\u94fb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+37888; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void f9500() { + char[] cs = new char[] { + '\u9500','\u9501','\u9502','\u9503','\u9504','\u9505','\u9506', + '\u9507','\u9508','\u9509','\u950a','\u950b','\u950c','\u950d', + '\u950e','\u950f','\u9510','\u9511','\u9512','\u9513','\u9514', + '\u9515','\u9516','\u9517','\u9518','\u9519','\u951a','\u951b', + '\u951c','\u951d','\u951e','\u951f','\u9520','\u9521','\u9522', + '\u9523','\u9524','\u9525','\u9526','\u9527','\u9528','\u9529', + '\u952a','\u952b','\u952c','\u952d','\u952e','\u952f','\u9530', + '\u9531','\u9532','\u9533','\u9534','\u9535','\u9536','\u9537', + '\u9538','\u9539','\u953a','\u953b','\u953c','\u953d','\u953e', + '\u953f','\u9540','\u9541','\u9542','\u9543','\u9544','\u9545', + '\u9546','\u9547','\u9548','\u9549','\u954a','\u954b','\u954c', + '\u954d','\u954e','\u954f','\u9550','\u9551','\u9552','\u9553', + '\u9554','\u9555','\u9556','\u9557','\u9558','\u9559','\u955a', + '\u955b','\u955c','\u955d','\u955e','\u955f','\u9560','\u9561', + '\u9562','\u9563','\u9564','\u9565','\u9566','\u9567','\u9568', + '\u9569','\u956a','\u956b','\u956c','\u956d','\u956e','\u956f', + '\u9570','\u9571','\u9572','\u9573','\u9574','\u9575','\u9576', + '\u9577','\u9578','\u9579','\u957a','\u957b','\u957c','\u957d', + '\u957e','\u957f','\u9580','\u9581','\u9582','\u9583','\u9584', + '\u9585','\u9586','\u9587','\u9588','\u9589','\u958a','\u958b', + '\u958c','\u958d','\u958e','\u958f','\u9590','\u9591','\u9592', + '\u9593','\u9594','\u9595','\u9596','\u9597','\u9598','\u9599', + '\u959a','\u959b','\u959c','\u959d','\u959e','\u959f','\u95a0', + '\u95a1','\u95a2','\u95a3','\u95a4','\u95a5','\u95a6','\u95a7', + '\u95a8','\u95a9','\u95aa','\u95ab','\u95ac','\u95ad','\u95ae', + '\u95af','\u95b0','\u95b1','\u95b2','\u95b3','\u95b4','\u95b5', + '\u95b6','\u95b7','\u95b8','\u95b9','\u95ba','\u95bb','\u95bc', + '\u95bd','\u95be','\u95bf','\u95c0','\u95c1','\u95c2','\u95c3', + '\u95c4','\u95c5','\u95c6','\u95c7','\u95c8','\u95c9','\u95ca', + '\u95cb','\u95cc','\u95cd','\u95ce','\u95cf','\u95d0','\u95d1', + '\u95d2','\u95d3','\u95d4','\u95d5','\u95d6','\u95d7','\u95d8', + '\u95d9','\u95da','\u95db','\u95dc','\u95dd','\u95de','\u95df', + '\u95e0','\u95e1','\u95e2','\u95e3','\u95e4','\u95e5','\u95e6', + '\u95e7','\u95e8','\u95e9','\u95ea','\u95eb','\u95ec','\u95ed', + '\u95ee','\u95ef','\u95f0','\u95f1','\u95f2','\u95f3','\u95f4', + '\u95f5','\u95f6','\u95f7','\u95f8','\u95f9','\u95fa','\u95fb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+38144; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void f9600() { + char[] cs = new char[] { + '\u9600','\u9601','\u9602','\u9603','\u9604','\u9605','\u9606', + '\u9607','\u9608','\u9609','\u960a','\u960b','\u960c','\u960d', + '\u960e','\u960f','\u9610','\u9611','\u9612','\u9613','\u9614', + '\u9615','\u9616','\u9617','\u9618','\u9619','\u961a','\u961b', + '\u961c','\u961d','\u961e','\u961f','\u9620','\u9621','\u9622', + '\u9623','\u9624','\u9625','\u9626','\u9627','\u9628','\u9629', + '\u962a','\u962b','\u962c','\u962d','\u962e','\u962f','\u9630', + '\u9631','\u9632','\u9633','\u9634','\u9635','\u9636','\u9637', + '\u9638','\u9639','\u963a','\u963b','\u963c','\u963d','\u963e', + '\u963f','\u9640','\u9641','\u9642','\u9643','\u9644','\u9645', + '\u9646','\u9647','\u9648','\u9649','\u964a','\u964b','\u964c', + '\u964d','\u964e','\u964f','\u9650','\u9651','\u9652','\u9653', + '\u9654','\u9655','\u9656','\u9657','\u9658','\u9659','\u965a', + '\u965b','\u965c','\u965d','\u965e','\u965f','\u9660','\u9661', + '\u9662','\u9663','\u9664','\u9665','\u9666','\u9667','\u9668', + '\u9669','\u966a','\u966b','\u966c','\u966d','\u966e','\u966f', + '\u9670','\u9671','\u9672','\u9673','\u9674','\u9675','\u9676', + '\u9677','\u9678','\u9679','\u967a','\u967b','\u967c','\u967d', + '\u967e','\u967f','\u9680','\u9681','\u9682','\u9683','\u9684', + '\u9685','\u9686','\u9687','\u9688','\u9689','\u968a','\u968b', + '\u968c','\u968d','\u968e','\u968f','\u9690','\u9691','\u9692', + '\u9693','\u9694','\u9695','\u9696','\u9697','\u9698','\u9699', + '\u969a','\u969b','\u969c','\u969d','\u969e','\u969f','\u96a0', + '\u96a1','\u96a2','\u96a3','\u96a4','\u96a5','\u96a6','\u96a7', + '\u96a8','\u96a9','\u96aa','\u96ab','\u96ac','\u96ad','\u96ae', + '\u96af','\u96b0','\u96b1','\u96b2','\u96b3','\u96b4','\u96b5', + '\u96b6','\u96b7','\u96b8','\u96b9','\u96ba','\u96bb','\u96bc', + '\u96bd','\u96be','\u96bf','\u96c0','\u96c1','\u96c2','\u96c3', + '\u96c4','\u96c5','\u96c6','\u96c7','\u96c8','\u96c9','\u96ca', + '\u96cb','\u96cc','\u96cd','\u96ce','\u96cf','\u96d0','\u96d1', + '\u96d2','\u96d3','\u96d4','\u96d5','\u96d6','\u96d7','\u96d8', + '\u96d9','\u96da','\u96db','\u96dc','\u96dd','\u96de','\u96df', + '\u96e0','\u96e1','\u96e2','\u96e3','\u96e4','\u96e5','\u96e6', + '\u96e7','\u96e8','\u96e9','\u96ea','\u96eb','\u96ec','\u96ed', + '\u96ee','\u96ef','\u96f0','\u96f1','\u96f2','\u96f3','\u96f4', + '\u96f5','\u96f6','\u96f7','\u96f8','\u96f9','\u96fa','\u96fb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+38400; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void f9700() { + char[] cs = new char[] { + '\u9700','\u9701','\u9702','\u9703','\u9704','\u9705','\u9706', + '\u9707','\u9708','\u9709','\u970a','\u970b','\u970c','\u970d', + '\u970e','\u970f','\u9710','\u9711','\u9712','\u9713','\u9714', + '\u9715','\u9716','\u9717','\u9718','\u9719','\u971a','\u971b', + '\u971c','\u971d','\u971e','\u971f','\u9720','\u9721','\u9722', + '\u9723','\u9724','\u9725','\u9726','\u9727','\u9728','\u9729', + '\u972a','\u972b','\u972c','\u972d','\u972e','\u972f','\u9730', + '\u9731','\u9732','\u9733','\u9734','\u9735','\u9736','\u9737', + '\u9738','\u9739','\u973a','\u973b','\u973c','\u973d','\u973e', + '\u973f','\u9740','\u9741','\u9742','\u9743','\u9744','\u9745', + '\u9746','\u9747','\u9748','\u9749','\u974a','\u974b','\u974c', + '\u974d','\u974e','\u974f','\u9750','\u9751','\u9752','\u9753', + '\u9754','\u9755','\u9756','\u9757','\u9758','\u9759','\u975a', + '\u975b','\u975c','\u975d','\u975e','\u975f','\u9760','\u9761', + '\u9762','\u9763','\u9764','\u9765','\u9766','\u9767','\u9768', + '\u9769','\u976a','\u976b','\u976c','\u976d','\u976e','\u976f', + '\u9770','\u9771','\u9772','\u9773','\u9774','\u9775','\u9776', + '\u9777','\u9778','\u9779','\u977a','\u977b','\u977c','\u977d', + '\u977e','\u977f','\u9780','\u9781','\u9782','\u9783','\u9784', + '\u9785','\u9786','\u9787','\u9788','\u9789','\u978a','\u978b', + '\u978c','\u978d','\u978e','\u978f','\u9790','\u9791','\u9792', + '\u9793','\u9794','\u9795','\u9796','\u9797','\u9798','\u9799', + '\u979a','\u979b','\u979c','\u979d','\u979e','\u979f','\u97a0', + '\u97a1','\u97a2','\u97a3','\u97a4','\u97a5','\u97a6','\u97a7', + '\u97a8','\u97a9','\u97aa','\u97ab','\u97ac','\u97ad','\u97ae', + '\u97af','\u97b0','\u97b1','\u97b2','\u97b3','\u97b4','\u97b5', + '\u97b6','\u97b7','\u97b8','\u97b9','\u97ba','\u97bb','\u97bc', + '\u97bd','\u97be','\u97bf','\u97c0','\u97c1','\u97c2','\u97c3', + '\u97c4','\u97c5','\u97c6','\u97c7','\u97c8','\u97c9','\u97ca', + '\u97cb','\u97cc','\u97cd','\u97ce','\u97cf','\u97d0','\u97d1', + '\u97d2','\u97d3','\u97d4','\u97d5','\u97d6','\u97d7','\u97d8', + '\u97d9','\u97da','\u97db','\u97dc','\u97dd','\u97de','\u97df', + '\u97e0','\u97e1','\u97e2','\u97e3','\u97e4','\u97e5','\u97e6', + '\u97e7','\u97e8','\u97e9','\u97ea','\u97eb','\u97ec','\u97ed', + '\u97ee','\u97ef','\u97f0','\u97f1','\u97f2','\u97f3','\u97f4', + '\u97f5','\u97f6','\u97f7','\u97f8','\u97f9','\u97fa','\u97fb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+38656; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void f9800() { + char[] cs = new char[] { + '\u9800','\u9801','\u9802','\u9803','\u9804','\u9805','\u9806', + '\u9807','\u9808','\u9809','\u980a','\u980b','\u980c','\u980d', + '\u980e','\u980f','\u9810','\u9811','\u9812','\u9813','\u9814', + '\u9815','\u9816','\u9817','\u9818','\u9819','\u981a','\u981b', + '\u981c','\u981d','\u981e','\u981f','\u9820','\u9821','\u9822', + '\u9823','\u9824','\u9825','\u9826','\u9827','\u9828','\u9829', + '\u982a','\u982b','\u982c','\u982d','\u982e','\u982f','\u9830', + '\u9831','\u9832','\u9833','\u9834','\u9835','\u9836','\u9837', + '\u9838','\u9839','\u983a','\u983b','\u983c','\u983d','\u983e', + '\u983f','\u9840','\u9841','\u9842','\u9843','\u9844','\u9845', + '\u9846','\u9847','\u9848','\u9849','\u984a','\u984b','\u984c', + '\u984d','\u984e','\u984f','\u9850','\u9851','\u9852','\u9853', + '\u9854','\u9855','\u9856','\u9857','\u9858','\u9859','\u985a', + '\u985b','\u985c','\u985d','\u985e','\u985f','\u9860','\u9861', + '\u9862','\u9863','\u9864','\u9865','\u9866','\u9867','\u9868', + '\u9869','\u986a','\u986b','\u986c','\u986d','\u986e','\u986f', + '\u9870','\u9871','\u9872','\u9873','\u9874','\u9875','\u9876', + '\u9877','\u9878','\u9879','\u987a','\u987b','\u987c','\u987d', + '\u987e','\u987f','\u9880','\u9881','\u9882','\u9883','\u9884', + '\u9885','\u9886','\u9887','\u9888','\u9889','\u988a','\u988b', + '\u988c','\u988d','\u988e','\u988f','\u9890','\u9891','\u9892', + '\u9893','\u9894','\u9895','\u9896','\u9897','\u9898','\u9899', + '\u989a','\u989b','\u989c','\u989d','\u989e','\u989f','\u98a0', + '\u98a1','\u98a2','\u98a3','\u98a4','\u98a5','\u98a6','\u98a7', + '\u98a8','\u98a9','\u98aa','\u98ab','\u98ac','\u98ad','\u98ae', + '\u98af','\u98b0','\u98b1','\u98b2','\u98b3','\u98b4','\u98b5', + '\u98b6','\u98b7','\u98b8','\u98b9','\u98ba','\u98bb','\u98bc', + '\u98bd','\u98be','\u98bf','\u98c0','\u98c1','\u98c2','\u98c3', + '\u98c4','\u98c5','\u98c6','\u98c7','\u98c8','\u98c9','\u98ca', + '\u98cb','\u98cc','\u98cd','\u98ce','\u98cf','\u98d0','\u98d1', + '\u98d2','\u98d3','\u98d4','\u98d5','\u98d6','\u98d7','\u98d8', + '\u98d9','\u98da','\u98db','\u98dc','\u98dd','\u98de','\u98df', + '\u98e0','\u98e1','\u98e2','\u98e3','\u98e4','\u98e5','\u98e6', + '\u98e7','\u98e8','\u98e9','\u98ea','\u98eb','\u98ec','\u98ed', + '\u98ee','\u98ef','\u98f0','\u98f1','\u98f2','\u98f3','\u98f4', + '\u98f5','\u98f6','\u98f7','\u98f8','\u98f9','\u98fa','\u98fb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+38912; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void f9900() { + char[] cs = new char[] { + '\u9900','\u9901','\u9902','\u9903','\u9904','\u9905','\u9906', + '\u9907','\u9908','\u9909','\u990a','\u990b','\u990c','\u990d', + '\u990e','\u990f','\u9910','\u9911','\u9912','\u9913','\u9914', + '\u9915','\u9916','\u9917','\u9918','\u9919','\u991a','\u991b', + '\u991c','\u991d','\u991e','\u991f','\u9920','\u9921','\u9922', + '\u9923','\u9924','\u9925','\u9926','\u9927','\u9928','\u9929', + '\u992a','\u992b','\u992c','\u992d','\u992e','\u992f','\u9930', + '\u9931','\u9932','\u9933','\u9934','\u9935','\u9936','\u9937', + '\u9938','\u9939','\u993a','\u993b','\u993c','\u993d','\u993e', + '\u993f','\u9940','\u9941','\u9942','\u9943','\u9944','\u9945', + '\u9946','\u9947','\u9948','\u9949','\u994a','\u994b','\u994c', + '\u994d','\u994e','\u994f','\u9950','\u9951','\u9952','\u9953', + '\u9954','\u9955','\u9956','\u9957','\u9958','\u9959','\u995a', + '\u995b','\u995c','\u995d','\u995e','\u995f','\u9960','\u9961', + '\u9962','\u9963','\u9964','\u9965','\u9966','\u9967','\u9968', + '\u9969','\u996a','\u996b','\u996c','\u996d','\u996e','\u996f', + '\u9970','\u9971','\u9972','\u9973','\u9974','\u9975','\u9976', + '\u9977','\u9978','\u9979','\u997a','\u997b','\u997c','\u997d', + '\u997e','\u997f','\u9980','\u9981','\u9982','\u9983','\u9984', + '\u9985','\u9986','\u9987','\u9988','\u9989','\u998a','\u998b', + '\u998c','\u998d','\u998e','\u998f','\u9990','\u9991','\u9992', + '\u9993','\u9994','\u9995','\u9996','\u9997','\u9998','\u9999', + '\u999a','\u999b','\u999c','\u999d','\u999e','\u999f','\u99a0', + '\u99a1','\u99a2','\u99a3','\u99a4','\u99a5','\u99a6','\u99a7', + '\u99a8','\u99a9','\u99aa','\u99ab','\u99ac','\u99ad','\u99ae', + '\u99af','\u99b0','\u99b1','\u99b2','\u99b3','\u99b4','\u99b5', + '\u99b6','\u99b7','\u99b8','\u99b9','\u99ba','\u99bb','\u99bc', + '\u99bd','\u99be','\u99bf','\u99c0','\u99c1','\u99c2','\u99c3', + '\u99c4','\u99c5','\u99c6','\u99c7','\u99c8','\u99c9','\u99ca', + '\u99cb','\u99cc','\u99cd','\u99ce','\u99cf','\u99d0','\u99d1', + '\u99d2','\u99d3','\u99d4','\u99d5','\u99d6','\u99d7','\u99d8', + '\u99d9','\u99da','\u99db','\u99dc','\u99dd','\u99de','\u99df', + '\u99e0','\u99e1','\u99e2','\u99e3','\u99e4','\u99e5','\u99e6', + '\u99e7','\u99e8','\u99e9','\u99ea','\u99eb','\u99ec','\u99ed', + '\u99ee','\u99ef','\u99f0','\u99f1','\u99f2','\u99f3','\u99f4', + '\u99f5','\u99f6','\u99f7','\u99f8','\u99f9','\u99fa','\u99fb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+39168; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void f9a00() { + char[] cs = new char[] { + '\u9a00','\u9a01','\u9a02','\u9a03','\u9a04','\u9a05','\u9a06', + '\u9a07','\u9a08','\u9a09','\u9a0a','\u9a0b','\u9a0c','\u9a0d', + '\u9a0e','\u9a0f','\u9a10','\u9a11','\u9a12','\u9a13','\u9a14', + '\u9a15','\u9a16','\u9a17','\u9a18','\u9a19','\u9a1a','\u9a1b', + '\u9a1c','\u9a1d','\u9a1e','\u9a1f','\u9a20','\u9a21','\u9a22', + '\u9a23','\u9a24','\u9a25','\u9a26','\u9a27','\u9a28','\u9a29', + '\u9a2a','\u9a2b','\u9a2c','\u9a2d','\u9a2e','\u9a2f','\u9a30', + '\u9a31','\u9a32','\u9a33','\u9a34','\u9a35','\u9a36','\u9a37', + '\u9a38','\u9a39','\u9a3a','\u9a3b','\u9a3c','\u9a3d','\u9a3e', + '\u9a3f','\u9a40','\u9a41','\u9a42','\u9a43','\u9a44','\u9a45', + '\u9a46','\u9a47','\u9a48','\u9a49','\u9a4a','\u9a4b','\u9a4c', + '\u9a4d','\u9a4e','\u9a4f','\u9a50','\u9a51','\u9a52','\u9a53', + '\u9a54','\u9a55','\u9a56','\u9a57','\u9a58','\u9a59','\u9a5a', + '\u9a5b','\u9a5c','\u9a5d','\u9a5e','\u9a5f','\u9a60','\u9a61', + '\u9a62','\u9a63','\u9a64','\u9a65','\u9a66','\u9a67','\u9a68', + '\u9a69','\u9a6a','\u9a6b','\u9a6c','\u9a6d','\u9a6e','\u9a6f', + '\u9a70','\u9a71','\u9a72','\u9a73','\u9a74','\u9a75','\u9a76', + '\u9a77','\u9a78','\u9a79','\u9a7a','\u9a7b','\u9a7c','\u9a7d', + '\u9a7e','\u9a7f','\u9a80','\u9a81','\u9a82','\u9a83','\u9a84', + '\u9a85','\u9a86','\u9a87','\u9a88','\u9a89','\u9a8a','\u9a8b', + '\u9a8c','\u9a8d','\u9a8e','\u9a8f','\u9a90','\u9a91','\u9a92', + '\u9a93','\u9a94','\u9a95','\u9a96','\u9a97','\u9a98','\u9a99', + '\u9a9a','\u9a9b','\u9a9c','\u9a9d','\u9a9e','\u9a9f','\u9aa0', + '\u9aa1','\u9aa2','\u9aa3','\u9aa4','\u9aa5','\u9aa6','\u9aa7', + '\u9aa8','\u9aa9','\u9aaa','\u9aab','\u9aac','\u9aad','\u9aae', + '\u9aaf','\u9ab0','\u9ab1','\u9ab2','\u9ab3','\u9ab4','\u9ab5', + '\u9ab6','\u9ab7','\u9ab8','\u9ab9','\u9aba','\u9abb','\u9abc', + '\u9abd','\u9abe','\u9abf','\u9ac0','\u9ac1','\u9ac2','\u9ac3', + '\u9ac4','\u9ac5','\u9ac6','\u9ac7','\u9ac8','\u9ac9','\u9aca', + '\u9acb','\u9acc','\u9acd','\u9ace','\u9acf','\u9ad0','\u9ad1', + '\u9ad2','\u9ad3','\u9ad4','\u9ad5','\u9ad6','\u9ad7','\u9ad8', + '\u9ad9','\u9ada','\u9adb','\u9adc','\u9add','\u9ade','\u9adf', + '\u9ae0','\u9ae1','\u9ae2','\u9ae3','\u9ae4','\u9ae5','\u9ae6', + '\u9ae7','\u9ae8','\u9ae9','\u9aea','\u9aeb','\u9aec','\u9aed', + '\u9aee','\u9aef','\u9af0','\u9af1','\u9af2','\u9af3','\u9af4', + '\u9af5','\u9af6','\u9af7','\u9af8','\u9af9','\u9afa','\u9afb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+39424; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void f9b00() { + char[] cs = new char[] { + '\u9b00','\u9b01','\u9b02','\u9b03','\u9b04','\u9b05','\u9b06', + '\u9b07','\u9b08','\u9b09','\u9b0a','\u9b0b','\u9b0c','\u9b0d', + '\u9b0e','\u9b0f','\u9b10','\u9b11','\u9b12','\u9b13','\u9b14', + '\u9b15','\u9b16','\u9b17','\u9b18','\u9b19','\u9b1a','\u9b1b', + '\u9b1c','\u9b1d','\u9b1e','\u9b1f','\u9b20','\u9b21','\u9b22', + '\u9b23','\u9b24','\u9b25','\u9b26','\u9b27','\u9b28','\u9b29', + '\u9b2a','\u9b2b','\u9b2c','\u9b2d','\u9b2e','\u9b2f','\u9b30', + '\u9b31','\u9b32','\u9b33','\u9b34','\u9b35','\u9b36','\u9b37', + '\u9b38','\u9b39','\u9b3a','\u9b3b','\u9b3c','\u9b3d','\u9b3e', + '\u9b3f','\u9b40','\u9b41','\u9b42','\u9b43','\u9b44','\u9b45', + '\u9b46','\u9b47','\u9b48','\u9b49','\u9b4a','\u9b4b','\u9b4c', + '\u9b4d','\u9b4e','\u9b4f','\u9b50','\u9b51','\u9b52','\u9b53', + '\u9b54','\u9b55','\u9b56','\u9b57','\u9b58','\u9b59','\u9b5a', + '\u9b5b','\u9b5c','\u9b5d','\u9b5e','\u9b5f','\u9b60','\u9b61', + '\u9b62','\u9b63','\u9b64','\u9b65','\u9b66','\u9b67','\u9b68', + '\u9b69','\u9b6a','\u9b6b','\u9b6c','\u9b6d','\u9b6e','\u9b6f', + '\u9b70','\u9b71','\u9b72','\u9b73','\u9b74','\u9b75','\u9b76', + '\u9b77','\u9b78','\u9b79','\u9b7a','\u9b7b','\u9b7c','\u9b7d', + '\u9b7e','\u9b7f','\u9b80','\u9b81','\u9b82','\u9b83','\u9b84', + '\u9b85','\u9b86','\u9b87','\u9b88','\u9b89','\u9b8a','\u9b8b', + '\u9b8c','\u9b8d','\u9b8e','\u9b8f','\u9b90','\u9b91','\u9b92', + '\u9b93','\u9b94','\u9b95','\u9b96','\u9b97','\u9b98','\u9b99', + '\u9b9a','\u9b9b','\u9b9c','\u9b9d','\u9b9e','\u9b9f','\u9ba0', + '\u9ba1','\u9ba2','\u9ba3','\u9ba4','\u9ba5','\u9ba6','\u9ba7', + '\u9ba8','\u9ba9','\u9baa','\u9bab','\u9bac','\u9bad','\u9bae', + '\u9baf','\u9bb0','\u9bb1','\u9bb2','\u9bb3','\u9bb4','\u9bb5', + '\u9bb6','\u9bb7','\u9bb8','\u9bb9','\u9bba','\u9bbb','\u9bbc', + '\u9bbd','\u9bbe','\u9bbf','\u9bc0','\u9bc1','\u9bc2','\u9bc3', + '\u9bc4','\u9bc5','\u9bc6','\u9bc7','\u9bc8','\u9bc9','\u9bca', + '\u9bcb','\u9bcc','\u9bcd','\u9bce','\u9bcf','\u9bd0','\u9bd1', + '\u9bd2','\u9bd3','\u9bd4','\u9bd5','\u9bd6','\u9bd7','\u9bd8', + '\u9bd9','\u9bda','\u9bdb','\u9bdc','\u9bdd','\u9bde','\u9bdf', + '\u9be0','\u9be1','\u9be2','\u9be3','\u9be4','\u9be5','\u9be6', + '\u9be7','\u9be8','\u9be9','\u9bea','\u9beb','\u9bec','\u9bed', + '\u9bee','\u9bef','\u9bf0','\u9bf1','\u9bf2','\u9bf3','\u9bf4', + '\u9bf5','\u9bf6','\u9bf7','\u9bf8','\u9bf9','\u9bfa','\u9bfb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+39680; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void f9c00() { + char[] cs = new char[] { + '\u9c00','\u9c01','\u9c02','\u9c03','\u9c04','\u9c05','\u9c06', + '\u9c07','\u9c08','\u9c09','\u9c0a','\u9c0b','\u9c0c','\u9c0d', + '\u9c0e','\u9c0f','\u9c10','\u9c11','\u9c12','\u9c13','\u9c14', + '\u9c15','\u9c16','\u9c17','\u9c18','\u9c19','\u9c1a','\u9c1b', + '\u9c1c','\u9c1d','\u9c1e','\u9c1f','\u9c20','\u9c21','\u9c22', + '\u9c23','\u9c24','\u9c25','\u9c26','\u9c27','\u9c28','\u9c29', + '\u9c2a','\u9c2b','\u9c2c','\u9c2d','\u9c2e','\u9c2f','\u9c30', + '\u9c31','\u9c32','\u9c33','\u9c34','\u9c35','\u9c36','\u9c37', + '\u9c38','\u9c39','\u9c3a','\u9c3b','\u9c3c','\u9c3d','\u9c3e', + '\u9c3f','\u9c40','\u9c41','\u9c42','\u9c43','\u9c44','\u9c45', + '\u9c46','\u9c47','\u9c48','\u9c49','\u9c4a','\u9c4b','\u9c4c', + '\u9c4d','\u9c4e','\u9c4f','\u9c50','\u9c51','\u9c52','\u9c53', + '\u9c54','\u9c55','\u9c56','\u9c57','\u9c58','\u9c59','\u9c5a', + '\u9c5b','\u9c5c','\u9c5d','\u9c5e','\u9c5f','\u9c60','\u9c61', + '\u9c62','\u9c63','\u9c64','\u9c65','\u9c66','\u9c67','\u9c68', + '\u9c69','\u9c6a','\u9c6b','\u9c6c','\u9c6d','\u9c6e','\u9c6f', + '\u9c70','\u9c71','\u9c72','\u9c73','\u9c74','\u9c75','\u9c76', + '\u9c77','\u9c78','\u9c79','\u9c7a','\u9c7b','\u9c7c','\u9c7d', + '\u9c7e','\u9c7f','\u9c80','\u9c81','\u9c82','\u9c83','\u9c84', + '\u9c85','\u9c86','\u9c87','\u9c88','\u9c89','\u9c8a','\u9c8b', + '\u9c8c','\u9c8d','\u9c8e','\u9c8f','\u9c90','\u9c91','\u9c92', + '\u9c93','\u9c94','\u9c95','\u9c96','\u9c97','\u9c98','\u9c99', + '\u9c9a','\u9c9b','\u9c9c','\u9c9d','\u9c9e','\u9c9f','\u9ca0', + '\u9ca1','\u9ca2','\u9ca3','\u9ca4','\u9ca5','\u9ca6','\u9ca7', + '\u9ca8','\u9ca9','\u9caa','\u9cab','\u9cac','\u9cad','\u9cae', + '\u9caf','\u9cb0','\u9cb1','\u9cb2','\u9cb3','\u9cb4','\u9cb5', + '\u9cb6','\u9cb7','\u9cb8','\u9cb9','\u9cba','\u9cbb','\u9cbc', + '\u9cbd','\u9cbe','\u9cbf','\u9cc0','\u9cc1','\u9cc2','\u9cc3', + '\u9cc4','\u9cc5','\u9cc6','\u9cc7','\u9cc8','\u9cc9','\u9cca', + '\u9ccb','\u9ccc','\u9ccd','\u9cce','\u9ccf','\u9cd0','\u9cd1', + '\u9cd2','\u9cd3','\u9cd4','\u9cd5','\u9cd6','\u9cd7','\u9cd8', + '\u9cd9','\u9cda','\u9cdb','\u9cdc','\u9cdd','\u9cde','\u9cdf', + '\u9ce0','\u9ce1','\u9ce2','\u9ce3','\u9ce4','\u9ce5','\u9ce6', + '\u9ce7','\u9ce8','\u9ce9','\u9cea','\u9ceb','\u9cec','\u9ced', + '\u9cee','\u9cef','\u9cf0','\u9cf1','\u9cf2','\u9cf3','\u9cf4', + '\u9cf5','\u9cf6','\u9cf7','\u9cf8','\u9cf9','\u9cfa','\u9cfb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+39936; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void f9d00() { + char[] cs = new char[] { + '\u9d00','\u9d01','\u9d02','\u9d03','\u9d04','\u9d05','\u9d06', + '\u9d07','\u9d08','\u9d09','\u9d0a','\u9d0b','\u9d0c','\u9d0d', + '\u9d0e','\u9d0f','\u9d10','\u9d11','\u9d12','\u9d13','\u9d14', + '\u9d15','\u9d16','\u9d17','\u9d18','\u9d19','\u9d1a','\u9d1b', + '\u9d1c','\u9d1d','\u9d1e','\u9d1f','\u9d20','\u9d21','\u9d22', + '\u9d23','\u9d24','\u9d25','\u9d26','\u9d27','\u9d28','\u9d29', + '\u9d2a','\u9d2b','\u9d2c','\u9d2d','\u9d2e','\u9d2f','\u9d30', + '\u9d31','\u9d32','\u9d33','\u9d34','\u9d35','\u9d36','\u9d37', + '\u9d38','\u9d39','\u9d3a','\u9d3b','\u9d3c','\u9d3d','\u9d3e', + '\u9d3f','\u9d40','\u9d41','\u9d42','\u9d43','\u9d44','\u9d45', + '\u9d46','\u9d47','\u9d48','\u9d49','\u9d4a','\u9d4b','\u9d4c', + '\u9d4d','\u9d4e','\u9d4f','\u9d50','\u9d51','\u9d52','\u9d53', + '\u9d54','\u9d55','\u9d56','\u9d57','\u9d58','\u9d59','\u9d5a', + '\u9d5b','\u9d5c','\u9d5d','\u9d5e','\u9d5f','\u9d60','\u9d61', + '\u9d62','\u9d63','\u9d64','\u9d65','\u9d66','\u9d67','\u9d68', + '\u9d69','\u9d6a','\u9d6b','\u9d6c','\u9d6d','\u9d6e','\u9d6f', + '\u9d70','\u9d71','\u9d72','\u9d73','\u9d74','\u9d75','\u9d76', + '\u9d77','\u9d78','\u9d79','\u9d7a','\u9d7b','\u9d7c','\u9d7d', + '\u9d7e','\u9d7f','\u9d80','\u9d81','\u9d82','\u9d83','\u9d84', + '\u9d85','\u9d86','\u9d87','\u9d88','\u9d89','\u9d8a','\u9d8b', + '\u9d8c','\u9d8d','\u9d8e','\u9d8f','\u9d90','\u9d91','\u9d92', + '\u9d93','\u9d94','\u9d95','\u9d96','\u9d97','\u9d98','\u9d99', + '\u9d9a','\u9d9b','\u9d9c','\u9d9d','\u9d9e','\u9d9f','\u9da0', + '\u9da1','\u9da2','\u9da3','\u9da4','\u9da5','\u9da6','\u9da7', + '\u9da8','\u9da9','\u9daa','\u9dab','\u9dac','\u9dad','\u9dae', + '\u9daf','\u9db0','\u9db1','\u9db2','\u9db3','\u9db4','\u9db5', + '\u9db6','\u9db7','\u9db8','\u9db9','\u9dba','\u9dbb','\u9dbc', + '\u9dbd','\u9dbe','\u9dbf','\u9dc0','\u9dc1','\u9dc2','\u9dc3', + '\u9dc4','\u9dc5','\u9dc6','\u9dc7','\u9dc8','\u9dc9','\u9dca', + '\u9dcb','\u9dcc','\u9dcd','\u9dce','\u9dcf','\u9dd0','\u9dd1', + '\u9dd2','\u9dd3','\u9dd4','\u9dd5','\u9dd6','\u9dd7','\u9dd8', + '\u9dd9','\u9dda','\u9ddb','\u9ddc','\u9ddd','\u9dde','\u9ddf', + '\u9de0','\u9de1','\u9de2','\u9de3','\u9de4','\u9de5','\u9de6', + '\u9de7','\u9de8','\u9de9','\u9dea','\u9deb','\u9dec','\u9ded', + '\u9dee','\u9def','\u9df0','\u9df1','\u9df2','\u9df3','\u9df4', + '\u9df5','\u9df6','\u9df7','\u9df8','\u9df9','\u9dfa','\u9dfb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+40192; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void f9e00() { + char[] cs = new char[] { + '\u9e00','\u9e01','\u9e02','\u9e03','\u9e04','\u9e05','\u9e06', + '\u9e07','\u9e08','\u9e09','\u9e0a','\u9e0b','\u9e0c','\u9e0d', + '\u9e0e','\u9e0f','\u9e10','\u9e11','\u9e12','\u9e13','\u9e14', + '\u9e15','\u9e16','\u9e17','\u9e18','\u9e19','\u9e1a','\u9e1b', + '\u9e1c','\u9e1d','\u9e1e','\u9e1f','\u9e20','\u9e21','\u9e22', + '\u9e23','\u9e24','\u9e25','\u9e26','\u9e27','\u9e28','\u9e29', + '\u9e2a','\u9e2b','\u9e2c','\u9e2d','\u9e2e','\u9e2f','\u9e30', + '\u9e31','\u9e32','\u9e33','\u9e34','\u9e35','\u9e36','\u9e37', + '\u9e38','\u9e39','\u9e3a','\u9e3b','\u9e3c','\u9e3d','\u9e3e', + '\u9e3f','\u9e40','\u9e41','\u9e42','\u9e43','\u9e44','\u9e45', + '\u9e46','\u9e47','\u9e48','\u9e49','\u9e4a','\u9e4b','\u9e4c', + '\u9e4d','\u9e4e','\u9e4f','\u9e50','\u9e51','\u9e52','\u9e53', + '\u9e54','\u9e55','\u9e56','\u9e57','\u9e58','\u9e59','\u9e5a', + '\u9e5b','\u9e5c','\u9e5d','\u9e5e','\u9e5f','\u9e60','\u9e61', + '\u9e62','\u9e63','\u9e64','\u9e65','\u9e66','\u9e67','\u9e68', + '\u9e69','\u9e6a','\u9e6b','\u9e6c','\u9e6d','\u9e6e','\u9e6f', + '\u9e70','\u9e71','\u9e72','\u9e73','\u9e74','\u9e75','\u9e76', + '\u9e77','\u9e78','\u9e79','\u9e7a','\u9e7b','\u9e7c','\u9e7d', + '\u9e7e','\u9e7f','\u9e80','\u9e81','\u9e82','\u9e83','\u9e84', + '\u9e85','\u9e86','\u9e87','\u9e88','\u9e89','\u9e8a','\u9e8b', + '\u9e8c','\u9e8d','\u9e8e','\u9e8f','\u9e90','\u9e91','\u9e92', + '\u9e93','\u9e94','\u9e95','\u9e96','\u9e97','\u9e98','\u9e99', + '\u9e9a','\u9e9b','\u9e9c','\u9e9d','\u9e9e','\u9e9f','\u9ea0', + '\u9ea1','\u9ea2','\u9ea3','\u9ea4','\u9ea5','\u9ea6','\u9ea7', + '\u9ea8','\u9ea9','\u9eaa','\u9eab','\u9eac','\u9ead','\u9eae', + '\u9eaf','\u9eb0','\u9eb1','\u9eb2','\u9eb3','\u9eb4','\u9eb5', + '\u9eb6','\u9eb7','\u9eb8','\u9eb9','\u9eba','\u9ebb','\u9ebc', + '\u9ebd','\u9ebe','\u9ebf','\u9ec0','\u9ec1','\u9ec2','\u9ec3', + '\u9ec4','\u9ec5','\u9ec6','\u9ec7','\u9ec8','\u9ec9','\u9eca', + '\u9ecb','\u9ecc','\u9ecd','\u9ece','\u9ecf','\u9ed0','\u9ed1', + '\u9ed2','\u9ed3','\u9ed4','\u9ed5','\u9ed6','\u9ed7','\u9ed8', + '\u9ed9','\u9eda','\u9edb','\u9edc','\u9edd','\u9ede','\u9edf', + '\u9ee0','\u9ee1','\u9ee2','\u9ee3','\u9ee4','\u9ee5','\u9ee6', + '\u9ee7','\u9ee8','\u9ee9','\u9eea','\u9eeb','\u9eec','\u9eed', + '\u9eee','\u9eef','\u9ef0','\u9ef1','\u9ef2','\u9ef3','\u9ef4', + '\u9ef5','\u9ef6','\u9ef7','\u9ef8','\u9ef9','\u9efa','\u9efb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+40448; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void f9f00() { + char[] cs = new char[] { + '\u9f00','\u9f01','\u9f02','\u9f03','\u9f04','\u9f05','\u9f06', + '\u9f07','\u9f08','\u9f09','\u9f0a','\u9f0b','\u9f0c','\u9f0d', + '\u9f0e','\u9f0f','\u9f10','\u9f11','\u9f12','\u9f13','\u9f14', + '\u9f15','\u9f16','\u9f17','\u9f18','\u9f19','\u9f1a','\u9f1b', + '\u9f1c','\u9f1d','\u9f1e','\u9f1f','\u9f20','\u9f21','\u9f22', + '\u9f23','\u9f24','\u9f25','\u9f26','\u9f27','\u9f28','\u9f29', + '\u9f2a','\u9f2b','\u9f2c','\u9f2d','\u9f2e','\u9f2f','\u9f30', + '\u9f31','\u9f32','\u9f33','\u9f34','\u9f35','\u9f36','\u9f37', + '\u9f38','\u9f39','\u9f3a','\u9f3b','\u9f3c','\u9f3d','\u9f3e', + '\u9f3f','\u9f40','\u9f41','\u9f42','\u9f43','\u9f44','\u9f45', + '\u9f46','\u9f47','\u9f48','\u9f49','\u9f4a','\u9f4b','\u9f4c', + '\u9f4d','\u9f4e','\u9f4f','\u9f50','\u9f51','\u9f52','\u9f53', + '\u9f54','\u9f55','\u9f56','\u9f57','\u9f58','\u9f59','\u9f5a', + '\u9f5b','\u9f5c','\u9f5d','\u9f5e','\u9f5f','\u9f60','\u9f61', + '\u9f62','\u9f63','\u9f64','\u9f65','\u9f66','\u9f67','\u9f68', + '\u9f69','\u9f6a','\u9f6b','\u9f6c','\u9f6d','\u9f6e','\u9f6f', + '\u9f70','\u9f71','\u9f72','\u9f73','\u9f74','\u9f75','\u9f76', + '\u9f77','\u9f78','\u9f79','\u9f7a','\u9f7b','\u9f7c','\u9f7d', + '\u9f7e','\u9f7f','\u9f80','\u9f81','\u9f82','\u9f83','\u9f84', + '\u9f85','\u9f86','\u9f87','\u9f88','\u9f89','\u9f8a','\u9f8b', + '\u9f8c','\u9f8d','\u9f8e','\u9f8f','\u9f90','\u9f91','\u9f92', + '\u9f93','\u9f94','\u9f95','\u9f96','\u9f97','\u9f98','\u9f99', + '\u9f9a','\u9f9b','\u9f9c','\u9f9d','\u9f9e','\u9f9f','\u9fa0', + '\u9fa1','\u9fa2','\u9fa3','\u9fa4','\u9fa5','\u9fa6','\u9fa7', + '\u9fa8','\u9fa9','\u9faa','\u9fab','\u9fac','\u9fad','\u9fae', + '\u9faf','\u9fb0','\u9fb1','\u9fb2','\u9fb3','\u9fb4','\u9fb5', + '\u9fb6','\u9fb7','\u9fb8','\u9fb9','\u9fba','\u9fbb','\u9fbc', + '\u9fbd','\u9fbe','\u9fbf','\u9fc0','\u9fc1','\u9fc2','\u9fc3', + '\u9fc4','\u9fc5','\u9fc6','\u9fc7','\u9fc8','\u9fc9','\u9fca', + '\u9fcb','\u9fcc','\u9fcd','\u9fce','\u9fcf','\u9fd0','\u9fd1', + '\u9fd2','\u9fd3','\u9fd4','\u9fd5','\u9fd6','\u9fd7','\u9fd8', + '\u9fd9','\u9fda','\u9fdb','\u9fdc','\u9fdd','\u9fde','\u9fdf', + '\u9fe0','\u9fe1','\u9fe2','\u9fe3','\u9fe4','\u9fe5','\u9fe6', + '\u9fe7','\u9fe8','\u9fe9','\u9fea','\u9feb','\u9fec','\u9fed', + '\u9fee','\u9fef','\u9ff0','\u9ff1','\u9ff2','\u9ff3','\u9ff4', + '\u9ff5','\u9ff6','\u9ff7','\u9ff8','\u9ff9','\u9ffa','\u9ffb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+40704; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void fa000() { + char[] cs = new char[] { + '\ua000','\ua001','\ua002','\ua003','\ua004','\ua005','\ua006', + '\ua007','\ua008','\ua009','\ua00a','\ua00b','\ua00c','\ua00d', + '\ua00e','\ua00f','\ua010','\ua011','\ua012','\ua013','\ua014', + '\ua015','\ua016','\ua017','\ua018','\ua019','\ua01a','\ua01b', + '\ua01c','\ua01d','\ua01e','\ua01f','\ua020','\ua021','\ua022', + '\ua023','\ua024','\ua025','\ua026','\ua027','\ua028','\ua029', + '\ua02a','\ua02b','\ua02c','\ua02d','\ua02e','\ua02f','\ua030', + '\ua031','\ua032','\ua033','\ua034','\ua035','\ua036','\ua037', + '\ua038','\ua039','\ua03a','\ua03b','\ua03c','\ua03d','\ua03e', + '\ua03f','\ua040','\ua041','\ua042','\ua043','\ua044','\ua045', + '\ua046','\ua047','\ua048','\ua049','\ua04a','\ua04b','\ua04c', + '\ua04d','\ua04e','\ua04f','\ua050','\ua051','\ua052','\ua053', + '\ua054','\ua055','\ua056','\ua057','\ua058','\ua059','\ua05a', + '\ua05b','\ua05c','\ua05d','\ua05e','\ua05f','\ua060','\ua061', + '\ua062','\ua063','\ua064','\ua065','\ua066','\ua067','\ua068', + '\ua069','\ua06a','\ua06b','\ua06c','\ua06d','\ua06e','\ua06f', + '\ua070','\ua071','\ua072','\ua073','\ua074','\ua075','\ua076', + '\ua077','\ua078','\ua079','\ua07a','\ua07b','\ua07c','\ua07d', + '\ua07e','\ua07f','\ua080','\ua081','\ua082','\ua083','\ua084', + '\ua085','\ua086','\ua087','\ua088','\ua089','\ua08a','\ua08b', + '\ua08c','\ua08d','\ua08e','\ua08f','\ua090','\ua091','\ua092', + '\ua093','\ua094','\ua095','\ua096','\ua097','\ua098','\ua099', + '\ua09a','\ua09b','\ua09c','\ua09d','\ua09e','\ua09f','\ua0a0', + '\ua0a1','\ua0a2','\ua0a3','\ua0a4','\ua0a5','\ua0a6','\ua0a7', + '\ua0a8','\ua0a9','\ua0aa','\ua0ab','\ua0ac','\ua0ad','\ua0ae', + '\ua0af','\ua0b0','\ua0b1','\ua0b2','\ua0b3','\ua0b4','\ua0b5', + '\ua0b6','\ua0b7','\ua0b8','\ua0b9','\ua0ba','\ua0bb','\ua0bc', + '\ua0bd','\ua0be','\ua0bf','\ua0c0','\ua0c1','\ua0c2','\ua0c3', + '\ua0c4','\ua0c5','\ua0c6','\ua0c7','\ua0c8','\ua0c9','\ua0ca', + '\ua0cb','\ua0cc','\ua0cd','\ua0ce','\ua0cf','\ua0d0','\ua0d1', + '\ua0d2','\ua0d3','\ua0d4','\ua0d5','\ua0d6','\ua0d7','\ua0d8', + '\ua0d9','\ua0da','\ua0db','\ua0dc','\ua0dd','\ua0de','\ua0df', + '\ua0e0','\ua0e1','\ua0e2','\ua0e3','\ua0e4','\ua0e5','\ua0e6', + '\ua0e7','\ua0e8','\ua0e9','\ua0ea','\ua0eb','\ua0ec','\ua0ed', + '\ua0ee','\ua0ef','\ua0f0','\ua0f1','\ua0f2','\ua0f3','\ua0f4', + '\ua0f5','\ua0f6','\ua0f7','\ua0f8','\ua0f9','\ua0fa','\ua0fb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+40960; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void fa100() { + char[] cs = new char[] { + '\ua100','\ua101','\ua102','\ua103','\ua104','\ua105','\ua106', + '\ua107','\ua108','\ua109','\ua10a','\ua10b','\ua10c','\ua10d', + '\ua10e','\ua10f','\ua110','\ua111','\ua112','\ua113','\ua114', + '\ua115','\ua116','\ua117','\ua118','\ua119','\ua11a','\ua11b', + '\ua11c','\ua11d','\ua11e','\ua11f','\ua120','\ua121','\ua122', + '\ua123','\ua124','\ua125','\ua126','\ua127','\ua128','\ua129', + '\ua12a','\ua12b','\ua12c','\ua12d','\ua12e','\ua12f','\ua130', + '\ua131','\ua132','\ua133','\ua134','\ua135','\ua136','\ua137', + '\ua138','\ua139','\ua13a','\ua13b','\ua13c','\ua13d','\ua13e', + '\ua13f','\ua140','\ua141','\ua142','\ua143','\ua144','\ua145', + '\ua146','\ua147','\ua148','\ua149','\ua14a','\ua14b','\ua14c', + '\ua14d','\ua14e','\ua14f','\ua150','\ua151','\ua152','\ua153', + '\ua154','\ua155','\ua156','\ua157','\ua158','\ua159','\ua15a', + '\ua15b','\ua15c','\ua15d','\ua15e','\ua15f','\ua160','\ua161', + '\ua162','\ua163','\ua164','\ua165','\ua166','\ua167','\ua168', + '\ua169','\ua16a','\ua16b','\ua16c','\ua16d','\ua16e','\ua16f', + '\ua170','\ua171','\ua172','\ua173','\ua174','\ua175','\ua176', + '\ua177','\ua178','\ua179','\ua17a','\ua17b','\ua17c','\ua17d', + '\ua17e','\ua17f','\ua180','\ua181','\ua182','\ua183','\ua184', + '\ua185','\ua186','\ua187','\ua188','\ua189','\ua18a','\ua18b', + '\ua18c','\ua18d','\ua18e','\ua18f','\ua190','\ua191','\ua192', + '\ua193','\ua194','\ua195','\ua196','\ua197','\ua198','\ua199', + '\ua19a','\ua19b','\ua19c','\ua19d','\ua19e','\ua19f','\ua1a0', + '\ua1a1','\ua1a2','\ua1a3','\ua1a4','\ua1a5','\ua1a6','\ua1a7', + '\ua1a8','\ua1a9','\ua1aa','\ua1ab','\ua1ac','\ua1ad','\ua1ae', + '\ua1af','\ua1b0','\ua1b1','\ua1b2','\ua1b3','\ua1b4','\ua1b5', + '\ua1b6','\ua1b7','\ua1b8','\ua1b9','\ua1ba','\ua1bb','\ua1bc', + '\ua1bd','\ua1be','\ua1bf','\ua1c0','\ua1c1','\ua1c2','\ua1c3', + '\ua1c4','\ua1c5','\ua1c6','\ua1c7','\ua1c8','\ua1c9','\ua1ca', + '\ua1cb','\ua1cc','\ua1cd','\ua1ce','\ua1cf','\ua1d0','\ua1d1', + '\ua1d2','\ua1d3','\ua1d4','\ua1d5','\ua1d6','\ua1d7','\ua1d8', + '\ua1d9','\ua1da','\ua1db','\ua1dc','\ua1dd','\ua1de','\ua1df', + '\ua1e0','\ua1e1','\ua1e2','\ua1e3','\ua1e4','\ua1e5','\ua1e6', + '\ua1e7','\ua1e8','\ua1e9','\ua1ea','\ua1eb','\ua1ec','\ua1ed', + '\ua1ee','\ua1ef','\ua1f0','\ua1f1','\ua1f2','\ua1f3','\ua1f4', + '\ua1f5','\ua1f6','\ua1f7','\ua1f8','\ua1f9','\ua1fa','\ua1fb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+41216; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void fa200() { + char[] cs = new char[] { + '\ua200','\ua201','\ua202','\ua203','\ua204','\ua205','\ua206', + '\ua207','\ua208','\ua209','\ua20a','\ua20b','\ua20c','\ua20d', + '\ua20e','\ua20f','\ua210','\ua211','\ua212','\ua213','\ua214', + '\ua215','\ua216','\ua217','\ua218','\ua219','\ua21a','\ua21b', + '\ua21c','\ua21d','\ua21e','\ua21f','\ua220','\ua221','\ua222', + '\ua223','\ua224','\ua225','\ua226','\ua227','\ua228','\ua229', + '\ua22a','\ua22b','\ua22c','\ua22d','\ua22e','\ua22f','\ua230', + '\ua231','\ua232','\ua233','\ua234','\ua235','\ua236','\ua237', + '\ua238','\ua239','\ua23a','\ua23b','\ua23c','\ua23d','\ua23e', + '\ua23f','\ua240','\ua241','\ua242','\ua243','\ua244','\ua245', + '\ua246','\ua247','\ua248','\ua249','\ua24a','\ua24b','\ua24c', + '\ua24d','\ua24e','\ua24f','\ua250','\ua251','\ua252','\ua253', + '\ua254','\ua255','\ua256','\ua257','\ua258','\ua259','\ua25a', + '\ua25b','\ua25c','\ua25d','\ua25e','\ua25f','\ua260','\ua261', + '\ua262','\ua263','\ua264','\ua265','\ua266','\ua267','\ua268', + '\ua269','\ua26a','\ua26b','\ua26c','\ua26d','\ua26e','\ua26f', + '\ua270','\ua271','\ua272','\ua273','\ua274','\ua275','\ua276', + '\ua277','\ua278','\ua279','\ua27a','\ua27b','\ua27c','\ua27d', + '\ua27e','\ua27f','\ua280','\ua281','\ua282','\ua283','\ua284', + '\ua285','\ua286','\ua287','\ua288','\ua289','\ua28a','\ua28b', + '\ua28c','\ua28d','\ua28e','\ua28f','\ua290','\ua291','\ua292', + '\ua293','\ua294','\ua295','\ua296','\ua297','\ua298','\ua299', + '\ua29a','\ua29b','\ua29c','\ua29d','\ua29e','\ua29f','\ua2a0', + '\ua2a1','\ua2a2','\ua2a3','\ua2a4','\ua2a5','\ua2a6','\ua2a7', + '\ua2a8','\ua2a9','\ua2aa','\ua2ab','\ua2ac','\ua2ad','\ua2ae', + '\ua2af','\ua2b0','\ua2b1','\ua2b2','\ua2b3','\ua2b4','\ua2b5', + '\ua2b6','\ua2b7','\ua2b8','\ua2b9','\ua2ba','\ua2bb','\ua2bc', + '\ua2bd','\ua2be','\ua2bf','\ua2c0','\ua2c1','\ua2c2','\ua2c3', + '\ua2c4','\ua2c5','\ua2c6','\ua2c7','\ua2c8','\ua2c9','\ua2ca', + '\ua2cb','\ua2cc','\ua2cd','\ua2ce','\ua2cf','\ua2d0','\ua2d1', + '\ua2d2','\ua2d3','\ua2d4','\ua2d5','\ua2d6','\ua2d7','\ua2d8', + '\ua2d9','\ua2da','\ua2db','\ua2dc','\ua2dd','\ua2de','\ua2df', + '\ua2e0','\ua2e1','\ua2e2','\ua2e3','\ua2e4','\ua2e5','\ua2e6', + '\ua2e7','\ua2e8','\ua2e9','\ua2ea','\ua2eb','\ua2ec','\ua2ed', + '\ua2ee','\ua2ef','\ua2f0','\ua2f1','\ua2f2','\ua2f3','\ua2f4', + '\ua2f5','\ua2f6','\ua2f7','\ua2f8','\ua2f9','\ua2fa','\ua2fb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+41472; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void fa300() { + char[] cs = new char[] { + '\ua300','\ua301','\ua302','\ua303','\ua304','\ua305','\ua306', + '\ua307','\ua308','\ua309','\ua30a','\ua30b','\ua30c','\ua30d', + '\ua30e','\ua30f','\ua310','\ua311','\ua312','\ua313','\ua314', + '\ua315','\ua316','\ua317','\ua318','\ua319','\ua31a','\ua31b', + '\ua31c','\ua31d','\ua31e','\ua31f','\ua320','\ua321','\ua322', + '\ua323','\ua324','\ua325','\ua326','\ua327','\ua328','\ua329', + '\ua32a','\ua32b','\ua32c','\ua32d','\ua32e','\ua32f','\ua330', + '\ua331','\ua332','\ua333','\ua334','\ua335','\ua336','\ua337', + '\ua338','\ua339','\ua33a','\ua33b','\ua33c','\ua33d','\ua33e', + '\ua33f','\ua340','\ua341','\ua342','\ua343','\ua344','\ua345', + '\ua346','\ua347','\ua348','\ua349','\ua34a','\ua34b','\ua34c', + '\ua34d','\ua34e','\ua34f','\ua350','\ua351','\ua352','\ua353', + '\ua354','\ua355','\ua356','\ua357','\ua358','\ua359','\ua35a', + '\ua35b','\ua35c','\ua35d','\ua35e','\ua35f','\ua360','\ua361', + '\ua362','\ua363','\ua364','\ua365','\ua366','\ua367','\ua368', + '\ua369','\ua36a','\ua36b','\ua36c','\ua36d','\ua36e','\ua36f', + '\ua370','\ua371','\ua372','\ua373','\ua374','\ua375','\ua376', + '\ua377','\ua378','\ua379','\ua37a','\ua37b','\ua37c','\ua37d', + '\ua37e','\ua37f','\ua380','\ua381','\ua382','\ua383','\ua384', + '\ua385','\ua386','\ua387','\ua388','\ua389','\ua38a','\ua38b', + '\ua38c','\ua38d','\ua38e','\ua38f','\ua390','\ua391','\ua392', + '\ua393','\ua394','\ua395','\ua396','\ua397','\ua398','\ua399', + '\ua39a','\ua39b','\ua39c','\ua39d','\ua39e','\ua39f','\ua3a0', + '\ua3a1','\ua3a2','\ua3a3','\ua3a4','\ua3a5','\ua3a6','\ua3a7', + '\ua3a8','\ua3a9','\ua3aa','\ua3ab','\ua3ac','\ua3ad','\ua3ae', + '\ua3af','\ua3b0','\ua3b1','\ua3b2','\ua3b3','\ua3b4','\ua3b5', + '\ua3b6','\ua3b7','\ua3b8','\ua3b9','\ua3ba','\ua3bb','\ua3bc', + '\ua3bd','\ua3be','\ua3bf','\ua3c0','\ua3c1','\ua3c2','\ua3c3', + '\ua3c4','\ua3c5','\ua3c6','\ua3c7','\ua3c8','\ua3c9','\ua3ca', + '\ua3cb','\ua3cc','\ua3cd','\ua3ce','\ua3cf','\ua3d0','\ua3d1', + '\ua3d2','\ua3d3','\ua3d4','\ua3d5','\ua3d6','\ua3d7','\ua3d8', + '\ua3d9','\ua3da','\ua3db','\ua3dc','\ua3dd','\ua3de','\ua3df', + '\ua3e0','\ua3e1','\ua3e2','\ua3e3','\ua3e4','\ua3e5','\ua3e6', + '\ua3e7','\ua3e8','\ua3e9','\ua3ea','\ua3eb','\ua3ec','\ua3ed', + '\ua3ee','\ua3ef','\ua3f0','\ua3f1','\ua3f2','\ua3f3','\ua3f4', + '\ua3f5','\ua3f6','\ua3f7','\ua3f8','\ua3f9','\ua3fa','\ua3fb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+41728; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void fa400() { + char[] cs = new char[] { + '\ua400','\ua401','\ua402','\ua403','\ua404','\ua405','\ua406', + '\ua407','\ua408','\ua409','\ua40a','\ua40b','\ua40c','\ua40d', + '\ua40e','\ua40f','\ua410','\ua411','\ua412','\ua413','\ua414', + '\ua415','\ua416','\ua417','\ua418','\ua419','\ua41a','\ua41b', + '\ua41c','\ua41d','\ua41e','\ua41f','\ua420','\ua421','\ua422', + '\ua423','\ua424','\ua425','\ua426','\ua427','\ua428','\ua429', + '\ua42a','\ua42b','\ua42c','\ua42d','\ua42e','\ua42f','\ua430', + '\ua431','\ua432','\ua433','\ua434','\ua435','\ua436','\ua437', + '\ua438','\ua439','\ua43a','\ua43b','\ua43c','\ua43d','\ua43e', + '\ua43f','\ua440','\ua441','\ua442','\ua443','\ua444','\ua445', + '\ua446','\ua447','\ua448','\ua449','\ua44a','\ua44b','\ua44c', + '\ua44d','\ua44e','\ua44f','\ua450','\ua451','\ua452','\ua453', + '\ua454','\ua455','\ua456','\ua457','\ua458','\ua459','\ua45a', + '\ua45b','\ua45c','\ua45d','\ua45e','\ua45f','\ua460','\ua461', + '\ua462','\ua463','\ua464','\ua465','\ua466','\ua467','\ua468', + '\ua469','\ua46a','\ua46b','\ua46c','\ua46d','\ua46e','\ua46f', + '\ua470','\ua471','\ua472','\ua473','\ua474','\ua475','\ua476', + '\ua477','\ua478','\ua479','\ua47a','\ua47b','\ua47c','\ua47d', + '\ua47e','\ua47f','\ua480','\ua481','\ua482','\ua483','\ua484', + '\ua485','\ua486','\ua487','\ua488','\ua489','\ua48a','\ua48b', + '\ua48c','\ua48d','\ua48e','\ua48f','\ua490','\ua491','\ua492', + '\ua493','\ua494','\ua495','\ua496','\ua497','\ua498','\ua499', + '\ua49a','\ua49b','\ua49c','\ua49d','\ua49e','\ua49f','\ua4a0', + '\ua4a1','\ua4a2','\ua4a3','\ua4a4','\ua4a5','\ua4a6','\ua4a7', + '\ua4a8','\ua4a9','\ua4aa','\ua4ab','\ua4ac','\ua4ad','\ua4ae', + '\ua4af','\ua4b0','\ua4b1','\ua4b2','\ua4b3','\ua4b4','\ua4b5', + '\ua4b6','\ua4b7','\ua4b8','\ua4b9','\ua4ba','\ua4bb','\ua4bc', + '\ua4bd','\ua4be','\ua4bf','\ua4c0','\ua4c1','\ua4c2','\ua4c3', + '\ua4c4','\ua4c5','\ua4c6','\ua4c7','\ua4c8','\ua4c9','\ua4ca', + '\ua4cb','\ua4cc','\ua4cd','\ua4ce','\ua4cf','\ua4d0','\ua4d1', + '\ua4d2','\ua4d3','\ua4d4','\ua4d5','\ua4d6','\ua4d7','\ua4d8', + '\ua4d9','\ua4da','\ua4db','\ua4dc','\ua4dd','\ua4de','\ua4df', + '\ua4e0','\ua4e1','\ua4e2','\ua4e3','\ua4e4','\ua4e5','\ua4e6', + '\ua4e7','\ua4e8','\ua4e9','\ua4ea','\ua4eb','\ua4ec','\ua4ed', + '\ua4ee','\ua4ef','\ua4f0','\ua4f1','\ua4f2','\ua4f3','\ua4f4', + '\ua4f5','\ua4f6','\ua4f7','\ua4f8','\ua4f9','\ua4fa','\ua4fb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+41984; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void fa500() { + char[] cs = new char[] { + '\ua500','\ua501','\ua502','\ua503','\ua504','\ua505','\ua506', + '\ua507','\ua508','\ua509','\ua50a','\ua50b','\ua50c','\ua50d', + '\ua50e','\ua50f','\ua510','\ua511','\ua512','\ua513','\ua514', + '\ua515','\ua516','\ua517','\ua518','\ua519','\ua51a','\ua51b', + '\ua51c','\ua51d','\ua51e','\ua51f','\ua520','\ua521','\ua522', + '\ua523','\ua524','\ua525','\ua526','\ua527','\ua528','\ua529', + '\ua52a','\ua52b','\ua52c','\ua52d','\ua52e','\ua52f','\ua530', + '\ua531','\ua532','\ua533','\ua534','\ua535','\ua536','\ua537', + '\ua538','\ua539','\ua53a','\ua53b','\ua53c','\ua53d','\ua53e', + '\ua53f','\ua540','\ua541','\ua542','\ua543','\ua544','\ua545', + '\ua546','\ua547','\ua548','\ua549','\ua54a','\ua54b','\ua54c', + '\ua54d','\ua54e','\ua54f','\ua550','\ua551','\ua552','\ua553', + '\ua554','\ua555','\ua556','\ua557','\ua558','\ua559','\ua55a', + '\ua55b','\ua55c','\ua55d','\ua55e','\ua55f','\ua560','\ua561', + '\ua562','\ua563','\ua564','\ua565','\ua566','\ua567','\ua568', + '\ua569','\ua56a','\ua56b','\ua56c','\ua56d','\ua56e','\ua56f', + '\ua570','\ua571','\ua572','\ua573','\ua574','\ua575','\ua576', + '\ua577','\ua578','\ua579','\ua57a','\ua57b','\ua57c','\ua57d', + '\ua57e','\ua57f','\ua580','\ua581','\ua582','\ua583','\ua584', + '\ua585','\ua586','\ua587','\ua588','\ua589','\ua58a','\ua58b', + '\ua58c','\ua58d','\ua58e','\ua58f','\ua590','\ua591','\ua592', + '\ua593','\ua594','\ua595','\ua596','\ua597','\ua598','\ua599', + '\ua59a','\ua59b','\ua59c','\ua59d','\ua59e','\ua59f','\ua5a0', + '\ua5a1','\ua5a2','\ua5a3','\ua5a4','\ua5a5','\ua5a6','\ua5a7', + '\ua5a8','\ua5a9','\ua5aa','\ua5ab','\ua5ac','\ua5ad','\ua5ae', + '\ua5af','\ua5b0','\ua5b1','\ua5b2','\ua5b3','\ua5b4','\ua5b5', + '\ua5b6','\ua5b7','\ua5b8','\ua5b9','\ua5ba','\ua5bb','\ua5bc', + '\ua5bd','\ua5be','\ua5bf','\ua5c0','\ua5c1','\ua5c2','\ua5c3', + '\ua5c4','\ua5c5','\ua5c6','\ua5c7','\ua5c8','\ua5c9','\ua5ca', + '\ua5cb','\ua5cc','\ua5cd','\ua5ce','\ua5cf','\ua5d0','\ua5d1', + '\ua5d2','\ua5d3','\ua5d4','\ua5d5','\ua5d6','\ua5d7','\ua5d8', + '\ua5d9','\ua5da','\ua5db','\ua5dc','\ua5dd','\ua5de','\ua5df', + '\ua5e0','\ua5e1','\ua5e2','\ua5e3','\ua5e4','\ua5e5','\ua5e6', + '\ua5e7','\ua5e8','\ua5e9','\ua5ea','\ua5eb','\ua5ec','\ua5ed', + '\ua5ee','\ua5ef','\ua5f0','\ua5f1','\ua5f2','\ua5f3','\ua5f4', + '\ua5f5','\ua5f6','\ua5f7','\ua5f8','\ua5f9','\ua5fa','\ua5fb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+42240; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void fa600() { + char[] cs = new char[] { + '\ua600','\ua601','\ua602','\ua603','\ua604','\ua605','\ua606', + '\ua607','\ua608','\ua609','\ua60a','\ua60b','\ua60c','\ua60d', + '\ua60e','\ua60f','\ua610','\ua611','\ua612','\ua613','\ua614', + '\ua615','\ua616','\ua617','\ua618','\ua619','\ua61a','\ua61b', + '\ua61c','\ua61d','\ua61e','\ua61f','\ua620','\ua621','\ua622', + '\ua623','\ua624','\ua625','\ua626','\ua627','\ua628','\ua629', + '\ua62a','\ua62b','\ua62c','\ua62d','\ua62e','\ua62f','\ua630', + '\ua631','\ua632','\ua633','\ua634','\ua635','\ua636','\ua637', + '\ua638','\ua639','\ua63a','\ua63b','\ua63c','\ua63d','\ua63e', + '\ua63f','\ua640','\ua641','\ua642','\ua643','\ua644','\ua645', + '\ua646','\ua647','\ua648','\ua649','\ua64a','\ua64b','\ua64c', + '\ua64d','\ua64e','\ua64f','\ua650','\ua651','\ua652','\ua653', + '\ua654','\ua655','\ua656','\ua657','\ua658','\ua659','\ua65a', + '\ua65b','\ua65c','\ua65d','\ua65e','\ua65f','\ua660','\ua661', + '\ua662','\ua663','\ua664','\ua665','\ua666','\ua667','\ua668', + '\ua669','\ua66a','\ua66b','\ua66c','\ua66d','\ua66e','\ua66f', + '\ua670','\ua671','\ua672','\ua673','\ua674','\ua675','\ua676', + '\ua677','\ua678','\ua679','\ua67a','\ua67b','\ua67c','\ua67d', + '\ua67e','\ua67f','\ua680','\ua681','\ua682','\ua683','\ua684', + '\ua685','\ua686','\ua687','\ua688','\ua689','\ua68a','\ua68b', + '\ua68c','\ua68d','\ua68e','\ua68f','\ua690','\ua691','\ua692', + '\ua693','\ua694','\ua695','\ua696','\ua697','\ua698','\ua699', + '\ua69a','\ua69b','\ua69c','\ua69d','\ua69e','\ua69f','\ua6a0', + '\ua6a1','\ua6a2','\ua6a3','\ua6a4','\ua6a5','\ua6a6','\ua6a7', + '\ua6a8','\ua6a9','\ua6aa','\ua6ab','\ua6ac','\ua6ad','\ua6ae', + '\ua6af','\ua6b0','\ua6b1','\ua6b2','\ua6b3','\ua6b4','\ua6b5', + '\ua6b6','\ua6b7','\ua6b8','\ua6b9','\ua6ba','\ua6bb','\ua6bc', + '\ua6bd','\ua6be','\ua6bf','\ua6c0','\ua6c1','\ua6c2','\ua6c3', + '\ua6c4','\ua6c5','\ua6c6','\ua6c7','\ua6c8','\ua6c9','\ua6ca', + '\ua6cb','\ua6cc','\ua6cd','\ua6ce','\ua6cf','\ua6d0','\ua6d1', + '\ua6d2','\ua6d3','\ua6d4','\ua6d5','\ua6d6','\ua6d7','\ua6d8', + '\ua6d9','\ua6da','\ua6db','\ua6dc','\ua6dd','\ua6de','\ua6df', + '\ua6e0','\ua6e1','\ua6e2','\ua6e3','\ua6e4','\ua6e5','\ua6e6', + '\ua6e7','\ua6e8','\ua6e9','\ua6ea','\ua6eb','\ua6ec','\ua6ed', + '\ua6ee','\ua6ef','\ua6f0','\ua6f1','\ua6f2','\ua6f3','\ua6f4', + '\ua6f5','\ua6f6','\ua6f7','\ua6f8','\ua6f9','\ua6fa','\ua6fb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+42496; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void fa700() { + char[] cs = new char[] { + '\ua700','\ua701','\ua702','\ua703','\ua704','\ua705','\ua706', + '\ua707','\ua708','\ua709','\ua70a','\ua70b','\ua70c','\ua70d', + '\ua70e','\ua70f','\ua710','\ua711','\ua712','\ua713','\ua714', + '\ua715','\ua716','\ua717','\ua718','\ua719','\ua71a','\ua71b', + '\ua71c','\ua71d','\ua71e','\ua71f','\ua720','\ua721','\ua722', + '\ua723','\ua724','\ua725','\ua726','\ua727','\ua728','\ua729', + '\ua72a','\ua72b','\ua72c','\ua72d','\ua72e','\ua72f','\ua730', + '\ua731','\ua732','\ua733','\ua734','\ua735','\ua736','\ua737', + '\ua738','\ua739','\ua73a','\ua73b','\ua73c','\ua73d','\ua73e', + '\ua73f','\ua740','\ua741','\ua742','\ua743','\ua744','\ua745', + '\ua746','\ua747','\ua748','\ua749','\ua74a','\ua74b','\ua74c', + '\ua74d','\ua74e','\ua74f','\ua750','\ua751','\ua752','\ua753', + '\ua754','\ua755','\ua756','\ua757','\ua758','\ua759','\ua75a', + '\ua75b','\ua75c','\ua75d','\ua75e','\ua75f','\ua760','\ua761', + '\ua762','\ua763','\ua764','\ua765','\ua766','\ua767','\ua768', + '\ua769','\ua76a','\ua76b','\ua76c','\ua76d','\ua76e','\ua76f', + '\ua770','\ua771','\ua772','\ua773','\ua774','\ua775','\ua776', + '\ua777','\ua778','\ua779','\ua77a','\ua77b','\ua77c','\ua77d', + '\ua77e','\ua77f','\ua780','\ua781','\ua782','\ua783','\ua784', + '\ua785','\ua786','\ua787','\ua788','\ua789','\ua78a','\ua78b', + '\ua78c','\ua78d','\ua78e','\ua78f','\ua790','\ua791','\ua792', + '\ua793','\ua794','\ua795','\ua796','\ua797','\ua798','\ua799', + '\ua79a','\ua79b','\ua79c','\ua79d','\ua79e','\ua79f','\ua7a0', + '\ua7a1','\ua7a2','\ua7a3','\ua7a4','\ua7a5','\ua7a6','\ua7a7', + '\ua7a8','\ua7a9','\ua7aa','\ua7ab','\ua7ac','\ua7ad','\ua7ae', + '\ua7af','\ua7b0','\ua7b1','\ua7b2','\ua7b3','\ua7b4','\ua7b5', + '\ua7b6','\ua7b7','\ua7b8','\ua7b9','\ua7ba','\ua7bb','\ua7bc', + '\ua7bd','\ua7be','\ua7bf','\ua7c0','\ua7c1','\ua7c2','\ua7c3', + '\ua7c4','\ua7c5','\ua7c6','\ua7c7','\ua7c8','\ua7c9','\ua7ca', + '\ua7cb','\ua7cc','\ua7cd','\ua7ce','\ua7cf','\ua7d0','\ua7d1', + '\ua7d2','\ua7d3','\ua7d4','\ua7d5','\ua7d6','\ua7d7','\ua7d8', + '\ua7d9','\ua7da','\ua7db','\ua7dc','\ua7dd','\ua7de','\ua7df', + '\ua7e0','\ua7e1','\ua7e2','\ua7e3','\ua7e4','\ua7e5','\ua7e6', + '\ua7e7','\ua7e8','\ua7e9','\ua7ea','\ua7eb','\ua7ec','\ua7ed', + '\ua7ee','\ua7ef','\ua7f0','\ua7f1','\ua7f2','\ua7f3','\ua7f4', + '\ua7f5','\ua7f6','\ua7f7','\ua7f8','\ua7f9','\ua7fa','\ua7fb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+42752; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void fa800() { + char[] cs = new char[] { + '\ua800','\ua801','\ua802','\ua803','\ua804','\ua805','\ua806', + '\ua807','\ua808','\ua809','\ua80a','\ua80b','\ua80c','\ua80d', + '\ua80e','\ua80f','\ua810','\ua811','\ua812','\ua813','\ua814', + '\ua815','\ua816','\ua817','\ua818','\ua819','\ua81a','\ua81b', + '\ua81c','\ua81d','\ua81e','\ua81f','\ua820','\ua821','\ua822', + '\ua823','\ua824','\ua825','\ua826','\ua827','\ua828','\ua829', + '\ua82a','\ua82b','\ua82c','\ua82d','\ua82e','\ua82f','\ua830', + '\ua831','\ua832','\ua833','\ua834','\ua835','\ua836','\ua837', + '\ua838','\ua839','\ua83a','\ua83b','\ua83c','\ua83d','\ua83e', + '\ua83f','\ua840','\ua841','\ua842','\ua843','\ua844','\ua845', + '\ua846','\ua847','\ua848','\ua849','\ua84a','\ua84b','\ua84c', + '\ua84d','\ua84e','\ua84f','\ua850','\ua851','\ua852','\ua853', + '\ua854','\ua855','\ua856','\ua857','\ua858','\ua859','\ua85a', + '\ua85b','\ua85c','\ua85d','\ua85e','\ua85f','\ua860','\ua861', + '\ua862','\ua863','\ua864','\ua865','\ua866','\ua867','\ua868', + '\ua869','\ua86a','\ua86b','\ua86c','\ua86d','\ua86e','\ua86f', + '\ua870','\ua871','\ua872','\ua873','\ua874','\ua875','\ua876', + '\ua877','\ua878','\ua879','\ua87a','\ua87b','\ua87c','\ua87d', + '\ua87e','\ua87f','\ua880','\ua881','\ua882','\ua883','\ua884', + '\ua885','\ua886','\ua887','\ua888','\ua889','\ua88a','\ua88b', + '\ua88c','\ua88d','\ua88e','\ua88f','\ua890','\ua891','\ua892', + '\ua893','\ua894','\ua895','\ua896','\ua897','\ua898','\ua899', + '\ua89a','\ua89b','\ua89c','\ua89d','\ua89e','\ua89f','\ua8a0', + '\ua8a1','\ua8a2','\ua8a3','\ua8a4','\ua8a5','\ua8a6','\ua8a7', + '\ua8a8','\ua8a9','\ua8aa','\ua8ab','\ua8ac','\ua8ad','\ua8ae', + '\ua8af','\ua8b0','\ua8b1','\ua8b2','\ua8b3','\ua8b4','\ua8b5', + '\ua8b6','\ua8b7','\ua8b8','\ua8b9','\ua8ba','\ua8bb','\ua8bc', + '\ua8bd','\ua8be','\ua8bf','\ua8c0','\ua8c1','\ua8c2','\ua8c3', + '\ua8c4','\ua8c5','\ua8c6','\ua8c7','\ua8c8','\ua8c9','\ua8ca', + '\ua8cb','\ua8cc','\ua8cd','\ua8ce','\ua8cf','\ua8d0','\ua8d1', + '\ua8d2','\ua8d3','\ua8d4','\ua8d5','\ua8d6','\ua8d7','\ua8d8', + '\ua8d9','\ua8da','\ua8db','\ua8dc','\ua8dd','\ua8de','\ua8df', + '\ua8e0','\ua8e1','\ua8e2','\ua8e3','\ua8e4','\ua8e5','\ua8e6', + '\ua8e7','\ua8e8','\ua8e9','\ua8ea','\ua8eb','\ua8ec','\ua8ed', + '\ua8ee','\ua8ef','\ua8f0','\ua8f1','\ua8f2','\ua8f3','\ua8f4', + '\ua8f5','\ua8f6','\ua8f7','\ua8f8','\ua8f9','\ua8fa','\ua8fb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+43008; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void fa900() { + char[] cs = new char[] { + '\ua900','\ua901','\ua902','\ua903','\ua904','\ua905','\ua906', + '\ua907','\ua908','\ua909','\ua90a','\ua90b','\ua90c','\ua90d', + '\ua90e','\ua90f','\ua910','\ua911','\ua912','\ua913','\ua914', + '\ua915','\ua916','\ua917','\ua918','\ua919','\ua91a','\ua91b', + '\ua91c','\ua91d','\ua91e','\ua91f','\ua920','\ua921','\ua922', + '\ua923','\ua924','\ua925','\ua926','\ua927','\ua928','\ua929', + '\ua92a','\ua92b','\ua92c','\ua92d','\ua92e','\ua92f','\ua930', + '\ua931','\ua932','\ua933','\ua934','\ua935','\ua936','\ua937', + '\ua938','\ua939','\ua93a','\ua93b','\ua93c','\ua93d','\ua93e', + '\ua93f','\ua940','\ua941','\ua942','\ua943','\ua944','\ua945', + '\ua946','\ua947','\ua948','\ua949','\ua94a','\ua94b','\ua94c', + '\ua94d','\ua94e','\ua94f','\ua950','\ua951','\ua952','\ua953', + '\ua954','\ua955','\ua956','\ua957','\ua958','\ua959','\ua95a', + '\ua95b','\ua95c','\ua95d','\ua95e','\ua95f','\ua960','\ua961', + '\ua962','\ua963','\ua964','\ua965','\ua966','\ua967','\ua968', + '\ua969','\ua96a','\ua96b','\ua96c','\ua96d','\ua96e','\ua96f', + '\ua970','\ua971','\ua972','\ua973','\ua974','\ua975','\ua976', + '\ua977','\ua978','\ua979','\ua97a','\ua97b','\ua97c','\ua97d', + '\ua97e','\ua97f','\ua980','\ua981','\ua982','\ua983','\ua984', + '\ua985','\ua986','\ua987','\ua988','\ua989','\ua98a','\ua98b', + '\ua98c','\ua98d','\ua98e','\ua98f','\ua990','\ua991','\ua992', + '\ua993','\ua994','\ua995','\ua996','\ua997','\ua998','\ua999', + '\ua99a','\ua99b','\ua99c','\ua99d','\ua99e','\ua99f','\ua9a0', + '\ua9a1','\ua9a2','\ua9a3','\ua9a4','\ua9a5','\ua9a6','\ua9a7', + '\ua9a8','\ua9a9','\ua9aa','\ua9ab','\ua9ac','\ua9ad','\ua9ae', + '\ua9af','\ua9b0','\ua9b1','\ua9b2','\ua9b3','\ua9b4','\ua9b5', + '\ua9b6','\ua9b7','\ua9b8','\ua9b9','\ua9ba','\ua9bb','\ua9bc', + '\ua9bd','\ua9be','\ua9bf','\ua9c0','\ua9c1','\ua9c2','\ua9c3', + '\ua9c4','\ua9c5','\ua9c6','\ua9c7','\ua9c8','\ua9c9','\ua9ca', + '\ua9cb','\ua9cc','\ua9cd','\ua9ce','\ua9cf','\ua9d0','\ua9d1', + '\ua9d2','\ua9d3','\ua9d4','\ua9d5','\ua9d6','\ua9d7','\ua9d8', + '\ua9d9','\ua9da','\ua9db','\ua9dc','\ua9dd','\ua9de','\ua9df', + '\ua9e0','\ua9e1','\ua9e2','\ua9e3','\ua9e4','\ua9e5','\ua9e6', + '\ua9e7','\ua9e8','\ua9e9','\ua9ea','\ua9eb','\ua9ec','\ua9ed', + '\ua9ee','\ua9ef','\ua9f0','\ua9f1','\ua9f2','\ua9f3','\ua9f4', + '\ua9f5','\ua9f6','\ua9f7','\ua9f8','\ua9f9','\ua9fa','\ua9fb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+43264; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void faa00() { + char[] cs = new char[] { + '\uaa00','\uaa01','\uaa02','\uaa03','\uaa04','\uaa05','\uaa06', + '\uaa07','\uaa08','\uaa09','\uaa0a','\uaa0b','\uaa0c','\uaa0d', + '\uaa0e','\uaa0f','\uaa10','\uaa11','\uaa12','\uaa13','\uaa14', + '\uaa15','\uaa16','\uaa17','\uaa18','\uaa19','\uaa1a','\uaa1b', + '\uaa1c','\uaa1d','\uaa1e','\uaa1f','\uaa20','\uaa21','\uaa22', + '\uaa23','\uaa24','\uaa25','\uaa26','\uaa27','\uaa28','\uaa29', + '\uaa2a','\uaa2b','\uaa2c','\uaa2d','\uaa2e','\uaa2f','\uaa30', + '\uaa31','\uaa32','\uaa33','\uaa34','\uaa35','\uaa36','\uaa37', + '\uaa38','\uaa39','\uaa3a','\uaa3b','\uaa3c','\uaa3d','\uaa3e', + '\uaa3f','\uaa40','\uaa41','\uaa42','\uaa43','\uaa44','\uaa45', + '\uaa46','\uaa47','\uaa48','\uaa49','\uaa4a','\uaa4b','\uaa4c', + '\uaa4d','\uaa4e','\uaa4f','\uaa50','\uaa51','\uaa52','\uaa53', + '\uaa54','\uaa55','\uaa56','\uaa57','\uaa58','\uaa59','\uaa5a', + '\uaa5b','\uaa5c','\uaa5d','\uaa5e','\uaa5f','\uaa60','\uaa61', + '\uaa62','\uaa63','\uaa64','\uaa65','\uaa66','\uaa67','\uaa68', + '\uaa69','\uaa6a','\uaa6b','\uaa6c','\uaa6d','\uaa6e','\uaa6f', + '\uaa70','\uaa71','\uaa72','\uaa73','\uaa74','\uaa75','\uaa76', + '\uaa77','\uaa78','\uaa79','\uaa7a','\uaa7b','\uaa7c','\uaa7d', + '\uaa7e','\uaa7f','\uaa80','\uaa81','\uaa82','\uaa83','\uaa84', + '\uaa85','\uaa86','\uaa87','\uaa88','\uaa89','\uaa8a','\uaa8b', + '\uaa8c','\uaa8d','\uaa8e','\uaa8f','\uaa90','\uaa91','\uaa92', + '\uaa93','\uaa94','\uaa95','\uaa96','\uaa97','\uaa98','\uaa99', + '\uaa9a','\uaa9b','\uaa9c','\uaa9d','\uaa9e','\uaa9f','\uaaa0', + '\uaaa1','\uaaa2','\uaaa3','\uaaa4','\uaaa5','\uaaa6','\uaaa7', + '\uaaa8','\uaaa9','\uaaaa','\uaaab','\uaaac','\uaaad','\uaaae', + '\uaaaf','\uaab0','\uaab1','\uaab2','\uaab3','\uaab4','\uaab5', + '\uaab6','\uaab7','\uaab8','\uaab9','\uaaba','\uaabb','\uaabc', + '\uaabd','\uaabe','\uaabf','\uaac0','\uaac1','\uaac2','\uaac3', + '\uaac4','\uaac5','\uaac6','\uaac7','\uaac8','\uaac9','\uaaca', + '\uaacb','\uaacc','\uaacd','\uaace','\uaacf','\uaad0','\uaad1', + '\uaad2','\uaad3','\uaad4','\uaad5','\uaad6','\uaad7','\uaad8', + '\uaad9','\uaada','\uaadb','\uaadc','\uaadd','\uaade','\uaadf', + '\uaae0','\uaae1','\uaae2','\uaae3','\uaae4','\uaae5','\uaae6', + '\uaae7','\uaae8','\uaae9','\uaaea','\uaaeb','\uaaec','\uaaed', + '\uaaee','\uaaef','\uaaf0','\uaaf1','\uaaf2','\uaaf3','\uaaf4', + '\uaaf5','\uaaf6','\uaaf7','\uaaf8','\uaaf9','\uaafa','\uaafb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+43520; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void fab00() { + char[] cs = new char[] { + '\uab00','\uab01','\uab02','\uab03','\uab04','\uab05','\uab06', + '\uab07','\uab08','\uab09','\uab0a','\uab0b','\uab0c','\uab0d', + '\uab0e','\uab0f','\uab10','\uab11','\uab12','\uab13','\uab14', + '\uab15','\uab16','\uab17','\uab18','\uab19','\uab1a','\uab1b', + '\uab1c','\uab1d','\uab1e','\uab1f','\uab20','\uab21','\uab22', + '\uab23','\uab24','\uab25','\uab26','\uab27','\uab28','\uab29', + '\uab2a','\uab2b','\uab2c','\uab2d','\uab2e','\uab2f','\uab30', + '\uab31','\uab32','\uab33','\uab34','\uab35','\uab36','\uab37', + '\uab38','\uab39','\uab3a','\uab3b','\uab3c','\uab3d','\uab3e', + '\uab3f','\uab40','\uab41','\uab42','\uab43','\uab44','\uab45', + '\uab46','\uab47','\uab48','\uab49','\uab4a','\uab4b','\uab4c', + '\uab4d','\uab4e','\uab4f','\uab50','\uab51','\uab52','\uab53', + '\uab54','\uab55','\uab56','\uab57','\uab58','\uab59','\uab5a', + '\uab5b','\uab5c','\uab5d','\uab5e','\uab5f','\uab60','\uab61', + '\uab62','\uab63','\uab64','\uab65','\uab66','\uab67','\uab68', + '\uab69','\uab6a','\uab6b','\uab6c','\uab6d','\uab6e','\uab6f', + '\uab70','\uab71','\uab72','\uab73','\uab74','\uab75','\uab76', + '\uab77','\uab78','\uab79','\uab7a','\uab7b','\uab7c','\uab7d', + '\uab7e','\uab7f','\uab80','\uab81','\uab82','\uab83','\uab84', + '\uab85','\uab86','\uab87','\uab88','\uab89','\uab8a','\uab8b', + '\uab8c','\uab8d','\uab8e','\uab8f','\uab90','\uab91','\uab92', + '\uab93','\uab94','\uab95','\uab96','\uab97','\uab98','\uab99', + '\uab9a','\uab9b','\uab9c','\uab9d','\uab9e','\uab9f','\uaba0', + '\uaba1','\uaba2','\uaba3','\uaba4','\uaba5','\uaba6','\uaba7', + '\uaba8','\uaba9','\uabaa','\uabab','\uabac','\uabad','\uabae', + '\uabaf','\uabb0','\uabb1','\uabb2','\uabb3','\uabb4','\uabb5', + '\uabb6','\uabb7','\uabb8','\uabb9','\uabba','\uabbb','\uabbc', + '\uabbd','\uabbe','\uabbf','\uabc0','\uabc1','\uabc2','\uabc3', + '\uabc4','\uabc5','\uabc6','\uabc7','\uabc8','\uabc9','\uabca', + '\uabcb','\uabcc','\uabcd','\uabce','\uabcf','\uabd0','\uabd1', + '\uabd2','\uabd3','\uabd4','\uabd5','\uabd6','\uabd7','\uabd8', + '\uabd9','\uabda','\uabdb','\uabdc','\uabdd','\uabde','\uabdf', + '\uabe0','\uabe1','\uabe2','\uabe3','\uabe4','\uabe5','\uabe6', + '\uabe7','\uabe8','\uabe9','\uabea','\uabeb','\uabec','\uabed', + '\uabee','\uabef','\uabf0','\uabf1','\uabf2','\uabf3','\uabf4', + '\uabf5','\uabf6','\uabf7','\uabf8','\uabf9','\uabfa','\uabfb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+43776; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void fac00() { + char[] cs = new char[] { + '\uac00','\uac01','\uac02','\uac03','\uac04','\uac05','\uac06', + '\uac07','\uac08','\uac09','\uac0a','\uac0b','\uac0c','\uac0d', + '\uac0e','\uac0f','\uac10','\uac11','\uac12','\uac13','\uac14', + '\uac15','\uac16','\uac17','\uac18','\uac19','\uac1a','\uac1b', + '\uac1c','\uac1d','\uac1e','\uac1f','\uac20','\uac21','\uac22', + '\uac23','\uac24','\uac25','\uac26','\uac27','\uac28','\uac29', + '\uac2a','\uac2b','\uac2c','\uac2d','\uac2e','\uac2f','\uac30', + '\uac31','\uac32','\uac33','\uac34','\uac35','\uac36','\uac37', + '\uac38','\uac39','\uac3a','\uac3b','\uac3c','\uac3d','\uac3e', + '\uac3f','\uac40','\uac41','\uac42','\uac43','\uac44','\uac45', + '\uac46','\uac47','\uac48','\uac49','\uac4a','\uac4b','\uac4c', + '\uac4d','\uac4e','\uac4f','\uac50','\uac51','\uac52','\uac53', + '\uac54','\uac55','\uac56','\uac57','\uac58','\uac59','\uac5a', + '\uac5b','\uac5c','\uac5d','\uac5e','\uac5f','\uac60','\uac61', + '\uac62','\uac63','\uac64','\uac65','\uac66','\uac67','\uac68', + '\uac69','\uac6a','\uac6b','\uac6c','\uac6d','\uac6e','\uac6f', + '\uac70','\uac71','\uac72','\uac73','\uac74','\uac75','\uac76', + '\uac77','\uac78','\uac79','\uac7a','\uac7b','\uac7c','\uac7d', + '\uac7e','\uac7f','\uac80','\uac81','\uac82','\uac83','\uac84', + '\uac85','\uac86','\uac87','\uac88','\uac89','\uac8a','\uac8b', + '\uac8c','\uac8d','\uac8e','\uac8f','\uac90','\uac91','\uac92', + '\uac93','\uac94','\uac95','\uac96','\uac97','\uac98','\uac99', + '\uac9a','\uac9b','\uac9c','\uac9d','\uac9e','\uac9f','\uaca0', + '\uaca1','\uaca2','\uaca3','\uaca4','\uaca5','\uaca6','\uaca7', + '\uaca8','\uaca9','\uacaa','\uacab','\uacac','\uacad','\uacae', + '\uacaf','\uacb0','\uacb1','\uacb2','\uacb3','\uacb4','\uacb5', + '\uacb6','\uacb7','\uacb8','\uacb9','\uacba','\uacbb','\uacbc', + '\uacbd','\uacbe','\uacbf','\uacc0','\uacc1','\uacc2','\uacc3', + '\uacc4','\uacc5','\uacc6','\uacc7','\uacc8','\uacc9','\uacca', + '\uaccb','\uaccc','\uaccd','\uacce','\uaccf','\uacd0','\uacd1', + '\uacd2','\uacd3','\uacd4','\uacd5','\uacd6','\uacd7','\uacd8', + '\uacd9','\uacda','\uacdb','\uacdc','\uacdd','\uacde','\uacdf', + '\uace0','\uace1','\uace2','\uace3','\uace4','\uace5','\uace6', + '\uace7','\uace8','\uace9','\uacea','\uaceb','\uacec','\uaced', + '\uacee','\uacef','\uacf0','\uacf1','\uacf2','\uacf3','\uacf4', + '\uacf5','\uacf6','\uacf7','\uacf8','\uacf9','\uacfa','\uacfb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+44032; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void fad00() { + char[] cs = new char[] { + '\uad00','\uad01','\uad02','\uad03','\uad04','\uad05','\uad06', + '\uad07','\uad08','\uad09','\uad0a','\uad0b','\uad0c','\uad0d', + '\uad0e','\uad0f','\uad10','\uad11','\uad12','\uad13','\uad14', + '\uad15','\uad16','\uad17','\uad18','\uad19','\uad1a','\uad1b', + '\uad1c','\uad1d','\uad1e','\uad1f','\uad20','\uad21','\uad22', + '\uad23','\uad24','\uad25','\uad26','\uad27','\uad28','\uad29', + '\uad2a','\uad2b','\uad2c','\uad2d','\uad2e','\uad2f','\uad30', + '\uad31','\uad32','\uad33','\uad34','\uad35','\uad36','\uad37', + '\uad38','\uad39','\uad3a','\uad3b','\uad3c','\uad3d','\uad3e', + '\uad3f','\uad40','\uad41','\uad42','\uad43','\uad44','\uad45', + '\uad46','\uad47','\uad48','\uad49','\uad4a','\uad4b','\uad4c', + '\uad4d','\uad4e','\uad4f','\uad50','\uad51','\uad52','\uad53', + '\uad54','\uad55','\uad56','\uad57','\uad58','\uad59','\uad5a', + '\uad5b','\uad5c','\uad5d','\uad5e','\uad5f','\uad60','\uad61', + '\uad62','\uad63','\uad64','\uad65','\uad66','\uad67','\uad68', + '\uad69','\uad6a','\uad6b','\uad6c','\uad6d','\uad6e','\uad6f', + '\uad70','\uad71','\uad72','\uad73','\uad74','\uad75','\uad76', + '\uad77','\uad78','\uad79','\uad7a','\uad7b','\uad7c','\uad7d', + '\uad7e','\uad7f','\uad80','\uad81','\uad82','\uad83','\uad84', + '\uad85','\uad86','\uad87','\uad88','\uad89','\uad8a','\uad8b', + '\uad8c','\uad8d','\uad8e','\uad8f','\uad90','\uad91','\uad92', + '\uad93','\uad94','\uad95','\uad96','\uad97','\uad98','\uad99', + '\uad9a','\uad9b','\uad9c','\uad9d','\uad9e','\uad9f','\uada0', + '\uada1','\uada2','\uada3','\uada4','\uada5','\uada6','\uada7', + '\uada8','\uada9','\uadaa','\uadab','\uadac','\uadad','\uadae', + '\uadaf','\uadb0','\uadb1','\uadb2','\uadb3','\uadb4','\uadb5', + '\uadb6','\uadb7','\uadb8','\uadb9','\uadba','\uadbb','\uadbc', + '\uadbd','\uadbe','\uadbf','\uadc0','\uadc1','\uadc2','\uadc3', + '\uadc4','\uadc5','\uadc6','\uadc7','\uadc8','\uadc9','\uadca', + '\uadcb','\uadcc','\uadcd','\uadce','\uadcf','\uadd0','\uadd1', + '\uadd2','\uadd3','\uadd4','\uadd5','\uadd6','\uadd7','\uadd8', + '\uadd9','\uadda','\uaddb','\uaddc','\uaddd','\uadde','\uaddf', + '\uade0','\uade1','\uade2','\uade3','\uade4','\uade5','\uade6', + '\uade7','\uade8','\uade9','\uadea','\uadeb','\uadec','\uaded', + '\uadee','\uadef','\uadf0','\uadf1','\uadf2','\uadf3','\uadf4', + '\uadf5','\uadf6','\uadf7','\uadf8','\uadf9','\uadfa','\uadfb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+44288; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void fae00() { + char[] cs = new char[] { + '\uae00','\uae01','\uae02','\uae03','\uae04','\uae05','\uae06', + '\uae07','\uae08','\uae09','\uae0a','\uae0b','\uae0c','\uae0d', + '\uae0e','\uae0f','\uae10','\uae11','\uae12','\uae13','\uae14', + '\uae15','\uae16','\uae17','\uae18','\uae19','\uae1a','\uae1b', + '\uae1c','\uae1d','\uae1e','\uae1f','\uae20','\uae21','\uae22', + '\uae23','\uae24','\uae25','\uae26','\uae27','\uae28','\uae29', + '\uae2a','\uae2b','\uae2c','\uae2d','\uae2e','\uae2f','\uae30', + '\uae31','\uae32','\uae33','\uae34','\uae35','\uae36','\uae37', + '\uae38','\uae39','\uae3a','\uae3b','\uae3c','\uae3d','\uae3e', + '\uae3f','\uae40','\uae41','\uae42','\uae43','\uae44','\uae45', + '\uae46','\uae47','\uae48','\uae49','\uae4a','\uae4b','\uae4c', + '\uae4d','\uae4e','\uae4f','\uae50','\uae51','\uae52','\uae53', + '\uae54','\uae55','\uae56','\uae57','\uae58','\uae59','\uae5a', + '\uae5b','\uae5c','\uae5d','\uae5e','\uae5f','\uae60','\uae61', + '\uae62','\uae63','\uae64','\uae65','\uae66','\uae67','\uae68', + '\uae69','\uae6a','\uae6b','\uae6c','\uae6d','\uae6e','\uae6f', + '\uae70','\uae71','\uae72','\uae73','\uae74','\uae75','\uae76', + '\uae77','\uae78','\uae79','\uae7a','\uae7b','\uae7c','\uae7d', + '\uae7e','\uae7f','\uae80','\uae81','\uae82','\uae83','\uae84', + '\uae85','\uae86','\uae87','\uae88','\uae89','\uae8a','\uae8b', + '\uae8c','\uae8d','\uae8e','\uae8f','\uae90','\uae91','\uae92', + '\uae93','\uae94','\uae95','\uae96','\uae97','\uae98','\uae99', + '\uae9a','\uae9b','\uae9c','\uae9d','\uae9e','\uae9f','\uaea0', + '\uaea1','\uaea2','\uaea3','\uaea4','\uaea5','\uaea6','\uaea7', + '\uaea8','\uaea9','\uaeaa','\uaeab','\uaeac','\uaead','\uaeae', + '\uaeaf','\uaeb0','\uaeb1','\uaeb2','\uaeb3','\uaeb4','\uaeb5', + '\uaeb6','\uaeb7','\uaeb8','\uaeb9','\uaeba','\uaebb','\uaebc', + '\uaebd','\uaebe','\uaebf','\uaec0','\uaec1','\uaec2','\uaec3', + '\uaec4','\uaec5','\uaec6','\uaec7','\uaec8','\uaec9','\uaeca', + '\uaecb','\uaecc','\uaecd','\uaece','\uaecf','\uaed0','\uaed1', + '\uaed2','\uaed3','\uaed4','\uaed5','\uaed6','\uaed7','\uaed8', + '\uaed9','\uaeda','\uaedb','\uaedc','\uaedd','\uaede','\uaedf', + '\uaee0','\uaee1','\uaee2','\uaee3','\uaee4','\uaee5','\uaee6', + '\uaee7','\uaee8','\uaee9','\uaeea','\uaeeb','\uaeec','\uaeed', + '\uaeee','\uaeef','\uaef0','\uaef1','\uaef2','\uaef3','\uaef4', + '\uaef5','\uaef6','\uaef7','\uaef8','\uaef9','\uaefa','\uaefb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+44544; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void faf00() { + char[] cs = new char[] { + '\uaf00','\uaf01','\uaf02','\uaf03','\uaf04','\uaf05','\uaf06', + '\uaf07','\uaf08','\uaf09','\uaf0a','\uaf0b','\uaf0c','\uaf0d', + '\uaf0e','\uaf0f','\uaf10','\uaf11','\uaf12','\uaf13','\uaf14', + '\uaf15','\uaf16','\uaf17','\uaf18','\uaf19','\uaf1a','\uaf1b', + '\uaf1c','\uaf1d','\uaf1e','\uaf1f','\uaf20','\uaf21','\uaf22', + '\uaf23','\uaf24','\uaf25','\uaf26','\uaf27','\uaf28','\uaf29', + '\uaf2a','\uaf2b','\uaf2c','\uaf2d','\uaf2e','\uaf2f','\uaf30', + '\uaf31','\uaf32','\uaf33','\uaf34','\uaf35','\uaf36','\uaf37', + '\uaf38','\uaf39','\uaf3a','\uaf3b','\uaf3c','\uaf3d','\uaf3e', + '\uaf3f','\uaf40','\uaf41','\uaf42','\uaf43','\uaf44','\uaf45', + '\uaf46','\uaf47','\uaf48','\uaf49','\uaf4a','\uaf4b','\uaf4c', + '\uaf4d','\uaf4e','\uaf4f','\uaf50','\uaf51','\uaf52','\uaf53', + '\uaf54','\uaf55','\uaf56','\uaf57','\uaf58','\uaf59','\uaf5a', + '\uaf5b','\uaf5c','\uaf5d','\uaf5e','\uaf5f','\uaf60','\uaf61', + '\uaf62','\uaf63','\uaf64','\uaf65','\uaf66','\uaf67','\uaf68', + '\uaf69','\uaf6a','\uaf6b','\uaf6c','\uaf6d','\uaf6e','\uaf6f', + '\uaf70','\uaf71','\uaf72','\uaf73','\uaf74','\uaf75','\uaf76', + '\uaf77','\uaf78','\uaf79','\uaf7a','\uaf7b','\uaf7c','\uaf7d', + '\uaf7e','\uaf7f','\uaf80','\uaf81','\uaf82','\uaf83','\uaf84', + '\uaf85','\uaf86','\uaf87','\uaf88','\uaf89','\uaf8a','\uaf8b', + '\uaf8c','\uaf8d','\uaf8e','\uaf8f','\uaf90','\uaf91','\uaf92', + '\uaf93','\uaf94','\uaf95','\uaf96','\uaf97','\uaf98','\uaf99', + '\uaf9a','\uaf9b','\uaf9c','\uaf9d','\uaf9e','\uaf9f','\uafa0', + '\uafa1','\uafa2','\uafa3','\uafa4','\uafa5','\uafa6','\uafa7', + '\uafa8','\uafa9','\uafaa','\uafab','\uafac','\uafad','\uafae', + '\uafaf','\uafb0','\uafb1','\uafb2','\uafb3','\uafb4','\uafb5', + '\uafb6','\uafb7','\uafb8','\uafb9','\uafba','\uafbb','\uafbc', + '\uafbd','\uafbe','\uafbf','\uafc0','\uafc1','\uafc2','\uafc3', + '\uafc4','\uafc5','\uafc6','\uafc7','\uafc8','\uafc9','\uafca', + '\uafcb','\uafcc','\uafcd','\uafce','\uafcf','\uafd0','\uafd1', + '\uafd2','\uafd3','\uafd4','\uafd5','\uafd6','\uafd7','\uafd8', + '\uafd9','\uafda','\uafdb','\uafdc','\uafdd','\uafde','\uafdf', + '\uafe0','\uafe1','\uafe2','\uafe3','\uafe4','\uafe5','\uafe6', + '\uafe7','\uafe8','\uafe9','\uafea','\uafeb','\uafec','\uafed', + '\uafee','\uafef','\uaff0','\uaff1','\uaff2','\uaff3','\uaff4', + '\uaff5','\uaff6','\uaff7','\uaff8','\uaff9','\uaffa','\uaffb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+44800; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void fb000() { + char[] cs = new char[] { + '\ub000','\ub001','\ub002','\ub003','\ub004','\ub005','\ub006', + '\ub007','\ub008','\ub009','\ub00a','\ub00b','\ub00c','\ub00d', + '\ub00e','\ub00f','\ub010','\ub011','\ub012','\ub013','\ub014', + '\ub015','\ub016','\ub017','\ub018','\ub019','\ub01a','\ub01b', + '\ub01c','\ub01d','\ub01e','\ub01f','\ub020','\ub021','\ub022', + '\ub023','\ub024','\ub025','\ub026','\ub027','\ub028','\ub029', + '\ub02a','\ub02b','\ub02c','\ub02d','\ub02e','\ub02f','\ub030', + '\ub031','\ub032','\ub033','\ub034','\ub035','\ub036','\ub037', + '\ub038','\ub039','\ub03a','\ub03b','\ub03c','\ub03d','\ub03e', + '\ub03f','\ub040','\ub041','\ub042','\ub043','\ub044','\ub045', + '\ub046','\ub047','\ub048','\ub049','\ub04a','\ub04b','\ub04c', + '\ub04d','\ub04e','\ub04f','\ub050','\ub051','\ub052','\ub053', + '\ub054','\ub055','\ub056','\ub057','\ub058','\ub059','\ub05a', + '\ub05b','\ub05c','\ub05d','\ub05e','\ub05f','\ub060','\ub061', + '\ub062','\ub063','\ub064','\ub065','\ub066','\ub067','\ub068', + '\ub069','\ub06a','\ub06b','\ub06c','\ub06d','\ub06e','\ub06f', + '\ub070','\ub071','\ub072','\ub073','\ub074','\ub075','\ub076', + '\ub077','\ub078','\ub079','\ub07a','\ub07b','\ub07c','\ub07d', + '\ub07e','\ub07f','\ub080','\ub081','\ub082','\ub083','\ub084', + '\ub085','\ub086','\ub087','\ub088','\ub089','\ub08a','\ub08b', + '\ub08c','\ub08d','\ub08e','\ub08f','\ub090','\ub091','\ub092', + '\ub093','\ub094','\ub095','\ub096','\ub097','\ub098','\ub099', + '\ub09a','\ub09b','\ub09c','\ub09d','\ub09e','\ub09f','\ub0a0', + '\ub0a1','\ub0a2','\ub0a3','\ub0a4','\ub0a5','\ub0a6','\ub0a7', + '\ub0a8','\ub0a9','\ub0aa','\ub0ab','\ub0ac','\ub0ad','\ub0ae', + '\ub0af','\ub0b0','\ub0b1','\ub0b2','\ub0b3','\ub0b4','\ub0b5', + '\ub0b6','\ub0b7','\ub0b8','\ub0b9','\ub0ba','\ub0bb','\ub0bc', + '\ub0bd','\ub0be','\ub0bf','\ub0c0','\ub0c1','\ub0c2','\ub0c3', + '\ub0c4','\ub0c5','\ub0c6','\ub0c7','\ub0c8','\ub0c9','\ub0ca', + '\ub0cb','\ub0cc','\ub0cd','\ub0ce','\ub0cf','\ub0d0','\ub0d1', + '\ub0d2','\ub0d3','\ub0d4','\ub0d5','\ub0d6','\ub0d7','\ub0d8', + '\ub0d9','\ub0da','\ub0db','\ub0dc','\ub0dd','\ub0de','\ub0df', + '\ub0e0','\ub0e1','\ub0e2','\ub0e3','\ub0e4','\ub0e5','\ub0e6', + '\ub0e7','\ub0e8','\ub0e9','\ub0ea','\ub0eb','\ub0ec','\ub0ed', + '\ub0ee','\ub0ef','\ub0f0','\ub0f1','\ub0f2','\ub0f3','\ub0f4', + '\ub0f5','\ub0f6','\ub0f7','\ub0f8','\ub0f9','\ub0fa','\ub0fb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+45056; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void fb100() { + char[] cs = new char[] { + '\ub100','\ub101','\ub102','\ub103','\ub104','\ub105','\ub106', + '\ub107','\ub108','\ub109','\ub10a','\ub10b','\ub10c','\ub10d', + '\ub10e','\ub10f','\ub110','\ub111','\ub112','\ub113','\ub114', + '\ub115','\ub116','\ub117','\ub118','\ub119','\ub11a','\ub11b', + '\ub11c','\ub11d','\ub11e','\ub11f','\ub120','\ub121','\ub122', + '\ub123','\ub124','\ub125','\ub126','\ub127','\ub128','\ub129', + '\ub12a','\ub12b','\ub12c','\ub12d','\ub12e','\ub12f','\ub130', + '\ub131','\ub132','\ub133','\ub134','\ub135','\ub136','\ub137', + '\ub138','\ub139','\ub13a','\ub13b','\ub13c','\ub13d','\ub13e', + '\ub13f','\ub140','\ub141','\ub142','\ub143','\ub144','\ub145', + '\ub146','\ub147','\ub148','\ub149','\ub14a','\ub14b','\ub14c', + '\ub14d','\ub14e','\ub14f','\ub150','\ub151','\ub152','\ub153', + '\ub154','\ub155','\ub156','\ub157','\ub158','\ub159','\ub15a', + '\ub15b','\ub15c','\ub15d','\ub15e','\ub15f','\ub160','\ub161', + '\ub162','\ub163','\ub164','\ub165','\ub166','\ub167','\ub168', + '\ub169','\ub16a','\ub16b','\ub16c','\ub16d','\ub16e','\ub16f', + '\ub170','\ub171','\ub172','\ub173','\ub174','\ub175','\ub176', + '\ub177','\ub178','\ub179','\ub17a','\ub17b','\ub17c','\ub17d', + '\ub17e','\ub17f','\ub180','\ub181','\ub182','\ub183','\ub184', + '\ub185','\ub186','\ub187','\ub188','\ub189','\ub18a','\ub18b', + '\ub18c','\ub18d','\ub18e','\ub18f','\ub190','\ub191','\ub192', + '\ub193','\ub194','\ub195','\ub196','\ub197','\ub198','\ub199', + '\ub19a','\ub19b','\ub19c','\ub19d','\ub19e','\ub19f','\ub1a0', + '\ub1a1','\ub1a2','\ub1a3','\ub1a4','\ub1a5','\ub1a6','\ub1a7', + '\ub1a8','\ub1a9','\ub1aa','\ub1ab','\ub1ac','\ub1ad','\ub1ae', + '\ub1af','\ub1b0','\ub1b1','\ub1b2','\ub1b3','\ub1b4','\ub1b5', + '\ub1b6','\ub1b7','\ub1b8','\ub1b9','\ub1ba','\ub1bb','\ub1bc', + '\ub1bd','\ub1be','\ub1bf','\ub1c0','\ub1c1','\ub1c2','\ub1c3', + '\ub1c4','\ub1c5','\ub1c6','\ub1c7','\ub1c8','\ub1c9','\ub1ca', + '\ub1cb','\ub1cc','\ub1cd','\ub1ce','\ub1cf','\ub1d0','\ub1d1', + '\ub1d2','\ub1d3','\ub1d4','\ub1d5','\ub1d6','\ub1d7','\ub1d8', + '\ub1d9','\ub1da','\ub1db','\ub1dc','\ub1dd','\ub1de','\ub1df', + '\ub1e0','\ub1e1','\ub1e2','\ub1e3','\ub1e4','\ub1e5','\ub1e6', + '\ub1e7','\ub1e8','\ub1e9','\ub1ea','\ub1eb','\ub1ec','\ub1ed', + '\ub1ee','\ub1ef','\ub1f0','\ub1f1','\ub1f2','\ub1f3','\ub1f4', + '\ub1f5','\ub1f6','\ub1f7','\ub1f8','\ub1f9','\ub1fa','\ub1fb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+45312; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void fb200() { + char[] cs = new char[] { + '\ub200','\ub201','\ub202','\ub203','\ub204','\ub205','\ub206', + '\ub207','\ub208','\ub209','\ub20a','\ub20b','\ub20c','\ub20d', + '\ub20e','\ub20f','\ub210','\ub211','\ub212','\ub213','\ub214', + '\ub215','\ub216','\ub217','\ub218','\ub219','\ub21a','\ub21b', + '\ub21c','\ub21d','\ub21e','\ub21f','\ub220','\ub221','\ub222', + '\ub223','\ub224','\ub225','\ub226','\ub227','\ub228','\ub229', + '\ub22a','\ub22b','\ub22c','\ub22d','\ub22e','\ub22f','\ub230', + '\ub231','\ub232','\ub233','\ub234','\ub235','\ub236','\ub237', + '\ub238','\ub239','\ub23a','\ub23b','\ub23c','\ub23d','\ub23e', + '\ub23f','\ub240','\ub241','\ub242','\ub243','\ub244','\ub245', + '\ub246','\ub247','\ub248','\ub249','\ub24a','\ub24b','\ub24c', + '\ub24d','\ub24e','\ub24f','\ub250','\ub251','\ub252','\ub253', + '\ub254','\ub255','\ub256','\ub257','\ub258','\ub259','\ub25a', + '\ub25b','\ub25c','\ub25d','\ub25e','\ub25f','\ub260','\ub261', + '\ub262','\ub263','\ub264','\ub265','\ub266','\ub267','\ub268', + '\ub269','\ub26a','\ub26b','\ub26c','\ub26d','\ub26e','\ub26f', + '\ub270','\ub271','\ub272','\ub273','\ub274','\ub275','\ub276', + '\ub277','\ub278','\ub279','\ub27a','\ub27b','\ub27c','\ub27d', + '\ub27e','\ub27f','\ub280','\ub281','\ub282','\ub283','\ub284', + '\ub285','\ub286','\ub287','\ub288','\ub289','\ub28a','\ub28b', + '\ub28c','\ub28d','\ub28e','\ub28f','\ub290','\ub291','\ub292', + '\ub293','\ub294','\ub295','\ub296','\ub297','\ub298','\ub299', + '\ub29a','\ub29b','\ub29c','\ub29d','\ub29e','\ub29f','\ub2a0', + '\ub2a1','\ub2a2','\ub2a3','\ub2a4','\ub2a5','\ub2a6','\ub2a7', + '\ub2a8','\ub2a9','\ub2aa','\ub2ab','\ub2ac','\ub2ad','\ub2ae', + '\ub2af','\ub2b0','\ub2b1','\ub2b2','\ub2b3','\ub2b4','\ub2b5', + '\ub2b6','\ub2b7','\ub2b8','\ub2b9','\ub2ba','\ub2bb','\ub2bc', + '\ub2bd','\ub2be','\ub2bf','\ub2c0','\ub2c1','\ub2c2','\ub2c3', + '\ub2c4','\ub2c5','\ub2c6','\ub2c7','\ub2c8','\ub2c9','\ub2ca', + '\ub2cb','\ub2cc','\ub2cd','\ub2ce','\ub2cf','\ub2d0','\ub2d1', + '\ub2d2','\ub2d3','\ub2d4','\ub2d5','\ub2d6','\ub2d7','\ub2d8', + '\ub2d9','\ub2da','\ub2db','\ub2dc','\ub2dd','\ub2de','\ub2df', + '\ub2e0','\ub2e1','\ub2e2','\ub2e3','\ub2e4','\ub2e5','\ub2e6', + '\ub2e7','\ub2e8','\ub2e9','\ub2ea','\ub2eb','\ub2ec','\ub2ed', + '\ub2ee','\ub2ef','\ub2f0','\ub2f1','\ub2f2','\ub2f3','\ub2f4', + '\ub2f5','\ub2f6','\ub2f7','\ub2f8','\ub2f9','\ub2fa','\ub2fb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+45568; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void fb300() { + char[] cs = new char[] { + '\ub300','\ub301','\ub302','\ub303','\ub304','\ub305','\ub306', + '\ub307','\ub308','\ub309','\ub30a','\ub30b','\ub30c','\ub30d', + '\ub30e','\ub30f','\ub310','\ub311','\ub312','\ub313','\ub314', + '\ub315','\ub316','\ub317','\ub318','\ub319','\ub31a','\ub31b', + '\ub31c','\ub31d','\ub31e','\ub31f','\ub320','\ub321','\ub322', + '\ub323','\ub324','\ub325','\ub326','\ub327','\ub328','\ub329', + '\ub32a','\ub32b','\ub32c','\ub32d','\ub32e','\ub32f','\ub330', + '\ub331','\ub332','\ub333','\ub334','\ub335','\ub336','\ub337', + '\ub338','\ub339','\ub33a','\ub33b','\ub33c','\ub33d','\ub33e', + '\ub33f','\ub340','\ub341','\ub342','\ub343','\ub344','\ub345', + '\ub346','\ub347','\ub348','\ub349','\ub34a','\ub34b','\ub34c', + '\ub34d','\ub34e','\ub34f','\ub350','\ub351','\ub352','\ub353', + '\ub354','\ub355','\ub356','\ub357','\ub358','\ub359','\ub35a', + '\ub35b','\ub35c','\ub35d','\ub35e','\ub35f','\ub360','\ub361', + '\ub362','\ub363','\ub364','\ub365','\ub366','\ub367','\ub368', + '\ub369','\ub36a','\ub36b','\ub36c','\ub36d','\ub36e','\ub36f', + '\ub370','\ub371','\ub372','\ub373','\ub374','\ub375','\ub376', + '\ub377','\ub378','\ub379','\ub37a','\ub37b','\ub37c','\ub37d', + '\ub37e','\ub37f','\ub380','\ub381','\ub382','\ub383','\ub384', + '\ub385','\ub386','\ub387','\ub388','\ub389','\ub38a','\ub38b', + '\ub38c','\ub38d','\ub38e','\ub38f','\ub390','\ub391','\ub392', + '\ub393','\ub394','\ub395','\ub396','\ub397','\ub398','\ub399', + '\ub39a','\ub39b','\ub39c','\ub39d','\ub39e','\ub39f','\ub3a0', + '\ub3a1','\ub3a2','\ub3a3','\ub3a4','\ub3a5','\ub3a6','\ub3a7', + '\ub3a8','\ub3a9','\ub3aa','\ub3ab','\ub3ac','\ub3ad','\ub3ae', + '\ub3af','\ub3b0','\ub3b1','\ub3b2','\ub3b3','\ub3b4','\ub3b5', + '\ub3b6','\ub3b7','\ub3b8','\ub3b9','\ub3ba','\ub3bb','\ub3bc', + '\ub3bd','\ub3be','\ub3bf','\ub3c0','\ub3c1','\ub3c2','\ub3c3', + '\ub3c4','\ub3c5','\ub3c6','\ub3c7','\ub3c8','\ub3c9','\ub3ca', + '\ub3cb','\ub3cc','\ub3cd','\ub3ce','\ub3cf','\ub3d0','\ub3d1', + '\ub3d2','\ub3d3','\ub3d4','\ub3d5','\ub3d6','\ub3d7','\ub3d8', + '\ub3d9','\ub3da','\ub3db','\ub3dc','\ub3dd','\ub3de','\ub3df', + '\ub3e0','\ub3e1','\ub3e2','\ub3e3','\ub3e4','\ub3e5','\ub3e6', + '\ub3e7','\ub3e8','\ub3e9','\ub3ea','\ub3eb','\ub3ec','\ub3ed', + '\ub3ee','\ub3ef','\ub3f0','\ub3f1','\ub3f2','\ub3f3','\ub3f4', + '\ub3f5','\ub3f6','\ub3f7','\ub3f8','\ub3f9','\ub3fa','\ub3fb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+45824; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void fb400() { + char[] cs = new char[] { + '\ub400','\ub401','\ub402','\ub403','\ub404','\ub405','\ub406', + '\ub407','\ub408','\ub409','\ub40a','\ub40b','\ub40c','\ub40d', + '\ub40e','\ub40f','\ub410','\ub411','\ub412','\ub413','\ub414', + '\ub415','\ub416','\ub417','\ub418','\ub419','\ub41a','\ub41b', + '\ub41c','\ub41d','\ub41e','\ub41f','\ub420','\ub421','\ub422', + '\ub423','\ub424','\ub425','\ub426','\ub427','\ub428','\ub429', + '\ub42a','\ub42b','\ub42c','\ub42d','\ub42e','\ub42f','\ub430', + '\ub431','\ub432','\ub433','\ub434','\ub435','\ub436','\ub437', + '\ub438','\ub439','\ub43a','\ub43b','\ub43c','\ub43d','\ub43e', + '\ub43f','\ub440','\ub441','\ub442','\ub443','\ub444','\ub445', + '\ub446','\ub447','\ub448','\ub449','\ub44a','\ub44b','\ub44c', + '\ub44d','\ub44e','\ub44f','\ub450','\ub451','\ub452','\ub453', + '\ub454','\ub455','\ub456','\ub457','\ub458','\ub459','\ub45a', + '\ub45b','\ub45c','\ub45d','\ub45e','\ub45f','\ub460','\ub461', + '\ub462','\ub463','\ub464','\ub465','\ub466','\ub467','\ub468', + '\ub469','\ub46a','\ub46b','\ub46c','\ub46d','\ub46e','\ub46f', + '\ub470','\ub471','\ub472','\ub473','\ub474','\ub475','\ub476', + '\ub477','\ub478','\ub479','\ub47a','\ub47b','\ub47c','\ub47d', + '\ub47e','\ub47f','\ub480','\ub481','\ub482','\ub483','\ub484', + '\ub485','\ub486','\ub487','\ub488','\ub489','\ub48a','\ub48b', + '\ub48c','\ub48d','\ub48e','\ub48f','\ub490','\ub491','\ub492', + '\ub493','\ub494','\ub495','\ub496','\ub497','\ub498','\ub499', + '\ub49a','\ub49b','\ub49c','\ub49d','\ub49e','\ub49f','\ub4a0', + '\ub4a1','\ub4a2','\ub4a3','\ub4a4','\ub4a5','\ub4a6','\ub4a7', + '\ub4a8','\ub4a9','\ub4aa','\ub4ab','\ub4ac','\ub4ad','\ub4ae', + '\ub4af','\ub4b0','\ub4b1','\ub4b2','\ub4b3','\ub4b4','\ub4b5', + '\ub4b6','\ub4b7','\ub4b8','\ub4b9','\ub4ba','\ub4bb','\ub4bc', + '\ub4bd','\ub4be','\ub4bf','\ub4c0','\ub4c1','\ub4c2','\ub4c3', + '\ub4c4','\ub4c5','\ub4c6','\ub4c7','\ub4c8','\ub4c9','\ub4ca', + '\ub4cb','\ub4cc','\ub4cd','\ub4ce','\ub4cf','\ub4d0','\ub4d1', + '\ub4d2','\ub4d3','\ub4d4','\ub4d5','\ub4d6','\ub4d7','\ub4d8', + '\ub4d9','\ub4da','\ub4db','\ub4dc','\ub4dd','\ub4de','\ub4df', + '\ub4e0','\ub4e1','\ub4e2','\ub4e3','\ub4e4','\ub4e5','\ub4e6', + '\ub4e7','\ub4e8','\ub4e9','\ub4ea','\ub4eb','\ub4ec','\ub4ed', + '\ub4ee','\ub4ef','\ub4f0','\ub4f1','\ub4f2','\ub4f3','\ub4f4', + '\ub4f5','\ub4f6','\ub4f7','\ub4f8','\ub4f9','\ub4fa','\ub4fb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+46080; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void fb500() { + char[] cs = new char[] { + '\ub500','\ub501','\ub502','\ub503','\ub504','\ub505','\ub506', + '\ub507','\ub508','\ub509','\ub50a','\ub50b','\ub50c','\ub50d', + '\ub50e','\ub50f','\ub510','\ub511','\ub512','\ub513','\ub514', + '\ub515','\ub516','\ub517','\ub518','\ub519','\ub51a','\ub51b', + '\ub51c','\ub51d','\ub51e','\ub51f','\ub520','\ub521','\ub522', + '\ub523','\ub524','\ub525','\ub526','\ub527','\ub528','\ub529', + '\ub52a','\ub52b','\ub52c','\ub52d','\ub52e','\ub52f','\ub530', + '\ub531','\ub532','\ub533','\ub534','\ub535','\ub536','\ub537', + '\ub538','\ub539','\ub53a','\ub53b','\ub53c','\ub53d','\ub53e', + '\ub53f','\ub540','\ub541','\ub542','\ub543','\ub544','\ub545', + '\ub546','\ub547','\ub548','\ub549','\ub54a','\ub54b','\ub54c', + '\ub54d','\ub54e','\ub54f','\ub550','\ub551','\ub552','\ub553', + '\ub554','\ub555','\ub556','\ub557','\ub558','\ub559','\ub55a', + '\ub55b','\ub55c','\ub55d','\ub55e','\ub55f','\ub560','\ub561', + '\ub562','\ub563','\ub564','\ub565','\ub566','\ub567','\ub568', + '\ub569','\ub56a','\ub56b','\ub56c','\ub56d','\ub56e','\ub56f', + '\ub570','\ub571','\ub572','\ub573','\ub574','\ub575','\ub576', + '\ub577','\ub578','\ub579','\ub57a','\ub57b','\ub57c','\ub57d', + '\ub57e','\ub57f','\ub580','\ub581','\ub582','\ub583','\ub584', + '\ub585','\ub586','\ub587','\ub588','\ub589','\ub58a','\ub58b', + '\ub58c','\ub58d','\ub58e','\ub58f','\ub590','\ub591','\ub592', + '\ub593','\ub594','\ub595','\ub596','\ub597','\ub598','\ub599', + '\ub59a','\ub59b','\ub59c','\ub59d','\ub59e','\ub59f','\ub5a0', + '\ub5a1','\ub5a2','\ub5a3','\ub5a4','\ub5a5','\ub5a6','\ub5a7', + '\ub5a8','\ub5a9','\ub5aa','\ub5ab','\ub5ac','\ub5ad','\ub5ae', + '\ub5af','\ub5b0','\ub5b1','\ub5b2','\ub5b3','\ub5b4','\ub5b5', + '\ub5b6','\ub5b7','\ub5b8','\ub5b9','\ub5ba','\ub5bb','\ub5bc', + '\ub5bd','\ub5be','\ub5bf','\ub5c0','\ub5c1','\ub5c2','\ub5c3', + '\ub5c4','\ub5c5','\ub5c6','\ub5c7','\ub5c8','\ub5c9','\ub5ca', + '\ub5cb','\ub5cc','\ub5cd','\ub5ce','\ub5cf','\ub5d0','\ub5d1', + '\ub5d2','\ub5d3','\ub5d4','\ub5d5','\ub5d6','\ub5d7','\ub5d8', + '\ub5d9','\ub5da','\ub5db','\ub5dc','\ub5dd','\ub5de','\ub5df', + '\ub5e0','\ub5e1','\ub5e2','\ub5e3','\ub5e4','\ub5e5','\ub5e6', + '\ub5e7','\ub5e8','\ub5e9','\ub5ea','\ub5eb','\ub5ec','\ub5ed', + '\ub5ee','\ub5ef','\ub5f0','\ub5f1','\ub5f2','\ub5f3','\ub5f4', + '\ub5f5','\ub5f6','\ub5f7','\ub5f8','\ub5f9','\ub5fa','\ub5fb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+46336; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void fb600() { + char[] cs = new char[] { + '\ub600','\ub601','\ub602','\ub603','\ub604','\ub605','\ub606', + '\ub607','\ub608','\ub609','\ub60a','\ub60b','\ub60c','\ub60d', + '\ub60e','\ub60f','\ub610','\ub611','\ub612','\ub613','\ub614', + '\ub615','\ub616','\ub617','\ub618','\ub619','\ub61a','\ub61b', + '\ub61c','\ub61d','\ub61e','\ub61f','\ub620','\ub621','\ub622', + '\ub623','\ub624','\ub625','\ub626','\ub627','\ub628','\ub629', + '\ub62a','\ub62b','\ub62c','\ub62d','\ub62e','\ub62f','\ub630', + '\ub631','\ub632','\ub633','\ub634','\ub635','\ub636','\ub637', + '\ub638','\ub639','\ub63a','\ub63b','\ub63c','\ub63d','\ub63e', + '\ub63f','\ub640','\ub641','\ub642','\ub643','\ub644','\ub645', + '\ub646','\ub647','\ub648','\ub649','\ub64a','\ub64b','\ub64c', + '\ub64d','\ub64e','\ub64f','\ub650','\ub651','\ub652','\ub653', + '\ub654','\ub655','\ub656','\ub657','\ub658','\ub659','\ub65a', + '\ub65b','\ub65c','\ub65d','\ub65e','\ub65f','\ub660','\ub661', + '\ub662','\ub663','\ub664','\ub665','\ub666','\ub667','\ub668', + '\ub669','\ub66a','\ub66b','\ub66c','\ub66d','\ub66e','\ub66f', + '\ub670','\ub671','\ub672','\ub673','\ub674','\ub675','\ub676', + '\ub677','\ub678','\ub679','\ub67a','\ub67b','\ub67c','\ub67d', + '\ub67e','\ub67f','\ub680','\ub681','\ub682','\ub683','\ub684', + '\ub685','\ub686','\ub687','\ub688','\ub689','\ub68a','\ub68b', + '\ub68c','\ub68d','\ub68e','\ub68f','\ub690','\ub691','\ub692', + '\ub693','\ub694','\ub695','\ub696','\ub697','\ub698','\ub699', + '\ub69a','\ub69b','\ub69c','\ub69d','\ub69e','\ub69f','\ub6a0', + '\ub6a1','\ub6a2','\ub6a3','\ub6a4','\ub6a5','\ub6a6','\ub6a7', + '\ub6a8','\ub6a9','\ub6aa','\ub6ab','\ub6ac','\ub6ad','\ub6ae', + '\ub6af','\ub6b0','\ub6b1','\ub6b2','\ub6b3','\ub6b4','\ub6b5', + '\ub6b6','\ub6b7','\ub6b8','\ub6b9','\ub6ba','\ub6bb','\ub6bc', + '\ub6bd','\ub6be','\ub6bf','\ub6c0','\ub6c1','\ub6c2','\ub6c3', + '\ub6c4','\ub6c5','\ub6c6','\ub6c7','\ub6c8','\ub6c9','\ub6ca', + '\ub6cb','\ub6cc','\ub6cd','\ub6ce','\ub6cf','\ub6d0','\ub6d1', + '\ub6d2','\ub6d3','\ub6d4','\ub6d5','\ub6d6','\ub6d7','\ub6d8', + '\ub6d9','\ub6da','\ub6db','\ub6dc','\ub6dd','\ub6de','\ub6df', + '\ub6e0','\ub6e1','\ub6e2','\ub6e3','\ub6e4','\ub6e5','\ub6e6', + '\ub6e7','\ub6e8','\ub6e9','\ub6ea','\ub6eb','\ub6ec','\ub6ed', + '\ub6ee','\ub6ef','\ub6f0','\ub6f1','\ub6f2','\ub6f3','\ub6f4', + '\ub6f5','\ub6f6','\ub6f7','\ub6f8','\ub6f9','\ub6fa','\ub6fb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+46592; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void fb700() { + char[] cs = new char[] { + '\ub700','\ub701','\ub702','\ub703','\ub704','\ub705','\ub706', + '\ub707','\ub708','\ub709','\ub70a','\ub70b','\ub70c','\ub70d', + '\ub70e','\ub70f','\ub710','\ub711','\ub712','\ub713','\ub714', + '\ub715','\ub716','\ub717','\ub718','\ub719','\ub71a','\ub71b', + '\ub71c','\ub71d','\ub71e','\ub71f','\ub720','\ub721','\ub722', + '\ub723','\ub724','\ub725','\ub726','\ub727','\ub728','\ub729', + '\ub72a','\ub72b','\ub72c','\ub72d','\ub72e','\ub72f','\ub730', + '\ub731','\ub732','\ub733','\ub734','\ub735','\ub736','\ub737', + '\ub738','\ub739','\ub73a','\ub73b','\ub73c','\ub73d','\ub73e', + '\ub73f','\ub740','\ub741','\ub742','\ub743','\ub744','\ub745', + '\ub746','\ub747','\ub748','\ub749','\ub74a','\ub74b','\ub74c', + '\ub74d','\ub74e','\ub74f','\ub750','\ub751','\ub752','\ub753', + '\ub754','\ub755','\ub756','\ub757','\ub758','\ub759','\ub75a', + '\ub75b','\ub75c','\ub75d','\ub75e','\ub75f','\ub760','\ub761', + '\ub762','\ub763','\ub764','\ub765','\ub766','\ub767','\ub768', + '\ub769','\ub76a','\ub76b','\ub76c','\ub76d','\ub76e','\ub76f', + '\ub770','\ub771','\ub772','\ub773','\ub774','\ub775','\ub776', + '\ub777','\ub778','\ub779','\ub77a','\ub77b','\ub77c','\ub77d', + '\ub77e','\ub77f','\ub780','\ub781','\ub782','\ub783','\ub784', + '\ub785','\ub786','\ub787','\ub788','\ub789','\ub78a','\ub78b', + '\ub78c','\ub78d','\ub78e','\ub78f','\ub790','\ub791','\ub792', + '\ub793','\ub794','\ub795','\ub796','\ub797','\ub798','\ub799', + '\ub79a','\ub79b','\ub79c','\ub79d','\ub79e','\ub79f','\ub7a0', + '\ub7a1','\ub7a2','\ub7a3','\ub7a4','\ub7a5','\ub7a6','\ub7a7', + '\ub7a8','\ub7a9','\ub7aa','\ub7ab','\ub7ac','\ub7ad','\ub7ae', + '\ub7af','\ub7b0','\ub7b1','\ub7b2','\ub7b3','\ub7b4','\ub7b5', + '\ub7b6','\ub7b7','\ub7b8','\ub7b9','\ub7ba','\ub7bb','\ub7bc', + '\ub7bd','\ub7be','\ub7bf','\ub7c0','\ub7c1','\ub7c2','\ub7c3', + '\ub7c4','\ub7c5','\ub7c6','\ub7c7','\ub7c8','\ub7c9','\ub7ca', + '\ub7cb','\ub7cc','\ub7cd','\ub7ce','\ub7cf','\ub7d0','\ub7d1', + '\ub7d2','\ub7d3','\ub7d4','\ub7d5','\ub7d6','\ub7d7','\ub7d8', + '\ub7d9','\ub7da','\ub7db','\ub7dc','\ub7dd','\ub7de','\ub7df', + '\ub7e0','\ub7e1','\ub7e2','\ub7e3','\ub7e4','\ub7e5','\ub7e6', + '\ub7e7','\ub7e8','\ub7e9','\ub7ea','\ub7eb','\ub7ec','\ub7ed', + '\ub7ee','\ub7ef','\ub7f0','\ub7f1','\ub7f2','\ub7f3','\ub7f4', + '\ub7f5','\ub7f6','\ub7f7','\ub7f8','\ub7f9','\ub7fa','\ub7fb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+46848; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void fb800() { + char[] cs = new char[] { + '\ub800','\ub801','\ub802','\ub803','\ub804','\ub805','\ub806', + '\ub807','\ub808','\ub809','\ub80a','\ub80b','\ub80c','\ub80d', + '\ub80e','\ub80f','\ub810','\ub811','\ub812','\ub813','\ub814', + '\ub815','\ub816','\ub817','\ub818','\ub819','\ub81a','\ub81b', + '\ub81c','\ub81d','\ub81e','\ub81f','\ub820','\ub821','\ub822', + '\ub823','\ub824','\ub825','\ub826','\ub827','\ub828','\ub829', + '\ub82a','\ub82b','\ub82c','\ub82d','\ub82e','\ub82f','\ub830', + '\ub831','\ub832','\ub833','\ub834','\ub835','\ub836','\ub837', + '\ub838','\ub839','\ub83a','\ub83b','\ub83c','\ub83d','\ub83e', + '\ub83f','\ub840','\ub841','\ub842','\ub843','\ub844','\ub845', + '\ub846','\ub847','\ub848','\ub849','\ub84a','\ub84b','\ub84c', + '\ub84d','\ub84e','\ub84f','\ub850','\ub851','\ub852','\ub853', + '\ub854','\ub855','\ub856','\ub857','\ub858','\ub859','\ub85a', + '\ub85b','\ub85c','\ub85d','\ub85e','\ub85f','\ub860','\ub861', + '\ub862','\ub863','\ub864','\ub865','\ub866','\ub867','\ub868', + '\ub869','\ub86a','\ub86b','\ub86c','\ub86d','\ub86e','\ub86f', + '\ub870','\ub871','\ub872','\ub873','\ub874','\ub875','\ub876', + '\ub877','\ub878','\ub879','\ub87a','\ub87b','\ub87c','\ub87d', + '\ub87e','\ub87f','\ub880','\ub881','\ub882','\ub883','\ub884', + '\ub885','\ub886','\ub887','\ub888','\ub889','\ub88a','\ub88b', + '\ub88c','\ub88d','\ub88e','\ub88f','\ub890','\ub891','\ub892', + '\ub893','\ub894','\ub895','\ub896','\ub897','\ub898','\ub899', + '\ub89a','\ub89b','\ub89c','\ub89d','\ub89e','\ub89f','\ub8a0', + '\ub8a1','\ub8a2','\ub8a3','\ub8a4','\ub8a5','\ub8a6','\ub8a7', + '\ub8a8','\ub8a9','\ub8aa','\ub8ab','\ub8ac','\ub8ad','\ub8ae', + '\ub8af','\ub8b0','\ub8b1','\ub8b2','\ub8b3','\ub8b4','\ub8b5', + '\ub8b6','\ub8b7','\ub8b8','\ub8b9','\ub8ba','\ub8bb','\ub8bc', + '\ub8bd','\ub8be','\ub8bf','\ub8c0','\ub8c1','\ub8c2','\ub8c3', + '\ub8c4','\ub8c5','\ub8c6','\ub8c7','\ub8c8','\ub8c9','\ub8ca', + '\ub8cb','\ub8cc','\ub8cd','\ub8ce','\ub8cf','\ub8d0','\ub8d1', + '\ub8d2','\ub8d3','\ub8d4','\ub8d5','\ub8d6','\ub8d7','\ub8d8', + '\ub8d9','\ub8da','\ub8db','\ub8dc','\ub8dd','\ub8de','\ub8df', + '\ub8e0','\ub8e1','\ub8e2','\ub8e3','\ub8e4','\ub8e5','\ub8e6', + '\ub8e7','\ub8e8','\ub8e9','\ub8ea','\ub8eb','\ub8ec','\ub8ed', + '\ub8ee','\ub8ef','\ub8f0','\ub8f1','\ub8f2','\ub8f3','\ub8f4', + '\ub8f5','\ub8f6','\ub8f7','\ub8f8','\ub8f9','\ub8fa','\ub8fb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+47104; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void fb900() { + char[] cs = new char[] { + '\ub900','\ub901','\ub902','\ub903','\ub904','\ub905','\ub906', + '\ub907','\ub908','\ub909','\ub90a','\ub90b','\ub90c','\ub90d', + '\ub90e','\ub90f','\ub910','\ub911','\ub912','\ub913','\ub914', + '\ub915','\ub916','\ub917','\ub918','\ub919','\ub91a','\ub91b', + '\ub91c','\ub91d','\ub91e','\ub91f','\ub920','\ub921','\ub922', + '\ub923','\ub924','\ub925','\ub926','\ub927','\ub928','\ub929', + '\ub92a','\ub92b','\ub92c','\ub92d','\ub92e','\ub92f','\ub930', + '\ub931','\ub932','\ub933','\ub934','\ub935','\ub936','\ub937', + '\ub938','\ub939','\ub93a','\ub93b','\ub93c','\ub93d','\ub93e', + '\ub93f','\ub940','\ub941','\ub942','\ub943','\ub944','\ub945', + '\ub946','\ub947','\ub948','\ub949','\ub94a','\ub94b','\ub94c', + '\ub94d','\ub94e','\ub94f','\ub950','\ub951','\ub952','\ub953', + '\ub954','\ub955','\ub956','\ub957','\ub958','\ub959','\ub95a', + '\ub95b','\ub95c','\ub95d','\ub95e','\ub95f','\ub960','\ub961', + '\ub962','\ub963','\ub964','\ub965','\ub966','\ub967','\ub968', + '\ub969','\ub96a','\ub96b','\ub96c','\ub96d','\ub96e','\ub96f', + '\ub970','\ub971','\ub972','\ub973','\ub974','\ub975','\ub976', + '\ub977','\ub978','\ub979','\ub97a','\ub97b','\ub97c','\ub97d', + '\ub97e','\ub97f','\ub980','\ub981','\ub982','\ub983','\ub984', + '\ub985','\ub986','\ub987','\ub988','\ub989','\ub98a','\ub98b', + '\ub98c','\ub98d','\ub98e','\ub98f','\ub990','\ub991','\ub992', + '\ub993','\ub994','\ub995','\ub996','\ub997','\ub998','\ub999', + '\ub99a','\ub99b','\ub99c','\ub99d','\ub99e','\ub99f','\ub9a0', + '\ub9a1','\ub9a2','\ub9a3','\ub9a4','\ub9a5','\ub9a6','\ub9a7', + '\ub9a8','\ub9a9','\ub9aa','\ub9ab','\ub9ac','\ub9ad','\ub9ae', + '\ub9af','\ub9b0','\ub9b1','\ub9b2','\ub9b3','\ub9b4','\ub9b5', + '\ub9b6','\ub9b7','\ub9b8','\ub9b9','\ub9ba','\ub9bb','\ub9bc', + '\ub9bd','\ub9be','\ub9bf','\ub9c0','\ub9c1','\ub9c2','\ub9c3', + '\ub9c4','\ub9c5','\ub9c6','\ub9c7','\ub9c8','\ub9c9','\ub9ca', + '\ub9cb','\ub9cc','\ub9cd','\ub9ce','\ub9cf','\ub9d0','\ub9d1', + '\ub9d2','\ub9d3','\ub9d4','\ub9d5','\ub9d6','\ub9d7','\ub9d8', + '\ub9d9','\ub9da','\ub9db','\ub9dc','\ub9dd','\ub9de','\ub9df', + '\ub9e0','\ub9e1','\ub9e2','\ub9e3','\ub9e4','\ub9e5','\ub9e6', + '\ub9e7','\ub9e8','\ub9e9','\ub9ea','\ub9eb','\ub9ec','\ub9ed', + '\ub9ee','\ub9ef','\ub9f0','\ub9f1','\ub9f2','\ub9f3','\ub9f4', + '\ub9f5','\ub9f6','\ub9f7','\ub9f8','\ub9f9','\ub9fa','\ub9fb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+47360; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void fba00() { + char[] cs = new char[] { + '\uba00','\uba01','\uba02','\uba03','\uba04','\uba05','\uba06', + '\uba07','\uba08','\uba09','\uba0a','\uba0b','\uba0c','\uba0d', + '\uba0e','\uba0f','\uba10','\uba11','\uba12','\uba13','\uba14', + '\uba15','\uba16','\uba17','\uba18','\uba19','\uba1a','\uba1b', + '\uba1c','\uba1d','\uba1e','\uba1f','\uba20','\uba21','\uba22', + '\uba23','\uba24','\uba25','\uba26','\uba27','\uba28','\uba29', + '\uba2a','\uba2b','\uba2c','\uba2d','\uba2e','\uba2f','\uba30', + '\uba31','\uba32','\uba33','\uba34','\uba35','\uba36','\uba37', + '\uba38','\uba39','\uba3a','\uba3b','\uba3c','\uba3d','\uba3e', + '\uba3f','\uba40','\uba41','\uba42','\uba43','\uba44','\uba45', + '\uba46','\uba47','\uba48','\uba49','\uba4a','\uba4b','\uba4c', + '\uba4d','\uba4e','\uba4f','\uba50','\uba51','\uba52','\uba53', + '\uba54','\uba55','\uba56','\uba57','\uba58','\uba59','\uba5a', + '\uba5b','\uba5c','\uba5d','\uba5e','\uba5f','\uba60','\uba61', + '\uba62','\uba63','\uba64','\uba65','\uba66','\uba67','\uba68', + '\uba69','\uba6a','\uba6b','\uba6c','\uba6d','\uba6e','\uba6f', + '\uba70','\uba71','\uba72','\uba73','\uba74','\uba75','\uba76', + '\uba77','\uba78','\uba79','\uba7a','\uba7b','\uba7c','\uba7d', + '\uba7e','\uba7f','\uba80','\uba81','\uba82','\uba83','\uba84', + '\uba85','\uba86','\uba87','\uba88','\uba89','\uba8a','\uba8b', + '\uba8c','\uba8d','\uba8e','\uba8f','\uba90','\uba91','\uba92', + '\uba93','\uba94','\uba95','\uba96','\uba97','\uba98','\uba99', + '\uba9a','\uba9b','\uba9c','\uba9d','\uba9e','\uba9f','\ubaa0', + '\ubaa1','\ubaa2','\ubaa3','\ubaa4','\ubaa5','\ubaa6','\ubaa7', + '\ubaa8','\ubaa9','\ubaaa','\ubaab','\ubaac','\ubaad','\ubaae', + '\ubaaf','\ubab0','\ubab1','\ubab2','\ubab3','\ubab4','\ubab5', + '\ubab6','\ubab7','\ubab8','\ubab9','\ubaba','\ubabb','\ubabc', + '\ubabd','\ubabe','\ubabf','\ubac0','\ubac1','\ubac2','\ubac3', + '\ubac4','\ubac5','\ubac6','\ubac7','\ubac8','\ubac9','\ubaca', + '\ubacb','\ubacc','\ubacd','\ubace','\ubacf','\ubad0','\ubad1', + '\ubad2','\ubad3','\ubad4','\ubad5','\ubad6','\ubad7','\ubad8', + '\ubad9','\ubada','\ubadb','\ubadc','\ubadd','\ubade','\ubadf', + '\ubae0','\ubae1','\ubae2','\ubae3','\ubae4','\ubae5','\ubae6', + '\ubae7','\ubae8','\ubae9','\ubaea','\ubaeb','\ubaec','\ubaed', + '\ubaee','\ubaef','\ubaf0','\ubaf1','\ubaf2','\ubaf3','\ubaf4', + '\ubaf5','\ubaf6','\ubaf7','\ubaf8','\ubaf9','\ubafa','\ubafb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+47616; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void fbb00() { + char[] cs = new char[] { + '\ubb00','\ubb01','\ubb02','\ubb03','\ubb04','\ubb05','\ubb06', + '\ubb07','\ubb08','\ubb09','\ubb0a','\ubb0b','\ubb0c','\ubb0d', + '\ubb0e','\ubb0f','\ubb10','\ubb11','\ubb12','\ubb13','\ubb14', + '\ubb15','\ubb16','\ubb17','\ubb18','\ubb19','\ubb1a','\ubb1b', + '\ubb1c','\ubb1d','\ubb1e','\ubb1f','\ubb20','\ubb21','\ubb22', + '\ubb23','\ubb24','\ubb25','\ubb26','\ubb27','\ubb28','\ubb29', + '\ubb2a','\ubb2b','\ubb2c','\ubb2d','\ubb2e','\ubb2f','\ubb30', + '\ubb31','\ubb32','\ubb33','\ubb34','\ubb35','\ubb36','\ubb37', + '\ubb38','\ubb39','\ubb3a','\ubb3b','\ubb3c','\ubb3d','\ubb3e', + '\ubb3f','\ubb40','\ubb41','\ubb42','\ubb43','\ubb44','\ubb45', + '\ubb46','\ubb47','\ubb48','\ubb49','\ubb4a','\ubb4b','\ubb4c', + '\ubb4d','\ubb4e','\ubb4f','\ubb50','\ubb51','\ubb52','\ubb53', + '\ubb54','\ubb55','\ubb56','\ubb57','\ubb58','\ubb59','\ubb5a', + '\ubb5b','\ubb5c','\ubb5d','\ubb5e','\ubb5f','\ubb60','\ubb61', + '\ubb62','\ubb63','\ubb64','\ubb65','\ubb66','\ubb67','\ubb68', + '\ubb69','\ubb6a','\ubb6b','\ubb6c','\ubb6d','\ubb6e','\ubb6f', + '\ubb70','\ubb71','\ubb72','\ubb73','\ubb74','\ubb75','\ubb76', + '\ubb77','\ubb78','\ubb79','\ubb7a','\ubb7b','\ubb7c','\ubb7d', + '\ubb7e','\ubb7f','\ubb80','\ubb81','\ubb82','\ubb83','\ubb84', + '\ubb85','\ubb86','\ubb87','\ubb88','\ubb89','\ubb8a','\ubb8b', + '\ubb8c','\ubb8d','\ubb8e','\ubb8f','\ubb90','\ubb91','\ubb92', + '\ubb93','\ubb94','\ubb95','\ubb96','\ubb97','\ubb98','\ubb99', + '\ubb9a','\ubb9b','\ubb9c','\ubb9d','\ubb9e','\ubb9f','\ubba0', + '\ubba1','\ubba2','\ubba3','\ubba4','\ubba5','\ubba6','\ubba7', + '\ubba8','\ubba9','\ubbaa','\ubbab','\ubbac','\ubbad','\ubbae', + '\ubbaf','\ubbb0','\ubbb1','\ubbb2','\ubbb3','\ubbb4','\ubbb5', + '\ubbb6','\ubbb7','\ubbb8','\ubbb9','\ubbba','\ubbbb','\ubbbc', + '\ubbbd','\ubbbe','\ubbbf','\ubbc0','\ubbc1','\ubbc2','\ubbc3', + '\ubbc4','\ubbc5','\ubbc6','\ubbc7','\ubbc8','\ubbc9','\ubbca', + '\ubbcb','\ubbcc','\ubbcd','\ubbce','\ubbcf','\ubbd0','\ubbd1', + '\ubbd2','\ubbd3','\ubbd4','\ubbd5','\ubbd6','\ubbd7','\ubbd8', + '\ubbd9','\ubbda','\ubbdb','\ubbdc','\ubbdd','\ubbde','\ubbdf', + '\ubbe0','\ubbe1','\ubbe2','\ubbe3','\ubbe4','\ubbe5','\ubbe6', + '\ubbe7','\ubbe8','\ubbe9','\ubbea','\ubbeb','\ubbec','\ubbed', + '\ubbee','\ubbef','\ubbf0','\ubbf1','\ubbf2','\ubbf3','\ubbf4', + '\ubbf5','\ubbf6','\ubbf7','\ubbf8','\ubbf9','\ubbfa','\ubbfb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+47872; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void fbc00() { + char[] cs = new char[] { + '\ubc00','\ubc01','\ubc02','\ubc03','\ubc04','\ubc05','\ubc06', + '\ubc07','\ubc08','\ubc09','\ubc0a','\ubc0b','\ubc0c','\ubc0d', + '\ubc0e','\ubc0f','\ubc10','\ubc11','\ubc12','\ubc13','\ubc14', + '\ubc15','\ubc16','\ubc17','\ubc18','\ubc19','\ubc1a','\ubc1b', + '\ubc1c','\ubc1d','\ubc1e','\ubc1f','\ubc20','\ubc21','\ubc22', + '\ubc23','\ubc24','\ubc25','\ubc26','\ubc27','\ubc28','\ubc29', + '\ubc2a','\ubc2b','\ubc2c','\ubc2d','\ubc2e','\ubc2f','\ubc30', + '\ubc31','\ubc32','\ubc33','\ubc34','\ubc35','\ubc36','\ubc37', + '\ubc38','\ubc39','\ubc3a','\ubc3b','\ubc3c','\ubc3d','\ubc3e', + '\ubc3f','\ubc40','\ubc41','\ubc42','\ubc43','\ubc44','\ubc45', + '\ubc46','\ubc47','\ubc48','\ubc49','\ubc4a','\ubc4b','\ubc4c', + '\ubc4d','\ubc4e','\ubc4f','\ubc50','\ubc51','\ubc52','\ubc53', + '\ubc54','\ubc55','\ubc56','\ubc57','\ubc58','\ubc59','\ubc5a', + '\ubc5b','\ubc5c','\ubc5d','\ubc5e','\ubc5f','\ubc60','\ubc61', + '\ubc62','\ubc63','\ubc64','\ubc65','\ubc66','\ubc67','\ubc68', + '\ubc69','\ubc6a','\ubc6b','\ubc6c','\ubc6d','\ubc6e','\ubc6f', + '\ubc70','\ubc71','\ubc72','\ubc73','\ubc74','\ubc75','\ubc76', + '\ubc77','\ubc78','\ubc79','\ubc7a','\ubc7b','\ubc7c','\ubc7d', + '\ubc7e','\ubc7f','\ubc80','\ubc81','\ubc82','\ubc83','\ubc84', + '\ubc85','\ubc86','\ubc87','\ubc88','\ubc89','\ubc8a','\ubc8b', + '\ubc8c','\ubc8d','\ubc8e','\ubc8f','\ubc90','\ubc91','\ubc92', + '\ubc93','\ubc94','\ubc95','\ubc96','\ubc97','\ubc98','\ubc99', + '\ubc9a','\ubc9b','\ubc9c','\ubc9d','\ubc9e','\ubc9f','\ubca0', + '\ubca1','\ubca2','\ubca3','\ubca4','\ubca5','\ubca6','\ubca7', + '\ubca8','\ubca9','\ubcaa','\ubcab','\ubcac','\ubcad','\ubcae', + '\ubcaf','\ubcb0','\ubcb1','\ubcb2','\ubcb3','\ubcb4','\ubcb5', + '\ubcb6','\ubcb7','\ubcb8','\ubcb9','\ubcba','\ubcbb','\ubcbc', + '\ubcbd','\ubcbe','\ubcbf','\ubcc0','\ubcc1','\ubcc2','\ubcc3', + '\ubcc4','\ubcc5','\ubcc6','\ubcc7','\ubcc8','\ubcc9','\ubcca', + '\ubccb','\ubccc','\ubccd','\ubcce','\ubccf','\ubcd0','\ubcd1', + '\ubcd2','\ubcd3','\ubcd4','\ubcd5','\ubcd6','\ubcd7','\ubcd8', + '\ubcd9','\ubcda','\ubcdb','\ubcdc','\ubcdd','\ubcde','\ubcdf', + '\ubce0','\ubce1','\ubce2','\ubce3','\ubce4','\ubce5','\ubce6', + '\ubce7','\ubce8','\ubce9','\ubcea','\ubceb','\ubcec','\ubced', + '\ubcee','\ubcef','\ubcf0','\ubcf1','\ubcf2','\ubcf3','\ubcf4', + '\ubcf5','\ubcf6','\ubcf7','\ubcf8','\ubcf9','\ubcfa','\ubcfb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+48128; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void fbd00() { + char[] cs = new char[] { + '\ubd00','\ubd01','\ubd02','\ubd03','\ubd04','\ubd05','\ubd06', + '\ubd07','\ubd08','\ubd09','\ubd0a','\ubd0b','\ubd0c','\ubd0d', + '\ubd0e','\ubd0f','\ubd10','\ubd11','\ubd12','\ubd13','\ubd14', + '\ubd15','\ubd16','\ubd17','\ubd18','\ubd19','\ubd1a','\ubd1b', + '\ubd1c','\ubd1d','\ubd1e','\ubd1f','\ubd20','\ubd21','\ubd22', + '\ubd23','\ubd24','\ubd25','\ubd26','\ubd27','\ubd28','\ubd29', + '\ubd2a','\ubd2b','\ubd2c','\ubd2d','\ubd2e','\ubd2f','\ubd30', + '\ubd31','\ubd32','\ubd33','\ubd34','\ubd35','\ubd36','\ubd37', + '\ubd38','\ubd39','\ubd3a','\ubd3b','\ubd3c','\ubd3d','\ubd3e', + '\ubd3f','\ubd40','\ubd41','\ubd42','\ubd43','\ubd44','\ubd45', + '\ubd46','\ubd47','\ubd48','\ubd49','\ubd4a','\ubd4b','\ubd4c', + '\ubd4d','\ubd4e','\ubd4f','\ubd50','\ubd51','\ubd52','\ubd53', + '\ubd54','\ubd55','\ubd56','\ubd57','\ubd58','\ubd59','\ubd5a', + '\ubd5b','\ubd5c','\ubd5d','\ubd5e','\ubd5f','\ubd60','\ubd61', + '\ubd62','\ubd63','\ubd64','\ubd65','\ubd66','\ubd67','\ubd68', + '\ubd69','\ubd6a','\ubd6b','\ubd6c','\ubd6d','\ubd6e','\ubd6f', + '\ubd70','\ubd71','\ubd72','\ubd73','\ubd74','\ubd75','\ubd76', + '\ubd77','\ubd78','\ubd79','\ubd7a','\ubd7b','\ubd7c','\ubd7d', + '\ubd7e','\ubd7f','\ubd80','\ubd81','\ubd82','\ubd83','\ubd84', + '\ubd85','\ubd86','\ubd87','\ubd88','\ubd89','\ubd8a','\ubd8b', + '\ubd8c','\ubd8d','\ubd8e','\ubd8f','\ubd90','\ubd91','\ubd92', + '\ubd93','\ubd94','\ubd95','\ubd96','\ubd97','\ubd98','\ubd99', + '\ubd9a','\ubd9b','\ubd9c','\ubd9d','\ubd9e','\ubd9f','\ubda0', + '\ubda1','\ubda2','\ubda3','\ubda4','\ubda5','\ubda6','\ubda7', + '\ubda8','\ubda9','\ubdaa','\ubdab','\ubdac','\ubdad','\ubdae', + '\ubdaf','\ubdb0','\ubdb1','\ubdb2','\ubdb3','\ubdb4','\ubdb5', + '\ubdb6','\ubdb7','\ubdb8','\ubdb9','\ubdba','\ubdbb','\ubdbc', + '\ubdbd','\ubdbe','\ubdbf','\ubdc0','\ubdc1','\ubdc2','\ubdc3', + '\ubdc4','\ubdc5','\ubdc6','\ubdc7','\ubdc8','\ubdc9','\ubdca', + '\ubdcb','\ubdcc','\ubdcd','\ubdce','\ubdcf','\ubdd0','\ubdd1', + '\ubdd2','\ubdd3','\ubdd4','\ubdd5','\ubdd6','\ubdd7','\ubdd8', + '\ubdd9','\ubdda','\ubddb','\ubddc','\ubddd','\ubdde','\ubddf', + '\ubde0','\ubde1','\ubde2','\ubde3','\ubde4','\ubde5','\ubde6', + '\ubde7','\ubde8','\ubde9','\ubdea','\ubdeb','\ubdec','\ubded', + '\ubdee','\ubdef','\ubdf0','\ubdf1','\ubdf2','\ubdf3','\ubdf4', + '\ubdf5','\ubdf6','\ubdf7','\ubdf8','\ubdf9','\ubdfa','\ubdfb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+48384; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void fbe00() { + char[] cs = new char[] { + '\ube00','\ube01','\ube02','\ube03','\ube04','\ube05','\ube06', + '\ube07','\ube08','\ube09','\ube0a','\ube0b','\ube0c','\ube0d', + '\ube0e','\ube0f','\ube10','\ube11','\ube12','\ube13','\ube14', + '\ube15','\ube16','\ube17','\ube18','\ube19','\ube1a','\ube1b', + '\ube1c','\ube1d','\ube1e','\ube1f','\ube20','\ube21','\ube22', + '\ube23','\ube24','\ube25','\ube26','\ube27','\ube28','\ube29', + '\ube2a','\ube2b','\ube2c','\ube2d','\ube2e','\ube2f','\ube30', + '\ube31','\ube32','\ube33','\ube34','\ube35','\ube36','\ube37', + '\ube38','\ube39','\ube3a','\ube3b','\ube3c','\ube3d','\ube3e', + '\ube3f','\ube40','\ube41','\ube42','\ube43','\ube44','\ube45', + '\ube46','\ube47','\ube48','\ube49','\ube4a','\ube4b','\ube4c', + '\ube4d','\ube4e','\ube4f','\ube50','\ube51','\ube52','\ube53', + '\ube54','\ube55','\ube56','\ube57','\ube58','\ube59','\ube5a', + '\ube5b','\ube5c','\ube5d','\ube5e','\ube5f','\ube60','\ube61', + '\ube62','\ube63','\ube64','\ube65','\ube66','\ube67','\ube68', + '\ube69','\ube6a','\ube6b','\ube6c','\ube6d','\ube6e','\ube6f', + '\ube70','\ube71','\ube72','\ube73','\ube74','\ube75','\ube76', + '\ube77','\ube78','\ube79','\ube7a','\ube7b','\ube7c','\ube7d', + '\ube7e','\ube7f','\ube80','\ube81','\ube82','\ube83','\ube84', + '\ube85','\ube86','\ube87','\ube88','\ube89','\ube8a','\ube8b', + '\ube8c','\ube8d','\ube8e','\ube8f','\ube90','\ube91','\ube92', + '\ube93','\ube94','\ube95','\ube96','\ube97','\ube98','\ube99', + '\ube9a','\ube9b','\ube9c','\ube9d','\ube9e','\ube9f','\ubea0', + '\ubea1','\ubea2','\ubea3','\ubea4','\ubea5','\ubea6','\ubea7', + '\ubea8','\ubea9','\ubeaa','\ubeab','\ubeac','\ubead','\ubeae', + '\ubeaf','\ubeb0','\ubeb1','\ubeb2','\ubeb3','\ubeb4','\ubeb5', + '\ubeb6','\ubeb7','\ubeb8','\ubeb9','\ubeba','\ubebb','\ubebc', + '\ubebd','\ubebe','\ubebf','\ubec0','\ubec1','\ubec2','\ubec3', + '\ubec4','\ubec5','\ubec6','\ubec7','\ubec8','\ubec9','\ubeca', + '\ubecb','\ubecc','\ubecd','\ubece','\ubecf','\ubed0','\ubed1', + '\ubed2','\ubed3','\ubed4','\ubed5','\ubed6','\ubed7','\ubed8', + '\ubed9','\ubeda','\ubedb','\ubedc','\ubedd','\ubede','\ubedf', + '\ubee0','\ubee1','\ubee2','\ubee3','\ubee4','\ubee5','\ubee6', + '\ubee7','\ubee8','\ubee9','\ubeea','\ubeeb','\ubeec','\ubeed', + '\ubeee','\ubeef','\ubef0','\ubef1','\ubef2','\ubef3','\ubef4', + '\ubef5','\ubef6','\ubef7','\ubef8','\ubef9','\ubefa','\ubefb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+48640; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void fbf00() { + char[] cs = new char[] { + '\ubf00','\ubf01','\ubf02','\ubf03','\ubf04','\ubf05','\ubf06', + '\ubf07','\ubf08','\ubf09','\ubf0a','\ubf0b','\ubf0c','\ubf0d', + '\ubf0e','\ubf0f','\ubf10','\ubf11','\ubf12','\ubf13','\ubf14', + '\ubf15','\ubf16','\ubf17','\ubf18','\ubf19','\ubf1a','\ubf1b', + '\ubf1c','\ubf1d','\ubf1e','\ubf1f','\ubf20','\ubf21','\ubf22', + '\ubf23','\ubf24','\ubf25','\ubf26','\ubf27','\ubf28','\ubf29', + '\ubf2a','\ubf2b','\ubf2c','\ubf2d','\ubf2e','\ubf2f','\ubf30', + '\ubf31','\ubf32','\ubf33','\ubf34','\ubf35','\ubf36','\ubf37', + '\ubf38','\ubf39','\ubf3a','\ubf3b','\ubf3c','\ubf3d','\ubf3e', + '\ubf3f','\ubf40','\ubf41','\ubf42','\ubf43','\ubf44','\ubf45', + '\ubf46','\ubf47','\ubf48','\ubf49','\ubf4a','\ubf4b','\ubf4c', + '\ubf4d','\ubf4e','\ubf4f','\ubf50','\ubf51','\ubf52','\ubf53', + '\ubf54','\ubf55','\ubf56','\ubf57','\ubf58','\ubf59','\ubf5a', + '\ubf5b','\ubf5c','\ubf5d','\ubf5e','\ubf5f','\ubf60','\ubf61', + '\ubf62','\ubf63','\ubf64','\ubf65','\ubf66','\ubf67','\ubf68', + '\ubf69','\ubf6a','\ubf6b','\ubf6c','\ubf6d','\ubf6e','\ubf6f', + '\ubf70','\ubf71','\ubf72','\ubf73','\ubf74','\ubf75','\ubf76', + '\ubf77','\ubf78','\ubf79','\ubf7a','\ubf7b','\ubf7c','\ubf7d', + '\ubf7e','\ubf7f','\ubf80','\ubf81','\ubf82','\ubf83','\ubf84', + '\ubf85','\ubf86','\ubf87','\ubf88','\ubf89','\ubf8a','\ubf8b', + '\ubf8c','\ubf8d','\ubf8e','\ubf8f','\ubf90','\ubf91','\ubf92', + '\ubf93','\ubf94','\ubf95','\ubf96','\ubf97','\ubf98','\ubf99', + '\ubf9a','\ubf9b','\ubf9c','\ubf9d','\ubf9e','\ubf9f','\ubfa0', + '\ubfa1','\ubfa2','\ubfa3','\ubfa4','\ubfa5','\ubfa6','\ubfa7', + '\ubfa8','\ubfa9','\ubfaa','\ubfab','\ubfac','\ubfad','\ubfae', + '\ubfaf','\ubfb0','\ubfb1','\ubfb2','\ubfb3','\ubfb4','\ubfb5', + '\ubfb6','\ubfb7','\ubfb8','\ubfb9','\ubfba','\ubfbb','\ubfbc', + '\ubfbd','\ubfbe','\ubfbf','\ubfc0','\ubfc1','\ubfc2','\ubfc3', + '\ubfc4','\ubfc5','\ubfc6','\ubfc7','\ubfc8','\ubfc9','\ubfca', + '\ubfcb','\ubfcc','\ubfcd','\ubfce','\ubfcf','\ubfd0','\ubfd1', + '\ubfd2','\ubfd3','\ubfd4','\ubfd5','\ubfd6','\ubfd7','\ubfd8', + '\ubfd9','\ubfda','\ubfdb','\ubfdc','\ubfdd','\ubfde','\ubfdf', + '\ubfe0','\ubfe1','\ubfe2','\ubfe3','\ubfe4','\ubfe5','\ubfe6', + '\ubfe7','\ubfe8','\ubfe9','\ubfea','\ubfeb','\ubfec','\ubfed', + '\ubfee','\ubfef','\ubff0','\ubff1','\ubff2','\ubff3','\ubff4', + '\ubff5','\ubff6','\ubff7','\ubff8','\ubff9','\ubffa','\ubffb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+48896; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void fc000() { + char[] cs = new char[] { + '\uc000','\uc001','\uc002','\uc003','\uc004','\uc005','\uc006', + '\uc007','\uc008','\uc009','\uc00a','\uc00b','\uc00c','\uc00d', + '\uc00e','\uc00f','\uc010','\uc011','\uc012','\uc013','\uc014', + '\uc015','\uc016','\uc017','\uc018','\uc019','\uc01a','\uc01b', + '\uc01c','\uc01d','\uc01e','\uc01f','\uc020','\uc021','\uc022', + '\uc023','\uc024','\uc025','\uc026','\uc027','\uc028','\uc029', + '\uc02a','\uc02b','\uc02c','\uc02d','\uc02e','\uc02f','\uc030', + '\uc031','\uc032','\uc033','\uc034','\uc035','\uc036','\uc037', + '\uc038','\uc039','\uc03a','\uc03b','\uc03c','\uc03d','\uc03e', + '\uc03f','\uc040','\uc041','\uc042','\uc043','\uc044','\uc045', + '\uc046','\uc047','\uc048','\uc049','\uc04a','\uc04b','\uc04c', + '\uc04d','\uc04e','\uc04f','\uc050','\uc051','\uc052','\uc053', + '\uc054','\uc055','\uc056','\uc057','\uc058','\uc059','\uc05a', + '\uc05b','\uc05c','\uc05d','\uc05e','\uc05f','\uc060','\uc061', + '\uc062','\uc063','\uc064','\uc065','\uc066','\uc067','\uc068', + '\uc069','\uc06a','\uc06b','\uc06c','\uc06d','\uc06e','\uc06f', + '\uc070','\uc071','\uc072','\uc073','\uc074','\uc075','\uc076', + '\uc077','\uc078','\uc079','\uc07a','\uc07b','\uc07c','\uc07d', + '\uc07e','\uc07f','\uc080','\uc081','\uc082','\uc083','\uc084', + '\uc085','\uc086','\uc087','\uc088','\uc089','\uc08a','\uc08b', + '\uc08c','\uc08d','\uc08e','\uc08f','\uc090','\uc091','\uc092', + '\uc093','\uc094','\uc095','\uc096','\uc097','\uc098','\uc099', + '\uc09a','\uc09b','\uc09c','\uc09d','\uc09e','\uc09f','\uc0a0', + '\uc0a1','\uc0a2','\uc0a3','\uc0a4','\uc0a5','\uc0a6','\uc0a7', + '\uc0a8','\uc0a9','\uc0aa','\uc0ab','\uc0ac','\uc0ad','\uc0ae', + '\uc0af','\uc0b0','\uc0b1','\uc0b2','\uc0b3','\uc0b4','\uc0b5', + '\uc0b6','\uc0b7','\uc0b8','\uc0b9','\uc0ba','\uc0bb','\uc0bc', + '\uc0bd','\uc0be','\uc0bf','\uc0c0','\uc0c1','\uc0c2','\uc0c3', + '\uc0c4','\uc0c5','\uc0c6','\uc0c7','\uc0c8','\uc0c9','\uc0ca', + '\uc0cb','\uc0cc','\uc0cd','\uc0ce','\uc0cf','\uc0d0','\uc0d1', + '\uc0d2','\uc0d3','\uc0d4','\uc0d5','\uc0d6','\uc0d7','\uc0d8', + '\uc0d9','\uc0da','\uc0db','\uc0dc','\uc0dd','\uc0de','\uc0df', + '\uc0e0','\uc0e1','\uc0e2','\uc0e3','\uc0e4','\uc0e5','\uc0e6', + '\uc0e7','\uc0e8','\uc0e9','\uc0ea','\uc0eb','\uc0ec','\uc0ed', + '\uc0ee','\uc0ef','\uc0f0','\uc0f1','\uc0f2','\uc0f3','\uc0f4', + '\uc0f5','\uc0f6','\uc0f7','\uc0f8','\uc0f9','\uc0fa','\uc0fb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+49152; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void fc100() { + char[] cs = new char[] { + '\uc100','\uc101','\uc102','\uc103','\uc104','\uc105','\uc106', + '\uc107','\uc108','\uc109','\uc10a','\uc10b','\uc10c','\uc10d', + '\uc10e','\uc10f','\uc110','\uc111','\uc112','\uc113','\uc114', + '\uc115','\uc116','\uc117','\uc118','\uc119','\uc11a','\uc11b', + '\uc11c','\uc11d','\uc11e','\uc11f','\uc120','\uc121','\uc122', + '\uc123','\uc124','\uc125','\uc126','\uc127','\uc128','\uc129', + '\uc12a','\uc12b','\uc12c','\uc12d','\uc12e','\uc12f','\uc130', + '\uc131','\uc132','\uc133','\uc134','\uc135','\uc136','\uc137', + '\uc138','\uc139','\uc13a','\uc13b','\uc13c','\uc13d','\uc13e', + '\uc13f','\uc140','\uc141','\uc142','\uc143','\uc144','\uc145', + '\uc146','\uc147','\uc148','\uc149','\uc14a','\uc14b','\uc14c', + '\uc14d','\uc14e','\uc14f','\uc150','\uc151','\uc152','\uc153', + '\uc154','\uc155','\uc156','\uc157','\uc158','\uc159','\uc15a', + '\uc15b','\uc15c','\uc15d','\uc15e','\uc15f','\uc160','\uc161', + '\uc162','\uc163','\uc164','\uc165','\uc166','\uc167','\uc168', + '\uc169','\uc16a','\uc16b','\uc16c','\uc16d','\uc16e','\uc16f', + '\uc170','\uc171','\uc172','\uc173','\uc174','\uc175','\uc176', + '\uc177','\uc178','\uc179','\uc17a','\uc17b','\uc17c','\uc17d', + '\uc17e','\uc17f','\uc180','\uc181','\uc182','\uc183','\uc184', + '\uc185','\uc186','\uc187','\uc188','\uc189','\uc18a','\uc18b', + '\uc18c','\uc18d','\uc18e','\uc18f','\uc190','\uc191','\uc192', + '\uc193','\uc194','\uc195','\uc196','\uc197','\uc198','\uc199', + '\uc19a','\uc19b','\uc19c','\uc19d','\uc19e','\uc19f','\uc1a0', + '\uc1a1','\uc1a2','\uc1a3','\uc1a4','\uc1a5','\uc1a6','\uc1a7', + '\uc1a8','\uc1a9','\uc1aa','\uc1ab','\uc1ac','\uc1ad','\uc1ae', + '\uc1af','\uc1b0','\uc1b1','\uc1b2','\uc1b3','\uc1b4','\uc1b5', + '\uc1b6','\uc1b7','\uc1b8','\uc1b9','\uc1ba','\uc1bb','\uc1bc', + '\uc1bd','\uc1be','\uc1bf','\uc1c0','\uc1c1','\uc1c2','\uc1c3', + '\uc1c4','\uc1c5','\uc1c6','\uc1c7','\uc1c8','\uc1c9','\uc1ca', + '\uc1cb','\uc1cc','\uc1cd','\uc1ce','\uc1cf','\uc1d0','\uc1d1', + '\uc1d2','\uc1d3','\uc1d4','\uc1d5','\uc1d6','\uc1d7','\uc1d8', + '\uc1d9','\uc1da','\uc1db','\uc1dc','\uc1dd','\uc1de','\uc1df', + '\uc1e0','\uc1e1','\uc1e2','\uc1e3','\uc1e4','\uc1e5','\uc1e6', + '\uc1e7','\uc1e8','\uc1e9','\uc1ea','\uc1eb','\uc1ec','\uc1ed', + '\uc1ee','\uc1ef','\uc1f0','\uc1f1','\uc1f2','\uc1f3','\uc1f4', + '\uc1f5','\uc1f6','\uc1f7','\uc1f8','\uc1f9','\uc1fa','\uc1fb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+49408; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void fc200() { + char[] cs = new char[] { + '\uc200','\uc201','\uc202','\uc203','\uc204','\uc205','\uc206', + '\uc207','\uc208','\uc209','\uc20a','\uc20b','\uc20c','\uc20d', + '\uc20e','\uc20f','\uc210','\uc211','\uc212','\uc213','\uc214', + '\uc215','\uc216','\uc217','\uc218','\uc219','\uc21a','\uc21b', + '\uc21c','\uc21d','\uc21e','\uc21f','\uc220','\uc221','\uc222', + '\uc223','\uc224','\uc225','\uc226','\uc227','\uc228','\uc229', + '\uc22a','\uc22b','\uc22c','\uc22d','\uc22e','\uc22f','\uc230', + '\uc231','\uc232','\uc233','\uc234','\uc235','\uc236','\uc237', + '\uc238','\uc239','\uc23a','\uc23b','\uc23c','\uc23d','\uc23e', + '\uc23f','\uc240','\uc241','\uc242','\uc243','\uc244','\uc245', + '\uc246','\uc247','\uc248','\uc249','\uc24a','\uc24b','\uc24c', + '\uc24d','\uc24e','\uc24f','\uc250','\uc251','\uc252','\uc253', + '\uc254','\uc255','\uc256','\uc257','\uc258','\uc259','\uc25a', + '\uc25b','\uc25c','\uc25d','\uc25e','\uc25f','\uc260','\uc261', + '\uc262','\uc263','\uc264','\uc265','\uc266','\uc267','\uc268', + '\uc269','\uc26a','\uc26b','\uc26c','\uc26d','\uc26e','\uc26f', + '\uc270','\uc271','\uc272','\uc273','\uc274','\uc275','\uc276', + '\uc277','\uc278','\uc279','\uc27a','\uc27b','\uc27c','\uc27d', + '\uc27e','\uc27f','\uc280','\uc281','\uc282','\uc283','\uc284', + '\uc285','\uc286','\uc287','\uc288','\uc289','\uc28a','\uc28b', + '\uc28c','\uc28d','\uc28e','\uc28f','\uc290','\uc291','\uc292', + '\uc293','\uc294','\uc295','\uc296','\uc297','\uc298','\uc299', + '\uc29a','\uc29b','\uc29c','\uc29d','\uc29e','\uc29f','\uc2a0', + '\uc2a1','\uc2a2','\uc2a3','\uc2a4','\uc2a5','\uc2a6','\uc2a7', + '\uc2a8','\uc2a9','\uc2aa','\uc2ab','\uc2ac','\uc2ad','\uc2ae', + '\uc2af','\uc2b0','\uc2b1','\uc2b2','\uc2b3','\uc2b4','\uc2b5', + '\uc2b6','\uc2b7','\uc2b8','\uc2b9','\uc2ba','\uc2bb','\uc2bc', + '\uc2bd','\uc2be','\uc2bf','\uc2c0','\uc2c1','\uc2c2','\uc2c3', + '\uc2c4','\uc2c5','\uc2c6','\uc2c7','\uc2c8','\uc2c9','\uc2ca', + '\uc2cb','\uc2cc','\uc2cd','\uc2ce','\uc2cf','\uc2d0','\uc2d1', + '\uc2d2','\uc2d3','\uc2d4','\uc2d5','\uc2d6','\uc2d7','\uc2d8', + '\uc2d9','\uc2da','\uc2db','\uc2dc','\uc2dd','\uc2de','\uc2df', + '\uc2e0','\uc2e1','\uc2e2','\uc2e3','\uc2e4','\uc2e5','\uc2e6', + '\uc2e7','\uc2e8','\uc2e9','\uc2ea','\uc2eb','\uc2ec','\uc2ed', + '\uc2ee','\uc2ef','\uc2f0','\uc2f1','\uc2f2','\uc2f3','\uc2f4', + '\uc2f5','\uc2f6','\uc2f7','\uc2f8','\uc2f9','\uc2fa','\uc2fb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+49664; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void fc300() { + char[] cs = new char[] { + '\uc300','\uc301','\uc302','\uc303','\uc304','\uc305','\uc306', + '\uc307','\uc308','\uc309','\uc30a','\uc30b','\uc30c','\uc30d', + '\uc30e','\uc30f','\uc310','\uc311','\uc312','\uc313','\uc314', + '\uc315','\uc316','\uc317','\uc318','\uc319','\uc31a','\uc31b', + '\uc31c','\uc31d','\uc31e','\uc31f','\uc320','\uc321','\uc322', + '\uc323','\uc324','\uc325','\uc326','\uc327','\uc328','\uc329', + '\uc32a','\uc32b','\uc32c','\uc32d','\uc32e','\uc32f','\uc330', + '\uc331','\uc332','\uc333','\uc334','\uc335','\uc336','\uc337', + '\uc338','\uc339','\uc33a','\uc33b','\uc33c','\uc33d','\uc33e', + '\uc33f','\uc340','\uc341','\uc342','\uc343','\uc344','\uc345', + '\uc346','\uc347','\uc348','\uc349','\uc34a','\uc34b','\uc34c', + '\uc34d','\uc34e','\uc34f','\uc350','\uc351','\uc352','\uc353', + '\uc354','\uc355','\uc356','\uc357','\uc358','\uc359','\uc35a', + '\uc35b','\uc35c','\uc35d','\uc35e','\uc35f','\uc360','\uc361', + '\uc362','\uc363','\uc364','\uc365','\uc366','\uc367','\uc368', + '\uc369','\uc36a','\uc36b','\uc36c','\uc36d','\uc36e','\uc36f', + '\uc370','\uc371','\uc372','\uc373','\uc374','\uc375','\uc376', + '\uc377','\uc378','\uc379','\uc37a','\uc37b','\uc37c','\uc37d', + '\uc37e','\uc37f','\uc380','\uc381','\uc382','\uc383','\uc384', + '\uc385','\uc386','\uc387','\uc388','\uc389','\uc38a','\uc38b', + '\uc38c','\uc38d','\uc38e','\uc38f','\uc390','\uc391','\uc392', + '\uc393','\uc394','\uc395','\uc396','\uc397','\uc398','\uc399', + '\uc39a','\uc39b','\uc39c','\uc39d','\uc39e','\uc39f','\uc3a0', + '\uc3a1','\uc3a2','\uc3a3','\uc3a4','\uc3a5','\uc3a6','\uc3a7', + '\uc3a8','\uc3a9','\uc3aa','\uc3ab','\uc3ac','\uc3ad','\uc3ae', + '\uc3af','\uc3b0','\uc3b1','\uc3b2','\uc3b3','\uc3b4','\uc3b5', + '\uc3b6','\uc3b7','\uc3b8','\uc3b9','\uc3ba','\uc3bb','\uc3bc', + '\uc3bd','\uc3be','\uc3bf','\uc3c0','\uc3c1','\uc3c2','\uc3c3', + '\uc3c4','\uc3c5','\uc3c6','\uc3c7','\uc3c8','\uc3c9','\uc3ca', + '\uc3cb','\uc3cc','\uc3cd','\uc3ce','\uc3cf','\uc3d0','\uc3d1', + '\uc3d2','\uc3d3','\uc3d4','\uc3d5','\uc3d6','\uc3d7','\uc3d8', + '\uc3d9','\uc3da','\uc3db','\uc3dc','\uc3dd','\uc3de','\uc3df', + '\uc3e0','\uc3e1','\uc3e2','\uc3e3','\uc3e4','\uc3e5','\uc3e6', + '\uc3e7','\uc3e8','\uc3e9','\uc3ea','\uc3eb','\uc3ec','\uc3ed', + '\uc3ee','\uc3ef','\uc3f0','\uc3f1','\uc3f2','\uc3f3','\uc3f4', + '\uc3f5','\uc3f6','\uc3f7','\uc3f8','\uc3f9','\uc3fa','\uc3fb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+49920; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void fc400() { + char[] cs = new char[] { + '\uc400','\uc401','\uc402','\uc403','\uc404','\uc405','\uc406', + '\uc407','\uc408','\uc409','\uc40a','\uc40b','\uc40c','\uc40d', + '\uc40e','\uc40f','\uc410','\uc411','\uc412','\uc413','\uc414', + '\uc415','\uc416','\uc417','\uc418','\uc419','\uc41a','\uc41b', + '\uc41c','\uc41d','\uc41e','\uc41f','\uc420','\uc421','\uc422', + '\uc423','\uc424','\uc425','\uc426','\uc427','\uc428','\uc429', + '\uc42a','\uc42b','\uc42c','\uc42d','\uc42e','\uc42f','\uc430', + '\uc431','\uc432','\uc433','\uc434','\uc435','\uc436','\uc437', + '\uc438','\uc439','\uc43a','\uc43b','\uc43c','\uc43d','\uc43e', + '\uc43f','\uc440','\uc441','\uc442','\uc443','\uc444','\uc445', + '\uc446','\uc447','\uc448','\uc449','\uc44a','\uc44b','\uc44c', + '\uc44d','\uc44e','\uc44f','\uc450','\uc451','\uc452','\uc453', + '\uc454','\uc455','\uc456','\uc457','\uc458','\uc459','\uc45a', + '\uc45b','\uc45c','\uc45d','\uc45e','\uc45f','\uc460','\uc461', + '\uc462','\uc463','\uc464','\uc465','\uc466','\uc467','\uc468', + '\uc469','\uc46a','\uc46b','\uc46c','\uc46d','\uc46e','\uc46f', + '\uc470','\uc471','\uc472','\uc473','\uc474','\uc475','\uc476', + '\uc477','\uc478','\uc479','\uc47a','\uc47b','\uc47c','\uc47d', + '\uc47e','\uc47f','\uc480','\uc481','\uc482','\uc483','\uc484', + '\uc485','\uc486','\uc487','\uc488','\uc489','\uc48a','\uc48b', + '\uc48c','\uc48d','\uc48e','\uc48f','\uc490','\uc491','\uc492', + '\uc493','\uc494','\uc495','\uc496','\uc497','\uc498','\uc499', + '\uc49a','\uc49b','\uc49c','\uc49d','\uc49e','\uc49f','\uc4a0', + '\uc4a1','\uc4a2','\uc4a3','\uc4a4','\uc4a5','\uc4a6','\uc4a7', + '\uc4a8','\uc4a9','\uc4aa','\uc4ab','\uc4ac','\uc4ad','\uc4ae', + '\uc4af','\uc4b0','\uc4b1','\uc4b2','\uc4b3','\uc4b4','\uc4b5', + '\uc4b6','\uc4b7','\uc4b8','\uc4b9','\uc4ba','\uc4bb','\uc4bc', + '\uc4bd','\uc4be','\uc4bf','\uc4c0','\uc4c1','\uc4c2','\uc4c3', + '\uc4c4','\uc4c5','\uc4c6','\uc4c7','\uc4c8','\uc4c9','\uc4ca', + '\uc4cb','\uc4cc','\uc4cd','\uc4ce','\uc4cf','\uc4d0','\uc4d1', + '\uc4d2','\uc4d3','\uc4d4','\uc4d5','\uc4d6','\uc4d7','\uc4d8', + '\uc4d9','\uc4da','\uc4db','\uc4dc','\uc4dd','\uc4de','\uc4df', + '\uc4e0','\uc4e1','\uc4e2','\uc4e3','\uc4e4','\uc4e5','\uc4e6', + '\uc4e7','\uc4e8','\uc4e9','\uc4ea','\uc4eb','\uc4ec','\uc4ed', + '\uc4ee','\uc4ef','\uc4f0','\uc4f1','\uc4f2','\uc4f3','\uc4f4', + '\uc4f5','\uc4f6','\uc4f7','\uc4f8','\uc4f9','\uc4fa','\uc4fb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+50176; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void fc500() { + char[] cs = new char[] { + '\uc500','\uc501','\uc502','\uc503','\uc504','\uc505','\uc506', + '\uc507','\uc508','\uc509','\uc50a','\uc50b','\uc50c','\uc50d', + '\uc50e','\uc50f','\uc510','\uc511','\uc512','\uc513','\uc514', + '\uc515','\uc516','\uc517','\uc518','\uc519','\uc51a','\uc51b', + '\uc51c','\uc51d','\uc51e','\uc51f','\uc520','\uc521','\uc522', + '\uc523','\uc524','\uc525','\uc526','\uc527','\uc528','\uc529', + '\uc52a','\uc52b','\uc52c','\uc52d','\uc52e','\uc52f','\uc530', + '\uc531','\uc532','\uc533','\uc534','\uc535','\uc536','\uc537', + '\uc538','\uc539','\uc53a','\uc53b','\uc53c','\uc53d','\uc53e', + '\uc53f','\uc540','\uc541','\uc542','\uc543','\uc544','\uc545', + '\uc546','\uc547','\uc548','\uc549','\uc54a','\uc54b','\uc54c', + '\uc54d','\uc54e','\uc54f','\uc550','\uc551','\uc552','\uc553', + '\uc554','\uc555','\uc556','\uc557','\uc558','\uc559','\uc55a', + '\uc55b','\uc55c','\uc55d','\uc55e','\uc55f','\uc560','\uc561', + '\uc562','\uc563','\uc564','\uc565','\uc566','\uc567','\uc568', + '\uc569','\uc56a','\uc56b','\uc56c','\uc56d','\uc56e','\uc56f', + '\uc570','\uc571','\uc572','\uc573','\uc574','\uc575','\uc576', + '\uc577','\uc578','\uc579','\uc57a','\uc57b','\uc57c','\uc57d', + '\uc57e','\uc57f','\uc580','\uc581','\uc582','\uc583','\uc584', + '\uc585','\uc586','\uc587','\uc588','\uc589','\uc58a','\uc58b', + '\uc58c','\uc58d','\uc58e','\uc58f','\uc590','\uc591','\uc592', + '\uc593','\uc594','\uc595','\uc596','\uc597','\uc598','\uc599', + '\uc59a','\uc59b','\uc59c','\uc59d','\uc59e','\uc59f','\uc5a0', + '\uc5a1','\uc5a2','\uc5a3','\uc5a4','\uc5a5','\uc5a6','\uc5a7', + '\uc5a8','\uc5a9','\uc5aa','\uc5ab','\uc5ac','\uc5ad','\uc5ae', + '\uc5af','\uc5b0','\uc5b1','\uc5b2','\uc5b3','\uc5b4','\uc5b5', + '\uc5b6','\uc5b7','\uc5b8','\uc5b9','\uc5ba','\uc5bb','\uc5bc', + '\uc5bd','\uc5be','\uc5bf','\uc5c0','\uc5c1','\uc5c2','\uc5c3', + '\uc5c4','\uc5c5','\uc5c6','\uc5c7','\uc5c8','\uc5c9','\uc5ca', + '\uc5cb','\uc5cc','\uc5cd','\uc5ce','\uc5cf','\uc5d0','\uc5d1', + '\uc5d2','\uc5d3','\uc5d4','\uc5d5','\uc5d6','\uc5d7','\uc5d8', + '\uc5d9','\uc5da','\uc5db','\uc5dc','\uc5dd','\uc5de','\uc5df', + '\uc5e0','\uc5e1','\uc5e2','\uc5e3','\uc5e4','\uc5e5','\uc5e6', + '\uc5e7','\uc5e8','\uc5e9','\uc5ea','\uc5eb','\uc5ec','\uc5ed', + '\uc5ee','\uc5ef','\uc5f0','\uc5f1','\uc5f2','\uc5f3','\uc5f4', + '\uc5f5','\uc5f6','\uc5f7','\uc5f8','\uc5f9','\uc5fa','\uc5fb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+50432; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void fc600() { + char[] cs = new char[] { + '\uc600','\uc601','\uc602','\uc603','\uc604','\uc605','\uc606', + '\uc607','\uc608','\uc609','\uc60a','\uc60b','\uc60c','\uc60d', + '\uc60e','\uc60f','\uc610','\uc611','\uc612','\uc613','\uc614', + '\uc615','\uc616','\uc617','\uc618','\uc619','\uc61a','\uc61b', + '\uc61c','\uc61d','\uc61e','\uc61f','\uc620','\uc621','\uc622', + '\uc623','\uc624','\uc625','\uc626','\uc627','\uc628','\uc629', + '\uc62a','\uc62b','\uc62c','\uc62d','\uc62e','\uc62f','\uc630', + '\uc631','\uc632','\uc633','\uc634','\uc635','\uc636','\uc637', + '\uc638','\uc639','\uc63a','\uc63b','\uc63c','\uc63d','\uc63e', + '\uc63f','\uc640','\uc641','\uc642','\uc643','\uc644','\uc645', + '\uc646','\uc647','\uc648','\uc649','\uc64a','\uc64b','\uc64c', + '\uc64d','\uc64e','\uc64f','\uc650','\uc651','\uc652','\uc653', + '\uc654','\uc655','\uc656','\uc657','\uc658','\uc659','\uc65a', + '\uc65b','\uc65c','\uc65d','\uc65e','\uc65f','\uc660','\uc661', + '\uc662','\uc663','\uc664','\uc665','\uc666','\uc667','\uc668', + '\uc669','\uc66a','\uc66b','\uc66c','\uc66d','\uc66e','\uc66f', + '\uc670','\uc671','\uc672','\uc673','\uc674','\uc675','\uc676', + '\uc677','\uc678','\uc679','\uc67a','\uc67b','\uc67c','\uc67d', + '\uc67e','\uc67f','\uc680','\uc681','\uc682','\uc683','\uc684', + '\uc685','\uc686','\uc687','\uc688','\uc689','\uc68a','\uc68b', + '\uc68c','\uc68d','\uc68e','\uc68f','\uc690','\uc691','\uc692', + '\uc693','\uc694','\uc695','\uc696','\uc697','\uc698','\uc699', + '\uc69a','\uc69b','\uc69c','\uc69d','\uc69e','\uc69f','\uc6a0', + '\uc6a1','\uc6a2','\uc6a3','\uc6a4','\uc6a5','\uc6a6','\uc6a7', + '\uc6a8','\uc6a9','\uc6aa','\uc6ab','\uc6ac','\uc6ad','\uc6ae', + '\uc6af','\uc6b0','\uc6b1','\uc6b2','\uc6b3','\uc6b4','\uc6b5', + '\uc6b6','\uc6b7','\uc6b8','\uc6b9','\uc6ba','\uc6bb','\uc6bc', + '\uc6bd','\uc6be','\uc6bf','\uc6c0','\uc6c1','\uc6c2','\uc6c3', + '\uc6c4','\uc6c5','\uc6c6','\uc6c7','\uc6c8','\uc6c9','\uc6ca', + '\uc6cb','\uc6cc','\uc6cd','\uc6ce','\uc6cf','\uc6d0','\uc6d1', + '\uc6d2','\uc6d3','\uc6d4','\uc6d5','\uc6d6','\uc6d7','\uc6d8', + '\uc6d9','\uc6da','\uc6db','\uc6dc','\uc6dd','\uc6de','\uc6df', + '\uc6e0','\uc6e1','\uc6e2','\uc6e3','\uc6e4','\uc6e5','\uc6e6', + '\uc6e7','\uc6e8','\uc6e9','\uc6ea','\uc6eb','\uc6ec','\uc6ed', + '\uc6ee','\uc6ef','\uc6f0','\uc6f1','\uc6f2','\uc6f3','\uc6f4', + '\uc6f5','\uc6f6','\uc6f7','\uc6f8','\uc6f9','\uc6fa','\uc6fb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+50688; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void fc700() { + char[] cs = new char[] { + '\uc700','\uc701','\uc702','\uc703','\uc704','\uc705','\uc706', + '\uc707','\uc708','\uc709','\uc70a','\uc70b','\uc70c','\uc70d', + '\uc70e','\uc70f','\uc710','\uc711','\uc712','\uc713','\uc714', + '\uc715','\uc716','\uc717','\uc718','\uc719','\uc71a','\uc71b', + '\uc71c','\uc71d','\uc71e','\uc71f','\uc720','\uc721','\uc722', + '\uc723','\uc724','\uc725','\uc726','\uc727','\uc728','\uc729', + '\uc72a','\uc72b','\uc72c','\uc72d','\uc72e','\uc72f','\uc730', + '\uc731','\uc732','\uc733','\uc734','\uc735','\uc736','\uc737', + '\uc738','\uc739','\uc73a','\uc73b','\uc73c','\uc73d','\uc73e', + '\uc73f','\uc740','\uc741','\uc742','\uc743','\uc744','\uc745', + '\uc746','\uc747','\uc748','\uc749','\uc74a','\uc74b','\uc74c', + '\uc74d','\uc74e','\uc74f','\uc750','\uc751','\uc752','\uc753', + '\uc754','\uc755','\uc756','\uc757','\uc758','\uc759','\uc75a', + '\uc75b','\uc75c','\uc75d','\uc75e','\uc75f','\uc760','\uc761', + '\uc762','\uc763','\uc764','\uc765','\uc766','\uc767','\uc768', + '\uc769','\uc76a','\uc76b','\uc76c','\uc76d','\uc76e','\uc76f', + '\uc770','\uc771','\uc772','\uc773','\uc774','\uc775','\uc776', + '\uc777','\uc778','\uc779','\uc77a','\uc77b','\uc77c','\uc77d', + '\uc77e','\uc77f','\uc780','\uc781','\uc782','\uc783','\uc784', + '\uc785','\uc786','\uc787','\uc788','\uc789','\uc78a','\uc78b', + '\uc78c','\uc78d','\uc78e','\uc78f','\uc790','\uc791','\uc792', + '\uc793','\uc794','\uc795','\uc796','\uc797','\uc798','\uc799', + '\uc79a','\uc79b','\uc79c','\uc79d','\uc79e','\uc79f','\uc7a0', + '\uc7a1','\uc7a2','\uc7a3','\uc7a4','\uc7a5','\uc7a6','\uc7a7', + '\uc7a8','\uc7a9','\uc7aa','\uc7ab','\uc7ac','\uc7ad','\uc7ae', + '\uc7af','\uc7b0','\uc7b1','\uc7b2','\uc7b3','\uc7b4','\uc7b5', + '\uc7b6','\uc7b7','\uc7b8','\uc7b9','\uc7ba','\uc7bb','\uc7bc', + '\uc7bd','\uc7be','\uc7bf','\uc7c0','\uc7c1','\uc7c2','\uc7c3', + '\uc7c4','\uc7c5','\uc7c6','\uc7c7','\uc7c8','\uc7c9','\uc7ca', + '\uc7cb','\uc7cc','\uc7cd','\uc7ce','\uc7cf','\uc7d0','\uc7d1', + '\uc7d2','\uc7d3','\uc7d4','\uc7d5','\uc7d6','\uc7d7','\uc7d8', + '\uc7d9','\uc7da','\uc7db','\uc7dc','\uc7dd','\uc7de','\uc7df', + '\uc7e0','\uc7e1','\uc7e2','\uc7e3','\uc7e4','\uc7e5','\uc7e6', + '\uc7e7','\uc7e8','\uc7e9','\uc7ea','\uc7eb','\uc7ec','\uc7ed', + '\uc7ee','\uc7ef','\uc7f0','\uc7f1','\uc7f2','\uc7f3','\uc7f4', + '\uc7f5','\uc7f6','\uc7f7','\uc7f8','\uc7f9','\uc7fa','\uc7fb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+50944; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void fc800() { + char[] cs = new char[] { + '\uc800','\uc801','\uc802','\uc803','\uc804','\uc805','\uc806', + '\uc807','\uc808','\uc809','\uc80a','\uc80b','\uc80c','\uc80d', + '\uc80e','\uc80f','\uc810','\uc811','\uc812','\uc813','\uc814', + '\uc815','\uc816','\uc817','\uc818','\uc819','\uc81a','\uc81b', + '\uc81c','\uc81d','\uc81e','\uc81f','\uc820','\uc821','\uc822', + '\uc823','\uc824','\uc825','\uc826','\uc827','\uc828','\uc829', + '\uc82a','\uc82b','\uc82c','\uc82d','\uc82e','\uc82f','\uc830', + '\uc831','\uc832','\uc833','\uc834','\uc835','\uc836','\uc837', + '\uc838','\uc839','\uc83a','\uc83b','\uc83c','\uc83d','\uc83e', + '\uc83f','\uc840','\uc841','\uc842','\uc843','\uc844','\uc845', + '\uc846','\uc847','\uc848','\uc849','\uc84a','\uc84b','\uc84c', + '\uc84d','\uc84e','\uc84f','\uc850','\uc851','\uc852','\uc853', + '\uc854','\uc855','\uc856','\uc857','\uc858','\uc859','\uc85a', + '\uc85b','\uc85c','\uc85d','\uc85e','\uc85f','\uc860','\uc861', + '\uc862','\uc863','\uc864','\uc865','\uc866','\uc867','\uc868', + '\uc869','\uc86a','\uc86b','\uc86c','\uc86d','\uc86e','\uc86f', + '\uc870','\uc871','\uc872','\uc873','\uc874','\uc875','\uc876', + '\uc877','\uc878','\uc879','\uc87a','\uc87b','\uc87c','\uc87d', + '\uc87e','\uc87f','\uc880','\uc881','\uc882','\uc883','\uc884', + '\uc885','\uc886','\uc887','\uc888','\uc889','\uc88a','\uc88b', + '\uc88c','\uc88d','\uc88e','\uc88f','\uc890','\uc891','\uc892', + '\uc893','\uc894','\uc895','\uc896','\uc897','\uc898','\uc899', + '\uc89a','\uc89b','\uc89c','\uc89d','\uc89e','\uc89f','\uc8a0', + '\uc8a1','\uc8a2','\uc8a3','\uc8a4','\uc8a5','\uc8a6','\uc8a7', + '\uc8a8','\uc8a9','\uc8aa','\uc8ab','\uc8ac','\uc8ad','\uc8ae', + '\uc8af','\uc8b0','\uc8b1','\uc8b2','\uc8b3','\uc8b4','\uc8b5', + '\uc8b6','\uc8b7','\uc8b8','\uc8b9','\uc8ba','\uc8bb','\uc8bc', + '\uc8bd','\uc8be','\uc8bf','\uc8c0','\uc8c1','\uc8c2','\uc8c3', + '\uc8c4','\uc8c5','\uc8c6','\uc8c7','\uc8c8','\uc8c9','\uc8ca', + '\uc8cb','\uc8cc','\uc8cd','\uc8ce','\uc8cf','\uc8d0','\uc8d1', + '\uc8d2','\uc8d3','\uc8d4','\uc8d5','\uc8d6','\uc8d7','\uc8d8', + '\uc8d9','\uc8da','\uc8db','\uc8dc','\uc8dd','\uc8de','\uc8df', + '\uc8e0','\uc8e1','\uc8e2','\uc8e3','\uc8e4','\uc8e5','\uc8e6', + '\uc8e7','\uc8e8','\uc8e9','\uc8ea','\uc8eb','\uc8ec','\uc8ed', + '\uc8ee','\uc8ef','\uc8f0','\uc8f1','\uc8f2','\uc8f3','\uc8f4', + '\uc8f5','\uc8f6','\uc8f7','\uc8f8','\uc8f9','\uc8fa','\uc8fb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+51200; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void fc900() { + char[] cs = new char[] { + '\uc900','\uc901','\uc902','\uc903','\uc904','\uc905','\uc906', + '\uc907','\uc908','\uc909','\uc90a','\uc90b','\uc90c','\uc90d', + '\uc90e','\uc90f','\uc910','\uc911','\uc912','\uc913','\uc914', + '\uc915','\uc916','\uc917','\uc918','\uc919','\uc91a','\uc91b', + '\uc91c','\uc91d','\uc91e','\uc91f','\uc920','\uc921','\uc922', + '\uc923','\uc924','\uc925','\uc926','\uc927','\uc928','\uc929', + '\uc92a','\uc92b','\uc92c','\uc92d','\uc92e','\uc92f','\uc930', + '\uc931','\uc932','\uc933','\uc934','\uc935','\uc936','\uc937', + '\uc938','\uc939','\uc93a','\uc93b','\uc93c','\uc93d','\uc93e', + '\uc93f','\uc940','\uc941','\uc942','\uc943','\uc944','\uc945', + '\uc946','\uc947','\uc948','\uc949','\uc94a','\uc94b','\uc94c', + '\uc94d','\uc94e','\uc94f','\uc950','\uc951','\uc952','\uc953', + '\uc954','\uc955','\uc956','\uc957','\uc958','\uc959','\uc95a', + '\uc95b','\uc95c','\uc95d','\uc95e','\uc95f','\uc960','\uc961', + '\uc962','\uc963','\uc964','\uc965','\uc966','\uc967','\uc968', + '\uc969','\uc96a','\uc96b','\uc96c','\uc96d','\uc96e','\uc96f', + '\uc970','\uc971','\uc972','\uc973','\uc974','\uc975','\uc976', + '\uc977','\uc978','\uc979','\uc97a','\uc97b','\uc97c','\uc97d', + '\uc97e','\uc97f','\uc980','\uc981','\uc982','\uc983','\uc984', + '\uc985','\uc986','\uc987','\uc988','\uc989','\uc98a','\uc98b', + '\uc98c','\uc98d','\uc98e','\uc98f','\uc990','\uc991','\uc992', + '\uc993','\uc994','\uc995','\uc996','\uc997','\uc998','\uc999', + '\uc99a','\uc99b','\uc99c','\uc99d','\uc99e','\uc99f','\uc9a0', + '\uc9a1','\uc9a2','\uc9a3','\uc9a4','\uc9a5','\uc9a6','\uc9a7', + '\uc9a8','\uc9a9','\uc9aa','\uc9ab','\uc9ac','\uc9ad','\uc9ae', + '\uc9af','\uc9b0','\uc9b1','\uc9b2','\uc9b3','\uc9b4','\uc9b5', + '\uc9b6','\uc9b7','\uc9b8','\uc9b9','\uc9ba','\uc9bb','\uc9bc', + '\uc9bd','\uc9be','\uc9bf','\uc9c0','\uc9c1','\uc9c2','\uc9c3', + '\uc9c4','\uc9c5','\uc9c6','\uc9c7','\uc9c8','\uc9c9','\uc9ca', + '\uc9cb','\uc9cc','\uc9cd','\uc9ce','\uc9cf','\uc9d0','\uc9d1', + '\uc9d2','\uc9d3','\uc9d4','\uc9d5','\uc9d6','\uc9d7','\uc9d8', + '\uc9d9','\uc9da','\uc9db','\uc9dc','\uc9dd','\uc9de','\uc9df', + '\uc9e0','\uc9e1','\uc9e2','\uc9e3','\uc9e4','\uc9e5','\uc9e6', + '\uc9e7','\uc9e8','\uc9e9','\uc9ea','\uc9eb','\uc9ec','\uc9ed', + '\uc9ee','\uc9ef','\uc9f0','\uc9f1','\uc9f2','\uc9f3','\uc9f4', + '\uc9f5','\uc9f6','\uc9f7','\uc9f8','\uc9f9','\uc9fa','\uc9fb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+51456; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void fca00() { + char[] cs = new char[] { + '\uca00','\uca01','\uca02','\uca03','\uca04','\uca05','\uca06', + '\uca07','\uca08','\uca09','\uca0a','\uca0b','\uca0c','\uca0d', + '\uca0e','\uca0f','\uca10','\uca11','\uca12','\uca13','\uca14', + '\uca15','\uca16','\uca17','\uca18','\uca19','\uca1a','\uca1b', + '\uca1c','\uca1d','\uca1e','\uca1f','\uca20','\uca21','\uca22', + '\uca23','\uca24','\uca25','\uca26','\uca27','\uca28','\uca29', + '\uca2a','\uca2b','\uca2c','\uca2d','\uca2e','\uca2f','\uca30', + '\uca31','\uca32','\uca33','\uca34','\uca35','\uca36','\uca37', + '\uca38','\uca39','\uca3a','\uca3b','\uca3c','\uca3d','\uca3e', + '\uca3f','\uca40','\uca41','\uca42','\uca43','\uca44','\uca45', + '\uca46','\uca47','\uca48','\uca49','\uca4a','\uca4b','\uca4c', + '\uca4d','\uca4e','\uca4f','\uca50','\uca51','\uca52','\uca53', + '\uca54','\uca55','\uca56','\uca57','\uca58','\uca59','\uca5a', + '\uca5b','\uca5c','\uca5d','\uca5e','\uca5f','\uca60','\uca61', + '\uca62','\uca63','\uca64','\uca65','\uca66','\uca67','\uca68', + '\uca69','\uca6a','\uca6b','\uca6c','\uca6d','\uca6e','\uca6f', + '\uca70','\uca71','\uca72','\uca73','\uca74','\uca75','\uca76', + '\uca77','\uca78','\uca79','\uca7a','\uca7b','\uca7c','\uca7d', + '\uca7e','\uca7f','\uca80','\uca81','\uca82','\uca83','\uca84', + '\uca85','\uca86','\uca87','\uca88','\uca89','\uca8a','\uca8b', + '\uca8c','\uca8d','\uca8e','\uca8f','\uca90','\uca91','\uca92', + '\uca93','\uca94','\uca95','\uca96','\uca97','\uca98','\uca99', + '\uca9a','\uca9b','\uca9c','\uca9d','\uca9e','\uca9f','\ucaa0', + '\ucaa1','\ucaa2','\ucaa3','\ucaa4','\ucaa5','\ucaa6','\ucaa7', + '\ucaa8','\ucaa9','\ucaaa','\ucaab','\ucaac','\ucaad','\ucaae', + '\ucaaf','\ucab0','\ucab1','\ucab2','\ucab3','\ucab4','\ucab5', + '\ucab6','\ucab7','\ucab8','\ucab9','\ucaba','\ucabb','\ucabc', + '\ucabd','\ucabe','\ucabf','\ucac0','\ucac1','\ucac2','\ucac3', + '\ucac4','\ucac5','\ucac6','\ucac7','\ucac8','\ucac9','\ucaca', + '\ucacb','\ucacc','\ucacd','\ucace','\ucacf','\ucad0','\ucad1', + '\ucad2','\ucad3','\ucad4','\ucad5','\ucad6','\ucad7','\ucad8', + '\ucad9','\ucada','\ucadb','\ucadc','\ucadd','\ucade','\ucadf', + '\ucae0','\ucae1','\ucae2','\ucae3','\ucae4','\ucae5','\ucae6', + '\ucae7','\ucae8','\ucae9','\ucaea','\ucaeb','\ucaec','\ucaed', + '\ucaee','\ucaef','\ucaf0','\ucaf1','\ucaf2','\ucaf3','\ucaf4', + '\ucaf5','\ucaf6','\ucaf7','\ucaf8','\ucaf9','\ucafa','\ucafb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+51712; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void fcb00() { + char[] cs = new char[] { + '\ucb00','\ucb01','\ucb02','\ucb03','\ucb04','\ucb05','\ucb06', + '\ucb07','\ucb08','\ucb09','\ucb0a','\ucb0b','\ucb0c','\ucb0d', + '\ucb0e','\ucb0f','\ucb10','\ucb11','\ucb12','\ucb13','\ucb14', + '\ucb15','\ucb16','\ucb17','\ucb18','\ucb19','\ucb1a','\ucb1b', + '\ucb1c','\ucb1d','\ucb1e','\ucb1f','\ucb20','\ucb21','\ucb22', + '\ucb23','\ucb24','\ucb25','\ucb26','\ucb27','\ucb28','\ucb29', + '\ucb2a','\ucb2b','\ucb2c','\ucb2d','\ucb2e','\ucb2f','\ucb30', + '\ucb31','\ucb32','\ucb33','\ucb34','\ucb35','\ucb36','\ucb37', + '\ucb38','\ucb39','\ucb3a','\ucb3b','\ucb3c','\ucb3d','\ucb3e', + '\ucb3f','\ucb40','\ucb41','\ucb42','\ucb43','\ucb44','\ucb45', + '\ucb46','\ucb47','\ucb48','\ucb49','\ucb4a','\ucb4b','\ucb4c', + '\ucb4d','\ucb4e','\ucb4f','\ucb50','\ucb51','\ucb52','\ucb53', + '\ucb54','\ucb55','\ucb56','\ucb57','\ucb58','\ucb59','\ucb5a', + '\ucb5b','\ucb5c','\ucb5d','\ucb5e','\ucb5f','\ucb60','\ucb61', + '\ucb62','\ucb63','\ucb64','\ucb65','\ucb66','\ucb67','\ucb68', + '\ucb69','\ucb6a','\ucb6b','\ucb6c','\ucb6d','\ucb6e','\ucb6f', + '\ucb70','\ucb71','\ucb72','\ucb73','\ucb74','\ucb75','\ucb76', + '\ucb77','\ucb78','\ucb79','\ucb7a','\ucb7b','\ucb7c','\ucb7d', + '\ucb7e','\ucb7f','\ucb80','\ucb81','\ucb82','\ucb83','\ucb84', + '\ucb85','\ucb86','\ucb87','\ucb88','\ucb89','\ucb8a','\ucb8b', + '\ucb8c','\ucb8d','\ucb8e','\ucb8f','\ucb90','\ucb91','\ucb92', + '\ucb93','\ucb94','\ucb95','\ucb96','\ucb97','\ucb98','\ucb99', + '\ucb9a','\ucb9b','\ucb9c','\ucb9d','\ucb9e','\ucb9f','\ucba0', + '\ucba1','\ucba2','\ucba3','\ucba4','\ucba5','\ucba6','\ucba7', + '\ucba8','\ucba9','\ucbaa','\ucbab','\ucbac','\ucbad','\ucbae', + '\ucbaf','\ucbb0','\ucbb1','\ucbb2','\ucbb3','\ucbb4','\ucbb5', + '\ucbb6','\ucbb7','\ucbb8','\ucbb9','\ucbba','\ucbbb','\ucbbc', + '\ucbbd','\ucbbe','\ucbbf','\ucbc0','\ucbc1','\ucbc2','\ucbc3', + '\ucbc4','\ucbc5','\ucbc6','\ucbc7','\ucbc8','\ucbc9','\ucbca', + '\ucbcb','\ucbcc','\ucbcd','\ucbce','\ucbcf','\ucbd0','\ucbd1', + '\ucbd2','\ucbd3','\ucbd4','\ucbd5','\ucbd6','\ucbd7','\ucbd8', + '\ucbd9','\ucbda','\ucbdb','\ucbdc','\ucbdd','\ucbde','\ucbdf', + '\ucbe0','\ucbe1','\ucbe2','\ucbe3','\ucbe4','\ucbe5','\ucbe6', + '\ucbe7','\ucbe8','\ucbe9','\ucbea','\ucbeb','\ucbec','\ucbed', + '\ucbee','\ucbef','\ucbf0','\ucbf1','\ucbf2','\ucbf3','\ucbf4', + '\ucbf5','\ucbf6','\ucbf7','\ucbf8','\ucbf9','\ucbfa','\ucbfb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+51968; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void fcc00() { + char[] cs = new char[] { + '\ucc00','\ucc01','\ucc02','\ucc03','\ucc04','\ucc05','\ucc06', + '\ucc07','\ucc08','\ucc09','\ucc0a','\ucc0b','\ucc0c','\ucc0d', + '\ucc0e','\ucc0f','\ucc10','\ucc11','\ucc12','\ucc13','\ucc14', + '\ucc15','\ucc16','\ucc17','\ucc18','\ucc19','\ucc1a','\ucc1b', + '\ucc1c','\ucc1d','\ucc1e','\ucc1f','\ucc20','\ucc21','\ucc22', + '\ucc23','\ucc24','\ucc25','\ucc26','\ucc27','\ucc28','\ucc29', + '\ucc2a','\ucc2b','\ucc2c','\ucc2d','\ucc2e','\ucc2f','\ucc30', + '\ucc31','\ucc32','\ucc33','\ucc34','\ucc35','\ucc36','\ucc37', + '\ucc38','\ucc39','\ucc3a','\ucc3b','\ucc3c','\ucc3d','\ucc3e', + '\ucc3f','\ucc40','\ucc41','\ucc42','\ucc43','\ucc44','\ucc45', + '\ucc46','\ucc47','\ucc48','\ucc49','\ucc4a','\ucc4b','\ucc4c', + '\ucc4d','\ucc4e','\ucc4f','\ucc50','\ucc51','\ucc52','\ucc53', + '\ucc54','\ucc55','\ucc56','\ucc57','\ucc58','\ucc59','\ucc5a', + '\ucc5b','\ucc5c','\ucc5d','\ucc5e','\ucc5f','\ucc60','\ucc61', + '\ucc62','\ucc63','\ucc64','\ucc65','\ucc66','\ucc67','\ucc68', + '\ucc69','\ucc6a','\ucc6b','\ucc6c','\ucc6d','\ucc6e','\ucc6f', + '\ucc70','\ucc71','\ucc72','\ucc73','\ucc74','\ucc75','\ucc76', + '\ucc77','\ucc78','\ucc79','\ucc7a','\ucc7b','\ucc7c','\ucc7d', + '\ucc7e','\ucc7f','\ucc80','\ucc81','\ucc82','\ucc83','\ucc84', + '\ucc85','\ucc86','\ucc87','\ucc88','\ucc89','\ucc8a','\ucc8b', + '\ucc8c','\ucc8d','\ucc8e','\ucc8f','\ucc90','\ucc91','\ucc92', + '\ucc93','\ucc94','\ucc95','\ucc96','\ucc97','\ucc98','\ucc99', + '\ucc9a','\ucc9b','\ucc9c','\ucc9d','\ucc9e','\ucc9f','\ucca0', + '\ucca1','\ucca2','\ucca3','\ucca4','\ucca5','\ucca6','\ucca7', + '\ucca8','\ucca9','\uccaa','\uccab','\uccac','\uccad','\uccae', + '\uccaf','\uccb0','\uccb1','\uccb2','\uccb3','\uccb4','\uccb5', + '\uccb6','\uccb7','\uccb8','\uccb9','\uccba','\uccbb','\uccbc', + '\uccbd','\uccbe','\uccbf','\uccc0','\uccc1','\uccc2','\uccc3', + '\uccc4','\uccc5','\uccc6','\uccc7','\uccc8','\uccc9','\uccca', + '\ucccb','\ucccc','\ucccd','\uccce','\ucccf','\uccd0','\uccd1', + '\uccd2','\uccd3','\uccd4','\uccd5','\uccd6','\uccd7','\uccd8', + '\uccd9','\uccda','\uccdb','\uccdc','\uccdd','\uccde','\uccdf', + '\ucce0','\ucce1','\ucce2','\ucce3','\ucce4','\ucce5','\ucce6', + '\ucce7','\ucce8','\ucce9','\uccea','\ucceb','\uccec','\ucced', + '\uccee','\uccef','\uccf0','\uccf1','\uccf2','\uccf3','\uccf4', + '\uccf5','\uccf6','\uccf7','\uccf8','\uccf9','\uccfa','\uccfb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+52224; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void fcd00() { + char[] cs = new char[] { + '\ucd00','\ucd01','\ucd02','\ucd03','\ucd04','\ucd05','\ucd06', + '\ucd07','\ucd08','\ucd09','\ucd0a','\ucd0b','\ucd0c','\ucd0d', + '\ucd0e','\ucd0f','\ucd10','\ucd11','\ucd12','\ucd13','\ucd14', + '\ucd15','\ucd16','\ucd17','\ucd18','\ucd19','\ucd1a','\ucd1b', + '\ucd1c','\ucd1d','\ucd1e','\ucd1f','\ucd20','\ucd21','\ucd22', + '\ucd23','\ucd24','\ucd25','\ucd26','\ucd27','\ucd28','\ucd29', + '\ucd2a','\ucd2b','\ucd2c','\ucd2d','\ucd2e','\ucd2f','\ucd30', + '\ucd31','\ucd32','\ucd33','\ucd34','\ucd35','\ucd36','\ucd37', + '\ucd38','\ucd39','\ucd3a','\ucd3b','\ucd3c','\ucd3d','\ucd3e', + '\ucd3f','\ucd40','\ucd41','\ucd42','\ucd43','\ucd44','\ucd45', + '\ucd46','\ucd47','\ucd48','\ucd49','\ucd4a','\ucd4b','\ucd4c', + '\ucd4d','\ucd4e','\ucd4f','\ucd50','\ucd51','\ucd52','\ucd53', + '\ucd54','\ucd55','\ucd56','\ucd57','\ucd58','\ucd59','\ucd5a', + '\ucd5b','\ucd5c','\ucd5d','\ucd5e','\ucd5f','\ucd60','\ucd61', + '\ucd62','\ucd63','\ucd64','\ucd65','\ucd66','\ucd67','\ucd68', + '\ucd69','\ucd6a','\ucd6b','\ucd6c','\ucd6d','\ucd6e','\ucd6f', + '\ucd70','\ucd71','\ucd72','\ucd73','\ucd74','\ucd75','\ucd76', + '\ucd77','\ucd78','\ucd79','\ucd7a','\ucd7b','\ucd7c','\ucd7d', + '\ucd7e','\ucd7f','\ucd80','\ucd81','\ucd82','\ucd83','\ucd84', + '\ucd85','\ucd86','\ucd87','\ucd88','\ucd89','\ucd8a','\ucd8b', + '\ucd8c','\ucd8d','\ucd8e','\ucd8f','\ucd90','\ucd91','\ucd92', + '\ucd93','\ucd94','\ucd95','\ucd96','\ucd97','\ucd98','\ucd99', + '\ucd9a','\ucd9b','\ucd9c','\ucd9d','\ucd9e','\ucd9f','\ucda0', + '\ucda1','\ucda2','\ucda3','\ucda4','\ucda5','\ucda6','\ucda7', + '\ucda8','\ucda9','\ucdaa','\ucdab','\ucdac','\ucdad','\ucdae', + '\ucdaf','\ucdb0','\ucdb1','\ucdb2','\ucdb3','\ucdb4','\ucdb5', + '\ucdb6','\ucdb7','\ucdb8','\ucdb9','\ucdba','\ucdbb','\ucdbc', + '\ucdbd','\ucdbe','\ucdbf','\ucdc0','\ucdc1','\ucdc2','\ucdc3', + '\ucdc4','\ucdc5','\ucdc6','\ucdc7','\ucdc8','\ucdc9','\ucdca', + '\ucdcb','\ucdcc','\ucdcd','\ucdce','\ucdcf','\ucdd0','\ucdd1', + '\ucdd2','\ucdd3','\ucdd4','\ucdd5','\ucdd6','\ucdd7','\ucdd8', + '\ucdd9','\ucdda','\ucddb','\ucddc','\ucddd','\ucdde','\ucddf', + '\ucde0','\ucde1','\ucde2','\ucde3','\ucde4','\ucde5','\ucde6', + '\ucde7','\ucde8','\ucde9','\ucdea','\ucdeb','\ucdec','\ucded', + '\ucdee','\ucdef','\ucdf0','\ucdf1','\ucdf2','\ucdf3','\ucdf4', + '\ucdf5','\ucdf6','\ucdf7','\ucdf8','\ucdf9','\ucdfa','\ucdfb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+52480; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void fce00() { + char[] cs = new char[] { + '\uce00','\uce01','\uce02','\uce03','\uce04','\uce05','\uce06', + '\uce07','\uce08','\uce09','\uce0a','\uce0b','\uce0c','\uce0d', + '\uce0e','\uce0f','\uce10','\uce11','\uce12','\uce13','\uce14', + '\uce15','\uce16','\uce17','\uce18','\uce19','\uce1a','\uce1b', + '\uce1c','\uce1d','\uce1e','\uce1f','\uce20','\uce21','\uce22', + '\uce23','\uce24','\uce25','\uce26','\uce27','\uce28','\uce29', + '\uce2a','\uce2b','\uce2c','\uce2d','\uce2e','\uce2f','\uce30', + '\uce31','\uce32','\uce33','\uce34','\uce35','\uce36','\uce37', + '\uce38','\uce39','\uce3a','\uce3b','\uce3c','\uce3d','\uce3e', + '\uce3f','\uce40','\uce41','\uce42','\uce43','\uce44','\uce45', + '\uce46','\uce47','\uce48','\uce49','\uce4a','\uce4b','\uce4c', + '\uce4d','\uce4e','\uce4f','\uce50','\uce51','\uce52','\uce53', + '\uce54','\uce55','\uce56','\uce57','\uce58','\uce59','\uce5a', + '\uce5b','\uce5c','\uce5d','\uce5e','\uce5f','\uce60','\uce61', + '\uce62','\uce63','\uce64','\uce65','\uce66','\uce67','\uce68', + '\uce69','\uce6a','\uce6b','\uce6c','\uce6d','\uce6e','\uce6f', + '\uce70','\uce71','\uce72','\uce73','\uce74','\uce75','\uce76', + '\uce77','\uce78','\uce79','\uce7a','\uce7b','\uce7c','\uce7d', + '\uce7e','\uce7f','\uce80','\uce81','\uce82','\uce83','\uce84', + '\uce85','\uce86','\uce87','\uce88','\uce89','\uce8a','\uce8b', + '\uce8c','\uce8d','\uce8e','\uce8f','\uce90','\uce91','\uce92', + '\uce93','\uce94','\uce95','\uce96','\uce97','\uce98','\uce99', + '\uce9a','\uce9b','\uce9c','\uce9d','\uce9e','\uce9f','\ucea0', + '\ucea1','\ucea2','\ucea3','\ucea4','\ucea5','\ucea6','\ucea7', + '\ucea8','\ucea9','\uceaa','\uceab','\uceac','\ucead','\uceae', + '\uceaf','\uceb0','\uceb1','\uceb2','\uceb3','\uceb4','\uceb5', + '\uceb6','\uceb7','\uceb8','\uceb9','\uceba','\ucebb','\ucebc', + '\ucebd','\ucebe','\ucebf','\ucec0','\ucec1','\ucec2','\ucec3', + '\ucec4','\ucec5','\ucec6','\ucec7','\ucec8','\ucec9','\uceca', + '\ucecb','\ucecc','\ucecd','\ucece','\ucecf','\uced0','\uced1', + '\uced2','\uced3','\uced4','\uced5','\uced6','\uced7','\uced8', + '\uced9','\uceda','\ucedb','\ucedc','\ucedd','\ucede','\ucedf', + '\ucee0','\ucee1','\ucee2','\ucee3','\ucee4','\ucee5','\ucee6', + '\ucee7','\ucee8','\ucee9','\uceea','\uceeb','\uceec','\uceed', + '\uceee','\uceef','\ucef0','\ucef1','\ucef2','\ucef3','\ucef4', + '\ucef5','\ucef6','\ucef7','\ucef8','\ucef9','\ucefa','\ucefb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+52736; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void fcf00() { + char[] cs = new char[] { + '\ucf00','\ucf01','\ucf02','\ucf03','\ucf04','\ucf05','\ucf06', + '\ucf07','\ucf08','\ucf09','\ucf0a','\ucf0b','\ucf0c','\ucf0d', + '\ucf0e','\ucf0f','\ucf10','\ucf11','\ucf12','\ucf13','\ucf14', + '\ucf15','\ucf16','\ucf17','\ucf18','\ucf19','\ucf1a','\ucf1b', + '\ucf1c','\ucf1d','\ucf1e','\ucf1f','\ucf20','\ucf21','\ucf22', + '\ucf23','\ucf24','\ucf25','\ucf26','\ucf27','\ucf28','\ucf29', + '\ucf2a','\ucf2b','\ucf2c','\ucf2d','\ucf2e','\ucf2f','\ucf30', + '\ucf31','\ucf32','\ucf33','\ucf34','\ucf35','\ucf36','\ucf37', + '\ucf38','\ucf39','\ucf3a','\ucf3b','\ucf3c','\ucf3d','\ucf3e', + '\ucf3f','\ucf40','\ucf41','\ucf42','\ucf43','\ucf44','\ucf45', + '\ucf46','\ucf47','\ucf48','\ucf49','\ucf4a','\ucf4b','\ucf4c', + '\ucf4d','\ucf4e','\ucf4f','\ucf50','\ucf51','\ucf52','\ucf53', + '\ucf54','\ucf55','\ucf56','\ucf57','\ucf58','\ucf59','\ucf5a', + '\ucf5b','\ucf5c','\ucf5d','\ucf5e','\ucf5f','\ucf60','\ucf61', + '\ucf62','\ucf63','\ucf64','\ucf65','\ucf66','\ucf67','\ucf68', + '\ucf69','\ucf6a','\ucf6b','\ucf6c','\ucf6d','\ucf6e','\ucf6f', + '\ucf70','\ucf71','\ucf72','\ucf73','\ucf74','\ucf75','\ucf76', + '\ucf77','\ucf78','\ucf79','\ucf7a','\ucf7b','\ucf7c','\ucf7d', + '\ucf7e','\ucf7f','\ucf80','\ucf81','\ucf82','\ucf83','\ucf84', + '\ucf85','\ucf86','\ucf87','\ucf88','\ucf89','\ucf8a','\ucf8b', + '\ucf8c','\ucf8d','\ucf8e','\ucf8f','\ucf90','\ucf91','\ucf92', + '\ucf93','\ucf94','\ucf95','\ucf96','\ucf97','\ucf98','\ucf99', + '\ucf9a','\ucf9b','\ucf9c','\ucf9d','\ucf9e','\ucf9f','\ucfa0', + '\ucfa1','\ucfa2','\ucfa3','\ucfa4','\ucfa5','\ucfa6','\ucfa7', + '\ucfa8','\ucfa9','\ucfaa','\ucfab','\ucfac','\ucfad','\ucfae', + '\ucfaf','\ucfb0','\ucfb1','\ucfb2','\ucfb3','\ucfb4','\ucfb5', + '\ucfb6','\ucfb7','\ucfb8','\ucfb9','\ucfba','\ucfbb','\ucfbc', + '\ucfbd','\ucfbe','\ucfbf','\ucfc0','\ucfc1','\ucfc2','\ucfc3', + '\ucfc4','\ucfc5','\ucfc6','\ucfc7','\ucfc8','\ucfc9','\ucfca', + '\ucfcb','\ucfcc','\ucfcd','\ucfce','\ucfcf','\ucfd0','\ucfd1', + '\ucfd2','\ucfd3','\ucfd4','\ucfd5','\ucfd6','\ucfd7','\ucfd8', + '\ucfd9','\ucfda','\ucfdb','\ucfdc','\ucfdd','\ucfde','\ucfdf', + '\ucfe0','\ucfe1','\ucfe2','\ucfe3','\ucfe4','\ucfe5','\ucfe6', + '\ucfe7','\ucfe8','\ucfe9','\ucfea','\ucfeb','\ucfec','\ucfed', + '\ucfee','\ucfef','\ucff0','\ucff1','\ucff2','\ucff3','\ucff4', + '\ucff5','\ucff6','\ucff7','\ucff8','\ucff9','\ucffa','\ucffb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+52992; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void fd000() { + char[] cs = new char[] { + '\ud000','\ud001','\ud002','\ud003','\ud004','\ud005','\ud006', + '\ud007','\ud008','\ud009','\ud00a','\ud00b','\ud00c','\ud00d', + '\ud00e','\ud00f','\ud010','\ud011','\ud012','\ud013','\ud014', + '\ud015','\ud016','\ud017','\ud018','\ud019','\ud01a','\ud01b', + '\ud01c','\ud01d','\ud01e','\ud01f','\ud020','\ud021','\ud022', + '\ud023','\ud024','\ud025','\ud026','\ud027','\ud028','\ud029', + '\ud02a','\ud02b','\ud02c','\ud02d','\ud02e','\ud02f','\ud030', + '\ud031','\ud032','\ud033','\ud034','\ud035','\ud036','\ud037', + '\ud038','\ud039','\ud03a','\ud03b','\ud03c','\ud03d','\ud03e', + '\ud03f','\ud040','\ud041','\ud042','\ud043','\ud044','\ud045', + '\ud046','\ud047','\ud048','\ud049','\ud04a','\ud04b','\ud04c', + '\ud04d','\ud04e','\ud04f','\ud050','\ud051','\ud052','\ud053', + '\ud054','\ud055','\ud056','\ud057','\ud058','\ud059','\ud05a', + '\ud05b','\ud05c','\ud05d','\ud05e','\ud05f','\ud060','\ud061', + '\ud062','\ud063','\ud064','\ud065','\ud066','\ud067','\ud068', + '\ud069','\ud06a','\ud06b','\ud06c','\ud06d','\ud06e','\ud06f', + '\ud070','\ud071','\ud072','\ud073','\ud074','\ud075','\ud076', + '\ud077','\ud078','\ud079','\ud07a','\ud07b','\ud07c','\ud07d', + '\ud07e','\ud07f','\ud080','\ud081','\ud082','\ud083','\ud084', + '\ud085','\ud086','\ud087','\ud088','\ud089','\ud08a','\ud08b', + '\ud08c','\ud08d','\ud08e','\ud08f','\ud090','\ud091','\ud092', + '\ud093','\ud094','\ud095','\ud096','\ud097','\ud098','\ud099', + '\ud09a','\ud09b','\ud09c','\ud09d','\ud09e','\ud09f','\ud0a0', + '\ud0a1','\ud0a2','\ud0a3','\ud0a4','\ud0a5','\ud0a6','\ud0a7', + '\ud0a8','\ud0a9','\ud0aa','\ud0ab','\ud0ac','\ud0ad','\ud0ae', + '\ud0af','\ud0b0','\ud0b1','\ud0b2','\ud0b3','\ud0b4','\ud0b5', + '\ud0b6','\ud0b7','\ud0b8','\ud0b9','\ud0ba','\ud0bb','\ud0bc', + '\ud0bd','\ud0be','\ud0bf','\ud0c0','\ud0c1','\ud0c2','\ud0c3', + '\ud0c4','\ud0c5','\ud0c6','\ud0c7','\ud0c8','\ud0c9','\ud0ca', + '\ud0cb','\ud0cc','\ud0cd','\ud0ce','\ud0cf','\ud0d0','\ud0d1', + '\ud0d2','\ud0d3','\ud0d4','\ud0d5','\ud0d6','\ud0d7','\ud0d8', + '\ud0d9','\ud0da','\ud0db','\ud0dc','\ud0dd','\ud0de','\ud0df', + '\ud0e0','\ud0e1','\ud0e2','\ud0e3','\ud0e4','\ud0e5','\ud0e6', + '\ud0e7','\ud0e8','\ud0e9','\ud0ea','\ud0eb','\ud0ec','\ud0ed', + '\ud0ee','\ud0ef','\ud0f0','\ud0f1','\ud0f2','\ud0f3','\ud0f4', + '\ud0f5','\ud0f6','\ud0f7','\ud0f8','\ud0f9','\ud0fa','\ud0fb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+53248; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void fd100() { + char[] cs = new char[] { + '\ud100','\ud101','\ud102','\ud103','\ud104','\ud105','\ud106', + '\ud107','\ud108','\ud109','\ud10a','\ud10b','\ud10c','\ud10d', + '\ud10e','\ud10f','\ud110','\ud111','\ud112','\ud113','\ud114', + '\ud115','\ud116','\ud117','\ud118','\ud119','\ud11a','\ud11b', + '\ud11c','\ud11d','\ud11e','\ud11f','\ud120','\ud121','\ud122', + '\ud123','\ud124','\ud125','\ud126','\ud127','\ud128','\ud129', + '\ud12a','\ud12b','\ud12c','\ud12d','\ud12e','\ud12f','\ud130', + '\ud131','\ud132','\ud133','\ud134','\ud135','\ud136','\ud137', + '\ud138','\ud139','\ud13a','\ud13b','\ud13c','\ud13d','\ud13e', + '\ud13f','\ud140','\ud141','\ud142','\ud143','\ud144','\ud145', + '\ud146','\ud147','\ud148','\ud149','\ud14a','\ud14b','\ud14c', + '\ud14d','\ud14e','\ud14f','\ud150','\ud151','\ud152','\ud153', + '\ud154','\ud155','\ud156','\ud157','\ud158','\ud159','\ud15a', + '\ud15b','\ud15c','\ud15d','\ud15e','\ud15f','\ud160','\ud161', + '\ud162','\ud163','\ud164','\ud165','\ud166','\ud167','\ud168', + '\ud169','\ud16a','\ud16b','\ud16c','\ud16d','\ud16e','\ud16f', + '\ud170','\ud171','\ud172','\ud173','\ud174','\ud175','\ud176', + '\ud177','\ud178','\ud179','\ud17a','\ud17b','\ud17c','\ud17d', + '\ud17e','\ud17f','\ud180','\ud181','\ud182','\ud183','\ud184', + '\ud185','\ud186','\ud187','\ud188','\ud189','\ud18a','\ud18b', + '\ud18c','\ud18d','\ud18e','\ud18f','\ud190','\ud191','\ud192', + '\ud193','\ud194','\ud195','\ud196','\ud197','\ud198','\ud199', + '\ud19a','\ud19b','\ud19c','\ud19d','\ud19e','\ud19f','\ud1a0', + '\ud1a1','\ud1a2','\ud1a3','\ud1a4','\ud1a5','\ud1a6','\ud1a7', + '\ud1a8','\ud1a9','\ud1aa','\ud1ab','\ud1ac','\ud1ad','\ud1ae', + '\ud1af','\ud1b0','\ud1b1','\ud1b2','\ud1b3','\ud1b4','\ud1b5', + '\ud1b6','\ud1b7','\ud1b8','\ud1b9','\ud1ba','\ud1bb','\ud1bc', + '\ud1bd','\ud1be','\ud1bf','\ud1c0','\ud1c1','\ud1c2','\ud1c3', + '\ud1c4','\ud1c5','\ud1c6','\ud1c7','\ud1c8','\ud1c9','\ud1ca', + '\ud1cb','\ud1cc','\ud1cd','\ud1ce','\ud1cf','\ud1d0','\ud1d1', + '\ud1d2','\ud1d3','\ud1d4','\ud1d5','\ud1d6','\ud1d7','\ud1d8', + '\ud1d9','\ud1da','\ud1db','\ud1dc','\ud1dd','\ud1de','\ud1df', + '\ud1e0','\ud1e1','\ud1e2','\ud1e3','\ud1e4','\ud1e5','\ud1e6', + '\ud1e7','\ud1e8','\ud1e9','\ud1ea','\ud1eb','\ud1ec','\ud1ed', + '\ud1ee','\ud1ef','\ud1f0','\ud1f1','\ud1f2','\ud1f3','\ud1f4', + '\ud1f5','\ud1f6','\ud1f7','\ud1f8','\ud1f9','\ud1fa','\ud1fb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+53504; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void fd200() { + char[] cs = new char[] { + '\ud200','\ud201','\ud202','\ud203','\ud204','\ud205','\ud206', + '\ud207','\ud208','\ud209','\ud20a','\ud20b','\ud20c','\ud20d', + '\ud20e','\ud20f','\ud210','\ud211','\ud212','\ud213','\ud214', + '\ud215','\ud216','\ud217','\ud218','\ud219','\ud21a','\ud21b', + '\ud21c','\ud21d','\ud21e','\ud21f','\ud220','\ud221','\ud222', + '\ud223','\ud224','\ud225','\ud226','\ud227','\ud228','\ud229', + '\ud22a','\ud22b','\ud22c','\ud22d','\ud22e','\ud22f','\ud230', + '\ud231','\ud232','\ud233','\ud234','\ud235','\ud236','\ud237', + '\ud238','\ud239','\ud23a','\ud23b','\ud23c','\ud23d','\ud23e', + '\ud23f','\ud240','\ud241','\ud242','\ud243','\ud244','\ud245', + '\ud246','\ud247','\ud248','\ud249','\ud24a','\ud24b','\ud24c', + '\ud24d','\ud24e','\ud24f','\ud250','\ud251','\ud252','\ud253', + '\ud254','\ud255','\ud256','\ud257','\ud258','\ud259','\ud25a', + '\ud25b','\ud25c','\ud25d','\ud25e','\ud25f','\ud260','\ud261', + '\ud262','\ud263','\ud264','\ud265','\ud266','\ud267','\ud268', + '\ud269','\ud26a','\ud26b','\ud26c','\ud26d','\ud26e','\ud26f', + '\ud270','\ud271','\ud272','\ud273','\ud274','\ud275','\ud276', + '\ud277','\ud278','\ud279','\ud27a','\ud27b','\ud27c','\ud27d', + '\ud27e','\ud27f','\ud280','\ud281','\ud282','\ud283','\ud284', + '\ud285','\ud286','\ud287','\ud288','\ud289','\ud28a','\ud28b', + '\ud28c','\ud28d','\ud28e','\ud28f','\ud290','\ud291','\ud292', + '\ud293','\ud294','\ud295','\ud296','\ud297','\ud298','\ud299', + '\ud29a','\ud29b','\ud29c','\ud29d','\ud29e','\ud29f','\ud2a0', + '\ud2a1','\ud2a2','\ud2a3','\ud2a4','\ud2a5','\ud2a6','\ud2a7', + '\ud2a8','\ud2a9','\ud2aa','\ud2ab','\ud2ac','\ud2ad','\ud2ae', + '\ud2af','\ud2b0','\ud2b1','\ud2b2','\ud2b3','\ud2b4','\ud2b5', + '\ud2b6','\ud2b7','\ud2b8','\ud2b9','\ud2ba','\ud2bb','\ud2bc', + '\ud2bd','\ud2be','\ud2bf','\ud2c0','\ud2c1','\ud2c2','\ud2c3', + '\ud2c4','\ud2c5','\ud2c6','\ud2c7','\ud2c8','\ud2c9','\ud2ca', + '\ud2cb','\ud2cc','\ud2cd','\ud2ce','\ud2cf','\ud2d0','\ud2d1', + '\ud2d2','\ud2d3','\ud2d4','\ud2d5','\ud2d6','\ud2d7','\ud2d8', + '\ud2d9','\ud2da','\ud2db','\ud2dc','\ud2dd','\ud2de','\ud2df', + '\ud2e0','\ud2e1','\ud2e2','\ud2e3','\ud2e4','\ud2e5','\ud2e6', + '\ud2e7','\ud2e8','\ud2e9','\ud2ea','\ud2eb','\ud2ec','\ud2ed', + '\ud2ee','\ud2ef','\ud2f0','\ud2f1','\ud2f2','\ud2f3','\ud2f4', + '\ud2f5','\ud2f6','\ud2f7','\ud2f8','\ud2f9','\ud2fa','\ud2fb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+53760; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void fd300() { + char[] cs = new char[] { + '\ud300','\ud301','\ud302','\ud303','\ud304','\ud305','\ud306', + '\ud307','\ud308','\ud309','\ud30a','\ud30b','\ud30c','\ud30d', + '\ud30e','\ud30f','\ud310','\ud311','\ud312','\ud313','\ud314', + '\ud315','\ud316','\ud317','\ud318','\ud319','\ud31a','\ud31b', + '\ud31c','\ud31d','\ud31e','\ud31f','\ud320','\ud321','\ud322', + '\ud323','\ud324','\ud325','\ud326','\ud327','\ud328','\ud329', + '\ud32a','\ud32b','\ud32c','\ud32d','\ud32e','\ud32f','\ud330', + '\ud331','\ud332','\ud333','\ud334','\ud335','\ud336','\ud337', + '\ud338','\ud339','\ud33a','\ud33b','\ud33c','\ud33d','\ud33e', + '\ud33f','\ud340','\ud341','\ud342','\ud343','\ud344','\ud345', + '\ud346','\ud347','\ud348','\ud349','\ud34a','\ud34b','\ud34c', + '\ud34d','\ud34e','\ud34f','\ud350','\ud351','\ud352','\ud353', + '\ud354','\ud355','\ud356','\ud357','\ud358','\ud359','\ud35a', + '\ud35b','\ud35c','\ud35d','\ud35e','\ud35f','\ud360','\ud361', + '\ud362','\ud363','\ud364','\ud365','\ud366','\ud367','\ud368', + '\ud369','\ud36a','\ud36b','\ud36c','\ud36d','\ud36e','\ud36f', + '\ud370','\ud371','\ud372','\ud373','\ud374','\ud375','\ud376', + '\ud377','\ud378','\ud379','\ud37a','\ud37b','\ud37c','\ud37d', + '\ud37e','\ud37f','\ud380','\ud381','\ud382','\ud383','\ud384', + '\ud385','\ud386','\ud387','\ud388','\ud389','\ud38a','\ud38b', + '\ud38c','\ud38d','\ud38e','\ud38f','\ud390','\ud391','\ud392', + '\ud393','\ud394','\ud395','\ud396','\ud397','\ud398','\ud399', + '\ud39a','\ud39b','\ud39c','\ud39d','\ud39e','\ud39f','\ud3a0', + '\ud3a1','\ud3a2','\ud3a3','\ud3a4','\ud3a5','\ud3a6','\ud3a7', + '\ud3a8','\ud3a9','\ud3aa','\ud3ab','\ud3ac','\ud3ad','\ud3ae', + '\ud3af','\ud3b0','\ud3b1','\ud3b2','\ud3b3','\ud3b4','\ud3b5', + '\ud3b6','\ud3b7','\ud3b8','\ud3b9','\ud3ba','\ud3bb','\ud3bc', + '\ud3bd','\ud3be','\ud3bf','\ud3c0','\ud3c1','\ud3c2','\ud3c3', + '\ud3c4','\ud3c5','\ud3c6','\ud3c7','\ud3c8','\ud3c9','\ud3ca', + '\ud3cb','\ud3cc','\ud3cd','\ud3ce','\ud3cf','\ud3d0','\ud3d1', + '\ud3d2','\ud3d3','\ud3d4','\ud3d5','\ud3d6','\ud3d7','\ud3d8', + '\ud3d9','\ud3da','\ud3db','\ud3dc','\ud3dd','\ud3de','\ud3df', + '\ud3e0','\ud3e1','\ud3e2','\ud3e3','\ud3e4','\ud3e5','\ud3e6', + '\ud3e7','\ud3e8','\ud3e9','\ud3ea','\ud3eb','\ud3ec','\ud3ed', + '\ud3ee','\ud3ef','\ud3f0','\ud3f1','\ud3f2','\ud3f3','\ud3f4', + '\ud3f5','\ud3f6','\ud3f7','\ud3f8','\ud3f9','\ud3fa','\ud3fb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+54016; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void fd400() { + char[] cs = new char[] { + '\ud400','\ud401','\ud402','\ud403','\ud404','\ud405','\ud406', + '\ud407','\ud408','\ud409','\ud40a','\ud40b','\ud40c','\ud40d', + '\ud40e','\ud40f','\ud410','\ud411','\ud412','\ud413','\ud414', + '\ud415','\ud416','\ud417','\ud418','\ud419','\ud41a','\ud41b', + '\ud41c','\ud41d','\ud41e','\ud41f','\ud420','\ud421','\ud422', + '\ud423','\ud424','\ud425','\ud426','\ud427','\ud428','\ud429', + '\ud42a','\ud42b','\ud42c','\ud42d','\ud42e','\ud42f','\ud430', + '\ud431','\ud432','\ud433','\ud434','\ud435','\ud436','\ud437', + '\ud438','\ud439','\ud43a','\ud43b','\ud43c','\ud43d','\ud43e', + '\ud43f','\ud440','\ud441','\ud442','\ud443','\ud444','\ud445', + '\ud446','\ud447','\ud448','\ud449','\ud44a','\ud44b','\ud44c', + '\ud44d','\ud44e','\ud44f','\ud450','\ud451','\ud452','\ud453', + '\ud454','\ud455','\ud456','\ud457','\ud458','\ud459','\ud45a', + '\ud45b','\ud45c','\ud45d','\ud45e','\ud45f','\ud460','\ud461', + '\ud462','\ud463','\ud464','\ud465','\ud466','\ud467','\ud468', + '\ud469','\ud46a','\ud46b','\ud46c','\ud46d','\ud46e','\ud46f', + '\ud470','\ud471','\ud472','\ud473','\ud474','\ud475','\ud476', + '\ud477','\ud478','\ud479','\ud47a','\ud47b','\ud47c','\ud47d', + '\ud47e','\ud47f','\ud480','\ud481','\ud482','\ud483','\ud484', + '\ud485','\ud486','\ud487','\ud488','\ud489','\ud48a','\ud48b', + '\ud48c','\ud48d','\ud48e','\ud48f','\ud490','\ud491','\ud492', + '\ud493','\ud494','\ud495','\ud496','\ud497','\ud498','\ud499', + '\ud49a','\ud49b','\ud49c','\ud49d','\ud49e','\ud49f','\ud4a0', + '\ud4a1','\ud4a2','\ud4a3','\ud4a4','\ud4a5','\ud4a6','\ud4a7', + '\ud4a8','\ud4a9','\ud4aa','\ud4ab','\ud4ac','\ud4ad','\ud4ae', + '\ud4af','\ud4b0','\ud4b1','\ud4b2','\ud4b3','\ud4b4','\ud4b5', + '\ud4b6','\ud4b7','\ud4b8','\ud4b9','\ud4ba','\ud4bb','\ud4bc', + '\ud4bd','\ud4be','\ud4bf','\ud4c0','\ud4c1','\ud4c2','\ud4c3', + '\ud4c4','\ud4c5','\ud4c6','\ud4c7','\ud4c8','\ud4c9','\ud4ca', + '\ud4cb','\ud4cc','\ud4cd','\ud4ce','\ud4cf','\ud4d0','\ud4d1', + '\ud4d2','\ud4d3','\ud4d4','\ud4d5','\ud4d6','\ud4d7','\ud4d8', + '\ud4d9','\ud4da','\ud4db','\ud4dc','\ud4dd','\ud4de','\ud4df', + '\ud4e0','\ud4e1','\ud4e2','\ud4e3','\ud4e4','\ud4e5','\ud4e6', + '\ud4e7','\ud4e8','\ud4e9','\ud4ea','\ud4eb','\ud4ec','\ud4ed', + '\ud4ee','\ud4ef','\ud4f0','\ud4f1','\ud4f2','\ud4f3','\ud4f4', + '\ud4f5','\ud4f6','\ud4f7','\ud4f8','\ud4f9','\ud4fa','\ud4fb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+54272; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void fd500() { + char[] cs = new char[] { + '\ud500','\ud501','\ud502','\ud503','\ud504','\ud505','\ud506', + '\ud507','\ud508','\ud509','\ud50a','\ud50b','\ud50c','\ud50d', + '\ud50e','\ud50f','\ud510','\ud511','\ud512','\ud513','\ud514', + '\ud515','\ud516','\ud517','\ud518','\ud519','\ud51a','\ud51b', + '\ud51c','\ud51d','\ud51e','\ud51f','\ud520','\ud521','\ud522', + '\ud523','\ud524','\ud525','\ud526','\ud527','\ud528','\ud529', + '\ud52a','\ud52b','\ud52c','\ud52d','\ud52e','\ud52f','\ud530', + '\ud531','\ud532','\ud533','\ud534','\ud535','\ud536','\ud537', + '\ud538','\ud539','\ud53a','\ud53b','\ud53c','\ud53d','\ud53e', + '\ud53f','\ud540','\ud541','\ud542','\ud543','\ud544','\ud545', + '\ud546','\ud547','\ud548','\ud549','\ud54a','\ud54b','\ud54c', + '\ud54d','\ud54e','\ud54f','\ud550','\ud551','\ud552','\ud553', + '\ud554','\ud555','\ud556','\ud557','\ud558','\ud559','\ud55a', + '\ud55b','\ud55c','\ud55d','\ud55e','\ud55f','\ud560','\ud561', + '\ud562','\ud563','\ud564','\ud565','\ud566','\ud567','\ud568', + '\ud569','\ud56a','\ud56b','\ud56c','\ud56d','\ud56e','\ud56f', + '\ud570','\ud571','\ud572','\ud573','\ud574','\ud575','\ud576', + '\ud577','\ud578','\ud579','\ud57a','\ud57b','\ud57c','\ud57d', + '\ud57e','\ud57f','\ud580','\ud581','\ud582','\ud583','\ud584', + '\ud585','\ud586','\ud587','\ud588','\ud589','\ud58a','\ud58b', + '\ud58c','\ud58d','\ud58e','\ud58f','\ud590','\ud591','\ud592', + '\ud593','\ud594','\ud595','\ud596','\ud597','\ud598','\ud599', + '\ud59a','\ud59b','\ud59c','\ud59d','\ud59e','\ud59f','\ud5a0', + '\ud5a1','\ud5a2','\ud5a3','\ud5a4','\ud5a5','\ud5a6','\ud5a7', + '\ud5a8','\ud5a9','\ud5aa','\ud5ab','\ud5ac','\ud5ad','\ud5ae', + '\ud5af','\ud5b0','\ud5b1','\ud5b2','\ud5b3','\ud5b4','\ud5b5', + '\ud5b6','\ud5b7','\ud5b8','\ud5b9','\ud5ba','\ud5bb','\ud5bc', + '\ud5bd','\ud5be','\ud5bf','\ud5c0','\ud5c1','\ud5c2','\ud5c3', + '\ud5c4','\ud5c5','\ud5c6','\ud5c7','\ud5c8','\ud5c9','\ud5ca', + '\ud5cb','\ud5cc','\ud5cd','\ud5ce','\ud5cf','\ud5d0','\ud5d1', + '\ud5d2','\ud5d3','\ud5d4','\ud5d5','\ud5d6','\ud5d7','\ud5d8', + '\ud5d9','\ud5da','\ud5db','\ud5dc','\ud5dd','\ud5de','\ud5df', + '\ud5e0','\ud5e1','\ud5e2','\ud5e3','\ud5e4','\ud5e5','\ud5e6', + '\ud5e7','\ud5e8','\ud5e9','\ud5ea','\ud5eb','\ud5ec','\ud5ed', + '\ud5ee','\ud5ef','\ud5f0','\ud5f1','\ud5f2','\ud5f3','\ud5f4', + '\ud5f5','\ud5f6','\ud5f7','\ud5f8','\ud5f9','\ud5fa','\ud5fb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+54528; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void fd600() { + char[] cs = new char[] { + '\ud600','\ud601','\ud602','\ud603','\ud604','\ud605','\ud606', + '\ud607','\ud608','\ud609','\ud60a','\ud60b','\ud60c','\ud60d', + '\ud60e','\ud60f','\ud610','\ud611','\ud612','\ud613','\ud614', + '\ud615','\ud616','\ud617','\ud618','\ud619','\ud61a','\ud61b', + '\ud61c','\ud61d','\ud61e','\ud61f','\ud620','\ud621','\ud622', + '\ud623','\ud624','\ud625','\ud626','\ud627','\ud628','\ud629', + '\ud62a','\ud62b','\ud62c','\ud62d','\ud62e','\ud62f','\ud630', + '\ud631','\ud632','\ud633','\ud634','\ud635','\ud636','\ud637', + '\ud638','\ud639','\ud63a','\ud63b','\ud63c','\ud63d','\ud63e', + '\ud63f','\ud640','\ud641','\ud642','\ud643','\ud644','\ud645', + '\ud646','\ud647','\ud648','\ud649','\ud64a','\ud64b','\ud64c', + '\ud64d','\ud64e','\ud64f','\ud650','\ud651','\ud652','\ud653', + '\ud654','\ud655','\ud656','\ud657','\ud658','\ud659','\ud65a', + '\ud65b','\ud65c','\ud65d','\ud65e','\ud65f','\ud660','\ud661', + '\ud662','\ud663','\ud664','\ud665','\ud666','\ud667','\ud668', + '\ud669','\ud66a','\ud66b','\ud66c','\ud66d','\ud66e','\ud66f', + '\ud670','\ud671','\ud672','\ud673','\ud674','\ud675','\ud676', + '\ud677','\ud678','\ud679','\ud67a','\ud67b','\ud67c','\ud67d', + '\ud67e','\ud67f','\ud680','\ud681','\ud682','\ud683','\ud684', + '\ud685','\ud686','\ud687','\ud688','\ud689','\ud68a','\ud68b', + '\ud68c','\ud68d','\ud68e','\ud68f','\ud690','\ud691','\ud692', + '\ud693','\ud694','\ud695','\ud696','\ud697','\ud698','\ud699', + '\ud69a','\ud69b','\ud69c','\ud69d','\ud69e','\ud69f','\ud6a0', + '\ud6a1','\ud6a2','\ud6a3','\ud6a4','\ud6a5','\ud6a6','\ud6a7', + '\ud6a8','\ud6a9','\ud6aa','\ud6ab','\ud6ac','\ud6ad','\ud6ae', + '\ud6af','\ud6b0','\ud6b1','\ud6b2','\ud6b3','\ud6b4','\ud6b5', + '\ud6b6','\ud6b7','\ud6b8','\ud6b9','\ud6ba','\ud6bb','\ud6bc', + '\ud6bd','\ud6be','\ud6bf','\ud6c0','\ud6c1','\ud6c2','\ud6c3', + '\ud6c4','\ud6c5','\ud6c6','\ud6c7','\ud6c8','\ud6c9','\ud6ca', + '\ud6cb','\ud6cc','\ud6cd','\ud6ce','\ud6cf','\ud6d0','\ud6d1', + '\ud6d2','\ud6d3','\ud6d4','\ud6d5','\ud6d6','\ud6d7','\ud6d8', + '\ud6d9','\ud6da','\ud6db','\ud6dc','\ud6dd','\ud6de','\ud6df', + '\ud6e0','\ud6e1','\ud6e2','\ud6e3','\ud6e4','\ud6e5','\ud6e6', + '\ud6e7','\ud6e8','\ud6e9','\ud6ea','\ud6eb','\ud6ec','\ud6ed', + '\ud6ee','\ud6ef','\ud6f0','\ud6f1','\ud6f2','\ud6f3','\ud6f4', + '\ud6f5','\ud6f6','\ud6f7','\ud6f8','\ud6f9','\ud6fa','\ud6fb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+54784; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void fd700() { + char[] cs = new char[] { + '\ud700','\ud701','\ud702','\ud703','\ud704','\ud705','\ud706', + '\ud707','\ud708','\ud709','\ud70a','\ud70b','\ud70c','\ud70d', + '\ud70e','\ud70f','\ud710','\ud711','\ud712','\ud713','\ud714', + '\ud715','\ud716','\ud717','\ud718','\ud719','\ud71a','\ud71b', + '\ud71c','\ud71d','\ud71e','\ud71f','\ud720','\ud721','\ud722', + '\ud723','\ud724','\ud725','\ud726','\ud727','\ud728','\ud729', + '\ud72a','\ud72b','\ud72c','\ud72d','\ud72e','\ud72f','\ud730', + '\ud731','\ud732','\ud733','\ud734','\ud735','\ud736','\ud737', + '\ud738','\ud739','\ud73a','\ud73b','\ud73c','\ud73d','\ud73e', + '\ud73f','\ud740','\ud741','\ud742','\ud743','\ud744','\ud745', + '\ud746','\ud747','\ud748','\ud749','\ud74a','\ud74b','\ud74c', + '\ud74d','\ud74e','\ud74f','\ud750','\ud751','\ud752','\ud753', + '\ud754','\ud755','\ud756','\ud757','\ud758','\ud759','\ud75a', + '\ud75b','\ud75c','\ud75d','\ud75e','\ud75f','\ud760','\ud761', + '\ud762','\ud763','\ud764','\ud765','\ud766','\ud767','\ud768', + '\ud769','\ud76a','\ud76b','\ud76c','\ud76d','\ud76e','\ud76f', + '\ud770','\ud771','\ud772','\ud773','\ud774','\ud775','\ud776', + '\ud777','\ud778','\ud779','\ud77a','\ud77b','\ud77c','\ud77d', + '\ud77e','\ud77f','\ud780','\ud781','\ud782','\ud783','\ud784', + '\ud785','\ud786','\ud787','\ud788','\ud789','\ud78a','\ud78b', + '\ud78c','\ud78d','\ud78e','\ud78f','\ud790','\ud791','\ud792', + '\ud793','\ud794','\ud795','\ud796','\ud797','\ud798','\ud799', + '\ud79a','\ud79b','\ud79c','\ud79d','\ud79e','\ud79f','\ud7a0', + '\ud7a1','\ud7a2','\ud7a3','\ud7a4','\ud7a5','\ud7a6','\ud7a7', + '\ud7a8','\ud7a9','\ud7aa','\ud7ab','\ud7ac','\ud7ad','\ud7ae', + '\ud7af','\ud7b0','\ud7b1','\ud7b2','\ud7b3','\ud7b4','\ud7b5', + '\ud7b6','\ud7b7','\ud7b8','\ud7b9','\ud7ba','\ud7bb','\ud7bc', + '\ud7bd','\ud7be','\ud7bf','\ud7c0','\ud7c1','\ud7c2','\ud7c3', + '\ud7c4','\ud7c5','\ud7c6','\ud7c7','\ud7c8','\ud7c9','\ud7ca', + '\ud7cb','\ud7cc','\ud7cd','\ud7ce','\ud7cf','\ud7d0','\ud7d1', + '\ud7d2','\ud7d3','\ud7d4','\ud7d5','\ud7d6','\ud7d7','\ud7d8', + '\ud7d9','\ud7da','\ud7db','\ud7dc','\ud7dd','\ud7de','\ud7df', + '\ud7e0','\ud7e1','\ud7e2','\ud7e3','\ud7e4','\ud7e5','\ud7e6', + '\ud7e7','\ud7e8','\ud7e9','\ud7ea','\ud7eb','\ud7ec','\ud7ed', + '\ud7ee','\ud7ef','\ud7f0','\ud7f1','\ud7f2','\ud7f3','\ud7f4', + '\ud7f5','\ud7f6','\ud7f7','\ud7f8','\ud7f9','\ud7fa','\ud7fb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+55040; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void fd800() { + char[] cs = new char[] { + '\ud800','\ud801','\ud802','\ud803','\ud804','\ud805','\ud806', + '\ud807','\ud808','\ud809','\ud80a','\ud80b','\ud80c','\ud80d', + '\ud80e','\ud80f','\ud810','\ud811','\ud812','\ud813','\ud814', + '\ud815','\ud816','\ud817','\ud818','\ud819','\ud81a','\ud81b', + '\ud81c','\ud81d','\ud81e','\ud81f','\ud820','\ud821','\ud822', + '\ud823','\ud824','\ud825','\ud826','\ud827','\ud828','\ud829', + '\ud82a','\ud82b','\ud82c','\ud82d','\ud82e','\ud82f','\ud830', + '\ud831','\ud832','\ud833','\ud834','\ud835','\ud836','\ud837', + '\ud838','\ud839','\ud83a','\ud83b','\ud83c','\ud83d','\ud83e', + '\ud83f','\ud840','\ud841','\ud842','\ud843','\ud844','\ud845', + '\ud846','\ud847','\ud848','\ud849','\ud84a','\ud84b','\ud84c', + '\ud84d','\ud84e','\ud84f','\ud850','\ud851','\ud852','\ud853', + '\ud854','\ud855','\ud856','\ud857','\ud858','\ud859','\ud85a', + '\ud85b','\ud85c','\ud85d','\ud85e','\ud85f','\ud860','\ud861', + '\ud862','\ud863','\ud864','\ud865','\ud866','\ud867','\ud868', + '\ud869','\ud86a','\ud86b','\ud86c','\ud86d','\ud86e','\ud86f', + '\ud870','\ud871','\ud872','\ud873','\ud874','\ud875','\ud876', + '\ud877','\ud878','\ud879','\ud87a','\ud87b','\ud87c','\ud87d', + '\ud87e','\ud87f','\ud880','\ud881','\ud882','\ud883','\ud884', + '\ud885','\ud886','\ud887','\ud888','\ud889','\ud88a','\ud88b', + '\ud88c','\ud88d','\ud88e','\ud88f','\ud890','\ud891','\ud892', + '\ud893','\ud894','\ud895','\ud896','\ud897','\ud898','\ud899', + '\ud89a','\ud89b','\ud89c','\ud89d','\ud89e','\ud89f','\ud8a0', + '\ud8a1','\ud8a2','\ud8a3','\ud8a4','\ud8a5','\ud8a6','\ud8a7', + '\ud8a8','\ud8a9','\ud8aa','\ud8ab','\ud8ac','\ud8ad','\ud8ae', + '\ud8af','\ud8b0','\ud8b1','\ud8b2','\ud8b3','\ud8b4','\ud8b5', + '\ud8b6','\ud8b7','\ud8b8','\ud8b9','\ud8ba','\ud8bb','\ud8bc', + '\ud8bd','\ud8be','\ud8bf','\ud8c0','\ud8c1','\ud8c2','\ud8c3', + '\ud8c4','\ud8c5','\ud8c6','\ud8c7','\ud8c8','\ud8c9','\ud8ca', + '\ud8cb','\ud8cc','\ud8cd','\ud8ce','\ud8cf','\ud8d0','\ud8d1', + '\ud8d2','\ud8d3','\ud8d4','\ud8d5','\ud8d6','\ud8d7','\ud8d8', + '\ud8d9','\ud8da','\ud8db','\ud8dc','\ud8dd','\ud8de','\ud8df', + '\ud8e0','\ud8e1','\ud8e2','\ud8e3','\ud8e4','\ud8e5','\ud8e6', + '\ud8e7','\ud8e8','\ud8e9','\ud8ea','\ud8eb','\ud8ec','\ud8ed', + '\ud8ee','\ud8ef','\ud8f0','\ud8f1','\ud8f2','\ud8f3','\ud8f4', + '\ud8f5','\ud8f6','\ud8f7','\ud8f8','\ud8f9','\ud8fa','\ud8fb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+55296; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void fd900() { + char[] cs = new char[] { + '\ud900','\ud901','\ud902','\ud903','\ud904','\ud905','\ud906', + '\ud907','\ud908','\ud909','\ud90a','\ud90b','\ud90c','\ud90d', + '\ud90e','\ud90f','\ud910','\ud911','\ud912','\ud913','\ud914', + '\ud915','\ud916','\ud917','\ud918','\ud919','\ud91a','\ud91b', + '\ud91c','\ud91d','\ud91e','\ud91f','\ud920','\ud921','\ud922', + '\ud923','\ud924','\ud925','\ud926','\ud927','\ud928','\ud929', + '\ud92a','\ud92b','\ud92c','\ud92d','\ud92e','\ud92f','\ud930', + '\ud931','\ud932','\ud933','\ud934','\ud935','\ud936','\ud937', + '\ud938','\ud939','\ud93a','\ud93b','\ud93c','\ud93d','\ud93e', + '\ud93f','\ud940','\ud941','\ud942','\ud943','\ud944','\ud945', + '\ud946','\ud947','\ud948','\ud949','\ud94a','\ud94b','\ud94c', + '\ud94d','\ud94e','\ud94f','\ud950','\ud951','\ud952','\ud953', + '\ud954','\ud955','\ud956','\ud957','\ud958','\ud959','\ud95a', + '\ud95b','\ud95c','\ud95d','\ud95e','\ud95f','\ud960','\ud961', + '\ud962','\ud963','\ud964','\ud965','\ud966','\ud967','\ud968', + '\ud969','\ud96a','\ud96b','\ud96c','\ud96d','\ud96e','\ud96f', + '\ud970','\ud971','\ud972','\ud973','\ud974','\ud975','\ud976', + '\ud977','\ud978','\ud979','\ud97a','\ud97b','\ud97c','\ud97d', + '\ud97e','\ud97f','\ud980','\ud981','\ud982','\ud983','\ud984', + '\ud985','\ud986','\ud987','\ud988','\ud989','\ud98a','\ud98b', + '\ud98c','\ud98d','\ud98e','\ud98f','\ud990','\ud991','\ud992', + '\ud993','\ud994','\ud995','\ud996','\ud997','\ud998','\ud999', + '\ud99a','\ud99b','\ud99c','\ud99d','\ud99e','\ud99f','\ud9a0', + '\ud9a1','\ud9a2','\ud9a3','\ud9a4','\ud9a5','\ud9a6','\ud9a7', + '\ud9a8','\ud9a9','\ud9aa','\ud9ab','\ud9ac','\ud9ad','\ud9ae', + '\ud9af','\ud9b0','\ud9b1','\ud9b2','\ud9b3','\ud9b4','\ud9b5', + '\ud9b6','\ud9b7','\ud9b8','\ud9b9','\ud9ba','\ud9bb','\ud9bc', + '\ud9bd','\ud9be','\ud9bf','\ud9c0','\ud9c1','\ud9c2','\ud9c3', + '\ud9c4','\ud9c5','\ud9c6','\ud9c7','\ud9c8','\ud9c9','\ud9ca', + '\ud9cb','\ud9cc','\ud9cd','\ud9ce','\ud9cf','\ud9d0','\ud9d1', + '\ud9d2','\ud9d3','\ud9d4','\ud9d5','\ud9d6','\ud9d7','\ud9d8', + '\ud9d9','\ud9da','\ud9db','\ud9dc','\ud9dd','\ud9de','\ud9df', + '\ud9e0','\ud9e1','\ud9e2','\ud9e3','\ud9e4','\ud9e5','\ud9e6', + '\ud9e7','\ud9e8','\ud9e9','\ud9ea','\ud9eb','\ud9ec','\ud9ed', + '\ud9ee','\ud9ef','\ud9f0','\ud9f1','\ud9f2','\ud9f3','\ud9f4', + '\ud9f5','\ud9f6','\ud9f7','\ud9f8','\ud9f9','\ud9fa','\ud9fb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+55552; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void fda00() { + char[] cs = new char[] { + '\uda00','\uda01','\uda02','\uda03','\uda04','\uda05','\uda06', + '\uda07','\uda08','\uda09','\uda0a','\uda0b','\uda0c','\uda0d', + '\uda0e','\uda0f','\uda10','\uda11','\uda12','\uda13','\uda14', + '\uda15','\uda16','\uda17','\uda18','\uda19','\uda1a','\uda1b', + '\uda1c','\uda1d','\uda1e','\uda1f','\uda20','\uda21','\uda22', + '\uda23','\uda24','\uda25','\uda26','\uda27','\uda28','\uda29', + '\uda2a','\uda2b','\uda2c','\uda2d','\uda2e','\uda2f','\uda30', + '\uda31','\uda32','\uda33','\uda34','\uda35','\uda36','\uda37', + '\uda38','\uda39','\uda3a','\uda3b','\uda3c','\uda3d','\uda3e', + '\uda3f','\uda40','\uda41','\uda42','\uda43','\uda44','\uda45', + '\uda46','\uda47','\uda48','\uda49','\uda4a','\uda4b','\uda4c', + '\uda4d','\uda4e','\uda4f','\uda50','\uda51','\uda52','\uda53', + '\uda54','\uda55','\uda56','\uda57','\uda58','\uda59','\uda5a', + '\uda5b','\uda5c','\uda5d','\uda5e','\uda5f','\uda60','\uda61', + '\uda62','\uda63','\uda64','\uda65','\uda66','\uda67','\uda68', + '\uda69','\uda6a','\uda6b','\uda6c','\uda6d','\uda6e','\uda6f', + '\uda70','\uda71','\uda72','\uda73','\uda74','\uda75','\uda76', + '\uda77','\uda78','\uda79','\uda7a','\uda7b','\uda7c','\uda7d', + '\uda7e','\uda7f','\uda80','\uda81','\uda82','\uda83','\uda84', + '\uda85','\uda86','\uda87','\uda88','\uda89','\uda8a','\uda8b', + '\uda8c','\uda8d','\uda8e','\uda8f','\uda90','\uda91','\uda92', + '\uda93','\uda94','\uda95','\uda96','\uda97','\uda98','\uda99', + '\uda9a','\uda9b','\uda9c','\uda9d','\uda9e','\uda9f','\udaa0', + '\udaa1','\udaa2','\udaa3','\udaa4','\udaa5','\udaa6','\udaa7', + '\udaa8','\udaa9','\udaaa','\udaab','\udaac','\udaad','\udaae', + '\udaaf','\udab0','\udab1','\udab2','\udab3','\udab4','\udab5', + '\udab6','\udab7','\udab8','\udab9','\udaba','\udabb','\udabc', + '\udabd','\udabe','\udabf','\udac0','\udac1','\udac2','\udac3', + '\udac4','\udac5','\udac6','\udac7','\udac8','\udac9','\udaca', + '\udacb','\udacc','\udacd','\udace','\udacf','\udad0','\udad1', + '\udad2','\udad3','\udad4','\udad5','\udad6','\udad7','\udad8', + '\udad9','\udada','\udadb','\udadc','\udadd','\udade','\udadf', + '\udae0','\udae1','\udae2','\udae3','\udae4','\udae5','\udae6', + '\udae7','\udae8','\udae9','\udaea','\udaeb','\udaec','\udaed', + '\udaee','\udaef','\udaf0','\udaf1','\udaf2','\udaf3','\udaf4', + '\udaf5','\udaf6','\udaf7','\udaf8','\udaf9','\udafa','\udafb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+55808; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void fdb00() { + char[] cs = new char[] { + '\udb00','\udb01','\udb02','\udb03','\udb04','\udb05','\udb06', + '\udb07','\udb08','\udb09','\udb0a','\udb0b','\udb0c','\udb0d', + '\udb0e','\udb0f','\udb10','\udb11','\udb12','\udb13','\udb14', + '\udb15','\udb16','\udb17','\udb18','\udb19','\udb1a','\udb1b', + '\udb1c','\udb1d','\udb1e','\udb1f','\udb20','\udb21','\udb22', + '\udb23','\udb24','\udb25','\udb26','\udb27','\udb28','\udb29', + '\udb2a','\udb2b','\udb2c','\udb2d','\udb2e','\udb2f','\udb30', + '\udb31','\udb32','\udb33','\udb34','\udb35','\udb36','\udb37', + '\udb38','\udb39','\udb3a','\udb3b','\udb3c','\udb3d','\udb3e', + '\udb3f','\udb40','\udb41','\udb42','\udb43','\udb44','\udb45', + '\udb46','\udb47','\udb48','\udb49','\udb4a','\udb4b','\udb4c', + '\udb4d','\udb4e','\udb4f','\udb50','\udb51','\udb52','\udb53', + '\udb54','\udb55','\udb56','\udb57','\udb58','\udb59','\udb5a', + '\udb5b','\udb5c','\udb5d','\udb5e','\udb5f','\udb60','\udb61', + '\udb62','\udb63','\udb64','\udb65','\udb66','\udb67','\udb68', + '\udb69','\udb6a','\udb6b','\udb6c','\udb6d','\udb6e','\udb6f', + '\udb70','\udb71','\udb72','\udb73','\udb74','\udb75','\udb76', + '\udb77','\udb78','\udb79','\udb7a','\udb7b','\udb7c','\udb7d', + '\udb7e','\udb7f','\udb80','\udb81','\udb82','\udb83','\udb84', + '\udb85','\udb86','\udb87','\udb88','\udb89','\udb8a','\udb8b', + '\udb8c','\udb8d','\udb8e','\udb8f','\udb90','\udb91','\udb92', + '\udb93','\udb94','\udb95','\udb96','\udb97','\udb98','\udb99', + '\udb9a','\udb9b','\udb9c','\udb9d','\udb9e','\udb9f','\udba0', + '\udba1','\udba2','\udba3','\udba4','\udba5','\udba6','\udba7', + '\udba8','\udba9','\udbaa','\udbab','\udbac','\udbad','\udbae', + '\udbaf','\udbb0','\udbb1','\udbb2','\udbb3','\udbb4','\udbb5', + '\udbb6','\udbb7','\udbb8','\udbb9','\udbba','\udbbb','\udbbc', + '\udbbd','\udbbe','\udbbf','\udbc0','\udbc1','\udbc2','\udbc3', + '\udbc4','\udbc5','\udbc6','\udbc7','\udbc8','\udbc9','\udbca', + '\udbcb','\udbcc','\udbcd','\udbce','\udbcf','\udbd0','\udbd1', + '\udbd2','\udbd3','\udbd4','\udbd5','\udbd6','\udbd7','\udbd8', + '\udbd9','\udbda','\udbdb','\udbdc','\udbdd','\udbde','\udbdf', + '\udbe0','\udbe1','\udbe2','\udbe3','\udbe4','\udbe5','\udbe6', + '\udbe7','\udbe8','\udbe9','\udbea','\udbeb','\udbec','\udbed', + '\udbee','\udbef','\udbf0','\udbf1','\udbf2','\udbf3','\udbf4', + '\udbf5','\udbf6','\udbf7','\udbf8','\udbf9','\udbfa','\udbfb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+56064; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void fdc00() { + char[] cs = new char[] { + '\udc00','\udc01','\udc02','\udc03','\udc04','\udc05','\udc06', + '\udc07','\udc08','\udc09','\udc0a','\udc0b','\udc0c','\udc0d', + '\udc0e','\udc0f','\udc10','\udc11','\udc12','\udc13','\udc14', + '\udc15','\udc16','\udc17','\udc18','\udc19','\udc1a','\udc1b', + '\udc1c','\udc1d','\udc1e','\udc1f','\udc20','\udc21','\udc22', + '\udc23','\udc24','\udc25','\udc26','\udc27','\udc28','\udc29', + '\udc2a','\udc2b','\udc2c','\udc2d','\udc2e','\udc2f','\udc30', + '\udc31','\udc32','\udc33','\udc34','\udc35','\udc36','\udc37', + '\udc38','\udc39','\udc3a','\udc3b','\udc3c','\udc3d','\udc3e', + '\udc3f','\udc40','\udc41','\udc42','\udc43','\udc44','\udc45', + '\udc46','\udc47','\udc48','\udc49','\udc4a','\udc4b','\udc4c', + '\udc4d','\udc4e','\udc4f','\udc50','\udc51','\udc52','\udc53', + '\udc54','\udc55','\udc56','\udc57','\udc58','\udc59','\udc5a', + '\udc5b','\udc5c','\udc5d','\udc5e','\udc5f','\udc60','\udc61', + '\udc62','\udc63','\udc64','\udc65','\udc66','\udc67','\udc68', + '\udc69','\udc6a','\udc6b','\udc6c','\udc6d','\udc6e','\udc6f', + '\udc70','\udc71','\udc72','\udc73','\udc74','\udc75','\udc76', + '\udc77','\udc78','\udc79','\udc7a','\udc7b','\udc7c','\udc7d', + '\udc7e','\udc7f','\udc80','\udc81','\udc82','\udc83','\udc84', + '\udc85','\udc86','\udc87','\udc88','\udc89','\udc8a','\udc8b', + '\udc8c','\udc8d','\udc8e','\udc8f','\udc90','\udc91','\udc92', + '\udc93','\udc94','\udc95','\udc96','\udc97','\udc98','\udc99', + '\udc9a','\udc9b','\udc9c','\udc9d','\udc9e','\udc9f','\udca0', + '\udca1','\udca2','\udca3','\udca4','\udca5','\udca6','\udca7', + '\udca8','\udca9','\udcaa','\udcab','\udcac','\udcad','\udcae', + '\udcaf','\udcb0','\udcb1','\udcb2','\udcb3','\udcb4','\udcb5', + '\udcb6','\udcb7','\udcb8','\udcb9','\udcba','\udcbb','\udcbc', + '\udcbd','\udcbe','\udcbf','\udcc0','\udcc1','\udcc2','\udcc3', + '\udcc4','\udcc5','\udcc6','\udcc7','\udcc8','\udcc9','\udcca', + '\udccb','\udccc','\udccd','\udcce','\udccf','\udcd0','\udcd1', + '\udcd2','\udcd3','\udcd4','\udcd5','\udcd6','\udcd7','\udcd8', + '\udcd9','\udcda','\udcdb','\udcdc','\udcdd','\udcde','\udcdf', + '\udce0','\udce1','\udce2','\udce3','\udce4','\udce5','\udce6', + '\udce7','\udce8','\udce9','\udcea','\udceb','\udcec','\udced', + '\udcee','\udcef','\udcf0','\udcf1','\udcf2','\udcf3','\udcf4', + '\udcf5','\udcf6','\udcf7','\udcf8','\udcf9','\udcfa','\udcfb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+56320; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void fdd00() { + char[] cs = new char[] { + '\udd00','\udd01','\udd02','\udd03','\udd04','\udd05','\udd06', + '\udd07','\udd08','\udd09','\udd0a','\udd0b','\udd0c','\udd0d', + '\udd0e','\udd0f','\udd10','\udd11','\udd12','\udd13','\udd14', + '\udd15','\udd16','\udd17','\udd18','\udd19','\udd1a','\udd1b', + '\udd1c','\udd1d','\udd1e','\udd1f','\udd20','\udd21','\udd22', + '\udd23','\udd24','\udd25','\udd26','\udd27','\udd28','\udd29', + '\udd2a','\udd2b','\udd2c','\udd2d','\udd2e','\udd2f','\udd30', + '\udd31','\udd32','\udd33','\udd34','\udd35','\udd36','\udd37', + '\udd38','\udd39','\udd3a','\udd3b','\udd3c','\udd3d','\udd3e', + '\udd3f','\udd40','\udd41','\udd42','\udd43','\udd44','\udd45', + '\udd46','\udd47','\udd48','\udd49','\udd4a','\udd4b','\udd4c', + '\udd4d','\udd4e','\udd4f','\udd50','\udd51','\udd52','\udd53', + '\udd54','\udd55','\udd56','\udd57','\udd58','\udd59','\udd5a', + '\udd5b','\udd5c','\udd5d','\udd5e','\udd5f','\udd60','\udd61', + '\udd62','\udd63','\udd64','\udd65','\udd66','\udd67','\udd68', + '\udd69','\udd6a','\udd6b','\udd6c','\udd6d','\udd6e','\udd6f', + '\udd70','\udd71','\udd72','\udd73','\udd74','\udd75','\udd76', + '\udd77','\udd78','\udd79','\udd7a','\udd7b','\udd7c','\udd7d', + '\udd7e','\udd7f','\udd80','\udd81','\udd82','\udd83','\udd84', + '\udd85','\udd86','\udd87','\udd88','\udd89','\udd8a','\udd8b', + '\udd8c','\udd8d','\udd8e','\udd8f','\udd90','\udd91','\udd92', + '\udd93','\udd94','\udd95','\udd96','\udd97','\udd98','\udd99', + '\udd9a','\udd9b','\udd9c','\udd9d','\udd9e','\udd9f','\udda0', + '\udda1','\udda2','\udda3','\udda4','\udda5','\udda6','\udda7', + '\udda8','\udda9','\uddaa','\uddab','\uddac','\uddad','\uddae', + '\uddaf','\uddb0','\uddb1','\uddb2','\uddb3','\uddb4','\uddb5', + '\uddb6','\uddb7','\uddb8','\uddb9','\uddba','\uddbb','\uddbc', + '\uddbd','\uddbe','\uddbf','\uddc0','\uddc1','\uddc2','\uddc3', + '\uddc4','\uddc5','\uddc6','\uddc7','\uddc8','\uddc9','\uddca', + '\uddcb','\uddcc','\uddcd','\uddce','\uddcf','\uddd0','\uddd1', + '\uddd2','\uddd3','\uddd4','\uddd5','\uddd6','\uddd7','\uddd8', + '\uddd9','\uddda','\udddb','\udddc','\udddd','\uddde','\udddf', + '\udde0','\udde1','\udde2','\udde3','\udde4','\udde5','\udde6', + '\udde7','\udde8','\udde9','\uddea','\uddeb','\uddec','\udded', + '\uddee','\uddef','\uddf0','\uddf1','\uddf2','\uddf3','\uddf4', + '\uddf5','\uddf6','\uddf7','\uddf8','\uddf9','\uddfa','\uddfb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+56576; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void fde00() { + char[] cs = new char[] { + '\ude00','\ude01','\ude02','\ude03','\ude04','\ude05','\ude06', + '\ude07','\ude08','\ude09','\ude0a','\ude0b','\ude0c','\ude0d', + '\ude0e','\ude0f','\ude10','\ude11','\ude12','\ude13','\ude14', + '\ude15','\ude16','\ude17','\ude18','\ude19','\ude1a','\ude1b', + '\ude1c','\ude1d','\ude1e','\ude1f','\ude20','\ude21','\ude22', + '\ude23','\ude24','\ude25','\ude26','\ude27','\ude28','\ude29', + '\ude2a','\ude2b','\ude2c','\ude2d','\ude2e','\ude2f','\ude30', + '\ude31','\ude32','\ude33','\ude34','\ude35','\ude36','\ude37', + '\ude38','\ude39','\ude3a','\ude3b','\ude3c','\ude3d','\ude3e', + '\ude3f','\ude40','\ude41','\ude42','\ude43','\ude44','\ude45', + '\ude46','\ude47','\ude48','\ude49','\ude4a','\ude4b','\ude4c', + '\ude4d','\ude4e','\ude4f','\ude50','\ude51','\ude52','\ude53', + '\ude54','\ude55','\ude56','\ude57','\ude58','\ude59','\ude5a', + '\ude5b','\ude5c','\ude5d','\ude5e','\ude5f','\ude60','\ude61', + '\ude62','\ude63','\ude64','\ude65','\ude66','\ude67','\ude68', + '\ude69','\ude6a','\ude6b','\ude6c','\ude6d','\ude6e','\ude6f', + '\ude70','\ude71','\ude72','\ude73','\ude74','\ude75','\ude76', + '\ude77','\ude78','\ude79','\ude7a','\ude7b','\ude7c','\ude7d', + '\ude7e','\ude7f','\ude80','\ude81','\ude82','\ude83','\ude84', + '\ude85','\ude86','\ude87','\ude88','\ude89','\ude8a','\ude8b', + '\ude8c','\ude8d','\ude8e','\ude8f','\ude90','\ude91','\ude92', + '\ude93','\ude94','\ude95','\ude96','\ude97','\ude98','\ude99', + '\ude9a','\ude9b','\ude9c','\ude9d','\ude9e','\ude9f','\udea0', + '\udea1','\udea2','\udea3','\udea4','\udea5','\udea6','\udea7', + '\udea8','\udea9','\udeaa','\udeab','\udeac','\udead','\udeae', + '\udeaf','\udeb0','\udeb1','\udeb2','\udeb3','\udeb4','\udeb5', + '\udeb6','\udeb7','\udeb8','\udeb9','\udeba','\udebb','\udebc', + '\udebd','\udebe','\udebf','\udec0','\udec1','\udec2','\udec3', + '\udec4','\udec5','\udec6','\udec7','\udec8','\udec9','\udeca', + '\udecb','\udecc','\udecd','\udece','\udecf','\uded0','\uded1', + '\uded2','\uded3','\uded4','\uded5','\uded6','\uded7','\uded8', + '\uded9','\udeda','\udedb','\udedc','\udedd','\udede','\udedf', + '\udee0','\udee1','\udee2','\udee3','\udee4','\udee5','\udee6', + '\udee7','\udee8','\udee9','\udeea','\udeeb','\udeec','\udeed', + '\udeee','\udeef','\udef0','\udef1','\udef2','\udef3','\udef4', + '\udef5','\udef6','\udef7','\udef8','\udef9','\udefa','\udefb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+56832; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void fdf00() { + char[] cs = new char[] { + '\udf00','\udf01','\udf02','\udf03','\udf04','\udf05','\udf06', + '\udf07','\udf08','\udf09','\udf0a','\udf0b','\udf0c','\udf0d', + '\udf0e','\udf0f','\udf10','\udf11','\udf12','\udf13','\udf14', + '\udf15','\udf16','\udf17','\udf18','\udf19','\udf1a','\udf1b', + '\udf1c','\udf1d','\udf1e','\udf1f','\udf20','\udf21','\udf22', + '\udf23','\udf24','\udf25','\udf26','\udf27','\udf28','\udf29', + '\udf2a','\udf2b','\udf2c','\udf2d','\udf2e','\udf2f','\udf30', + '\udf31','\udf32','\udf33','\udf34','\udf35','\udf36','\udf37', + '\udf38','\udf39','\udf3a','\udf3b','\udf3c','\udf3d','\udf3e', + '\udf3f','\udf40','\udf41','\udf42','\udf43','\udf44','\udf45', + '\udf46','\udf47','\udf48','\udf49','\udf4a','\udf4b','\udf4c', + '\udf4d','\udf4e','\udf4f','\udf50','\udf51','\udf52','\udf53', + '\udf54','\udf55','\udf56','\udf57','\udf58','\udf59','\udf5a', + '\udf5b','\udf5c','\udf5d','\udf5e','\udf5f','\udf60','\udf61', + '\udf62','\udf63','\udf64','\udf65','\udf66','\udf67','\udf68', + '\udf69','\udf6a','\udf6b','\udf6c','\udf6d','\udf6e','\udf6f', + '\udf70','\udf71','\udf72','\udf73','\udf74','\udf75','\udf76', + '\udf77','\udf78','\udf79','\udf7a','\udf7b','\udf7c','\udf7d', + '\udf7e','\udf7f','\udf80','\udf81','\udf82','\udf83','\udf84', + '\udf85','\udf86','\udf87','\udf88','\udf89','\udf8a','\udf8b', + '\udf8c','\udf8d','\udf8e','\udf8f','\udf90','\udf91','\udf92', + '\udf93','\udf94','\udf95','\udf96','\udf97','\udf98','\udf99', + '\udf9a','\udf9b','\udf9c','\udf9d','\udf9e','\udf9f','\udfa0', + '\udfa1','\udfa2','\udfa3','\udfa4','\udfa5','\udfa6','\udfa7', + '\udfa8','\udfa9','\udfaa','\udfab','\udfac','\udfad','\udfae', + '\udfaf','\udfb0','\udfb1','\udfb2','\udfb3','\udfb4','\udfb5', + '\udfb6','\udfb7','\udfb8','\udfb9','\udfba','\udfbb','\udfbc', + '\udfbd','\udfbe','\udfbf','\udfc0','\udfc1','\udfc2','\udfc3', + '\udfc4','\udfc5','\udfc6','\udfc7','\udfc8','\udfc9','\udfca', + '\udfcb','\udfcc','\udfcd','\udfce','\udfcf','\udfd0','\udfd1', + '\udfd2','\udfd3','\udfd4','\udfd5','\udfd6','\udfd7','\udfd8', + '\udfd9','\udfda','\udfdb','\udfdc','\udfdd','\udfde','\udfdf', + '\udfe0','\udfe1','\udfe2','\udfe3','\udfe4','\udfe5','\udfe6', + '\udfe7','\udfe8','\udfe9','\udfea','\udfeb','\udfec','\udfed', + '\udfee','\udfef','\udff0','\udff1','\udff2','\udff3','\udff4', + '\udff5','\udff6','\udff7','\udff8','\udff9','\udffa','\udffb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+57088; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void fe000() { + char[] cs = new char[] { + '\ue000','\ue001','\ue002','\ue003','\ue004','\ue005','\ue006', + '\ue007','\ue008','\ue009','\ue00a','\ue00b','\ue00c','\ue00d', + '\ue00e','\ue00f','\ue010','\ue011','\ue012','\ue013','\ue014', + '\ue015','\ue016','\ue017','\ue018','\ue019','\ue01a','\ue01b', + '\ue01c','\ue01d','\ue01e','\ue01f','\ue020','\ue021','\ue022', + '\ue023','\ue024','\ue025','\ue026','\ue027','\ue028','\ue029', + '\ue02a','\ue02b','\ue02c','\ue02d','\ue02e','\ue02f','\ue030', + '\ue031','\ue032','\ue033','\ue034','\ue035','\ue036','\ue037', + '\ue038','\ue039','\ue03a','\ue03b','\ue03c','\ue03d','\ue03e', + '\ue03f','\ue040','\ue041','\ue042','\ue043','\ue044','\ue045', + '\ue046','\ue047','\ue048','\ue049','\ue04a','\ue04b','\ue04c', + '\ue04d','\ue04e','\ue04f','\ue050','\ue051','\ue052','\ue053', + '\ue054','\ue055','\ue056','\ue057','\ue058','\ue059','\ue05a', + '\ue05b','\ue05c','\ue05d','\ue05e','\ue05f','\ue060','\ue061', + '\ue062','\ue063','\ue064','\ue065','\ue066','\ue067','\ue068', + '\ue069','\ue06a','\ue06b','\ue06c','\ue06d','\ue06e','\ue06f', + '\ue070','\ue071','\ue072','\ue073','\ue074','\ue075','\ue076', + '\ue077','\ue078','\ue079','\ue07a','\ue07b','\ue07c','\ue07d', + '\ue07e','\ue07f','\ue080','\ue081','\ue082','\ue083','\ue084', + '\ue085','\ue086','\ue087','\ue088','\ue089','\ue08a','\ue08b', + '\ue08c','\ue08d','\ue08e','\ue08f','\ue090','\ue091','\ue092', + '\ue093','\ue094','\ue095','\ue096','\ue097','\ue098','\ue099', + '\ue09a','\ue09b','\ue09c','\ue09d','\ue09e','\ue09f','\ue0a0', + '\ue0a1','\ue0a2','\ue0a3','\ue0a4','\ue0a5','\ue0a6','\ue0a7', + '\ue0a8','\ue0a9','\ue0aa','\ue0ab','\ue0ac','\ue0ad','\ue0ae', + '\ue0af','\ue0b0','\ue0b1','\ue0b2','\ue0b3','\ue0b4','\ue0b5', + '\ue0b6','\ue0b7','\ue0b8','\ue0b9','\ue0ba','\ue0bb','\ue0bc', + '\ue0bd','\ue0be','\ue0bf','\ue0c0','\ue0c1','\ue0c2','\ue0c3', + '\ue0c4','\ue0c5','\ue0c6','\ue0c7','\ue0c8','\ue0c9','\ue0ca', + '\ue0cb','\ue0cc','\ue0cd','\ue0ce','\ue0cf','\ue0d0','\ue0d1', + '\ue0d2','\ue0d3','\ue0d4','\ue0d5','\ue0d6','\ue0d7','\ue0d8', + '\ue0d9','\ue0da','\ue0db','\ue0dc','\ue0dd','\ue0de','\ue0df', + '\ue0e0','\ue0e1','\ue0e2','\ue0e3','\ue0e4','\ue0e5','\ue0e6', + '\ue0e7','\ue0e8','\ue0e9','\ue0ea','\ue0eb','\ue0ec','\ue0ed', + '\ue0ee','\ue0ef','\ue0f0','\ue0f1','\ue0f2','\ue0f3','\ue0f4', + '\ue0f5','\ue0f6','\ue0f7','\ue0f8','\ue0f9','\ue0fa','\ue0fb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+57344; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void fe100() { + char[] cs = new char[] { + '\ue100','\ue101','\ue102','\ue103','\ue104','\ue105','\ue106', + '\ue107','\ue108','\ue109','\ue10a','\ue10b','\ue10c','\ue10d', + '\ue10e','\ue10f','\ue110','\ue111','\ue112','\ue113','\ue114', + '\ue115','\ue116','\ue117','\ue118','\ue119','\ue11a','\ue11b', + '\ue11c','\ue11d','\ue11e','\ue11f','\ue120','\ue121','\ue122', + '\ue123','\ue124','\ue125','\ue126','\ue127','\ue128','\ue129', + '\ue12a','\ue12b','\ue12c','\ue12d','\ue12e','\ue12f','\ue130', + '\ue131','\ue132','\ue133','\ue134','\ue135','\ue136','\ue137', + '\ue138','\ue139','\ue13a','\ue13b','\ue13c','\ue13d','\ue13e', + '\ue13f','\ue140','\ue141','\ue142','\ue143','\ue144','\ue145', + '\ue146','\ue147','\ue148','\ue149','\ue14a','\ue14b','\ue14c', + '\ue14d','\ue14e','\ue14f','\ue150','\ue151','\ue152','\ue153', + '\ue154','\ue155','\ue156','\ue157','\ue158','\ue159','\ue15a', + '\ue15b','\ue15c','\ue15d','\ue15e','\ue15f','\ue160','\ue161', + '\ue162','\ue163','\ue164','\ue165','\ue166','\ue167','\ue168', + '\ue169','\ue16a','\ue16b','\ue16c','\ue16d','\ue16e','\ue16f', + '\ue170','\ue171','\ue172','\ue173','\ue174','\ue175','\ue176', + '\ue177','\ue178','\ue179','\ue17a','\ue17b','\ue17c','\ue17d', + '\ue17e','\ue17f','\ue180','\ue181','\ue182','\ue183','\ue184', + '\ue185','\ue186','\ue187','\ue188','\ue189','\ue18a','\ue18b', + '\ue18c','\ue18d','\ue18e','\ue18f','\ue190','\ue191','\ue192', + '\ue193','\ue194','\ue195','\ue196','\ue197','\ue198','\ue199', + '\ue19a','\ue19b','\ue19c','\ue19d','\ue19e','\ue19f','\ue1a0', + '\ue1a1','\ue1a2','\ue1a3','\ue1a4','\ue1a5','\ue1a6','\ue1a7', + '\ue1a8','\ue1a9','\ue1aa','\ue1ab','\ue1ac','\ue1ad','\ue1ae', + '\ue1af','\ue1b0','\ue1b1','\ue1b2','\ue1b3','\ue1b4','\ue1b5', + '\ue1b6','\ue1b7','\ue1b8','\ue1b9','\ue1ba','\ue1bb','\ue1bc', + '\ue1bd','\ue1be','\ue1bf','\ue1c0','\ue1c1','\ue1c2','\ue1c3', + '\ue1c4','\ue1c5','\ue1c6','\ue1c7','\ue1c8','\ue1c9','\ue1ca', + '\ue1cb','\ue1cc','\ue1cd','\ue1ce','\ue1cf','\ue1d0','\ue1d1', + '\ue1d2','\ue1d3','\ue1d4','\ue1d5','\ue1d6','\ue1d7','\ue1d8', + '\ue1d9','\ue1da','\ue1db','\ue1dc','\ue1dd','\ue1de','\ue1df', + '\ue1e0','\ue1e1','\ue1e2','\ue1e3','\ue1e4','\ue1e5','\ue1e6', + '\ue1e7','\ue1e8','\ue1e9','\ue1ea','\ue1eb','\ue1ec','\ue1ed', + '\ue1ee','\ue1ef','\ue1f0','\ue1f1','\ue1f2','\ue1f3','\ue1f4', + '\ue1f5','\ue1f6','\ue1f7','\ue1f8','\ue1f9','\ue1fa','\ue1fb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+57600; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void fe200() { + char[] cs = new char[] { + '\ue200','\ue201','\ue202','\ue203','\ue204','\ue205','\ue206', + '\ue207','\ue208','\ue209','\ue20a','\ue20b','\ue20c','\ue20d', + '\ue20e','\ue20f','\ue210','\ue211','\ue212','\ue213','\ue214', + '\ue215','\ue216','\ue217','\ue218','\ue219','\ue21a','\ue21b', + '\ue21c','\ue21d','\ue21e','\ue21f','\ue220','\ue221','\ue222', + '\ue223','\ue224','\ue225','\ue226','\ue227','\ue228','\ue229', + '\ue22a','\ue22b','\ue22c','\ue22d','\ue22e','\ue22f','\ue230', + '\ue231','\ue232','\ue233','\ue234','\ue235','\ue236','\ue237', + '\ue238','\ue239','\ue23a','\ue23b','\ue23c','\ue23d','\ue23e', + '\ue23f','\ue240','\ue241','\ue242','\ue243','\ue244','\ue245', + '\ue246','\ue247','\ue248','\ue249','\ue24a','\ue24b','\ue24c', + '\ue24d','\ue24e','\ue24f','\ue250','\ue251','\ue252','\ue253', + '\ue254','\ue255','\ue256','\ue257','\ue258','\ue259','\ue25a', + '\ue25b','\ue25c','\ue25d','\ue25e','\ue25f','\ue260','\ue261', + '\ue262','\ue263','\ue264','\ue265','\ue266','\ue267','\ue268', + '\ue269','\ue26a','\ue26b','\ue26c','\ue26d','\ue26e','\ue26f', + '\ue270','\ue271','\ue272','\ue273','\ue274','\ue275','\ue276', + '\ue277','\ue278','\ue279','\ue27a','\ue27b','\ue27c','\ue27d', + '\ue27e','\ue27f','\ue280','\ue281','\ue282','\ue283','\ue284', + '\ue285','\ue286','\ue287','\ue288','\ue289','\ue28a','\ue28b', + '\ue28c','\ue28d','\ue28e','\ue28f','\ue290','\ue291','\ue292', + '\ue293','\ue294','\ue295','\ue296','\ue297','\ue298','\ue299', + '\ue29a','\ue29b','\ue29c','\ue29d','\ue29e','\ue29f','\ue2a0', + '\ue2a1','\ue2a2','\ue2a3','\ue2a4','\ue2a5','\ue2a6','\ue2a7', + '\ue2a8','\ue2a9','\ue2aa','\ue2ab','\ue2ac','\ue2ad','\ue2ae', + '\ue2af','\ue2b0','\ue2b1','\ue2b2','\ue2b3','\ue2b4','\ue2b5', + '\ue2b6','\ue2b7','\ue2b8','\ue2b9','\ue2ba','\ue2bb','\ue2bc', + '\ue2bd','\ue2be','\ue2bf','\ue2c0','\ue2c1','\ue2c2','\ue2c3', + '\ue2c4','\ue2c5','\ue2c6','\ue2c7','\ue2c8','\ue2c9','\ue2ca', + '\ue2cb','\ue2cc','\ue2cd','\ue2ce','\ue2cf','\ue2d0','\ue2d1', + '\ue2d2','\ue2d3','\ue2d4','\ue2d5','\ue2d6','\ue2d7','\ue2d8', + '\ue2d9','\ue2da','\ue2db','\ue2dc','\ue2dd','\ue2de','\ue2df', + '\ue2e0','\ue2e1','\ue2e2','\ue2e3','\ue2e4','\ue2e5','\ue2e6', + '\ue2e7','\ue2e8','\ue2e9','\ue2ea','\ue2eb','\ue2ec','\ue2ed', + '\ue2ee','\ue2ef','\ue2f0','\ue2f1','\ue2f2','\ue2f3','\ue2f4', + '\ue2f5','\ue2f6','\ue2f7','\ue2f8','\ue2f9','\ue2fa','\ue2fb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+57856; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void fe300() { + char[] cs = new char[] { + '\ue300','\ue301','\ue302','\ue303','\ue304','\ue305','\ue306', + '\ue307','\ue308','\ue309','\ue30a','\ue30b','\ue30c','\ue30d', + '\ue30e','\ue30f','\ue310','\ue311','\ue312','\ue313','\ue314', + '\ue315','\ue316','\ue317','\ue318','\ue319','\ue31a','\ue31b', + '\ue31c','\ue31d','\ue31e','\ue31f','\ue320','\ue321','\ue322', + '\ue323','\ue324','\ue325','\ue326','\ue327','\ue328','\ue329', + '\ue32a','\ue32b','\ue32c','\ue32d','\ue32e','\ue32f','\ue330', + '\ue331','\ue332','\ue333','\ue334','\ue335','\ue336','\ue337', + '\ue338','\ue339','\ue33a','\ue33b','\ue33c','\ue33d','\ue33e', + '\ue33f','\ue340','\ue341','\ue342','\ue343','\ue344','\ue345', + '\ue346','\ue347','\ue348','\ue349','\ue34a','\ue34b','\ue34c', + '\ue34d','\ue34e','\ue34f','\ue350','\ue351','\ue352','\ue353', + '\ue354','\ue355','\ue356','\ue357','\ue358','\ue359','\ue35a', + '\ue35b','\ue35c','\ue35d','\ue35e','\ue35f','\ue360','\ue361', + '\ue362','\ue363','\ue364','\ue365','\ue366','\ue367','\ue368', + '\ue369','\ue36a','\ue36b','\ue36c','\ue36d','\ue36e','\ue36f', + '\ue370','\ue371','\ue372','\ue373','\ue374','\ue375','\ue376', + '\ue377','\ue378','\ue379','\ue37a','\ue37b','\ue37c','\ue37d', + '\ue37e','\ue37f','\ue380','\ue381','\ue382','\ue383','\ue384', + '\ue385','\ue386','\ue387','\ue388','\ue389','\ue38a','\ue38b', + '\ue38c','\ue38d','\ue38e','\ue38f','\ue390','\ue391','\ue392', + '\ue393','\ue394','\ue395','\ue396','\ue397','\ue398','\ue399', + '\ue39a','\ue39b','\ue39c','\ue39d','\ue39e','\ue39f','\ue3a0', + '\ue3a1','\ue3a2','\ue3a3','\ue3a4','\ue3a5','\ue3a6','\ue3a7', + '\ue3a8','\ue3a9','\ue3aa','\ue3ab','\ue3ac','\ue3ad','\ue3ae', + '\ue3af','\ue3b0','\ue3b1','\ue3b2','\ue3b3','\ue3b4','\ue3b5', + '\ue3b6','\ue3b7','\ue3b8','\ue3b9','\ue3ba','\ue3bb','\ue3bc', + '\ue3bd','\ue3be','\ue3bf','\ue3c0','\ue3c1','\ue3c2','\ue3c3', + '\ue3c4','\ue3c5','\ue3c6','\ue3c7','\ue3c8','\ue3c9','\ue3ca', + '\ue3cb','\ue3cc','\ue3cd','\ue3ce','\ue3cf','\ue3d0','\ue3d1', + '\ue3d2','\ue3d3','\ue3d4','\ue3d5','\ue3d6','\ue3d7','\ue3d8', + '\ue3d9','\ue3da','\ue3db','\ue3dc','\ue3dd','\ue3de','\ue3df', + '\ue3e0','\ue3e1','\ue3e2','\ue3e3','\ue3e4','\ue3e5','\ue3e6', + '\ue3e7','\ue3e8','\ue3e9','\ue3ea','\ue3eb','\ue3ec','\ue3ed', + '\ue3ee','\ue3ef','\ue3f0','\ue3f1','\ue3f2','\ue3f3','\ue3f4', + '\ue3f5','\ue3f6','\ue3f7','\ue3f8','\ue3f9','\ue3fa','\ue3fb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+58112; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void fe400() { + char[] cs = new char[] { + '\ue400','\ue401','\ue402','\ue403','\ue404','\ue405','\ue406', + '\ue407','\ue408','\ue409','\ue40a','\ue40b','\ue40c','\ue40d', + '\ue40e','\ue40f','\ue410','\ue411','\ue412','\ue413','\ue414', + '\ue415','\ue416','\ue417','\ue418','\ue419','\ue41a','\ue41b', + '\ue41c','\ue41d','\ue41e','\ue41f','\ue420','\ue421','\ue422', + '\ue423','\ue424','\ue425','\ue426','\ue427','\ue428','\ue429', + '\ue42a','\ue42b','\ue42c','\ue42d','\ue42e','\ue42f','\ue430', + '\ue431','\ue432','\ue433','\ue434','\ue435','\ue436','\ue437', + '\ue438','\ue439','\ue43a','\ue43b','\ue43c','\ue43d','\ue43e', + '\ue43f','\ue440','\ue441','\ue442','\ue443','\ue444','\ue445', + '\ue446','\ue447','\ue448','\ue449','\ue44a','\ue44b','\ue44c', + '\ue44d','\ue44e','\ue44f','\ue450','\ue451','\ue452','\ue453', + '\ue454','\ue455','\ue456','\ue457','\ue458','\ue459','\ue45a', + '\ue45b','\ue45c','\ue45d','\ue45e','\ue45f','\ue460','\ue461', + '\ue462','\ue463','\ue464','\ue465','\ue466','\ue467','\ue468', + '\ue469','\ue46a','\ue46b','\ue46c','\ue46d','\ue46e','\ue46f', + '\ue470','\ue471','\ue472','\ue473','\ue474','\ue475','\ue476', + '\ue477','\ue478','\ue479','\ue47a','\ue47b','\ue47c','\ue47d', + '\ue47e','\ue47f','\ue480','\ue481','\ue482','\ue483','\ue484', + '\ue485','\ue486','\ue487','\ue488','\ue489','\ue48a','\ue48b', + '\ue48c','\ue48d','\ue48e','\ue48f','\ue490','\ue491','\ue492', + '\ue493','\ue494','\ue495','\ue496','\ue497','\ue498','\ue499', + '\ue49a','\ue49b','\ue49c','\ue49d','\ue49e','\ue49f','\ue4a0', + '\ue4a1','\ue4a2','\ue4a3','\ue4a4','\ue4a5','\ue4a6','\ue4a7', + '\ue4a8','\ue4a9','\ue4aa','\ue4ab','\ue4ac','\ue4ad','\ue4ae', + '\ue4af','\ue4b0','\ue4b1','\ue4b2','\ue4b3','\ue4b4','\ue4b5', + '\ue4b6','\ue4b7','\ue4b8','\ue4b9','\ue4ba','\ue4bb','\ue4bc', + '\ue4bd','\ue4be','\ue4bf','\ue4c0','\ue4c1','\ue4c2','\ue4c3', + '\ue4c4','\ue4c5','\ue4c6','\ue4c7','\ue4c8','\ue4c9','\ue4ca', + '\ue4cb','\ue4cc','\ue4cd','\ue4ce','\ue4cf','\ue4d0','\ue4d1', + '\ue4d2','\ue4d3','\ue4d4','\ue4d5','\ue4d6','\ue4d7','\ue4d8', + '\ue4d9','\ue4da','\ue4db','\ue4dc','\ue4dd','\ue4de','\ue4df', + '\ue4e0','\ue4e1','\ue4e2','\ue4e3','\ue4e4','\ue4e5','\ue4e6', + '\ue4e7','\ue4e8','\ue4e9','\ue4ea','\ue4eb','\ue4ec','\ue4ed', + '\ue4ee','\ue4ef','\ue4f0','\ue4f1','\ue4f2','\ue4f3','\ue4f4', + '\ue4f5','\ue4f6','\ue4f7','\ue4f8','\ue4f9','\ue4fa','\ue4fb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+58368; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void fe500() { + char[] cs = new char[] { + '\ue500','\ue501','\ue502','\ue503','\ue504','\ue505','\ue506', + '\ue507','\ue508','\ue509','\ue50a','\ue50b','\ue50c','\ue50d', + '\ue50e','\ue50f','\ue510','\ue511','\ue512','\ue513','\ue514', + '\ue515','\ue516','\ue517','\ue518','\ue519','\ue51a','\ue51b', + '\ue51c','\ue51d','\ue51e','\ue51f','\ue520','\ue521','\ue522', + '\ue523','\ue524','\ue525','\ue526','\ue527','\ue528','\ue529', + '\ue52a','\ue52b','\ue52c','\ue52d','\ue52e','\ue52f','\ue530', + '\ue531','\ue532','\ue533','\ue534','\ue535','\ue536','\ue537', + '\ue538','\ue539','\ue53a','\ue53b','\ue53c','\ue53d','\ue53e', + '\ue53f','\ue540','\ue541','\ue542','\ue543','\ue544','\ue545', + '\ue546','\ue547','\ue548','\ue549','\ue54a','\ue54b','\ue54c', + '\ue54d','\ue54e','\ue54f','\ue550','\ue551','\ue552','\ue553', + '\ue554','\ue555','\ue556','\ue557','\ue558','\ue559','\ue55a', + '\ue55b','\ue55c','\ue55d','\ue55e','\ue55f','\ue560','\ue561', + '\ue562','\ue563','\ue564','\ue565','\ue566','\ue567','\ue568', + '\ue569','\ue56a','\ue56b','\ue56c','\ue56d','\ue56e','\ue56f', + '\ue570','\ue571','\ue572','\ue573','\ue574','\ue575','\ue576', + '\ue577','\ue578','\ue579','\ue57a','\ue57b','\ue57c','\ue57d', + '\ue57e','\ue57f','\ue580','\ue581','\ue582','\ue583','\ue584', + '\ue585','\ue586','\ue587','\ue588','\ue589','\ue58a','\ue58b', + '\ue58c','\ue58d','\ue58e','\ue58f','\ue590','\ue591','\ue592', + '\ue593','\ue594','\ue595','\ue596','\ue597','\ue598','\ue599', + '\ue59a','\ue59b','\ue59c','\ue59d','\ue59e','\ue59f','\ue5a0', + '\ue5a1','\ue5a2','\ue5a3','\ue5a4','\ue5a5','\ue5a6','\ue5a7', + '\ue5a8','\ue5a9','\ue5aa','\ue5ab','\ue5ac','\ue5ad','\ue5ae', + '\ue5af','\ue5b0','\ue5b1','\ue5b2','\ue5b3','\ue5b4','\ue5b5', + '\ue5b6','\ue5b7','\ue5b8','\ue5b9','\ue5ba','\ue5bb','\ue5bc', + '\ue5bd','\ue5be','\ue5bf','\ue5c0','\ue5c1','\ue5c2','\ue5c3', + '\ue5c4','\ue5c5','\ue5c6','\ue5c7','\ue5c8','\ue5c9','\ue5ca', + '\ue5cb','\ue5cc','\ue5cd','\ue5ce','\ue5cf','\ue5d0','\ue5d1', + '\ue5d2','\ue5d3','\ue5d4','\ue5d5','\ue5d6','\ue5d7','\ue5d8', + '\ue5d9','\ue5da','\ue5db','\ue5dc','\ue5dd','\ue5de','\ue5df', + '\ue5e0','\ue5e1','\ue5e2','\ue5e3','\ue5e4','\ue5e5','\ue5e6', + '\ue5e7','\ue5e8','\ue5e9','\ue5ea','\ue5eb','\ue5ec','\ue5ed', + '\ue5ee','\ue5ef','\ue5f0','\ue5f1','\ue5f2','\ue5f3','\ue5f4', + '\ue5f5','\ue5f6','\ue5f7','\ue5f8','\ue5f9','\ue5fa','\ue5fb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+58624; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void fe600() { + char[] cs = new char[] { + '\ue600','\ue601','\ue602','\ue603','\ue604','\ue605','\ue606', + '\ue607','\ue608','\ue609','\ue60a','\ue60b','\ue60c','\ue60d', + '\ue60e','\ue60f','\ue610','\ue611','\ue612','\ue613','\ue614', + '\ue615','\ue616','\ue617','\ue618','\ue619','\ue61a','\ue61b', + '\ue61c','\ue61d','\ue61e','\ue61f','\ue620','\ue621','\ue622', + '\ue623','\ue624','\ue625','\ue626','\ue627','\ue628','\ue629', + '\ue62a','\ue62b','\ue62c','\ue62d','\ue62e','\ue62f','\ue630', + '\ue631','\ue632','\ue633','\ue634','\ue635','\ue636','\ue637', + '\ue638','\ue639','\ue63a','\ue63b','\ue63c','\ue63d','\ue63e', + '\ue63f','\ue640','\ue641','\ue642','\ue643','\ue644','\ue645', + '\ue646','\ue647','\ue648','\ue649','\ue64a','\ue64b','\ue64c', + '\ue64d','\ue64e','\ue64f','\ue650','\ue651','\ue652','\ue653', + '\ue654','\ue655','\ue656','\ue657','\ue658','\ue659','\ue65a', + '\ue65b','\ue65c','\ue65d','\ue65e','\ue65f','\ue660','\ue661', + '\ue662','\ue663','\ue664','\ue665','\ue666','\ue667','\ue668', + '\ue669','\ue66a','\ue66b','\ue66c','\ue66d','\ue66e','\ue66f', + '\ue670','\ue671','\ue672','\ue673','\ue674','\ue675','\ue676', + '\ue677','\ue678','\ue679','\ue67a','\ue67b','\ue67c','\ue67d', + '\ue67e','\ue67f','\ue680','\ue681','\ue682','\ue683','\ue684', + '\ue685','\ue686','\ue687','\ue688','\ue689','\ue68a','\ue68b', + '\ue68c','\ue68d','\ue68e','\ue68f','\ue690','\ue691','\ue692', + '\ue693','\ue694','\ue695','\ue696','\ue697','\ue698','\ue699', + '\ue69a','\ue69b','\ue69c','\ue69d','\ue69e','\ue69f','\ue6a0', + '\ue6a1','\ue6a2','\ue6a3','\ue6a4','\ue6a5','\ue6a6','\ue6a7', + '\ue6a8','\ue6a9','\ue6aa','\ue6ab','\ue6ac','\ue6ad','\ue6ae', + '\ue6af','\ue6b0','\ue6b1','\ue6b2','\ue6b3','\ue6b4','\ue6b5', + '\ue6b6','\ue6b7','\ue6b8','\ue6b9','\ue6ba','\ue6bb','\ue6bc', + '\ue6bd','\ue6be','\ue6bf','\ue6c0','\ue6c1','\ue6c2','\ue6c3', + '\ue6c4','\ue6c5','\ue6c6','\ue6c7','\ue6c8','\ue6c9','\ue6ca', + '\ue6cb','\ue6cc','\ue6cd','\ue6ce','\ue6cf','\ue6d0','\ue6d1', + '\ue6d2','\ue6d3','\ue6d4','\ue6d5','\ue6d6','\ue6d7','\ue6d8', + '\ue6d9','\ue6da','\ue6db','\ue6dc','\ue6dd','\ue6de','\ue6df', + '\ue6e0','\ue6e1','\ue6e2','\ue6e3','\ue6e4','\ue6e5','\ue6e6', + '\ue6e7','\ue6e8','\ue6e9','\ue6ea','\ue6eb','\ue6ec','\ue6ed', + '\ue6ee','\ue6ef','\ue6f0','\ue6f1','\ue6f2','\ue6f3','\ue6f4', + '\ue6f5','\ue6f6','\ue6f7','\ue6f8','\ue6f9','\ue6fa','\ue6fb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+58880; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void fe700() { + char[] cs = new char[] { + '\ue700','\ue701','\ue702','\ue703','\ue704','\ue705','\ue706', + '\ue707','\ue708','\ue709','\ue70a','\ue70b','\ue70c','\ue70d', + '\ue70e','\ue70f','\ue710','\ue711','\ue712','\ue713','\ue714', + '\ue715','\ue716','\ue717','\ue718','\ue719','\ue71a','\ue71b', + '\ue71c','\ue71d','\ue71e','\ue71f','\ue720','\ue721','\ue722', + '\ue723','\ue724','\ue725','\ue726','\ue727','\ue728','\ue729', + '\ue72a','\ue72b','\ue72c','\ue72d','\ue72e','\ue72f','\ue730', + '\ue731','\ue732','\ue733','\ue734','\ue735','\ue736','\ue737', + '\ue738','\ue739','\ue73a','\ue73b','\ue73c','\ue73d','\ue73e', + '\ue73f','\ue740','\ue741','\ue742','\ue743','\ue744','\ue745', + '\ue746','\ue747','\ue748','\ue749','\ue74a','\ue74b','\ue74c', + '\ue74d','\ue74e','\ue74f','\ue750','\ue751','\ue752','\ue753', + '\ue754','\ue755','\ue756','\ue757','\ue758','\ue759','\ue75a', + '\ue75b','\ue75c','\ue75d','\ue75e','\ue75f','\ue760','\ue761', + '\ue762','\ue763','\ue764','\ue765','\ue766','\ue767','\ue768', + '\ue769','\ue76a','\ue76b','\ue76c','\ue76d','\ue76e','\ue76f', + '\ue770','\ue771','\ue772','\ue773','\ue774','\ue775','\ue776', + '\ue777','\ue778','\ue779','\ue77a','\ue77b','\ue77c','\ue77d', + '\ue77e','\ue77f','\ue780','\ue781','\ue782','\ue783','\ue784', + '\ue785','\ue786','\ue787','\ue788','\ue789','\ue78a','\ue78b', + '\ue78c','\ue78d','\ue78e','\ue78f','\ue790','\ue791','\ue792', + '\ue793','\ue794','\ue795','\ue796','\ue797','\ue798','\ue799', + '\ue79a','\ue79b','\ue79c','\ue79d','\ue79e','\ue79f','\ue7a0', + '\ue7a1','\ue7a2','\ue7a3','\ue7a4','\ue7a5','\ue7a6','\ue7a7', + '\ue7a8','\ue7a9','\ue7aa','\ue7ab','\ue7ac','\ue7ad','\ue7ae', + '\ue7af','\ue7b0','\ue7b1','\ue7b2','\ue7b3','\ue7b4','\ue7b5', + '\ue7b6','\ue7b7','\ue7b8','\ue7b9','\ue7ba','\ue7bb','\ue7bc', + '\ue7bd','\ue7be','\ue7bf','\ue7c0','\ue7c1','\ue7c2','\ue7c3', + '\ue7c4','\ue7c5','\ue7c6','\ue7c7','\ue7c8','\ue7c9','\ue7ca', + '\ue7cb','\ue7cc','\ue7cd','\ue7ce','\ue7cf','\ue7d0','\ue7d1', + '\ue7d2','\ue7d3','\ue7d4','\ue7d5','\ue7d6','\ue7d7','\ue7d8', + '\ue7d9','\ue7da','\ue7db','\ue7dc','\ue7dd','\ue7de','\ue7df', + '\ue7e0','\ue7e1','\ue7e2','\ue7e3','\ue7e4','\ue7e5','\ue7e6', + '\ue7e7','\ue7e8','\ue7e9','\ue7ea','\ue7eb','\ue7ec','\ue7ed', + '\ue7ee','\ue7ef','\ue7f0','\ue7f1','\ue7f2','\ue7f3','\ue7f4', + '\ue7f5','\ue7f6','\ue7f7','\ue7f8','\ue7f9','\ue7fa','\ue7fb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+59136; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void fe800() { + char[] cs = new char[] { + '\ue800','\ue801','\ue802','\ue803','\ue804','\ue805','\ue806', + '\ue807','\ue808','\ue809','\ue80a','\ue80b','\ue80c','\ue80d', + '\ue80e','\ue80f','\ue810','\ue811','\ue812','\ue813','\ue814', + '\ue815','\ue816','\ue817','\ue818','\ue819','\ue81a','\ue81b', + '\ue81c','\ue81d','\ue81e','\ue81f','\ue820','\ue821','\ue822', + '\ue823','\ue824','\ue825','\ue826','\ue827','\ue828','\ue829', + '\ue82a','\ue82b','\ue82c','\ue82d','\ue82e','\ue82f','\ue830', + '\ue831','\ue832','\ue833','\ue834','\ue835','\ue836','\ue837', + '\ue838','\ue839','\ue83a','\ue83b','\ue83c','\ue83d','\ue83e', + '\ue83f','\ue840','\ue841','\ue842','\ue843','\ue844','\ue845', + '\ue846','\ue847','\ue848','\ue849','\ue84a','\ue84b','\ue84c', + '\ue84d','\ue84e','\ue84f','\ue850','\ue851','\ue852','\ue853', + '\ue854','\ue855','\ue856','\ue857','\ue858','\ue859','\ue85a', + '\ue85b','\ue85c','\ue85d','\ue85e','\ue85f','\ue860','\ue861', + '\ue862','\ue863','\ue864','\ue865','\ue866','\ue867','\ue868', + '\ue869','\ue86a','\ue86b','\ue86c','\ue86d','\ue86e','\ue86f', + '\ue870','\ue871','\ue872','\ue873','\ue874','\ue875','\ue876', + '\ue877','\ue878','\ue879','\ue87a','\ue87b','\ue87c','\ue87d', + '\ue87e','\ue87f','\ue880','\ue881','\ue882','\ue883','\ue884', + '\ue885','\ue886','\ue887','\ue888','\ue889','\ue88a','\ue88b', + '\ue88c','\ue88d','\ue88e','\ue88f','\ue890','\ue891','\ue892', + '\ue893','\ue894','\ue895','\ue896','\ue897','\ue898','\ue899', + '\ue89a','\ue89b','\ue89c','\ue89d','\ue89e','\ue89f','\ue8a0', + '\ue8a1','\ue8a2','\ue8a3','\ue8a4','\ue8a5','\ue8a6','\ue8a7', + '\ue8a8','\ue8a9','\ue8aa','\ue8ab','\ue8ac','\ue8ad','\ue8ae', + '\ue8af','\ue8b0','\ue8b1','\ue8b2','\ue8b3','\ue8b4','\ue8b5', + '\ue8b6','\ue8b7','\ue8b8','\ue8b9','\ue8ba','\ue8bb','\ue8bc', + '\ue8bd','\ue8be','\ue8bf','\ue8c0','\ue8c1','\ue8c2','\ue8c3', + '\ue8c4','\ue8c5','\ue8c6','\ue8c7','\ue8c8','\ue8c9','\ue8ca', + '\ue8cb','\ue8cc','\ue8cd','\ue8ce','\ue8cf','\ue8d0','\ue8d1', + '\ue8d2','\ue8d3','\ue8d4','\ue8d5','\ue8d6','\ue8d7','\ue8d8', + '\ue8d9','\ue8da','\ue8db','\ue8dc','\ue8dd','\ue8de','\ue8df', + '\ue8e0','\ue8e1','\ue8e2','\ue8e3','\ue8e4','\ue8e5','\ue8e6', + '\ue8e7','\ue8e8','\ue8e9','\ue8ea','\ue8eb','\ue8ec','\ue8ed', + '\ue8ee','\ue8ef','\ue8f0','\ue8f1','\ue8f2','\ue8f3','\ue8f4', + '\ue8f5','\ue8f6','\ue8f7','\ue8f8','\ue8f9','\ue8fa','\ue8fb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+59392; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void fe900() { + char[] cs = new char[] { + '\ue900','\ue901','\ue902','\ue903','\ue904','\ue905','\ue906', + '\ue907','\ue908','\ue909','\ue90a','\ue90b','\ue90c','\ue90d', + '\ue90e','\ue90f','\ue910','\ue911','\ue912','\ue913','\ue914', + '\ue915','\ue916','\ue917','\ue918','\ue919','\ue91a','\ue91b', + '\ue91c','\ue91d','\ue91e','\ue91f','\ue920','\ue921','\ue922', + '\ue923','\ue924','\ue925','\ue926','\ue927','\ue928','\ue929', + '\ue92a','\ue92b','\ue92c','\ue92d','\ue92e','\ue92f','\ue930', + '\ue931','\ue932','\ue933','\ue934','\ue935','\ue936','\ue937', + '\ue938','\ue939','\ue93a','\ue93b','\ue93c','\ue93d','\ue93e', + '\ue93f','\ue940','\ue941','\ue942','\ue943','\ue944','\ue945', + '\ue946','\ue947','\ue948','\ue949','\ue94a','\ue94b','\ue94c', + '\ue94d','\ue94e','\ue94f','\ue950','\ue951','\ue952','\ue953', + '\ue954','\ue955','\ue956','\ue957','\ue958','\ue959','\ue95a', + '\ue95b','\ue95c','\ue95d','\ue95e','\ue95f','\ue960','\ue961', + '\ue962','\ue963','\ue964','\ue965','\ue966','\ue967','\ue968', + '\ue969','\ue96a','\ue96b','\ue96c','\ue96d','\ue96e','\ue96f', + '\ue970','\ue971','\ue972','\ue973','\ue974','\ue975','\ue976', + '\ue977','\ue978','\ue979','\ue97a','\ue97b','\ue97c','\ue97d', + '\ue97e','\ue97f','\ue980','\ue981','\ue982','\ue983','\ue984', + '\ue985','\ue986','\ue987','\ue988','\ue989','\ue98a','\ue98b', + '\ue98c','\ue98d','\ue98e','\ue98f','\ue990','\ue991','\ue992', + '\ue993','\ue994','\ue995','\ue996','\ue997','\ue998','\ue999', + '\ue99a','\ue99b','\ue99c','\ue99d','\ue99e','\ue99f','\ue9a0', + '\ue9a1','\ue9a2','\ue9a3','\ue9a4','\ue9a5','\ue9a6','\ue9a7', + '\ue9a8','\ue9a9','\ue9aa','\ue9ab','\ue9ac','\ue9ad','\ue9ae', + '\ue9af','\ue9b0','\ue9b1','\ue9b2','\ue9b3','\ue9b4','\ue9b5', + '\ue9b6','\ue9b7','\ue9b8','\ue9b9','\ue9ba','\ue9bb','\ue9bc', + '\ue9bd','\ue9be','\ue9bf','\ue9c0','\ue9c1','\ue9c2','\ue9c3', + '\ue9c4','\ue9c5','\ue9c6','\ue9c7','\ue9c8','\ue9c9','\ue9ca', + '\ue9cb','\ue9cc','\ue9cd','\ue9ce','\ue9cf','\ue9d0','\ue9d1', + '\ue9d2','\ue9d3','\ue9d4','\ue9d5','\ue9d6','\ue9d7','\ue9d8', + '\ue9d9','\ue9da','\ue9db','\ue9dc','\ue9dd','\ue9de','\ue9df', + '\ue9e0','\ue9e1','\ue9e2','\ue9e3','\ue9e4','\ue9e5','\ue9e6', + '\ue9e7','\ue9e8','\ue9e9','\ue9ea','\ue9eb','\ue9ec','\ue9ed', + '\ue9ee','\ue9ef','\ue9f0','\ue9f1','\ue9f2','\ue9f3','\ue9f4', + '\ue9f5','\ue9f6','\ue9f7','\ue9f8','\ue9f9','\ue9fa','\ue9fb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+59648; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void fea00() { + char[] cs = new char[] { + '\uea00','\uea01','\uea02','\uea03','\uea04','\uea05','\uea06', + '\uea07','\uea08','\uea09','\uea0a','\uea0b','\uea0c','\uea0d', + '\uea0e','\uea0f','\uea10','\uea11','\uea12','\uea13','\uea14', + '\uea15','\uea16','\uea17','\uea18','\uea19','\uea1a','\uea1b', + '\uea1c','\uea1d','\uea1e','\uea1f','\uea20','\uea21','\uea22', + '\uea23','\uea24','\uea25','\uea26','\uea27','\uea28','\uea29', + '\uea2a','\uea2b','\uea2c','\uea2d','\uea2e','\uea2f','\uea30', + '\uea31','\uea32','\uea33','\uea34','\uea35','\uea36','\uea37', + '\uea38','\uea39','\uea3a','\uea3b','\uea3c','\uea3d','\uea3e', + '\uea3f','\uea40','\uea41','\uea42','\uea43','\uea44','\uea45', + '\uea46','\uea47','\uea48','\uea49','\uea4a','\uea4b','\uea4c', + '\uea4d','\uea4e','\uea4f','\uea50','\uea51','\uea52','\uea53', + '\uea54','\uea55','\uea56','\uea57','\uea58','\uea59','\uea5a', + '\uea5b','\uea5c','\uea5d','\uea5e','\uea5f','\uea60','\uea61', + '\uea62','\uea63','\uea64','\uea65','\uea66','\uea67','\uea68', + '\uea69','\uea6a','\uea6b','\uea6c','\uea6d','\uea6e','\uea6f', + '\uea70','\uea71','\uea72','\uea73','\uea74','\uea75','\uea76', + '\uea77','\uea78','\uea79','\uea7a','\uea7b','\uea7c','\uea7d', + '\uea7e','\uea7f','\uea80','\uea81','\uea82','\uea83','\uea84', + '\uea85','\uea86','\uea87','\uea88','\uea89','\uea8a','\uea8b', + '\uea8c','\uea8d','\uea8e','\uea8f','\uea90','\uea91','\uea92', + '\uea93','\uea94','\uea95','\uea96','\uea97','\uea98','\uea99', + '\uea9a','\uea9b','\uea9c','\uea9d','\uea9e','\uea9f','\ueaa0', + '\ueaa1','\ueaa2','\ueaa3','\ueaa4','\ueaa5','\ueaa6','\ueaa7', + '\ueaa8','\ueaa9','\ueaaa','\ueaab','\ueaac','\ueaad','\ueaae', + '\ueaaf','\ueab0','\ueab1','\ueab2','\ueab3','\ueab4','\ueab5', + '\ueab6','\ueab7','\ueab8','\ueab9','\ueaba','\ueabb','\ueabc', + '\ueabd','\ueabe','\ueabf','\ueac0','\ueac1','\ueac2','\ueac3', + '\ueac4','\ueac5','\ueac6','\ueac7','\ueac8','\ueac9','\ueaca', + '\ueacb','\ueacc','\ueacd','\ueace','\ueacf','\uead0','\uead1', + '\uead2','\uead3','\uead4','\uead5','\uead6','\uead7','\uead8', + '\uead9','\ueada','\ueadb','\ueadc','\ueadd','\ueade','\ueadf', + '\ueae0','\ueae1','\ueae2','\ueae3','\ueae4','\ueae5','\ueae6', + '\ueae7','\ueae8','\ueae9','\ueaea','\ueaeb','\ueaec','\ueaed', + '\ueaee','\ueaef','\ueaf0','\ueaf1','\ueaf2','\ueaf3','\ueaf4', + '\ueaf5','\ueaf6','\ueaf7','\ueaf8','\ueaf9','\ueafa','\ueafb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+59904; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void feb00() { + char[] cs = new char[] { + '\ueb00','\ueb01','\ueb02','\ueb03','\ueb04','\ueb05','\ueb06', + '\ueb07','\ueb08','\ueb09','\ueb0a','\ueb0b','\ueb0c','\ueb0d', + '\ueb0e','\ueb0f','\ueb10','\ueb11','\ueb12','\ueb13','\ueb14', + '\ueb15','\ueb16','\ueb17','\ueb18','\ueb19','\ueb1a','\ueb1b', + '\ueb1c','\ueb1d','\ueb1e','\ueb1f','\ueb20','\ueb21','\ueb22', + '\ueb23','\ueb24','\ueb25','\ueb26','\ueb27','\ueb28','\ueb29', + '\ueb2a','\ueb2b','\ueb2c','\ueb2d','\ueb2e','\ueb2f','\ueb30', + '\ueb31','\ueb32','\ueb33','\ueb34','\ueb35','\ueb36','\ueb37', + '\ueb38','\ueb39','\ueb3a','\ueb3b','\ueb3c','\ueb3d','\ueb3e', + '\ueb3f','\ueb40','\ueb41','\ueb42','\ueb43','\ueb44','\ueb45', + '\ueb46','\ueb47','\ueb48','\ueb49','\ueb4a','\ueb4b','\ueb4c', + '\ueb4d','\ueb4e','\ueb4f','\ueb50','\ueb51','\ueb52','\ueb53', + '\ueb54','\ueb55','\ueb56','\ueb57','\ueb58','\ueb59','\ueb5a', + '\ueb5b','\ueb5c','\ueb5d','\ueb5e','\ueb5f','\ueb60','\ueb61', + '\ueb62','\ueb63','\ueb64','\ueb65','\ueb66','\ueb67','\ueb68', + '\ueb69','\ueb6a','\ueb6b','\ueb6c','\ueb6d','\ueb6e','\ueb6f', + '\ueb70','\ueb71','\ueb72','\ueb73','\ueb74','\ueb75','\ueb76', + '\ueb77','\ueb78','\ueb79','\ueb7a','\ueb7b','\ueb7c','\ueb7d', + '\ueb7e','\ueb7f','\ueb80','\ueb81','\ueb82','\ueb83','\ueb84', + '\ueb85','\ueb86','\ueb87','\ueb88','\ueb89','\ueb8a','\ueb8b', + '\ueb8c','\ueb8d','\ueb8e','\ueb8f','\ueb90','\ueb91','\ueb92', + '\ueb93','\ueb94','\ueb95','\ueb96','\ueb97','\ueb98','\ueb99', + '\ueb9a','\ueb9b','\ueb9c','\ueb9d','\ueb9e','\ueb9f','\ueba0', + '\ueba1','\ueba2','\ueba3','\ueba4','\ueba5','\ueba6','\ueba7', + '\ueba8','\ueba9','\uebaa','\uebab','\uebac','\uebad','\uebae', + '\uebaf','\uebb0','\uebb1','\uebb2','\uebb3','\uebb4','\uebb5', + '\uebb6','\uebb7','\uebb8','\uebb9','\uebba','\uebbb','\uebbc', + '\uebbd','\uebbe','\uebbf','\uebc0','\uebc1','\uebc2','\uebc3', + '\uebc4','\uebc5','\uebc6','\uebc7','\uebc8','\uebc9','\uebca', + '\uebcb','\uebcc','\uebcd','\uebce','\uebcf','\uebd0','\uebd1', + '\uebd2','\uebd3','\uebd4','\uebd5','\uebd6','\uebd7','\uebd8', + '\uebd9','\uebda','\uebdb','\uebdc','\uebdd','\uebde','\uebdf', + '\uebe0','\uebe1','\uebe2','\uebe3','\uebe4','\uebe5','\uebe6', + '\uebe7','\uebe8','\uebe9','\uebea','\uebeb','\uebec','\uebed', + '\uebee','\uebef','\uebf0','\uebf1','\uebf2','\uebf3','\uebf4', + '\uebf5','\uebf6','\uebf7','\uebf8','\uebf9','\uebfa','\uebfb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+60160; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void fec00() { + char[] cs = new char[] { + '\uec00','\uec01','\uec02','\uec03','\uec04','\uec05','\uec06', + '\uec07','\uec08','\uec09','\uec0a','\uec0b','\uec0c','\uec0d', + '\uec0e','\uec0f','\uec10','\uec11','\uec12','\uec13','\uec14', + '\uec15','\uec16','\uec17','\uec18','\uec19','\uec1a','\uec1b', + '\uec1c','\uec1d','\uec1e','\uec1f','\uec20','\uec21','\uec22', + '\uec23','\uec24','\uec25','\uec26','\uec27','\uec28','\uec29', + '\uec2a','\uec2b','\uec2c','\uec2d','\uec2e','\uec2f','\uec30', + '\uec31','\uec32','\uec33','\uec34','\uec35','\uec36','\uec37', + '\uec38','\uec39','\uec3a','\uec3b','\uec3c','\uec3d','\uec3e', + '\uec3f','\uec40','\uec41','\uec42','\uec43','\uec44','\uec45', + '\uec46','\uec47','\uec48','\uec49','\uec4a','\uec4b','\uec4c', + '\uec4d','\uec4e','\uec4f','\uec50','\uec51','\uec52','\uec53', + '\uec54','\uec55','\uec56','\uec57','\uec58','\uec59','\uec5a', + '\uec5b','\uec5c','\uec5d','\uec5e','\uec5f','\uec60','\uec61', + '\uec62','\uec63','\uec64','\uec65','\uec66','\uec67','\uec68', + '\uec69','\uec6a','\uec6b','\uec6c','\uec6d','\uec6e','\uec6f', + '\uec70','\uec71','\uec72','\uec73','\uec74','\uec75','\uec76', + '\uec77','\uec78','\uec79','\uec7a','\uec7b','\uec7c','\uec7d', + '\uec7e','\uec7f','\uec80','\uec81','\uec82','\uec83','\uec84', + '\uec85','\uec86','\uec87','\uec88','\uec89','\uec8a','\uec8b', + '\uec8c','\uec8d','\uec8e','\uec8f','\uec90','\uec91','\uec92', + '\uec93','\uec94','\uec95','\uec96','\uec97','\uec98','\uec99', + '\uec9a','\uec9b','\uec9c','\uec9d','\uec9e','\uec9f','\ueca0', + '\ueca1','\ueca2','\ueca3','\ueca4','\ueca5','\ueca6','\ueca7', + '\ueca8','\ueca9','\uecaa','\uecab','\uecac','\uecad','\uecae', + '\uecaf','\uecb0','\uecb1','\uecb2','\uecb3','\uecb4','\uecb5', + '\uecb6','\uecb7','\uecb8','\uecb9','\uecba','\uecbb','\uecbc', + '\uecbd','\uecbe','\uecbf','\uecc0','\uecc1','\uecc2','\uecc3', + '\uecc4','\uecc5','\uecc6','\uecc7','\uecc8','\uecc9','\uecca', + '\ueccb','\ueccc','\ueccd','\uecce','\ueccf','\uecd0','\uecd1', + '\uecd2','\uecd3','\uecd4','\uecd5','\uecd6','\uecd7','\uecd8', + '\uecd9','\uecda','\uecdb','\uecdc','\uecdd','\uecde','\uecdf', + '\uece0','\uece1','\uece2','\uece3','\uece4','\uece5','\uece6', + '\uece7','\uece8','\uece9','\uecea','\ueceb','\uecec','\ueced', + '\uecee','\uecef','\uecf0','\uecf1','\uecf2','\uecf3','\uecf4', + '\uecf5','\uecf6','\uecf7','\uecf8','\uecf9','\uecfa','\uecfb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+60416; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void fed00() { + char[] cs = new char[] { + '\ued00','\ued01','\ued02','\ued03','\ued04','\ued05','\ued06', + '\ued07','\ued08','\ued09','\ued0a','\ued0b','\ued0c','\ued0d', + '\ued0e','\ued0f','\ued10','\ued11','\ued12','\ued13','\ued14', + '\ued15','\ued16','\ued17','\ued18','\ued19','\ued1a','\ued1b', + '\ued1c','\ued1d','\ued1e','\ued1f','\ued20','\ued21','\ued22', + '\ued23','\ued24','\ued25','\ued26','\ued27','\ued28','\ued29', + '\ued2a','\ued2b','\ued2c','\ued2d','\ued2e','\ued2f','\ued30', + '\ued31','\ued32','\ued33','\ued34','\ued35','\ued36','\ued37', + '\ued38','\ued39','\ued3a','\ued3b','\ued3c','\ued3d','\ued3e', + '\ued3f','\ued40','\ued41','\ued42','\ued43','\ued44','\ued45', + '\ued46','\ued47','\ued48','\ued49','\ued4a','\ued4b','\ued4c', + '\ued4d','\ued4e','\ued4f','\ued50','\ued51','\ued52','\ued53', + '\ued54','\ued55','\ued56','\ued57','\ued58','\ued59','\ued5a', + '\ued5b','\ued5c','\ued5d','\ued5e','\ued5f','\ued60','\ued61', + '\ued62','\ued63','\ued64','\ued65','\ued66','\ued67','\ued68', + '\ued69','\ued6a','\ued6b','\ued6c','\ued6d','\ued6e','\ued6f', + '\ued70','\ued71','\ued72','\ued73','\ued74','\ued75','\ued76', + '\ued77','\ued78','\ued79','\ued7a','\ued7b','\ued7c','\ued7d', + '\ued7e','\ued7f','\ued80','\ued81','\ued82','\ued83','\ued84', + '\ued85','\ued86','\ued87','\ued88','\ued89','\ued8a','\ued8b', + '\ued8c','\ued8d','\ued8e','\ued8f','\ued90','\ued91','\ued92', + '\ued93','\ued94','\ued95','\ued96','\ued97','\ued98','\ued99', + '\ued9a','\ued9b','\ued9c','\ued9d','\ued9e','\ued9f','\ueda0', + '\ueda1','\ueda2','\ueda3','\ueda4','\ueda5','\ueda6','\ueda7', + '\ueda8','\ueda9','\uedaa','\uedab','\uedac','\uedad','\uedae', + '\uedaf','\uedb0','\uedb1','\uedb2','\uedb3','\uedb4','\uedb5', + '\uedb6','\uedb7','\uedb8','\uedb9','\uedba','\uedbb','\uedbc', + '\uedbd','\uedbe','\uedbf','\uedc0','\uedc1','\uedc2','\uedc3', + '\uedc4','\uedc5','\uedc6','\uedc7','\uedc8','\uedc9','\uedca', + '\uedcb','\uedcc','\uedcd','\uedce','\uedcf','\uedd0','\uedd1', + '\uedd2','\uedd3','\uedd4','\uedd5','\uedd6','\uedd7','\uedd8', + '\uedd9','\uedda','\ueddb','\ueddc','\ueddd','\uedde','\ueddf', + '\uede0','\uede1','\uede2','\uede3','\uede4','\uede5','\uede6', + '\uede7','\uede8','\uede9','\uedea','\uedeb','\uedec','\ueded', + '\uedee','\uedef','\uedf0','\uedf1','\uedf2','\uedf3','\uedf4', + '\uedf5','\uedf6','\uedf7','\uedf8','\uedf9','\uedfa','\uedfb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+60672; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void fee00() { + char[] cs = new char[] { + '\uee00','\uee01','\uee02','\uee03','\uee04','\uee05','\uee06', + '\uee07','\uee08','\uee09','\uee0a','\uee0b','\uee0c','\uee0d', + '\uee0e','\uee0f','\uee10','\uee11','\uee12','\uee13','\uee14', + '\uee15','\uee16','\uee17','\uee18','\uee19','\uee1a','\uee1b', + '\uee1c','\uee1d','\uee1e','\uee1f','\uee20','\uee21','\uee22', + '\uee23','\uee24','\uee25','\uee26','\uee27','\uee28','\uee29', + '\uee2a','\uee2b','\uee2c','\uee2d','\uee2e','\uee2f','\uee30', + '\uee31','\uee32','\uee33','\uee34','\uee35','\uee36','\uee37', + '\uee38','\uee39','\uee3a','\uee3b','\uee3c','\uee3d','\uee3e', + '\uee3f','\uee40','\uee41','\uee42','\uee43','\uee44','\uee45', + '\uee46','\uee47','\uee48','\uee49','\uee4a','\uee4b','\uee4c', + '\uee4d','\uee4e','\uee4f','\uee50','\uee51','\uee52','\uee53', + '\uee54','\uee55','\uee56','\uee57','\uee58','\uee59','\uee5a', + '\uee5b','\uee5c','\uee5d','\uee5e','\uee5f','\uee60','\uee61', + '\uee62','\uee63','\uee64','\uee65','\uee66','\uee67','\uee68', + '\uee69','\uee6a','\uee6b','\uee6c','\uee6d','\uee6e','\uee6f', + '\uee70','\uee71','\uee72','\uee73','\uee74','\uee75','\uee76', + '\uee77','\uee78','\uee79','\uee7a','\uee7b','\uee7c','\uee7d', + '\uee7e','\uee7f','\uee80','\uee81','\uee82','\uee83','\uee84', + '\uee85','\uee86','\uee87','\uee88','\uee89','\uee8a','\uee8b', + '\uee8c','\uee8d','\uee8e','\uee8f','\uee90','\uee91','\uee92', + '\uee93','\uee94','\uee95','\uee96','\uee97','\uee98','\uee99', + '\uee9a','\uee9b','\uee9c','\uee9d','\uee9e','\uee9f','\ueea0', + '\ueea1','\ueea2','\ueea3','\ueea4','\ueea5','\ueea6','\ueea7', + '\ueea8','\ueea9','\ueeaa','\ueeab','\ueeac','\ueead','\ueeae', + '\ueeaf','\ueeb0','\ueeb1','\ueeb2','\ueeb3','\ueeb4','\ueeb5', + '\ueeb6','\ueeb7','\ueeb8','\ueeb9','\ueeba','\ueebb','\ueebc', + '\ueebd','\ueebe','\ueebf','\ueec0','\ueec1','\ueec2','\ueec3', + '\ueec4','\ueec5','\ueec6','\ueec7','\ueec8','\ueec9','\ueeca', + '\ueecb','\ueecc','\ueecd','\ueece','\ueecf','\ueed0','\ueed1', + '\ueed2','\ueed3','\ueed4','\ueed5','\ueed6','\ueed7','\ueed8', + '\ueed9','\ueeda','\ueedb','\ueedc','\ueedd','\ueede','\ueedf', + '\ueee0','\ueee1','\ueee2','\ueee3','\ueee4','\ueee5','\ueee6', + '\ueee7','\ueee8','\ueee9','\ueeea','\ueeeb','\ueeec','\ueeed', + '\ueeee','\ueeef','\ueef0','\ueef1','\ueef2','\ueef3','\ueef4', + '\ueef5','\ueef6','\ueef7','\ueef8','\ueef9','\ueefa','\ueefb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+60928; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void fef00() { + char[] cs = new char[] { + '\uef00','\uef01','\uef02','\uef03','\uef04','\uef05','\uef06', + '\uef07','\uef08','\uef09','\uef0a','\uef0b','\uef0c','\uef0d', + '\uef0e','\uef0f','\uef10','\uef11','\uef12','\uef13','\uef14', + '\uef15','\uef16','\uef17','\uef18','\uef19','\uef1a','\uef1b', + '\uef1c','\uef1d','\uef1e','\uef1f','\uef20','\uef21','\uef22', + '\uef23','\uef24','\uef25','\uef26','\uef27','\uef28','\uef29', + '\uef2a','\uef2b','\uef2c','\uef2d','\uef2e','\uef2f','\uef30', + '\uef31','\uef32','\uef33','\uef34','\uef35','\uef36','\uef37', + '\uef38','\uef39','\uef3a','\uef3b','\uef3c','\uef3d','\uef3e', + '\uef3f','\uef40','\uef41','\uef42','\uef43','\uef44','\uef45', + '\uef46','\uef47','\uef48','\uef49','\uef4a','\uef4b','\uef4c', + '\uef4d','\uef4e','\uef4f','\uef50','\uef51','\uef52','\uef53', + '\uef54','\uef55','\uef56','\uef57','\uef58','\uef59','\uef5a', + '\uef5b','\uef5c','\uef5d','\uef5e','\uef5f','\uef60','\uef61', + '\uef62','\uef63','\uef64','\uef65','\uef66','\uef67','\uef68', + '\uef69','\uef6a','\uef6b','\uef6c','\uef6d','\uef6e','\uef6f', + '\uef70','\uef71','\uef72','\uef73','\uef74','\uef75','\uef76', + '\uef77','\uef78','\uef79','\uef7a','\uef7b','\uef7c','\uef7d', + '\uef7e','\uef7f','\uef80','\uef81','\uef82','\uef83','\uef84', + '\uef85','\uef86','\uef87','\uef88','\uef89','\uef8a','\uef8b', + '\uef8c','\uef8d','\uef8e','\uef8f','\uef90','\uef91','\uef92', + '\uef93','\uef94','\uef95','\uef96','\uef97','\uef98','\uef99', + '\uef9a','\uef9b','\uef9c','\uef9d','\uef9e','\uef9f','\uefa0', + '\uefa1','\uefa2','\uefa3','\uefa4','\uefa5','\uefa6','\uefa7', + '\uefa8','\uefa9','\uefaa','\uefab','\uefac','\uefad','\uefae', + '\uefaf','\uefb0','\uefb1','\uefb2','\uefb3','\uefb4','\uefb5', + '\uefb6','\uefb7','\uefb8','\uefb9','\uefba','\uefbb','\uefbc', + '\uefbd','\uefbe','\uefbf','\uefc0','\uefc1','\uefc2','\uefc3', + '\uefc4','\uefc5','\uefc6','\uefc7','\uefc8','\uefc9','\uefca', + '\uefcb','\uefcc','\uefcd','\uefce','\uefcf','\uefd0','\uefd1', + '\uefd2','\uefd3','\uefd4','\uefd5','\uefd6','\uefd7','\uefd8', + '\uefd9','\uefda','\uefdb','\uefdc','\uefdd','\uefde','\uefdf', + '\uefe0','\uefe1','\uefe2','\uefe3','\uefe4','\uefe5','\uefe6', + '\uefe7','\uefe8','\uefe9','\uefea','\uefeb','\uefec','\uefed', + '\uefee','\uefef','\ueff0','\ueff1','\ueff2','\ueff3','\ueff4', + '\ueff5','\ueff6','\ueff7','\ueff8','\ueff9','\ueffa','\ueffb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+61184; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void ff000() { + char[] cs = new char[] { + '\uf000','\uf001','\uf002','\uf003','\uf004','\uf005','\uf006', + '\uf007','\uf008','\uf009','\uf00a','\uf00b','\uf00c','\uf00d', + '\uf00e','\uf00f','\uf010','\uf011','\uf012','\uf013','\uf014', + '\uf015','\uf016','\uf017','\uf018','\uf019','\uf01a','\uf01b', + '\uf01c','\uf01d','\uf01e','\uf01f','\uf020','\uf021','\uf022', + '\uf023','\uf024','\uf025','\uf026','\uf027','\uf028','\uf029', + '\uf02a','\uf02b','\uf02c','\uf02d','\uf02e','\uf02f','\uf030', + '\uf031','\uf032','\uf033','\uf034','\uf035','\uf036','\uf037', + '\uf038','\uf039','\uf03a','\uf03b','\uf03c','\uf03d','\uf03e', + '\uf03f','\uf040','\uf041','\uf042','\uf043','\uf044','\uf045', + '\uf046','\uf047','\uf048','\uf049','\uf04a','\uf04b','\uf04c', + '\uf04d','\uf04e','\uf04f','\uf050','\uf051','\uf052','\uf053', + '\uf054','\uf055','\uf056','\uf057','\uf058','\uf059','\uf05a', + '\uf05b','\uf05c','\uf05d','\uf05e','\uf05f','\uf060','\uf061', + '\uf062','\uf063','\uf064','\uf065','\uf066','\uf067','\uf068', + '\uf069','\uf06a','\uf06b','\uf06c','\uf06d','\uf06e','\uf06f', + '\uf070','\uf071','\uf072','\uf073','\uf074','\uf075','\uf076', + '\uf077','\uf078','\uf079','\uf07a','\uf07b','\uf07c','\uf07d', + '\uf07e','\uf07f','\uf080','\uf081','\uf082','\uf083','\uf084', + '\uf085','\uf086','\uf087','\uf088','\uf089','\uf08a','\uf08b', + '\uf08c','\uf08d','\uf08e','\uf08f','\uf090','\uf091','\uf092', + '\uf093','\uf094','\uf095','\uf096','\uf097','\uf098','\uf099', + '\uf09a','\uf09b','\uf09c','\uf09d','\uf09e','\uf09f','\uf0a0', + '\uf0a1','\uf0a2','\uf0a3','\uf0a4','\uf0a5','\uf0a6','\uf0a7', + '\uf0a8','\uf0a9','\uf0aa','\uf0ab','\uf0ac','\uf0ad','\uf0ae', + '\uf0af','\uf0b0','\uf0b1','\uf0b2','\uf0b3','\uf0b4','\uf0b5', + '\uf0b6','\uf0b7','\uf0b8','\uf0b9','\uf0ba','\uf0bb','\uf0bc', + '\uf0bd','\uf0be','\uf0bf','\uf0c0','\uf0c1','\uf0c2','\uf0c3', + '\uf0c4','\uf0c5','\uf0c6','\uf0c7','\uf0c8','\uf0c9','\uf0ca', + '\uf0cb','\uf0cc','\uf0cd','\uf0ce','\uf0cf','\uf0d0','\uf0d1', + '\uf0d2','\uf0d3','\uf0d4','\uf0d5','\uf0d6','\uf0d7','\uf0d8', + '\uf0d9','\uf0da','\uf0db','\uf0dc','\uf0dd','\uf0de','\uf0df', + '\uf0e0','\uf0e1','\uf0e2','\uf0e3','\uf0e4','\uf0e5','\uf0e6', + '\uf0e7','\uf0e8','\uf0e9','\uf0ea','\uf0eb','\uf0ec','\uf0ed', + '\uf0ee','\uf0ef','\uf0f0','\uf0f1','\uf0f2','\uf0f3','\uf0f4', + '\uf0f5','\uf0f6','\uf0f7','\uf0f8','\uf0f9','\uf0fa','\uf0fb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+61440; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void ff100() { + char[] cs = new char[] { + '\uf100','\uf101','\uf102','\uf103','\uf104','\uf105','\uf106', + '\uf107','\uf108','\uf109','\uf10a','\uf10b','\uf10c','\uf10d', + '\uf10e','\uf10f','\uf110','\uf111','\uf112','\uf113','\uf114', + '\uf115','\uf116','\uf117','\uf118','\uf119','\uf11a','\uf11b', + '\uf11c','\uf11d','\uf11e','\uf11f','\uf120','\uf121','\uf122', + '\uf123','\uf124','\uf125','\uf126','\uf127','\uf128','\uf129', + '\uf12a','\uf12b','\uf12c','\uf12d','\uf12e','\uf12f','\uf130', + '\uf131','\uf132','\uf133','\uf134','\uf135','\uf136','\uf137', + '\uf138','\uf139','\uf13a','\uf13b','\uf13c','\uf13d','\uf13e', + '\uf13f','\uf140','\uf141','\uf142','\uf143','\uf144','\uf145', + '\uf146','\uf147','\uf148','\uf149','\uf14a','\uf14b','\uf14c', + '\uf14d','\uf14e','\uf14f','\uf150','\uf151','\uf152','\uf153', + '\uf154','\uf155','\uf156','\uf157','\uf158','\uf159','\uf15a', + '\uf15b','\uf15c','\uf15d','\uf15e','\uf15f','\uf160','\uf161', + '\uf162','\uf163','\uf164','\uf165','\uf166','\uf167','\uf168', + '\uf169','\uf16a','\uf16b','\uf16c','\uf16d','\uf16e','\uf16f', + '\uf170','\uf171','\uf172','\uf173','\uf174','\uf175','\uf176', + '\uf177','\uf178','\uf179','\uf17a','\uf17b','\uf17c','\uf17d', + '\uf17e','\uf17f','\uf180','\uf181','\uf182','\uf183','\uf184', + '\uf185','\uf186','\uf187','\uf188','\uf189','\uf18a','\uf18b', + '\uf18c','\uf18d','\uf18e','\uf18f','\uf190','\uf191','\uf192', + '\uf193','\uf194','\uf195','\uf196','\uf197','\uf198','\uf199', + '\uf19a','\uf19b','\uf19c','\uf19d','\uf19e','\uf19f','\uf1a0', + '\uf1a1','\uf1a2','\uf1a3','\uf1a4','\uf1a5','\uf1a6','\uf1a7', + '\uf1a8','\uf1a9','\uf1aa','\uf1ab','\uf1ac','\uf1ad','\uf1ae', + '\uf1af','\uf1b0','\uf1b1','\uf1b2','\uf1b3','\uf1b4','\uf1b5', + '\uf1b6','\uf1b7','\uf1b8','\uf1b9','\uf1ba','\uf1bb','\uf1bc', + '\uf1bd','\uf1be','\uf1bf','\uf1c0','\uf1c1','\uf1c2','\uf1c3', + '\uf1c4','\uf1c5','\uf1c6','\uf1c7','\uf1c8','\uf1c9','\uf1ca', + '\uf1cb','\uf1cc','\uf1cd','\uf1ce','\uf1cf','\uf1d0','\uf1d1', + '\uf1d2','\uf1d3','\uf1d4','\uf1d5','\uf1d6','\uf1d7','\uf1d8', + '\uf1d9','\uf1da','\uf1db','\uf1dc','\uf1dd','\uf1de','\uf1df', + '\uf1e0','\uf1e1','\uf1e2','\uf1e3','\uf1e4','\uf1e5','\uf1e6', + '\uf1e7','\uf1e8','\uf1e9','\uf1ea','\uf1eb','\uf1ec','\uf1ed', + '\uf1ee','\uf1ef','\uf1f0','\uf1f1','\uf1f2','\uf1f3','\uf1f4', + '\uf1f5','\uf1f6','\uf1f7','\uf1f8','\uf1f9','\uf1fa','\uf1fb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+61696; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void ff200() { + char[] cs = new char[] { + '\uf200','\uf201','\uf202','\uf203','\uf204','\uf205','\uf206', + '\uf207','\uf208','\uf209','\uf20a','\uf20b','\uf20c','\uf20d', + '\uf20e','\uf20f','\uf210','\uf211','\uf212','\uf213','\uf214', + '\uf215','\uf216','\uf217','\uf218','\uf219','\uf21a','\uf21b', + '\uf21c','\uf21d','\uf21e','\uf21f','\uf220','\uf221','\uf222', + '\uf223','\uf224','\uf225','\uf226','\uf227','\uf228','\uf229', + '\uf22a','\uf22b','\uf22c','\uf22d','\uf22e','\uf22f','\uf230', + '\uf231','\uf232','\uf233','\uf234','\uf235','\uf236','\uf237', + '\uf238','\uf239','\uf23a','\uf23b','\uf23c','\uf23d','\uf23e', + '\uf23f','\uf240','\uf241','\uf242','\uf243','\uf244','\uf245', + '\uf246','\uf247','\uf248','\uf249','\uf24a','\uf24b','\uf24c', + '\uf24d','\uf24e','\uf24f','\uf250','\uf251','\uf252','\uf253', + '\uf254','\uf255','\uf256','\uf257','\uf258','\uf259','\uf25a', + '\uf25b','\uf25c','\uf25d','\uf25e','\uf25f','\uf260','\uf261', + '\uf262','\uf263','\uf264','\uf265','\uf266','\uf267','\uf268', + '\uf269','\uf26a','\uf26b','\uf26c','\uf26d','\uf26e','\uf26f', + '\uf270','\uf271','\uf272','\uf273','\uf274','\uf275','\uf276', + '\uf277','\uf278','\uf279','\uf27a','\uf27b','\uf27c','\uf27d', + '\uf27e','\uf27f','\uf280','\uf281','\uf282','\uf283','\uf284', + '\uf285','\uf286','\uf287','\uf288','\uf289','\uf28a','\uf28b', + '\uf28c','\uf28d','\uf28e','\uf28f','\uf290','\uf291','\uf292', + '\uf293','\uf294','\uf295','\uf296','\uf297','\uf298','\uf299', + '\uf29a','\uf29b','\uf29c','\uf29d','\uf29e','\uf29f','\uf2a0', + '\uf2a1','\uf2a2','\uf2a3','\uf2a4','\uf2a5','\uf2a6','\uf2a7', + '\uf2a8','\uf2a9','\uf2aa','\uf2ab','\uf2ac','\uf2ad','\uf2ae', + '\uf2af','\uf2b0','\uf2b1','\uf2b2','\uf2b3','\uf2b4','\uf2b5', + '\uf2b6','\uf2b7','\uf2b8','\uf2b9','\uf2ba','\uf2bb','\uf2bc', + '\uf2bd','\uf2be','\uf2bf','\uf2c0','\uf2c1','\uf2c2','\uf2c3', + '\uf2c4','\uf2c5','\uf2c6','\uf2c7','\uf2c8','\uf2c9','\uf2ca', + '\uf2cb','\uf2cc','\uf2cd','\uf2ce','\uf2cf','\uf2d0','\uf2d1', + '\uf2d2','\uf2d3','\uf2d4','\uf2d5','\uf2d6','\uf2d7','\uf2d8', + '\uf2d9','\uf2da','\uf2db','\uf2dc','\uf2dd','\uf2de','\uf2df', + '\uf2e0','\uf2e1','\uf2e2','\uf2e3','\uf2e4','\uf2e5','\uf2e6', + '\uf2e7','\uf2e8','\uf2e9','\uf2ea','\uf2eb','\uf2ec','\uf2ed', + '\uf2ee','\uf2ef','\uf2f0','\uf2f1','\uf2f2','\uf2f3','\uf2f4', + '\uf2f5','\uf2f6','\uf2f7','\uf2f8','\uf2f9','\uf2fa','\uf2fb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+61952; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void ff300() { + char[] cs = new char[] { + '\uf300','\uf301','\uf302','\uf303','\uf304','\uf305','\uf306', + '\uf307','\uf308','\uf309','\uf30a','\uf30b','\uf30c','\uf30d', + '\uf30e','\uf30f','\uf310','\uf311','\uf312','\uf313','\uf314', + '\uf315','\uf316','\uf317','\uf318','\uf319','\uf31a','\uf31b', + '\uf31c','\uf31d','\uf31e','\uf31f','\uf320','\uf321','\uf322', + '\uf323','\uf324','\uf325','\uf326','\uf327','\uf328','\uf329', + '\uf32a','\uf32b','\uf32c','\uf32d','\uf32e','\uf32f','\uf330', + '\uf331','\uf332','\uf333','\uf334','\uf335','\uf336','\uf337', + '\uf338','\uf339','\uf33a','\uf33b','\uf33c','\uf33d','\uf33e', + '\uf33f','\uf340','\uf341','\uf342','\uf343','\uf344','\uf345', + '\uf346','\uf347','\uf348','\uf349','\uf34a','\uf34b','\uf34c', + '\uf34d','\uf34e','\uf34f','\uf350','\uf351','\uf352','\uf353', + '\uf354','\uf355','\uf356','\uf357','\uf358','\uf359','\uf35a', + '\uf35b','\uf35c','\uf35d','\uf35e','\uf35f','\uf360','\uf361', + '\uf362','\uf363','\uf364','\uf365','\uf366','\uf367','\uf368', + '\uf369','\uf36a','\uf36b','\uf36c','\uf36d','\uf36e','\uf36f', + '\uf370','\uf371','\uf372','\uf373','\uf374','\uf375','\uf376', + '\uf377','\uf378','\uf379','\uf37a','\uf37b','\uf37c','\uf37d', + '\uf37e','\uf37f','\uf380','\uf381','\uf382','\uf383','\uf384', + '\uf385','\uf386','\uf387','\uf388','\uf389','\uf38a','\uf38b', + '\uf38c','\uf38d','\uf38e','\uf38f','\uf390','\uf391','\uf392', + '\uf393','\uf394','\uf395','\uf396','\uf397','\uf398','\uf399', + '\uf39a','\uf39b','\uf39c','\uf39d','\uf39e','\uf39f','\uf3a0', + '\uf3a1','\uf3a2','\uf3a3','\uf3a4','\uf3a5','\uf3a6','\uf3a7', + '\uf3a8','\uf3a9','\uf3aa','\uf3ab','\uf3ac','\uf3ad','\uf3ae', + '\uf3af','\uf3b0','\uf3b1','\uf3b2','\uf3b3','\uf3b4','\uf3b5', + '\uf3b6','\uf3b7','\uf3b8','\uf3b9','\uf3ba','\uf3bb','\uf3bc', + '\uf3bd','\uf3be','\uf3bf','\uf3c0','\uf3c1','\uf3c2','\uf3c3', + '\uf3c4','\uf3c5','\uf3c6','\uf3c7','\uf3c8','\uf3c9','\uf3ca', + '\uf3cb','\uf3cc','\uf3cd','\uf3ce','\uf3cf','\uf3d0','\uf3d1', + '\uf3d2','\uf3d3','\uf3d4','\uf3d5','\uf3d6','\uf3d7','\uf3d8', + '\uf3d9','\uf3da','\uf3db','\uf3dc','\uf3dd','\uf3de','\uf3df', + '\uf3e0','\uf3e1','\uf3e2','\uf3e3','\uf3e4','\uf3e5','\uf3e6', + '\uf3e7','\uf3e8','\uf3e9','\uf3ea','\uf3eb','\uf3ec','\uf3ed', + '\uf3ee','\uf3ef','\uf3f0','\uf3f1','\uf3f2','\uf3f3','\uf3f4', + '\uf3f5','\uf3f6','\uf3f7','\uf3f8','\uf3f9','\uf3fa','\uf3fb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+62208; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void ff400() { + char[] cs = new char[] { + '\uf400','\uf401','\uf402','\uf403','\uf404','\uf405','\uf406', + '\uf407','\uf408','\uf409','\uf40a','\uf40b','\uf40c','\uf40d', + '\uf40e','\uf40f','\uf410','\uf411','\uf412','\uf413','\uf414', + '\uf415','\uf416','\uf417','\uf418','\uf419','\uf41a','\uf41b', + '\uf41c','\uf41d','\uf41e','\uf41f','\uf420','\uf421','\uf422', + '\uf423','\uf424','\uf425','\uf426','\uf427','\uf428','\uf429', + '\uf42a','\uf42b','\uf42c','\uf42d','\uf42e','\uf42f','\uf430', + '\uf431','\uf432','\uf433','\uf434','\uf435','\uf436','\uf437', + '\uf438','\uf439','\uf43a','\uf43b','\uf43c','\uf43d','\uf43e', + '\uf43f','\uf440','\uf441','\uf442','\uf443','\uf444','\uf445', + '\uf446','\uf447','\uf448','\uf449','\uf44a','\uf44b','\uf44c', + '\uf44d','\uf44e','\uf44f','\uf450','\uf451','\uf452','\uf453', + '\uf454','\uf455','\uf456','\uf457','\uf458','\uf459','\uf45a', + '\uf45b','\uf45c','\uf45d','\uf45e','\uf45f','\uf460','\uf461', + '\uf462','\uf463','\uf464','\uf465','\uf466','\uf467','\uf468', + '\uf469','\uf46a','\uf46b','\uf46c','\uf46d','\uf46e','\uf46f', + '\uf470','\uf471','\uf472','\uf473','\uf474','\uf475','\uf476', + '\uf477','\uf478','\uf479','\uf47a','\uf47b','\uf47c','\uf47d', + '\uf47e','\uf47f','\uf480','\uf481','\uf482','\uf483','\uf484', + '\uf485','\uf486','\uf487','\uf488','\uf489','\uf48a','\uf48b', + '\uf48c','\uf48d','\uf48e','\uf48f','\uf490','\uf491','\uf492', + '\uf493','\uf494','\uf495','\uf496','\uf497','\uf498','\uf499', + '\uf49a','\uf49b','\uf49c','\uf49d','\uf49e','\uf49f','\uf4a0', + '\uf4a1','\uf4a2','\uf4a3','\uf4a4','\uf4a5','\uf4a6','\uf4a7', + '\uf4a8','\uf4a9','\uf4aa','\uf4ab','\uf4ac','\uf4ad','\uf4ae', + '\uf4af','\uf4b0','\uf4b1','\uf4b2','\uf4b3','\uf4b4','\uf4b5', + '\uf4b6','\uf4b7','\uf4b8','\uf4b9','\uf4ba','\uf4bb','\uf4bc', + '\uf4bd','\uf4be','\uf4bf','\uf4c0','\uf4c1','\uf4c2','\uf4c3', + '\uf4c4','\uf4c5','\uf4c6','\uf4c7','\uf4c8','\uf4c9','\uf4ca', + '\uf4cb','\uf4cc','\uf4cd','\uf4ce','\uf4cf','\uf4d0','\uf4d1', + '\uf4d2','\uf4d3','\uf4d4','\uf4d5','\uf4d6','\uf4d7','\uf4d8', + '\uf4d9','\uf4da','\uf4db','\uf4dc','\uf4dd','\uf4de','\uf4df', + '\uf4e0','\uf4e1','\uf4e2','\uf4e3','\uf4e4','\uf4e5','\uf4e6', + '\uf4e7','\uf4e8','\uf4e9','\uf4ea','\uf4eb','\uf4ec','\uf4ed', + '\uf4ee','\uf4ef','\uf4f0','\uf4f1','\uf4f2','\uf4f3','\uf4f4', + '\uf4f5','\uf4f6','\uf4f7','\uf4f8','\uf4f9','\uf4fa','\uf4fb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+62464; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void ff500() { + char[] cs = new char[] { + '\uf500','\uf501','\uf502','\uf503','\uf504','\uf505','\uf506', + '\uf507','\uf508','\uf509','\uf50a','\uf50b','\uf50c','\uf50d', + '\uf50e','\uf50f','\uf510','\uf511','\uf512','\uf513','\uf514', + '\uf515','\uf516','\uf517','\uf518','\uf519','\uf51a','\uf51b', + '\uf51c','\uf51d','\uf51e','\uf51f','\uf520','\uf521','\uf522', + '\uf523','\uf524','\uf525','\uf526','\uf527','\uf528','\uf529', + '\uf52a','\uf52b','\uf52c','\uf52d','\uf52e','\uf52f','\uf530', + '\uf531','\uf532','\uf533','\uf534','\uf535','\uf536','\uf537', + '\uf538','\uf539','\uf53a','\uf53b','\uf53c','\uf53d','\uf53e', + '\uf53f','\uf540','\uf541','\uf542','\uf543','\uf544','\uf545', + '\uf546','\uf547','\uf548','\uf549','\uf54a','\uf54b','\uf54c', + '\uf54d','\uf54e','\uf54f','\uf550','\uf551','\uf552','\uf553', + '\uf554','\uf555','\uf556','\uf557','\uf558','\uf559','\uf55a', + '\uf55b','\uf55c','\uf55d','\uf55e','\uf55f','\uf560','\uf561', + '\uf562','\uf563','\uf564','\uf565','\uf566','\uf567','\uf568', + '\uf569','\uf56a','\uf56b','\uf56c','\uf56d','\uf56e','\uf56f', + '\uf570','\uf571','\uf572','\uf573','\uf574','\uf575','\uf576', + '\uf577','\uf578','\uf579','\uf57a','\uf57b','\uf57c','\uf57d', + '\uf57e','\uf57f','\uf580','\uf581','\uf582','\uf583','\uf584', + '\uf585','\uf586','\uf587','\uf588','\uf589','\uf58a','\uf58b', + '\uf58c','\uf58d','\uf58e','\uf58f','\uf590','\uf591','\uf592', + '\uf593','\uf594','\uf595','\uf596','\uf597','\uf598','\uf599', + '\uf59a','\uf59b','\uf59c','\uf59d','\uf59e','\uf59f','\uf5a0', + '\uf5a1','\uf5a2','\uf5a3','\uf5a4','\uf5a5','\uf5a6','\uf5a7', + '\uf5a8','\uf5a9','\uf5aa','\uf5ab','\uf5ac','\uf5ad','\uf5ae', + '\uf5af','\uf5b0','\uf5b1','\uf5b2','\uf5b3','\uf5b4','\uf5b5', + '\uf5b6','\uf5b7','\uf5b8','\uf5b9','\uf5ba','\uf5bb','\uf5bc', + '\uf5bd','\uf5be','\uf5bf','\uf5c0','\uf5c1','\uf5c2','\uf5c3', + '\uf5c4','\uf5c5','\uf5c6','\uf5c7','\uf5c8','\uf5c9','\uf5ca', + '\uf5cb','\uf5cc','\uf5cd','\uf5ce','\uf5cf','\uf5d0','\uf5d1', + '\uf5d2','\uf5d3','\uf5d4','\uf5d5','\uf5d6','\uf5d7','\uf5d8', + '\uf5d9','\uf5da','\uf5db','\uf5dc','\uf5dd','\uf5de','\uf5df', + '\uf5e0','\uf5e1','\uf5e2','\uf5e3','\uf5e4','\uf5e5','\uf5e6', + '\uf5e7','\uf5e8','\uf5e9','\uf5ea','\uf5eb','\uf5ec','\uf5ed', + '\uf5ee','\uf5ef','\uf5f0','\uf5f1','\uf5f2','\uf5f3','\uf5f4', + '\uf5f5','\uf5f6','\uf5f7','\uf5f8','\uf5f9','\uf5fa','\uf5fb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+62720; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void ff600() { + char[] cs = new char[] { + '\uf600','\uf601','\uf602','\uf603','\uf604','\uf605','\uf606', + '\uf607','\uf608','\uf609','\uf60a','\uf60b','\uf60c','\uf60d', + '\uf60e','\uf60f','\uf610','\uf611','\uf612','\uf613','\uf614', + '\uf615','\uf616','\uf617','\uf618','\uf619','\uf61a','\uf61b', + '\uf61c','\uf61d','\uf61e','\uf61f','\uf620','\uf621','\uf622', + '\uf623','\uf624','\uf625','\uf626','\uf627','\uf628','\uf629', + '\uf62a','\uf62b','\uf62c','\uf62d','\uf62e','\uf62f','\uf630', + '\uf631','\uf632','\uf633','\uf634','\uf635','\uf636','\uf637', + '\uf638','\uf639','\uf63a','\uf63b','\uf63c','\uf63d','\uf63e', + '\uf63f','\uf640','\uf641','\uf642','\uf643','\uf644','\uf645', + '\uf646','\uf647','\uf648','\uf649','\uf64a','\uf64b','\uf64c', + '\uf64d','\uf64e','\uf64f','\uf650','\uf651','\uf652','\uf653', + '\uf654','\uf655','\uf656','\uf657','\uf658','\uf659','\uf65a', + '\uf65b','\uf65c','\uf65d','\uf65e','\uf65f','\uf660','\uf661', + '\uf662','\uf663','\uf664','\uf665','\uf666','\uf667','\uf668', + '\uf669','\uf66a','\uf66b','\uf66c','\uf66d','\uf66e','\uf66f', + '\uf670','\uf671','\uf672','\uf673','\uf674','\uf675','\uf676', + '\uf677','\uf678','\uf679','\uf67a','\uf67b','\uf67c','\uf67d', + '\uf67e','\uf67f','\uf680','\uf681','\uf682','\uf683','\uf684', + '\uf685','\uf686','\uf687','\uf688','\uf689','\uf68a','\uf68b', + '\uf68c','\uf68d','\uf68e','\uf68f','\uf690','\uf691','\uf692', + '\uf693','\uf694','\uf695','\uf696','\uf697','\uf698','\uf699', + '\uf69a','\uf69b','\uf69c','\uf69d','\uf69e','\uf69f','\uf6a0', + '\uf6a1','\uf6a2','\uf6a3','\uf6a4','\uf6a5','\uf6a6','\uf6a7', + '\uf6a8','\uf6a9','\uf6aa','\uf6ab','\uf6ac','\uf6ad','\uf6ae', + '\uf6af','\uf6b0','\uf6b1','\uf6b2','\uf6b3','\uf6b4','\uf6b5', + '\uf6b6','\uf6b7','\uf6b8','\uf6b9','\uf6ba','\uf6bb','\uf6bc', + '\uf6bd','\uf6be','\uf6bf','\uf6c0','\uf6c1','\uf6c2','\uf6c3', + '\uf6c4','\uf6c5','\uf6c6','\uf6c7','\uf6c8','\uf6c9','\uf6ca', + '\uf6cb','\uf6cc','\uf6cd','\uf6ce','\uf6cf','\uf6d0','\uf6d1', + '\uf6d2','\uf6d3','\uf6d4','\uf6d5','\uf6d6','\uf6d7','\uf6d8', + '\uf6d9','\uf6da','\uf6db','\uf6dc','\uf6dd','\uf6de','\uf6df', + '\uf6e0','\uf6e1','\uf6e2','\uf6e3','\uf6e4','\uf6e5','\uf6e6', + '\uf6e7','\uf6e8','\uf6e9','\uf6ea','\uf6eb','\uf6ec','\uf6ed', + '\uf6ee','\uf6ef','\uf6f0','\uf6f1','\uf6f2','\uf6f3','\uf6f4', + '\uf6f5','\uf6f6','\uf6f7','\uf6f8','\uf6f9','\uf6fa','\uf6fb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+62976; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void ff700() { + char[] cs = new char[] { + '\uf700','\uf701','\uf702','\uf703','\uf704','\uf705','\uf706', + '\uf707','\uf708','\uf709','\uf70a','\uf70b','\uf70c','\uf70d', + '\uf70e','\uf70f','\uf710','\uf711','\uf712','\uf713','\uf714', + '\uf715','\uf716','\uf717','\uf718','\uf719','\uf71a','\uf71b', + '\uf71c','\uf71d','\uf71e','\uf71f','\uf720','\uf721','\uf722', + '\uf723','\uf724','\uf725','\uf726','\uf727','\uf728','\uf729', + '\uf72a','\uf72b','\uf72c','\uf72d','\uf72e','\uf72f','\uf730', + '\uf731','\uf732','\uf733','\uf734','\uf735','\uf736','\uf737', + '\uf738','\uf739','\uf73a','\uf73b','\uf73c','\uf73d','\uf73e', + '\uf73f','\uf740','\uf741','\uf742','\uf743','\uf744','\uf745', + '\uf746','\uf747','\uf748','\uf749','\uf74a','\uf74b','\uf74c', + '\uf74d','\uf74e','\uf74f','\uf750','\uf751','\uf752','\uf753', + '\uf754','\uf755','\uf756','\uf757','\uf758','\uf759','\uf75a', + '\uf75b','\uf75c','\uf75d','\uf75e','\uf75f','\uf760','\uf761', + '\uf762','\uf763','\uf764','\uf765','\uf766','\uf767','\uf768', + '\uf769','\uf76a','\uf76b','\uf76c','\uf76d','\uf76e','\uf76f', + '\uf770','\uf771','\uf772','\uf773','\uf774','\uf775','\uf776', + '\uf777','\uf778','\uf779','\uf77a','\uf77b','\uf77c','\uf77d', + '\uf77e','\uf77f','\uf780','\uf781','\uf782','\uf783','\uf784', + '\uf785','\uf786','\uf787','\uf788','\uf789','\uf78a','\uf78b', + '\uf78c','\uf78d','\uf78e','\uf78f','\uf790','\uf791','\uf792', + '\uf793','\uf794','\uf795','\uf796','\uf797','\uf798','\uf799', + '\uf79a','\uf79b','\uf79c','\uf79d','\uf79e','\uf79f','\uf7a0', + '\uf7a1','\uf7a2','\uf7a3','\uf7a4','\uf7a5','\uf7a6','\uf7a7', + '\uf7a8','\uf7a9','\uf7aa','\uf7ab','\uf7ac','\uf7ad','\uf7ae', + '\uf7af','\uf7b0','\uf7b1','\uf7b2','\uf7b3','\uf7b4','\uf7b5', + '\uf7b6','\uf7b7','\uf7b8','\uf7b9','\uf7ba','\uf7bb','\uf7bc', + '\uf7bd','\uf7be','\uf7bf','\uf7c0','\uf7c1','\uf7c2','\uf7c3', + '\uf7c4','\uf7c5','\uf7c6','\uf7c7','\uf7c8','\uf7c9','\uf7ca', + '\uf7cb','\uf7cc','\uf7cd','\uf7ce','\uf7cf','\uf7d0','\uf7d1', + '\uf7d2','\uf7d3','\uf7d4','\uf7d5','\uf7d6','\uf7d7','\uf7d8', + '\uf7d9','\uf7da','\uf7db','\uf7dc','\uf7dd','\uf7de','\uf7df', + '\uf7e0','\uf7e1','\uf7e2','\uf7e3','\uf7e4','\uf7e5','\uf7e6', + '\uf7e7','\uf7e8','\uf7e9','\uf7ea','\uf7eb','\uf7ec','\uf7ed', + '\uf7ee','\uf7ef','\uf7f0','\uf7f1','\uf7f2','\uf7f3','\uf7f4', + '\uf7f5','\uf7f6','\uf7f7','\uf7f8','\uf7f9','\uf7fa','\uf7fb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+63232; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void ff800() { + char[] cs = new char[] { + '\uf800','\uf801','\uf802','\uf803','\uf804','\uf805','\uf806', + '\uf807','\uf808','\uf809','\uf80a','\uf80b','\uf80c','\uf80d', + '\uf80e','\uf80f','\uf810','\uf811','\uf812','\uf813','\uf814', + '\uf815','\uf816','\uf817','\uf818','\uf819','\uf81a','\uf81b', + '\uf81c','\uf81d','\uf81e','\uf81f','\uf820','\uf821','\uf822', + '\uf823','\uf824','\uf825','\uf826','\uf827','\uf828','\uf829', + '\uf82a','\uf82b','\uf82c','\uf82d','\uf82e','\uf82f','\uf830', + '\uf831','\uf832','\uf833','\uf834','\uf835','\uf836','\uf837', + '\uf838','\uf839','\uf83a','\uf83b','\uf83c','\uf83d','\uf83e', + '\uf83f','\uf840','\uf841','\uf842','\uf843','\uf844','\uf845', + '\uf846','\uf847','\uf848','\uf849','\uf84a','\uf84b','\uf84c', + '\uf84d','\uf84e','\uf84f','\uf850','\uf851','\uf852','\uf853', + '\uf854','\uf855','\uf856','\uf857','\uf858','\uf859','\uf85a', + '\uf85b','\uf85c','\uf85d','\uf85e','\uf85f','\uf860','\uf861', + '\uf862','\uf863','\uf864','\uf865','\uf866','\uf867','\uf868', + '\uf869','\uf86a','\uf86b','\uf86c','\uf86d','\uf86e','\uf86f', + '\uf870','\uf871','\uf872','\uf873','\uf874','\uf875','\uf876', + '\uf877','\uf878','\uf879','\uf87a','\uf87b','\uf87c','\uf87d', + '\uf87e','\uf87f','\uf880','\uf881','\uf882','\uf883','\uf884', + '\uf885','\uf886','\uf887','\uf888','\uf889','\uf88a','\uf88b', + '\uf88c','\uf88d','\uf88e','\uf88f','\uf890','\uf891','\uf892', + '\uf893','\uf894','\uf895','\uf896','\uf897','\uf898','\uf899', + '\uf89a','\uf89b','\uf89c','\uf89d','\uf89e','\uf89f','\uf8a0', + '\uf8a1','\uf8a2','\uf8a3','\uf8a4','\uf8a5','\uf8a6','\uf8a7', + '\uf8a8','\uf8a9','\uf8aa','\uf8ab','\uf8ac','\uf8ad','\uf8ae', + '\uf8af','\uf8b0','\uf8b1','\uf8b2','\uf8b3','\uf8b4','\uf8b5', + '\uf8b6','\uf8b7','\uf8b8','\uf8b9','\uf8ba','\uf8bb','\uf8bc', + '\uf8bd','\uf8be','\uf8bf','\uf8c0','\uf8c1','\uf8c2','\uf8c3', + '\uf8c4','\uf8c5','\uf8c6','\uf8c7','\uf8c8','\uf8c9','\uf8ca', + '\uf8cb','\uf8cc','\uf8cd','\uf8ce','\uf8cf','\uf8d0','\uf8d1', + '\uf8d2','\uf8d3','\uf8d4','\uf8d5','\uf8d6','\uf8d7','\uf8d8', + '\uf8d9','\uf8da','\uf8db','\uf8dc','\uf8dd','\uf8de','\uf8df', + '\uf8e0','\uf8e1','\uf8e2','\uf8e3','\uf8e4','\uf8e5','\uf8e6', + '\uf8e7','\uf8e8','\uf8e9','\uf8ea','\uf8eb','\uf8ec','\uf8ed', + '\uf8ee','\uf8ef','\uf8f0','\uf8f1','\uf8f2','\uf8f3','\uf8f4', + '\uf8f5','\uf8f6','\uf8f7','\uf8f8','\uf8f9','\uf8fa','\uf8fb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+63488; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void ff900() { + char[] cs = new char[] { + '\uf900','\uf901','\uf902','\uf903','\uf904','\uf905','\uf906', + '\uf907','\uf908','\uf909','\uf90a','\uf90b','\uf90c','\uf90d', + '\uf90e','\uf90f','\uf910','\uf911','\uf912','\uf913','\uf914', + '\uf915','\uf916','\uf917','\uf918','\uf919','\uf91a','\uf91b', + '\uf91c','\uf91d','\uf91e','\uf91f','\uf920','\uf921','\uf922', + '\uf923','\uf924','\uf925','\uf926','\uf927','\uf928','\uf929', + '\uf92a','\uf92b','\uf92c','\uf92d','\uf92e','\uf92f','\uf930', + '\uf931','\uf932','\uf933','\uf934','\uf935','\uf936','\uf937', + '\uf938','\uf939','\uf93a','\uf93b','\uf93c','\uf93d','\uf93e', + '\uf93f','\uf940','\uf941','\uf942','\uf943','\uf944','\uf945', + '\uf946','\uf947','\uf948','\uf949','\uf94a','\uf94b','\uf94c', + '\uf94d','\uf94e','\uf94f','\uf950','\uf951','\uf952','\uf953', + '\uf954','\uf955','\uf956','\uf957','\uf958','\uf959','\uf95a', + '\uf95b','\uf95c','\uf95d','\uf95e','\uf95f','\uf960','\uf961', + '\uf962','\uf963','\uf964','\uf965','\uf966','\uf967','\uf968', + '\uf969','\uf96a','\uf96b','\uf96c','\uf96d','\uf96e','\uf96f', + '\uf970','\uf971','\uf972','\uf973','\uf974','\uf975','\uf976', + '\uf977','\uf978','\uf979','\uf97a','\uf97b','\uf97c','\uf97d', + '\uf97e','\uf97f','\uf980','\uf981','\uf982','\uf983','\uf984', + '\uf985','\uf986','\uf987','\uf988','\uf989','\uf98a','\uf98b', + '\uf98c','\uf98d','\uf98e','\uf98f','\uf990','\uf991','\uf992', + '\uf993','\uf994','\uf995','\uf996','\uf997','\uf998','\uf999', + '\uf99a','\uf99b','\uf99c','\uf99d','\uf99e','\uf99f','\uf9a0', + '\uf9a1','\uf9a2','\uf9a3','\uf9a4','\uf9a5','\uf9a6','\uf9a7', + '\uf9a8','\uf9a9','\uf9aa','\uf9ab','\uf9ac','\uf9ad','\uf9ae', + '\uf9af','\uf9b0','\uf9b1','\uf9b2','\uf9b3','\uf9b4','\uf9b5', + '\uf9b6','\uf9b7','\uf9b8','\uf9b9','\uf9ba','\uf9bb','\uf9bc', + '\uf9bd','\uf9be','\uf9bf','\uf9c0','\uf9c1','\uf9c2','\uf9c3', + '\uf9c4','\uf9c5','\uf9c6','\uf9c7','\uf9c8','\uf9c9','\uf9ca', + '\uf9cb','\uf9cc','\uf9cd','\uf9ce','\uf9cf','\uf9d0','\uf9d1', + '\uf9d2','\uf9d3','\uf9d4','\uf9d5','\uf9d6','\uf9d7','\uf9d8', + '\uf9d9','\uf9da','\uf9db','\uf9dc','\uf9dd','\uf9de','\uf9df', + '\uf9e0','\uf9e1','\uf9e2','\uf9e3','\uf9e4','\uf9e5','\uf9e6', + '\uf9e7','\uf9e8','\uf9e9','\uf9ea','\uf9eb','\uf9ec','\uf9ed', + '\uf9ee','\uf9ef','\uf9f0','\uf9f1','\uf9f2','\uf9f3','\uf9f4', + '\uf9f5','\uf9f6','\uf9f7','\uf9f8','\uf9f9','\uf9fa','\uf9fb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+63744; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void ffa00() { + char[] cs = new char[] { + '\ufa00','\ufa01','\ufa02','\ufa03','\ufa04','\ufa05','\ufa06', + '\ufa07','\ufa08','\ufa09','\ufa0a','\ufa0b','\ufa0c','\ufa0d', + '\ufa0e','\ufa0f','\ufa10','\ufa11','\ufa12','\ufa13','\ufa14', + '\ufa15','\ufa16','\ufa17','\ufa18','\ufa19','\ufa1a','\ufa1b', + '\ufa1c','\ufa1d','\ufa1e','\ufa1f','\ufa20','\ufa21','\ufa22', + '\ufa23','\ufa24','\ufa25','\ufa26','\ufa27','\ufa28','\ufa29', + '\ufa2a','\ufa2b','\ufa2c','\ufa2d','\ufa2e','\ufa2f','\ufa30', + '\ufa31','\ufa32','\ufa33','\ufa34','\ufa35','\ufa36','\ufa37', + '\ufa38','\ufa39','\ufa3a','\ufa3b','\ufa3c','\ufa3d','\ufa3e', + '\ufa3f','\ufa40','\ufa41','\ufa42','\ufa43','\ufa44','\ufa45', + '\ufa46','\ufa47','\ufa48','\ufa49','\ufa4a','\ufa4b','\ufa4c', + '\ufa4d','\ufa4e','\ufa4f','\ufa50','\ufa51','\ufa52','\ufa53', + '\ufa54','\ufa55','\ufa56','\ufa57','\ufa58','\ufa59','\ufa5a', + '\ufa5b','\ufa5c','\ufa5d','\ufa5e','\ufa5f','\ufa60','\ufa61', + '\ufa62','\ufa63','\ufa64','\ufa65','\ufa66','\ufa67','\ufa68', + '\ufa69','\ufa6a','\ufa6b','\ufa6c','\ufa6d','\ufa6e','\ufa6f', + '\ufa70','\ufa71','\ufa72','\ufa73','\ufa74','\ufa75','\ufa76', + '\ufa77','\ufa78','\ufa79','\ufa7a','\ufa7b','\ufa7c','\ufa7d', + '\ufa7e','\ufa7f','\ufa80','\ufa81','\ufa82','\ufa83','\ufa84', + '\ufa85','\ufa86','\ufa87','\ufa88','\ufa89','\ufa8a','\ufa8b', + '\ufa8c','\ufa8d','\ufa8e','\ufa8f','\ufa90','\ufa91','\ufa92', + '\ufa93','\ufa94','\ufa95','\ufa96','\ufa97','\ufa98','\ufa99', + '\ufa9a','\ufa9b','\ufa9c','\ufa9d','\ufa9e','\ufa9f','\ufaa0', + '\ufaa1','\ufaa2','\ufaa3','\ufaa4','\ufaa5','\ufaa6','\ufaa7', + '\ufaa8','\ufaa9','\ufaaa','\ufaab','\ufaac','\ufaad','\ufaae', + '\ufaaf','\ufab0','\ufab1','\ufab2','\ufab3','\ufab4','\ufab5', + '\ufab6','\ufab7','\ufab8','\ufab9','\ufaba','\ufabb','\ufabc', + '\ufabd','\ufabe','\ufabf','\ufac0','\ufac1','\ufac2','\ufac3', + '\ufac4','\ufac5','\ufac6','\ufac7','\ufac8','\ufac9','\ufaca', + '\ufacb','\ufacc','\ufacd','\uface','\ufacf','\ufad0','\ufad1', + '\ufad2','\ufad3','\ufad4','\ufad5','\ufad6','\ufad7','\ufad8', + '\ufad9','\ufada','\ufadb','\ufadc','\ufadd','\ufade','\ufadf', + '\ufae0','\ufae1','\ufae2','\ufae3','\ufae4','\ufae5','\ufae6', + '\ufae7','\ufae8','\ufae9','\ufaea','\ufaeb','\ufaec','\ufaed', + '\ufaee','\ufaef','\ufaf0','\ufaf1','\ufaf2','\ufaf3','\ufaf4', + '\ufaf5','\ufaf6','\ufaf7','\ufaf8','\ufaf9','\ufafa','\ufafb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+64000; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void ffb00() { + char[] cs = new char[] { + '\ufb00','\ufb01','\ufb02','\ufb03','\ufb04','\ufb05','\ufb06', + '\ufb07','\ufb08','\ufb09','\ufb0a','\ufb0b','\ufb0c','\ufb0d', + '\ufb0e','\ufb0f','\ufb10','\ufb11','\ufb12','\ufb13','\ufb14', + '\ufb15','\ufb16','\ufb17','\ufb18','\ufb19','\ufb1a','\ufb1b', + '\ufb1c','\ufb1d','\ufb1e','\ufb1f','\ufb20','\ufb21','\ufb22', + '\ufb23','\ufb24','\ufb25','\ufb26','\ufb27','\ufb28','\ufb29', + '\ufb2a','\ufb2b','\ufb2c','\ufb2d','\ufb2e','\ufb2f','\ufb30', + '\ufb31','\ufb32','\ufb33','\ufb34','\ufb35','\ufb36','\ufb37', + '\ufb38','\ufb39','\ufb3a','\ufb3b','\ufb3c','\ufb3d','\ufb3e', + '\ufb3f','\ufb40','\ufb41','\ufb42','\ufb43','\ufb44','\ufb45', + '\ufb46','\ufb47','\ufb48','\ufb49','\ufb4a','\ufb4b','\ufb4c', + '\ufb4d','\ufb4e','\ufb4f','\ufb50','\ufb51','\ufb52','\ufb53', + '\ufb54','\ufb55','\ufb56','\ufb57','\ufb58','\ufb59','\ufb5a', + '\ufb5b','\ufb5c','\ufb5d','\ufb5e','\ufb5f','\ufb60','\ufb61', + '\ufb62','\ufb63','\ufb64','\ufb65','\ufb66','\ufb67','\ufb68', + '\ufb69','\ufb6a','\ufb6b','\ufb6c','\ufb6d','\ufb6e','\ufb6f', + '\ufb70','\ufb71','\ufb72','\ufb73','\ufb74','\ufb75','\ufb76', + '\ufb77','\ufb78','\ufb79','\ufb7a','\ufb7b','\ufb7c','\ufb7d', + '\ufb7e','\ufb7f','\ufb80','\ufb81','\ufb82','\ufb83','\ufb84', + '\ufb85','\ufb86','\ufb87','\ufb88','\ufb89','\ufb8a','\ufb8b', + '\ufb8c','\ufb8d','\ufb8e','\ufb8f','\ufb90','\ufb91','\ufb92', + '\ufb93','\ufb94','\ufb95','\ufb96','\ufb97','\ufb98','\ufb99', + '\ufb9a','\ufb9b','\ufb9c','\ufb9d','\ufb9e','\ufb9f','\ufba0', + '\ufba1','\ufba2','\ufba3','\ufba4','\ufba5','\ufba6','\ufba7', + '\ufba8','\ufba9','\ufbaa','\ufbab','\ufbac','\ufbad','\ufbae', + '\ufbaf','\ufbb0','\ufbb1','\ufbb2','\ufbb3','\ufbb4','\ufbb5', + '\ufbb6','\ufbb7','\ufbb8','\ufbb9','\ufbba','\ufbbb','\ufbbc', + '\ufbbd','\ufbbe','\ufbbf','\ufbc0','\ufbc1','\ufbc2','\ufbc3', + '\ufbc4','\ufbc5','\ufbc6','\ufbc7','\ufbc8','\ufbc9','\ufbca', + '\ufbcb','\ufbcc','\ufbcd','\ufbce','\ufbcf','\ufbd0','\ufbd1', + '\ufbd2','\ufbd3','\ufbd4','\ufbd5','\ufbd6','\ufbd7','\ufbd8', + '\ufbd9','\ufbda','\ufbdb','\ufbdc','\ufbdd','\ufbde','\ufbdf', + '\ufbe0','\ufbe1','\ufbe2','\ufbe3','\ufbe4','\ufbe5','\ufbe6', + '\ufbe7','\ufbe8','\ufbe9','\ufbea','\ufbeb','\ufbec','\ufbed', + '\ufbee','\ufbef','\ufbf0','\ufbf1','\ufbf2','\ufbf3','\ufbf4', + '\ufbf5','\ufbf6','\ufbf7','\ufbf8','\ufbf9','\ufbfa','\ufbfb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+64256; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void ffc00() { + char[] cs = new char[] { + '\ufc00','\ufc01','\ufc02','\ufc03','\ufc04','\ufc05','\ufc06', + '\ufc07','\ufc08','\ufc09','\ufc0a','\ufc0b','\ufc0c','\ufc0d', + '\ufc0e','\ufc0f','\ufc10','\ufc11','\ufc12','\ufc13','\ufc14', + '\ufc15','\ufc16','\ufc17','\ufc18','\ufc19','\ufc1a','\ufc1b', + '\ufc1c','\ufc1d','\ufc1e','\ufc1f','\ufc20','\ufc21','\ufc22', + '\ufc23','\ufc24','\ufc25','\ufc26','\ufc27','\ufc28','\ufc29', + '\ufc2a','\ufc2b','\ufc2c','\ufc2d','\ufc2e','\ufc2f','\ufc30', + '\ufc31','\ufc32','\ufc33','\ufc34','\ufc35','\ufc36','\ufc37', + '\ufc38','\ufc39','\ufc3a','\ufc3b','\ufc3c','\ufc3d','\ufc3e', + '\ufc3f','\ufc40','\ufc41','\ufc42','\ufc43','\ufc44','\ufc45', + '\ufc46','\ufc47','\ufc48','\ufc49','\ufc4a','\ufc4b','\ufc4c', + '\ufc4d','\ufc4e','\ufc4f','\ufc50','\ufc51','\ufc52','\ufc53', + '\ufc54','\ufc55','\ufc56','\ufc57','\ufc58','\ufc59','\ufc5a', + '\ufc5b','\ufc5c','\ufc5d','\ufc5e','\ufc5f','\ufc60','\ufc61', + '\ufc62','\ufc63','\ufc64','\ufc65','\ufc66','\ufc67','\ufc68', + '\ufc69','\ufc6a','\ufc6b','\ufc6c','\ufc6d','\ufc6e','\ufc6f', + '\ufc70','\ufc71','\ufc72','\ufc73','\ufc74','\ufc75','\ufc76', + '\ufc77','\ufc78','\ufc79','\ufc7a','\ufc7b','\ufc7c','\ufc7d', + '\ufc7e','\ufc7f','\ufc80','\ufc81','\ufc82','\ufc83','\ufc84', + '\ufc85','\ufc86','\ufc87','\ufc88','\ufc89','\ufc8a','\ufc8b', + '\ufc8c','\ufc8d','\ufc8e','\ufc8f','\ufc90','\ufc91','\ufc92', + '\ufc93','\ufc94','\ufc95','\ufc96','\ufc97','\ufc98','\ufc99', + '\ufc9a','\ufc9b','\ufc9c','\ufc9d','\ufc9e','\ufc9f','\ufca0', + '\ufca1','\ufca2','\ufca3','\ufca4','\ufca5','\ufca6','\ufca7', + '\ufca8','\ufca9','\ufcaa','\ufcab','\ufcac','\ufcad','\ufcae', + '\ufcaf','\ufcb0','\ufcb1','\ufcb2','\ufcb3','\ufcb4','\ufcb5', + '\ufcb6','\ufcb7','\ufcb8','\ufcb9','\ufcba','\ufcbb','\ufcbc', + '\ufcbd','\ufcbe','\ufcbf','\ufcc0','\ufcc1','\ufcc2','\ufcc3', + '\ufcc4','\ufcc5','\ufcc6','\ufcc7','\ufcc8','\ufcc9','\ufcca', + '\ufccb','\ufccc','\ufccd','\ufcce','\ufccf','\ufcd0','\ufcd1', + '\ufcd2','\ufcd3','\ufcd4','\ufcd5','\ufcd6','\ufcd7','\ufcd8', + '\ufcd9','\ufcda','\ufcdb','\ufcdc','\ufcdd','\ufcde','\ufcdf', + '\ufce0','\ufce1','\ufce2','\ufce3','\ufce4','\ufce5','\ufce6', + '\ufce7','\ufce8','\ufce9','\ufcea','\ufceb','\ufcec','\ufced', + '\ufcee','\ufcef','\ufcf0','\ufcf1','\ufcf2','\ufcf3','\ufcf4', + '\ufcf5','\ufcf6','\ufcf7','\ufcf8','\ufcf9','\ufcfa','\ufcfb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+64512; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void ffd00() { + char[] cs = new char[] { + '\ufd00','\ufd01','\ufd02','\ufd03','\ufd04','\ufd05','\ufd06', + '\ufd07','\ufd08','\ufd09','\ufd0a','\ufd0b','\ufd0c','\ufd0d', + '\ufd0e','\ufd0f','\ufd10','\ufd11','\ufd12','\ufd13','\ufd14', + '\ufd15','\ufd16','\ufd17','\ufd18','\ufd19','\ufd1a','\ufd1b', + '\ufd1c','\ufd1d','\ufd1e','\ufd1f','\ufd20','\ufd21','\ufd22', + '\ufd23','\ufd24','\ufd25','\ufd26','\ufd27','\ufd28','\ufd29', + '\ufd2a','\ufd2b','\ufd2c','\ufd2d','\ufd2e','\ufd2f','\ufd30', + '\ufd31','\ufd32','\ufd33','\ufd34','\ufd35','\ufd36','\ufd37', + '\ufd38','\ufd39','\ufd3a','\ufd3b','\ufd3c','\ufd3d','\ufd3e', + '\ufd3f','\ufd40','\ufd41','\ufd42','\ufd43','\ufd44','\ufd45', + '\ufd46','\ufd47','\ufd48','\ufd49','\ufd4a','\ufd4b','\ufd4c', + '\ufd4d','\ufd4e','\ufd4f','\ufd50','\ufd51','\ufd52','\ufd53', + '\ufd54','\ufd55','\ufd56','\ufd57','\ufd58','\ufd59','\ufd5a', + '\ufd5b','\ufd5c','\ufd5d','\ufd5e','\ufd5f','\ufd60','\ufd61', + '\ufd62','\ufd63','\ufd64','\ufd65','\ufd66','\ufd67','\ufd68', + '\ufd69','\ufd6a','\ufd6b','\ufd6c','\ufd6d','\ufd6e','\ufd6f', + '\ufd70','\ufd71','\ufd72','\ufd73','\ufd74','\ufd75','\ufd76', + '\ufd77','\ufd78','\ufd79','\ufd7a','\ufd7b','\ufd7c','\ufd7d', + '\ufd7e','\ufd7f','\ufd80','\ufd81','\ufd82','\ufd83','\ufd84', + '\ufd85','\ufd86','\ufd87','\ufd88','\ufd89','\ufd8a','\ufd8b', + '\ufd8c','\ufd8d','\ufd8e','\ufd8f','\ufd90','\ufd91','\ufd92', + '\ufd93','\ufd94','\ufd95','\ufd96','\ufd97','\ufd98','\ufd99', + '\ufd9a','\ufd9b','\ufd9c','\ufd9d','\ufd9e','\ufd9f','\ufda0', + '\ufda1','\ufda2','\ufda3','\ufda4','\ufda5','\ufda6','\ufda7', + '\ufda8','\ufda9','\ufdaa','\ufdab','\ufdac','\ufdad','\ufdae', + '\ufdaf','\ufdb0','\ufdb1','\ufdb2','\ufdb3','\ufdb4','\ufdb5', + '\ufdb6','\ufdb7','\ufdb8','\ufdb9','\ufdba','\ufdbb','\ufdbc', + '\ufdbd','\ufdbe','\ufdbf','\ufdc0','\ufdc1','\ufdc2','\ufdc3', + '\ufdc4','\ufdc5','\ufdc6','\ufdc7','\ufdc8','\ufdc9','\ufdca', + '\ufdcb','\ufdcc','\ufdcd','\ufdce','\ufdcf','\ufdd0','\ufdd1', + '\ufdd2','\ufdd3','\ufdd4','\ufdd5','\ufdd6','\ufdd7','\ufdd8', + '\ufdd9','\ufdda','\ufddb','\ufddc','\ufddd','\ufdde','\ufddf', + '\ufde0','\ufde1','\ufde2','\ufde3','\ufde4','\ufde5','\ufde6', + '\ufde7','\ufde8','\ufde9','\ufdea','\ufdeb','\ufdec','\ufded', + '\ufdee','\ufdef','\ufdf0','\ufdf1','\ufdf2','\ufdf3','\ufdf4', + '\ufdf5','\ufdf6','\ufdf7','\ufdf8','\ufdf9','\ufdfa','\ufdfb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+64768; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void ffe00() { + char[] cs = new char[] { + '\ufe00','\ufe01','\ufe02','\ufe03','\ufe04','\ufe05','\ufe06', + '\ufe07','\ufe08','\ufe09','\ufe0a','\ufe0b','\ufe0c','\ufe0d', + '\ufe0e','\ufe0f','\ufe10','\ufe11','\ufe12','\ufe13','\ufe14', + '\ufe15','\ufe16','\ufe17','\ufe18','\ufe19','\ufe1a','\ufe1b', + '\ufe1c','\ufe1d','\ufe1e','\ufe1f','\ufe20','\ufe21','\ufe22', + '\ufe23','\ufe24','\ufe25','\ufe26','\ufe27','\ufe28','\ufe29', + '\ufe2a','\ufe2b','\ufe2c','\ufe2d','\ufe2e','\ufe2f','\ufe30', + '\ufe31','\ufe32','\ufe33','\ufe34','\ufe35','\ufe36','\ufe37', + '\ufe38','\ufe39','\ufe3a','\ufe3b','\ufe3c','\ufe3d','\ufe3e', + '\ufe3f','\ufe40','\ufe41','\ufe42','\ufe43','\ufe44','\ufe45', + '\ufe46','\ufe47','\ufe48','\ufe49','\ufe4a','\ufe4b','\ufe4c', + '\ufe4d','\ufe4e','\ufe4f','\ufe50','\ufe51','\ufe52','\ufe53', + '\ufe54','\ufe55','\ufe56','\ufe57','\ufe58','\ufe59','\ufe5a', + '\ufe5b','\ufe5c','\ufe5d','\ufe5e','\ufe5f','\ufe60','\ufe61', + '\ufe62','\ufe63','\ufe64','\ufe65','\ufe66','\ufe67','\ufe68', + '\ufe69','\ufe6a','\ufe6b','\ufe6c','\ufe6d','\ufe6e','\ufe6f', + '\ufe70','\ufe71','\ufe72','\ufe73','\ufe74','\ufe75','\ufe76', + '\ufe77','\ufe78','\ufe79','\ufe7a','\ufe7b','\ufe7c','\ufe7d', + '\ufe7e','\ufe7f','\ufe80','\ufe81','\ufe82','\ufe83','\ufe84', + '\ufe85','\ufe86','\ufe87','\ufe88','\ufe89','\ufe8a','\ufe8b', + '\ufe8c','\ufe8d','\ufe8e','\ufe8f','\ufe90','\ufe91','\ufe92', + '\ufe93','\ufe94','\ufe95','\ufe96','\ufe97','\ufe98','\ufe99', + '\ufe9a','\ufe9b','\ufe9c','\ufe9d','\ufe9e','\ufe9f','\ufea0', + '\ufea1','\ufea2','\ufea3','\ufea4','\ufea5','\ufea6','\ufea7', + '\ufea8','\ufea9','\ufeaa','\ufeab','\ufeac','\ufead','\ufeae', + '\ufeaf','\ufeb0','\ufeb1','\ufeb2','\ufeb3','\ufeb4','\ufeb5', + '\ufeb6','\ufeb7','\ufeb8','\ufeb9','\ufeba','\ufebb','\ufebc', + '\ufebd','\ufebe','\ufebf','\ufec0','\ufec1','\ufec2','\ufec3', + '\ufec4','\ufec5','\ufec6','\ufec7','\ufec8','\ufec9','\ufeca', + '\ufecb','\ufecc','\ufecd','\ufece','\ufecf','\ufed0','\ufed1', + '\ufed2','\ufed3','\ufed4','\ufed5','\ufed6','\ufed7','\ufed8', + '\ufed9','\ufeda','\ufedb','\ufedc','\ufedd','\ufede','\ufedf', + '\ufee0','\ufee1','\ufee2','\ufee3','\ufee4','\ufee5','\ufee6', + '\ufee7','\ufee8','\ufee9','\ufeea','\ufeeb','\ufeec','\ufeed', + '\ufeee','\ufeef','\ufef0','\ufef1','\ufef2','\ufef3','\ufef4', + '\ufef5','\ufef6','\ufef7','\ufef8','\ufef9','\ufefa','\ufefb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+65024; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + static void fff00() { + char[] cs = new char[] { + '\uff00','\uff01','\uff02','\uff03','\uff04','\uff05','\uff06', + '\uff07','\uff08','\uff09','\uff0a','\uff0b','\uff0c','\uff0d', + '\uff0e','\uff0f','\uff10','\uff11','\uff12','\uff13','\uff14', + '\uff15','\uff16','\uff17','\uff18','\uff19','\uff1a','\uff1b', + '\uff1c','\uff1d','\uff1e','\uff1f','\uff20','\uff21','\uff22', + '\uff23','\uff24','\uff25','\uff26','\uff27','\uff28','\uff29', + '\uff2a','\uff2b','\uff2c','\uff2d','\uff2e','\uff2f','\uff30', + '\uff31','\uff32','\uff33','\uff34','\uff35','\uff36','\uff37', + '\uff38','\uff39','\uff3a','\uff3b','\uff3c','\uff3d','\uff3e', + '\uff3f','\uff40','\uff41','\uff42','\uff43','\uff44','\uff45', + '\uff46','\uff47','\uff48','\uff49','\uff4a','\uff4b','\uff4c', + '\uff4d','\uff4e','\uff4f','\uff50','\uff51','\uff52','\uff53', + '\uff54','\uff55','\uff56','\uff57','\uff58','\uff59','\uff5a', + '\uff5b','\uff5c','\uff5d','\uff5e','\uff5f','\uff60','\uff61', + '\uff62','\uff63','\uff64','\uff65','\uff66','\uff67','\uff68', + '\uff69','\uff6a','\uff6b','\uff6c','\uff6d','\uff6e','\uff6f', + '\uff70','\uff71','\uff72','\uff73','\uff74','\uff75','\uff76', + '\uff77','\uff78','\uff79','\uff7a','\uff7b','\uff7c','\uff7d', + '\uff7e','\uff7f','\uff80','\uff81','\uff82','\uff83','\uff84', + '\uff85','\uff86','\uff87','\uff88','\uff89','\uff8a','\uff8b', + '\uff8c','\uff8d','\uff8e','\uff8f','\uff90','\uff91','\uff92', + '\uff93','\uff94','\uff95','\uff96','\uff97','\uff98','\uff99', + '\uff9a','\uff9b','\uff9c','\uff9d','\uff9e','\uff9f','\uffa0', + '\uffa1','\uffa2','\uffa3','\uffa4','\uffa5','\uffa6','\uffa7', + '\uffa8','\uffa9','\uffaa','\uffab','\uffac','\uffad','\uffae', + '\uffaf','\uffb0','\uffb1','\uffb2','\uffb3','\uffb4','\uffb5', + '\uffb6','\uffb7','\uffb8','\uffb9','\uffba','\uffbb','\uffbc', + '\uffbd','\uffbe','\uffbf','\uffc0','\uffc1','\uffc2','\uffc3', + '\uffc4','\uffc5','\uffc6','\uffc7','\uffc8','\uffc9','\uffca', + '\uffcb','\uffcc','\uffcd','\uffce','\uffcf','\uffd0','\uffd1', + '\uffd2','\uffd3','\uffd4','\uffd5','\uffd6','\uffd7','\uffd8', + '\uffd9','\uffda','\uffdb','\uffdc','\uffdd','\uffde','\uffdf', + '\uffe0','\uffe1','\uffe2','\uffe3','\uffe4','\uffe5','\uffe6', + '\uffe7','\uffe8','\uffe9','\uffea','\uffeb','\uffec','\uffed', + '\uffee','\uffef','\ufff0','\ufff1','\ufff2','\ufff3','\ufff4', + '\ufff5','\ufff6','\ufff7','\ufff8','\ufff9','\ufffa','\ufffb', + }; + for (int i = 0; i < cs.length; i++) { + int want = i+65280; + int have = (int)cs[i]; + Tester.check(want==have, have + "!='\\u"+Integer.toHexString(want)+"'"); + } + } + public static void main(String[] args) { + f0(); + f100(); + f200(); + f300(); + f400(); + f500(); + f600(); + f700(); + f800(); + f900(); + fa00(); + fb00(); + fc00(); + fd00(); + fe00(); + ff00(); + f1000(); + f1100(); + f1200(); + f1300(); + f1400(); + f1500(); + f1600(); + f1700(); + f1800(); + f1900(); + f1a00(); + f1b00(); + f1c00(); + f1d00(); + f1e00(); + f1f00(); + f2000(); + f2100(); + f2200(); + f2300(); + f2400(); + f2500(); + f2600(); + f2700(); + f2800(); + f2900(); + f2a00(); + f2b00(); + f2c00(); + f2d00(); + f2e00(); + f2f00(); + f3000(); + f3100(); + f3200(); + f3300(); + f3400(); + f3500(); + f3600(); + f3700(); + f3800(); + f3900(); + f3a00(); + f3b00(); + f3c00(); + f3d00(); + f3e00(); + f3f00(); + f4000(); + f4100(); + f4200(); + f4300(); + f4400(); + f4500(); + f4600(); + f4700(); + f4800(); + f4900(); + f4a00(); + f4b00(); + f4c00(); + f4d00(); + f4e00(); + f4f00(); + f5000(); + f5100(); + f5200(); + f5300(); + f5400(); + f5500(); + f5600(); + f5700(); + f5800(); + f5900(); + f5a00(); + f5b00(); + f5c00(); + f5d00(); + f5e00(); + f5f00(); + f6000(); + f6100(); + f6200(); + f6300(); + f6400(); + f6500(); + f6600(); + f6700(); + f6800(); + f6900(); + f6a00(); + f6b00(); + f6c00(); + f6d00(); + f6e00(); + f6f00(); + f7000(); + f7100(); + f7200(); + f7300(); + f7400(); + f7500(); + f7600(); + f7700(); + f7800(); + f7900(); + f7a00(); + f7b00(); + f7c00(); + f7d00(); + f7e00(); + f7f00(); + f8000(); + f8100(); + f8200(); + f8300(); + f8400(); + f8500(); + f8600(); + f8700(); + f8800(); + f8900(); + f8a00(); + f8b00(); + f8c00(); + f8d00(); + f8e00(); + f8f00(); + f9000(); + f9100(); + f9200(); + f9300(); + f9400(); + f9500(); + f9600(); + f9700(); + f9800(); + f9900(); + f9a00(); + f9b00(); + f9c00(); + f9d00(); + f9e00(); + f9f00(); + fa000(); + fa100(); + fa200(); + fa300(); + fa400(); + fa500(); + fa600(); + fa700(); + fa800(); + fa900(); + faa00(); + fab00(); + fac00(); + fad00(); + fae00(); + faf00(); + fb000(); + fb100(); + fb200(); + fb300(); + fb400(); + fb500(); + fb600(); + fb700(); + fb800(); + fb900(); + fba00(); + fbb00(); + fbc00(); + fbd00(); + fbe00(); + fbf00(); + fc000(); + fc100(); + fc200(); + fc300(); + fc400(); + fc500(); + fc600(); + fc700(); + fc800(); + fc900(); + fca00(); + fcb00(); + fcc00(); + fcd00(); + fce00(); + fcf00(); + fd000(); + fd100(); + fd200(); + fd300(); + fd400(); + fd500(); + fd600(); + fd700(); + fd800(); + fd900(); + fda00(); + fdb00(); + fdc00(); + fdd00(); + fde00(); + fdf00(); + fe000(); + fe100(); + fe200(); + fe300(); + fe400(); + fe500(); + fe600(); + fe700(); + fe800(); + fe900(); + fea00(); + feb00(); + fec00(); + fed00(); + fee00(); + fef00(); + ff000(); + ff100(); + ff200(); + ff300(); + ff400(); + ff500(); + ff600(); + ff700(); + ff800(); + ff900(); + ffa00(); + ffb00(); + ffc00(); + ffd00(); + ffe00(); + fff00(); + } +} diff --git a/tests/pureJava/CircularFolding.java b/tests/pureJava/CircularFolding.java new file mode 100644 index 000000000..2d5d39106 --- /dev/null +++ b/tests/pureJava/CircularFolding.java @@ -0,0 +1,19 @@ +public class CircularFolding { + static final int x = Hoo.x * 8; + + public static void main(String[] args) { + switch (args.length) { + case x: System.err.println("this"); + case Hoo.x: System.err.println("shouldn't"); + case Goo.x: System.err.println("compile"); + } + } +} + +class Hoo { + static final int x = Goo.x - 3; +} + +class Goo { + static final int x = 2 + CircularFolding.x; +} diff --git a/tests/pureJava/ClassWithInnerInterfaces.java b/tests/pureJava/ClassWithInnerInterfaces.java new file mode 100644 index 000000000..239ce0842 --- /dev/null +++ b/tests/pureJava/ClassWithInnerInterfaces.java @@ -0,0 +1,7 @@ +public class ClassWithInnerInterfaces { + public interface Inner1 { + public interface Inner2 { + public interface Inner3 {} + } + } +} diff --git a/tests/pureJava/ClassWithStaticInnerInterfaces.java b/tests/pureJava/ClassWithStaticInnerInterfaces.java new file mode 100644 index 000000000..eabefea65 --- /dev/null +++ b/tests/pureJava/ClassWithStaticInnerInterfaces.java @@ -0,0 +1,7 @@ +public class ClassWithStaticInnerInterfaces { + public static interface Inner1 { + public static interface Inner2 { + public static interface Inner3 {} + } + } +} diff --git a/tests/pureJava/CommentSyntax.java b/tests/pureJava/CommentSyntax.java new file mode 100644 index 000000000..ac449b3b2 --- /dev/null +++ b/tests/pureJava/CommentSyntax.java @@ -0,0 +1,19 @@ +/** this is a comment */ + +/* So is this */ + +// so is this, and so is the form below + +/**/ + +public class CommentSyntax { + public static void main(String[] args) { + /** this is a comment */ + + /* So is this */ + + // so is this, and so is the form below + + /**/ + } +} diff --git a/tests/pureJava/ConstantValueConversion.java b/tests/pureJava/ConstantValueConversion.java new file mode 100644 index 000000000..d5e375545 --- /dev/null +++ b/tests/pureJava/ConstantValueConversion.java @@ -0,0 +1,7 @@ +public class ConstantValueConversion { + // if this isn't stored as 3L, we're not verifying. + public static final long FOO = 3; + + public static void main(String[] args) { + } +} diff --git a/tests/pureJava/ConstructorFlow.java b/tests/pureJava/ConstructorFlow.java new file mode 100644 index 000000000..a0a8f36fe --- /dev/null +++ b/tests/pureJava/ConstructorFlow.java @@ -0,0 +1,37 @@ + +import org.aspectj.testing.Tester; +import org.aspectj.testing.Tester; + +/** @testcase from biojava: org/biojava/bio/dp/SimpleMarkovModel.java:384 */ +public class ConstructorFlow { + final Runnable runner; // remove final and compile succeeds + Runnable nonfinal; + String one; + /** @testcase PUREJAVA flow analysis where final variable set in another constructor */ + public ConstructorFlow(String one, String two) { + this(one); + runner.run(); // incorrect CE: Field runner might not have a value + nonfinal.run(); // expecting NPE + } + + public ConstructorFlow(String one) { + this.one = one; + runner = new Runnable() { + public void run() { + Tester.event("runner.run()"); + }}; + } + + public static void main(String[] args) { + Tester.expectEvent("NullPointerException"); + Tester.expectEvent("runner.run()"); + try { + new ConstructorFlow("one", "two"); + Tester.check(false, "expected NPE"); + } catch (NullPointerException npe) { + Tester.event("NullPointerException"); + } + Tester.checkAllEvents(); + } +} + diff --git a/tests/pureJava/DeclarationsInLoopsCE.java b/tests/pureJava/DeclarationsInLoopsCE.java new file mode 100644 index 000000000..cc12f2b57 --- /dev/null +++ b/tests/pureJava/DeclarationsInLoopsCE.java @@ -0,0 +1,11 @@ + + +/** @testcase PR#722 loop expressions not declarations */ +public class DeclarationsInLoopsCE { + void method() { + boolean b = true; + for (;b;) int j = 0; // CE 7 illegal start of expression, not a statement + while (b) int k = 0; // CE 8 illegal start of expression, not a statement + do int l = 0; while (b); // CE 9 illegal start of expression, not a statement + } +} diff --git a/tests/pureJava/DefaultConsAndInner.java b/tests/pureJava/DefaultConsAndInner.java new file mode 100644 index 000000000..c01c7fe38 --- /dev/null +++ b/tests/pureJava/DefaultConsAndInner.java @@ -0,0 +1,16 @@ +import org.aspectj.testing.Tester; + +public class DefaultConsAndInner { + public static void main(String[] args) { + new Outer.Inner("test"); + Tester.check("test"); + } +} + +class Outer { + static class Inner extends Outer { + public Inner(String s) { + Tester.note(s); + } + } +} diff --git a/tests/pureJava/DivOpMustHappen.java b/tests/pureJava/DivOpMustHappen.java new file mode 100644 index 000000000..91a2fd0a3 --- /dev/null +++ b/tests/pureJava/DivOpMustHappen.java @@ -0,0 +1,17 @@ +import org.aspectj.testing.Tester; + +public class DivOpMustHappen { + static int i = 0; + static int j = 1; + + public static void main(String[] args) { + boolean threw = false; + try { + switch(j / i) {} + } catch (Exception e) { + threw = true; + } + Tester.check(threw, "didn't throw divbyzero exception"); + } +} + diff --git a/tests/pureJava/FinalStaticField.java b/tests/pureJava/FinalStaticField.java new file mode 100644 index 000000000..b1ae60dc5 --- /dev/null +++ b/tests/pureJava/FinalStaticField.java @@ -0,0 +1,40 @@ + +import java.lang.reflect.*; +import org.aspectj.testing.Tester; + + +class C{} + +class D { + public static final C public_c = new C(); + private static final C private_c = new C(); + protected static final C protected_c = new C(); + static final C default_c = new C(); +} + +/** @testcase PR#866 final static fields not marked as such in binaries */ +public class FinalStaticField { + public static final String[] FIELDS = new String[] + { "public_c", "private_c", "protected_c", "default_c" }; + + public static void main(String[] args) { + + Tester.expectEvents(FIELDS); + + Field[] fields = D.class.getDeclaredFields(); + StringBuffer failures = new StringBuffer(); + for (int i = 0; i < fields.length; i++) { + String fieldName = fields[i].getName(); + Tester.event(fieldName); + if (!fieldName.endsWith("_c")) { + Tester.check(false, "unexpected field: " + fieldName); + } else if (!(Modifier.isFinal(fields[i].getModifiers()))) { + failures.append(fieldName + " "); + } + } + Tester.checkAllEvents(); + if (0 < failures.length()) { + Tester.check(false, failures.toString()); + } + } +} diff --git a/tests/pureJava/FinallyAndReturns.java b/tests/pureJava/FinallyAndReturns.java new file mode 100644 index 000000000..db25b82ae --- /dev/null +++ b/tests/pureJava/FinallyAndReturns.java @@ -0,0 +1,28 @@ +import org.aspectj.testing.Tester; + +public class FinallyAndReturns { + public static void main(String[] args) { + Tester.checkEqual(m(), "hi"); + Tester.check("finally"); + + Tester.checkEqual(m1(), "hi1"); + Tester.check("trying"); + } + + public static String m() { + try { + return "hi"; + } finally { + Tester.note("finally"); + } + } + + public static String m1() { + try { + Tester.note("trying"); + } finally { + return "hi1"; + } + } + +} diff --git a/tests/pureJava/Flow.java b/tests/pureJava/Flow.java new file mode 100644 index 000000000..ddd11c3b9 --- /dev/null +++ b/tests/pureJava/Flow.java @@ -0,0 +1,18 @@ +import org.aspectj.testing.Tester; + +public class Flow { + public static void main(String[] args) { + Tester.checkEqual(m(), 42, "m()"); + Tester.checkEqual(n(), 42, "n()"); + } + + static int m() { + if (true) return 42; + return 3; + } + + static int n() { + { if(true) return 42; } + return 4; + } +} diff --git a/tests/pureJava/FullNames.java b/tests/pureJava/FullNames.java new file mode 100644 index 000000000..d2621b130 --- /dev/null +++ b/tests/pureJava/FullNames.java @@ -0,0 +1,30 @@ +import org.aspectj.testing.Tester; +import org.aspectj.testing.Tester; +public class FullNames { + public static void main(String[] args) { + new FullNames().realMain(args); + } + public void realMain(String[] args) { + a(); + b(); + c(); + Tester.checkAllEvents(); + } + static { + Tester.expectEvent("a"); + Tester.expectEvent("b"); + Tester.expectEvent(String.class.toString()); // XXX changed w/o understanding + } + private void a() { + String java = new String("a"); + Tester.event(java); + } + public void b() { + String java = String.copyValueOf(new char[]{'b'}); + Tester.event(java); + } + public void c() { + Class java = String.class; + Tester.event(java.toString()); // XXX changed w/o understanding + } +} diff --git a/tests/pureJava/IllegalForwardReference.java b/tests/pureJava/IllegalForwardReference.java new file mode 100644 index 000000000..39750c7a9 --- /dev/null +++ b/tests/pureJava/IllegalForwardReference.java @@ -0,0 +1,11 @@ +import org.aspectj.testing.Tester; + +public class IllegalForwardReference { + public static void main(String[] args) { + System.out.println(j + ", " + i); + Tester.check(true, "compiled!"); + } + + static int j = i; + static int i = 13; +} diff --git a/tests/pureJava/ImplicitThisMissing.java b/tests/pureJava/ImplicitThisMissing.java new file mode 100644 index 000000000..7922df122 --- /dev/null +++ b/tests/pureJava/ImplicitThisMissing.java @@ -0,0 +1,7 @@ +public class ImplicitThisMissing { + class B {} + public static void main(String[] args) { + new B(); + System.err.println("shouldn't compile!!!"); + } +} diff --git a/tests/pureJava/ImportingInnerInterfacesStars2_PR386.java b/tests/pureJava/ImportingInnerInterfacesStars2_PR386.java new file mode 100644 index 000000000..e45135337 --- /dev/null +++ b/tests/pureJava/ImportingInnerInterfacesStars2_PR386.java @@ -0,0 +1,19 @@ +import org.aspectj.testing.*; +import ClassWithInnerInterfaces.Inner1; +import ClassWithInnerInterfaces.Inner1.*; + +public class ImportingInnerInterfacesStars2_PR386 { + public static void main(String[] args) { + Tester.checkEqual(ClassWithInnerInterfaces.class.getName(), + "ClassWithInnerInterfaces"); + Tester.checkEqual(ClassWithInnerInterfaces.Inner1.class.getName(), + "ClassWithInnerInterfaces$Inner1"); + Tester.checkEqual(ClassWithInnerInterfaces.Inner1.Inner2.class.getName(), + "ClassWithInnerInterfaces$Inner1$Inner2"); + Tester.checkEqual(I1.class.getName(), "I1"); + Tester.checkEqual(I2.class.getName(), "I2"); + } +} + +class I1 implements Inner1 {} +class I2 implements Inner2 {} diff --git a/tests/pureJava/ImportingInnerInterfacesStars3_PR386.java b/tests/pureJava/ImportingInnerInterfacesStars3_PR386.java new file mode 100644 index 000000000..480e32dbb --- /dev/null +++ b/tests/pureJava/ImportingInnerInterfacesStars3_PR386.java @@ -0,0 +1,14 @@ +import org.aspectj.testing.*; +import ClassWithInnerInterfaces.*; + +public class ImportingInnerInterfacesStars3_PR386 { + public static void main(String[] args) { + Tester.checkEqual(ClassWithInnerInterfaces.class.getName(), + "ClassWithInnerInterfaces"); + Tester.checkEqual(ClassWithInnerInterfaces.Inner1.class.getName(), + "ClassWithInnerInterfaces$Inner1"); + Tester.checkEqual(I1.class.getName(), "I1"); + } +} + +class I1 implements Inner1 {} diff --git a/tests/pureJava/ImportingInnerInterfacesStars_PR386.java b/tests/pureJava/ImportingInnerInterfacesStars_PR386.java new file mode 100644 index 000000000..fb1505104 --- /dev/null +++ b/tests/pureJava/ImportingInnerInterfacesStars_PR386.java @@ -0,0 +1,23 @@ +import org.aspectj.testing.*; +import ClassWithInnerInterfaces.Inner1; +import ClassWithInnerInterfaces.Inner1.Inner2; +import ClassWithInnerInterfaces.Inner1.Inner2.*; +public class ImportingInnerInterfacesStars_PR386 { + public static void main(String[] args) { + Tester.checkEqual(ClassWithInnerInterfaces.class.getName(), + "ClassWithInnerInterfaces"); + Tester.checkEqual(ClassWithInnerInterfaces.Inner1.class.getName(), + "ClassWithInnerInterfaces$Inner1"); + Tester.checkEqual(ClassWithInnerInterfaces.Inner1.Inner2.class.getName(), + "ClassWithInnerInterfaces$Inner1$Inner2"); + Tester.checkEqual(ClassWithInnerInterfaces.Inner1.Inner2.Inner3.class.getName(), + "ClassWithInnerInterfaces$Inner1$Inner2$Inner3"); + Tester.checkEqual(I1.class.getName(), "I1"); + Tester.checkEqual(I2.class.getName(), "I2"); + Tester.checkEqual(I3.class.getName(), "I3"); + } +} + +class I1 implements Inner1 {} +class I2 implements Inner2 {} +class I3 implements Inner3 {} diff --git a/tests/pureJava/ImportingInnerInterfaces_PR386.java b/tests/pureJava/ImportingInnerInterfaces_PR386.java new file mode 100644 index 000000000..aa04b2fa3 --- /dev/null +++ b/tests/pureJava/ImportingInnerInterfaces_PR386.java @@ -0,0 +1,23 @@ +import org.aspectj.testing.*; +import ClassWithInnerInterfaces.Inner1; +import ClassWithInnerInterfaces.Inner1.Inner2; +import ClassWithInnerInterfaces.Inner1.Inner2.Inner3; +public class ImportingInnerInterfaces_PR386 { + public static void main(String[] args) { + Tester.checkEqual(ClassWithInnerInterfaces.class.getName(), + "ClassWithInnerInterfaces"); + Tester.checkEqual(ClassWithInnerInterfaces.Inner1.class.getName(), + "ClassWithInnerInterfaces$Inner1"); + Tester.checkEqual(ClassWithInnerInterfaces.Inner1.Inner2.class.getName(), + "ClassWithInnerInterfaces$Inner1$Inner2"); + Tester.checkEqual(ClassWithInnerInterfaces.Inner1.Inner2.Inner3.class.getName(), + "ClassWithInnerInterfaces$Inner1$Inner2$Inner3"); + Tester.checkEqual(I1.class.getName(), "I1"); + Tester.checkEqual(I2.class.getName(), "I2"); + Tester.checkEqual(I3.class.getName(), "I3"); + } +} + +class I1 implements Inner1 {} +class I2 implements Inner2 {} +class I3 implements Inner3 {} diff --git a/tests/pureJava/ImportingStaticInnerInterfacesStars2_PR386.java b/tests/pureJava/ImportingStaticInnerInterfacesStars2_PR386.java new file mode 100644 index 000000000..2651c3253 --- /dev/null +++ b/tests/pureJava/ImportingStaticInnerInterfacesStars2_PR386.java @@ -0,0 +1,19 @@ +import org.aspectj.testing.*; +import ClassWithStaticInnerInterfaces.Inner1; +import ClassWithStaticInnerInterfaces.Inner1.*; + +public class ImportingStaticInnerInterfacesStars2_PR386 { + public static void main(String[] args) { + Tester.checkEqual(ClassWithStaticInnerInterfaces.class.getName(), + "ClassWithStaticInnerInterfaces"); + Tester.checkEqual(ClassWithStaticInnerInterfaces.Inner1.class.getName(), + "ClassWithStaticInnerInterfaces$Inner1"); + Tester.checkEqual(ClassWithStaticInnerInterfaces.Inner1.Inner2.class.getName(), + "ClassWithStaticInnerInterfaces$Inner1$Inner2"); + Tester.checkEqual(I1.class.getName(), "I1"); + Tester.checkEqual(I2.class.getName(), "I2"); + } +} + +class I1 implements Inner1 {} +class I2 implements Inner2 {} diff --git a/tests/pureJava/ImportingStaticInnerInterfacesStars3_PR386.java b/tests/pureJava/ImportingStaticInnerInterfacesStars3_PR386.java new file mode 100644 index 000000000..02b159489 --- /dev/null +++ b/tests/pureJava/ImportingStaticInnerInterfacesStars3_PR386.java @@ -0,0 +1,14 @@ +import org.aspectj.testing.*; +import ClassWithStaticInnerInterfaces.*; + +public class ImportingStaticInnerInterfacesStars3_PR386 { + public static void main(String[] args) { + Tester.checkEqual(ClassWithStaticInnerInterfaces.class.getName(), + "ClassWithStaticInnerInterfaces"); + Tester.checkEqual(ClassWithStaticInnerInterfaces.Inner1.class.getName(), + "ClassWithStaticInnerInterfaces$Inner1"); + Tester.checkEqual(I1.class.getName(), "I1"); + } +} + +class I1 implements Inner1 {} diff --git a/tests/pureJava/ImportingStaticInnerInterfacesStars_PR386.java b/tests/pureJava/ImportingStaticInnerInterfacesStars_PR386.java new file mode 100644 index 000000000..6252c8a19 --- /dev/null +++ b/tests/pureJava/ImportingStaticInnerInterfacesStars_PR386.java @@ -0,0 +1,23 @@ +import org.aspectj.testing.*; +import ClassWithStaticInnerInterfaces.Inner1; +import ClassWithStaticInnerInterfaces.Inner1.Inner2; +import ClassWithStaticInnerInterfaces.Inner1.Inner2.*; +public class ImportingStaticInnerInterfacesStars_PR386 { + public static void main(String[] args) { + Tester.checkEqual(ClassWithStaticInnerInterfaces.class.getName(), + "ClassWithStaticInnerInterfaces"); + Tester.checkEqual(ClassWithStaticInnerInterfaces.Inner1.class.getName(), + "ClassWithStaticInnerInterfaces$Inner1"); + Tester.checkEqual(ClassWithStaticInnerInterfaces.Inner1.Inner2.class.getName(), + "ClassWithStaticInnerInterfaces$Inner1$Inner2"); + Tester.checkEqual(ClassWithStaticInnerInterfaces.Inner1.Inner2.Inner3.class.getName(), + "ClassWithStaticInnerInterfaces$Inner1$Inner2$Inner3"); + Tester.checkEqual(I1.class.getName(), "I1"); + Tester.checkEqual(I2.class.getName(), "I2"); + Tester.checkEqual(I3.class.getName(), "I3"); + } +} + +class I1 implements Inner1 {} +class I2 implements Inner2 {} +class I3 implements Inner3 {} diff --git a/tests/pureJava/ImportingStaticInnerInterfaces_PR386.java b/tests/pureJava/ImportingStaticInnerInterfaces_PR386.java new file mode 100644 index 000000000..7ccd8d1b4 --- /dev/null +++ b/tests/pureJava/ImportingStaticInnerInterfaces_PR386.java @@ -0,0 +1,23 @@ +import org.aspectj.testing.*; +import ClassWithStaticInnerInterfaces.Inner1; +import ClassWithStaticInnerInterfaces.Inner1.Inner2; +import ClassWithStaticInnerInterfaces.Inner1.Inner2.Inner3; +public class ImportingStaticInnerInterfaces_PR386 { + public static void main(String[] args) { + Tester.checkEqual(ClassWithStaticInnerInterfaces.class.getName(), + "ClassWithStaticInnerInterfaces"); + Tester.checkEqual(ClassWithStaticInnerInterfaces.Inner1.class.getName(), + "ClassWithStaticInnerInterfaces$Inner1"); + Tester.checkEqual(ClassWithStaticInnerInterfaces.Inner1.Inner2.class.getName(), + "ClassWithStaticInnerInterfaces$Inner1$Inner2"); + Tester.checkEqual(ClassWithStaticInnerInterfaces.Inner1.Inner2.Inner3.class.getName(), + "ClassWithStaticInnerInterfaces$Inner1$Inner2$Inner3"); + Tester.checkEqual(I1.class.getName(), "I1"); + Tester.checkEqual(I2.class.getName(), "I2"); + Tester.checkEqual(I3.class.getName(), "I3"); + } +} + +class I1 implements Inner1 {} +class I2 implements Inner2 {} +class I3 implements Inner3 {} diff --git a/tests/pureJava/InitializerFlowCf.java b/tests/pureJava/InitializerFlowCf.java new file mode 100644 index 000000000..7885c0fe5 --- /dev/null +++ b/tests/pureJava/InitializerFlowCf.java @@ -0,0 +1,8 @@ +public class InitializerFlowCf { + { throw new Error("bad error"); } // ERR initializer can't complete normally + + static { throw new Error("bad error #2"); } // ERR static initializer can't complete normally +} + + + diff --git a/tests/pureJava/InnerAccess.java b/tests/pureJava/InnerAccess.java new file mode 100644 index 000000000..3bf40b3a6 --- /dev/null +++ b/tests/pureJava/InnerAccess.java @@ -0,0 +1,60 @@ +import org.aspectj.testing.Tester; + +import java.util.*; + +public class InnerAccess { + public static void main(String[] args) { + Tester.checkEqual(new C().getCount(), 3); + } +} + + +class C { + protected int i = 2; + private String s = "hi"; + + Runnable r = new Runnable() { + public void run() { + s += "s"; + } + }; + + public int getCount() { + return new Object() { + public int m() { + r.run(); + return s.length(); + } + }.m(); + } +} + +class DI extends D.Inner { +} + + +class D implements Map.Entry { + public Object getKey() { return null; } + public Object getValue() { return null; } + public Object setValue(Object o) { return o; } + + static class Inner {} +} + + +class Outer { + class Middle { + class Inner { + void m() { + Inner.this.m1(); + Middle.this.m1(); + Outer.this.m1(); + } + + void m1() {} + } + void m1() {} + } + void m1() {} +} + diff --git a/tests/pureJava/InnerClassesInAnnonymousClasses.java b/tests/pureJava/InnerClassesInAnnonymousClasses.java new file mode 100644 index 000000000..166ca5bcf --- /dev/null +++ b/tests/pureJava/InnerClassesInAnnonymousClasses.java @@ -0,0 +1,16 @@ +public class InnerClassesInAnnonymousClasses { + public static void main(String[] args) { + new InnerClassesInAnnonymousClasses().realMain(args); + } + public void realMain(String[] args) { + + + new Runnable() { + public void run() {} + class Inner {} + Inner inner = new Inner(); + }; + } + + +} diff --git a/tests/pureJava/InnerFieldRef.java b/tests/pureJava/InnerFieldRef.java new file mode 100644 index 000000000..80d537468 --- /dev/null +++ b/tests/pureJava/InnerFieldRef.java @@ -0,0 +1,21 @@ + +public class InnerFieldRef { + private Foo foo = new Foo(); + + private static int x; + + public static void main(String[] args) { + new InnerFieldRef().new Inner().m(); + } + + private class Inner { + public void m() { + foo.b = true; + (new InnerFieldRef()).x = 3; + } + } +} + +class Foo { + public boolean b; +} diff --git a/tests/pureJava/InnerFlow.java b/tests/pureJava/InnerFlow.java new file mode 100644 index 000000000..d537c88e8 --- /dev/null +++ b/tests/pureJava/InnerFlow.java @@ -0,0 +1,10 @@ +public class InnerFlow { + static public void main(String[] params) { + final Object o = new Interface() { + public void m() { + o.toString(); //ERR: o not initialized + }}; + ((Interface) o).m(); // no exceptions + } +} +interface Interface { void m();} diff --git a/tests/pureJava/InnerNameConflictsCf.java b/tests/pureJava/InnerNameConflictsCf.java new file mode 100644 index 000000000..223c4dd02 --- /dev/null +++ b/tests/pureJava/InnerNameConflictsCf.java @@ -0,0 +1,24 @@ +/** + * PR#538 + * Would be useful to add a Cp version + */ + +public class InnerNameConflictsCf { + class Inner {} + public static void main(String[] args) { + new Inner(); //ERR: no this + } +} + +class Base { + static class Base {} //ERR: repeated name +} + +class Outer { + class Inner { + class Inner2 { + class Outer {} //ERR: repeated name + class Inner {} //ERR: repeated name + } + } +} diff --git a/tests/pureJava/InnerSuper.java b/tests/pureJava/InnerSuper.java new file mode 100644 index 000000000..c7a1a2c28 --- /dev/null +++ b/tests/pureJava/InnerSuper.java @@ -0,0 +1,45 @@ +import org.aspectj.testing.Tester; + +public class InnerSuper { + public static void main(String[] args) { + Counter c = new C().makeCounter(); + c.count(); + Tester.checkEqual(c.n, 1, "counted"); + } +} + +class C { + public Counter makeCounter() { + return new Counter() { + public void count() { + n+=1; + } + }; + } + + public InnerCounter makeInnerCounter() { + class MyCounter extends InnerCounter { + public void count() { + n += 1; + toString(); + } + public void lookat(Object o) { + boolean b = o.equals("abc"); + } + } + + return new MyCounter(); + } + + + protected class InnerCounter { + protected int n; + protected Object o; + } + +} + +class Counter { + protected int n = 0; + public void count() {} +} diff --git a/tests/pureJava/InterfaceAndClass.java b/tests/pureJava/InterfaceAndClass.java new file mode 100644 index 000000000..d0d5df67f --- /dev/null +++ b/tests/pureJava/InterfaceAndClass.java @@ -0,0 +1,13 @@ +package p; + +import org.aspectj.testing.Tester; + +public class InterfaceAndClass { + public static void main(String[] args) { + Tester.checkEqual(I.type, I.class, "same class"); + } +} + +interface I { + public final Class type = I.class; +} diff --git a/tests/pureJava/InterfaceAndInner.java b/tests/pureJava/InterfaceAndInner.java new file mode 100644 index 000000000..40677896f --- /dev/null +++ b/tests/pureJava/InterfaceAndInner.java @@ -0,0 +1,17 @@ +import org.aspectj.testing.Tester; + +import java.lang.reflect.Modifier; + +public class InterfaceAndInner { + public static void main(String[] args) { + Object o = new InterfaceAndInnerHelper.C(); + Tester.check(o instanceof InterfaceAndInnerHelper.C, + "! o instanceof InterfaceAndInnerHelper.C" ); + Class c = o.getClass(); + Tester.check(Modifier.isStatic(c.getModifiers()), + "! Modifier.isStatic(c.getModifiers())" ); + Tester.check(Modifier.isPublic(c.getModifiers()), + "! Modifier.isPublic(c.getModifiers())" ); + + } +} diff --git a/tests/pureJava/InterfaceAndInnerHelper.java b/tests/pureJava/InterfaceAndInnerHelper.java new file mode 100644 index 000000000..61027dd18 --- /dev/null +++ b/tests/pureJava/InterfaceAndInnerHelper.java @@ -0,0 +1,3 @@ +interface InterfaceAndInnerHelper { + class C { } +} diff --git a/tests/pureJava/InterfaceAndObject.java b/tests/pureJava/InterfaceAndObject.java new file mode 100644 index 000000000..c1c2633bb --- /dev/null +++ b/tests/pureJava/InterfaceAndObject.java @@ -0,0 +1,43 @@ +import javax.swing.*; +import javax.swing.border.*; +import javax.swing.event.*; +import javax.swing.plaf.FontUIResource; +import java.awt.*; +import java.awt.event.*; +import java.beans.*; +import java.io.*; +import java.util.EventObject; +import java.util.Vector; + +public class InterfaceAndObject { + Timer t = null; + public static void main(String[] args) { + I i = new I() {}; + System.out.println(i); + //new I() {}.toString(); + } +} + +class Root { + public String toString() { return "root"; } +} + +class C extends Root implements I {} + +class C1 extends Root implements I1 { + public Object clone() { return null; } +} + +interface I0 { + public Object clone(); +} + +interface I { + //public void toString(); + public boolean equals(Object o); +} + + +interface I1 extends I, I0 { + //public Object clone(); +} diff --git a/tests/pureJava/InterfaceCast.java b/tests/pureJava/InterfaceCast.java new file mode 100644 index 000000000..cd4a77ce9 --- /dev/null +++ b/tests/pureJava/InterfaceCast.java @@ -0,0 +1,23 @@ +class A {} +interface I {} +class B extends A implements I {} + +public class InterfaceCast { + + public static void main(String[] args) {} + + void foo(A a, B b, I i) { + A a0 = a; + A a1 = b; + A a2 = (A)i; + + B b0 = (B)a; + B b1 = b; + B b2 = (B)i; + + I i0 = (I)a; + I i1 = b; + I i2 = i; + } +} + diff --git a/tests/pureJava/InterfaceMembers.java b/tests/pureJava/InterfaceMembers.java new file mode 100644 index 000000000..8d843cce6 --- /dev/null +++ b/tests/pureJava/InterfaceMembers.java @@ -0,0 +1,11 @@ +public interface InterfaceMembers { + private class C {} + private interface I {} + private void m(); + private int x = 2; + + protected class Cp {} + protected interface Ip {} + protected void mp(); + protected int fp = 2; +} diff --git a/tests/pureJava/InterfaceMembersCf.java b/tests/pureJava/InterfaceMembersCf.java new file mode 100644 index 000000000..fa145105f --- /dev/null +++ b/tests/pureJava/InterfaceMembersCf.java @@ -0,0 +1,4 @@ +public interface InterfaceMembersCf { + static {} // ERR JLS 9.1.3 + {} // ERR JLS 9.1.3 +} diff --git a/tests/pureJava/IntroducedAssertion.java b/tests/pureJava/IntroducedAssertion.java new file mode 100644 index 000000000..e325a6fb9 --- /dev/null +++ b/tests/pureJava/IntroducedAssertion.java @@ -0,0 +1,68 @@ +import org.aspectj.testing.Tester; + +/** @testcase PUREJAVA PR#725 asserts in aspect and declared methods */ +public class IntroducedAssertion { + public static void main (String[] args) { + IntroducedAssertion.class.getClassLoader().setClassAssertionStatus("A", true); + IntroducedAssertion.class.getClassLoader().setClassAssertionStatus("B", true); + + boolean result = false; + try { + C.method(null); + } catch (AssertionError e) { + result = true; + } + Tester.check(result, "no assert: C.method(null)"); + + result = false; + try { + new C(); // field initializer + } catch (AssertionError e) { + result = true; + } + Tester.check(result, "no assert: new C()"); + + result = false; + try { + new D().method(null); + } catch (AssertionError e) { + result = true; + } + Tester.check(result, "no assert: new D().method(null)"); + } +} + +class C {} +class D {} + +aspect B { + int C.i = method(null); + + // assertion in any introduced code conflicts with any local + static int C.method( Object o) { + assert o != null ; + return 0; + } +} +aspect A { + + void D.method( Object o) { + assert o != null ; + } + + // assertion in any introduced method conflicts with any local + void method() { + assert null != System.getProperty("java.version"); + } + + // XXX build test cases for other local variants - these work + /* + static { + assert null != System.getProperty("java.version"); + } + static void aStaticMethod( Object parameter ) { + assert parameter != null ; + } + */ +} + diff --git a/tests/pureJava/InvalidNewQualifier10CE.java b/tests/pureJava/InvalidNewQualifier10CE.java new file mode 100644 index 000000000..05a38e6ad --- /dev/null +++ b/tests/pureJava/InvalidNewQualifier10CE.java @@ -0,0 +1,36 @@ + +/** @testcase PUREJAVA nested interface does not require new qualifier */ +public class InvalidNewQualifier10CE { + interface I {} + void test() { + // error +// this.new I(){}; // CE 7 new qualification unneeded +// new Outer().new Outer.I(){}; // CE 8 new qualification bad +// new OuterInterface(){}.new OuterInterface.I(){}; // CE 9 new qualification bad + new OuterOuter.Inner(){}.new OuterOuter.Inner.I(){}; // CE 10 new qualification bad + Outer o = new Outer(); + OuterInterface oi = new OuterInterface(){}; + OuterOuter.Inner ooi = new OuterOuter.Inner(){}; +// o.new Outer.I(){}; // CE 14 new qualification bad +// oi.new OuterInterface.I(){}; // CE 15 new qualification bad +// ooi.new OuterOuter.Inner.I(){}; // CE 16 new qualification bad + + // ok + new I(){}; + new Outer.I(){}; + new OuterInterface.I(){}; + new OuterOuter.Inner.I(){}; + } +} + +class Outer { + interface I {} +} +interface OuterInterface { + interface I {} +} +class OuterOuter { + interface Inner { + interface I {} + } +} diff --git a/tests/pureJava/InvalidNewQualifier14CE.java b/tests/pureJava/InvalidNewQualifier14CE.java new file mode 100644 index 000000000..01290ec20 --- /dev/null +++ b/tests/pureJava/InvalidNewQualifier14CE.java @@ -0,0 +1,36 @@ + +/** @testcase PUREJAVA nested interface does not require new qualifier */ +public class InvalidNewQualifier14CE { + interface I {} + void test() { + // error +// this.new I(){}; // CE 7 new qualification unneeded +// new Outer().new Outer.I(){}; // CE 8 new qualification bad +// new OuterInterface(){}.new OuterInterface.I(){}; // CE 9 new qualification bad +// new OuterOuter.Inner(){}.new OuterOuter.Inner.I(){}; // CE 10 new qualification bad + Outer o = new Outer(); + OuterInterface oi = new OuterInterface(){}; + OuterOuter.Inner ooi = new OuterOuter.Inner(){}; + o.new Outer.I(){}; // CE 14 new qualification bad +// oi.new OuterInterface.I(){}; // CE 15 new qualification bad +// ooi.new OuterOuter.Inner.I(){}; // CE 16 new qualification bad + + // ok + new I(){}; + new Outer.I(){}; + new OuterInterface.I(){}; + new OuterOuter.Inner.I(){}; + } +} + +class Outer { + interface I {} +} +interface OuterInterface { + interface I {} +} +class OuterOuter { + interface Inner { + interface I {} + } +} diff --git a/tests/pureJava/InvalidNewQualifier15CE.java b/tests/pureJava/InvalidNewQualifier15CE.java new file mode 100644 index 000000000..7b627e698 --- /dev/null +++ b/tests/pureJava/InvalidNewQualifier15CE.java @@ -0,0 +1,36 @@ + +/** @testcase PUREJAVA nested interface does not require new qualifier */ +public class InvalidNewQualifier15CE { + interface I {} + void test() { + // error +// this.new I(){}; // CE 7 new qualification unneeded +// new Outer().new Outer.I(){}; // CE 8 new qualification bad +// new OuterInterface(){}.new OuterInterface.I(){}; // CE 9 new qualification bad +// new OuterOuter.Inner(){}.new OuterOuter.Inner.I(){}; // CE 10 new qualification bad + Outer o = new Outer(); + OuterInterface oi = new OuterInterface(){}; + OuterOuter.Inner ooi = new OuterOuter.Inner(){}; +// o.new Outer.I(){}; // CE 14 new qualification bad + oi.new OuterInterface.I(){}; // CE 15 new qualification bad +// ooi.new OuterOuter.Inner.I(){}; // CE 16 new qualification bad + + // ok + new I(){}; + new Outer.I(){}; + new OuterInterface.I(){}; + new OuterOuter.Inner.I(){}; + } +} + +class Outer { + interface I {} +} +interface OuterInterface { + interface I {} +} +class OuterOuter { + interface Inner { + interface I {} + } +} diff --git a/tests/pureJava/InvalidNewQualifier16CE.java b/tests/pureJava/InvalidNewQualifier16CE.java new file mode 100644 index 000000000..c1898ab6d --- /dev/null +++ b/tests/pureJava/InvalidNewQualifier16CE.java @@ -0,0 +1,36 @@ + +/** @testcase PUREJAVA nested interface does not require new qualifier */ +public class InvalidNewQualifier16CE { + interface I {} + void test() { + // error +// this.new I(){}; // CE 7 new qualification unneeded +// new Outer().new Outer.I(){}; // CE 8 new qualification bad +// new OuterInterface(){}.new OuterInterface.I(){}; // CE 9 new qualification bad +// new OuterOuter.Inner(){}.new OuterOuter.Inner.I(){}; // CE 10 new qualification bad + Outer o = new Outer(); + OuterInterface oi = new OuterInterface(){}; + OuterOuter.Inner ooi = new OuterOuter.Inner(){}; +// o.new Outer.I(){}; // CE 14 new qualification bad +// oi.new OuterInterface.I(){}; // CE 15 new qualification bad + ooi.new OuterOuter.Inner.I(){}; // CE 16 new qualification bad + + // ok + new I(){}; + new Outer.I(){}; + new OuterInterface.I(){}; + new OuterOuter.Inner.I(){}; + } +} + +class Outer { + interface I {} +} +interface OuterInterface { + interface I {} +} +class OuterOuter { + interface Inner { + interface I {} + } +} diff --git a/tests/pureJava/InvalidNewQualifier7CE.java b/tests/pureJava/InvalidNewQualifier7CE.java new file mode 100644 index 000000000..701f1ec68 --- /dev/null +++ b/tests/pureJava/InvalidNewQualifier7CE.java @@ -0,0 +1,36 @@ + +/** @testcase PUREJAVA nested interface does not require new qualifier */ +public class InvalidNewQualifier7CE { + interface I {} + void test() { + // error + this.new I(){}; // CE 7 new qualification unneeded +// new Outer().new Outer.I(){}; // CE 8 new qualification bad +// new OuterInterface(){}.new OuterInterface.I(){}; // CE 9 new qualification bad +// new OuterOuter.Inner(){}.new OuterOuter.Inner.I(){}; // CE 10 new qualification bad + Outer o = new Outer(); + OuterInterface oi = new OuterInterface(){}; + OuterOuter.Inner ooi = new OuterOuter.Inner(){}; +// o.new Outer.I(){}; // CE 14 new qualification bad +// oi.new OuterInterface.I(){}; // CE 15 new qualification bad +// ooi.new OuterOuter.Inner.I(){}; // CE 16 new qualification bad + + // ok + new I(){}; + new Outer.I(){}; + new OuterInterface.I(){}; + new OuterOuter.Inner.I(){}; + } +} + +class Outer { + interface I {} +} +interface OuterInterface { + interface I {} +} +class OuterOuter { + interface Inner { + interface I {} + } +} diff --git a/tests/pureJava/InvalidNewQualifier8CE.java b/tests/pureJava/InvalidNewQualifier8CE.java new file mode 100644 index 000000000..a16391208 --- /dev/null +++ b/tests/pureJava/InvalidNewQualifier8CE.java @@ -0,0 +1,36 @@ + +/** @testcase PUREJAVA nested interface does not require new qualifier */ +public class InvalidNewQualifier8CE { + interface I {} + void test() { + // error +// this.new I(){}; // CE 7 new qualification unneeded + new Outer().new Outer.I(){}; // CE 8 new qualification bad +// new OuterInterface(){}.new OuterInterface.I(){}; // CE 9 new qualification bad +// new OuterOuter.Inner(){}.new OuterOuter.Inner.I(){}; // CE 10 new qualification bad + Outer o = new Outer(); + OuterInterface oi = new OuterInterface(){}; + OuterOuter.Inner ooi = new OuterOuter.Inner(){}; +// o.new Outer.I(){}; // CE 14 new qualification bad +// oi.new OuterInterface.I(){}; // CE 15 new qualification bad +// ooi.new OuterOuter.Inner.I(){}; // CE 16 new qualification bad + + // ok + new I(){}; + new Outer.I(){}; + new OuterInterface.I(){}; + new OuterOuter.Inner.I(){}; + } +} + +class Outer { + interface I {} +} +interface OuterInterface { + interface I {} +} +class OuterOuter { + interface Inner { + interface I {} + } +} diff --git a/tests/pureJava/InvalidNewQualifier9CE.java b/tests/pureJava/InvalidNewQualifier9CE.java new file mode 100644 index 000000000..e668f0ef2 --- /dev/null +++ b/tests/pureJava/InvalidNewQualifier9CE.java @@ -0,0 +1,36 @@ + +/** @testcase PUREJAVA nested interface does not require new qualifier */ +public class InvalidNewQualifier9CE { + interface I {} + void test() { + // error +// this.new I(){}; // CE 7 new qualification unneeded +// new Outer().new Outer.I(){}; // CE 8 new qualification bad + new OuterInterface(){}.new OuterInterface.I(){}; // CE 9 new qualification bad +// new OuterOuter.Inner(){}.new OuterOuter.Inner.I(){}; // CE 10 new qualification bad + Outer o = new Outer(); + OuterInterface oi = new OuterInterface(){}; + OuterOuter.Inner ooi = new OuterOuter.Inner(){}; +// o.new Outer.I(){}; // CE 14 new qualification bad +// oi.new OuterInterface.I(){}; // CE 15 new qualification bad +// ooi.new OuterOuter.Inner.I(){}; // CE 16 new qualification bad + + // ok + new I(){}; + new Outer.I(){}; + new OuterInterface.I(){}; + new OuterOuter.Inner.I(){}; + } +} + +class Outer { + interface I {} +} +interface OuterInterface { + interface I {} +} +class OuterOuter { + interface Inner { + interface I {} + } +} diff --git a/tests/pureJava/KeywordAspect.java b/tests/pureJava/KeywordAspect.java new file mode 100644 index 000000000..9fcf0c446 --- /dev/null +++ b/tests/pureJava/KeywordAspect.java @@ -0,0 +1,20 @@ +import org.aspectj.testing.Tester; +public class KeywordAspect { + public static void main(String[] args) { + new KeywordAspect().realMain(args); + } + + String pointcut = "hi"; + + public void realMain(String[] args) { + int aspect = 0; + aspect += 10; + + Tester.checkEqual(aspect, 10); + Tester.checkEqual(pointcut, "hi-bye"); + } + + public KeywordAspect() { + pointcut += "-bye"; + } +} diff --git a/tests/pureJava/KeywordPointcut.java b/tests/pureJava/KeywordPointcut.java new file mode 100644 index 000000000..a2559565b --- /dev/null +++ b/tests/pureJava/KeywordPointcut.java @@ -0,0 +1,14 @@ +import org.aspectj.testing.Tester; +public class KeywordPointcut { + public static void main(String[] args) { + new KeywordPointcut().realMain(args); + } + public void realMain(String[] args) { + int pointcut = 0; + pointcut += 2; + Tester.checkEqual(pointcut, 2); + } + + public KeywordPointcut() { + } +} diff --git a/tests/pureJava/LiteralsCf.java b/tests/pureJava/LiteralsCf.java new file mode 100644 index 000000000..31f8e3513 --- /dev/null +++ b/tests/pureJava/LiteralsCf.java @@ -0,0 +1,35 @@ +public class LiteralsCf { + public static void main(String[] args) { + float f; + double d; + f = 3.4028235e+38f; //Why not error? + f = 1.4023983e-45f; //Why not error? + + f = 1e39f; //ERR: rounds to +INF + f = 0.0000000000000000000000000000000000000000000000001f; //ERR: rounds to 0 + f = -1234567890123456789012345678901234567890123f; //ERR: rounds to -INF + d = -1e310; //ERR: rounds to -INF + d = 1e500; //ERR: rounds to +INF + + int i, i1, i2, i3; + long l, l1, l2, l3; + + i = 2147483648; //ERR: too big + i = 0x1ffffffff; //ERR: too big + i = 01234567012345670; //ERR: too big + i2 = 0x800000000; + i3 = 0200000000000; + i2 = 0x100000000; + i3 = 040000000000; + + i = -2147483649; //ERR: too small + + l = 9223372036854775808L; //ERR: too big + l = -9223372036854775809L; //ERR: too small + l2 = 0x80000000000000000L; + l3 = 010000000000000000000000L; + + i = 09; //ERR: illegal octal + + } +} diff --git a/tests/pureJava/LiteralsCp.java b/tests/pureJava/LiteralsCp.java new file mode 100644 index 000000000..dbe335b36 --- /dev/null +++ b/tests/pureJava/LiteralsCp.java @@ -0,0 +1,62 @@ +import org.aspectj.testing.Tester; + +public class LiteralsCp { + public static void main(String[] args) { + float f; + double d; + f = 0; + f = 0.0f; + f = 0000000.0000000f; + f = 1e-44f; //NOT ERROR: rounds to DENORM + + f = 3.40282347e+38f; + f = 1.40239846e-45f; + + d = 0e1; + + d = 1.79769313486231570e+308; + d = 4.94065645841246544e-324; + + int i, i1, i2, i3; + long l, l1, l2, l3; + + i1 = 2147483647; //MAX_INT + i2 = 0x7fffffff; + i3 = 017777777777; + checkEqual(i1, i2, i3, "MAX_INT"); + + i1 = -2147483648; //MIN_INT + i2 = 0x80000000; + i3 = 020000000000; + checkEqual(i1, i2, i3, "MIN_INT"); + //System.out.println(i1 + ", " + i2 + ", " + i3); + + i1 = -1; + i2 = 0xffffffff; + i3 = 037777777777; + checkEqual(i1, i2, i3, "-1"); + + l1 = 9223372036854775807L; //MAX_LONG + l2 = 0x7fffffffffffffffL; + l3 = 0777777777777777777777L; + checkEqual(l1, l2, l3, "MAX_LONG"); + + //System.out.println(l1 + ", " + l2 + ", " + l3); + + l1 = -9223372036854775808L; //MIN_LONG + l2 = 0x8000000000000000L; + l3 = 01000000000000000000000L; + checkEqual(l1, l2, l3, "MIN_LONG"); + + l1 = -1l; + l2 = 0xffffffffffffffffL; + l3 = 01777777777777777777777L; + checkEqual(l1, l2, l3, "-1L"); + } + + static void checkEqual(long i1, long i2, long i3, String msg) { + Tester.check(i1 == i2, msg + ": " + i1 + " == " + i2); + Tester.check(i1 == i3, msg + ": " + i1 + " == " + i3); + Tester.check(i2 == i3, msg + ": " + i2 + " == " + i3); + } +} diff --git a/tests/pureJava/LocalInitializerVariableNotBlank.java b/tests/pureJava/LocalInitializerVariableNotBlank.java new file mode 100644 index 000000000..6311a154e --- /dev/null +++ b/tests/pureJava/LocalInitializerVariableNotBlank.java @@ -0,0 +1,18 @@ +import java.awt.Color; + +public class LocalInitializerVariableNotBlank { + + static Color[] greys; + + static { + greys=new Color[16]; + int gr; + for(int i=0;i<greys.length;i++) { + gr=(int)(170.0*(1.0-Math.pow(i/15.0,2.3))); + greys[i]=new Color(gr,gr,gr); + } + } + + public static void main(String[] args) { + } +} diff --git a/tests/pureJava/LocalInners.java b/tests/pureJava/LocalInners.java new file mode 100644 index 000000000..f26bdba4f --- /dev/null +++ b/tests/pureJava/LocalInners.java @@ -0,0 +1,13 @@ +public class LocalInners { + public static void main(String[] args) { + class Local1 { + public String getL() { return l.toString(); } + private Local1 l; + } + Local1 lt = new Local1(); + + class Local2 extends Local1 { + private Local1 t; + } + } +} diff --git a/tests/pureJava/LocalInners2.java b/tests/pureJava/LocalInners2.java new file mode 100644 index 000000000..0bee0adef --- /dev/null +++ b/tests/pureJava/LocalInners2.java @@ -0,0 +1,16 @@ +public class LocalInners2 { + public static void main(final String[] args) { + class Local { + class Inner0 extends Local { + } + class Inner1 extends Local { + int arglen = args.length; + } + } + new Local().new Inner0(); + new Local().new Inner1(); + foo(new Local().new Inner1().arglen); + } + + static void foo(int i) {} +} diff --git a/tests/pureJava/LocalInners3.java b/tests/pureJava/LocalInners3.java new file mode 100644 index 000000000..3dd08c466 --- /dev/null +++ b/tests/pureJava/LocalInners3.java @@ -0,0 +1,9 @@ +public class LocalInners3 { + public static void main(String[] args) { + class Inner { + class A extends B {} + class B extends Inner {} + } + return; + } +} diff --git a/tests/pureJava/LocalInterfaceCE.java b/tests/pureJava/LocalInterfaceCE.java new file mode 100644 index 000000000..fe1905e75 --- /dev/null +++ b/tests/pureJava/LocalInterfaceCE.java @@ -0,0 +1,18 @@ + +/** @testcase PR721 interface declaration not permitted in local method scope */ +public class LocalInterfaceCE { + void method() { + interface Local {} // CE 5 interface not allowed here + } + static { + interface Local {} // CE 8 interface not allowed here + } + static void staticMethod() { + interface Local {} // CE 11 interface not allowed here + } + class Inner { + void method() { + interface Local {} // CE 15 interface not allowed here + } + } +} diff --git a/tests/pureJava/LocalsFromInnerCE.java b/tests/pureJava/LocalsFromInnerCE.java new file mode 100644 index 000000000..e8958716d --- /dev/null +++ b/tests/pureJava/LocalsFromInnerCE.java @@ -0,0 +1,84 @@ +/** @testcase PUREJAVA PR#739 local variables must be final to be accessed from inner class */ +class LocalsFromInnerCE { + void f() { + int i = 0; + new Runnable() { + public void run() { i++; } // CE 6 nonfinal variable + }.run(); + } + + static void sf() { + int i = 0; + new Runnable() { + public void run() { i++; } // CE 13 nonfinal variable + }.run(); + } + + void f(int i) { + new Runnable() { + public void run() { i++; } // CE 19 nonfinal variable + }.run(); + } + + static void sf(int i) { + new Runnable() { + public void run() { i++; } // CE 25 nonfinal variable + }.run(); + } + + static { + int i = 0; + new Runnable() { + public void run() { i++; } // CE 32 nonfinal variable + }.run(); + } + + void m(int i) { + class m { + void f(int i) { + new Runnable() { + public void run() { i++; } // CE 40 nonfinal variable + }.run(); + } + } + } + + void m() { + int i = 0; + class m { + void f() { + new Runnable() { + public void run() { i++; } // CE 51 nonfinal variable + }.run(); + } + } + } + + class m { + void f() { + int i = 0; + new Runnable() { + public void run() { i++; } // CE 61 nonfinal variable + }.run(); + } + + void f(int i) { + new Runnable() { + public void run() { i++; } // CE 67 nonfinal variable + }.run(); + } + } + + LocalsFromInnerCE() { + int i = 0; + new Runnable() { + public void run() { i++; } // CE 75 nonfinal variable + }.run(); + } + + LocalsFromInnerCE(int i) { + new Runnable() { + public void run() { i++; } // CE 81 nonfinal variable + }.run(); + } +} diff --git a/tests/pureJava/LocalsFromInnerCP.java b/tests/pureJava/LocalsFromInnerCP.java new file mode 100644 index 000000000..d135d3458 --- /dev/null +++ b/tests/pureJava/LocalsFromInnerCP.java @@ -0,0 +1,131 @@ +import org.aspectj.testing.*; + +/** @testcase PUREJAVA PR#739 final local variables can be accessed from inner class */ +public class LocalsFromInnerCP { + public static void main (String[] args) { + // static init + LocalsFromInnerCP.registerAll(); + LocalsFromInnerCP me = new LocalsFromInnerCP(); + me = new LocalsFromInnerCP(1); + me.f(); + LocalsFromInnerCP.sf(); + me.f(1); + LocalsFromInnerCP.sf(1); + me.m(); + me.m(1); + me.new m().f(); + me.new m().f(1); + Tester.check(globali == 11, "globali: " + globali); + Tester.checkAllEvents(); + } + + void f() { + final int i = 1; + new Runnable() { + public void run() { signal("LocalsFromInnerCP.f().Runnable.run()", i); } + }.run(); + } + + static void sf() { + final int i = 1; + new Runnable() { + public void run() { signal("LocalsFromInnerCP.sf().Runnable.run()", i); } + }.run(); + } + + void f(final int i) { + new Runnable() { + public void run() { signal("LocalsFromInnerCP.f(int).Runnable.run()", i); } + }.run(); + } + + static void sf(final int i) { + new Runnable() { + public void run() { signal("LocalsFromInnerCP.sf(int).Runnable.run()", i); } + }.run(); + } + + static { + final int i = 1; + new Runnable() { + public void run() { signal("LocalsFromInnerCP.<clinit>.Runnable.run()", i); } + }.run(); + } + + void m(final int i) { + class m { + void f() { + new Runnable() { + public void run() { signal("LocalsFromInnerCP.m(int).m.f().Runnable.run()", i); } + }.run(); + } + } + new m().f(); + } + + void m() { + final int i = 1; + class m { + void f() { + new Runnable() { + public void run() { signal("LocalsFromInnerCP.m().m.f().Runnable.run()", i); } + }.run(); + } + } + new m().f(); + } + + class m { + void f() { + final int i = 1; + new Runnable() { + public void run() { signal("LocalsFromInnerCP.m.f().Runnable.run()", i); } + }.run(); + } + + void f(final int i) { + new Runnable() { + public void run() { signal("LocalsFromInnerCP.m.f(int).Runnable.run()", i); } + }.run(); + } + } + + LocalsFromInnerCP() { + final int i = 1; + new Runnable() { + public void run() { signal("LocalsFromInnerCP.LocalsFromInnerCP().Runnable.run()", i); } + }.run(); + } + + LocalsFromInnerCP(final int i) { + new Runnable() { + public void run() { signal("LocalsFromInnerCP.LocalsFromInnerCP(int).Runnable.run()", i); } + }.run(); + } + //---------------------------------------------------------- + // sed -n '/"/p' pureJava/LocalsFromInnerCP.java + // | sed 's|.*"\(.*\)".*| register("\1");|' + // >> pureJava/LocalsFromInnerCP.java + static void registerAll() { + register("LocalsFromInnerCP.f().Runnable.run()"); + register("LocalsFromInnerCP.sf().Runnable.run()"); + register("LocalsFromInnerCP.f(int).Runnable.run()"); + register("LocalsFromInnerCP.sf(int).Runnable.run()"); + register("LocalsFromInnerCP.<clinit>.Runnable.run()"); + register("LocalsFromInnerCP.m(int).m.f().Runnable.run()"); + register("LocalsFromInnerCP.m().m.f().Runnable.run()"); + register("LocalsFromInnerCP.m.f().Runnable.run()"); + register("LocalsFromInnerCP.m.f(int).Runnable.run()"); + register("LocalsFromInnerCP.LocalsFromInnerCP().Runnable.run()"); + register("LocalsFromInnerCP.LocalsFromInnerCP(int).Runnable.run()"); + } + static void register(String s) { + Tester.expectEvent(s); + } + static int globali; + static void signal(String s, int i) { + Tester.event(s); + Tester.check(i == 1, "1 != i=" + i + " for " + s); + globali++; + } +} diff --git a/tests/pureJava/MethodSigs.java b/tests/pureJava/MethodSigs.java new file mode 100644 index 000000000..d2cea4aa4 --- /dev/null +++ b/tests/pureJava/MethodSigs.java @@ -0,0 +1,86 @@ +import org.aspectj.testing.Tester; +import java.util.*; + + +public class MethodSigs { + public static void main(String[] args) { + new MethodSigs().realMain(args); + } + + String want; + void want(String want) { this.want = want; } + void w(String s) { want(s); } + void have(Object have, Object msg) { Tester.checkEqual(want, have, msg+""); } + void have(Object have) { Tester.checkEqual(want, have); } + + public void realMain(String[] args) { + lists(); + integers(); + } + + void lists() { + Object o = new Object() { public String toString() { return "o"; } }; + Object o1 = new Object() { public String toString() { return "o"; } }; + Object o2 = new Object() { public String toString() { return "o"; } }; + List l = new Vector() { public String toString() { return "l:"+super.toString(); } }; + List l1 = new Vector() { public String toString() { return "l1:"+super.toString(); } }; + List l2 = new Vector() { public String toString() { return "l2:"+super.toString(); } }; + Collection c = new Vector() { public String toString() { return "c:"+super.toString(); } }; + Collection c1 = new Vector() { public String toString() { return "c1:"+super.toString(); } }; + Collection c2 = new Vector() { public String toString() { return "c2:"+super.toString(); } }; + Set s = new HashSet() { public String toString() { return "s:"+super.toString(); } }; + Set s1 = new HashSet() { public String toString() { return "s1:"+super.toString(); } }; + Set s2 = new HashSet() { public String toString() { return "s2:"+super.toString(); } }; + + want("a:Object,Object"); a(o1,o2); + want("a:List,Object"); a(l,o); + want("a:Object,List"); a(o,l); + want("a:Collection,Object"); a(c,o); + want("a:Object,Collection"); a(o,c); + want("a:List,Collection"); a(l,c); + want("a:Collection,List"); a(c,l); + want("a:Collection,Collection"); a(c1,c2); + want("a:Set,Collection"); a(s,c); + want("a:Collection,Set"); a(c,s); + want("a:Set,Set"); a(s1,s2); + want("a:List,Set"); a(l,s); + want("a:Set,List"); a(s,l); + } + + public void a(Object o1, Object o2) { have("a:Object,Object"); } + public void a(List l, Object o) { have("a:List,Object"); } + public void a(Object o, List l) { have("a:Object,List"); } + public void a(Collection c, Object o) { have("a:Collection,Object"); } + public void a(Object o, Collection c) { have("a:Object,Collection"); } + public void a(List l, Collection c) { have("a:List,Collection"); } + public void a(Collection c,List l) { have("a:Collection,List"); } + public void a(Collection c1, Collection c2) { have("a:Collection,Collection"); } + public void a(Set s, Collection c) { have("a:Set,Collection"); } + public void a(Collection c,Set s) { have("a:Collection,Set"); } + public void a(Set s1, Set s2) { have("a:Set,Set"); } + public void a(List l, Set s) { have("a:List,Set"); } + public void a(Set s,List l) { have("a:Set,List"); } + + void integers() { + Integer i = new Integer(0); + Integer i1 = new Integer(1); + Integer i2 = new Integer(2); + Object o = new Object() { public String toString() { return "o"; } }; + Object o1 = new Object() { public String toString() { return "o"; } }; + Object o2 = new Object() { public String toString() { return "o"; } }; + Object oi = new Integer(3); + + w("Object,Object"); f(o1,o2); + w("Integer,Object"); f(i,o); + w("Object,Integer"); f(o,i); + w("Integer,Integer"); f(i1,i2); + w("Object,Object"); f(oi,oi); + w("Object,Object"); f(oi,o); + w("Object,Object"); f(o,oi); + } + + public void f(Object o1, Object o2) { have("Object,Object", o1+":"+o2); } + public void f(Integer i, Object o) { have("Integer,Object", i+":"+o); } + public void f(Object o, Integer i) { have("Object,Integer", o+":"+i); } + public void f(Integer i1, Integer i2) { have("Integer,Integer", i1+":"+i2); } +} diff --git a/tests/pureJava/MethodsWithTheSameName.java b/tests/pureJava/MethodsWithTheSameName.java new file mode 100644 index 000000000..190b82677 --- /dev/null +++ b/tests/pureJava/MethodsWithTheSameName.java @@ -0,0 +1,26 @@ +import org.aspectj.testing.Tester; + +public class MethodsWithTheSameName { + public static void main(String[] args) { + Inner i = new Inner("inner"); + i.f((String)null); + i.f("call1"); + i.f(new Inner("call2")); + Tester.checkEqual(strings, "null:inner-null:null-inner:null:call2:"); + } + + static String strings = ""; + + static class Inner { + String s; + Inner(String s) { this.s = s; } + void f(String str) { + f(str == null ? null : new Inner("null-"+s)); + f(str == null ? new Inner(s+"-null") : null); + } + void f(Inner i) { strings += i + ":"; } + public String toString() { return s; } + } +} + + diff --git a/tests/pureJava/MisplacedThisInAnnonymousInnerClasses.java b/tests/pureJava/MisplacedThisInAnnonymousInnerClasses.java new file mode 100644 index 000000000..f4926eec7 --- /dev/null +++ b/tests/pureJava/MisplacedThisInAnnonymousInnerClasses.java @@ -0,0 +1,53 @@ +import org.aspectj.testing.Tester; +import org.aspectj.testing.Tester; +/* + * Calls to methods declared in outer annonymous classes + * are being qualified with this when they shouldn't. + */ +public class MisplacedThisInAnnonymousInnerClasses { + public static void main(String[] args) { + new MisplacedThisInAnnonymousInnerClasses().realMain(args); + } + public void realMain(String[] args) { + + Tester.expectEvent("run0"); + Tester.expectEvent("run1"); + Tester.expectEvent("run2"); + Tester.expectEvent("run3"); + Tester.expectEvent("outer0"); + Tester.expectEvent("outer1"); + Tester.expectEvent("outer2"); + + new Runnable() { + public void outer(int i) { Tester.event("outer"+i); } + public void run() { + Tester.event("run0"); + new Runnable() { + public void run() { + Tester.event("run1"); + // shouldn't become this.outer(0) + outer(0); + new Runnable() { + public void run() { + Tester.event("run2"); + // shouldn't become this.outer(1) + outer(1); + new Runnable() { + public void run() { + Tester.event("run3"); + // shouldn't become + // this.outer(2) + outer(2); + } + }.run(); + } + }.run(); + } + }.run(); + } + }.run(); + + Tester.checkAllEvents(); + } + +} diff --git a/tests/pureJava/MissingPackageCE.java b/tests/pureJava/MissingPackageCE.java new file mode 100644 index 000000000..646a008df --- /dev/null +++ b/tests/pureJava/MissingPackageCE.java @@ -0,0 +1,5 @@ + +package ; // CE 2 identifier expected for package name + +/** @testcase PUREJAVA PR#723 missing package identifier */ +public class MissingPackageCE {} diff --git a/tests/pureJava/MultiTernaryOps.java b/tests/pureJava/MultiTernaryOps.java new file mode 100644 index 000000000..384bc1c80 --- /dev/null +++ b/tests/pureJava/MultiTernaryOps.java @@ -0,0 +1,312 @@ +import org.aspectj.testing.*; + +public class MultiTernaryOps { + public static void main(String[] args) { + new MultiTernaryOps().realMain(args); + } + + int c = 0; + int z = 0; + public void realMain(String[] args) { + + int SIZE = 1000; + int[] xs = new int[SIZE]; + boolean b = true; + int e = 123; + Object o = null; + Object ot = new t(); + + // b?e:e + c(1); xs[c++] = t(0) ? 1 : 2; e(); + c(1); xs[c++] = f(0) ? 2 : 1; e(); + + // b ? (b : e : e) : e + c(2); xs[c++] = t(0) ? f( 1) ? 2 : 1 : 3; e(); + c(2); xs[c++] = t(0) ? (f( 1) ? 2 : 1) : 3; e(); + + // b ? ( b : e : e) : e + c(1); xs[c++] = f(0) ? x() ? 2 : 3 : 1; e(); + c(1); xs[c++] = f(0) ? (x() ? 2 : 3) : 1; e(); + + // b ? (b ? (b ? e : e) : e) : e + c(3); xs[c++] = t(0) ? (t(1) ? (t(2) ? 1 : 2) : 3) : 4; e(); + c(3); xs[c++] = t(0) ? t(1) ? (t(2) ? 1 : 2) : 3 : 4; e(); + c(3); xs[c++] = t(0) ? t(1) ? t(2) ? 1 : 2 : 3 : 4; e(); + + c(1); xs[c++] = f(0) ? (x() ? (x() ? 4 : 2) : 3) : 1; e(); + c(1); xs[c++] = f(0) ? x() ? (x() ? 4 : 2) : 3 : 1; e(); + c(1); xs[c++] = f(0) ? x() ? x() ? 4 : 2 : 3 : 1; e(); + + c(2); xs[c++] = t(0) ? (f(1) ? (x() ? 2 : 3) : 1) : 4; e(); + c(2); xs[c++] = t(0) ? f(1) ? (x() ? 2 : 3) : 1 : 4; e(); + c(2); xs[c++] = t(0) ? f(1) ? x() ? 2 : 3 : 1 : 4; e(); + + c(3); xs[c++] = t(0) ? (t(1) ? (f(2) ? 2 : 1) : 3) : 4; e(); + c(3); xs[c++] = t(0) ? t(1) ? (f(2) ? 2 : 1) : 3 : 4; e(); + c(3); xs[c++] = t(0) ? t(1) ? f(2) ? 2 : 1 : 3 : 4; e(); + + // b ? (b ? (b ? (b ? e : e) : e) : e) : e + c(4); xs[c++] = t(0) ? (t(1) ? (t(2) ? (t(3) ? 1 : 2) : 3) : 4) : 5; e(); + c(4); xs[c++] = t(0) ? t(1) ? (t(2) ? (t(3) ? 1 : 2) : 3) : 4 : 5; e(); + c(4); xs[c++] = t(0) ? t(1) ? t(2) ? (t(3) ? 1 : 2) : 3 : 4 : 5; e(); + c(4); xs[c++] = t(0) ? t(1) ? t(2) ? t(3) ? 1 : 2 : 3 : 4 : 5; e(); + + c(1); xs[c++] = f(0) ? (x() ? (x() ? (x() ? 5 : 2) : 3) : 4) : 1; e(); + c(1); xs[c++] = f(0) ? x() ? (x() ? (x() ? 5 : 2) : 3) : 4 : 1; e(); + c(1); xs[c++] = f(0) ? x() ? x() ? (x() ? 5 : 2) : 3 : 4 : 1; e(); + c(1); xs[c++] = f(0) ? x() ? x() ? x() ? 5 : 2 : 3 : 4 : 1; e(); + + c(2); xs[c++] = t(0) ? (f(1) ? (x() ? (x() ? 4 : 2) : 3) : 1) : 5; e(); + c(2); xs[c++] = t(0) ? f(1) ? (x() ? (x() ? 4 : 2) : 3) : 1 : 5; e(); + c(2); xs[c++] = t(0) ? f(1) ? x() ? (x() ? 4 : 2) : 3 : 1 : 5; e(); + c(2); xs[c++] = t(0) ? f(1) ? x() ? x() ? 4 : 2 : 3 : 1 : 5; e(); + + c(3); xs[c++] = t(0) ? (t(1) ? (f(2) ? (x() ? 3 : 2) : 1) : 4) : 5; e(); + c(3); xs[c++] = t(0) ? t(1) ? (f(2) ? (x() ? 3 : 2) : 1) : 4 : 5; e(); + c(3); xs[c++] = t(0) ? t(1) ? f(2) ? (x() ? 3 : 2) : 1 : 4 : 5; e(); + c(3); xs[c++] = t(0) ? t(1) ? f(2) ? x() ? 3 : 2 : 1 : 4 : 5; e(); + + c(4); xs[c++] = t(0) ? (t(1) ? (t(2) ? (f(3) ? 2 : 1) : 3) : 4) : 5; e(); + c(4); xs[c++] = t(0) ? t(1) ? (t(2) ? (f(3) ? 2 : 1) : 3) : 4 : 5; e(); + c(4); xs[c++] = t(0) ? t(1) ? t(2) ? (f(3) ? 2 : 1) : 3 : 4 : 5; e(); + c(4); xs[c++] = t(0) ? t(1) ? t(2) ? f(3) ? 2 : 1 : 3 : 4 : 5; e(); + + // b ? e : (b ? e : e) + c(1); xs[c++] = t(0) ? 1 : (x() ? 2 : 3); e(); + c(1); xs[c++] = t(0) ? 1 : x() ? 2 : 3 ; e(); + + c(2); xs[c++] = f(0) ? 2 : (t(1) ? 1 : 3); e(); + c(2); xs[c++] = f(0) ? 2 : t(1) ? 1 : 3 ; e(); + + c(2); xs[c++] = f(0) ? 2 : (f(1) ? 3 : 1); e(); + c(2); xs[c++] = f(0) ? 2 : f(1) ? 3 : 1 ; e(); + + // b ? e : (b ? e : (b ? e : e)) + c(1); xs[c++] = t(0) ? 1 : (x() ? 2 : (x() ? 3 : 4)); e(); + c(1); xs[c++] = t(0) ? 1 : x() ? 2 : (x() ? 3 : 4) ; e(); + c(1); xs[c++] = t(0) ? 1 : x() ? 2 : x() ? 3 : 4 ; e(); + + c(2); xs[c++] = f(0) ? 2 : (t(1) ? 1 : (x() ? 3 : 4)); e(); + c(2); xs[c++] = f(0) ? 2 : t(1) ? 1 : (x() ? 3 : 4) ; e(); + c(2); xs[c++] = f(0) ? 2 : t(1) ? 1 : x() ? 3 : 4 ; e(); + + c(3); xs[c++] = f(0) ? 2 : (f(1) ? 3 : (t(2) ? 1 : 4)); e(); + c(3); xs[c++] = f(0) ? 2 : f(1) ? 3 : (t(2) ? 1 : 4) ; e(); + c(3); xs[c++] = f(0) ? 2 : f(1) ? 3 : t(2) ? 1 : 4 ; e(); + + c(3); xs[c++] = f(0) ? 2 : (f(1) ? 3 : (f(2) ? 4 : 1)); e(); + c(3); xs[c++] = f(0) ? 2 : f(1) ? 3 : (f(2) ? 4 : 1) ; e(); + c(3); xs[c++] = f(0) ? 2 : f(1) ? 3 : f(2) ? 4 : 1 ; e(); + + // b ? (b ? (b ? e : e) : (b ? e : e)) : e + c(3); xs[c++] = t(0) ? (t(1) ? (t(2) ? 1 : 2) : (x() ? 3 : 4)) : 5; e(); + c(3); xs[c++] = t(0) ? (t(1) ? t(2) ? 1 : 2 : (x() ? 3 : 4)) : 5; e(); + c(3); xs[c++] = t(0) ? (t(1) ? (t(2) ? 1 : 2) : x() ? 3 : 4 ) : 5; e(); + c(3); xs[c++] = t(0) ? t(1) ? (t(2) ? 1 : 2) : x() ? 3 : 4 : 5; e(); + c(3); xs[c++] = t(0) ? (t(1) ? t(2) ? 1 : 2 : x() ? 3 : 4 ) : 5; e(); + c(3); xs[c++] = t(0) ? t(1) ? t(2) ? 1 : 2 : x() ? 3 : 4 : 5; e(); + + // b?e:e + c(); xs[c++] = ot instanceof t ? 1 : 2; e(); + c(); xs[c++] = o instanceof t ? 2 : 1; e(); + + // b ? (b : e : e) : e + c(); xs[c++] = ot instanceof t ? o instanceof t ? 2 : 1 : 3; e(); + c(); xs[c++] = ot instanceof t ? (o instanceof t ? 2 : 1) : 3; e(); + + // b ? ( b : e : e) : e + c(); xs[c++] = o instanceof t ? x() ? 2 : 3 : 1; e(); + c(); xs[c++] = o instanceof t ? (x() ? 2 : 3) : 1; e(); + + // b ? (b ? (b ? e : e) : e) : e + c(); xs[c++] = ot instanceof t ? (ot instanceof t ? (ot instanceof t ? 1 : 2) : 3) : 4; e(); + c(); xs[c++] = ot instanceof t ? ot instanceof t ? (ot instanceof t ? 1 : 2) : 3 : 4; e(); + c(); xs[c++] = ot instanceof t ? ot instanceof t ? ot instanceof t ? 1 : 2 : 3 : 4; e(); + + c(); xs[c++] = o instanceof t ? (x() ? (x() ? 4 : 2) : 3) : 1; e(); + c(); xs[c++] = o instanceof t ? x() ? (x() ? 4 : 2) : 3 : 1; e(); + c(); xs[c++] = o instanceof t ? x() ? x() ? 4 : 2 : 3 : 1; e(); + + c(); xs[c++] = ot instanceof t ? (o instanceof t ? (x() ? 2 : 3) : 1) : 4; e(); + c(); xs[c++] = ot instanceof t ? o instanceof t ? (x() ? 2 : 3) : 1 : 4; e(); + c(); xs[c++] = ot instanceof t ? o instanceof t ? x() ? 2 : 3 : 1 : 4; e(); + + c(); xs[c++] = ot instanceof t ? (ot instanceof t ? (o instanceof t ? 2 : 1) : 3) : 4; e(); + c(); xs[c++] = ot instanceof t ? ot instanceof t ? (o instanceof t ? 2 : 1) : 3 : 4; e(); + c(); xs[c++] = ot instanceof t ? ot instanceof t ? o instanceof t ? 2 : 1 : 3 : 4; e(); + + // b ? (b ? (b ? (b ? e : e) : e) : e) : e + c(); xs[c++] = ot instanceof t ? (ot instanceof t ? (ot instanceof t ? (ot instanceof t ? 1 : 2) : 3) : 4) : 5; e(); + c(); xs[c++] = ot instanceof t ? ot instanceof t ? (ot instanceof t ? (ot instanceof t ? 1 : 2) : 3) : 4 : 5; e(); + c(); xs[c++] = ot instanceof t ? ot instanceof t ? ot instanceof t ? (ot instanceof t ? 1 : 2) : 3 : 4 : 5; e(); + c(); xs[c++] = ot instanceof t ? ot instanceof t ? ot instanceof t ? ot instanceof t ? 1 : 2 : 3 : 4 : 5; e(); + + c(); xs[c++] = o instanceof t ? (x() ? (x() ? (x() ? 5 : 2) : 3) : 4) : 1; e(); + c(); xs[c++] = o instanceof t ? x() ? (x() ? (x() ? 5 : 2) : 3) : 4 : 1; e(); + c(); xs[c++] = o instanceof t ? x() ? x() ? (x() ? 5 : 2) : 3 : 4 : 1; e(); + c(); xs[c++] = o instanceof t ? x() ? x() ? x() ? 5 : 2 : 3 : 4 : 1; e(); + + c(); xs[c++] = ot instanceof t ? (o instanceof t ? (x() ? (x() ? 4 : 2) : 3) : 1) : 5; e(); + c(); xs[c++] = ot instanceof t ? o instanceof t ? (x() ? (x() ? 4 : 2) : 3) : 1 : 5; e(); + c(); xs[c++] = ot instanceof t ? o instanceof t ? x() ? (x() ? 4 : 2) : 3 : 1 : 5; e(); + c(); xs[c++] = ot instanceof t ? o instanceof t ? x() ? x() ? 4 : 2 : 3 : 1 : 5; e(); + + c(); xs[c++] = ot instanceof t ? (ot instanceof t ? (o instanceof t ? (x() ? 3 : 2) : 1) : 4) : 5; e(); + c(); xs[c++] = ot instanceof t ? ot instanceof t ? (o instanceof t ? (x() ? 3 : 2) : 1) : 4 : 5; e(); + c(); xs[c++] = ot instanceof t ? ot instanceof t ? o instanceof t ? (x() ? 3 : 2) : 1 : 4 : 5; e(); + c(); xs[c++] = ot instanceof t ? ot instanceof t ? o instanceof t ? x() ? 3 : 2 : 1 : 4 : 5; e(); + + c(); xs[c++] = ot instanceof t ? (ot instanceof t ? (ot instanceof t ? (o instanceof t ? 2 : 1) : 3) : 4) : 5; e(); + c(); xs[c++] = ot instanceof t ? ot instanceof t ? (ot instanceof t ? (o instanceof t ? 2 : 1) : 3) : 4 : 5; e(); + c(); xs[c++] = ot instanceof t ? ot instanceof t ? ot instanceof t ? (o instanceof t ? 2 : 1) : 3 : 4 : 5; e(); + c(); xs[c++] = ot instanceof t ? ot instanceof t ? ot instanceof t ? o instanceof t ? 2 : 1 : 3 : 4 : 5; e(); + + // b ? e : (b ? e : e) + c(); xs[c++] = ot instanceof t ? 1 : (x() ? 2 : 3); e(); + c(); xs[c++] = ot instanceof t ? 1 : x() ? 2 : 3 ; e(); + + c(); xs[c++] = o instanceof t ? 2 : (ot instanceof t ? 1 : 3); e(); + c(); xs[c++] = o instanceof t ? 2 : ot instanceof t ? 1 : 3 ; e(); + + c(); xs[c++] = o instanceof t ? 2 : (o instanceof t ? 3 : 1); e(); + c(); xs[c++] = o instanceof t ? 2 : o instanceof t ? 3 : 1 ; e(); + + // b ? e : (b ? e : (b ? e : e)) + c(); xs[c++] = ot instanceof t ? 1 : (x() ? 2 : (x() ? 3 : 4)); e(); + c(); xs[c++] = ot instanceof t ? 1 : x() ? 2 : (x() ? 3 : 4) ; e(); + c(); xs[c++] = ot instanceof t ? 1 : x() ? 2 : x() ? 3 : 4 ; e(); + + c(); xs[c++] = o instanceof t ? 2 : (ot instanceof t ? 1 : (x() ? 3 : 4)); e(); + c(); xs[c++] = o instanceof t ? 2 : ot instanceof t ? 1 : (x() ? 3 : 4) ; e(); + c(); xs[c++] = o instanceof t ? 2 : ot instanceof t ? 1 : x() ? 3 : 4 ; e(); + + c(); xs[c++] = o instanceof t ? 2 : (o instanceof t ? 3 : (ot instanceof t ? 1 : 4)); e(); + c(); xs[c++] = o instanceof t ? 2 : o instanceof t ? 3 : (ot instanceof t ? 1 : 4) ; e(); + c(); xs[c++] = o instanceof t ? 2 : o instanceof t ? 3 : ot instanceof t ? 1 : 4 ; e(); + + c(); xs[c++] = o instanceof t ? 2 : (o instanceof t ? 3 : (o instanceof t ? 4 : 1)); e(); + c(); xs[c++] = o instanceof t ? 2 : o instanceof t ? 3 : (o instanceof t ? 4 : 1) ; e(); + c(); xs[c++] = o instanceof t ? 2 : o instanceof t ? 3 : o instanceof t ? 4 : 1 ; e(); + + // b ? (b ? (b ? e : e) : (b ? e : e)) : e + c(); xs[c++] = ot instanceof t ? (ot instanceof t ? (ot instanceof t ? 1 : 2) : (x() ? 3 : 4)) : 5; e(); + c(); xs[c++] = ot instanceof t ? (ot instanceof t ? ot instanceof t ? 1 : 2 : (x() ? 3 : 4)) : 5; e(); + c(); xs[c++] = ot instanceof t ? (ot instanceof t ? (ot instanceof t ? 1 : 2) : x() ? 3 : 4 ) : 5; e(); + c(); xs[c++] = ot instanceof t ? ot instanceof t ? (ot instanceof t ? 1 : 2) : x() ? 3 : 4 : 5; e(); + c(); xs[c++] = ot instanceof t ? (ot instanceof t ? ot instanceof t ? 1 : 2 : x() ? 3 : 4 ) : 5; e(); + c(); xs[c++] = ot instanceof t ? ot instanceof t ? ot instanceof t ? 1 : 2 : x() ? 3 : 4 : 5; e(); + + // += b ? e : e + c(1,0); xs[c++] = z += t(0) ? 1 : 9; e(); + c(1,2); xs[c++] = z -= t(0) ? 1 : 9; e(); + c(1,1); xs[c++] = z *= t(0) ? 1 : 9; e(); + c(1,1); xs[c++] = z /= t(0) ? 1 : 9; e(); + c(1,1); xs[c++] = z &= t(0) ? 1 : 9; e(); + c(1,0); xs[c++] = z |= t(0) ? 1 : 9; e(); + c(1,3); xs[c++] = z ^= t(0) ? 2 : 9; e(); + c(1,3); xs[c++] = z %= t(0) ? 2 : 9; e(); + c(1,0); xs[c++] = z <<= t(0) ? 1 : 9; e(); + c(1,3); xs[c++] = z >>= t(0) ? 1 : 9; e(); + c(1,3); xs[c++] = z >>>= t(0) ? 1 : 0; e(); + + c(1,0); xs[c++] = z += f(0) ? 9 : 1; e(); + c(1,2); xs[c++] = z -= f(0) ? 9 : 1; e(); + c(1,1); xs[c++] = z *= f(0) ? 9 : 1; e(); + c(1,1); xs[c++] = z /= f(0) ? 9 : 1; e(); + c(1,1); xs[c++] = z &= f(0) ? 9 : 1; e(); + c(1,0); xs[c++] = z |= f(0) ? 9 : 1; e(); + c(1,3); xs[c++] = z ^= f(0) ? 9 : 2; e(); + c(1,3); xs[c++] = z %= f(0) ? 9 : 2; e(); + c(1,0); xs[c++] = z <<= f(0) ? 9 : 1; e(); + c(1,3); xs[c++] = z >>= f(0) ? 9 : 1; e(); + c(1,3); xs[c++] = z >>>= f(0) ? 0 : 1; e(); + + // b ? e + (b ? e : e) : e + c(2); xs[c++] = t(0) ? 2 + (t(1) ? -1 : 1) : 3; e(); + c(1); xs[c++] = f(0) ? 2 + (x() ? 3 : 1) : 1; e(); + c(2); xs[c++] = t(0) ? 2 + (f(1) ? 1 : -1) : 3; e(); + + // b ? e + (b ? e : e) : (b ? e : e) + c(2); xs[c++] = t(0) ? 2 + (t(1) ? -1 : 1) : (x() ? 3 : 4); e(); + c(2); xs[c++] = t(0) ? 2 + (t(1) ? -1 : 1) : x() ? 3 : 4 ; e(); + + c(2); xs[c++] = f(0) ? 2 + (x() ? -1 : 1) : (t(1) ? 1 : 4); e(); + c(2); xs[c++] = f(0) ? 2 + (x() ? -1 : 1) : t(1) ? 1 : 4 ; e(); + + c(2); xs[c++] = f(0) ? 2 + (x() ? -1 : 1) : (f(1) ? 4 : 1); e(); + c(2); xs[c++] = f(0) ? 2 + (x() ? -1 : 1) : f(1) ? 4 : 1 ; e(); + + c(2); xs[c++] = t(0) ? 2 + (f(1) ? 1 : -1) : (x() ? 3 : 4); e(); + c(2); xs[c++] = t(0) ? 2 + (f(1) ? 1 : -1) : x() ? 3 : 4 ; e(); + + // b ? z = (b ? e : e) : e; + // problems + c(2,-1); xs[c++] = t(0) ? z = (t(1) ? 1 : 2) : 3; e(1); + c(2,-1); xs[c++] = t(0) ? z = t(1) ? 1 : 2 : 3; e(1); + + c(1,-1); xs[c++] = f(0) ? z = (x() ? 3 : 2) : 1; e(-1); + c(1,-1); xs[c++] = f(0) ? z = x() ? 3 : 2 : 1; e(-1); + + // b ? (z = (b ? e : e)) : (b ? e : e) + // problems + c(2,-1); xs[c++] = t(0) ? (z = (t(1) ? 1 : 2)) : (x() ? 3 : 4); e(1); + c(2,-1); xs[c++] = t(0) ? z = (t(1) ? 1 : 2) : (x() ? 3 : 4); e(1); + c(2,-1); xs[c++] = t(0) ? (z = (t(1) ? 1 : 2)) : x() ? 3 : 4 ; e(1); + c(2,-1); xs[c++] = t(0) ? (z = t(1) ? 1 : 2 ) : (x() ? 3 : 4); e(1); + c(2,-1); xs[c++] = t(0) ? (z = t(1) ? 1 : 2 ) : x() ? 3 : 4 ; e(1); + c(2,-1); xs[c++] = t(0) ? z = (t(1) ? 1 : 2 ) : x() ? 3 : 4 ; e(1); + c(2,-1); xs[c++] = t(0) ? z = t(1) ? 1 : 2 : x() ? 3 : 4 ; e(1); + + c(2,-1); xs[c++] = f(0) ? (z = (x() ? 3 : 2)) : (t(1) ? 1 : 4); e(-1); + c(2,-1); xs[c++] = f(0) ? z = (x() ? 3 : 2) : (t(1) ? 1 : 4); e(-1); + c(2,-1); xs[c++] = f(0) ? (z = (x() ? 3 : 2)) : t(1) ? 1 : 4 ; e(-1); + c(2,-1); xs[c++] = f(0) ? (z = x() ? 3 : 2 ) : (t(1) ? 1 : 4); e(-1); + c(2,-1); xs[c++] = f(0) ? (z = x() ? 3 : 2 ) : t(1) ? 1 : 4 ; e(-1); + c(2,-1); xs[c++] = f(0) ? z = (x() ? 3 : 2 ) : t(1) ? 1 : 4 ; e(-1); + c(2,-1); xs[c++] = f(0) ? z = x() ? 3 : 2 : t(1) ? 1 : 4 ; e(-1); + + c(2,-1); xs[c++] = f(0) ? (z = (x() ? 3: 2)) : (f(1) ? 4 : 1); e(-1); + c(2,-1); xs[c++] = f(0) ? z = (x() ? 3 : 2) : (f(1) ? 4 : 1); e(-1); + c(2,-1); xs[c++] = f(0) ? (z = (x() ? 3 : 2)) : f(1) ? 4 : 1 ; e(-1); + c(2,-1); xs[c++] = f(0) ? (z = x() ? 3 : 2 ) : (f(1) ? 4 : 1); e(-1); + c(2,-1); xs[c++] = f(0) ? (z = x() ? 3 : 2 ) : f(1) ? 4 : 1 ; e(-1); + c(2,-1); xs[c++] = f(0) ? z = (x() ? 3 : 2 ) : f(1) ? 4 : 1 ; e(-1); + c(2,-1); xs[c++] = f(0) ? z = x() ? 3 : 2 : f(1) ? 4 : 1 ; e(-1); + + + for (int i = 0; i < xs.length; i++) { + if (xs[i] != 0) { + Tester.check(xs[i]==1, "xs["+i+"]=" + xs[i] + ", not 1!"); + } + } + + } + + static class t {} + + int cur = 0; + int expect = -1; + private void c(int expect, int z) { this.expect = expect; cur = 0; this.z = z; } + private void c(int expect) { c(expect, 0); } + private void c() { c(-1); } + private void e(int z) { + if (z != -123) { + Tester.check(this.z == z, c + ": z=" + this.z + ", should be " + z); + } + if (expect >= 0) { + Tester.check(expect == cur, c + ": expect=" + expect + ", should be " + cur); + } + } + private void e() { e(-123); } + private boolean t(int i) { return b(i, true); } + private boolean f(int i) { return b(i, false); } + private boolean x() { return b(-1, false); } + private boolean b(int i, boolean b) { + Tester.check(i >= 0, c + ": this expression shouldn't have been evaluated"); + if (i >= 0) Tester.check(i == cur, c + ": i=" + i + ", should be " + cur); + cur++; + return b; + } + + +} diff --git a/tests/pureJava/NestedConstructionsOfLocalClasses.java b/tests/pureJava/NestedConstructionsOfLocalClasses.java new file mode 100644 index 000000000..1f9f0c378 --- /dev/null +++ b/tests/pureJava/NestedConstructionsOfLocalClasses.java @@ -0,0 +1,9 @@ +public class NestedConstructionsOfLocalClasses { + public static void main(String[] args) { + class D { + void x() { + new D(); + } + } + } +} diff --git a/tests/pureJava/NestedFinally.java b/tests/pureJava/NestedFinally.java new file mode 100644 index 000000000..b67ea771e --- /dev/null +++ b/tests/pureJava/NestedFinally.java @@ -0,0 +1,22 @@ +public class NestedFinally { + public static void main(String[] args) { + m(3); + } + public static Object m(int key) { + try { + int x = 3; + int y = 4; + int i = 5; + try { + return null; + } finally { + i++; + } + } finally { + Object x = null; + Object y = null; + Object i = null; + key++; + } + } +} diff --git a/tests/pureJava/NestedInners.java b/tests/pureJava/NestedInners.java new file mode 100644 index 000000000..ed07573bf --- /dev/null +++ b/tests/pureJava/NestedInners.java @@ -0,0 +1,33 @@ +import org.aspectj.testing.Tester; + +public class NestedInners { + public static void main(String[] args) { + Runnable r = new Outer().m("arg:"); + r.run(); + Tester.check("arg:varg:0"); + Tester.check("deep-arg:varg:1"); + r.run(); + Tester.check("arg:varg:2"); + Tester.check("deep-arg:varg:3"); + } +} + + +class Outer { + public Runnable m(final String sarg) { + final String svar = "v"+sarg; + + return new Runnable() { + int counter = 0; + + public void run() { + Tester.note(sarg + svar+counter++); + new Runnable() { + public void run() { + Tester.note("deep-" + sarg + svar+counter++); + } + }.run(); + } + }; + } +} diff --git a/tests/pureJava/NestedSynchronized.java b/tests/pureJava/NestedSynchronized.java new file mode 100644 index 000000000..a9032912a --- /dev/null +++ b/tests/pureJava/NestedSynchronized.java @@ -0,0 +1,18 @@ +public class NestedSynchronized { + static Object lockA = new Object(); + static Object lockB = new Object(); + + static int bug() { + synchronized (lockA) { + synchronized (lockB) { + return 0; + } + } + } + + + public static void main(String[] args) { + bug(); + } +} + diff --git a/tests/pureJava/NonConstants.java b/tests/pureJava/NonConstants.java new file mode 100644 index 000000000..f3d1468f4 --- /dev/null +++ b/tests/pureJava/NonConstants.java @@ -0,0 +1,20 @@ +public class NonConstants { + private static final int A = 1; + private static final int B = 2; + private static final int C = 3; + private static final int D = 4; + private static final int E = 5; + + public static void main(String[] args) { + NonConstants nc = new NonConstants(); + int x = 10; + + switch(x) { + case (NonConstants).A: break; + case ((NonConstants)null).B: break; //ERR + case (nc).C: break; //ERR + case nc.D: break; //ERR + case ((((NonConstants)))).E: break; + } + } +} diff --git a/tests/pureJava/NonNullaryAnonymous.java b/tests/pureJava/NonNullaryAnonymous.java new file mode 100644 index 000000000..457f6fe4f --- /dev/null +++ b/tests/pureJava/NonNullaryAnonymous.java @@ -0,0 +1,9 @@ +public class NonNullaryAnonymous { + + NonNullaryAnonymous(int x) {} + + Object x = new NonNullaryAnonymous(3) {}; + + public static void main(String[] args) { + } +} diff --git a/tests/pureJava/NonOverEagerConstantFolding.java b/tests/pureJava/NonOverEagerConstantFolding.java new file mode 100644 index 000000000..5ad7bede7 --- /dev/null +++ b/tests/pureJava/NonOverEagerConstantFolding.java @@ -0,0 +1,28 @@ +import org.aspectj.testing.Tester; + +class NonOverEagerConstantFolding { + public static final int i = 3; + static boolean thingy = false; + static NonOverEagerConstantFolding foo() { + thingy = true; + return null; + } + public static void main(String[] args) { + int j = 3 + foo().i; + Tester.check(thingy, "didn't evaluate expr part of field access expr"); + } +} +/* +class Test { + int i = 3; + class C { + C() { + ++j; + } + int j = i + 2; + } + void foo() { + new C(); + } +} +*/ diff --git a/tests/pureJava/NonStmtInFor.java b/tests/pureJava/NonStmtInFor.java new file mode 100644 index 000000000..80d17cbdf --- /dev/null +++ b/tests/pureJava/NonStmtInFor.java @@ -0,0 +1,8 @@ +public class NonStmtInFor { + void foo(int i, int j) { + for (i = 0; i < 1; j / i, i++) {} + } + public static void main(String[] args) { + } +} + diff --git a/tests/pureJava/OctalChars.java b/tests/pureJava/OctalChars.java new file mode 100644 index 000000000..2313af0ff --- /dev/null +++ b/tests/pureJava/OctalChars.java @@ -0,0 +1,51 @@ +import org.aspectj.testing.Tester; +public class OctalChars { + public static void main(String[] args) { + new OctalChars().realMain(args); + } + public void realMain(String[] args) { + char[][] chars = { + {'\0','\00','\000',},{'\1','\01','\001',},{'\2','\02','\002',},{'\3','\03','\003',}, + {'\4','\04','\004',},{'\5','\05','\005',},{'\6','\06','\006',},{'\7','\07','\007',}, + {'\10','\010',},{'\11','\011',},{'\12','\012',},{'\13','\013',}, + {'\14','\014',},{'\15','\015',},{'\16','\016',},{'\17','\017',}, + {'\20','\020',},{'\21','\021',},{'\22','\022',},{'\23','\023',}, + {'\24','\024',},{'\25','\025',},{'\26','\026',},{'\27','\027',}, + {'\30','\030',},{'\31','\031',},{'\32','\032',},{'\33','\033',}, + {'\34','\034',},{'\35','\035',},{'\36','\036',},{'\37','\037',}, + {'\40','\040',},{'\41','\041',},{'\42','\042',},{'\43','\043',}, + {'\44','\044',},{'\45','\045',},{'\46','\046',},{'\47','\047',}, + {'\50','\050',},{'\51','\051',},{'\52','\052',},{'\53','\053',}, + {'\54','\054',},{'\55','\055',},{'\56','\056',},{'\57','\057',}, + {'\60','\060',},{'\61','\061',},{'\62','\062',},{'\63','\063',}, + {'\64','\064',},{'\65','\065',},{'\66','\066',},{'\67','\067',}, + {'\70','\070',},{'\71','\071',},{'\72','\072',},{'\73','\073',}, + {'\74','\074',},{'\75','\075',},{'\76','\076',},{'\77','\077',}, + }; + + for (int i = 0; i < chars.length; i++) { + char[] cs = chars[i]; + for (int j = 0; j < cs.length; j++) { + Tester.check((int)cs[j]==i, i + "!='\\"+Integer.toOctalString(i)+"'"); + } + } + +// for (int i = 0; i < 8; i++) { +// String s = Integer.toOctalString(i)+""; +// System.out.print("{"); +// for (int j = 0; j < 3; j++, s = "0" + s) { +// System.out.print("'\\"+s+"',"); +// } +// System.out.println("},"); +// } +// for (int i = 010; i < 0100; i++) { +// String s = Integer.toOctalString(i)+""; +// System.out.print("{"); +// for (int j = 0; j < 2; j++, s = "0" + s) { +// System.out.print("'\\"+s+"',"); +// } +// System.out.println("},"); +// } + } + +} diff --git a/tests/pureJava/OneArmedPrimitiveTests.java b/tests/pureJava/OneArmedPrimitiveTests.java new file mode 100644 index 000000000..e786a3d09 --- /dev/null +++ b/tests/pureJava/OneArmedPrimitiveTests.java @@ -0,0 +1,369 @@ +import org.aspectj.testing.Tester; + +public class OneArmedPrimitiveTests { + static byte bn = -1; + static byte bz = 0; + static byte b1 = 1; + + static short sn = -1; + static short sz = 0; + static short s1 = 1; + + static int in = -1; + static int iz = 0; + static int i1 = 1; + + static long ln = -1; + static long lz = 0; + static long l1 = 1; + + static float fn = -1; + static float fz = 0; + static float f1 = 1; + static float fx = Float.NaN; + + static double dn = -1; + static double dz = 0; + static double d1 = 1; + static double dx = Double.NaN; + + static char cz = 0; + static char c1 = 1; + + static boolean neg(boolean b) { return ! b; } + static boolean pos(boolean b) { return b; } + + public static void main(String[] args) { + doByte(); + doShort(); + doInt(); + doLong(); + doFloat(); + doDouble(); + doChar(); + } + + static void doByte() { + Tester.check(neg(0 < bn), "! 0 < bn"); + Tester.check(neg(0 <= bn), "! 0 <= bn"); + Tester.check(neg(0 == bn), "! 0 == bn"); + Tester.check(pos(0 != bn), "0 != bn"); + Tester.check(pos(0 > bn), "0 > bn"); + Tester.check(pos(0 >= bn), "0 >= bn"); + + Tester.check(pos(bn < 0), "bn < 0"); + Tester.check(pos(bn <= 0), "bn <= 0"); + Tester.check(neg(bn == 0), "! bn == 0"); + Tester.check(pos(bn != 0), "bn != 0"); + Tester.check(neg(bn > 0), "! bn > 0"); + Tester.check(neg(bn >= 0), "! bn >= 0"); + + Tester.check(neg(0 < bz), "! 0 < bz"); + Tester.check(pos(0 <= bz), "0 <= bz"); + Tester.check(pos(0 == bz), "0 == bz"); + Tester.check(neg(0 != bz), "! 0 != bz"); + Tester.check(neg(0 > bz), "! 0 > bz"); + Tester.check(pos(0 >= bz), "0 >= bz"); + + Tester.check(neg(bz < 0), "! bz < 0"); + Tester.check(pos(bz <= 0), "bz <= 0"); + Tester.check(pos(bz == 0), "bz == 0"); + Tester.check(neg(bz != 0), "! bz != 0"); + Tester.check(neg(bz > 0), "! bz > 0"); + Tester.check(pos(bz >= 0), "bz >= 0"); + + Tester.check(pos(0 < b1), "0 < b1"); + Tester.check(pos(0 <= b1), "0 <= b1"); + Tester.check(neg(0 == b1), "! 0 == b1"); + Tester.check(pos(0 != b1), "0 != b1"); + Tester.check(neg(0 > b1), "! 0 > b1"); + Tester.check(neg(0 >= b1), "! 0 >= b1"); + + Tester.check(neg(b1 < 0), "! b1 < 0"); + Tester.check(neg(b1 <= 0), "! b1 <= 0"); + Tester.check(neg(b1 == 0), "! b1 == 0"); + Tester.check(pos(b1 != 0), "b1 != 0"); + Tester.check(pos(b1 > 0), "b1 > 0"); + Tester.check(pos(b1 >= 0), "b1 >= 0"); + } + + static void doShort() { + Tester.check(neg(0 < sn), "! 0 < sn"); + Tester.check(neg(0 <= sn), "! 0 <= sn"); + Tester.check(neg(0 == sn), "! 0 == sn"); + Tester.check(pos(0 != sn), "0 != sn"); + Tester.check(pos(0 > sn), "0 > sn"); + Tester.check(pos(0 >= sn), "0 >= sn"); + + Tester.check(pos(sn < 0), "sn < 0"); + Tester.check(pos(sn <= 0), "sn <= 0"); + Tester.check(neg(sn == 0), "! sn == 0"); + Tester.check(pos(sn != 0), "sn != 0"); + Tester.check(neg(sn > 0), "! sn > 0"); + Tester.check(neg(sn >= 0), "! sn >= 0"); + + Tester.check(neg(0 < sz), "! 0 < sz"); + Tester.check(pos(0 <= sz), "0 <= sz"); + Tester.check(pos(0 == sz), "0 == sz"); + Tester.check(neg(0 != sz), "! 0 != sz"); + Tester.check(neg(0 > sz), "! 0 > sz"); + Tester.check(pos(0 >= sz), "0 >= sz"); + + Tester.check(neg(sz < 0), "! sz < 0"); + Tester.check(pos(sz <= 0), "sz <= 0"); + Tester.check(pos(sz == 0), "sz == 0"); + Tester.check(neg(sz != 0), "! sz != 0"); + Tester.check(neg(sz > 0), "! sz > 0"); + Tester.check(pos(sz >= 0), "sz >= 0"); + + Tester.check(pos(0 < s1), "0 < s1"); + Tester.check(pos(0 <= s1), "0 <= s1"); + Tester.check(neg(0 == s1), "! 0 == s1"); + Tester.check(pos(0 != s1), "0 != s1"); + Tester.check(neg(0 > s1), "! 0 > s1"); + Tester.check(neg(0 >= s1), "! 0 >= s1"); + + Tester.check(neg(s1 < 0), "! s1 < 0"); + Tester.check(neg(s1 <= 0), "! s1 <= 0"); + Tester.check(neg(s1 == 0), "! s1 == 0"); + Tester.check(pos(s1 != 0), "s1 != 0"); + Tester.check(pos(s1 > 0), "s1 > 0"); + Tester.check(pos(s1 >= 0), "s1 >= 0"); + } + + static void doInt() { + Tester.check(neg(0 < in), "! 0 < in"); + Tester.check(neg(0 <= in), "! 0 <= in"); + Tester.check(neg(0 == in), "! 0 == in"); + Tester.check(pos(0 != in), "0 != in"); + Tester.check(pos(0 > in), "0 > in"); + Tester.check(pos(0 >= in), "0 >= in"); + + Tester.check(pos(in < 0), "in < 0"); + Tester.check(pos(in <= 0), "in <= 0"); + Tester.check(neg(in == 0), "! in == 0"); + Tester.check(pos(in != 0), "in != 0"); + Tester.check(neg(in > 0), "! in > 0"); + Tester.check(neg(in >= 0), "! in >= 0"); + + Tester.check(neg(0 < iz), "! 0 < iz"); + Tester.check(pos(0 <= iz), "0 <= iz"); + Tester.check(pos(0 == iz), "0 == iz"); + Tester.check(neg(0 != iz), "! 0 != iz"); + Tester.check(neg(0 > iz), "! 0 > iz"); + Tester.check(pos(0 >= iz), "0 >= iz"); + + Tester.check(neg(iz < 0), "! iz < 0"); + Tester.check(pos(iz <= 0), "iz <= 0"); + Tester.check(pos(iz == 0), "iz == 0"); + Tester.check(neg(iz != 0), "! iz != 0"); + Tester.check(neg(iz > 0), "! iz > 0"); + Tester.check(pos(iz >= 0), "iz >= 0"); + + Tester.check(pos(0 < i1), "0 < i1"); + Tester.check(pos(0 <= i1), "0 <= i1"); + Tester.check(neg(0 == i1), "! 0 == i1"); + Tester.check(pos(0 != i1), "0 != i1"); + Tester.check(neg(0 > i1), "! 0 > i1"); + Tester.check(neg(0 >= i1), "! 0 >= i1"); + + Tester.check(neg(i1 < 0), "! i1 < 0"); + Tester.check(neg(i1 <= 0), "! i1 <= 0"); + Tester.check(neg(i1 == 0), "! i1 == 0"); + Tester.check(pos(i1 != 0), "i1 != 0"); + Tester.check(pos(i1 > 0), "i1 > 0"); + Tester.check(pos(i1 >= 0), "i1 >= 0"); + } + + static void doLong() { + Tester.check(neg(0 < ln), "! 0 < ln"); + Tester.check(neg(0 <= ln), "! 0 <= ln"); + Tester.check(neg(0 == ln), "! 0 == ln"); + Tester.check(pos(0 != ln), "0 != ln"); + Tester.check(pos(0 > ln), "0 > ln"); + Tester.check(pos(0 >= ln), "0 >= ln"); + + Tester.check(pos(ln < 0), "ln < 0"); + Tester.check(pos(ln <= 0), "ln <= 0"); + Tester.check(neg(ln == 0), "! ln == 0"); + Tester.check(pos(ln != 0), "ln != 0"); + Tester.check(neg(ln > 0), "! ln > 0"); + Tester.check(neg(ln >= 0), "! ln >= 0"); + + Tester.check(neg(0 < lz), "! 0 < lz"); + Tester.check(pos(0 <= lz), "0 <= lz"); + Tester.check(pos(0 == lz), "0 == lz"); + Tester.check(neg(0 != lz), "! 0 != lz"); + Tester.check(neg(0 > lz), "! 0 > lz"); + Tester.check(pos(0 >= lz), "0 >= lz"); + + Tester.check(neg(lz < 0), "! lz < 0"); + Tester.check(pos(lz <= 0), "lz <= 0"); + Tester.check(pos(lz == 0), "lz == 0"); + Tester.check(neg(lz != 0), "! lz != 0"); + Tester.check(neg(lz > 0), "! lz > 0"); + Tester.check(pos(lz >= 0), "lz >= 0"); + + Tester.check(pos(0 < l1), "0 < l1"); + Tester.check(pos(0 <= l1), "0 <= l1"); + Tester.check(neg(0 == l1), "! 0 == l1"); + Tester.check(pos(0 != l1), "0 != l1"); + Tester.check(neg(0 > l1), "! 0 > l1"); + Tester.check(neg(0 >= l1), "! 0 >= l1"); + + Tester.check(neg(l1 < 0), "! l1 < 0"); + Tester.check(neg(l1 <= 0), "! l1 <= 0"); + Tester.check(neg(l1 == 0), "! l1 == 0"); + Tester.check(pos(l1 != 0), "l1 != 0"); + Tester.check(pos(l1 > 0), "l1 > 0"); + Tester.check(pos(l1 >= 0), "l1 >= 0"); + } + + static void doFloat() { + Tester.check(neg(0 < fn), "! 0 < fn"); + Tester.check(neg(0 <= fn), "! 0 <= fn"); + Tester.check(neg(0 == fn), "! 0 == fn"); + Tester.check(pos(0 != fn), "0 != fn"); + Tester.check(pos(0 > fn), "0 > fn"); + Tester.check(pos(0 >= fn), "0 >= fn"); + + Tester.check(pos(fn < 0), "fn < 0"); + Tester.check(pos(fn <= 0), "fn <= 0"); + Tester.check(neg(fn == 0), "! fn == 0"); + Tester.check(pos(fn != 0), "fn != 0"); + Tester.check(neg(fn > 0), "! fn > 0"); + Tester.check(neg(fn >= 0), "! fn >= 0"); + + Tester.check(neg(0 < fz), "! 0 < fz"); + Tester.check(pos(0 <= fz), "0 <= fz"); + Tester.check(pos(0 == fz), "0 == fz"); + Tester.check(neg(0 != fz), "! 0 != fz"); + Tester.check(neg(0 > fz), "! 0 > fz"); + Tester.check(pos(0 >= fz), "0 >= fz"); + + Tester.check(neg(fz < 0), "! fz < 0"); + Tester.check(pos(fz <= 0), "fz <= 0"); + Tester.check(pos(fz == 0), "fz == 0"); + Tester.check(neg(fz != 0), "! fz != 0"); + Tester.check(neg(fz > 0), "! fz > 0"); + Tester.check(pos(fz >= 0), "fz >= 0"); + + Tester.check(pos(0 < f1), "0 < f1"); + Tester.check(pos(0 <= f1), "0 <= f1"); + Tester.check(neg(0 == f1), "! 0 == f1"); + Tester.check(pos(0 != f1), "0 != f1"); + Tester.check(neg(0 > f1), "! 0 > f1"); + Tester.check(neg(0 >= f1), "! 0 >= f1"); + + Tester.check(neg(f1 < 0), "! f1 < 0"); + Tester.check(neg(f1 <= 0), "! f1 <= 0"); + Tester.check(neg(f1 == 0), "! f1 == 0"); + Tester.check(pos(f1 != 0), "f1 != 0"); + Tester.check(pos(f1 > 0), "f1 > 0"); + Tester.check(pos(f1 >= 0), "f1 >= 0"); + + Tester.check(neg(0 < fx), "! 0 < fx"); + Tester.check(neg(0 <= fx), "! 0 <= fx"); + Tester.check(neg(0 == fx), "! 0 == fx"); + Tester.check(pos(0 != fx), "0 != fx"); + Tester.check(neg(0 > fx), "! 0 > fx"); + Tester.check(neg(0 >= fx), "! 0 >= fx"); + + Tester.check(neg(fx < 0), "! fx < 0"); + Tester.check(neg(fx <= 0), "! fx <= 0"); + Tester.check(neg(fx == 0), "! fx == 0"); + Tester.check(pos(fx != 0), "fx != 0"); + Tester.check(neg(fx > 0), "! fx > 0"); + Tester.check(neg(fx >= 0), "! fx >= 0"); + + } + + static void doDouble() { + Tester.check(neg(0 < dn), "! 0 < dn"); + Tester.check(neg(0 <= dn), "! 0 <= dn"); + Tester.check(neg(0 == dn), "! 0 == dn"); + Tester.check(pos(0 != dn), "0 != dn"); + Tester.check(pos(0 > dn), "0 > dn"); + Tester.check(pos(0 >= dn), "0 >= dn"); + + Tester.check(pos(dn < 0), "dn < 0"); + Tester.check(pos(dn <= 0), "dn <= 0"); + Tester.check(neg(dn == 0), "! dn == 0"); + Tester.check(pos(dn != 0), "dn != 0"); + Tester.check(neg(dn > 0), "! dn > 0"); + Tester.check(neg(dn >= 0), "! dn >= 0"); + + Tester.check(neg(0 < dz), "! 0 < dz"); + Tester.check(pos(0 <= dz), "0 <= dz"); + Tester.check(pos(0 == dz), "0 == dz"); + Tester.check(neg(0 != dz), "! 0 != dz"); + Tester.check(neg(0 > dz), "! 0 > dz"); + Tester.check(pos(0 >= dz), "0 >= dz"); + + Tester.check(neg(dz < 0), "! dz < 0"); + Tester.check(pos(dz <= 0), "dz <= 0"); + Tester.check(pos(dz == 0), "dz == 0"); + Tester.check(neg(dz != 0), "! dz != 0"); + Tester.check(neg(dz > 0), "! dz > 0"); + Tester.check(pos(dz >= 0), "dz >= 0"); + + Tester.check(pos(0 < d1), "0 < d1"); + Tester.check(pos(0 <= d1), "0 <= d1"); + Tester.check(neg(0 == d1), "! 0 == d1"); + Tester.check(pos(0 != d1), "0 != d1"); + Tester.check(neg(0 > d1), "! 0 > d1"); + Tester.check(neg(0 >= d1), "! 0 >= d1"); + + Tester.check(neg(d1 < 0), "! d1 < 0"); + Tester.check(neg(d1 <= 0), "! d1 <= 0"); + Tester.check(neg(d1 == 0), "! d1 == 0"); + Tester.check(pos(d1 != 0), "d1 != 0"); + Tester.check(pos(d1 > 0), "d1 > 0"); + Tester.check(pos(d1 >= 0), "d1 >= 0"); + + Tester.check(neg(0 < dx), "! 0 < dx"); + Tester.check(neg(0 <= dx), "! 0 <= dx"); + Tester.check(neg(0 == dx), "! 0 == dx"); + Tester.check(pos(0 != dx), "0 != dx"); + Tester.check(neg(0 > dx), "! 0 > dx"); + Tester.check(neg(0 >= dx), "! 0 >= dx"); + + Tester.check(neg(dx < 0), "! dx < 0"); + Tester.check(neg(dx <= 0), "! dx <= 0"); + Tester.check(neg(dx == 0), "! dx == 0"); + Tester.check(pos(dx != 0), "dx != 0"); + Tester.check(neg(dx > 0), "! dx > 0"); + Tester.check(neg(dx >= 0), "! dx >= 0"); + } + + + static void doChar() { + Tester.check(neg(0 < cz), "! 0 < cz"); + Tester.check(pos(0 <= cz), "0 <= cz"); + Tester.check(pos(0 == cz), "0 == cz"); + Tester.check(neg(0 != cz), "! 0 != cz"); + Tester.check(neg(0 > cz), "! 0 > cz"); + Tester.check(pos(0 >= cz), "0 >= cz"); + + Tester.check(neg(cz < 0), "! cz < 0"); + Tester.check(pos(cz <= 0), "cz <= 0"); + Tester.check(pos(cz == 0), "cz == 0"); + Tester.check(neg(cz != 0), "! cz != 0"); + Tester.check(neg(cz > 0), "! cz > 0"); + Tester.check(pos(cz >= 0), "cz >= 0"); + + Tester.check(pos(0 < c1), "0 < c1"); + Tester.check(pos(0 <= c1), "0 <= c1"); + Tester.check(neg(0 == c1), "! 0 == c1"); + Tester.check(pos(0 != c1), "0 != c1"); + Tester.check(neg(0 > c1), "! 0 > c1"); + Tester.check(neg(0 >= c1), "! 0 >= c1"); + + Tester.check(neg(c1 < 0), "! c1 < 0"); + Tester.check(neg(c1 <= 0), "! c1 <= 0"); + Tester.check(neg(c1 == 0), "! c1 == 0"); + Tester.check(pos(c1 != 0), "c1 != 0"); + Tester.check(pos(c1 > 0), "c1 > 0"); + Tester.check(pos(c1 >= 0), "c1 >= 0"); + } +} diff --git a/tests/pureJava/OpenComment.java b/tests/pureJava/OpenComment.java new file mode 100644 index 000000000..175cb4e07 --- /dev/null +++ b/tests/pureJava/OpenComment.java @@ -0,0 +1,10 @@ +import org.aspectj.testing.Tester; + +public class OpenComment { + public static void main(String[] args) { } +} + +/* foo +bar * +/ + diff --git a/tests/pureJava/Ops.java b/tests/pureJava/Ops.java new file mode 100644 index 000000000..84cb1bc03 --- /dev/null +++ b/tests/pureJava/Ops.java @@ -0,0 +1,757 @@ +import org.aspectj.testing.Tester; + +public class Ops { + static public void main(String[] args) { + // boolean + Tester.checkEqual(false && false, false, "false && false"); + Tester.checkEqual(true && false, false, "true && false"); + Tester.checkEqual(false && true, false, "false && true"); + Tester.checkEqual(true && true, true, "true && true"); + + Tester.checkEqual(false || false, false, "false || false"); + Tester.checkEqual(true || false, true, "true || false"); + Tester.checkEqual(false || true, true, "false || true"); + Tester.checkEqual(true || true, true, "true || true"); + + Tester.checkEqual(false & false, false, "false & false"); + Tester.checkEqual(true & false, false, "true & false"); + Tester.checkEqual(false & true, false, "false & true"); + Tester.checkEqual(true & true, true, "true & true"); + + Tester.checkEqual(false | false, false, "false | false"); + Tester.checkEqual(true | false, true, "true | false"); + Tester.checkEqual(false | true, true, "false | true"); + Tester.checkEqual(true | true, true, "true | true"); + + Tester.checkEqual(false ^ false, false, "false ^ false"); + Tester.checkEqual(true ^ false, true, "true ^ false"); + Tester.checkEqual(false ^ true, true, "false ^ true"); + Tester.checkEqual(true ^ true, false, "true ^ true"); + + Tester.checkEqual(! false, true, "! false"); + Tester.checkEqual(! true, false, "! true"); + + //int unary + Tester.checkEqual(+(2), 2, "+(2)"); + Tester.checkEqual(+(1), 1, "+(1)"); + Tester.checkEqual(+(0), 0, "+(0)"); + Tester.checkEqual(+(-1), -1, "+(-1)"); + Tester.checkEqual(+(-2), -2, "+(-2)"); + + Tester.checkEqual(-(2), -2, "-(2)"); + Tester.checkEqual(-(1), -1, "-(1)"); + Tester.checkEqual(-(0), -0, "-(0)"); + Tester.checkEqual(-(-1), 1, "-(-1)"); + Tester.checkEqual(-(-2), 2, "-(-2)"); + + Tester.checkEqual(~(2), -3, "~(2)"); + Tester.checkEqual(~(1), -2, "~(1)"); + Tester.checkEqual(~(0), -1, "~(0)"); + Tester.checkEqual(~(-1), 0, "~(-1)"); + Tester.checkEqual(~(-2), 1, "~(-2)"); + + //int+ + Tester.checkEqual(2 + 2, 4, "2 + 2"); + Tester.checkEqual(2 + 1, 3, "2 + 1"); + Tester.checkEqual(2 + 0, 2, "2 + 0"); + Tester.checkEqual(2 + -1, 1, "2 + -1"); + Tester.checkEqual(2 + -2, 0, "2 + -2"); + + Tester.checkEqual(1 + 2, 3, "1 + 2"); + Tester.checkEqual(1 + 1, 2, "1 + 1"); + Tester.checkEqual(1 + 0, 1, "1 + 0"); + Tester.checkEqual(1 + -1, 0, "1 + -1"); + Tester.checkEqual(1 + -2, -1, "1 + -2"); + + Tester.checkEqual(0 + 2, 2, "0 + 2"); + Tester.checkEqual(0 + 1, 1, "0 + 1"); + Tester.checkEqual(0 + 0, 0, "0 + 0"); + Tester.checkEqual(0 + -1, -1, "0 + -1"); + Tester.checkEqual(0 + -2, -2, "0 + -2"); + + Tester.checkEqual(-1 + 2, 1, "-1 + 2"); + Tester.checkEqual(-1 + 1, 0, "-1 + 1"); + Tester.checkEqual(-1 + 0, -1, "-1 + 0"); + Tester.checkEqual(-1 + -1, -2, "-1 + -1"); + Tester.checkEqual(-1 + -2, -3, "-1 + -2"); + + Tester.checkEqual(-2 + 2, 0, "-2 + 2"); + Tester.checkEqual(-2 + 1, -1, "-2 + 1"); + Tester.checkEqual(-2 + 0, -2, "-2 + 0"); + Tester.checkEqual(-2 + -1, -3, "-2 + -1"); + Tester.checkEqual(-2 + -2, -4, "-2 + -2"); + + //int- + Tester.checkEqual(2 - 2, 0, "2 - 2"); + Tester.checkEqual(2 - 1, 1, "2 - 1"); + Tester.checkEqual(2 - 0, 2, "2 - 0"); + Tester.checkEqual(2 - -1, 3, "2 - -1"); + Tester.checkEqual(2 - -2, 4, "2 - -2"); + + Tester.checkEqual(1 - 2, -1, "1 - 2"); + Tester.checkEqual(1 - 1, 0, "1 - 1"); + Tester.checkEqual(1 - 0, 1, "1 - 0"); + Tester.checkEqual(1 - -1, 2, "1 - -1"); + Tester.checkEqual(1 - -2, 3, "1 - -2"); + + Tester.checkEqual(0 - 2, -2, "0 - 2"); + Tester.checkEqual(0 - 1, -1, "0 - 1"); + Tester.checkEqual(0 - 0, 0, "0 - 0"); + Tester.checkEqual(0 - -1, 1, "0 - -1"); + Tester.checkEqual(0 - -2, 2, "0 - -2"); + + Tester.checkEqual(-1 - 2, -3, "-1 - 2"); + Tester.checkEqual(-1 - 1, -2, "-1 - 1"); + Tester.checkEqual(-1 - 0, -1, "-1 - 0"); + Tester.checkEqual(-1 - -1, 0, "-1 - -1"); + Tester.checkEqual(-1 - -2, 1, "-1 - -2"); + + Tester.checkEqual(-2 - 2, -4, "-2 - 2"); + Tester.checkEqual(-2 - 1, -3, "-2 - 1"); + Tester.checkEqual(-2 - 0, -2, "-2 - 0"); + Tester.checkEqual(-2 - -1, -1, "-2 - -1"); + Tester.checkEqual(-2 - -2, 0, "-2 - -2"); + + //int* + Tester.checkEqual(2 * 2, 4, "2 * 2"); + Tester.checkEqual(2 * 1, 2, "2 * 1"); + Tester.checkEqual(2 * 0, 0, "2 * 0"); + Tester.checkEqual(2 * -1, -2, "2 * -1"); + Tester.checkEqual(2 * -2, -4, "2 * -2"); + + Tester.checkEqual(1 * 2, 2, "1 * 2"); + Tester.checkEqual(1 * 1, 1, "1 * 1"); + Tester.checkEqual(1 * 0, 0, "1 * 0"); + Tester.checkEqual(1 * -1, -1, "1 * -1"); + Tester.checkEqual(1 * -2, -2, "1 * -2"); + + Tester.checkEqual(0 * 2, 0, "0 * 2"); + Tester.checkEqual(0 * 1, 0, "0 * 1"); + Tester.checkEqual(0 * 0, 0, "0 * 0"); + Tester.checkEqual(0 * -1, 0, "0 * -1"); + Tester.checkEqual(0 * -2, 0, "0 * -2"); + + Tester.checkEqual(-1 * 2, -2, "-1 * 2"); + Tester.checkEqual(-1 * 1, -1, "-1 * 1"); + Tester.checkEqual(-1 * 0, 0, "-1 * 0"); + Tester.checkEqual(-1 * -1, 1, "-1 * -1"); + Tester.checkEqual(-1 * -2, 2, "-1 * -2"); + + Tester.checkEqual(-2 * 2, -4, "-2 * 2"); + Tester.checkEqual(-2 * 1, -2, "-2 * 1"); + Tester.checkEqual(-2 * 0, 0, "-2 * 0"); + Tester.checkEqual(-2 * -1, 2, "-2 * -1"); + Tester.checkEqual(-2 * -2, 4, "-2 * -2"); + + //int/ + Tester.checkEqual(2 / 2, 1, "2 / 2"); + Tester.checkEqual(2 / 1, 2, "2 / 1"); + // Tester.checkEqual(2 / 0, 99, "2 / 0"); + Tester.checkEqual(2 / -1, -2, "2 / -1"); + Tester.checkEqual(2 / -2, -1, "2 / -2"); + + Tester.checkEqual(1 / 2, 0, "1 / 2"); + Tester.checkEqual(1 / 1, 1, "1 / 1"); + // Tester.checkEqual(1 / 0, 99, "1 / 0"); + Tester.checkEqual(1 / -1, -1, "1 / -1"); + Tester.checkEqual(1 / -2, 0, "1 / -2"); + + Tester.checkEqual(0 / 2, 0, "0 / 2"); + Tester.checkEqual(0 / 1, 0, "0 / 1"); + // Tester.checkEqual(0 / 0, 99, "0 / 0"); + Tester.checkEqual(0 / -1, 0, "0 / -1"); + Tester.checkEqual(0 / -2, 0, "0 / -2"); + + Tester.checkEqual(-1 / 2, 0, "-1 / 2"); + Tester.checkEqual(-1 / 1, -1, "-1 / 1"); + //Tester.checkEqual(-1 / 0, 99, "-1 / 0"); + Tester.checkEqual(-1 / -1, 1, "-1 / -1"); + Tester.checkEqual(-1 / -2, 0, "-1 / -2"); + + Tester.checkEqual(-2 / 2, -1, "-2 / 2"); + Tester.checkEqual(-2 / 1, -2, "-2 / 1"); + //Tester.checkEqual(-2 / 0, 99, "-2 / 0"); + Tester.checkEqual(-2 / -1, 2, "-2 / -1"); + Tester.checkEqual(-2 / -2, 1, "-2 / -2"); + + //int% + Tester.checkEqual(2 % 2, 0, "2 % 2"); + Tester.checkEqual(2 % 1, 0, "2 % 1"); + //Tester.checkEqual(2 % 0, 99, "2 % 0"); + Tester.checkEqual(2 % -1, 0, "2 % -1"); + Tester.checkEqual(2 % -2, 0, "2 % -2"); + + Tester.checkEqual(1 % 2, 1, "1 % 2"); + Tester.checkEqual(1 % 1, 0, "1 % 1"); + //Tester.checkEqual(1 % 0, 99, "1 % 0"); + Tester.checkEqual(1 % -1, 0, "1 % -1"); + Tester.checkEqual(1 % -2, 1, "1 % -2"); + + Tester.checkEqual(0 % 2, 0, "0 % 2"); + Tester.checkEqual(0 % 1, 0, "0 % 1"); + // Tester.checkEqual(0 % 0, 99, "0 % 0"); + Tester.checkEqual(0 % -1, 0, "0 % -1"); + Tester.checkEqual(0 % -2, 0, "0 % -2"); + + Tester.checkEqual(-1 % 2, -1, "-1 % 2"); + Tester.checkEqual(-1 % 1, 0, "-1 % 1"); + //Tester.checkEqual(-1 % 0, 99, "-1 % 0"); + Tester.checkEqual(-1 % -1, 0, "-1 % -1"); + Tester.checkEqual(-1 % -2, -1, "-1 % -2"); + + Tester.checkEqual(-2 % 2, 0, "-2 % 2"); + Tester.checkEqual(-2 % 1, 0, "-2 % 1"); + //Tester.checkEqual(-2 % 0, 99, "-2 % 0"); + Tester.checkEqual(-2 % -1, 0, "-2 % -1"); + Tester.checkEqual(-2 % -2, 0, "-2 % -2"); + + //int& + Tester.checkEqual(2 & 2, 2, "2 & 2"); + Tester.checkEqual(2 & 1, 0, "2 & 1"); + Tester.checkEqual(2 & 0, 0, "2 & 0"); + Tester.checkEqual(2 & -1, 2, "2 & -1"); + Tester.checkEqual(2 & -2, 2, "2 & -2"); + + Tester.checkEqual(1 & 2, 0, "1 & 2"); + Tester.checkEqual(1 & 1, 1, "1 & 1"); + Tester.checkEqual(1 & 0, 0, "1 & 0"); + Tester.checkEqual(1 & -1, 1, "1 & -1"); + Tester.checkEqual(1 & -2, 0, "1 & -2"); + + Tester.checkEqual(0 & 2, 0, "0 & 2"); + Tester.checkEqual(0 & 1, 0, "0 & 1"); + Tester.checkEqual(0 & 0, 0, "0 & 0"); + Tester.checkEqual(0 & -1, 0, "0 & -1"); + Tester.checkEqual(0 & -2, 0, "0 & -2"); + + Tester.checkEqual(-1 & 2, 2, "-1 & 2"); + Tester.checkEqual(-1 & 1, 1, "-1 & 1"); + Tester.checkEqual(-1 & 0, 0, "-1 & 0"); + Tester.checkEqual(-1 & -1, -1, "-1 & -1"); + Tester.checkEqual(-1 & -2, -2, "-1 & -2"); + + Tester.checkEqual(-2 & 2, 2, "-2 & 2"); + Tester.checkEqual(-2 & 1, 0, "-2 & 1"); + Tester.checkEqual(-2 & 0, 0, "-2 & 0"); + Tester.checkEqual(-2 & -1, -2, "-2 & -1"); + Tester.checkEqual(-2 & -2, -2, "-2 & -2"); + + //int| + Tester.checkEqual(2 | 2, 2, "2 | 2"); + Tester.checkEqual(2 | 1, 3, "2 | 1"); + Tester.checkEqual(2 | 0, 2, "2 | 0"); + Tester.checkEqual(2 | -1, -1, "2 | -1"); + Tester.checkEqual(2 | -2, -2, "2 | -2"); + + Tester.checkEqual(1 | 2, 3, "1 | 2"); + Tester.checkEqual(1 | 1, 1, "1 | 1"); + Tester.checkEqual(1 | 0, 1, "1 | 0"); + Tester.checkEqual(1 | -1, -1, "1 | -1"); + Tester.checkEqual(1 | -2, -1, "1 | -2"); + + Tester.checkEqual(0 | 2, 2, "0 | 2"); + Tester.checkEqual(0 | 1, 1, "0 | 1"); + Tester.checkEqual(0 | 0, 0, "0 | 0"); + Tester.checkEqual(0 | -1, -1, "0 | -1"); + Tester.checkEqual(0 | -2, -2, "0 | -2"); + + Tester.checkEqual(-1 | 2, -1, "-1 | 2"); + Tester.checkEqual(-1 | 1, -1, "-1 | 1"); + Tester.checkEqual(-1 | 0, -1, "-1 | 0"); + Tester.checkEqual(-1 | -1, -1, "-1 | -1"); + Tester.checkEqual(-1 | -2, -1, "-1 | -2"); + + Tester.checkEqual(-2 | 2, -2, "-2 | 2"); + Tester.checkEqual(-2 | 1, -1, "-2 | 1"); + Tester.checkEqual(-2 | 0, -2, "-2 | 0"); + Tester.checkEqual(-2 | -1, -1, "-2 | -1"); + Tester.checkEqual(-2 | -2, -2, "-2 | -2"); + + //int^ + Tester.checkEqual(2 ^ 2, 0, "2 ^ 2"); + Tester.checkEqual(2 ^ 1, 3, "2 ^ 1"); + Tester.checkEqual(2 ^ 0, 2, "2 ^ 0"); + Tester.checkEqual(2 ^ -1, -3, "2 ^ -1"); + Tester.checkEqual(2 ^ -2, -4, "2 ^ -2"); + + Tester.checkEqual(1 ^ 2, 3, "1 ^ 2"); + Tester.checkEqual(1 ^ 1, 0, "1 ^ 1"); + Tester.checkEqual(1 ^ 0, 1, "1 ^ 0"); + Tester.checkEqual(1 ^ -1, -2, "1 ^ -1"); + Tester.checkEqual(1 ^ -2, -1, "1 ^ -2"); + + Tester.checkEqual(0 ^ 2, 2, "0 ^ 2"); + Tester.checkEqual(0 ^ 1, 1, "0 ^ 1"); + Tester.checkEqual(0 ^ 0, 0, "0 ^ 0"); + Tester.checkEqual(0 ^ -1, -1, "0 ^ -1"); + Tester.checkEqual(0 ^ -2, -2, "0 ^ -2"); + + Tester.checkEqual(-1 ^ 2, -3, "-1 ^ 2"); + Tester.checkEqual(-1 ^ 1, -2, "-1 ^ 1"); + Tester.checkEqual(-1 ^ 0, -1, "-1 ^ 0"); + Tester.checkEqual(-1 ^ -1, 0, "-1 ^ -1"); + Tester.checkEqual(-1 ^ -2, 1, "-1 ^ -2"); + + Tester.checkEqual(-2 ^ 2, -4, "-2 ^ 2"); + Tester.checkEqual(-2 ^ 1, -1, "-2 ^ 1"); + Tester.checkEqual(-2 ^ 0, -2, "-2 ^ 0"); + Tester.checkEqual(-2 ^ -1, 1, "-2 ^ -1"); + Tester.checkEqual(-2 ^ -2, 0, "-2 ^ -2"); + + //int<< + Tester.checkEqual(2 << 2, 8, "2 << 2"); + Tester.checkEqual(2 << 1, 4, "2 << 1"); + Tester.checkEqual(2 << 0, 2, "2 << 0"); + Tester.checkEqual(2 << -1, 0, "2 << -1"); + Tester.checkEqual(2 << -2, -2147483648, "2 << -2"); + + Tester.checkEqual(1 << 2, 4, "1 << 2"); + Tester.checkEqual(1 << 1, 2, "1 << 1"); + Tester.checkEqual(1 << 0, 1, "1 << 0"); + Tester.checkEqual(1 << -1, -2147483648, "1 << -1"); + Tester.checkEqual(1 << -2, 1073741824, "1 << -2"); + + Tester.checkEqual(0 << 2, 0, "0 << 2"); + Tester.checkEqual(0 << 1, 0, "0 << 1"); + Tester.checkEqual(0 << 0, 0, "0 << 0"); + Tester.checkEqual(0 << -1, 0, "0 << -1"); + Tester.checkEqual(0 << -2, 0, "0 << -2"); + + Tester.checkEqual(-1 << 2, -4, "-1 << 2"); + Tester.checkEqual(-1 << 1, -2, "-1 << 1"); + Tester.checkEqual(-1 << 0, -1, "-1 << 0"); + Tester.checkEqual(-1 << -1, -2147483648, "-1 << -1"); + Tester.checkEqual(-1 << -2, -1073741824, "-1 << -2"); + + Tester.checkEqual(-2 << 2, -8, "-2 << 2"); + Tester.checkEqual(-2 << 1, -4, "-2 << 1"); + Tester.checkEqual(-2 << 0, -2, "-2 << 0"); + Tester.checkEqual(-2 << -1, 0, "-2 << -1"); + Tester.checkEqual(-2 << -2, -2147483648, "-2 << -2"); + + //int>> + Tester.checkEqual(2 >> 2, 0, "2 >> 2"); + Tester.checkEqual(2 >> 1, 1, "2 >> 1"); + Tester.checkEqual(2 >> 0, 2, "2 >> 0"); + Tester.checkEqual(2 >> -1, 0, "2 >> -1"); + Tester.checkEqual(2 >> -2, 0, "2 >> -2"); + + Tester.checkEqual(1 >> 2, 0, "1 >> 2"); + Tester.checkEqual(1 >> 1, 0, "1 >> 1"); + Tester.checkEqual(1 >> 0, 1, "1 >> 0"); + Tester.checkEqual(1 >> -1, 0, "1 >> -1"); + Tester.checkEqual(1 >> -2, 0, "1 >> -2"); + + Tester.checkEqual(0 >> 2, 0, "0 >> 2"); + Tester.checkEqual(0 >> 1, 0, "0 >> 1"); + Tester.checkEqual(0 >> 0, 0, "0 >> 0"); + Tester.checkEqual(0 >> -1, 0, "0 >> -1"); + Tester.checkEqual(0 >> -2, 0, "0 >> -2"); + + Tester.checkEqual(-1 >> 2, -1, "-1 >> 2"); + Tester.checkEqual(-1 >> 1, -1, "-1 >> 1"); + Tester.checkEqual(-1 >> 0, -1, "-1 >> 0"); + Tester.checkEqual(-1 >> -1, -1, "-1 >> -1"); + Tester.checkEqual(-1 >> -2, -1, "-1 >> -2"); + + Tester.checkEqual(-2 >> 2, -1, "-2 >> 2"); + Tester.checkEqual(-2 >> 1, -1, "-2 >> 1"); + Tester.checkEqual(-2 >> 0, -2, "-2 >> 0"); + Tester.checkEqual(-2 >> -1, -1, "-2 >> -1"); + Tester.checkEqual(-2 >> -2, -1, "-2 >> -2"); + + //int>>> + Tester.checkEqual(2 >>> 2, 0, "2 >>> 2"); + Tester.checkEqual(2 >>> 1, 1, "2 >>> 1"); + Tester.checkEqual(2 >>> 0, 2, "2 >>> 0"); + Tester.checkEqual(2 >>> -1, 0, "2 >>> -1"); + Tester.checkEqual(2 >>> -2, 0, "2 >>> -2"); + + Tester.checkEqual(1 >>> 2, 0, "1 >>> 2"); + Tester.checkEqual(1 >>> 1, 0, "1 >>> 1"); + Tester.checkEqual(1 >>> 0, 1, "1 >>> 0"); + Tester.checkEqual(1 >>> -1, 0, "1 >>> -1"); + Tester.checkEqual(1 >>> -2, 0, "1 >>> -2"); + + Tester.checkEqual(0 >>> 2, 0, "0 >>> 2"); + Tester.checkEqual(0 >>> 1, 0, "0 >>> 1"); + Tester.checkEqual(0 >>> 0, 0, "0 >>> 0"); + Tester.checkEqual(0 >>> -1, 0, "0 >>> -1"); + Tester.checkEqual(0 >>> -2, 0, "0 >>> -2"); + + Tester.checkEqual(-1 >>> 2, 1073741823, "-1 >>> 2"); + Tester.checkEqual(-1 >>> 1, 2147483647, "-1 >>> 1"); + Tester.checkEqual(-1 >>> 0, -1, "-1 >>> 0"); + Tester.checkEqual(-1 >>> -1, 1, "-1 >>> -1"); + Tester.checkEqual(-1 >>> -2, 3, "-1 >>> -2"); + + Tester.checkEqual(-2 >>> 2, 1073741823, "-2 >>> 2"); + Tester.checkEqual(-2 >>> 1, 2147483647, "-2 >>> 1"); + Tester.checkEqual(-2 >>> 0, -2, "-2 >>> 0"); + Tester.checkEqual(-2 >>> -1, 1, "-2 >>> -1"); + Tester.checkEqual(-2 >>> -2, 3, "-2 >>> -2"); + + // **************** + + //long unary + Tester.checkEqual(+(2L), 2L, "+(2L)"); + Tester.checkEqual(+(1L), 1L, "+(1L)"); + Tester.checkEqual(+(0L), 0L, "+(0L)"); + Tester.checkEqual(+(-1L), -1L, "+(-1L)"); + Tester.checkEqual(+(-2L), -2L, "+(-2L)"); + + Tester.checkEqual(-(2L), -2L, "-(2L)"); + Tester.checkEqual(-(1L), -1L, "-(1L)"); + Tester.checkEqual(-(0L), -0L, "-(0L)"); + Tester.checkEqual(-(-1L), 1L, "-(-1L)"); + Tester.checkEqual(-(-2L), 2L, "-(-2L)"); + + Tester.checkEqual(~(2L), -3L, "~(2L)"); + Tester.checkEqual(~(1L), -2L, "~(1L)"); + Tester.checkEqual(~(0L), -1L, "~(0L)"); + Tester.checkEqual(~(-1L), 0L, "~(-1L)"); + Tester.checkEqual(~(-2L), 1L, "~(-2L)"); + + //long+ + Tester.checkEqual(2L + 2L, 4L, "2 + 2"); + Tester.checkEqual(2L + 1L, 3L, "2 + 1"); + Tester.checkEqual(2L + 0L, 2L, "2 + 0"); + Tester.checkEqual(2L + -1L, 1L, "2 + -1"); + Tester.checkEqual(2L + -2L, 0L, "2 + -2"); + + Tester.checkEqual(1L + 2L, 3L, "1 + 2"); + Tester.checkEqual(1L + 1L, 2L, "1 + 1"); + Tester.checkEqual(1L + 0L, 1L, "1 + 0"); + Tester.checkEqual(1L + -1L, 0L, "1 + -1"); + Tester.checkEqual(1L + -2L, -1L, "1 + -2"); + + Tester.checkEqual(0L + 2L, 2L, "0 + 2"); + Tester.checkEqual(0L + 1L, 1L, "0 + 1"); + Tester.checkEqual(0L + 0L, 0L, "0 + 0"); + Tester.checkEqual(0L + -1L, -1L, "0 + -1"); + Tester.checkEqual(0L + -2L, -2L, "0 + -2"); + + Tester.checkEqual(-1L + 2L, 1L, "-1 + 2"); + Tester.checkEqual(-1L + 1L, 0L, "-1 + 1"); + Tester.checkEqual(-1L + 0L, -1L, "-1 + 0"); + Tester.checkEqual(-1L + -1L, -2L, "-1 + -1"); + Tester.checkEqual(-1L + -2L, -3L, "-1 + -2"); + + Tester.checkEqual(-2L + 2L, 0L, "-2 + 2"); + Tester.checkEqual(-2L + 1L, -1L, "-2 + 1"); + Tester.checkEqual(-2L + 0L, -2L, "-2 + 0"); + Tester.checkEqual(-2L + -1L, -3L, "-2 + -1"); + Tester.checkEqual(-2L + -2L, -4L, "-2 + -2"); + + //long- + Tester.checkEqual(2L - 2L, 0L, "2 - 2"); + Tester.checkEqual(2L - 1L, 1L, "2 - 1"); + Tester.checkEqual(2L - 0L, 2L, "2 - 0"); + Tester.checkEqual(2L - -1L, 3L, "2 - -1"); + Tester.checkEqual(2L - -2L, 4L, "2 - -2"); + + Tester.checkEqual(1L - 2L, -1L, "1 - 2"); + Tester.checkEqual(1L - 1L, 0L, "1 - 1"); + Tester.checkEqual(1L - 0L, 1L, "1 - 0"); + Tester.checkEqual(1L - -1L, 2L, "1 - -1"); + Tester.checkEqual(1L - -2L, 3L, "1 - -2"); + + Tester.checkEqual(0L - 2L, -2L, "0 - 2"); + Tester.checkEqual(0L - 1L, -1L, "0 - 1"); + Tester.checkEqual(0L - 0L, 0L, "0 - 0"); + Tester.checkEqual(0L - -1L, 1L, "0 - -1"); + Tester.checkEqual(0L - -2L, 2L, "0 - -2"); + + Tester.checkEqual(-1L - 2L, -3L, "-1 - 2"); + Tester.checkEqual(-1L - 1L, -2L, "-1 - 1"); + Tester.checkEqual(-1L - 0L, -1L, "-1 - 0"); + Tester.checkEqual(-1L - -1L, 0L, "-1 - -1"); + Tester.checkEqual(-1L - -2L, 1L, "-1 - -2"); + + Tester.checkEqual(-2L - 2L, -4L, "-2 - 2"); + Tester.checkEqual(-2L - 1L, -3L, "-2 - 1"); + Tester.checkEqual(-2L - 0L, -2L, "-2 - 0"); + Tester.checkEqual(-2L - -1L, -1L, "-2 - -1"); + Tester.checkEqual(-2L - -2L, 0L, "-2 - -2"); + + //long* + Tester.checkEqual(2L * 2L, 4L, "2 * 2"); + Tester.checkEqual(2L * 1L, 2L, "2 * 1"); + Tester.checkEqual(2L * 0L, 0L, "2 * 0"); + Tester.checkEqual(2L * -1L, -2L, "2 * -1"); + Tester.checkEqual(2L * -2L, -4L, "2 * -2"); + + Tester.checkEqual(1L * 2L, 2L, "1 * 2"); + Tester.checkEqual(1L * 1L, 1L, "1 * 1"); + Tester.checkEqual(1L * 0L, 0L, "1 * 0"); + Tester.checkEqual(1L * -1L, -1L, "1 * -1"); + Tester.checkEqual(1L * -2L, -2L, "1 * -2"); + + Tester.checkEqual(0L * 2L, 0L, "0 * 2"); + Tester.checkEqual(0L * 1L, 0L, "0 * 1"); + Tester.checkEqual(0L * 0L, 0L, "0 * 0"); + Tester.checkEqual(0L * -1L, 0L, "0 * -1"); + Tester.checkEqual(0L * -2L, 0L, "0 * -2"); + + Tester.checkEqual(-1L * 2L, -2L, "-1 * 2"); + Tester.checkEqual(-1L * 1L, -1L, "-1 * 1"); + Tester.checkEqual(-1L * 0L, 0L, "-1 * 0"); + Tester.checkEqual(-1L * -1L, 1L, "-1 * -1"); + Tester.checkEqual(-1L * -2L, 2L, "-1 * -2"); + + Tester.checkEqual(-2L * 2L, -4L, "-2 * 2"); + Tester.checkEqual(-2L * 1L, -2L, "-2 * 1"); + Tester.checkEqual(-2L * 0L, 0L, "-2 * 0"); + Tester.checkEqual(-2L * -1L, 2L, "-2 * -1"); + Tester.checkEqual(-2L * -2L, 4L, "-2 * -2"); + + //long/ + Tester.checkEqual(2L / 2L, 1L, "2 / 2"); + Tester.checkEqual(2L / 1L, 2L, "2 / 1"); + // Tester.checkEqual(2L / 0L, 99L, "2 / 0"); + Tester.checkEqual(2L / -1L, -2L, "2 / -1"); + Tester.checkEqual(2L / -2L, -1L, "2 / -2"); + + Tester.checkEqual(1L / 2L, 0L, "1 / 2"); + Tester.checkEqual(1L / 1L, 1L, "1 / 1"); + // Tester.checkEqual(1L / 0L, 99L, "1 / 0"); + Tester.checkEqual(1L / -1L, -1L, "1 / -1"); + Tester.checkEqual(1L / -2L, 0L, "1 / -2"); + + Tester.checkEqual(0L / 2L, 0L, "0 / 2"); + Tester.checkEqual(0L / 1L, 0L, "0 / 1"); + // Tester.checkEqual(0L / 0L, 99L, "0 / 0"); + Tester.checkEqual(0L / -1L, 0L, "0 / -1"); + Tester.checkEqual(0L / -2L, 0L, "0 / -2"); + + Tester.checkEqual(-1L / 2L, 0L, "-1 / 2"); + Tester.checkEqual(-1L / 1L, -1L, "-1 / 1"); + //Tester.checkEqual(-1L / 0L, 99L, "-1 / 0"); + Tester.checkEqual(-1L / -1L, 1L, "-1 / -1"); + Tester.checkEqual(-1L / -2L, 0L, "-1 / -2"); + + Tester.checkEqual(-2L / 2L, -1L, "-2 / 2"); + Tester.checkEqual(-2L / 1L, -2L, "-2 / 1"); + //Tester.checkEqual(-2L / 0L, 99L, "-2 / 0"); + Tester.checkEqual(-2L / -1L, 2L, "-2 / -1"); + Tester.checkEqual(-2L / -2L, 1L, "-2 / -2"); + + //long% + Tester.checkEqual(2L % 2L, 0L, "2 % 2"); + Tester.checkEqual(2L % 1L, 0L, "2 % 1"); + //Tester.checkEqual(2L % 0L, 99L, "2 % 0"); + Tester.checkEqual(2L % -1L, 0L, "2 % -1"); + Tester.checkEqual(2L % -2L, 0L, "2 % -2"); + + Tester.checkEqual(1L % 2L, 1L, "1 % 2"); + Tester.checkEqual(1L % 1L, 0L, "1 % 1"); + //Tester.checkEqual(1L % 0L, 99L, "1 % 0"); + Tester.checkEqual(1L % -1L, 0L, "1 % -1"); + Tester.checkEqual(1L % -2L, 1L, "1 % -2"); + + Tester.checkEqual(0L % 2L, 0L, "0 % 2"); + Tester.checkEqual(0L % 1L, 0L, "0 % 1"); + // Tester.checkEqual(0L % 0L, 99L, "0 % 0"); + Tester.checkEqual(0L % -1L, 0L, "0 % -1"); + Tester.checkEqual(0L % -2L, 0L, "0 % -2"); + + Tester.checkEqual(-1L % 2L, -1L, "-1 % 2"); + Tester.checkEqual(-1L % 1L, 0L, "-1 % 1"); + //Tester.checkEqual(-1L % 0L, 99L, "-1 % 0"); + Tester.checkEqual(-1L % -1L, 0L, "-1 % -1"); + Tester.checkEqual(-1L % -2L, -1L, "-1 % -2"); + + Tester.checkEqual(-2L % 2L, 0L, "-2 % 2"); + Tester.checkEqual(-2L % 1L, 0L, "-2 % 1"); + //Tester.checkEqual(-2L % 0L, 99L, "-2 % 0"); + Tester.checkEqual(-2L % -1L, 0L, "-2 % -1"); + Tester.checkEqual(-2L % -2L, 0L, "-2 % -2"); + + //long& + Tester.checkEqual(2L & 2L, 2L, "2 & 2"); + Tester.checkEqual(2L & 1L, 0L, "2 & 1"); + Tester.checkEqual(2L & 0L, 0L, "2 & 0"); + Tester.checkEqual(2L & -1L, 2L, "2 & -1"); + Tester.checkEqual(2L & -2L, 2L, "2 & -2"); + + Tester.checkEqual(1L & 2L, 0L, "1 & 2"); + Tester.checkEqual(1L & 1L, 1L, "1 & 1"); + Tester.checkEqual(1L & 0L, 0L, "1 & 0"); + Tester.checkEqual(1L & -1L, 1L, "1 & -1"); + Tester.checkEqual(1L & -2L, 0L, "1 & -2"); + + Tester.checkEqual(0L & 2L, 0L, "0 & 2"); + Tester.checkEqual(0L & 1L, 0L, "0 & 1"); + Tester.checkEqual(0L & 0L, 0L, "0 & 0"); + Tester.checkEqual(0L & -1L, 0L, "0 & -1"); + Tester.checkEqual(0L & -2L, 0L, "0 & -2"); + + Tester.checkEqual(-1L & 2L, 2L, "-1 & 2"); + Tester.checkEqual(-1L & 1L, 1L, "-1 & 1"); + Tester.checkEqual(-1L & 0L, 0L, "-1 & 0"); + Tester.checkEqual(-1L & -1L, -1L, "-1 & -1"); + Tester.checkEqual(-1L & -2L, -2L, "-1 & -2"); + + Tester.checkEqual(-2L & 2L, 2L, "-2 & 2"); + Tester.checkEqual(-2L & 1L, 0L, "-2 & 1"); + Tester.checkEqual(-2L & 0L, 0L, "-2 & 0"); + Tester.checkEqual(-2L & -1L, -2L, "-2 & -1"); + Tester.checkEqual(-2L & -2L, -2L, "-2 & -2"); + + //long| + Tester.checkEqual(2L | 2, 2, "2 | LL2"); + Tester.checkEqual(2L | 1, 3, "2 | LL1"); + Tester.checkEqual(2L | 0, 2, "2 | LL0"); + Tester.checkEqual(2L | -1, -1, "2 | -LL1"); + Tester.checkEqual(2L | -2, -2, "2 | -LL2"); + + Tester.checkEqual(1L | 2, 3, "1 | LL2"); + Tester.checkEqual(1L | 1, 1, "1 | LL1"); + Tester.checkEqual(1L | 0, 1, "1 | LL0"); + Tester.checkEqual(1L | -1, -1, "1 | -LL1"); + Tester.checkEqual(1L | -2, -1, "1 | -LL2"); + + Tester.checkEqual(0L | 2, 2, "0 | LL2"); + Tester.checkEqual(0L | 1, 1, "0 | LL1"); + Tester.checkEqual(0L | 0, 0, "0 | LL0"); + Tester.checkEqual(0L | -1, -1, "0 | -LL1"); + Tester.checkEqual(0L | -2, -2, "0 | -LL2"); + + Tester.checkEqual(-1L | 2, -1, "-1 | LL2"); + Tester.checkEqual(-1L | 1, -1, "-1 | LL1"); + Tester.checkEqual(-1L | 0, -1, "-1 | LL0"); + Tester.checkEqual(-1L | -1, -1, "-1 | -LL1"); + Tester.checkEqual(-1L | -2, -1, "-1 | -LL2"); + + Tester.checkEqual(-2L | 2, -2, "-2 | LL2"); + Tester.checkEqual(-2L | 1, -1, "-2 | LL1"); + Tester.checkEqual(-2L | 0, -2, "-2 | LL0"); + Tester.checkEqual(-2L | -1, -1, "-2 | -LL1"); + Tester.checkEqual(-2L | -2, -2, "-2 | -LL2"); + + //long^ + Tester.checkEqual(2L ^ 2L, 0L, "2 ^ 2"); + Tester.checkEqual(2L ^ 1L, 3L, "2 ^ 1"); + Tester.checkEqual(2L ^ 0L, 2L, "2 ^ 0"); + Tester.checkEqual(2L ^ -1L, -3L, "2 ^ -1"); + Tester.checkEqual(2L ^ -2L, -4L, "2 ^ -2"); + + Tester.checkEqual(1L ^ 2L, 3L, "1 ^ 2"); + Tester.checkEqual(1L ^ 1L, 0L, "1 ^ 1"); + Tester.checkEqual(1L ^ 0L, 1L, "1 ^ 0"); + Tester.checkEqual(1L ^ -1L, -2L, "1 ^ -1"); + Tester.checkEqual(1L ^ -2L, -1L, "1 ^ -2"); + + Tester.checkEqual(0L ^ 2L, 2L, "0 ^ 2"); + Tester.checkEqual(0L ^ 1L, 1L, "0 ^ 1"); + Tester.checkEqual(0L ^ 0L, 0L, "0 ^ 0"); + Tester.checkEqual(0L ^ -1L, -1L, "0 ^ -1"); + Tester.checkEqual(0L ^ -2L, -2L, "0 ^ -2"); + + Tester.checkEqual(-1L ^ 2L, -3L, "-1 ^ 2"); + Tester.checkEqual(-1L ^ 1L, -2L, "-1 ^ 1"); + Tester.checkEqual(-1L ^ 0L, -1L, "-1 ^ 0"); + Tester.checkEqual(-1L ^ -1L, 0L, "-1 ^ -1"); + Tester.checkEqual(-1L ^ -2L, 1L, "-1 ^ -2"); + + Tester.checkEqual(-2L ^ 2L, -4L, "-2 ^ 2"); + Tester.checkEqual(-2L ^ 1L, -1L, "-2 ^ 1"); + Tester.checkEqual(-2L ^ 0L, -2L, "-2 ^ 0"); + Tester.checkEqual(-2L ^ -1L, 1L, "-2 ^ -1"); + Tester.checkEqual(-2L ^ -2L, 0L, "-2 ^ -2"); + + //long<< + Tester.checkEqual(2L << 2L, 8L, "2 << 2"); + Tester.checkEqual(2L << 1L, 4L, "2 << 1"); + Tester.checkEqual(2L << 0L, 2L, "2 << 0"); + Tester.checkEqual(2L << -1L, 0L, "2 << -1"); + Tester.checkEqual(2L << -2L, -9223372036854775808L, "2 << -2"); + + Tester.checkEqual(1L << 2L, 4L, "1 << 2"); + Tester.checkEqual(1L << 1L, 2L, "1 << 1"); + Tester.checkEqual(1L << 0L, 1L, "1 << 0"); + Tester.checkEqual(1L << -1L, -9223372036854775808L, "1 << -1"); + Tester.checkEqual(1L << -2L, 4611686018427387904L, "1 << -2"); + + Tester.checkEqual(0L << 2L, 0L, "0 << 2"); + Tester.checkEqual(0L << 1L, 0L, "0 << 1"); + Tester.checkEqual(0L << 0L, 0L, "0 << 0"); + Tester.checkEqual(0L << -1L, 0L, "0 << -1"); + Tester.checkEqual(0L << -2L, 0L, "0 << -2"); + + Tester.checkEqual(-1L << 2L, -4L, "-1 << 2"); + Tester.checkEqual(-1L << 1L, -2L, "-1 << 1"); + Tester.checkEqual(-1L << 0L, -1L, "-1 << 0"); + Tester.checkEqual(-1L << -1L, -9223372036854775808L, "-1 << -1"); + Tester.checkEqual(-1L << -2L, -4611686018427387904L, "-1 << -2"); + + Tester.checkEqual(-2L << 2L, -8L, "-2 << 2"); + Tester.checkEqual(-2L << 1L, -4L, "-2 << 1"); + Tester.checkEqual(-2L << 0L, -2L, "-2 << 0"); + Tester.checkEqual(-2L << -1L, 0L, "-2 << -1"); + Tester.checkEqual(-2L << -2L, -9223372036854775808L, "-2 << -2"); + + //long>> + Tester.checkEqual(2L >> 2L, 0L, "2 >> 2"); + Tester.checkEqual(2L >> 1L, 1L, "2 >> 1"); + Tester.checkEqual(2L >> 0L, 2L, "2 >> 0"); + Tester.checkEqual(2L >> -1L, 0L, "2 >> -1"); + Tester.checkEqual(2L >> -2L, 0L, "2 >> -2"); + + Tester.checkEqual(1L >> 2L, 0L, "1 >> 2"); + Tester.checkEqual(1L >> 1L, 0L, "1 >> 1"); + Tester.checkEqual(1L >> 0L, 1L, "1 >> 0"); + Tester.checkEqual(1L >> -1L, 0L, "1 >> -1"); + Tester.checkEqual(1L >> -2L, 0L, "1 >> -2"); + + Tester.checkEqual(0L >> 2L, 0L, "0 >> 2"); + Tester.checkEqual(0L >> 1L, 0L, "0 >> 1"); + Tester.checkEqual(0L >> 0L, 0L, "0 >> 0"); + Tester.checkEqual(0L >> -1L, 0L, "0 >> -1"); + Tester.checkEqual(0L >> -2L, 0L, "0 >> -2"); + + Tester.checkEqual(-1L >> 2L, -1L, "-1 >> 2"); + Tester.checkEqual(-1L >> 1L, -1L, "-1 >> 1"); + Tester.checkEqual(-1L >> 0L, -1L, "-1 >> 0"); + Tester.checkEqual(-1L >> -1L, -1L, "-1 >> -1"); + Tester.checkEqual(-1L >> -2L, -1L, "-1 >> -2"); + + Tester.checkEqual(-2L >> 2L, -1L, "-2 >> 2"); + Tester.checkEqual(-2L >> 1L, -1L, "-2 >> 1"); + Tester.checkEqual(-2L >> 0L, -2L, "-2 >> 0"); + Tester.checkEqual(-2L >> -1L, -1L, "-2 >> -1"); + Tester.checkEqual(-2L >> -2L, -1L, "-2 >> -2"); + + //long>>> + Tester.checkEqual(2L >>> 2L, 0L, "2 >>> 2"); + Tester.checkEqual(2L >>> 1L, 1L, "2 >>> 1"); + Tester.checkEqual(2L >>> 0L, 2L, "2 >>> 0"); + Tester.checkEqual(2L >>> -1L, 0L, "2 >>> -1"); + Tester.checkEqual(2L >>> -2L, 0L, "2 >>> -2"); + + Tester.checkEqual(1L >>> 2L, 0L, "1 >>> 2"); + Tester.checkEqual(1L >>> 1L, 0L, "1 >>> 1"); + Tester.checkEqual(1L >>> 0L, 1L, "1 >>> 0"); + Tester.checkEqual(1L >>> -1L, 0L, "1 >>> -1"); + Tester.checkEqual(1L >>> -2L, 0L, "1 >>> -2"); + + Tester.checkEqual(0L >>> 2L, 0L, "0 >>> 2"); + Tester.checkEqual(0L >>> 1L, 0L, "0 >>> 1"); + Tester.checkEqual(0L >>> 0L, 0L, "0 >>> 0"); + Tester.checkEqual(0L >>> -1L, 0L, "0 >>> -1"); + Tester.checkEqual(0L >>> -2L, 0L, "0 >>> -2"); + + Tester.checkEqual(-1L >>> 2L, 4611686018427387903L, "-1 >>> 2"); + Tester.checkEqual(-1L >>> 1L, 9223372036854775807L, "-1 >>> 1"); + Tester.checkEqual(-1L >>> 0L, -1L, "-1 >>> 0"); + Tester.checkEqual(-1L >>> -1L, 1L, "-1 >>> -1"); + Tester.checkEqual(-1L >>> -2L, 3L, "-1 >>> -2"); + + Tester.checkEqual(-2L >>> 2L, 4611686018427387903L, "-2 >>> 2"); + Tester.checkEqual(-2L >>> 1L, 9223372036854775807L, "-2 >>> 1"); + Tester.checkEqual(-2L >>> 0L, -2L, "-2 >>> 0"); + Tester.checkEqual(-2L >>> -1L, 1L, "-2 >>> -1"); + Tester.checkEqual(-2L >>> -2L, 3L, "-2 >>> -2"); + } +} + diff --git a/tests/pureJava/PR413.java b/tests/pureJava/PR413.java new file mode 100644 index 000000000..5d86041c3 --- /dev/null +++ b/tests/pureJava/PR413.java @@ -0,0 +1,52 @@ +public class PR413 { + public static void main(String[] args) { + new PR413().realMain(args); + } + public void realMain(String[] args) { + } + + public PR413() { + } +} + +interface Interface { + public static class InnerClass {} + + public static int field = 2; +} +abstract class Abstract { + public static class InnerClass {} + + public static double field = 3.14; +} +abstract class AbstractConflictingClass + extends Abstract + implements Interface +{ +} + +class NonAbstractConflictingClass + extends Abstract + implements Interface +{ +} +class NonAbstractClass implements Interface { + public static class InnerClass {} +} +class NonAbstractExtendingClass extends Abstract { + public static class InnerClass {} +} +abstract class AbstractConflictingClassThatRedefinesInnerClass + extends Abstract + implements Interface +{ + public static class InnerClass {} +} + +class NonAbstractConflictingClassThatRedefinesInnerClass + extends Abstract + implements Interface +{ + public static class InnerClass {} +} + diff --git a/tests/pureJava/PackagesAndStaticClassesWithTheSameName.java b/tests/pureJava/PackagesAndStaticClassesWithTheSameName.java new file mode 100644 index 000000000..e0dd41010 --- /dev/null +++ b/tests/pureJava/PackagesAndStaticClassesWithTheSameName.java @@ -0,0 +1,27 @@ +/* + * This test case reveals a limitation in the ajc unparser using fully qualified + * names for types. I don't believe that there is in fact a general solution to + * this problem, so for now we move this to opentests + */ + +import org.aspectj.testing.*; + +public class PackagesAndStaticClassesWithTheSameName { + public static void main(String[] args) { + String string = "string"; + java.lang.Str str = new java.lang.Str(string); + Tester.checkEqual(string + ":" + string, str+""); + } + + static class java { + static class lang { + static class Str { + private String str; + Str(String str) { + this.str = str; + } + public String toString() { return str + ":" + str; } + } + } + } +} diff --git a/tests/pureJava/ParenKeywords.java b/tests/pureJava/ParenKeywords.java new file mode 100644 index 000000000..37fb95531 --- /dev/null +++ b/tests/pureJava/ParenKeywords.java @@ -0,0 +1,17 @@ +import org.aspectj.testing.Tester; + +public class ParenKeywords { + public static void main(String[] args) { + if ((false) || (true)) { + new ParenKeywords().foo(); + } + Tester.checkEvents("foo"); + } + void foo() { + if ((this) == (null)) { + System.err.println("shouldn't happen"); + } else { + Tester.event("foo"); + } + } +} diff --git a/tests/pureJava/ParentUsingChild.java b/tests/pureJava/ParentUsingChild.java new file mode 100644 index 000000000..2133628a3 --- /dev/null +++ b/tests/pureJava/ParentUsingChild.java @@ -0,0 +1,26 @@ + +import org.aspectj.testing.*; + +/** @testcase PUREJAVA PR#728 interface using preceding subinterface in its definition (order matters) */ +interface Child extends Parent { + interface Toy { } +} + +interface Parent { // order matters - must be after Child + Child.Toy battle(); +} + +public class ParentUsingChild { + public static void main (String[] args) { + Tester.check(Parent.class.isAssignableFrom(Child.class), + "!Parent.class.isAssignableFrom(Child.class)"); + Parent p = new Parent() { + public Child.Toy battle() { + return new Child.Toy(){}; + } + }; + Child.Toy battle = p.battle(); + Tester.check(battle instanceof Child.Toy, + "!battle instanceof Child.Toy"); + } +} diff --git a/tests/pureJava/PrivateFields.java b/tests/pureJava/PrivateFields.java new file mode 100644 index 000000000..bdbfba588 --- /dev/null +++ b/tests/pureJava/PrivateFields.java @@ -0,0 +1,13 @@ +public class PrivateFields { + public static void main(String[] args) { + } +} + +class Outer { + private static int one = 1; + + static class Inner extends Outer{ + private static int two = 2; + int m() { return one; } + } +} diff --git a/tests/pureJava/PrivateSuperInnerAccess.java b/tests/pureJava/PrivateSuperInnerAccess.java new file mode 100644 index 000000000..95acf1308 --- /dev/null +++ b/tests/pureJava/PrivateSuperInnerAccess.java @@ -0,0 +1,17 @@ +public class PrivateSuperInnerAccess { + public static void main(String argv[]) { + Outer.C c = new Outer().new C(); + c.foo(); + } +} + +class Outer { + class B { + private int x = 5; + } + class C extends B { + int foo() { + return super.x+1; + } + } +} diff --git a/tests/pureJava/QualifiedNewCP.java b/tests/pureJava/QualifiedNewCP.java new file mode 100644 index 000000000..728ffc861 --- /dev/null +++ b/tests/pureJava/QualifiedNewCP.java @@ -0,0 +1,29 @@ +public class QualifiedNewCP { + public static void main(String[] args) { + Base b = new Base(); + I o = b.new Inner(); + o.m(); + o = b.new AbstractInner() { public void m() { System.out.println("mi"); helper(); } }; + o.m(); + o = b.new Inner() { public void m() { System.out.println("mi"); } }; + o.m(); + } +} + +class Base { + class Inner implements I { + public void m() { System.out.println("m"); } + } + abstract class AbstractInner implements I { + //public abstract void m(); + protected void helper() { System.out.println("helper"); } + } + + protected void foo() { + System.out.println("foo"); + } +} + +interface I { + public void m(); +} diff --git a/tests/pureJava/QualifiedSuperCall.java b/tests/pureJava/QualifiedSuperCall.java new file mode 100644 index 000000000..d7c2f2835 --- /dev/null +++ b/tests/pureJava/QualifiedSuperCall.java @@ -0,0 +1,50 @@ +import org.aspectj.testing.Tester; + +class PackageSuper { + String field = "PackageSuper"; + + void m() { + Tester.event("PackageSuper.m()"); + } +} + +public class QualifiedSuperCall extends PackageSuper{ + String field = "Package"; + + class InnerSuper { + String field = "InnerSuper"; + + void m() { + Tester.event("InnerSuper.m()"); + } + } + + class Inner { + String field = "Inner"; + + Inner() { + QualifiedSuperCall.super.m(); + Tester.checkAndClearEvents(new String[] { "PackageSuper.m()" } ); + } + + + void m() { + Tester.event("Inner.m()"); + Tester.event("QualifiedSuperCall.super.field = " + + QualifiedSuperCall.super.field); + QualifiedSuperCall.super.m(); + } + + } + + public static void main(String[] args) { + new QualifiedSuperCall().new Inner().m(); + Tester.checkEvents(new String[] { "Inner.m()", "PackageSuper.m()", + "QualifiedSuperCall.super.field = PackageSuper"}); + } + + void m() { + Tester.event("Package.m()"); + } +} + diff --git a/tests/pureJava/QualifiedSuperClassConstructorInvocations_PR401.java b/tests/pureJava/QualifiedSuperClassConstructorInvocations_PR401.java new file mode 100644 index 000000000..aa62098cd --- /dev/null +++ b/tests/pureJava/QualifiedSuperClassConstructorInvocations_PR401.java @@ -0,0 +1,27 @@ +public class QualifiedSuperClassConstructorInvocations_PR401 { + public static void main(String[] args) { + ChildOfInner coi = new ChildOfInner(); + org.aspectj.testing.Tester.checkEqual(S.s, "Outer:Inner:ChildOfInner"); + } +} + +class S { + static String s = ""; +} + +class Outer { + public Outer() { + S.s += "Outer"; + } + class Inner{ + public Inner() { + S.s += ":Inner"; + } + } +} +class ChildOfInner extends Outer.Inner { + ChildOfInner() { + (new Outer()).super(); + S.s += ":ChildOfInner"; + } +} diff --git a/tests/pureJava/QualifiedThisExactness.java b/tests/pureJava/QualifiedThisExactness.java new file mode 100644 index 000000000..ec0259044 --- /dev/null +++ b/tests/pureJava/QualifiedThisExactness.java @@ -0,0 +1,9 @@ +class Nimbo {} + +public class QualifiedThisExactness extends Nimbo { + class Goo { + void main() { + System.err.println(Nimbo.this); + } + } +} diff --git a/tests/pureJava/QualifiedThisMatchesExactly.java b/tests/pureJava/QualifiedThisMatchesExactly.java new file mode 100644 index 000000000..d68572955 --- /dev/null +++ b/tests/pureJava/QualifiedThisMatchesExactly.java @@ -0,0 +1,20 @@ +public class QualifiedThisMatchesExactly { + public static void main(String[] args) { + System.err.println("shouldn't compile!!!"); + } +} + +class A { + class B {} +} + +class C extends A { + static class D extends B { + D() { + super(); + } + void foo() { + System.err.println(D.this); + } + } +} diff --git a/tests/pureJava/ReachableEmpty.java b/tests/pureJava/ReachableEmpty.java new file mode 100644 index 000000000..37dd3dc4e --- /dev/null +++ b/tests/pureJava/ReachableEmpty.java @@ -0,0 +1,19 @@ +public class ReachableEmpty { + public static void main(String[] args) { } + + public void m() { + return;; + } + + public int m1() { + return 2;; + } + + public void m2() { + throw new Error();; + } + + public void m3() { + return;;;;;; + } +} diff --git a/tests/pureJava/ResolvingArrayParameters.java b/tests/pureJava/ResolvingArrayParameters.java new file mode 100644 index 000000000..9b0aea753 --- /dev/null +++ b/tests/pureJava/ResolvingArrayParameters.java @@ -0,0 +1,1933 @@ +/* + * Not finding methods in super- and sub-classes with + * primitive parameter types. + * + * For example: + * + * pureJava\ResolvingArrayParameters.java:991:9: two applicable and accessible meth + * ods are equally specific: public void C_float_short_long.f(float[]) and public v + * oid C_long.f(long[]) + * new C_float_short_long().f(longs); + * + */ +public class ResolvingArrayParameters { + public static void main(String[] args) { + new ResolvingArrayParameters().realMain(args); + } + public void realMain(String[] args) { + + wants(); + + boolean[] booleans = new boolean[]{}; + byte[] bytes = new byte[]{}; + char[] chars = new char[]{}; + short[] shorts = new short[]{}; + int[] ints = new int[]{}; + long[] longs = new long[]{}; + float[] floats = new float[]{}; + double[] doubles = new double[]{}; + + // changed from C_boolean... to avoid having to expect one for each subclass + new CC_boolean().f(booleans); + new CC_byte().f(bytes); + new CC_char().f(chars); + new CC_short().f(shorts); + new CC_int().f(ints); + new CC_long().f(longs); + new CC_float().f(floats); + new CC_double().f(doubles); + + new C_boolean_double().f(doubles); new C_boolean_double().f(booleans); + new C_byte_double().f(doubles); new C_byte_double().f(bytes); + new C_char_double().f(doubles); new C_char_double().f(chars); + new C_short_double().f(doubles); new C_short_double().f(shorts); + new C_int_double().f(doubles); new C_int_double().f(ints); + new C_long_double().f(doubles); new C_long_double().f(longs); + new C_float_double().f(doubles); new C_float_double().f(floats); + + + new C_boolean_float().f(floats); new C_boolean_float().f(booleans); + new C_byte_float().f(floats); new C_byte_float().f(bytes); + new C_char_float().f(floats); new C_char_float().f(chars); + new C_short_float().f(floats); new C_short_float().f(shorts); + new C_int_float().f(floats); new C_int_float().f(ints); + new C_long_float().f(floats); new C_long_float().f(longs); + new C_double_float().f(floats); new C_double_float().f(doubles); + + + new C_boolean_long().f(longs); new C_boolean_long().f(booleans); + new C_byte_long().f(longs); new C_byte_long().f(bytes); + new C_char_long().f(longs); new C_char_long().f(chars); + new C_short_long().f(longs); new C_short_long().f(shorts); + new C_int_long().f(longs); new C_int_long().f(ints); + new C_float_long().f(longs); new C_float_long().f(floats); + new C_double_long().f(longs); new C_double_long().f(doubles); + + + new C_boolean_int().f(ints); new C_boolean_int().f(booleans); + new C_byte_int().f(ints); new C_byte_int().f(bytes); + new C_char_int().f(ints); new C_char_int().f(chars); + new C_short_int().f(ints); new C_short_int().f(shorts); + new C_long_int().f(ints); new C_long_int().f(longs); + new C_float_int().f(ints); new C_float_int().f(floats); + new C_double_int().f(ints); new C_double_int().f(doubles); + + + new C_boolean_short().f(shorts); new C_boolean_short().f(booleans); + new C_byte_short().f(shorts); new C_byte_short().f(bytes); + new C_char_short().f(shorts); new C_char_short().f(chars); + new C_int_short().f(shorts); new C_int_short().f(ints); + new C_long_short().f(shorts); new C_long_short().f(longs); + new C_float_short().f(shorts); new C_float_short().f(floats); + new C_double_short().f(shorts); new C_double_short().f(doubles); + + new C_boolean_char().f(chars); new C_boolean_char().f(booleans); + new C_byte_char().f(chars); new C_byte_char().f(bytes); + new C_short_char().f(chars); new C_short_char().f(shorts); + new C_int_char().f(chars); new C_int_char().f(ints); + new C_long_char().f(chars); new C_long_char().f(longs); + new C_float_char().f(chars); new C_float_char().f(floats); + new C_double_char().f(chars); new C_double_char().f(doubles); + + new C_boolean_byte().f(bytes); new C_boolean_byte().f(booleans); + new C_char_byte().f(bytes); new C_char_byte().f(chars); + new C_short_byte().f(bytes); new C_short_byte().f(shorts); + new C_int_byte().f(bytes); new C_int_byte().f(ints); + new C_long_byte().f(bytes); new C_long_byte().f(longs); + new C_float_byte().f(bytes); new C_float_byte().f(floats); + new C_double_byte().f(bytes); new C_double_byte().f(doubles); + + new C_byte_boolean().f(booleans); new C_byte_boolean().f(bytes); + new C_char_boolean().f(booleans); new C_char_boolean().f(chars); + new C_short_boolean().f(booleans); new C_short_boolean().f(shorts); + new C_int_boolean().f(booleans); new C_int_boolean().f(ints); + new C_long_boolean().f(booleans); new C_long_boolean().f(longs); + new C_float_boolean().f(booleans); new C_float_boolean().f(floats); + new C_double_boolean().f(booleans); new C_double_boolean().f(doubles); + + // ------------------------------------------------------------ + new C_char_boolean_byte().f(chars); + new C_char_boolean_byte().f(booleans); + new C_char_boolean_byte().f(bytes); + new C_short_boolean_byte().f(shorts); + new C_short_boolean_byte().f(booleans); + new C_short_boolean_byte().f(bytes); + new C_int_boolean_byte().f(ints); + new C_int_boolean_byte().f(booleans); + new C_int_boolean_byte().f(bytes); + new C_long_boolean_byte().f(longs); + new C_long_boolean_byte().f(booleans); + new C_long_boolean_byte().f(bytes); + new C_float_boolean_byte().f(floats); + new C_float_boolean_byte().f(booleans); + new C_float_boolean_byte().f(bytes); + new C_double_boolean_byte().f(doubles); + new C_double_boolean_byte().f(booleans); + new C_double_boolean_byte().f(bytes); + + new C_byte_boolean_double().f(bytes); + new C_byte_boolean_double().f(booleans); + new C_byte_boolean_double().f(doubles); + new C_char_boolean_double().f(chars); + new C_char_boolean_double().f(booleans); + new C_char_boolean_double().f(doubles); + new C_short_boolean_double().f(shorts); + new C_short_boolean_double().f(booleans); + new C_short_boolean_double().f(doubles); + new C_int_boolean_double().f(ints); + new C_int_boolean_double().f(booleans); + new C_int_boolean_double().f(doubles); + new C_long_boolean_double().f(longs); + new C_long_boolean_double().f(booleans); + new C_long_boolean_double().f(doubles); + new C_float_boolean_double().f(floats); + new C_float_boolean_double().f(booleans); + new C_float_boolean_double().f(doubles); + + new C_byte_boolean_float().f(bytes); + new C_byte_boolean_float().f(booleans); + new C_byte_boolean_float().f(floats); + new C_char_boolean_float().f(chars); + new C_char_boolean_float().f(booleans); + new C_char_boolean_float().f(floats); + new C_short_boolean_float().f(shorts); + new C_short_boolean_float().f(booleans); + new C_short_boolean_float().f(floats); + new C_int_boolean_float().f(ints); + new C_int_boolean_float().f(booleans); + new C_int_boolean_float().f(floats); + new C_long_boolean_float().f(longs); + new C_long_boolean_float().f(booleans); + new C_long_boolean_float().f(floats); + new C_double_boolean_float().f(doubles); + new C_double_boolean_float().f(booleans); + new C_double_boolean_float().f(floats); + + new C_byte_boolean_long().f(bytes); + new C_byte_boolean_long().f(booleans); + new C_byte_boolean_long().f(longs); + new C_char_boolean_long().f(chars); + new C_char_boolean_long().f(booleans); + new C_char_boolean_long().f(longs); + new C_short_boolean_long().f(shorts); + new C_short_boolean_long().f(booleans); + new C_short_boolean_long().f(longs); + new C_int_boolean_long().f(ints); + new C_int_boolean_long().f(booleans); + new C_int_boolean_long().f(longs); + new C_float_boolean_long().f(floats); + new C_float_boolean_long().f(booleans); + new C_float_boolean_long().f(longs); + new C_double_boolean_long().f(doubles); + new C_double_boolean_long().f(booleans); + new C_double_boolean_long().f(longs); + + new C_byte_boolean_int().f(bytes); + new C_byte_boolean_int().f(booleans); + new C_byte_boolean_int().f(ints); + new C_char_boolean_int().f(chars); + new C_char_boolean_int().f(booleans); + new C_char_boolean_int().f(ints); + new C_short_boolean_int().f(shorts); + new C_short_boolean_int().f(booleans); + new C_short_boolean_int().f(ints); + new C_long_boolean_int().f(longs); + new C_long_boolean_int().f(booleans); + new C_long_boolean_int().f(ints); + new C_float_boolean_int().f(floats); + new C_float_boolean_int().f(booleans); + new C_float_boolean_int().f(ints); + new C_double_boolean_int().f(doubles); + new C_double_boolean_int().f(booleans); + new C_double_boolean_int().f(ints); + + new C_byte_boolean_short().f(bytes); + new C_byte_boolean_short().f(booleans); + new C_byte_boolean_short().f(shorts); + new C_char_boolean_short().f(chars); + new C_char_boolean_short().f(booleans); + new C_char_boolean_short().f(shorts); + new C_int_boolean_short().f(ints); + new C_int_boolean_short().f(booleans); + new C_int_boolean_short().f(shorts); + new C_long_boolean_short().f(longs); + new C_long_boolean_short().f(booleans); + new C_long_boolean_short().f(shorts); + new C_float_boolean_short().f(floats); + new C_float_boolean_short().f(booleans); + new C_float_boolean_short().f(shorts); + new C_double_boolean_short().f(doubles); + new C_double_boolean_short().f(booleans); + new C_double_boolean_short().f(shorts); + + new C_byte_boolean_char().f(bytes); + new C_byte_boolean_char().f(booleans); + new C_byte_boolean_char().f(chars); + new C_short_boolean_char().f(shorts); + new C_short_boolean_char().f(booleans); + new C_short_boolean_char().f(chars); + new C_int_boolean_char().f(ints); + new C_int_boolean_char().f(booleans); + new C_int_boolean_char().f(chars); + new C_long_boolean_char().f(longs); + new C_long_boolean_char().f(booleans); + new C_long_boolean_char().f(chars); + new C_float_boolean_char().f(floats); + new C_float_boolean_char().f(booleans); + new C_float_boolean_char().f(chars); + new C_double_boolean_char().f(doubles); + new C_double_boolean_char().f(booleans); + new C_double_boolean_char().f(chars); + + // ------------------------------------------------------------ + new C_char_byte_boolean().f(chars); + new C_char_byte_boolean().f(bytes); + new C_char_byte_boolean().f(booleans); + new C_short_byte_boolean().f(shorts); + new C_short_byte_boolean().f(bytes); + new C_short_byte_boolean().f(booleans); + new C_int_byte_boolean().f(ints); + new C_int_byte_boolean().f(bytes); + new C_int_byte_boolean().f(booleans); + new C_long_byte_boolean().f(longs); + new C_long_byte_boolean().f(bytes); + new C_long_byte_boolean().f(booleans); + new C_float_byte_boolean().f(floats); + new C_float_byte_boolean().f(bytes); + new C_float_byte_boolean().f(booleans); + new C_double_byte_boolean().f(doubles); + new C_double_byte_boolean().f(bytes); + new C_double_byte_boolean().f(booleans); + + new C_boolean_byte_char().f(booleans); + new C_boolean_byte_char().f(bytes); + new C_boolean_byte_char().f(chars); + new C_short_byte_char().f(shorts); + new C_short_byte_char().f(bytes); + new C_short_byte_char().f(chars); + new C_int_byte_char().f(ints); + new C_int_byte_char().f(bytes); + new C_int_byte_char().f(chars); + new C_long_byte_char().f(longs); + new C_long_byte_char().f(bytes); + new C_long_byte_char().f(chars); + new C_float_byte_char().f(floats); + new C_float_byte_char().f(bytes); + new C_float_byte_char().f(chars); + new C_double_byte_char().f(doubles); + new C_double_byte_char().f(bytes); + new C_double_byte_char().f(chars); + + new C_boolean_byte_short().f(booleans); + new C_boolean_byte_short().f(bytes); + new C_boolean_byte_short().f(shorts); + new C_char_byte_short().f(chars); + new C_char_byte_short().f(bytes); + new C_char_byte_short().f(shorts); + new C_int_byte_short().f(ints); + new C_int_byte_short().f(bytes); + new C_int_byte_short().f(shorts); + new C_long_byte_short().f(longs); + new C_long_byte_short().f(bytes); + new C_long_byte_short().f(shorts); + new C_float_byte_short().f(floats); + new C_float_byte_short().f(bytes); + new C_float_byte_short().f(shorts); + new C_double_byte_short().f(doubles); + new C_double_byte_short().f(bytes); + new C_double_byte_short().f(shorts); + + new C_boolean_byte_int().f(booleans); + new C_boolean_byte_int().f(bytes); + new C_boolean_byte_int().f(ints); + new C_char_byte_int().f(chars); + new C_char_byte_int().f(bytes); + new C_char_byte_int().f(ints); + new C_short_byte_int().f(shorts); + new C_short_byte_int().f(bytes); + new C_short_byte_int().f(ints); + new C_long_byte_int().f(longs); + new C_long_byte_int().f(bytes); + new C_long_byte_int().f(ints); + new C_float_byte_int().f(floats); + new C_float_byte_int().f(bytes); + new C_float_byte_int().f(ints); + new C_double_byte_int().f(doubles); + new C_double_byte_int().f(bytes); + new C_double_byte_int().f(ints); + + new C_boolean_byte_long().f(booleans); + new C_boolean_byte_long().f(bytes); + new C_boolean_byte_long().f(longs); + new C_char_byte_long().f(chars); + new C_char_byte_long().f(bytes); + new C_char_byte_long().f(longs); + new C_short_byte_long().f(shorts); + new C_short_byte_long().f(bytes); + new C_short_byte_long().f(longs); + new C_int_byte_long().f(ints); + new C_int_byte_long().f(bytes); + new C_int_byte_long().f(longs); + new C_float_byte_long().f(floats); + new C_float_byte_long().f(bytes); + new C_float_byte_long().f(longs); + new C_double_byte_long().f(doubles); + new C_double_byte_long().f(bytes); + new C_double_byte_long().f(longs); + + new C_boolean_byte_float().f(booleans); + new C_boolean_byte_float().f(bytes); + new C_boolean_byte_float().f(floats); + new C_char_byte_float().f(chars); + new C_char_byte_float().f(bytes); + new C_char_byte_float().f(floats); + new C_short_byte_float().f(shorts); + new C_short_byte_float().f(bytes); + new C_short_byte_float().f(floats); + new C_int_byte_float().f(ints); + new C_int_byte_float().f(bytes); + new C_int_byte_float().f(floats); + new C_long_byte_float().f(longs); + new C_long_byte_float().f(bytes); + new C_long_byte_float().f(floats); + new C_double_byte_float().f(doubles); + new C_double_byte_float().f(bytes); + new C_double_byte_float().f(floats); + + new C_boolean_byte_double().f(booleans); + new C_boolean_byte_double().f(bytes); + new C_boolean_byte_double().f(doubles); + new C_char_byte_double().f(chars); + new C_char_byte_double().f(bytes); + new C_char_byte_double().f(doubles); + new C_short_byte_double().f(shorts); + new C_short_byte_double().f(bytes); + new C_short_byte_double().f(doubles); + new C_int_byte_double().f(ints); + new C_int_byte_double().f(bytes); + new C_int_byte_double().f(doubles); + new C_long_byte_double().f(longs); + new C_long_byte_double().f(bytes); + new C_long_byte_double().f(doubles); + new C_float_byte_double().f(floats); + new C_float_byte_double().f(bytes); + new C_float_byte_double().f(doubles); + + // ------------------------------------------------------------ + + new C_byte_char_boolean().f(bytes); + new C_byte_char_boolean().f(chars); + new C_byte_char_boolean().f(booleans); + new C_short_char_boolean().f(shorts); + new C_short_char_boolean().f(chars); + new C_short_char_boolean().f(booleans); + new C_int_char_boolean().f(ints); + new C_int_char_boolean().f(chars); + new C_int_char_boolean().f(booleans); + new C_long_char_boolean().f(longs); + new C_long_char_boolean().f(chars); + new C_long_char_boolean().f(booleans); + new C_float_char_boolean().f(floats); + new C_float_char_boolean().f(chars); + new C_float_char_boolean().f(booleans); + new C_double_char_boolean().f(doubles); + new C_double_char_boolean().f(chars); + new C_double_char_boolean().f(booleans); + + new C_boolean_char_byte().f(booleans); + new C_boolean_char_byte().f(chars); + new C_boolean_char_byte().f(bytes); + new C_short_char_byte().f(shorts); + new C_short_char_byte().f(chars); + new C_short_char_byte().f(bytes); + new C_int_char_byte().f(ints); + new C_int_char_byte().f(chars); + new C_int_char_byte().f(bytes); + new C_long_char_byte().f(longs); + new C_long_char_byte().f(chars); + new C_long_char_byte().f(bytes); + new C_float_char_byte().f(floats); + new C_float_char_byte().f(chars); + new C_float_char_byte().f(bytes); + new C_double_char_byte().f(doubles); + new C_double_char_byte().f(chars); + new C_double_char_byte().f(bytes); + + new C_boolean_char_short().f(booleans); + new C_boolean_char_short().f(chars); + new C_boolean_char_short().f(shorts); + new C_byte_char_short().f(bytes); + new C_byte_char_short().f(chars); + new C_byte_char_short().f(shorts); + new C_int_char_short().f(ints); + new C_int_char_short().f(chars); + new C_int_char_short().f(shorts); + new C_long_char_short().f(longs); + new C_long_char_short().f(chars); + new C_long_char_short().f(shorts); + new C_float_char_short().f(floats); + new C_float_char_short().f(chars); + new C_float_char_short().f(shorts); + new C_double_char_short().f(doubles); + new C_double_char_short().f(chars); + new C_double_char_short().f(shorts); + + new C_boolean_char_int().f(booleans); + new C_boolean_char_int().f(chars); + new C_boolean_char_int().f(ints); + new C_byte_char_int().f(bytes); + new C_byte_char_int().f(chars); + new C_byte_char_int().f(ints); + new C_short_char_int().f(shorts); + new C_short_char_int().f(chars); + new C_short_char_int().f(ints); + new C_long_char_int().f(longs); + new C_long_char_int().f(chars); + new C_long_char_int().f(ints); + new C_float_char_int().f(floats); + new C_float_char_int().f(chars); + new C_float_char_int().f(ints); + new C_double_char_int().f(doubles); + new C_double_char_int().f(chars); + new C_double_char_int().f(ints); + + new C_boolean_char_long().f(booleans); + new C_boolean_char_long().f(chars); + new C_boolean_char_long().f(longs); + new C_byte_char_long().f(bytes); + new C_byte_char_long().f(chars); + new C_byte_char_long().f(longs); + new C_short_char_long().f(shorts); + new C_short_char_long().f(chars); + new C_short_char_long().f(longs); + new C_int_char_long().f(ints); + new C_int_char_long().f(chars); + new C_int_char_long().f(longs); + new C_float_char_long().f(floats); + new C_float_char_long().f(chars); + new C_float_char_long().f(longs); + new C_double_char_long().f(doubles); + new C_double_char_long().f(chars); + new C_double_char_long().f(longs); + + new C_boolean_char_float().f(booleans); + new C_boolean_char_float().f(chars); + new C_boolean_char_float().f(floats); + new C_byte_char_float().f(bytes); + new C_byte_char_float().f(chars); + new C_byte_char_float().f(floats); + new C_short_char_float().f(shorts); + new C_short_char_float().f(chars); + new C_short_char_float().f(floats); + new C_int_char_float().f(ints); + new C_int_char_float().f(chars); + new C_int_char_float().f(floats); + new C_long_char_float().f(longs); + new C_long_char_float().f(chars); + new C_long_char_float().f(floats); + new C_double_char_float().f(doubles); + new C_double_char_float().f(chars); + new C_double_char_float().f(floats); + + new C_boolean_char_double().f(booleans); + new C_boolean_char_double().f(chars); + new C_boolean_char_double().f(doubles); + new C_byte_char_double().f(bytes); + new C_byte_char_double().f(chars); + new C_byte_char_double().f(doubles); + new C_short_char_double().f(shorts); + new C_short_char_double().f(chars); + new C_short_char_double().f(doubles); + new C_int_char_double().f(ints); + new C_int_char_double().f(chars); + new C_int_char_double().f(doubles); + new C_long_char_double().f(longs); + new C_long_char_double().f(chars); + new C_long_char_double().f(doubles); + new C_float_char_double().f(floats); + new C_float_char_double().f(chars); + new C_float_char_double().f(doubles); + + //XX + new C_byte_double_boolean().f(bytes); + new C_byte_double_boolean().f(doubles); + new C_byte_double_boolean().f(booleans); + new C_char_double_boolean().f(chars); + new C_char_double_boolean().f(doubles); + new C_char_double_boolean().f(booleans); + new C_short_double_boolean().f(shorts); + new C_short_double_boolean().f(doubles); + new C_short_double_boolean().f(booleans); + new C_int_double_boolean().f(ints); + new C_int_double_boolean().f(doubles); + new C_int_double_boolean().f(booleans); + new C_long_double_boolean().f(longs); + new C_long_double_boolean().f(doubles); + new C_long_double_boolean().f(booleans); + new C_float_double_boolean().f(floats); + new C_float_double_boolean().f(doubles); + new C_float_double_boolean().f(booleans); + + new C_boolean_double_byte().f(booleans); + new C_boolean_double_byte().f(doubles); + new C_boolean_double_byte().f(bytes); + new C_char_double_byte().f(chars); + new C_char_double_byte().f(doubles); + new C_char_double_byte().f(bytes); + new C_short_double_byte().f(shorts); + new C_short_double_byte().f(doubles); + new C_short_double_byte().f(bytes); + new C_int_double_byte().f(ints); + new C_int_double_byte().f(doubles); + new C_int_double_byte().f(bytes); + new C_long_double_byte().f(longs); + new C_long_double_byte().f(doubles); + new C_long_double_byte().f(bytes); + new C_float_double_byte().f(floats); + new C_float_double_byte().f(doubles); + new C_float_double_byte().f(bytes); + + new C_boolean_double_char().f(booleans); + new C_boolean_double_char().f(doubles); + new C_boolean_double_char().f(chars); + new C_byte_double_char().f(bytes); + new C_byte_double_char().f(doubles); + new C_byte_double_char().f(chars); + new C_short_double_char().f(shorts); + new C_short_double_char().f(doubles); + new C_short_double_char().f(chars); + new C_int_double_char().f(ints); + new C_int_double_char().f(doubles); + new C_int_double_char().f(chars); + new C_long_double_char().f(longs); + new C_long_double_char().f(doubles); + new C_long_double_char().f(chars); + new C_float_double_char().f(floats); + new C_float_double_char().f(doubles); + new C_float_double_char().f(chars); + + new C_boolean_double_short().f(booleans); + new C_boolean_double_short().f(doubles); + new C_boolean_double_short().f(shorts); + new C_byte_double_short().f(bytes); + new C_byte_double_short().f(doubles); + new C_byte_double_short().f(shorts); + new C_char_double_short().f(chars); + new C_char_double_short().f(doubles); + new C_char_double_short().f(shorts); + new C_int_double_short().f(ints); + new C_int_double_short().f(doubles); + new C_int_double_short().f(shorts); + new C_long_double_short().f(longs); + new C_long_double_short().f(doubles); + new C_long_double_short().f(shorts); + new C_float_double_short().f(floats); + new C_float_double_short().f(doubles); + new C_float_double_short().f(shorts); + + new C_boolean_double_int().f(booleans); + new C_boolean_double_int().f(doubles); + new C_boolean_double_int().f(ints); + new C_byte_double_int().f(bytes); + new C_byte_double_int().f(doubles); + new C_byte_double_int().f(ints); + new C_char_double_int().f(chars); + new C_char_double_int().f(doubles); + new C_char_double_int().f(ints); + new C_short_double_int().f(shorts); + new C_short_double_int().f(doubles); + new C_short_double_int().f(ints); + new C_long_double_int().f(longs); + new C_long_double_int().f(doubles); + new C_long_double_int().f(ints); + new C_float_double_int().f(floats); + new C_float_double_int().f(doubles); + new C_float_double_int().f(ints); + + new C_boolean_double_long().f(booleans); + new C_boolean_double_long().f(doubles); + new C_boolean_double_long().f(longs); + new C_byte_double_long().f(bytes); + new C_byte_double_long().f(doubles); + new C_byte_double_long().f(longs); + new C_char_double_long().f(chars); + new C_char_double_long().f(doubles); + new C_char_double_long().f(longs); + new C_short_double_long().f(shorts); + new C_short_double_long().f(doubles); + new C_short_double_long().f(longs); + new C_int_double_long().f(ints); + new C_int_double_long().f(doubles); + new C_int_double_long().f(longs); + new C_float_double_long().f(floats); + new C_float_double_long().f(doubles); + new C_float_double_long().f(longs); + + new C_boolean_double_float().f(booleans); + new C_boolean_double_float().f(doubles); + new C_boolean_double_float().f(floats); + new C_byte_double_float().f(bytes); + new C_byte_double_float().f(doubles); + new C_byte_double_float().f(floats); + new C_char_double_float().f(chars); + new C_char_double_float().f(doubles); + new C_char_double_float().f(floats); + new C_short_double_float().f(shorts); + new C_short_double_float().f(doubles); + new C_short_double_float().f(floats); + new C_int_double_float().f(ints); + new C_int_double_float().f(doubles); + new C_int_double_float().f(floats); + new C_long_double_float().f(longs); + new C_long_double_float().f(doubles); + new C_long_double_float().f(floats); + + // ------------------------------------------------------------ + new C_byte_float_boolean().f(bytes); + new C_byte_float_boolean().f(floats); + new C_byte_float_boolean().f(booleans); + new C_char_float_boolean().f(chars); + new C_char_float_boolean().f(floats); + new C_char_float_boolean().f(booleans); + new C_short_float_boolean().f(shorts); + new C_short_float_boolean().f(floats); + new C_short_float_boolean().f(booleans); + new C_int_float_boolean().f(ints); + new C_int_float_boolean().f(floats); + new C_int_float_boolean().f(booleans); + new C_long_float_boolean().f(longs); + new C_long_float_boolean().f(floats); + new C_long_float_boolean().f(booleans); + new C_double_float_boolean().f(doubles); + new C_double_float_boolean().f(floats); + new C_double_float_boolean().f(booleans); + + new C_boolean_float_byte().f(booleans); + new C_boolean_float_byte().f(floats); + new C_boolean_float_byte().f(bytes); + new C_char_float_byte().f(chars); + new C_char_float_byte().f(floats); + new C_char_float_byte().f(bytes); + new C_short_float_byte().f(shorts); + new C_short_float_byte().f(floats); + new C_short_float_byte().f(bytes); + new C_int_float_byte().f(ints); + new C_int_float_byte().f(floats); + new C_int_float_byte().f(bytes); + new C_long_float_byte().f(longs); + new C_long_float_byte().f(floats); + new C_long_float_byte().f(bytes); + new C_double_float_byte().f(doubles); + new C_double_float_byte().f(floats); + new C_double_float_byte().f(bytes); + + new C_boolean_float_char().f(booleans); + new C_boolean_float_char().f(floats); + new C_boolean_float_char().f(chars); + new C_byte_float_char().f(bytes); + new C_byte_float_char().f(floats); + new C_byte_float_char().f(chars); + new C_short_float_char().f(shorts); + new C_short_float_char().f(floats); + new C_short_float_char().f(chars); + new C_int_float_char().f(ints); + new C_int_float_char().f(floats); + new C_int_float_char().f(chars); + new C_long_float_char().f(longs); + new C_long_float_char().f(floats); + new C_long_float_char().f(chars); + new C_double_float_char().f(doubles); + new C_double_float_char().f(floats); + new C_double_float_char().f(chars); + + new C_boolean_float_short().f(booleans); + new C_boolean_float_short().f(floats); + new C_boolean_float_short().f(shorts); + new C_byte_float_short().f(bytes); + new C_byte_float_short().f(floats); + new C_byte_float_short().f(shorts); + new C_char_float_short().f(chars); + new C_char_float_short().f(floats); + new C_char_float_short().f(shorts); + new C_int_float_short().f(ints); + new C_int_float_short().f(floats); + new C_int_float_short().f(shorts); + new C_long_float_short().f(longs); + new C_long_float_short().f(floats); + new C_long_float_short().f(shorts); + new C_double_float_short().f(doubles); + new C_double_float_short().f(floats); + new C_double_float_short().f(shorts); + + new C_boolean_float_int().f(booleans); + new C_boolean_float_int().f(floats); + new C_boolean_float_int().f(ints); + new C_byte_float_int().f(bytes); + new C_byte_float_int().f(floats); + new C_byte_float_int().f(ints); + new C_char_float_int().f(chars); + new C_char_float_int().f(floats); + new C_char_float_int().f(ints); + new C_short_float_int().f(shorts); + new C_short_float_int().f(floats); + new C_short_float_int().f(ints); + new C_long_float_int().f(longs); + new C_long_float_int().f(floats); + new C_long_float_int().f(ints); + new C_double_float_int().f(doubles); + new C_double_float_int().f(floats); + new C_double_float_int().f(ints); + + new C_boolean_float_long().f(booleans); + new C_boolean_float_long().f(floats); + new C_boolean_float_long().f(longs); + new C_byte_float_long().f(bytes); + new C_byte_float_long().f(floats); + new C_byte_float_long().f(longs); + new C_char_float_long().f(chars); + new C_char_float_long().f(floats); + new C_char_float_long().f(longs); + new C_short_float_long().f(shorts); + new C_short_float_long().f(floats); + new C_short_float_long().f(longs); + new C_long_float_long().f(longs); + new C_long_float_long().f(floats); + new C_long_float_long().f(longs); + new C_double_float_long().f(doubles); + new C_double_float_long().f(floats); + new C_double_float_long().f(longs); + + new C_boolean_float_double().f(booleans); + new C_boolean_float_double().f(floats); + new C_boolean_float_double().f(doubles); + new C_byte_float_double().f(bytes); + new C_byte_float_double().f(floats); + new C_byte_float_double().f(doubles); + new C_char_float_double().f(chars); + new C_char_float_double().f(floats); + new C_char_float_double().f(doubles); + new C_short_float_double().f(shorts); + new C_short_float_double().f(floats); + new C_short_float_double().f(doubles); + new C_int_float_double().f(ints); + new C_int_float_double().f(floats); + new C_int_float_double().f(doubles); + new C_long_float_double().f(longs); + new C_long_float_double().f(floats); + new C_long_float_double().f(doubles); + + // ------------------------------------------------------------ + new C_byte_int_boolean().f(bytes); + new C_byte_int_boolean().f(ints); + new C_byte_int_boolean().f(booleans); + new C_char_int_boolean().f(chars); + new C_char_int_boolean().f(ints); + new C_char_int_boolean().f(booleans); + new C_short_int_boolean().f(shorts); + new C_short_int_boolean().f(ints); + new C_short_int_boolean().f(booleans); + new C_long_int_boolean().f(longs); + new C_long_int_boolean().f(ints); + new C_long_int_boolean().f(booleans); + new C_float_int_boolean().f(floats); + new C_float_int_boolean().f(ints); + new C_float_int_boolean().f(booleans); + new C_double_int_boolean().f(doubles); + new C_double_int_boolean().f(ints); + new C_double_int_boolean().f(booleans); + + new C_boolean_int_byte().f(booleans); + new C_boolean_int_byte().f(ints); + new C_boolean_int_byte().f(bytes); + new C_char_int_byte().f(chars); + new C_char_int_byte().f(ints); + new C_char_int_byte().f(bytes); + new C_short_int_byte().f(shorts); + new C_short_int_byte().f(ints); + new C_short_int_byte().f(bytes); + new C_long_int_byte().f(longs); + new C_long_int_byte().f(ints); + new C_long_int_byte().f(bytes); + new C_float_int_byte().f(floats); + new C_float_int_byte().f(ints); + new C_float_int_byte().f(bytes); + new C_double_int_byte().f(doubles); + new C_double_int_byte().f(ints); + new C_double_int_byte().f(bytes); + + new C_boolean_int_char().f(booleans); + new C_boolean_int_char().f(ints); + new C_boolean_int_char().f(chars); + new C_byte_int_char().f(bytes); + new C_byte_int_char().f(ints); + new C_byte_int_char().f(chars); + new C_short_int_char().f(shorts); + new C_short_int_char().f(ints); + new C_short_int_char().f(chars); + new C_long_int_char().f(longs); + new C_long_int_char().f(ints); + new C_long_int_char().f(chars); + new C_float_int_char().f(floats); + new C_float_int_char().f(ints); + new C_float_int_char().f(chars); + new C_double_int_char().f(doubles); + new C_double_int_char().f(ints); + new C_double_int_char().f(chars); + + new C_boolean_int_short().f(booleans); + new C_boolean_int_short().f(ints); + new C_boolean_int_short().f(shorts); + new C_byte_int_short().f(bytes); + new C_byte_int_short().f(ints); + new C_byte_int_short().f(shorts); + new C_char_int_short().f(chars); + new C_char_int_short().f(ints); + new C_char_int_short().f(shorts); + new C_long_int_short().f(longs); + new C_long_int_short().f(ints); + new C_long_int_short().f(shorts); + new C_float_int_short().f(floats); + new C_float_int_short().f(ints); + new C_float_int_short().f(shorts); + new C_double_int_short().f(doubles); + new C_double_int_short().f(ints); + new C_double_int_short().f(shorts); + + new C_boolean_int_long().f(booleans); + new C_boolean_int_long().f(ints); + new C_boolean_int_long().f(longs); + new C_byte_int_long().f(bytes); + new C_byte_int_long().f(ints); + new C_byte_int_long().f(longs); + new C_char_int_long().f(chars); + new C_char_int_long().f(ints); + new C_char_int_long().f(longs); + new C_short_int_long().f(shorts); + new C_short_int_long().f(ints); + new C_short_int_long().f(longs); + new C_float_int_long().f(floats); + new C_float_int_long().f(ints); + new C_float_int_long().f(longs); + new C_double_int_long().f(doubles); + new C_double_int_long().f(ints); + new C_double_int_long().f(longs); + + new C_boolean_int_float().f(booleans); + new C_boolean_int_float().f(ints); + new C_boolean_int_float().f(floats); + new C_byte_int_float().f(bytes); + new C_byte_int_float().f(ints); + new C_byte_int_float().f(floats); + new C_char_int_float().f(chars); + new C_char_int_float().f(ints); + new C_char_int_float().f(floats); + new C_short_int_float().f(shorts); + new C_short_int_float().f(ints); + new C_short_int_float().f(floats); + new C_long_int_float().f(longs); + new C_long_int_float().f(ints); + new C_long_int_float().f(floats); + new C_double_int_float().f(doubles); + new C_double_int_float().f(ints); + new C_double_int_float().f(floats); + + new C_boolean_int_double().f(booleans); + new C_boolean_int_double().f(ints); + new C_boolean_int_double().f(doubles); + new C_byte_int_double().f(bytes); + new C_byte_int_double().f(ints); + new C_byte_int_double().f(doubles); + new C_char_int_double().f(chars); + new C_char_int_double().f(ints); + new C_char_int_double().f(doubles); + new C_short_int_double().f(shorts); + new C_short_int_double().f(ints); + new C_short_int_double().f(doubles); + new C_long_int_double().f(longs); + new C_long_int_double().f(ints); + new C_long_int_double().f(doubles); + new C_float_int_double().f(floats); + new C_float_int_double().f(ints); + new C_float_int_double().f(doubles); + + // ------------------------------------------------------------ + new C_byte_short_boolean().f(bytes); + new C_byte_short_boolean().f(shorts); + new C_byte_short_boolean().f(booleans); + new C_char_short_boolean().f(chars); + new C_char_short_boolean().f(shorts); + new C_char_short_boolean().f(booleans); + new C_int_short_boolean().f(ints); + new C_int_short_boolean().f(shorts); + new C_int_short_boolean().f(booleans); + new C_long_short_boolean().f(longs); + new C_long_short_boolean().f(shorts); + new C_long_short_boolean().f(booleans); + new C_float_short_boolean().f(floats); + new C_float_short_boolean().f(shorts); + new C_float_short_boolean().f(booleans); + new C_double_short_boolean().f(doubles); + new C_double_short_boolean().f(shorts); + new C_double_short_boolean().f(booleans); + + new C_boolean_short_byte().f(booleans); + new C_boolean_short_byte().f(shorts); + new C_boolean_short_byte().f(bytes); + new C_char_short_byte().f(chars); + new C_char_short_byte().f(shorts); + new C_char_short_byte().f(bytes); + new C_int_short_byte().f(ints); + new C_int_short_byte().f(shorts); + new C_int_short_byte().f(bytes); + new C_long_short_byte().f(longs); + new C_long_short_byte().f(shorts); + new C_long_short_byte().f(bytes); + new C_float_short_byte().f(floats); + new C_float_short_byte().f(shorts); + new C_float_short_byte().f(bytes); + new C_double_short_byte().f(doubles); + new C_double_short_byte().f(shorts); + new C_double_short_byte().f(bytes); + + new C_boolean_short_char().f(booleans); + new C_boolean_short_char().f(shorts); + new C_boolean_short_char().f(chars); + new C_byte_short_char().f(bytes); + new C_byte_short_char().f(shorts); + new C_byte_short_char().f(chars); + new C_int_short_char().f(ints); + new C_int_short_char().f(shorts); + new C_int_short_char().f(chars); + new C_long_short_char().f(longs); + new C_long_short_char().f(shorts); + new C_long_short_char().f(chars); + new C_float_short_char().f(floats); + new C_float_short_char().f(shorts); + new C_float_short_char().f(chars); + new C_double_short_char().f(doubles); + new C_double_short_char().f(shorts); + new C_double_short_char().f(chars); + + new C_boolean_short_int().f(booleans); + new C_boolean_short_int().f(shorts); + new C_boolean_short_int().f(ints); + new C_byte_short_int().f(bytes); + new C_byte_short_int().f(shorts); + new C_byte_short_int().f(ints); + new C_char_short_int().f(chars); + new C_char_short_int().f(shorts); + new C_char_short_int().f(ints); + new C_long_short_int().f(longs); + new C_long_short_int().f(shorts); + new C_long_short_int().f(ints); + new C_float_short_int().f(floats); + new C_float_short_int().f(shorts); + new C_float_short_int().f(ints); + new C_double_short_int().f(doubles); + new C_double_short_int().f(shorts); + new C_double_short_int().f(ints); + + new C_boolean_short_long().f(booleans); + new C_boolean_short_long().f(shorts); + new C_boolean_short_long().f(longs); + new C_byte_short_long().f(bytes); + new C_byte_short_long().f(shorts); + new C_byte_short_long().f(longs); + new C_char_short_long().f(chars); + new C_char_short_long().f(shorts); + new C_char_short_long().f(longs); + new C_int_short_long().f(ints); + new C_int_short_long().f(shorts); + new C_int_short_long().f(longs); + new C_float_short_long().f(floats); + new C_float_short_long().f(shorts); + new C_float_short_long().f(longs); + new C_double_short_long().f(doubles); + new C_double_short_long().f(shorts); + new C_double_short_long().f(longs); + + new C_boolean_short_float().f(booleans); + new C_boolean_short_float().f(shorts); + new C_boolean_short_float().f(floats); + new C_byte_short_float().f(bytes); + new C_byte_short_float().f(shorts); + new C_byte_short_float().f(floats); + new C_char_short_float().f(chars); + new C_char_short_float().f(shorts); + new C_char_short_float().f(floats); + new C_int_short_float().f(ints); + new C_int_short_float().f(shorts); + new C_int_short_float().f(floats); + new C_long_short_float().f(longs); + new C_long_short_float().f(shorts); + new C_long_short_float().f(floats); + new C_double_short_float().f(doubles); + new C_double_short_float().f(shorts); + new C_double_short_float().f(floats); + + new C_boolean_short_double().f(booleans); + new C_boolean_short_double().f(shorts); + new C_boolean_short_double().f(doubles); + new C_byte_short_double().f(bytes); + new C_byte_short_double().f(shorts); + new C_byte_short_double().f(doubles); + new C_char_short_double().f(chars); + new C_char_short_double().f(shorts); + new C_char_short_double().f(doubles); + new C_int_short_double().f(ints); + new C_int_short_double().f(shorts); + new C_int_short_double().f(doubles); + new C_long_short_double().f(longs); + new C_long_short_double().f(shorts); + new C_long_short_double().f(doubles); + new C_float_short_double().f(floats); + new C_float_short_double().f(shorts); + new C_float_short_double().f(doubles); + + org.aspectj.testing.Tester.checkAllEventsIgnoreDups(); + + } + + void m(String msg) { org.aspectj.testing.Tester.expectEvent(msg); } + + void wants() { + m("C_boolean-boolean"); + m("C_byte-byte"); + m("C_char-char"); + m("C_short-short"); + m("C_int-int"); + m("C_long-long"); + m("C_float-float"); + m("C_double-double"); + + m("C_byte_double_boolean-byte"); + m("C_char_double_boolean-char"); + m("C_short_double_boolean-short"); + m("C_int_double_boolean-int"); + m("C_long_double_boolean-long"); + m("C_float_double_boolean-float"); + + m("C_boolean_double_byte-boolean"); + m("C_char_double_byte-char"); + m("C_short_double_byte-short"); + m("C_int_double_byte-int"); + m("C_long_double_byte-long"); + m("C_float_double_byte-float"); + + m("C_boolean_double_char-boolean"); + m("C_byte_double_char-byte"); + m("C_short_double_char-short"); + m("C_int_double_char-int"); + m("C_long_double_char-long"); + m("C_float_double_char-float"); + + m("C_boolean_double_short-boolean"); + m("C_byte_double_short-byte"); + m("C_char_double_short-char"); + m("C_int_double_short-int"); + m("C_long_double_short-long"); + m("C_float_double_short-float"); + + m("C_boolean_double_int-boolean"); + m("C_byte_double_int-byte"); + m("C_char_double_int-char"); + m("C_short_double_int-short"); + m("C_long_double_int-long"); + m("C_float_double_int-float"); + + m("C_boolean_double_long-boolean"); + m("C_byte_double_long-byte"); + m("C_char_double_long-char"); + m("C_short_double_long-short"); + m("C_int_double_long-int"); + m("C_float_double_long-float"); + + m("C_boolean_double_float-boolean"); + m("C_byte_double_float-byte"); + m("C_char_double_float-char"); + m("C_short_double_float-short"); + m("C_int_double_float-int"); + m("C_long_double_float-long"); + +// ------------------------------------------------------------ + m("C_byte_float_boolean-byte"); + m("C_char_float_boolean-char"); + m("C_short_float_boolean-short"); + m("C_int_float_boolean-int"); + m("C_long_float_boolean-long"); + m("C_double_float_boolean-double"); + + m("C_boolean_float_byte-boolean"); + m("C_char_float_byte-char"); + m("C_short_float_byte-short"); + m("C_int_float_byte-int"); + m("C_long_float_byte-long"); + m("C_double_float_byte-double"); + + m("C_boolean_float_char-boolean"); + m("C_byte_float_char-byte"); + m("C_short_float_char-short"); + m("C_int_float_char-int"); + m("C_long_float_char-long"); + m("C_double_float_char-double"); + + m("C_boolean_float_short-boolean"); + m("C_byte_float_short-byte"); + m("C_char_float_short-char"); + m("C_int_float_short-int"); + m("C_long_float_short-long"); + m("C_double_float_short-double"); + + m("C_boolean_float_int-boolean"); + m("C_byte_float_int-byte"); + m("C_char_float_int-char"); + m("C_short_float_int-short"); + m("C_long_float_int-long"); + m("C_double_float_int-double"); + + m("C_boolean_float_long-boolean"); + m("C_byte_float_long-byte"); + m("C_char_float_long-char"); + m("C_short_float_long-short"); + m("C_long_float_long-long"); + m("C_double_float_long-double"); + + m("C_boolean_float_double-boolean"); + m("C_byte_float_double-byte"); + m("C_char_float_double-char"); + m("C_short_float_double-short"); + m("C_int_float_double-int"); + m("C_long_float_double-long"); + +// ------------------------------------------------------------ + m("C_byte_int_boolean-byte"); + m("C_char_int_boolean-char"); + m("C_short_int_boolean-short"); + m("C_long_int_boolean-long"); + m("C_float_int_boolean-float"); + m("C_double_int_boolean-double"); + + m("C_boolean_int_byte-boolean"); + m("C_char_int_byte-char"); + m("C_short_int_byte-short"); + m("C_long_int_byte-long"); + m("C_float_int_byte-float"); + m("C_double_int_byte-double"); + + m("C_boolean_int_char-boolean"); + m("C_byte_int_char-byte"); + m("C_short_int_char-short"); + m("C_long_int_char-long"); + m("C_float_int_char-float"); + m("C_double_int_char-double"); + + m("C_boolean_int_short-boolean"); + m("C_byte_int_short-byte"); + m("C_char_int_short-char"); + m("C_long_int_short-long"); + m("C_float_int_short-float"); + m("C_double_int_short-double"); + + m("C_boolean_int_long-boolean"); + m("C_byte_int_long-byte"); + m("C_char_int_long-char"); + m("C_short_int_long-short"); + m("C_float_int_long-float"); + m("C_double_int_long-double"); + + m("C_boolean_int_float-boolean"); + m("C_byte_int_float-byte"); + m("C_char_int_float-char"); + m("C_short_int_float-short"); + m("C_long_int_float-long"); + m("C_double_int_float-double"); + + m("C_boolean_int_double-boolean"); + m("C_byte_int_double-byte"); + m("C_char_int_double-char"); + m("C_short_int_double-short"); + m("C_long_int_double-long"); + m("C_float_int_double-float"); + +// ------------------------------------------------------------ + m("C_byte_short_boolean-byte"); + m("C_char_short_boolean-char"); + m("C_int_short_boolean-int"); + m("C_long_short_boolean-long"); + m("C_float_short_boolean-float"); + m("C_double_short_boolean-double"); + + m("C_boolean_short_byte-boolean"); + m("C_char_short_byte-char"); + m("C_int_short_byte-int"); + m("C_long_short_byte-long"); + m("C_float_short_byte-float"); + m("C_double_short_byte-double"); + + m("C_boolean_short_char-boolean"); + m("C_byte_short_char-byte"); + m("C_int_short_char-int"); + m("C_long_short_char-long"); + m("C_float_short_char-float"); + m("C_double_short_char-double"); + + m("C_boolean_short_int-boolean"); + m("C_byte_short_int-byte"); + m("C_char_short_int-char"); + m("C_long_short_int-long"); + m("C_float_short_int-float"); + m("C_double_short_int-double"); + + m("C_boolean_short_long-boolean"); + m("C_byte_short_long-byte"); + m("C_char_short_long-char"); + m("C_int_short_long-int"); + m("C_float_short_long-float"); + m("C_double_short_long-double"); + + m("C_boolean_short_float-boolean"); + m("C_byte_short_float-byte"); + m("C_char_short_float-char"); + m("C_int_short_float-int"); + m("C_long_short_float-long"); + m("C_double_short_float-double"); + + m("C_boolean_short_double-boolean"); + m("C_byte_short_double-byte"); + m("C_char_short_double-char"); + m("C_int_short_double-int"); + m("C_long_short_double-long"); + m("C_float_short_double-float"); + +// ------------------------------------------------------------ + m("C_byte_char_boolean-byte"); + m("C_short_char_boolean-short"); + m("C_int_char_boolean-int"); + m("C_long_char_boolean-long"); + m("C_float_char_boolean-float"); + m("C_double_char_boolean-double"); + + m("C_boolean_char_byte-boolean"); + m("C_short_char_byte-short"); + m("C_int_char_byte-int"); + m("C_long_char_byte-long"); + m("C_float_char_byte-float"); + m("C_double_char_byte-double"); + + m("C_boolean_char_short-boolean"); + m("C_byte_char_short-byte"); + m("C_int_char_short-int"); + m("C_long_char_short-long"); + m("C_float_char_short-float"); + m("C_double_char_short-double"); + + m("C_boolean_char_int-boolean"); + m("C_byte_char_int-byte"); + m("C_short_char_int-short"); + m("C_long_char_int-long"); + m("C_float_char_int-float"); + m("C_double_char_int-double"); + + m("C_boolean_char_long-boolean"); + m("C_byte_char_long-byte"); + m("C_short_char_long-short"); + m("C_int_char_long-int"); + m("C_float_char_long-float"); + m("C_double_char_long-double"); + + m("C_boolean_char_float-boolean"); + m("C_byte_char_float-byte"); + m("C_short_char_float-short"); + m("C_int_char_float-int"); + m("C_long_char_float-long"); + m("C_double_char_float-double"); + + m("C_boolean_char_double-boolean"); + m("C_byte_char_double-byte"); + m("C_short_char_double-short"); + m("C_int_char_double-int"); + m("C_long_char_double-long"); + m("C_float_char_double-float"); + + +// ------------------------------------------------------------ + m("C_char_byte_boolean-char"); + m("C_short_byte_boolean-short"); + m("C_int_byte_boolean-int"); + m("C_long_byte_boolean-long"); + m("C_float_byte_boolean-float"); + m("C_double_byte_boolean-double"); + + m("C_boolean_byte_char-boolean"); + m("C_short_byte_char-short"); + m("C_int_byte_char-int"); + m("C_long_byte_char-long"); + m("C_float_byte_char-float"); + m("C_double_byte_char-double"); + + m("C_boolean_byte_short-boolean"); + m("C_char_byte_short-char"); + m("C_int_byte_short-int"); + m("C_long_byte_short-long"); + m("C_float_byte_short-float"); + m("C_double_byte_short-double"); + + m("C_boolean_byte_int-boolean"); + m("C_char_byte_int-char"); + m("C_short_byte_int-short"); + m("C_long_byte_int-long"); + m("C_float_byte_int-float"); + m("C_double_byte_int-double"); + + m("C_boolean_byte_long-boolean"); + m("C_char_byte_long-char"); + m("C_short_byte_long-short"); + m("C_int_byte_long-int"); + m("C_float_byte_long-float"); + m("C_double_byte_long-double"); + + m("C_boolean_byte_float-boolean"); + m("C_char_byte_float-char"); + m("C_short_byte_float-short"); + m("C_int_byte_float-int"); + m("C_long_byte_float-long"); + m("C_double_byte_float-double"); + + m("C_boolean_byte_double-boolean"); + m("C_char_byte_double-char"); + m("C_short_byte_double-short"); + m("C_int_byte_double-int"); + m("C_long_byte_double-long"); + m("C_float_byte_double-float"); + +// ------------------------------------------------------------ + m("C_byte_boolean_double-byte"); + m("C_char_boolean_double-char"); + m("C_short_boolean_double-short"); + m("C_int_boolean_double-int"); + m("C_long_boolean_double-long"); + m("C_float_boolean_double-float"); + + m("C_byte_boolean_float-byte"); + m("C_char_boolean_float-char"); + m("C_short_boolean_float-short"); + m("C_int_boolean_float-int"); + m("C_long_boolean_float-long"); + m("C_double_boolean_float-double"); + + m("C_byte_boolean_long-byte"); + m("C_char_boolean_long-char"); + m("C_short_boolean_long-short"); + m("C_int_boolean_long-int"); + m("C_float_boolean_long-float"); + m("C_double_boolean_long-double"); + + m("C_byte_boolean_int-byte"); + m("C_char_boolean_int-char"); + m("C_short_boolean_int-short"); + m("C_long_boolean_int-long"); + m("C_float_boolean_int-float"); + m("C_double_boolean_int-double"); + + m("C_byte_boolean_short-byte"); + m("C_char_boolean_short-char"); + m("C_int_boolean_short-int"); + m("C_long_boolean_short-long"); + m("C_float_boolean_short-float"); + m("C_double_boolean_short-double"); + + m("C_byte_boolean_char-byte"); + m("C_short_boolean_char-short"); + m("C_int_boolean_char-int"); + m("C_long_boolean_char-long"); + m("C_float_boolean_char-float"); + m("C_double_boolean_char-double"); + + m("C_char_boolean_byte-char"); + m("C_short_boolean_byte-short"); + m("C_int_boolean_byte-int"); + m("C_long_boolean_byte-long"); + m("C_float_boolean_byte-float"); + m("C_double_boolean_byte-double"); + + +// -------------------------------------------------- + m("C_boolean_double-boolean"); + m("C_byte_double-byte"); + m("C_char_double-char"); + m("C_short_double-short"); + m("C_int_double-int"); + m("C_long_double-long"); + m("C_float_double-float"); + + + m("C_boolean_float-boolean"); + m("C_byte_float-byte"); + m("C_char_float-char"); + m("C_short_float-short"); + m("C_int_float-int"); + m("C_long_float-long"); + m("C_double_float-double"); + + + m("C_boolean_long-boolean"); + m("C_byte_long-byte"); + m("C_char_long-char"); + m("C_short_long-short"); + m("C_int_long-int"); + m("C_float_long-float"); + m("C_double_long-double"); + + + m("C_boolean_int-boolean"); + m("C_byte_int-byte"); + m("C_char_int-char"); + m("C_short_int-short"); + m("C_long_int-long"); + m("C_float_int-float"); + m("C_double_int-double"); + + + m("C_boolean_short-boolean"); + m("C_byte_short-byte"); + m("C_char_short-char"); + m("C_int_short-int"); + m("C_long_short-long"); + m("C_float_short-float"); + m("C_double_short-double"); + + + m("C_boolean_char-boolean"); + m("C_byte_char-byte"); + m("C_short_char-short"); + m("C_int_char-int"); + m("C_long_char-long"); + m("C_float_char-float"); + m("C_double_char-double"); + + + m("C_boolean_byte-boolean"); + m("C_char_byte-char"); + m("C_short_byte-short"); + m("C_int_byte-int"); + m("C_long_byte-long"); + m("C_float_byte-float"); + m("C_double_byte-double"); + + + m("C_byte_boolean-byte"); + m("C_char_boolean-char"); + m("C_short_boolean-short"); + m("C_int_boolean-int"); + m("C_long_boolean-long"); + m("C_float_boolean-float"); + m("C_double_boolean-double"); + } +} + +// start-changed +class C_boolean { public void f(boolean[] xs) { } } +class C_byte { public void f(byte[] xs) { } } +class C_char { public void f(char[] xs) { } } +class C_short { public void f(short[] xs) { } } +class C_int { public void f(int[] xs) { } } +class C_long { public void f(long[] xs) { } } +class C_float { public void f(float[] xs) { } } +class C_double { public void f(double[] xs) { } } +// end-changed + +// start-new-block +class CC_boolean { public void f(boolean[] xs) { A.a("C_boolean-boolean"); } } +class CC_byte { public void f(byte[] xs) { A.a("C_byte-byte"); } } +class CC_char { public void f(char[] xs) { A.a("C_char-char"); } } +class CC_short { public void f(short[] xs) { A.a("C_short-short"); } } +class CC_int { public void f(int[] xs) { A.a("C_int-int"); } } +class CC_long { public void f(long[] xs) { A.a("C_long-long"); } } +class CC_float { public void f(float[] xs) { A.a("C_float-float"); } } +class CC_double { public void f(double[] xs) { A.a("C_double-double"); } } +// end-new-block + +class A { public static void a(String msg) { org.aspectj.testing.Tester.event(msg); } } + +class C_byte_double_boolean extends C_double_boolean { public void f(byte[] xs) { A.a("C_byte_double_boolean-byte"); } } +class C_char_double_boolean extends C_double_boolean { public void f(char[] xs) { A.a("C_char_double_boolean-char"); } } +class C_short_double_boolean extends C_double_boolean { public void f(short[] xs) { A.a("C_short_double_boolean-short"); } } +class C_int_double_boolean extends C_double_boolean { public void f(int[] xs) { A.a("C_int_double_boolean-int"); } } +class C_long_double_boolean extends C_double_boolean { public void f(long[] xs) { A.a("C_long_double_boolean-long"); } } +class C_float_double_boolean extends C_double_boolean { public void f(float[] xs) { A.a("C_float_double_boolean-float"); } } + +class C_boolean_double_byte extends C_double_byte { public void f(boolean[] xs) { A.a("C_boolean_double_byte-boolean"); } } +class C_char_double_byte extends C_double_byte { public void f(char[] xs) { A.a("C_char_double_byte-char"); } } +class C_short_double_byte extends C_double_byte { public void f(short[] xs) { A.a("C_short_double_byte-short"); } } +class C_int_double_byte extends C_double_byte { public void f(int[] xs) { A.a("C_int_double_byte-int"); } } +class C_long_double_byte extends C_double_byte { public void f(long[] xs) { A.a("C_long_double_byte-long"); } } +class C_float_double_byte extends C_double_byte { public void f(float[] xs) { A.a("C_float_double_byte-float"); } } + +class C_boolean_double_char extends C_double_char { public void f(boolean[] xs) { A.a("C_boolean_double_char-boolean"); } } +class C_byte_double_char extends C_double_char { public void f(byte[] xs) { A.a("C_byte_double_char-byte"); } } +class C_short_double_char extends C_double_char { public void f(short[] xs) { A.a("C_short_double_char-short"); } } +class C_int_double_char extends C_double_char { public void f(int[] xs) { A.a("C_int_double_char-int"); } } +class C_long_double_char extends C_double_char { public void f(long[] xs) { A.a("C_long_double_char-long"); } } +class C_float_double_char extends C_double_char { public void f(float[] xs) { A.a("C_float_double_char-float"); } } + +class C_boolean_double_short extends C_double_short { public void f(boolean[] xs) { A.a("C_boolean_double_short-boolean"); } } +class C_byte_double_short extends C_double_short { public void f(byte[] xs) { A.a("C_byte_double_short-byte"); } } +class C_char_double_short extends C_double_short { public void f(char[] xs) { A.a("C_char_double_short-char"); } } +class C_int_double_short extends C_double_short { public void f(int[] xs) { A.a("C_int_double_short-int"); } } +class C_long_double_short extends C_double_short { public void f(long[] xs) { A.a("C_long_double_short-long"); } } +class C_float_double_short extends C_double_short { public void f(float[] xs) { A.a("C_float_double_short-float"); } } + +class C_boolean_double_int extends C_double_int { public void f(boolean[] xs) { A.a("C_boolean_double_int-boolean"); } } +class C_byte_double_int extends C_double_int { public void f(byte[] xs) { A.a("C_byte_double_int-byte"); } } +class C_char_double_int extends C_double_int { public void f(char[] xs) { A.a("C_char_double_int-char"); } } +class C_short_double_int extends C_double_int { public void f(short[] xs) { A.a("C_short_double_int-short"); } } +class C_long_double_int extends C_double_int { public void f(long[] xs) { A.a("C_long_double_int-long"); } } +class C_float_double_int extends C_double_int { public void f(float[] xs) { A.a("C_float_double_int-float"); } } + +class C_boolean_double_long extends C_double_long { public void f(boolean[] xs) { A.a("C_boolean_double_long-boolean"); } } +class C_byte_double_long extends C_double_long { public void f(byte[] xs) { A.a("C_byte_double_long-byte"); } } +class C_char_double_long extends C_double_long { public void f(char[] xs) { A.a("C_char_double_long-char"); } } +class C_short_double_long extends C_double_long { public void f(short[] xs) { A.a("C_short_double_long-short"); } } +class C_int_double_long extends C_double_long { public void f(int[] xs) { A.a("C_int_double_long-int"); } } +class C_float_double_long extends C_double_long { public void f(float[] xs) { A.a("C_float_double_long-float"); } } + +class C_boolean_double_float extends C_double_float { public void f(boolean[] xs) { A.a("C_boolean_double_float-boolean"); } } +class C_byte_double_float extends C_double_float { public void f(byte[] xs) { A.a("C_byte_double_float-byte"); } } +class C_char_double_float extends C_double_float { public void f(char[] xs) { A.a("C_char_double_float-char"); } } +class C_short_double_float extends C_double_float { public void f(short[] xs) { A.a("C_short_double_float-short"); } } +class C_int_double_float extends C_double_float { public void f(int[] xs) { A.a("C_int_double_float-int"); } } +class C_long_double_float extends C_double_float { public void f(long[] xs) { A.a("C_long_double_float-long"); } } + +// ------------------------------------------------------------ +class C_byte_float_boolean extends C_float_boolean { public void f(byte[] xs) { A.a("C_byte_float_boolean-byte"); } } +class C_char_float_boolean extends C_float_boolean { public void f(char[] xs) { A.a("C_char_float_boolean-char"); } } +class C_short_float_boolean extends C_float_boolean { public void f(short[] xs) { A.a("C_short_float_boolean-short"); } } +class C_int_float_boolean extends C_float_boolean { public void f(int[] xs) { A.a("C_int_float_boolean-int"); } } +class C_long_float_boolean extends C_float_boolean { public void f(long[] xs) { A.a("C_long_float_boolean-long"); } } +class C_double_float_boolean extends C_float_boolean { public void f(double[] xs) { A.a("C_double_float_boolean-double"); } } + +class C_boolean_float_byte extends C_float_byte { public void f(boolean[] xs) { A.a("C_boolean_float_byte-boolean"); } } +class C_char_float_byte extends C_float_byte { public void f(char[] xs) { A.a("C_char_float_byte-char"); } } +class C_short_float_byte extends C_float_byte { public void f(short[] xs) { A.a("C_short_float_byte-short"); } } +class C_int_float_byte extends C_float_byte { public void f(int[] xs) { A.a("C_int_float_byte-int"); } } +class C_long_float_byte extends C_float_byte { public void f(long[] xs) { A.a("C_long_float_byte-long"); } } +class C_double_float_byte extends C_float_byte { public void f(double[] xs) { A.a("C_double_float_byte-double"); } } + +class C_boolean_float_char extends C_float_char { public void f(boolean[] xs) { A.a("C_boolean_float_char-boolean"); } } +class C_byte_float_char extends C_float_char { public void f(byte[] xs) { A.a("C_byte_float_char-byte"); } } +class C_short_float_char extends C_float_char { public void f(short[] xs) { A.a("C_short_float_char-short"); } } +class C_int_float_char extends C_float_char { public void f(int[] xs) { A.a("C_int_float_char-int"); } } +class C_long_float_char extends C_float_char { public void f(long[] xs) { A.a("C_long_float_char-long"); } } +class C_double_float_char extends C_float_char { public void f(double[] xs) { A.a("C_double_float_char-double"); } } + +class C_boolean_float_short extends C_float_short { public void f(boolean[] xs) { A.a("C_boolean_float_short-boolean"); } } +class C_byte_float_short extends C_float_short { public void f(byte[] xs) { A.a("C_byte_float_short-byte"); } } +class C_char_float_short extends C_float_short { public void f(char[] xs) { A.a("C_char_float_short-char"); } } +class C_int_float_short extends C_float_short { public void f(int[] xs) { A.a("C_int_float_short-int"); } } +class C_long_float_short extends C_float_short { public void f(long[] xs) { A.a("C_long_float_short-long"); } } +class C_double_float_short extends C_float_short { public void f(double[] xs) { A.a("C_double_float_short-double"); } } + +class C_boolean_float_int extends C_float_int { public void f(boolean[] xs) { A.a("C_boolean_float_int-boolean"); } } +class C_byte_float_int extends C_float_int { public void f(byte[] xs) { A.a("C_byte_float_int-byte"); } } +class C_char_float_int extends C_float_int { public void f(char[] xs) { A.a("C_char_float_int-char"); } } +class C_short_float_int extends C_float_int { public void f(short[] xs) { A.a("C_short_float_int-short"); } } +class C_long_float_int extends C_float_int { public void f(long[] xs) { A.a("C_long_float_int-long"); } } +class C_double_float_int extends C_float_int { public void f(double[] xs) { A.a("C_double_float_int-double"); } } + +class C_boolean_float_long extends C_float_long { public void f(boolean[] xs) { A.a("C_boolean_float_long-boolean"); } } +class C_byte_float_long extends C_float_long { public void f(byte[] xs) { A.a("C_byte_float_long-byte"); } } +class C_char_float_long extends C_float_long { public void f(char[] xs) { A.a("C_char_float_long-char"); } } +class C_short_float_long extends C_float_long { public void f(short[] xs) { A.a("C_short_float_long-short"); } } +class C_long_float_long extends C_float_long { public void f(long[] xs) { A.a("C_long_float_long-long"); } } +class C_double_float_long extends C_float_long { public void f(double[] xs) { A.a("C_double_float_long-double"); } } + +class C_boolean_float_double extends C_float_double { public void f(boolean[] xs) { A.a("C_boolean_float_double-boolean"); } } +class C_byte_float_double extends C_float_double { public void f(byte[] xs) { A.a("C_byte_float_double-byte"); } } +class C_char_float_double extends C_float_double { public void f(char[] xs) { A.a("C_char_float_double-char"); } } +class C_short_float_double extends C_float_double { public void f(short[] xs) { A.a("C_short_float_double-short"); } } +class C_int_float_double extends C_float_double { public void f(int[] xs) { A.a("C_int_float_double-int"); } } +class C_long_float_double extends C_float_double { public void f(long[] xs) { A.a("C_long_float_double-long"); } } + +// ------------------------------------------------------------ +class C_byte_int_boolean extends C_int_boolean { public void f(byte[] xs) { A.a("C_byte_int_boolean-byte"); } } +class C_char_int_boolean extends C_int_boolean { public void f(char[] xs) { A.a("C_char_int_boolean-char"); } } +class C_short_int_boolean extends C_int_boolean { public void f(short[] xs) { A.a("C_short_int_boolean-short"); } } +class C_long_int_boolean extends C_int_boolean { public void f(long[] xs) { A.a("C_long_int_boolean-long"); } } +class C_float_int_boolean extends C_int_boolean { public void f(float[] xs) { A.a("C_float_int_boolean-float"); } } +class C_double_int_boolean extends C_int_boolean { public void f(double[] xs) { A.a("C_double_int_boolean-double"); } } + +class C_boolean_int_byte extends C_int_byte { public void f(boolean[] xs) { A.a("C_boolean_int_byte-boolean"); } } +class C_char_int_byte extends C_int_byte { public void f(char[] xs) { A.a("C_char_int_byte-char"); } } +class C_short_int_byte extends C_int_byte { public void f(short[] xs) { A.a("C_short_int_byte-short"); } } +class C_long_int_byte extends C_int_byte { public void f(long[] xs) { A.a("C_long_int_byte-long"); } } +class C_float_int_byte extends C_int_byte { public void f(float[] xs) { A.a("C_float_int_byte-float"); } } +class C_double_int_byte extends C_int_byte { public void f(double[] xs) { A.a("C_double_int_byte-double"); } } + +class C_boolean_int_char extends C_int_char { public void f(boolean[] xs) { A.a("C_boolean_int_char-boolean"); } } +class C_byte_int_char extends C_int_char { public void f(byte[] xs) { A.a("C_byte_int_char-byte"); } } +class C_short_int_char extends C_int_char { public void f(short[] xs) { A.a("C_short_int_char-short"); } } +class C_long_int_char extends C_int_char { public void f(long[] xs) { A.a("C_long_int_char-long"); } } +class C_float_int_char extends C_int_char { public void f(float[] xs) { A.a("C_float_int_char-float"); } } +class C_double_int_char extends C_int_char { public void f(double[] xs) { A.a("C_double_int_char-double"); } } + +class C_boolean_int_short extends C_int_short { public void f(boolean[] xs) { A.a("C_boolean_int_short-boolean"); } } +class C_byte_int_short extends C_int_short { public void f(byte[] xs) { A.a("C_byte_int_short-byte"); } } +class C_char_int_short extends C_int_short { public void f(char[] xs) { A.a("C_char_int_short-char"); } } +class C_long_int_short extends C_int_short { public void f(long[] xs) { A.a("C_long_int_short-long"); } } +class C_float_int_short extends C_int_short { public void f(float[] xs) { A.a("C_float_int_short-float"); } } +class C_double_int_short extends C_int_short { public void f(double[] xs) { A.a("C_double_int_short-double"); } } + +class C_boolean_int_long extends C_int_long { public void f(boolean[] xs) { A.a("C_boolean_int_long-boolean"); } } +class C_byte_int_long extends C_int_long { public void f(byte[] xs) { A.a("C_byte_int_long-byte"); } } +class C_char_int_long extends C_int_long { public void f(char[] xs) { A.a("C_char_int_long-char"); } } +class C_short_int_long extends C_int_long { public void f(short[] xs) { A.a("C_short_int_long-short"); } } +class C_float_int_long extends C_int_long { public void f(float[] xs) { A.a("C_float_int_long-float"); } } +class C_double_int_long extends C_int_long { public void f(double[] xs) { A.a("C_double_int_long-double"); } } + +class C_boolean_int_float extends C_int_float { public void f(boolean[] xs) { A.a("C_boolean_int_float-boolean"); } } +class C_byte_int_float extends C_int_float { public void f(byte[] xs) { A.a("C_byte_int_float-byte"); } } +class C_char_int_float extends C_int_float { public void f(char[] xs) { A.a("C_char_int_float-char"); } } +class C_short_int_float extends C_int_float { public void f(short[] xs) { A.a("C_short_int_float-short"); } } +class C_long_int_float extends C_int_float { public void f(long[] xs) { A.a("C_long_int_float-long"); } } +class C_double_int_float extends C_int_float { public void f(double[] xs) { A.a("C_double_int_float-double"); } } + +class C_boolean_int_double extends C_int_double { public void f(boolean[] xs) { A.a("C_boolean_int_double-boolean"); } } +class C_byte_int_double extends C_int_double { public void f(byte[] xs) { A.a("C_byte_int_double-byte"); } } +class C_char_int_double extends C_int_double { public void f(char[] xs) { A.a("C_char_int_double-char"); } } +class C_short_int_double extends C_int_double { public void f(short[] xs) { A.a("C_short_int_double-short"); } } +class C_long_int_double extends C_int_double { public void f(long[] xs) { A.a("C_long_int_double-long"); } } +class C_float_int_double extends C_int_double { public void f(float[] xs) { A.a("C_float_int_double-float"); } } + +// ------------------------------------------------------------ +class C_byte_short_boolean extends C_short_boolean { public void f(byte[] xs) { A.a("C_byte_short_boolean-byte"); } } +class C_char_short_boolean extends C_short_boolean { public void f(char[] xs) { A.a("C_char_short_boolean-char"); } } +class C_int_short_boolean extends C_short_boolean { public void f(int[] xs) { A.a("C_int_short_boolean-int"); } } +class C_long_short_boolean extends C_short_boolean { public void f(long[] xs) { A.a("C_long_short_boolean-long"); } } +class C_float_short_boolean extends C_short_boolean { public void f(float[] xs) { A.a("C_float_short_boolean-float"); } } +class C_double_short_boolean extends C_short_boolean { public void f(double[] xs) { A.a("C_double_short_boolean-double"); } } + +class C_boolean_short_byte extends C_short_byte { public void f(boolean[] xs) { A.a("C_boolean_short_byte-boolean"); } } +class C_char_short_byte extends C_short_byte { public void f(char[] xs) { A.a("C_char_short_byte-char"); } } +class C_int_short_byte extends C_short_byte { public void f(int[] xs) { A.a("C_int_short_byte-int"); } } +class C_long_short_byte extends C_short_byte { public void f(long[] xs) { A.a("C_long_short_byte-long"); } } +class C_float_short_byte extends C_short_byte { public void f(float[] xs) { A.a("C_float_short_byte-float"); } } +class C_double_short_byte extends C_short_byte { public void f(double[] xs) { A.a("C_double_short_byte-double"); } } + +class C_boolean_short_char extends C_short_char { public void f(boolean[] xs) { A.a("C_boolean_short_char-boolean"); } } +class C_byte_short_char extends C_short_char { public void f(byte[] xs) { A.a("C_byte_short_char-byte"); } } +class C_int_short_char extends C_short_char { public void f(int[] xs) { A.a("C_int_short_char-int"); } } +class C_long_short_char extends C_short_char { public void f(long[] xs) { A.a("C_long_short_char-long"); } } +class C_float_short_char extends C_short_char { public void f(float[] xs) { A.a("C_float_short_char-float"); } } +class C_double_short_char extends C_short_char { public void f(double[] xs) { A.a("C_double_short_char-double"); } } + +class C_boolean_short_int extends C_short_int { public void f(boolean[] xs) { A.a("C_boolean_short_int-boolean"); } } +class C_byte_short_int extends C_short_int { public void f(byte[] xs) { A.a("C_byte_short_int-byte"); } } +class C_char_short_int extends C_short_int { public void f(char[] xs) { A.a("C_char_short_int-char"); } } +class C_long_short_int extends C_short_int { public void f(long[] xs) { A.a("C_long_short_int-long"); } } +class C_float_short_int extends C_short_int { public void f(float[] xs) { A.a("C_float_short_int-float"); } } +class C_double_short_int extends C_short_int { public void f(double[] xs) { A.a("C_double_short_int-double"); } } + +class C_boolean_short_long extends C_short_long { public void f(boolean[] xs) { A.a("C_boolean_short_long-boolean"); } } +class C_byte_short_long extends C_short_long { public void f(byte[] xs) { A.a("C_byte_short_long-byte"); } } +class C_char_short_long extends C_short_long { public void f(char[] xs) { A.a("C_char_short_long-char"); } } +class C_int_short_long extends C_short_long { public void f(int[] xs) { A.a("C_int_short_long-int"); } } +class C_float_short_long extends C_short_long { public void f(float[] xs) { A.a("C_float_short_long-float"); } } +class C_double_short_long extends C_short_long { public void f(double[] xs) { A.a("C_double_short_long-double"); } } + +class C_boolean_short_float extends C_short_float { public void f(boolean[] xs) { A.a("C_boolean_short_float-boolean"); } } +class C_byte_short_float extends C_short_float { public void f(byte[] xs) { A.a("C_byte_short_float-byte"); } } +class C_char_short_float extends C_short_float { public void f(char[] xs) { A.a("C_char_short_float-char"); } } +class C_int_short_float extends C_short_float { public void f(int[] xs) { A.a("C_int_short_float-int"); } } +class C_long_short_float extends C_short_float { public void f(long[] xs) { A.a("C_long_short_float-long"); } } +class C_double_short_float extends C_short_float { public void f(double[] xs) { A.a("C_double_short_float-double"); } } + +class C_boolean_short_double extends C_short_double { public void f(boolean[] xs) { A.a("C_boolean_short_double-boolean"); } } +class C_byte_short_double extends C_short_double { public void f(byte[] xs) { A.a("C_byte_short_double-byte"); } } +class C_char_short_double extends C_short_double { public void f(char[] xs) { A.a("C_char_short_double-char"); } } +class C_int_short_double extends C_short_double { public void f(int[] xs) { A.a("C_int_short_double-int"); } } +class C_long_short_double extends C_short_double { public void f(long[] xs) { A.a("C_long_short_double-long"); } } +class C_float_short_double extends C_short_double { public void f(float[] xs) { A.a("C_float_short_double-float"); } } + +// ------------------------------------------------------------ +class C_byte_char_boolean extends C_char_boolean { public void f(byte[] xs) { A.a("C_byte_char_boolean-byte"); } } +class C_short_char_boolean extends C_char_boolean { public void f(short[] xs) { A.a("C_short_char_boolean-short"); } } +class C_int_char_boolean extends C_char_boolean { public void f(int[] xs) { A.a("C_int_char_boolean-int"); } } +class C_long_char_boolean extends C_char_boolean { public void f(long[] xs) { A.a("C_long_char_boolean-long"); } } +class C_float_char_boolean extends C_char_boolean { public void f(float[] xs) { A.a("C_float_char_boolean-float"); } } +class C_double_char_boolean extends C_char_boolean { public void f(double[] xs) { A.a("C_double_char_boolean-double"); } } + +class C_boolean_char_byte extends C_char_byte { public void f(boolean[] xs) { A.a("C_boolean_char_byte-boolean"); } } +class C_short_char_byte extends C_char_byte { public void f(short[] xs) { A.a("C_short_char_byte-short"); } } +class C_int_char_byte extends C_char_byte { public void f(int[] xs) { A.a("C_int_char_byte-int"); } } +class C_long_char_byte extends C_char_byte { public void f(long[] xs) { A.a("C_long_char_byte-long"); } } +class C_float_char_byte extends C_char_byte { public void f(float[] xs) { A.a("C_float_char_byte-float"); } } +class C_double_char_byte extends C_char_byte { public void f(double[] xs) { A.a("C_double_char_byte-double"); } } + +class C_boolean_char_short extends C_char_short { public void f(boolean[] xs) { A.a("C_boolean_char_short-boolean"); } } +class C_byte_char_short extends C_char_short { public void f(byte[] xs) { A.a("C_byte_char_short-byte"); } } +class C_int_char_short extends C_char_short { public void f(int[] xs) { A.a("C_int_char_short-int"); } } +class C_long_char_short extends C_char_short { public void f(long[] xs) { A.a("C_long_char_short-long"); } } +class C_float_char_short extends C_char_short { public void f(float[] xs) { A.a("C_float_char_short-float"); } } +class C_double_char_short extends C_char_short { public void f(double[] xs) { A.a("C_double_char_short-double"); } } + +class C_boolean_char_int extends C_char_int { public void f(boolean[] xs) { A.a("C_boolean_char_int-boolean"); } } +class C_byte_char_int extends C_char_int { public void f(byte[] xs) { A.a("C_byte_char_int-byte"); } } +class C_short_char_int extends C_char_int { public void f(short[] xs) { A.a("C_short_char_int-short"); } } +class C_long_char_int extends C_char_int { public void f(long[] xs) { A.a("C_long_char_int-long"); } } +class C_float_char_int extends C_char_int { public void f(float[] xs) { A.a("C_float_char_int-float"); } } +class C_double_char_int extends C_char_int { public void f(double[] xs) { A.a("C_double_char_int-double"); } } + +class C_boolean_char_long extends C_char_long { public void f(boolean[] xs) { A.a("C_boolean_char_long-boolean"); } } +class C_byte_char_long extends C_char_long { public void f(byte[] xs) { A.a("C_byte_char_long-byte"); } } +class C_short_char_long extends C_char_long { public void f(short[] xs) { A.a("C_short_char_long-short"); } } +class C_int_char_long extends C_char_long { public void f(int[] xs) { A.a("C_int_char_long-int"); } } +class C_float_char_long extends C_char_long { public void f(float[] xs) { A.a("C_float_char_long-float"); } } +class C_double_char_long extends C_char_long { public void f(double[] xs) { A.a("C_double_char_long-double"); } } + +class C_boolean_char_float extends C_char_float { public void f(boolean[] xs) { A.a("C_boolean_char_float-boolean"); } } +class C_byte_char_float extends C_char_float { public void f(byte[] xs) { A.a("C_byte_char_float-byte"); } } +class C_short_char_float extends C_char_float { public void f(short[] xs) { A.a("C_short_char_float-short"); } } +class C_int_char_float extends C_char_float { public void f(int[] xs) { A.a("C_int_char_float-int"); } } +class C_long_char_float extends C_char_float { public void f(long[] xs) { A.a("C_long_char_float-long"); } } +class C_double_char_float extends C_char_float { public void f(double[] xs) { A.a("C_double_char_float-double"); } } + +class C_boolean_char_double extends C_char_double { public void f(boolean[] xs) { A.a("C_boolean_char_double-boolean"); } } +class C_byte_char_double extends C_char_double { public void f(byte[] xs) { A.a("C_byte_char_double-byte"); } } +class C_short_char_double extends C_char_double { public void f(short[] xs) { A.a("C_short_char_double-short"); } } +class C_int_char_double extends C_char_double { public void f(int[] xs) { A.a("C_int_char_double-int"); } } +class C_long_char_double extends C_char_double { public void f(long[] xs) { A.a("C_long_char_double-long"); } } +class C_float_char_double extends C_char_double { public void f(float[] xs) { A.a("C_float_char_double-float"); } } + + +// ------------------------------------------------------------ +class C_char_byte_boolean extends C_byte_boolean { public void f(char[] xs) { A.a("C_char_byte_boolean-char"); } } +class C_short_byte_boolean extends C_byte_boolean { public void f(short[] xs) { A.a("C_short_byte_boolean-short"); } } +class C_int_byte_boolean extends C_byte_boolean { public void f(int[] xs) { A.a("C_int_byte_boolean-int"); } } +class C_long_byte_boolean extends C_byte_boolean { public void f(long[] xs) { A.a("C_long_byte_boolean-long"); } } +class C_float_byte_boolean extends C_byte_boolean { public void f(float[] xs) { A.a("C_float_byte_boolean-float"); } } +class C_double_byte_boolean extends C_byte_boolean { public void f(double[] xs) { A.a("C_double_byte_boolean-double"); } } + +class C_boolean_byte_char extends C_byte_char { public void f(boolean[] xs) { A.a("C_boolean_byte_char-boolean"); } } +class C_short_byte_char extends C_byte_char { public void f(short[] xs) { A.a("C_short_byte_char-short"); } } +class C_int_byte_char extends C_byte_char { public void f(int[] xs) { A.a("C_int_byte_char-int"); } } +class C_long_byte_char extends C_byte_char { public void f(long[] xs) { A.a("C_long_byte_char-long"); } } +class C_float_byte_char extends C_byte_char { public void f(float[] xs) { A.a("C_float_byte_char-float"); } } +class C_double_byte_char extends C_byte_char { public void f(double[] xs) { A.a("C_double_byte_char-double"); } } + +class C_boolean_byte_short extends C_byte_short { public void f(boolean[] xs) { A.a("C_boolean_byte_short-boolean"); } } +class C_char_byte_short extends C_byte_short { public void f(char[] xs) { A.a("C_char_byte_short-char"); } } +class C_int_byte_short extends C_byte_short { public void f(int[] xs) { A.a("C_int_byte_short-int"); } } +class C_long_byte_short extends C_byte_short { public void f(long[] xs) { A.a("C_long_byte_short-long"); } } +class C_float_byte_short extends C_byte_short { public void f(float[] xs) { A.a("C_float_byte_short-float"); } } +class C_double_byte_short extends C_byte_short { public void f(double[] xs) { A.a("C_double_byte_short-double"); } } + +class C_boolean_byte_int extends C_byte_int { public void f(boolean[] xs) { A.a("C_boolean_byte_int-boolean"); } } +class C_char_byte_int extends C_byte_int { public void f(char[] xs) { A.a("C_char_byte_int-char"); } } +class C_short_byte_int extends C_byte_int { public void f(short[] xs) { A.a("C_short_byte_int-short"); } } +class C_long_byte_int extends C_byte_int { public void f(long[] xs) { A.a("C_long_byte_int-long"); } } +class C_float_byte_int extends C_byte_int { public void f(float[] xs) { A.a("C_float_byte_int-float"); } } +class C_double_byte_int extends C_byte_int { public void f(double[] xs) { A.a("C_double_byte_int-double"); } } + +class C_boolean_byte_long extends C_byte_long { public void f(boolean[] xs) { A.a("C_boolean_byte_long-boolean"); } } +class C_char_byte_long extends C_byte_long { public void f(char[] xs) { A.a("C_char_byte_long-char"); } } +class C_short_byte_long extends C_byte_long { public void f(short[] xs) { A.a("C_short_byte_long-short"); } } +class C_int_byte_long extends C_byte_long { public void f(int[] xs) { A.a("C_int_byte_long-int"); } } +class C_float_byte_long extends C_byte_long { public void f(float[] xs) { A.a("C_float_byte_long-float"); } } +class C_double_byte_long extends C_byte_long { public void f(double[] xs) { A.a("C_double_byte_long-double"); } } + +class C_boolean_byte_float extends C_byte_float { public void f(boolean[] xs) { A.a("C_boolean_byte_float-boolean"); } } +class C_char_byte_float extends C_byte_float { public void f(char[] xs) { A.a("C_char_byte_float-char"); } } +class C_short_byte_float extends C_byte_float { public void f(short[] xs) { A.a("C_short_byte_float-short"); } } +class C_int_byte_float extends C_byte_float { public void f(int[] xs) { A.a("C_int_byte_float-int"); } } +class C_long_byte_float extends C_byte_float { public void f(long[] xs) { A.a("C_long_byte_float-long"); } } +class C_double_byte_float extends C_byte_float { public void f(double[] xs) { A.a("C_double_byte_float-double"); } } + +class C_boolean_byte_double extends C_byte_double { public void f(boolean[] xs) { A.a("C_boolean_byte_double-boolean"); } } +class C_char_byte_double extends C_byte_double { public void f(char[] xs) { A.a("C_char_byte_double-char"); } } +class C_short_byte_double extends C_byte_double { public void f(short[] xs) { A.a("C_short_byte_double-short"); } } +class C_int_byte_double extends C_byte_double { public void f(int[] xs) { A.a("C_int_byte_double-int"); } } +class C_long_byte_double extends C_byte_double { public void f(long[] xs) { A.a("C_long_byte_double-long"); } } +class C_float_byte_double extends C_byte_double { public void f(float[] xs) { A.a("C_float_byte_double-float"); } } + +// ------------------------------------------------------------ +class C_byte_boolean_double extends C_boolean_double { public void f(byte[] xs) { A.a("C_byte_boolean_double-byte"); } } +class C_char_boolean_double extends C_boolean_double { public void f(char[] xs) { A.a("C_char_boolean_double-char"); } } +class C_short_boolean_double extends C_boolean_double { public void f(short[] xs) { A.a("C_short_boolean_double-short"); } } +class C_int_boolean_double extends C_boolean_double { public void f(int[] xs) { A.a("C_int_boolean_double-int"); } } +class C_long_boolean_double extends C_boolean_double { public void f(long[] xs) { A.a("C_long_boolean_double-long"); } } +class C_float_boolean_double extends C_boolean_double { public void f(float[] xs) { A.a("C_float_boolean_double-float"); } } + +class C_byte_boolean_float extends C_boolean_float { public void f(byte[] xs) { A.a("C_byte_boolean_float-byte"); } } +class C_char_boolean_float extends C_boolean_float { public void f(char[] xs) { A.a("C_char_boolean_float-char"); } } +class C_short_boolean_float extends C_boolean_float { public void f(short[] xs) { A.a("C_short_boolean_float-short"); } } +class C_int_boolean_float extends C_boolean_float { public void f(int[] xs) { A.a("C_int_boolean_float-int"); } } +class C_long_boolean_float extends C_boolean_float { public void f(long[] xs) { A.a("C_long_boolean_float-long"); } } +class C_double_boolean_float extends C_boolean_float { public void f(double[] xs) { A.a("C_double_boolean_float-double"); } } + +class C_byte_boolean_long extends C_boolean_long { public void f(byte[] xs) { A.a("C_byte_boolean_long-byte"); } } +class C_char_boolean_long extends C_boolean_long { public void f(char[] xs) { A.a("C_char_boolean_long-char"); } } +class C_short_boolean_long extends C_boolean_long { public void f(short[] xs) { A.a("C_short_boolean_long-short"); } } +class C_int_boolean_long extends C_boolean_long { public void f(int[] xs) { A.a("C_int_boolean_long-int"); } } +class C_float_boolean_long extends C_boolean_long { public void f(float[] xs) { A.a("C_float_boolean_long-float"); } } +class C_double_boolean_long extends C_boolean_long { public void f(double[] xs) { A.a("C_double_boolean_long-double"); } } + +class C_byte_boolean_int extends C_boolean_int { public void f(byte[] xs) { A.a("C_byte_boolean_int-byte"); } } +class C_char_boolean_int extends C_boolean_int { public void f(char[] xs) { A.a("C_char_boolean_int-char"); } } +class C_short_boolean_int extends C_boolean_int { public void f(short[] xs) { A.a("C_short_boolean_int-short"); } } +class C_long_boolean_int extends C_boolean_int { public void f(long[] xs) { A.a("C_long_boolean_int-long"); } } +class C_float_boolean_int extends C_boolean_int { public void f(float[] xs) { A.a("C_float_boolean_int-float"); } } +class C_double_boolean_int extends C_boolean_int { public void f(double[] xs) { A.a("C_double_boolean_int-double"); } } + +class C_byte_boolean_short extends C_boolean_short { public void f(byte[] xs) { A.a("C_byte_boolean_short-byte"); } } +class C_char_boolean_short extends C_boolean_short { public void f(char[] xs) { A.a("C_char_boolean_short-char"); } } +class C_int_boolean_short extends C_boolean_short { public void f(int[] xs) { A.a("C_int_boolean_short-int"); } } +class C_long_boolean_short extends C_boolean_short { public void f(long[] xs) { A.a("C_long_boolean_short-long"); } } +class C_float_boolean_short extends C_boolean_short { public void f(float[] xs) { A.a("C_float_boolean_short-float"); } } +class C_double_boolean_short extends C_boolean_short { public void f(double[] xs) { A.a("C_double_boolean_short-double"); } } + +class C_byte_boolean_char extends C_boolean_char { public void f(byte[] xs) { A.a("C_byte_boolean_char-byte"); } } +class C_short_boolean_char extends C_boolean_char { public void f(short[] xs) { A.a("C_short_boolean_char-short"); } } +class C_int_boolean_char extends C_boolean_char { public void f(int[] xs) { A.a("C_int_boolean_char-int"); } } +class C_long_boolean_char extends C_boolean_char { public void f(long[] xs) { A.a("C_long_boolean_char-long"); } } +class C_float_boolean_char extends C_boolean_char { public void f(float[] xs) { A.a("C_float_boolean_char-float"); } } +class C_double_boolean_char extends C_boolean_char { public void f(double[] xs) { A.a("C_double_boolean_char-double"); } } + +class C_char_boolean_byte extends C_boolean_byte { public void f(char[] xs) { A.a("C_char_boolean_byte-char"); } } +class C_short_boolean_byte extends C_boolean_byte { public void f(short[] xs) { A.a("C_short_boolean_byte-short"); } } +class C_int_boolean_byte extends C_boolean_byte { public void f(int[] xs) { A.a("C_int_boolean_byte-int"); } } +class C_long_boolean_byte extends C_boolean_byte { public void f(long[] xs) { A.a("C_long_boolean_byte-long"); } } +class C_float_boolean_byte extends C_boolean_byte { public void f(float[] xs) { A.a("C_float_boolean_byte-float"); } } +class C_double_boolean_byte extends C_boolean_byte { public void f(double[] xs) { A.a("C_double_boolean_byte-double"); } } + + +// -------------------------------------------------- +class C_boolean_double extends C_double { public void f(boolean[] xs) { A.a("C_boolean_double-boolean"); }} +class C_byte_double extends C_double { public void f(byte[] xs) { A.a("C_byte_double-byte"); } } +class C_char_double extends C_double { public void f(char[] xs) { A.a("C_char_double-char"); } } +class C_short_double extends C_double { public void f(short[] xs) { A.a("C_short_double-short"); } } +class C_int_double extends C_double { public void f(int[] xs) { A.a("C_int_double-int"); } } +class C_long_double extends C_double { public void f(long[] xs) { A.a("C_long_double-long"); } } +class C_float_double extends C_double { public void f(float[] xs) { A.a("C_float_double-float"); } } + + +class C_boolean_float extends C_float { public void f(boolean[] xs) { A.a("C_boolean_float-boolean"); } } +class C_byte_float extends C_float { public void f(byte[] xs) { A.a("C_byte_float-byte"); } } +class C_char_float extends C_float { public void f(char[] xs) { A.a("C_char_float-char"); } } +class C_short_float extends C_float { public void f(short[] xs) { A.a("C_short_float-short"); } } +class C_int_float extends C_float { public void f(int[] xs) { A.a("C_int_float-int"); } } +class C_long_float extends C_float { public void f(long[] xs) { A.a("C_long_float-long"); } } +class C_double_float extends C_float { public void f(double[] xs) { A.a("C_double_float-double"); } } + + +class C_boolean_long extends C_long { public void f(boolean[] xs) { A.a("C_boolean_long-boolean"); } } +class C_byte_long extends C_long { public void f(byte[] xs) { A.a("C_byte_long-byte"); } } +class C_char_long extends C_long { public void f(char[] xs) { A.a("C_char_long-char"); } } +class C_short_long extends C_long { public void f(short[] xs) { A.a("C_short_long-short"); } } +class C_int_long extends C_long { public void f(int[] xs) { A.a("C_int_long-int"); } } +class C_float_long extends C_long { public void f(float[] xs) { A.a("C_float_long-float"); } } +class C_double_long extends C_long { public void f(double[] xs) { A.a("C_double_long-double"); } } + + +class C_boolean_int extends C_int { public void f(boolean[] xs) { A.a("C_boolean_int-boolean"); } } +class C_byte_int extends C_int { public void f(byte[] xs) { A.a("C_byte_int-byte"); } } +class C_char_int extends C_int { public void f(char[] xs) { A.a("C_char_int-char"); } } +class C_short_int extends C_int { public void f(short[] xs) { A.a("C_short_int-short"); } } +class C_long_int extends C_int { public void f(long[] xs) { A.a("C_long_int-long"); } } +class C_float_int extends C_int { public void f(float[] xs) { A.a("C_float_int-float"); } } +class C_double_int extends C_int { public void f(double[] xs) { A.a("C_double_int-double"); } } + + +class C_boolean_short extends C_short { public void f(boolean[] xs) { A.a("C_boolean_short-boolean"); } } +class C_byte_short extends C_short { public void f(byte[] xs) { A.a("C_byte_short-byte"); } } +class C_char_short extends C_short { public void f(char[] xs) { A.a("C_char_short-char"); } } +class C_int_short extends C_short { public void f(int[] xs) { A.a("C_int_short-int"); } } +class C_long_short extends C_short { public void f(long[] xs) { A.a("C_long_short-long"); } } +class C_float_short extends C_short { public void f(float[] xs) { A.a("C_float_short-float"); } } +class C_double_short extends C_short { public void f(double[] xs) { A.a("C_double_short-double"); } } + + +class C_boolean_char extends C_char { public void f(boolean[] xs) { A.a("C_boolean_char-boolean"); } } +class C_byte_char extends C_char { public void f(byte[] xs) { A.a("C_byte_char-byte"); } } +class C_short_char extends C_char { public void f(short[] xs) { A.a("C_short_char-short"); } } +class C_int_char extends C_char { public void f(int[] xs) { A.a("C_int_char-int"); } } +class C_long_char extends C_char { public void f(long[] xs) { A.a("C_long_char-long"); } } +class C_float_char extends C_char { public void f(float[] xs) { A.a("C_float_char-float"); } } +class C_double_char extends C_char { public void f(double[] xs) { A.a("C_double_char-double"); } } + + +class C_boolean_byte extends C_byte { public void f(boolean[] xs) { A.a("C_boolean_byte-boolean"); } } +class C_char_byte extends C_byte { public void f(char[] xs) { A.a("C_char_byte-char"); } } +class C_short_byte extends C_byte { public void f(short[] xs) { A.a("C_short_byte-short"); } } +class C_int_byte extends C_byte { public void f(int[] xs) { A.a("C_int_byte-int"); } } +class C_long_byte extends C_byte { public void f(long[] xs) { A.a("C_long_byte-long"); } } +class C_float_byte extends C_byte { public void f(float[] xs) { A.a("C_float_byte-float"); } } +class C_double_byte extends C_byte { public void f(double[] xs) { A.a("C_double_byte-double"); } } + + +class C_byte_boolean extends C_boolean { public void f(byte[] xs) { A.a("C_byte_boolean-byte"); } } +class C_char_boolean extends C_boolean { public void f(char[] xs) { A.a("C_char_boolean-char"); } } +class C_short_boolean extends C_boolean { public void f(short[] xs) { A.a("C_short_boolean-short"); } } +class C_int_boolean extends C_boolean { public void f(int[] xs) { A.a("C_int_boolean-int"); } } +class C_long_boolean extends C_boolean { public void f(long[] xs) { A.a("C_long_boolean-long"); } } +class C_float_boolean extends C_boolean { public void f(float[] xs) { A.a("C_float_boolean-float"); } } +class C_double_boolean extends C_boolean { public void f(double[] xs) { A.a("C_double_boolean-double"); } } diff --git a/tests/pureJava/ReturnThis.java b/tests/pureJava/ReturnThis.java new file mode 100644 index 000000000..795fb0a99 --- /dev/null +++ b/tests/pureJava/ReturnThis.java @@ -0,0 +1,11 @@ +public class ReturnThis { + public static void main(String[] args) { + new C().foo(); + } +} + +class C { + public C foo() { + return (this); + } +} diff --git a/tests/pureJava/ReturnTypes.java b/tests/pureJava/ReturnTypes.java new file mode 100644 index 000000000..d7f24f8c7 --- /dev/null +++ b/tests/pureJava/ReturnTypes.java @@ -0,0 +1,11 @@ +import org.aspectj.testing.Tester; + +public class ReturnTypes { + public static void main(String[] args) { + Tester.check(convertDouble("2") == 0.0, "return types"); + } + + static double convertDouble(Object o) { + return 0; + } +} diff --git a/tests/pureJava/SimpleSpec.java b/tests/pureJava/SimpleSpec.java new file mode 100644 index 000000000..d345a1d4f --- /dev/null +++ b/tests/pureJava/SimpleSpec.java @@ -0,0 +1,9 @@ +public class SimpleSpec { + public void m() { + throw new RuntimeException(); + throw new Integer(1); + + for (;;) { System.out.println("hi"); } + for (;1;) { System.out.println("hi"); } + } +} diff --git a/tests/pureJava/StaticClassesInInterfaces.java b/tests/pureJava/StaticClassesInInterfaces.java new file mode 100644 index 000000000..0e19037db --- /dev/null +++ b/tests/pureJava/StaticClassesInInterfaces.java @@ -0,0 +1,13 @@ +import org.aspectj.testing.Tester; + +import anotherPackage.*; + +public class StaticClassesInInterfaces { + public static void main(String[] args) { + new StaticClassesInInterfaces().realMain(args); + } + public void realMain(String[] args) { + AnotherPackageInterface.Inner inner = null; + Tester.check(true, "compiled!"); + } +} diff --git a/tests/pureJava/StaticContexts.java b/tests/pureJava/StaticContexts.java new file mode 100644 index 000000000..18fba8a15 --- /dev/null +++ b/tests/pureJava/StaticContexts.java @@ -0,0 +1,43 @@ +public class StaticContexts { + Object m() { return null; } + + static void s(Object o) {} + class I extends C { + I() { + super(StaticContexts.this); + s(StaticContexts.this); + } + I(int x) { + super(this); + s(this); + } + I(float x) { + super(m()); + s(m()); + } + static void foo() { //ERR: inner class can't have static member + s(StaticContexts.this); + s(this); + s(m()); + } + } + + static class II extends C { + II() { + super(StaticContexts.this); + s(StaticContexts.this); + } + II(int x) { + super(this); + s(this); + } + II(float x) { + super(m()); + s(m()); + } + } +} + +class C { + C(Object o) {} +} diff --git a/tests/pureJava/StaticMembersImports_PR421.java b/tests/pureJava/StaticMembersImports_PR421.java new file mode 100644 index 000000000..a1e7724ee --- /dev/null +++ b/tests/pureJava/StaticMembersImports_PR421.java @@ -0,0 +1,538 @@ +import org.aspectj.testing.*; +import p1.*; +import p1.p2.*; + +public class StaticMembersImports_PR421 { + public static void main(String[] args) { + new StaticMembersImports_PR421().realMain(args); + } + public void realMain(String[] args) { + + // --- Statics + Tester.checkEqual(Statics.I, new Integer(1+0)); + Tester.checkEqual(Statics.b, (byte) 1+0 ); + Tester.checkEqual(Statics.s, (short) 1+0 ); + Tester.checkEqual(Statics.i, 1+0 ); + Tester.checkEqual(Statics.l, 1+0L); + Tester.checkEqual(Statics.f, (float) 1+0 ); + Tester.checkEqual(Statics.d, (double) 1+0 ); + Tester.checkEqual(Statics.c, '1'+0); + + // Statics.NestedStaticClass + Tester.checkEqual(Statics.NestedStaticClass.I, new Integer(2+0)); + Tester.checkEqual(Statics.NestedStaticClass.b, (byte) 2+0 ); + Tester.checkEqual(Statics.NestedStaticClass.s, (short) 2+0 ); + Tester.checkEqual(Statics.NestedStaticClass.i, 2+0 ); + Tester.checkEqual(Statics.NestedStaticClass.l, 2+0L); + Tester.checkEqual(Statics.NestedStaticClass.f, (float) 2+0 ); + Tester.checkEqual(Statics.NestedStaticClass.d, (double)(double) 2+0 ); + Tester.checkEqual(Statics.NestedStaticClass.c, '2'+0); + + Tester.checkEqual(Statics.NestedStaticClass.InnerStaticClass.I, new Integer(3+0)); + Tester.checkEqual(Statics.NestedStaticClass.InnerStaticClass.b, (byte) 3+0 ); + Tester.checkEqual(Statics.NestedStaticClass.InnerStaticClass.s, (short) 3+0 ); + Tester.checkEqual(Statics.NestedStaticClass.InnerStaticClass.i, 3+0 ); + Tester.checkEqual(Statics.NestedStaticClass.InnerStaticClass.l, 3+0L); + Tester.checkEqual(Statics.NestedStaticClass.InnerStaticClass.f, (float) 3+0 ); + Tester.checkEqual(Statics.NestedStaticClass.InnerStaticClass.d, (double) 3+0 ); + Tester.checkEqual(Statics.NestedStaticClass.InnerStaticClass.c, '3'+0); + + Tester.checkEqual(Statics.NestedStaticClass.InnerStaticInterface.I, new Integer(4+0)); + Tester.checkEqual(Statics.NestedStaticClass.InnerStaticInterface.b, (byte) 4+0 ); + Tester.checkEqual(Statics.NestedStaticClass.InnerStaticInterface.s, (short) 4+0 ); + Tester.checkEqual(Statics.NestedStaticClass.InnerStaticInterface.i, 4+0 ); + Tester.checkEqual(Statics.NestedStaticClass.InnerStaticInterface.l, 4+0L); + Tester.checkEqual(Statics.NestedStaticClass.InnerStaticInterface.f, (float) 4+0 ); + Tester.checkEqual(Statics.NestedStaticClass.InnerStaticInterface.d, (double) 4+0 ); + Tester.checkEqual(Statics.NestedStaticClass.InnerStaticInterface.c, '4'+0); + + Tester.checkEqual(Statics.NestedStaticClass.InnerInterface.I, new Integer(5+0)); + Tester.checkEqual(Statics.NestedStaticClass.InnerInterface.b, (byte) 5+0 ); + Tester.checkEqual(Statics.NestedStaticClass.InnerInterface.s, (short) 5+0 ); + Tester.checkEqual(Statics.NestedStaticClass.InnerInterface.i, 5+0 ); + Tester.checkEqual(Statics.NestedStaticClass.InnerInterface.l, 5+0L); + Tester.checkEqual(Statics.NestedStaticClass.InnerInterface.f, (float) 5+0 ); + Tester.checkEqual(Statics.NestedStaticClass.InnerInterface.d, (double) 5+0 ); + Tester.checkEqual(Statics.NestedStaticClass.InnerInterface.c, '5'+0); + + Tester.checkEqual(Statics.NestedStaticClass.InnerStaticInterfaceNoStatics.I, new Integer(6+0)); + Tester.checkEqual(Statics.NestedStaticClass.InnerStaticInterfaceNoStatics.b, (byte) 6+0 ); + Tester.checkEqual(Statics.NestedStaticClass.InnerStaticInterfaceNoStatics.s, (short) 6+0 ); + Tester.checkEqual(Statics.NestedStaticClass.InnerStaticInterfaceNoStatics.i, 6+0 ); + Tester.checkEqual(Statics.NestedStaticClass.InnerStaticInterfaceNoStatics.l, 6+0L); + Tester.checkEqual(Statics.NestedStaticClass.InnerStaticInterfaceNoStatics.f, (float) 6+0 ); + Tester.checkEqual(Statics.NestedStaticClass.InnerStaticInterfaceNoStatics.d, (double) 6+0 ); + Tester.checkEqual(Statics.NestedStaticClass.InnerStaticInterfaceNoStatics.c, '6'+0); + + Tester.checkEqual(Statics.NestedStaticClass.InnerInterfaceNoStatics.I, new Integer(7+0)); + Tester.checkEqual(Statics.NestedStaticClass.InnerInterfaceNoStatics.b, (byte) 7+0 ); + Tester.checkEqual(Statics.NestedStaticClass.InnerInterfaceNoStatics.s, (short) 7+0 ); + Tester.checkEqual(Statics.NestedStaticClass.InnerInterfaceNoStatics.i, 7+0 ); + Tester.checkEqual(Statics.NestedStaticClass.InnerInterfaceNoStatics.l, 7+0L); + Tester.checkEqual(Statics.NestedStaticClass.InnerInterfaceNoStatics.f, (float) 7+0 ); + Tester.checkEqual(Statics.NestedStaticClass.InnerInterfaceNoStatics.d, (double) 7+0 ); + Tester.checkEqual(Statics.NestedStaticClass.InnerInterfaceNoStatics.c, '7'+0); + + // Statics.NestedStaticInterface + Tester.checkEqual(Statics.NestedStaticInterface.I, new Integer(2+10)); + Tester.checkEqual(Statics.NestedStaticInterface.b, (byte) 2+10 ); + Tester.checkEqual(Statics.NestedStaticInterface.s, (short) 2+10 ); + Tester.checkEqual(Statics.NestedStaticInterface.i, 2+10 ); + Tester.checkEqual(Statics.NestedStaticInterface.l, 2+10L); + Tester.checkEqual(Statics.NestedStaticInterface.f, (float) 2+10 ); + Tester.checkEqual(Statics.NestedStaticInterface.d, (double) 2+10 ); + Tester.checkEqual(Statics.NestedStaticInterface.c, '2'+10); + + Tester.checkEqual(Statics.NestedStaticInterface.InnerStaticClass.I, new Integer(3+10)); + Tester.checkEqual(Statics.NestedStaticInterface.InnerStaticClass.b, (byte) 3+10 ); + Tester.checkEqual(Statics.NestedStaticInterface.InnerStaticClass.s, (short) 3+10 ); + Tester.checkEqual(Statics.NestedStaticInterface.InnerStaticClass.i, 3+10 ); + Tester.checkEqual(Statics.NestedStaticInterface.InnerStaticClass.l, 3+10L); + Tester.checkEqual(Statics.NestedStaticInterface.InnerStaticClass.f, (float) 3+10 ); + Tester.checkEqual(Statics.NestedStaticInterface.InnerStaticClass.d, (double) 3+10 ); + Tester.checkEqual(Statics.NestedStaticInterface.InnerStaticClass.c, '3'+10); + + Tester.checkEqual(Statics.NestedStaticInterface.InnerStaticInterface.I, new Integer(4+10)); + Tester.checkEqual(Statics.NestedStaticInterface.InnerStaticInterface.b, (byte) 4+10 ); + Tester.checkEqual(Statics.NestedStaticInterface.InnerStaticInterface.s, (short) 4+10 ); + Tester.checkEqual(Statics.NestedStaticInterface.InnerStaticInterface.i, 4+10 ); + Tester.checkEqual(Statics.NestedStaticInterface.InnerStaticInterface.l, 4+10L); + Tester.checkEqual(Statics.NestedStaticInterface.InnerStaticInterface.f, (float) 4+10 ); + Tester.checkEqual(Statics.NestedStaticInterface.InnerStaticInterface.d, (double) 4+10 ); + Tester.checkEqual(Statics.NestedStaticInterface.InnerStaticInterface.c, '4'+10); + + Tester.checkEqual(Statics.NestedStaticInterface.InnerInterface.I, new Integer(5+10)); + Tester.checkEqual(Statics.NestedStaticInterface.InnerInterface.b, (byte) 5+10 ); + Tester.checkEqual(Statics.NestedStaticInterface.InnerInterface.s, (short) 5+10 ); + Tester.checkEqual(Statics.NestedStaticInterface.InnerInterface.i, 5+10 ); + Tester.checkEqual(Statics.NestedStaticInterface.InnerInterface.l, 5+10L); + Tester.checkEqual(Statics.NestedStaticInterface.InnerInterface.f, (float) 5+10 ); + Tester.checkEqual(Statics.NestedStaticInterface.InnerInterface.d, (double) 5+10 ); + Tester.checkEqual(Statics.NestedStaticInterface.InnerInterface.c, '5'+10); + + Tester.checkEqual(Statics.NestedStaticInterface.InnerStaticInterfaceNoStatics.I, new Integer(6+10)); + Tester.checkEqual(Statics.NestedStaticInterface.InnerStaticInterfaceNoStatics.b, (byte) 6+10 ); + Tester.checkEqual(Statics.NestedStaticInterface.InnerStaticInterfaceNoStatics.s, (short) 6+10 ); + Tester.checkEqual(Statics.NestedStaticInterface.InnerStaticInterfaceNoStatics.i, 6+10 ); + Tester.checkEqual(Statics.NestedStaticInterface.InnerStaticInterfaceNoStatics.l, 6+10L); + Tester.checkEqual(Statics.NestedStaticInterface.InnerStaticInterfaceNoStatics.f, (float) 6+10 ); + Tester.checkEqual(Statics.NestedStaticInterface.InnerStaticInterfaceNoStatics.d, (double) 6+10 ); + Tester.checkEqual(Statics.NestedStaticInterface.InnerStaticInterfaceNoStatics.c, '6'+10); + + Tester.checkEqual(Statics.NestedStaticInterface.InnerInterfaceNoStatics.I, new Integer(7+10)); + Tester.checkEqual(Statics.NestedStaticInterface.InnerInterfaceNoStatics.b, (byte) 7+10 ); + Tester.checkEqual(Statics.NestedStaticInterface.InnerInterfaceNoStatics.s, (short) 7+10 ); + Tester.checkEqual(Statics.NestedStaticInterface.InnerInterfaceNoStatics.i, 7+10 ); + Tester.checkEqual(Statics.NestedStaticInterface.InnerInterfaceNoStatics.l, 7+10L); + Tester.checkEqual(Statics.NestedStaticInterface.InnerInterfaceNoStatics.f, (float) 7+10 ); + Tester.checkEqual(Statics.NestedStaticInterface.InnerInterfaceNoStatics.d, (double) 7+10 ); + Tester.checkEqual(Statics.NestedStaticInterface.InnerInterfaceNoStatics.c, '7'+10); + + // Statics.NestedInterface + Tester.checkEqual(Statics.NestedInterface.I, new Integer(2+20)); + Tester.checkEqual(Statics.NestedInterface.b, (byte) 2+20 ); + Tester.checkEqual(Statics.NestedInterface.s, (short) 2+20 ); + Tester.checkEqual(Statics.NestedInterface.i, 2+20 ); + Tester.checkEqual(Statics.NestedInterface.l, 2+20L); + Tester.checkEqual(Statics.NestedInterface.f, (float) 2+20 ); + Tester.checkEqual(Statics.NestedInterface.d, (double) 2+20 ); + Tester.checkEqual(Statics.NestedInterface.c, '2'+20); + + Tester.checkEqual(Statics.NestedInterface.InnerStaticClass.I, new Integer(3+20)); + Tester.checkEqual(Statics.NestedInterface.InnerStaticClass.b, (byte) 3+20 ); + Tester.checkEqual(Statics.NestedInterface.InnerStaticClass.s, (short) 3+20 ); + Tester.checkEqual(Statics.NestedInterface.InnerStaticClass.i, 3+20 ); + Tester.checkEqual(Statics.NestedInterface.InnerStaticClass.l, 3+20L); + Tester.checkEqual(Statics.NestedInterface.InnerStaticClass.f, (float) 3+20 ); + Tester.checkEqual(Statics.NestedInterface.InnerStaticClass.d, (double) 3+20 ); + Tester.checkEqual(Statics.NestedInterface.InnerStaticClass.c, '3'+20); + + Tester.checkEqual(Statics.NestedInterface.InnerStaticInterface.I, new Integer(4+20)); + Tester.checkEqual(Statics.NestedInterface.InnerStaticInterface.b, (byte) 4+20 ); + Tester.checkEqual(Statics.NestedInterface.InnerStaticInterface.s, (short) 4+20 ); + Tester.checkEqual(Statics.NestedInterface.InnerStaticInterface.i, 4+20 ); + Tester.checkEqual(Statics.NestedInterface.InnerStaticInterface.l, 4+20L); + Tester.checkEqual(Statics.NestedInterface.InnerStaticInterface.f, (float) 4+20 ); + Tester.checkEqual(Statics.NestedInterface.InnerStaticInterface.d, (double) 4+20 ); + Tester.checkEqual(Statics.NestedInterface.InnerStaticInterface.c, '4'+20); + + Tester.checkEqual(Statics.NestedInterface.InnerInterface.I, new Integer(5+20)); + Tester.checkEqual(Statics.NestedInterface.InnerInterface.b, (byte) 5+20 ); + Tester.checkEqual(Statics.NestedInterface.InnerInterface.s, (short) 5+20 ); + Tester.checkEqual(Statics.NestedInterface.InnerInterface.i, 5+20 ); + Tester.checkEqual(Statics.NestedInterface.InnerInterface.l, 5+20L); + Tester.checkEqual(Statics.NestedInterface.InnerInterface.f, (float) 5+20 ); + Tester.checkEqual(Statics.NestedInterface.InnerInterface.d, (double) 5+20 ); + Tester.checkEqual(Statics.NestedInterface.InnerInterface.c, '5'+20); + + Tester.checkEqual(Statics.NestedInterface.InnerStaticInterfaceNoStatics.I, new Integer(6+20)); + Tester.checkEqual(Statics.NestedInterface.InnerStaticInterfaceNoStatics.b, (byte) 6+20 ); + Tester.checkEqual(Statics.NestedInterface.InnerStaticInterfaceNoStatics.s, (short) 6+20 ); + Tester.checkEqual(Statics.NestedInterface.InnerStaticInterfaceNoStatics.i, 6+20 ); + Tester.checkEqual(Statics.NestedInterface.InnerStaticInterfaceNoStatics.l, 6+20L); + Tester.checkEqual(Statics.NestedInterface.InnerStaticInterfaceNoStatics.f, (float) 6+20 ); + Tester.checkEqual(Statics.NestedInterface.InnerStaticInterfaceNoStatics.d, (double) 6+20 ); + Tester.checkEqual(Statics.NestedInterface.InnerStaticInterfaceNoStatics.c, '6'+20); + + Tester.checkEqual(Statics.NestedInterface.InnerInterfaceNoStatics.I, new Integer(7+20)); + Tester.checkEqual(Statics.NestedInterface.InnerInterfaceNoStatics.b, (byte) 7+20 ); + Tester.checkEqual(Statics.NestedInterface.InnerInterfaceNoStatics.s, (short) 7+20 ); + Tester.checkEqual(Statics.NestedInterface.InnerInterfaceNoStatics.i, 7+20 ); + Tester.checkEqual(Statics.NestedInterface.InnerInterfaceNoStatics.l, 7+20L); + Tester.checkEqual(Statics.NestedInterface.InnerInterfaceNoStatics.f, (float) 7+20 ); + Tester.checkEqual(Statics.NestedInterface.InnerInterfaceNoStatics.d, (double) 7+20 ); + Tester.checkEqual(Statics.NestedInterface.InnerInterfaceNoStatics.c, '7'+20); + + + // --- p1.P1Statics + Tester.checkEqual(P1Statics.I, new Integer(1+1)); + Tester.checkEqual(P1Statics.b, (byte) 1+1 ); + Tester.checkEqual(P1Statics.s, (short) 1+1 ); + Tester.checkEqual(P1Statics.i, 1+1 ); + Tester.checkEqual(P1Statics.l, 1+1L); + Tester.checkEqual(P1Statics.f, (float) 1+1 ); + Tester.checkEqual(P1Statics.d, (double) 1+1 ); + Tester.checkEqual(P1Statics.c, '1'+1); + + // p1.P1Statics.NestedStaticClass + Tester.checkEqual(P1Statics.NestedStaticClass.I, new Integer(2+1)); + Tester.checkEqual(P1Statics.NestedStaticClass.b, (byte) 2+1 ); + Tester.checkEqual(P1Statics.NestedStaticClass.s, (short) 2+1 ); + Tester.checkEqual(P1Statics.NestedStaticClass.i, 2+1 ); + Tester.checkEqual(P1Statics.NestedStaticClass.l, 2+1L); + Tester.checkEqual(P1Statics.NestedStaticClass.f, (float) 2+1 ); + Tester.checkEqual(P1Statics.NestedStaticClass.d, (double) 2+1 ); + Tester.checkEqual(P1Statics.NestedStaticClass.c, '2'+1); + + Tester.checkEqual(P1Statics.NestedStaticClass.InnerStaticClass.I, new Integer(3+1)); + Tester.checkEqual(P1Statics.NestedStaticClass.InnerStaticClass.b, (byte) 3+1 ); + Tester.checkEqual(P1Statics.NestedStaticClass.InnerStaticClass.s, (short) 3+1 ); + Tester.checkEqual(P1Statics.NestedStaticClass.InnerStaticClass.i, 3+1 ); + Tester.checkEqual(P1Statics.NestedStaticClass.InnerStaticClass.l, 3+1L); + Tester.checkEqual(P1Statics.NestedStaticClass.InnerStaticClass.f, (float) 3+1 ); + Tester.checkEqual(P1Statics.NestedStaticClass.InnerStaticClass.d, (double) 3+1 ); + Tester.checkEqual(P1Statics.NestedStaticClass.InnerStaticClass.c, '3'+1); + + Tester.checkEqual(P1Statics.NestedStaticClass.InnerStaticInterface.I, new Integer(4+1)); + Tester.checkEqual(P1Statics.NestedStaticClass.InnerStaticInterface.b, (byte) 4+1 ); + Tester.checkEqual(P1Statics.NestedStaticClass.InnerStaticInterface.s, (short) 4+1 ); + Tester.checkEqual(P1Statics.NestedStaticClass.InnerStaticInterface.i, 4+1 ); + Tester.checkEqual(P1Statics.NestedStaticClass.InnerStaticInterface.l, 4+1L); + Tester.checkEqual(P1Statics.NestedStaticClass.InnerStaticInterface.f, (float) 4+1 ); + Tester.checkEqual(P1Statics.NestedStaticClass.InnerStaticInterface.d, (double) 4+1 ); + Tester.checkEqual(P1Statics.NestedStaticClass.InnerStaticInterface.c, '4'+1); + + Tester.checkEqual(P1Statics.NestedStaticClass.InnerInterface.I, new Integer(5+1)); + Tester.checkEqual(P1Statics.NestedStaticClass.InnerInterface.b, (byte) 5+1 ); + Tester.checkEqual(P1Statics.NestedStaticClass.InnerInterface.s, (short) 5+1 ); + Tester.checkEqual(P1Statics.NestedStaticClass.InnerInterface.i, 5+1 ); + Tester.checkEqual(P1Statics.NestedStaticClass.InnerInterface.l, 5+1L); + Tester.checkEqual(P1Statics.NestedStaticClass.InnerInterface.f, (float) 5+1 ); + Tester.checkEqual(P1Statics.NestedStaticClass.InnerInterface.d, (double) 5+1 ); + Tester.checkEqual(P1Statics.NestedStaticClass.InnerInterface.c, '5'+1); + + Tester.checkEqual(P1Statics.NestedStaticClass.InnerStaticInterfaceNoStatics.I, new Integer(6+1)); + Tester.checkEqual(P1Statics.NestedStaticClass.InnerStaticInterfaceNoStatics.b, (byte) 6+1 ); + Tester.checkEqual(P1Statics.NestedStaticClass.InnerStaticInterfaceNoStatics.s, (short) 6+1 ); + Tester.checkEqual(P1Statics.NestedStaticClass.InnerStaticInterfaceNoStatics.i, 6+1 ); + Tester.checkEqual(P1Statics.NestedStaticClass.InnerStaticInterfaceNoStatics.l, 6+1L); + Tester.checkEqual(P1Statics.NestedStaticClass.InnerStaticInterfaceNoStatics.f, (float) 6+1 ); + Tester.checkEqual(P1Statics.NestedStaticClass.InnerStaticInterfaceNoStatics.d, (double) 6+1 ); + Tester.checkEqual(P1Statics.NestedStaticClass.InnerStaticInterfaceNoStatics.c, '6'+1); + + Tester.checkEqual(P1Statics.NestedStaticClass.InnerInterfaceNoStatics.I, new Integer(7+1)); + Tester.checkEqual(P1Statics.NestedStaticClass.InnerInterfaceNoStatics.b, (byte) 7+1 ); + Tester.checkEqual(P1Statics.NestedStaticClass.InnerInterfaceNoStatics.s, (short) 7+1 ); + Tester.checkEqual(P1Statics.NestedStaticClass.InnerInterfaceNoStatics.i, 7+1 ); + Tester.checkEqual(P1Statics.NestedStaticClass.InnerInterfaceNoStatics.l, 7+1L); + Tester.checkEqual(P1Statics.NestedStaticClass.InnerInterfaceNoStatics.f, (float) 7+1 ); + Tester.checkEqual(P1Statics.NestedStaticClass.InnerInterfaceNoStatics.d, (double) 7+1 ); + Tester.checkEqual(P1Statics.NestedStaticClass.InnerInterfaceNoStatics.c, '7'+1); + + // p1.P1Statics.NestedStaticInterface + Tester.checkEqual(P1Statics.NestedStaticInterface.I, new Integer(2+11)); + Tester.checkEqual(P1Statics.NestedStaticInterface.b, (byte) 2+11 ); + Tester.checkEqual(P1Statics.NestedStaticInterface.s, (short) 2+11 ); + Tester.checkEqual(P1Statics.NestedStaticInterface.i, 2+11 ); + Tester.checkEqual(P1Statics.NestedStaticInterface.l, 2+11L); + Tester.checkEqual(P1Statics.NestedStaticInterface.f, (float) 2+11 ); + Tester.checkEqual(P1Statics.NestedStaticInterface.d, (double) 2+11 ); + Tester.checkEqual(P1Statics.NestedStaticInterface.c, '2'+11); + + Tester.checkEqual(P1Statics.NestedStaticInterface.InnerStaticClass.I, new Integer(3+11)); + Tester.checkEqual(P1Statics.NestedStaticInterface.InnerStaticClass.b, (byte) 3+11 ); + Tester.checkEqual(P1Statics.NestedStaticInterface.InnerStaticClass.s, (short) 3+11 ); + Tester.checkEqual(P1Statics.NestedStaticInterface.InnerStaticClass.i, 3+11 ); + Tester.checkEqual(P1Statics.NestedStaticInterface.InnerStaticClass.l, 3+11L); + Tester.checkEqual(P1Statics.NestedStaticInterface.InnerStaticClass.f, (float) 3+11 ); + Tester.checkEqual(P1Statics.NestedStaticInterface.InnerStaticClass.d, (double) 3+11 ); + Tester.checkEqual(P1Statics.NestedStaticInterface.InnerStaticClass.c, '3'+11); + + Tester.checkEqual(P1Statics.NestedStaticInterface.InnerStaticInterface.I, new Integer(4+11)); + Tester.checkEqual(P1Statics.NestedStaticInterface.InnerStaticInterface.b, (byte) 4+11 ); + Tester.checkEqual(P1Statics.NestedStaticInterface.InnerStaticInterface.s, (short) 4+11 ); + Tester.checkEqual(P1Statics.NestedStaticInterface.InnerStaticInterface.i, 4+11 ); + Tester.checkEqual(P1Statics.NestedStaticInterface.InnerStaticInterface.l, 4+11L); + Tester.checkEqual(P1Statics.NestedStaticInterface.InnerStaticInterface.f, (float) 4+11 ); + Tester.checkEqual(P1Statics.NestedStaticInterface.InnerStaticInterface.d, (double) 4+11 ); + Tester.checkEqual(P1Statics.NestedStaticInterface.InnerStaticInterface.c, '4'+11); + + Tester.checkEqual(P1Statics.NestedStaticInterface.InnerInterface.I, new Integer(5+11)); + Tester.checkEqual(P1Statics.NestedStaticInterface.InnerInterface.b, (byte) 5+11 ); + Tester.checkEqual(P1Statics.NestedStaticInterface.InnerInterface.s, (short) 5+11 ); + Tester.checkEqual(P1Statics.NestedStaticInterface.InnerInterface.i, 5+11 ); + Tester.checkEqual(P1Statics.NestedStaticInterface.InnerInterface.l, 5+11L); + Tester.checkEqual(P1Statics.NestedStaticInterface.InnerInterface.f, (float) 5+11 ); + Tester.checkEqual(P1Statics.NestedStaticInterface.InnerInterface.d, (double) 5+11 ); + Tester.checkEqual(P1Statics.NestedStaticInterface.InnerInterface.c, '5'+11); + + Tester.checkEqual(P1Statics.NestedStaticInterface.InnerStaticInterfaceNoStatics.I, new Integer(6+11)); + Tester.checkEqual(P1Statics.NestedStaticInterface.InnerStaticInterfaceNoStatics.b, (byte) 6+11 ); + Tester.checkEqual(P1Statics.NestedStaticInterface.InnerStaticInterfaceNoStatics.s, (short) 6+11 ); + Tester.checkEqual(P1Statics.NestedStaticInterface.InnerStaticInterfaceNoStatics.i, 6+11 ); + Tester.checkEqual(P1Statics.NestedStaticInterface.InnerStaticInterfaceNoStatics.l, 6+11L); + Tester.checkEqual(P1Statics.NestedStaticInterface.InnerStaticInterfaceNoStatics.f, (float) 6+11 ); + Tester.checkEqual(P1Statics.NestedStaticInterface.InnerStaticInterfaceNoStatics.d, (double) 6+11 ); + Tester.checkEqual(P1Statics.NestedStaticInterface.InnerStaticInterfaceNoStatics.c, '6'+11); + + Tester.checkEqual(P1Statics.NestedStaticInterface.InnerInterfaceNoStatics.I, new Integer(7+11)); + Tester.checkEqual(P1Statics.NestedStaticInterface.InnerInterfaceNoStatics.b, (byte) 7+11 ); + Tester.checkEqual(P1Statics.NestedStaticInterface.InnerInterfaceNoStatics.s, (short) 7+11 ); + Tester.checkEqual(P1Statics.NestedStaticInterface.InnerInterfaceNoStatics.i, 7+11 ); + Tester.checkEqual(P1Statics.NestedStaticInterface.InnerInterfaceNoStatics.l, 7+11L); + Tester.checkEqual(P1Statics.NestedStaticInterface.InnerInterfaceNoStatics.f, (float) 7+11 ); + Tester.checkEqual(P1Statics.NestedStaticInterface.InnerInterfaceNoStatics.d, (double) 7+11 ); + Tester.checkEqual(P1Statics.NestedStaticInterface.InnerInterfaceNoStatics.c, '7'+11); + + // p1.P1Statics.NestedInterface + Tester.checkEqual(P1Statics.NestedInterface.I, new Integer(2+21)); + Tester.checkEqual(P1Statics.NestedInterface.b, (byte) 2+21 ); + Tester.checkEqual(P1Statics.NestedInterface.s, (short) 2+21 ); + Tester.checkEqual(P1Statics.NestedInterface.i, 2+21 ); + Tester.checkEqual(P1Statics.NestedInterface.l, 2+21L); + Tester.checkEqual(P1Statics.NestedInterface.f, (float) 2+21 ); + Tester.checkEqual(P1Statics.NestedInterface.d, (double) 2+21 ); + Tester.checkEqual(P1Statics.NestedInterface.c, '2'+21); + + Tester.checkEqual(P1Statics.NestedInterface.InnerStaticClass.I, new Integer(3+21)); + Tester.checkEqual(P1Statics.NestedInterface.InnerStaticClass.b, (byte) 3+21 ); + Tester.checkEqual(P1Statics.NestedInterface.InnerStaticClass.s, (short) 3+21 ); + Tester.checkEqual(P1Statics.NestedInterface.InnerStaticClass.i, 3+21 ); + Tester.checkEqual(P1Statics.NestedInterface.InnerStaticClass.l, 3+21L); + Tester.checkEqual(P1Statics.NestedInterface.InnerStaticClass.f, (float) 3+21 ); + Tester.checkEqual(P1Statics.NestedInterface.InnerStaticClass.d, (double) 3+21 ); + Tester.checkEqual(P1Statics.NestedInterface.InnerStaticClass.c, '3'+21); + + Tester.checkEqual(P1Statics.NestedInterface.InnerStaticInterface.I, new Integer(4+21)); + Tester.checkEqual(P1Statics.NestedInterface.InnerStaticInterface.b, (byte) 4+21 ); + Tester.checkEqual(P1Statics.NestedInterface.InnerStaticInterface.s, (short) 4+21 ); + Tester.checkEqual(P1Statics.NestedInterface.InnerStaticInterface.i, 4+21 ); + Tester.checkEqual(P1Statics.NestedInterface.InnerStaticInterface.l, 4+21L); + Tester.checkEqual(P1Statics.NestedInterface.InnerStaticInterface.f, (float) 4+21 ); + Tester.checkEqual(P1Statics.NestedInterface.InnerStaticInterface.d, (double) 4+21 ); + Tester.checkEqual(P1Statics.NestedInterface.InnerStaticInterface.c, '4'+21); + + Tester.checkEqual(P1Statics.NestedInterface.InnerInterface.I, new Integer(5+21)); + Tester.checkEqual(P1Statics.NestedInterface.InnerInterface.b, (byte) 5+21 ); + Tester.checkEqual(P1Statics.NestedInterface.InnerInterface.s, (short) 5+21 ); + Tester.checkEqual(P1Statics.NestedInterface.InnerInterface.i, 5+21 ); + Tester.checkEqual(P1Statics.NestedInterface.InnerInterface.l, 5+21L); + Tester.checkEqual(P1Statics.NestedInterface.InnerInterface.f, (float) 5+21 ); + Tester.checkEqual(P1Statics.NestedInterface.InnerInterface.d, (double) 5+21 ); + Tester.checkEqual(P1Statics.NestedInterface.InnerInterface.c, '5'+21); + + Tester.checkEqual(P1Statics.NestedInterface.InnerStaticInterfaceNoStatics.I, new Integer(6+21)); + Tester.checkEqual(P1Statics.NestedInterface.InnerStaticInterfaceNoStatics.b, (byte) 6+21 ); + Tester.checkEqual(P1Statics.NestedInterface.InnerStaticInterfaceNoStatics.s, (short) 6+21 ); + Tester.checkEqual(P1Statics.NestedInterface.InnerStaticInterfaceNoStatics.i, 6+21 ); + Tester.checkEqual(P1Statics.NestedInterface.InnerStaticInterfaceNoStatics.l, 6+21L); + Tester.checkEqual(P1Statics.NestedInterface.InnerStaticInterfaceNoStatics.f, (float) 6+21 ); + Tester.checkEqual(P1Statics.NestedInterface.InnerStaticInterfaceNoStatics.d, (double) 6+21 ); + Tester.checkEqual(P1Statics.NestedInterface.InnerStaticInterfaceNoStatics.c, '6'+21); + + Tester.checkEqual(P1Statics.NestedInterface.InnerInterfaceNoStatics.I, new Integer(7+21)); + Tester.checkEqual(P1Statics.NestedInterface.InnerInterfaceNoStatics.b, (byte) 7+21 ); + Tester.checkEqual(P1Statics.NestedInterface.InnerInterfaceNoStatics.s, (short) 7+21 ); + Tester.checkEqual(P1Statics.NestedInterface.InnerInterfaceNoStatics.i, 7+21 ); + Tester.checkEqual(P1Statics.NestedInterface.InnerInterfaceNoStatics.l, 7+21L); + Tester.checkEqual(P1Statics.NestedInterface.InnerInterfaceNoStatics.f, (float) 7+21 ); + Tester.checkEqual(P1Statics.NestedInterface.InnerInterfaceNoStatics.d, (double) 7+21 ); + Tester.checkEqual(P1Statics.NestedInterface.InnerInterfaceNoStatics.c, '7'+21); + + + // --- p1.p2.P1P2Statics + Tester.checkEqual(P1P2Statics.I, new Integer(1+2)); + Tester.checkEqual(P1P2Statics.b, (byte) 1+2 ); + Tester.checkEqual(P1P2Statics.s, (short) 1+2 ); + Tester.checkEqual(P1P2Statics.i, 1+2 ); + Tester.checkEqual(P1P2Statics.l, 1+2L); + Tester.checkEqual(P1P2Statics.f, (float) 1+2 ); + Tester.checkEqual(P1P2Statics.d, (double) 1+2 ); + Tester.checkEqual(P1P2Statics.c, '1'+2); + + // p1.p2.P1P2Statics.NestedStaticClass + Tester.checkEqual(P1P2Statics.NestedStaticClass.I, new Integer(2+2)); + Tester.checkEqual(P1P2Statics.NestedStaticClass.b, (byte) 2+2 ); + Tester.checkEqual(P1P2Statics.NestedStaticClass.s, (short) 2+2 ); + Tester.checkEqual(P1P2Statics.NestedStaticClass.i, 2+2 ); + Tester.checkEqual(P1P2Statics.NestedStaticClass.l, 2+2L); + Tester.checkEqual(P1P2Statics.NestedStaticClass.f, (float) 2+2 ); + Tester.checkEqual(P1P2Statics.NestedStaticClass.d, (double) 2+2 ); + Tester.checkEqual(P1P2Statics.NestedStaticClass.c, '2'+2); + + Tester.checkEqual(P1P2Statics.NestedStaticClass.InnerStaticClass.I, new Integer(3+2)); + Tester.checkEqual(P1P2Statics.NestedStaticClass.InnerStaticClass.b, (byte) 3+2 ); + Tester.checkEqual(P1P2Statics.NestedStaticClass.InnerStaticClass.s, (short) 3+2 ); + Tester.checkEqual(P1P2Statics.NestedStaticClass.InnerStaticClass.i, 3+2 ); + Tester.checkEqual(P1P2Statics.NestedStaticClass.InnerStaticClass.l, 3+2L); + Tester.checkEqual(P1P2Statics.NestedStaticClass.InnerStaticClass.f, (float) 3+2 ); + Tester.checkEqual(P1P2Statics.NestedStaticClass.InnerStaticClass.d, (double) 3+2 ); + Tester.checkEqual(P1P2Statics.NestedStaticClass.InnerStaticClass.c, '3'+2); + + Tester.checkEqual(P1P2Statics.NestedStaticClass.InnerStaticInterface.I, new Integer(4+2)); + Tester.checkEqual(P1P2Statics.NestedStaticClass.InnerStaticInterface.b, (byte) 4+2 ); + Tester.checkEqual(P1P2Statics.NestedStaticClass.InnerStaticInterface.s, (short) 4+2 ); + Tester.checkEqual(P1P2Statics.NestedStaticClass.InnerStaticInterface.i, 4+2 ); + Tester.checkEqual(P1P2Statics.NestedStaticClass.InnerStaticInterface.l, 4+2L); + Tester.checkEqual(P1P2Statics.NestedStaticClass.InnerStaticInterface.f, (float) 4+2 ); + Tester.checkEqual(P1P2Statics.NestedStaticClass.InnerStaticInterface.d, (double) 4+2 ); + Tester.checkEqual(P1P2Statics.NestedStaticClass.InnerStaticInterface.c, '4'+2); + + Tester.checkEqual(P1P2Statics.NestedStaticClass.InnerInterface.I, new Integer(5+2)); + Tester.checkEqual(P1P2Statics.NestedStaticClass.InnerInterface.b, (byte) 5+2 ); + Tester.checkEqual(P1P2Statics.NestedStaticClass.InnerInterface.s, (short) 5+2 ); + Tester.checkEqual(P1P2Statics.NestedStaticClass.InnerInterface.i, 5+2 ); + Tester.checkEqual(P1P2Statics.NestedStaticClass.InnerInterface.l, 5+2L); + Tester.checkEqual(P1P2Statics.NestedStaticClass.InnerInterface.f, (float) 5+2 ); + Tester.checkEqual(P1P2Statics.NestedStaticClass.InnerInterface.d, (double) 5+2 ); + Tester.checkEqual(P1P2Statics.NestedStaticClass.InnerInterface.c, '5'+2); + + Tester.checkEqual(P1P2Statics.NestedStaticClass.InnerStaticInterfaceNoStatics.I, new Integer(6+2)); + Tester.checkEqual(P1P2Statics.NestedStaticClass.InnerStaticInterfaceNoStatics.b, (byte) 6+2 ); + Tester.checkEqual(P1P2Statics.NestedStaticClass.InnerStaticInterfaceNoStatics.s, (short) 6+2 ); + Tester.checkEqual(P1P2Statics.NestedStaticClass.InnerStaticInterfaceNoStatics.i, 6+2 ); + Tester.checkEqual(P1P2Statics.NestedStaticClass.InnerStaticInterfaceNoStatics.l, 6+2L); + Tester.checkEqual(P1P2Statics.NestedStaticClass.InnerStaticInterfaceNoStatics.f, (float) 6+2 ); + Tester.checkEqual(P1P2Statics.NestedStaticClass.InnerStaticInterfaceNoStatics.d, (double) 6+2 ); + Tester.checkEqual(P1P2Statics.NestedStaticClass.InnerStaticInterfaceNoStatics.c, '6'+2); + + Tester.checkEqual(P1P2Statics.NestedStaticClass.InnerInterfaceNoStatics.I, new Integer(7+2)); + Tester.checkEqual(P1P2Statics.NestedStaticClass.InnerInterfaceNoStatics.b, (byte) 7+2 ); + Tester.checkEqual(P1P2Statics.NestedStaticClass.InnerInterfaceNoStatics.s, (short) 7+2 ); + Tester.checkEqual(P1P2Statics.NestedStaticClass.InnerInterfaceNoStatics.i, 7+2 ); + Tester.checkEqual(P1P2Statics.NestedStaticClass.InnerInterfaceNoStatics.l, 7+2L); + Tester.checkEqual(P1P2Statics.NestedStaticClass.InnerInterfaceNoStatics.f, (float) 7+2 ); + Tester.checkEqual(P1P2Statics.NestedStaticClass.InnerInterfaceNoStatics.d, (double) 7+2 ); + Tester.checkEqual(P1P2Statics.NestedStaticClass.InnerInterfaceNoStatics.c, '7'+2); + + // p1.p2.P1P2Statics.NestedStaticInterface + Tester.checkEqual(P1P2Statics.NestedStaticInterface.I, new Integer(2+12)); + Tester.checkEqual(P1P2Statics.NestedStaticInterface.b, (byte) 2+12 ); + Tester.checkEqual(P1P2Statics.NestedStaticInterface.s, (short) 2+12 ); + Tester.checkEqual(P1P2Statics.NestedStaticInterface.i, 2+12 ); + Tester.checkEqual(P1P2Statics.NestedStaticInterface.l, 2+12L); + Tester.checkEqual(P1P2Statics.NestedStaticInterface.f, (float) 2+12 ); + Tester.checkEqual(P1P2Statics.NestedStaticInterface.d, (double) 2+12 ); + Tester.checkEqual(P1P2Statics.NestedStaticInterface.c, '2'+12); + + Tester.checkEqual(P1P2Statics.NestedStaticInterface.InnerStaticClass.I, new Integer(3+12)); + Tester.checkEqual(P1P2Statics.NestedStaticInterface.InnerStaticClass.b, (byte) 3+12 ); + Tester.checkEqual(P1P2Statics.NestedStaticInterface.InnerStaticClass.s, (short) 3+12 ); + Tester.checkEqual(P1P2Statics.NestedStaticInterface.InnerStaticClass.i, 3+12 ); + Tester.checkEqual(P1P2Statics.NestedStaticInterface.InnerStaticClass.l, 3+12L); + Tester.checkEqual(P1P2Statics.NestedStaticInterface.InnerStaticClass.f, (float) 3+12 ); + Tester.checkEqual(P1P2Statics.NestedStaticInterface.InnerStaticClass.d, (double) 3+12 ); + Tester.checkEqual(P1P2Statics.NestedStaticInterface.InnerStaticClass.c, '3'+12); + + Tester.checkEqual(P1P2Statics.NestedStaticInterface.InnerStaticInterface.I, new Integer(4+12)); + Tester.checkEqual(P1P2Statics.NestedStaticInterface.InnerStaticInterface.b, (byte) 4+12 ); + Tester.checkEqual(P1P2Statics.NestedStaticInterface.InnerStaticInterface.s, (short) 4+12 ); + Tester.checkEqual(P1P2Statics.NestedStaticInterface.InnerStaticInterface.i, 4+12 ); + Tester.checkEqual(P1P2Statics.NestedStaticInterface.InnerStaticInterface.l, 4+12L); + Tester.checkEqual(P1P2Statics.NestedStaticInterface.InnerStaticInterface.f, (float) 4+12 ); + Tester.checkEqual(P1P2Statics.NestedStaticInterface.InnerStaticInterface.d, (double) 4+12 ); + Tester.checkEqual(P1P2Statics.NestedStaticInterface.InnerStaticInterface.c, '4'+12); + + Tester.checkEqual(P1P2Statics.NestedStaticInterface.InnerInterface.I, new Integer(5+12)); + Tester.checkEqual(P1P2Statics.NestedStaticInterface.InnerInterface.b, (byte) 5+12 ); + Tester.checkEqual(P1P2Statics.NestedStaticInterface.InnerInterface.s, (short) 5+12 ); + Tester.checkEqual(P1P2Statics.NestedStaticInterface.InnerInterface.i, 5+12 ); + Tester.checkEqual(P1P2Statics.NestedStaticInterface.InnerInterface.l, 5+12L); + Tester.checkEqual(P1P2Statics.NestedStaticInterface.InnerInterface.f, (float) 5+12 ); + Tester.checkEqual(P1P2Statics.NestedStaticInterface.InnerInterface.d, (double) 5+12 ); + Tester.checkEqual(P1P2Statics.NestedStaticInterface.InnerInterface.c, '5'+12); + + Tester.checkEqual(P1P2Statics.NestedStaticInterface.InnerStaticInterfaceNoStatics.I, new Integer(6+12)); + Tester.checkEqual(P1P2Statics.NestedStaticInterface.InnerStaticInterfaceNoStatics.b, (byte) 6+12 ); + Tester.checkEqual(P1P2Statics.NestedStaticInterface.InnerStaticInterfaceNoStatics.s, (short) 6+12 ); + Tester.checkEqual(P1P2Statics.NestedStaticInterface.InnerStaticInterfaceNoStatics.i, 6+12 ); + Tester.checkEqual(P1P2Statics.NestedStaticInterface.InnerStaticInterfaceNoStatics.l, 6+12L); + Tester.checkEqual(P1P2Statics.NestedStaticInterface.InnerStaticInterfaceNoStatics.f, (float) 6+12 ); + Tester.checkEqual(P1P2Statics.NestedStaticInterface.InnerStaticInterfaceNoStatics.d, (double) 6+12 ); + Tester.checkEqual(P1P2Statics.NestedStaticInterface.InnerStaticInterfaceNoStatics.c, '6'+12); + + Tester.checkEqual(P1P2Statics.NestedStaticInterface.InnerInterfaceNoStatics.I, new Integer(7+12)); + Tester.checkEqual(P1P2Statics.NestedStaticInterface.InnerInterfaceNoStatics.b, (byte) 7+12 ); + Tester.checkEqual(P1P2Statics.NestedStaticInterface.InnerInterfaceNoStatics.s, (short) 7+12 ); + Tester.checkEqual(P1P2Statics.NestedStaticInterface.InnerInterfaceNoStatics.i, 7+12 ); + Tester.checkEqual(P1P2Statics.NestedStaticInterface.InnerInterfaceNoStatics.l, 7+12L); + Tester.checkEqual(P1P2Statics.NestedStaticInterface.InnerInterfaceNoStatics.f, (float) 7+12 ); + Tester.checkEqual(P1P2Statics.NestedStaticInterface.InnerInterfaceNoStatics.d, (double) 7+12 ); + Tester.checkEqual(P1P2Statics.NestedStaticInterface.InnerInterfaceNoStatics.c, '7'+12); + + // p1.p2.P1P2Statics.NestedInterface + Tester.checkEqual(P1P2Statics.NestedInterface.I, new Integer(2+22)); + Tester.checkEqual(P1P2Statics.NestedInterface.b, (byte) 2+22 ); + Tester.checkEqual(P1P2Statics.NestedInterface.s, (short) 2+22 ); + Tester.checkEqual(P1P2Statics.NestedInterface.i, 2+22 ); + Tester.checkEqual(P1P2Statics.NestedInterface.l, 2+22L); + Tester.checkEqual(P1P2Statics.NestedInterface.f, (float) 2+22 ); + Tester.checkEqual(P1P2Statics.NestedInterface.d, (double) 2+22 ); + Tester.checkEqual(P1P2Statics.NestedInterface.c, '2'+22); + + Tester.checkEqual(P1P2Statics.NestedInterface.InnerStaticClass.I, new Integer(3+22)); + Tester.checkEqual(P1P2Statics.NestedInterface.InnerStaticClass.b, (byte) 3+22 ); + Tester.checkEqual(P1P2Statics.NestedInterface.InnerStaticClass.s, (short) 3+22 ); + Tester.checkEqual(P1P2Statics.NestedInterface.InnerStaticClass.i, 3+22 ); + Tester.checkEqual(P1P2Statics.NestedInterface.InnerStaticClass.l, 3+22L); + Tester.checkEqual(P1P2Statics.NestedInterface.InnerStaticClass.f, (float) 3+22 ); + Tester.checkEqual(P1P2Statics.NestedInterface.InnerStaticClass.d, (double) 3+22 ); + Tester.checkEqual(P1P2Statics.NestedInterface.InnerStaticClass.c, '3'+22); + + Tester.checkEqual(P1P2Statics.NestedInterface.InnerStaticInterface.I, new Integer(4+22)); + Tester.checkEqual(P1P2Statics.NestedInterface.InnerStaticInterface.b, (byte) 4+22 ); + Tester.checkEqual(P1P2Statics.NestedInterface.InnerStaticInterface.s, (short) 4+22 ); + Tester.checkEqual(P1P2Statics.NestedInterface.InnerStaticInterface.i, 4+22 ); + Tester.checkEqual(P1P2Statics.NestedInterface.InnerStaticInterface.l, 4+22L); + Tester.checkEqual(P1P2Statics.NestedInterface.InnerStaticInterface.f, (float) 4+22 ); + Tester.checkEqual(P1P2Statics.NestedInterface.InnerStaticInterface.d, (double) 4+22 ); + Tester.checkEqual(P1P2Statics.NestedInterface.InnerStaticInterface.c, '4'+22); + + Tester.checkEqual(P1P2Statics.NestedInterface.InnerInterface.I, new Integer(5+22)); + Tester.checkEqual(P1P2Statics.NestedInterface.InnerInterface.b, (byte) 5+22 ); + Tester.checkEqual(P1P2Statics.NestedInterface.InnerInterface.s, (short) 5+22 ); + Tester.checkEqual(P1P2Statics.NestedInterface.InnerInterface.i, 5+22 ); + Tester.checkEqual(P1P2Statics.NestedInterface.InnerInterface.l, 5+22L); + Tester.checkEqual(P1P2Statics.NestedInterface.InnerInterface.f, (float) 5+22 ); + Tester.checkEqual(P1P2Statics.NestedInterface.InnerInterface.d, (double) 5+22 ); + Tester.checkEqual(P1P2Statics.NestedInterface.InnerInterface.c, '5'+22); + + Tester.checkEqual(P1P2Statics.NestedInterface.InnerStaticInterfaceNoStatics.I, new Integer(6+22)); + Tester.checkEqual(P1P2Statics.NestedInterface.InnerStaticInterfaceNoStatics.b, (byte) 6+22 ); + Tester.checkEqual(P1P2Statics.NestedInterface.InnerStaticInterfaceNoStatics.s, (short) 6+22 ); + Tester.checkEqual(P1P2Statics.NestedInterface.InnerStaticInterfaceNoStatics.i, 6+22 ); + Tester.checkEqual(P1P2Statics.NestedInterface.InnerStaticInterfaceNoStatics.l, 6+22L); + Tester.checkEqual(P1P2Statics.NestedInterface.InnerStaticInterfaceNoStatics.f, (float) 6+22 ); + Tester.checkEqual(P1P2Statics.NestedInterface.InnerStaticInterfaceNoStatics.d, (double) 6+22 ); + Tester.checkEqual(P1P2Statics.NestedInterface.InnerStaticInterfaceNoStatics.c, '6'+22); + + Tester.checkEqual(P1P2Statics.NestedInterface.InnerInterfaceNoStatics.I, new Integer(7+22)); + Tester.checkEqual(P1P2Statics.NestedInterface.InnerInterfaceNoStatics.b, (byte) 7+22 ); + Tester.checkEqual(P1P2Statics.NestedInterface.InnerInterfaceNoStatics.s, (short) 7+22 ); + Tester.checkEqual(P1P2Statics.NestedInterface.InnerInterfaceNoStatics.i, 7+22 ); + Tester.checkEqual(P1P2Statics.NestedInterface.InnerInterfaceNoStatics.l, 7+22L); + Tester.checkEqual(P1P2Statics.NestedInterface.InnerInterfaceNoStatics.f, (float) 7+22 ); + Tester.checkEqual(P1P2Statics.NestedInterface.InnerInterfaceNoStatics.d, (double) 7+22 ); + Tester.checkEqual(P1P2Statics.NestedInterface.InnerInterfaceNoStatics.c, '7'+22); + } +} diff --git a/tests/pureJava/StaticMembers_PR421.java b/tests/pureJava/StaticMembers_PR421.java new file mode 100644 index 000000000..e148fe333 --- /dev/null +++ b/tests/pureJava/StaticMembers_PR421.java @@ -0,0 +1,536 @@ +import org.aspectj.testing.*; + +public class StaticMembers_PR421 { + public static void main(String[] args) { + new StaticMembers_PR421().realMain(args); + } + public void realMain(String[] args) { + + // --- Statics + Tester.checkEqual(Statics.I, new Integer(1+0)); + Tester.checkEqual(Statics.b, (byte) 1+0 ); + Tester.checkEqual(Statics.s, (short) 1+0 ); + Tester.checkEqual(Statics.i, 1+0 ); + Tester.checkEqual(Statics.l, 1+0L); + Tester.checkEqual(Statics.f, (float) 1+0 ); + Tester.checkEqual(Statics.d, (double) 1+0 ); + Tester.checkEqual(Statics.c, '1'+0); + + // Statics.NestedStaticClass + Tester.checkEqual(Statics.NestedStaticClass.I, new Integer(2+0)); + Tester.checkEqual(Statics.NestedStaticClass.b, (byte) 2+0 ); + Tester.checkEqual(Statics.NestedStaticClass.s, (short) 2+0 ); + Tester.checkEqual(Statics.NestedStaticClass.i, 2+0 ); + Tester.checkEqual(Statics.NestedStaticClass.l, 2+0L); + Tester.checkEqual(Statics.NestedStaticClass.f, (float) 2+0 ); + Tester.checkEqual(Statics.NestedStaticClass.d, (double)(double) 2+0 ); + Tester.checkEqual(Statics.NestedStaticClass.c, '2'+0); + + Tester.checkEqual(Statics.NestedStaticClass.InnerStaticClass.I, new Integer(3+0)); + Tester.checkEqual(Statics.NestedStaticClass.InnerStaticClass.b, (byte) 3+0 ); + Tester.checkEqual(Statics.NestedStaticClass.InnerStaticClass.s, (short) 3+0 ); + Tester.checkEqual(Statics.NestedStaticClass.InnerStaticClass.i, 3+0 ); + Tester.checkEqual(Statics.NestedStaticClass.InnerStaticClass.l, 3+0L); + Tester.checkEqual(Statics.NestedStaticClass.InnerStaticClass.f, (float) 3+0 ); + Tester.checkEqual(Statics.NestedStaticClass.InnerStaticClass.d, (double) 3+0 ); + Tester.checkEqual(Statics.NestedStaticClass.InnerStaticClass.c, '3'+0); + + Tester.checkEqual(Statics.NestedStaticClass.InnerStaticInterface.I, new Integer(4+0)); + Tester.checkEqual(Statics.NestedStaticClass.InnerStaticInterface.b, (byte) 4+0 ); + Tester.checkEqual(Statics.NestedStaticClass.InnerStaticInterface.s, (short) 4+0 ); + Tester.checkEqual(Statics.NestedStaticClass.InnerStaticInterface.i, 4+0 ); + Tester.checkEqual(Statics.NestedStaticClass.InnerStaticInterface.l, 4+0L); + Tester.checkEqual(Statics.NestedStaticClass.InnerStaticInterface.f, (float) 4+0 ); + Tester.checkEqual(Statics.NestedStaticClass.InnerStaticInterface.d, (double) 4+0 ); + Tester.checkEqual(Statics.NestedStaticClass.InnerStaticInterface.c, '4'+0); + + Tester.checkEqual(Statics.NestedStaticClass.InnerInterface.I, new Integer(5+0)); + Tester.checkEqual(Statics.NestedStaticClass.InnerInterface.b, (byte) 5+0 ); + Tester.checkEqual(Statics.NestedStaticClass.InnerInterface.s, (short) 5+0 ); + Tester.checkEqual(Statics.NestedStaticClass.InnerInterface.i, 5+0 ); + Tester.checkEqual(Statics.NestedStaticClass.InnerInterface.l, 5+0L); + Tester.checkEqual(Statics.NestedStaticClass.InnerInterface.f, (float) 5+0 ); + Tester.checkEqual(Statics.NestedStaticClass.InnerInterface.d, (double) 5+0 ); + Tester.checkEqual(Statics.NestedStaticClass.InnerInterface.c, '5'+0); + + Tester.checkEqual(Statics.NestedStaticClass.InnerStaticInterfaceNoStatics.I, new Integer(6+0)); + Tester.checkEqual(Statics.NestedStaticClass.InnerStaticInterfaceNoStatics.b, (byte) 6+0 ); + Tester.checkEqual(Statics.NestedStaticClass.InnerStaticInterfaceNoStatics.s, (short) 6+0 ); + Tester.checkEqual(Statics.NestedStaticClass.InnerStaticInterfaceNoStatics.i, 6+0 ); + Tester.checkEqual(Statics.NestedStaticClass.InnerStaticInterfaceNoStatics.l, 6+0L); + Tester.checkEqual(Statics.NestedStaticClass.InnerStaticInterfaceNoStatics.f, (float) 6+0 ); + Tester.checkEqual(Statics.NestedStaticClass.InnerStaticInterfaceNoStatics.d, (double) 6+0 ); + Tester.checkEqual(Statics.NestedStaticClass.InnerStaticInterfaceNoStatics.c, '6'+0); + + Tester.checkEqual(Statics.NestedStaticClass.InnerInterfaceNoStatics.I, new Integer(7+0)); + Tester.checkEqual(Statics.NestedStaticClass.InnerInterfaceNoStatics.b, (byte) 7+0 ); + Tester.checkEqual(Statics.NestedStaticClass.InnerInterfaceNoStatics.s, (short) 7+0 ); + Tester.checkEqual(Statics.NestedStaticClass.InnerInterfaceNoStatics.i, 7+0 ); + Tester.checkEqual(Statics.NestedStaticClass.InnerInterfaceNoStatics.l, 7+0L); + Tester.checkEqual(Statics.NestedStaticClass.InnerInterfaceNoStatics.f, (float) 7+0 ); + Tester.checkEqual(Statics.NestedStaticClass.InnerInterfaceNoStatics.d, (double) 7+0 ); + Tester.checkEqual(Statics.NestedStaticClass.InnerInterfaceNoStatics.c, '7'+0); + + // Statics.NestedStaticInterface + Tester.checkEqual(Statics.NestedStaticInterface.I, new Integer(2+10)); + Tester.checkEqual(Statics.NestedStaticInterface.b, (byte) 2+10 ); + Tester.checkEqual(Statics.NestedStaticInterface.s, (short) 2+10 ); + Tester.checkEqual(Statics.NestedStaticInterface.i, 2+10 ); + Tester.checkEqual(Statics.NestedStaticInterface.l, 2+10L); + Tester.checkEqual(Statics.NestedStaticInterface.f, (float) 2+10 ); + Tester.checkEqual(Statics.NestedStaticInterface.d, (double) 2+10 ); + Tester.checkEqual(Statics.NestedStaticInterface.c, '2'+10); + + Tester.checkEqual(Statics.NestedStaticInterface.InnerStaticClass.I, new Integer(3+10)); + Tester.checkEqual(Statics.NestedStaticInterface.InnerStaticClass.b, (byte) 3+10 ); + Tester.checkEqual(Statics.NestedStaticInterface.InnerStaticClass.s, (short) 3+10 ); + Tester.checkEqual(Statics.NestedStaticInterface.InnerStaticClass.i, 3+10 ); + Tester.checkEqual(Statics.NestedStaticInterface.InnerStaticClass.l, 3+10L); + Tester.checkEqual(Statics.NestedStaticInterface.InnerStaticClass.f, (float) 3+10 ); + Tester.checkEqual(Statics.NestedStaticInterface.InnerStaticClass.d, (double) 3+10 ); + Tester.checkEqual(Statics.NestedStaticInterface.InnerStaticClass.c, '3'+10); + + Tester.checkEqual(Statics.NestedStaticInterface.InnerStaticInterface.I, new Integer(4+10)); + Tester.checkEqual(Statics.NestedStaticInterface.InnerStaticInterface.b, (byte) 4+10 ); + Tester.checkEqual(Statics.NestedStaticInterface.InnerStaticInterface.s, (short) 4+10 ); + Tester.checkEqual(Statics.NestedStaticInterface.InnerStaticInterface.i, 4+10 ); + Tester.checkEqual(Statics.NestedStaticInterface.InnerStaticInterface.l, 4+10L); + Tester.checkEqual(Statics.NestedStaticInterface.InnerStaticInterface.f, (float) 4+10 ); + Tester.checkEqual(Statics.NestedStaticInterface.InnerStaticInterface.d, (double) 4+10 ); + Tester.checkEqual(Statics.NestedStaticInterface.InnerStaticInterface.c, '4'+10); + + Tester.checkEqual(Statics.NestedStaticInterface.InnerInterface.I, new Integer(5+10)); + Tester.checkEqual(Statics.NestedStaticInterface.InnerInterface.b, (byte) 5+10 ); + Tester.checkEqual(Statics.NestedStaticInterface.InnerInterface.s, (short) 5+10 ); + Tester.checkEqual(Statics.NestedStaticInterface.InnerInterface.i, 5+10 ); + Tester.checkEqual(Statics.NestedStaticInterface.InnerInterface.l, 5+10L); + Tester.checkEqual(Statics.NestedStaticInterface.InnerInterface.f, (float) 5+10 ); + Tester.checkEqual(Statics.NestedStaticInterface.InnerInterface.d, (double) 5+10 ); + Tester.checkEqual(Statics.NestedStaticInterface.InnerInterface.c, '5'+10); + + Tester.checkEqual(Statics.NestedStaticInterface.InnerStaticInterfaceNoStatics.I, new Integer(6+10)); + Tester.checkEqual(Statics.NestedStaticInterface.InnerStaticInterfaceNoStatics.b, (byte) 6+10 ); + Tester.checkEqual(Statics.NestedStaticInterface.InnerStaticInterfaceNoStatics.s, (short) 6+10 ); + Tester.checkEqual(Statics.NestedStaticInterface.InnerStaticInterfaceNoStatics.i, 6+10 ); + Tester.checkEqual(Statics.NestedStaticInterface.InnerStaticInterfaceNoStatics.l, 6+10L); + Tester.checkEqual(Statics.NestedStaticInterface.InnerStaticInterfaceNoStatics.f, (float) 6+10 ); + Tester.checkEqual(Statics.NestedStaticInterface.InnerStaticInterfaceNoStatics.d, (double) 6+10 ); + Tester.checkEqual(Statics.NestedStaticInterface.InnerStaticInterfaceNoStatics.c, '6'+10); + + Tester.checkEqual(Statics.NestedStaticInterface.InnerInterfaceNoStatics.I, new Integer(7+10)); + Tester.checkEqual(Statics.NestedStaticInterface.InnerInterfaceNoStatics.b, (byte) 7+10 ); + Tester.checkEqual(Statics.NestedStaticInterface.InnerInterfaceNoStatics.s, (short) 7+10 ); + Tester.checkEqual(Statics.NestedStaticInterface.InnerInterfaceNoStatics.i, 7+10 ); + Tester.checkEqual(Statics.NestedStaticInterface.InnerInterfaceNoStatics.l, 7+10L); + Tester.checkEqual(Statics.NestedStaticInterface.InnerInterfaceNoStatics.f, (float) 7+10 ); + Tester.checkEqual(Statics.NestedStaticInterface.InnerInterfaceNoStatics.d, (double) 7+10 ); + Tester.checkEqual(Statics.NestedStaticInterface.InnerInterfaceNoStatics.c, '7'+10); + + // Statics.NestedInterface + Tester.checkEqual(Statics.NestedInterface.I, new Integer(2+20)); + Tester.checkEqual(Statics.NestedInterface.b, (byte) 2+20 ); + Tester.checkEqual(Statics.NestedInterface.s, (short) 2+20 ); + Tester.checkEqual(Statics.NestedInterface.i, 2+20 ); + Tester.checkEqual(Statics.NestedInterface.l, 2+20L); + Tester.checkEqual(Statics.NestedInterface.f, (float) 2+20 ); + Tester.checkEqual(Statics.NestedInterface.d, (double) 2+20 ); + Tester.checkEqual(Statics.NestedInterface.c, '2'+20); + + Tester.checkEqual(Statics.NestedInterface.InnerStaticClass.I, new Integer(3+20)); + Tester.checkEqual(Statics.NestedInterface.InnerStaticClass.b, (byte) 3+20 ); + Tester.checkEqual(Statics.NestedInterface.InnerStaticClass.s, (short) 3+20 ); + Tester.checkEqual(Statics.NestedInterface.InnerStaticClass.i, 3+20 ); + Tester.checkEqual(Statics.NestedInterface.InnerStaticClass.l, 3+20L); + Tester.checkEqual(Statics.NestedInterface.InnerStaticClass.f, (float) 3+20 ); + Tester.checkEqual(Statics.NestedInterface.InnerStaticClass.d, (double) 3+20 ); + Tester.checkEqual(Statics.NestedInterface.InnerStaticClass.c, '3'+20); + + Tester.checkEqual(Statics.NestedInterface.InnerStaticInterface.I, new Integer(4+20)); + Tester.checkEqual(Statics.NestedInterface.InnerStaticInterface.b, (byte) 4+20 ); + Tester.checkEqual(Statics.NestedInterface.InnerStaticInterface.s, (short) 4+20 ); + Tester.checkEqual(Statics.NestedInterface.InnerStaticInterface.i, 4+20 ); + Tester.checkEqual(Statics.NestedInterface.InnerStaticInterface.l, 4+20L); + Tester.checkEqual(Statics.NestedInterface.InnerStaticInterface.f, (float) 4+20 ); + Tester.checkEqual(Statics.NestedInterface.InnerStaticInterface.d, (double) 4+20 ); + Tester.checkEqual(Statics.NestedInterface.InnerStaticInterface.c, '4'+20); + + Tester.checkEqual(Statics.NestedInterface.InnerInterface.I, new Integer(5+20)); + Tester.checkEqual(Statics.NestedInterface.InnerInterface.b, (byte) 5+20 ); + Tester.checkEqual(Statics.NestedInterface.InnerInterface.s, (short) 5+20 ); + Tester.checkEqual(Statics.NestedInterface.InnerInterface.i, 5+20 ); + Tester.checkEqual(Statics.NestedInterface.InnerInterface.l, 5+20L); + Tester.checkEqual(Statics.NestedInterface.InnerInterface.f, (float) 5+20 ); + Tester.checkEqual(Statics.NestedInterface.InnerInterface.d, (double) 5+20 ); + Tester.checkEqual(Statics.NestedInterface.InnerInterface.c, '5'+20); + + Tester.checkEqual(Statics.NestedInterface.InnerStaticInterfaceNoStatics.I, new Integer(6+20)); + Tester.checkEqual(Statics.NestedInterface.InnerStaticInterfaceNoStatics.b, (byte) 6+20 ); + Tester.checkEqual(Statics.NestedInterface.InnerStaticInterfaceNoStatics.s, (short) 6+20 ); + Tester.checkEqual(Statics.NestedInterface.InnerStaticInterfaceNoStatics.i, 6+20 ); + Tester.checkEqual(Statics.NestedInterface.InnerStaticInterfaceNoStatics.l, 6+20L); + Tester.checkEqual(Statics.NestedInterface.InnerStaticInterfaceNoStatics.f, (float) 6+20 ); + Tester.checkEqual(Statics.NestedInterface.InnerStaticInterfaceNoStatics.d, (double) 6+20 ); + Tester.checkEqual(Statics.NestedInterface.InnerStaticInterfaceNoStatics.c, '6'+20); + + Tester.checkEqual(Statics.NestedInterface.InnerInterfaceNoStatics.I, new Integer(7+20)); + Tester.checkEqual(Statics.NestedInterface.InnerInterfaceNoStatics.b, (byte) 7+20 ); + Tester.checkEqual(Statics.NestedInterface.InnerInterfaceNoStatics.s, (short) 7+20 ); + Tester.checkEqual(Statics.NestedInterface.InnerInterfaceNoStatics.i, 7+20 ); + Tester.checkEqual(Statics.NestedInterface.InnerInterfaceNoStatics.l, 7+20L); + Tester.checkEqual(Statics.NestedInterface.InnerInterfaceNoStatics.f, (float) 7+20 ); + Tester.checkEqual(Statics.NestedInterface.InnerInterfaceNoStatics.d, (double) 7+20 ); + Tester.checkEqual(Statics.NestedInterface.InnerInterfaceNoStatics.c, '7'+20); + + + // --- p1.P1Statics + Tester.checkEqual(p1.P1Statics.I, new Integer(1+1)); + Tester.checkEqual(p1.P1Statics.b, (byte) 1+1 ); + Tester.checkEqual(p1.P1Statics.s, (short) 1+1 ); + Tester.checkEqual(p1.P1Statics.i, 1+1 ); + Tester.checkEqual(p1.P1Statics.l, 1+1L); + Tester.checkEqual(p1.P1Statics.f, (float) 1+1 ); + Tester.checkEqual(p1.P1Statics.d, (double) 1+1 ); + Tester.checkEqual(p1.P1Statics.c, '1'+1); + + // p1.P1Statics.NestedStaticClass + Tester.checkEqual(p1.P1Statics.NestedStaticClass.I, new Integer(2+1)); + Tester.checkEqual(p1.P1Statics.NestedStaticClass.b, (byte) 2+1 ); + Tester.checkEqual(p1.P1Statics.NestedStaticClass.s, (short) 2+1 ); + Tester.checkEqual(p1.P1Statics.NestedStaticClass.i, 2+1 ); + Tester.checkEqual(p1.P1Statics.NestedStaticClass.l, 2+1L); + Tester.checkEqual(p1.P1Statics.NestedStaticClass.f, (float) 2+1 ); + Tester.checkEqual(p1.P1Statics.NestedStaticClass.d, (double) 2+1 ); + Tester.checkEqual(p1.P1Statics.NestedStaticClass.c, '2'+1); + + Tester.checkEqual(p1.P1Statics.NestedStaticClass.InnerStaticClass.I, new Integer(3+1)); + Tester.checkEqual(p1.P1Statics.NestedStaticClass.InnerStaticClass.b, (byte) 3+1 ); + Tester.checkEqual(p1.P1Statics.NestedStaticClass.InnerStaticClass.s, (short) 3+1 ); + Tester.checkEqual(p1.P1Statics.NestedStaticClass.InnerStaticClass.i, 3+1 ); + Tester.checkEqual(p1.P1Statics.NestedStaticClass.InnerStaticClass.l, 3+1L); + Tester.checkEqual(p1.P1Statics.NestedStaticClass.InnerStaticClass.f, (float) 3+1 ); + Tester.checkEqual(p1.P1Statics.NestedStaticClass.InnerStaticClass.d, (double) 3+1 ); + Tester.checkEqual(p1.P1Statics.NestedStaticClass.InnerStaticClass.c, '3'+1); + + Tester.checkEqual(p1.P1Statics.NestedStaticClass.InnerStaticInterface.I, new Integer(4+1)); + Tester.checkEqual(p1.P1Statics.NestedStaticClass.InnerStaticInterface.b, (byte) 4+1 ); + Tester.checkEqual(p1.P1Statics.NestedStaticClass.InnerStaticInterface.s, (short) 4+1 ); + Tester.checkEqual(p1.P1Statics.NestedStaticClass.InnerStaticInterface.i, 4+1 ); + Tester.checkEqual(p1.P1Statics.NestedStaticClass.InnerStaticInterface.l, 4+1L); + Tester.checkEqual(p1.P1Statics.NestedStaticClass.InnerStaticInterface.f, (float) 4+1 ); + Tester.checkEqual(p1.P1Statics.NestedStaticClass.InnerStaticInterface.d, (double) 4+1 ); + Tester.checkEqual(p1.P1Statics.NestedStaticClass.InnerStaticInterface.c, '4'+1); + + Tester.checkEqual(p1.P1Statics.NestedStaticClass.InnerInterface.I, new Integer(5+1)); + Tester.checkEqual(p1.P1Statics.NestedStaticClass.InnerInterface.b, (byte) 5+1 ); + Tester.checkEqual(p1.P1Statics.NestedStaticClass.InnerInterface.s, (short) 5+1 ); + Tester.checkEqual(p1.P1Statics.NestedStaticClass.InnerInterface.i, 5+1 ); + Tester.checkEqual(p1.P1Statics.NestedStaticClass.InnerInterface.l, 5+1L); + Tester.checkEqual(p1.P1Statics.NestedStaticClass.InnerInterface.f, (float) 5+1 ); + Tester.checkEqual(p1.P1Statics.NestedStaticClass.InnerInterface.d, (double) 5+1 ); + Tester.checkEqual(p1.P1Statics.NestedStaticClass.InnerInterface.c, '5'+1); + + Tester.checkEqual(p1.P1Statics.NestedStaticClass.InnerStaticInterfaceNoStatics.I, new Integer(6+1)); + Tester.checkEqual(p1.P1Statics.NestedStaticClass.InnerStaticInterfaceNoStatics.b, (byte) 6+1 ); + Tester.checkEqual(p1.P1Statics.NestedStaticClass.InnerStaticInterfaceNoStatics.s, (short) 6+1 ); + Tester.checkEqual(p1.P1Statics.NestedStaticClass.InnerStaticInterfaceNoStatics.i, 6+1 ); + Tester.checkEqual(p1.P1Statics.NestedStaticClass.InnerStaticInterfaceNoStatics.l, 6+1L); + Tester.checkEqual(p1.P1Statics.NestedStaticClass.InnerStaticInterfaceNoStatics.f, (float) 6+1 ); + Tester.checkEqual(p1.P1Statics.NestedStaticClass.InnerStaticInterfaceNoStatics.d, (double) 6+1 ); + Tester.checkEqual(p1.P1Statics.NestedStaticClass.InnerStaticInterfaceNoStatics.c, '6'+1); + + Tester.checkEqual(p1.P1Statics.NestedStaticClass.InnerInterfaceNoStatics.I, new Integer(7+1)); + Tester.checkEqual(p1.P1Statics.NestedStaticClass.InnerInterfaceNoStatics.b, (byte) 7+1 ); + Tester.checkEqual(p1.P1Statics.NestedStaticClass.InnerInterfaceNoStatics.s, (short) 7+1 ); + Tester.checkEqual(p1.P1Statics.NestedStaticClass.InnerInterfaceNoStatics.i, 7+1 ); + Tester.checkEqual(p1.P1Statics.NestedStaticClass.InnerInterfaceNoStatics.l, 7+1L); + Tester.checkEqual(p1.P1Statics.NestedStaticClass.InnerInterfaceNoStatics.f, (float) 7+1 ); + Tester.checkEqual(p1.P1Statics.NestedStaticClass.InnerInterfaceNoStatics.d, (double) 7+1 ); + Tester.checkEqual(p1.P1Statics.NestedStaticClass.InnerInterfaceNoStatics.c, '7'+1); + + // p1.P1Statics.NestedStaticInterface + Tester.checkEqual(p1.P1Statics.NestedStaticInterface.I, new Integer(2+11)); + Tester.checkEqual(p1.P1Statics.NestedStaticInterface.b, (byte) 2+11 ); + Tester.checkEqual(p1.P1Statics.NestedStaticInterface.s, (short) 2+11 ); + Tester.checkEqual(p1.P1Statics.NestedStaticInterface.i, 2+11 ); + Tester.checkEqual(p1.P1Statics.NestedStaticInterface.l, 2+11L); + Tester.checkEqual(p1.P1Statics.NestedStaticInterface.f, (float) 2+11 ); + Tester.checkEqual(p1.P1Statics.NestedStaticInterface.d, (double) 2+11 ); + Tester.checkEqual(p1.P1Statics.NestedStaticInterface.c, '2'+11); + + Tester.checkEqual(p1.P1Statics.NestedStaticInterface.InnerStaticClass.I, new Integer(3+11)); + Tester.checkEqual(p1.P1Statics.NestedStaticInterface.InnerStaticClass.b, (byte) 3+11 ); + Tester.checkEqual(p1.P1Statics.NestedStaticInterface.InnerStaticClass.s, (short) 3+11 ); + Tester.checkEqual(p1.P1Statics.NestedStaticInterface.InnerStaticClass.i, 3+11 ); + Tester.checkEqual(p1.P1Statics.NestedStaticInterface.InnerStaticClass.l, 3+11L); + Tester.checkEqual(p1.P1Statics.NestedStaticInterface.InnerStaticClass.f, (float) 3+11 ); + Tester.checkEqual(p1.P1Statics.NestedStaticInterface.InnerStaticClass.d, (double) 3+11 ); + Tester.checkEqual(p1.P1Statics.NestedStaticInterface.InnerStaticClass.c, '3'+11); + + Tester.checkEqual(p1.P1Statics.NestedStaticInterface.InnerStaticInterface.I, new Integer(4+11)); + Tester.checkEqual(p1.P1Statics.NestedStaticInterface.InnerStaticInterface.b, (byte) 4+11 ); + Tester.checkEqual(p1.P1Statics.NestedStaticInterface.InnerStaticInterface.s, (short) 4+11 ); + Tester.checkEqual(p1.P1Statics.NestedStaticInterface.InnerStaticInterface.i, 4+11 ); + Tester.checkEqual(p1.P1Statics.NestedStaticInterface.InnerStaticInterface.l, 4+11L); + Tester.checkEqual(p1.P1Statics.NestedStaticInterface.InnerStaticInterface.f, (float) 4+11 ); + Tester.checkEqual(p1.P1Statics.NestedStaticInterface.InnerStaticInterface.d, (double) 4+11 ); + Tester.checkEqual(p1.P1Statics.NestedStaticInterface.InnerStaticInterface.c, '4'+11); + + Tester.checkEqual(p1.P1Statics.NestedStaticInterface.InnerInterface.I, new Integer(5+11)); + Tester.checkEqual(p1.P1Statics.NestedStaticInterface.InnerInterface.b, (byte) 5+11 ); + Tester.checkEqual(p1.P1Statics.NestedStaticInterface.InnerInterface.s, (short) 5+11 ); + Tester.checkEqual(p1.P1Statics.NestedStaticInterface.InnerInterface.i, 5+11 ); + Tester.checkEqual(p1.P1Statics.NestedStaticInterface.InnerInterface.l, 5+11L); + Tester.checkEqual(p1.P1Statics.NestedStaticInterface.InnerInterface.f, (float) 5+11 ); + Tester.checkEqual(p1.P1Statics.NestedStaticInterface.InnerInterface.d, (double) 5+11 ); + Tester.checkEqual(p1.P1Statics.NestedStaticInterface.InnerInterface.c, '5'+11); + + Tester.checkEqual(p1.P1Statics.NestedStaticInterface.InnerStaticInterfaceNoStatics.I, new Integer(6+11)); + Tester.checkEqual(p1.P1Statics.NestedStaticInterface.InnerStaticInterfaceNoStatics.b, (byte) 6+11 ); + Tester.checkEqual(p1.P1Statics.NestedStaticInterface.InnerStaticInterfaceNoStatics.s, (short) 6+11 ); + Tester.checkEqual(p1.P1Statics.NestedStaticInterface.InnerStaticInterfaceNoStatics.i, 6+11 ); + Tester.checkEqual(p1.P1Statics.NestedStaticInterface.InnerStaticInterfaceNoStatics.l, 6+11L); + Tester.checkEqual(p1.P1Statics.NestedStaticInterface.InnerStaticInterfaceNoStatics.f, (float) 6+11 ); + Tester.checkEqual(p1.P1Statics.NestedStaticInterface.InnerStaticInterfaceNoStatics.d, (double) 6+11 ); + Tester.checkEqual(p1.P1Statics.NestedStaticInterface.InnerStaticInterfaceNoStatics.c, '6'+11); + + Tester.checkEqual(p1.P1Statics.NestedStaticInterface.InnerInterfaceNoStatics.I, new Integer(7+11)); + Tester.checkEqual(p1.P1Statics.NestedStaticInterface.InnerInterfaceNoStatics.b, (byte) 7+11 ); + Tester.checkEqual(p1.P1Statics.NestedStaticInterface.InnerInterfaceNoStatics.s, (short) 7+11 ); + Tester.checkEqual(p1.P1Statics.NestedStaticInterface.InnerInterfaceNoStatics.i, 7+11 ); + Tester.checkEqual(p1.P1Statics.NestedStaticInterface.InnerInterfaceNoStatics.l, 7+11L); + Tester.checkEqual(p1.P1Statics.NestedStaticInterface.InnerInterfaceNoStatics.f, (float) 7+11 ); + Tester.checkEqual(p1.P1Statics.NestedStaticInterface.InnerInterfaceNoStatics.d, (double) 7+11 ); + Tester.checkEqual(p1.P1Statics.NestedStaticInterface.InnerInterfaceNoStatics.c, '7'+11); + + // p1.P1Statics.NestedInterface + Tester.checkEqual(p1.P1Statics.NestedInterface.I, new Integer(2+21)); + Tester.checkEqual(p1.P1Statics.NestedInterface.b, (byte) 2+21 ); + Tester.checkEqual(p1.P1Statics.NestedInterface.s, (short) 2+21 ); + Tester.checkEqual(p1.P1Statics.NestedInterface.i, 2+21 ); + Tester.checkEqual(p1.P1Statics.NestedInterface.l, 2+21L); + Tester.checkEqual(p1.P1Statics.NestedInterface.f, (float) 2+21 ); + Tester.checkEqual(p1.P1Statics.NestedInterface.d, (double) 2+21 ); + Tester.checkEqual(p1.P1Statics.NestedInterface.c, '2'+21); + + Tester.checkEqual(p1.P1Statics.NestedInterface.InnerStaticClass.I, new Integer(3+21)); + Tester.checkEqual(p1.P1Statics.NestedInterface.InnerStaticClass.b, (byte) 3+21 ); + Tester.checkEqual(p1.P1Statics.NestedInterface.InnerStaticClass.s, (short) 3+21 ); + Tester.checkEqual(p1.P1Statics.NestedInterface.InnerStaticClass.i, 3+21 ); + Tester.checkEqual(p1.P1Statics.NestedInterface.InnerStaticClass.l, 3+21L); + Tester.checkEqual(p1.P1Statics.NestedInterface.InnerStaticClass.f, (float) 3+21 ); + Tester.checkEqual(p1.P1Statics.NestedInterface.InnerStaticClass.d, (double) 3+21 ); + Tester.checkEqual(p1.P1Statics.NestedInterface.InnerStaticClass.c, '3'+21); + + Tester.checkEqual(p1.P1Statics.NestedInterface.InnerStaticInterface.I, new Integer(4+21)); + Tester.checkEqual(p1.P1Statics.NestedInterface.InnerStaticInterface.b, (byte) 4+21 ); + Tester.checkEqual(p1.P1Statics.NestedInterface.InnerStaticInterface.s, (short) 4+21 ); + Tester.checkEqual(p1.P1Statics.NestedInterface.InnerStaticInterface.i, 4+21 ); + Tester.checkEqual(p1.P1Statics.NestedInterface.InnerStaticInterface.l, 4+21L); + Tester.checkEqual(p1.P1Statics.NestedInterface.InnerStaticInterface.f, (float) 4+21 ); + Tester.checkEqual(p1.P1Statics.NestedInterface.InnerStaticInterface.d, (double) 4+21 ); + Tester.checkEqual(p1.P1Statics.NestedInterface.InnerStaticInterface.c, '4'+21); + + Tester.checkEqual(p1.P1Statics.NestedInterface.InnerInterface.I, new Integer(5+21)); + Tester.checkEqual(p1.P1Statics.NestedInterface.InnerInterface.b, (byte) 5+21 ); + Tester.checkEqual(p1.P1Statics.NestedInterface.InnerInterface.s, (short) 5+21 ); + Tester.checkEqual(p1.P1Statics.NestedInterface.InnerInterface.i, 5+21 ); + Tester.checkEqual(p1.P1Statics.NestedInterface.InnerInterface.l, 5+21L); + Tester.checkEqual(p1.P1Statics.NestedInterface.InnerInterface.f, (float) 5+21 ); + Tester.checkEqual(p1.P1Statics.NestedInterface.InnerInterface.d, (double) 5+21 ); + Tester.checkEqual(p1.P1Statics.NestedInterface.InnerInterface.c, '5'+21); + + Tester.checkEqual(p1.P1Statics.NestedInterface.InnerStaticInterfaceNoStatics.I, new Integer(6+21)); + Tester.checkEqual(p1.P1Statics.NestedInterface.InnerStaticInterfaceNoStatics.b, (byte) 6+21 ); + Tester.checkEqual(p1.P1Statics.NestedInterface.InnerStaticInterfaceNoStatics.s, (short) 6+21 ); + Tester.checkEqual(p1.P1Statics.NestedInterface.InnerStaticInterfaceNoStatics.i, 6+21 ); + Tester.checkEqual(p1.P1Statics.NestedInterface.InnerStaticInterfaceNoStatics.l, 6+21L); + Tester.checkEqual(p1.P1Statics.NestedInterface.InnerStaticInterfaceNoStatics.f, (float) 6+21 ); + Tester.checkEqual(p1.P1Statics.NestedInterface.InnerStaticInterfaceNoStatics.d, (double) 6+21 ); + Tester.checkEqual(p1.P1Statics.NestedInterface.InnerStaticInterfaceNoStatics.c, '6'+21); + + Tester.checkEqual(p1.P1Statics.NestedInterface.InnerInterfaceNoStatics.I, new Integer(7+21)); + Tester.checkEqual(p1.P1Statics.NestedInterface.InnerInterfaceNoStatics.b, (byte) 7+21 ); + Tester.checkEqual(p1.P1Statics.NestedInterface.InnerInterfaceNoStatics.s, (short) 7+21 ); + Tester.checkEqual(p1.P1Statics.NestedInterface.InnerInterfaceNoStatics.i, 7+21 ); + Tester.checkEqual(p1.P1Statics.NestedInterface.InnerInterfaceNoStatics.l, 7+21L); + Tester.checkEqual(p1.P1Statics.NestedInterface.InnerInterfaceNoStatics.f, (float) 7+21 ); + Tester.checkEqual(p1.P1Statics.NestedInterface.InnerInterfaceNoStatics.d, (double) 7+21 ); + Tester.checkEqual(p1.P1Statics.NestedInterface.InnerInterfaceNoStatics.c, '7'+21); + + + // --- p1.p2.P1P2Statics + Tester.checkEqual(p1.p2.P1P2Statics.I, new Integer(1+2)); + Tester.checkEqual(p1.p2.P1P2Statics.b, (byte) 1+2 ); + Tester.checkEqual(p1.p2.P1P2Statics.s, (short) 1+2 ); + Tester.checkEqual(p1.p2.P1P2Statics.i, 1+2 ); + Tester.checkEqual(p1.p2.P1P2Statics.l, 1+2L); + Tester.checkEqual(p1.p2.P1P2Statics.f, (float) 1+2 ); + Tester.checkEqual(p1.p2.P1P2Statics.d, (double) 1+2 ); + Tester.checkEqual(p1.p2.P1P2Statics.c, '1'+2); + + // p1.p2.P1P2Statics.NestedStaticClass + Tester.checkEqual(p1.p2.P1P2Statics.NestedStaticClass.I, new Integer(2+2)); + Tester.checkEqual(p1.p2.P1P2Statics.NestedStaticClass.b, (byte) 2+2 ); + Tester.checkEqual(p1.p2.P1P2Statics.NestedStaticClass.s, (short) 2+2 ); + Tester.checkEqual(p1.p2.P1P2Statics.NestedStaticClass.i, 2+2 ); + Tester.checkEqual(p1.p2.P1P2Statics.NestedStaticClass.l, 2+2L); + Tester.checkEqual(p1.p2.P1P2Statics.NestedStaticClass.f, (float) 2+2 ); + Tester.checkEqual(p1.p2.P1P2Statics.NestedStaticClass.d, (double) 2+2 ); + Tester.checkEqual(p1.p2.P1P2Statics.NestedStaticClass.c, '2'+2); + + Tester.checkEqual(p1.p2.P1P2Statics.NestedStaticClass.InnerStaticClass.I, new Integer(3+2)); + Tester.checkEqual(p1.p2.P1P2Statics.NestedStaticClass.InnerStaticClass.b, (byte) 3+2 ); + Tester.checkEqual(p1.p2.P1P2Statics.NestedStaticClass.InnerStaticClass.s, (short) 3+2 ); + Tester.checkEqual(p1.p2.P1P2Statics.NestedStaticClass.InnerStaticClass.i, 3+2 ); + Tester.checkEqual(p1.p2.P1P2Statics.NestedStaticClass.InnerStaticClass.l, 3+2L); + Tester.checkEqual(p1.p2.P1P2Statics.NestedStaticClass.InnerStaticClass.f, (float) 3+2 ); + Tester.checkEqual(p1.p2.P1P2Statics.NestedStaticClass.InnerStaticClass.d, (double) 3+2 ); + Tester.checkEqual(p1.p2.P1P2Statics.NestedStaticClass.InnerStaticClass.c, '3'+2); + + Tester.checkEqual(p1.p2.P1P2Statics.NestedStaticClass.InnerStaticInterface.I, new Integer(4+2)); + Tester.checkEqual(p1.p2.P1P2Statics.NestedStaticClass.InnerStaticInterface.b, (byte) 4+2 ); + Tester.checkEqual(p1.p2.P1P2Statics.NestedStaticClass.InnerStaticInterface.s, (short) 4+2 ); + Tester.checkEqual(p1.p2.P1P2Statics.NestedStaticClass.InnerStaticInterface.i, 4+2 ); + Tester.checkEqual(p1.p2.P1P2Statics.NestedStaticClass.InnerStaticInterface.l, 4+2L); + Tester.checkEqual(p1.p2.P1P2Statics.NestedStaticClass.InnerStaticInterface.f, (float) 4+2 ); + Tester.checkEqual(p1.p2.P1P2Statics.NestedStaticClass.InnerStaticInterface.d, (double) 4+2 ); + Tester.checkEqual(p1.p2.P1P2Statics.NestedStaticClass.InnerStaticInterface.c, '4'+2); + + Tester.checkEqual(p1.p2.P1P2Statics.NestedStaticClass.InnerInterface.I, new Integer(5+2)); + Tester.checkEqual(p1.p2.P1P2Statics.NestedStaticClass.InnerInterface.b, (byte) 5+2 ); + Tester.checkEqual(p1.p2.P1P2Statics.NestedStaticClass.InnerInterface.s, (short) 5+2 ); + Tester.checkEqual(p1.p2.P1P2Statics.NestedStaticClass.InnerInterface.i, 5+2 ); + Tester.checkEqual(p1.p2.P1P2Statics.NestedStaticClass.InnerInterface.l, 5+2L); + Tester.checkEqual(p1.p2.P1P2Statics.NestedStaticClass.InnerInterface.f, (float) 5+2 ); + Tester.checkEqual(p1.p2.P1P2Statics.NestedStaticClass.InnerInterface.d, (double) 5+2 ); + Tester.checkEqual(p1.p2.P1P2Statics.NestedStaticClass.InnerInterface.c, '5'+2); + + Tester.checkEqual(p1.p2.P1P2Statics.NestedStaticClass.InnerStaticInterfaceNoStatics.I, new Integer(6+2)); + Tester.checkEqual(p1.p2.P1P2Statics.NestedStaticClass.InnerStaticInterfaceNoStatics.b, (byte) 6+2 ); + Tester.checkEqual(p1.p2.P1P2Statics.NestedStaticClass.InnerStaticInterfaceNoStatics.s, (short) 6+2 ); + Tester.checkEqual(p1.p2.P1P2Statics.NestedStaticClass.InnerStaticInterfaceNoStatics.i, 6+2 ); + Tester.checkEqual(p1.p2.P1P2Statics.NestedStaticClass.InnerStaticInterfaceNoStatics.l, 6+2L); + Tester.checkEqual(p1.p2.P1P2Statics.NestedStaticClass.InnerStaticInterfaceNoStatics.f, (float) 6+2 ); + Tester.checkEqual(p1.p2.P1P2Statics.NestedStaticClass.InnerStaticInterfaceNoStatics.d, (double) 6+2 ); + Tester.checkEqual(p1.p2.P1P2Statics.NestedStaticClass.InnerStaticInterfaceNoStatics.c, '6'+2); + + Tester.checkEqual(p1.p2.P1P2Statics.NestedStaticClass.InnerInterfaceNoStatics.I, new Integer(7+2)); + Tester.checkEqual(p1.p2.P1P2Statics.NestedStaticClass.InnerInterfaceNoStatics.b, (byte) 7+2 ); + Tester.checkEqual(p1.p2.P1P2Statics.NestedStaticClass.InnerInterfaceNoStatics.s, (short) 7+2 ); + Tester.checkEqual(p1.p2.P1P2Statics.NestedStaticClass.InnerInterfaceNoStatics.i, 7+2 ); + Tester.checkEqual(p1.p2.P1P2Statics.NestedStaticClass.InnerInterfaceNoStatics.l, 7+2L); + Tester.checkEqual(p1.p2.P1P2Statics.NestedStaticClass.InnerInterfaceNoStatics.f, (float) 7+2 ); + Tester.checkEqual(p1.p2.P1P2Statics.NestedStaticClass.InnerInterfaceNoStatics.d, (double) 7+2 ); + Tester.checkEqual(p1.p2.P1P2Statics.NestedStaticClass.InnerInterfaceNoStatics.c, '7'+2); + + // p1.p2.P1P2Statics.NestedStaticInterface + Tester.checkEqual(p1.p2.P1P2Statics.NestedStaticInterface.I, new Integer(2+12)); + Tester.checkEqual(p1.p2.P1P2Statics.NestedStaticInterface.b, (byte) 2+12 ); + Tester.checkEqual(p1.p2.P1P2Statics.NestedStaticInterface.s, (short) 2+12 ); + Tester.checkEqual(p1.p2.P1P2Statics.NestedStaticInterface.i, 2+12 ); + Tester.checkEqual(p1.p2.P1P2Statics.NestedStaticInterface.l, 2+12L); + Tester.checkEqual(p1.p2.P1P2Statics.NestedStaticInterface.f, (float) 2+12 ); + Tester.checkEqual(p1.p2.P1P2Statics.NestedStaticInterface.d, (double) 2+12 ); + Tester.checkEqual(p1.p2.P1P2Statics.NestedStaticInterface.c, '2'+12); + + Tester.checkEqual(p1.p2.P1P2Statics.NestedStaticInterface.InnerStaticClass.I, new Integer(3+12)); + Tester.checkEqual(p1.p2.P1P2Statics.NestedStaticInterface.InnerStaticClass.b, (byte) 3+12 ); + Tester.checkEqual(p1.p2.P1P2Statics.NestedStaticInterface.InnerStaticClass.s, (short) 3+12 ); + Tester.checkEqual(p1.p2.P1P2Statics.NestedStaticInterface.InnerStaticClass.i, 3+12 ); + Tester.checkEqual(p1.p2.P1P2Statics.NestedStaticInterface.InnerStaticClass.l, 3+12L); + Tester.checkEqual(p1.p2.P1P2Statics.NestedStaticInterface.InnerStaticClass.f, (float) 3+12 ); + Tester.checkEqual(p1.p2.P1P2Statics.NestedStaticInterface.InnerStaticClass.d, (double) 3+12 ); + Tester.checkEqual(p1.p2.P1P2Statics.NestedStaticInterface.InnerStaticClass.c, '3'+12); + + Tester.checkEqual(p1.p2.P1P2Statics.NestedStaticInterface.InnerStaticInterface.I, new Integer(4+12)); + Tester.checkEqual(p1.p2.P1P2Statics.NestedStaticInterface.InnerStaticInterface.b, (byte) 4+12 ); + Tester.checkEqual(p1.p2.P1P2Statics.NestedStaticInterface.InnerStaticInterface.s, (short) 4+12 ); + Tester.checkEqual(p1.p2.P1P2Statics.NestedStaticInterface.InnerStaticInterface.i, 4+12 ); + Tester.checkEqual(p1.p2.P1P2Statics.NestedStaticInterface.InnerStaticInterface.l, 4+12L); + Tester.checkEqual(p1.p2.P1P2Statics.NestedStaticInterface.InnerStaticInterface.f, (float) 4+12 ); + Tester.checkEqual(p1.p2.P1P2Statics.NestedStaticInterface.InnerStaticInterface.d, (double) 4+12 ); + Tester.checkEqual(p1.p2.P1P2Statics.NestedStaticInterface.InnerStaticInterface.c, '4'+12); + + Tester.checkEqual(p1.p2.P1P2Statics.NestedStaticInterface.InnerInterface.I, new Integer(5+12)); + Tester.checkEqual(p1.p2.P1P2Statics.NestedStaticInterface.InnerInterface.b, (byte) 5+12 ); + Tester.checkEqual(p1.p2.P1P2Statics.NestedStaticInterface.InnerInterface.s, (short) 5+12 ); + Tester.checkEqual(p1.p2.P1P2Statics.NestedStaticInterface.InnerInterface.i, 5+12 ); + Tester.checkEqual(p1.p2.P1P2Statics.NestedStaticInterface.InnerInterface.l, 5+12L); + Tester.checkEqual(p1.p2.P1P2Statics.NestedStaticInterface.InnerInterface.f, (float) 5+12 ); + Tester.checkEqual(p1.p2.P1P2Statics.NestedStaticInterface.InnerInterface.d, (double) 5+12 ); + Tester.checkEqual(p1.p2.P1P2Statics.NestedStaticInterface.InnerInterface.c, '5'+12); + + Tester.checkEqual(p1.p2.P1P2Statics.NestedStaticInterface.InnerStaticInterfaceNoStatics.I, new Integer(6+12)); + Tester.checkEqual(p1.p2.P1P2Statics.NestedStaticInterface.InnerStaticInterfaceNoStatics.b, (byte) 6+12 ); + Tester.checkEqual(p1.p2.P1P2Statics.NestedStaticInterface.InnerStaticInterfaceNoStatics.s, (short) 6+12 ); + Tester.checkEqual(p1.p2.P1P2Statics.NestedStaticInterface.InnerStaticInterfaceNoStatics.i, 6+12 ); + Tester.checkEqual(p1.p2.P1P2Statics.NestedStaticInterface.InnerStaticInterfaceNoStatics.l, 6+12L); + Tester.checkEqual(p1.p2.P1P2Statics.NestedStaticInterface.InnerStaticInterfaceNoStatics.f, (float) 6+12 ); + Tester.checkEqual(p1.p2.P1P2Statics.NestedStaticInterface.InnerStaticInterfaceNoStatics.d, (double) 6+12 ); + Tester.checkEqual(p1.p2.P1P2Statics.NestedStaticInterface.InnerStaticInterfaceNoStatics.c, '6'+12); + + Tester.checkEqual(p1.p2.P1P2Statics.NestedStaticInterface.InnerInterfaceNoStatics.I, new Integer(7+12)); + Tester.checkEqual(p1.p2.P1P2Statics.NestedStaticInterface.InnerInterfaceNoStatics.b, (byte) 7+12 ); + Tester.checkEqual(p1.p2.P1P2Statics.NestedStaticInterface.InnerInterfaceNoStatics.s, (short) 7+12 ); + Tester.checkEqual(p1.p2.P1P2Statics.NestedStaticInterface.InnerInterfaceNoStatics.i, 7+12 ); + Tester.checkEqual(p1.p2.P1P2Statics.NestedStaticInterface.InnerInterfaceNoStatics.l, 7+12L); + Tester.checkEqual(p1.p2.P1P2Statics.NestedStaticInterface.InnerInterfaceNoStatics.f, (float) 7+12 ); + Tester.checkEqual(p1.p2.P1P2Statics.NestedStaticInterface.InnerInterfaceNoStatics.d, (double) 7+12 ); + Tester.checkEqual(p1.p2.P1P2Statics.NestedStaticInterface.InnerInterfaceNoStatics.c, '7'+12); + + // p1.p2.P1P2Statics.NestedInterface + Tester.checkEqual(p1.p2.P1P2Statics.NestedInterface.I, new Integer(2+22)); + Tester.checkEqual(p1.p2.P1P2Statics.NestedInterface.b, (byte) 2+22 ); + Tester.checkEqual(p1.p2.P1P2Statics.NestedInterface.s, (short) 2+22 ); + Tester.checkEqual(p1.p2.P1P2Statics.NestedInterface.i, 2+22 ); + Tester.checkEqual(p1.p2.P1P2Statics.NestedInterface.l, 2+22L); + Tester.checkEqual(p1.p2.P1P2Statics.NestedInterface.f, (float) 2+22 ); + Tester.checkEqual(p1.p2.P1P2Statics.NestedInterface.d, (double) 2+22 ); + Tester.checkEqual(p1.p2.P1P2Statics.NestedInterface.c, '2'+22); + + Tester.checkEqual(p1.p2.P1P2Statics.NestedInterface.InnerStaticClass.I, new Integer(3+22)); + Tester.checkEqual(p1.p2.P1P2Statics.NestedInterface.InnerStaticClass.b, (byte) 3+22 ); + Tester.checkEqual(p1.p2.P1P2Statics.NestedInterface.InnerStaticClass.s, (short) 3+22 ); + Tester.checkEqual(p1.p2.P1P2Statics.NestedInterface.InnerStaticClass.i, 3+22 ); + Tester.checkEqual(p1.p2.P1P2Statics.NestedInterface.InnerStaticClass.l, 3+22L); + Tester.checkEqual(p1.p2.P1P2Statics.NestedInterface.InnerStaticClass.f, (float) 3+22 ); + Tester.checkEqual(p1.p2.P1P2Statics.NestedInterface.InnerStaticClass.d, (double) 3+22 ); + Tester.checkEqual(p1.p2.P1P2Statics.NestedInterface.InnerStaticClass.c, '3'+22); + + Tester.checkEqual(p1.p2.P1P2Statics.NestedInterface.InnerStaticInterface.I, new Integer(4+22)); + Tester.checkEqual(p1.p2.P1P2Statics.NestedInterface.InnerStaticInterface.b, (byte) 4+22 ); + Tester.checkEqual(p1.p2.P1P2Statics.NestedInterface.InnerStaticInterface.s, (short) 4+22 ); + Tester.checkEqual(p1.p2.P1P2Statics.NestedInterface.InnerStaticInterface.i, 4+22 ); + Tester.checkEqual(p1.p2.P1P2Statics.NestedInterface.InnerStaticInterface.l, 4+22L); + Tester.checkEqual(p1.p2.P1P2Statics.NestedInterface.InnerStaticInterface.f, (float) 4+22 ); + Tester.checkEqual(p1.p2.P1P2Statics.NestedInterface.InnerStaticInterface.d, (double) 4+22 ); + Tester.checkEqual(p1.p2.P1P2Statics.NestedInterface.InnerStaticInterface.c, '4'+22); + + Tester.checkEqual(p1.p2.P1P2Statics.NestedInterface.InnerInterface.I, new Integer(5+22)); + Tester.checkEqual(p1.p2.P1P2Statics.NestedInterface.InnerInterface.b, (byte) 5+22 ); + Tester.checkEqual(p1.p2.P1P2Statics.NestedInterface.InnerInterface.s, (short) 5+22 ); + Tester.checkEqual(p1.p2.P1P2Statics.NestedInterface.InnerInterface.i, 5+22 ); + Tester.checkEqual(p1.p2.P1P2Statics.NestedInterface.InnerInterface.l, 5+22L); + Tester.checkEqual(p1.p2.P1P2Statics.NestedInterface.InnerInterface.f, (float) 5+22 ); + Tester.checkEqual(p1.p2.P1P2Statics.NestedInterface.InnerInterface.d, (double) 5+22 ); + Tester.checkEqual(p1.p2.P1P2Statics.NestedInterface.InnerInterface.c, '5'+22); + + Tester.checkEqual(p1.p2.P1P2Statics.NestedInterface.InnerStaticInterfaceNoStatics.I, new Integer(6+22)); + Tester.checkEqual(p1.p2.P1P2Statics.NestedInterface.InnerStaticInterfaceNoStatics.b, (byte) 6+22 ); + Tester.checkEqual(p1.p2.P1P2Statics.NestedInterface.InnerStaticInterfaceNoStatics.s, (short) 6+22 ); + Tester.checkEqual(p1.p2.P1P2Statics.NestedInterface.InnerStaticInterfaceNoStatics.i, 6+22 ); + Tester.checkEqual(p1.p2.P1P2Statics.NestedInterface.InnerStaticInterfaceNoStatics.l, 6+22L); + Tester.checkEqual(p1.p2.P1P2Statics.NestedInterface.InnerStaticInterfaceNoStatics.f, (float) 6+22 ); + Tester.checkEqual(p1.p2.P1P2Statics.NestedInterface.InnerStaticInterfaceNoStatics.d, (double) 6+22 ); + Tester.checkEqual(p1.p2.P1P2Statics.NestedInterface.InnerStaticInterfaceNoStatics.c, '6'+22); + + Tester.checkEqual(p1.p2.P1P2Statics.NestedInterface.InnerInterfaceNoStatics.I, new Integer(7+22)); + Tester.checkEqual(p1.p2.P1P2Statics.NestedInterface.InnerInterfaceNoStatics.b, (byte) 7+22 ); + Tester.checkEqual(p1.p2.P1P2Statics.NestedInterface.InnerInterfaceNoStatics.s, (short) 7+22 ); + Tester.checkEqual(p1.p2.P1P2Statics.NestedInterface.InnerInterfaceNoStatics.i, 7+22 ); + Tester.checkEqual(p1.p2.P1P2Statics.NestedInterface.InnerInterfaceNoStatics.l, 7+22L); + Tester.checkEqual(p1.p2.P1P2Statics.NestedInterface.InnerInterfaceNoStatics.f, (float) 7+22 ); + Tester.checkEqual(p1.p2.P1P2Statics.NestedInterface.InnerInterfaceNoStatics.d, (double) 7+22 ); + Tester.checkEqual(p1.p2.P1P2Statics.NestedInterface.InnerInterfaceNoStatics.c, '7'+22); + } +} diff --git a/tests/pureJava/Statics.java b/tests/pureJava/Statics.java new file mode 100644 index 000000000..63c139ca0 --- /dev/null +++ b/tests/pureJava/Statics.java @@ -0,0 +1,212 @@ +public class Statics { + + public static Integer I = new Integer(1 +0); + public static byte b = (byte) 1 +0 ; + public static short s = (short) 1 +0 ; + public static int i = (int) 1 +0 ; + public static long l = (long) 1 +0 ; + public static float f = (float) 1 +0 ; + public static double d = (double) 1 +0 ; + public static char c = (char) '1'+0 ; + + public static class NestedStaticClass { + + public static Integer I = new Integer(2 +0); + public static byte b = (byte) 2 +0 ; + public static short s = (short) 2 +0 ; + public static int i = (int) 2 +0 ; + public static long l = (long) 2 +0 ; + public static float f = (float) 2 +0 ; + public static double d = (double) 2 +0 ; + public static char c = (char) '2'+0 ; + + public static class InnerStaticClass { + public static Integer I = new Integer(3 +0); + public static byte b = (byte) 3 +0 ; + public static short s = (short) 3 +0 ; + public static int i = (int) 3 +0 ; + public static long l = (long) 3 +0 ; + public static float f = (float) 3 +0 ; + public static double d = (double) 3 +0 ; + public static char c = (char) '3'+0 ; + } + + public static interface InnerStaticInterface { + public static Integer I = new Integer(4 +0); + public static byte b = (byte) 4 +0 ; + public static short s = (short) 4 +0 ; + public static int i = (int) 4 +0 ; + public static long l = (long) 4 +0 ; + public static float f = (float) 4 +0 ; + public static double d = (double) 4 +0 ; + public static char c = (char) '4'+0 ; + } + + public interface InnerInterface { + public static Integer I = new Integer(5 +0); + public static byte b = (byte) 5 +0 ; + public static short s = (short) 5 +0 ; + public static int i = (int) 5 +0 ; + public static long l = (long) 5 +0 ; + public static float f = (float) 5 +0 ; + public static double d = (double) 5 +0 ; + public static char c = (char) '5'+0 ; + } + + public static interface InnerStaticInterfaceNoStatics { + public Integer I = new Integer(6 +0); + public byte b = (byte) 6 +0 ; + public short s = (short) 6 +0 ; + public int i = (int) 6 +0 ; + public long l = (long) 6 +0 ; + public float f = (float) 6 +0 ; + public double d = (double) 6 +0 ; + public char c = (char) '6'+0 ; + } + + public interface InnerInterfaceNoStatics { + public Integer I = new Integer(7 +0); + public byte b = (byte) 7 +0 ; + public short s = (short) 7 +0 ; + public int i = (int) 7 +0 ; + public long l = (long) 7 +0 ; + public float f = (float) 7 +0 ; + public double d = (double) 7 +0 ; + public char c = (char) '7'+0 ; + } + } + + public static interface NestedStaticInterface { + + public static Integer I = new Integer(2 +10); + public static byte b = (byte) 2 +10 ; + public static short s = (short) 2 +10 ; + public static int i = (int) 2 +10 ; + public static long l = (long) 2 +10 ; + public static float f = (float) 2 +10 ; + public static double d = (double) 2 +10 ; + public static char c = (char) '2'+10 ; + + public static class InnerStaticClass { + public static Integer I = new Integer(3 +10); + public static byte b = (byte) 3 +10 ; + public static short s = (short) 3 +10 ; + public static int i = (int) 3 +10 ; + public static long l = (long) 3 +10 ; + public static float f = (float) 3 +10 ; + public static double d = (double) 3 +10 ; + public static char c = (char) '3'+10 ; + } + + public static interface InnerStaticInterface { + public static Integer I = new Integer(4 +10); + public static byte b = (byte) 4 +10 ; + public static short s = (short) 4 +10 ; + public static int i = (int) 4 +10 ; + public static long l = (long) 4 +10 ; + public static float f = (float) 4 +10 ; + public static double d = (double) 4 +10 ; + public static char c = (char) '4'+10 ; + } + + public interface InnerInterface { + public static Integer I = new Integer(5 +10); + public static byte b = (byte) 5 +10 ; + public static short s = (short) 5 +10 ; + public static int i = (int) 5 +10 ; + public static long l = (long) 5 +10 ; + public static float f = (float) 5 +10 ; + public static double d = (double) 5 +10 ; + public static char c = (char) '5'+10 ; + } + + public static interface InnerStaticInterfaceNoStatics { + public Integer I = new Integer(6 +10); + public byte b = (byte) 6 +10 ; + public short s = (short) 6 +10 ; + public int i = (int) 6 +10 ; + public long l = (long) 6 +10 ; + public float f = (float) 6 +10 ; + public double d = (double) 6 +10 ; + public char c = (char) '6'+10 ; + } + + public interface InnerInterfaceNoStatics { + public Integer I = new Integer(7 +10); + public byte b = (byte) 7 +10 ; + public short s = (short) 7 +10 ; + public int i = (int) 7 +10 ; + public long l = (long) 7 +10 ; + public float f = (float) 7 +10 ; + public double d = (double) 7 +10 ; + public char c = (char) '7'+10 ; + } + } + + public interface NestedInterface { + + public static Integer I = new Integer(2 +20); + public static byte b = (byte) 2 +20 ; + public static short s = (short) 2 +20 ; + public static int i = (int) 2 +20 ; + public static long l = (long) 2 +20 ; + public static float f = (float) 2 +20 ; + public static double d = (double) 2 +20 ; + public static char c = (char) '2'+20 ; + + public static class InnerStaticClass { + public static Integer I = new Integer(3 +20); + public static byte b = (byte) 3 +20 ; + public static short s = (short) 3 +20 ; + public static int i = (int) 3 +20 ; + public static long l = (long) 3 +20 ; + public static float f = (float) 3 +20 ; + public static double d = (double) 3 +20 ; + public static char c = (char) '3'+20 ; + } + + public static interface InnerStaticInterface { + public static Integer I = new Integer(4 +20); + public static byte b = (byte) 4 +20 ; + public static short s = (short) 4 +20 ; + public static int i = (int) 4 +20 ; + public static long l = (long) 4 +20 ; + public static float f = (float) 4 +20 ; + public static double d = (double) 4 +20 ; + public static char c = (char) '4'+20 ; + } + + public interface InnerInterface { + public static Integer I = new Integer(5 +20); + public static byte b = (byte) 5 +20 ; + public static short s = (short) 5 +20 ; + public static int i = (int) 5 +20 ; + public static long l = (long) 5 +20 ; + public static float f = (float) 5 +20 ; + public static double d = (double) 5 +20 ; + public static char c = (char) '5'+20 ; + } + + public static interface InnerStaticInterfaceNoStatics { + public Integer I = new Integer(6 +20); + public byte b = (byte) 6 +20 ; + public short s = (short) 6 +20 ; + public int i = (int) 6 +20 ; + public long l = (long) 6 +20 ; + public float f = (float) 6 +20 ; + public double d = (double) 6 +20 ; + public char c = (char) '6'+20 ; + } + + public interface InnerInterfaceNoStatics { + public Integer I = new Integer(7 +20); + public byte b = (byte) 7 +20 ; + public short s = (short) 7 +20 ; + public int i = (int) 7 +20 ; + public long l = (long) 7 +20 ; + public float f = (float) 7 +20 ; + public double d = (double) 7 +20 ; + public char c = (char) '7'+20 ; + } + } +} diff --git a/tests/pureJava/StringFold.java b/tests/pureJava/StringFold.java new file mode 100644 index 000000000..f272b19ff --- /dev/null +++ b/tests/pureJava/StringFold.java @@ -0,0 +1,16 @@ +import org.aspectj.testing.Tester; + +public class StringFold { + static public void main(String[] args) { + Tester.checkEq("th" + "ere", "the" + "re", "\"th\" + \"ere\" == \"the\" + \"re\""); + Tester.checkEq(StringFoldHelper.xx, "th", "StringFoldHelper.xx == \"th\""); + Tester.checkEq(StringFoldHelper.xx + "ere", "there", "StringFoldHelper.xx + \"ere\" == \"there\""); + Tester.checkEq(StringFoldHelper.xx + "", StringFoldHelper.xx, "StringFoldHelper.xx + \"\" == StringFoldHelper.xx"); + + Tester.checkEq("\477", "'7", "2-digit octal escape"); + } +} + +class StringFoldHelper { + static public final String xx = "th"; +} diff --git a/tests/pureJava/SubclassAccessToEnclosingSuperClassPrivate.java b/tests/pureJava/SubclassAccessToEnclosingSuperClassPrivate.java new file mode 100644 index 000000000..bc7bd1e2a --- /dev/null +++ b/tests/pureJava/SubclassAccessToEnclosingSuperClassPrivate.java @@ -0,0 +1,152 @@ + +import org.aspectj.testing.Tester; + +/** @testcase PR#752 PUREJAVA subclass access to enclosing super class private members */ +public class SubclassAccessToEnclosingSuperClassPrivate { + public static void main (String[] args) { + ClassLoader loader = Expect.class.getClassLoader(); // load expectations.. + // nested classes + new SuperEnclosing.SubNested().doit(); + new SuperEnclosing.SubNested.SubSubNested().doit(); + new SuperEnclosing.SubNested.SubSubNestedNoExtends().doit(); + // inner (non-static nested) classes + SuperEnclosing me = new SuperEnclosing(); + me.new SubInner("main").doit(); // run directly + me.runSubInner(); // run indirectly + me.runMethodLocalInnerSubclass(); + Tester.checkAllEvents(); + } +} + +/** + * <pre> + * Access private static and instance method and field from + * - static nested subclass + * - inner (named) member subclass + * - inner method-local subclass + * - inner anonymous subclass + * other variants: + * - more deeply nested - skip over intervening superclass or enclosing class + * + * incorrect compiler error lines flagged as i-c-e + * </pre> + */ +class SuperEnclosing { + static private int staticPrivateInt = 42; + private int privateInt = 84; + static private void staticPrivateMethod(String caller) { + Tester.event(caller + " -> SuperEnclosing.staticPrivateMethod()"); + } + private void privateMethod(String caller) { + Tester.event(caller + " -> SuperEnclosing.privateMethod()"); + } + + + static class SubNested extends SuperEnclosing { + static void doit() { + String label = "SubNested.run()"; + label = label + "(" + staticPrivateInt + ")"; // i-c-e + Tester.event(label); + staticPrivateMethod(label); // i-c-e + } + static class SubSubNestedNoExtends { + static void doit() { + String label = "SubSubNestedNoExtends.run()"; + label = label + "(" + staticPrivateInt + ")"; // i-c-e + Tester.event(label); + staticPrivateMethod(label); // i-c-e + } + } + static class SubSubNested extends SuperEnclosing { + static void doit() { + String label = "SubSubNestedNoExtends.run()"; + label = label + "(" + staticPrivateInt + ")"; // i-c-e + Tester.event(label); + staticPrivateMethod(label); // i-c-e + } + } + } + + void runSubInner() { + new SubInner("Constructed in SuperEnclosing.run()").doit(); + } + + void runMethodLocalInnerSubclass() { + new SuperEnclosing() { + void doit() { + String label = "runMethodLocalInnerSubclass anonymous SuperEnclosing subclass"; + label = label + "(" + staticPrivateInt + ", " + privateInt + ")"; // i-c-e + Tester.event(label); + privateMethod(label); // i-c-e + staticPrivateMethod(label); // i-c-e + } + }.doit(); + new SuperEnclosing() { + void doit() { + new SuperEnclosing() { + void doit() { + String label = "runMethodLocalInnerSubclass anonymous SuperEnclosing (inner) subclass"; + label = label + "(" + staticPrivateInt + ", " + privateInt + ")"; // i-c-e + Tester.event(label); + privateMethod(label); // i-c-e + staticPrivateMethod(label); // i-c-e + } + }.doit(); + } + }.doit(); + } + + // ---------- non-static inner + class SubInner extends SuperEnclosing { + String name; + SubInner(String name) { this.name = name; } + void doit() { + String label = "SubInner=\"" + name + "\".run() " ; + label = label + "(" + staticPrivateInt + ", " + privateInt + ")"; // i-c-e + Tester.event(label); + privateMethod(label); // i-c-e + staticPrivateMethod(label); // i-c-e + } + class SubSubInnerNoExtends { + void doit() { + String label = "SubSubInnerNoExtends.run()"; + label = label + "(" + staticPrivateInt + ", " + privateInt + ")"; // i-c-e + Tester.event(label); + staticPrivateMethod(label); // i-c-e + privateMethod(label); // i-c-e + } + } + class SubSubInner extends SuperEnclosing { + void doit() { + String label = "SubSubInnerNoExtends.run()"; + label = label + "(" + staticPrivateInt + ", " + privateInt + ")"; // i-c-e + Tester.event(label); + staticPrivateMethod(label); // i-c-e + privateMethod(label); // i-c-e + } + } + } +} + +class Expect { + static { + Tester.expectEvent("SubNested.run()(42)"); + Tester.expectEvent("SubNested.run()(42) -> SuperEnclosing.staticPrivateMethod()"); + Tester.expectEvent("SubSubNestedNoExtends.run()(42)"); + Tester.expectEvent("SubSubNestedNoExtends.run()(42) -> SuperEnclosing.staticPrivateMethod()"); + Tester.expectEvent("SubSubNestedNoExtends.run()(42)"); + Tester.expectEvent("SubSubNestedNoExtends.run()(42) -> SuperEnclosing.staticPrivateMethod()"); + Tester.expectEvent("SubInner=\"main\".run() (42, 84)"); + Tester.expectEvent("SubInner=\"main\".run() (42, 84) -> SuperEnclosing.privateMethod()"); + Tester.expectEvent("SubInner=\"main\".run() (42, 84) -> SuperEnclosing.staticPrivateMethod()"); + Tester.expectEvent("SubInner=\"Constructed in SuperEnclosing.run()\".run() (42, 84)"); + Tester.expectEvent("SubInner=\"Constructed in SuperEnclosing.run()\".run() (42, 84) -> SuperEnclosing.privateMethod()"); + Tester.expectEvent("SubInner=\"Constructed in SuperEnclosing.run()\".run() (42, 84) -> SuperEnclosing.staticPrivateMethod()"); + Tester.expectEvent("runMethodLocalInnerSubclass anonymous SuperEnclosing subclass(42, 84)"); + Tester.expectEvent("runMethodLocalInnerSubclass anonymous SuperEnclosing subclass(42, 84) -> SuperEnclosing.privateMethod()"); + Tester.expectEvent("runMethodLocalInnerSubclass anonymous SuperEnclosing subclass(42, 84) -> SuperEnclosing.staticPrivateMethod()"); + Tester.expectEvent("runMethodLocalInnerSubclass anonymous SuperEnclosing (inner) subclass(42, 84)"); + Tester.expectEvent("runMethodLocalInnerSubclass anonymous SuperEnclosing (inner) subclass(42, 84) -> SuperEnclosing.privateMethod()"); + Tester.expectEvent("runMethodLocalInnerSubclass anonymous SuperEnclosing (inner) subclass(42, 84) -> SuperEnclosing.staticPrivateMethod()"); + } +} diff --git a/tests/pureJava/SuperIsWeird.java b/tests/pureJava/SuperIsWeird.java new file mode 100644 index 000000000..e1f7119e9 --- /dev/null +++ b/tests/pureJava/SuperIsWeird.java @@ -0,0 +1,24 @@ + +class Super { + static void goo() {} + static int getInt() { return 42; } +} + +public class SuperIsWeird extends Super { + static void foo0() { + super.goo(); // error + } + + void foo1() { + Object o = super; // error + } + + void foo2() { + super.goo(); // no error + } + + static int v0 = super.getInt(); // error + Object v1 = super; // error + int v2 = super.getInt(); // no error +} + diff --git a/tests/pureJava/SwitchBounds.java b/tests/pureJava/SwitchBounds.java new file mode 100644 index 000000000..cb52d8554 --- /dev/null +++ b/tests/pureJava/SwitchBounds.java @@ -0,0 +1,81 @@ +import org.aspectj.testing.Tester; + +public class SwitchBounds { + + static int minZero(int key) { + switch (key) { + case Integer.MIN_VALUE: + return Integer.MIN_VALUE; + case 0: + return 0; + default: + return key; + } + } + + static int maxZero(int key) { + switch (key) { + case Integer.MAX_VALUE: + return Integer.MAX_VALUE; + case 0: + return 0; + default: + return key; + } + } + + static int minMax(int key) { + switch (key) { + case Integer.MIN_VALUE: + return Integer.MIN_VALUE; + case Integer.MAX_VALUE: + return Integer.MAX_VALUE; + default: + return key; + } + } + + static int fiveMins(int key) { + switch (key) { + case Integer.MIN_VALUE: + return Integer.MIN_VALUE; + case (Integer.MIN_VALUE + 1): + return (Integer.MIN_VALUE + 1); + case (Integer.MIN_VALUE + 2): + return (Integer.MIN_VALUE + 2); + case (Integer.MIN_VALUE + 3): + return (Integer.MIN_VALUE + 3); + case (Integer.MIN_VALUE + 4): + return (Integer.MIN_VALUE + 4); + case (Integer.MIN_VALUE + 5): + return (Integer.MIN_VALUE + 5); + default: + return key; + } + } + + public static void main(String[] args) { + int MIN = Integer.MIN_VALUE; + int MAX = Integer.MAX_VALUE; + + Tester.checkEqual(MIN, minZero(MIN)); + Tester.checkEqual(0, minZero(0)); + Tester.checkEqual(37, minZero(37)); + + Tester.checkEqual(MAX, maxZero(MAX)); + Tester.checkEqual(0, maxZero(0)); + Tester.checkEqual(37, maxZero(37)); + + Tester.checkEqual(MIN, minMax(MIN)); + Tester.checkEqual(MAX, minMax(MAX)); + Tester.checkEqual(37, minMax(37)); + + Tester.checkEqual(MIN, fiveMins(MIN)); + Tester.checkEqual(MIN + 1, fiveMins(MIN + 1)); + Tester.checkEqual(MIN + 2, fiveMins(MIN + 2)); + Tester.checkEqual(MIN + 3, fiveMins(MIN + 3)); + Tester.checkEqual(MIN + 4, fiveMins(MIN + 4)); + Tester.checkEqual(MIN + 5, fiveMins(MIN + 5)); + Tester.checkEqual(MIN + 37, fiveMins(MIN + 37)); + } +} diff --git a/tests/pureJava/SwitchStmtLocals.java b/tests/pureJava/SwitchStmtLocals.java new file mode 100644 index 000000000..8e610020b --- /dev/null +++ b/tests/pureJava/SwitchStmtLocals.java @@ -0,0 +1,58 @@ +import org.aspectj.testing.Tester; + +public class SwitchStmtLocals { + public static void main(String[] args) { + new SwitchStmtLocals().realMain(args); + } + + int i = 40; + public void realMain(String[] args) { + + int val; + + val = 1; + i = 40; + switch (val) { + case 0: int i = 10; break; + case 1: val = i = 20; break; + default: val = i = 30; break; + } + Tester.checkEqual(val, 20); + Tester.checkEqual(i, 40); + + val = 1; + i = 40; + switch (val) { + case 0: int i = 10; break; + case 1: + switch (val-1) { + case 0: val = i = 20; break; + default: val = i = 30; break; + } + break; + default: i = 30; break; + } + Tester.checkEqual(val, 20); + Tester.checkEqual(i, 40); + + val = 1; + i = 40; + switch (val) { + case 0: int i = 10; break; + case 1: + switch (val-1) { + case 0: + switch (val-1) { + case 0: val = i = 20; break; + default: val = i = 30; break; + } + break; + default: val = i = 30; break; + } + break; + default: i = 30; break; + } + Tester.checkEqual(val, 20); + Tester.checkEqual(i, 40); + } +} diff --git a/tests/pureJava/TernaryAssignments.java b/tests/pureJava/TernaryAssignments.java new file mode 100644 index 000000000..27f0be46c --- /dev/null +++ b/tests/pureJava/TernaryAssignments.java @@ -0,0 +1,11 @@ +public class TernaryAssignments { + public static void main(String[] args) { + new TernaryAssignments().realMain(args); + } + public void realMain(String[] args) { + boolean t = true; + String v = v = v=v=v=v=v=v=v=v="s"; + String s = t ? s="s" : "unset"; + org.aspectj.testing.Tester.checkEqual(s, "s"); + } +} diff --git a/tests/pureJava/TernaryPrimitiveOps.java b/tests/pureJava/TernaryPrimitiveOps.java new file mode 100644 index 000000000..e97c16e2a --- /dev/null +++ b/tests/pureJava/TernaryPrimitiveOps.java @@ -0,0 +1,500 @@ +import org.aspectj.testing.Tester; +import org.aspectj.testing.Tester; +/* + * The following ternary operation wasn't working: + * + * byte b = (byte)2; + * boolean t = true; + * byte next = t ? 1: b; + */ +public class TernaryPrimitiveOps { + public static void main(String[] args) { + new TernaryPrimitiveOps().realMain(args); + } + public void realMain(String[] args) { + boolean t = true; + boolean f = false; + + final int SIZE = 200; + + byte[] _bytes = new byte [SIZE]; + char[] _chars = new char [SIZE]; + double[] _doubles = new double[SIZE]; + int[] _ints = new int [SIZE]; + float[] _floats = new float [SIZE]; + long[] _longs = new long [SIZE]; + short[] _shorts = new short [SIZE]; + + for (int i = 0; i < _bytes.length; i++) _bytes[i] = (byte)-1; + for (int i = 0; i < _chars.length; i++) _chars[i] = (char)-1; + for (int i = 0; i < _doubles.length; i++) _doubles[i] = (double)-1; + for (int i = 0; i < _ints.length; i++) _ints[i] = (int)-1; + for (int i = 0; i < _floats.length; i++) _floats[i] = (float)-1; + for (int i = 0; i < _longs.length; i++) _longs[i] = (long)-1; + for (int i = 0; i < _shorts.length; i++) _shorts[i] = (short)-1; + + int i; + + i = 0; + _bytes[i++] = (byte)(t ? 1 : 0); + _bytes[i++] = t ? (byte)1 : 0 ; + _bytes[i++] = t ? (byte)1 : (byte)0 ; + _bytes[i++] = t ? (byte)1 : (int)0 ; + _bytes[i++] = (byte)(f ? 0 : 1); + _bytes[i++] = f ? (byte)0 : 1 ; + _bytes[i++] = f ? (byte)0 : (byte)1 ; + _bytes[i++] = f ? (byte)0 : (int)1 ; + + + i = 0; + _shorts[i++] = (short)(t ? 1 : 0); + _shorts[i++] = t ? (short)1 : 0 ; + _shorts[i++] = t ? (short)1 : (short)0 ; + _shorts[i++] = t ? (short)1 : (byte)0 ; + _shorts[i++] = t ? (short)1 : (int)0 ; + _shorts[i++] = t ? (byte)1 : 0 ; + _shorts[i++] = t ? (byte)1 : (short)0 ; + _shorts[i++] = t ? (byte)1 : (byte)0 ; + _shorts[i++] = t ? (byte)1 : (int)0 ; + _shorts[i++] = (short)(f ? 0 : 1); + _shorts[i++] = f ? (short)0 : 1 ; + _shorts[i++] = f ? (short)0 : (short)1 ; + _shorts[i++] = f ? (short)0 : (byte)1 ; + _shorts[i++] = f ? (short)0 : (int)1 ; + _shorts[i++] = f ? (byte)0 : 1 ; + _shorts[i++] = f ? (byte)0 : (short)1 ; + _shorts[i++] = f ? (byte)0 : (byte)1 ; + _shorts[i++] = f ? (byte)0 : (int)1 ; + + i = 0; + _longs[i++] = t ? 1 : 0; + _longs[i++] = t ? (long)1 : 0; + _longs[i++] = t ? (long)1 : (long)0; + _longs[i++] = t ? (long)1 : (byte)0; + _longs[i++] = t ? (long)1 : (short)0; + _longs[i++] = t ? (long)1 : (char)0; + _longs[i++] = t ? (long)1 : (int)0; + _longs[i++] = t ? (byte)1 : 0; + _longs[i++] = t ? (byte)1 : (long)0; + _longs[i++] = t ? (byte)1 : (byte)0; + _longs[i++] = t ? (byte)1 : (short)0; + _longs[i++] = t ? (byte)1 : (char)0; + _longs[i++] = t ? (byte)1 : (int)0; + _longs[i++] = t ? (short)1 : 0; + _longs[i++] = t ? (short)1 : (long)0; + _longs[i++] = t ? (short)1 : (byte)0; + _longs[i++] = t ? (short)1 : (short)0; + _longs[i++] = t ? (short)1 : (char)0; + _longs[i++] = t ? (short)1 : (int)0; + _longs[i++] = t ? (char)1 : 0; + _longs[i++] = t ? (char)1 : (long)0; + _longs[i++] = t ? (char)1 : (byte)0; + _longs[i++] = t ? (char)1 : (short)0; + _longs[i++] = t ? (char)1 : (char)0; + _longs[i++] = t ? (char)1 : (int)0; + _longs[i++] = t ? (int)1 : 0; + _longs[i++] = t ? (int)1 : (long)0; + _longs[i++] = t ? (int)1 : (byte)0; + _longs[i++] = t ? (int)1 : (short)0; + _longs[i++] = t ? (int)1 : (char)0; + _longs[i++] = t ? (int)1 : (int)0; + _longs[i++] = t ? 1 : 0; + _longs[i++] = t ? 1 : (byte)0; + _longs[i++] = t ? 1 : (short)0; + _longs[i++] = t ? 1 : (char)0; + _longs[i++] = t ? 1 : (int)0; + _longs[i++] = t ? (byte)1 : 0; + _longs[i++] = t ? (short)1 : 0; + _longs[i++] = t ? (char)1 : 0; + _longs[i++] = t ? (int)1 : 0; + _longs[i++] = f ? 0 : 1; + _longs[i++] = f ? (long)0 : 1; + _longs[i++] = f ? (long)0 : (long)1; + _longs[i++] = f ? (long)0 : (byte)1; + _longs[i++] = f ? (long)0 : (short)1; + _longs[i++] = f ? (long)0 : (char)1; + _longs[i++] = f ? (long)0 : (int)1; + _longs[i++] = f ? (byte)0 : 1; + _longs[i++] = f ? (byte)0 : (long)1; + _longs[i++] = f ? (byte)0 : (byte)1; + _longs[i++] = f ? (byte)0 : (short)1; + _longs[i++] = f ? (byte)0 : (char)1; + _longs[i++] = f ? (byte)0 : (int)1; + _longs[i++] = f ? (short)0 : 1; + _longs[i++] = f ? (short)0 : (long)1; + _longs[i++] = f ? (short)0 : (byte)1; + _longs[i++] = f ? (short)0 : (short)1; + _longs[i++] = f ? (short)0 : (char)1; + _longs[i++] = f ? (short)0 : (int)1; + _longs[i++] = f ? (char)0 : 1; + _longs[i++] = f ? (char)0 : (long)1; + _longs[i++] = f ? (char)0 : (byte)1; + _longs[i++] = f ? (char)0 : (short)1; + _longs[i++] = f ? (char)0 : (char)1; + _longs[i++] = f ? (char)0 : (int)1; + _longs[i++] = f ? (int)0 : 1; + _longs[i++] = f ? (int)0 : (long)1; + _longs[i++] = f ? (int)0 : (byte)1; + _longs[i++] = f ? (int)0 : (short)1; + _longs[i++] = f ? (int)0 : (char)1; + _longs[i++] = f ? (int)0 : (int)1; + _longs[i++] = f ? 0 : 1; + _longs[i++] = f ? 0 : (byte)1; + _longs[i++] = f ? 0 : (short)1; + _longs[i++] = f ? 0 : (char)1; + _longs[i++] = f ? 0 : (int)1; + _longs[i++] = f ? (byte)0 : 1; + _longs[i++] = f ? (short)0 : 1; + _longs[i++] = f ? (char)0 : 1; + _longs[i++] = f ? (int)0 : 1; + + i = 0; + _ints[i++] = t ? 1 : 0; + _ints[i++] = t ? (int)1 : 0; + _ints[i++] = t ? (int)1 : (int)0; + _ints[i++] = t ? (int)1 : (byte)0; + _ints[i++] = t ? (int)1 : (short)0; + _ints[i++] = t ? (int)1 : (char)0; + _ints[i++] = t ? (byte)1 : 0; + _ints[i++] = t ? (byte)1 : (byte)0; + _ints[i++] = t ? (byte)1 : (short)0; + _ints[i++] = t ? (byte)1 : (char)0; + _ints[i++] = t ? (byte)1 : (int)0; + _ints[i++] = t ? (short)1 : 0; + _ints[i++] = t ? (short)1 : (byte)0; + _ints[i++] = t ? (short)1 : (short)0; + _ints[i++] = t ? (short)1 : (char)0; + _ints[i++] = t ? (short)1 : (int)0; + _ints[i++] = t ? (char)1 : 0; + _ints[i++] = t ? (char)1 : (byte)0; + _ints[i++] = t ? (char)1 : (short)0; + _ints[i++] = t ? (char)1 : (char)0; + _ints[i++] = t ? (char)1 : (int)0; + _ints[i++] = t ? (int)1 : 0; + _ints[i++] = t ? (int)1 : (byte)0; + _ints[i++] = t ? (int)1 : (short)0; + _ints[i++] = t ? (int)1 : (char)0; + _ints[i++] = t ? (int)1 : (int)0; + _ints[i++] = t ? 1 : (byte)0; + _ints[i++] = t ? 1 : (short)0; + _ints[i++] = t ? 1 : (char)0; + _ints[i++] = t ? (byte)1 : 0; + _ints[i++] = t ? (short)1 : 0; + _ints[i++] = t ? (char)1 : 0; + _ints[i++] = f ? 0 : 1; + _ints[i++] = f ? (int)0 : 1; + _ints[i++] = f ? (int)0 : (int)1; + _ints[i++] = f ? (int)0 : (byte)1; + _ints[i++] = f ? (int)0 : (short)1; + _ints[i++] = f ? (int)0 : (char)1; + _ints[i++] = f ? (byte)0 : 1; + _ints[i++] = f ? (byte)0 : (byte)1; + _ints[i++] = f ? (byte)0 : (short)1; + _ints[i++] = f ? (byte)0 : (char)1; + _ints[i++] = f ? (byte)0 : (int)1; + _ints[i++] = f ? (short)0 : 1; + _ints[i++] = f ? (short)0 : (byte)1; + _ints[i++] = f ? (short)0 : (short)1; + _ints[i++] = f ? (short)0 : (char)1; + _ints[i++] = f ? (short)0 : (int)1; + _ints[i++] = f ? (char)0 : 1; + _ints[i++] = f ? (char)0 : (byte)1; + _ints[i++] = f ? (char)0 : (short)1; + _ints[i++] = f ? (char)0 : (char)1; + _ints[i++] = f ? (char)0 : (int)1; + _ints[i++] = f ? (int)0 : 1; + _ints[i++] = f ? (int)0 : (byte)1; + _ints[i++] = f ? (int)0 : (short)1; + _ints[i++] = f ? (int)0 : (char)1; + _ints[i++] = f ? (int)0 : (int)1; + _ints[i++] = f ? 0 : (byte)1; + _ints[i++] = f ? 0 : (short)1; + _ints[i++] = f ? 0 : (char)1; + _ints[i++] = f ? (byte)0 : 1; + _ints[i++] = f ? (short)0 : 1; + _ints[i++] = f ? (char)0 : 1; + + i = 0; + _floats[i++] = t ? 1 : 0; + _floats[i++] = t ? 1 : (byte)0; + _floats[i++] = t ? 1 : (short)0; + _floats[i++] = t ? 1 : (char)0; + _floats[i++] = t ? 1 : (int)0; + _floats[i++] = t ? 1 : (long)0; + _floats[i++] = t ? 1 : (float)0; + _floats[i++] = t ? (float)1 : 0; + _floats[i++] = t ? (float)1 : (byte)0; + _floats[i++] = t ? (float)1 : (short)0; + _floats[i++] = t ? (float)1 : (char)0; + _floats[i++] = t ? (float)1 : (int)0; + _floats[i++] = t ? (float)1 : (long)0; + _floats[i++] = t ? (float)1 : (float)0; + _floats[i++] = t ? (byte)1 : 0; + _floats[i++] = t ? (byte)1 : (byte)0; + _floats[i++] = t ? (byte)1 : (short)0; + _floats[i++] = t ? (byte)1 : (char)0; + _floats[i++] = t ? (byte)1 : (int)0; + _floats[i++] = t ? (byte)1 : (long)0; + _floats[i++] = t ? (byte)1 : (float)0; + _floats[i++] = t ? (short)1 : 0; + _floats[i++] = t ? (short)1 : (byte)0; + _floats[i++] = t ? (short)1 : (short)0; + _floats[i++] = t ? (short)1 : (char)0; + _floats[i++] = t ? (short)1 : (int)0; + _floats[i++] = t ? (short)1 : (long)0; + _floats[i++] = t ? (short)1 : (float)0; + _floats[i++] = t ? (char)1 : 0; + _floats[i++] = t ? (char)1 : (byte)0; + _floats[i++] = t ? (char)1 : (short)0; + _floats[i++] = t ? (char)1 : (char)0; + _floats[i++] = t ? (char)1 : (int)0; + _floats[i++] = t ? (char)1 : (long)0; + _floats[i++] = t ? (char)1 : (float)0; + _floats[i++] = t ? (int)1 : 0; + _floats[i++] = t ? (int)1 : (byte)0; + _floats[i++] = t ? (int)1 : (short)0; + _floats[i++] = t ? (int)1 : (char)0; + _floats[i++] = t ? (int)1 : (int)0; + _floats[i++] = t ? (int)1 : (long)0; + _floats[i++] = t ? (int)1 : (float)0; + _floats[i++] = t ? (long)1 : 0; + _floats[i++] = t ? (long)1 : (byte)0; + _floats[i++] = t ? (long)1 : (short)0; + _floats[i++] = t ? (long)1 : (char)0; + _floats[i++] = t ? (long)1 : (int)0; + _floats[i++] = t ? (long)1 : (long)0; + _floats[i++] = t ? (long)1 : (float)0; + _floats[i++] = f ? 0 : 1; + _floats[i++] = f ? 0 : (byte)1; + _floats[i++] = f ? 0 : (short)1; + _floats[i++] = f ? 0 : (char)1; + _floats[i++] = f ? 0 : (int)1; + _floats[i++] = f ? 0 : (long)1; + _floats[i++] = f ? 0 : (float)1; + _floats[i++] = f ? (float)0 : 1; + _floats[i++] = f ? (float)0 : (byte)1; + _floats[i++] = f ? (float)0 : (short)1; + _floats[i++] = f ? (float)0 : (char)1; + _floats[i++] = f ? (float)0 : (int)1; + _floats[i++] = f ? (float)0 : (long)1; + _floats[i++] = f ? (float)0 : (float)1; + _floats[i++] = f ? (byte)0 : 1; + _floats[i++] = f ? (byte)0 : (byte)1; + _floats[i++] = f ? (byte)0 : (short)1; + _floats[i++] = f ? (byte)0 : (char)1; + _floats[i++] = f ? (byte)0 : (int)1; + _floats[i++] = f ? (byte)0 : (long)1; + _floats[i++] = f ? (byte)0 : (float)1; + _floats[i++] = f ? (short)0 : 1; + _floats[i++] = f ? (short)0 : (byte)1; + _floats[i++] = f ? (short)0 : (short)1; + _floats[i++] = f ? (short)0 : (char)1; + _floats[i++] = f ? (short)0 : (int)1; + _floats[i++] = f ? (short)0 : (long)1; + _floats[i++] = f ? (short)0 : (float)1; + _floats[i++] = f ? (char)0 : 1; + _floats[i++] = f ? (char)0 : (byte)1; + _floats[i++] = f ? (char)0 : (short)1; + _floats[i++] = f ? (char)0 : (char)1; + _floats[i++] = f ? (char)0 : (int)1; + _floats[i++] = f ? (char)0 : (long)1; + _floats[i++] = f ? (char)0 : (float)1; + _floats[i++] = f ? (int)0 : 1; + _floats[i++] = f ? (int)0 : (byte)1; + _floats[i++] = f ? (int)0 : (short)1; + _floats[i++] = f ? (int)0 : (char)1; + _floats[i++] = f ? (int)0 : (int)1; + _floats[i++] = f ? (int)0 : (long)1; + _floats[i++] = f ? (int)0 : (float)1; + _floats[i++] = f ? (long)0 : 1; + _floats[i++] = f ? (long)0 : (byte)1; + _floats[i++] = f ? (long)0 : (short)1; + _floats[i++] = f ? (long)0 : (char)1; + _floats[i++] = f ? (long)0 : (int)1; + _floats[i++] = f ? (long)0 : (long)1; + _floats[i++] = f ? (long)0 : (float)1; + + i = 0; + _doubles[i++] = t ? 1 : 0; + _doubles[i++] = t ? 1 : (byte)0; + _doubles[i++] = t ? 1 : (short)0; + _doubles[i++] = t ? 1 : (char)0; + _doubles[i++] = t ? 1 : (int)0; + _doubles[i++] = t ? 1 : (long)0; + _doubles[i++] = t ? 1 : (float)0; + _doubles[i++] = t ? 1 : (double)0; + _doubles[i++] = t ? (double)1 : 0; + _doubles[i++] = t ? (double)1 : (byte)0; + _doubles[i++] = t ? (double)1 : (short)0; + _doubles[i++] = t ? (double)1 : (char)0; + _doubles[i++] = t ? (double)1 : (int)0; + _doubles[i++] = t ? (double)1 : (long)0; + _doubles[i++] = t ? (double)1 : (float)0; + _doubles[i++] = t ? (double)1 : (double)0; + _doubles[i++] = t ? (byte)1 : 0; + _doubles[i++] = t ? (byte)1 : (byte)0; + _doubles[i++] = t ? (byte)1 : (short)0; + _doubles[i++] = t ? (byte)1 : (char)0; + _doubles[i++] = t ? (byte)1 : (int)0; + _doubles[i++] = t ? (byte)1 : (long)0; + _doubles[i++] = t ? (byte)1 : (float)0; + _doubles[i++] = t ? (byte)1 : (double)0; + _doubles[i++] = t ? (short)1 : 0; + _doubles[i++] = t ? (short)1 : (byte)0; + _doubles[i++] = t ? (short)1 : (short)0; + _doubles[i++] = t ? (short)1 : (char)0; + _doubles[i++] = t ? (short)1 : (int)0; + _doubles[i++] = t ? (short)1 : (long)0; + _doubles[i++] = t ? (short)1 : (float)0; + _doubles[i++] = t ? (short)1 : (double)0; + _doubles[i++] = t ? (char)1 : 0; + _doubles[i++] = t ? (char)1 : (byte)0; + _doubles[i++] = t ? (char)1 : (short)0; + _doubles[i++] = t ? (char)1 : (char)0; + _doubles[i++] = t ? (char)1 : (int)0; + _doubles[i++] = t ? (char)1 : (long)0; + _doubles[i++] = t ? (char)1 : (float)0; + _doubles[i++] = t ? (char)1 : (double)0; + _doubles[i++] = t ? (int)1 : 0; + _doubles[i++] = t ? (int)1 : (byte)0; + _doubles[i++] = t ? (int)1 : (short)0; + _doubles[i++] = t ? (int)1 : (char)0; + _doubles[i++] = t ? (int)1 : (int)0; + _doubles[i++] = t ? (int)1 : (long)0; + _doubles[i++] = t ? (int)1 : (float)0; + _doubles[i++] = t ? (int)1 : (double)0; + _doubles[i++] = t ? (long)1 : 0; + _doubles[i++] = t ? (long)1 : (byte)0; + _doubles[i++] = t ? (long)1 : (short)0; + _doubles[i++] = t ? (long)1 : (char)0; + _doubles[i++] = t ? (long)1 : (int)0; + _doubles[i++] = t ? (long)1 : (long)0; + _doubles[i++] = t ? (long)1 : (float)0; + _doubles[i++] = t ? (long)1 : (double)0; + _doubles[i++] = t ? (float)1 : 0; + _doubles[i++] = t ? (float)1 : (byte)0; + _doubles[i++] = t ? (float)1 : (short)0; + _doubles[i++] = t ? (float)1 : (char)0; + _doubles[i++] = t ? (float)1 : (int)0; + _doubles[i++] = t ? (float)1 : (long)0; + _doubles[i++] = t ? (float)1 : (float)0; + _doubles[i++] = t ? (float)1 : (double)0; + _doubles[i++] = f ? 0 : 1; + _doubles[i++] = f ? 0 : (byte)1; + _doubles[i++] = f ? 0 : (short)1; + _doubles[i++] = f ? 0 : (char)1; + _doubles[i++] = f ? 0 : (int)1; + _doubles[i++] = f ? 0 : (long)1; + _doubles[i++] = f ? 0 : (float)1; + _doubles[i++] = f ? 0 : (double)1; + _doubles[i++] = f ? (double)0 : 1; + _doubles[i++] = f ? (double)0 : (byte)1; + _doubles[i++] = f ? (double)0 : (short)1; + _doubles[i++] = f ? (double)0 : (char)1; + _doubles[i++] = f ? (double)0 : (int)1; + _doubles[i++] = f ? (double)0 : (long)1; + _doubles[i++] = f ? (double)0 : (float)1; + _doubles[i++] = f ? (double)0 : (double)1; + _doubles[i++] = f ? (byte)0 : 1; + _doubles[i++] = f ? (byte)0 : (byte)1; + _doubles[i++] = f ? (byte)0 : (short)1; + _doubles[i++] = f ? (byte)0 : (char)1; + _doubles[i++] = f ? (byte)0 : (int)1; + _doubles[i++] = f ? (byte)0 : (long)1; + _doubles[i++] = f ? (byte)0 : (float)1; + _doubles[i++] = f ? (byte)0 : (double)1; + _doubles[i++] = f ? (short)0 : 1; + _doubles[i++] = f ? (short)0 : (byte)1; + _doubles[i++] = f ? (short)0 : (short)1; + _doubles[i++] = f ? (short)0 : (char)1; + _doubles[i++] = f ? (short)0 : (int)1; + _doubles[i++] = f ? (short)0 : (long)1; + _doubles[i++] = f ? (short)0 : (float)1; + _doubles[i++] = f ? (short)0 : (double)1; + _doubles[i++] = f ? (char)0 : 1; + _doubles[i++] = f ? (char)0 : (byte)1; + _doubles[i++] = f ? (char)0 : (short)1; + _doubles[i++] = f ? (char)0 : (char)1; + _doubles[i++] = f ? (char)0 : (int)1; + _doubles[i++] = f ? (char)0 : (long)1; + _doubles[i++] = f ? (char)0 : (float)1; + _doubles[i++] = f ? (char)0 : (double)1; + _doubles[i++] = f ? (int)0 : 1; + _doubles[i++] = f ? (int)0 : (byte)1; + _doubles[i++] = f ? (int)0 : (short)1; + _doubles[i++] = f ? (int)0 : (char)1; + _doubles[i++] = f ? (int)0 : (int)1; + _doubles[i++] = f ? (int)0 : (long)1; + _doubles[i++] = f ? (int)0 : (float)1; + _doubles[i++] = f ? (int)0 : (double)1; + _doubles[i++] = f ? (long)0 : 1; + _doubles[i++] = f ? (long)0 : (byte)1; + _doubles[i++] = f ? (long)0 : (short)1; + _doubles[i++] = f ? (long)0 : (char)1; + _doubles[i++] = f ? (long)0 : (int)1; + _doubles[i++] = f ? (long)0 : (long)1; + _doubles[i++] = f ? (long)0 : (float)1; + _doubles[i++] = f ? (long)0 : (double)1; + _doubles[i++] = f ? (float)0 : 1; + _doubles[i++] = f ? (float)0 : (byte)1; + _doubles[i++] = f ? (float)0 : (short)1; + _doubles[i++] = f ? (float)0 : (char)1; + _doubles[i++] = f ? (float)0 : (int)1; + _doubles[i++] = f ? (float)0 : (long)1; + _doubles[i++] = f ? (float)0 : (float)1; + _doubles[i++] = f ? (float)0 : (double)1; + + for (int _i = 0; _i < _bytes.length; _i++) { + if (_bytes[_i] != (byte)-1) { + Tester.check(_bytes[_i] == (byte)1, + _bytes[_i] + " != 1"); + } + } + for (int _i = 0; _i < _chars.length; _i++) { + if (_chars[_i] != (char)-1) { + Tester.check(_chars[_i] == (char)1, + _chars[_i] + " != 1"); + } + } + for (int _i = 0; _i < _doubles.length; _i++) { + if (_doubles[_i] != (double)-1) { + Tester.check(_doubles[_i] == (double)1, + _doubles[_i] + " != 1"); + } + } + for (int _i = 0; _i < _ints.length; _i++) { + if (_ints[_i] != (int)-1) { + Tester.check(_ints[_i] == (int)1, + _ints[_i] + " != 1"); + } + } + for (int _i = 0; _i < _floats.length; _i++) { + if (_floats[_i] != (float)-1) { + Tester.check(_floats[_i] == (float)1, + _floats[_i] + " != 1"); + } + } + for (int _i = 0; _i < _longs.length; _i++) { + if (_longs[_i] != (long)-1) { + Tester.check(_longs[_i] == (long)1, + _longs[_i] + " != 1"); + } + } + for (int _i = 0; _i < _shorts.length; _i++) { + if (_shorts[_i] != (short)-1) { + Tester.check(_shorts[_i] == (short)1, + _shorts[_i] + " != 1"); + } + } + + /* +byte +char +double +int +float +long +short + */ + } +} diff --git a/tests/pureJava/TriTestMethodLookup.java b/tests/pureJava/TriTestMethodLookup.java new file mode 100644 index 000000000..43a10f536 --- /dev/null +++ b/tests/pureJava/TriTestMethodLookup.java @@ -0,0 +1,20 @@ +import org.aspectj.testing.Tester; + +class TriTestMethodLookup { + static String foo(byte b) { return "byte"; } + static String foo(short s) { return "short"; } + + static final int byteAsInt = 127; + static final int shortAsInt = 128; + + static byte byteType = 0; + static short shortType = 0; + static boolean notTrue = false; + + public static void main(String[] args) { + + Tester.checkEqual(foo(notTrue ? byteType : byteAsInt), "byte", "lub(byte, 127) --> byte"); + Tester.checkEqual(foo(notTrue ? shortType : shortAsInt),"short", "lub(short, 128) --> short"); + } +} + diff --git a/tests/pureJava/TriTestTypecheck.java b/tests/pureJava/TriTestTypecheck.java new file mode 100644 index 000000000..df257d818 --- /dev/null +++ b/tests/pureJava/TriTestTypecheck.java @@ -0,0 +1,100 @@ +class A {} +interface G {} +class E extends A implements G {} + +public class TriTestTypecheck { + + public static void main(String[] args) {} + + void byteCall(byte b) {} + void shortCall(short s) {} + void charCall(char c) {} + void intCall(int i) {} + void longCall(long l) {} + void floatCall(float f) {} + void doubleCall(double d) {} + + void booleanCall(boolean t) {} + + void aCall(A a) {} + void eCall(E e) {} + void gCall(G g) {} + + void foo(boolean t, byte b, short s, char c, int i, long l, float f, double d, A a, E e, G g) { + + byteCall(t ? 37 : b); + byteCall(t ? b : 37); + byteCall(t ? b : b); + + shortCall(t ? 37 : s); + shortCall(t ? s : 37); + shortCall(t ? b : s); + shortCall(t ? s : b); + shortCall(t ? s : s); + + charCall(t ? 37 : c); + charCall(t ? c : 37); + charCall(t ? c : c); + + intCall(t ? 257 : b); + intCall(t ? b : 257); + intCall(t ? 65537 : s); + intCall(t ? s : 65537); + intCall(t ? -1 : c); + intCall(t ? c : -1); + intCall(t ? i : i); + + longCall(t ? l : b); + longCall(t ? b : l); + longCall(t ? l : s); + longCall(t ? s : l); + longCall(t ? l : c); + longCall(t ? c : l); + longCall(t ? l : i); + longCall(t ? i : l); + longCall(t ? l : l); + + floatCall(t ? f : b); + floatCall(t ? b : f); + floatCall(t ? f : s); + floatCall(t ? s : f); + floatCall(t ? f : c); + floatCall(t ? c : f); + floatCall(t ? f : i); + floatCall(t ? i : f); + floatCall(t ? f : l); + floatCall(t ? l : f); + floatCall(t ? f : f); + + doubleCall(t ? d : b); + doubleCall(t ? b : d); + doubleCall(t ? d : s); + doubleCall(t ? s : d); + doubleCall(t ? d : c); + doubleCall(t ? c : d); + doubleCall(t ? d : i); + doubleCall(t ? i : d); + doubleCall(t ? d : l); + doubleCall(t ? l : d); + doubleCall(t ? d : f); + doubleCall(t ? f : d); + doubleCall(t ? d : d); + + booleanCall(t ? t : t); + + aCall(t ? a : null); + aCall(t ? null : a); + aCall(t ? a : e); + aCall(t ? e : a); + aCall(t ? a : a); + + gCall(t ? g : null); + gCall(t ? null : g); + gCall(t ? g : e); + gCall(t ? e : g); + gCall(t ? g : g); + + eCall(t ? e : e); + } +} + diff --git a/tests/pureJava/TryBlockRequiredCE.java b/tests/pureJava/TryBlockRequiredCE.java new file mode 100644 index 000000000..e45178974 --- /dev/null +++ b/tests/pureJava/TryBlockRequiredCE.java @@ -0,0 +1,10 @@ + +/** @testcase PUREJAVA try requires block JLS 14.19 */ +public class TryBlockRequiredCE { + void method() { + int f = 0; + try f = 2; catch(Error e) {} // CE 6 { expected, catch w/o try + try int i = 0; catch(Error e) {} // CE 7 { expected, catch w/o try + try f++; catch(Error e) {} // CE 8 { expected, catch w/o try + } +} diff --git a/tests/pureJava/TryCatchFinally.java b/tests/pureJava/TryCatchFinally.java new file mode 100644 index 000000000..5efd434f5 --- /dev/null +++ b/tests/pureJava/TryCatchFinally.java @@ -0,0 +1,86 @@ +import org.aspectj.testing.Tester; + +public class TryCatchFinally { + public static void main(String[] args) { + Tester.checkEqual(m1(), "good"); + Tester.checkEqual(m2(), "good"); + Tester.checkEqual(m3(), "good"); + + try { + m1v(); + } catch (RuntimeException re) { + Tester.event("main-caught"); + } + Tester.checkAndClearEvents(new String[] { + "caught", "finally", "main-caught"} ); + try { + m2v(); + } catch (RuntimeException re) { + Tester.event("main-caught"); + } + Tester.checkAndClearEvents(new String[] { + "caught", "finally", "main-caught"} ); + + m3v(); + Tester.checkAndClearEvents(new String[] { + "caught", "finally"} ); + } + + public static String m1() { + try { + throw new RuntimeException("hi"); + } catch (RuntimeException er) { + throw er; + } finally { + return "good"; + } + } + public static String m2() { + try { + return m1() + "XXX"; + } catch (RuntimeException er) { + throw er; + } finally { + return "good"; + } + } + public static String m3() { + try { + throw new RuntimeException("hi"); + } catch (RuntimeException er) { + return "bad-c"; + } finally { + return "good"; + } + } + public static void m1v() { + try { + throw new RuntimeException("hi"); + } catch (RuntimeException er) { + Tester.event("caught"); + throw er; + } finally { + Tester.event("finally"); + } + } + public static void m2v() { + try { + throw new RuntimeException("hi"); + } catch (RuntimeException er) { + Tester.event("caught"); + throw er; + } finally { + Tester.event("finally"); + } + } + public static void m3v() { + try { + throw new RuntimeException("hi"); + } catch (RuntimeException er) { + Tester.event("caught"); + return; + } finally { + Tester.event("finally"); + } + } +} diff --git a/tests/pureJava/TryWorksLikeEnvironment.java b/tests/pureJava/TryWorksLikeEnvironment.java new file mode 100644 index 000000000..c166f84c3 --- /dev/null +++ b/tests/pureJava/TryWorksLikeEnvironment.java @@ -0,0 +1,17 @@ +import java.io.*; + +public class TryWorksLikeEnvironment { + static int i; + public static void main(String[] args) { + try { + foo(); + try { + i++; + } finally { + i++; + } + } catch (FileNotFoundException e) { + } + } + static void foo() throws FileNotFoundException {} +} diff --git a/tests/pureJava/TypeExprErrors.java b/tests/pureJava/TypeExprErrors.java new file mode 100644 index 000000000..b11afbf0e --- /dev/null +++ b/tests/pureJava/TypeExprErrors.java @@ -0,0 +1,50 @@ +// errors on lines: +// 10 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 36 37 + +public class TypeExprErrors { + static String s; + static boolean b; + static A a; + + TypeExprErrors() { + this(A); + } + + TypeExprErrors(Object o) { + } + + static { + s += A; + a = A; + f(A); + f((A) A); + f(b ? A : a); + f(b ? a : A); + new TypeExprErrors(A); + ff(a == A); + ff(A == a); + ff(A != a); + ff(a != A); + ff(A != null); + ff(null != A); + ff(A == null); + ff(null == A); + ff(A instanceof A); + f(new A[] { A }); + (A).m(); + (A).sm(); // not actually an error + f(s + A); + f(A + s); + } + + static void f(Object o) { + } + static void ff(boolean b) { + } +} + +class A { + void m() {} + static void sm() {} +} + diff --git a/tests/pureJava/UnderIfFalse.java b/tests/pureJava/UnderIfFalse.java new file mode 100644 index 000000000..2e905f362 --- /dev/null +++ b/tests/pureJava/UnderIfFalse.java @@ -0,0 +1,14 @@ +// modeled on jacks 16.2.7-final-4: A final variable +// must be definitely unassigned if it +// is to be assigned inside an if (false) block. +// if false is no protection for evildoers + +public class UnderIfFalse { + static int foo() { return 0; } + static final int val = foo(); + public static void main(String[] args) { + if (false) { + val = 1; + } + } +} diff --git a/tests/pureJava/VariousConstructors.java b/tests/pureJava/VariousConstructors.java new file mode 100644 index 000000000..20b2ab46b --- /dev/null +++ b/tests/pureJava/VariousConstructors.java @@ -0,0 +1,12 @@ +import org.aspectj.testing.Tester; + +import java.awt.Component; + +public class VariousConstructors { + public static void main(String[] args) { + Component c = new Component() {}; + AbstractC ac = new AbstractC() {}; + } +} + +abstract class AbstractC {} diff --git a/tests/pureJava/abstractInner/C.java b/tests/pureJava/abstractInner/C.java new file mode 100644 index 000000000..31aac5c9b --- /dev/null +++ b/tests/pureJava/abstractInner/C.java @@ -0,0 +1,9 @@ + +public class C extends pkg.A { + void xxx() { + new B("hiya") {}; + } + public static void main(String[] args) { + new C().xxx(); + } +} diff --git a/tests/pureJava/abstractInner/pkg/A.java b/tests/pureJava/abstractInner/pkg/A.java new file mode 100644 index 000000000..f4374d21d --- /dev/null +++ b/tests/pureJava/abstractInner/pkg/A.java @@ -0,0 +1,7 @@ +package pkg; + +public class A { + public abstract class B { + public B(String x) {} + } +} diff --git a/tests/pureJava/anonInnerClass/Driver.java b/tests/pureJava/anonInnerClass/Driver.java new file mode 100644 index 000000000..f278f4b17 --- /dev/null +++ b/tests/pureJava/anonInnerClass/Driver.java @@ -0,0 +1,32 @@ + + +import org.aspectj.testing.Tester; +import java.util.Iterator; + +// PR#294 anonymous inner class + +public class Driver { + + public static void main(String[] args){ + C c = new C(); + String s = (String)c.result(); + Tester.checkEqual(s, "-anon", ""); + } +} + +class C { + public String result() { + return getIt(new Iterator() { + public Object next() { + return "-anon"; + } + public boolean hasNext() { return true; } + public void remove() {} + }); + } + + public String getIt(Iterator u) { + return (String)u.next(); + } +} + diff --git a/tests/pureJava/anotherPackage/AnotherPackageInterface.java b/tests/pureJava/anotherPackage/AnotherPackageInterface.java new file mode 100644 index 000000000..d83bab058 --- /dev/null +++ b/tests/pureJava/anotherPackage/AnotherPackageInterface.java @@ -0,0 +1,5 @@ +package anotherPackage; + +public interface AnotherPackageInterface { + static class Inner {} +} diff --git a/tests/pureJava/circle/Test1CF.java b/tests/pureJava/circle/Test1CF.java new file mode 100644 index 000000000..b33e9d3d1 --- /dev/null +++ b/tests/pureJava/circle/Test1CF.java @@ -0,0 +1,17 @@ +package circle; + +public class Test1CF {} + + +class Base { + public interface I extends IBottom {} //CE cyclic inheritance +} + +class Type { + public interface Reflexive { + } +} + +interface DerivedI extends Base.I, Type.Reflexive {} + +interface IBottom extends DerivedI {} diff --git a/tests/pureJava/circle/Test1CP.java b/tests/pureJava/circle/Test1CP.java new file mode 100644 index 000000000..19e00d5b2 --- /dev/null +++ b/tests/pureJava/circle/Test1CP.java @@ -0,0 +1,19 @@ +package circle; + +public class Test1CP { + public static void main(String[] args) { + new Base(); + } +} + + +class Base implements Type.Reflexive { +} + +class Type { + public interface Reflexive { + } + + public class Concrete extends Base { + } +} diff --git a/tests/pureJava/circle/Test2CF.java b/tests/pureJava/circle/Test2CF.java new file mode 100644 index 000000000..3e96b76a3 --- /dev/null +++ b/tests/pureJava/circle/Test2CF.java @@ -0,0 +1,15 @@ +package circle; + +public class Test2CF {} + + +class Base implements Type.Reflexive { //CE cyclic inheritance + public interface I {} +} + +class Type extends Derived { + public interface Reflexive { + } +} + +class Derived extends Base {} diff --git a/tests/pureJava/circle/Test2CP.java b/tests/pureJava/circle/Test2CP.java new file mode 100644 index 000000000..14b0fc763 --- /dev/null +++ b/tests/pureJava/circle/Test2CP.java @@ -0,0 +1,20 @@ +package circle; + +public class Test2CP { + public static void main(String[] args) { + new Base(); + } +} + + +class Base implements Type.Reflexive { + public interface I {} +} + +class Type { + public interface Reflexive { + } + + public class Concrete implements Base.I { + } +} diff --git a/tests/pureJava/conflictingPackageNames/Java.java b/tests/pureJava/conflictingPackageNames/Java.java new file mode 100644 index 000000000..77114f170 --- /dev/null +++ b/tests/pureJava/conflictingPackageNames/Java.java @@ -0,0 +1,14 @@ +public class Java { + public String lang() { + throw new RuntimeException("String lang(): shouldn't have been called"); + } + + public static class lang { + public static class String { + public String() { + throw new RuntimeException("new String(): shouldn't have been called"); + } + } + static String String() { return null; } + } +} diff --git a/tests/pureJava/conflictingPackageNames/Main.java b/tests/pureJava/conflictingPackageNames/Main.java new file mode 100644 index 000000000..06eb6763f --- /dev/null +++ b/tests/pureJava/conflictingPackageNames/Main.java @@ -0,0 +1,27 @@ +import org.aspectj.testing.*; + +public class Main { + public static void main(String[] args) { + new Main().go(); + Tester.checkAllEvents(); + } + + public void go() { + + String str0 = new String("String:String"); + java.lang.String str1 = new String("java.lang.String:String"); + String str2 = new java.lang.String("String:java.lang.String"); + java.lang.String str3 = new java.lang.String("String:java.lang.java.lang.String"); + + Tester.checkEqual(str0, "String:String"); + Tester.checkEqual(str1, "java.lang.String:String"); + Tester.checkEqual(str2, "String:java.lang.String"); + Tester.checkEqual(str3, "String:java.lang.java.lang.String"); + + Tester.event("Driver.go"); + } + + static { + Tester.expectEvent("Driver.go"); + } +} diff --git a/tests/pureJava/conflictingPackageNamesWithPackages/Java.java b/tests/pureJava/conflictingPackageNamesWithPackages/Java.java new file mode 100644 index 000000000..a3cf27560 --- /dev/null +++ b/tests/pureJava/conflictingPackageNamesWithPackages/Java.java @@ -0,0 +1,16 @@ +package conflictingPackageNamesWithPackages; + +public class Java { + public String lang() { + throw new RuntimeException("String lang(): shouldn't have been called"); + } + + public static class lang { + public static class String { + public String() { + throw new RuntimeException("new String(): shouldn't have been called"); + } + } + static String String() { return null; } + } +} diff --git a/tests/pureJava/conflictingPackageNamesWithPackages/Main.java b/tests/pureJava/conflictingPackageNamesWithPackages/Main.java new file mode 100644 index 000000000..48e0c7291 --- /dev/null +++ b/tests/pureJava/conflictingPackageNamesWithPackages/Main.java @@ -0,0 +1,29 @@ +package conflictingPackageNamesWithPackages; + +import org.aspectj.testing.*; + +public class Main { + public static void main(String[] args) { + new Main().go(); + Tester.checkAllEvents(); + } + + public void go() { + + String str0 = new String("String:String"); + java.lang.String str1 = new String("java.lang.String:String"); + String str2 = new java.lang.String("String:java.lang.String"); + java.lang.String str3 = new java.lang.String("String:java.lang.java.lang.String"); + + Tester.checkEqual(str0, "String:String"); + Tester.checkEqual(str1, "java.lang.String:String"); + Tester.checkEqual(str2, "String:java.lang.String"); + Tester.checkEqual(str3, "String:java.lang.java.lang.String"); + + Tester.event("Driver.go"); + } + + static { + Tester.expectEvent("Driver.go"); + } +} diff --git a/tests/pureJava/equalsMethOnStr/Driver.java b/tests/pureJava/equalsMethOnStr/Driver.java new file mode 100644 index 000000000..6cf5ce096 --- /dev/null +++ b/tests/pureJava/equalsMethOnStr/Driver.java @@ -0,0 +1,11 @@ +import org.aspectj.testing.Tester; + +public class Driver { + private static java.util.Vector v = new java.util.Vector(); + + public static void main(String[] args) { test(); } + + public static void test() { + Tester.check("foo".equals("foo"), "foo equals foo"); + } +}
\ No newline at end of file diff --git a/tests/pureJava/innerDefaultConstructors/pkg1/Main.java b/tests/pureJava/innerDefaultConstructors/pkg1/Main.java new file mode 100644 index 000000000..a36e7493b --- /dev/null +++ b/tests/pureJava/innerDefaultConstructors/pkg1/Main.java @@ -0,0 +1,8 @@ +package pkg1; + +public class Main extends pkg2.Foo { + + public static void main(String[] args) { + new Goo(); + } +} diff --git a/tests/pureJava/innerDefaultConstructors/pkg2/Foo.java b/tests/pureJava/innerDefaultConstructors/pkg2/Foo.java new file mode 100644 index 000000000..7f13c069b --- /dev/null +++ b/tests/pureJava/innerDefaultConstructors/pkg2/Foo.java @@ -0,0 +1,7 @@ +package pkg2; + +public class Foo { + protected static class Goo { + //protected Goo() {} + } +} diff --git a/tests/pureJava/innerTypeModifiers/pkg1/Main.java b/tests/pureJava/innerTypeModifiers/pkg1/Main.java new file mode 100644 index 000000000..f2593b99d --- /dev/null +++ b/tests/pureJava/innerTypeModifiers/pkg1/Main.java @@ -0,0 +1,12 @@ +package pkg1; + +public class Main extends pkg2.Foo { + + static class Noo extends Goo { + //Noo() {} + } + + public static void main(String[] args) { + new Noo(); + } +} diff --git a/tests/pureJava/innerTypeModifiers/pkg2/Foo.java b/tests/pureJava/innerTypeModifiers/pkg2/Foo.java new file mode 100644 index 000000000..fe9695e44 --- /dev/null +++ b/tests/pureJava/innerTypeModifiers/pkg2/Foo.java @@ -0,0 +1,6 @@ +package pkg2; + +public class Foo { + protected static class Goo { + } +} diff --git a/tests/pureJava/innersFromSourceAndBytecode/C.java b/tests/pureJava/innersFromSourceAndBytecode/C.java new file mode 100644 index 000000000..6a165878e --- /dev/null +++ b/tests/pureJava/innersFromSourceAndBytecode/C.java @@ -0,0 +1,83 @@ +import org.aspectj.testing.Tester; +public class C { + + public void c() { a("C.c()"); } + public void c(C c) { a("C.c(C)"); } + public void c(C c, I i) { a("C.c(C,I)"); } + public void c(C c, I.J ij) { a("C.c(C,I$J)"); } + public void c(C c, I.J.K ijk) { a("C.c(C,I$J$K)"); } + public void c(C c, I i, I.J ij) { a("C.c(C,I,I$J)"); } + public void c(C c, I i, I.J.K ijk) { a("C.c(C,I,I$J$K)"); } + public void c(C c, I.J ij, I.J.K ijk) { a("C.c(C,I$J,I$J$K)"); } + public void c(C c, I i, I.J ij, I.J.K ijk) { a("C.c(C,I,I$J,I$J$K)"); } + public void c(I i) { a("C.c(I)"); } + public void c(I.J ij) { a("C.c(I$J)"); } + public void c(I.J.K ijk) { a("C.c(I$J$K)"); } + public void c(I i, I.J ij) { a("C.c(I,I$J)"); } + public void c(I i, I.J.K ijk) { a("C.c(I,I$J$K)"); } + public void c(I.J ij, I.J.K ijk) { a("C.c(I$J,I$J$K)"); } + public void c(I i, I.J ij, I.J.K ijk) { a("C.c(I,I$J,I$J$K)"); } + + public static class I { + + public void i() { a("C$I.i()"); } + public void i(C c) { a("C$I.i(C)"); } + public void i(C c, I i) { a("C$I.i(C,I)"); } + public void i(C c, J j) { a("C$I.i(C,J)"); } + public void i(C c, J.K jk) { a("C$I.i(C,J$K)"); } + public void i(C c, I i, J j) { a("C$I.i(C,I,J)"); } + public void i(C c, I i, J.K jk) { a("C$I.i(C,I,J$K)"); } + public void i(C c, J j, J.K jk) { a("C$I.i(C,J,J$K)"); } + public void i(C c, I i, J j, J.K jk) { a("C$I.i(C,I,J,J$K)"); } + public void i(I i) { a("C$I.i(I)"); } + public void i(J j) { a("C$I.i(J)"); } + public void i(J.K jk) { a("C$I.i(J$K)"); } + public void i(I i, J j) { a("C$I.i(I,J)"); } + public void i(I i, J.K jk) { a("C$I.i(I,J$K)"); } + public void i(J j, J.K jk) { a("C$I.i(J,J$K)"); } + public void i(I i, J j, J.K jk) { a("C$I.i(I,J,J$K)"); } + + public static class J { + + public void j() { a("C$I$J.j()"); } + public void j(C c) { a("C$I$J.j(C)"); } + public void j(C c, I i) { a("C$I$J.j(C,I)"); } + public void j(C c, J j) { a("C$I$J.j(C,J)"); } + public void j(C c, K k) { a("C$I$J.j(C,K)"); } + public void j(C c, I i, J j) { a("C$I$J.j(C,I,J)"); } + public void j(C c, I i, K k) { a("C$I$J.j(C,I,K)"); } + public void j(C c, J j, K k) { a("C$I$J.j(C,J,K)"); } + public void j(C c, I i, J j, K k) { a("C$I$J.j(C,I,J,K)"); } + public void j(I i) { a("C$I$J.j(I)"); } + public void j(J j) { a("C$I$J.j(J)"); } + public void j(K k) { a("C$I$J.j(K)"); } + public void j(I i, J j) { a("C$I$J.j(I,J)"); } + public void j(I i, K k) { a("C$I$J.j(I,K)"); } + public void j(J j, K k) { a("C$I$J.j(J,K)"); } + public void j(I i, J j, K k) { a("C$I$J.j(I,J,K)"); } + + public static class K { + + public void k() { a("C$I$J$K.k()"); } + public void k(C c) { a("C$I$J$K.k(C)"); } + public void k(C c, I i) { a("C$I$J$K.k(C,I)"); } + public void k(C c, J j) { a("C$I$J$K.k(C,J)"); } + public void k(C c, K k) { a("C$I$J$K.k(C,K)"); } + public void k(C c, I i, J j) { a("C$I$J$K.k(C,I,J)"); } + public void k(C c, I i, K k) { a("C$I$J$K.k(C,I,K)"); } + public void k(C c, J j, K k) { a("C$I$J$K.k(C,J,K)"); } + public void k(C c, I i, J j, K k) { a("C$I$J$K.k(C,I,J,K)"); } + public void k(I i) { a("C$I$J$K.k(I)"); } + public void k(J j) { a("C$I$J$K.k(J)"); } + public void k(K k) { a("C$I$J$K.k(K)"); } + public void k(I i, J j) { a("C$I$J$K.k(I,J)"); } + public void k(I i, K k) { a("C$I$J$K.k(I,K)"); } + public void k(J j, K k) { a("C$I$J$K.k(J,K)"); } + public void k(I i, J j, K k) { a("C$I$J$K.k(I,J,K)"); } + + } + } + } + + public static void a(String msg) { Tester.event(msg); } +} diff --git a/tests/pureJava/innersFromSourceAndBytecode/D.java b/tests/pureJava/innersFromSourceAndBytecode/D.java new file mode 100644 index 000000000..80ab1ceff --- /dev/null +++ b/tests/pureJava/innersFromSourceAndBytecode/D.java @@ -0,0 +1,21 @@ +import org.aspectj.testing.Tester; +public class D { + public void d() { a("D.d()"); } + public void d(C c) { a("D.d(C)"); } + public void d(C c, C.I ci) { a("D.d(C,C$I)"); } + public void d(C c, C.I.J cij) { a("D.d(C,C$I$J)"); } + public void d(C c, C.I.J.K cijk) { a("D.d(C,C$I$J$K)"); } + public void d(C c, C.I ci, C.I.J cij) { a("D.d(C,C$I,C$I$J)"); } + public void d(C c, C.I ci, C.I.J.K cijk) { a("D.d(C,C$I,C$I$J$K)"); } + public void d(C c, C.I.J cij, C.I.J.K cijk) { a("D.d(C,C$I$J,C$I$J$K)"); } + public void d(C c, C.I ci, C.I.J cij, C.I.J.K cijk) { a("D.d(C,C$I,C$I$J,C$I$J$K)"); } + public void d(C.I ci) { a("D.d(C$I)"); } + public void d(C.I.J cij) { a("D.d(C$I$J)"); } + public void d(C.I.J.K cijk) { a("D.d(C$I$J$K)"); } + public void d(C.I ci, C.I.J cij) { a("D.d(C$I,C$I$J)"); } + public void d(C.I ci, C.I.J.K cijk) { a("D.d(C$I,C$I$J$K)"); } + public void d(C.I.J cij, C.I.J.K cijk) { a("D.d(C$I$J,C$I$J$K)"); } + public void d(C.I ci, C.I.J cij, C.I.J.K cijk) { a("D.d(C$I,C$I$J,C$I$J$K)"); } + + public static void a(String msg) { Tester.event(msg); } +} diff --git a/tests/pureJava/innersFromSourceAndBytecode/Main.java b/tests/pureJava/innersFromSourceAndBytecode/Main.java new file mode 100644 index 000000000..46f1360af --- /dev/null +++ b/tests/pureJava/innersFromSourceAndBytecode/Main.java @@ -0,0 +1,192 @@ +import org.aspectj.testing.Tester; +/* + * When reading bytecode and source methods with + * inner-class parameter types aren't being found. + */ +public class Main { + public static void main(String[] args) { + new Main().realMain(args); + } + public void realMain(String[] args) { + + m("D.d()"); + m("D.d(C)"); + m("D.d(C,C$I)"); + m("D.d(C,C$I$J)"); + m("D.d(C,C$I$J$K)"); + m("D.d(C,C$I,C$I$J)"); + m("D.d(C,C$I,C$I$J$K)"); + m("D.d(C,C$I$J,C$I$J$K)"); + m("D.d(C,C$I,C$I$J,C$I$J$K)"); + m("D.d(C$I)"); + m("D.d(C$I$J)"); + m("D.d(C$I$J$K)"); + m("D.d(C$I,C$I$J)"); + m("D.d(C$I,C$I$J$K)"); + m("D.d(C$I$J,C$I$J$K)"); + m("D.d(C$I,C$I$J,C$I$J$K)"); + + m("C.c()"); + m("C.c(C)"); + m("C.c(C,I)"); + m("C.c(C,I$J)"); + m("C.c(C,I$J$K)"); + m("C.c(C,I,I$J)"); + m("C.c(C,I,I$J$K)"); + m("C.c(C,I$J,I$J$K)"); + m("C.c(C,I,I$J,I$J$K)"); + m("C.c(I)"); + m("C.c(I$J)"); + m("C.c(I$J$K)"); + m("C.c(I,I$J)"); + m("C.c(I,I$J$K)"); + m("C.c(I$J,I$J$K)"); + m("C.c(I,I$J,I$J$K)"); + + m("C$I.i()"); + m("C$I.i(C)"); + m("C$I.i(C,I)"); + m("C$I.i(C,J)"); + m("C$I.i(C,J$K)"); + m("C$I.i(C,I,J)"); + m("C$I.i(C,I,J$K)"); + m("C$I.i(C,J,J$K)"); + m("C$I.i(C,I,J,J$K)"); + m("C$I.i(I)"); + m("C$I.i(J)"); + m("C$I.i(J$K)"); + m("C$I.i(I,J)"); + m("C$I.i(I,J$K)"); + m("C$I.i(J,J$K)"); + m("C$I.i(I,J,J$K)"); + + m("C$I$J.j()"); + m("C$I$J.j(C)"); + m("C$I$J.j(C,I)"); + m("C$I$J.j(C,J)"); + m("C$I$J.j(C,K)"); + m("C$I$J.j(C,I,J)"); + m("C$I$J.j(C,I,K)"); + m("C$I$J.j(C,J,K)"); + m("C$I$J.j(C,I,J,K)"); + m("C$I$J.j(I)"); + m("C$I$J.j(J)"); + m("C$I$J.j(K)"); + m("C$I$J.j(I,J)"); + m("C$I$J.j(I,K)"); + m("C$I$J.j(J,K)"); + m("C$I$J.j(I,J,K)"); + + m("C$I$J$K.k()"); + m("C$I$J$K.k(C)"); + m("C$I$J$K.k(C,I)"); + m("C$I$J$K.k(C,J)"); + m("C$I$J$K.k(C,K)"); + m("C$I$J$K.k(C,I,J)"); + m("C$I$J$K.k(C,I,K)"); + m("C$I$J$K.k(C,J,K)"); + m("C$I$J$K.k(C,I,J,K)"); + m("C$I$J$K.k(I)"); + m("C$I$J$K.k(J)"); + m("C$I$J$K.k(K)"); + m("C$I$J$K.k(I,J)"); + m("C$I$J$K.k(I,K)"); + m("C$I$J$K.k(J,K)"); + m("C$I$J$K.k(I,J,K)"); + + D d = new D(); + C c = new C(); + C.I ci = new C.I(); + C.I.J cij = new C.I.J(); + C.I.J.K cijk = new C.I.J.K(); + + d.d(); + d.d(c); + d.d(c,ci); + d.d(c,cij); + d.d(c,cijk); + d.d(c,ci,cij); + d.d(c,ci,cijk); + d.d(c,cij,cijk); + d.d(c,ci,cij,cijk); + d.d(ci); + d.d(cij); + d.d(cijk); + d.d(ci,cij); + d.d(ci,cijk); + d.d(cij,cijk); + d.d(ci,cij,cijk); + + c.c(); + c.c(c); + c.c(c,ci); + c.c(c,cij); + c.c(c,cijk); + c.c(c,ci,cij); + c.c(c,ci,cijk); + c.c(c,cij,cijk); + c.c(c,ci,cij,cijk); + c.c(ci); + c.c(cij); + c.c(cijk); + c.c(ci,cij); + c.c(ci,cijk); + c.c(cij,cijk); + c.c(ci,cij,cijk); + + ci.i(); + ci.i(c); + ci.i(c,ci); + ci.i(c,cij); + ci.i(c,cijk); + ci.i(c,ci,cij); + ci.i(c,ci,cijk); + ci.i(c,cij,cijk); + ci.i(c,ci,cij,cijk); + ci.i(ci); + ci.i(cij); + ci.i(cijk); + ci.i(ci,cij); + ci.i(ci,cijk); + ci.i(cij,cijk); + ci.i(ci,cij,cijk); + + cij.j(); + cij.j(c); + cij.j(c,ci); + cij.j(c,cij); + cij.j(c,cijk); + cij.j(c,ci,cij); + cij.j(c,ci,cijk); + cij.j(c,cij,cijk); + cij.j(c,ci,cij,cijk); + cij.j(ci); + cij.j(cij); + cij.j(cijk); + cij.j(ci,cij); + cij.j(ci,cijk); + cij.j(cij,cijk); + cij.j(ci,cij,cijk); + + cijk.k(); + cijk.k(c); + cijk.k(c,ci); + cijk.k(c,cij); + cijk.k(c,cijk); + cijk.k(c,ci,cij); + cijk.k(c,ci,cijk); + cijk.k(c,cij,cijk); + cijk.k(c,ci,cij,cijk); + cijk.k(ci); + cijk.k(cij); + cijk.k(cijk); + cijk.k(ci,cij); + cijk.k(ci,cijk); + cijk.k(cij,cijk); + cijk.k(ci,cij,cijk); + + Tester.checkAllEvents(); + } + + public static void m(String msg) { Tester.expectEvent(msg); } +} diff --git a/tests/pureJava/nameConflicts/p1.java b/tests/pureJava/nameConflicts/p1.java new file mode 100644 index 000000000..0f7635742 --- /dev/null +++ b/tests/pureJava/nameConflicts/p1.java @@ -0,0 +1,4 @@ +// deliberate conflict with package p1 +public class p1 { + public static class Foo {} +} diff --git a/tests/pureJava/nameConflicts/p1/Foo.java b/tests/pureJava/nameConflicts/p1/Foo.java new file mode 100644 index 000000000..33c810261 --- /dev/null +++ b/tests/pureJava/nameConflicts/p1/Foo.java @@ -0,0 +1,3 @@ +package p1; + +public class Foo {} diff --git a/tests/pureJava/nameConflicts/p1/Main1.java b/tests/pureJava/nameConflicts/p1/Main1.java new file mode 100644 index 000000000..634761812 --- /dev/null +++ b/tests/pureJava/nameConflicts/p1/Main1.java @@ -0,0 +1,10 @@ +package p1; + +import org.aspectj.testing.Tester; + +public class Main1 { + public static void main(String[] args) { + Tester.checkEqual(new p1.Foo().getClass().getName(), "p1.Foo"); + Tester.checkEqual(new p1.p2.Foo().getClass().getName(), "p1.p2$Foo"); + } +} diff --git a/tests/pureJava/nameConflicts/p1/Main2.java b/tests/pureJava/nameConflicts/p1/Main2.java new file mode 100644 index 000000000..43f81b98d --- /dev/null +++ b/tests/pureJava/nameConflicts/p1/Main2.java @@ -0,0 +1,10 @@ +package p1; + +import org.aspectj.testing.Tester; + +public class Main2 { + public static void main(String[] args) { + //Tester.checkEqual(new p1.Foo().getClass().getName(), "p1$Foo"); + Tester.checkEqual(new p1.p2.Foo().getClass().getName(), "p1.p2.Foo"); + } +} diff --git a/tests/pureJava/nameConflicts/p1/Main3.java b/tests/pureJava/nameConflicts/p1/Main3.java new file mode 100644 index 000000000..a2c19d565 --- /dev/null +++ b/tests/pureJava/nameConflicts/p1/Main3.java @@ -0,0 +1,10 @@ +package p1; + +import org.aspectj.testing.Tester; + +public class Main3 { + public static void main(String[] args) { + Tester.checkEqual(new p1.Foo().getClass().getName(), "p1$Foo"); + //Tester.checkEqual(new p1.p2.Foo().getClass().getName(), "p1.p2.Foo"); + } +} diff --git a/tests/pureJava/nameConflicts/p1/p2.java b/tests/pureJava/nameConflicts/p1/p2.java new file mode 100644 index 000000000..335346f62 --- /dev/null +++ b/tests/pureJava/nameConflicts/p1/p2.java @@ -0,0 +1,5 @@ +package p1; + +public class p2 { + public static class Foo {} +} diff --git a/tests/pureJava/nameConflicts/p1/p2/Foo.java b/tests/pureJava/nameConflicts/p1/p2/Foo.java new file mode 100644 index 000000000..1270832e0 --- /dev/null +++ b/tests/pureJava/nameConflicts/p1/p2/Foo.java @@ -0,0 +1,4 @@ +package p1.p2; + +public class Foo { +} diff --git a/tests/pureJava/p1/C1.java b/tests/pureJava/p1/C1.java new file mode 100644 index 000000000..4ec5e0fb1 --- /dev/null +++ b/tests/pureJava/p1/C1.java @@ -0,0 +1,5 @@ +package p1; + +public class C1 { + +} diff --git a/tests/pureJava/p1/P1Statics.java b/tests/pureJava/p1/P1Statics.java new file mode 100644 index 000000000..105829f49 --- /dev/null +++ b/tests/pureJava/p1/P1Statics.java @@ -0,0 +1,213 @@ +package p1; +public class P1Statics { + + public static Integer I = new Integer(1 +1); + public static byte b = (byte) 1 +1 ; + public static short s = (short) 1 +1 ; + public static int i = (int) 1 +1 ; + public static long l = (long) 1 +1 ; + public static float f = (float) 1 +1 ; + public static double d = (double) 1 +1 ; + public static char c = (char) '1'+1 ; + + public static class NestedStaticClass { + + public static Integer I = new Integer(2 +1); + public static byte b = (byte) 2 +1 ; + public static short s = (short) 2 +1 ; + public static int i = (int) 2 +1 ; + public static long l = (long) 2 +1 ; + public static float f = (float) 2 +1 ; + public static double d = (double) 2 +1 ; + public static char c = (char) '2'+1 ; + + public static class InnerStaticClass { + public static Integer I = new Integer(3 +1); + public static byte b = (byte) 3 +1 ; + public static short s = (short) 3 +1 ; + public static int i = (int) 3 +1 ; + public static long l = (long) 3 +1 ; + public static float f = (float) 3 +1 ; + public static double d = (double) 3 +1 ; + public static char c = (char) '3'+1 ; + } + + public static interface InnerStaticInterface { + public static Integer I = new Integer(4 +1); + public static byte b = (byte) 4 +1 ; + public static short s = (short) 4 +1 ; + public static int i = (int) 4 +1 ; + public static long l = (long) 4 +1 ; + public static float f = (float) 4 +1 ; + public static double d = (double) 4 +1 ; + public static char c = (char) '4'+1 ; + } + + public interface InnerInterface { + public static Integer I = new Integer(5 +1); + public static byte b = (byte) 5 +1 ; + public static short s = (short) 5 +1 ; + public static int i = (int) 5 +1 ; + public static long l = (long) 5 +1 ; + public static float f = (float) 5 +1 ; + public static double d = (double) 5 +1 ; + public static char c = (char) '5'+1 ; + } + + public static interface InnerStaticInterfaceNoStatics { + public Integer I = new Integer(6 +1); + public byte b = (byte) 6 +1 ; + public short s = (short) 6 +1 ; + public int i = (int) 6 +1 ; + public long l = (long) 6 +1 ; + public float f = (float) 6 +1 ; + public double d = (double) 6 +1 ; + public char c = (char) '6'+1 ; + } + + public interface InnerInterfaceNoStatics { + public Integer I = new Integer(7 +1); + public byte b = (byte) 7 +1 ; + public short s = (short) 7 +1 ; + public int i = (int) 7 +1 ; + public long l = (long) 7 +1 ; + public float f = (float) 7 +1 ; + public double d = (double) 7 +1 ; + public char c = (char) '7'+1 ; + } + } + + public static interface NestedStaticInterface { + + public static Integer I = new Integer(2 +11); + public static byte b = (byte) 2 +11 ; + public static short s = (short) 2 +11 ; + public static int i = (int) 2 +11 ; + public static long l = (long) 2 +11 ; + public static float f = (float) 2 +11 ; + public static double d = (double) 2 +11 ; + public static char c = (char) '2'+11 ; + + public static class InnerStaticClass { + public static Integer I = new Integer(3 +11); + public static byte b = (byte) 3 +11 ; + public static short s = (short) 3 +11 ; + public static int i = (int) 3 +11 ; + public static long l = (long) 3 +11 ; + public static float f = (float) 3 +11 ; + public static double d = (double) 3 +11 ; + public static char c = (char) '3'+11 ; + } + + public static interface InnerStaticInterface { + public static Integer I = new Integer(4 +11); + public static byte b = (byte) 4 +11 ; + public static short s = (short) 4 +11 ; + public static int i = (int) 4 +11 ; + public static long l = (long) 4 +11 ; + public static float f = (float) 4 +11 ; + public static double d = (double) 4 +11 ; + public static char c = (char) '4'+11 ; + } + + public interface InnerInterface { + public static Integer I = new Integer(5 +11); + public static byte b = (byte) 5 +11 ; + public static short s = (short) 5 +11 ; + public static int i = (int) 5 +11 ; + public static long l = (long) 5 +11 ; + public static float f = (float) 5 +11 ; + public static double d = (double) 5 +11 ; + public static char c = (char) '5'+11 ; + } + + public static interface InnerStaticInterfaceNoStatics { + public Integer I = new Integer(6 +11); + public byte b = (byte) 6 +11 ; + public short s = (short) 6 +11 ; + public int i = (int) 6 +11 ; + public long l = (long) 6 +11 ; + public float f = (float) 6 +11 ; + public double d = (double) 6 +11 ; + public char c = (char) '6'+11 ; + } + + public interface InnerInterfaceNoStatics { + public Integer I = new Integer(7 +11); + public byte b = (byte) 7 +11 ; + public short s = (short) 7 +11 ; + public int i = (int) 7 +11 ; + public long l = (long) 7 +11 ; + public float f = (float) 7 +11 ; + public double d = (double) 7 +11 ; + public char c = (char) '7'+11 ; + } + } + + public interface NestedInterface { + + public static Integer I = new Integer(2 +21); + public static byte b = (byte) 2 +21 ; + public static short s = (short) 2 +21 ; + public static int i = (int) 2 +21 ; + public static long l = (long) 2 +21 ; + public static float f = (float) 2 +21 ; + public static double d = (double) 2 +21 ; + public static char c = (char) '2'+21 ; + + public static class InnerStaticClass { + public static Integer I = new Integer(3 +21); + public static byte b = (byte) 3 +21 ; + public static short s = (short) 3 +21 ; + public static int i = (int) 3 +21 ; + public static long l = (long) 3 +21 ; + public static float f = (float) 3 +21 ; + public static double d = (double) 3 +21 ; + public static char c = (char) '3'+21 ; + } + + public static interface InnerStaticInterface { + public static Integer I = new Integer(4 +21); + public static byte b = (byte) 4 +21 ; + public static short s = (short) 4 +21 ; + public static int i = (int) 4 +21 ; + public static long l = (long) 4 +21 ; + public static float f = (float) 4 +21 ; + public static double d = (double) 4 +21 ; + public static char c = (char) '4'+21 ; + } + + public interface InnerInterface { + public static Integer I = new Integer(5 +21); + public static byte b = (byte) 5 +21 ; + public static short s = (short) 5 +21 ; + public static int i = (int) 5 +21 ; + public static long l = (long) 5 +21 ; + public static float f = (float) 5 +21 ; + public static double d = (double) 5 +21 ; + public static char c = (char) '5'+21 ; + } + + public static interface InnerStaticInterfaceNoStatics { + public Integer I = new Integer(6 +21); + public byte b = (byte) 6 +21 ; + public short s = (short) 6 +21 ; + public int i = (int) 6 +21 ; + public long l = (long) 6 +21 ; + public float f = (float) 6 +21 ; + public double d = (double) 6 +21 ; + public char c = (char) '6'+21 ; + } + + public interface InnerInterfaceNoStatics { + public Integer I = new Integer(7 +21); + public byte b = (byte) 7 +21 ; + public short s = (short) 7 +21 ; + public int i = (int) 7 +21 ; + public long l = (long) 7 +21 ; + public float f = (float) 7 +21 ; + public double d = (double) 7 +21 ; + public char c = (char) '7'+21 ; + } + } +} diff --git a/tests/pureJava/p1/p2/P1P2Statics.java b/tests/pureJava/p1/p2/P1P2Statics.java new file mode 100644 index 000000000..822231c28 --- /dev/null +++ b/tests/pureJava/p1/p2/P1P2Statics.java @@ -0,0 +1,213 @@ +package p1.p2; +public class P1P2Statics { + + public static Integer I = new Integer(1 +2); + public static byte b = (byte) 1 +2 ; + public static short s = (short) 1 +2 ; + public static int i = (int) 1 +2 ; + public static long l = (long) 1 +2 ; + public static float f = (float) 1 +2 ; + public static double d = (double) 1 +2 ; + public static char c = (char) '1'+2 ; + + public static class NestedStaticClass { + + public static Integer I = new Integer(2 +2); + public static byte b = (byte) 2 +2 ; + public static short s = (short) 2 +2 ; + public static int i = (int) 2 +2 ; + public static long l = (long) 2 +2 ; + public static float f = (float) 2 +2 ; + public static double d = (double) 2 +2 ; + public static char c = (char) '2'+2 ; + + public static class InnerStaticClass { + public static Integer I = new Integer(3 +2); + public static byte b = (byte) 3 +2 ; + public static short s = (short) 3 +2 ; + public static int i = (int) 3 +2 ; + public static long l = (long) 3 +2 ; + public static float f = (float) 3 +2 ; + public static double d = (double) 3 +2 ; + public static char c = (char) '3'+2 ; + } + + public static interface InnerStaticInterface { + public static Integer I = new Integer(4 +2); + public static byte b = (byte) 4 +2 ; + public static short s = (short) 4 +2 ; + public static int i = (int) 4 +2 ; + public static long l = (long) 4 +2 ; + public static float f = (float) 4 +2 ; + public static double d = (double) 4 +2 ; + public static char c = (char) '4'+2 ; + } + + public interface InnerInterface { + public static Integer I = new Integer(5 +2); + public static byte b = (byte) 5 +2 ; + public static short s = (short) 5 +2 ; + public static int i = (int) 5 +2 ; + public static long l = (long) 5 +2 ; + public static float f = (float) 5 +2 ; + public static double d = (double) 5 +2 ; + public static char c = (char) '5'+2 ; + } + + public static interface InnerStaticInterfaceNoStatics { + public Integer I = new Integer(6 +2); + public byte b = (byte) 6 +2 ; + public short s = (short) 6 +2 ; + public int i = (int) 6 +2 ; + public long l = (long) 6 +2 ; + public float f = (float) 6 +2 ; + public double d = (double) 6 +2 ; + public char c = (char) '6'+2 ; + } + + public interface InnerInterfaceNoStatics { + public Integer I = new Integer(7 +2); + public byte b = (byte) 7 +2 ; + public short s = (short) 7 +2 ; + public int i = (int) 7 +2 ; + public long l = (long) 7 +2 ; + public float f = (float) 7 +2 ; + public double d = (double) 7 +2 ; + public char c = (char) '7'+2 ; + } + } + + public static interface NestedStaticInterface { + + public static Integer I = new Integer(2 +12); + public static byte b = (byte) 2 +12 ; + public static short s = (short) 2 +12 ; + public static int i = (int) 2 +12 ; + public static long l = (long) 2 +12 ; + public static float f = (float) 2 +12 ; + public static double d = (double) 2 +12 ; + public static char c = (char) '2'+12 ; + + public static class InnerStaticClass { + public static Integer I = new Integer(3 +12); + public static byte b = (byte) 3 +12 ; + public static short s = (short) 3 +12 ; + public static int i = (int) 3 +12 ; + public static long l = (long) 3 +12 ; + public static float f = (float) 3 +12 ; + public static double d = (double) 3 +12 ; + public static char c = (char) '3'+12 ; + } + + public static interface InnerStaticInterface { + public static Integer I = new Integer(4 +12); + public static byte b = (byte) 4 +12 ; + public static short s = (short) 4 +12 ; + public static int i = (int) 4 +12 ; + public static long l = (long) 4 +12 ; + public static float f = (float) 4 +12 ; + public static double d = (double) 4 +12 ; + public static char c = (char) '4'+12 ; + } + + public interface InnerInterface { + public static Integer I = new Integer(5 +12); + public static byte b = (byte) 5 +12 ; + public static short s = (short) 5 +12 ; + public static int i = (int) 5 +12 ; + public static long l = (long) 5 +12 ; + public static float f = (float) 5 +12 ; + public static double d = (double) 5 +12 ; + public static char c = (char) '5'+12 ; + } + + public static interface InnerStaticInterfaceNoStatics { + public Integer I = new Integer(6 +12); + public byte b = (byte) 6 +12 ; + public short s = (short) 6 +12 ; + public int i = (int) 6 +12 ; + public long l = (long) 6 +12 ; + public float f = (float) 6 +12 ; + public double d = (double) 6 +12 ; + public char c = (char) '6'+12 ; + } + + public interface InnerInterfaceNoStatics { + public Integer I = new Integer(7 +12); + public byte b = (byte) 7 +12 ; + public short s = (short) 7 +12 ; + public int i = (int) 7 +12 ; + public long l = (long) 7 +12 ; + public float f = (float) 7 +12 ; + public double d = (double) 7 +12 ; + public char c = (char) '7'+12 ; + } + } + + public interface NestedInterface { + + public static Integer I = new Integer(2 +22); + public static byte b = (byte) 2 +22 ; + public static short s = (short) 2 +22 ; + public static int i = (int) 2 +22 ; + public static long l = (long) 2 +22 ; + public static float f = (float) 2 +22 ; + public static double d = (double) 2 +22 ; + public static char c = (char) '2'+22 ; + + public static class InnerStaticClass { + public static Integer I = new Integer(3 +22); + public static byte b = (byte) 3 +22 ; + public static short s = (short) 3 +22 ; + public static int i = (int) 3 +22 ; + public static long l = (long) 3 +22 ; + public static float f = (float) 3 +22 ; + public static double d = (double) 3 +22 ; + public static char c = (char) '3'+22 ; + } + + public static interface InnerStaticInterface { + public static Integer I = new Integer(4 +22); + public static byte b = (byte) 4 +22 ; + public static short s = (short) 4 +22 ; + public static int i = (int) 4 +22 ; + public static long l = (long) 4 +22 ; + public static float f = (float) 4 +22 ; + public static double d = (double) 4 +22 ; + public static char c = (char) '4'+22 ; + } + + public interface InnerInterface { + public static Integer I = new Integer(5 +22); + public static byte b = (byte) 5 +22 ; + public static short s = (short) 5 +22 ; + public static int i = (int) 5 +22 ; + public static long l = (long) 5 +22 ; + public static float f = (float) 5 +22 ; + public static double d = (double) 5 +22 ; + public static char c = (char) '5'+22 ; + } + + public static interface InnerStaticInterfaceNoStatics { + public Integer I = new Integer(6 +22); + public byte b = (byte) 6 +22 ; + public short s = (short) 6 +22 ; + public int i = (int) 6 +22 ; + public long l = (long) 6 +22 ; + public float f = (float) 6 +22 ; + public double d = (double) 6 +22 ; + public char c = (char) '6'+22 ; + } + + public interface InnerInterfaceNoStatics { + public Integer I = new Integer(7 +22); + public byte b = (byte) 7 +22 ; + public short s = (short) 7 +22 ; + public int i = (int) 7 +22 ; + public long l = (long) 7 +22 ; + public float f = (float) 7 +22 ; + public double d = (double) 7 +22 ; + public char c = (char) '7'+22 ; + } + } +} diff --git a/tests/pureJava/p1/subp1/SubC1.java b/tests/pureJava/p1/subp1/SubC1.java new file mode 100644 index 000000000..4e466862b --- /dev/null +++ b/tests/pureJava/p1/subp1/SubC1.java @@ -0,0 +1,5 @@ +package p1.subp1; + +public class SubC1 { + +} diff --git a/tests/pureJava/protectedFieldRefInInner/Main.java b/tests/pureJava/protectedFieldRefInInner/Main.java new file mode 100644 index 000000000..c321d24f6 --- /dev/null +++ b/tests/pureJava/protectedFieldRefInInner/Main.java @@ -0,0 +1,11 @@ +package protectedFieldRefInInner; + +public class Main extends protectedFieldRefInInner.p1.C { + private int y = 4; + class Inner { + int foo() { return x = x + y; } + } + public static void main(String[] args) { + new Main().new Inner().foo(); + } +} diff --git a/tests/pureJava/protectedFieldRefInInner/p1/C.java b/tests/pureJava/protectedFieldRefInInner/p1/C.java new file mode 100644 index 000000000..aac267809 --- /dev/null +++ b/tests/pureJava/protectedFieldRefInInner/p1/C.java @@ -0,0 +1,5 @@ +package protectedFieldRefInInner.p1; + +public class C { + protected int x = 3; +} diff --git a/tests/pureJava/samenames/Main.java b/tests/pureJava/samenames/Main.java new file mode 100644 index 000000000..8358c69e0 --- /dev/null +++ b/tests/pureJava/samenames/Main.java @@ -0,0 +1,14 @@ +package samenames; + +import org.aspectj.testing.Tester; + +public class Main { + static Main samenames = new Main(); + public static void main(String[] args) { + samenames.realMain(args); + } + void realMain(String[] args) { + Tester.checkEqual(1, Other.returns1()); + Tester.checkEqual(2, new Other().returns2()); + } +} diff --git a/tests/pureJava/samenames/Other.java b/tests/pureJava/samenames/Other.java new file mode 100644 index 000000000..9c25d1c0b --- /dev/null +++ b/tests/pureJava/samenames/Other.java @@ -0,0 +1,9 @@ +package samenames; + + + +public class Other { + + static int returns1() { return true ? 1 : 2; } + int returns2() { return true ? 2 : 1; } +} diff --git a/tests/readme-tests-module.html b/tests/readme-tests-module.html new file mode 100644 index 000000000..c4e34e05d --- /dev/null +++ b/tests/readme-tests-module.html @@ -0,0 +1,153 @@ +<html> +<title>AspectJ tests</title> +<body> +<h1>AspectJ tests</h1> + +<h3>Testing and Tests</h3> +Testing on the AspectJ project is fairly straightforward. +For compiler issues/bugs, we write harness tests. +For API issues/bugs, we write JUnit tests. +We also have other testware for system testing. +<p> +This module contains test data and scripts, while the testing-drivers +and testing modules contain the harness. + +Tests differ in the kind of harness they use and their target. +(Many tests are unused and date back to earlier times in the project.) + +<p> +<table border="1" cellpadding="1"> +<tr><th align="left"><u>Test</u> Description</th> + <th align="left">Driver</th> + <th align="left">Sources</th> + </tr> + +<tr><td><a href="#harness">Harness</a> tests + compile and run test sources. + </td> + <td>Harness in testing-drivers module</td> + <td><a href="ajcTests.xml">ajcTests.xml</a>, + and <a href="ajcTests.xml">ajcTests10.xml</a>, + referring to tests in + <a href="new">new/</a>, + <a href="base">base/</a>, + <a href="errors">errors/</a>, + <a href="design">design/</a>, + <a href="pureJava">pureJava/</a>, + etc. + </td> + + </tr> + +<tr><td><a href="#product">Product</a> tests use a variety of + Ant and Bash scripts to drive the product distributions. + <td>bash, + <a href="http://jakarta.apache.org/Ant">Ant</a> + </td> + <td><a href="product">product/..</a></td> + </tr> + +<tr><td><a href="#ajctest">AjcTest</a> is a large taskdef which + compiles and runs large Java systems. + </td> + <td>AjcTest + <a href="http://jakarta.apache.org/Ant">Ant</a> + Task in testing module </td> + <td><a href="other-systems/">other-systems/..</a>, + <a href="XXX">aspectj-external-lib.jar?/other-systems/</a></td> + </tr> + +<tr><td><a href="#jacks">Jacks</a> is the Jikes compiler test suite, + run for us using a bash script. + <td>bash</td> + <td>See the + <a href="http://www-124.ibm.com/developerworks/oss/cvs/jikes/~checkout~/jacks/jacks.html"> + Jacks project page</a> + </td> + </tr> + + +<tr><td><a href="#junit">JUnit</a> tests normally are run directly + before checking in, + but there is an Ant script to run and report on them all. + </td> + <td><a href="junit.org">JUnit</a></td> + <td>Every module has a testsrc/ directory with JUnit tests.</td> + </tr> +</table> + +<h3><a name="#harness"></a>Harness</h3> + +These are compiler test cases, the preferred form for +any compiler tests. The XML files are test definitions, +and the subdirectories contain the test sources. Many of the +test source files are no longer used. The test definitions are +segregated for convenience as follows: +<ul> + <li><a href="ajcTests.xml">ajcTests.xml</a>: main test suite. + After a release, these tests should always run and pass. + </li> + <li><a href="ajcTests10.xml">ajcTests10.xml</a>: + Tests for the 1.0 compiler. In some cases, error tests + differ between the 1.0 and 1.1 compiler only in the + errors expected to be generated. + </li> + <li><a href="ajcTestsBroken.xml">ajcTestsBroken.xml</a>: + These tests fail, and the tests are broken. + The tests should be fixed and rolled into ajcTests.xml + </li> + <li><a href="ajcTestsFailing.xml">ajcTestsFailing.xml</a>: + These tests fail, and the compiler is broken. + When fixed, these tests should be rolled into + <a href="ajcTests.xml">ajcTests.xml</a>. + </li> + <li><a href="ajcTestsAttic.xml">ajcTestsAttic.xml</a>: + These are broken or failing tests not slated to be fixed. + </li> + <li><a href="ajcHarnessTests.xml">ajcHarnessTests.xml</a>: + These are tests to exercise the test harness itself. + </li> +</ul> +To run the harness, use <code>org.aspectj.testing.drivers.Harness</code>, +in the <code>testing-drivers</code> module. +For help on harness options, use <code>-help</code>. +For for help on component options, see the package docs. +Note in particular how to select tests using keywords or supply compiler +arguments on the command line. +<p> +To write a new test, evolve an existing example. See the dtd and/or +the javadoc for the testing harness implementation in the +<code>testing</code> module for more details. + +<p>To write a test case for a bug, see XXX todo. + +<h3><a name="#product"></a>Product</h3> +Product tests target a built distribution or do compiler (argument) +testing not supported by the harness. +Many have been superceded by ant tests. + +<h3><a name="#ajctest"></a>AjcTest</h3> + <a href="ajctest.xml">ajctest.xml</a> + is an Ant script that compiles and runs large systems. + The scripts tell the AjcTest task from the testing module to drive + the sources in other-systems through compile/doc/run cycles. + To set up the tests, the script combines the aspects checked in to + other-systems/ with the Java source files from various open-source + projects, contained in aspectj-external-lib.zip. + <!-- XXX install and correct --> + + +<h3><a name="#jacks"></a>Jacks</h3> +Jacks is the Jikes compiler test suite available at the + <a href="http://www-124.ibm.com/developerworks/oss/cvs/jikes/~checkout~/jacks/jacks.html"> + Jacks project page</a>. + +We have a bash script to run it using ajc and javac and compare + the results. + </td> + </tr> + +</table> + +</body> +</html> diff --git a/tests/runjacks/runjacks.sh b/tests/runjacks/runjacks.sh new file mode 100644 index 000000000..7d0f2874d --- /dev/null +++ b/tests/runjacks/runjacks.sh @@ -0,0 +1,175 @@ +#!/bin/sh
+# run jacks against javac and ajc (with and without usejavac)
+# @process-test ajc runjacks.sh # run jacks tests against javac and ajc (with and without usejavac)
+
+[ -n "$DEBUG" ] && set -vx
+
+errMssg() {
+ [ -n "$1" ] && echo "## $0 $1"
+ [ -n "$2" ] && exit "$2"
+}
+
+toJavaPath() {
+ echo "$1" | sed 's|/cygdrive/\([a-zA-Z]\)/|\1:/|'
+}
+
+toDosPath() {
+ toJavaPath "$1" | sed 's|/|\\|g'
+}
+
+emit_ajcbat() {
+cat<<EOF
+$jhomeDos\bin\java -classpath "$ajlibDos\aspectjtools.jar;$ajlibDos\aspectjrt.jar;$jhomeDos\lib\tools.jar" org.aspectj.tools.ajc.Main %1 %2 %3 %4 %5 %6 %7 %8
+EOF
+}
+
+emit_ajcsetup() {
+cat<<EOF
+# Set the paths for your tools in this file
+set JAVA_HOME $jhomeJ
+set JAVA_CLASSPATH ""
+set JAVAC $jacksDirJ/ajc.bat
+set JAVAC_FLAGS "$javacFlags"
+
+# To test the assert statement, use this setup
+#set JAVAC_FLAGS "-source 1.4"
+set JAVA ${JDKDIR}/jre/bin/java.exe
+set JAVA_FLAGS ""
+
+# This activates encoding support.
+set JAVAC_ENCODING_FLAG "-encoding "
+set tcltest::testConstraints(encoding) 1
+
+# Activate javac only test cases
+set tcltest::testConstraints(javac) 1
+
+# Uncomment this to test the assert statement
+#set tcltest::testConstraints(assert) 1
+
+EOF
+}
+
+compareJacksResults() {
+ [ -f javac.out ] || exit 2
+ sc='/^==== [^ ][^ ]* FAILED/s|^==== \([^ ][^ ]*\) .*|\1 '
+ for ajc in ajc usejavac ; do
+ [ -f $ajc.out ] || exit 2
+ for i in $ajc javac ; do
+ sed -n "$sc$i|p" "$i.out" | sort > "$i.join"
+ done
+ join -a 1 -a 2 $ajc.join javac.join \
+ | sed "/$ajc javac/d" \
+ | sort > compare.javac.$ajc.out
+ rm $ajc.join javac.join
+
+ ajcCount=`sed -n "/ $ajc/p" compare.javac.$ajc.out | wc -l`
+ javacCount=`sed -n "/ javac/p" compare.javac.$ajc.out | wc -l`
+
+ echo "## $ajcCount $ajc failures unmatched by javac"
+ echo "## $javacCount javac failures unmatched by $ajc"
+ done
+ wc -l *.out
+}
+
+
+
+#############################################
+SKIP_USEJAVAC=skippingUseJavac
+#pattern='*abrupt*' # use this to test script w/o running all
+if [ ! "$1" = "compare" ] ; then
+tclDir=/cygdrive/c/home/apps/tcl # XXX crosscut only
+case `uname` in
+ CYGWIN* ) ;;
+ * ) errMssg "only cygwin supported" 4 ;;
+esac
+
+[ -z "$JDKDIR" -o -x "$JDKDIR/bin/java" ] \
+ || errMssg "requires valid JDKDIR=$JDKDIR" 5
+
+[ -z "$tclDir" -o -x "$tclDir/bin/tclsh" ] \
+ || errMssg "requires valid tclDir=$tclDir" 5
+
+cvsroot=":pserver:anoncvs@oss.software.ibm.com:/usr/cvs/jikes"
+scriptDir=`dirname "$0"`
+scriptDir=`cd "$scriptDir";pwd`
+toBaseDir=../../..
+jacksDir="${jacksDir:-`cd "$scriptDir/$toBaseDir";pwd`/jacks}"
+ajlibDir="${ajlibDir:-`cd "$scriptDir/$toBaseDir";pwd`/aj-build-modules/jars}"
+outDir="${outDir:-${1:-.}}"
+[ -d "$outDir" ] || exit 3
+
+jacksDirJ=`toJavaPath "$jacksDir"`
+jhomeJ=`toJavaPath "$JDKDIR"`
+ajlibDos=`toDosPath "$ajlibDir"`
+jhomeDos=`toDosPath "$JDKDIR"`
+
+[ -f "$ajlibDir/aspectjtools.jar" ] \
+ || errMssg "bad ajlibDir=$ajlibDir" 4
+
+## get jacks if necessary
+if [ -d "$jacksDir" ] ; then
+ [ -f "$jacksDir/jacks.tcl" ] || errMssg "bad jacksDir" 4
+ echo "## using existing jacks dir at $jacksDir"
+else
+ cd `dirname "$jacksDir"` || errMssg "bad path to $jacksDir" 5
+ echo anoncvs | cvs -d "$cvsroot" login
+ cvs -d "$cvsroot" co jacks
+fi
+
+## setup our stuff
+cd "$jacksDir" || errMssg "jacks dir failed" 6
+
+# comment unix, uncomment cygwin
+sc='/ulimit/s|^|#|'
+sc="$sc;"'/^exec tclsh8*/s|^|#|'
+sc="$sc;"'/^##* *exec tclsh.*cygpath/s|^##* *e|e|'
+sed "$sc" jacks > ff \
+ && mv ff jacks || errMssg "unable to setup jacks for cygwin" 2
+
+export PATH="$tclDir/bin:$JDKDIR/bin:$jacksDir:$PATH"
+
+## javac should work in any case
+if [ -f javac.out ] ; then
+ echo "using existing javac.out"
+ ls -ald javac.out
+else
+ ## need to setup JAVA_HOME, JAVAC, JAVA
+ sc='/^set JAVA_HOME /s|.*|set JAVA_HOME '"$JDKDIR|"
+ sc="$sc;"'/^set JAVAC /s|.*|set JAVAC $JAVA_HOME/bin/javac.exe|'
+ sc="$sc;"'/^set JAVA /s|.*|set JAVA $JAVA_HOME/bin/java.exe|'
+ sed "$sc" javac_setup > ff && mv ff javac_setup
+ echo "## starting javac at `date`"
+ jacks javac $pattern > "$outDir/"javac.out || errMssg "javac failed " "$?"
+ echo "## ending javac at `date`"
+fi
+
+if [ -f "$outDir/"ajc.out ] ; then
+ echo "using existing ajc.out"
+ ls -ald "$outDir/"ajc.out
+else
+ ## setup and run ajc
+ emit_ajcbat > ajc.bat
+ emit_ajcsetup > ajc_setup
+ echo "## starting ajc at `date`"
+ jacks ajc $pattern > "$outDir/"ajc.out || errMssg "ajc failed " "$?"
+ echo "## ending ajc at `date`"
+fi
+
+if [ -f "$outDir/"usejavac.out ] ; then
+ echo "using existing usejavac.out"
+ ls -ald "$outDir/"usejavac.out
+elif [ -n "$SKIP_USEJAVAC" ] ; then
+ echo "skipping usejavac"
+else
+ ## setup -usejavac
+ javacFlags="-usejavac"
+ emit_ajcsetup > ajc_setup
+ echo "## starting ajc -usejavac at `date`"
+ jacks ajc $pattern > "$outDir/"usejavac.out || errMssg "usejavac failed " "$?"
+ echo "## ending ajc -usejavac at `date`"
+fi
+
+fi ## not only comparing
+
+compareJacksResults
+
diff --git a/tests/sourceinfo/Hello.java b/tests/sourceinfo/Hello.java new file mode 100644 index 000000000..20270fb38 --- /dev/null +++ b/tests/sourceinfo/Hello.java @@ -0,0 +1,13 @@ +/** + * @version 1.0 + * @author + */ +public class Hello { + + public static void main(String[] args) throws Exception { + System.out.println("hello"); + fromA(); + Thread.currentThread().sleep(2000); + } +} + diff --git a/tests/sourceinfo/HelloA.java b/tests/sourceinfo/HelloA.java new file mode 100644 index 000000000..5e5dca49d --- /dev/null +++ b/tests/sourceinfo/HelloA.java @@ -0,0 +1,7 @@ +aspect HelloA { + static int Hello.fromA() { + System.out.println("from A"); + return 3; + } +} + diff --git a/tests/sourceinfo/JdiTest.java b/tests/sourceinfo/JdiTest.java new file mode 100644 index 000000000..ea56ceb7a --- /dev/null +++ b/tests/sourceinfo/JdiTest.java @@ -0,0 +1,145 @@ +import com.sun.jdi.*; +import com.sun.jdi.connect.*; +import com.sun.jdi.request.ClassPrepareRequest; +import com.sun.jdi.request.EventRequestManager; + +import java.util.*; +import java.io.*; + +/** + * @version 1.0 + * @author + */ +public class JdiTest { + static Thread errThread, outThread; + + public static void main(String[] xxx) throws Exception { + LaunchingConnector lc = findLaunchingConnector(); + String mainArgs = "Hello"; + Map args = connectorArguments(lc, mainArgs); + System.out.println(args); + VirtualMachine vm = lc.launch(args); + System.out.println(vm); + redirectOutput(vm); + vm.resume(); + + while (vm.classesByName("Hello").size() == 0) {} + + + ReferenceType rt = (ReferenceType)vm.classesByName("Hello").get(0); + System.out.println(rt); + System.out.println(rt.availableStrata()); + try { + System.out.println(rt.sourceDebugExtension()); + System.out.println("Names: " + rt.sourceNames("AspectJ")); + } catch (AbsentInformationException aie) { + System.out.println("NO source debug extension"); + } + System.out.println("Name: " + rt.sourceName()); + + + for (Iterator i = rt.allLineLocations().iterator(); i.hasNext(); ) { + Location loc = (Location)i.next(); + System.out.println(" " + loc.sourceName() + ":" + loc.lineNumber()); + } + + + try { + //eventThread.join(); + errThread.join(); // Make sure output is forwarded + outThread.join(); // before we exit + } catch (InterruptedException exc) { + // we don't interrupt + } + + } + + /** + * Find a com.sun.jdi.CommandLineLaunch connector + */ + static LaunchingConnector findLaunchingConnector() { + List connectors = Bootstrap.virtualMachineManager().allConnectors(); + Iterator iter = connectors.iterator(); + while (iter.hasNext()) { + Connector connector = (Connector) iter.next(); + if (connector.name().equals("com.sun.jdi.CommandLineLaunch")) { + return (LaunchingConnector) connector; + } + } + throw new Error("No launching connector"); + } + + /** + * Return the launching connector's arguments. + */ + static Map connectorArguments(LaunchingConnector connector, String mainArgs) { + Map arguments = connector.defaultArguments(); + Connector.Argument mainArg = (Connector.Argument) arguments.get("main"); + if (mainArg == null) { + throw new Error("Bad launching connector"); + } + mainArg.setValue(mainArgs); + +// if (watchFields) { +// // We need a VM that supports watchpoints +// Connector.Argument optionArg = (Connector.Argument) arguments.get("options"); +// if (optionArg == null) { +// throw new Error("Bad launching connector"); +// } +// optionArg.setValue("-classic"); +// } + return arguments; + } + + static void redirectOutput(VirtualMachine vm) { + Process process = vm.process(); + + // Copy target's output and error to our output and error. + errThread = new StreamRedirectThread("error reader", + process.getErrorStream(), + System.err); + outThread = new StreamRedirectThread("output reader", + process.getInputStream(), + System.out); + errThread.start(); + outThread.start(); + } + +} + +class StreamRedirectThread extends Thread { + + private final Reader in; + private final Writer out; + + private static final int BUFFER_SIZE = 2048; + + /** + * Set up for copy. + * @param name Name of the thread + * @param in Stream to copy from + * @param out Stream to copy to + */ + StreamRedirectThread(String name, InputStream in, OutputStream out) { + super(name); + this.in = new InputStreamReader(in); + this.out = new OutputStreamWriter(out); + setPriority(Thread.MAX_PRIORITY-1); + } + + /** + * Copy. + */ + public void run() { + try { + char[] cbuf = new char[BUFFER_SIZE]; + int count; + while ((count = in.read(cbuf, 0, BUFFER_SIZE)) >= 0) { + out.write(cbuf, 0, count); + } + out.flush(); + } catch(IOException exc) { + System.err.println("Child I/O Transfer - " + exc); + } + } +} diff --git a/tests/src/.cvsignore b/tests/src/.cvsignore new file mode 100644 index 000000000..a3f0b1b77 --- /dev/null +++ b/tests/src/.cvsignore @@ -0,0 +1 @@ +*.lst diff --git a/tests/src/org/aspectj/testing/Harness.java b/tests/src/org/aspectj/testing/Harness.java new file mode 100644 index 000000000..e21f924f1 --- /dev/null +++ b/tests/src/org/aspectj/testing/Harness.java @@ -0,0 +1,39 @@ +/* -*- Mode: Java; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- + * + * This file is part of the compiler and core tools for the AspectJ(tm) + * programming language; see http://aspectj.org + * + * The contents of this file are subject to the Mozilla Public License + * Version 1.1 (the "License"); you may not use this file except in + * compliance with the License. You may obtain a copy of the License at + * either http://www.mozilla.org/MPL/ or http://aspectj.org/MPL/. + * + * Software distributed under the License is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License + * for the specific language governing rights and limitations under the + * License. + * + * The Original Code is AspectJ. + * + * The Initial Developer of the Original Code is Xerox Corporation. Portions + * created by Xerox Corporation are Copyright (C) 1999-2002 Xerox Corporation. + * All Rights Reserved. + * + * Contributor(s): + */ +package org.aspectj.testing; + +/** + * @see org.aspectj.testing.drivers.Harness + */ +public class Harness { + + private Harness() {} + + /** + * @see org.aspectj.testing.drivers.Harness#main(String[]) + */ + public static void main(String[] args) throws Exception { + org.aspectj.testing.drivers.Harness.main(args); + } +} diff --git a/tests/symbols/A.java b/tests/symbols/A.java new file mode 100644 index 000000000..d838835e8 --- /dev/null +++ b/tests/symbols/A.java @@ -0,0 +1,49 @@ +package symbols; + +strictfp aspect A issingleton() { + + /** objects */ + pointcut instanceof_C(): this(C); + pointcut hasaspect_A(): if(A.hasAspect()); + + /** lexical extents */ + pointcut within_C(): within(C); + pointcut withinall_C(): within(C+); + pointcut withincode_C(): withincode(void C.*(..)); + + /** control flow */ + pointcut cflow_C(): cflow(withincode_C()); + pointcut cflowtop_C(): cflow(withincode_C() && !cflowbelow(withincode_C())); + + /** methods and constructors */ + pointcut calls_C(): call(int C.*(..)); + pointcut receptions_C(): call(int C.*(..)); + pointcut executions_C(): execution(* C.*(..,float,..)); + //pointcut callsto_C(): callsto(call(void C.*())); + + /** exception handlers */ + pointcut handlers_Thr(): handler(java.lang.Throwable); + pointcut handlers_Err(): handler(java.lang.Error); + pointcut handlers_Exc(): handler(java.lang.Exception); + pointcut handlers_Rt(): handler(java.lang.RuntimeException); + + /** fields */ + pointcut gets_f(): get(float C.*); + pointcut sets_f(): set(float C.*); + + /** Advices */ + //before(): call(void C.*()) { } + before(): this(C) && call(String Object.toString()) { } + before(): execution(C.new()) { } + after(): call(void C.*()) { } + after() returning (int x): call(int C.*(..)) { } + after() throwing (RuntimeException e): call(void C.MethV()) { + throw new RuntimeException("test"); + } + void around() : call(void C.MethV()) { proceed(); } + + /** Introductions */ + public double symbols.C.intrD; + private void C.intrMethV() { intrD += 1; } + +} diff --git a/tests/symbols/C.java b/tests/symbols/C.java new file mode 100644 index 000000000..dcefa4ade --- /dev/null +++ b/tests/symbols/C.java @@ -0,0 +1,24 @@ +package symbols; + +public class C { + /** + * multiline + * comment + */ + void MethV() { } + public void MethVI(int i) { } + static public synchronized void MethVLF(long l, float f) { } + int MethISO(String s, Object o) { return this.toString().length(); } + + public static volatile int i; + public float f; + + static { + i = 0; + } + + { + f = 1.f; + } + +} diff --git a/tests/symbols/CrosscutTest.java b/tests/symbols/CrosscutTest.java new file mode 100644 index 000000000..9eecb0df9 --- /dev/null +++ b/tests/symbols/CrosscutTest.java @@ -0,0 +1,128 @@ +import symbols.Helper; +import org.aspectj.testing.Tester; + +import org.aspectj.tools.ide.SymbolManager; +import org.aspectj.tools.ide.SourceLine; +import org.aspectj.tools.ide.Declaration; + +import java.io.File; + +public class CrosscutTest { + private static Helper h = new Helper(); + + public static void main(String[] args) { + Declaration classDec = h.getDecl("C.java", 3); + Declaration aspectDec = h.getDecl("A.java", 3); + + Declaration methodDecV = h.getDecl("C.java", 8); + Declaration methodDecVI = h.getDecl("C.java", 9); + Declaration methodDecVLF = h.getDecl("C.java",10); + Declaration methodDecISO = h.getDecl("C.java",11); + + Declaration fieldDecI = h.getDecl("C.java",13); + Declaration fieldDecF = h.getDecl("C.java",14); + + Declaration pointcutDecInstOf = h.getDecl("A.java", 6); + Declaration pointcutDecHasAsp = h.getDecl("A.java", 7); + Declaration pointcutDecWithin = h.getDecl("A.java", 10); + Declaration pointcutDecWithinAll = h.getDecl("A.java", 11); + Declaration pointcutDecWithinCode = h.getDecl("A.java", 12); + Declaration pointcutDecCFlow = h.getDecl("A.java", 15); + Declaration pointcutDecCFlowTop = h.getDecl("A.java", 16); + Declaration pointcutDecCalls = h.getDecl("A.java", 19); + Declaration pointcutDecRec = h.getDecl("A.java", 20); + Declaration pointcutDecExec = h.getDecl("A.java", 21); + Declaration pointcutDecCallsTo = h.getDecl("A.java", 22); + Declaration pointcutDecHandThr = h.getDecl("A.java", 25); + Declaration pointcutDecHandErr = h.getDecl("A.java", 26); + Declaration pointcutDecHandExc = h.getDecl("A.java", 27); + Declaration pointcutDecHandRt = h.getDecl("A.java", 28); + Declaration pointcutDecGets = h.getDecl("A.java", 31); + Declaration pointcutDecSets = h.getDecl("A.java", 32); + + Declaration adviceDecBefore = h.getDecl("A.java", 35); + Declaration adviceDecAfter = h.getDecl("A.java", 36); + Declaration adviceDecAfterRet = h.getDecl("A.java", 37); + Declaration adviceDecAfterThr = h.getDecl("A.java", 38); + Declaration adviceDecAround = h.getDecl("A.java", 41); + + Declaration fieldDecIntrD = h.getDecl("A.java", 44); + Declaration methodDecIntrV = h.getDecl("A.java", 45); + + Declaration adviceDecBeforeToString = h.getDecl("A.java", 47); + Declaration adviceDecBeforeNew = h.getDecl("A.java", 48); + + if (!h.allDecsFound) return; + + // Check "points to" + h.checkPointsNothing(methodDecV); + h.checkPointsNothing(methodDecVI); + h.checkPointsNothing(methodDecVLF); + h.checkPointsNothing(methodDecISO); + + h.checkPointsNothing(pointcutDecInstOf); + h.checkPointsNothing(pointcutDecHasAsp); + h.checkPointsNothing(pointcutDecWithin); + h.checkPointsNothing(pointcutDecWithinAll); + h.checkPointsNothing(pointcutDecWithinCode); + h.checkPointsNothing(pointcutDecCFlow); + h.checkPointsNothing(pointcutDecCFlowTop); + h.checkPointsNothing(pointcutDecCalls); + h.checkPointsNothing(pointcutDecRec); + h.checkPointsNothing(pointcutDecExec); + h.checkPointsNothing(pointcutDecCallsTo); + h.checkPointsNothing(pointcutDecHandThr); + h.checkPointsNothing(pointcutDecHandErr); + h.checkPointsNothing(pointcutDecHandExc); + h.checkPointsNothing(pointcutDecHandRt); + h.checkPointsNothing(pointcutDecGets); + h.checkPointsNothing(pointcutDecSets); + + //XXX Need to decide if advices on introductions have to point to + // the introduction declaration, or to the member that was introduced + h.checkPointsTo(adviceDecBefore, new Declaration[]{methodDecV,methodDecIntrV}); + h.checkPointsTo(adviceDecAfter, new Declaration[]{methodDecV,methodDecIntrV}); + h.checkPointsTo(adviceDecAfterRet, new Declaration[]{methodDecISO}); + h.checkPointsTo(adviceDecAfterThr, new Declaration[]{methodDecV}); + h.checkPointsTo(adviceDecAround, new Declaration[]{methodDecV}); + + h.checkPointsNothing(adviceDecBeforeToString); + h.checkPointsNothing(adviceDecBeforeNew); + + // Check "pointed by" + h.checkPointedToBy(methodDecV, new Declaration[]{adviceDecBefore,adviceDecAfter,adviceDecAfterThr,adviceDecAround}); + h.checkPointedToByNone(methodDecVI); + h.checkPointedToByNone(methodDecVLF); + h.checkPointedToBy(methodDecISO, new Declaration[]{adviceDecAfterRet}); + + h.checkPointedToByNone(pointcutDecInstOf); + h.checkPointedToByNone(pointcutDecHasAsp); + h.checkPointedToByNone(pointcutDecWithin); + h.checkPointedToByNone(pointcutDecWithinAll); + h.checkPointedToByNone(pointcutDecWithinCode); + h.checkPointedToByNone(pointcutDecCFlow); + h.checkPointedToByNone(pointcutDecCFlowTop); + h.checkPointedToByNone(pointcutDecCalls); + h.checkPointedToByNone(pointcutDecRec); + h.checkPointedToByNone(pointcutDecExec); + h.checkPointedToByNone(pointcutDecCallsTo); + h.checkPointedToByNone(pointcutDecHandThr); + h.checkPointedToByNone(pointcutDecHandErr); + h.checkPointedToByNone(pointcutDecHandExc); + h.checkPointedToByNone(pointcutDecHandRt); + h.checkPointedToByNone(pointcutDecGets); + h.checkPointedToByNone(pointcutDecSets); + + h.checkPointedToByNone(adviceDecBefore); + h.checkPointedToByNone(adviceDecBefore); + h.checkPointedToByNone(adviceDecAfter); + h.checkPointedToByNone(adviceDecAfterRet); + h.checkPointedToByNone(adviceDecAfterThr); + h.checkPointedToByNone(adviceDecAround); + + h.checkPointedToByNone(adviceDecBeforeToString); + h.checkPointedToByNone(adviceDecBeforeNew); + } + +} + diff --git a/tests/symbols/GenericTest.java b/tests/symbols/GenericTest.java new file mode 100644 index 000000000..650dbc8f1 --- /dev/null +++ b/tests/symbols/GenericTest.java @@ -0,0 +1,268 @@ +import symbols.Helper; +import org.aspectj.testing.Tester; + +import org.aspectj.tools.ide.SymbolManager; +import org.aspectj.tools.ide.SourceLine; +import org.aspectj.tools.ide.Declaration; + +import java.io.File; + +public class GenericTest { + private static Helper h = new Helper(); + + public static void main(String[] args) { + Declaration classDec = h.getDecl("C.java", 3); + Declaration aspectDec = h.getDecl("A.java", 3); + + Declaration fieldDecI = h.getDecl("C.java", 13); + Declaration fieldDecF = h.getDecl("C.java", 14); + + //Declaration initDecS = h.getDecl("C.java", 22); + //Declaration initDec = h.getDecl("C.java", 26); + + Declaration methodDecV = h.getDecl("C.java", 8); + Declaration methodDecVI = h.getDecl("C.java", 9); + Declaration methodDecVLF = h.getDecl("C.java",10); + Declaration methodDecISO = h.getDecl("C.java",11); + + Declaration pointcutDecInstOf = h.getDecl("A.java", 6); + Declaration pointcutDecHasAsp = h.getDecl("A.java", 7); + Declaration pointcutDecWithin = h.getDecl("A.java", 10); + Declaration pointcutDecWithinAll = h.getDecl("A.java", 11); + Declaration pointcutDecWithinCode = h.getDecl("A.java", 12); + Declaration pointcutDecCFlow = h.getDecl("A.java", 15); + Declaration pointcutDecCFlowTop = h.getDecl("A.java", 16); + Declaration pointcutDecCalls = h.getDecl("A.java", 19); + Declaration pointcutDecRec = h.getDecl("A.java", 20); + Declaration pointcutDecExec = h.getDecl("A.java", 21); + Declaration pointcutDecCallsTo = h.getDecl("A.java", 22); + Declaration pointcutDecHandThr = h.getDecl("A.java", 25); + Declaration pointcutDecHandErr = h.getDecl("A.java", 26); + Declaration pointcutDecHandExc = h.getDecl("A.java", 27); + Declaration pointcutDecHandRt = h.getDecl("A.java", 28); + Declaration pointcutDecGets = h.getDecl("A.java", 31); + Declaration pointcutDecSets = h.getDecl("A.java", 32); + + Declaration adviceDecBefore = h.getDecl("A.java", 35); + Declaration adviceDecAfter = h.getDecl("A.java", 36); + Declaration adviceDecAfterRet = h.getDecl("A.java", 37); + Declaration adviceDecAfterThr = h.getDecl("A.java", 38); + Declaration adviceDecAround = h.getDecl("A.java", 41); + Declaration adviceDecBeforeToString = h.getDecl("A.java", 47); + Declaration adviceDecBeforeNew = h.getDecl("A.java", 48); + + + Declaration fieldDecIntrD = h.getDecl("A.java", 44); + Declaration methodDecIntrV = h.getDecl("A.java", 45); + + // check we've checking all decs in aspect A and class C + h.checkAllDecsOf(classDec,new Declaration[]{ + fieldDecI, + fieldDecF, + //initDecS, + //initDec, + methodDecV, + methodDecVI, + methodDecVLF, + methodDecISO + }); + h.checkAllDecsOf(aspectDec,new Declaration[]{ + pointcutDecInstOf, + pointcutDecHasAsp, + pointcutDecWithin, + pointcutDecWithinAll, + pointcutDecWithinCode, + pointcutDecCFlow, + pointcutDecCFlowTop, + pointcutDecCalls, + pointcutDecRec, + pointcutDecExec, + pointcutDecCallsTo, + pointcutDecHandThr, + pointcutDecHandErr, + pointcutDecHandExc, + pointcutDecHandRt, + pointcutDecGets, + pointcutDecSets, + adviceDecBefore, + adviceDecAfter, + adviceDecAfterRet, + adviceDecAfterThr, + adviceDecAround, + adviceDecBeforeToString, + adviceDecBeforeNew, + fieldDecIntrD, + methodDecIntrV + }); + + if (!h.allDecsFound) return; + + h.checkPos(classDec, 3, 1,24, 2, "C.java"); + h.checkPos(aspectDec, 3, 1,49, 2, "A.java"); + h.checkPos(fieldDecI, 13, 5,13,34, "C.java"); + h.checkPos(fieldDecF, 14, 5,14,20, "C.java"); + h.checkPos(methodDecV, 8, 5, 8, 21, "C.java"); + h.checkPos(methodDecVI, 9, 5, 9, 34, "C.java"); + h.checkPos(methodDecVLF,10, 5,10, 65, "C.java"); + h.checkPos(methodDecISO,11, 5,11, 74, "C.java"); + h.checkPos(pointcutDecInstOf, 6, 5, 6, 44, "A.java"); + h.checkPos(pointcutDecHasAsp, 7, 5, 7, 42, "A.java"); + h.checkPos(pointcutDecWithin, 10, 5, 10, 36, "A.java"); + h.checkPos(pointcutDecWithinAll, 11, 5, 11, 42, "A.java"); + h.checkPos(pointcutDecWithinCode,12, 5, 12, 55, "A.java"); + h.checkPos(pointcutDecCFlow, 15, 5, 15, 47, "A.java"); + h.checkPos(pointcutDecCFlowTop, 16, 5, 16, 53, "A.java"); + h.checkPos(pointcutDecCalls, 19, 5, 19, 44, "A.java"); + h.checkPos(pointcutDecRec, 20, 5, 20, 54, "A.java"); + h.checkPos(pointcutDecExec, 21, 5, 21, 61, "A.java"); + h.checkPos(pointcutDecCallsTo, 22, 5, 22, 59, "A.java"); + h.checkPos(pointcutDecHandThr, 25, 5, 25, 60, "A.java"); + h.checkPos(pointcutDecHandErr, 26, 5, 26, 56, "A.java"); + h.checkPos(pointcutDecHandExc, 27, 5, 27, 60, "A.java"); + h.checkPos(pointcutDecHandRt, 28, 5, 28, 66, "A.java"); + h.checkPos(pointcutDecGets, 31, 5, 31, 40, "A.java"); + h.checkPos(pointcutDecSets, 32, 5, 32, 40, "A.java"); + h.checkPos(adviceDecBefore, 35, 5, 35, 41, "A.java"); + h.checkPos(adviceDecAfter, 36, 5, 36, 40, "A.java"); + h.checkPos(adviceDecAfterRet, 37, 5, 37, 59, "A.java"); + h.checkPos(adviceDecAfterThr, 38, 5, 40, 6, "A.java"); + h.checkPos(adviceDecAround, 41, 5, 41, 69, "A.java"); + h.checkPos(fieldDecIntrD, 44, 5, 44, 35, "A.java"); + h.checkPos(methodDecIntrV, 45, 5, 45, 47, "A.java"); + + h.checkKind(classDec, "class"); + h.checkKind(aspectDec, "class"); + h.checkKind(fieldDecI, "field"); + h.checkKind(fieldDecF, "field"); + h.checkKind(methodDecV, "method"); + h.checkKind(methodDecVI, "method"); + h.checkKind(methodDecVLF, "method"); + h.checkKind(methodDecISO, "method"); + h.checkKind(pointcutDecInstOf, "pointcut"); + h.checkKind(pointcutDecHasAsp, "pointcut"); + h.checkKind(pointcutDecWithin, "pointcut"); + h.checkKind(pointcutDecWithinAll, "pointcut"); + h.checkKind(pointcutDecWithinCode,"pointcut"); + h.checkKind(pointcutDecCFlow, "pointcut"); + h.checkKind(pointcutDecCFlowTop, "pointcut"); + h.checkKind(pointcutDecCalls, "pointcut"); + h.checkKind(pointcutDecRec, "pointcut"); + h.checkKind(pointcutDecExec, "pointcut"); + h.checkKind(pointcutDecCallsTo, "pointcut"); + h.checkKind(pointcutDecHandThr, "pointcut"); + h.checkKind(pointcutDecHandErr, "pointcut"); + h.checkKind(pointcutDecHandExc, "pointcut"); + h.checkKind(pointcutDecHandRt, "pointcut"); + h.checkKind(pointcutDecGets, "pointcut"); + h.checkKind(pointcutDecSets, "pointcut"); + h.checkKind(adviceDecBefore, "advice"); + h.checkKind(adviceDecAfter, "advice"); + h.checkKind(adviceDecAfterRet, "advice"); + h.checkKind(adviceDecAfterThr, "advice"); + h.checkKind(adviceDecAround, "advice"); + h.checkKind(fieldDecIntrD, "introduction"); + h.checkKind(methodDecIntrV, "introduction"); + + h.checkFormalComment(classDec, ""); + h.checkFormalComment(aspectDec, ""); + h.checkFormalComment(fieldDecI, ""); + h.checkFormalComment(fieldDecF, ""); + h.checkFormalComment(methodDecV, "/**\n * multiline\n * comment\n */"); + h.checkFormalComment(methodDecVI, ""); + h.checkFormalComment(methodDecVLF, ""); + h.checkFormalComment(methodDecISO, ""); + h.checkFormalComment(pointcutDecInstOf, "/** objects */"); + h.checkFormalComment(pointcutDecHasAsp, ""); + h.checkFormalComment(pointcutDecWithin, "/** lexical extents */"); + h.checkFormalComment(pointcutDecWithinAll, ""); + h.checkFormalComment(pointcutDecWithinCode,""); + h.checkFormalComment(pointcutDecCFlow, "/** control flow */"); + h.checkFormalComment(pointcutDecCFlowTop, ""); + h.checkFormalComment(pointcutDecCalls, "/** methods and constructors */"); + h.checkFormalComment(pointcutDecRec, ""); + h.checkFormalComment(pointcutDecExec, ""); + h.checkFormalComment(pointcutDecCallsTo, ""); + h.checkFormalComment(pointcutDecHandThr, "/** exception handlers */"); + h.checkFormalComment(pointcutDecHandErr, ""); + h.checkFormalComment(pointcutDecHandExc, ""); + h.checkFormalComment(pointcutDecHandRt, ""); + h.checkFormalComment(pointcutDecGets, "/** fields */"); + h.checkFormalComment(pointcutDecSets, ""); + h.checkFormalComment(adviceDecBefore, "/** Advices */"); + h.checkFormalComment(adviceDecAfter, ""); + h.checkFormalComment(adviceDecAfterRet, ""); + h.checkFormalComment(adviceDecAfterThr, ""); + h.checkFormalComment(adviceDecAround, ""); + h.checkFormalComment(fieldDecIntrD, "/** Introductions */"); + h.checkFormalComment(methodDecIntrV, ""); + + h.checkModifiers(classDec, "public"); + h.checkModifiers(aspectDec, "public strictfp"); + h.checkModifiers(fieldDecI, "public static volatile"); + h.checkModifiers(fieldDecF, "public"); + h.checkModifiers(methodDecV, ""); + h.checkModifiers(methodDecVI, "public"); + h.checkModifiers(methodDecVLF, "synchronized public static"); + h.checkModifiers(methodDecISO, ""); + h.checkModifiers(pointcutDecInstOf, ""); + h.checkModifiers(pointcutDecHasAsp, ""); + h.checkModifiers(pointcutDecWithin, ""); + h.checkModifiers(pointcutDecWithinAll, ""); + h.checkModifiers(pointcutDecWithinCode,""); + h.checkModifiers(pointcutDecCFlow, ""); + h.checkModifiers(pointcutDecCFlowTop, ""); + h.checkModifiers(pointcutDecCalls, ""); + h.checkModifiers(pointcutDecRec, ""); + h.checkModifiers(pointcutDecExec, ""); + h.checkModifiers(pointcutDecCallsTo, ""); + h.checkModifiers(pointcutDecHandThr, ""); + h.checkModifiers(pointcutDecHandErr, ""); + h.checkModifiers(pointcutDecHandExc, ""); + h.checkModifiers(pointcutDecHandRt, ""); + h.checkModifiers(pointcutDecGets, ""); + h.checkModifiers(pointcutDecSets, ""); + h.checkModifiers(adviceDecBefore, ""); + h.checkModifiers(adviceDecAfter, ""); + h.checkModifiers(adviceDecAfterRet, ""); + h.checkModifiers(adviceDecAfterThr, ""); + h.checkModifiers(adviceDecAround, ""); + h.checkModifiers(fieldDecIntrD, "public"); + h.checkModifiers(methodDecIntrV, "private"); + + h.checkSignature(classDec, "C", "public class C"); + h.checkSignature(aspectDec, "A", "public strictfp class A"); + h.checkSignature(fieldDecI, "i", "public static volatile int i"); + h.checkSignature(fieldDecF, "f", "public float f"); + h.checkSignature(methodDecV, "MethV()", "void MethV()"); + h.checkSignature(methodDecVI, "MethVI(int)", "public void MethVI(int i)"); + h.checkSignature(methodDecVLF, "MethVLF(long, float)", "public static synchronized void MethVLF(long l, float f)"); + h.checkSignature(methodDecISO, "MethISO(String, Object)", "int MethISO(java.lang.String s, java.lang.Object o)"); + h.checkSignature(pointcutDecInstOf, "instanceof_C()", ""); + h.checkSignature(pointcutDecHasAsp, "hasaspect_A()", ""); + h.checkSignature(pointcutDecWithin, "within_C()", ""); + h.checkSignature(pointcutDecWithinAll, "withinall_C()", ""); + h.checkSignature(pointcutDecWithinCode,"withincode_C()", ""); + h.checkSignature(pointcutDecCFlow, "cflow_C()", ""); + h.checkSignature(pointcutDecCFlowTop, "cflowtop_C()", ""); + h.checkSignature(pointcutDecCalls, "calls_C()", ""); + h.checkSignature(pointcutDecRec, "receptions_C()", ""); + h.checkSignature(pointcutDecExec, "executions_C()", ""); + h.checkSignature(pointcutDecCallsTo, "callsto_C()", ""); + h.checkSignature(pointcutDecHandThr, "handlers_Thr()", ""); + h.checkSignature(pointcutDecHandErr, "handlers_Err()", ""); + h.checkSignature(pointcutDecHandExc, "handlers_Exc()", ""); + h.checkSignature(pointcutDecHandRt, "handlers_Rt()", ""); + h.checkSignature(pointcutDecGets, "gets_f()", ""); + h.checkSignature(pointcutDecSets, "sets_f()", ""); + h.checkSignature(adviceDecBefore, "before()", ""); + h.checkSignature(adviceDecAfter, "after()", ""); + h.checkSignature(adviceDecAfterRet, "afterReturning()", ""); + h.checkSignature(adviceDecAfterThr, "afterThrowing()", ""); + h.checkSignature(adviceDecAround, "around()", ""); + h.checkSignature(fieldDecIntrD, "C.intrD", ""); + h.checkSignature(methodDecIntrV, "C.intrMethV()", ""); + + } + +} + diff --git a/tests/symbols/Helper.java b/tests/symbols/Helper.java new file mode 100644 index 000000000..2fe5164d4 --- /dev/null +++ b/tests/symbols/Helper.java @@ -0,0 +1,220 @@ +package symbols; + +import org.aspectj.testing.Tester; + +import org.aspectj.tools.ide.SymbolManager; +import org.aspectj.tools.ide.SourceLine; +import org.aspectj.tools.ide.Declaration; + +import java.io.File; +import java.util.StringTokenizer; + +public class Helper { + + public final SymbolManager sm = SymbolManager.getSymbolManager(); + + public String file(String fn) { + return new File(new File("symbols"),fn).getAbsolutePath(); + } + + public boolean allDecsFound = true; + public Declaration getDecl(String fn, int ln) { + Declaration dec = sm.getDeclarationAtLine(file(fn), ln); + if (dec == null) { + allDecsFound = false; + Tester.checkFailed("Declaration at "+fn+":"+ln+" not found"); + } + return dec; + } + + public void checkPos(Declaration dec, int line1, int col1, int line2, int col2, String fname) { + if (dec == null) return; + Tester.checkEqual(dec.getBeginLine(), line1, "wrond begin line of "+getName(dec)); + Tester.checkEqual(dec.getEndLine(), line2, "wrond end line of "+getName(dec)); + Tester.checkEqual(dec.getBeginColumn(),col1, "wrond begin column of "+getName(dec)); + Tester.checkEqual(dec.getEndColumn(), col2, "wrond end column of "+getName(dec)); + Tester.checkEqual(dec.getFilename(), file(fname), "wrond file name of "+getName(dec)); + } + + public void checkKind(Declaration dec, String kind) { + if (dec == null) return; + Tester.checkEqual(dec.getKind(),kind,"kinds differ"); + } + + public void checkSignature(Declaration dec, String sig, String fsig) { + if (dec == null) return; + String dsig = dec.getSignature(); + String dfsig = dec.getFullSignature(); + if (dsig != null) { + dsig = dsig.trim(); + if (dsig.startsWith("/*") && dsig.endsWith("*/")) dsig = ""; + } + if (dfsig != null) { + dfsig = dfsig.trim(); + if (dfsig.startsWith("/*") && dfsig.endsWith("*/")) dfsig = ""; + } + Tester.checkEqual(dsig,sig,"signatures of '"+getName(dec)+"' differ"); + Tester.checkEqual(dfsig,fsig,"full signatures of '"+getName(dec)+"' differ"); + } + + public void checkFormalComment(Declaration dec, String comment) { + if (dec == null) return; + String fc = dec.getFormalComment(); + if (fc != null) fc = fc.trim(); + //Tester.checkEqual(fc,comment,"formal comment differ"); + } + + public void checkPointsNothing(Declaration dec) { + if (dec == null) return; + Declaration[] points = dec.getPointsTo(); + if (points == null) { + Tester.checkFailed(".getPointsTo() for Declaration of "+getName(dec)+" returns 'null'"); + return; + } + for (int i=0; i < points.length; i++) { + Tester.checkFailed("unexpected that "+getName(dec)+" points to "+getName(points[i])); + } + } + public void checkPointsTo(Declaration dec, Declaration[] expected) { + if (dec == null) return; + Declaration[] points = dec.getPointsTo(); + if (points == null) { + Tester.checkFailed(".getPointsTo() for Declaration of "+getName(dec)+" returns 'null'"); + return; + } + int i, j; + for (i=0; i < expected.length; i++) { + if (expected[i] == null) { + Tester.checkFailed("array element ["+i+"] of expected 'points to' declarations of "+getName(dec)+" contains 'null'"); + continue; + } + for (j=0; j < points.length; j++) { + if (expected[i].equals(points[j])) break; + } + if (j >= points.length) + Tester.checkFailed("expected that "+getName(dec)+" points to "+getName(expected[i])); + } + for (i=0; i < points.length; i++) { + if (points[i] == null) { + Tester.checkFailed(".getPointsTo() array element ["+i+"] of declaration "+getName(dec)+" contains 'null'"); + continue; + } + for (j=0; j < expected.length; j++) { + if (points[i].equals(expected[j])) break; + } + if (j >= expected.length) + Tester.checkFailed("unexpected that "+getName(dec)+" points to "+getName(points[i])); + } + } + + public void checkPointedToByNone(Declaration dec) { + if (dec == null) return; + Declaration[] pointed = dec.getPointedToBy(); + if (pointed == null) { + Tester.checkFailed(".getPointedToBy() for Declaration of "+getName(dec)+" returns 'null'"); + return; + } + for (int i=0; i < pointed.length; i++) { + Tester.checkFailed("unexpected that "+getName(dec)+" pointed by "+getName(pointed[i])); + } + } + public void checkPointedToBy(Declaration dec, Declaration[] expected) { + if (dec == null) return; + Declaration[] pointed = dec.getPointedToBy(); + if (pointed == null) { + Tester.checkFailed(".getPointedToBy() for Declaration of "+getName(dec)+" returns 'null'"); + return; + } + int i, j; + for (i=0; i < expected.length; i++) { + if (expected[i] == null) { + Tester.checkFailed("array element ["+i+"] of expected 'pointed to by' declarations of "+getName(dec)+" contains 'null'"); + continue; + } + for (j=0; j < pointed.length; j++) { + if (pointed[j].equals(expected[i])) break; + } + if (j >= pointed.length) + Tester.checkFailed("expected that "+getName(dec)+" pointed to by "+getName(expected[i])); + } + for (i=0; i < pointed.length; i++) { + if (pointed[i] == null) { + Tester.checkFailed(".getPointedToBy() array element ["+i+"] of declaration "+getName(dec)+" contains 'null'"); + continue; + } + for (j=0; j < expected.length; j++) { + if (pointed[i].equals(expected[j])) break; + } + if (j >= expected.length) + Tester.checkFailed("unexpected that "+getName(dec)+" pointed to by "+getName(pointed[i])); + } + } + + public void checkModifiers(Declaration dec, String expected_modifiers) { + if (dec == null) return; + StringTokenizer st = new StringTokenizer(expected_modifiers); + String[] expected = new String[st.countTokens()]; + for(int i=0; i < expected.length; i++) expected[i] = st.nextToken(); + st = new StringTokenizer(dec.getModifiers()); + String[] modifiers = new String[st.countTokens()]; + for(int i=0; i < modifiers.length; i++) modifiers[i] = st.nextToken(); + + int i, j; + for (i=0; i < expected.length; i++) { + for (j=0; j < modifiers.length; j++) { + if (modifiers[j].equals(expected[i])) break; + } + if (j >= modifiers.length) + Tester.checkFailed("expected that "+getName(dec)+" has modifier "+expected[i]); + } + for (i=0; i < modifiers.length; i++) { + for (j=0; j < expected.length; j++) { + if (modifiers[i].equals(expected[j])) break; + } + if (j >= expected.length) + Tester.checkFailed("unexpected that "+getName(dec)+" has modifier "+modifiers[i]); + } + } + + public void checkAllDecsOf(Declaration dec, Declaration[] decs) { + Declaration[] sdecs = dec.getDeclarations(); + if (sdecs == null) { + Tester.checkFailed("unexpected that 'getDeclarations' for "+getName(dec)+" returned 'null'"); + return; + } + int i, j; + for (i=0; i < decs.length; i++) { + if (decs[i] == null) continue; + for (j=0; j < sdecs.length; j++) { + if (decs[j].equals(sdecs[i])) break; + } + if (j >= sdecs.length) + Tester.checkFailed("expected that "+getName(dec)+" contains "+getName(decs[i])); + } + for (i=0; i < sdecs.length; i++) { + if (sdecs[i] == null) continue; + for (j=0; j < decs.length; j++) { + if (sdecs[i].equals(decs[j])) break; + } + if (j >= decs.length) + Tester.checkFailed("unexpected that "+getName(dec)+" contains "+getName(sdecs[i])); + } + } + + private static String getName(Declaration dec) { + if (dec == null) return "<null>"; + String name = dec.getSignature(); + if (name != null && name.length() > 0) return name + "(" + getFilePos(dec) + ")"; + name = dec.getKind() + " at " + getFilePos(dec); + return name; + } + private static String getFilePos(Declaration dec) { + String longFileName = dec.getFilename(); + if (longFileName == null) return "?.java:" + dec.getBeginLine(); + int pos = longFileName.lastIndexOf('/'); + if (pos < 0) pos = longFileName.lastIndexOf('\\'); + if (pos < 0) return longFileName + ":" + dec.getBeginLine(); + return longFileName.substring(pos+1) + ":" + dec.getBeginLine(); + } +} + diff --git a/tests/test-other-systems.xml b/tests/test-other-systems.xml new file mode 100644 index 000000000..92958ae6f --- /dev/null +++ b/tests/test-other-systems.xml @@ -0,0 +1,1104 @@ + +<!-- -*- Mode: SGML; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- --> + +<!-- ========================================================================= --> +<!-- Copyright (c) 2002 Palo Alto Research Center, Incorporated (PARC). --> +<!-- All rights reserved. --> +<!-- This program and the accompanying materials are made available --> +<!-- under the terms of the Common Public License v1.0 --> +<!-- which accompanies this distribution and is available at --> +<!-- http://www.eclipse.org/legal/cpl-v10.html --> +<!-- --> +<!-- Contributors: --> +<!-- Xerox/PARC initial implementation --> +<!-- ========================================================================= --> + +<!-- ============================================================== --> +<!-- - N O T E S - --> +<!-- --> +<!-- All tests use common source directory, common system classes, --> +<!-- and common temporary directories. Thus, the setup required: --> +<!-- - The temporary directories are created by the script. --> +<!-- - Build the ajctest taskdef into ${ajctest.pathelement} --> +<!-- - Build the MainWrapper into ${ajctest.mainwrapper.jar} --> +<!-- - Aspectj runtime classes must be in ${aspectjrt.jar} --> +<!-- - The source directory combines internal and external sources. --> +<!-- Internal source is from cvs, external is from a zip file, and --> +<!-- both are combined in cvs. This should be changeable with --> +<!-- only a few edits to combine in a third directory or read from --> +<!-- a single repository. Also used are rt.jar and tools.jar. --> +<!-- The jars and zips are used in-place rather than copying. --> +<!-- Also note: --> +<!-- - to avoid running the huge tests, define ${skip.hard.tests} --> +<!-- - todo: time tests and put in target description --> +<!-- --> +<!-- ============================================================== --> + +<!-- @process-test ajc test-other-systems.xml test # run 3P ajc tests --> +<project name="test-other-systems" default="test" basedir="."> + <property name="project.name" value="ajctest"/> + + + <target name="info"> + <echo> + Runs cycles of ajc/ajdoc/java on other large systems, + using taskdef in testing module. Expected and generated files: + + build/ + aj-results/ + jars/ + testing-drivers-all.jar # taskdef and required libraries + lib/ + test-other-systems/ + other-systems-src.zip # sources for other systems + lib/ # libraries for sources (unused?XXX) + rt.jar + tools.jar + + tests/ + test-other-systems.xml # this script - run from this directory + other-systems/ # aspect sources + aj-other-systems-temp/ # temporary build files + other-systems/ # generated, contains other-systems plus library src + classes/ + lib/ # copy of libraries above + rt.jar + tools.jar +</echo> + </target> + + <!-- ============================================================ --> + <!-- Init --> + <!-- ============================================================ --> + <target name="init" > + <echo message="init ajctest.xml"/> + <!-- base dir for other-systems test sources --> + <property name="other-systems.base.dir" + location="${basedir}"/> + <property name="jdk.tools.jar" + location="XXXTODO_DEFINE_TOOLS.jar"/> + + <property name="aspectj.modules.build.dir" + location="${basedir}/../build"/> + <property name="aj.build.results.dir" + location="${aspectj.modules.build.dir}/aj-results"/> + <property name="aspectj.modules.lib.dir" + location="${basedir}/../lib"/> + <property name="aspectj.other-systems.lib.dir" + location="${aspectj.modules.lib.dir}/test-other-systems"/> + + <!-- ============================================================ --> + <!-- Global properties - require aspectj.init --> + <!-- ============================================================ --> + <!-- base dir for our internal other-systems test sources --> + <!-- base dir for other-systems test sources --> + <!-- zip of other-systems test sources --> + + <property name="aj.otherSystems.dir" + location="${basedir}/aj-other-systems"/> + + <!-- temporary base dir for unzipped test data is not in build temp dir b/c costly --> + <property name="aj.otherSystems.dir" + location="${basedir}/aj-other-systems"/> + <!-- source files --> + <property name="aj.otherSystems.src.dir" + location="${aj.otherSystems.dir}/src"/> + <property name="aj.otherSystems.lib.dir" + location="${aj.otherSystems.dir}/lib"/> + <!-- temp classes dir --> + <property name="output.classes.dir" + location="${aj.otherSystems.dir}/classes"/> + <!-- temp working dir XXX unused --> + <property name="workingdir" + location="${aj.otherSystems.dir}/workingdir"/> + <!-- run from source files directory --> + <property name="otherSystems.run.dir" + location="${aj.otherSystems.src.dir}"/> + + <!-- XXX dependency on ../build/build.xml value for jar output position --> + <property name="aj.jar.dir" + location="${aspectj.modules.build.dir}/aj-results/jars"/> + <property name="aj.modules.runtime.jar" + location="${aj.jar.dir}/runtime.jar"/> + <property name="aj.modules.eajctesting.jar" + location="${aj.jar.dir}/testing-drivers-all.jar"/> + + <property name="ajctest.classpath" + value="${aj.modules.eajctesting.jar}${path.separator}${jdk.tools.jar}" /> + + <!-- unzipped libraries --> + <property name="otherSystems.src.zip" + location="${aspectj.other-systems.lib.dir}/other-systems-src.zip"/> + <!-- unused? + <property name="otherSystems.runtime.jar" + location="${aj.otherSystems.dir}/lib/rt.jar"/> + <property name="otherSystems.tools.jar" + location="${aj.otherSystems.dir}/lib/tools.jar"/> + --> + + <!-- sensible alias to combined other-systems test sources --> + <property name="ajctest.src.dir" + value="${aj.otherSystems.src.dir}"/> + <!-- system classes directory --> + <property name="aj.runtime.classes" + value="${aj.modules.runtime.jar}"/> + + <property name="ajctest.classpath" + value="${aj.modules.eajctesting.jar}${path.separator}${jdk.tools.jar}" /> + + <!-- set args applied to ajc when running all tests --> + <property name="ajctest.args" + value="" /> + + <!-- sources installed? assume everything else is... --> + <available property="prepare.completed" + file="${aj.otherSystems.src.dir}/rsa/src/JCETest.java" /> + + <!-- check if testing classes are available --> + <available property="aj.modules.runtime.jar.available" + file="${aj.modules.runtime.jar}" /> + <available property="aj.modules.eajctesting.jar.available" + file="${aj.modules.eajctesting.jar}" /> + <available property="otherSystems.src.zip.available" + file="${otherSystems.src.zip}" /> + + <!-- XXX properties used in testing..Ajctest.java --> + <property name="ajctest.pathelement" + location="${aj.modules.eajctesting.jar}" /> + <!-- todo: testing.jar for wrapper - only need MainWrapper classes --> + <property name="ajctest.wrapper.jar" + location="${aj.modules.eajctesting.jar}" /> + + + <!-- echo settings that affect running --> + <echo> + "## ajctest FYI skip.hard.tests: ${skip.hard.tests}" + "## ajctest FYI ajctest.classpath: ${ajctest.classpath}" + "## ajctest FYI ajctest.args: ${ajctest.args}" + "## ajctest FYI ajctest.compiler: ${ajctest.compiler}" + </echo> + + <taskdef name="ajctest" + classname="org.aspectj.internal.tools.ant.taskdefs.Ajctest" + classpath="${ajctest.classpath}" /> + + <!-- setup needed directories --> + <mkdir dir="${output.classes.dir}"/> + <mkdir dir="${ajctest.src.dir}"/> + + <!-- echo context --> + <!-- antcall target="echo.build.variables"/ --> + </target> + + <target name="warnings" depends="init"> + <fail unless="aj.modules.runtime.jar.available" + message="build ${aj.modules.runtime.jar}"/> + <fail unless="aj.modules.eajctesting.jar.available" + message="build ${aj.modules.eajctesting.jar}"/> + <fail unless="otherSystems.src.zip.available" + message="get ${otherSystems.src.zip}"/> + </target> + + <!-- ============================================================ --> + <!-- Prepare internal and external source --> + <!-- ============================================================ --> + <target name="prepare" depends="init,warnings" + unless="prepare.completed"> + <copy todir="${aj.otherSystems.src.dir}" > + <fileset dir="${basedir}/other-systems"/> + </copy> + <unzip dest="${aj.otherSystems.src.dir}" + src="${otherSystems.src.zip}"/> + </target> + + <!-- ============================================================ --> + <!-- Tests that pass - before refactoring (todo remove when done) --> + <!-- ============================================================ --> + <target name="temp-pass-tests" + depends="rsa,biojava,jato,kawa, + gnuprolog,jarp,jiu, + tt-bytecode,xc4j,jmeter,bcel, + jame,sablecc,examples, nsuml,jsci, + applets"/> + + <!-- ============================================================ --> + <!-- Tests that pass --> + <!-- ============================================================ --> + <target name="pass-tests" + depends="rsa,biojava,jato,kawa, + gnuprolog,jarp,jiu, + tt-bytecode,xc4j,jmeter,bcel, + jame,sablecc,examples, + nsuml,jsci, + ajc, java-src, + applets, jedit"/> + + <!-- ============================================================ --> + <!-- Tests that use a lot of resources --> + <!-- ============================================================ --> + <target name="hard-tests" depends="hard-ajc,hard-java-src"/> + + <!-- ============================================================ --> + <!-- Test that should run last --> + <!-- ============================================================ --> + <target name="last-tests" depends="swing"/> + + <!-- ============================================================ --> + <!-- All tests --> + <!-- Depends on the passing tests and failing tests --> + <!-- ============================================================ --> + <target name="test" depends="pass-tests,hard-tests,last-tests"/> + + <!-- ============================================================ --> + <!-- Clean the build directory --> + <!-- todo: also clean internal of external sources? --> + <!-- ============================================================ --> + <target name="clean" unless="noclean"> + <delete dir="${output.classes.dir}"/> + <delete dir="${workingdir}"/> + </target> + + <!-- ============================================================ --> + <!-- compile target for the sake of orthogonal targets --> + <!-- todo: add compile of required classes? --> + <!-- ============================================================ --> + <target name="compile" > + <echo message="ajctest: no compile target"/> + </target> + + <!-- ============================================================ --> + <!-- target to test ajcclean and the build script --> + <!-- ============================================================ --> + <target name="testWrap" depends="prepare" + description="(wes-only) target for testing ajclean and build scripts" > + <ajctest testId="testWrap" + dir="c:/home/wes/work/src" + args="${ajctest.args}" + destdir="${output.classes.dir}" > + <classpath> + <pathelement path="${output.classes.dir}"/> + <pathelement path="${aj.runtime.classes}"/> + </classpath> + <java classname="TestWrap"/> + <java classname="TestWrapException"/> + <!-- testset argfiles="testwrapCompileError.lst" / --> + <testset argfiles="testwrap.lst"/> + </ajctest> + </target> + + <!-- ============================================================ --> + <!-- All the projects --> + <!-- ============================================================ --> + <target name="rsa" depends="prepare"> + <ajctest testId="rsa" + dir="${ajctest.src.dir}/rsa" + args="showversion,${ajctest.args}" + destdir="${output.classes.dir}"> + <classpath> + <pathelement path="${output.classes.dir}"/> + <pathelement path="${aj.runtime.classes}"/> + <pathelement path="${external.other-systems.runtime.jar}"/> + <pathelement path="${external.other-systems.tools.jar}"/> + </classpath> + <java classname="SignatureTest"/> + <java classname="JCETest"/> + <testset argfiles="getssets.lst"/> + <testset argfiles="main.lst"/> + </ajctest> + </target> + + <target name="biojava.depends" depends="prepare"> + <copy todir="${output.classes.dir}"> + <fileset dir="${ajctest.src.dir}/biojava/resources" includes="**/*.xml"/> + </copy> + </target> + + <target name="biojava" depends="prepare"> + <ajctest testId="biojava" + dir="${ajctest.src.dir}/biojava" + args="${ajctest.args}" + destdir="${output.classes.dir}" + depends="biojava.depends"> + <classpath> + <fileset dir="${ajctest.src.dir}/biojava/lib"> + <include name="**/*.jar"/> + </fileset> + <pathelement path="${output.classes.dir}"/> + <pathelement path="${aj.runtime.classes}"/> + </classpath> + <java classname="org.biojava.bio.seq.db.SimpleSequenceDBInstallation"/> + <java classname="symbol.TestWindowedSymbolList"/> + <java classname="symbol.TestSimpleAlignment"/> + <java classname="symbol.TestOrderNSymbolList"/> + <java classname="symbol.TestGappedSymbolList"/> + <java classname="symbol.TestAmbiguity"/> + <java classname="seq.TestTranslation"/> + <java classname="seq.TestEmbl"> + <arg line="${ajctest.src.dir}/biojava/demos/files/AL121903.embl"/> + </java> + <java classname="seq.GCContent"> + <arg line="${ajctest.src.dir}/biojava/demos/files/short.fasta"/> + </java> + <java classname="gff.EmblToGffFasta"> + <arg line="${ajctest.src.dir}/biojava/demos/files/AL121903.embl"/> + <arg line="${ajctest.src.dir}/biojava/demos/files/short.fasta"/> + <arg line="${ajctest.src.dir}/biojava/demos/files/out.gff"/> + </java> + <java classname="eventbasedparsing.Pdb2XML"> + <arg line="${ajctest.src.dir}/biojava/demos/files/pdb/hmga_1.pdb"/> + </java> + <java classname="eventbasedparsing.BlastLike2XML"> + <arg line="${ajctest.src.dir}/biojava/demos/files/ncbiblast/shortBlastn.out"/> + </java> + <java classname="dp.ViterbiAlign" + dir="${otherSystems.run.dir}" > + <!-- used as file: URL, but cygwin //c/ looks like network file system --> + <arg line="biojava/demos/files/fakepromoter.xml"/> + <arg line="biojava/demos/files/short.fasta"/> + </java> + <java classname="dp.Dice"/> + <java classname="ListChangeTypes"> + <arg line="org.biojava.bio.seq.impl.SimpleSequence"/> + </java> + <testset argfiles="all.lst"/> + </ajctest> + </target> + + <target name="jato.depends" depends="prepare"> + <copy todir="${output.classes.dir}"> + <fileset dir="${ajctest.src.dir}/jato/examples" includes="**/*.xml"/> + <fileset dir="${ajctest.src.dir}/jato/lib" includes="**/*.xml"/> + </copy> + </target> + + <target name="jato" depends="prepare"> + <ajctest testId="jato" + dir="${ajctest.src.dir}/jato" + args="${ajctest.args}" + destdir="${output.classes.dir}" + depends="jato.depends"> + <classpath> + <fileset dir="${ajctest.src.dir}/jato/lib"> + <include name="**/*.jar"/> + </fileset> + <pathelement path="${output.classes.dir}"/> + <pathelement path="${aj.runtime.classes}"/> + </classpath> + <java classname="simple.SimpleJavaToXml"/> + <!-- java classname="simple.SimpleXmlToJava"/ --> + <testset argfiles="all.lst"/> + </ajctest> + </target> + + <target name="kawa" depends="prepare"> + <ajctest testId="kawa" + dir="${ajctest.src.dir}/kawa" + args="${ajctest.args}" + destdir="${output.classes.dir}"> + <classpath> + <pathelement path="${output.classes.dir}"/> + <pathelement path="${aj.runtime.classes}"/> + </classpath> + <java classname="kawa.repl"> + <arg line="-d ${output.classes.dir}"/> + <arg line="-P kawa/lib"/> + + <arg line="-C ${ajctest.src.dir}/kawa/kawa/lib/std_syntax.scm"/> + <arg line="-C ${ajctest.src.dir}/kawa/kawa/lib/characters.scm"/> + <arg line="-C ${ajctest.src.dir}/kawa/kawa/lib/files.scm"/> + <arg line="-C ${ajctest.src.dir}/kawa/kawa/lib/keywords.scm"/> + <arg line="-C ${ajctest.src.dir}/kawa/kawa/lib/misc.scm"/> + <arg line="-C ${ajctest.src.dir}/kawa/kawa/lib/numbers.scm"/> + <arg line="-C ${ajctest.src.dir}/kawa/kawa/lib/ports.scm"/> + <arg line="-C ${ajctest.src.dir}/kawa/kawa/lib/quantities.scm"/> + <arg line="-C ${ajctest.src.dir}/kawa/kawa/lib/reflection.scm"/> + <arg line="-C ${ajctest.src.dir}/kawa/kawa/lib/strings.scm"/> + <arg line="-C ${ajctest.src.dir}/kawa/kawa/lib/syntax.scm"/> + <arg line="-C ${ajctest.src.dir}/kawa/kawa/lib/system.scm"/> + <arg line="-C ${ajctest.src.dir}/kawa/kawa/lib/thread.scm"/> + <arg line="-C ${ajctest.src.dir}/kawa/kawa/lib/vectors.scm"/> + + <arg line="-C ${ajctest.src.dir}/kawa/testsuite/mac-test.scm"/> + <arg line="-C ${ajctest.src.dir}/kawa/testsuite/mac1.scm"/> + <arg line="-C ${ajctest.src.dir}/kawa/testsuite/obj-test.scm"/> + <arg line="-C ${ajctest.src.dir}/kawa/testsuite/test.scm"/> + <arg line="-C ${ajctest.src.dir}/kawa/testsuite/testing.scm"/> + </java> + <testset argfiles="main.lst"/> + </ajctest> + </target> + + + <target name="gnuprolog.depends" depends="prepare"> + <copy todir="${output.classes.dir}"> + <fileset dir="${ajctest.src.dir}/gnuprolog/src" includes="**/*.pro"/> + </copy> + </target> + + <target name="gnuprolog" depends="prepare"> + <ajctest testId="gnuprolog" + dir="${ajctest.src.dir}/gnuprolog" + args="${ajctest.args},lenient" + destdir="${output.classes.dir}" + depends="gnuprolog.depends"> + <classpath> + <pathelement path="${output.classes.dir}"/> + <pathelement path="${aj.runtime.classes}"/> + </classpath> + <testset argfiles="main.lst"/> + </ajctest> + </target> + + <target name="nsuml.depends" depends="prepare"> + <copy file="${ajctest.src.dir}/nsuml/src/ru/novosoft/uml/xmi/uml13.dtd" + todir="${output.classes.dir}/ru/novosoft/uml/xmi" + /> + </target> + + <target name="nsuml" depends="prepare"> + <ajctest testId="nsuml" + dir="${ajctest.src.dir}/nsuml" + args="JXmx256M,${ajctest.args}" + destdir="${output.classes.dir}" + depends="nsuml.depends"> + <classpath> + <fileset dir="${ajctest.src.dir}/nsuml/lib"> + <include name="**/*.jar"/> + </fileset> + <pathelement path="${output.classes.dir}"/> + <pathelement path="${aj.runtime.classes}"/> + </classpath> + <java classname="EventTest"/> + <testset argfiles="all.lst"/> + </ajctest> + </target> + + <target name="jarp.depends" depends="prepare"> + <copy todir="${output.classes.dir}" filtering="yes"> + <fileset dir="${ajctest.src.dir}/jarp/src"> + <include name="**/*.properties" /> + </fileset> + </copy> + <copy todir="${output.classes.dir}" filtering="no"> + <fileset dir="${ajctest.src.dir}/jarp/src"> + <include name="**/*.gif" /> + </fileset> + </copy> + </target> + + <target name="jarp" depends="prepare"> + <ajctest testId="jarp" + dir="${ajctest.src.dir}/jarp" + args="${ajctest.args}" + destdir="${output.classes.dir}" + depends="jarp.depends"> + <classpath> + <fileset dir="${ajctest.src.dir}/jato/lib"> + <include name="jdom*.jar"/> + <include name="xerces*.jar"/> + </fileset> + <pathelement path="${output.classes.dir}"/> + <pathelement path="${aj.runtime.classes}"/> + </classpath> + <java classname="org.jarp.Driver" dir="${output.classes.dir}" fork="yes"/> + <testset argfiles="all.lst"/> + </ajctest> + </target> + + <target name="jiu.depends" depends="prepare"> + <delete dir="${ajctest.src.dir}/jiu/test-images/out"/> + <mkdir dir="${ajctest.src.dir}/jiu/test-images/out"/> + </target> + + <target name="jiu" depends="prepare"> + <ajctest testId="jiu" + dir="${ajctest.src.dir}/jiu" + args="${ajctest.args}" + destdir="${output.classes.dir}" + depends="jiu.depends"> + <java classname="net.sourceforge.jiu.apps.jiu"> + <classpath> + <pathelement path="${output.classes.dir}"/> + <pathelement path="${aj.runtime.classes}"/> + </classpath> + <arg value="-i"/> + <arg value="${ajctest.src.dir}/jiu/test-images/in/airplane.ras"/> + <arg value="-o"/> + <arg value="${ajctest.src.dir}/jiu/test-images/out/airplane.ras"/> + </java> + <java classname="net.sourceforge.jiu.apps.jiu"> + <classpath> + <pathelement path="${output.classes.dir}"/> + <pathelement path="${aj.runtime.classes}"/> + </classpath> + <arg value="-i"/> + <arg value="${ajctest.src.dir}/jiu/test-images/in/airplane.ras"/> + <arg value="-c"/> + </java> + <testset argfiles="main.lst"/> + </ajctest> + </target> + + <target name="tt-bytecode" depends="prepare"> + <ajctest testId="tt-bytecode" + dir="${ajctest.src.dir}/tt-bytecode" + args="${ajctest.args}" + destdir="${output.classes.dir}"> + <classpath> + <pathelement path="${output.classes.dir}"/> + <pathelement path="${aj.runtime.classes}"/> + </classpath> + <java classname="com.techtrader.modules.tools.bytecode.visitor.PrettyPrintVisitor"> + <arg value="java.lang.Throwable"/> + </java> + <java classname="com.techtrader.modules.tools.bytecode.visitor.PrettyPrintVisitor"> + <arg value="javax.swing.JComponent"/> + </java> + <java classname="com.techtrader.modules.tools.bytecode.visitor.PrettyPrintVisitor"> + <arg value="com.techtrader.modules.tools.bytecode.visitor.PrettyPrintVisitor"/> + </java> + <testset argfiles="main.lst"/> + </ajctest> + </target> + + <target name="xc4j" depends="prepare"> + <ajctest testId="xc4j" + dir="${ajctest.src.dir}/xc4j" + args="${ajctest.args}" + destdir="${output.classes.dir}"> + <classpath> + <fileset dir="${ajctest.src.dir}/xc4j/lib"> + <include name="**/*.jar"/> + </fileset> + <pathelement path="${output.classes.dir}"/> + <pathelement path="${aj.runtime.classes}"/> + </classpath> + <java classname="net.sourceforge.xc4j.apps.samples.LexerTest"> + <arg value="${ajctest.src.dir}/xc4j/src/net/sourceforge/xc4j/apps/samples/LexerTest.java"/> + </java> + <java classname="net.sourceforge.xc4j.apps.samples.LexerTest"> + <arg value="${ant.file}"/> + </java> + <testset argfiles="all.lst"/> + </ajctest> + </target> + + <target name="jmeter" depends="prepare"> + <ajctest testId="jmeter" + dir="${ajctest.src.dir}/jmeter" + args="${ajctest.args}" + destdir="${output.classes.dir}"> + <classpath> + <fileset dir="${ajctest.src.dir}/jmeter/lib"> + <include name="**/*.jar"/> + </fileset> + <pathelement path="${output.classes.dir}"/> + <pathelement path="${aj.runtime.classes}"/> + </classpath> + <testset argfiles="main.lst"/> + </ajctest> + </target> + + + <target name="bcel" depends="prepare"> + <ajctest testId="bcel" + dir="${ajctest.src.dir}/bcel" + args="${ajctest.args}" + destdir="${output.classes.dir}"> + <classpath> + <pathelement path="${output.classes.dir}"/> + <pathelement path="${aj.runtime.classes}"/> + <pathelement path="."/> <!-- used by Peephole... --> + </classpath> + <!-- todo: put HelloWorld output in temp, not current dir --> + <java classname="HelloWorldBuilder" /> + <java classname="JasminVisitor"> + <arg value="HelloWorld.class"/> + </java> + <java classname="Peephole"> + <arg value="HelloWorld"/> + </java> + <java classname="helloify"> + <arg value="HelloWorld.class"/> + </java> + <java classname="patchclass"> + <arg value="hello"/> + <arg value="goodbye"/> + <arg value="HelloWorld.class"/> + </java> + <java classname="listclass"> + <arg value="HelloWorld.class"/> + <arg value="-constants"/> + <arg value="-code"/> + <arg value="HelloWorld.class"/> + </java> + <java classname="maxstack"> + <arg value="HelloWorld"/> + </java> + <testset argfiles="all.lst"/> + </ajctest> + </target> + + <!-- Stopped here --> + + <target name="jedit" depends="prepare"> + <ajctest testId="jedit" + dir="${ajctest.src.dir}/jedit" + args="JXmx256M,${ajctest.args}" + destdir="${output.classes.dir}"> + <classpath> + <pathelement path="${output.classes.dir}"/> + <pathelement path="${aj.runtime.classes}"/> + </classpath> + <testset argfiles="main.lst"/> + </ajctest> + </target> + + <target name="jame" depends="prepare"> + <ajctest testId="jame" + dir="${ajctest.src.dir}/jame" + args="${ajctest.args}" + destdir="${output.classes.dir}"> + <classpath> + <pathelement path="${output.classes.dir}"/> + <pathelement path="${aj.runtime.classes}"/> + </classpath> + <testset argfiles="main.lst"/> + </ajctest> + </target> + + <target name="sablecc" depends="prepare"> + <ajctest testId="sablecc" + dir="${ajctest.src.dir}/sablecc" + args="${ajctest.args}" + destdir="${output.classes.dir}"> + <classpath> + <pathelement path="${output.classes.dir}"/> + <pathelement path="${aj.runtime.classes}"/> + </classpath> + <testset argfiles="main.lst,node-aspect.lst"/> + <testset argfiles="main.lst,nodes-aspect.lst"/> + <testset argfiles="main.lst"/> + <testset argfiles="main.lst,parser-aspect.lst"/> + <testset argfiles="main.lst,lexer-aspect.lst"/> + </ajctest> + </target> + <!-- + --> + <target name="mmexamples" depends="prepare"> + <ajctest testId="examples" + dir="examples" + destdir="${output.classes.dir}"> + <testset argfiles="bean/files.lst" + classes="bean.Demo"/> + </ajctest> + </target> + <target name="examples" depends="prepare"> + <ajctest testId="examples" + dir="./examples" + args="${ajctest.args}" + destdir="${output.classes.dir}"> + <classpath> + <pathelement path="${output.classes.dir}"/> + <pathelement path="${aj.runtime.classes}"/> + </classpath> + <testset argfiles="bean/files.lst" + classes="bean.Demo"/> + <testset argfiles="coordination/lib.lst" + classes=""/> + <testset argfiles="introduction/files.lst" + classes="introduction.CloneablePoint, + introduction.ComparablePoint, + introduction.HashablePoint, + introduction.Point"/> + <testset argfiles="observer/files.lst" + classes=""/> + <testset argfiles="spacewar/debug.lst" + classes=""/> + <testset argfiles="spacewar/demo.lst" + classes=""/> + <testset argfiles="telecom/basic.lst" + classes="telecom.BasicSimulation"/> + + <testset argfiles="telecom/billing.lst" + classes="telecom.BillingSimulation" /> + <testset argfiles="telecom/timing.lst" + classes="telecom.TimingSimulation" /> + + <testset argfiles="timeserver/abort.lst" + classes=""/> + <testset argfiles="timeserver/retry.lst" + classes=""/> + <testset argfiles="tjp/files.lst" + classes="tjp.Demo"/> + <testset argfiles="tracing/notrace.lst" + classes="tracing.ExampleMain"/> + <testset argfiles="tracing/tracelib.lst" + classes="tracing.lib.TraceMyClasses"/> + <testset argfiles="tracing/tracev1.lst" + classes="tracing.version1.TraceMyClasses"/> + <testset argfiles="tracing/tracev2.lst" + classes="tracing.version2.TraceMyClasses"/> + <testset argfiles="tracing/tracev3.lst" + classes="tracing.version3.TraceMyClasses"/> + </ajctest> + </target> + + <target name="ajc" depends="prepare"> + <echo message="tools: ${jdk.tools.jar}"/> + <ajctest testId="ajc" + dir="${ajctest.src.dir}/ajc-src" + args="nosymbols,timings,JXmx256M,${ajctest.args}" + destdir="${output.classes.dir}"> + <classpath> + <pathelement path="${jdk.tools.jar}"/> + <pathelement path="${output.classes.dir}"/> + <pathelement path="${aj.runtime.classes}"/> + </classpath> + <testset argfiles="ajc.lst,mytrace.lst,../texecs.lst"/> + <testset argfiles="ajc.lst,mytrace.lst,../tsets.lst"/> + <testset argfiles="ajc.lst,mytrace.lst,../taround.lst"/> + <testset argfiles="ajc.lst,mytrace.lst,../taround.lst,../texecs.lst"/> + <testset argfiles="ajc.lst,showerror.lst"/> + </ajctest> + </target> + + <target name="hard-ajc" depends="prepare" + unless="skip.hard.tests" > + <ajctest testId="hard-ajc" + dir="${ajctest.src.dir}/ajc-src" + args="nosymbols,timings,JXmx350M,${ajctest.args}" + destdir="${output.classes.dir}"> + <classpath> + <pathelement path="${jdk.tools.jar}"/> + <pathelement path="${output.classes.dir}"/> + <pathelement path="${aj.runtime.classes}"/> + </classpath> + <testset argfiles="ajc.lst,mytrace.lst,../tcalls.lst"/> + <testset argfiles="ajc.lst,mytrace.lst,../treceps.lst"/> + <!--testset argfiles="ajc.lst,mytrace.lst,../tcalls.lst,../texecs.lst,../tsets.lst"/--> + <!--testset argfiles="ajc.lst,mytrace.lst,../tcalls.lst,../texecs.lst,../treceps.lst"/--> + </ajctest> + </target> + + <target name="java-src.depends" depends="prepare"> + <copy todir="${output.classes.dir}" + file="${ajctest.src.dir}/java-src/tests/net/HttpTest.java"/> + </target> + + <target name="java-src" depends="prepare"> + <ajctest testId="java-src" + dir="${ajctest.src.dir}/java-src" + args="JXmx256M,timings,${ajctest.args}" + destdir="${output.classes.dir}" + depends="java-src.depends"> + <classpath> + <pathelement path="${output.classes.dir}"/> + <pathelement path="${aj.runtime.classes}"/> + <pathelement path="${external.other-systems.runtime.jar}"/> + <pathelement path="${external.other-systems.tools.jar}"/> + </classpath> + <testset argfiles="util.lst,tests.lst"/> + <testset argfiles="util.lst,tests.lst,mytrace.lst,../texecs.lst"/> + <testset argfiles="util.lst,tests.lst,mytrace.lst,../treceps.lst"/> + <testset argfiles="util.lst,tests.lst,mytrace.lst,../tsets.lst"/> + <testset argfiles="util.lst,tests.lst,mytrace.lst,../tcalls.lst"/> + <testset argfiles="util.lst,tests.lst,mytrace.lst,../taround.lst"/> + <!-- final one failing on small machines? --> + <testset argfiles="util.lst,tests.lst,mytrace.lst,../taround.lst,../texecs.lst"/> + <!-- do not run until you can run with the target classes in bootclasspath --> + </ajctest> + </target> + + <target name="swingtest.depends" depends="prepare"> + <mkdir dir="${output.classes.dir}/resources"/> + <copy todir="${output.classes.dir}/resources"> + <fileset dir="${ajctest.src.dir}/java-src/tests/jfc/NotePad/resources"/> + </copy> + <mkdir dir="${output.classes.dir}/images"/> + <copy todir="${output.classes.dir}/images"> + <fileset dir="${ajctest.src.dir}/java-src/tests/jfc/Metalworks/images"/> + </copy> + <mkdir dir="${output.classes.dir}/HelpFiles"/> + <copy todir="${output.classes.dir}/HelpFiles"> + <fileset dir="${ajctest.src.dir}/java-src/tests/jfc/Metalworks/HelpFiles"/> + </copy> + <copy todir="${output.classes.dir}"> + <fileset dir="${ajctest.src.dir}/java-src/tests/jfc/Metalworks" + includes="MyTheme.theme"/> + </copy> + <copy todir="${output.classes.dir}/resources"> + <fileset dir="${ajctest.src.dir}/java-src/tests/jfc/Stylepad/resources"/> + </copy> + </target> + + <target name="swingtest.warning"> + <echo> + -------------------- INFORMATION --------------------- + The following tests will print (but NOT throw) + exceptions because of a known bug in swing: + - FileChooserDemo + - Metalworks + -------------------- INFORMATION --------------------- + </echo> + </target> + + <target name="swing" depends="prepare"> + <ajctest testId="swing" + dir="${otherSystems.run.dir}" + args="JXmx256M,${ajctest.args}" + destdir="${output.classes.dir}"> + <classpath> + <pathelement path="${output.classes.dir}"/> + <pathelement path="${aj.runtime.classes}"/> + <pathelement path="${external.other-systems.runtime.jar}"/> + <pathelement path="${external.other-systems.tools.jar}"/> + </classpath> + <testset argfiles="${rundir.to.runsrcdir}/java-src/swingtest.lst, + ${rundir.to.runsrcdir}/java-src/swing.lst"> + <!-- omitting all swing test runs for now + <java classname="Metalworks" fork="yes" dir="${output.classes.dir}"> + <jvmarg value="-Xbootclasspath/p:${output.classes.dir}"/> + </java> + <java classname="Stylepad" fork="yes"> + <jvmarg value="-Xbootclasspath/p:${output.classes.dir}"/> + </java> + <java classname="FileChooserDemo" fork="yes"> + <jvmarg value="-Xbootclasspath/p:${output.classes.dir}"/> + </java> + <java classname="Notepad" fork="yes"> + <jvmarg value="-Xbootclasspath/p:${output.classes.dir}"/> + </java> + --> + </testset> + </ajctest> + </target> + + <target name="applets.depends" depends="prepare"> + <copy todir="${output.classes.dir}"> + <fileset dir="${ajctest.src.dir}/applets" + includes="**/*.html,**/*.gif,**/*.au,**/*.obj,**/*.xyz"/> + </copy> + </target> + + <target name="applets" depends="prepare"> + + <ajctest testId="applets" + dir="${ajctest.src.dir}/applets" + args="${ajctest.args}" + destdir="${output.classes.dir}" + depends="applets.depends"> + <classpath> + <pathelement path="${output.classes.dir}"/> + <pathelement path="${aj.runtime.classes}"/> + </classpath> + <java classname="AppletTester" fork="yes"> + <arg line="-basedir ${output.classes.dir}"/> + </java> + <testset argfiles="main.lst"/> + </ajctest> + </target> + + <target name="hard-java-src" depends="prepare" + unless="skip.hard.tests" > + <ajctest testId="hard-java-src" + dir="${ajctest.src.dir}/java-src" + args="JXmx400M,${ajctest.args}" + destdir="${output.classes.dir}"> + <classpath> + <pathelement path="${output.classes.dir}"/> + <pathelement path="${aj.runtime.classes}"/> + <pathelement path="${external.other-systems.runtime.jar}"/> + <pathelement path="${external.other-systems.tools.jar}"/> + </classpath> + <testset argfiles="util.lst,mytrace.lst,../tcalls.lst,../texecs.lst,../treceps.lst"/> + <testset argfiles="swing.lst,mytrace.lst,../tsets.lst"/> + </ajctest> + </target> + + + <target name="jsci" depends="prepare"> + <ajctest testId="jsci" + dir="${ajctest.src.dir}/jsci" + args="${ajctest.args}" + destdir="${output.classes.dir}"> + <classpath> + <fileset dir="${ajctest.src.dir}/jsci/lib"> + <include name="**/*.jar"/> + </fileset> + <pathelement path="${output.classes.dir}"/> + <pathelement path="${aj.runtime.classes}"/> + </classpath> + <testset argfiles="main.lst,examples.lst"/> + <java classname="TestEigen"/> + <java classname="TestWavelet"/> + <java classname="TestWavelet2"/> + </ajctest> + </target> + + <!-- ============================================================ --> + <!-- Help --> + <!-- ============================================================ --> + <target name="help"> + <echo> + Usage: ant -f ${ant.file} [ant-options] [options] + + where ant-options can be found be typing: + + ant -help + + and where options include: + -Dnodownload=true do NOT download test files + -Dnocompile=true do NOT compile files, just run the tests + -Dnoclean=true do NOT clean the ${output.classes.dir} before each test + -Dnodoc=true do NOT generate run ajdoc + -Dgui=true display the GUI helper + -help print this help message + -Ddumpresults dump the results to a file + named ajctest-errors[date-and-time].txt + </echo> + </target> + + + <!-- ============================================================ --> + <!-- Tests for ajctest taskdef --> + <!-- ============================================================ --> + <target name="testAjctest" + depends="testAjctest.fail,testAjctest.pass"/> + <target name="testAjctest.pass" + depends="testAjctest.exit.pass,testAjctest.normal.pass"/> + <target name="testAjctest.fail" + depends="testAjctest.exception.fail,testAjctest.error.fail, + testAjctest.exit.fail,testAjctest.compileFailure.fail"/> + <target name="testAjctest.depends" + depends="prepare"> + <property name="testAjctest.src.dir" + location="${aspectj.test.src.dir}/harness/ajctest"/> + </target> + + <target name="testAjctest.all" depends="testAjctest.depends"> + <ajctest testId="testAjctest.all" + dir="${testAjctest.src.dir}" + args="showversion,${ajctest.args}" + destdir="${output.classes.dir}"> + <classpath> + <pathelement path="${output.classes.dir}"/> + <pathelement path="${aj.runtime.classes}"/> + </classpath> + <java classname="Driver"/> + <java classname="Driver"> + <arg line="-exit 0"/> + </java> + <java classname="Driver"> + <arg line="-exit 1"/> + </java> + <java classname="Driver"> + <arg line="-error errorMessage"/> + </java> + <java classname="Driver"> + <arg line="-exception exceptionMessage"/> + </java> + <testset argfiles="aspect.lst"/> + <testset argfiles="driver.lst"/> + <testset argfiles="error.lst"/> + </ajctest> + </target> + + <target name="testAjctest.normal.pass" depends="testAjctest.depends"> + <ajctest testId="testAjctest.normal.pass" + dir="${testAjctest.src.dir}" + args="showversion,${ajctest.args}" + destdir="${output.classes.dir}"> + <classpath> + <pathelement path="${output.classes.dir}"/> + <pathelement path="${aj.runtime.classes}"/> + </classpath> + <java classname="Driver"/> + <testset argfiles="aspect.lst"/> + <testset argfiles="driver.lst"/> + </ajctest> + </target> + + <target name="testAjctest.exception.fail" depends="testAjctest.depends"> + <ajctest testId="testAjctest.exception.fail" + dir="${testAjctest.src.dir}" + args="showversion,${ajctest.args}" + destdir="${output.classes.dir}"> + <classpath> + <pathelement path="${output.classes.dir}"/> + <pathelement path="${aj.runtime.classes}"/> + </classpath> + <java classname="Driver"> + <arg line="-exception exceptionMessage"/> + </java> + <testset argfiles="aspect.lst"/> + <testset argfiles="driver.lst"/> + </ajctest> + </target> + + <target name="testAjctest.error.fail" depends="testAjctest.depends"> + <ajctest testId="testAjctest.error.fail" + dir="${testAjctest.src.dir}" + args="showversion,${ajctest.args}" + destdir="${output.classes.dir}"> + <classpath> + <pathelement path="${output.classes.dir}"/> + <pathelement path="${aj.runtime.classes}"/> + </classpath> + <java classname="Driver"> + <arg line="-error errorMessage"/> + </java> + <testset argfiles="aspect.lst"/> + <testset argfiles="driver.lst"/> + </ajctest> + </target> + + <target name="testAjctest.exit.fail" depends="testAjctest.depends"> + <ajctest testId="testAjctest.exit.fail" + dir="${testAjctest.src.dir}" + args="showversion,${ajctest.args}" + destdir="${output.classes.dir}"> + <classpath> + <pathelement path="${output.classes.dir}"/> + <pathelement path="${aj.runtime.classes}"/> + </classpath> + <java classname="Driver"> + <arg line="-exit 1"/> + </java> + <testset argfiles="aspect.lst"/> + <testset argfiles="driver.lst"/> + </ajctest> + </target> + + <target name="testAjctest.exit.pass" depends="testAjctest.depends"> + <ajctest testId="testAjctest.exit.pass" + dir="${testAjctest.src.dir}" + args="showversion,${ajctest.args}" + destdir="${output.classes.dir}"> + <classpath> + <pathelement path="${output.classes.dir}"/> + <pathelement path="${aj.runtime.classes}"/> + </classpath> + <java classname="Driver"> + <arg line="-exit 0"/> + </java> + <testset argfiles="aspect.lst"/> + <testset argfiles="driver.lst"/> + </ajctest> + </target> + + <target name="testAjctest.compileFailure.fail" depends="testAjctest.depends"> + <ajctest testId="testAjctest.compileFailure.fail" + dir="${testAjctest.src.dir}" + args="showversion,${ajctest.args}" + destdir="${output.classes.dir}"> + <classpath> + <pathelement path="${output.classes.dir}"/> + <pathelement path="${aj.runtime.classes}"/> + </classpath> + <java classname="Driver"/> + <testset argfiles="error.lst"/> + </ajctest> + </target> + +</project> diff --git a/tests/tracing/TraceJoinPoints.java b/tests/tracing/TraceJoinPoints.java new file mode 100644 index 000000000..095172c28 --- /dev/null +++ b/tests/tracing/TraceJoinPoints.java @@ -0,0 +1,104 @@ + +import org.aspectj.lang.*; +import org.aspectj.lang.reflect.*; +import java.io.*; + +/** + * Produces an XML representation of all of the join points in a program + * within the control-flow of those points matching <code>entry</code>. + * + * To use this, extend this aspect and fill in an appropriate value for + * <code>entry</code>. + */ +public abstract aspect TraceJoinPoints dominates * { + /** + * The join points which mark the entry of the traced control-flow. + * To trace all command-line programs, set this to: + * <pre>call(public static void main(String[]));</pre> + */ + protected abstract pointcut entry(); + + /** + * Join points which mark an exit from the control-flow. Use this + * to exclude parts of the call-graph that you're not interested in. + * The default value matches the current implementation limitation + * (in ajc-1.0) that join points within system libraries are not + * visible. + */ + protected pointcut exit(): call(* java..*.*(..)); + + final pointcut start(): entry() && !cflowbelow(entry()); + + final pointcut trace(): + cflow(entry()) && !cflowbelow(exit()) && !within(TraceJoinPoints+); + + before(): start() { makeLogStream(); } + + before(): trace() { logEnter(thisJoinPointStaticPart); } + after(): trace() { logExit(thisJoinPointStaticPart); } + + after(): start() { closeLogStream(); } + + + PrintStream out; + int logs = 0; + protected void makeLogStream() { + try { + out = new PrintStream(new FileOutputStream("log" + logs++ + ".xml")); + } catch (IOException ioe) { + out = System.err; + } + } + + protected void closeLogStream() { + out.close(); + } + + + int depth = 0; + boolean terminal = false; + protected void logEnter(JoinPoint.StaticPart jp) { + if (terminal) out.println(">"); + indent(depth); + out.print("<" + jp.getKind()); + writeSig(jp); + writePos(jp); + + depth += 1; + terminal = true; + } + + void writeSig(JoinPoint.StaticPart jp) { + out.print(" sig="); + out.print(quoteXml(jp.getSignature().toShortString())); + } + + void writePos(JoinPoint.StaticPart jp) { + SourceLocation loc = jp.getSourceLocation(); + if (loc == null) return; + + out.print(" pos="); + out.print(quoteXml(loc.getFileName() + + ":" + loc.getLine() + + ":" + loc.getColumn())); + } + + String quoteXml(String s) { + return "\"" + s.replace('<', '_').replace('>', '_') + "\""; + } + + protected void logExit(JoinPoint.StaticPart jp) { + depth -= 1; + if (terminal) { + out.println("/>"); + } else { + indent(depth); + out.println("</" + jp.getKind() + ">"); + } + terminal = false; + } + + void indent(int i) { + while (i-- > 0) out.print(" "); + } +} diff --git a/tests/warnings/NotFoundTypeName.java b/tests/warnings/NotFoundTypeName.java new file mode 100644 index 000000000..979a20fb7 --- /dev/null +++ b/tests/warnings/NotFoundTypeName.java @@ -0,0 +1,28 @@ +aspect NotFoundTypeName { + + pointcut foo1(): this(X); // this should be a warning under -Xlint + + pointcut foo2(): this(java.util.*); // NOT a warning + pointcut foo3(): this(*..TimeZone); // NOT a warning + + pointcut foo4(): this(java.util.X*Y); // this should be a warning under -Xlint + pointcut foo5(): this(java.XYZ*.*); // this should be a warning under -Xlint + + + pointcut foo6(): this(X*Y); // this should be a warning under -Xlint + + pointcut foo7(): this(NotFound*Name); // NOT a warning + + pointcut foo8(): this(NotFoundTypeNameInDirectory); // NOT a warning + + pointcut foo9a(): this(a.b.c.NotFoundTypeNameInDirectory2); // NOT a warning + + pointcut foo9b(): this(*..NotFoundTypeNameInDirectory2); // NOT a warning + + pointcut foo10(): this(a.b.c.Ningo*); // this should be a warning under -Xlint + + public static void main(String[] args) { + System.out.println("not found"); + } +} + diff --git a/tests/warnings/NotFoundTypeNameInDirectory.java b/tests/warnings/NotFoundTypeNameInDirectory.java new file mode 100644 index 000000000..f5c0c3921 --- /dev/null +++ b/tests/warnings/NotFoundTypeNameInDirectory.java @@ -0,0 +1,3 @@ +class NotFoundTypeNameInDirectory { +} + diff --git a/tests/warnings/NotFoundTypeNameInDirectory2.java b/tests/warnings/NotFoundTypeNameInDirectory2.java new file mode 100644 index 000000000..1f4e2aca0 --- /dev/null +++ b/tests/warnings/NotFoundTypeNameInDirectory2.java @@ -0,0 +1,5 @@ +package a.b.c; + +class NotFoundTypeNameInDirectory2 { +} + |