github.com/cockroachdb/tools@v0.0.0-20230222021103-a6d27438930d/go/ssa/interp/testdata/src/fmt/fmt.go (about)

     1  package fmt
     2  
     3  import (
     4  	"errors"
     5  	"strings"
     6  )
     7  
     8  func Sprint(args ...interface{}) string
     9  
    10  func Sprintln(args ...interface{}) string {
    11  	return Sprint(args...) + "\n"
    12  }
    13  
    14  func Print(args ...interface{}) (int, error) {
    15  	var n int
    16  	for i, arg := range args {
    17  		if i > 0 {
    18  			print(" ")
    19  			n++
    20  		}
    21  		msg := Sprint(arg)
    22  		n += len(msg)
    23  		print(msg)
    24  	}
    25  	return n, nil
    26  }
    27  
    28  func Println(args ...interface{}) {
    29  	Print(args...)
    30  	println()
    31  }
    32  
    33  // formatting is too complex to fake
    34  // handle the bare minimum needed for tests
    35  
    36  func Printf(format string, args ...interface{}) (int, error) {
    37  	msg := Sprintf(format, args...)
    38  	print(msg)
    39  	return len(msg), nil
    40  }
    41  
    42  func Sprintf(format string, args ...interface{}) string {
    43  	// handle extremely simple cases that appear in tests.
    44  	if len(format) == 0 {
    45  		return ""
    46  	}
    47  	switch {
    48  	case strings.HasPrefix("%v", format) || strings.HasPrefix("%s", format):
    49  		return Sprint(args[0]) + Sprintf(format[2:], args[1:]...)
    50  	case !strings.HasPrefix("%", format):
    51  		return format[:1] + Sprintf(format[1:], args...)
    52  	default:
    53  		panic("unsupported format string for testing Sprintf")
    54  	}
    55  }
    56  
    57  func Errorf(format string, args ...interface{}) error {
    58  	msg := Sprintf(format, args...)
    59  	return errors.New(msg)
    60  }