Ran gofmt

This commit is contained in:
Sasha Koshka 2022-09-08 14:43:19 -04:00
parent b0068336cd
commit a52e5d3426
5 changed files with 81 additions and 75 deletions

1
cmd/main.go Normal file
View File

@ -0,0 +1 @@
package main

View File

@ -10,7 +10,7 @@ type Word interface {
// Machine is a stack machine. It contains an array of integers as its program // Machine is a stack machine. It contains an array of integers as its program
// data, and provides methods to run this program data, as well as interact with // data, and provides methods to run this program data, as well as interact with
// it. // it.
type Machine [WORD Word] struct { type Machine[WORD Word] struct {
program []WORD program []WORD
stack []WORD stack []WORD
block []WORD block []WORD
@ -22,7 +22,7 @@ type Machine [WORD Word] struct {
// MachineFunction is a function that can extend the functionality of the stack // MachineFunction is a function that can extend the functionality of the stack
// machine. It is passed a pointer to the machine that is calling it, and the // machine. It is passed a pointer to the machine that is calling it, and the
// machine will halt execution if true is returned. // machine will halt execution if true is returned.
type MachineFunction [WORD Word] func(machine *Machine[WORD]) (stop bool) type MachineFunction[WORD Word] func(machine *Machine[WORD]) (stop bool)
// All supported opcodes // All supported opcodes
const ( const (
@ -259,7 +259,7 @@ func (machine *Machine[WORD]) Poke(address WORD, word WORD) {
// Register registers a function at the specified ID. If there is already a // Register registers a function at the specified ID. If there is already a
// function registered at that ID, this method will return an error. // function registered at that ID, this method will return an error.
func (machine *Machine[WORD]) Register ( func (machine *Machine[WORD]) Register(
id WORD, id WORD,
function MachineFunction[WORD], function MachineFunction[WORD],
) ( ) (

View File

@ -2,14 +2,14 @@ package creature
import "testing" import "testing"
func runMachineTest ( func runMachineTest(
program []int, program []int,
memory []int, memory []int,
test *testing.T, test *testing.T,
) ( ) (
machine *Machine[int], machine *Machine[int],
) { ) {
machine = &Machine[int] {} machine = &Machine[int]{}
machine.LoadProgram(program) machine.LoadProgram(program)
if memory != nil { if memory != nil {
machine.LoadMemory(memory) machine.LoadMemory(memory)
@ -25,7 +25,7 @@ func runMachineTest (
} }
func TestPush(test *testing.T) { func TestPush(test *testing.T) {
machine := runMachineTest ([]int { machine := runMachineTest([]int{
PUSH, 3, PUSH, 3,
POP, POP,
PUSH, 654, PUSH, 654,
@ -41,7 +41,7 @@ func TestPush(test *testing.T) {
} }
func TestArithmetic(test *testing.T) { func TestArithmetic(test *testing.T) {
machine := runMachineTest([]int { machine := runMachineTest([]int{
PUSH, 3, PUSH, 3,
PUSH, 2, PUSH, 2,
ADD, ADD,
@ -102,7 +102,7 @@ func TestArithmetic(test *testing.T) {
} }
func TestComparison(test *testing.T) { func TestComparison(test *testing.T) {
machine := runMachineTest([]int { machine := runMachineTest([]int{
PUSH, 6, PUSH, 6,
PUSH, 6, PUSH, 6,
EQ, EQ,
@ -118,7 +118,6 @@ func TestComparison(test *testing.T) {
PUSH, 54, PUSH, 54,
PUSH, 6, PUSH, 6,
NEQ, NEQ,
}, nil, test) }, nil, test)
neqResult := machine.Pop() neqResult := machine.Pop()
@ -153,7 +152,7 @@ func TestComparison(test *testing.T) {
} }
func TestPeekPoke(test *testing.T) { func TestPeekPoke(test *testing.T) {
machine := runMachineTest ([]int { machine := runMachineTest([]int{
PUSH, 0, PUSH, 0,
PEEK, PEEK,
@ -163,7 +162,7 @@ func TestPeekPoke(test *testing.T) {
PUSH, 1, PUSH, 1,
PEEK, PEEK,
}, []int { }, []int{
632, 632,
13, 13,
}, test) }, test)
@ -186,7 +185,7 @@ func TestPeekPoke(test *testing.T) {
} }
func TestHalt(test *testing.T) { func TestHalt(test *testing.T) {
machine := runMachineTest ([]int { machine := runMachineTest([]int{
PUSH, 32, PUSH, 32,
HALT, HALT,
PUSH, 3, PUSH, 3,
@ -202,7 +201,7 @@ func TestHalt(test *testing.T) {
} }
func TestJump(test *testing.T) { func TestJump(test *testing.T) {
machine := runMachineTest ([]int { machine := runMachineTest([]int{
PUSH, 1, PUSH, 1,
PUSH, 8, PUSH, 8,
JMP, JMP,
@ -231,8 +230,8 @@ func TestJump(test *testing.T) {
func TestRegister(test *testing.T) { func TestRegister(test *testing.T) {
output := "" output := ""
machine := &Machine[int] {} machine := &Machine[int]{}
machine.LoadProgram([]int { machine.LoadProgram([]int{
PUSH, int('h'), PUSH, int('h'),
PUSH, 4, PUSH, 4,
CAL, CAL,

View File

@ -1,3 +1,4 @@
//go:build ignore
// +build ignore // +build ignore
package main package main
@ -5,12 +6,12 @@ package main
import "os" import "os"
import cre "git.tebibyte.media/sashakoshka/creature" import cre "git.tebibyte.media/sashakoshka/creature"
func main () { func main() {
// this is a simple echo program. it will take in input indefinetly and // this is a simple echo program. it will take in input indefinetly and
// repeat it. due to line buffering in the terminal however, it will // repeat it. due to line buffering in the terminal however, it will
// only print output once you have pressed enter. // only print output once you have pressed enter.
machine := cre.Machine[int] {} machine := cre.Machine[int]{}
machine.LoadProgram([]int { machine.LoadProgram([]int{
cre.PUSH, 0, cre.PUSH, 0,
cre.CAL, cre.CAL,
@ -22,20 +23,22 @@ func main () {
cre.JMP, cre.JMP,
}) })
machine.Register (0, read) machine.Register(0, read)
machine.Register (1, write) machine.Register(1, write)
err := machine.Execute(0) err := machine.Execute(0)
if err != nil { panic(err.Error()) } if err != nil {
panic(err.Error())
}
} }
func read (machine *cre.Machine[int]) (stop bool) { func read(machine *cre.Machine[int]) (stop bool) {
ch := []byte { 0 } ch := []byte{0}
os.Stdin.Read(ch) os.Stdin.Read(ch)
machine.Push(int(ch[0])) machine.Push(int(ch[0]))
return return
} }
func write (machine *cre.Machine[int]) (stop bool) { func write(machine *cre.Machine[int]) (stop bool) {
print(string(rune(machine.Pop()))) print(string(rune(machine.Pop())))
return return
} }

View File

@ -1,3 +1,4 @@
//go:build ignore
// +build ignore // +build ignore
package main package main
@ -5,7 +6,7 @@ package main
import "os" import "os"
import cre "git.tebibyte.media/sashakoshka/creature" import cre "git.tebibyte.media/sashakoshka/creature"
func main () { func main() {
// this is an "ai psychiatrist" program. when it starts, it asks the // this is an "ai psychiatrist" program. when it starts, it asks the
// user "What brings you in today?", and no matter what the user types, // user "What brings you in today?", and no matter what the user types,
// the program will respond with "And how does that make you feel?". // the program will respond with "And how does that make you feel?".
@ -20,8 +21,8 @@ func main () {
responseStart := 71 responseStart := 71
responseLoopStart := 50 responseLoopStart := 50
machine := cre.Machine[int] {} machine := cre.Machine[int]{}
machine.LoadProgram([]int { machine.LoadProgram([]int{
// reset x // reset x
cre.PUSH, introStart, cre.PUSH, introStart,
cre.PUSH, x, cre.PUSH, x,
@ -111,7 +112,7 @@ func main () {
cre.JMP, cre.JMP,
}) })
stringData := []byte ( stringData := []byte(
"\x00" + "\x00" +
"== Artificial Intelligence Psychiatrist ==\n" + "== Artificial Intelligence Psychiatrist ==\n" +
"What brings you in today?\n\x00" + "What brings you in today?\n\x00" +
@ -123,21 +124,23 @@ func main () {
} }
machine.LoadMemory(block) machine.LoadMemory(block)
machine.Register (0, read) machine.Register(0, read)
machine.Register (1, write) machine.Register(1, write)
err := machine.Execute(0) err := machine.Execute(0)
if err != nil { panic(err.Error()) } if err != nil {
panic(err.Error())
}
} }
func read (machine *cre.Machine[int]) (stop bool) { func read(machine *cre.Machine[int]) (stop bool) {
ch := []byte { 0 } ch := []byte{0}
os.Stdin.Read(ch) os.Stdin.Read(ch)
machine.Push(int(ch[0])) machine.Push(int(ch[0]))
return return
} }
func write (machine *cre.Machine[int]) (stop bool) { func write(machine *cre.Machine[int]) (stop bool) {
print(string(rune(machine.Pop()))) print(string(rune(machine.Pop())))
return return
} }