discriminatedUnion.js 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. import Benchmark from "benchmark";
  2. import { z } from "zod/v3";
  3. const doubleSuite = new Benchmark.Suite("z.discriminatedUnion: double");
  4. const manySuite = new Benchmark.Suite("z.discriminatedUnion: many");
  5. const aSchema = z.object({
  6. type: z.literal("a"),
  7. });
  8. const objA = {
  9. type: "a",
  10. };
  11. const bSchema = z.object({
  12. type: z.literal("b"),
  13. });
  14. const objB = {
  15. type: "b",
  16. };
  17. const cSchema = z.object({
  18. type: z.literal("c"),
  19. });
  20. const objC = {
  21. type: "c",
  22. };
  23. const dSchema = z.object({
  24. type: z.literal("d"),
  25. });
  26. const double = z.discriminatedUnion("type", [aSchema, bSchema]);
  27. const many = z.discriminatedUnion("type", [aSchema, bSchema, cSchema, dSchema]);
  28. doubleSuite
  29. .add("valid: a", () => {
  30. double.parse(objA);
  31. })
  32. .add("valid: b", () => {
  33. double.parse(objB);
  34. })
  35. .add("invalid: null", () => {
  36. try {
  37. double.parse(null);
  38. }
  39. catch (_err) { }
  40. })
  41. .add("invalid: wrong shape", () => {
  42. try {
  43. double.parse(objC);
  44. }
  45. catch (_err) { }
  46. })
  47. .on("cycle", (e) => {
  48. console.log(`${doubleSuite.name}: ${e.target}`);
  49. });
  50. manySuite
  51. .add("valid: a", () => {
  52. many.parse(objA);
  53. })
  54. .add("valid: c", () => {
  55. many.parse(objC);
  56. })
  57. .add("invalid: null", () => {
  58. try {
  59. many.parse(null);
  60. }
  61. catch (_err) { }
  62. })
  63. .add("invalid: wrong shape", () => {
  64. try {
  65. many.parse({ type: "unknown" });
  66. }
  67. catch (_err) { }
  68. })
  69. .on("cycle", (e) => {
  70. console.log(`${manySuite.name}: ${e.target}`);
  71. });
  72. export default {
  73. suites: [doubleSuite, manySuite],
  74. };