#!/usr/bin/env bats load bats-extra load bats-jq assert_float() { local OPTIND OPTARG local decimals=2 actual expected while getopts :d: opt; do case $opt in d) decimals=$OPTARG ;; *) return 2 ;; esac done shift $((OPTIND - 1)) # bash can't do floating point: use awk (also uses IEEE754 numbers) read -r actual expected < <( awk -v d="$decimals" -v a="$1" -v e="$2" ' BEGIN { m = 10 ^ d print int(a * m)/m, int(e * m)/m } ' ) # now call a bats-assert command to get the desired output assert_equal "$actual" "$expected" } @test production_rate_per_hour_for_speed_zero { ## task 1 run jq -f assembly-line.jq <<< '{"speed": 0}' assert_success assert_float -d 4 -- "${lines[0]}" 0 } @test production_rate_per_hour_for_speed_one { ## task 1 run jq -f assembly-line.jq <<< '{"speed": 1}' assert_success assert_float -d 4 -- "${lines[0]}" 221.0 } @test production_rate_per_hour_for_speed_two { ## task 1 run jq -f assembly-line.jq <<< '{"speed": 2}' assert_success assert_float -d 4 -- "${lines[0]}" 442.0 } @test production_rate_per_hour_for_speed_three { ## task 1 run jq -f assembly-line.jq <<< '{"speed": 3}' assert_success assert_float -d 4 -- "${lines[0]}" 663.0 } @test production_rate_per_hour_for_speed_four { ## task 1 run jq -f assembly-line.jq <<< '{"speed": 4}' assert_success assert_float -d 4 -- "${lines[0]}" 884.0 } @test production_rate_per_hour_for_speed_five { ## task 1 run jq -f assembly-line.jq <<< '{"speed": 5}' assert_success assert_float -d 4 -- "${lines[0]}" 994.5 } @test production_rate_per_hour_for_speed_six { ## task 1 run jq -f assembly-line.jq <<< '{"speed": 6}' assert_success assert_float -d 4 -- "${lines[0]}" 1193.4 } @test production_rate_per_hour_for_speed_seven { ## task 1 run jq -f assembly-line.jq <<< '{"speed": 7}' assert_success assert_float -d 4 -- "${lines[0]}" 1392.3 } @test production_rate_per_hour_for_speed_eight { ## task 1 run jq -f assembly-line.jq <<< '{"speed": 8}' assert_success assert_float -d 4 -- "${lines[0]}" 1591.2 } @test production_rate_per_hour_for_speed_nine { ## task 1 run jq -f assembly-line.jq <<< '{"speed": 9}' assert_success assert_float -d 4 -- "${lines[0]}" 1591.2 } @test production_rate_per_hour_for_speed_ten { ## task 1 run jq -f assembly-line.jq <<< '{"speed": 10}' assert_success assert_float -d 4 -- "${lines[0]}" 1701.7 } @test working_items_per_minute_for_speed_one { ## task 2 run jq -f assembly-line.jq <<< '{"speed": 1}' assert_success assert_line --index 1 3 } @test working_items_per_minute_for_speed_five { ## task 2 run jq -f assembly-line.jq <<< '{"speed": 5}' assert_success assert_line --index 1 16 } @test working_items_per_minute_for_speed_eight { ## task 2 run jq -f assembly-line.jq <<< '{"speed": 8}' assert_success assert_line --index 1 26 } @test working_items_per_minute_for_speed_nine { ## task 2 run jq -f assembly-line.jq <<< '{"speed": 9}' assert_success assert_line --index 1 26 } @test working_items_per_minute_for_speed_ten { ## task 2 run jq -f assembly-line.jq <<< '{"speed": 10}' assert_success assert_line --index 1 28 }