class TC_DataStream

Attributes

expected_data[R]
logfile[R]
stream[R]

Public Instance Methods

create_fixture() click to toggle source
# File test/test_data_stream.rb, line 8
def create_fixture
    logfile = Pocolog::Logfiles.create('test')
    all_values = logfile.create_stream('all', 'int', 'test' => 'value', 'test2' => 'value2')
    @expected_data = Array.new
    100.times do |i|
        all_values.write(Time.at(i), Time.at(i * 100), i)
        expected_data << i
    end

    # Add a followup stream that fills in the file. It is used for a corner
    # case in #test_past_the_end_does_not_read_whole_file
    other_stream = logfile.create_stream('other', 'int')
    100.times do |i|
        other_stream.write(Time.at(i), Time.at(i * 100), i)
    end
    logfile.close
end
setup() click to toggle source
# File test/test_data_stream.rb, line 26
def setup
    create_fixture
    @file_size = File.stat('test.0.log').size
    @logfile = Pocolog::Logfiles.open('test.0.log')
    @stream  = logfile.stream('all')
end
teardown() click to toggle source
# File test/test_data_stream.rb, line 33
def teardown
    FileUtils.rm_f 'test.0.log'
    FileUtils.rm_f 'test.0.idx'
end
test_copy_to() click to toggle source
# File test/test_data_stream.rb, line 185
def test_copy_to
    output = Pocolog::Logfiles.new(Typelib::Registry.new)
    output.new_file("copy_test.log")
    stream_output1 = output.stream("test1",stream.type,true)
    stream_output2 = output.stream("test2",stream.type,true)
    stream_output3 = output.stream("test3",stream.type,true)

    #copy samples according to the given intervals
    stream.copy_to(0,120,stream_output1)
    stream.copy_to(20,30,stream_output2)
    stream.copy_to(Time.at(10*100),Time.at(30*100),stream_output3)
    output.close

    logfile = Pocolog::Logfiles.open('copy_test.log')
    assert_equal(3,logfile.streams.size)
    assert_equal(100,logfile.stream("test1").size)
    assert_equal(10,logfile.stream("test2").size)
    assert_equal(20,logfile.stream("test3").size)
    
    test3_stream = logfile.stream("test3")
    while(data = test3_stream.next)
        assert_equal expected_data[test3_stream.sample_index+10], data[2]
    end
    logfile.close
    FileUtils.rm_f "copy_test.log"
    FileUtils.rm_f "copy_test.idx"
end
test_each_block() click to toggle source
# File test/test_data_stream.rb, line 163
def test_each_block
    data = []
    stream.each_block do
        data << [stream.sample_index, stream.data]
    end

    assert_equal (0...expected_data.size).to_a, data.map(&:first)
    assert_equal expected_data, data.map(&:last)
end
test_first() click to toggle source
# File test/test_data_stream.rb, line 139
def test_first
    stream.seek(10)
    assert_equal 0, stream.first[2]
    assert_equal 1, stream.next[2]
    assert_equal 0, stream.previous[2]

    stream.seek(10)
    assert_equal 0, stream.first[2]
    assert_equal nil, stream.previous
    assert_equal 0, stream.next[2]
end
test_get_data_using_data_header() click to toggle source
# File test/test_data_stream.rb, line 130
def test_get_data_using_data_header
    stream.seek(10)
    header = stream.data_header.dup
    stream.seek(20)
    assert_equal 10, stream.data(header)
    # Using #data(header) should not have moved the stream position
    assert_equal 21, stream.next[2]
end
test_last() click to toggle source
# File test/test_data_stream.rb, line 151
def test_last
    stream.seek(10)
    assert_equal 99, stream.last[2]
    assert_equal 98, stream.previous[2]
    assert_equal 99, stream.next[2]

    stream.seek(10)
    assert_equal 99, stream.last[2]
    assert_equal nil, stream.next
    assert_equal 99, stream.previous[2]
end
test_metadata() click to toggle source
# File test/test_data_stream.rb, line 38
def test_metadata
    assert_equal({'test' => "value", "test2" => "value2"}, stream.metadata)
end
test_properties() click to toggle source
# File test/test_data_stream.rb, line 42
def test_properties
    assert !stream.eof?
    assert_equal 100, stream.size
end
test_rewind_previous() click to toggle source
# File test/test_data_stream.rb, line 77
def test_rewind_previous
    stream.seek(10)
    stream.rewind
    assert !stream.previous
    assert_equal 0, stream.next[2]
end
test_samples?() click to toggle source
# File test/test_data_stream.rb, line 173
def test_samples?
    assert_equal(true,stream.samples?(0,100))
    assert_equal(false,stream.samples?(-10,-1))
    assert_equal(true,stream.samples?(-10,0))
    assert_equal(true,stream.samples?(10,90))
    assert_equal(true,stream.samples?(99,120))
    assert_equal(true,stream.samples?(Time.at(0),Time.at(99*100)))
    assert_equal(true,stream.samples?(Time.at(0),Time.at(200*100)))
    assert_equal(true,stream.samples?(Time.at(99*100),Time.at(200*100)))
    assert_equal(false,stream.samples?(Time.at(100*100),Time.at(200*100)))
end
test_seek_index() click to toggle source
# File test/test_data_stream.rb, line 84
def test_seek_index
    _, _, value = stream.seek(10)
    assert_equal 10, value
    assert_equal 10, stream.sample_index
    _, _, value = stream.next
    assert_equal 11, value
    assert_equal 11, stream.sample_index
    _, _, value = stream.previous
    assert_equal 10, value
    assert_equal 10, stream.sample_index

    _, _, value = stream.seek(20)
    assert_equal 20, value
    assert_equal 20, stream.sample_index
    _, _, value = stream.previous
    assert_equal 19, value
    assert_equal 19, stream.sample_index
    _, _, value = stream.next
    assert_equal 20, value
    assert_equal 20, stream.sample_index
end
test_seek_time() click to toggle source
# File test/test_data_stream.rb, line 106
def test_seek_time
    [0, 1].each do |offset|
        _, _, value = stream.seek(Time.at(1000, offset))
        assert_equal 10 + offset, value
        assert_equal 10 + offset, stream.sample_index
        _, _, value = stream.next
        assert_equal 11 + offset, value
        assert_equal 11 + offset, stream.sample_index
        _, _, value = stream.previous
        assert_equal 10 + offset, value
        assert_equal 10 + offset, stream.sample_index

        _, _, value = stream.seek(Time.at(2000, offset))
        assert_equal 20 + offset, value
        assert_equal 20 + offset, stream.sample_index
        _, _, value = stream.previous
        assert_equal 19 + offset, value
        assert_equal 19 + offset, stream.sample_index
        _, _, value = stream.next
        assert_equal 20 + offset, value
        assert_equal 20 + offset, stream.sample_index
    end
end
test_step_by_step_all_the_way() click to toggle source
# File test/test_data_stream.rb, line 47
def test_step_by_step_all_the_way
    2.times do
        stream_data  = Array.new
        sample_index = Array.new
        while (data = stream.next) && (stream_data.size <= expected_data.size * 2)
            stream_data  << data[2]
            sample_index << stream.sample_index
        end
        # verify that calling #step again is harmless
        assert_equal 100, stream.sample_index
        assert_equal 100, stream.size
        assert !stream.next
        assert stream.eof?
        assert_equal expected_data, stream_data
        assert_equal expected_data, sample_index

        # Now go back
        stream_data = Array.new
        sample_index = Array.new
        while (data = stream.previous) && (stream_data.size <= expected_data.size * 2)
            stream_data << data[2]
            sample_index << stream.sample_index
        end
        # verify that calling #step again is harmless
        assert !stream.previous
        assert_equal expected_data, stream_data.reverse
        assert_equal expected_data, sample_index.reverse
    end
end