package snake import "testing" func TestSnakeA(test *testing.T) { snake := O().AddL(1, 6).AddS( L(1), L(2), L(3), L(4), L(5), ).AddL(9) test.Log(snake) ok, n := Check(snake, []byte { 1, 6, 1, 2, 3, 4, 5, 9 }) if !ok { test.Fatal("false negative:", n) } ok, n = Check(snake, []byte { 1, 6, 5, 4, 3, 2, 1, 9 }) if !ok { test.Fatal("false negative:", n) } ok, n = Check(snake, []byte { 1, 6, 3, 1, 4, 2, 5, 9 }) if !ok { test.Fatal("false negative:", n) } ok, n = Check(snake, []byte { 1, 6, 9 }) if ok { test.Fatal("false positive:", n) } ok, n = Check(snake, []byte { 1, 6, 1, 2, 3, 4, 5, 6, 9 }) if ok { test.Fatal("false positive:", n) } ok, n = Check(snake, []byte { 1, 6, 0, 2, 3, 4, 5, 6, 9 }) if ok { test.Fatal("false positive:", n) } ok, n = Check(snake, []byte { 1, 6, 7, 1, 4, 2, 5, 9 }) if ok { test.Fatal("false positive:", n) } ok, n = Check(snake, []byte { 1, 6, 7, 3, 1, 4, 2, 5, 9 }) if ok { test.Fatal("false positive:", n) } ok, n = Check(snake, []byte { 1, 6, 7, 3, 1, 4, 2, 5, 9 }) if ok { test.Fatal("false positive:", n) } ok, n = Check(snake, []byte { 1, 6, 1, 2, 3, 4, 5, 9, 10}) if ok { test.Fatal("false positive:", n) } } func TestSnakeB(test *testing.T) { snake := O().AddO(L(1), L(6)).AddS( L(1), L(2), ).AddL(9).AddS( L(3, 2), L(0), L(1, 1, 2, 3), ) test.Log(snake) ok, n := Check(snake, []byte { 1, 6, 1, 2, 9, 3, 2, 0, 1, 1, 2, 3}) if !ok { test.Fatal("false negative:", n) } ok, n = Check(snake, []byte { 1, 6, 2, 1, 9, 0, 1, 1, 2, 3, 3, 2}) if !ok { test.Fatal("false negative:", n) } ok, n = Check(snake, []byte { 1, 6, 9 }) if ok { test.Fatal("false positive:", n) } ok, n = Check(snake, []byte { 1, 6, 1, 2, 9 }) if ok { test.Fatal("false positive:", n) } ok, n = Check(snake, []byte { 1, 6, 9, 3, 2, 0, 1, 1, 2, 3}) if ok { test.Fatal("false positive:", n) } ok, n = Check(snake, []byte { 1, 6, 2, 9, 0, 1, 1, 2, 3, 3, 2}) if ok { test.Fatal("false positive:", n) } ok, n = Check(snake, []byte { 1, 6, 1, 2, 9, 3, 2, 1, 1, 2, 3}) if ok { test.Fatal("false positive:", n) } } func TestSnakeC(test *testing.T) { snake := S( L(1, 2, 3), S(L(6), L(7), L(8)), ) test.Log(snake) ok, n := Check(snake, []byte { 1, 2, 3, 6, 7, 8 }) if !ok { test.Fatal("false negative:", n) } ok, n = Check(snake, []byte { 6, 7, 8, 1, 2, 3 }) if !ok { test.Fatal("false negative:", n) } ok, n = Check(snake, []byte { 7, 8, 6, 1, 2, 3 }) if !ok { test.Fatal("false negative:", n) } ok, n = Check(snake, []byte { 1, 2, 3, 8, 6, 7 }) if !ok { test.Fatal("false negative:", n) } ok, n = Check(snake, []byte { 2, 1, 3, 6, 7, 8 }) if ok { test.Fatal("false positive:", n) } ok, n = Check(snake, []byte { 6, 1, 2, 3, 7, 8 }) if ok { test.Fatal("false positive:", n) } }