qr_encode/
lib.rs

1pub mod qr_encoder;
2
3// #![allow(dead_code)]
4
5// pub mod qr_encoder;
6
7// use qr_encoder::util::{codeword_info, square_count};
8// use qr_encoder::config::{ECLevel, QRConfig, EncodingMode, ecc_format};
9// use qr_encoder::cell::CellType;
10// use qr_encoder::qr::QR;
11
12
13// fn qr_config_with_general_opts(version: usize, ec_level: ECLevel, encoding_mode: EncodingMode, message: Vec<u8>) -> QRConfig {
14//     QRConfig {
15//         version: version,
16//         data: message,
17//         encoding: 0,
18//         codewords: vec![],
19//         codeword_properties: codeword_info(version, &ec_level),
20//         mask: 4,
21//         encoding_mode: encoding_mode,
22//         debug_mode: false,
23//         requires_alignment: version > 6,
24//         finder_points: [
25//             (0, 0),
26//             ((square_count(version) - 7), 0),
27//             (0, (square_count(version) - 7))
28//         ],
29//         size: (((version - 1) * 4) + 21),
30//         err_correction_level: ec_level
31//     }
32// }
33
34// fn create_qr(config: &QRConfig) -> QR {
35//     QR {
36//         body: config.create_body() }
37// }
38
39// #[cfg(test)]
40// mod tests {
41//     // use super::qr_encoder::util::{args};
42//     // use super::qr_encoder::qr::{QROptions, QR};
43
44//     // #[test]
45//     // fn test_qr_create() {
46//     //     let qr_opt = args();
47//     // }
48
49//     #[test]
50//     fn test_ecc_version_info() {
51//         use super::qr_encoder::config::ecc_format;
52//         let gen_poly = 7973;
53//         let mut version = 7;
54
55//         let mut expected_outcome = 0b000111110010010100u32;
56//         let mut actual_outcome = ecc_format::<u32>(version, gen_poly, None);
57
58//         assert_eq!(expected_outcome, actual_outcome);
59
60//         version = 8;
61//         expected_outcome = 0b1000010110111100u32;
62//         actual_outcome = ecc_format::<u32>(version, gen_poly, None);
63
64//         assert_eq!(expected_outcome, actual_outcome);
65
66//         version = 33;
67//         expected_outcome = 0b100001011011110000u32;
68//         actual_outcome = ecc_format::<u32>(version, gen_poly, None);
69
70//         assert_eq!(expected_outcome, actual_outcome);
71//     }
72
73//     #[test]
74//     fn test_ecc_format() {
75//         use super::*;
76
77
78//         let message = String::from("Hello, World!").into_bytes();
79//         let mut qr_opts = qr_config_with_general_opts(7, ECLevel::Low, EncodingMode::Byte, message);
80//         let mut qr = create_qr(&qr_opts);
81//         qr.setup(&mut qr_opts);
82//         // qr.encode_data(&qr_opts);
83//         qr_opts.encode_format_areas(&mut qr.body, 4u8);
84
85//         // assert_eq!(4, qr_opts.mask);
86//         let mut index = qr_opts.size * 8;
87//         let mut actual_format_bytestring = 0;
88//         let expected_format_bytestring = 0b110011000101111;
89//         let mut pos = 14;
90
91//         while index >= 8 {
92
93//             let cell = &qr.body[index];
94//             match cell.module_type {
95//                 CellType::Format => {
96//                     if cell.is_black() {
97//                         actual_format_bytestring |= (1 << pos);   
98//                     }
99//                     pos -= 1;
100//                 },
101//                 _ => {}
102//             }
103
104//             if index == 8 {
105//                 break;
106//             }
107
108//             if index % qr_opts.size == 8 {
109//                 index -= qr_opts.size;
110//             } else {
111//                 index += 1;
112//             }
113//         }
114        
115//         assert_eq!(expected_format_bytestring, actual_format_bytestring);
116//     }
117// }