#-------------------------------------------------------------
#
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements.  See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership.  The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License.  You may obtain a copy of the License at
# 
#   http://www.apache.org/licenses/LICENSE-2.0
# 
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied.  See the License for the
# specific language governing permissions and limitations
# under the License.
#
#-------------------------------------------------------------

foo1 = function(Matrix[Double] A=matrix(1, 300, 500), Matrix[Double] B, Double s = 7) return (Matrix[Double] C, Matrix[Double] D) {
  while(FALSE){} # no inlining
  C = A %*% B + s;
  D = C + 7;
}

foo2 = function(Matrix[Double] A, Matrix[Double] B) return (Matrix[Double] C, Matrix[Double] D) {
  while(FALSE){} # no inlining
  C = A %*% B + 7;
  D = C + 7;
}

X1 = matrix(1, 300, 500)
X2 = matrix(2, 500, 200)

[C1,C2] = foo1(B=X2);
[D1,D2] = foo2(X1, X2);

if( sum(C1!=D1) > 0 )
  print("ERROR1: "+sum(C1!=D1)+" differences.")
if( sum(C2!=D2) > 0 )
  print("ERROR2: "+sum(C2!=D2)+" differences.")
