@@ -1780,70 +1780,73 @@ test diffBisect {
17801780
17811781const talloc = std .testing .allocator ;
17821782test diff {
1783+ var arena = std .heap .ArenaAllocator .init (talloc );
1784+ defer arena .deinit ();
1785+
17831786 // Perform a trivial diff.
17841787 var diffs = std .ArrayListUnmanaged (Diff ){};
1785- defer diffs .deinit (talloc );
1788+ defer diffs .deinit (arena . allocator () );
17861789 var this = DiffMatchPatch {};
1787- try std .testing .expectEqualDeep (diffs , try this .diff (talloc , "" , "" , false )); // diff: Null case.
1790+ try std .testing .expectEqualDeep (diffs , try this .diff (arena . allocator () , "" , "" , false )); // diff: Null case.
17881791
17891792 diffs .items .len = 0 ;
1790- try diffs .appendSlice (talloc , &.{Diff .init (.equal , "abc" )});
1791- try std .testing .expectEqualDeep (diffs , try this .diff (talloc , "abc" , "abc" , false )); // diff: Equality.
1793+ try diffs .appendSlice (arena . allocator () , &.{Diff .init (.equal , "abc" )});
1794+ try std .testing .expectEqualDeep (diffs , try this .diff (arena . allocator () , "abc" , "abc" , false )); // diff: Equality.
17921795
17931796 diffs .items .len = 0 ;
1794- try diffs .appendSlice (talloc , &.{ Diff .init (.equal , "ab" ), Diff .init (.insert , "123" ), Diff .init (.equal , "c" ) });
1795- try std .testing .expectEqualDeep (diffs , try this .diff (talloc , "abc" , "ab123c" , false )); // diff: Simple insertion.
1797+ try diffs .appendSlice (arena . allocator () , &.{ Diff .init (.equal , "ab" ), Diff .init (.insert , "123" ), Diff .init (.equal , "c" ) });
1798+ try std .testing .expectEqualDeep (diffs , try this .diff (arena . allocator () , "abc" , "ab123c" , false )); // diff: Simple insertion.
17961799
17971800 diffs .items .len = 0 ;
1798- try diffs .appendSlice (talloc , &.{ Diff .init (.equal , "a" ), Diff .init (.delete , "123" ), Diff .init (.equal , "bc" ) });
1799- try std .testing .expectEqualDeep (diffs , try this .diff (talloc , "a123bc" , "abc" , false )); // diff: Simple deletion.
1801+ try diffs .appendSlice (arena . allocator () , &.{ Diff .init (.equal , "a" ), Diff .init (.delete , "123" ), Diff .init (.equal , "bc" ) });
1802+ try std .testing .expectEqualDeep (diffs , try this .diff (arena . allocator () , "a123bc" , "abc" , false )); // diff: Simple deletion.
18001803
18011804 diffs .items .len = 0 ;
1802- try diffs .appendSlice (talloc , &.{ Diff .init (.equal , "a" ), Diff .init (.insert , "123" ), Diff .init (.equal , "b" ), Diff .init (.insert , "456" ), Diff .init (.equal , "c" ) });
1803- try std .testing .expectEqualDeep (diffs , try this .diff (talloc , "abc" , "a123b456c" , false )); // diff: Two insertions.
1805+ try diffs .appendSlice (arena . allocator () , &.{ Diff .init (.equal , "a" ), Diff .init (.insert , "123" ), Diff .init (.equal , "b" ), Diff .init (.insert , "456" ), Diff .init (.equal , "c" ) });
1806+ try std .testing .expectEqualDeep (diffs , try this .diff (arena . allocator () , "abc" , "a123b456c" , false )); // diff: Two insertions.
18041807
18051808 diffs .items .len = 0 ;
1806- try diffs .appendSlice (talloc , &.{ Diff .init (.equal , "a" ), Diff .init (.delete , "123" ), Diff .init (.equal , "b" ), Diff .init (.delete , "456" ), Diff .init (.equal , "c" ) });
1807- try std .testing .expectEqualDeep (diffs , try this .diff (talloc , "a123b456c" , "abc" , false )); // diff: Two deletions.
1809+ try diffs .appendSlice (arena . allocator () , &.{ Diff .init (.equal , "a" ), Diff .init (.delete , "123" ), Diff .init (.equal , "b" ), Diff .init (.delete , "456" ), Diff .init (.equal , "c" ) });
1810+ try std .testing .expectEqualDeep (diffs , try this .diff (arena . allocator () , "a123b456c" , "abc" , false )); // diff: Two deletions.
18081811
18091812 // Perform a real diff.
18101813 // Switch off the timeout.
18111814 this .diff_timeout = 0 ;
18121815 diffs .items .len = 0 ;
1813- try diffs .appendSlice (talloc , &.{ Diff .init (.delete , "a" ), Diff .init (.insert , "b" ) });
1814- try std .testing .expectEqualDeep (diffs , try this .diff (talloc , "a" , "b" , false )); // diff: Simple case #1.
1816+ try diffs .appendSlice (arena . allocator () , &.{ Diff .init (.delete , "a" ), Diff .init (.insert , "b" ) });
1817+ try std .testing .expectEqualDeep (diffs , try this .diff (arena . allocator () , "a" , "b" , false )); // diff: Simple case #1.
18151818
18161819 diffs .items .len = 0 ;
1817- try diffs .appendSlice (talloc , &.{ Diff .init (.delete , "Apple" ), Diff .init (.insert , "Banana" ), Diff .init (.equal , "s are a" ), Diff .init (.insert , "lso" ), Diff .init (.equal , " fruit." ) });
1818- try std .testing .expectEqualDeep (diffs , try this .diff (talloc , "Apples are a fruit." , "Bananas are also fruit." , false )); // diff: Simple case #2.
1820+ try diffs .appendSlice (arena . allocator () , &.{ Diff .init (.delete , "Apple" ), Diff .init (.insert , "Banana" ), Diff .init (.equal , "s are a" ), Diff .init (.insert , "lso" ), Diff .init (.equal , " fruit." ) });
1821+ try std .testing .expectEqualDeep (diffs , try this .diff (arena . allocator () , "Apples are a fruit." , "Bananas are also fruit." , false )); // diff: Simple case #2.
18191822
18201823 diffs .items .len = 0 ;
1821- try diffs .appendSlice (talloc , &.{ Diff .init (.delete , "a" ), Diff .init (.insert , "\u{0680} " ), Diff .init (.equal , "x" ), Diff .init (.delete , "\t " ), Diff .init (.insert , "\x00 " ) });
1822- try std .testing .expectEqualDeep (diffs , try this .diff (talloc , "ax\t " , "\u{0680} x\x00 " , false )); // diff: Simple case #3.
1824+ try diffs .appendSlice (arena . allocator () , &.{ Diff .init (.delete , "a" ), Diff .init (.insert , "\u{0680} " ), Diff .init (.equal , "x" ), Diff .init (.delete , "\t " ), Diff .init (.insert , "\x00 " ) });
1825+ try std .testing .expectEqualDeep (diffs , try this .diff (arena . allocator () , "ax\t " , "\u{0680} x\x00 " , false )); // diff: Simple case #3.
18231826
18241827 diffs .items .len = 0 ;
1825- try diffs .appendSlice (talloc , &.{ Diff .init (.delete , "1" ), Diff .init (.equal , "a" ), Diff .init (.delete , "y" ), Diff .init (.equal , "b" ), Diff .init (.delete , "2" ), Diff .init (.insert , "xab" ) });
1826- try std .testing .expectEqualDeep (diffs , try this .diff (talloc , "1ayb2" , "abxab" , false )); // diff: Overlap #1.
1828+ try diffs .appendSlice (arena . allocator () , &.{ Diff .init (.delete , "1" ), Diff .init (.equal , "a" ), Diff .init (.delete , "y" ), Diff .init (.equal , "b" ), Diff .init (.delete , "2" ), Diff .init (.insert , "xab" ) });
1829+ try std .testing .expectEqualDeep (diffs , try this .diff (arena . allocator () , "1ayb2" , "abxab" , false )); // diff: Overlap #1.
18271830
18281831 diffs .items .len = 0 ;
1829- try diffs .appendSlice (talloc , &.{ Diff .init (.insert , "xaxcx" ), Diff .init (.equal , "abc" ), Diff .init (.delete , "y" ) });
1830- try std .testing .expectEqualDeep (diffs , try this .diff (talloc , "abcy" , "xaxcxabc" , false )); // diff: Overlap #2.
1832+ try diffs .appendSlice (arena . allocator () , &.{ Diff .init (.insert , "xaxcx" ), Diff .init (.equal , "abc" ), Diff .init (.delete , "y" ) });
1833+ try std .testing .expectEqualDeep (diffs , try this .diff (arena . allocator () , "abcy" , "xaxcxabc" , false )); // diff: Overlap #2.
18311834
18321835 diffs .items .len = 0 ;
1833- try diffs .appendSlice (talloc , &.{ Diff .init (.delete , "ABCD" ), Diff .init (.equal , "a" ), Diff .init (.delete , "=" ), Diff .init (.insert , "-" ), Diff .init (.equal , "bcd" ), Diff .init (.delete , "=" ), Diff .init (.insert , "-" ), Diff .init (.equal , "efghijklmnopqrs" ), Diff .init (.delete , "EFGHIJKLMNOefg" ) });
1834- try std .testing .expectEqualDeep (diffs , try this .diff (talloc , "ABCDa=bcd=efghijklmnopqrsEFGHIJKLMNOefg" , "a-bcd-efghijklmnopqrs" , false )); // diff: Overlap #3.
1836+ try diffs .appendSlice (arena . allocator () , &.{ Diff .init (.delete , "ABCD" ), Diff .init (.equal , "a" ), Diff .init (.delete , "=" ), Diff .init (.insert , "-" ), Diff .init (.equal , "bcd" ), Diff .init (.delete , "=" ), Diff .init (.insert , "-" ), Diff .init (.equal , "efghijklmnopqrs" ), Diff .init (.delete , "EFGHIJKLMNOefg" ) });
1837+ try std .testing .expectEqualDeep (diffs , try this .diff (arena . allocator () , "ABCDa=bcd=efghijklmnopqrsEFGHIJKLMNOefg" , "a-bcd-efghijklmnopqrs" , false )); // diff: Overlap #3.
18351838
18361839 diffs .items .len = 0 ;
1837- try diffs .appendSlice (talloc , &.{ Diff .init (.insert , " " ), Diff .init (.equal , "a" ), Diff .init (.insert , "nd" ), Diff .init (.equal , " [[Pennsylvania]]" ), Diff .init (.delete , " and [[New" ) });
1838- try std .testing .expectEqualDeep (diffs , try this .diff (talloc , "a [[Pennsylvania]] and [[New" , " and [[Pennsylvania]]" , false )); // diff: Large equality.
1840+ try diffs .appendSlice (arena . allocator () , &.{ Diff .init (.insert , " " ), Diff .init (.equal , "a" ), Diff .init (.insert , "nd" ), Diff .init (.equal , " [[Pennsylvania]]" ), Diff .init (.delete , " and [[New" ) });
1841+ try std .testing .expectEqualDeep (diffs , try this .diff (arena . allocator () , "a [[Pennsylvania]] and [[New" , " and [[Pennsylvania]]" , false )); // diff: Large equality.
18391842
18401843 this .diff_timeout = 100 * std .time .ms_per_s ; // 100ms
18411844 // Increase the text lengths by 1024 times to ensure a timeout.
18421845 {
18431846 const a = "`Twas brillig, and the slithy toves\n Did gyre and gimble in the wabe:\n All mimsy were the borogoves,\n And the mome raths outgrabe.\n " ** 10 ;
18441847 const b = "I am the very model of a modern major general,\n I've information vegetable, animal, and mineral,\n I know the kings of England, and I quote the fights historical,\n From Marathon to Waterloo, in order categorical.\n " ** 10 ;
18451848 const start_time = std .time .milliTimestamp ();
1846- _ = try this .diff (talloc , a , b , false ); // Travis - TODO not sure what the third arg should be
1849+ _ = try this .diff (arena . allocator () , a , b , false ); // Travis - TODO not sure what the third arg should be
18471850 const end_time = std .time .milliTimestamp ();
18481851 // Test that we took at least the timeout period.
18491852 try std .testing .expect ((this .diff_timeout * 1000 ) * 10000 <= end_time - start_time ); // diff: Timeout min.
@@ -1858,25 +1861,25 @@ test diff {
18581861 // Must be long to pass the 100 char cutoff.
18591862 const a = "1234567890\n 1234567890\n 1234567890\n 1234567890\n 1234567890\n 1234567890\n 1234567890\n 1234567890\n 1234567890\n 1234567890\n 1234567890\n 1234567890\n 1234567890\n " ;
18601863 const b = "abcdefghij\n abcdefghij\n abcdefghij\n abcdefghij\n abcdefghij\n abcdefghij\n abcdefghij\n abcdefghij\n abcdefghij\n abcdefghij\n abcdefghij\n abcdefghij\n abcdefghij\n " ;
1861- try std .testing .expectEqualDeep (try this .diff (talloc , a , b , true ), try this .diff (talloc , a , b , false )); // diff: Simple line-mode.
1864+ try std .testing .expectEqualDeep (try this .diff (arena . allocator () , a , b , true ), try this .diff (arena . allocator () , a , b , false )); // diff: Simple line-mode.
18621865 }
18631866 {
18641867 const a = "1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890" ;
18651868 const b = "abcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghijabcdefghij" ;
1866- try std .testing .expectEqualDeep (try this .diff (talloc , a , b , true ), try this .diff (talloc , a , b , false )); // diff: Single line-mode.
1869+ try std .testing .expectEqualDeep (try this .diff (arena . allocator () , a , b , true ), try this .diff (arena . allocator () , a , b , false )); // diff: Single line-mode.
18671870 }
18681871
18691872 const a = "1234567890\n 1234567890\n 1234567890\n 1234567890\n 1234567890\n 1234567890\n 1234567890\n 1234567890\n 1234567890\n 1234567890\n 1234567890\n 1234567890\n 1234567890\n " ;
18701873 const b = "abcdefghij\n 1234567890\n 1234567890\n 1234567890\n abcdefghij\n 1234567890\n 1234567890\n 1234567890\n abcdefghij\n 1234567890\n 1234567890\n 1234567890\n abcdefghij\n " ;
1871- const texts_linemode = try rebuildtexts (talloc , try this .diff (talloc , a , b , true ));
1874+ const texts_linemode = try rebuildtexts (arena . allocator () , try this .diff (arena . allocator () , a , b , true ));
18721875 defer {
1873- talloc .free (texts_linemode [0 ]);
1874- talloc .free (texts_linemode [1 ]);
1876+ arena . allocator () .free (texts_linemode [0 ]);
1877+ arena . allocator () .free (texts_linemode [1 ]);
18751878 }
1876- const texts_textmode = try rebuildtexts (talloc , try this .diff (talloc , a , b , false ));
1879+ const texts_textmode = try rebuildtexts (arena . allocator () , try this .diff (arena . allocator () , a , b , false ));
18771880 defer {
1878- talloc .free (texts_textmode [0 ]);
1879- talloc .free (texts_textmode [1 ]);
1881+ arena . allocator () .free (texts_textmode [0 ]);
1882+ arena . allocator () .free (texts_textmode [1 ]);
18801883 }
18811884 try std .testing .expectEqualDeep (texts_textmode , texts_linemode ); // diff: Overlap line-mode.
18821885
0 commit comments