patch 9.0.0908: with 'smoothscroll' cursor may end up in wrong position

Problem:    With 'smoothscroll' cursor may end up in wrong position.
Solution:   Correct the computation of screen lines. (Yee Cheng Chin,
            closes #11502)
diff --git a/src/testdir/test_scroll_opt.vim b/src/testdir/test_scroll_opt.vim
index 3975a1f..d40c650 100644
--- a/src/testdir/test_scroll_opt.vim
+++ b/src/testdir/test_scroll_opt.vim
@@ -246,7 +246,7 @@
 
   let lines =<< trim END
       vim9script
-      setline(1, ['one', 'two', 'Line' .. (' with lots of text'->repeat(30))])
+      setline(1, ['one', 'two', 'Line' .. (' with lots of text'->repeat(30)) .. ' end', 'four'])
       set smoothscroll scrolloff=0
       normal 3G10|zt
   END
@@ -287,6 +287,30 @@
   call term_sendkeys(buf, "gj")
   call term_sendkeys(buf, "\<C-Y>")
   call VerifyScreenDump(buf, 'Test_smooth_long_9', {})
+
+  " 'scrolloff' set to 0, move cursor down one line.
+  " Cursor should move properly, and since this is a really long line, it will
+  " be put on top of the screen.
+  call term_sendkeys(buf, ":set scrolloff=0\<CR>")
+  call term_sendkeys(buf, "0j")
+  call VerifyScreenDump(buf, 'Test_smooth_long_10', {})
+
+  " Repeat the step and move the cursor down again.
+  " This time, use a shorter long line that is barely long enough to span more
+  " than one window. Note that the cursor is at the bottom this time because
+  " Vim prefers to do so if we are scrolling a few lines only.
+  call term_sendkeys(buf, ":call setline(1, ['one', 'two', 'Line' .. (' with lots of text'->repeat(10)) .. ' end', 'four'])\<CR>")
+  call term_sendkeys(buf, "3Gzt")
+  call term_sendkeys(buf, "j")
+  call VerifyScreenDump(buf, 'Test_smooth_long_11', {})
+
+  " Repeat the step but this time start it when the line is smooth-scrolled by
+  " one line. This tests that the offset calculation is still correct and
+  " still end up scrolling down to the next line with cursor at bottom of
+  " screen.
+  call term_sendkeys(buf, "3Gzt")
+  call term_sendkeys(buf, "\<C-E>j")
+  call VerifyScreenDump(buf, 'Test_smooth_long_12', {})
   
   call StopVimInTerminal(buf)
 endfunc