OXIESEC PANEL
- Current Dir:
/
/
opt
/
golang
/
1.19.4
/
src
/
go
/
types
Server IP: 2a02:4780:11:1084:0:327f:3464:10
Upload:
Create Dir:
Name
Size
Modified
Perms
📁
..
-
12/01/2022 06:13:56 PM
rwxr-xr-x
📄
api.go
17.05 KB
12/01/2022 06:12:58 PM
rw-r--r--
📄
api_test.go
81.16 KB
12/01/2022 06:12:58 PM
rw-r--r--
📄
array.go
802 bytes
12/01/2022 06:12:58 PM
rw-r--r--
📄
assignments.go
12.86 KB
12/01/2022 06:12:58 PM
rw-r--r--
📄
basic.go
1.48 KB
12/01/2022 06:12:58 PM
rw-r--r--
📄
builtins.go
24.28 KB
12/01/2022 06:12:58 PM
rw-r--r--
📄
builtins_test.go
9.7 KB
12/01/2022 06:12:58 PM
rw-r--r--
📄
call.go
22.29 KB
12/01/2022 06:12:58 PM
rw-r--r--
📄
chan.go
909 bytes
12/01/2022 06:12:58 PM
rw-r--r--
📄
check.go
17.32 KB
12/01/2022 06:12:58 PM
rw-r--r--
📄
check_test.go
12.11 KB
12/01/2022 06:12:58 PM
rw-r--r--
📄
context.go
4.34 KB
12/01/2022 06:12:58 PM
rw-r--r--
📄
context_test.go
2.33 KB
12/01/2022 06:12:58 PM
rw-r--r--
📄
conversions.go
8.28 KB
12/01/2022 06:12:58 PM
rw-r--r--
📄
decl.go
28.77 KB
12/01/2022 06:12:58 PM
rw-r--r--
📄
errorcodes.go
31.51 KB
12/01/2022 06:12:58 PM
rw-r--r--
📄
errorcodes_test.go
4.95 KB
12/01/2022 06:12:58 PM
rw-r--r--
📄
errors.go
9.87 KB
12/01/2022 06:12:58 PM
rw-r--r--
📄
errors_test.go
1 KB
12/01/2022 06:12:58 PM
rw-r--r--
📄
eval.go
3.05 KB
12/01/2022 06:12:58 PM
rw-r--r--
📄
eval_test.go
7.4 KB
12/01/2022 06:12:58 PM
rw-r--r--
📄
example_test.go
9.03 KB
12/01/2022 06:12:58 PM
rw-r--r--
📄
expr.go
51.97 KB
12/01/2022 06:12:58 PM
rw-r--r--
📄
exprstring.go
4.81 KB
12/01/2022 06:12:58 PM
rw-r--r--
📄
exprstring_test.go
2.36 KB
12/01/2022 06:12:58 PM
rw-r--r--
📄
gccgosizes.go
1.02 KB
12/01/2022 06:12:58 PM
rw-r--r--
📄
gotype.go
8.33 KB
12/01/2022 06:12:58 PM
rw-r--r--
📄
hilbert_test.go
3.61 KB
12/01/2022 06:12:58 PM
rw-r--r--
📄
index.go
11.03 KB
12/01/2022 06:12:58 PM
rw-r--r--
📄
infer.go
25.18 KB
12/01/2022 06:12:58 PM
rw-r--r--
📄
initorder.go
9.48 KB
12/01/2022 06:12:58 PM
rw-r--r--
📄
instantiate.go
9.94 KB
12/01/2022 06:12:58 PM
rw-r--r--
📄
instantiate_test.go
6.02 KB
12/01/2022 06:12:58 PM
rw-r--r--
📄
interface.go
8.08 KB
12/01/2022 06:12:58 PM
rw-r--r--
📄
issues_test.go
17.49 KB
12/01/2022 06:12:58 PM
rw-r--r--
📄
labels.go
7.17 KB
12/01/2022 06:12:58 PM
rw-r--r--
📄
lookup.go
16.93 KB
12/01/2022 06:12:58 PM
rw-r--r--
📄
main_test.go
335 bytes
12/01/2022 06:12:58 PM
rw-r--r--
📄
map.go
658 bytes
12/01/2022 06:12:58 PM
rw-r--r--
📄
methodset.go
6.75 KB
12/01/2022 06:12:58 PM
rw-r--r--
📄
methodset_test.go
5.75 KB
12/01/2022 06:12:58 PM
rw-r--r--
📄
mono.go
9.05 KB
12/01/2022 06:12:58 PM
rw-r--r--
📄
mono_test.go
2.63 KB
12/01/2022 06:12:58 PM
rw-r--r--
📄
named.go
22.37 KB
12/01/2022 06:12:58 PM
rw-r--r--
📄
named_test.go
2.69 KB
12/01/2022 06:12:58 PM
rw-r--r--
📄
object.go
17.92 KB
12/01/2022 06:12:58 PM
rw-r--r--
📄
object_test.go
5.21 KB
12/01/2022 06:12:58 PM
rw-r--r--
📄
objset.go
927 bytes
12/01/2022 06:12:58 PM
rw-r--r--
📄
operand.go
10 KB
12/01/2022 06:12:58 PM
rw-r--r--
📄
package.go
2.38 KB
12/01/2022 06:12:58 PM
rw-r--r--
📄
pointer.go
634 bytes
12/01/2022 06:12:58 PM
rw-r--r--
📄
predicates.go
14.71 KB
12/01/2022 06:12:58 PM
rw-r--r--
📄
resolver.go
24.38 KB
12/01/2022 06:12:58 PM
rw-r--r--
📄
resolver_test.go
4.58 KB
12/01/2022 06:12:58 PM
rw-r--r--
📄
return.go
4.21 KB
12/01/2022 06:12:58 PM
rw-r--r--
📄
scope.go
9.33 KB
12/01/2022 06:12:58 PM
rw-r--r--
📄
selection.go
3.99 KB
12/01/2022 06:12:58 PM
rw-r--r--
📄
self_test.go
2.57 KB
12/01/2022 06:12:58 PM
rw-r--r--
📄
signature.go
12.49 KB
12/01/2022 06:12:58 PM
rw-r--r--
📄
sizeof_test.go
1.26 KB
12/01/2022 06:12:58 PM
rw-r--r--
📄
sizes.go
7.56 KB
12/01/2022 06:12:58 PM
rw-r--r--
📄
sizes_test.go
3.33 KB
12/01/2022 06:12:58 PM
rw-r--r--
📄
slice.go
576 bytes
12/01/2022 06:12:58 PM
rw-r--r--
📄
stdlib_test.go
9.45 KB
12/01/2022 06:12:58 PM
rw-r--r--
📄
stmt.go
26.17 KB
12/01/2022 06:12:58 PM
rw-r--r--
📄
struct.go
6.04 KB
12/01/2022 06:12:58 PM
rw-r--r--
📄
subst.go
10.76 KB
12/01/2022 06:12:58 PM
rw-r--r--
📄
termlist.go
3.68 KB
12/01/2022 06:12:58 PM
rw-r--r--
📄
termlist_test.go
7.18 KB
12/01/2022 06:12:58 PM
rw-r--r--
📁
testdata
-
12/01/2022 06:13:56 PM
rwxr-xr-x
📄
token_test.go
1.21 KB
12/01/2022 06:12:58 PM
rw-r--r--
📄
tuple.go
928 bytes
12/01/2022 06:12:58 PM
rw-r--r--
📄
type.go
2.92 KB
12/01/2022 06:12:58 PM
rw-r--r--
📄
typelists.go
1.84 KB
12/01/2022 06:12:58 PM
rw-r--r--
📄
typeparam.go
4.74 KB
12/01/2022 06:12:58 PM
rw-r--r--
📄
typeset.go
14.22 KB
12/01/2022 06:12:58 PM
rw-r--r--
📄
typeset_test.go
2.34 KB
12/01/2022 06:12:58 PM
rw-r--r--
📄
typestring.go
10.64 KB
12/01/2022 06:12:58 PM
rw-r--r--
📄
typestring_test.go
4.21 KB
12/01/2022 06:12:58 PM
rw-r--r--
📄
typeterm.go
3.52 KB
12/01/2022 06:12:58 PM
rw-r--r--
📄
typeterm_test.go
5.1 KB
12/01/2022 06:12:58 PM
rw-r--r--
📄
typexpr.go
14.64 KB
12/01/2022 06:12:58 PM
rw-r--r--
📄
unify.go
18.35 KB
12/01/2022 06:12:58 PM
rw-r--r--
📄
union.go
6.22 KB
12/01/2022 06:12:58 PM
rw-r--r--
📄
universe.go
7.66 KB
12/01/2022 06:12:58 PM
rw-r--r--
📄
validtype.go
7.77 KB
12/01/2022 06:12:58 PM
rw-r--r--
📄
version.go
2.2 KB
12/01/2022 06:12:58 PM
rw-r--r--
Editing: typeterm_test.go
Close
// Copyright 2021 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package types import ( "go/token" "strings" "testing" ) var myInt = func() Type { tname := NewTypeName(token.NoPos, nil, "myInt", nil) return NewNamed(tname, Typ[Int], nil) }() var testTerms = map[string]*term{ "∅": nil, "𝓤": {}, "int": {false, Typ[Int]}, "~int": {true, Typ[Int]}, "string": {false, Typ[String]}, "~string": {true, Typ[String]}, "myInt": {false, myInt}, } func TestTermString(t *testing.T) { for want, x := range testTerms { if got := x.String(); got != want { t.Errorf("%v.String() == %v; want %v", x, got, want) } } } func split(s string, n int) []string { r := strings.Split(s, " ") if len(r) != n { panic("invalid test case: " + s) } return r } func testTerm(name string) *term { r, ok := testTerms[name] if !ok { panic("invalid test argument: " + name) } return r } func TestTermEqual(t *testing.T) { for _, test := range []string{ "∅ ∅ T", "𝓤 𝓤 T", "int int T", "~int ~int T", "myInt myInt T", "∅ 𝓤 F", "∅ int F", "∅ ~int F", "𝓤 int F", "𝓤 ~int F", "𝓤 myInt F", "int ~int F", "int myInt F", "~int myInt F", } { args := split(test, 3) x := testTerm(args[0]) y := testTerm(args[1]) want := args[2] == "T" if got := x.equal(y); got != want { t.Errorf("%v.equal(%v) = %v; want %v", x, y, got, want) } // equal is symmetric x, y = y, x if got := x.equal(y); got != want { t.Errorf("%v.equal(%v) = %v; want %v", x, y, got, want) } } } func TestTermUnion(t *testing.T) { for _, test := range []string{ "∅ ∅ ∅ ∅", "∅ 𝓤 𝓤 ∅", "∅ int int ∅", "∅ ~int ~int ∅", "∅ myInt myInt ∅", "𝓤 𝓤 𝓤 ∅", "𝓤 int 𝓤 ∅", "𝓤 ~int 𝓤 ∅", "𝓤 myInt 𝓤 ∅", "int int int ∅", "int ~int ~int ∅", "int string int string", "int ~string int ~string", "int myInt int myInt", "~int ~string ~int ~string", "~int myInt ~int ∅", // union is symmetric, but the result order isn't - repeat symmetric cases explicitly "𝓤 ∅ 𝓤 ∅", "int ∅ int ∅", "~int ∅ ~int ∅", "myInt ∅ myInt ∅", "int 𝓤 𝓤 ∅", "~int 𝓤 𝓤 ∅", "myInt 𝓤 𝓤 ∅", "~int int ~int ∅", "string int string int", "~string int ~string int", "myInt int myInt int", "~string ~int ~string ~int", "myInt ~int ~int ∅", } { args := split(test, 4) x := testTerm(args[0]) y := testTerm(args[1]) want1 := testTerm(args[2]) want2 := testTerm(args[3]) if got1, got2 := x.union(y); !got1.equal(want1) || !got2.equal(want2) { t.Errorf("%v.union(%v) = %v, %v; want %v, %v", x, y, got1, got2, want1, want2) } } } func TestTermIntersection(t *testing.T) { for _, test := range []string{ "∅ ∅ ∅", "∅ 𝓤 ∅", "∅ int ∅", "∅ ~int ∅", "∅ myInt ∅", "𝓤 𝓤 𝓤", "𝓤 int int", "𝓤 ~int ~int", "𝓤 myInt myInt", "int int int", "int ~int int", "int string ∅", "int ~string ∅", "int string ∅", "~int ~string ∅", "~int myInt myInt", } { args := split(test, 3) x := testTerm(args[0]) y := testTerm(args[1]) want := testTerm(args[2]) if got := x.intersect(y); !got.equal(want) { t.Errorf("%v.intersect(%v) = %v; want %v", x, y, got, want) } // intersect is symmetric x, y = y, x if got := x.intersect(y); !got.equal(want) { t.Errorf("%v.intersect(%v) = %v; want %v", x, y, got, want) } } } func TestTermIncludes(t *testing.T) { for _, test := range []string{ "∅ int F", "𝓤 int T", "int int T", "~int int T", "~int myInt T", "string int F", "~string int F", "myInt int F", } { args := split(test, 3) x := testTerm(args[0]) y := testTerm(args[1]).typ want := args[2] == "T" if got := x.includes(y); got != want { t.Errorf("%v.includes(%v) = %v; want %v", x, y, got, want) } } } func TestTermSubsetOf(t *testing.T) { for _, test := range []string{ "∅ ∅ T", "𝓤 𝓤 T", "int int T", "~int ~int T", "myInt myInt T", "∅ 𝓤 T", "∅ int T", "∅ ~int T", "∅ myInt T", "𝓤 int F", "𝓤 ~int F", "𝓤 myInt F", "int ~int T", "int myInt F", "~int myInt F", "myInt int F", "myInt ~int T", } { args := split(test, 3) x := testTerm(args[0]) y := testTerm(args[1]) want := args[2] == "T" if got := x.subsetOf(y); got != want { t.Errorf("%v.subsetOf(%v) = %v; want %v", x, y, got, want) } } } func TestTermDisjoint(t *testing.T) { for _, test := range []string{ "int int F", "~int ~int F", "int ~int F", "int string T", "int ~string T", "int myInt T", "~int ~string T", "~int myInt F", "string myInt T", "~string myInt T", } { args := split(test, 3) x := testTerm(args[0]) y := testTerm(args[1]) want := args[2] == "T" if got := x.disjoint(y); got != want { t.Errorf("%v.disjoint(%v) = %v; want %v", x, y, got, want) } // disjoint is symmetric x, y = y, x if got := x.disjoint(y); got != want { t.Errorf("%v.disjoint(%v) = %v; want %v", x, y, got, want) } } }