factor/basis/regexp/minimize/minimize-tests.factor

55 lines
1.8 KiB
Factor
Raw Normal View History

2009-02-19 01:11:45 -05:00
! Copyright (C) 2009 Daniel Ehrenberg
! See http://factorcode.org/license.txt for BSD license.
USING: tools.test regexp.minimize assocs regexp
2009-03-07 17:31:46 -05:00
accessors regexp.transition-tables regexp.parser
regexp.classes regexp.negation ;
2009-02-19 01:11:45 -05:00
IN: regexp.minimize.tests
{ t } [ 1 2 HS{ { 1 2 } } same-partition? ] unit-test
{ t } [ 2 1 HS{ { 1 2 } } same-partition? ] unit-test
{ f } [ 2 3 HS{ { 1 2 } } same-partition? ] unit-test
2009-02-19 01:11:45 -05:00
{ H{ { 1 1 } { 2 1 } { 3 3 } { 4 3 } } }
[ HS{ { 1 1 } { 1 2 } { 2 2 } { 3 3 } { 3 4 } { 4 4 } } partition>classes ] unit-test
2009-02-19 01:11:45 -05:00
: regexp-states ( string -- n )
parse-regexp ast>dfa transitions>> assoc-size ;
{ 3 } [ "ab|ac" regexp-states ] unit-test
{ 3 } [ "a(b|c)" regexp-states ] unit-test
{ 1 } [ "((aa*)*)*" regexp-states ] unit-test
{ 1 } [ "a|((aa*)*)*" regexp-states ] unit-test
{ 2 } [ "ab|((aa*)*)*b" regexp-states ] unit-test
{ 4 } [ "ab|cd" regexp-states ] unit-test
{ 1 } [ "(?i:[a-z]*|[A-Z]*)" regexp-states ] unit-test
2009-02-19 01:11:45 -05:00
{
2009-02-19 01:11:45 -05:00
T{ transition-table
{ transitions H{
{ 0 H{ { CHAR: a 1 } { CHAR: b 1 } } }
{ 1 H{ { CHAR: a 2 } { CHAR: b 2 } } }
{ 2 H{ { CHAR: c 3 } } }
{ 3 H{ } }
} }
{ start-state 0 }
{ final-states HS{ 3 } }
2009-02-19 01:11:45 -05:00
}
} [
2009-02-19 01:11:45 -05:00
T{ transition-table
{ transitions H{
{ 0 H{ { CHAR: a 1 } { CHAR: b 4 } } }
{ 1 H{ { CHAR: a 2 } { CHAR: b 5 } } }
{ 2 H{ { CHAR: c 3 } } }
{ 3 H{ } }
{ 4 H{ { CHAR: a 2 } { CHAR: b 5 } } }
{ 5 H{ { CHAR: c 6 } } }
{ 6 H{ } }
} }
{ start-state 0 }
{ final-states HS{ 3 6 } }
2009-02-19 01:11:45 -05:00
} combine-states
] unit-test
2009-03-04 01:36:03 -05:00
{ H{ { T{ or-class f { 2 1 } } 3 } { 4 5 } } }
2009-03-07 17:31:46 -05:00
[ H{ { 1 3 } { 2 3 } { 4 5 } } combine-state-transitions ] unit-test