char-fork/llama.cpp
git clone https://git.t4t.associates/char-fork/llama.cpp
92d1bb0c9
char/aliceai-t5-moe
1import { SourceHistory } from '$lib/utils' ; 2import { describe , expect , it } from 'vitest' ; 3 4describe ( 'SourceHistory' , () => { 5it ( 'coalesces pushes inside the group window into one undo step' , () => { 6const h = new SourceHistory ( 100 , 800 ); 7 8h . push ({ caret :0 , value :'' }, 1000 ); 9h . push ({ caret :1 , value :'a' }, 1200 ); 10h . push ({ caret :2 , value :'ab' }, 1500 ); 11 12expect ( h . undo ({ caret :3 , value :'abc' })). toEqual ({ caret :0 , value :'' }); 13expect ( h . undo ({ caret :0 , value :'' })). toBeNull (); 14}); 15 16it ( 'starts a new group once the window has passed' , () => { 17const h = new SourceHistory ( 100 , 800 ); 18 19h . push ({ caret :0 , value :'' }, 1000 ); 20h . push ({ caret :3 , value :'abc' }, 2000 ); 21 22expect ( h . undo ({ caret :6 , value :'abcdef' })). toEqual ({ caret :3 , value :'abc' }); 23expect ( h . undo ({ caret :3 , value :'abc' })). toEqual ({ caret :0 , value :'' }); 24}); 25 26it ( 'newGroup forces a separate entry even inside the window' , () => { 27const h = new SourceHistory ( 100 , 800 ); 28 29h . push ({ caret :0 , value :'' }, 1000 ); 30h . push ({ caret :3 , value :'abc' }, 1100 , true ); 31 32expect ( h . undo ({ caret :4 , value :'abc\n' })). toEqual ({ caret :3 , value :'abc' }); 33expect ( h . undo ({ caret :3 , value :'abc' })). toEqual ({ caret :0 , value :'' }); 34}); 35 36it ( 'redo round-trips and a fresh push clears the redo stack' , () => { 37const h = new SourceHistory ( 100 , 800 ); 38 39h . push ({ caret :0 , value :'' }, 1000 ); 40 41const undone = h . undo ({ caret :3 , value :'abc' }); 42 43expect ( undone ). toEqual ({ caret :0 , value :'' }); 44expect ( h . redo ({ caret :0 , value :'' })). toEqual ({ caret :3 , value :'abc' }); 45 46h . undo ({ caret :3 , value :'abc' }); 47h . push ({ caret :0 , value :'' }, 5000 ); 48expect ( h . redo ({ caret :1 , value :'x' })). toBeNull (); 49}); 50 51it ( 'starts a new group on the first edit after an undo' , () => { 52const h = new SourceHistory ( 100 , 800 ); 53 54h . push ({ caret :0 , value :'' }, 1000 ); 55h . undo ({ caret :3 , value :'abc' }); 56 57h . push ({ caret :0 , value :'' }, 1200 ); 58expect ( h . undo ({ caret :1 , value :'x' })). toEqual ({ caret :0 , value :'' }); 59}); 60 61it ( 'evicts the oldest entry past the limit' , () => { 62const h = new SourceHistory ( 2 , 800 ); 63 64h . push ({ caret :0 , value :'one' }, 1000 ); 65h . push ({ caret :0 , value :'two' }, 2000 ); 66h . push ({ caret :0 , value :'three' }, 3000 ); 67 68expect ( h . undo ({ caret :0 , value :'cur' })). toEqual ({ caret :0 , value :'three' }); 69expect ( h . undo ({ caret :0 , value :'three' })). toEqual ({ caret :0 , value :'two' }); 70expect ( h . undo ({ caret :0 , value :'two' })). toBeNull (); 71}); 72});