mirror of
https://github.com/ggerganov/whisper.cpp.git
synced 2025-01-01 18:26:40 +00:00
fc49ee4479
* Add Params#new_segment_callback= method * Add tests for Params#new_segment_callback= * Group tests for #transcribe * Don't use static for thread-safety * Set new_segment_callback only when necessary * Remove redundant check * [skip ci] Add Ruby version README * Revert "Group tests for #transcribe" This reverts commit71b65b00cc
. * Revert "Add tests for Params#new_segment_callback=" This reverts commit81e6df3bab
. * Add test for Context#full_n_segments * Add Context#full_n_segments * Add tests for lang API * Add lang API * Add tests for Context#full_lang_id API * Add Context#full_lang_id * Add abnormal test cases for lang * Raise appropriate errors from lang APIs * Add tests for Context#full_get_segment_t{0,1} API * Add Context#full_get_segment_t{0,1} * Add tests for Context#full_get_segment_speaker_turn_next API * Add Context#full_get_segment_speaker_turn_next * Add tests for Context#full_get_segment_text * Add Context#full_get_setgment_text * Add tests for Params#new_segment_callback= * Run new segment callback * Split tests to multiple files * Use container struct for new segment callback * Add tests for Params#new_segment_callback_user_data= * Add Whisper::Params#new_user_callback_user_data= * Add GC-related test for new segment callback * Protect new segment callback related structs from GC * Add meaningful test for build * Rename: new_segment_callback_user_data -> new_segment_callback_container * Add tests for Whisper::Segment * Add Whisper::Segment and Whisper::Context#each_segment * Extract c_ruby_whisper_callback_container_allocate() * Add test for Whisper::Params#on_new_segment * Add Whisper::Params#on_new_egment * Assign symbol IDs to variables * Make extsources.yaml simpler * Update README * Add document comments * Add test for calling Whisper::Params#on_new_segment multiple times * Add file dependencies to GitHub actions config and .gitignore * Add more files to ext/.gitignore
88 lines
2.2 KiB
Ruby
88 lines
2.2 KiB
Ruby
require "test/unit"
|
|
require "whisper"
|
|
|
|
class TestSegment < Test::Unit::TestCase
|
|
TOPDIR = File.expand_path(File.join(File.dirname(__FILE__), '..'))
|
|
|
|
class << self
|
|
attr_reader :whisper
|
|
|
|
def startup
|
|
@whisper = Whisper::Context.new(File.join(TOPDIR, '..', '..', 'models', 'ggml-base.en.bin'))
|
|
params = Whisper::Params.new
|
|
params.print_timestamps = false
|
|
jfk = File.join(TOPDIR, '..', '..', 'samples', 'jfk.wav')
|
|
@whisper.transcribe(jfk, params)
|
|
end
|
|
end
|
|
|
|
def test_iteration
|
|
whisper.each_segment do |segment|
|
|
assert_instance_of Whisper::Segment, segment
|
|
end
|
|
end
|
|
|
|
def test_enumerator
|
|
enum = whisper.each_segment
|
|
assert_instance_of Enumerator, enum
|
|
enum.to_a.each_with_index do |segment, index|
|
|
assert_instance_of Whisper::Segment, segment
|
|
assert_kind_of Integer, index
|
|
end
|
|
end
|
|
|
|
def test_start_time
|
|
i = 0
|
|
whisper.each_segment do |segment|
|
|
assert_equal 0, segment.start_time if i == 0
|
|
i += 1
|
|
end
|
|
end
|
|
|
|
def test_end_time
|
|
i = 0
|
|
whisper.each_segment do |segment|
|
|
assert_equal whisper.full_get_segment_t1(i) * 10, segment.end_time
|
|
i += 1
|
|
end
|
|
end
|
|
|
|
def test_on_new_segment
|
|
params = Whisper::Params.new
|
|
seg = nil
|
|
index = 0
|
|
params.on_new_segment do |segment|
|
|
assert_instance_of Whisper::Segment, segment
|
|
if index == 0
|
|
seg = segment
|
|
assert_equal 0, segment.start_time
|
|
assert_match /ask not what your country can do for you, ask what you can do for your country/, segment.text
|
|
end
|
|
index += 1
|
|
end
|
|
whisper.transcribe(File.join(TOPDIR, '..', '..', 'samples', 'jfk.wav'), params)
|
|
assert_equal 0, seg.start_time
|
|
assert_match /ask not what your country can do for you, ask what you can do for your country/, seg.text
|
|
end
|
|
|
|
def test_on_new_segment_twice
|
|
params = Whisper::Params.new
|
|
seg = nil
|
|
params.on_new_segment do |segment|
|
|
seg = segment
|
|
return
|
|
end
|
|
params.on_new_segment do |segment|
|
|
assert_same seg, segment
|
|
return
|
|
end
|
|
whisper.transcribe(File.join(TOPDIR, '..', '..', 'samples', 'jfk.wav'), params)
|
|
end
|
|
|
|
private
|
|
|
|
def whisper
|
|
self.class.whisper
|
|
end
|
|
end
|