77 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			77 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
open Jest
 | 
						|
open Reducer_TestHelpers
 | 
						|
 | 
						|
describe("Parse for Bindings", () => {
 | 
						|
  testParseOuterToBe(
 | 
						|
    "x",
 | 
						|
    "Ok((:$$bindExpression (:$$bindings) :x))",
 | 
						|
    ) 
 | 
						|
  testParseOuterToBe(
 | 
						|
    "x+1",
 | 
						|
    "Ok((:$$bindExpression (:$$bindings) (:add :x 1)))",
 | 
						|
    ) 
 | 
						|
  testParseOuterToBe(
 | 
						|
    "y = x+1; y",
 | 
						|
    "Ok((:$$bindExpression (:$$bindStatement (:$$bindings) (:$let :y (:add :x 1))) :y))",
 | 
						|
    ) 
 | 
						|
  testParsePartialToBe(
 | 
						|
    "x",
 | 
						|
    "Ok((:$$bindExpression (:$$bindStatement (:$$bindings) :x) (:$exportVariablesExpression)))",
 | 
						|
    ) 
 | 
						|
  testParsePartialToBe(
 | 
						|
    "y=x",
 | 
						|
    "Ok((:$$bindExpression (:$$bindStatement (:$$bindings) (:$let :y :x)) (:$exportVariablesExpression)))",
 | 
						|
    ) 
 | 
						|
  testParsePartialToBe(
 | 
						|
    "y=x+1",
 | 
						|
    "Ok((:$$bindExpression (:$$bindStatement (:$$bindings) (:$let :y (:add :x 1))) (:$exportVariablesExpression)))",
 | 
						|
    ) 
 | 
						|
  testParsePartialToBe(
 | 
						|
    "y = x+1; z = y",
 | 
						|
    "Ok((:$$bindExpression (:$$bindStatement (:$$bindStatement (:$$bindings) (:$let :y (:add :x 1))) (:$let :z :y)) (:$exportVariablesExpression)))",
 | 
						|
    ) 
 | 
						|
})
 | 
						|
 | 
						|
describe("Eval with Bindings", () => {
 | 
						|
  testEvalBindingsToBe(
 | 
						|
    "x",
 | 
						|
    list{("x", ExpressionValue.EvNumber(1.))},
 | 
						|
    "Ok(1)",
 | 
						|
    ) 
 | 
						|
  testEvalBindingsToBe(
 | 
						|
    "x+1",
 | 
						|
    list{("x", ExpressionValue.EvNumber(1.))},
 | 
						|
    "Ok(2)",
 | 
						|
    ) 
 | 
						|
  testEvalBindingsToBe(
 | 
						|
    "y = x+1; y",
 | 
						|
    list{("x", ExpressionValue.EvNumber(1.))},
 | 
						|
    "Ok(2)",
 | 
						|
    ) 
 | 
						|
})
 | 
						|
 | 
						|
Only.describe("Eval Partial", () => {
 | 
						|
  MyOnly.testEvalPartialBindingsToBe(
 | 
						|
    //   A partial cannot end with an expression
 | 
						|
    "x",
 | 
						|
    list{("x", ExpressionValue.EvNumber(1.))},
 | 
						|
    "Error(Assignment expected)",
 | 
						|
    ) 
 | 
						|
  testEvalPartialBindingsToBe(
 | 
						|
    "y=x",
 | 
						|
    list{("x", ExpressionValue.EvNumber(1.))},
 | 
						|
    "????",
 | 
						|
    ) 
 | 
						|
  testEvalBindingsToBe(
 | 
						|
    "y=x+1",
 | 
						|
    list{("x", ExpressionValue.EvNumber(1.))},
 | 
						|
    "????",
 | 
						|
    ) 
 | 
						|
  testEvalBindingsToBe(
 | 
						|
    "y = x+1; z = y",
 | 
						|
    list{("x", ExpressionValue.EvNumber(1.))},
 | 
						|
    "????",
 | 
						|
    ) 
 | 
						|
})
 | 
						|
 |