Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
N
nebula
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
exchain
nebula
Commits
87617a72
Unverified
Commit
87617a72
authored
Jun 30, 2023
by
mergify[bot]
Committed by
GitHub
Jun 30, 2023
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'develop' into refcell/step-func
parents
8a90222c
6036c08e
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
69 additions
and
10 deletions
+69
-10
solver.go
op-challenger/fault/solver.go
+49
-10
solver_test.go
op-challenger/fault/solver_test.go
+20
-0
No files found.
op-challenger/fault/solver.go
View file @
87617a72
...
@@ -25,19 +25,58 @@ func NewSolver(gameDepth int, traceProvider TraceProvider) *Solver {
...
@@ -25,19 +25,58 @@ func NewSolver(gameDepth int, traceProvider TraceProvider) *Solver {
func
(
s
*
Solver
)
NextMove
(
claim
Claim
)
(
*
Claim
,
error
)
{
func
(
s
*
Solver
)
NextMove
(
claim
Claim
)
(
*
Claim
,
error
)
{
// Special case of the root claim
// Special case of the root claim
if
claim
.
IsRoot
()
{
if
claim
.
IsRoot
()
{
agree
,
err
:=
s
.
agreeWithClaim
(
claim
.
ClaimData
)
return
s
.
handleRoot
(
claim
)
if
err
!=
nil
{
}
return
nil
,
err
return
s
.
handleMiddle
(
claim
)
}
}
// Attack the root claim if we do not agree with it
if
!
agree
{
type
StepData
struct
{
return
s
.
attack
(
claim
)
LeafClaim
Claim
}
else
{
StateClaim
Claim
return
nil
,
nil
IsAttack
bool
}
}
// AttemptStep determines what step should occur for a given leaf claim.
// An error will be returned if the claim is not at the max depth.
func
(
s
*
Solver
)
AttemptStep
(
claim
Claim
,
state
Game
)
(
StepData
,
error
)
{
if
claim
.
Depth
()
!=
s
.
gameDepth
{
return
StepData
{},
errors
.
New
(
"cannot step on non-leaf claims"
)
}
claimCorrect
,
err
:=
s
.
agreeWithClaim
(
claim
.
ClaimData
)
if
err
!=
nil
{
return
StepData
{},
err
}
var
selectorFn
func
(
Claim
)
(
Claim
,
error
)
if
claimCorrect
{
selectorFn
=
state
.
PostStateClaim
}
else
{
selectorFn
=
state
.
PreStateClaim
}
stateClaim
,
err
:=
selectorFn
(
claim
)
if
err
!=
nil
{
return
StepData
{},
err
}
return
StepData
{
LeafClaim
:
claim
,
StateClaim
:
stateClaim
,
IsAttack
:
claimCorrect
,
},
nil
}
func
(
s
*
Solver
)
handleRoot
(
claim
Claim
)
(
*
Claim
,
error
)
{
agree
,
err
:=
s
.
agreeWithClaim
(
claim
.
ClaimData
)
if
err
!=
nil
{
return
nil
,
err
}
}
// Attack the root claim if we do not agree with it
if
!
agree
{
return
s
.
attack
(
claim
)
}
else
{
return
nil
,
nil
}
}
func
(
s
*
Solver
)
handleMiddle
(
claim
Claim
)
(
*
Claim
,
error
)
{
parentCorrect
,
err
:=
s
.
agreeWithClaim
(
claim
.
Parent
)
parentCorrect
,
err
:=
s
.
agreeWithClaim
(
claim
.
Parent
)
if
err
!=
nil
{
if
err
!=
nil
{
return
nil
,
err
return
nil
,
err
...
...
op-challenger/fault/solver_test.go
View file @
87617a72
...
@@ -78,3 +78,23 @@ func TestSolver_NextMove_Opponent(t *testing.T) {
...
@@ -78,3 +78,23 @@ func TestSolver_NextMove_Opponent(t *testing.T) {
require
.
Equal
(
t
,
test
.
response
,
res
.
ClaimData
)
require
.
Equal
(
t
,
test
.
response
,
res
.
ClaimData
)
}
}
}
}
func
TestAttemptStep
(
t
*
testing
.
T
)
{
maxDepth
:=
3
canonicalProvider
:=
NewAlphabetProvider
(
"abcdefgh"
,
uint64
(
maxDepth
))
solver
:=
NewSolver
(
maxDepth
,
canonicalProvider
)
root
,
top
,
middle
,
bottom
:=
createTestClaims
()
g
:=
NewGameState
(
root
,
testMaxDepth
)
require
.
NoError
(
t
,
g
.
Put
(
top
))
require
.
NoError
(
t
,
g
.
Put
(
middle
))
require
.
NoError
(
t
,
g
.
Put
(
bottom
))
step
,
err
:=
solver
.
AttemptStep
(
bottom
,
g
)
require
.
NoError
(
t
,
err
)
require
.
Equal
(
t
,
bottom
,
step
.
LeafClaim
)
require
.
Equal
(
t
,
middle
,
step
.
StateClaim
)
require
.
True
(
t
,
step
.
IsAttack
)
_
,
err
=
solver
.
AttemptStep
(
middle
,
g
)
require
.
Error
(
t
,
err
)
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment