/** * Runs diff and interprets results into ouwiki_changes object. * @param array $file1 Array of lines in file 1. The first line in the file * MUST BE INDEX 1 NOT ZERO!! * @param array $file2 Array of lines in file 2, again starting from 1. * @return ouwiki_changes Object describing changes */ function ouwiki_diff($file1, $file2) { return new ouwiki_changes(ouwiki_diff_internal($file1, $file2), count($file2)); }
function test_basic_diff() { // Example from paper $file1 = array(1 => 'a', 'b', 'c', 'd', 'e', 'f', 'g'); $file2 = array(1 => 'w', 'a', 'b', 'x', 'y', 'z', 'e'); $this->assertEqual(ouwiki_diff_internal($file1, $file2), array(1 => 2, 2 => 3, 3 => 0, 4 => 0, 5 => 7, 6 => 0, 7 => 0)); $this->assertEqual(ouwiki_diff_internal($file2, $file1), array(1 => 0, 2 => 1, 3 => 2, 4 => 0, 5 => 0, 6 => 0, 7 => 5)); // Add text at beginning $file2 = array(1 => '0', '1', 'a', 'b', 'c', 'd', 'e', 'f', 'g'); $this->assertEqual(ouwiki_diff_internal($file1, $file2), array(1 => 3, 2 => 4, 3 => 5, 4 => 6, 5 => 7, 6 => 8, 7 => 9)); // Add text at end $file2 = array(1 => 'a', 'b', 'c', 'd', 'e', 'f', 'g', '0', '1'); $this->assertEqual(ouwiki_diff_internal($file1, $file2), array(1 => 1, 2 => 2, 3 => 3, 4 => 4, 5 => 5, 6 => 6, 7 => 7)); // Add text in middle $file2 = array(1 => 'a', 'b', 'c', '0', '1', 'd', 'e', 'f', 'g'); $this->assertEqual(ouwiki_diff_internal($file1, $file2), array(1 => 1, 2 => 2, 3 => 3, 4 => 6, 5 => 7, 6 => 8, 7 => 9)); // Delete text at beginning $file2 = array(1 => 'c', 'd', 'e', 'f', 'g'); $this->assertEqual(ouwiki_diff_internal($file1, $file2), array(1 => 0, 2 => 0, 3 => 1, 4 => 2, 5 => 3, 6 => 4, 7 => 5)); // Delete text at end $file2 = array(1 => 'a', 'b', 'c', 'd', 'e'); $this->assertEqual(ouwiki_diff_internal($file1, $file2), array(1 => 1, 2 => 2, 3 => 3, 4 => 4, 5 => 5, 6 => 0, 7 => 0)); // Delete text in middle $file2 = array(1 => 'a', 'b', 'c', 'f', 'g'); $this->assertEqual(ouwiki_diff_internal($file1, $file2), array(1 => 1, 2 => 2, 3 => 3, 4 => 0, 5 => 0, 6 => 4, 7 => 5)); }