stuncloud / UWSCR

UWSC互換スクリプト実行ツール
MIT License
50 stars 5 forks source link

BetweenStrで該当無しの場合、Emptyではなく「""」が戻って来る。 #180

Closed DIYJii closed 2 months ago

DIYJii commented 4 months ago

概要

表題の通り

再現スクリプト

hoge = BetweenStr("aaa:bbb",":","<<")
Print  hoge= Empty ?  "Empty":""         //
Print  hoge= ""    ?  "Blank":""        // Blank

fuga  = BetweenStr("aaa:bbb",,"<<")
Print  fuga= Empty ?  "Empty":""         //
Print  fuga= ""    ?  "Blank":""         // Blank

再現手順

No response

バージョン

1.0.1

不具合発生環境

Windows 10

stuncloud commented 4 months ago

Option<String>Objectの変換処理に問題があった

- Ok(between.unwrap_or_default().into())
+ Ok(between.map(|s|Object::String(s)).unwrap_or_default())
stuncloud commented 4 months ago

上記対応後

betweenstr("abc", "a", "bc")

とした際に""ではなくEMPTYが返ってしまう

stuncloud commented 4 months ago
// 前文字のみ、後ろ文字のみはOK
assert_equal( betweenstr("abc", "abc") , "")
assert_equal( betweenstr("abc",, "abc") , "")

assert_equal( betweenstr("abc", "a", "bc") , "") // エラー
stuncloud commented 4 months ago

テスト用スクリプト

dim cnt

patterns = [
    ["abcabc", "a", "bc"],
    ["aaaa", "a", "a"]
]

for p in patterns
    for flg in [FALSE, TRUE]
        for nth in [1,2,-1,-2]
            ret = betweenstr(p[0], p[1], p[2], nth, flg)
            if ret != "" then
                cnt += 1
                print "failed on pattern: <#p>, nth: <#nth>, flg: <#flg>"
                print ret
                print type_of(ret)
            endif
        next
    next
next

print

if cnt then
    print "test failed"
else
    print "test succeed"
endif
stuncloud commented 4 months ago

find_all_between の場合は一部正常であるなどfind_nth_betweenとの結果に差があるという問題も発覚 よって、以下の方針で修正

  1. find_nth_betweenfind_all_betweenの結果からnthに該当する文字列を返す
  2. find_all_betweenの実装を修正
  3. find_all_between_backwardを新設、逆順の場合にfind_all_betweenから呼ぶ
  4. テスト(test_betweenstr)に上記テスト用スクリプトと同内容のものを追加
  5. 該当なしの結果を""としていたテストをEMPTYに修正
DIYJii commented 4 months ago

ウワー、大変そう! 変な物見つけてしまってゴメン。 でも、私的には、文章を扱うアプリでBetweenStrを多用しているので、 事前に他の問題も見つけて貰う切っ掛けになれて良かったです。

On Tue, Jun 4, 2024 at 4:25 PM Joey Takahashi @.***> wrote:

find_all_between の場合は一部正常であるなどfind_nth_betweenとの結果に差があるという問題も発覚 よって、以下の方針で修正

  1. find_nth_betweenはfind_all_betweenの結果からnthに該当する文字列を返す
  2. find_all_betweenの実装を修正
  3. find_all_between_backwardを新設、逆順の場合にfind_all_betweenから呼ぶ
  4. テスト(test_betweenstr)に上記テスト用スクリプトと同内容のものを追加
  5. 該当なしの結果を""としていたテストをEMPTYに修正

— Reply to this email directly, view it on GitHub https://github.com/stuncloud/UWSCR/issues/180#issuecomment-2146800118, or unsubscribe https://github.com/notifications/unsubscribe-auth/BH6AXYQPZ5JWKNW6WNHL3NDZFVTXXAVCNFSM6AAAAABIXVGUWKVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZDCNBWHAYDAMJRHA . You are receiving this because you authored the thread.Message ID: @.***>

stuncloud commented 4 months ago

@DIYJii もう直せたので大丈夫です この修正によりコードがかなりスッキリして良かったです さすがにもうバグは出ない…と思いたいですねぇ… (betweenstrは既に何度もバグ修正が繰り返されているほどにバグが出やすい傾向がある)