| 
									
										
										
										
											2017-02-14 19:26:29 +01:00
										 |  |  | require "hardware" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | module Hardware | 
					
						
							|  |  |  |   describe CPU do | 
					
						
							|  |  |  |     describe "::type" do | 
					
						
							|  |  |  |       it "returns the current CPU's type as a symbol, or :dunno if it cannot be detected" do | 
					
						
							|  |  |  |         expect( | 
					
						
							|  |  |  |           [ | 
					
						
							|  |  |  |             :intel, | 
					
						
							|  |  |  |             :ppc, | 
					
						
							|  |  |  |             :dunno, | 
					
						
							|  |  |  |           ], | 
					
						
							|  |  |  |         ).to include(described_class.type) | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     describe "::family" do | 
					
						
							|  |  |  |       it "returns the current CPU's family name as a symbol, or :dunno if it cannot be detected" do | 
					
						
							|  |  |  |         skip "Needs an Intel CPU." unless described_class.intel? | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         expect( | 
					
						
							|  |  |  |           [ | 
					
						
							|  |  |  |             :core, | 
					
						
							|  |  |  |             :core2, | 
					
						
							|  |  |  |             :penryn, | 
					
						
							|  |  |  |             :nehalem, | 
					
						
							|  |  |  |             :arrandale, | 
					
						
							|  |  |  |             :sandybridge, | 
					
						
							|  |  |  |             :ivybridge, | 
					
						
							|  |  |  |             :haswell, | 
					
						
							|  |  |  |             :broadwell, | 
					
						
							|  |  |  |             :skylake, | 
					
						
							|  |  |  |             :kabylake, | 
					
						
							|  |  |  |             :dunno, | 
					
						
							|  |  |  |           ], | 
					
						
							|  |  |  |         ).to include(described_class.family) | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  |     end | 
					
						
							| 
									
										
										
										
											2017-04-15 22:05:26 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |     describe "::can_run?" do | 
					
						
							|  |  |  |       it "reports that Intel machines can run Intel executables" do | 
					
						
							|  |  |  |         allow(Hardware::CPU).to receive(:type).and_return :intel | 
					
						
							|  |  |  |         allow(Hardware::CPU).to receive(:bits).and_return 64
 | 
					
						
							|  |  |  |         expect(Hardware::CPU.can_run?(:i386)).to be true | 
					
						
							|  |  |  |         expect(Hardware::CPU.can_run?(:x86_64)).to be true | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       it "reports that PowerPC machines can run PowerPC executables" do | 
					
						
							|  |  |  |         allow(Hardware::CPU).to receive(:type).and_return :ppc | 
					
						
							|  |  |  |         allow(Hardware::CPU).to receive(:bits).and_return 64
 | 
					
						
							|  |  |  |         expect(Hardware::CPU.can_run?(:ppc)).to be true | 
					
						
							|  |  |  |         expect(Hardware::CPU.can_run?(:ppc64)).to be true | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       it "reports that 32-bit Intel machines can't run x86_64 executables" do | 
					
						
							|  |  |  |         allow(Hardware::CPU).to receive(:type).and_return :intel | 
					
						
							|  |  |  |         allow(Hardware::CPU).to receive(:bits).and_return 32
 | 
					
						
							|  |  |  |         expect(Hardware::CPU.can_run?(:x86_64)).to be false | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       it "reports that 32-bit PowerPC machines can't run ppc64 executables" do | 
					
						
							|  |  |  |         allow(Hardware::CPU).to receive(:type).and_return :ppc | 
					
						
							|  |  |  |         allow(Hardware::CPU).to receive(:bits).and_return 32
 | 
					
						
							|  |  |  |         expect(Hardware::CPU.can_run?(:ppc64)).to be false | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       it "identifies that Intel and PowerPC machines can't run each others' executables" do | 
					
						
							|  |  |  |         allow(Hardware::CPU).to receive(:type).and_return :ppc | 
					
						
							|  |  |  |         expect(Hardware::CPU.can_run?(:i386)).to be false | 
					
						
							|  |  |  |         expect(Hardware::CPU.can_run?(:x86_64)).to be false | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         allow(Hardware::CPU).to receive(:type).and_return :intel | 
					
						
							|  |  |  |         expect(Hardware::CPU.can_run?(:ppc)).to be false | 
					
						
							|  |  |  |         expect(Hardware::CPU.can_run?(:ppc64)).to be false | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       it "returns false for unknown CPU types" do | 
					
						
							|  |  |  |         allow(Hardware::CPU).to receive(:type).and_return :dunno | 
					
						
							|  |  |  |         expect(Hardware::CPU.can_run?(:i386)).to be false | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       it "returns false for unknown arches" do | 
					
						
							|  |  |  |         expect(Hardware::CPU.can_run?(:blah)).to be false | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  |     end | 
					
						
							| 
									
										
										
										
											2017-02-14 19:26:29 +01:00
										 |  |  |   end | 
					
						
							|  |  |  | end |