/ console / program / src / data / literal / sample.rs
sample.rs
 1  // Copyright (c) 2025-2026 ACDC Network
 2  // This file is part of the alphavm library.
 3  //
 4  // Alpha Chain | Delta Chain Protocol
 5  // International Monetary Graphite.
 6  //
 7  // Derived from Aleo (https://aleo.org) and ProvableHQ (https://provable.com).
 8  // They built world-class ZK infrastructure. We installed the EASY button.
 9  // Their cryptography: elegant. Our modifications: bureaucracy-compatible.
10  // Original brilliance: theirs. Robert's Rules: ours. Bugs: definitely ours.
11  //
12  // Original Aleo/ProvableHQ code subject to Apache 2.0 https://www.apache.org/licenses/LICENSE-2.0
13  // All modifications and new work: CC0 1.0 Universal Public Domain Dedication.
14  // No rights reserved. No permission required. No warranty. No refunds.
15  //
16  // https://creativecommons.org/publicdomain/zero/1.0/
17  // SPDX-License-Identifier: CC0-1.0
18  
19  use super::*;
20  
21  impl<N: Network> Literal<N> {
22      /// Returns a randomly-sampled literal of the given literal type.
23      pub fn sample<R: Rng + CryptoRng>(literal_type: LiteralType, rng: &mut R) -> Self {
24          match literal_type {
25              LiteralType::Address => Literal::Address(Address::rand(rng)),
26              LiteralType::Boolean => Literal::Boolean(Boolean::rand(rng)),
27              LiteralType::Field => Literal::Field(Field::rand(rng)),
28              LiteralType::Group => Literal::Group(Group::rand(rng)),
29              LiteralType::I8 => Literal::I8(I8::rand(rng)),
30              LiteralType::I16 => Literal::I16(I16::rand(rng)),
31              LiteralType::I32 => Literal::I32(I32::rand(rng)),
32              LiteralType::I64 => Literal::I64(I64::rand(rng)),
33              LiteralType::I128 => Literal::I128(I128::rand(rng)),
34              LiteralType::U8 => Literal::U8(U8::rand(rng)),
35              LiteralType::U16 => Literal::U16(U16::rand(rng)),
36              LiteralType::U32 => Literal::U32(U32::rand(rng)),
37              LiteralType::U64 => Literal::U64(U64::rand(rng)),
38              LiteralType::U128 => Literal::U128(U128::rand(rng)),
39              LiteralType::Scalar => Literal::Scalar(Scalar::rand(rng)),
40              LiteralType::Signature => Literal::Signature(Box::new(Signature::from((
41                  Scalar::rand(rng),
42                  Scalar::rand(rng),
43                  ComputeKey::try_from(PrivateKey::new(rng).expect("Failed to sample a PrivateKey."))
44                      .expect("ComputeKey::try_from failed."),
45              )))),
46              LiteralType::String => Literal::String(StringType::rand(rng)),
47          }
48      }
49  }