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: hilbert_test.go
Close
// Copyright 2013 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_test import ( "bytes" "flag" "fmt" "go/ast" "go/importer" "go/parser" "go/token" "os" "testing" . "go/types" ) var ( H = flag.Int("H", 5, "Hilbert matrix size") out = flag.String("out", "", "write generated program to out") ) func TestHilbert(t *testing.T) { // generate source src := program(*H, *out) if *out != "" { os.WriteFile(*out, src, 0666) return } // parse source fset := token.NewFileSet() f, err := parser.ParseFile(fset, "hilbert.go", src, 0) if err != nil { t.Fatal(err) } // type-check file DefPredeclaredTestFuncs() // define assert built-in conf := Config{Importer: importer.Default()} _, err = conf.Check(f.Name.Name, fset, []*ast.File{f}, nil) if err != nil { t.Fatal(err) } } func program(n int, out string) []byte { var g gen g.p(`// Code generated by: go test -run=Hilbert -H=%d -out=%q. DO NOT EDIT. // +`+`build ignore // This program tests arbitrary precision constant arithmetic // by generating the constant elements of a Hilbert matrix H, // its inverse I, and the product P = H*I. The product should // be the identity matrix. package main func main() { if !ok { printProduct() return } println("PASS") } `, n, out) g.hilbert(n) g.inverse(n) g.product(n) g.verify(n) g.printProduct(n) g.binomials(2*n - 1) g.factorials(2*n - 1) return g.Bytes() } type gen struct { bytes.Buffer } func (g *gen) p(format string, args ...any) { fmt.Fprintf(&g.Buffer, format, args...) } func (g *gen) hilbert(n int) { g.p(`// Hilbert matrix, n = %d const ( `, n) for i := 0; i < n; i++ { g.p("\t") for j := 0; j < n; j++ { if j > 0 { g.p(", ") } g.p("h%d_%d", i, j) } if i == 0 { g.p(" = ") for j := 0; j < n; j++ { if j > 0 { g.p(", ") } g.p("1.0/(iota + %d)", j+1) } } g.p("\n") } g.p(")\n\n") } func (g *gen) inverse(n int) { g.p(`// Inverse Hilbert matrix const ( `) for i := 0; i < n; i++ { for j := 0; j < n; j++ { s := "+" if (i+j)&1 != 0 { s = "-" } g.p("\ti%d_%d = %s%d * b%d_%d * b%d_%d * b%d_%d * b%d_%d\n", i, j, s, i+j+1, n+i, n-j-1, n+j, n-i-1, i+j, i, i+j, i) } g.p("\n") } g.p(")\n\n") } func (g *gen) product(n int) { g.p(`// Product matrix const ( `) for i := 0; i < n; i++ { for j := 0; j < n; j++ { g.p("\tp%d_%d = ", i, j) for k := 0; k < n; k++ { if k > 0 { g.p(" + ") } g.p("h%d_%d*i%d_%d", i, k, k, j) } g.p("\n") } g.p("\n") } g.p(")\n\n") } func (g *gen) verify(n int) { g.p(`// Verify that product is the identity matrix const ok = `) for i := 0; i < n; i++ { for j := 0; j < n; j++ { if j == 0 { g.p("\t") } else { g.p(" && ") } v := 0 if i == j { v = 1 } g.p("p%d_%d == %d", i, j, v) } g.p(" &&\n") } g.p("\ttrue\n\n") // verify ok at type-check time if *out == "" { g.p("const _ = assert(ok)\n\n") } } func (g *gen) printProduct(n int) { g.p("func printProduct() {\n") for i := 0; i < n; i++ { g.p("\tprintln(") for j := 0; j < n; j++ { if j > 0 { g.p(", ") } g.p("p%d_%d", i, j) } g.p(")\n") } g.p("}\n\n") } func (g *gen) binomials(n int) { g.p(`// Binomials const ( `) for j := 0; j <= n; j++ { if j > 0 { g.p("\n") } for k := 0; k <= j; k++ { g.p("\tb%d_%d = f%d / (f%d*f%d)\n", j, k, j, k, j-k) } } g.p(")\n\n") } func (g *gen) factorials(n int) { g.p(`// Factorials const ( f0 = 1 f1 = 1 `) for i := 2; i <= n; i++ { g.p("\tf%d = f%d * %d\n", i, i-1, i) } g.p(")\n\n") }