Файловый менеджер - Редактировать - /var/www/html/testlife.zip
Ðазад
PK ! ��� � life_test.gonu �[��� // Copyright 2019 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 life_test import ( "bytes" "cmd/cgo/internal/cgotest" "internal/testenv" "log" "os" "os/exec" "path/filepath" "testing" ) func TestMain(m *testing.M) { log.SetFlags(log.Lshortfile) os.Exit(testMain(m)) } func testMain(m *testing.M) int { GOPATH, err := os.MkdirTemp("", "cgolife") if err != nil { log.Panic(err) } defer os.RemoveAll(GOPATH) os.Setenv("GOPATH", GOPATH) // Copy testdata into GOPATH/src/cgolife, along with a go.mod file // declaring the same path. modRoot := filepath.Join(GOPATH, "src", "cgolife") if err := cgotest.OverlayDir(modRoot, "testdata"); err != nil { log.Panic(err) } if err := os.Chdir(modRoot); err != nil { log.Panic(err) } os.Setenv("PWD", modRoot) if err := os.WriteFile("go.mod", []byte("module cgolife\n"), 0666); err != nil { log.Panic(err) } return m.Run() } // TestTestRun runs a test case for cgo //export. func TestTestRun(t *testing.T) { testenv.MustHaveGoRun(t) testenv.MustHaveCGO(t) cmd := exec.Command("go", "run", "main.go") got, err := cmd.CombinedOutput() if err != nil { t.Fatalf("%v: %s\n%s", cmd, err, got) } want, err := os.ReadFile("main.out") if err != nil { t.Fatal("reading golden output:", err) } if !bytes.Equal(got, want) { t.Errorf("'%v' output does not match expected in main.out. Instead saw:\n%s", cmd, got) } } PK ! �^�v$ $ testdata/life.hnu �[��� // Copyright 2010 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. extern void Step(int, int, int *, int *); extern void DoStep(int, int, int, int, int, int, int *, int *); extern const int MYCONST; PK ! �v ~| | testdata/life.gonu �[��� // Copyright 2010 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 cgolife // #include "life.h" import "C" import "unsafe" func Run(gen, x, y int, a []int32) { n := make([]int32, x*y) for i := 0; i < gen; i++ { C.Step(C.int(x), C.int(y), (*C.int)(unsafe.Pointer(&a[0])), (*C.int)(unsafe.Pointer(&n[0]))) copy(a, n) } } // Keep the channels visible from Go. var chans [4]chan bool // Double return value is just for testing. // //export GoStart func GoStart(i, xdim, ydim, xstart, xend, ystart, yend C.int, a *C.int, n *C.int) (int, int) { c := make(chan bool, int(C.MYCONST)) go func() { C.DoStep(xdim, ydim, xstart, xend, ystart, yend, a, n) c <- true }() chans[i] = c return int(i), int(i + 100) } //export GoWait func GoWait(i C.int) { <-chans[i] chans[i] = nil } PK ! �ݚ testdata/main.outnu �[��� XXX XXX XXX XXX PK ! �}�# # testdata/main.gonu �[��� // Copyright 2010 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. //go:build test_run // Run the game of life in C using Go for parallelization. package main import ( "flag" "fmt" "cgolife" ) const MAXDIM = 100 var dim = flag.Int("dim", 16, "board dimensions") var gen = flag.Int("gen", 10, "generations") func main() { flag.Parse() var a [MAXDIM * MAXDIM]int32 for i := 2; i < *dim; i += 8 { for j := 2; j < *dim-3; j += 8 { for y := 0; y < 3; y++ { a[i**dim+j+y] = 1 } } } cgolife.Run(*gen, *dim, *dim, a[:]) for i := 0; i < *dim; i++ { for j := 0; j < *dim; j++ { if a[i**dim+j] == 0 { fmt.Print(" ") } else { fmt.Print("X") } } fmt.Print("\n") } } PK ! Raq2� � testdata/c-life.cnu �[��� // Copyright 2010 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. #include <assert.h> #include "life.h" #include "_cgo_export.h" const int MYCONST = 0; // Do the actual manipulation of the life board in C. This could be // done easily in Go, we are just using C for demonstration // purposes. void Step(int x, int y, int *a, int *n) { struct GoStart_return r; // Use Go to start 4 goroutines each of which handles 1/4 of the // board. r = GoStart(0, x, y, 0, x / 2, 0, y / 2, a, n); assert(r.r0 == 0 && r.r1 == 100); // test multiple returns r = GoStart(1, x, y, x / 2, x, 0, y / 2, a, n); assert(r.r0 == 1 && r.r1 == 101); // test multiple returns GoStart(2, x, y, 0, x / 2, y / 2, y, a, n); GoStart(3, x, y, x / 2, x, y / 2, y, a, n); GoWait(0); GoWait(1); GoWait(2); GoWait(3); } // The actual computation. This is called in parallel. void DoStep(int xdim, int ydim, int xstart, int xend, int ystart, int yend, int *a, int *n) { int x, y, c, i, j; for(x = xstart; x < xend; x++) { for(y = ystart; y < yend; y++) { c = 0; for(i = -1; i <= 1; i++) { for(j = -1; j <= 1; j++) { if(x+i >= 0 && x+i < xdim && y+j >= 0 && y+j < ydim && (i != 0 || j != 0)) c += a[(x+i)*xdim + (y+j)] != 0; } } if(c == 3 || (c == 2 && a[x*xdim + y] != 0)) n[x*xdim + y] = 1; else n[x*xdim + y] = 0; } } } PK ! ��� � life_test.gonu �[��� PK ! �^�v$ $ testdata/life.hnu �[��� PK ! �v ~| | | testdata/life.gonu �[��� PK ! �ݚ 8 testdata/main.outnu �[��� PK ! �}�# # � testdata/main.gonu �[��� PK ! Raq2� � � testdata/c-life.cnu �[��� PK � �
| ver. 1.1 | |
.
| PHP 8.4.18 | Ð“ÐµÐ½ÐµÑ€Ð°Ñ†Ð¸Ñ Ñтраницы: 0 |
proxy
|
phpinfo
|
ÐаÑтройка