Sha256: 4784f6585558e4ef6b1e88718652e11e025e50ff62561e49fe0f268ab5cd6214

Contents?: true

Size: 1.61 KB

Versions: 3

Compression:

Stored size: 1.61 KB

Contents

require 'pry'
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')

describe SPCore::Gain do
  before :all do
    @conversions = [
      { :linear => Math::sqrt(2.0), :db => 3.01 },
      { :linear => 2.0, :db => 6.02 },
      { :linear => 4.0, :db => 12.04 },
    ]
  end
  
  describe '.db_to_linear' do
    it 'should convert decibel (logarithmic) unit to linear' do
      @conversions.each do |conversion|
        SPCore::Gain::db_to_linear(conversion[:db]).should be_within(0.01).of(conversion[:linear])
      end
    end

    it 'should prove to be the inverse of .db_to_linear' do
      20.times do
        x = SPCore::Interpolation.linear(0.0, -SPCore::Gain::MAX_DB_ABS, 1.0, SPCore::Gain::MAX_DB_ABS, rand)
        y = SPCore::Gain::db_to_linear(x)
        z = SPCore::Gain::linear_to_db(y)
        ((z - x).abs / x).should be_within(1e-5).of(0.0)
      end
    end
  end
  
  describe '.linear_to_db' do
    it 'should convert linear unit to decibel (logarithmic)' do
      @conversions.each do |conversion|
        SPCore::Gain::linear_to_db(conversion[:linear]).should be_within(0.01).of(conversion[:db])
      end
    end

    it 'should prove to be the inverse of .db_to_linear' do
      20.times do
        max_gain_linear = SPCore::Gain::db_to_linear(SPCore::Gain::MAX_DB_ABS)
        min_gain_linear = SPCore::Gain::db_to_linear(-SPCore::Gain::MAX_DB_ABS)
        x = SPCore::Interpolation.linear(0.0, min_gain_linear, 1.0, max_gain_linear, rand)
        y = SPCore::Gain::linear_to_db(x)
        z = SPCore::Gain::db_to_linear(y)
        ((z - x).abs / x).should be_within(1e-5).of(0.0)
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
spcore-0.1.2 spec/lib/gain_spec.rb
spcore-0.1.1 spec/lib/gain_spec.rb
spcore-0.1.0 spec/lib/gain_spec.rb