; Similix job for running Lambda-interpreter example
; Copyright (C) 1993 Anders Bondorf
; Please see the file README for copyright notice, license and disclaimer.


;-----------------------------------------------------------------------------

(load "../system/sim-scm.scm")

(define fac (file->item "fac.lam"))
(load "lam-int.sim")
; result = L int (source,data):
(define result (ntimes (lambda () (run fac 10)) 100))

; target = L mix (int,source) (10 times):
(similix 'run (list fac '***) "lam-int.sim" 10 "fac.sim")
(define lam-pgm **Similix-preprocessed-program**)
(define lam (preprocessed-program))
(define target (residual-program))
(load "fac.sim")

; new-result = L target data:
(define new-result (ntimes (lambda () (run-0 10)) 100))
; result = new-result?:
(equal? result new-result)

; comp = L cogen int:
(cogen lam "lam-cmp.sim")
(define lam-cmp (current-compiler))

; new-target = L comp source (10 times):
(define new-target (comp "lam-cmp.sim" (list fac '***) 10))
; target = new-target?:
(equal? target new-target)

; new-comp = L mix (mix,int):
(define new-lam-cmp
  (similix '_sim-specialize
	   (list 'run '*** lam-pgm '***)
	   (string-append **Similix-path** "spec.sim")))
; comp = new-comp?:
(equal? lam-cmp new-lam-cmp)

(exit)

;-----------------------------------------------------------------------------
