12 Commits

Author SHA1 Message Date
xuu
4181cd5fed chore: add grug-math 2024-01-15 11:27:32 -07:00
xuu
b1cc2af8d8 fix: shutdown on error
All checks were successful
Go Bump / bump (push) Successful in 35s
Go Test / build (push) Successful in 40s
2023-10-19 16:53:12 -06:00
7725019ed7 Merge pull request #1 from sour-is/dependabot/go_modules/golang.org/x/net-0.17.0
build(deps): bump golang.org/x/net from 0.12.0 to 0.17.0
2023-10-19 06:40:09 -06:00
fcae935511 Merge pull request #2 from sour-is/dependabot/go_modules/go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp-0.44.0
build(deps): bump go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp from 0.42.0 to 0.44.0
2023-10-19 06:39:33 -06:00
dependabot[bot]
14eb48d336 build(deps): bump go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp
Bumps [go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp](https://github.com/open-telemetry/opentelemetry-go-contrib) from 0.42.0 to 0.44.0.
- [Release notes](https://github.com/open-telemetry/opentelemetry-go-contrib/releases)
- [Changelog](https://github.com/open-telemetry/opentelemetry-go-contrib/blob/main/CHANGELOG.md)
- [Commits](https://github.com/open-telemetry/opentelemetry-go-contrib/compare/zpages/v0.42.0...zpages/v0.44.0)

---
updated-dependencies:
- dependency-name: go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-10-16 14:16:40 +00:00
dependabot[bot]
15399ff5e1 build(deps): bump golang.org/x/net from 0.12.0 to 0.17.0
Bumps [golang.org/x/net](https://github.com/golang/net) from 0.12.0 to 0.17.0.
- [Commits](https://github.com/golang/net/compare/v0.12.0...v0.17.0)

---
updated-dependencies:
- dependency-name: golang.org/x/net
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-10-11 23:00:35 +00:00
xuu
6ef0c668a2 chore: add push to GH
All checks were successful
Go Bump / bump (push) Successful in 28s
Go Test / build (push) Successful in 34s
2023-10-05 13:23:26 -06:00
xuu
8be5d358f1 chore: add push to GH
All checks were successful
Go Bump / bump (push) Successful in 32s
Go Test / build (push) Successful in 38s
2023-10-04 17:32:44 -06:00
xuu
7656b148ba build: add gitea runner.
All checks were successful
Go Test / build (push) Successful in 50s
Go Bump / bump (push) Successful in 25s
2023-10-01 09:03:52 -06:00
xuu
736daf7b4d fix: gh tests 2023-10-01 09:01:21 -06:00
xuu
4b44f4e58a fix: otel mod 2023-10-01 09:01:13 -06:00
Jon Lundy
8ac822b8a8 fix: otel mod 2023-09-16 12:48:40 -06:00
11 changed files with 387 additions and 34 deletions

View File

@@ -0,0 +1,25 @@
name: Go Bump
on:
push:
branches: [ "main" ]
jobs:
bump:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
with:
fetch-depth: 0
fetch-tags: true
- name: Set up Go
uses: actions/setup-go@v3
with:
go-version: 1.21.1
- run: go install github.com/psanetra/git-semver/cli@master
- run: git tag v$(cli next --stable=false) && git push --tags || echo no change
- run: echo "🍏 This job's status is ${{ job.status }}."

View File

@@ -0,0 +1,30 @@
name: Go Bump
on:
push:
branches: [ "main" ]
jobs:
bump:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
with:
fetch-depth: 0
fetch-tags: true
- name: Deploy to external repository
uses: https://git.sour.is/actions/github-action-push-to-another-repository@main
env:
API_TOKEN_GITHUB: ${{ secrets.GH_TOKEN }}
with:
# GitHub Action output files
source-directory: .
destination-github-username: sour-is
destination-repository-name: go-pkg
user-email: jon@xuu.cc
# It defaults to `main`
target-branch: "main"
- run: echo "🍏 This job's status is ${{ job.status }}."

33
.gitea/workflows/test.yml Normal file
View File

@@ -0,0 +1,33 @@
name: Go Test
on:
push:
branches: [ "main" ]
pull_request:
branches: [ "main" ]
jobs:
build:
runs-on: ubuntu-latest
steps:
- run: echo "🎉 The job was automatically triggered by a ${{ gitea.event_name }} event."
- run: echo "🐧 This job is now running on a ${{ runner.os }} server hosted by Gitea!"
- run: echo "🔎 The name of your branch is ${{ gitea.ref }} and your repository is ${{ gitea.repository }}."
- uses: actions/checkout@v3
- run: echo "💡 The ${{ gitea.repository }} repository has been cloned to the runner."
- run: echo "🖥️ The workflow is now ready to test your code on the runner."
- name: List files in the repository
run: |
ls ${{ gitea.workspace }}
- name: Set up Go
uses: actions/setup-go@v3
with:
go-version: 1.21.1
- name: Test
run: go test --race -v ./...
- run: echo "🍏 This job's status is ${{ job.status }}."

View File

@@ -19,7 +19,7 @@ jobs:
- name: Set up Go
uses: actions/setup-go@v3
with:
go-version: 1.20.5
go-version: 1.21.1
- name: Test
run: go test -v ./...

20
go.mod
View File

@@ -1,6 +1,6 @@
module go.sour.is/pkg
go 1.20
go 1.21
require (
github.com/99designs/gqlgen v0.17.34
@@ -11,7 +11,7 @@ require (
github.com/vektah/gqlparser/v2 v2.5.6
go.opentelemetry.io/otel v1.18.0
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.18.0
go.opentelemetry.io/otel/sdk/metric v0.39.0
go.opentelemetry.io/otel/sdk/metric v0.41.0
go.uber.org/multierr v1.11.0
golang.org/x/sync v0.3.0
)
@@ -24,9 +24,9 @@ require (
github.com/hashicorp/golang-lru/v2 v2.0.3 // indirect
github.com/matttproud/golang_protobuf_extensions v1.0.4 // indirect
github.com/mitchellh/mapstructure v1.5.0 // indirect
github.com/prometheus/client_model v0.4.0 // indirect
github.com/prometheus/client_model v0.4.1-0.20230718164431-9a2bf3000d16 // indirect
github.com/prometheus/common v0.44.0 // indirect
github.com/prometheus/procfs v0.11.0 // indirect
github.com/prometheus/procfs v0.12.0 // indirect
go.opentelemetry.io/contrib v1.16.1 // indirect
google.golang.org/genproto/googleapis/api v0.0.0-20230711160842-782d3b101e98 // indirect
google.golang.org/genproto/googleapis/rpc v0.0.0-20230711160842-782d3b101e98 // indirect
@@ -38,18 +38,18 @@ require (
github.com/go-logr/stdr v1.2.2 // indirect
github.com/golang/protobuf v1.5.3 // indirect
github.com/grpc-ecosystem/grpc-gateway/v2 v2.16.0 // indirect
github.com/prometheus/client_golang v1.16.0
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.42.0
github.com/prometheus/client_golang v1.17.0
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.44.0
go.opentelemetry.io/contrib/instrumentation/runtime v0.42.0
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.18.0 // indirect
go.opentelemetry.io/otel/exporters/prometheus v0.39.0
go.opentelemetry.io/otel/exporters/prometheus v0.41.0
go.opentelemetry.io/otel/metric v1.18.0
go.opentelemetry.io/otel/sdk v1.18.0
go.opentelemetry.io/otel/trace v1.18.0
go.opentelemetry.io/proto/otlp v1.0.0 // indirect
golang.org/x/net v0.12.0 // indirect
golang.org/x/sys v0.12.0 // indirect
golang.org/x/text v0.11.0 // indirect
golang.org/x/net v0.17.0 // indirect
golang.org/x/sys v0.13.0 // indirect
golang.org/x/text v0.13.0 // indirect
google.golang.org/grpc v1.58.0 // indirect
google.golang.org/protobuf v1.31.0 // indirect
)

36
go.sum
View File

@@ -50,14 +50,14 @@ github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyua
github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/prometheus/client_golang v1.16.0 h1:yk/hx9hDbrGHovbci4BY+pRMfSuuat626eFsHb7tmT8=
github.com/prometheus/client_golang v1.16.0/go.mod h1:Zsulrv/L9oM40tJ7T815tM89lFEugiJ9HzIqaAx4LKc=
github.com/prometheus/client_model v0.4.0 h1:5lQXD3cAg1OXBf4Wq03gTrXHeaV0TQvGfUooCfx1yqY=
github.com/prometheus/client_model v0.4.0/go.mod h1:oMQmHW1/JoDwqLtg57MGgP/Fb1CJEYF2imWWhWtMkYU=
github.com/prometheus/client_golang v1.17.0 h1:rl2sfwZMtSthVU752MqfjQozy7blglC+1SOtjMAMh+Q=
github.com/prometheus/client_golang v1.17.0/go.mod h1:VeL+gMmOAxkS2IqfCq0ZmHSL+LjWfWDUmp1mBz9JgUY=
github.com/prometheus/client_model v0.4.1-0.20230718164431-9a2bf3000d16 h1:v7DLqVdK4VrYkVD5diGdl4sxJurKJEMnODWRJlxV9oM=
github.com/prometheus/client_model v0.4.1-0.20230718164431-9a2bf3000d16/go.mod h1:oMQmHW1/JoDwqLtg57MGgP/Fb1CJEYF2imWWhWtMkYU=
github.com/prometheus/common v0.44.0 h1:+5BrQJwiBB9xsMygAB3TNvpQKOwlkc25LbISbrdOOfY=
github.com/prometheus/common v0.44.0/go.mod h1:ofAIvZbQ1e/nugmZGz4/qCb9Ap1VoSTIO7x0VV9VvuY=
github.com/prometheus/procfs v0.11.0 h1:5EAgkfkMl659uZPbe9AS2N68a7Cc1TJbPEuGzFuRbyk=
github.com/prometheus/procfs v0.11.0/go.mod h1:nwNm2aOCAYw8uTR/9bWRREkZFxAUcWzPHWJq+XBB/FM=
github.com/prometheus/procfs v0.12.0 h1:jluTpSng7V9hY0O2R9DzzJHYb2xULk9VTR1V1R/k6Bo=
github.com/prometheus/procfs v0.12.0/go.mod h1:pcuDEFsWDnvcgNzo4EEweacyhjeA9Zk3cnaOZAZEfOo=
github.com/ravilushqa/otelgqlgen v0.13.1 h1:V+zFE75iDd2/CSzy5kKnb+Fi09SsE5535wv9U2nUEFE=
github.com/ravilushqa/otelgqlgen v0.13.1/go.mod h1:ZIyWykK2paCuNi9k8gk5edcNSwDJuxZaW90vZXpafxw=
github.com/sergi/go-diff v1.3.1 h1:xkr+Oxo4BOQKmkn/B9eMK0g5Kg/983T9DqqPHwYqD+8=
@@ -69,8 +69,8 @@ github.com/vektah/gqlparser/v2 v2.5.6 h1:Ou14T0N1s191eRMZ1gARVqohcbe1e8FrcONScsq
github.com/vektah/gqlparser/v2 v2.5.6/go.mod h1:z8xXUff237NntSuH8mLFijZ+1tjV1swDbpDqjJmk6ME=
go.opentelemetry.io/contrib v1.16.1 h1:EpASvVyGx6/ZTlmXzxYfTMZxHROelCeXXa2uLiwltcs=
go.opentelemetry.io/contrib v1.16.1/go.mod h1:gIzjwWFoGazJmtCaDgViqOSJPde2mCWzv60o0bWPcZs=
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.42.0 h1:pginetY7+onl4qN1vl0xW/V/v6OBZ0vVdH+esuJgvmM=
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.42.0/go.mod h1:XiYsayHc36K3EByOO6nbAXnAWbrUxdjUROCEeeROOH8=
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.44.0 h1:KfYpVmrjI7JuToy5k8XV3nkapjWx48k4E4JOtVstzQI=
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.44.0/go.mod h1:SeQhzAEccGVZVEy7aH87Nh0km+utSpo1pTv6eMMop48=
go.opentelemetry.io/contrib/instrumentation/runtime v0.42.0 h1:EbmAUG9hEAMXyfWEasIt2kmh/WmXUznUksChApTgBGc=
go.opentelemetry.io/contrib/instrumentation/runtime v0.42.0/go.mod h1:rD9feqRYP24P14t5kmhNMqsqm1jvKmpx2H2rKVw52V8=
go.opentelemetry.io/otel v1.18.0 h1:TgVozPGZ01nHyDZxK5WGPFB9QexeTMXEH7+tIClWfzs=
@@ -79,29 +79,29 @@ go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.18.0 h1:IAtl+7gua134xcV3Nie
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.18.0/go.mod h1:w+pXobnBzh95MNIkeIuAKcHe/Uu/CX2PKIvBP6ipKRA=
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.18.0 h1:6pu8ttx76BxHf+xz/H77AUZkPF3cwWzXqAUsXhVKI18=
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.18.0/go.mod h1:IOmXxPrxoxFMXdNy7lfDmE8MzE61YPcurbUm0SMjerI=
go.opentelemetry.io/otel/exporters/prometheus v0.39.0 h1:whAaiHxOatgtKd+w0dOi//1KUxj3KoPINZdtDaDj3IA=
go.opentelemetry.io/otel/exporters/prometheus v0.39.0/go.mod h1:4jo5Q4CROlCpSPsXLhymi+LYrDXd2ObU5wbKayfZs7Y=
go.opentelemetry.io/otel/exporters/prometheus v0.41.0 h1:A3/bhjP5SmELy8dcpK+uttHeh9Qrh+YnS16/VzrztRQ=
go.opentelemetry.io/otel/exporters/prometheus v0.41.0/go.mod h1:mKuXEMi9suyyNJQ99SZCO0mpWGFe0MIALtjd3r6uo7Q=
go.opentelemetry.io/otel/metric v1.18.0 h1:JwVzw94UYmbx3ej++CwLUQZxEODDj/pOuTCvzhtRrSQ=
go.opentelemetry.io/otel/metric v1.18.0/go.mod h1:nNSpsVDjWGfb7chbRLUNW+PBNdcSTHD4Uu5pfFMOI0k=
go.opentelemetry.io/otel/sdk v1.18.0 h1:e3bAB0wB3MljH38sHzpV/qWrOTCFrdZF2ct9F8rBkcY=
go.opentelemetry.io/otel/sdk v1.18.0/go.mod h1:1RCygWV7plY2KmdskZEDDBs4tJeHG92MdHZIluiYs/M=
go.opentelemetry.io/otel/sdk/metric v0.39.0 h1:Kun8i1eYf48kHH83RucG93ffz0zGV1sh46FAScOTuDI=
go.opentelemetry.io/otel/sdk/metric v0.39.0/go.mod h1:piDIRgjcK7u0HCL5pCA4e74qpK/jk3NiUoAHATVAmiI=
go.opentelemetry.io/otel/sdk/metric v0.41.0 h1:c3sAt9/pQ5fSIUfl0gPtClV3HhE18DCVzByD33R/zsk=
go.opentelemetry.io/otel/sdk/metric v0.41.0/go.mod h1:PmOmSt+iOklKtIg5O4Vz9H/ttcRFSNTgii+E1KGyn1w=
go.opentelemetry.io/otel/trace v1.18.0 h1:NY+czwbHbmndxojTEKiSMHkG2ClNH2PwmcHrdo0JY10=
go.opentelemetry.io/otel/trace v1.18.0/go.mod h1:T2+SGJGuYZY3bjj5rgh/hN7KIrlpWC5nS8Mjvzckz+0=
go.opentelemetry.io/proto/otlp v1.0.0 h1:T0TX0tmXU8a3CbNXzEKGeU5mIVOdf0oykP+u2lIVU/I=
go.opentelemetry.io/proto/otlp v1.0.0/go.mod h1:Sy6pihPLfYHkr3NkUbEhGHFhINUSI/v80hjKIs5JXpM=
go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0=
go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y=
golang.org/x/net v0.12.0 h1:cfawfvKITfUsFCeJIHJrbSxpeu/E81khclypR0GVT50=
golang.org/x/net v0.12.0/go.mod h1:zEVYFnQC7m/vmpQFELhcD1EWkZlX69l4oqgmer6hfKA=
golang.org/x/net v0.17.0 h1:pVaXccu2ozPjCXewfr1S7xza/zcXTity9cCdXQYSjIM=
golang.org/x/net v0.17.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE=
golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.3.0 h1:ftCYgMx6zT/asHUrPw8BLLscYtGznsLAnjq5RH9P66E=
golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y=
golang.org/x/sys v0.12.0 h1:CM0HF96J0hcLAwsHPJZjfdNzs0gftsLfgKt57wWHJ0o=
golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/text v0.11.0 h1:LAntKIrcmeSKERyiOh0XMV39LXS8IE9UL2yP7+f5ij4=
golang.org/x/text v0.11.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE=
golang.org/x/sys v0.13.0 h1:Af8nKPmuFypiUBjVoU9V20FiaFXOcuZI21p0ycVYYGE=
golang.org/x/sys v0.13.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/text v0.13.0 h1:ablQoSUd0tRdKxZewP80B+BaqeKJuVhuRxj/dkrun3k=
golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
google.golang.org/genproto v0.0.0-20230711160842-782d3b101e98 h1:Z0hjGZePRE0ZBWotvtrwxFNrNE9CUAGtplaDK5NNI/g=
google.golang.org/genproto/googleapis/api v0.0.0-20230711160842-782d3b101e98 h1:FmF5cCW94Ij59cfpoLiwTgodWmm60eEV0CjlsVg2fuw=

189
grug/math/math.go Normal file
View File

@@ -0,0 +1,189 @@
// grug math is an unbounded precision math library for integers. It is not designed to be performant in any means. But as an example of how one works.
package math
import "strconv"
type Number []rune
func NewNumber() *Number {
return &Number{}
}
func (*Number) FromString(s string) *Number {
for _, a := range s {
if !(a >= '0' && a <= '9') {
return nil
}
}
var n Number = []rune(s)
i:=0
for range n[:len(n)-1] {
if n[i] == 0 || n[i] == '0' {
i++
} else {
break
}
}
n = n[i:]
return &n
}
func (*Number) FromInt(i int) *Number {
s := strconv.Itoa(i)
var n Number = []rune(s)
return &n
}
func (n *Number) String() string {
if n == nil || len(*n) == 0 {
return "NaN"
}
return string(*n)
}
func (n *Number) Add(a *Number) *Number {
if n == nil || a == nil {
return nil
}
lenN, lenA := len(*n), len(*a)
sum := make(Number, max(lenN, lenA)+1)
for i := range sum[:len(sum)-1] {
ii := len(sum) - i - 1
switch {
case lenN == lenA:
j := (*n)[lenN-i-1]
k := (*a)[lenA-i-1]
sum[ii-1], sum[ii] = add(j, k, sum[ii])
case lenN > lenA:
j := (*n)[lenN-i-1]
k := '0'
if i < lenA {
k = (*a)[lenA-i-1]
}
sum[ii-1], sum[ii] = add(j, k, sum[ii])
case lenN < lenA:
j := '0'
if i < lenN {
j = (*n)[lenN-i-1]
}
k := (*a)[lenA-i-1]
sum[ii-1], sum[ii] = add(j, k, sum[ii])
}
}
// Trim the extra 0 if present
if sum[0] == 0 || sum[0] == '0' {
sum = sum[1:]
}
return &sum
}
func (n *Number) Sub(s *Number) *Number {
if n == nil || s == nil {
return nil
}
lenN, lenA := len(*n), len(*s)
sum := make(Number, max(lenN, lenA)+1)
for i := range sum[:len(sum)-1] {
ii := len(sum) - i - 1
switch {
case lenN == lenA:
j := (*n)[lenN-i-1]
k := (*s)[lenA-i-1]
c := '0'
if i+1 < lenN {
c = (*n)[lenN-i-2]
}
sum[ii-1], sum[ii] = sub(j, k, c)
case lenN > lenA:
j := (*n)[lenN-i-1]
k := '0'
if i < lenA {
k = (*s)[lenA-i-1]
}
c := '0'
if i+1 < lenN {
c = (*n)[lenN-i-2]
}
sum[ii-1], sum[ii] = sub(j, k, c)
if i+1 < lenN {
(*n)[lenN-i-2] =sum[ii-1]
}
case lenN < lenA:
j := '0'
if i < lenN {
j = (*n)[lenN-i-1]
}
k := (*s)[lenA-i-1]
c := '0'
if i+1 < lenN {
c = (*n)[lenN-i-2]
}
sum[ii-1], sum[ii] = sub(j, k, c)
}
}
// Trim the extra 0 if present
i:=0
for range sum[:len(sum)-1] {
if sum[i] == 0 || sum[i] == '0' {
i++
} else {
break
}
}
sum = sum[i:]
return &sum
}
func friends(r rune) (int32, int32) {
return 1, 10 - int32(r-'0')
}
func add(a, b, c rune) (rune, rune) {
up, dn := friends(b)
if c == 0 {
c = '0'
}
a = a + c - '0'
if a-dn < '0' {
return '0', a + b - '0'
}
return c + up, a - dn
}
func sub(a, b, c rune) (rune, rune) {
dn, up := friends(b)
if c == 0 {
c = '0'
}
if a+up > '9' {
return c, a - b + '0'
}
return c - dn, a + up
}

74
grug/math/math_test.go Normal file
View File

@@ -0,0 +1,74 @@
package math_test
import (
"testing"
"github.com/matryer/is"
"go.sour.is/pkg/grug/math"
)
func TestNumber(t *testing.T) {
is := is.New(t)
n := math.NewNumber().FromInt(100)
is.Equal(n.String(), "100")
n = n.FromString("00001")
is.Equal(n.String(), "1")
n = n.FromString("1x0")
is.True(n==nil)
is.Equal(n.String(), "NaN")
n = n.FromString("200")
is.True(n!=nil)
is.Equal(n.String(), "200")
n = (&math.Number{}).FromString("300")
is.True(n!=nil)
is.Equal(n.String(), "300")
}
func TestAdd(t *testing.T) {
is := is.New(t)
n := math.NewNumber().FromString("100")
n = n.Add(nil)
is.Equal(n.String(), "NaN")
n = n.FromInt(100)
n = n.Add(n.FromString("900"))
is.Equal(n.String(), "1000")
n = n.Add(math.NewNumber())
is.Equal(n.String(), "1000")
n = n.Add(n.FromString("10"))
is.Equal(n.String(), "1010")
n = n.Add(n.FromString("10000"))
is.Equal(n.String(), "11010")
n = n.Add(n.FromString("9000"))
is.Equal(n.String(), "20010")
}
func TestSub(t *testing.T) {
is := is.New(t)
n := math.NewNumber()
// n = n.FromString("100")
// n = n.Sub(n.FromInt(100))
// is.Equal(n.String(), "0")
// n = n.FromString("200")
// n = n.Sub(n.FromInt(100))
// is.Equal(n.String(), "100")
n = n.FromString("100")
n = n.Sub(n.FromInt(50))
is.Equal(n.String(), "50")
}

View File

@@ -16,7 +16,6 @@ import (
"go.opentelemetry.io/otel/exporters/prometheus"
api "go.opentelemetry.io/otel/metric"
sdk "go.opentelemetry.io/otel/sdk/metric"
"go.opentelemetry.io/otel/sdk/metric/aggregation"
"go.opentelemetry.io/otel/sdk/resource"
)
@@ -59,7 +58,7 @@ func initMetrics(ctx context.Context, name string) (context.Context, func() erro
sdk.WithView(sdk.NewView(
sdk.Instrument{Name: "histogram_*"},
sdk.Stream{
Aggregation: aggregation.ExplicitBucketHistogram{
Aggregation: sdk.AggregationExplicitBucketHistogram{
Boundaries: []float64{
2 << 6, 2 << 8, 2 << 10, 2 << 12, 2 << 14, 2 << 16, 2 << 18, 2 << 20, 2 << 22, 2 << 24, 2 << 26, 2 << 28,
},

View File

@@ -71,7 +71,7 @@ func (w wrapSpan) AddEvent(name string, options ...trace.EventOption) {
args[2*i+1] = a.Value
}
slog.Info(name, args...)
slog.Debug(name, args...)
}
func (w wrapSpan) RecordError(err error, options ...trace.EventOption) {
@@ -142,7 +142,7 @@ func initTracing(ctx context.Context, name string) (context.Context, func() erro
return ctx, nil
}
exporterAddr := env.Default("EV_TRACE_ENDPOINT", "")
exporterAddr := env.Default("TRACE_ENDPOINT", "")
if exporterAddr == "" {
return ctx, nil
}

View File

@@ -93,7 +93,7 @@ func (s *Harness) Run(ctx context.Context, appName, version string) error {
span.End()
}
g, _ := errgroup.WithContext(ctx)
g, ctx := errgroup.WithContext(ctx)
g.Go(func() error {
<-ctx.Done()
// shutdown jobs
@@ -111,7 +111,10 @@ func (s *Harness) Run(ctx context.Context, appName, version string) error {
close(s.onRunning)
err := g.Wait()
if err != nil {
log.Printf("Shutdown due to error: %s", err)
}
return err
}