Skip to content

Commit

Permalink
more testing
Browse files Browse the repository at this point in the history
  • Loading branch information
mofeing committed Feb 1, 2025
1 parent f099ba9 commit 0772d22
Show file tree
Hide file tree
Showing 3 changed files with 90 additions and 70 deletions.
44 changes: 25 additions & 19 deletions test/Interfaces.jl
Original file line number Diff line number Diff line change
Expand Up @@ -15,16 +15,18 @@ function test_tensornetwork(
replace=true,
contract=true,
)
inds && test_tensornetwork_inds(tn)
ninds && test_tensornetwork_ninds(tn)
tensors && test_tensornetwork_tensors(tn)
ntensors && test_tensornetwork_ntensors(tn)
arrays && test_tensornetwork_arrays(tn)
size && test_tensornetwork_size(tn)
inclusion && test_tensornetwork_in(tn)
replace && test_tensornetwork_replace!(tn)
contract && test_tensornetwork_contract(tn)
contract && test_tensornetwork_contract!(tn)
@testset "TensorNetwork interface" begin
inds && test_tensornetwork_inds(tn)
ninds && test_tensornetwork_ninds(tn)
tensors && test_tensornetwork_tensors(tn)
ntensors && test_tensornetwork_ntensors(tn)
arrays && test_tensornetwork_arrays(tn)
size && test_tensornetwork_size(tn)
inclusion && test_tensornetwork_in(tn)
replace && test_tensornetwork_replace!(tn)
contract && test_tensornetwork_contract(tn)
contract && test_tensornetwork_contract!(tn)
end
end

function test_tensornetwork_inds(tn)
Expand Down Expand Up @@ -241,11 +243,13 @@ function test_tensornetwork_contract!(tn)
end

# Pluggable interface
function test_pluggable(tn)
test_pluggable_sites(tn)
test_pluggable_socket(tn)
test_pluggable_inds(tn)
test_pluggable_ninds(tn)
function test_pluggable(tn; sites=true, socket=true, inds=true, ninds=true)
@testset "Pluggable interface" begin
sites && test_pluggable_sites(tn)
socket && test_pluggable_socket(tn)
inds && test_pluggable_inds(tn)
ninds && test_pluggable_ninds(tn)
end
end

function test_pluggable_sites(tn)
Expand Down Expand Up @@ -304,10 +308,12 @@ function test_pluggable_ninds(tn)
end

# Ansatz interface
function test_ansatz(tn)
test_ansatz_lanes(tn)
test_ansatz_lattice(tn)
test_ansatz_tensors(tn)
function test_ansatz(tn; lanes=true, lattice=true, tensors=true)
@testset "Ansatz interface" begin
lanes && test_ansatz_lanes(tn)
lattice && test_ansatz_lattice(tn)
tensors && test_ansatz_tensors(tn)
end
end

function test_ansatz_lanes(tn)
Expand Down
6 changes: 3 additions & 3 deletions test/unit/Ansatz_test.jl
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,12 @@ using LinearAlgebra
n = 2
tn = TensorNetwork([Tensor(ones(2), [:i]), Tensor(ones(2), [:j])])
qtn = Quantum(tn, Dict(site"1" => :i, site"2" => :j))

@test Lattice(Lane.(1:n), Graph(n)) == Lattice(Lane.(1:n))

lattice = Lattice(Lane.(1:n))
ansatz = Ansatz(qtn, lattice)

test_tensornetwork(ansatz)
test_pluggable(ansatz)

@test zero(ansatz) == Ansatz(zero(qtn), lattice)
@test Tenet.lattice(ansatz) == lattice
@test isempty(neighbors(ansatz, lane"1"))
Expand Down
110 changes: 62 additions & 48 deletions test/unit/Quantum_test.jl
Original file line number Diff line number Diff line change
@@ -1,53 +1,67 @@

using Test
using Tenet
using Tenet: nsites, State, Operator, Scalar

_tensors = Tensor[Tensor(zeros(2), [:i])]
tn = TensorNetwork(_tensors)
qtn = Quantum(tn, Dict(site"1" => :i))
@test nsites(qtn; set=:inputs) == 0
@test nsites(qtn; set=:outputs) == 1
@test issetequal(sites(qtn), [site"1"])
@test socket(qtn) == State(; dual=false)
@test inds(qtn; at=site"1") == :i
@test issetequal(inds(qtn; set=:physical), [:i])
@test isempty(inds(qtn; set=:virtual))

# forwarded methods to `TensorNetwork`
@test TensorNetwork(qtn) == tn
@test tensors(qtn) == _tensors

_tensors = Tensor[Tensor(zeros(2), [:i])]
tn = TensorNetwork(_tensors)
qtn = Quantum(tn, Dict(site"1'" => :i))
@test nsites(qtn; set=:inputs) == 1
@test nsites(qtn; set=:outputs) == 0
@test issetequal(sites(qtn), [site"1'"])
@test socket(qtn) == State(; dual=true)
@test inds(qtn; at=site"1'") == :i
@test issetequal(inds(qtn; set=:physical), [:i])
@test isempty(inds(qtn; set=:virtual))

_tensors = Tensor[Tensor(zeros(2, 2), [:i, :j])]
tn = TensorNetwork(_tensors)
qtn = Quantum(tn, Dict(site"1" => :i, site"1'" => :j))
@test nsites(qtn; set=:inputs) == 1
@test nsites(qtn; set=:outputs) == 1
@test issetequal(sites(qtn), [site"1", site"1'"])
@test socket(qtn) == Operator()
@test inds(qtn; at=site"1") == :i
@test inds(qtn; at=site"1'") == :j
@test issetequal(inds(qtn; set=:physical), [:i, :j])
@test isempty(inds(qtn; set=:virtual))

_tensors = Tensor[Tensor(fill(0))]
tn = TensorNetwork(_tensors)
qtn = Quantum(tn, Dict())
@test nsites(qtn; set=:inputs) == 0
@test nsites(qtn; set=:outputs) == 0
@test isempty(sites(qtn))
@test socket(qtn) == Scalar()
@test isempty(inds(qtn; set=:physical))
@test isempty(inds(qtn; set=:virtual))
@testset "Interfaces" begin
_tensors = Tensor[Tensor(zeros(2), [:i])]
tn = TensorNetwork(_tensors)
qtn = Quantum(tn, Dict{Site{1},Symbol}())

_tensors = Tensor[Tensor(zeros(2), [:i])]
tn = TensorNetwork(_tensors)
qtn = Quantum(tn, Dict(site"1" => :i))
@test issetequal(sites(qtn), [site"1"])
@test socket(qtn) == State(; dual=false)
@test inds(qtn; at=site"1") == :i
@test issetequal(inds(qtn; set=:physical), [:i])
@test isempty(inds(qtn; set=:virtual))

test_tensornetwork(qtn)
test_pluggable(qtn)

# forwarded methods to `TensorNetwork`
@test TensorNetwork(qtn) == tn
@test tensors(qtn) == _tensors

_tensors = Tensor[Tensor(zeros(2), [:i])]
tn = TensorNetwork(_tensors)
qtn = Quantum(tn, Dict(site"1'" => :i))
@test nsites(qtn; set=:inputs) == 1
@test nsites(qtn; set=:outputs) == 0
@test issetequal(sites(qtn), [site"1'"])
@test socket(qtn) == State(; dual=true)
@test inds(qtn; at=site"1'") == :i
@test issetequal(inds(qtn; set=:physical), [:i])
@test isempty(inds(qtn; set=:virtual))
test_tensornetwork(qtn)
test_pluggable(qtn)

_tensors = Tensor[Tensor(zeros(2, 2), [:i, :j])]
tn = TensorNetwork(_tensors)
qtn = Quantum(tn, Dict(site"1" => :i, site"1'" => :j))
@test nsites(qtn; set=:inputs) == 1
@test nsites(qtn; set=:outputs) == 1
@test issetequal(sites(qtn), [site"1", site"1'"])
@test socket(qtn) == Operator()
@test inds(qtn; at=site"1") == :i
@test inds(qtn; at=site"1'") == :j
@test issetequal(inds(qtn; set=:physical), [:i, :j])
@test isempty(inds(qtn; set=:virtual))
test_tensornetwork(qtn)
test_pluggable(qtn)

_tensors = Tensor[Tensor(fill(0))]
tn = TensorNetwork(_tensors)
qtn = Quantum(tn, Dict())
@test nsites(qtn; set=:inputs) == 0
@test nsites(qtn; set=:outputs) == 0
@test isempty(sites(qtn))
@test socket(qtn) == Scalar()
@test isempty(inds(qtn; set=:physical))
@test isempty(inds(qtn; set=:virtual))
test_tensornetwork(qtn)
test_pluggable(qtn)
end

# detect errors
_tensors = Tensor[Tensor(zeros(2), [:i]), Tensor(zeros(2), [:i])]
Expand Down

0 comments on commit 0772d22

Please sign in to comment.