244 lines
		
	
	
		
			6.4 KiB
		
	
	
	
		
			Factor
		
	
	
			
		
		
	
	
			244 lines
		
	
	
		
			6.4 KiB
		
	
	
	
		
			Factor
		
	
	
! Copyright (C) 2017 Doug Coleman.
 | 
						|
! See http://factorcode.org/license.txt for BSD license.
 | 
						|
USING: modern modern.slices multiline tools.test ;
 | 
						|
IN: modern.tests
 | 
						|
 | 
						|
{ f } [ "" upper-colon? ] unit-test
 | 
						|
{ t } [ ":" upper-colon? ] unit-test
 | 
						|
{ t } [ "::" upper-colon? ] unit-test
 | 
						|
{ t } [ ":::" upper-colon? ] unit-test
 | 
						|
{ t } [ "FOO:" upper-colon? ] unit-test
 | 
						|
{ t } [ "FOO::" upper-colon? ] unit-test
 | 
						|
{ t } [ "FOO:::" upper-colon? ] unit-test
 | 
						|
 | 
						|
! 'FOO:
 | 
						|
{ f } [ "'" upper-colon? ] unit-test
 | 
						|
{ t } [ "':" upper-colon? ] unit-test
 | 
						|
{ t } [ "'::" upper-colon? ] unit-test
 | 
						|
{ t } [ "':::" upper-colon? ] unit-test
 | 
						|
{ t } [ "'FOO:" upper-colon? ] unit-test
 | 
						|
{ t } [ "'FOO::" upper-colon? ] unit-test
 | 
						|
{ t } [ "'FOO:::" upper-colon? ] unit-test
 | 
						|
 | 
						|
! \FOO: is not an upper-colon form, it is deactivated by the \
 | 
						|
{ f } [ "\\" upper-colon? ] unit-test
 | 
						|
{ f } [ "\\:" upper-colon? ] unit-test
 | 
						|
{ f } [ "\\::" upper-colon? ] unit-test
 | 
						|
{ f } [ "\\:::" upper-colon? ] unit-test
 | 
						|
{ f } [ "\\FOO:" upper-colon? ] unit-test
 | 
						|
{ f } [ "\\FOO::" upper-colon? ] unit-test
 | 
						|
{ f } [ "\\FOO:::" upper-colon? ] unit-test
 | 
						|
 | 
						|
 | 
						|
! Comment
 | 
						|
{
 | 
						|
    { { "!" "" } }
 | 
						|
} [ "!" string>literals >strings ] unit-test
 | 
						|
 | 
						|
{
 | 
						|
    { { "!" " lol" } }
 | 
						|
} [ "! lol" string>literals >strings ] unit-test
 | 
						|
 | 
						|
{
 | 
						|
    { "lol!" }
 | 
						|
} [ "lol!" string>literals >strings ] unit-test
 | 
						|
 | 
						|
{
 | 
						|
    { { "!" "lol" } }
 | 
						|
} [ "!lol" string>literals >strings ] unit-test
 | 
						|
 | 
						|
! Colon
 | 
						|
{
 | 
						|
    { ":asdf:" }
 | 
						|
} [ ":asdf:" string>literals >strings ] unit-test
 | 
						|
 | 
						|
{
 | 
						|
    { { "one:" { "1" } } }
 | 
						|
} [ "one: 1" string>literals >strings ] unit-test
 | 
						|
 | 
						|
{
 | 
						|
    { { "two::" { "1" "2" } } }
 | 
						|
} [ "two:: 1 2" string>literals >strings ] unit-test
 | 
						|
 | 
						|
{
 | 
						|
    { "1" ":>" "one" }
 | 
						|
} [ "1 :> one" string>literals >strings ] unit-test
 | 
						|
 | 
						|
{
 | 
						|
    { { ":" { "foo" } ";" } }
 | 
						|
} [ ": foo ;" string>literals >strings ] unit-test
 | 
						|
 | 
						|
{
 | 
						|
    {
 | 
						|
        { "FOO:" { "a" } }
 | 
						|
        { "BAR:" { "b" } }
 | 
						|
    }
 | 
						|
} [ "FOO: a BAR: b" string>literals >strings ] unit-test
 | 
						|
 | 
						|
{
 | 
						|
    { { "FOO:" { "a" } ";" } }
 | 
						|
} [ "FOO: a ;" string>literals >strings ] unit-test
 | 
						|
 | 
						|
{
 | 
						|
    { { "FOO:" { "a" } "FOO;" } }
 | 
						|
} [ "FOO: a FOO;" string>literals >strings ] unit-test
 | 
						|
 | 
						|
 | 
						|
! Acute
 | 
						|
{
 | 
						|
    { { "<A" { } "A>" } }
 | 
						|
} [ "<A A>" string>literals >strings ] unit-test
 | 
						|
 | 
						|
{
 | 
						|
    { { "<B:" { "hi" } ";B>" } }
 | 
						|
} [ "<B: hi ;B>" string>literals >strings ] unit-test
 | 
						|
 | 
						|
{ { "<foo>" } } [ "<foo>" string>literals >strings ] unit-test
 | 
						|
{ { ">foo<" } } [ ">foo<" string>literals >strings ] unit-test
 | 
						|
 | 
						|
{ { "foo>" } } [ "foo>" string>literals >strings ] unit-test
 | 
						|
{ { ">foo" } } [ ">foo" string>literals >strings ] unit-test
 | 
						|
{ { ">foo>" } } [ ">foo>" string>literals >strings ] unit-test
 | 
						|
{ { ">>foo>" } } [ ">>foo>" string>literals >strings ] unit-test
 | 
						|
{ { ">>foo>>" } } [ ">>foo>>" string>literals >strings ] unit-test
 | 
						|
 | 
						|
{ { "foo<" } } [ "foo<" string>literals >strings ] unit-test
 | 
						|
{ { "<foo" } } [ "<foo" string>literals >strings ] unit-test
 | 
						|
{ { "<foo<" } } [ "<foo<" string>literals >strings ] unit-test
 | 
						|
{ { "<<foo<" } } [ "<<foo<" string>literals >strings ] unit-test
 | 
						|
{ { "<<foo<<" } } [ "<<foo<<" string>literals >strings ] unit-test
 | 
						|
 | 
						|
! Backslash \AVL{ foo\bar foo\bar{
 | 
						|
{
 | 
						|
    { { "SYNTAX:" { "\\AVL{" } } }
 | 
						|
} [ "SYNTAX: \\AVL{" string>literals >strings ] unit-test
 | 
						|
 | 
						|
[ "\\" string>literals >strings ] must-fail ! \ alone should be legal eventually (?)
 | 
						|
 | 
						|
{ { "\\FOO" } } [ "\\FOO" string>literals >strings ] unit-test
 | 
						|
 | 
						|
{
 | 
						|
    { "foo\\bar" }
 | 
						|
} [ "foo\\bar" string>literals >strings ] unit-test
 | 
						|
 | 
						|
[ "foo\\bar{" string>literals >strings ] must-fail
 | 
						|
 | 
						|
{
 | 
						|
    { { "foo\\bar{" { "1" } "}" } }
 | 
						|
} [ "foo\\bar{ 1 }" string>literals >strings ] unit-test
 | 
						|
 | 
						|
{ { { "char:" { "\\{" } } } } [ "char: \\{" string>literals >strings ] unit-test
 | 
						|
[ "char: {" string>literals >strings ] must-fail
 | 
						|
[ "char: [" string>literals >strings ] must-fail
 | 
						|
[ "char: {" string>literals >strings ] must-fail
 | 
						|
[ "char: \"" string>literals >strings ] must-fail
 | 
						|
! { { { "char:" { "\\\\" } } } } [ "char: \\\\" string>literals >strings ] unit-test
 | 
						|
 | 
						|
[ "char: \\" string>literals >strings ] must-fail ! char: \ should be legal eventually
 | 
						|
 | 
						|
{ { { "\\" { "(" } } } } [ "\\ (" string>literals >strings ] unit-test
 | 
						|
 | 
						|
{ { "\\[[" } } [ "\\[[" string>literals >strings ] unit-test
 | 
						|
{ { "\\[=[" } } [ "\\[=[" string>literals >strings ] unit-test
 | 
						|
{ { "\\[==[" } } [ "\\[==[" string>literals >strings ] unit-test
 | 
						|
 | 
						|
 | 
						|
{ t } [ "FOO:" strict-upper? ] unit-test
 | 
						|
{ t } [ ":" strict-upper? ] unit-test
 | 
						|
{ f } [ "<FOO" strict-upper? ] unit-test
 | 
						|
{ f } [ "<FOO:" strict-upper? ] unit-test
 | 
						|
{ f } [ "->" strict-upper? ] unit-test
 | 
						|
{ f } [ "FOO>" strict-upper? ] unit-test
 | 
						|
{ f } [ ";FOO>" strict-upper? ] unit-test
 | 
						|
 | 
						|
{ f } [ "FOO" section-open? ] unit-test
 | 
						|
{ f } [ "FOO:" section-open? ] unit-test
 | 
						|
{ f } [ ";FOO" section-close? ] unit-test
 | 
						|
{ f } [ "FOO" section-close? ] unit-test
 | 
						|
 | 
						|
 | 
						|
! Strings
 | 
						|
{
 | 
						|
    { { "url\"" "google.com" "\"" } }
 | 
						|
} [ [[ url"google.com" ]] string>literals >strings ] unit-test
 | 
						|
 | 
						|
{
 | 
						|
    { { "\"" "google.com" "\"" } }
 | 
						|
} [ [[ "google.com" ]] string>literals >strings ] unit-test
 | 
						|
 | 
						|
{
 | 
						|
    {
 | 
						|
        { "(" { "a" "b" } ")" }
 | 
						|
        { "[" { "a" "b" "+" } "]" }
 | 
						|
        { "(" { "c" } ")" }
 | 
						|
    }
 | 
						|
} [ "( a b ) [ a b + ] ( c )" string>literals >strings ] unit-test
 | 
						|
 | 
						|
![[
 | 
						|
! Concatenated syntax
 | 
						|
{
 | 
						|
    {
 | 
						|
        {
 | 
						|
            { "(" { "a" "b" } ")" }
 | 
						|
            { "[" { "a" "b" "+" } "]" }
 | 
						|
            { "(" { "c" } ")" }
 | 
						|
        }
 | 
						|
    }
 | 
						|
} [ "( a b )[ a b + ]( c )" string>literals >strings ] unit-test
 | 
						|
 | 
						|
{
 | 
						|
    {
 | 
						|
        {
 | 
						|
            { "\"" "abc" "\"" }
 | 
						|
            { "[" { "0" } "]" }
 | 
						|
        }
 | 
						|
    }
 | 
						|
} [ "\"abc\"[ 0 ]" string>literals >strings ] unit-test
 | 
						|
]]
 | 
						|
 | 
						|
 | 
						|
{
 | 
						|
    {
 | 
						|
        { "<FOO" { { "BAR:" { "bar" } } } "FOO>" }
 | 
						|
    }
 | 
						|
} [ "<FOO BAR: bar FOO>" string>literals >strings ] unit-test
 | 
						|
 | 
						|
{
 | 
						|
    {
 | 
						|
        { "<FOO:" { "foo" { "BAR:" { "bar" } } } ";FOO>" }
 | 
						|
    }
 | 
						|
} [ "<FOO: foo BAR: bar ;FOO>" string>literals >strings ] unit-test
 | 
						|
 | 
						|
 | 
						|
![[
 | 
						|
{
 | 
						|
    {
 | 
						|
        {
 | 
						|
            {
 | 
						|
                "foo::"
 | 
						|
                {
 | 
						|
                    {
 | 
						|
                        { "<FOO" { } "FOO>" }
 | 
						|
                        { "[" { "0" } "]" }
 | 
						|
                        { "[" { "1" } "]" }
 | 
						|
                        { "[" { "2" } "]" }
 | 
						|
                        { "[" { "3" } "]" }
 | 
						|
                    }
 | 
						|
                    { { "<BAR" { } "BAR>" } }
 | 
						|
                }
 | 
						|
            }
 | 
						|
        }
 | 
						|
    }
 | 
						|
} [ "foo:: <FOO FOO>[ 0 ][ 1 ][ 2 ][ 3 ] <BAR BAR>" string>literals >strings ] unit-test
 | 
						|
]]
 | 
						|
 | 
						|
{
 | 
						|
    {
 | 
						|
        { "foo::" { { "<FOO" { } "FOO>" } { "[" { "0" } "]" } } }
 | 
						|
        { "[" { "1" } "]" }
 | 
						|
        { "[" { "2" } "]" }
 | 
						|
        { "[" { "3" } "]" }
 | 
						|
        { "<BAR" { } "BAR>" }
 | 
						|
    }
 | 
						|
} [ "foo:: <FOO FOO> [ 0 ] [ 1 ] [ 2 ] [ 3 ] <BAR BAR>" string>literals >strings ] unit-test
 |