test/disk.rb in driving_physics-0.0.2.1 vs test/disk.rb in driving_physics-0.0.3.1

- old
+ new

@@ -1,118 +1,80 @@ require 'minitest/autorun' require 'driving_physics/disk' +require 'matrix' -D = DrivingPhysics::Disk +include DrivingPhysics -describe D do +describe Disk do describe "Disk.volume" do it "calculates the volume (m^3) of disk given radius and width" do - cubic_m = D.volume(1.0, 1.0) + cubic_m = Disk.volume(1.0, 1.0) expect(cubic_m).must_equal Math::PI - cubic_m = D.volume(0.35, 0.2) + cubic_m = Disk.volume(0.35, 0.2) expect(cubic_m).must_be_within_epsilon 0.076969 end end describe "Disk.volume_l" do it "calculates the volume (L) of a disk given radius and width" do - liters = D.volume_l(1.0, 1.0) + liters = Disk.volume_l(1.0, 1.0) expect(liters).must_equal Math::PI * 1000 - liters = D.volume_l(0.35, 0.2) + liters = Disk.volume_l(0.35, 0.2) expect(liters).must_be_within_epsilon 76.96902 end end describe "Disk.density" do it "calculates the density (kg/L) given mass and volume" do - expect(D.density(25.0, 25.0)).must_equal 1.0 - expect(D.density(50.0, 25.0)).must_equal 2.0 + expect(Disk.density(25.0, 25.0)).must_equal 1.0 + expect(Disk.density(50.0, 25.0)).must_equal 2.0 end end describe "Disk.mass" do it "calculates the mass (kg) of a disk given radius, width, and density" do - skip - expect(D.mass(0.35, 0.2, D::DENSITY)).must_be_within_epsilon 25.015 + expect(Disk.mass(0.35, 0.2, Disk::DENSITY)).must_be_within_epsilon 76.969 end end describe "Disk.rotational_inertia" do it "calculates rotational inertia for a disk given radius and mass" do - expect(D.rotational_inertia(0.35, 25.0)).must_be_within_epsilon 1.53125 + expect(Disk.rotational_inertia(0.35, 25.0)).must_be_within_epsilon 1.53125 end end describe "Disk.alpha" do it "calculates angular acceleration from torque and inertia" do scalar_torque = 1000 - inertia = D.rotational_inertia(0.35, 25.0) - expect(D.alpha scalar_torque, inertia).must_be_within_epsilon 653.061 + inertia = Disk.rotational_inertia(0.35, 25.0) + expect(Disk.alpha scalar_torque, inertia).must_be_within_epsilon 653.061 - skip # Vector + skip unless DrivingPhysics.has_vector? vector_torque = Vector[0, 0, 1000] - vector_alpha = D.alpha vector_torque, inertia + vector_alpha = Disk.alpha vector_torque, inertia expect(vector_alpha).must_be_instance_of Vector expect(vector_alpha.size).must_equal 3 expect(vector_alpha[2]).must_be_within_epsilon 653.06 end end - describe "Disk.torque_vector" do - it "calculates a torque in the 3rd dimension given 2D force and radius" do - skip # Vector - force = Vector[1000, 0] - radius = Vector[0, 5] - torque = D.torque_vector(force, radius) - expect(torque).must_be_instance_of Vector - expect(torque.size).must_equal 3 - expect(torque[2]).must_be_within_epsilon 5000.0 - end - end - - describe "Disk.force_vector" do - it "calculates a (3D) force given 3D torque and 2D radius" do - skip # Vector - # let's invert the Disk.torque_vector case from above: - torque = Vector[0, 0, 5000] - radius = Vector[0, 5] - force = D.force_vector(torque, radius) - expect(force).must_be_instance_of Vector - expect(force.size).must_equal 3 - expect(force[0]).must_be_within_epsilon 1000.0 - - # now let's rotate the radius into the x-dimension - # right hand rule, positive torque means thumb into screen, clockwise - # negative-x radius means positive-y force - torque = Vector[0, 0, 500] - radius = Vector[-5, 0] - force = D.force_vector(torque, radius) - expect(force).must_be_instance_of Vector - expect(force.size).must_equal 3 - expect(force[1]).must_be_within_epsilon 100.0 - end - end - describe "instance methods" do before do @env = DrivingPhysics::Environment.new - @disk = D.new(@env) + @disk = Disk.new(@env) end it "initializes" do - skip - expect(@disk).must_be_instance_of D - expect(@disk.density).must_equal D::DENSITY # sanity check - expect(@disk.mass).must_be_within_epsilon 25.01 + expect(@disk).must_be_instance_of Disk + expect(@disk.density).must_equal Disk::DENSITY # sanity check + expect(@disk.mass).must_be_within_epsilon 76.969 - with_mass = D.new(@env) { |w| - w.mass = 99.01 - } + with_mass = Disk.new(@env) { |w| w.mass = 99.01 } expect(with_mass.mass).must_equal 99.01 - expect(with_mass.density).wont_equal D::DENSITY + expect(with_mass.density).wont_equal Disk::DENSITY end it "has a string representation" do str = @disk.to_s expect(str).must_be_instance_of String @@ -123,10 +85,9 @@ expect(@disk.volume).must_be_within_epsilon 0.07697 expect(@disk.volume_l).must_be_within_epsilon 76.96902 end it "has inertia" do - skip - expect(@disk.rotational_inertia).must_be_within_epsilon 1.5321 + expect(@disk.rotational_inertia).must_be_within_epsilon 4.714 end end end