Command-Line Programs
Exit Status Model
Command-line programs report success or failure with an exit status code.
exit status
Ruby programs can compute a status code before passing it to `exit`; examples can model the value without ending the replay early.
Exit Status Model
exit_status_model.rb
Replay: real traced execution (multi-file project)
valid = true
warnings = 1
status = if !valid
1
elsif warnings > 0
2
else
0
end
meaning = case status
when 0
"success"
when 1
"error"
else
"warning"
end
puts "valid=#{valid}"
puts "warnings=#{warnings}"
puts "status=#{status}"
puts "meaning=#{meaning}"
valid = false
warnings = 1
status = if !valid
1
elsif warnings > 0
2
else
0
end
meaning = case status
when 0
"success"
when 1
"error"
else
"warning"
end
puts "valid=#{valid}"
puts "warnings=#{warnings}"
puts "status=#{status}"
puts "meaning=#{meaning}"
valid = true
warnings = 0
status = if !valid
1
elsif warnings > 0
2
else
0
end
meaning = case status
when 0
"success"
when 1
"error"
else
"warning"
end
puts "valid=#{valid}"
puts "warnings=#{warnings}"
puts "status=#{status}"
puts "meaning=#{meaning}"
valid = true
warnings = 3
status = if !valid
1
elsif warnings > 0
2
else
0
end
meaning = case status
when 0
"success"
when 1
"error"
else
"warning"
end
puts "valid=#{valid}"
puts "warnings=#{warnings}"
puts "status=#{status}"
puts "meaning=#{meaning}"
valid ← true, warnings ← 1, status ← 2, meaning ← warning
1valid→ true = true #@valid=false2warnings→ 1 = 1 #@warnings=0, 334status→ 2 = if !validtrue5 16elsif warnings1 > 07 28else9 010end1112meaning→ warning = case status213when 014 "success"15when 116 "error"17else18 "warning"19end2021puts "valid=#{validtrue}"22puts "warnings=#{warnings1}"23puts "status=#{status2}"24puts "meaning=#{meaningwarning}"outputvalid=true warnings=1 status=2 meaning=warning
valid ← false, warnings ← 1, status ← 1, meaning ← error
1valid→ false = false2warnings→ 1 = 134status→ 1 = if !validfalse5 16elsif warnings1 > 07 28else9 010end1112meaning→ error = case status113when 014 "success"15when 116 "error"17else18 "warning"19end2021puts "valid=#{validfalse}"22puts "warnings=#{warnings1}"23puts "status=#{status1}"24puts "meaning=#{meaningerror}"outputvalid=false warnings=1 status=1 meaning=error
valid ← true, warnings ← 0, status ← 0, meaning ← success
1valid→ true = true2warnings→ 0 = 034status→ 0 = if !validtrue5 16elsif warnings0 > 07 28else9 010end1112meaning→ success = case status013when 014 "success"15when 116 "error"17else18 "warning"19end2021puts "valid=#{validtrue}"22puts "warnings=#{warnings0}"23puts "status=#{status0}"24puts "meaning=#{meaningsuccess}"outputvalid=true warnings=0 status=0 meaning=success
valid ← true, warnings ← 3, status ← 2, meaning ← warning
1valid→ true = true2warnings→ 3 = 334status→ 2 = if !validtrue5 16elsif warnings3 > 07 28else9 010end1112meaning→ warning = case status213when 014 "success"15when 116 "error"17else18 "warning"19end2021puts "valid=#{validtrue}"22puts "warnings=#{warnings3}"23puts "status=#{status2}"24puts "meaning=#{meaningwarning}"outputvalid=true warnings=3 status=2 meaning=warning