tests/testthat/test_aaa.R

test_that("Test suite aaa.R",{
  expect_true(Hi*Hj ==  Hk)
  expect_true(Hj*Hi == -Hk)
  expect_true(Hj*Hk ==  Hi)
  expect_true(Hk*Hj == -Hi)
  expect_true(Hk*Hi ==  Hj)
  expect_true(Hi*Hk == -Hj)

  expect_true(Hi*Hi == -H1)
  expect_true(Hj*Hj == -H1)
  expect_true(Hk*Hk == -H1)

  expect_true(H1*H1 == H1)
  expect_true(H1*Hi == Hi)
  expect_true(H1*Hj == Hj)
  expect_true(H1*Hk == Hk)

  expect_true(H1*H1 == H1)
  expect_true(Hi*H1 == Hi)
  expect_true(Hj*H1 == Hj)
  expect_true(Hk*H1 == Hk)
  
  expect_true(Hi*Hj*Hk == -H1)

  ## Quaternion zero times table:
  expect_true(H0*H1 == H0)
  expect_true(H0*Hi == H0)
  expect_true(H0*Hj == H0)
  expect_true(H0*Hk == H0)

  expect_true(H1*H0 == H0)
  expect_true(Hi*H0 == H0)
  expect_true(Hj*H0 == H0)
  expect_true(Hk*H0 == H0)

  ## And some quaternion additions:
  expect_true(H1 + Him == Hall)
  expect_true(Hi + Hj + Hk == Him)
  expect_true(H1 + Hi + Hj + Hk == Hall)

  ## And some quaternion subtractions:
  expect_true(Hi - Hi == H0)
  expect_true(Hall - Hi - Hj - Hk == H1)
  expect_true(Hall - Him == H1)

  ## Now all 64 of the octonions:
  expect_true(O1*O1  == O1 )
  expect_true(O1*Oi  == Oi )
  expect_true(O1*Oj  == Oj )
  expect_true(O1*Ok  == Ok )
  expect_true(O1*Ol  == Ol )
  expect_true(O1*Oil == Oil)
  expect_true(O1*Ojl == Ojl)
  expect_true(O1*Okl == Okl)
  
  expect_true(Oi*O1  ==  Oi )
  expect_true(Oi*Oi  == -O1 )
  expect_true(Oi*Oj  ==  Ok )
  expect_true(Oi*Ok  == -Oj )
  expect_true(Oi*Ol  ==  Oil)
  expect_true(Oi*Oil == -Ol )
  expect_true(Oi*Ojl == -Okl)
  expect_true(Oi*Okl ==  Ojl)

  expect_true(Oj*O1  ==  Oj )
  expect_true(Oj*Oi  == -Ok )
  expect_true(Oj*Oj  == -O1 )
  expect_true(Oj*Ok  ==  Oi )
  expect_true(Oj*Ol  ==  Ojl)
  expect_true(Oj*Oil ==  Okl)
  expect_true(Oj*Ojl == -Ol )
  expect_true(Oj*Okl == -Oil)

  expect_true(Ok*O1  ==  Ok )
  expect_true(Ok*Oi  ==  Oj )
  expect_true(Ok*Oj  == -Oi )
  expect_true(Ok*Ok  == -O1 )
  expect_true(Ok*Ol  ==  Okl)
  expect_true(Ok*Oil == -Ojl)
  expect_true(Ok*Ojl ==  Oil)
  expect_true(Ok*Okl == -Ol )

  expect_true(Ol*O1  ==  Ol )
  expect_true(Ol*Oi  == -Oil)
  expect_true(Ol*Oj  == -Ojl)
  expect_true(Ol*Ok  == -Okl)
  expect_true(Ol*Ol  == -O1 )
  expect_true(Ol*Oil ==  Oi )
  expect_true(Ol*Ojl ==  Oj )
  expect_true(Ol*Okl ==  Ok )

  expect_true(Oil*O1  ==  Oil)
  expect_true(Oil*Oi  ==  Ol )
  expect_true(Oil*Oj  == -Okl)
  expect_true(Oil*Ok  ==  Ojl)
  expect_true(Oil*Ol  == -Oi )
  expect_true(Oil*Oil == -O1 )
  expect_true(Oil*Ojl == -Ok )
  expect_true(Oil*Okl ==  Oj )

  expect_true(Ojl*O1  ==  Ojl)
  expect_true(Ojl*Oi  ==  Okl)
  expect_true(Ojl*Oj  ==  Ol )
  expect_true(Ojl*Ok  == -Oil)
  expect_true(Ojl*Ol  == -Oj )
  expect_true(Ojl*Oil ==  Ok )
  expect_true(Ojl*Ojl == -O1 )
  expect_true(Ojl*Okl == -Oi )

  expect_true(Okl*O1  ==  Okl)
  expect_true(Okl*Oi  == -Ojl)
  expect_true(Okl*Oj  ==  Oil)
  expect_true(Okl*Ok  ==  Ol )
  expect_true(Okl*Ol  == -Ok )
  expect_true(Okl*Oil == -Oj )
  expect_true(Okl*Ojl ==  Oi )
  expect_true(Okl*Okl == -O1 )



  ## And the zero octonion times table:
  expect_true(O0*O0  == O0)

  expect_true(O0*O1  == O0)
  expect_true(O0*Oi  == O0)
  expect_true(O0*Oj  == O0)
  expect_true(O0*Ok  == O0)
  expect_true(O0*Ol  == O0)
  expect_true(O0*Oil == O0)
  expect_true(O0*Ojl == O0)
  expect_true(O0*Okl == O0)

  expect_true(O1*O0  == O0)
  expect_true(Oi*O0  == O0)
  expect_true(Oj*O0  == O0)
  expect_true(Ok*O0  == O0)
  expect_true(Ol*O0  == O0)
  expect_true(Oil*O0 == O0)
  expect_true(Ojl*O0 == O0)
  expect_true(Okl*O0 == O0)

  ## And some octonion additions:
  expect_true(O1 + Oim == Oall)
  expect_true(Oi + Oj + Ok + Ol + Oil + Ojl + Okl == Oim)
  expect_true(O1 + Oi + Oj + Ok + Ol + Oil + Ojl + Okl == Oall)

  ## And some subtractions:
  expect_true(Oil - Oil == O0)
  expect_true(Oall - Oim == O1)

  expect_true(is.onion(as.onion(Oil)))
  expect_true(is.onion(as.onion(Hi)))

  expect_true(is.quaternion(as.onion(Hi ,type="quaternion")))
  expect_true(is.quaternion(as.onion(Oil,type="quaternion")))

  expect_false(is.quaternion(as.onion(Hi ,type="octonion")))
  expect_false(is.quaternion(as.onion(Oil,type="octonion")))

  expect_error(as.onion(matrix(1:16,4,4),type="fish"))
  expect_error(as.quaternion(1i,single=TRUE))
  expect_equal(as.quaternion(1i,single=FALSE),Hi)

  expect_error(as.octonion(1i,single=TRUE))
  expect_equal(as.octonion(1i,single=FALSE),Oi)

  expect_true(is.quaternion(as.quaternion(as.orthogonal(rquat(1)))))
  expect_warning(as.quaternion(1:5,single=TRUE))
  expect_warning(as.octonion(1:5,single=TRUE))

  expect_error(as.quaternion(matrix(1:25,5,5)))
  expect_error(as.octonion(matrix(1:25,5,5)))
  expect_error(as.quaternion(function(x){x},single=TRUE))
  expect_error(as.octonion(function(x){x},single=TRUE))

  expect_true(is.quaternion(quaternion(i=1:5,j=3)))
  expect_true(is.octonion(octonion(i=1:5,il=3)))

  expect_true(is.quaternion(quaternion(20)))
  expect_true(is.octonion(octonion(22)))

  expect_true(is.quaternion(quaternion()))
  expect_true(is.octonion(octonion()))

  expect_true(is.octonion(as.octonion(rquat())))

  expect_output(print(quaternion()))
  expect_output(print(octonion()))
  expect_error(onion_show(matrix(0,3,0)))

  expect_true(associator(Oi,Oj,Oil)  == -2*Ojl)
  expect_true(Mod(commutator(Hi,Hk)+Hj+Hj)==0)
  expect_true(threeform(Oi,Ol,Oil)==1)
  expect_true(dotprod(Oi,Oil)==0)
  expect_true(all(dotprod(c(Oi,Oj),Oil)==0))
  expect_true(all(dotprod(Oil,c(Oi,Oj))==0))
  expect_true(c(Oil)==Oil)



  expect_error(new("octonion",x=matrix(1i,5,5)))
  expect_error(new("octonion",x=matrix(1,5,5)))

  expect_error(new("quaternion",x=matrix(1i,5,5)))
  expect_error(new("quaternion",x=matrix(1,5,5)))

})
RobinHankin/onion documentation built on April 20, 2024, 2:05 p.m.