public void BasicCommonTest() { string [] code = new [] { " PROGRAM COMMONTEST", " COMMON A,B", " COMMON /FOO/ C,D", " END", " FUNCTION ITEST", " COMMON // X,Y /FOO/ W,Z", " DATA X,Y,W,Z /12.0,78.0,-3,100/", " CALL FOOBAR1", " CALL FOOBAR2", " ITEST=X+Y+W+Z", " RETURN", " END", " SUBROUTINE FOOBAR1", " COMMON A1,B1", " A1=10", " B1=20", " END", " SUBROUTINE FOOBAR2", " REAL J", " COMMON /FOO/ J,B1", " J=10", " B1=20", " END" }; Compiler comp = Helper.HelperCompile(code, new FortranOptions()); Helper.HelperRunInteger(comp, "ITEST", 60); }
public void DataArrayWithSeparateRepeats() { string [] code = new [] { " FUNCTION ITEST", " INTEGER A(4)", " DATA A /2*65, 2*12/", " RETURN A(1)+A(2)+A(3)+A(4)", " END" }; Compiler comp = Helper.HelperCompile(code, new FortranOptions()); Helper.HelperRunInteger(comp, "ITEST", 154); }
public void DataArrayNonRepeat() { string [] code = new [] { " FUNCTION ITEST", " INTEGER A(4)", " DATA A /34,67,90,-12/", " RETURN A(1)+A(2)+A(3)+A(4)", " END" }; Compiler comp = Helper.HelperCompile(code, new FortranOptions()); Helper.HelperRunInteger(comp, "ITEST", 179); }
public void ConditionalArithmeticIF2() { string [] code = new [] { " FUNCTION ITEST", " A = 88", " IF (A.LT.47) A= 90", " ITEST = A", " END" }; Compiler comp = Helper.HelperCompile(code, new FortranOptions()); Helper.HelperRunInteger(comp, "ITEST", 88); }
public void ArithBasicAddition() { string [] code = new [] { " FUNCTION TEST", " INTEGER A", " A = 20", " B = A", " RETURN A+B", " END" }; Compiler comp = Helper.HelperCompile(code, new FortranOptions()); Helper.HelperRunFloat(comp, "TEST", 40f); }
public void StatementFunction1() { string [] code = new [] { " FUNCTION ITEST", " INTEGER B", " B=12", " F(B)=B*B", " RETURN B+F(7)", " END" }; Compiler comp = Helper.HelperCompile(code, new FortranOptions()); Helper.HelperRunInteger(comp, "ITEST", 61); }
public void ConditionalBlockIF1() { string [] code = new [] { " FUNCTION ITEST", " A = 45", " IF (A.LT.47) THEN", " ITEST = 33", " ENDIF", " END" }; Compiler comp = Helper.HelperCompile(code, new FortranOptions()); Helper.HelperRunInteger(comp, "ITEST", 33); }
public void Loops1() { string [] code = new [] { " FUNCTION ITEST", " DO 20,I=1,10", " J=J+I", "20 CONTINUE", " RETURN J", " END" }; Compiler comp = Helper.HelperCompile(code, new FortranOptions()); Helper.HelperRunInteger(comp, "ITEST", 55); }
public void ArithBasicDivision() { string [] code = new [] { " FUNCTION TEST", " REAL A", " REAL B", " A = 35.60", " B = 1.78", " RETURN A/B", " END" }; Compiler comp = Helper.HelperCompile(code, new FortranOptions()); Helper.HelperRunFloat(comp, "TEST", 20f); }
public void ArithBasicMultiplication() { string [] code = new [] { " FUNCTION ITEST", " INTEGER A", " INTEGER B", " A = 90", " B = 45", " RETURN A*B", " END" }; Compiler comp = Helper.HelperCompile(code, new FortranOptions()); Helper.HelperRunInteger(comp, "ITEST", 4050); }
public void StatementFunction2() { string [] code = new [] { " FUNCTION ITEST", " INTEGER B", " B=12", " G(H,I)=(H*I)+H+I", " F(B)=G(B,3)*G(B,4)", " RETURN B+F(7)", " END" }; Compiler comp = Helper.HelperCompile(code, new FortranOptions()); Helper.HelperRunInteger(comp, "ITEST", 1221); }
public void FormatBasic() { string [] code = new [] { " FUNCTION FMTTEST", " CHARACTER*26 STR, FMTTEST", "3 FORMAT (\"The sum of \",I,\" and \",I,\" is \",I)", " WRITE (STR, 3) 12,36,12+36", " FMTTEST = STR", " RETURN", " END" }; Compiler comp = Helper.HelperCompile(code, new FortranOptions()); Helper.HelperRunString(comp, "FMTTEST", "The sum of 12 and 36 is 48"); }
public void FormatArrayRef() { string [] code = new [] { " FUNCTION FMTTEST", " CHARACTER*18 STR, FMTTEST", " INTEGER V(3)", " V(1) = 12", " V(2) = 24", " V(3) = 36", " WRITE (STR, \"3I6\") V", " FMTTEST = STR", " RETURN", " END" }; Compiler comp = Helper.HelperCompile(code, new FortranOptions()); Helper.HelperRunString(comp, "FMTTEST", " 12 24 36"); }
public void SaveInFunction() { string [] code = new [] { " FUNCTION ITEST", " DO 10 I=1,10", " ITEST = ITEST + FOO()", " 10 CONTINUE", " END", " FUNCTION FOO()", " INTEGER B", " SAVE B", " B = B + 1", " RETURN B", " END" }; Compiler comp = Helper.HelperCompile(code, new FortranOptions()); Helper.HelperRunInteger(comp, "ITEST", 55); }
public void DataImpliedDo1() { string [] code = new [] { " FUNCTION ITEST", " INTEGER ODD(10)", " DATA (ODD(I),I=1,10,2)/ 5 * 43/", " DATA (ODD(I),I=2,10,2)/ 5 * 0 /", " RETURN SUM(ODD)", " END", " INTEGER FUNCTION SUM(JRY)", " INTEGER JRY(10)", " SUM = 0", " DO 100,I=1,10", " SUM=SUM+JRY(I)", "100 CONTINUE", " END" }; Compiler comp = Helper.HelperCompile(code, new FortranOptions()); Helper.HelperRunInteger(comp, "ITEST", 215); }
public void ArithImplicitPrecedence2() { string [] code = new [] { " FUNCTION TEST", " RETURN 10 ** 3 * 2", " END" }; Compiler comp = Helper.HelperCompile(code, new FortranOptions()); Helper.HelperRunFloat(comp, "TEST", 2000f); }
public void DataBasicSyntax() { string [] code = new [] { " FUNCTION ITEST", " INTEGER A,B,C,D", " DATA A,B,C,D /12,13,14,15/", " RETURN A+B+C+D", " END" }; Compiler comp = Helper.HelperCompile(code, new FortranOptions()); Helper.HelperRunInteger(comp, "ITEST", 54); }
public void DataSpecificArrayElementsWithRepeat() { string [] code = new [] { " FUNCTION ITEST", " INTEGER A(4)", " DATA A(1),A(2),A(4) /3*77/", " RETURN A(1)+A(2)+A(3)+A(4)", " END" }; Compiler comp = Helper.HelperCompile(code, new FortranOptions()); Helper.HelperRunInteger(comp, "ITEST", 231); }
public void ArithSimplificationExp() { string [] code = new [] { " FUNCTION SIMPLIFY1", " REAL LH", " LH=16", " RETURN LH**(-1) + LH**0 + LH**1", " END" }; Compiler comp = Helper.HelperCompile(code, new FortranOptions()); Helper.HelperRunFloat(comp, "SIMPLIFY1", 17.0625f); }
public void DataRepeatCountWithMinus() { string [] code = new [] { " FUNCTION ITEST", " INTEGER A,B,C,D", " DATA A,B,C,D /4*-17/", " RETURN A+B+C+D", " END" }; Compiler comp = Helper.HelperCompile(code, new FortranOptions()); Helper.HelperRunInteger(comp, "ITEST", -68); }
public void DataSpecificArrayElementsWithOverride() { string [] code = new [] { " FUNCTION ITEST", " INTEGER A(4)", " A(1)=450", " DATA A(1),A(2),A(4) /19,34,99/", " RETURN A(1)+A(2)+A(3)+A(4)", " END" }; Compiler comp = Helper.HelperCompile(code, new FortranOptions()); Helper.HelperRunInteger(comp, "ITEST", 583); }
public void ArithDivisionByZero() { string [] code = new [] { " FUNCTION ITEST", " INTEGER I,J", " I = 10", " J = 0", " RETURN I/J", " END" }; Compiler comp = new Compiler(new FortranOptions()); comp.CompileString(code); Assert.AreEqual(0, comp.Messages.ErrorCount); Assert.Throws(typeof(System.DivideByZeroException), delegate { comp.Execute("ITEST"); }); }
public void Loops6() { string [] code = new [] { " FUNCTION ITEST", " LSTART=50", " LEND=30", " DO 20,I=LSTART,LEND", " J=J+1", "20 CONTINUE", " RETURN J", " END" }; Compiler comp = Helper.HelperCompile(code, new FortranOptions()); Helper.HelperRunInteger(comp, "ITEST", 0); }
public void MultipartCommonTest() { string [] code = new [] { " FUNCTION ICOMMONTEST", " COMMON A,B", " COMMON // J,K", " DATA A,B,J,K /12.0,78.0,-3,100/", " RETURN ITEST()", " END", " FUNCTION ITEST", " COMMON // X,Y,I,L", " ITEST=X+Y+I+L", " RETURN", " END" }; Compiler comp = Helper.HelperCompile(code, new FortranOptions()); Helper.HelperRunInteger(comp, "ICOMMONTEST", 187); }
public void ArithTestConstantUsage() { string [] code = new [] { " FUNCTION ITEST", " PARAMETER (PI=3.1459, PI2=2*PI)", " REAL A", " A = (PI + PI2) / 3.0", " RETURN A*100", " END" }; Compiler comp = Helper.HelperCompile(code, new FortranOptions()); Helper.HelperRunInteger(comp, "ITEST", 314); }
public void SplitMultipartCommonTest() { string [] code = new [] { " FUNCTION ICOMMONTEST", " COMMON A,B", " COMMON /FOO/ J", " COMMON // K,L", " DATA A,B,J,K,L /12.0,78.0,-3,100,10/", " RETURN ITEST()", " END", " FUNCTION ITEST", " COMMON // X,Y /FOO/ M // I", " COMMON J2", " ITEST=X+Y+M+I+J2", " RETURN", " END" }; Compiler comp = Helper.HelperCompile(code, new FortranOptions()); Helper.HelperRunInteger(comp, "ICOMMONTEST", 197); }
public void Loops7() { string [] code = new [] { " FUNCTION ITEST", " LSTART=1", " LEND=20", " DO I=LSTART,LEND", " J=J+1", " ENDDO", " RETURN J", " END" }; Compiler comp = Helper.HelperCompile(code, new FortranOptions()); Helper.HelperRunInteger(comp, "ITEST", 20); }
public void Loops9() { string [] code = new [] { " FUNCTION ITEST", " LSTART=1", " LEND=20", " DO 100 WHILE (LSTART.LE.LEND)", " J=J+1", " LSTART=LSTART+1", "100 CONTINUE", " RETURN J", " END" }; Compiler comp = Helper.HelperCompile(code, new FortranOptions()); Helper.HelperRunInteger(comp, "ITEST", 20); }
public void DataImpliedDo3() { string [] code = new [] { " FUNCTION ITEST", " INTEGER NUMBER(3,3)", " DATA ((NUMBER(I,J),I=1,3),J=1,3)/1,2,3,5,8,13,21,34,55/", " RETURN SUM(NUMBER)", " END", " INTEGER FUNCTION SUM(JRY)", " INTEGER JRY(9)", " SUM = 0", " DO 100,I=1,9", " SUM=SUM+JRY(I)", "100 CONTINUE", " END" }; Compiler comp = Helper.HelperCompile(code, new FortranOptions()); Helper.HelperRunInteger(comp, "ITEST", 98); }
public void ArithBasicSubtraction() { string [] code = new [] { " FUNCTION ITEST", " INTEGER A,B", " A = 4543", " B = 784", " RETURN A-B", " END" }; Compiler comp = Helper.HelperCompile(code, new FortranOptions()); Helper.HelperRunInteger(comp, "ITEST", 3759); }