Best Ginkgo code snippet using vendored.FIt
packong.go
Source:packong.go
1package packong2import (3 "errors"4 "fmt"5 "io"6 "math"7 "sort"8 "strconv"9 "strings"10 "sync"11 "github.com/innermond/packong/internal/svg"12 "github.com/innermond/pak"13)14const (15 CONTINUE_FIT_OP = iota16 ABORT_FIT_OP17)18// strategies used for packing boxes on mother box19var strategies = map[string]*pak.Base{20 "BestAreaFit": &pak.Base{&pak.BestAreaFit{}},21 "BestLongSide": &pak.Base{&pak.BestLongSide{}},22 "BestShortSide": &pak.Base{&pak.BestShortSide{}},23 "BottomLeft": &pak.Base{&pak.BottomLeft{}},24 "BestSimilarRatio": &pak.Base{&pak.BestSimilarRatio{}},25}26// Op describe a boxes packing operation27type Op struct {28 // dimensions's boxes29 dimensions []string30 // filename of a graphic file (svg) with boxes packed31 outname string32 // measurement unit: mm, cm33 unit string34 // mother box dimensions35 width, height float6436 // when true boxes area is surround exactly area boxes swarm37 tight bool38 // plain FALSE indicates svg output is as-inkscape39 plain bool40 // will rendered "wxh" dimensions pair on every box41 showDim bool42 // amount of expanding area's box in order to accomodate to loosing material43 // when a physical cut (that has real width which eats from box area) occurs44 cutwidth float6445 // point from where boxes are lay down46 topleftmargin float6447 // prices:48 // mu - material used, a price that reflects man's work49 // ml - material lost, a price regarding raw material - that's it it doesn't contains man's work50 // pp - perimeter price, a price connected with number of cuts needed for breaking big sheet to needed pieces51 // pd - price of moving to location52 mu, ml, pp, pd float6453 // it considers lost material as valuable as used material54 greedy bool55 // vendors are selling lengths of sheets measured by natural numbers56 vendorsellint bool57 // scale factors: k is for lenghts, k2 is for areas58 k, k2 float6459 // output for web60 outweb bool61 // outline, no fill62 outline bool63}64func NewOp(w, h float64, dd []string, u string) *Op {65 op := &Op{66 width: w,67 height: h,68 dimensions: dd,69 unit: u,70 tight: true,71 plain: true,72 greedy: false,73 vendorsellint: true,74 }75 op.k, op.k2 = op.kk()76 return op77}78func (op *Op) Topleft(tl float64) *Op {79 op.topleftmargin = tl80 return op81}82func (op *Op) WidthHeight(w, h float64) *Op {83 op.width = w84 op.height = h85 return op86}87func (op *Op) Dimensions(dd []string) *Op {88 op.dimensions = dd89 return op90}91func (op *Op) Tight(t bool) *Op {92 op.tight = t93 return op94}95func (op *Op) Appearance(yesno ...bool) *Op {96 switch len(yesno) {97 case 0:98 op.plain = true99 op.showDim = false100 case 1:101 op.plain = yesno[0]102 case 3:103 op.plain = yesno[0]104 op.showDim = yesno[1]105 op.outline = yesno[2]106 default:107 op.plain = yesno[0]108 op.showDim = yesno[1]109 }110 return op111}112func (op *Op) Cutwidth(cw float64) *Op {113 op.cutwidth = cw114 return op115}116func (op *Op) Outname(name string) *Op {117 op.outname = name118 return op119}120func (op *Op) Outweb(val bool) *Op {121 op.outweb = val122 return op123}124func (op *Op) Price(mu, ml, pp, pd float64) *Op {125 op.mu = mu126 op.ml = ml127 op.pp = pp128 op.pd = pd129 return op130}131func (op *Op) Greedy(mood bool) *Op {132 op.greedy = mood133 return op134}135func (op *Op) VendorSellInt(sell bool) *Op {136 op.vendorsellint = sell137 return op138}139func (op *Op) kk() (float64, float64) {140 k := 1000.0141 switch op.unit {142 case "cm":143 k = 100.0144 case "m":145 k = 1.0146 }147 k2 := k * k148 return k, k2149}150func (op *Op) NumStrategy() int {151 return len(strategies)152}153func (op *Op) Fit(pp [][]*pak.Box, deep bool) (*Report, []FitReader, error) {154 wins := map[string][]float64{}155 done := map[string][]*pak.Box{}156 remnants := map[string][]*pak.Box{}157 outputFn := map[string][]FitReader{}158 mx := sync.Mutex{}159 var wg sync.WaitGroup160 peek := 100161 //numAll:= len(pp) * len(strategies)162 var piece [][]*pak.Box163 lenpp := len(pp)164 i := 0165 j := peek166 if j > lenpp {167 j = lenpp168 }169pieced:170 for {171 piece = pp[i:j]172 wg.Add((j - i) * len(strategies))173 for pix, permutated := range piece {174 for strategyName, strategy := range strategies {175 sn := strategyName + ".perm." + strconv.Itoa(i+pix)176 s := strategy177 // unsorted178 go func() {179 bb := []*pak.Box{}180 for _, box := range permutated {181 bb = append(bb, &pak.Box{W: box.W, H: box.H, CanRotate: box.CanRotate})182 }183 mx.Lock()184 wins[sn], done[sn], remnants[sn], outputFn[sn] = op.matchboxes(sn, s, bb)185 defer mx.Unlock()186 defer wg.Done()187 }()188 }189 }190 wg.Wait()191 if j == lenpp {192 break pieced193 }194 i = j195 j += peek196 if j > lenpp {197 j = lenpp198 }199 }200 smallestLostArea, prevSmallestLostArea := math.MaxFloat32, math.MaxFloat32201 winingStrategyName := ""202 for sn, st := range wins {203 smallestLostArea = st[0]/op.k2 - st[2]/op.k2204 if smallestLostArea <= prevSmallestLostArea {205 prevSmallestLostArea = smallestLostArea206 winingStrategyName = sn207 }208 }209 best, ok := wins[winingStrategyName]210 if !ok {211 return nil, nil, errors.New("no wining strategy")212 }213 boxes, ok := remnants[winingStrategyName]214 if !ok {215 return nil, nil, errors.New("remnants error")216 }217 fitboxes, ok := done[winingStrategyName]218 if !ok {219 return nil, nil, errors.New("fitboxes error")220 }221 outFns, ok := outputFn[winingStrategyName]222 if !ok {223 return nil, nil, errors.New("outFns error")224 }225 usedArea, vendoredArea, vendoredLength, boxesArea, boxesPerim, numSheetsUsed := best[0], best[1], best[2], best[3], best[4], best[5]226 lostArea := usedArea - boxesArea227 if op.vendorsellint {228 lostArea = vendoredArea - boxesArea229 }230 procentArea := 0.0231 if usedArea > 0 {232 procentArea = boxesArea * 100 / usedArea233 }234 boxesArea = boxesArea / op.k2235 usedArea = usedArea / op.k2236 vendoredArea = vendoredArea / op.k2237 vendoredLength = vendoredLength / op.k238 lostArea = lostArea / op.k2239 boxesPerim = boxesPerim / op.k240 price := boxesArea*op.mu + lostArea*op.ml + boxesPerim*op.pp + op.pd241 if op.greedy {242 price = boxesArea*op.mu + lostArea*op.mu + boxesPerim*op.pp + op.pd243 }244 rep := &Report{245 WiningStrategyName: winingStrategyName,246 BoxesArea: boxesArea,247 UsedArea: usedArea,248 VendoredArea: vendoredArea,249 VendoredLength: vendoredLength,250 VendoredWidth: op.width / op.k,251 LostArea: lostArea,252 ProcentArea: procentArea,253 BoxesPerim: boxesPerim,254 Price: price,255 UnfitLen: len(boxes),256 UnfitCode: pak.BoxCode(boxes),257 FitCode: pak.BoxCode(fitboxes),258 NumSheetUsed: numSheetsUsed,259 }260 return rep, outFns, nil261}262func (op *Op) BoxesFromString() (boxes []*pak.Box, err error) {263 for _, dd := range op.dimensions {264 d := strings.Split(dd, "x")265 if len(d) == 2 {266 d = append(d, "1", "1") // repeat 1 time267 } else if len(d) == 3 {268 d = append(d, "1") // can rotate269 }270 w, err := strconv.ParseFloat(d[0], 64)271 if err != nil {272 return nil, err273 } else if w <= 0 {274 err = fmt.Errorf("greater than zero condition; received %f", w)275 return nil, err276 }277 h, err := strconv.ParseFloat(d[1], 64)278 if err != nil {279 return nil, err280 } else if h <= 0 {281 err = fmt.Errorf("greater than zero condition; received %f", h)282 return nil, err283 }284 n, err := strconv.Atoi(d[2])285 if err != nil {286 return nil, err287 } else if n < 1 {288 err = fmt.Errorf("greater than zero condition; received %q", n)289 return nil, err290 } else if n > 50 {291 err = fmt.Errorf("lesser than peak condition; received %f", w)292 return nil, err293 }294 r, err := strconv.ParseBool(d[3])295 if err != nil {296 return nil, err297 }298 for n != 0 {299 var val = &pak.Box{W: w + op.cutwidth, H: h + op.cutwidth, CanRotate: r}300 boxes = append(boxes, val)301 n--302 }303 sort.Slice(boxes, func(i, j int) bool {304 return boxes[i].W*boxes[i].H > boxes[j].W*boxes[j].H305 })306 }307 return308}309type FitReader map[string]io.Reader310func (op *Op) matchboxes(strategyName string, strategy *pak.Base, boxes []*pak.Box) ([]float64, []*pak.Box, []*pak.Box, []FitReader) {311 var (312 lenboxes int313 remaining []*pak.Box314 done []*pak.Box315 )316 inx, usedArea, vendoredArea, vendoredLength, boxesArea, boxesPerim := 0, 0.0, 0.0, 0.0, 0.0, 0.0317 fnOutput := []FitReader{}318 lenboxes = len(boxes)319 for lenboxes > 0 {320 // shrink all aria321 op.width -= op.topleftmargin322 op.height -= op.topleftmargin323 bin := pak.NewBin(op.width, op.height, strategy)324 remaining = []*pak.Box{}325 maxx, maxy := 0.0, 0.0326 // partials metrics per cycle327 vendoredAreaForInx, vendoredLengthForInx := 0.0, 0.0328 // pack boxes into bin329 for _, box := range boxes {330 // cutwidth acts like a padding enlarging boxes331 if op.topleftmargin == 0.0 {332 // all boxes touching top or left edges will need a half expand333 if box.X == 0.0 && box.Y == 0.0 { // top left box334 box.W -= op.cutwidth / 2335 box.H -= op.cutwidth / 2336 } else if box.X == 0.0 && box.Y != 0.0 { // leftmost column337 box.W -= op.cutwidth / 2338 box.Y -= op.cutwidth / 2339 } else if box.Y == 0.0 && box.X != 0.0 { // topmost row340 box.H -= op.cutwidth / 2341 box.X -= op.cutwidth / 2342 } else if box.X*box.Y != 0.0 { // the other boxes343 box.X -= op.cutwidth / 2344 box.Y -= op.cutwidth / 2345 }346 } else {347 // no need to adjust W or H but X and Y348 box.X += op.topleftmargin349 box.Y += op.topleftmargin350 }351 if !bin.Insert(box) {352 remaining = append(remaining, box)353 // cannot insert skyp to next box354 continue355 }356 done = append(done, box)357 boxesArea += (box.W * box.H)358 boxesPerim += 2 * (box.W + box.H)359 if box.Y+box.H-op.topleftmargin > maxy {360 maxy = box.Y + box.H - op.topleftmargin361 }362 if box.X+box.W-op.topleftmargin > maxx {363 maxx = box.X + box.W - op.topleftmargin364 }365 }366 // enlarge aria back367 op.width += op.topleftmargin368 op.height += op.topleftmargin369 if op.tight {370 maxx = op.width371 } else {372 maxx = op.width373 maxy = op.height374 }375 vendoredAreaForInx = (maxx * maxy)376 usedArea += vendoredAreaForInx377 if op.vendorsellint {378 // vendors sells integers so convert the maxy into meters, find closest integer and then convert to mm379 vendoredAreaForInx = math.Ceil(maxy/op.k) * op.k * maxx380 vendoredArea += vendoredAreaForInx381 } else {382 vendoredArea = usedArea383 }384 vendoredLengthForInx = vendoredAreaForInx / op.width385 vendoredLength = vendoredArea / op.width386 inx++387 if len(remaining) == lenboxes {388 break389 }390 lenboxes = len(remaining)391 boxes = remaining[:]392 if op.outname != "" {393 // vendoredLength is a fraction associated with inx cycle from cummulative vendoredLength394 func(inx int, boxes []*pak.Box, vendoredLengthForInx float64) {395 fn := fmt.Sprintf("%s.%d.%s.svg", op.outname, inx, strategyName)396 var s string397 if op.outweb {398 s = svg.StartWeb(op.width, vendoredLengthForInx+op.topleftmargin, op.plain)399 } else {400 s = svg.Start(op.width, vendoredLengthForInx+op.topleftmargin, op.unit, op.plain)401 }402 si, err := svg.Out(boxes, op.cutwidth, op.topleftmargin, op.width, op.unit, op.plain, op.showDim, op.outline)403 if err != nil {404 return405 }406 s += svg.End(si)407 fnOutput = append(fnOutput, FitReader{fn: strings.NewReader(s)})408 }(inx, bin.Boxes[:], vendoredLengthForInx)409 }410 }411 return []float64{usedArea, vendoredArea, vendoredLength, boxesArea, boxesPerim, float64(inx)}, done, remaining, fnOutput412}413//go:generate json_snake_case -type=Report414type Report struct {415 WiningStrategyName string416 BoxesArea float64417 UsedArea float64418 VendoredArea float64419 VendoredLength float64420 VendoredWidth float64421 LostArea float64422 ProcentArea float64423 BoxesPerim float64424 Price float64425 UnfitLen int426 UnfitCode string427 FitCode string428 NumSheetUsed float64429}...
main.go
Source:main.go
1package main2import (3 "bufio"4 "bytes"5 "errors"6 "flag"7 "fmt"8 "html/template"9 "io"10 "io/ioutil"11 "log"12 "os"13 "strconv"14 "strings"15 "text/tabwriter"16 "github.com/atotto/clipboard"17 "github.com/innermond/packong"18 "github.com/innermond/pak"19)20var (21 dimensions []string22 outname, unit, bigbox string23 wh []string24 width, height float6425 fo string26 tight bool27 plain, showDim, greedy, vendorsellint, deep bool28 cutwidth, topleftmargin float6429 mu, ml, pp, pd, ph float6430 rx float6431 rn string32 showOffer, spor bool33 selltext string34)35func param() error {36 var err error37 flag.StringVar(&outname, "o", "", "name of the maching project")38 flag.StringVar(&unit, "u", "mm", "unit of measurements")39 flag.StringVar(&bigbox, "bb", "0x0", "dimensions as \"wxh\" in units for bigest box / mother surface")40 flag.BoolVar(&tight, "tight", false, "when true only aria used tighten by height is taken into account")41 flag.BoolVar(&plain, "inkscape", true, "when false will save svg as inkscape svg")42 flag.BoolVar(&showDim, "showdim", false, "generate a layer with dimensions \"wxh\" regarding each box")43 flag.BoolVar(&greedy, "greedy", false, "when calculating price material's area lost is considered at full working price")44 flag.BoolVar(&vendorsellint, "vendorsellint", true, "vendors sells an integer number of sheet length")45 flag.BoolVar(&deep, "deep", false, "calculate all boxes permutations")46 flag.BoolVar(&showOffer, "offer", false, "show a text representing offer")47 flag.BoolVar(&spor, "spor", false, "spor")48 flag.StringVar(&fo, "fo", "", "template offer filename")49 flag.Float64Var(&mu, "mu", 15.0, "used material price per 1 square meter")50 flag.Float64Var(&ml, "ml", 5.0, "lost material price per 1 square meter")51 flag.Float64Var(&pp, "pp", 0.25, "perimeter price per 1 linear meter; used for evaluating cuts price")52 flag.Float64Var(&pd, "pd", 15, "travel price to location")53 flag.Float64Var(&ph, "ph", 3.5, "man power price")54 flag.Float64Var(&rx, "rx", 1.0, "rate exchange")55 flag.StringVar(&rn, "rn", "eur", "currency name - it will be used in reports")56 flag.Float64Var(&cutwidth, "cutwidth", 0.0, "the with of material that is lost due to a cut")57 flag.Float64Var(&topleftmargin, "margin", 0.0, "offset from top left margin")58 flag.Parse()59 selltext = `Oferta pentru suprafetele60{{.Dimensions}} in {{.Unit}}61este de {{printf "%.2f" (mul .Price ` + fmt.Sprintf("%.2f", rx) + `)}} ` + rn + ` + TVA.62Include productie, montaj, deplasare.`63 wh = strings.Split(bigbox, "x")64 switch len(wh) {65 case 1:66 wh = append(wh, wh[0])67 case 0:68 return errors.New("need to specify dimensions for big box")69 }70 width, err = strconv.ParseFloat(wh[0], 64)71 if err != nil {72 return errors.New("can't get width")73 }74 height, err = strconv.ParseFloat(wh[1], 64)75 if err != nil {76 return errors.New("can't get height")77 }78 if fo != "" {79 bb, err := ioutil.ReadFile(fo)80 if err != nil {81 return err82 }83 selltext = string(bb)84 }85 dimensions = flag.Args()86 if len(dimensions) == 0 {87 return errors.New("dimensions required")88 }89 flag.Visit(func(f *flag.Flag) {90 switch f.Name {91 case "inkscape":92 plain = false93 case "tight":94 tight = true95 case "showdim":96 showDim = true97 case "greedy":98 greedy = true99 case "deep":100 deep = true101 case "offer":102 showOffer = true103 case "spor":104 spor = true105 }106 })107 return nil108}109type offer struct {110 *packong.Report111 Dimensions, Unit string112}113func main() {114 var (115 rep *packong.Report116 outs []packong.FitReader117 err error118 )119 err = param()120 if err != nil {121 log.Fatal(err)122 }123 op := packong.NewOp(width, height, dimensions, unit).124 Outname(outname).125 Appearance(plain, showDim).126 Cutwidth(cutwidth).127 Price(mu, ml, pp, pd).128 Greedy(greedy).129 VendorSellInt(vendorsellint)130 // if the cut can eat half of its width along cutline131 // we compensate expanding boxes with an entire cut width132 boxes, err := op.BoxesFromString()133 if err != nil {134 log.Fatal(err)135 }136 pp := [][]*pak.Box{boxes}137 if deep {138 pp = packong.Permutations(boxes)139 // take approval from user140 fmt.Printf("%d combinations. Can take a much much longer time. Continue?\n", len(pp))141 var (142 yn string143 r *bufio.Reader = bufio.NewReader(os.Stdin)144 )145 approve:146 for {147 fmt.Println("Enter y to continue or a n to abort")148 yn, err = r.ReadString('\n')149 yn = strings.TrimRight(yn, "\n")150 if err != nil {151 continue152 }153 switch yn {154 case "y":155 break approve156 case "n":157 fmt.Println("user aborted packing operation")158 os.Exit(0)159 }160 }161 }162 rep, outs, err = op.Fit(pp, deep)163 if err != nil {164 log.Fatal(err)165 }166 tw := tabwriter.NewWriter(os.Stdout, 0, 0, 1, ' ', 0)167 if rep.UnfitLen > 0 {168 fmt.Fprintf(tw, "%s\t%d\n", "UnfitLen", rep.UnfitLen)169 fmt.Fprintf(tw, "%s\t%s\n", "UnfitCode", rep.UnfitCode)170 }171 pieces := strings.Join(dimensions, " ")172 fmt.Fprintf(tw, "%s\t%s\n", "StragegyName", rep.WiningStrategyName)173 fmt.Fprintf(tw, "%s\t%s\n", "Pieces", pieces+unit)174 fmt.Fprintf(tw, "%s\t%.2f\n", "BoxesArea", rep.BoxesArea)175 fmt.Fprintf(tw, "%s\t%.2f\n", "UsedArea", rep.UsedArea)176 fmt.Fprintf(tw, "%s\t%.2f\n", "LostArea", rep.LostArea)177 fmt.Fprintf(tw, "%s\t%.2f\n", "VendoredArea", rep.VendoredArea)178 fmt.Fprintf(tw, "%s\t%.2f\n", "VendoredLength", rep.VendoredLength)179 fmt.Fprintf(tw, "%s\t%.2f\n", "VendoredWidth", rep.VendoredWidth)180 fmt.Fprintf(tw, "%s\t%.2f\n", "ProcentArea", rep.ProcentArea)181 fmt.Fprintf(tw, "%s\t%.2f\n", "NumSheetUsed", rep.NumSheetUsed)182 fmt.Fprintf(tw, "%s\t%.2f\n", "Price", rx*rep.Price)183 fmt.Fprintf(tw, "%s\t%.2f\n", "Materials cost", rx*rep.VendoredArea*ml)184 fmt.Fprintf(tw, "%s\t%.2f\n", "Man cost", rx*rep.BoxesArea*ph)185 fmt.Fprintf(tw, "%s\t%.2f\n", "Travel cost", rx*pd)186 if spor {187 fmt.Fprintf(tw, "%s\t%.2f\n", "Spor", rx*(rep.Price-(rep.VendoredArea*ml+rep.BoxesArea*ph+pd)))188 }189 if showOffer {190 mul := func(a float64, b float64) float64 {191 return a * b192 }193 tpl, err := template.New("offer").Funcs(template.FuncMap{"mul": mul}).Parse(selltext)194 if err != nil {195 log.Fatal(err)196 }197 sell := offer{rep, pieces, unit}198 var bb bytes.Buffer199 if err := tpl.Execute(&bb, sell); err != nil {200 log.Fatal(err)201 }202 dotted := strings.Repeat("-", 30)203 offerTxt := bb.String()204 fmt.Fprintf(tw, "%s\n%s\n", dotted, offerTxt)205 err = clipboard.WriteAll(offerTxt)206 if err != nil {207 log.Println(err)208 }209 }210 tw.Flush()211 if len(outname) > 0 {212 errs := writeFiles(outs)213 if len(errs) > 0 {214 log.Println(errs)215 }216 }217}218func writeFiles(outs []packong.FitReader) (errs []error) {219 for _, out := range outs {220 for nm, r := range out {221 w, err := os.Create(nm)222 if err != nil {223 errs = append(errs, err)224 continue225 }226 defer w.Close()227 _, err = io.Copy(w, r)228 if err != nil {229 errs = append(errs, err)230 continue231 }232 }233 }234 return235}...
foo.go
Source:foo.go
1package vendored2func FIt() {3}...
FIt
Using AI Code Generation
1import (2func main() {3 fmt.Println("Hello, playground")4 ginkgo.FIt("test", func() {})5}6import (7func main() {8 fmt.Println("Hello, playground")9 ginkgo.FIt("test", func() {})10}11import (12func main() {13 fmt.Println("Hello, playground")14 ginkgo.FIt("test", func() {})15}16import (17func main() {18 fmt.Println("Hello, playground")19 ginkgo.FIt("test", func() {})20}21import (22func main() {23 fmt.Println("Hello, playground")24 ginkgo.FIt("test", func() {})25}26import (27func main() {28 fmt.Println("Hello, playground")29 ginkgo.FIt("test", func() {})30}31import (32func main()
FIt
Using AI Code Generation
1import (2func main() {3 fmt.Println(abc.Fit(1, 2))4}5import (6func main() {7 fmt.Println(abc.Fit(1, 2))8}9 /usr/local/go/src/github.com/xyz/abc (from $GOROOT)10 /home/user/go/src/github.com/xyz/abc (from $GOPATH)
FIt
Using AI Code Generation
1import (2func main() {3 fmt.Println(yourlibrary.Fit(1))4}5import (6func main() {7 fmt.Println(yourlibrary.Fit(2))8}9import (10func main() {11 fmt.Println(yourlibrary.Fit(3))12}13import (14func main() {15 fmt.Println(yourlibrary.Fit(4))16}17import (18func main() {19 fmt.Println(yourlibrary.Fit(5))20}21import (22func main() {23 fmt.Println(yourlibrary.Fit(6))24}25import (26func main() {27 fmt.Println(yourlibrary.Fit(7))28}29import (30func main() {31 fmt.Println(yourlibrary.Fit(
FIt
Using AI Code Generation
1 /usr/local/go/src/github.com/ashishra0/vendor (from $GOROOT)2 /home/ashishra0/go/src/github.com/ashishra0/vendor (from $GOPATH)3 /usr/local/go/src/github.com/ashishra0/vendor (from $GOROOT)4 /home/ashishra0/go/src/github.com/ashishra0/vendor (from $GOPATH)5 /usr/local/go/src/github.com/ashishra0/vendor (from $GOROOT)6 /home/ashishra0/go/src/github.com/ashishra0/vendor (from $GOPATH)71.go:5: cannot use 1 (type int) as type float64 in argument to vendor.FIt82.go:5: cannot use 1 (type int) as type float64 in argument to vendor.FIt93.go:5: cannot use 1 (type int)
Learn to execute automation testing from scratch with LambdaTest Learning Hub. Right from setting up the prerequisites to run your first automation test, to following best practices and diving deeper into advanced test scenarios. LambdaTest Learning Hubs compile a list of step-by-step guides to help you be proficient with different test automation frameworks i.e. Selenium, Cypress, TestNG etc.
You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.
Get 100 minutes of automation test minutes FREE!!