require 'minitest/autorun'
require_relative 'client'

class WorkerTest < Minitest::Test
  def test_real_subprocess_result
    result = vector_add([1, -2, 0.5], [3, 2, 0.25])
    assert_equal [4.0, 0.0, 0.75], result['values']
    assert_equal 'cpu', result['device']
  end

  def test_float32_rounding
    assert_in_delta 0.3, vector_add([0.1], [0.2])['values'].first, 1e-6
  end

  def test_rejects_length_mismatch
    assert_match(/equal lengths/, assert_raises(RuntimeError) { vector_add([1], [2, 3]) }.message)
  end

  def test_rejects_non_numbers
    assert_match(/finite numbers/, assert_raises(RuntimeError) { vector_add(['1'], [2]) }.message)
  end

  def test_rejects_empty_vectors
    assert_match(/length/, assert_raises(RuntimeError) { vector_add([], []) }.message)
  end

  def test_device_argument_cannot_be_shell_command
    assert_raises(RuntimeError) { vector_add([1], [2], device: 'cpu; echo injected') }
  end
end
