DoesIntersectTest.php 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. <?php
  2. class FormalTheory_RegularExpression_Tests_DoesIntersectTest extends PHPUnit_Framework_TestCase
  3. {
  4. function dataProviderForTestDoesIntersect()
  5. {
  6. return array(
  7. array( '^1{6,10}$', '^1{2,6}$', TRUE ),
  8. array( '^1{6,10}$', '^1{2,5}$', FALSE ),
  9. array( '^1{6,10}$', '^0{2,6}$', FALSE ),
  10. array( '^1*$', '^1{100}$', TRUE ),
  11. array( '^1(11)*$', '^(11)*$', FALSE ),
  12. array( '^(11)*1$', '^(11)*$', FALSE ),
  13. array( '^1(11)*$', '^(11111)*$', TRUE ),
  14. array( '^(1|0)*111(1|0)*$', '^(1|0)*000(1|0)*$', TRUE ),
  15. array( '1', '0', TRUE ),
  16. array( '^[a-z]*$', '^[A-Z]*$', TRUE ),
  17. array( '^.*1$', '^.*0$', FALSE ),
  18. array( '1$', '0$', FALSE ),
  19. array( '^1', '0$', TRUE ),
  20. array( '^1', '^0', FALSE ),
  21. array( '^(1|2){5}3$', '^1.*2.*3$', TRUE ),
  22. array( '^[1-9][0-9]*(\.[0-9]+)?$', '^3.14159265$', TRUE ),
  23. array( '^[1-9][0-9]*(\.[0-9]+)?$', '^42$', TRUE ),
  24. array( '1^0', '^.*$', FALSE ),
  25. array( '1$0', '^.*$', FALSE ),
  26. array( '1^0', '', FALSE ),
  27. array( '1$0', '', FALSE ),
  28. array( '^$', '', TRUE ),
  29. array( '^$', '^', TRUE ),
  30. array( '^$', '$', TRUE ),
  31. array( '^$', '^^$', TRUE ),
  32. array( '^$', '^$$', TRUE ),
  33. array( '^((bbbbb)*|(bbbbbbb)*)$', '^((b)*|(bb)*)$', TRUE ),
  34. );
  35. }
  36. /**
  37. * @dataProvider dataProviderForTestDoesIntersect
  38. */
  39. function testDoesIntersect( $regex_string_1, $regex_string_2, $expected_does_intersect )
  40. {
  41. $lexer = new FormalTheory_RegularExpression_Lexer();
  42. $nfa1 = $lexer->lex( $regex_string_1 )->getNFA();
  43. $nfa2 = $lexer->lex( $regex_string_2 )->getNFA();
  44. $this->assertSame( $expected_does_intersect, FormalTheory_FiniteAutomata::intersection( $nfa1, $nfa2 )->validSolutionExists() );
  45. $this->assertSame( $expected_does_intersect, FormalTheory_FiniteAutomata::intersection( $nfa2, $nfa1 )->validSolutionExists() );
  46. }
  47. }
  48. ?>