# -*- coding: utf-8 -*-

require 'japanize/core'

要求 'fiber'
要求 'japanize/test_unit'
要求 'japanize/thread'

部(日本語化) {
  部(:試験) {
    組(:ファイバーの操作の試験, 原型: 試験単位::試験事例) {
      資料('委ねる' => [ :委ねる, :yield ])
      試験('特異操作の日本語の別名を確認') {|資料|
        日本語の別名, 元の名前 = 資料
        別名であることを確認(ファイバー, 日本語の別名, 元の名前)
        含まれることを確認(ファイバー.公開された操作の一覧, 日本語の別名)
      }

      資料('例外を発生' => [ :例外を発生, :raise ]) if (ファイバー.公開された操作は定義済みか? :raise, 偽値)
      資料('続ける'     => [ :続ける,     :resume ])
      試験('公開された操作の日本語の別名を確認') {|資料|
        日本語の別名, 元の名前 = 資料
        別名であることを確認(ファイバー.新規{}, 日本語の別名, 元の名前)
        含まれることを確認(ファイバー.生成物が持つ公開された操作の一覧, 日本語の別名)
      }

      試験('実行中を確認') {
        あるファイバー = ファイバー.新規{ ファイバー.実行中 }
        同一であることを確認(あるファイバー, あるファイバー.続ける)
      }

      試験('存続しているかどうかを確認') {
        あるファイバー = ファイバー.新規{
          ファイバー.委ねる
          :終了
        }

        真値であることを確認(あるファイバー.存続しているか?)

        あるファイバー.続ける
        真値であることを確認(あるファイバー.存続しているか?)

        あるファイバー.続ける
        偽値であることを確認(あるファイバー.存続しているか?)
      }

      試験('切り替えることを確認') {
        ファイバー1 = ファイバー.新規{
          :甲
        }
        ファイバー2 = ファイバー.新規{
          ファイバー1.切り替える
          :乙
        }
        ファイバー3 = ファイバー.新規{
          ファイバー2.続ける
          :丙
        }
        等しいことを確認(:甲, ファイバー3.続ける)
      }
    }

    組(:スレッドの操作の試験, 原型: 試験単位::試験事例) {
      資料('例外が発生したら中断'        => [ :例外が発生したら中断,        :abort_on_exception ],
           '例外が発生したら中断='       => [ :例外が発生したら中断=,       :abort_on_exception= ],
           '実行中'                      => [ :実行中,                      :current ],
           '排他'                        => [ :排他,                        :exclusive ],
           '終了'                        => [ :終了,                        :exit ],
           '開始'                        => [ :開始,                        :start ],
           '分岐'                        => [ :分岐,                        :fork ],
           '割り込みを制御する'          => [ :割り込みを制御する,          :handle_interrupt ],
           '終了させる'                  => [ :終了させる,                  :kill ],
           '一覧'                        => [ :一覧,                        :list ],
           '本線'                        => [ :本線,                        :main ],
           '譲る'                        => [ :譲る,                        :pass ],
           '割り込みが猶予されているか?' => [ :割り込みが猶予されているか?, :pending_interrupt? ],
           '例外が発生したら報告'        => [ :例外が発生したら報告,        :report_on_exception ],
           '例外が発生したら報告='       => [ :例外が発生したら報告=,       :report_on_exception= ],
           '停止'                        => [ :停止,                        :stop ])
      試験('特異操作の日本語の別名を確認') {|資料|
        日本語の別名, 元の名前 = 資料
        別名であることを確認(スレッド, 日本語の別名, 元の名前)
        含まれることを確認(スレッド.公開された操作の一覧, 日本語の別名)
      }

      資料('例外が発生したら中断'        => [ :例外が発生したら中断,        :abort_on_exception ],
           '例外が発生したら中断='       => [ :例外が発生したら中断=,       :abort_on_exception= ],
           '追跡関数を追加'              => [ :追跡関数を追加,              :add_trace_func ],
           '存続しているか?'             => [ :存続しているか?,             :alive? ],
           '呼び出し履歴'                => [ :呼び出し履歴,                :backtrace ],
           '呼び出し履歴の場所の一覧'    => [ :呼び出し履歴の場所の一覧,    :backtrace_locations ],
           '終了'                        => [ :終了,                        :exit ],
           '終了させる'                  => [ :終了させる,                  :kill ],
           '取得'                        => [ :取得,                        :fetch ],
           '所属する群れ'                => [ :所属する群れ,                :group ],
           '合流'                        => [ :合流,                        :join ],
           'キーか?'                     => [ :キーか?,                     :key? ],
           'キーの一覧'                  => [ :キーの一覧,                  :keys ],
           '名前'                        => [ :名前,                        :name ],
           '名前='                       => [ :名前=,                       :name= ],
           '割り込みが猶予されているか?' => [ :割り込みが猶予されているか?, :pending_interrupt? ],
           '優先度'                      => [ :優先度,                      :priority ],
           '例外を発生'                  => [ :例外を発生,                  :raise ],
           '例外が発生したら報告'        => [ :例外が発生したら報告,        :report_on_exception ],
           '例外が発生したら報告='       => [ :例外が発生したら報告=,       :report_on_exception= ],
           '再開'                        => [ :再開,                        :run ],
           '安全度'                      => [ :安全度,                      :safe_level ],
           '追跡関数を設定'              => [ :追跡関数を設定,              :set_trace_func ],
           '状態'                        => [ :状態,                        :status ],
           '停止しているか?'             => [ :停止しているか?,             :stop? ],
           'スレッド変数は存在するか?'   => [ :スレッド変数は存在するか?,   :thread_variable? ],
           'スレッド変数を取得'          => [ :スレッド変数を取得,          :thread_variable_get ],
           'スレッド変数を設定'          => [ :スレッド変数を設定,          :thread_variable_set ],
           'スレッド変数の一覧'          => [ :スレッド変数の一覧,          :thread_variables ],
           '結果'                        => [ :結果,                        :value ],
           '休止を解除'                  => [ :休止を解除,                  :wakeup ])
      試験('公開された操作の日本語の別名を確認') {|資料|
        日本語の別名, 元の名前 = 資料
        別名であることを確認(スレッド.新規{}, 日本語の別名, 元の名前)
        含まれることを確認(スレッド.生成物が持つ公開された操作の一覧, 日本語の別名)
      }
    }

    組(:スレッド_呼び出し履歴_場所の操作の試験, 原型: 試験単位::試験事例) {
      資料('ファイルへの絶対的な経路' => [ :ファイルへの絶対的な経路, :absolute_path ],
           '素の名前'                 => [ :素の名前,                 :base_label ],
           '表札'                     => [ :表札,                     :label ],
           '行番号'                   => [ :行番号,                   :lineno ],
           'ファイルへの経路'         => [ :ファイルへの経路,         :path ])
      試験('公開された操作の日本語の別名を確認') {|資料|
        日本語の別名, 元の名前 = 資料
        ある場所 = 呼び出し元の場所の一覧(1, 1)[0]
        生成物であることを確認(スレッド::呼び出し履歴::場所, ある場所)
        別名であることを確認(ある場所, 日本語の別名, 元の名前)
        含まれることを確認(スレッド::呼び出し履歴::場所.生成物が持つ公開された操作の一覧, 日本語の別名)
      }
    }

    組(:スレッド_相互排他制御の操作の試験, 原型: 試験単位::試験事例) {
      資料('獲得'              => [ :獲得,              :lock ],
           '獲得されているか?' => [ :獲得されているか?, :locked? ],
           '所有しているか?'   => [ :所有しているか?,   :owned? ],
           '休止'              => [ :休止,              :sleep ],
           '同期させる'        => [ :同期させる,        :synchronize ],
           '可能なら獲得'      => [ :可能なら獲得,      :try_lock ],
           '解放'              => [ :解放,              :unlock ])
      試験('公開された操作の日本語の別名を確認') {|資料|
        日本語の別名, 元の名前 = 資料
        別名であることを確認(スレッド::相互排他制御.新規, 日本語の別名, 元の名前)
        含まれることを確認(スレッド::相互排他制御.生成物が持つ公開された操作の一覧, 日本語の別名)
      }
    }

    組(:スレッド_条件変数の操作の試験, 原型: 試験単位::試験事例) {
      資料('全員に通知' => [ :全員に通知, :broadcast ],
           '通知'       => [ :通知,       :signal ],
           '待機'       => [ :待機,       :wait ])
      試験('公開された操作の日本語の別名を確認') {|資料|
        日本語の別名, 元の名前 = 資料
        別名であることを確認(スレッド::条件変数.新規, 日本語の別名, 元の名前)
        含まれることを確認(スレッド::条件変数.生成物が持つ公開された操作の一覧, 日本語の別名)
      }
    }

    組(:スレッド_待ち行列の操作の試験, 原型: 試験単位::試験事例) {
      資料('付け足す'         => [ :付け足す,         :push ],
           '消去する'         => [ :消去する,         :clear ],
           '閉じる'           => [ :閉じる,           :close ],
           '閉じたか?'        => [ :閉じたか?,        :closed? ],
           '取り出す'         => [ :取り出す,         :pop ],
           '先頭から取り出す' => [ :先頭から取り出す, :shift ],
           '空か?'            => [ :空か?,            :empty? ],
           '長さ'             => [ :長さ,             :length ],
           '大きさ'           => [ :大きさ,           :size ],
           '待機スレッド数'   => [ :待機スレッド数,   :num_waiting ])
      試験('公開された操作の日本語の別名を確認') {|資料|
        日本語の別名, 元の名前 = 資料
        別名であることを確認(スレッド::待ち行列.新規, 日本語の別名, 元の名前)
        含まれることを確認(スレッド::待ち行列.生成物が持つ公開された操作の一覧, 日本語の別名)
      }
    }

    組(:スレッド_上限付き待ち行列の操作の試験, 原型: 試験単位::試験事例) {
      資料('付け足す'         => [ :付け足す,         :push ],
           '消去する'         => [ :消去する,         :clear ],
           '閉じる'           => [ :閉じる,           :close ],
           '閉じたか?'        => [ :閉じたか?,        :closed? ],
           '取り出す'         => [ :取り出す,         :pop ],
           '先頭から取り出す' => [ :先頭から取り出す, :shift ],
           '空か?'            => [ :空か?,            :empty? ],
           '長さ'             => [ :長さ,             :length ],
           '大きさ'           => [ :大きさ,           :size ],
           '待機スレッド数'   => [ :待機スレッド数,   :num_waiting ])
      試験('公開された操作の日本語の別名を確認') {|資料|
        日本語の別名, 元の名前 = 資料
        別名であることを確認(スレッド::上限付き待ち行列.新規(4), 日本語の別名, 元の名前)
        含まれることを確認(スレッド::上限付き待ち行列.生成物が持つ公開された操作の一覧, 日本語の別名)
      }
    }

    組(:スレッドの群れの操作の試験, 原型: 試験単位::試験事例) {
      資料('追加'            => [ :追加,            :add ],
           '締め切る'        => [ :締め切る,        :enclose ],
           '締め切られたか?' => [ :締め切られたか?, :enclosed? ],
           '一覧'            => [ :一覧,            :list ])
      試験('公開された操作の日本語の別名を確認') {|資料|
        日本語の別名, 元の名前 = 資料
        別名であることを確認(スレッドの群れ.新規, 日本語の別名, 元の名前)
        含まれることを確認(スレッドの群れ.生成物が持つ公開された操作の一覧, 日本語の別名)
      }

      資料('既定の群れ' => [ スレッドの群れ::既定の群れ, ThreadGroup::Default ])
      試験('日本語の定数を確認') {|資料|
        日本語の定数の値, 元の定数の値 = 資料
        同一であることを確認(元の定数の値, 日本語の定数の値)
      }
    }
  }
}

# Local Variables:
# mode: Ruby
# indent-tabs-mode: nil
# End:
