/*
 * Copyright 2024 Signal Messenger, LLC
 * SPDX-License-Identifier: AGPL-3.0-only
 */

package org.signal.core.util

import okio.utf8Size
import org.junit.Assert.assertTrue
import org.junit.Test

class StringExtensionsTest {

  @Test
  fun `splitByByteLength - fuzzing`() {
    val characterSet = "日月木山川田水火金土空海花風雨雪星森犬猫鳥魚虫人子女男友学校車電話本書時分先生愛夢楽音話語映画新古長短高低東西南北春夏秋冬雨雲星夜朝昼電気手足目耳口心頭体家国町村道橋山川本店仕事時間会話思考知識感情自動車飛行機船馬牛羊豚鶏鳥猫犬虎龍"

    for (stringSize in 2100..2500) {
      for (byteLimit in 2000..2500) {
        val builder = StringBuilder()
        repeat(stringSize) {
          builder.append(characterSet.random())
        }
        val (trimmed, _) = builder.toString().splitByByteLength(byteLimit)
        assertTrue(trimmed.utf8Size() <= byteLimit)
      }
    }
  }

  @Test
  fun `splitByByteLength - long string`() {
    val myString = """
      すべての人間は生まれながらにして自由であり、尊厳と権利において平等である。彼らは理性と良心を授けられており、互いに兄弟愛の精神をもって行動しなければならない。

      一方、現代社会において、技術の進歩は人々の生活を大きく変えつつある。情報の流通は瞬時に行われ、距離や時間の壁を越えて人々がつながる世界が現実となっている。しかし、これに伴い新たな課題も生じており、個人のプライバシーや倫理の問題が議論の中心となっている。

      経済の発展と共に、都市化が進む一方で、自然環境の破壊も深刻な問題となっている。持続可能な社会を目指すためには、私たち一人ひとりが責任を持ち、資源を大切にする意識を持つことが重要である。

      文化や伝統は社会の根底を支えるものであり、時代が変わってもその価値は変わらない。古くから伝わる知恵や習慣は、現代においても新たな意味を持ち続けるだろう。
      すべての人間は生まれながらにして自由であり、尊厳と権利において平等である。彼らは理性と良心を授けられており、互いに兄弟愛の精神をもって行動しなければならない。

      一方、現代社会において、技術の進歩は人々の生活を大きく変えつつある。情報の流通は瞬時に行われ、距離や時間の壁を越えて人々がつながる世界が現実となっている。しかし、これに伴い新たな課題も生じており、個人のプライバシーや倫理の問題が議論の中心となっている。

      経済の発展と共に、都市化が進む一方で、自然環境の破壊も深刻な問題となっている。持続可能な社会を目指すためには、私たち一人ひとりが責任を持ち、資源を大切にする意識を持つことが重要である。

      文化や伝統は社会の根底を支えるものであり、時代が変わってもその価値は変わらない。古くから伝わる知恵や習慣は、現代においても新たな意味を持ち続けるだろう。
      すべての人間は生まれながらにして自由であり、尊厳と権利において平等である。彼らは理性と良心を授けられており、互いに兄弟愛の精神をもって行動しなければならない。

      一方、現代社会において、技術の進歩は人々の生活を大きく変えつつある。情報の流通は瞬時に行われ、距離や時間の壁を越えて人々がつながる世界が現実となっている。しかし、これに伴い新たな課題も生じており、個人のプライバシーや倫理の問題が議論の中心となっている。

      経済の発展と共に、都市化が進む一方で、自然環境の破壊も深刻な問題となっている。持続可能な社会を目指すためには、私たち一人ひとりが責任を持ち、資源を大切にする意識を持つことが重要である。

      文化や伝統は社会の根底を支えるものであり、時代が変わってもその価値は変わらない。古くから伝わる知恵や習慣は、現代においても新たな意味を持ち続けるだろう。
      すべての人間は生まれながらにして自由であり、尊厳と権利において平等である。彼らは理性と良心を授けられており、互いに兄弟愛の精神をもって行動しなければならない。

      一方、現代社会において、技術の進歩は人々の生活を大きく変えつつある。情報の流通は瞬時に行われ、距離や時間の壁を越えて人々がつながる世界が現実となっている。しかし、これに伴い新たな課題も生じており、個人のプライバシーや倫理の問題が議論の中心となっている。

      経済の発展と共に、都市化が進む一方で、自然環境の破壊も深刻な問題となっている。持続可能な社会を目指すためには、私たち一人ひとりが責任を持ち、資源を大切にする意識を持つことが重要である。

      文化や伝統は社会の根底を支えるものであり、時代が変わってもその価値は変わらない。古くから伝わる知恵や習慣は、現代においても新たな意味を持ち続けるだろう。
      すべての人間は生まれながらにして自由であり、尊厳と権利において平等である。彼らは理性と良心を授けられており、互いに兄弟愛の精神をもって行動しなければならない。

      一方、現代社会において、技術の進歩は人々の生活を大きく変えつつある。情報の流通は瞬時に行われ、距離や時間の壁を越えて人々がつながる世界が現実となっている。しかし、これに伴い新たな課題も生じており、個人のプライバシーや倫理の問題が議論の中心となっている。

      経済の発展と共に、都市化が進む一方で、自然環境の破壊も深刻な問題となっている。持続可能な社会を目指すためには、私たち一人ひとりが責任を持ち、資源を大切にする意識を持つことが重要である。

      文化や伝統は社会の根底を支えるものであり、時代が変わってもその価値は変わらない。古くから伝わる知恵や習慣は、現代においても新たな意味を持ち続けるだろう。
      すべての人間は生まれながらにして自由であり、尊厳と権利において平等である。彼らは理性と良心を授けられており、互いに兄弟愛の精神をもって行動しなければならない。

      一方、現代社会において、技術の進歩は人々の生活を大きく変えつつある。情報の流通は瞬時に行われ、距離や時間の壁を越えて人々がつながる世界が現実となっている。しかし、これに伴い新たな課題も生じており、個人のプライバシーや倫理の問題が議論の中心となっている。

      経済の発展と共に、都市化が進む一方で、自然環境の破壊も深刻な問題となっている。持続可能な社会を目指すためには、私たち一人ひとりが責任を持ち、資源を大切にする意識を持つことが重要である。

      文化や伝統は社会の根底を支えるものであり、時代が変わってもその価値は変わらない。古くから伝わる知恵や習慣は、現代においても新たな意味を持ち続けるだろう。
    """.trimIndent()

    val (trimmed, _) = myString.splitByByteLength(2048)
    assertTrue(trimmed.utf8Size() <= 2048)
  }
}
