From 8c3a8a47dd17172d10fa71e67e44785e04773eb3 Mon Sep 17 00:00:00 2001 From: David Tolnay Date: Sat, 11 Dec 2021 21:36:51 -0800 Subject: [PATCH] Add latex code for performance chart --- Cargo.toml | 2 +- chart/.gitignore | 7 ++++ chart/performance.tex | 79 ++++++++++++++++++++++++++++++++++++++++++ performance.png | Bin 74625 -> 78406 bytes 4 files changed, 87 insertions(+), 1 deletion(-) create mode 100644 chart/.gitignore create mode 100644 chart/performance.tex diff --git a/Cargo.toml b/Cargo.toml index 87ae67c..b68fdc8 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -9,7 +9,7 @@ repository = "https://github.com/dtolnay/itoa" documentation = "https://docs.rs/itoa" categories = ["value-formatting"] readme = "README.md" -exclude = ["performance.png"] +exclude = ["performance.png", "chart/**"] edition = "2018" [package.metadata.docs.rs] diff --git a/chart/.gitignore b/chart/.gitignore new file mode 100644 index 0000000..27572bd --- /dev/null +++ b/chart/.gitignore @@ -0,0 +1,7 @@ +*.aux +*.fdb_latexmk +*.fls +*.log +*.pdf +*.png +*.svg diff --git a/chart/performance.tex b/chart/performance.tex new file mode 100644 index 0000000..3ad1ff9 --- /dev/null +++ b/chart/performance.tex @@ -0,0 +1,79 @@ +\documentclass{standalone} +\usepackage{pgfplots} +\usepackage{sansmath} +\pgfplotsset{compat=1.16} +\definecolor{itoa}{HTML}{3366FF} +\definecolor{std}{HTML}{949494} +\definecolor{bg}{HTML}{CFCFCF} +\begin{document} +\begin{tikzpicture} +\edef\entries{ + "$0${\enspace}as{\enspace}i16", + "$0${\enspace}as{\enspace}u64", + "$-32768${\enspace}as{\enspace}i16", + "$4294967295${\enspace}as{\enspace}u64", + "$18446744073709551615${\enspace}as{\enspace}u64", +} +\begin{axis}[ + width=5in, + height=3.5in, + ybar, + ymin=0, + bar width=18pt, + enlarge x limits={abs=31pt}, + ylabel={nanos for one call to write}, + legend style={ + anchor=north west, + at={(0.025,0.975)}, + legend columns=1, + draw=none, + fill=none, + }, + legend entries={ + itoa::Buffer::new().format(value)\\ + std::write!(\&mut buf, ``\{\}'', value)\\ + }, + legend cell align=left, + xtick={-0.5,0.5,1.5,2.5,3.5,4.5}, + xticklabels={}, + xtick pos=left, + visualization depends on={y \as \rawy}, + every node near coord/.append style={ + shift={(axis direction cs:0,-\rawy/2)}, + rotate=90, + anchor=center, + font=\sansmath\sffamily, + }, + axis background/.style={fill=bg}, + tick label style={font=\sansmath\sffamily}, + every axis label={font=\sansmath\sffamily}, + legend style={font=\sansmath\sffamily}, + label style={font=\sansmath\sffamily}, +] + \addplot[ + black, + fill=itoa, + area legend, + nodes near coords={}, + ] coordinates { + (0, 1) + (1, 1) + (2, 3) + (3, 5) + (4, 10) + }; + \addplot[ + black, + fill=std, + area legend, + nodes near coords=\pgfmathsetmacro{\input}{{\entries}[\coordindex]}\input, + ] coordinates { + (0, 16) + (1, 14) + (2, 20) + (3, 18) + (4, 24) + }; +\end{axis} +\end{tikzpicture} +\end{document} diff --git a/performance.png b/performance.png index 1e23b7123d6aa8bf373789ae5340c167bfe278b0..729ee6162898589927160517325e0341084365f0 100644 GIT binary patch literal 78406 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