175 lines
5.1 KiB
Factor
175 lines
5.1 KiB
Factor
! Copyright (C) 2009 Philipp Brüschweiler
|
|
! See http://factorcode.org/license.txt for BSD license.
|
|
USING: infix.ast infix.parser infix.tokenizer tools.test ;
|
|
IN: infix.parser.tests
|
|
|
|
[ T{ ast-number { value 1 } } ] [ "1" build-infix-ast ] unit-test
|
|
[ T{ ast-negation f T{ ast-number { value 1 } } } ]
|
|
[ "-1" build-infix-ast ] unit-test
|
|
[ T{ ast-op
|
|
{ left
|
|
T{ ast-op
|
|
{ left T{ ast-number { value 1 } } }
|
|
{ right T{ ast-number { value 2 } } }
|
|
{ op "+" }
|
|
}
|
|
}
|
|
{ right T{ ast-number { value 4 } } }
|
|
{ op "+" }
|
|
} ] [ "1+2+4" build-infix-ast ] unit-test
|
|
|
|
[ T{ ast-op
|
|
{ left T{ ast-number { value 1 } } }
|
|
{ right
|
|
T{ ast-op
|
|
{ left T{ ast-number { value 2 } } }
|
|
{ right T{ ast-number { value 3 } } }
|
|
{ op "*" }
|
|
}
|
|
}
|
|
{ op "+" }
|
|
} ] [ "1+2*3" build-infix-ast ] unit-test
|
|
|
|
[ T{ ast-op
|
|
{ left T{ ast-number { value 1 } } }
|
|
{ right T{ ast-number { value 2 } } }
|
|
{ op "+" }
|
|
} ] [ "(1+2)" build-infix-ast ] unit-test
|
|
|
|
[ T{ ast-local { name "foo" } } ] [ "foo" build-infix-ast ] unit-test
|
|
[ "-" build-infix-ast ] must-fail
|
|
|
|
[ T{ ast-function
|
|
{ name "foo" }
|
|
{ arguments
|
|
V{
|
|
T{ ast-op
|
|
{ left T{ ast-number { value 1 } } }
|
|
{ right T{ ast-number { value 2 } } }
|
|
{ op "+" }
|
|
}
|
|
T{ ast-op
|
|
{ left T{ ast-number { value 2 } } }
|
|
{ right T{ ast-number { value 3 } } }
|
|
{ op "%" }
|
|
}
|
|
}
|
|
}
|
|
} ] [ "foo (1+ 2,2%3) " build-infix-ast ] unit-test
|
|
|
|
[ T{ ast-op
|
|
{ left
|
|
T{ ast-op
|
|
{ left
|
|
T{ ast-function
|
|
{ name "bar" }
|
|
{ arguments V{ } }
|
|
}
|
|
}
|
|
{ right
|
|
T{ ast-array
|
|
{ name "baz" }
|
|
{ index
|
|
T{ ast-op
|
|
{ left
|
|
T{ ast-op
|
|
{ left
|
|
T{ ast-number
|
|
{ value 2 }
|
|
}
|
|
}
|
|
{ right
|
|
T{ ast-number
|
|
{ value 3 }
|
|
}
|
|
}
|
|
{ op "/" }
|
|
}
|
|
}
|
|
{ right
|
|
T{ ast-number { value 4 } }
|
|
}
|
|
{ op "+" }
|
|
}
|
|
}
|
|
}
|
|
}
|
|
{ op "+" }
|
|
}
|
|
}
|
|
{ right T{ ast-number { value 2 } } }
|
|
{ op "/" }
|
|
} ] [ "(bar() + baz[2/ 3+4 ] )/2" build-infix-ast ] unit-test
|
|
|
|
[ T{ ast-op
|
|
{ left T{ ast-number { value 1 } } }
|
|
{ right
|
|
T{ ast-op
|
|
{ left T{ ast-number { value 2 } } }
|
|
{ right T{ ast-number { value 3 } } }
|
|
{ op "/" }
|
|
}
|
|
}
|
|
{ op "+" }
|
|
} ] [ "1\n+\n2\r/\t3" build-infix-ast ] unit-test
|
|
|
|
[ T{ ast-negation
|
|
{ term
|
|
T{ ast-function
|
|
{ name "foo" }
|
|
{ arguments
|
|
V{
|
|
T{ ast-number { value 2 } }
|
|
T{ ast-negation
|
|
{ term T{ ast-number { value 3 } } }
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
} ] [ "-foo(+2,-3)" build-infix-ast ] unit-test
|
|
|
|
[ T{ ast-array
|
|
{ name "arr" }
|
|
{ index
|
|
T{ ast-op
|
|
{ left
|
|
T{ ast-negation
|
|
{ term
|
|
T{ ast-op
|
|
{ left
|
|
T{ ast-function
|
|
{ name "foo" }
|
|
{ arguments
|
|
V{
|
|
T{ ast-number
|
|
{ value 2 }
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
{ right
|
|
T{ ast-negation
|
|
{ term
|
|
T{ ast-number
|
|
{ value 1 }
|
|
}
|
|
}
|
|
}
|
|
}
|
|
{ op "+" }
|
|
}
|
|
}
|
|
}
|
|
}
|
|
{ right T{ ast-number { value 3 } } }
|
|
{ op "/" }
|
|
}
|
|
}
|
|
} ] [ "+arr[-(foo(2)+-1)/3]" build-infix-ast ] unit-test
|
|
|
|
[ "foo bar baz" build-infix-ast ] must-fail
|
|
[ "1+2/4+" build-infix-ast ] must-fail
|
|
[ "quaz(2/3,)" build-infix-ast ] must-fail
|