/**
* TOON Encoder Tests
*/
const { ToonEncoder } = require('../src/toon-encoder.js');
console.log('=== TOON Encoder Tests ===\n');
// Test 1: JSON array encoding
console.log('Test 1: JSON Array');
const jsonData = [
{ id: 1, name: 'Product A', price: 99.99, active: true },
{ id: 2, name: 'Product B', price: 149.99, active: false },
{ id: 3, name: 'Product C', price: 29.99, active: true },
];
const jsonStr = JSON.stringify(jsonData, null, 2);
const toon = ToonEncoder.encode(jsonData);
const stats = ToonEncoder.getStats(jsonStr, toon);
console.log('Original JSON:');
console.log(jsonStr);
console.log('\nTOON:');
console.log(toon);
console.log('\nStats:', stats);
console.log('');
// Test 2: CSV parsing and encoding
console.log('Test 2: CSV Input');
const csvData = `name,age,city
Alice,30,New York
Bob,25,Los Angeles
Charlie,35,Chicago`;
const csvToon = ToonEncoder.encode(csvData, { format: 'csv' });
console.log('Original CSV:');
console.log(csvData);
console.log('\nTOON:');
console.log(csvToon);
console.log('');
// Test 3: XML parsing
console.log('Test 3: XML Input');
const xmlData = `<products>
<product><id>1</id><name>Widget</name><price>9.99</price></product>
<product><id>2</id><name>Gadget</name><price>19.99</price></product>
</products>`;
const xmlToon = ToonEncoder.encode(xmlData, { format: 'xml' });
console.log('Original XML:');
console.log(xmlData);
console.log('\nTOON:');
console.log(xmlToon);
console.log('');
// Test 4: Decode TOON back to JSON
console.log('Test 4: Decode TOON');
const decoded = ToonEncoder.decode(toon);
console.log('Decoded:', JSON.stringify(decoded, null, 2));
console.log('');
// Test 5: Format detection
console.log('Test 5: Format Detection');
console.log('JSON array:', ToonEncoder.detectFormat('[{"a":1}]'));
console.log('JSON object:', ToonEncoder.detectFormat('{"a":1}'));
console.log('CSV:', ToonEncoder.detectFormat('a,b,c\n1,2,3'));
console.log('XML:', ToonEncoder.detectFormat('<root><item>test</item></root>'));
console.log('');
// Test 6: Large dataset savings
console.log('Test 6: Large Dataset (100 items)');
const largeData = [];
for (let i = 0; i < 100; i++) {
largeData.push({
id: i,
name: `Product ${i}`,
price: Math.random() * 500,
category: ['electronics', 'clothing', 'books'][i % 3],
inStock: Math.random() > 0.5,
});
}
const largeJson = JSON.stringify(largeData);
const largeToon = ToonEncoder.encode(largeData);
const largeStats = ToonEncoder.getStats(largeJson, largeToon);
console.log(`Original: ${largeStats.original.chars} chars (~${largeStats.original.tokens} tokens)`);
console.log(`TOON: ${largeStats.encoded.chars} chars (~${largeStats.encoded.tokens} tokens)`);
console.log(`Savings: ${largeStats.savings.percent}`);
console.log('\n=== All tests completed ===');