{-# LANGUAGE BlockArguments #-}
module Test.Data.JoinSemilattice.Class.Sum where

import Data.Holmes (SumR (..))
import Hedgehog

sumR_addR :: (SumR x, Eq x, Num x, Show x) => Gen x -> Property
sumR_addR gen = property do
  a <- forAll gen
  b <- forAll gen
  let c = a + b

  let ( _, _, c' ) = addR ( a, b, mempty )
  c' === a + b

  let ( a', _, _ ) = addR ( mempty, b, c )
  a' === c - b

  let ( _, b', _ ) = addR ( a, mempty, c )
  b' === c - a