package de.inetsoftware.jwebassembly.runtime;

import java.util.ArrayList;
import java.util.Collection;

import org.junit.ClassRule;
import org.junit.runners.Parameterized.Parameters;
import org.webassembly.annotation.Export;

import de.inetsoftware.jwebassembly.ScriptEngine;
import de.inetsoftware.jwebassembly.WasmRule;

public class ControlFlowOperators extends AbstractBaseTest {

    @ClassRule
    public static WasmRule rule = new WasmRule( TestClass.class );

    public ControlFlowOperators( ScriptEngine script, String method, Object[] params ) {
        super( rule, script, method, params );
    }

    @Parameters( name = "{0}-{1}" )
    public static Collection<Object[]> data() {
        ArrayList<Object[]> list = new ArrayList<>();
        for( ScriptEngine[] val : ScriptEngine.testParams() ) {
            ScriptEngine script = val[0];
            addParam( list, script, "ifeq" );
            addParam( list, script, "ifne" );
            addParam( list, script, "forLoop" );
        }
        return list;
    }

    static class TestClass {

        @Export
        static int ifeq() {
            int condition = 0;
            if( condition != 0 ) {
                return 13;
            } else {
                return 76;
            }
        }

        @Export
        static int ifne() {
            int condition = 3;
            if( condition == 0 ) {
                return 13;
            } else {
                return 76;
            }
        }

        @Export
        static int forLoop() {
            int a = 0;
            //            for( int i=0; i<10;i++) {
            //                a += i;
            //            }
            return a;
        }
    }
}

@@ -1,8 +1,623 @@
+/*%0A * Copyright 2018 Volker Berlin (i-net software)%0A *%0A * Licensed under the Apache License, Version 2.0 (the %22License%22);%0A * you may not use this file except in compliance with the License.%0A * You may obtain a copy of the License at%0A *%0A *      http://www.apache.org/licenses/LICENSE-2.0%0A *%0A * Unless required by applicable law or agreed to in writing, software%0A * distributed under the License is distributed on an %22AS IS%22 BASIS,%0A * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.%0A * See the License for the specific language governing permissions and%0A * limitations under the License.%0A */%0A
 package 
@@ -1552,24 +1552,70 @@
 , %22ifne%22 );%0A
+            addParam( list, script, %22iflt%22 );%0A
             
@@ -2106,32 +2106,32 @@
      return 76;%0A
-
             %7D%0A  
@@ -2131,32 +2131,282 @@
    %7D%0A        %7D%0A%0A
+        @Export%0A        static int iflt() %7B%0A            int condition = 3;%0A            if( condition %3E= 0 ) %7B%0A                condition = 13;%0A            %7D else %7B%0A                condition = 76;%0A            %7D%0A            return condition;%0A        %7D%0A%0A
         @Export%0A

Test for iflt