diff --git a/.gitignore b/.gitignore index 2ed40ef..268d16a 100644 --- a/.gitignore +++ b/.gitignore @@ -69,3 +69,5 @@ test/atmega328p/out platformio/toolchain-robcmp/bin platformio/toolchain-robcmp/lib platformio/avr-gdb-build +Documentation +hack diff --git a/CMakeLists.txt b/CMakeLists.txt index 8f97c7b..608b87b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -66,7 +66,8 @@ add_dependencies(robcmp parsers) llvm_map_components_to_libnames(llvm_libs support core irreader passes armasmparser armcodegen avrasmparser avrcodegen - x86asmparser x86codegen) + x86asmparser x86codegen + aarch64asmparser aarch64codegen) target_link_libraries(robcmp ${llvm_libs}) diff --git a/hack/avr/Makefile b/hack/avr/Makefile index 67b6c56..195b50a 100644 --- a/hack/avr/Makefile +++ b/hack/avr/Makefile @@ -1,9 +1,9 @@ INCLUDES=-I/Users/thborges/.platformio/packages/toolchain-atmelavr/avr/include #AVRLIB=-L~/.platformio/packages/toolchain-atmelavr/lib/gcc/avr/7.3.0/avr5 -lgcc -CC=/usr/local/robllvm/bin/clang -LLC=/usr/local/robllvm/bin/llc +CC=clang +LLC=llc CCPLAT=-target avr -mmcu=atmega328p -DF_CPU=16000000 -ROBCMP=../../robcmp +ROBCMP=../../build/robcmp AVRDUDECFG=-C /Users/thborges/.platformio/packages/tool-avrdude/avrdude.conf AVRDUDEPORT=`ls /dev/cu.usb*` @@ -36,10 +36,13 @@ all: ${ROBCMP} ${ALL} %.elf : %.o @#${CC} -v ${CCPLAT} ${AVRLIB} $< -o $@ @#avr-gcc -v -mmcu=atmega328p $< -o $@ - avr-ld -o $@ -Tdata=0x800100 $< + #avr-ld -o $@ -Tdata=0x800100 $< + ld.lld -o $@ -Tdata=0x800100 $< + %.hex : %.elf - avr-objcopy -Oihex $< $@ + #avr-objcopy -Oihex $< $@ + llvm-objcopy -Oihex $< $@ %.up: %.hex avrdude ${AVRDUDECFG} -v -V -c arduino -p m328p -U flash:w:$<:i -P ${AVRDUDEPORT} diff --git a/hack/stm32/Makefile b/hack/stm32/Makefile index 5e5e397..d37acf4 100644 --- a/hack/stm32/Makefile +++ b/hack/stm32/Makefile @@ -1,10 +1,11 @@ -#GCC=~/.platformio/packages/toolchain-gccarmnoneeabi/bin/arm-none-eabi-gcc -CC=/usr/local/robllvm/bin/clang -LLC=/usr/local/robllvm/bin/llc -OBJCOPY=/usr/local/robllvm/bin/llvm-objcopy +CC=~/.platformio/packages/toolchain-gccarmnoneeabi/bin/arm-none-eabi-gcc +#CC=/usr/local/opt/llvm/bin/clang +LLC=/usr/local/opt/llvm/bin/llc +OBJCOPY=/usr/local/opt/llvm/bin/llvm-objcopy INCLUDES= -CCPLAT=-target arm-none-eabi -mcpu=cortex-m3 -mthumb -ROBCMP=../../robcmp +#CCPLAT=-target arm-none-eabi -mcpu=cortex-m3 -mthumb +CCPLAT=-mcpu=cortex-m3 -mthumb +ROBCMP=../../build/robcmp USBPORT=`ls /dev/cu.usb*` @@ -15,10 +16,11 @@ ALL=${ALL_C} ${ALL_ROB} all: ${ROBCMP} ${ALL} %.c.ll: %.c - ${CC} ${CCPLAT} -Oz -S -emit-llvm ${INCLUDES} $< -o $@ + #${CC} ${CCPLAT} -Oz -S -emit-llvm ${INCLUDES} $< -o $@ + ${CC} ${CCPLAT} -Os -S -emit-llvm ${INCLUDES} $< -o $@ %.c.o: %.c - ${CC} ${CCPLAT} -Oz -c ${INCLUDES} $< -o $@ + ${CC} -v ${CCPLAT} -Os -c ${INCLUDES} $< -o $@ @@ -34,8 +36,8 @@ all: ${ROBCMP} ${ALL} ${LLC} $< -o $@ -filetype=asm %.elf : %.o - ${CC} -v ${CCPLAT} -nostdlib -Wl,-entry=main -Wl,-Tmemory.lld.ld $< -o $@ - @#${GCC} -mthumb -mcpu=cortex-m3 -nostdlib -Wl,-Tmemory.gcc.ld $< -o $@ + #${CC} ${CCPLAT} -nostdlib -Wl,-entry=main -Wl,-Tmemory.lld.ld $< -o $@ + ${CC} -mthumb -mcpu=cortex-m3 -nostdlib -Wl,-Tmemory.gcc.ld $< -o $@ %.bin : %.elf diff --git a/lib/Makefile b/lib/Makefile index a2a586d..ce47e4a 100644 --- a/lib/Makefile +++ b/lib/Makefile @@ -1,12 +1,20 @@ -GEN=avr5.o +GEN=avr5.o avr51.o cortex-m3-arm-missing.o all: ${GEN} avr5.o: avr5.S @#here we are interested in the fastest possible code, intead of size - @#avr-gcc -mmcu=avr5 -O3 -c $< - clang --target=avr -mmcu=avr5 -O3 -c $< + avr-gcc -mmcu=avr5 -O3 -c $< + @#clang --target=avr -mmcu=avr5 -O3 -c $< + +avr51.o: avr51.S + @#here we are interested in the fastest possible code, intead of size + avr-gcc -mmcu=avr51 -O3 -c $< + @#clang --target=avr -mmcu=avr51 -O3 -c $< + +cortex-m3-arm-missing.o: arm-missing.c + clang --target=arm-none-eabi -mcpu=cortex-m3 -mthumb -O3 -c $< -o $@ clean: rm -f ${GEN} diff --git a/lib/arch/stm32/stm32f1.rob b/lib/arch/stm32/stm32f1.rob index fd86b1c..0e3dfe2 100644 --- a/lib/arch/stm32/stm32f1.rob +++ b/lib/arch/stm32/stm32f1.rob @@ -16,6 +16,48 @@ type stm32f1 implements mcu { return; } + a2 implements digitalport { + void mode_input(PIN_MODE mode, INPUT_MODE cnf) inline { + GPIOA_CRL.mode2 = mode; + GPIOA_CRL.cnf2 = cnf; + } + void mode_output(PIN_MODE mode, OUTPUT_MODE cnf) inline { + GPIOA_CRL.mode2 = mode; + GPIOA_CRL.cnf2 = cnf; + } + void mode(port_mode m) { + APB2EN.iopa = true; + if (m == port_mode.input) { + mode_input(PIN_MODE.INPUT, INPUT_MODE.PULLUPDOWN); + } else { + mode_output(PIN_MODE.OUTPUT50MHz, OUTPUT_MODE.PUSHPULL); + } + } + void set(bool v) inline { GPIOA_ODR.odr2 = v; } + bool get() inline { return GPIOA_IDR.idr2; } + } + + a3 implements digitalport { + void mode_input(PIN_MODE mode, INPUT_MODE cnf) inline { + GPIOA_CRL.mode3 = mode; + GPIOA_CRL.cnf3 = cnf; + } + void mode_output(PIN_MODE mode, OUTPUT_MODE cnf) inline { + GPIOA_CRL.mode3 = mode; + GPIOA_CRL.cnf3 = cnf; + } + void mode(port_mode m) { + APB2EN.iopa = true; + if (m == port_mode.input) { + mode_input(PIN_MODE.INPUT, INPUT_MODE.PULLUPDOWN); + } else { + mode_output(PIN_MODE.OUTPUT50MHz, OUTPUT_MODE.PUSHPULL); + } + } + void set(bool v) inline { GPIOA_ODR.odr3 = v; } + bool get() inline { return GPIOA_IDR.idr3; } + } + c13 implements digitalport { void mode(port_mode m) { APB2EN.iopc = true; @@ -86,6 +128,14 @@ type stm32f1 implements mcu { } } + uint32 micros() { + return SYSTICK_VAL / (clock()/1E6); + } + + uint32 millis() { + return micros() / 1000; + } + spi implements databus { /* setup hardware SPI at: xx = MOSI @@ -100,20 +150,67 @@ type stm32f1 implements mcu { bool has_data() { return false; } bool start_transaction(uint16 address) { return true; } void end_transaction() { } + void async_read_to(interrupt_i8 i) {} databus_protocol get_protocol() { return databus_protocol.SPI; } } - uart0 implements databus { - void setup(uint32 baud) {} - void enable() {} - void disable() {} - void write(uint8 b) {} - void write_array(int8[] data) {} - uint8 read() { return 0; } - bool has_data() { return false; } + uart2 implements databus { + void setup(uint32 baud) { + APB1EN.usart2 = true; // enable usart2 clock + //AHBENR.sdio = true; // enable SDIO clock + APB2EN.afio = true; //? enable alternate function I/O clock + APB2EN.iopa = true; // port A clock + + // set ports a2 (output TX) and a3 (input RX) + a2.mode_output(PIN_MODE.OUTPUT2MHz, OUTPUT_MODE.APUSH_PULL); + a3.mode_input(PIN_MODE.INPUT, INPUT_MODE.FLOATING); + + // assuming reset configuration, that is 8 bits per byte, + // no parity checks, and 1 “stop bit”. + + // set baudrate + uartdiv = clock() / baud; + USART2_BRR.DIV_Fraction = uint4(uartdiv % 16); + USART2_BRR.DIV_Mantissa = uint12(uartdiv / 16); + } + + void async_read_to(interrupt_i8 i) {} + + void enable() { + USART2_CR1.RE = true; // receptor + USART2_CR1.TE = true; // transmiter + USART2_CR1.UE = true; // usart enable + } + + void disable() { + USART2_CR1.UE = false; + } + + void write(uint8 b) inline { + while !USART2_SR.TXE; + USART2_DR.DR = b; + } + + void write_array(int8[] data) { + i = 0u; + while i < data.size { + write(uint8(data[i])); + i++; + } + } + + uint8 read() { + while !USART2_SR.RXNE; + return uint8(USART2_DR.DR); + } + + bool has_data() { + return USART2_SR.RXNE; + } + bool start_transaction(uint16 address) { return true; } void end_transaction() {} @@ -158,6 +255,8 @@ type stm32f1 implements mcu { I2C1_CCR.ccr = uint12(((1.0/400000)/2) / (3.0/clock())); I2C1_TRISE = uint16(clock()/1E6*0.3+1); } + + void async_read_to(interrupt_i8 i) {} void enable() { I2C1_CR1.pe = true; diff --git a/lib/arch/stm32/stm32f1regs.rob b/lib/arch/stm32/stm32f1regs.rob index 8d9928b..261b2e6 100644 --- a/lib/arch/stm32/stm32f1regs.rob +++ b/lib/arch/stm32/stm32f1regs.rob @@ -438,3 +438,66 @@ register I2C_SR2_t I2C2_SR2 at 0x40005818; register I2C_CCR_t I2C2_CCR at 0x4000581C; // I2C 2 T RISE register register uint16 I2C2_TRISE at 0x40005820; + +/* + * USART types + */ + + type SR_t { + PE = false; // Parity error + FE = false; // Framing error + NE = false; // Noise error flag + ORE = false; // Overrun error + IDLE = false; // IDLE line detected + RXNE = false; // Read data register not empty + TC = false; // Transmission complete + TXE = false; // Transmit data register empty + LBD = false; // LIN break detection flag + CTS = false; // CTS flag + _res1 = uint16(0); // Reserved, 22 bits + _res2 = uint6(0); // + } + + type CR1_t { + SBK = false; // Send break + RWU = false; // Receiver wakeup + RE = false; // Receiver enable + TE = false; // Transmitter enable + IDLEIE = false; // IDLE interrupt enable + RXNEIE = false; // RXNE interrupt enable + TCIE = false; // Transmission complete interrupt enable + TXEIE = false; // TXE interrupt enable + PEIE = false; // PE interrupt enable + PS = false; // Parity selection + PCE = false; // Parity control enable + WAKE = false; // Wakeup method + M = false; // Word length + UE = false; // USART enable + _res1 = uint16(0); // Reserved, 18 bits + _res2 = uint2(0); // + } + + type DR_t { + DR = uint9(0); // Data value + _res1 = uint16(0); // Reserved, 23 bits + _res2 = uint7(0); // + } + + type BRR_t { + DIV_Fraction = uint4(0); // fraction of USARTDIV + DIV_Mantissa = uint12(0); // mantissa of USARTDIV + _res1 = uint16(0); // Reserved, 16 bits + } + + // Status register + register SR_t USART2_SR at 0x40004400; + + // Data register + register DR_t USART2_DR at 0x40004404; + + // Baud rate register + register BRR_t USART2_BRR at 0x40004408; + + // Control register 1 + register CR1_t USART2_CR1 at 0x4000440C; + diff --git a/lib/arm-eabi-libgcc.a b/lib/arm-eabi-libgcc.a new file mode 100644 index 0000000..bed37c8 Binary files /dev/null and b/lib/arm-eabi-libgcc.a differ diff --git a/lib/arm-missing.c b/lib/arm-missing.c new file mode 100644 index 0000000..93f3ef8 --- /dev/null +++ b/lib/arm-missing.c @@ -0,0 +1,16 @@ + +void abort (void) { + while(1); +} + +void *memcpy(void *dst, const void *src, unsigned int len) +{ + const char *s = src; + char *d = dst; + + while (len--) + *d++ = *s++; + + return dst; +} + diff --git a/lib/atmega1284p.ld b/lib/atmega1284p.ld new file mode 100644 index 0000000..1c114b9 --- /dev/null +++ b/lib/atmega1284p.ld @@ -0,0 +1,17 @@ +/* + * RobCmp linker script for atmega1284p + */ + +MEMORY +{ + text (rx) : ORIGIN = 0, LENGTH = 128K + data (rw!x) : ORIGIN = 0x800100, LENGTH = 16K + eeprom (rw!x) : ORIGIN = 0x810000, LENGTH = 4K + fuse (rw!x) : ORIGIN = 0x820000, LENGTH = 1K + lock (rw!x) : ORIGIN = 0x830000, LENGTH = 1K + signature (rw!x) : ORIGIN = 0x840000, LENGTH = 1K + user_signatures (rw!x) : ORIGIN = 0x850000, LENGTH = 1K +} + +INCLUDE avr5.ld + diff --git a/lib/atmega1284p.rob b/lib/atmega1284p.rob new file mode 100644 index 0000000..7bab194 --- /dev/null +++ b/lib/atmega1284p.rob @@ -0,0 +1,147 @@ +/* + * Robcmp interruptions vector for atmega1284p + */ + +int8 main(); + +void __do_copy_data() naked { +asm " + ldi r17, hi8(__data_end) + ldi r26, lo8(__data_start) + ldi r27, hi8(__data_start) + ldi r30, lo8(__data_load_start) + ldi r31, hi8(__data_load_start) + rjmp __do_copy_data_start + __do_copy_data_loop: + lpm r0, Z+ + st X+, r0 + __do_copy_data_start: + cpi r26, lo8(__data_end) + cpc r27, r17 + brne __do_copy_data_loop + ret"; +} + +void __do_clear_bss() naked { +asm " + ldi r17, hi8(__bss_end) + ldi r26, lo8(__bss_start) + ldi r27, hi8(__bss_start) + rjmp __do_clear_bss_start + __do_clear_bss_loop: + st X+, r1 + __do_clear_bss_start: + cpi r26, lo8(__bss_end) + cpc r27, r17 + brne __do_clear_bss_loop + ret"; +} + +void __delay_us() naked { +asm " + ldi r18, 5 + __delay_ms_loop: + dec r18 + brne __delay_ms_loop + nop + ret"; +} + +/* Weak definitions for supported interruptions + */ + void irq_usart_rx() naked, weak, section __irqs { } + void irq_usart_tx() naked, weak, section __irqs { } + +/* Timer0 is used to provide milliseconds time readings + */ + const fcpu = 16E6; + const cycles_per_us = fcpu / 1E6; + const usec_per_ovf = (64 * 256) / cycles_per_us; + const millis_per_ovf = usec_per_ovf / 1000; + const millis_frac_per_ovf = uint16(usec_per_ovf % 1000); + timer0_millis = uint32(0); + timer0_fract = uint16(0); + + void irq_timer0_ovf() signal, weak, section __irqs { + timer0_millis += millis_per_ovf; + timer0_fract += millis_frac_per_ovf; + if (timer0_fract > 1000) { + timer0_fract -= 1000; + timer0_millis += 1; + } + } + + register int8 SREG at 0x5f; + + uint32 millis() { + sreg_bkp = SREG; + asm "cli"; + result = timer0_millis; + SREG = sreg_bkp; + return result; + } + +void __default_irq() naked, section __irqs { + asm "jmp __default_irq"; +} + +void __vectors() naked, section __isr { + + /* atmega1284p has 31 interruptions */ + asm "jmp __init"; + asm "jmp __default_irq"; // IRQ0 + asm "jmp __default_irq"; // IRQ1 + asm "jmp __default_irq"; // IRQ2 + asm "jmp __default_irq"; // PCINT0 + asm "jmp __default_irq"; // PCINT1 + asm "jmp __default_irq"; // PCINT2 + asm "jmp __default_irq"; // PCINT3 + asm "jmp __default_irq"; // Watchdog Timer + asm "jmp __default_irq"; // Timer2 Compare A + asm "jmp __default_irq"; // Timer2 Compare B + asm "jmp __default_irq"; // Timer2 Overflow + asm "jmp __default_irq"; // Timer1 Capture + asm "jmp __default_irq"; // Timer1 Compare A + asm "jmp __default_irq"; // Timer1 Compare B + asm "jmp __default_irq"; // Timer1 Overflow + asm "jmp __default_irq"; // Timer0 Compare A + asm "jmp __default_irq"; // Timer0 Compare B + asm "jmp irq_timer0_ovf"; // Timer0 Overflow + asm "jmp __default_irq"; // SPI Transfer Complete + asm "jmp irq_usart_rx"; // USART, RX Complete + asm "jmp __default_irq"; // USART, UDR Empty + asm "jmp irq_usart_tx"; // USART, TX Complete + asm "jmp __default_irq"; // Analog Comparator + asm "jmp __default_irq"; // ADC Conversion + asm "jmp __default_irq"; // EEPROM Ready + asm "jmp __default_irq"; // 2-wire Serial Interface (TWI) + asm "jmp __default_irq"; // Store Program Memory Ready + asm "jmp __default_irq"; // USART1 Rx Complete + asm "jmp __default_irq"; // USART1 Data Register Empty + asm "jmp __default_irq"; // USART1 Tx Complete + + asm "__init:"; + // clear r1 (zero reg) + asm "clr r1"; + // clear sreg + asm "out 0x3f, r1"; + // set stack at 0x40FF (0x100+16K-1) + asm "ldi r28, 0xFF"; + asm "ldi r29, 0x40"; + asm "out 0x3e, r29"; + asm "out 0x3d, r28"; + + // copy global vars init data + __do_copy_data(); + + // clear zeroed global vars + __do_clear_bss(); + + main(); + + // if main returns, disable interruptions and sleep. + // this is used to quit simavr in our tests + asm "cli"; + asm "sleep"; + } + diff --git a/lib/avr5.S b/lib/avr5.S index 2e1e9d5..34c4cd6 100644 --- a/lib/avr5.S +++ b/lib/avr5.S @@ -349,3 +349,1005 @@ DEFUN memset ret ENDF memset +/* + * The assembly code below implements float32 functions and was slight + * adapted from avrlibc/libm (https://github.com/avrdudes/avr-libc) + * by thborges, 29-Sep-2024. + */ + +/* Copyright (c) 2002 Michael Stumpf + Copyright (c) 2006 Dmitry Xmelkov + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + * Neither the name of the copyright holders nor the names of + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + POSSIBILITY OF SUCH DAMAGE. */ + +#define rB0 r18 +#define rB1 r19 +#define rB2 r20 +#define rB3 r21 +#define rA0 r22 +#define rA1 r23 +#define rA2 r24 +#define rA3 r25 +#define rBE r26 +#define rAE r27 + + +DEFUN __subsf3 + subi rB3, 0x80 ; complement sign bit of B +DEFUN __addsf3 + clr rAE + clr rBE + rcall __addsf3x + rjmp __fp_round +ENDF __subsf3 + + + + +DEFUN __fp_pscA + clr r0 + dec r0 + cp r1, rA0 + cpc r1, rA1 + cpc r1, rA2 + cpc r0, rA3 + ret +ENDF __fp_pscA + + +DEFUN __fp_pscB + clr r0 + dec r0 + cp r1, rB0 + cpc r1, rB1 + cpc r1, rB2 + cpc r0, rB3 + ret +ENDF __fp_pscB + + +DEFUN __fp_nan + ldi rA3, 0xFF + ldi rA2, 0xC0 + ret +ENDF __fp_nan + + +DEFUN __fp_inf + bld rA3, 7 ; sign + ori rA3, 0x7f + ldi rA2, 0x80 + ldi rA1, 0 + ldi rA0, 0 + ret +ENDF __fp_inf + + +__addsf3xexit: + rcall __fp_pscA + brcs .L_nan + rcall __fp_pscB + brcs .L_nan + brne .L_inf ; B is finite --> return A + cpi rA3, 255 + brne .L_infB ; A is finite --> return B + brtc .L_inf ; Inf + Inf with the same sign +.L_nan: + rjmp __fp_nan +.L_infB: + brtc .L_inf + com ZL +.L_inf: + bst ZL, 7 + rjmp __fp_inf + +DEFUN __addsf3x + mov ZL, rA3 ; save sign of A + rcall __fp_split3 + brcs __addsf3xexit + ; compare A and B + cp rAE, rBE + cpc rA0, rB0 + cpc rA1, rB1 + cpc rA2, rB2 + cpc rA3, rB3 + brlo 2f ; fabs(A) < fabs(B) + brne 4f ; fabs(A) > fabs(B) + brtc .L_add + rjmp __fp_zero ; A + (-A) = +0.0 + ; swap A and B +2: brtc 3f + com ZL ; update sign +3: mov r0, rAE + mov rAE, rBE + mov rBE, r0 + movw r0, rA0 + movw rA0, rB0 + movw rB0, r0 + movw r0, rA2 + movw rA2, rB2 + movw rB2, r0 + clr r1 +4: clr ZH + sub rB3, rA3 +5: breq 7f ; shift is not needed + cpi rB3, -7 + brsh 6f + cpi rB3, -32 + brlo .L_ret + cp r1, rBE + sbci ZH, 0 + mov rBE, rB0 + mov rB0, rB1 + mov rB1, rB2 + clr rB2 + subi rB3, -8 + rjmp 5b + +6: lsr rB2 + ror rB1 + ror rB0 + ror rBE + sbci ZH, 0 + inc rB3 + brne 6b + +7: + ; direction ? + brtc .L_add + ; A -= B + cp r1, ZH + sbc rAE, rBE + sbc rA0, rB0 + sbc rA1, rB1 + sbc rA2, rB2 + brmi .L_ret +8: subi rA3, 1 + breq 9f + lsl ZH + rol rAE + rol rA0 + rol rA1 + rol rA2 + brpl 8b + rjmp .L_ret + +.L_add: + add rAE, rBE + adc rA0, rB0 + adc rA1, rB1 + adc rA2, rB2 + brcc .L_ret + ror rA2 + ror rA1 + ror rA0 + ror rAE + ror ZH + cpi rA3, 254 + brlo 9f + rjmp .L_inf +9: inc rA3 +.L_ret: + lsl rA2 + brcs 1f + clr rA3 +1: lsl ZL ; sign + ror rA3 + ror rA2 + ret +ENDF __addsf3x + + +DEFUN __fp_zero + clt +DEFUN __fp_szero + clr rAE + clr rA0 + clr rA1 + wmov rA2, rA0 + bld rA3, 7 + ret +ENDF __fp_szero + + +DEFUN __fp_split3 + ; rA3[7] := sign(A) ^ sign(B) + sbrc rB3, 7 + subi rA3, 0x80 + ; split B + lsl rB2 + rol rB3 ; exponent + breq 4f + cpi rB3, 0xff ; C = 1, if rB3 != 0xff + breq 5f +1: ror rB2 ; restore rB2 and (possible) hidden bit +; __fp_splitA (float A); +DEFUN __fp_splitA + lsl rA2 +2: bst rA3, 7 + rol rA3 + breq 6f + cpi rA3, 0xff + breq 7f +3: ror rA2 + ret + + ; B is zero or subnormal +4: cp r1, rB0 + cpc r1, rB1 + cpc r1, rB2 ; C = 1, if B is not a zero + rol rB3 ; C = 0 + rjmp 1b + ; B is not a finite +5: lsr rB2 + rcall __fp_splitA + rjmp 8f + + ; A is zero or subnormal +6: cp r1, rA0 + cpc r1, rA1 + cpc r1, rA2 + rol rA3 + rjmp 3b + ; A is not a finite +7: lsr rA2 ; C = 0 + cpc rA1, r1 + cpc rA0, r1 +8: sec + ret +ENDF __fp_split3 + + +DEFUN __fixsfsi + rcall __fixunssfsi + set + cpse rAE, r1 ; error flag + rjmp __fp_szero ; return 0x80000000 + ret +ENDF __fixsfsi + + +DEFUN __fixunssfsi + rcall __fp_splitA + brcs .L_err + ; A is finite + subi rA3, 127 ; exponent field of 1.0 + brlo .L_zr + ; fabs(A) >= 1.0 + mov rAE, rA3 + clr rA3 + subi rAE, 23 + brlo 4f ; shift to right + breq .L_sign ; no shift + ; fabs(A) >= 0x0.800000p+25 To reduce code size we will not check + ; number of shifts. Instead we will check a MSB of result. +1: lsl rA0 + rol rA1 + rol rA2 + rol rA3 + brmi 2f ; next shift is impossible: data lost + dec rAE + brne 1b + rjmp .L_sign + +2: cpi rAE, 1 + breq .L_sign ; rAE: overflow for 'signed long' usage + +.L_err: rcall __fp_zero + ldi rAE, 1 ; error flag + ret + +.L_zr: rjmp __fp_zero ; return 0x00000000, clear rAE + + ; fabs(A) <= 0x0.ffffffp+23 + ; Shift A to right by 1 (rA3==-1) .. 23 (rA3==-23) positions. + +3: mov rA0, rA1 + mov rA1, rA2 + clr rA2 + subi rAE, -8 + breq .L_sign + +4: cpi rAE, -7 + brlt 3b ; quick shift is possible + +5: lsr rA2 + ror rA1 + ror rA0 + inc rAE + brne 5b + + ; restore the sign and return +.L_sign: + brtc 6f + com rA3 + com rA2 + com rA1 + neg rA0 + sbci rA1, -1 + sbci rA2, -1 + sbci rA3, -1 +6: ret + +ENDF __fixunssfsi + + +DEFUN __fp_round + ; is A finite ? + mov r0, rA3 + inc r0 + lsl r0 + brne 1f + tst rA2 + brmi 3f ; no, A is not a finite number + ; rounding +1: lsl rAE + brcc 3f + or rAE, ZH + brne 2f + sbrs rA0, 0 ; round to even + rjmp 3f +2: subi rA0, -1 + sbci rA1, -1 + sbci rA2, -1 + sbci rA3, -1 + +3: ret +ENDF __fp_round + +#define ret_lo r24 +DEFUN __cmpsf2 +DEFUN __eqsf2 +DEFUN __nesf2 +DEFUN __ltsf2 +DEFUN __lesf2 + rcall __fp_cmp + brcc 1f + ldi ret_lo, 1 +1: ret +ENDF __cmpsf2 + +DEFUN __fp_cmp + lsl rA3 + sbc r0, r0 ; r0 = (A < 0) ? -1 : 0 + lsl rB3 + sbc rBE, rBE ; rBE = (B < 0) ? -1 : 0 + ; isnan(A) ? + ldi ZL, 0x80 ; NaN: 0x{f/7}f800001..0x{f/7}fffffff + ldi ZH, 0xfe + cp r1, rA0 + cpc r1, rA1 + cpc ZL, rA2 + cpc ZH, rA3 + brlo 9f ; branch, if C == 1 + ; isnan(B) ? + cp r1, rB0 + cpc r1, rB1 + cpc ZL, rB2 + cpc ZH, rB3 + brlo 9f ; branch, if C == 1 + ; compare + sub rA0, rB0 + sbc rA1, rB1 + sbc rA2, rB2 + sbc rA3, rB3 ; C is set, if A < B + brne 1f + ; absolute values are equal, check signs + eor r0, rBE + breq 9f ; if branch, rA2 = 0, C = 0 + ; force -0.0 == +0.0 + or rB0, rB1 + or rB0, rB2 + or rB0, rB3 + brne 2f ; evaluate sign(B) + ret + ; view argument signes +1: eor r0, rBE ; C is not changed + brne 2f ; signs are different + sbci rBE, 1 ; rBE[0] = (A < B && A > 0) ? 0 : 1 +2: lsr rBE ; C = above result OR sign(B) + ; build return value, C is set, if A > B + ldi rA2, -1 + adc rA2, r1 + adc rA2, r1 ; C = 0 at any case +9: ret +ENDF __fp_cmp + + +DEFUN __unordsf2 + rcall __fp_cmp ; return C=1, if any of args is NaN + sbc r24, r24 + sbc r25, r25 + ret +ENDF __unordsf2 + + +DEFUN __mulsf3 + rcall __mulsf3x + rjmp __fp_round +ENDF __mulsf3 + + +__mulsf3x_exit: +0: rcall __fp_pscA + brcs 1f + rcall __fp_pscB + brcs 1f + and rA3, rB3 ; one of args is 0xff + breq 1f + rjmp __fp_inf ; nonzero * Inf --> Inf +1: rjmp __fp_nan ; 0 * Inf --> NaN +2: clr r1 ; after 'mul rA3,rB3' + rjmp __fp_szero + +DEFUN __mulsf3x + rcall __fp_split3 + brcs 0b + +DEFUN __mulsf3_pse ; post split entry + ; check zero + mul rA3, rB3 ; r1 would be clean + breq 2b + ; rB3.rA3 := rA3 + rB3 + add rA3, rB3 + ldi rB3, 0 + adc rB3, rB3 + + ; multiplication: rA2.rA1.rA0 * rB2.rB1.rB0 --> rA2.rA1.rA0.rAE.ZH.ZL + + ; ZH.ZL = rA0 * rB0 + mul rA0, rB0 + movw ZL, r0 + ; rAE.ZH += rA1 * rB0 + mul rA1, rB0 + clr rAE + add ZH, r0 + adc rAE, r1 + ; rBE.rAE.ZH = rAE.ZH + rA0 * rB1 + mul rA0, rB1 + clr rBE + add ZH, r0 + adc rAE, r1 + adc rBE, rBE + ; rA0.rBE.rAE = rBE.rAE + rA0 * rB2 + mul rA0, rB2 + clr rA0 + add rAE, r0 + adc rBE, r1 + adc rA0, rA0 + ; rA0.rBE.rAE += rA2 * rB0 + mul rA2, rB0 + clr rB0 + add rAE, r0 + adc rBE, r1 + adc rA0, rB0 + ; rA0.rBE.rAE += rA1 * rB1 + mul rA1, rB1 + add rAE, r0 + adc rBE, r1 + adc rA0, rB0 ; rB0 == 0 + ; rB0.rA0.rBE = rA0.rBE + rA2 * rB1 + mul rA2, rB1 + add rBE, r0 + adc rA0, r1 + adc rB0, rB0 ; rB0 was 0 + ; rB0.rA0.rBE += rA1 * rB2 + mul rA1, rB2 + clr rB1 + add rBE, r0 + adc rA0, r1 + adc rB0, rB1 + ; rB0.rA0 += rA2 * rB2 + mul rA2, rB2 + add rA0, r0 + adc rB0, r1 + ; move result: rA2.rA1.rA0.rAE.ZH.ZL = rB0.rA0.rBE.rAE.ZH.ZL + mov rA2, rB0 + mov rA1, rA0 + mov rA0, rBE + ; __zero_reg__ + clr r1 + + ; exponent -= 127 (Why not 126? For compare convenience.) + subi rA3, 0x7F ;lo8(127) + sbci rB3, 0x00 ;hi8(127) + brmi 13f ; denormalization is needed + breq 15f ; normalization is impossible + ; result exponent > min ==> normalization is possible +10: tst rA2 + brmi 11f ; mantissa is normal + ; mantissa <<= 1 + lsl ZL + rol ZH + rol rAE + rol rA0 + rol rA1 + rol rA2 + ; exponent -= 1 + subi rA3, 0x01 ;lo8(1) + sbci rB3, 0x00 ;hi8(1) + brne 10b + ; check to overflow +11: cpi rA3, 254 + cpc rB3, r1 + brlo 15f + rjmp __fp_inf + ; check lowest value of exponent to avoid long operation +12: rjmp __fp_szero +13: cpi rB3, 0xFF ;hi8(-24) ; here rB3 < 0 + brlt 12b + cpi rA3, 0XE8 ;lo8(-24) + brlt 12b + ; mantissa >>= -rA3 +14: lsr rA2 + ror rA1 + ror rA0 + ror rAE + ror ZH + ror ZL + subi rA3, -1 + brne 14b + ; for rounding +15: or ZH, ZL + ; pack + lsl rA2 + adc rA3, r1 ; restore exponent for normal values + lsr rA3 + ror rA2 + bld rA3, 7 ; sign + ret +ENDF __mulsf3x + + +DEFUN __gesf2 +DEFUN __gtsf2 + rcall __fp_cmp + brcc 1f + ldi ret_lo, -1 +1: ret +ENDF __gesf2 + + +DEFUN __divsf3 + rcall __divsf3x + rjmp __fp_round +ENDF __divsf3 + + +__divsf3x_exit: +0: rcall __fp_pscB + brcs .L_nan_div + rcall __fp_pscA + brcs .L_nan_div + brne .L_zr_div ; finite / Inf --> 0 +.L_infA: + cpi rB3, 255 + breq .L_nan_div ; Inf / Inf --> NaN +.L_inf_div: + rjmp __fp_inf +1: + cpse rB3, r1 ; 0/finite --> 0, 0/0 --> NaN +.L_zr_div: rjmp __fp_szero +.L_nan_div: rjmp __fp_nan + +DEFUN __divsf3x + rcall __fp_split3 + brcs 0b + +DEFUN __divsf3_pse ; post split entry + tst rA3 + breq 1b + tst rB3 + breq .L_inf_div ; finite / 0.0 --> Inf + + sub rA3, rB3 + sbc rB3, rB3 + +/* Prepare to division: + A: rAE.rA2.rA1.rA0 0x00000001..0x00FFFFFF + B: rBE.rB2.rB1.rB0 0x00000002..0x01FFFFFE + A < B + */ + clr rAE + clr rBE +2: cp rA0, rB0 + cpc rA1, rB1 + cpc rA2, rB2 + brlo 3f + subi rA3, 0xFF ;lo8(-1) + sbci rB3, 0xFF ;hi8(-1) + lsl rB0 + rol rB1 + rol rB2 + rol rBE + breq 2b +3: + rcall .L_div + mov r0, ZL + brmi 5f ; N is result of 'com ZL' from .L_div + +4: ldi ZL, 0x80 + rcall .L_div1 + subi rA3, 0x01 ;lo8(1) + sbci rB3, 0x00 ;hi8(1) + lsr ZL + rol r0 + brpl 4b + +5: rcall .L_div + mov ZH, ZL + rcall .L_div + + lsl rA0 + rol rA1 + rol rA2 + rol rAE + cp rB0, rA0 + cpc rB1, rA1 + cpc rB2, rA2 + cpc rBE, rAE + ldi rAE, 0x80 + breq 4f + sbc rAE, rAE + +4: mov rA2, r0 + wmov rA0, ZL + clr ZH + + ; exponent += 125 + subi rA3, 0x83 ;lo8(-125) + sbci rB3, 0xFF ;hi8(-125) + brmi 13f ; denormalization is needed + ; check to overflow +11: cpi rA3, 254 + cpc rB3, r1 + brlo 15f + rjmp __fp_inf + ; check lowest value of exponent to avoid long operation +12: rjmp __fp_szero +13: cpi rB3, 0xFF ;hi8(-24) ; here rB3 < 0 + brlt 12b + cpi rA3, 0xE8 ;lo8(-24) + brlt 12b + ; mantissa >>= -rA3 +14: lsr rA2 + ror rA1 + ror rA0 + ror rAE + ror ZH + subi rA3, -1 + brne 14b + ; pack +15: lsl rA2 + adc rA3, r1 ; restore exponent for normal values + lsr rA3 + ror rA2 + bld rA3, 7 + ret + +.L_div: + ldi ZL, 1 +.L_div1: + lsl rA0 + rol rA1 + rol rA2 + rol rAE + cp rA0, rB0 + cpc rA1, rB1 + cpc rA2, rB2 + cpc rAE, rBE + brcs 2f + sub rA0, rB0 + sbc rA1, rB1 + sbc rA2, rB2 + sbc rAE, rBE +2: rol ZL + brcc .L_div1 + com ZL + ret +ENDF __divsf3x + + +DEFUN __floatdisf + bst rA3, 7 ; sign + brtc 1f + rcall __fp_negdi +1: rjmp __fp_di2sf +ENDF __floatdisf + + +DEFUN __fp_negdi + com rA3 + com rA2 + com rA1 + com rA0 + com rB3 + com rB2 + com rB1 + neg rB0 + sbci rB1, -1 + sbci rB2, -1 + sbci rB3, -1 + sbci rA0, -1 + sbci rA1, -1 + sbci rA2, -1 + sbci rA3, -1 + ret +ENDF __fp_negdi + + +DEFUN __floatundisf + clt ; result sign + +DEFUN __fp_di2sf + mov ZH, rA3 + ldi rA3, 127 + 55 ; exponent for 00.80.00.00.00.00.00.00 + tst ZH + breq .L_tstA2 + +/* Shift to right is needed by 1..8 positions. + Optimization: accumulate an info about tail into rB2. */ + cp r1, rB0 + cpc r1, rB1 + cpc r1, rB2 + sbc rB2, rB2 + ; shift to right +1: inc rA3 ; exponent += 1 + lsr ZH + ror rA2 + ror rA1 + ror rA0 + ror rB3 + sbci rB2, 0 ; set rB2[7] if C was 1 + tst ZH + brne 1b + rjmp .L_round + + ; x == 0 +2: clr rA3 + ret + ; check: is fast shift possible? +.L_tstA2: + tst rA2 + brne 4f + ; fast shift to left +3: subi rA3, 8 + brpl 2b ; 127+55 - 7*8 --> 126 + or rA2, rA1 ; obtain Z flag + mov rA1, rA0 + mov rA0, rB3 + mov rB3, rB2 + mov rB2, rB1 + mov rB1, rB0 + ldi rB0, 0 + breq 3b ; Z is result of 'or rA2,rA1' + +/* rA2 is not 0. It is needed shift to left by 0..7 positions. + Optimization: rB2..rB0 are not shifted. Instead, save an info + about tail in rB2. */ +4: cp r1, rB0 + cpc r1, rB1 + cpc r1, rB2 + sbc rB2, rB2 + tst rA2 + brmi .L_round +5: dec rA3 ; exponent -= 1 + lsl rB2 + rol rB3 + rol rA0 + rol rA1 + rol rA2 + brpl 5b + +/* Round and pack. Now we have: + rA3 - mantissa + rA2.rA1.rA0.rB3 - fraction + rB2 - is negative if tail is not equal 0 */ +.L_round: + tst rB3 + brpl 7f + lsl rB2 + rol rB3 + brne 6f + sbrs rA0, 0 ; round to even + rjmp 7f +6: subi rA0, -1 + sbci rA1, -1 + sbci rA2, -1 + sbci rA3, -1 + ; pack +7: lsl rA2 + lsr rA3 + ror rA2 + bld rA3, 7 ; sign + ret +ENDF __floatundisf + + +DEFUN __fixsfdi + ldi rAE, 62 + rcall .L_sf2di + brcc 1f + ldi rA3, 0x80 +1: ret + +DEFUN __fixunssfdi + ldi rAE, 63 + +.L_sf2di: + ; clear LSBytes + clr rB0 + clr rB1 + movw rB2, rB0 + ; split + rcall __fp_splitA + brcs .L_ovfl ; is not finite + + subi rA3, 127 ; 1.0 exponent field + brlo .L_zero ; too small + + cp rAE, rA3 + brlo .L_ovfl ; fabs(A) >= 2**64 (or 2**63) + ldi rAE, 63 + sub rAE, rA3 + /* Now rAE is, for example: + 63 - exponent was 127+0, shift >>55 is needed, + 0 - exponent was 127+63, shift <<8 is needed. */ + clr rA3 + subi rAE, 8 ; rAE= -8..+55 + brpl 3f + ; fabs(A) >= 1.0 * 2**56 Shift to left is needed. + /* Shift to 8 is not optimized specially as an exotic. */ +2: lsl rA0 + rol rA1 + rol rA2 + rol rA3 + inc rAE + brmi 2b + rjmp .L_sign2 + ; Shift to right is needed +3: /* Now rAE: + 55 - exponent was 127+0, shift >>55 is needed, + 1 - exponent was 127+54, shift >>1 is needed, + 0 - exponent was 127+55, no shift is needed. */ + subi rAE, 8 + brmi 5f + ; quick shift by 8 +4: mov rB0, rB1 + mov rB1, rB2 + mov rB2, rB3 + mov rB3, rA0 + mov rA0, rA1 + mov rA1, rA2 + clr rA2 + subi rAE, 8 + brpl 4b + +5: subi rAE, -8 ; rAE = 0..7 + breq .L_sign2 + ; shift to 1..7 positions +6: lsr rA2 + ror rA1 + ror rA0 + ror rB3 + ror rB2 + ror rB1 + ror rB0 + dec rAE + brne 6b +.L_sign2: + brtc 7f + rcall __fp_negdi +7: clc + ret + +.L_zero: + clc +.L_ovfl: ; overflow, C is set already + ldi rA0, 0 + ldi rA1, 0 + movw rA2, rA0 + ret +ENDF __fixsfdi + + +DEFUN __floatunsisf + clt + rjmp 1f + +DEFUN __floatsisf + bst rA3, 7 ; sign + brtc 1f + ; negate A + com rA3 + com rA2 + com rA1 + neg rA0 + sbci rA1, -1 + sbci rA2, -1 + sbci rA3, -1 +1: + tst rA3 + breq 4f + ; shift to right + mov ZH, rA3 + ldi rA3, 127 + 23 ; exponent + clr rAE +2: inc rA3 + lsr ZH + ror rA2 + ror rA1 + ror rA0 + ror rAE + cpse ZH, r1 + rjmp 2b + ; rounding + brpl .L_pack ; flags from 'ror rAE' + lsl rAE + brne 3f + sbrs rA0, 0 ; round to even + rjmp .L_pack +3: subi rA0, -1 + sbci rA1, -1 + sbci rA2, -1 + sbci rA3, -1 + rjmp .L_pack + +4: tst rA2 + breq 5f + ldi rA3, 127 + 23 + rjmp 8f + +5: tst rA1 + breq 6f + ldi rA3, 127 + 15 + mov rA2, rA1 + mov rA1, rA0 + rjmp 7f + +6: tst rA0 + breq 9f ; 0.0 + ldi rA3, 127 + 7 + mov rA2, rA0 + ldi rA1, 0 +7: + ldi rA0, 0 + brmi .L_pack ; flag from 'tst rA*' + ; shift to left by 1..7 positions +10: dec rA3 + lsl rA0 + rol rA1 + rol rA2 +8: brpl 10b + +.L_pack: + lsl rA2 + lsr rA3 + ror rA2 + bld rA3, 7 ; sign +9: ret +ENDF __floatunsisf diff --git a/lib/avr51.S b/lib/avr51.S new file mode 120000 index 0000000..79240b8 --- /dev/null +++ b/lib/avr51.S @@ -0,0 +1 @@ +avr5.S \ No newline at end of file diff --git a/lib/convert/itoa.rob b/lib/convert/itoa.rob index 6ea4a9a..6d63373 100644 --- a/lib/convert/itoa.rob +++ b/lib/convert/itoa.rob @@ -7,10 +7,10 @@ use math.abs; const itoa_chars = "0123456789abcdef"; -void itoa(int16 value, int8 base, char[] result) { +uint16 itoa(int16 value, int8 base, char[] result) { if base < 2 or base > 16 { result[0] = 0; - return; + return 0; } negative = value < 0; @@ -34,6 +34,7 @@ void itoa(int16 value, int8 base, char[] result) { } result[i] = 0; + ret = i; // reverse result j = 0; @@ -45,4 +46,6 @@ void itoa(int16 value, int8 base, char[] result) { j++; i--; } + + return ret; } diff --git a/lib/math/float.rob b/lib/math/float.rob new file mode 100644 index 0000000..41eec4d --- /dev/null +++ b/lib/math/float.rob @@ -0,0 +1,17 @@ +/* + * Part of the Robotics Language Standard Library, under the + * Apache License v2.0. + */ + +const NAN = 0.0 / 0.0; +const INFINITY = 1.0 / 0.0; + +bool isnan(float x) { + u = bitcast(x, uint32); + return (u & 0x7fffffff) > 0x7f800000; +} + +bool isinf(float x) { + u = bitcast(x, uint32); + return (u & 0x7fffffff) == 0x7f800000; +} diff --git a/lib/stm32f1.rob b/lib/stm32f1.rob index 710a90f..e72dafc 100644 --- a/lib/stm32f1.rob +++ b/lib/stm32f1.rob @@ -161,7 +161,7 @@ void __isr_reset() { __do_copy_data(); __system_clock_config(); - main(); + ret = main(); __error_handler(); } diff --git a/lib/string/containsstr.rob b/lib/string/containsstr.rob new file mode 100644 index 0000000..b1d078e --- /dev/null +++ b/lib/string/containsstr.rob @@ -0,0 +1,17 @@ +int16 containsstr(char[] str, char[] substr) { + i = uint16 (0); + + while i < str.size { + j = uint16 (0); + + while (str[i + j] == substr[j]) { + j++; + } + + if j == substr.size { + return i; + } + i++; + } + return -1; +} \ No newline at end of file diff --git a/lib/string/equalstr.rob b/lib/string/equalstr.rob new file mode 100644 index 0000000..9b27140 --- /dev/null +++ b/lib/string/equalstr.rob @@ -0,0 +1,20 @@ +use string.lenstr; + +bool equalstr(char[] s1, char[] s2) { + + i = int16 (0); + while (i < s1.size and i < s2.size) { + if (s1[i] != s2[i]) { + return false; + } + i++; + } + + str1 = lenstr(s1); + str2 = lenstr(s2); + if str1 == str2 { + return true; + } else { + return false; + } +} \ No newline at end of file diff --git a/lib/string/lenstr.rob b/lib/string/lenstr.rob new file mode 100644 index 0000000..926dd56 --- /dev/null +++ b/lib/string/lenstr.rob @@ -0,0 +1,12 @@ +int16 lenstr(char[] s) { + length = int16 (0); + i = int16 (0); + + while i < s.size { + if ((s[i] & 0xC0) != 0x80) { + length++; + } + i++; + } + return length; +} \ No newline at end of file diff --git a/lib/string/upperlowerstr.rob b/lib/string/upperlowerstr.rob new file mode 100644 index 0000000..880afca --- /dev/null +++ b/lib/string/upperlowerstr.rob @@ -0,0 +1,813 @@ +use string.equalstr; + +mapping = { + 0x0061, 0x0041 , + 0x0062, 0x0042 , + 0x0063, 0x0043 , + 0x0064, 0x0044 , + 0x0065, 0x0045 , + 0x0066, 0x0046 , + 0x0067, 0x0047 , + 0x0068, 0x0048 , + 0x0069, 0x0049 , + 0x006A, 0x004A , + 0x006B, 0x004B , + 0x006C, 0x004C , + 0x006D, 0x004D , + 0x006E, 0x004E , + 0x006F, 0x004F , + 0x0070, 0x0050 , + 0x0071, 0x0051 , + 0x0072, 0x0052 , + 0x0073, 0x0053 , + 0x0074, 0x0054 , + 0x0075, 0x0055 , + 0x0076, 0x0056 , + 0x0077, 0x0057 , + 0x0078, 0x0058 , + 0x0079, 0x0059 , + 0x007A, 0x005A , + 0x00E0, 0x00C0 , + 0x00E1, 0x00C1 , + 0x00E2, 0x00C2 , + 0x00E3, 0x00C3 , + 0x00E4, 0x00C4 , + 0x00E5, 0x00C5 , + 0x00E6, 0x00C6 , + 0x00E7, 0x00C7 , + 0x00E8, 0x00C8 , + 0x00E9, 0x00C9 , + 0x00EA, 0x00CA , + 0x00EB, 0x00CB , + 0x00EC, 0x00CC , + 0x00ED, 0x00CD , + 0x00EE, 0x00CE , + 0x00EF, 0x00CF , + 0x00F0, 0x00D0 , + 0x00F1, 0x00D1 , + 0x00F2, 0x00D2 , + 0x00F3, 0x00D3 , + 0x00F4, 0x00D4 , + 0x00F5, 0x00D5 , + 0x00F6, 0x00D6 , + 0x00F8, 0x00D8 , + 0x00F9, 0x00D9 , + 0x00FA, 0x00DA , + 0x00FB, 0x00DB , + 0x00FC, 0x00DC , + 0x00FD, 0x00DD , + 0x00FE, 0x00DE , + 0x00FF, 0x0178 , + 0x0101, 0x0100 , + 0x0103, 0x0102 , + 0x0105, 0x0104 , + 0x0107, 0x0106 , + 0x0109, 0x0108 , + 0x010B, 0x010A , + 0x010D, 0x010C , + 0x010F, 0x010E , + 0x0111, 0x0110 , + 0x0113, 0x0112 , + 0x0115, 0x0114 , + 0x0117, 0x0116 , + 0x0119, 0x0118 , + 0x011B, 0x011A , + 0x011D, 0x011C , + 0x011F, 0x011E , + 0x0121, 0x0120 , + 0x0123, 0x0122 , + 0x0125, 0x0124 , + 0x0127, 0x0126 , + 0x0129, 0x0128 , + 0x012B, 0x012A , + 0x012D, 0x012C , + 0x012F, 0x012E , + /* + 0x0131, 0x0049 , Characters "ı", "I". First character is the latin character "i" + whithout the dot named "LATIN SMALL LETTER DOTLESS I" a two byte UTF-8 character. This + character has no specific uppercase variant, so the conventional one byte "I" LATIN + CAPITAL LETTER I, was placed in the mapping as the uppercase variant. The lowercase + character "ı" can be converted normaly to uppercase "I", but the uppercase "I" can't be + converted to lowercase because it conflicts with the "i" and "I" characters mapped in line 12. + */ + 0x0133, 0x0132 , + 0x0135, 0x0134 , + 0x0137, 0x0136 , + 0x013A, 0x0139 , + 0x013C, 0x013B , + 0x013E, 0x013D , + 0x0140, 0x013F , + 0x0142, 0x0141 , + 0x0144, 0x0143 , + 0x0146, 0x0145 , + 0x0148, 0x0147 , + 0x014B, 0x014A , + 0x014D, 0x014C , + 0x014F, 0x014E , + 0x0151, 0x0150 , + 0x0153, 0x0152 , + 0x0155, 0x0154 , + 0x0157, 0x0156 , + 0x0159, 0x0158 , + 0x015B, 0x015A , + 0x015D, 0x015C , + 0x015F, 0x015E , + 0x0161, 0x0160 , + 0x0163, 0x0162 , + 0x0165, 0x0164 , + 0x0167, 0x0166 , + 0x0169, 0x0168 , + 0x016B, 0x016A , + 0x016D, 0x016C , + 0x016F, 0x016E , + 0x0171, 0x0170 , + 0x0173, 0x0172 , + 0x0175, 0x0174 , + 0x0177, 0x0176 , + 0x017A, 0x0179 , + 0x017C, 0x017B , + 0x017E, 0x017D , + 0x0183, 0x0182 , + 0x0185, 0x0184 , + 0x0188, 0x0187 , + 0x018C, 0x018B , + 0x0192, 0x0191 , + 0x0199, 0x0198 , + 0x01A1, 0x01A0 , + 0x01A3, 0x01A2 , + 0x01A5, 0x01A4 , + 0x01A8, 0x01A7 , + 0x01AD, 0x01AC , + 0x01B0, 0x01AF , + 0x01B4, 0x01B3 , + 0x01B6, 0x01B5 , + 0x01B9, 0x01B8 , + 0x01BD, 0x01BC , + 0x01C6, 0x01C4 , + 0x01C9, 0x01C7 , + 0x01CC, 0x01CA , + 0x01CE, 0x01CD , + 0x01D0, 0x01CF , + 0x01D2, 0x01D1 , + 0x01D4, 0x01D3 , + 0x01D6, 0x01D5 , + 0x01D8, 0x01D7 , + 0x01DA, 0x01D9 , + 0x01DC, 0x01DB , + 0x01DF, 0x01DE , + 0x01E1, 0x01E0 , + 0x01E3, 0x01E2 , + 0x01E5, 0x01E4 , + 0x01E7, 0x01E6 , + 0x01E9, 0x01E8 , + 0x01EB, 0x01EA , + 0x01ED, 0x01EC , + 0x01EF, 0x01EE , + 0x01F3, 0x01F1 , + 0x01F5, 0x01F4 , + 0x01FB, 0x01FA , + 0x01FD, 0x01FC , + 0x01FF, 0x01FE , + 0x0201, 0x0200 , + 0x0203, 0x0202 , + 0x0205, 0x0204 , + 0x0207, 0x0206 , + 0x0209, 0x0208 , + 0x020B, 0x020A , + 0x020D, 0x020C , + 0x020F, 0x020E , + 0x0211, 0x0210 , + 0x0213, 0x0212 , + 0x0215, 0x0214 , + 0x0217, 0x0216 , + 0x0253, 0x0181 , + 0x0254, 0x0186 , + 0x0257, 0x018A , + 0x0258, 0x018E , + 0x0259, 0x018F , + 0x025B, 0x0190 , + 0x0260, 0x0193 , + 0x0263, 0x0194 , + 0x0268, 0x0197 , + 0x0269, 0x0196 , + 0x026F, 0x019C , + 0x0272, 0x019D , + 0x0275, 0x019F , + 0x0283, 0x01A9 , + 0x0288, 0x01AE , + 0x028A, 0x01B1 , + 0x028B, 0x01B2 , + 0x0292, 0x01B7 , + 0x03AC, 0x0386 , + 0x03AD, 0x0388 , + 0x03AE, 0x0389 , + 0x03AF, 0x038A , + 0x03B1, 0x0391 , + 0x03B2, 0x0392 , + 0x03B3, 0x0393 , + 0x03B4, 0x0394 , + 0x03B5, 0x0395 , + 0x03B6, 0x0396 , + 0x03B7, 0x0397 , + 0x03B8, 0x0398 , + 0x03B9, 0x0399 , + 0x03BA, 0x039A , + 0x03BB, 0x039B , + 0x03BC, 0x039C , + 0x03BD, 0x039D , + 0x03BE, 0x039E , + 0x03BF, 0x039F , + 0x03C0, 0x03A0 , + 0x03C1, 0x03A1 , + 0x03C3, 0x03A3 , + 0x03C4, 0x03A4 , + 0x03C5, 0x03A5 , + 0x03C6, 0x03A6 , + 0x03C7, 0x03A7 , + 0x03C8, 0x03A8 , + 0x03C9, 0x03A9 , + 0x03CA, 0x03AA , + 0x03CB, 0x03AB , + 0x03CC, 0x038C , + 0x03CD, 0x038E , + 0x03CE, 0x038F , + 0x03E3, 0x03E2 , + 0x03E5, 0x03E4 , + 0x03E7, 0x03E6 , + 0x03E9, 0x03E8 , + 0x03EB, 0x03EA , + 0x03ED, 0x03EC , + 0x03EF, 0x03EE , + 0x0430, 0x0410 , + 0x0431, 0x0411 , + 0x0432, 0x0412 , + 0x0433, 0x0413 , + 0x0434, 0x0414 , + 0x0435, 0x0415 , + 0x0436, 0x0416 , + 0x0437, 0x0417 , + 0x0438, 0x0418 , + 0x0439, 0x0419 , + 0x043A, 0x041A , + 0x043B, 0x041B , + 0x043C, 0x041C , + 0x043D, 0x041D , + 0x043E, 0x041E , + 0x043F, 0x041F , + 0x0440, 0x0420 , + 0x0441, 0x0421 , + 0x0442, 0x0422 , + 0x0443, 0x0423 , + 0x0444, 0x0424 , + 0x0445, 0x0425 , + 0x0446, 0x0426 , + 0x0447, 0x0427 , + 0x0448, 0x0428 , + 0x0449, 0x0429 , + 0x044A, 0x042A , + 0x044B, 0x042B , + 0x044C, 0x042C , + 0x044D, 0x042D , + 0x044E, 0x042E , + 0x044F, 0x042F , + 0x0451, 0x0401 , + 0x0452, 0x0402 , + 0x0453, 0x0403 , + 0x0454, 0x0404 , + 0x0455, 0x0405 , + 0x0456, 0x0406 , + 0x0457, 0x0407 , + 0x0458, 0x0408 , + 0x0459, 0x0409 , + 0x045A, 0x040A , + 0x045B, 0x040B , + 0x045C, 0x040C , + 0x045E, 0x040E , + 0x045F, 0x040F , + 0x0461, 0x0460 , + 0x0463, 0x0462 , + 0x0465, 0x0464 , + 0x0467, 0x0466 , + 0x0469, 0x0468 , + 0x046B, 0x046A , + 0x046D, 0x046C , + 0x046F, 0x046E , + 0x0471, 0x0470 , + 0x0473, 0x0472 , + 0x0475, 0x0474 , + 0x0477, 0x0476 , + 0x0479, 0x0478 , + 0x047B, 0x047A , + 0x047D, 0x047C , + 0x047F, 0x047E , + 0x0481, 0x0480 , + 0x0491, 0x0490 , + 0x0493, 0x0492 , + 0x0495, 0x0494 , + 0x0497, 0x0496 , + 0x0499, 0x0498 , + 0x049B, 0x049A , + 0x049D, 0x049C , + 0x049F, 0x049E , + 0x04A1, 0x04A0 , + 0x04A3, 0x04A2 , + 0x04A5, 0x04A4 , + 0x04A7, 0x04A6 , + 0x04A9, 0x04A8 , + 0x04AB, 0x04AA , + 0x04AD, 0x04AC , + 0x04AF, 0x04AE , + 0x04B1, 0x04B0 , + 0x04B3, 0x04B2 , + 0x04B5, 0x04B4 , + 0x04B7, 0x04B6 , + 0x04B9, 0x04B8 , + 0x04BB, 0x04BA , + 0x04BD, 0x04BC , + 0x04BF, 0x04BE , + 0x04C2, 0x04C1 , + 0x04C4, 0x04C3 , + 0x04C8, 0x04C7 , + 0x04CC, 0x04CB , + 0x04D1, 0x04D0 , + 0x04D3, 0x04D2 , + 0x04D5, 0x04D4 , + 0x04D7, 0x04D6 , + 0x04D9, 0x04D8 , + 0x04DB, 0x04DA , + 0x04DD, 0x04DC , + 0x04DF, 0x04DE , + 0x04E1, 0x04E0 , + 0x04E3, 0x04E2 , + 0x04E5, 0x04E4 , + 0x04E7, 0x04E6 , + 0x04E9, 0x04E8 , + 0x04EB, 0x04EA , + 0x04EF, 0x04EE , + 0x04F1, 0x04F0 , + 0x04F3, 0x04F2 , + 0x04F5, 0x04F4 , + 0x04F9, 0x04F8 , + 0x0561, 0x0531 , + 0x0562, 0x0532 , + 0x0563, 0x0533 , + 0x0564, 0x0534 , + 0x0565, 0x0535 , + 0x0566, 0x0536 , + 0x0567, 0x0537 , + 0x0568, 0x0538 , + 0x0569, 0x0539 , + 0x056A, 0x053A , + 0x056B, 0x053B , + 0x056C, 0x053C , + 0x056D, 0x053D , + 0x056E, 0x053E , + 0x056F, 0x053F , + 0x0570, 0x0540 , + 0x0571, 0x0541 , + 0x0572, 0x0542 , + 0x0573, 0x0543 , + 0x0574, 0x0544 , + 0x0575, 0x0545 , + 0x0576, 0x0546 , + 0x0577, 0x0547 , + 0x0578, 0x0548 , + 0x0579, 0x0549 , + 0x057A, 0x054A , + 0x057B, 0x054B , + 0x057C, 0x054C , + 0x057D, 0x054D , + 0x057E, 0x054E , + 0x057F, 0x054F , + 0x0580, 0x0550 , + 0x0581, 0x0551 , + 0x0582, 0x0552 , + 0x0583, 0x0553 , + 0x0584, 0x0554 , + 0x0585, 0x0555 , + 0x0586, 0x0556 , + 0x10D0, 0x10A0 , + 0x10D1, 0x10A1 , + 0x10D2, 0x10A2 , + 0x10D3, 0x10A3 , + 0x10D4, 0x10A4 , + 0x10D5, 0x10A5 , + 0x10D6, 0x10A6 , + 0x10D7, 0x10A7 , + 0x10D8, 0x10A8 , + 0x10D9, 0x10A9 , + 0x10DA, 0x10AA , + 0x10DB, 0x10AB , + 0x10DC, 0x10AC , + 0x10DD, 0x10AD , + 0x10DE, 0x10AE , + 0x10DF, 0x10AF , + 0x10E0, 0x10B0 , + 0x10E1, 0x10B1 , + 0x10E2, 0x10B2 , + 0x10E3, 0x10B3 , + 0x10E4, 0x10B4 , + 0x10E5, 0x10B5 , + 0x10E6, 0x10B6 , + 0x10E7, 0x10B7 , + 0x10E8, 0x10B8 , + 0x10E9, 0x10B9 , + 0x10EA, 0x10BA , + 0x10EB, 0x10BB , + 0x10EC, 0x10BC , + 0x10ED, 0x10BD , + 0x10EE, 0x10BE , + 0x10EF, 0x10BF , + 0x10F0, 0x10C0 , + 0x10F1, 0x10C1 , + 0x10F2, 0x10C2 , + 0x10F3, 0x10C3 , + 0x10F4, 0x10C4 , + 0x10F5, 0x10C5 , + 0x1E01, 0x1E00 , + 0x1E03, 0x1E02 , + 0x1E05, 0x1E04 , + 0x1E07, 0x1E06 , + 0x1E09, 0x1E08 , + 0x1E0B, 0x1E0A , + 0x1E0D, 0x1E0C , + 0x1E0F, 0x1E0E , + 0x1E11, 0x1E10 , + 0x1E13, 0x1E12 , + 0x1E15, 0x1E14 , + 0x1E17, 0x1E16 , + 0x1E19, 0x1E18 , + 0x1E1B, 0x1E1A , + 0x1E1D, 0x1E1C , + 0x1E1F, 0x1E1E , + 0x1E21, 0x1E20 , + 0x1E23, 0x1E22 , + 0x1E25, 0x1E24 , + 0x1E27, 0x1E26 , + 0x1E29, 0x1E28 , + 0x1E2B, 0x1E2A , + 0x1E2D, 0x1E2C , + 0x1E2F, 0x1E2E , + 0x1E31, 0x1E30 , + 0x1E33, 0x1E32 , + 0x1E35, 0x1E34 , + 0x1E37, 0x1E36 , + 0x1E39, 0x1E38 , + 0x1E3B, 0x1E3A , + 0x1E3D, 0x1E3C , + 0x1E3F, 0x1E3E , + 0x1E41, 0x1E40 , + 0x1E43, 0x1E42 , + 0x1E45, 0x1E44 , + 0x1E47, 0x1E46 , + 0x1E49, 0x1E48 , + 0x1E4B, 0x1E4A , + 0x1E4D, 0x1E4C , + 0x1E4F, 0x1E4E , + 0x1E51, 0x1E50 , + 0x1E53, 0x1E52 , + 0x1E55, 0x1E54 , + 0x1E57, 0x1E56 , + 0x1E59, 0x1E58 , + 0x1E5B, 0x1E5A , + 0x1E5D, 0x1E5C , + 0x1E5F, 0x1E5E , + 0x1E61, 0x1E60 , + 0x1E63, 0x1E62 , + 0x1E65, 0x1E64 , + 0x1E67, 0x1E66 , + 0x1E69, 0x1E68 , + 0x1E6B, 0x1E6A , + 0x1E6D, 0x1E6C , + 0x1E6F, 0x1E6E , + 0x1E71, 0x1E70 , + 0x1E73, 0x1E72 , + 0x1E75, 0x1E74 , + 0x1E77, 0x1E76 , + 0x1E79, 0x1E78 , + 0x1E7B, 0x1E7A , + 0x1E7D, 0x1E7C , + 0x1E7F, 0x1E7E , + 0x1E81, 0x1E80 , + 0x1E83, 0x1E82 , + 0x1E85, 0x1E84 , + 0x1E87, 0x1E86 , + 0x1E89, 0x1E88 , + 0x1E8B, 0x1E8A , + 0x1E8D, 0x1E8C , + 0x1E8F, 0x1E8E , + 0x1E91, 0x1E90 , + 0x1E93, 0x1E92 , + 0x1E95, 0x1E94 , + 0x1EA1, 0x1EA0 , + 0x1EA3, 0x1EA2 , + 0x1EA5, 0x1EA4 , + 0x1EA7, 0x1EA6 , + 0x1EA9, 0x1EA8 , + 0x1EAB, 0x1EAA , + 0x1EAD, 0x1EAC , + 0x1EAF, 0x1EAE , + 0x1EB1, 0x1EB0 , + 0x1EB3, 0x1EB2 , + 0x1EB5, 0x1EB4 , + 0x1EB7, 0x1EB6 , + 0x1EB9, 0x1EB8 , + 0x1EBB, 0x1EBA , + 0x1EBD, 0x1EBC , + 0x1EBF, 0x1EBE , + 0x1EC1, 0x1EC0 , + 0x1EC3, 0x1EC2 , + 0x1EC5, 0x1EC4 , + 0x1EC7, 0x1EC6 , + 0x1EC9, 0x1EC8 , + 0x1ECB, 0x1ECA , + 0x1ECD, 0x1ECC , + 0x1ECF, 0x1ECE , + 0x1ED1, 0x1ED0 , + 0x1ED3, 0x1ED2 , + 0x1ED5, 0x1ED4 , + 0x1ED7, 0x1ED6 , + 0x1ED9, 0x1ED8 , + 0x1EDB, 0x1EDA , + 0x1EDD, 0x1EDC , + 0x1EDF, 0x1EDE , + 0x1EE1, 0x1EE0 , + 0x1EE3, 0x1EE2 , + 0x1EE5, 0x1EE4 , + 0x1EE7, 0x1EE6 , + 0x1EE9, 0x1EE8 , + 0x1EEB, 0x1EEA , + 0x1EED, 0x1EEC , + 0x1EEF, 0x1EEE , + 0x1EF1, 0x1EF0 , + 0x1EF3, 0x1EF2 , + 0x1EF5, 0x1EF4 , + 0x1EF7, 0x1EF6 , + 0x1EF9, 0x1EF8 , + 0x1F00, 0x1F08 , + 0x1F01, 0x1F09 , + 0x1F02, 0x1F0A , + 0x1F03, 0x1F0B , + 0x1F04, 0x1F0C , + 0x1F05, 0x1F0D , + 0x1F06, 0x1F0E , + 0x1F07, 0x1F0F , + 0x1F10, 0x1F18 , + 0x1F11, 0x1F19 , + 0x1F12, 0x1F1A , + 0x1F13, 0x1F1B , + 0x1F14, 0x1F1C , + 0x1F15, 0x1F1D , + 0x1F20, 0x1F28 , + 0x1F21, 0x1F29 , + 0x1F22, 0x1F2A , + 0x1F23, 0x1F2B , + 0x1F24, 0x1F2C , + 0x1F25, 0x1F2D , + 0x1F26, 0x1F2E , + 0x1F27, 0x1F2F , + 0x1F30, 0x1F38 , + 0x1F31, 0x1F39 , + 0x1F32, 0x1F3A , + 0x1F33, 0x1F3B , + 0x1F34, 0x1F3C , + 0x1F35, 0x1F3D , + 0x1F36, 0x1F3E , + 0x1F37, 0x1F3F , + 0x1F40, 0x1F48 , + 0x1F41, 0x1F49 , + 0x1F42, 0x1F4A , + 0x1F43, 0x1F4B , + 0x1F44, 0x1F4C , + 0x1F45, 0x1F4D , + 0x1F51, 0x1F59 , + 0x1F53, 0x1F5B , + 0x1F55, 0x1F5D , + 0x1F57, 0x1F5F , + 0x1F60, 0x1F68 , + 0x1F61, 0x1F69 , + 0x1F62, 0x1F6A , + 0x1F63, 0x1F6B , + 0x1F64, 0x1F6C , + 0x1F65, 0x1F6D , + 0x1F66, 0x1F6E , + 0x1F67, 0x1F6F , + 0x1F80, 0x1F88 , + 0x1F81, 0x1F89 , + 0x1F82, 0x1F8A , + 0x1F83, 0x1F8B , + 0x1F84, 0x1F8C , + 0x1F85, 0x1F8D , + 0x1F86, 0x1F8E , + 0x1F87, 0x1F8F , + 0x1F90, 0x1F98 , + 0x1F91, 0x1F99 , + 0x1F92, 0x1F9A , + 0x1F93, 0x1F9B , + 0x1F94, 0x1F9C , + 0x1F95, 0x1F9D , + 0x1F96, 0x1F9E , + 0x1F97, 0x1F9F , + 0x1FA0, 0x1FA8 , + 0x1FA1, 0x1FA9 , + 0x1FA2, 0x1FAA , + 0x1FA3, 0x1FAB , + 0x1FA4, 0x1FAC , + 0x1FA5, 0x1FAD , + 0x1FA6, 0x1FAE , + 0x1FA7, 0x1FAF , + 0x1FB0, 0x1FB8 , + 0x1FB1, 0x1FB9 , + 0x1FD0, 0x1FD8 , + 0x1FD1, 0x1FD9 , + 0x1FE0, 0x1FE8 , + 0x1FE1, 0x1FE9 , + 0x24D0, 0x24B6 , + 0x24D1, 0x24B7 , + 0x24D2, 0x24B8 , + 0x24D3, 0x24B9 , + 0x24D4, 0x24BA , + 0x24D5, 0x24BB , + 0x24D6, 0x24BC , + 0x24D7, 0x24BD , + 0x24D8, 0x24BE , + 0x24D9, 0x24BF , + 0x24DA, 0x24C0 , + 0x24DB, 0x24C1 , + 0x24DC, 0x24C2 , + 0x24DD, 0x24C3 , + 0x24DE, 0x24C4 , + 0x24DF, 0x24C5 , + 0x24E0, 0x24C6 , + 0x24E1, 0x24C7 , + 0x24E2, 0x24C8 , + 0x24E3, 0x24C9 , + 0x24E4, 0x24CA , + 0x24E5, 0x24CB , + 0x24E6, 0x24CC , + 0x24E7, 0x24CD , + 0x24E8, 0x24CE , + 0x24E9, 0x24CF , + 0xFF41, 0xFF21 , + 0xFF42, 0xFF22 , + 0xFF43, 0xFF23 , + 0xFF44, 0xFF24 , + 0xFF45, 0xFF25 , + 0xFF46, 0xFF26 , + 0xFF47, 0xFF27 , + 0xFF48, 0xFF28 , + 0xFF49, 0xFF29 , + 0xFF4A, 0xFF2A , + 0xFF4B, 0xFF2B , + 0xFF4C, 0xFF2C , + 0xFF4D, 0xFF2D , + 0xFF4E, 0xFF2E , + 0xFF4F, 0xFF2F , + 0xFF50, 0xFF30 , + 0xFF51, 0xFF31 , + 0xFF52, 0xFF32 , + 0xFF53, 0xFF33 , + 0xFF54, 0xFF34 , + 0xFF55, 0xFF35 , + 0xFF56, 0xFF36 , + 0xFF57, 0xFF37 , + 0xFF58, 0xFF38 , + 0xFF59, 0xFF39 , + 0xFF5A, 0xFF3A +}; + + type Codepoint { + code = uint32(0); + } + + int32 utf8_decode(char[] s, uint16 i, Codepoint c) { + if (s[i] < 0x80) { + c.code = s[i]; + return 1; // 1 byte + } else if ((s[i] & 0xE0) == 0xC0) { + c.code = ((s[i] & 0x1F) << 6) | (s[i+1] & 0x3F); + return 2; // 2 bytes + } else if ((s[i] & 0xF0) == 0xE0) { + c.code = ((s[i] & 0x0F) << 12) | ((s[i+1] & 0x3F) << 6) | (s[i+2] & 0x3F); + return 3; // 3 bytes + } else if ((s[i] & 0xF8) == 0xF0) { + c.code = ((s[i] & 0x07) << 18) | ((s[i+1] & 0x3F) << 12) | ((s[i+2] & 0x3F) << 6) | (s[i+3] & 0x3F); + return 4; // 4 bytes + } + return -1; + } + + int32 utf8_encode(uint32 codepoint, char[] output) { + if (codepoint <= 0x7F) { + output[0] = codepoint & 0x7F; + return 1; // 1 byte + } else if (codepoint <= 0x7FF) { + output[0] = 0xC0 | ((codepoint >> 6) & 0x1F); + output[1] = 0x80 | (codepoint & 0x3F); + return 2; // 2 bytes + } else if (codepoint <= 0xFFFF) { + output[0] = 0xE0 | ((codepoint >> 12) & 0x0F); + output[1] = 0x80 | ((codepoint >> 6) & 0x3F); + output[2] = 0x80 | (codepoint & 0x3F); + return 3; // 3 bytes + } else if (codepoint <= 0x10FFFF) { + output[0] = 0xF0 | ((codepoint >> 18) & 0x07); + output[1] = 0x80 | ((codepoint >> 12) & 0x3F); + output[2] = 0x80 | ((codepoint >> 6) & 0x3F); + output[3] = 0x80 | (codepoint & 0x3F); + return 4; // 4 bytes + } + return -1; + } + + int32 to_uppercase(uint32 codepoint) { + i = uint16(0); + while i < mapping.size { + if mapping[i] == codepoint { + return mapping[i + 1]; + } + i += 2; + } + + if (codepoint >= 0x61 and codepoint <= 0x7A) { + return codepoint & 0x5F; + } + return codepoint; + } + + int32 to_lowercase(uint32 codepoint) { + i = uint16(0); + while i < mapping.size { + if mapping[i + 1] == codepoint { + return mapping[i]; + } + i += 2; + } + + if (codepoint >= 0x41 and codepoint <= 0x5A) { + return codepoint | 0x20; + } + return codepoint; + } + + void strcpy(char[] src, uint16 spos, char[] dst, uint16 dpos, uint16 len) { + i = 0; + if (spos + len > src.size) or (dpos + len > dst.size) { + return; + } + while (i < len) { + dst[dpos + i] = src[spos + i]; + i++; + } + } + + + void strtouppercase(char[] str) { + p = uint16 (0); + w = uint16 (0); + output = {0:4}; + + while p < str.size { + codepoint = Codepoint(); + len = utf8_decode(str, p, codepoint); + if (len < 1) { + p++; + } else { + uppercase_codepoint = to_uppercase(codepoint.code); + out_len = utf8_encode(uppercase_codepoint, output); + + if (out_len > 0) { + strcpy(output, 0, str, w, out_len); + w += out_len; + } + + p += len; + } + + } + } + + void strtolowercase(char[] str) { + p = uint16 (0); + w = uint16 (0); + output = {0:4}; + + while p < str.size { + codepoint = Codepoint(); + len = utf8_decode(str, p, codepoint); + if (len < 1) { + p++; + } else { + lowercase_codepoint = to_lowercase(codepoint.code); + out_len = utf8_encode(lowercase_codepoint, output); + + if (out_len > 0) { + strcpy(output, 0, str, w, out_len); + w += out_len; + } + + p += len; + } + + } + } \ No newline at end of file diff --git a/macbuild b/macbuild index 374cb2c..67f5889 100755 --- a/macbuild +++ b/macbuild @@ -1,6 +1,10 @@ -CXX=/usr/local/opt/llvm/bin/clang++ -CC=/usr/local/opt/llvm/bin/clang +CXX=/opt/homebrew/opt/llvm/bin/clang++ +CC=/opt/homebrew/opt/llvm/bin/clang +LLVM_DIR=/opt/homebrew/Cellar/llvm/18.1.8/lib/cmake/llvm +BISON_EXECUTABLE=/opt/homebrew/bin/bison export CXX export CC +export LLVM_DIR +export BISON_EXECUTABLE cmake -DCMAKE_BUILD_TYPE="Debug" .. #cmake -DCMAKE_CXX_COMPILER_LAUNCHER=ccache -DCMAKE_BUILD_TYPE="Debug" .. diff --git a/platformio/platform/__pycache__/platform.cpython-311.pyc b/platformio/platform/__pycache__/platform.cpython-311.pyc new file mode 100644 index 0000000..8a9ed5c Binary files /dev/null and b/platformio/platform/__pycache__/platform.cpython-311.pyc differ diff --git a/platformio/platform/builder/main.py b/platformio/platform/builder/main.py index 0f6150b..05fa252 100644 --- a/platformio/platform/builder/main.py +++ b/platformio/platform/builder/main.py @@ -51,6 +51,8 @@ def BeforeUpload(target, source, env): # pylint: disable=W0613,W0621 if mcu.startswith("stm32f1"): ldflags.append("-Tstm32f1.ld") + ldflags.append(join(stdlib_folder, "arm-eabi-libgcc.a")) + ldflags.append(join(stdlib_folder, "cortex-m3-arm-missing.o")) auxsources += Glob(join(stdlib_folder, "stm32f1.rob")) elif mcu == "atmega328p": ldflags.append("-Tatmega328p.ld") diff --git a/src/BackLLVM.cpp b/src/BackLLVM.cpp index a324152..7f4007b 100644 --- a/src/BackLLVM.cpp +++ b/src/BackLLVM.cpp @@ -2,6 +2,7 @@ #include #include +#include #include #include #include @@ -56,6 +57,7 @@ TargetInfo supportedTargets[__last_target] = { {rb_avr, "attiny85", "avr", "attiny85", "+avr25", tint16}, {rb_avr, "atmega328p", "avr", "atmega328p", "+avr5", tint16}, {rb_avr, "atmega32u4", "avr", "atmega32u4", "+avr5", tint16}, + {rb_avr, "atmega1284p", "avr", "atmega1284p", "+avr51", tint16}, {rb_arm, "stm32f1", "thumbv7m-none-eabi", "cortex-m3", "", tint32}, @@ -92,12 +94,18 @@ void setup_target_machine(char opt_level) { std::string defaultt = sys::getDefaultTargetTriple(); supportedTargets[0].triple = defaultt.c_str(); SubtargetFeatures Features; + + #if LLVM_VERSION_MAJOR < 19 StringMap HostFeatures; if (sys::getHostCPUFeatures(HostFeatures)) { + #else + auto HostFeatures = sys::getHostCPUFeatures(); { + #endif for (auto &F : HostFeatures) { Features.AddFeature(F.first(), F.second); } } + static string nativeFeatures = Features.getString(); supportedTargets[0].features = nativeFeatures.c_str(); diff --git a/src/BackLLVM.h b/src/BackLLVM.h index f487106..610b1a3 100644 --- a/src/BackLLVM.h +++ b/src/BackLLVM.h @@ -28,6 +28,7 @@ enum SupportedTargets { st_attiny85, st_atmega328p, st_atmega32u4, + st_atmega1284p, // stm32 st_stm32f1, diff --git a/src/BitCast.cpp b/src/BitCast.cpp new file mode 100644 index 0000000..7813488 --- /dev/null +++ b/src/BitCast.cpp @@ -0,0 +1,9 @@ + +#include "BitCast.h" + +Value *BitCast::generate(FunctionImpl *func, BasicBlock *block, BasicBlock *allocblock) +{ + Value *v = value->generate(func, block, allocblock); + Type *dTy = buildTypes->llvmType(destTy); + return Builder->CreateBitCast(v, dTy); +} diff --git a/src/BitCast.h b/src/BitCast.h new file mode 100644 index 0000000..bd79566 --- /dev/null +++ b/src/BitCast.h @@ -0,0 +1,29 @@ +#pragma once + +#include "Node.h" +#include "Visitor.h" + +class BitCast: public Node { +private: + Node *value; + DataType destTy; + +public: + BitCast(Node *v, DataType dTy): Node(v->getLoc()), value(v), destTy(dTy) { + addChild(v); + } + + virtual DataType getDataType() override { + return destTy; + } + + virtual DataType getSourceType() { + return value->getDataType(); + } + + virtual Node* accept(Visitor& v) override { + return v.visit(*this); + } + + virtual Value *generate(FunctionImpl *func, BasicBlock *block, BasicBlock *allocblock) override; +}; diff --git a/src/FunctionAttributes.h b/src/FunctionAttributes.h index 8a203f8..ea7ad80 100644 --- a/src/FunctionAttributes.h +++ b/src/FunctionAttributes.h @@ -9,6 +9,7 @@ enum FunctionAttributeType { fa_naked, fa_signal, fa_debugonly, + fa_noopt, }; typedef pair FunctionAttribute; diff --git a/src/FunctionCall.cpp b/src/FunctionCall.cpp index 5e766fa..e4c7870 100644 --- a/src/FunctionCall.cpp +++ b/src/FunctionCall.cpp @@ -131,18 +131,20 @@ Value *FunctionCall::generate(FunctionImpl *func, BasicBlock *block, BasicBlock for(const string& p: params) { Node *coerced; - Value *value; - if (param->isConstExpr()) { - Node *size = param->findMember("size"); + Value *value = NULL; + Node *size = param->findMember("size"); + if (size) { coerced = PropagateTypes::coerceTo(size, tint32u); value = coerced->generate(func, block, allocblock); - } else { + } + if (!value) { string pname = param->getName() + p; Load ld(Identifier(pname, param->getLoc())); ld.setScope(func); coerced = PropagateTypes::coerceTo(&ld, tint32u); value = coerced->generate(func, block, allocblock); } + assert(value != NULL && "must pass the array size."); args.push_back(value); dataTypes.push_back(coerced->getDataType()); } diff --git a/src/FunctionDecl.cpp b/src/FunctionDecl.cpp index 9dec694..7feaa43 100644 --- a/src/FunctionDecl.cpp +++ b/src/FunctionDecl.cpp @@ -92,7 +92,7 @@ void FunctionBase::addFunctionAttributes(Function *func) { for(auto &[attr, value] : attributes->getAttributes()) { switch (attr) { case fa_weak: - func->setLinkage(GlobalValue::ExternalWeakLinkage); + func->setLinkage(GlobalValue::WeakAnyLinkage); break; case fa_inline: func->addFnAttr(Attribute::AlwaysInline); @@ -110,6 +110,10 @@ void FunctionBase::addFunctionAttributes(Function *func) { func->addFnAttr(Attribute::Naked); func->addFnAttr(Attribute::NoInline); break; + case fa_noopt: + func->addFnAttr(Attribute::OptimizeNone); + func->addFnAttr(Attribute::NoInline); + break; default: break; } diff --git a/src/Header.h b/src/Header.h index 07221a5..751916a 100644 --- a/src/Header.h +++ b/src/Header.h @@ -53,3 +53,4 @@ #include "MemCopy.h" #include "BackLLVM.h" #include "NamedConst.h" +#include "BitCast.h" diff --git a/src/Language.l b/src/Language.l index 195cf7e..259437e 100644 --- a/src/Language.l +++ b/src/Language.l @@ -51,6 +51,7 @@ EXP ([Ee][-+]?[0-9]+)? "naked" { return TOK_NAKED; } "signal" { return TOK_SIGNAL; } "debugonly" { return TOK_DEBUGONLY; } +"noopt" { return TOK_NOOPT; } "bind" { return TOK_BIND; } "to" { return TOK_TO; } diff --git a/src/Language.y b/src/Language.y index e342049..f6d1ee7 100644 --- a/src/Language.y +++ b/src/Language.y @@ -151,6 +151,7 @@ function_attribute | TOK_NAKED { $$ = new FunctionAttribute(fa_naked, ""); } | TOK_SIGNAL { $$ = new FunctionAttribute(fa_signal, ""); } | TOK_DEBUGONLY { $$ = new FunctionAttribute(fa_debugonly, ""); } + | TOK_NOOPT { $$ = new FunctionAttribute(fa_noopt, ""); } | TOK_SECTION TOK_IDENTIFIER[id] { $$ = new FunctionAttribute(fa_section, $id); } event : TOK_QUANDO TOK_INTEGER TOK_ESTA TOK_INTEGER '{' stmts '}'[ef] { @@ -464,7 +465,16 @@ unary : '-' factor { $$ = new BinaryOp($factor, '*', getNodeForIntConst(-1, @fac call_or_cast : ident_or_xident[id] '(' paramscall ')' { if (strncmp("copy", $id, 4) == 0 && $paramscall->getNumParams() == 1) $$ = new MemCopy($paramscall->getParamElement(0)); - else { + else if (strncmp("bitcast", $id, 7) == 0 && $paramscall->getNumParams() == 2) { + Node *nodeTy = $paramscall->getParamElement(1); + Load *load = dynamic_cast(nodeTy); + if (load && buildTypes->getType(load->getName()) != BuildTypes::undefinedType) { + DataType dt = buildTypes->getType(load->getName()); + $$ = new BitCast($paramscall->getParamElement(0), dt); + } else { + $$ = new FunctionCall($id, $paramscall, @id); + } + } else { $$ = new FunctionCall($id, $paramscall, @id); } $$->setLocation(@id); diff --git a/src/LanguageHeader.y b/src/LanguageHeader.y index 5156e8d..77b54be 100644 --- a/src/LanguageHeader.y +++ b/src/LanguageHeader.y @@ -35,7 +35,7 @@ %token TOK_QUANDO TOK_ESTA %token EQ_OP NE_OP GE_OP LE_OP GT_OP LT_OP TOK_LSHIFT TOK_RSHIFT -%token TOK_INLINE TOK_NOINLINE TOK_WEAK TOK_SECTION TOK_NAKED TOK_SIGNAL TOK_DEBUGONLY +%token TOK_INLINE TOK_NOINLINE TOK_WEAK TOK_SECTION TOK_NAKED TOK_SIGNAL TOK_DEBUGONLY TOK_NOOPT %union { char *ident; diff --git a/src/LanguageUse.y b/src/LanguageUse.y index 42aeed3..e56932a 100644 --- a/src/LanguageUse.y +++ b/src/LanguageUse.y @@ -159,6 +159,7 @@ function_attribute | TOK_NAKED { $$ = new FunctionAttribute(fa_naked, ""); } | TOK_SIGNAL { $$ = new FunctionAttribute(fa_signal, ""); } | TOK_DEBUGONLY { $$ = new FunctionAttribute(fa_debugonly, ""); } + | TOK_NOOPT { $$ = new FunctionAttribute(fa_noopt, ""); } | TOK_SECTION TOK_IDENTIFIER[id] { $$ = new FunctionAttribute(fa_section, $id); } qualifier : TOK_CONST { $$ = qconst; } diff --git a/src/LoadArray.cpp b/src/LoadArray.cpp index b450d79..05738d1 100644 --- a/src/LoadArray.cpp +++ b/src/LoadArray.cpp @@ -73,6 +73,7 @@ Value *LoadArray::generate(FunctionImpl *func, BasicBlock *block, BasicBlock *al alloc = Builder->CreateLoad(ty, alloc, symbol->hasQualifier(qvolatile), "deref"); } + Builder->SetInsertPoint(block); Value *zero = ConstantInt::get(Type::getInt8Ty(global_context), 0); Value *indexList[2] = {zero, indice}; Value *ptr = Builder->CreateGEP(symbol->getLLVMType(), alloc, ArrayRef(indexList), "gep"); diff --git a/src/PropagateTypes.cpp b/src/PropagateTypes.cpp index d456a75..e72de0c 100644 --- a/src/PropagateTypes.cpp +++ b/src/PropagateTypes.cpp @@ -536,3 +536,19 @@ Node* PropagateTypes::visit(MemCopy& n) { n.symbols = n.children()[0]->getSymbols(); return NULL; } + +Node* PropagateTypes::visit(BitCast& n) { + propagateChildren(n); + DataType dt = n.getDataType(); + int returnBitwidth = buildTypes->bitWidth(dt); + DataType st = n.getSourceType(); + int sourceBitwidth = buildTypes->bitWidth(st); + + if (returnBitwidth != sourceBitwidth) { + yyerrorcpp(string_format("Can not bitcast from '%s' to '%s'.", + buildTypes->name(st), + buildTypes->name(dt)), &n); + } + + return NULL; +} diff --git a/src/PropagateTypes.h b/src/PropagateTypes.h index 146b93d..0063f78 100644 --- a/src/PropagateTypes.h +++ b/src/PropagateTypes.h @@ -15,6 +15,7 @@ #include "Enum.h" #include "Load.h" #include "MemCopy.h" +#include "BitCast.h" class CoercionBase: public Node { protected: @@ -121,9 +122,9 @@ class FloatToInt: public CoercionBase { RobDbgInfo.emitLocation(this); Builder->SetInsertPoint(block); if (buildTypes->isUnsignedDataType(dt)) - return Builder->CreateFPToUI(v, buildTypes->llvmType(dt), "trunc"); + return Builder->CreateFPToUI(v, buildTypes->llvmType(dt), "fptoui"); else - return Builder->CreateFPToSI(v, buildTypes->llvmType(dt), "trunc"); + return Builder->CreateFPToSI(v, buildTypes->llvmType(dt), "fptosi"); } }; @@ -216,4 +217,6 @@ class PropagateTypes: public Visitor { virtual Node* visit(Return& n) override; virtual Node* visit(FunctionImpl& n) override; virtual Node* visit(FunctionCall& n) override; + + virtual Node* visit(BitCast& n) override; }; diff --git a/src/Scalar.cpp b/src/Scalar.cpp index f42d3ac..9c4e1a3 100644 --- a/src/Scalar.cpp +++ b/src/Scalar.cpp @@ -178,10 +178,13 @@ Value *Scalar::generate(FunctionImpl *func, BasicBlock *block, BasicBlock *alloc nvalue = exprv; } - RobDbgInfo.emitLocation(this); - const DataLayout &DL = mainmodule->getDataLayout(); - Align align = DL.getABITypeAlign(nvalue->getType()); - return Builder->CreateAlignedStore(nvalue, alloc, align, symbol->hasQualifier(qvolatile)); + if (nvalue != alloc) { + RobDbgInfo.emitLocation(this); + const DataLayout &DL = mainmodule->getDataLayout(); + Align align = DL.getABITypeAlign(nvalue->getType()); + return Builder->CreateAlignedStore(nvalue, alloc, align, symbol->hasQualifier(qvolatile)); + } else + return nvalue; } } diff --git a/src/StringConst.cpp b/src/StringConst.cpp index 579a4b5..a340711 100644 --- a/src/StringConst.cpp +++ b/src/StringConst.cpp @@ -1,5 +1,6 @@ #include "StringConst.h" +#include "BackLLVM.h" #include "NamedConst.h" StringConst::StringConst(const string& name, const string& str, location_t loc) : @@ -21,8 +22,32 @@ Value* StringConst::generate(FunctionImpl *func, BasicBlock *block, BasicBlock * constant, name); gv->setUnnamedAddr(GlobalValue::UnnamedAddr::Global); gv->setAlignment(Align(1)); - Constant *zero = ConstantInt::get(Type::getInt32Ty(global_context), 0); - Constant *indices[] = {zero, zero}; - value = ConstantExpr::getInBoundsGetElementPtr(gv->getValueType(), gv, indices); + + // const a = "abcdef" or a call to func("abc") + if (!leftValue || leftValue->hasQualifier(qconst)) { + Constant *zero = ConstantInt::get(Type::getInt32Ty(global_context), 0); + Constant *indices[] = {zero, zero}; + value = ConstantExpr::getInBoundsGetElementPtr(gv->getValueType(), gv, indices); + } else { + // a = "abcdef", alloc array and copy string const to it + Type* I = buildTypes->llvmType(tchar); + auto arrayType = ArrayType::get(I, str.size()); + + // alloc array + Builder->SetInsertPoint(allocblock); + auto alloc = Builder->CreateAlloca(arrayType, dataAddrSpace, 0, leftValue->getName()); + if (debug_info) { + RobDbgInfo.emitLocation(this); + RobDbgInfo.declareVar(leftValue, alloc, allocblock); + } + leftValue->setAlloca(alloc); + + // copy string to the new array + Builder->SetInsertPoint(block); + Builder->CreateMemCpy(alloc, Align(1), gv, Align(1), str.size()); + value = alloc; + + } + return value; } diff --git a/src/StringConst.h b/src/StringConst.h index 794544b..c8e97f5 100644 --- a/src/StringConst.h +++ b/src/StringConst.h @@ -8,6 +8,7 @@ class StringConst: public Array { protected: string str; Value *value = NULL; + Variable *leftValue = NULL; public: StringConst(const string& name, const string& str, location_t loc); @@ -34,4 +35,8 @@ class StringConst: public Array { virtual bool isConstExpr() override { return true; } + + void setLeftValue(Variable *symbol) override { + leftValue = symbol; + } }; diff --git a/src/Visitor.h b/src/Visitor.h index 2dc7476..f27ed6c 100644 --- a/src/Visitor.h +++ b/src/Visitor.h @@ -36,6 +36,7 @@ class Variable; class NamedConst; class MemCopy; class Enum; +class BitCast; #define VISITOR_DECLAREP(T, P) \ virtual Node *visit(T& n) { return visit((P&)n); } \ @@ -87,6 +88,7 @@ class Visitor { VISITOR_DECLARE(MemCopy) VISITOR_DECLARE(Enum) VISITOR_DECLARE(UpdateArray) + VISITOR_DECLARE(BitCast) }; diff --git a/test/atmega1284p/Makefile b/test/atmega1284p/Makefile new file mode 100644 index 0000000..84a2645 --- /dev/null +++ b/test/atmega1284p/Makefile @@ -0,0 +1,63 @@ +ALL=$(patsubst %.rob,out/%,$(wildcard *.rob)) +ALL_LL=$(patsubst %.rob,out/%.ll,$(wildcard *.rob)) +ALL_TT=$(patsubst %.rob,%.tt,$(wildcard *.rob)) +ALL_TIME=$(patsubst %.rob,%.time,$(wildcard *.rob)) +ALL_OO=$(patsubst %.rob,out/%.o,$(wildcard *.rob)) out/atmega1284p.o + +ROBCMP=../../build/robcmp +INCLUDES=-I ../../lib + +ifndef OPT +#OPT=-g -O0 +OPT=-Oz +endif + +LD_FLAGS=-nostdlib -entry=main -L../../lib -Tatmega1284p.ld ../../lib/avr51.o +LD_FLAGS+=-Bstatic +LD_FLAGS+=--gc-sections +LD_FLAGS+=--lto=thin + +DEPENDS=${ROBCMP} Makefile +LINK_DEPENDS=out/atmega1284p.o + +all: out test + +time: out time + +out: + mkdir -p out + +out/atmega1284p.o : ../../lib/atmega1284p.rob ${DEPENDS} + ${ROBCMP} -a atmega1284p ${OPT} -o $@ $< + +out/atmega1284p.ll : ../../lib/atmega1284p.rob ${DEPENDS} + ${ROBCMP} -a atmega1284p ${OPT} $< > $@ + +.SECONDARY: +out/%.o : %.rob out/atmega1284p.o ${DEPENDS} + ${ROBCMP} -bdep -a atmega1284p ${OPT} ${INCLUDES} -o $@ $< + +out/%.ll : %.rob ${DEPENDS} + ${ROBCMP} -bdep -a atmega1284p ${OPT} ${INCLUDES} $< > $@ + +%.tt : %.rob ${DEPENDS} + @-./runtest.sh $< $(patsubst %.rob,out/%,$<) + +%.time : %.rob ${DEPENDS} clean + @-./timetest.sh $< $(patsubst %.rob,out/%,$<) + +out/% : out/%.o ${LINK_DEPENDS} + # exchange here if ld.lld show relocation errors + ld.lld ${LD_FLAGS} $^ -o $@ + #avr-ld ${LD_FLAGS} $^ -o $@ + +test: ${ALL_TT} + +time: ${ALL_TIME} + +size: + avr-size out/*.o + +clean: + @rm -f ${ALL} ${ALL_LL} ${ALL_OO} + diff --git a/test/atmega1284p/bitstruct-field-i5.rob b/test/atmega1284p/bitstruct-field-i5.rob new file mode 120000 index 0000000..8246bd7 --- /dev/null +++ b/test/atmega1284p/bitstruct-field-i5.rob @@ -0,0 +1 @@ +../atmega328p/bitstruct-field-i5.rob \ No newline at end of file diff --git a/test/atmega1284p/bsscheck.rob b/test/atmega1284p/bsscheck.rob new file mode 120000 index 0000000..3fe20d6 --- /dev/null +++ b/test/atmega1284p/bsscheck.rob @@ -0,0 +1 @@ +../atmega328p/bsscheck.rob \ No newline at end of file diff --git a/test/atmega1284p/bssinjcheck.rob b/test/atmega1284p/bssinjcheck.rob new file mode 120000 index 0000000..18ae991 --- /dev/null +++ b/test/atmega1284p/bssinjcheck.rob @@ -0,0 +1 @@ +../atmega328p/bssinjcheck.rob \ No newline at end of file diff --git a/test/atmega1284p/datacheck.rob b/test/atmega1284p/datacheck.rob new file mode 120000 index 0000000..016886b --- /dev/null +++ b/test/atmega1284p/datacheck.rob @@ -0,0 +1 @@ +../atmega328p/datacheck.rob \ No newline at end of file diff --git a/test/atmega1284p/float.rob b/test/atmega1284p/float.rob new file mode 120000 index 0000000..ba4a261 --- /dev/null +++ b/test/atmega1284p/float.rob @@ -0,0 +1 @@ +../atmega328p/float.rob \ No newline at end of file diff --git a/test/atmega1284p/globaldata.rob b/test/atmega1284p/globaldata.rob new file mode 120000 index 0000000..58624a6 --- /dev/null +++ b/test/atmega1284p/globaldata.rob @@ -0,0 +1 @@ +../atmega328p/globaldata.rob \ No newline at end of file diff --git a/test/atmega1284p/globals.rob b/test/atmega1284p/globals.rob new file mode 120000 index 0000000..fc74855 --- /dev/null +++ b/test/atmega1284p/globals.rob @@ -0,0 +1 @@ +../atmega328p/globals.rob \ No newline at end of file diff --git a/test/atmega1284p/itoa.rob b/test/atmega1284p/itoa.rob new file mode 120000 index 0000000..89cdfe3 --- /dev/null +++ b/test/atmega1284p/itoa.rob @@ -0,0 +1 @@ +../atmega328p/itoa.rob \ No newline at end of file diff --git a/test/atmega1284p/mapping_file_001.rob b/test/atmega1284p/mapping_file_001.rob new file mode 100644 index 0000000..6472a10 --- /dev/null +++ b/test/atmega1284p/mapping_file_001.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "aώḹ"; + ou_str = "AΏḸ"; + l_str = "aώḹ"; + u_str = "AΏḸ"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} \ No newline at end of file diff --git a/test/atmega1284p/mapping_file_002.rob b/test/atmega1284p/mapping_file_002.rob new file mode 100644 index 0000000..e33ea56 --- /dev/null +++ b/test/atmega1284p/mapping_file_002.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "bϣḻ"; + ou_str = "BϢḺ"; + l_str = "bϣḻ"; + u_str = "BϢḺ"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_003.rob b/test/atmega1284p/mapping_file_003.rob new file mode 100644 index 0000000..241af12 --- /dev/null +++ b/test/atmega1284p/mapping_file_003.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "cϥḽ"; + ou_str = "CϤḼ"; + l_str = "cϥḽ"; + u_str = "CϤḼ"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_004.rob b/test/atmega1284p/mapping_file_004.rob new file mode 100644 index 0000000..bdb1506 --- /dev/null +++ b/test/atmega1284p/mapping_file_004.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "dϧḿ"; + ou_str = "DϦḾ"; + l_str = "dϧḿ"; + u_str = "DϦḾ"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_005.rob b/test/atmega1284p/mapping_file_005.rob new file mode 100644 index 0000000..b49e4a0 --- /dev/null +++ b/test/atmega1284p/mapping_file_005.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "eϩṁ"; + ou_str = "EϨṀ"; + l_str = "eϩṁ"; + u_str = "EϨṀ"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_006.rob b/test/atmega1284p/mapping_file_006.rob new file mode 100644 index 0000000..e38f467 --- /dev/null +++ b/test/atmega1284p/mapping_file_006.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "fϫṃ"; + ou_str = "FϪṂ"; + l_str = "fϫṃ"; + u_str = "FϪṂ"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_007.rob b/test/atmega1284p/mapping_file_007.rob new file mode 100644 index 0000000..8ed0965 --- /dev/null +++ b/test/atmega1284p/mapping_file_007.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "gϭṅ"; + ou_str = "GϬṄ"; + l_str = "gϭṅ"; + u_str = "GϬṄ"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_008.rob b/test/atmega1284p/mapping_file_008.rob new file mode 100644 index 0000000..2e6cbab --- /dev/null +++ b/test/atmega1284p/mapping_file_008.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "hϯṇ"; + ou_str = "HϮṆ"; + l_str = "hϯṇ"; + u_str = "HϮṆ"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_009.rob b/test/atmega1284p/mapping_file_009.rob new file mode 100644 index 0000000..e587d16 --- /dev/null +++ b/test/atmega1284p/mapping_file_009.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "iаṉ"; + ou_str = "IАṈ"; + l_str = "iаṉ"; + u_str = "IАṈ"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_010.rob b/test/atmega1284p/mapping_file_010.rob new file mode 100644 index 0000000..6757647 --- /dev/null +++ b/test/atmega1284p/mapping_file_010.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "jбṋ"; + ou_str = "JБṊ"; + l_str = "jбṋ"; + u_str = "JБṊ"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_011.rob b/test/atmega1284p/mapping_file_011.rob new file mode 100644 index 0000000..90fa418 --- /dev/null +++ b/test/atmega1284p/mapping_file_011.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "kвṍ"; + ou_str = "KВṌ"; + l_str = "kвṍ"; + u_str = "KВṌ"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_012.rob b/test/atmega1284p/mapping_file_012.rob new file mode 100644 index 0000000..1eee446 --- /dev/null +++ b/test/atmega1284p/mapping_file_012.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "lгṏ"; + ou_str = "LГṎ"; + l_str = "lгṏ"; + u_str = "LГṎ"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_013.rob b/test/atmega1284p/mapping_file_013.rob new file mode 100644 index 0000000..b323694 --- /dev/null +++ b/test/atmega1284p/mapping_file_013.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "mдṑ"; + ou_str = "MДṐ"; + l_str = "mдṑ"; + u_str = "MДṐ"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_014.rob b/test/atmega1284p/mapping_file_014.rob new file mode 100644 index 0000000..e9507c4 --- /dev/null +++ b/test/atmega1284p/mapping_file_014.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "nеṓ"; + ou_str = "NЕṒ"; + l_str = "nеṓ"; + u_str = "NЕṒ"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_015.rob b/test/atmega1284p/mapping_file_015.rob new file mode 100644 index 0000000..49296f0 --- /dev/null +++ b/test/atmega1284p/mapping_file_015.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "oжṕ"; + ou_str = "OЖṔ"; + l_str = "oжṕ"; + u_str = "OЖṔ"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_016.rob b/test/atmega1284p/mapping_file_016.rob new file mode 100644 index 0000000..f3a6526 --- /dev/null +++ b/test/atmega1284p/mapping_file_016.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "pзṗ"; + ou_str = "PЗṖ"; + l_str = "pзṗ"; + u_str = "PЗṖ"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_017.rob b/test/atmega1284p/mapping_file_017.rob new file mode 100644 index 0000000..a6f0db6 --- /dev/null +++ b/test/atmega1284p/mapping_file_017.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "qиṙ"; + ou_str = "QИṘ"; + l_str = "qиṙ"; + u_str = "QИṘ"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_018.rob b/test/atmega1284p/mapping_file_018.rob new file mode 100644 index 0000000..a81618e --- /dev/null +++ b/test/atmega1284p/mapping_file_018.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "rйṛ"; + ou_str = "RЙṚ"; + l_str = "rйṛ"; + u_str = "RЙṚ"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_019.rob b/test/atmega1284p/mapping_file_019.rob new file mode 100644 index 0000000..cac18ec --- /dev/null +++ b/test/atmega1284p/mapping_file_019.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "sкṝ"; + ou_str = "SКṜ"; + l_str = "sкṝ"; + u_str = "SКṜ"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_020.rob b/test/atmega1284p/mapping_file_020.rob new file mode 100644 index 0000000..6268d2c --- /dev/null +++ b/test/atmega1284p/mapping_file_020.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "tлṟ"; + ou_str = "TЛṞ"; + l_str = "tлṟ"; + u_str = "TЛṞ"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_021.rob b/test/atmega1284p/mapping_file_021.rob new file mode 100644 index 0000000..ac6cc00 --- /dev/null +++ b/test/atmega1284p/mapping_file_021.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "uмṡ"; + ou_str = "UМṠ"; + l_str = "uмṡ"; + u_str = "UМṠ"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_022.rob b/test/atmega1284p/mapping_file_022.rob new file mode 100644 index 0000000..1d5d1ed --- /dev/null +++ b/test/atmega1284p/mapping_file_022.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "vнṣ"; + ou_str = "VНṢ"; + l_str = "vнṣ"; + u_str = "VНṢ"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_023.rob b/test/atmega1284p/mapping_file_023.rob new file mode 100644 index 0000000..ca07151 --- /dev/null +++ b/test/atmega1284p/mapping_file_023.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "wоṥ"; + ou_str = "WОṤ"; + l_str = "wоṥ"; + u_str = "WОṤ"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_024.rob b/test/atmega1284p/mapping_file_024.rob new file mode 100644 index 0000000..f43732f --- /dev/null +++ b/test/atmega1284p/mapping_file_024.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "xпṧ"; + ou_str = "XПṦ"; + l_str = "xпṧ"; + u_str = "XПṦ"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_025.rob b/test/atmega1284p/mapping_file_025.rob new file mode 100644 index 0000000..6244286 --- /dev/null +++ b/test/atmega1284p/mapping_file_025.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "yрṩ"; + ou_str = "YРṨ"; + l_str = "yрṩ"; + u_str = "YРṨ"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_026.rob b/test/atmega1284p/mapping_file_026.rob new file mode 100644 index 0000000..ab6395c --- /dev/null +++ b/test/atmega1284p/mapping_file_026.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "zсṫ"; + ou_str = "ZСṪ"; + l_str = "zсṫ"; + u_str = "ZСṪ"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_027.rob b/test/atmega1284p/mapping_file_027.rob new file mode 100644 index 0000000..739fac0 --- /dev/null +++ b/test/atmega1284p/mapping_file_027.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "àтṭ"; + ou_str = "ÀТṬ"; + l_str = "àтṭ"; + u_str = "ÀТṬ"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_028.rob b/test/atmega1284p/mapping_file_028.rob new file mode 100644 index 0000000..f52b0a2 --- /dev/null +++ b/test/atmega1284p/mapping_file_028.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "áуṯ"; + ou_str = "ÁУṮ"; + l_str = "áуṯ"; + u_str = "ÁУṮ"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_029.rob b/test/atmega1284p/mapping_file_029.rob new file mode 100644 index 0000000..e73b241 --- /dev/null +++ b/test/atmega1284p/mapping_file_029.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "âфṱ"; + ou_str = "ÂФṰ"; + l_str = "âфṱ"; + u_str = "ÂФṰ"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_030.rob b/test/atmega1284p/mapping_file_030.rob new file mode 100644 index 0000000..159021d --- /dev/null +++ b/test/atmega1284p/mapping_file_030.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "ãхṳ"; + ou_str = "ÃХṲ"; + l_str = "ãхṳ"; + u_str = "ÃХṲ"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_031.rob b/test/atmega1284p/mapping_file_031.rob new file mode 100644 index 0000000..8930a59 --- /dev/null +++ b/test/atmega1284p/mapping_file_031.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "äцṵ"; + ou_str = "ÄЦṴ"; + l_str = "äцṵ"; + u_str = "ÄЦṴ"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_032.rob b/test/atmega1284p/mapping_file_032.rob new file mode 100644 index 0000000..e224e1a --- /dev/null +++ b/test/atmega1284p/mapping_file_032.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "åчṷ"; + ou_str = "ÅЧṶ"; + l_str = "åчṷ"; + u_str = "ÅЧṶ"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_033.rob b/test/atmega1284p/mapping_file_033.rob new file mode 100644 index 0000000..9f5cab2 --- /dev/null +++ b/test/atmega1284p/mapping_file_033.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "æшṹ"; + ou_str = "ÆШṸ"; + l_str = "æшṹ"; + u_str = "ÆШṸ"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_034.rob b/test/atmega1284p/mapping_file_034.rob new file mode 100644 index 0000000..05f8e14 --- /dev/null +++ b/test/atmega1284p/mapping_file_034.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "çщṻ"; + ou_str = "ÇЩṺ"; + l_str = "çщṻ"; + u_str = "ÇЩṺ"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_035.rob b/test/atmega1284p/mapping_file_035.rob new file mode 100644 index 0000000..3ca1dad --- /dev/null +++ b/test/atmega1284p/mapping_file_035.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "èъṽ"; + ou_str = "ÈЪṼ"; + l_str = "èъṽ"; + u_str = "ÈЪṼ"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_036.rob b/test/atmega1284p/mapping_file_036.rob new file mode 100644 index 0000000..9eec332 --- /dev/null +++ b/test/atmega1284p/mapping_file_036.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "éыṿ"; + ou_str = "ÉЫṾ"; + l_str = "éыṿ"; + u_str = "ÉЫṾ"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_037.rob b/test/atmega1284p/mapping_file_037.rob new file mode 100644 index 0000000..2328864 --- /dev/null +++ b/test/atmega1284p/mapping_file_037.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "êьẁ"; + ou_str = "ÊЬẀ"; + l_str = "êьẁ"; + u_str = "ÊЬẀ"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_038.rob b/test/atmega1284p/mapping_file_038.rob new file mode 100644 index 0000000..3a0babe --- /dev/null +++ b/test/atmega1284p/mapping_file_038.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "ëэẃ"; + ou_str = "ËЭẂ"; + l_str = "ëэẃ"; + u_str = "ËЭẂ"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_039.rob b/test/atmega1284p/mapping_file_039.rob new file mode 100644 index 0000000..91fbb93 --- /dev/null +++ b/test/atmega1284p/mapping_file_039.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "ìюẅ"; + ou_str = "ÌЮẄ"; + l_str = "ìюẅ"; + u_str = "ÌЮẄ"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_040.rob b/test/atmega1284p/mapping_file_040.rob new file mode 100644 index 0000000..7bff3bd --- /dev/null +++ b/test/atmega1284p/mapping_file_040.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "íяẇ"; + ou_str = "ÍЯẆ"; + l_str = "íяẇ"; + u_str = "ÍЯẆ"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_041.rob b/test/atmega1284p/mapping_file_041.rob new file mode 100644 index 0000000..df00d6e --- /dev/null +++ b/test/atmega1284p/mapping_file_041.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "îёẉ"; + ou_str = "ÎЁẈ"; + l_str = "îёẉ"; + u_str = "ÎЁẈ"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_042.rob b/test/atmega1284p/mapping_file_042.rob new file mode 100644 index 0000000..82c8ba3 --- /dev/null +++ b/test/atmega1284p/mapping_file_042.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "ïђẋ"; + ou_str = "ÏЂẊ"; + l_str = "ïђẋ"; + u_str = "ÏЂẊ"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_043.rob b/test/atmega1284p/mapping_file_043.rob new file mode 100644 index 0000000..e5257a4 --- /dev/null +++ b/test/atmega1284p/mapping_file_043.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "ðѓẍ"; + ou_str = "ÐЃẌ"; + l_str = "ðѓẍ"; + u_str = "ÐЃẌ"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_044.rob b/test/atmega1284p/mapping_file_044.rob new file mode 100644 index 0000000..bbe8412 --- /dev/null +++ b/test/atmega1284p/mapping_file_044.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "ñєẏ"; + ou_str = "ÑЄẎ"; + l_str = "ñєẏ"; + u_str = "ÑЄẎ"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_045.rob b/test/atmega1284p/mapping_file_045.rob new file mode 100644 index 0000000..d8084cc --- /dev/null +++ b/test/atmega1284p/mapping_file_045.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "òѕẑ"; + ou_str = "ÒЅẐ"; + l_str = "òѕẑ"; + u_str = "ÒЅẐ"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_046.rob b/test/atmega1284p/mapping_file_046.rob new file mode 100644 index 0000000..2370cc6 --- /dev/null +++ b/test/atmega1284p/mapping_file_046.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "óіẓ"; + ou_str = "ÓІẒ"; + l_str = "óіẓ"; + u_str = "ÓІẒ"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_047.rob b/test/atmega1284p/mapping_file_047.rob new file mode 100644 index 0000000..67529a2 --- /dev/null +++ b/test/atmega1284p/mapping_file_047.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "ôїẕ"; + ou_str = "ÔЇẔ"; + l_str = "ôїẕ"; + u_str = "ÔЇẔ"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_048.rob b/test/atmega1284p/mapping_file_048.rob new file mode 100644 index 0000000..6bbbe92 --- /dev/null +++ b/test/atmega1284p/mapping_file_048.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "õјạ"; + ou_str = "ÕЈẠ"; + l_str = "õјạ"; + u_str = "ÕЈẠ"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_049.rob b/test/atmega1284p/mapping_file_049.rob new file mode 100644 index 0000000..8f5f338 --- /dev/null +++ b/test/atmega1284p/mapping_file_049.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "öљả"; + ou_str = "ÖЉẢ"; + l_str = "öљả"; + u_str = "ÖЉẢ"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_050.rob b/test/atmega1284p/mapping_file_050.rob new file mode 100644 index 0000000..c718088 --- /dev/null +++ b/test/atmega1284p/mapping_file_050.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "øњấ"; + ou_str = "ØЊẤ"; + l_str = "øњấ"; + u_str = "ØЊẤ"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_051.rob b/test/atmega1284p/mapping_file_051.rob new file mode 100644 index 0000000..dbf2fe4 --- /dev/null +++ b/test/atmega1284p/mapping_file_051.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "ùћầ"; + ou_str = "ÙЋẦ"; + l_str = "ùћầ"; + u_str = "ÙЋẦ"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_052.rob b/test/atmega1284p/mapping_file_052.rob new file mode 100644 index 0000000..d7f87e1 --- /dev/null +++ b/test/atmega1284p/mapping_file_052.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "úќẩ"; + ou_str = "ÚЌẨ"; + l_str = "úќẩ"; + u_str = "ÚЌẨ"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_053.rob b/test/atmega1284p/mapping_file_053.rob new file mode 100644 index 0000000..9532248 --- /dev/null +++ b/test/atmega1284p/mapping_file_053.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "ûўẫ"; + ou_str = "ÛЎẪ"; + l_str = "ûўẫ"; + u_str = "ÛЎẪ"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_054.rob b/test/atmega1284p/mapping_file_054.rob new file mode 100644 index 0000000..308534b --- /dev/null +++ b/test/atmega1284p/mapping_file_054.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "üџậ"; + ou_str = "ÜЏẬ"; + l_str = "üџậ"; + u_str = "ÜЏẬ"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_055.rob b/test/atmega1284p/mapping_file_055.rob new file mode 100644 index 0000000..112949a --- /dev/null +++ b/test/atmega1284p/mapping_file_055.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "ýѡắ"; + ou_str = "ÝѠẮ"; + l_str = "ýѡắ"; + u_str = "ÝѠẮ"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_056.rob b/test/atmega1284p/mapping_file_056.rob new file mode 100644 index 0000000..3c8e12f --- /dev/null +++ b/test/atmega1284p/mapping_file_056.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "þѣằ"; + ou_str = "ÞѢẰ"; + l_str = "þѣằ"; + u_str = "ÞѢẰ"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_057.rob b/test/atmega1284p/mapping_file_057.rob new file mode 100644 index 0000000..5e56592 --- /dev/null +++ b/test/atmega1284p/mapping_file_057.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "ÿѥẳ"; + ou_str = "ŸѤẲ"; + l_str = "ÿѥẳ"; + u_str = "ŸѤẲ"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_058.rob b/test/atmega1284p/mapping_file_058.rob new file mode 100644 index 0000000..f67ce13 --- /dev/null +++ b/test/atmega1284p/mapping_file_058.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "āѧẵ"; + ou_str = "ĀѦẴ"; + l_str = "āѧẵ"; + u_str = "ĀѦẴ"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_059.rob b/test/atmega1284p/mapping_file_059.rob new file mode 100644 index 0000000..edc1f4d --- /dev/null +++ b/test/atmega1284p/mapping_file_059.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "ăѩặ"; + ou_str = "ĂѨẶ"; + l_str = "ăѩặ"; + u_str = "ĂѨẶ"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_060.rob b/test/atmega1284p/mapping_file_060.rob new file mode 100644 index 0000000..13232f7 --- /dev/null +++ b/test/atmega1284p/mapping_file_060.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "ąѫẹ"; + ou_str = "ĄѪẸ"; + l_str = "ąѫẹ"; + u_str = "ĄѪẸ"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_061.rob b/test/atmega1284p/mapping_file_061.rob new file mode 100644 index 0000000..af1edf7 --- /dev/null +++ b/test/atmega1284p/mapping_file_061.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "ćѭẻ"; + ou_str = "ĆѬẺ"; + l_str = "ćѭẻ"; + u_str = "ĆѬẺ"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_062.rob b/test/atmega1284p/mapping_file_062.rob new file mode 100644 index 0000000..7da0d39 --- /dev/null +++ b/test/atmega1284p/mapping_file_062.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "ĉѯẽ"; + ou_str = "ĈѮẼ"; + l_str = "ĉѯẽ"; + u_str = "ĈѮẼ"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_063.rob b/test/atmega1284p/mapping_file_063.rob new file mode 100644 index 0000000..56cb9f8 --- /dev/null +++ b/test/atmega1284p/mapping_file_063.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "ċѱế"; + ou_str = "ĊѰẾ"; + l_str = "ċѱế"; + u_str = "ĊѰẾ"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_064.rob b/test/atmega1284p/mapping_file_064.rob new file mode 100644 index 0000000..aac29f8 --- /dev/null +++ b/test/atmega1284p/mapping_file_064.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "čѳề"; + ou_str = "ČѲỀ"; + l_str = "čѳề"; + u_str = "ČѲỀ"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_065.rob b/test/atmega1284p/mapping_file_065.rob new file mode 100644 index 0000000..852459b --- /dev/null +++ b/test/atmega1284p/mapping_file_065.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "ďѵể"; + ou_str = "ĎѴỂ"; + l_str = "ďѵể"; + u_str = "ĎѴỂ"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_066.rob b/test/atmega1284p/mapping_file_066.rob new file mode 100644 index 0000000..2029afe --- /dev/null +++ b/test/atmega1284p/mapping_file_066.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "đѷễ"; + ou_str = "ĐѶỄ"; + l_str = "đѷễ"; + u_str = "ĐѶỄ"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_067.rob b/test/atmega1284p/mapping_file_067.rob new file mode 100644 index 0000000..a491f92 --- /dev/null +++ b/test/atmega1284p/mapping_file_067.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "ēѹệ"; + ou_str = "ĒѸỆ"; + l_str = "ēѹệ"; + u_str = "ĒѸỆ"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_068.rob b/test/atmega1284p/mapping_file_068.rob new file mode 100644 index 0000000..5b7a5b4 --- /dev/null +++ b/test/atmega1284p/mapping_file_068.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "ĕѻỉ"; + ou_str = "ĔѺỈ"; + l_str = "ĕѻỉ"; + u_str = "ĔѺỈ"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_069.rob b/test/atmega1284p/mapping_file_069.rob new file mode 100644 index 0000000..e60aa34 --- /dev/null +++ b/test/atmega1284p/mapping_file_069.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "ėѽị"; + ou_str = "ĖѼỊ"; + l_str = "ėѽị"; + u_str = "ĖѼỊ"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_070.rob b/test/atmega1284p/mapping_file_070.rob new file mode 100644 index 0000000..7e53085 --- /dev/null +++ b/test/atmega1284p/mapping_file_070.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "ęѿọ"; + ou_str = "ĘѾỌ"; + l_str = "ęѿọ"; + u_str = "ĘѾỌ"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_071.rob b/test/atmega1284p/mapping_file_071.rob new file mode 100644 index 0000000..4597adc --- /dev/null +++ b/test/atmega1284p/mapping_file_071.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "ěҁỏ"; + ou_str = "ĚҀỎ"; + l_str = "ěҁỏ"; + u_str = "ĚҀỎ"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_072.rob b/test/atmega1284p/mapping_file_072.rob new file mode 100644 index 0000000..894ee4b --- /dev/null +++ b/test/atmega1284p/mapping_file_072.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "ĝґố"; + ou_str = "ĜҐỐ"; + l_str = "ĝґố"; + u_str = "ĜҐỐ"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_073.rob b/test/atmega1284p/mapping_file_073.rob new file mode 100644 index 0000000..86e536d --- /dev/null +++ b/test/atmega1284p/mapping_file_073.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "ğғồ"; + ou_str = "ĞҒỒ"; + l_str = "ğғồ"; + u_str = "ĞҒỒ"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_074.rob b/test/atmega1284p/mapping_file_074.rob new file mode 100644 index 0000000..027c84a --- /dev/null +++ b/test/atmega1284p/mapping_file_074.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "ġҕổ"; + ou_str = "ĠҔỔ"; + l_str = "ġҕổ"; + u_str = "ĠҔỔ"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_075.rob b/test/atmega1284p/mapping_file_075.rob new file mode 100644 index 0000000..dd60d93 --- /dev/null +++ b/test/atmega1284p/mapping_file_075.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "ģҗỗ"; + ou_str = "ĢҖỖ"; + l_str = "ģҗỗ"; + u_str = "ĢҖỖ"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_076.rob b/test/atmega1284p/mapping_file_076.rob new file mode 100644 index 0000000..f1984e9 --- /dev/null +++ b/test/atmega1284p/mapping_file_076.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "ĥҙộ"; + ou_str = "ĤҘỘ"; + l_str = "ĥҙộ"; + u_str = "ĤҘỘ"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_077.rob b/test/atmega1284p/mapping_file_077.rob new file mode 100644 index 0000000..04d9ca2 --- /dev/null +++ b/test/atmega1284p/mapping_file_077.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "ħқớ"; + ou_str = "ĦҚỚ"; + l_str = "ħқớ"; + u_str = "ĦҚỚ"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_078.rob b/test/atmega1284p/mapping_file_078.rob new file mode 100644 index 0000000..50da832 --- /dev/null +++ b/test/atmega1284p/mapping_file_078.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "ĩҝờ"; + ou_str = "ĨҜỜ"; + l_str = "ĩҝờ"; + u_str = "ĨҜỜ"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_079.rob b/test/atmega1284p/mapping_file_079.rob new file mode 100644 index 0000000..232bb94 --- /dev/null +++ b/test/atmega1284p/mapping_file_079.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "īҟở"; + ou_str = "ĪҞỞ"; + l_str = "īҟở"; + u_str = "ĪҞỞ"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_080.rob b/test/atmega1284p/mapping_file_080.rob new file mode 100644 index 0000000..78f5182 --- /dev/null +++ b/test/atmega1284p/mapping_file_080.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "ĭҡỡ"; + ou_str = "ĬҠỠ"; + l_str = "ĭҡỡ"; + u_str = "ĬҠỠ"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_081.rob b/test/atmega1284p/mapping_file_081.rob new file mode 100644 index 0000000..5f81ea6 --- /dev/null +++ b/test/atmega1284p/mapping_file_081.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "įңợ"; + ou_str = "ĮҢỢ"; + l_str = "įңợ"; + u_str = "ĮҢỢ"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_082.rob b/test/atmega1284p/mapping_file_082.rob new file mode 100644 index 0000000..d125136 --- /dev/null +++ b/test/atmega1284p/mapping_file_082.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "ıҥụ"; + ou_str = "IҤỤ"; + l_str = "ıҥụ"; + u_str = "IҤỤ"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_083.rob b/test/atmega1284p/mapping_file_083.rob new file mode 100644 index 0000000..35913b6 --- /dev/null +++ b/test/atmega1284p/mapping_file_083.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "ijҧủ"; + ou_str = "IJҦỦ"; + l_str = "ijҧủ"; + u_str = "IJҦỦ"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_084.rob b/test/atmega1284p/mapping_file_084.rob new file mode 100644 index 0000000..c235866 --- /dev/null +++ b/test/atmega1284p/mapping_file_084.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "ĵҩứ"; + ou_str = "ĴҨỨ"; + l_str = "ĵҩứ"; + u_str = "ĴҨỨ"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_085.rob b/test/atmega1284p/mapping_file_085.rob new file mode 100644 index 0000000..9edafb5 --- /dev/null +++ b/test/atmega1284p/mapping_file_085.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "ķҫừ"; + ou_str = "ĶҪỪ"; + l_str = "ķҫừ"; + u_str = "ĶҪỪ"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_086.rob b/test/atmega1284p/mapping_file_086.rob new file mode 100644 index 0000000..a4269e7 --- /dev/null +++ b/test/atmega1284p/mapping_file_086.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "ĺҭử"; + ou_str = "ĹҬỬ"; + l_str = "ĺҭử"; + u_str = "ĹҬỬ"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_087.rob b/test/atmega1284p/mapping_file_087.rob new file mode 100644 index 0000000..863cae2 --- /dev/null +++ b/test/atmega1284p/mapping_file_087.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "ļүữ"; + ou_str = "ĻҮỮ"; + l_str = "ļүữ"; + u_str = "ĻҮỮ"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_088.rob b/test/atmega1284p/mapping_file_088.rob new file mode 100644 index 0000000..436cf4c --- /dev/null +++ b/test/atmega1284p/mapping_file_088.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "ľұự"; + ou_str = "ĽҰỰ"; + l_str = "ľұự"; + u_str = "ĽҰỰ"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_089.rob b/test/atmega1284p/mapping_file_089.rob new file mode 100644 index 0000000..8c4f128 --- /dev/null +++ b/test/atmega1284p/mapping_file_089.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "ŀҳỳ"; + ou_str = "ĿҲỲ"; + l_str = "ŀҳỳ"; + u_str = "ĿҲỲ"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_090.rob b/test/atmega1284p/mapping_file_090.rob new file mode 100644 index 0000000..461cd45 --- /dev/null +++ b/test/atmega1284p/mapping_file_090.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "łҵỵ"; + ou_str = "ŁҴỴ"; + l_str = "łҵỵ"; + u_str = "ŁҴỴ"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_091.rob b/test/atmega1284p/mapping_file_091.rob new file mode 100644 index 0000000..7315ba7 --- /dev/null +++ b/test/atmega1284p/mapping_file_091.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "ńҷỷ"; + ou_str = "ŃҶỶ"; + l_str = "ńҷỷ"; + u_str = "ŃҶỶ"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_092.rob b/test/atmega1284p/mapping_file_092.rob new file mode 100644 index 0000000..bfab0ab --- /dev/null +++ b/test/atmega1284p/mapping_file_092.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "ņҹỹ"; + ou_str = "ŅҸỸ"; + l_str = "ņҹỹ"; + u_str = "ŅҸỸ"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_093.rob b/test/atmega1284p/mapping_file_093.rob new file mode 100644 index 0000000..4acdcbd --- /dev/null +++ b/test/atmega1284p/mapping_file_093.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "ňһἀ"; + ou_str = "ŇҺἈ"; + l_str = "ňһἀ"; + u_str = "ŇҺἈ"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_094.rob b/test/atmega1284p/mapping_file_094.rob new file mode 100644 index 0000000..a4b920b --- /dev/null +++ b/test/atmega1284p/mapping_file_094.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "ŋҽἁ"; + ou_str = "ŊҼἉ"; + l_str = "ŋҽἁ"; + u_str = "ŊҼἉ"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_095.rob b/test/atmega1284p/mapping_file_095.rob new file mode 100644 index 0000000..6bbe5fa --- /dev/null +++ b/test/atmega1284p/mapping_file_095.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "ōҿἂ"; + ou_str = "ŌҾἊ"; + l_str = "ōҿἂ"; + u_str = "ŌҾἊ"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_096.rob b/test/atmega1284p/mapping_file_096.rob new file mode 100644 index 0000000..0b2945f --- /dev/null +++ b/test/atmega1284p/mapping_file_096.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "ŏӂἃ"; + ou_str = "ŎӁἋ"; + l_str = "ŏӂἃ"; + u_str = "ŎӁἋ"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_097.rob b/test/atmega1284p/mapping_file_097.rob new file mode 100644 index 0000000..bd30fc7 --- /dev/null +++ b/test/atmega1284p/mapping_file_097.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "őӄἄ"; + ou_str = "ŐӃἌ"; + l_str = "őӄἄ"; + u_str = "ŐӃἌ"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_098.rob b/test/atmega1284p/mapping_file_098.rob new file mode 100644 index 0000000..10bc314 --- /dev/null +++ b/test/atmega1284p/mapping_file_098.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "œӈἅ"; + ou_str = "ŒӇἍ"; + l_str = "œӈἅ"; + u_str = "ŒӇἍ"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_099.rob b/test/atmega1284p/mapping_file_099.rob new file mode 100644 index 0000000..db92340 --- /dev/null +++ b/test/atmega1284p/mapping_file_099.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "ŕӌἆ"; + ou_str = "ŔӋἎ"; + l_str = "ŕӌἆ"; + u_str = "ŔӋἎ"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_100.rob b/test/atmega1284p/mapping_file_100.rob new file mode 100644 index 0000000..d7477d3 --- /dev/null +++ b/test/atmega1284p/mapping_file_100.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "ŗӑἇ"; + ou_str = "ŖӐἏ"; + l_str = "ŗӑἇ"; + u_str = "ŖӐἏ"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_101.rob b/test/atmega1284p/mapping_file_101.rob new file mode 100644 index 0000000..9181f01 --- /dev/null +++ b/test/atmega1284p/mapping_file_101.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "řӓἐ"; + ou_str = "ŘӒἘ"; + l_str = "řӓἐ"; + u_str = "ŘӒἘ"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_102.rob b/test/atmega1284p/mapping_file_102.rob new file mode 100644 index 0000000..8ae9d34 --- /dev/null +++ b/test/atmega1284p/mapping_file_102.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "śӕἑ"; + ou_str = "ŚӔἙ"; + l_str = "śӕἑ"; + u_str = "ŚӔἙ"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_103.rob b/test/atmega1284p/mapping_file_103.rob new file mode 100644 index 0000000..2f03b09 --- /dev/null +++ b/test/atmega1284p/mapping_file_103.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "ŝӗἒ"; + ou_str = "ŜӖἚ"; + l_str = "ŝӗἒ"; + u_str = "ŜӖἚ"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_104.rob b/test/atmega1284p/mapping_file_104.rob new file mode 100644 index 0000000..2d2d38c --- /dev/null +++ b/test/atmega1284p/mapping_file_104.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "şәἓ"; + ou_str = "ŞӘἛ"; + l_str = "şәἓ"; + u_str = "ŞӘἛ"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_105.rob b/test/atmega1284p/mapping_file_105.rob new file mode 100644 index 0000000..8c22cdc --- /dev/null +++ b/test/atmega1284p/mapping_file_105.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "šӛἔ"; + ou_str = "ŠӚἜ"; + l_str = "šӛἔ"; + u_str = "ŠӚἜ"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_106.rob b/test/atmega1284p/mapping_file_106.rob new file mode 100644 index 0000000..b329183 --- /dev/null +++ b/test/atmega1284p/mapping_file_106.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "ţӝἕ"; + ou_str = "ŢӜἝ"; + l_str = "ţӝἕ"; + u_str = "ŢӜἝ"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_107.rob b/test/atmega1284p/mapping_file_107.rob new file mode 100644 index 0000000..0942780 --- /dev/null +++ b/test/atmega1284p/mapping_file_107.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "ťӟἠ"; + ou_str = "ŤӞἨ"; + l_str = "ťӟἠ"; + u_str = "ŤӞἨ"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_108.rob b/test/atmega1284p/mapping_file_108.rob new file mode 100644 index 0000000..49633ac --- /dev/null +++ b/test/atmega1284p/mapping_file_108.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "ŧӡἡ"; + ou_str = "ŦӠἩ"; + l_str = "ŧӡἡ"; + u_str = "ŦӠἩ"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_109.rob b/test/atmega1284p/mapping_file_109.rob new file mode 100644 index 0000000..1482a87 --- /dev/null +++ b/test/atmega1284p/mapping_file_109.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "ũӣἢ"; + ou_str = "ŨӢἪ"; + l_str = "ũӣἢ"; + u_str = "ŨӢἪ"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_110.rob b/test/atmega1284p/mapping_file_110.rob new file mode 100644 index 0000000..96c7f2a --- /dev/null +++ b/test/atmega1284p/mapping_file_110.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "ūӥἣ"; + ou_str = "ŪӤἫ"; + l_str = "ūӥἣ"; + u_str = "ŪӤἫ"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_111.rob b/test/atmega1284p/mapping_file_111.rob new file mode 100644 index 0000000..3090a75 --- /dev/null +++ b/test/atmega1284p/mapping_file_111.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "ŭӧἤ"; + ou_str = "ŬӦἬ"; + l_str = "ŭӧἤ"; + u_str = "ŬӦἬ"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_112.rob b/test/atmega1284p/mapping_file_112.rob new file mode 100644 index 0000000..5f6fe3f --- /dev/null +++ b/test/atmega1284p/mapping_file_112.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "ůөἥ"; + ou_str = "ŮӨἭ"; + l_str = "ůөἥ"; + u_str = "ŮӨἭ"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_113.rob b/test/atmega1284p/mapping_file_113.rob new file mode 100644 index 0000000..66d95d0 --- /dev/null +++ b/test/atmega1284p/mapping_file_113.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "űӫἦ"; + ou_str = "ŰӪἮ"; + l_str = "űӫἦ"; + u_str = "ŰӪἮ"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_114.rob b/test/atmega1284p/mapping_file_114.rob new file mode 100644 index 0000000..f320481 --- /dev/null +++ b/test/atmega1284p/mapping_file_114.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "ųӯἧ"; + ou_str = "ŲӮἯ"; + l_str = "ųӯἧ"; + u_str = "ŲӮἯ"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_115.rob b/test/atmega1284p/mapping_file_115.rob new file mode 100644 index 0000000..11a7b14 --- /dev/null +++ b/test/atmega1284p/mapping_file_115.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "ŵӱἰ"; + ou_str = "ŴӰἸ"; + l_str = "ŵӱἰ"; + u_str = "ŴӰἸ"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_116.rob b/test/atmega1284p/mapping_file_116.rob new file mode 100644 index 0000000..8935837 --- /dev/null +++ b/test/atmega1284p/mapping_file_116.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "ŷӳἱ"; + ou_str = "ŶӲἹ"; + l_str = "ŷӳἱ"; + u_str = "ŶӲἹ"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_117.rob b/test/atmega1284p/mapping_file_117.rob new file mode 100644 index 0000000..dac79a6 --- /dev/null +++ b/test/atmega1284p/mapping_file_117.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "źӵἲ"; + ou_str = "ŹӴἺ"; + l_str = "źӵἲ"; + u_str = "ŹӴἺ"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_118.rob b/test/atmega1284p/mapping_file_118.rob new file mode 100644 index 0000000..dc229f3 --- /dev/null +++ b/test/atmega1284p/mapping_file_118.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "żӹἳ"; + ou_str = "ŻӸἻ"; + l_str = "żӹἳ"; + u_str = "ŻӸἻ"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_119.rob b/test/atmega1284p/mapping_file_119.rob new file mode 100644 index 0000000..9290b7a --- /dev/null +++ b/test/atmega1284p/mapping_file_119.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "žաἴ"; + ou_str = "ŽԱἼ"; + l_str = "žաἴ"; + u_str = "ŽԱἼ"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_120.rob b/test/atmega1284p/mapping_file_120.rob new file mode 100644 index 0000000..87868ba --- /dev/null +++ b/test/atmega1284p/mapping_file_120.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "ƃբἵ"; + ou_str = "ƂԲἽ"; + l_str = "ƃբἵ"; + u_str = "ƂԲἽ"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_121.rob b/test/atmega1284p/mapping_file_121.rob new file mode 100644 index 0000000..6983f64 --- /dev/null +++ b/test/atmega1284p/mapping_file_121.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "ƅգἶ"; + ou_str = "ƄԳἾ"; + l_str = "ƅգἶ"; + u_str = "ƄԳἾ"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_122.rob b/test/atmega1284p/mapping_file_122.rob new file mode 100644 index 0000000..89496c8 --- /dev/null +++ b/test/atmega1284p/mapping_file_122.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "ƈդἷ"; + ou_str = "ƇԴἿ"; + l_str = "ƈդἷ"; + u_str = "ƇԴἿ"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_123.rob b/test/atmega1284p/mapping_file_123.rob new file mode 100644 index 0000000..2b13b99 --- /dev/null +++ b/test/atmega1284p/mapping_file_123.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "ƌեὀ"; + ou_str = "ƋԵὈ"; + l_str = "ƌեὀ"; + u_str = "ƋԵὈ"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_124.rob b/test/atmega1284p/mapping_file_124.rob new file mode 100644 index 0000000..c0d7c2c --- /dev/null +++ b/test/atmega1284p/mapping_file_124.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "ƒզὁ"; + ou_str = "ƑԶὉ"; + l_str = "ƒզὁ"; + u_str = "ƑԶὉ"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_125.rob b/test/atmega1284p/mapping_file_125.rob new file mode 100644 index 0000000..af634fa --- /dev/null +++ b/test/atmega1284p/mapping_file_125.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "ƙէὂ"; + ou_str = "ƘԷὊ"; + l_str = "ƙէὂ"; + u_str = "ƘԷὊ"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_126.rob b/test/atmega1284p/mapping_file_126.rob new file mode 100644 index 0000000..6e510ab --- /dev/null +++ b/test/atmega1284p/mapping_file_126.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "ơըὃ"; + ou_str = "ƠԸὋ"; + l_str = "ơըὃ"; + u_str = "ƠԸὋ"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_127.rob b/test/atmega1284p/mapping_file_127.rob new file mode 100644 index 0000000..2b37cb5 --- /dev/null +++ b/test/atmega1284p/mapping_file_127.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "ƣթὄ"; + ou_str = "ƢԹὌ"; + l_str = "ƣթὄ"; + u_str = "ƢԹὌ"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_128.rob b/test/atmega1284p/mapping_file_128.rob new file mode 100644 index 0000000..ce83763 --- /dev/null +++ b/test/atmega1284p/mapping_file_128.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "ƥժὅ"; + ou_str = "ƤԺὍ"; + l_str = "ƥժὅ"; + u_str = "ƤԺὍ"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_129.rob b/test/atmega1284p/mapping_file_129.rob new file mode 100644 index 0000000..0dcba87 --- /dev/null +++ b/test/atmega1284p/mapping_file_129.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "ƨիὑ"; + ou_str = "ƧԻὙ"; + l_str = "ƨիὑ"; + u_str = "ƧԻὙ"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_130.rob b/test/atmega1284p/mapping_file_130.rob new file mode 100644 index 0000000..ab36981 --- /dev/null +++ b/test/atmega1284p/mapping_file_130.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "ƭլὓ"; + ou_str = "ƬԼὛ"; + l_str = "ƭլὓ"; + u_str = "ƬԼὛ"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_131.rob b/test/atmega1284p/mapping_file_131.rob new file mode 100644 index 0000000..9fa009f --- /dev/null +++ b/test/atmega1284p/mapping_file_131.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "ưխὕ"; + ou_str = "ƯԽὝ"; + l_str = "ưխὕ"; + u_str = "ƯԽὝ"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_132.rob b/test/atmega1284p/mapping_file_132.rob new file mode 100644 index 0000000..49f5803 --- /dev/null +++ b/test/atmega1284p/mapping_file_132.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "ƴծὗ"; + ou_str = "ƳԾὟ"; + l_str = "ƴծὗ"; + u_str = "ƳԾὟ"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_133.rob b/test/atmega1284p/mapping_file_133.rob new file mode 100644 index 0000000..f8dccc3 --- /dev/null +++ b/test/atmega1284p/mapping_file_133.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "ƶկὠ"; + ou_str = "ƵԿὨ"; + l_str = "ƶկὠ"; + u_str = "ƵԿὨ"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_134.rob b/test/atmega1284p/mapping_file_134.rob new file mode 100644 index 0000000..f1ae76a --- /dev/null +++ b/test/atmega1284p/mapping_file_134.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "ƹհὡ"; + ou_str = "ƸՀὩ"; + l_str = "ƹհὡ"; + u_str = "ƸՀὩ"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_135.rob b/test/atmega1284p/mapping_file_135.rob new file mode 100644 index 0000000..52c1844 --- /dev/null +++ b/test/atmega1284p/mapping_file_135.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "ƽձὢ"; + ou_str = "ƼՁὪ"; + l_str = "ƽձὢ"; + u_str = "ƼՁὪ"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_136.rob b/test/atmega1284p/mapping_file_136.rob new file mode 100644 index 0000000..553a2c1 --- /dev/null +++ b/test/atmega1284p/mapping_file_136.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "džղὣ"; + ou_str = "DŽՂὫ"; + l_str = "džղὣ"; + u_str = "DŽՂὫ"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_137.rob b/test/atmega1284p/mapping_file_137.rob new file mode 100644 index 0000000..87ba92c --- /dev/null +++ b/test/atmega1284p/mapping_file_137.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "ljճὤ"; + ou_str = "LJՃὬ"; + l_str = "ljճὤ"; + u_str = "LJՃὬ"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_138.rob b/test/atmega1284p/mapping_file_138.rob new file mode 100644 index 0000000..680d1e8 --- /dev/null +++ b/test/atmega1284p/mapping_file_138.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "njմὥ"; + ou_str = "NJՄὭ"; + l_str = "njմὥ"; + u_str = "NJՄὭ"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_139.rob b/test/atmega1284p/mapping_file_139.rob new file mode 100644 index 0000000..1b03e45 --- /dev/null +++ b/test/atmega1284p/mapping_file_139.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "ǎյὦ"; + ou_str = "ǍՅὮ"; + l_str = "ǎյὦ"; + u_str = "ǍՅὮ"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_140.rob b/test/atmega1284p/mapping_file_140.rob new file mode 100644 index 0000000..94cc5fc --- /dev/null +++ b/test/atmega1284p/mapping_file_140.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "ǐնὧ"; + ou_str = "ǏՆὯ"; + l_str = "ǐնὧ"; + u_str = "ǏՆὯ"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_141.rob b/test/atmega1284p/mapping_file_141.rob new file mode 100644 index 0000000..76194a6 --- /dev/null +++ b/test/atmega1284p/mapping_file_141.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "ǒշᾀ"; + ou_str = "ǑՇᾈ"; + l_str = "ǒշᾀ"; + u_str = "ǑՇᾈ"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_142.rob b/test/atmega1284p/mapping_file_142.rob new file mode 100644 index 0000000..82637d6 --- /dev/null +++ b/test/atmega1284p/mapping_file_142.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "ǔոᾁ"; + ou_str = "ǓՈᾉ"; + l_str = "ǔոᾁ"; + u_str = "ǓՈᾉ"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_143.rob b/test/atmega1284p/mapping_file_143.rob new file mode 100644 index 0000000..bbc0bd1 --- /dev/null +++ b/test/atmega1284p/mapping_file_143.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "ǖչᾂ"; + ou_str = "ǕՉᾊ"; + l_str = "ǖչᾂ"; + u_str = "ǕՉᾊ"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_144.rob b/test/atmega1284p/mapping_file_144.rob new file mode 100644 index 0000000..c8646a1 --- /dev/null +++ b/test/atmega1284p/mapping_file_144.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "ǘպᾃ"; + ou_str = "ǗՊᾋ"; + l_str = "ǘպᾃ"; + u_str = "ǗՊᾋ"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_145.rob b/test/atmega1284p/mapping_file_145.rob new file mode 100644 index 0000000..5099836 --- /dev/null +++ b/test/atmega1284p/mapping_file_145.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "ǚջᾄ"; + ou_str = "ǙՋᾌ"; + l_str = "ǚջᾄ"; + u_str = "ǙՋᾌ"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_146.rob b/test/atmega1284p/mapping_file_146.rob new file mode 100644 index 0000000..5d6ae14 --- /dev/null +++ b/test/atmega1284p/mapping_file_146.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "ǜռᾅ"; + ou_str = "ǛՌᾍ"; + l_str = "ǜռᾅ"; + u_str = "ǛՌᾍ"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_147.rob b/test/atmega1284p/mapping_file_147.rob new file mode 100644 index 0000000..29ee720 --- /dev/null +++ b/test/atmega1284p/mapping_file_147.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "ǟսᾆ"; + ou_str = "ǞՍᾎ"; + l_str = "ǟսᾆ"; + u_str = "ǞՍᾎ"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_148.rob b/test/atmega1284p/mapping_file_148.rob new file mode 100644 index 0000000..1f291a9 --- /dev/null +++ b/test/atmega1284p/mapping_file_148.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "ǡվᾇ"; + ou_str = "ǠՎᾏ"; + l_str = "ǡվᾇ"; + u_str = "ǠՎᾏ"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_149.rob b/test/atmega1284p/mapping_file_149.rob new file mode 100644 index 0000000..2d8b5a9 --- /dev/null +++ b/test/atmega1284p/mapping_file_149.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "ǣտᾐ"; + ou_str = "ǢՏᾘ"; + l_str = "ǣտᾐ"; + u_str = "ǢՏᾘ"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_150.rob b/test/atmega1284p/mapping_file_150.rob new file mode 100644 index 0000000..f10404c --- /dev/null +++ b/test/atmega1284p/mapping_file_150.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "ǥրᾑ"; + ou_str = "ǤՐᾙ"; + l_str = "ǥրᾑ"; + u_str = "ǤՐᾙ"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_151.rob b/test/atmega1284p/mapping_file_151.rob new file mode 100644 index 0000000..9d79dd5 --- /dev/null +++ b/test/atmega1284p/mapping_file_151.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "ǧցᾒ"; + ou_str = "ǦՑᾚ"; + l_str = "ǧցᾒ"; + u_str = "ǦՑᾚ"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_152.rob b/test/atmega1284p/mapping_file_152.rob new file mode 100644 index 0000000..885f59a --- /dev/null +++ b/test/atmega1284p/mapping_file_152.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "ǩւᾓ"; + ou_str = "ǨՒᾛ"; + l_str = "ǩւᾓ"; + u_str = "ǨՒᾛ"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_153.rob b/test/atmega1284p/mapping_file_153.rob new file mode 100644 index 0000000..8f140d4 --- /dev/null +++ b/test/atmega1284p/mapping_file_153.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "ǫփᾔ"; + ou_str = "ǪՓᾜ"; + l_str = "ǫփᾔ"; + u_str = "ǪՓᾜ"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_154.rob b/test/atmega1284p/mapping_file_154.rob new file mode 100644 index 0000000..1388ced --- /dev/null +++ b/test/atmega1284p/mapping_file_154.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "ǭքᾕ"; + ou_str = "ǬՔᾝ"; + l_str = "ǭքᾕ"; + u_str = "ǬՔᾝ"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_155.rob b/test/atmega1284p/mapping_file_155.rob new file mode 100644 index 0000000..8bdbf86 --- /dev/null +++ b/test/atmega1284p/mapping_file_155.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "ǯօᾖ"; + ou_str = "ǮՕᾞ"; + l_str = "ǯօᾖ"; + u_str = "ǮՕᾞ"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_156.rob b/test/atmega1284p/mapping_file_156.rob new file mode 100644 index 0000000..b6adcb7 --- /dev/null +++ b/test/atmega1284p/mapping_file_156.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "dzֆᾗ"; + ou_str = "DZՖᾟ"; + l_str = "dzֆᾗ"; + u_str = "DZՖᾟ"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_157.rob b/test/atmega1284p/mapping_file_157.rob new file mode 100644 index 0000000..8036718 --- /dev/null +++ b/test/atmega1284p/mapping_file_157.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "ǵაᾠ"; + ou_str = "ǴႠᾨ"; + l_str = "ǵაᾠ"; + u_str = "ǴႠᾨ"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_158.rob b/test/atmega1284p/mapping_file_158.rob new file mode 100644 index 0000000..0d23642 --- /dev/null +++ b/test/atmega1284p/mapping_file_158.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "ǻბᾡ"; + ou_str = "ǺႡᾩ"; + l_str = "ǻბᾡ"; + u_str = "ǺႡᾩ"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_159.rob b/test/atmega1284p/mapping_file_159.rob new file mode 100644 index 0000000..4781fb9 --- /dev/null +++ b/test/atmega1284p/mapping_file_159.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "ǽგᾢ"; + ou_str = "ǼႢᾪ"; + l_str = "ǽგᾢ"; + u_str = "ǼႢᾪ"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_160.rob b/test/atmega1284p/mapping_file_160.rob new file mode 100644 index 0000000..c02189a --- /dev/null +++ b/test/atmega1284p/mapping_file_160.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "ǿდᾣ"; + ou_str = "ǾႣᾫ"; + l_str = "ǿდᾣ"; + u_str = "ǾႣᾫ"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_161.rob b/test/atmega1284p/mapping_file_161.rob new file mode 100644 index 0000000..068651e --- /dev/null +++ b/test/atmega1284p/mapping_file_161.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "ȁეᾤ"; + ou_str = "ȀႤᾬ"; + l_str = "ȁეᾤ"; + u_str = "ȀႤᾬ"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_162.rob b/test/atmega1284p/mapping_file_162.rob new file mode 100644 index 0000000..ea61e3a --- /dev/null +++ b/test/atmega1284p/mapping_file_162.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "ȃვᾥ"; + ou_str = "ȂႥᾭ"; + l_str = "ȃვᾥ"; + u_str = "ȂႥᾭ"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_163.rob b/test/atmega1284p/mapping_file_163.rob new file mode 100644 index 0000000..7ac86dd --- /dev/null +++ b/test/atmega1284p/mapping_file_163.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "ȅზᾦ"; + ou_str = "ȄႦᾮ"; + l_str = "ȅზᾦ"; + u_str = "ȄႦᾮ"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_164.rob b/test/atmega1284p/mapping_file_164.rob new file mode 100644 index 0000000..3441b1d --- /dev/null +++ b/test/atmega1284p/mapping_file_164.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "ȇთᾧ"; + ou_str = "ȆႧᾯ"; + l_str = "ȇთᾧ"; + u_str = "ȆႧᾯ"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_165.rob b/test/atmega1284p/mapping_file_165.rob new file mode 100644 index 0000000..cf21850 --- /dev/null +++ b/test/atmega1284p/mapping_file_165.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "ȉიᾰ"; + ou_str = "ȈႨᾸ"; + l_str = "ȉიᾰ"; + u_str = "ȈႨᾸ"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_166.rob b/test/atmega1284p/mapping_file_166.rob new file mode 100644 index 0000000..00fc078 --- /dev/null +++ b/test/atmega1284p/mapping_file_166.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "ȋკᾱ"; + ou_str = "ȊႩᾹ"; + l_str = "ȋკᾱ"; + u_str = "ȊႩᾹ"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_167.rob b/test/atmega1284p/mapping_file_167.rob new file mode 100644 index 0000000..c7e8038 --- /dev/null +++ b/test/atmega1284p/mapping_file_167.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "ȍლῐ"; + ou_str = "ȌႪῘ"; + l_str = "ȍლῐ"; + u_str = "ȌႪῘ"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_168.rob b/test/atmega1284p/mapping_file_168.rob new file mode 100644 index 0000000..3e5a087 --- /dev/null +++ b/test/atmega1284p/mapping_file_168.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "ȏმῑ"; + ou_str = "ȎႫῙ"; + l_str = "ȏმῑ"; + u_str = "ȎႫῙ"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_169.rob b/test/atmega1284p/mapping_file_169.rob new file mode 100644 index 0000000..68b9532 --- /dev/null +++ b/test/atmega1284p/mapping_file_169.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "ȑნῠ"; + ou_str = "ȐႬῨ"; + l_str = "ȑნῠ"; + u_str = "ȐႬῨ"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_170.rob b/test/atmega1284p/mapping_file_170.rob new file mode 100644 index 0000000..8de3d7c --- /dev/null +++ b/test/atmega1284p/mapping_file_170.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "ȓოῡ"; + ou_str = "ȒႭῩ"; + l_str = "ȓოῡ"; + u_str = "ȒႭῩ"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_171.rob b/test/atmega1284p/mapping_file_171.rob new file mode 100644 index 0000000..b95425d --- /dev/null +++ b/test/atmega1284p/mapping_file_171.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "ȕპⓐ"; + ou_str = "ȔႮⒶ"; + l_str = "ȕპⓐ"; + u_str = "ȔႮⒶ"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_172.rob b/test/atmega1284p/mapping_file_172.rob new file mode 100644 index 0000000..af3241e --- /dev/null +++ b/test/atmega1284p/mapping_file_172.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "ȗჟⓑ"; + ou_str = "ȖႯⒷ"; + l_str = "ȗჟⓑ"; + u_str = "ȖႯⒷ"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_173.rob b/test/atmega1284p/mapping_file_173.rob new file mode 100644 index 0000000..179745a --- /dev/null +++ b/test/atmega1284p/mapping_file_173.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "ɓრⓒ"; + ou_str = "ƁႰⒸ"; + l_str = "ɓრⓒ"; + u_str = "ƁႰⒸ"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_174.rob b/test/atmega1284p/mapping_file_174.rob new file mode 100644 index 0000000..2d7785b --- /dev/null +++ b/test/atmega1284p/mapping_file_174.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "ɔსⓓ"; + ou_str = "ƆႱⒹ"; + l_str = "ɔსⓓ"; + u_str = "ƆႱⒹ"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_175.rob b/test/atmega1284p/mapping_file_175.rob new file mode 100644 index 0000000..c99a6a4 --- /dev/null +++ b/test/atmega1284p/mapping_file_175.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "ɗტⓔ"; + ou_str = "ƊႲⒺ"; + l_str = "ɗტⓔ"; + u_str = "ƊႲⒺ"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_176.rob b/test/atmega1284p/mapping_file_176.rob new file mode 100644 index 0000000..d50a1cf --- /dev/null +++ b/test/atmega1284p/mapping_file_176.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "ɘუⓕ"; + ou_str = "ƎႳⒻ"; + l_str = "ɘუⓕ"; + u_str = "ƎႳⒻ"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_177.rob b/test/atmega1284p/mapping_file_177.rob new file mode 100644 index 0000000..c1f6087 --- /dev/null +++ b/test/atmega1284p/mapping_file_177.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "əფⓖ"; + ou_str = "ƏႴⒼ"; + l_str = "əფⓖ"; + u_str = "ƏႴⒼ"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_178.rob b/test/atmega1284p/mapping_file_178.rob new file mode 100644 index 0000000..05744b0 --- /dev/null +++ b/test/atmega1284p/mapping_file_178.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "ɛქⓗ"; + ou_str = "ƐႵⒽ"; + l_str = "ɛქⓗ"; + u_str = "ƐႵⒽ"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_179.rob b/test/atmega1284p/mapping_file_179.rob new file mode 100644 index 0000000..3b8a00c --- /dev/null +++ b/test/atmega1284p/mapping_file_179.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "ɠღⓘ"; + ou_str = "ƓႶⒾ"; + l_str = "ɠღⓘ"; + u_str = "ƓႶⒾ"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_180.rob b/test/atmega1284p/mapping_file_180.rob new file mode 100644 index 0000000..2b5e4c0 --- /dev/null +++ b/test/atmega1284p/mapping_file_180.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "ɣყⓙ"; + ou_str = "ƔႷⒿ"; + l_str = "ɣყⓙ"; + u_str = "ƔႷⒿ"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_181.rob b/test/atmega1284p/mapping_file_181.rob new file mode 100644 index 0000000..42b83fd --- /dev/null +++ b/test/atmega1284p/mapping_file_181.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "ɨშⓚ"; + ou_str = "ƗႸⓀ"; + l_str = "ɨშⓚ"; + u_str = "ƗႸⓀ"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_182.rob b/test/atmega1284p/mapping_file_182.rob new file mode 100644 index 0000000..276e10e --- /dev/null +++ b/test/atmega1284p/mapping_file_182.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "ɩჩⓛ"; + ou_str = "ƖႹⓁ"; + l_str = "ɩჩⓛ"; + u_str = "ƖႹⓁ"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_183.rob b/test/atmega1284p/mapping_file_183.rob new file mode 100644 index 0000000..7aa403a --- /dev/null +++ b/test/atmega1284p/mapping_file_183.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "ɯცⓜ"; + ou_str = "ƜႺⓂ"; + l_str = "ɯცⓜ"; + u_str = "ƜႺⓂ"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_184.rob b/test/atmega1284p/mapping_file_184.rob new file mode 100644 index 0000000..8c5a7b7 --- /dev/null +++ b/test/atmega1284p/mapping_file_184.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "ɲძⓝ"; + ou_str = "ƝႻⓃ"; + l_str = "ɲძⓝ"; + u_str = "ƝႻⓃ"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_185.rob b/test/atmega1284p/mapping_file_185.rob new file mode 100644 index 0000000..67d326b --- /dev/null +++ b/test/atmega1284p/mapping_file_185.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "ɵწⓞ"; + ou_str = "ƟႼⓄ"; + l_str = "ɵწⓞ"; + u_str = "ƟႼⓄ"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_186.rob b/test/atmega1284p/mapping_file_186.rob new file mode 100644 index 0000000..83b9d51 --- /dev/null +++ b/test/atmega1284p/mapping_file_186.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "ʃჭⓟ"; + ou_str = "ƩႽⓅ"; + l_str = "ʃჭⓟ"; + u_str = "ƩႽⓅ"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_187.rob b/test/atmega1284p/mapping_file_187.rob new file mode 100644 index 0000000..00d0aa9 --- /dev/null +++ b/test/atmega1284p/mapping_file_187.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "ʈხⓠ"; + ou_str = "ƮႾⓆ"; + l_str = "ʈხⓠ"; + u_str = "ƮႾⓆ"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_188.rob b/test/atmega1284p/mapping_file_188.rob new file mode 100644 index 0000000..601bfe9 --- /dev/null +++ b/test/atmega1284p/mapping_file_188.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "ʊჯⓡ"; + ou_str = "ƱႿⓇ"; + l_str = "ʊჯⓡ"; + u_str = "ƱႿⓇ"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_189.rob b/test/atmega1284p/mapping_file_189.rob new file mode 100644 index 0000000..9a01ae1 --- /dev/null +++ b/test/atmega1284p/mapping_file_189.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "ʋჰⓢ"; + ou_str = "ƲჀⓈ"; + l_str = "ʋჰⓢ"; + u_str = "ƲჀⓈ"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_190.rob b/test/atmega1284p/mapping_file_190.rob new file mode 100644 index 0000000..95c14a4 --- /dev/null +++ b/test/atmega1284p/mapping_file_190.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "ʒჱⓣ"; + ou_str = "ƷჁⓉ"; + l_str = "ʒჱⓣ"; + u_str = "ƷჁⓉ"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_191.rob b/test/atmega1284p/mapping_file_191.rob new file mode 100644 index 0000000..2a23780 --- /dev/null +++ b/test/atmega1284p/mapping_file_191.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "άჲⓤ"; + ou_str = "ΆჂⓊ"; + l_str = "άჲⓤ"; + u_str = "ΆჂⓊ"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_192.rob b/test/atmega1284p/mapping_file_192.rob new file mode 100644 index 0000000..2361c83 --- /dev/null +++ b/test/atmega1284p/mapping_file_192.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "έჳⓥ"; + ou_str = "ΈჃⓋ"; + l_str = "έჳⓥ"; + u_str = "ΈჃⓋ"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_193.rob b/test/atmega1284p/mapping_file_193.rob new file mode 100644 index 0000000..dc5f36d --- /dev/null +++ b/test/atmega1284p/mapping_file_193.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "ήჴⓦ"; + ou_str = "ΉჄⓌ"; + l_str = "ήჴⓦ"; + u_str = "ΉჄⓌ"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_194.rob b/test/atmega1284p/mapping_file_194.rob new file mode 100644 index 0000000..f3b8b64 --- /dev/null +++ b/test/atmega1284p/mapping_file_194.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "ίჵⓧ"; + ou_str = "ΊჅⓍ"; + l_str = "ίჵⓧ"; + u_str = "ΊჅⓍ"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_195.rob b/test/atmega1284p/mapping_file_195.rob new file mode 100644 index 0000000..ddc89c9 --- /dev/null +++ b/test/atmega1284p/mapping_file_195.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "αḁⓨ"; + ou_str = "ΑḀⓎ"; + l_str = "αḁⓨ"; + u_str = "ΑḀⓎ"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_196.rob b/test/atmega1284p/mapping_file_196.rob new file mode 100644 index 0000000..141b71f --- /dev/null +++ b/test/atmega1284p/mapping_file_196.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "βḃⓩ"; + ou_str = "ΒḂⓏ"; + l_str = "βḃⓩ"; + u_str = "ΒḂⓏ"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_197.rob b/test/atmega1284p/mapping_file_197.rob new file mode 100644 index 0000000..58160a5 --- /dev/null +++ b/test/atmega1284p/mapping_file_197.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "γḅa"; + ou_str = "ΓḄA"; + l_str = "γḅa"; + u_str = "ΓḄA"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_198.rob b/test/atmega1284p/mapping_file_198.rob new file mode 100644 index 0000000..f30fb9b --- /dev/null +++ b/test/atmega1284p/mapping_file_198.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "δḇb"; + ou_str = "ΔḆB"; + l_str = "δḇb"; + u_str = "ΔḆB"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_199.rob b/test/atmega1284p/mapping_file_199.rob new file mode 100644 index 0000000..198ca74 --- /dev/null +++ b/test/atmega1284p/mapping_file_199.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "εḉc"; + ou_str = "ΕḈC"; + l_str = "εḉc"; + u_str = "ΕḈC"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_200.rob b/test/atmega1284p/mapping_file_200.rob new file mode 100644 index 0000000..7cff320 --- /dev/null +++ b/test/atmega1284p/mapping_file_200.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "ζḋd"; + ou_str = "ΖḊD"; + l_str = "ζḋd"; + u_str = "ΖḊD"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_201.rob b/test/atmega1284p/mapping_file_201.rob new file mode 100644 index 0000000..ef293fc --- /dev/null +++ b/test/atmega1284p/mapping_file_201.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "ηḍe"; + ou_str = "ΗḌE"; + l_str = "ηḍe"; + u_str = "ΗḌE"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_202.rob b/test/atmega1284p/mapping_file_202.rob new file mode 100644 index 0000000..aef3699 --- /dev/null +++ b/test/atmega1284p/mapping_file_202.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "θḏf"; + ou_str = "ΘḎF"; + l_str = "θḏf"; + u_str = "ΘḎF"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_203.rob b/test/atmega1284p/mapping_file_203.rob new file mode 100644 index 0000000..690ceac --- /dev/null +++ b/test/atmega1284p/mapping_file_203.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "ιḑg"; + ou_str = "ΙḐG"; + l_str = "ιḑg"; + u_str = "ΙḐG"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_204.rob b/test/atmega1284p/mapping_file_204.rob new file mode 100644 index 0000000..014757e --- /dev/null +++ b/test/atmega1284p/mapping_file_204.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "κḓh"; + ou_str = "ΚḒH"; + l_str = "κḓh"; + u_str = "ΚḒH"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_205.rob b/test/atmega1284p/mapping_file_205.rob new file mode 100644 index 0000000..d27a761 --- /dev/null +++ b/test/atmega1284p/mapping_file_205.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "λḕi"; + ou_str = "ΛḔI"; + l_str = "λḕi"; + u_str = "ΛḔI"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_206.rob b/test/atmega1284p/mapping_file_206.rob new file mode 100644 index 0000000..b2bc524 --- /dev/null +++ b/test/atmega1284p/mapping_file_206.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "μḗj"; + ou_str = "ΜḖJ"; + l_str = "μḗj"; + u_str = "ΜḖJ"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_207.rob b/test/atmega1284p/mapping_file_207.rob new file mode 100644 index 0000000..95fbe84 --- /dev/null +++ b/test/atmega1284p/mapping_file_207.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "νḙk"; + ou_str = "ΝḘK"; + l_str = "νḙk"; + u_str = "ΝḘK"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_208.rob b/test/atmega1284p/mapping_file_208.rob new file mode 100644 index 0000000..e932b33 --- /dev/null +++ b/test/atmega1284p/mapping_file_208.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "ξḛl"; + ou_str = "ΞḚL"; + l_str = "ξḛl"; + u_str = "ΞḚL"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_209.rob b/test/atmega1284p/mapping_file_209.rob new file mode 100644 index 0000000..d84bfd9 --- /dev/null +++ b/test/atmega1284p/mapping_file_209.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "οḝm"; + ou_str = "ΟḜM"; + l_str = "οḝm"; + u_str = "ΟḜM"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_210.rob b/test/atmega1284p/mapping_file_210.rob new file mode 100644 index 0000000..71d77fd --- /dev/null +++ b/test/atmega1284p/mapping_file_210.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "πḟn"; + ou_str = "ΠḞN"; + l_str = "πḟn"; + u_str = "ΠḞN"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_211.rob b/test/atmega1284p/mapping_file_211.rob new file mode 100644 index 0000000..8bc70e9 --- /dev/null +++ b/test/atmega1284p/mapping_file_211.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "ρḡo"; + ou_str = "ΡḠO"; + l_str = "ρḡo"; + u_str = "ΡḠO"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_212.rob b/test/atmega1284p/mapping_file_212.rob new file mode 100644 index 0000000..807ba39 --- /dev/null +++ b/test/atmega1284p/mapping_file_212.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "σḣp"; + ou_str = "ΣḢP"; + l_str = "σḣp"; + u_str = "ΣḢP"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_213.rob b/test/atmega1284p/mapping_file_213.rob new file mode 100644 index 0000000..2663189 --- /dev/null +++ b/test/atmega1284p/mapping_file_213.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "τḥq"; + ou_str = "ΤḤQ"; + l_str = "τḥq"; + u_str = "ΤḤQ"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_214.rob b/test/atmega1284p/mapping_file_214.rob new file mode 100644 index 0000000..c1df0ec --- /dev/null +++ b/test/atmega1284p/mapping_file_214.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "υḧr"; + ou_str = "ΥḦR"; + l_str = "υḧr"; + u_str = "ΥḦR"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_215.rob b/test/atmega1284p/mapping_file_215.rob new file mode 100644 index 0000000..962d8da --- /dev/null +++ b/test/atmega1284p/mapping_file_215.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "φḩs"; + ou_str = "ΦḨS"; + l_str = "φḩs"; + u_str = "ΦḨS"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_216.rob b/test/atmega1284p/mapping_file_216.rob new file mode 100644 index 0000000..bdc7147 --- /dev/null +++ b/test/atmega1284p/mapping_file_216.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "χḫt"; + ou_str = "ΧḪT"; + l_str = "χḫt"; + u_str = "ΧḪT"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_217.rob b/test/atmega1284p/mapping_file_217.rob new file mode 100644 index 0000000..7c6f48f --- /dev/null +++ b/test/atmega1284p/mapping_file_217.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "ψḭu"; + ou_str = "ΨḬU"; + l_str = "ψḭu"; + u_str = "ΨḬU"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_218.rob b/test/atmega1284p/mapping_file_218.rob new file mode 100644 index 0000000..6c0fa71 --- /dev/null +++ b/test/atmega1284p/mapping_file_218.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "ωḯv"; + ou_str = "ΩḮV"; + l_str = "ωḯv"; + u_str = "ΩḮV"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_219.rob b/test/atmega1284p/mapping_file_219.rob new file mode 100644 index 0000000..1b671e1 --- /dev/null +++ b/test/atmega1284p/mapping_file_219.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "ϊḱw"; + ou_str = "ΪḰW"; + l_str = "ϊḱw"; + u_str = "ΪḰW"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_220.rob b/test/atmega1284p/mapping_file_220.rob new file mode 100644 index 0000000..0875b0d --- /dev/null +++ b/test/atmega1284p/mapping_file_220.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "ϋḳx"; + ou_str = "ΫḲX"; + l_str = "ϋḳx"; + u_str = "ΫḲX"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_221.rob b/test/atmega1284p/mapping_file_221.rob new file mode 100644 index 0000000..dc99282 --- /dev/null +++ b/test/atmega1284p/mapping_file_221.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "όḵy"; + ou_str = "ΌḴY"; + l_str = "όḵy"; + u_str = "ΌḴY"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/mapping_file_222.rob b/test/atmega1284p/mapping_file_222.rob new file mode 100644 index 0000000..350764d --- /dev/null +++ b/test/atmega1284p/mapping_file_222.rob @@ -0,0 +1,15 @@ +use string.utf8lenstr; +use string.upperlowerstr; +int32 main() { + ol_str = "ύḷz"; + ou_str = "ΎḶZ"; + l_str = "ύḷz"; + u_str = "ΎḶZ"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/atmega1284p/memcpycheck.rob b/test/atmega1284p/memcpycheck.rob new file mode 120000 index 0000000..4d0b1d5 --- /dev/null +++ b/test/atmega1284p/memcpycheck.rob @@ -0,0 +1 @@ +../atmega328p/memcpycheck.rob \ No newline at end of file diff --git a/test/atmega1284p/out/string-len b/test/atmega1284p/out/string-len new file mode 100755 index 0000000..e017e81 Binary files /dev/null and b/test/atmega1284p/out/string-len differ diff --git a/test/atmega1284p/robcmp-simavr-debug b/test/atmega1284p/robcmp-simavr-debug new file mode 120000 index 0000000..c9994e3 --- /dev/null +++ b/test/atmega1284p/robcmp-simavr-debug @@ -0,0 +1 @@ +../../build/robcmp-simavr-debug \ No newline at end of file diff --git a/test/atmega1284p/runtest.sh b/test/atmega1284p/runtest.sh new file mode 100755 index 0000000..1d49882 --- /dev/null +++ b/test/atmega1284p/runtest.sh @@ -0,0 +1,25 @@ +#!/bin/bash +CMD="./robcmp-simavr-debug -c 16000000 -m atmega1284p -f $2" + +GREEN="\033[0;32m" +RED="\033[0;31m" +NC="\033[0m" + +echo -n " $1 " +make -s $2 +if [ "$?" -eq 0 ]; then + if [ "$V" = "1" ]; then + ${CMD} + else + timeout 10s ${CMD} &> /dev/null + fi + STATUS=$? + if [ "${STATUS}" -eq 0 ]; then + echo -e \\r${GREEN}[PASS]\\t\\t${NC} + else + echo -e \\r${RED}[FAILED] ${STATUS}\\t${NC} + fi +else + echo -e \\r${RED}[BUILD FAILED]\\t${NC} +fi + diff --git a/test/atmega1284p/runtestold.sh b/test/atmega1284p/runtestold.sh new file mode 120000 index 0000000..d72879e --- /dev/null +++ b/test/atmega1284p/runtestold.sh @@ -0,0 +1 @@ +../atmega328p/runtest.sh \ No newline at end of file diff --git a/test/atmega1284p/runtrace.sh b/test/atmega1284p/runtrace.sh new file mode 100755 index 0000000..a9e5a0b --- /dev/null +++ b/test/atmega1284p/runtrace.sh @@ -0,0 +1,2 @@ +#!/bin/bash +./run_avr -g 1234 -t -f 16000000 -m atmega1284p -v -v -v $1 diff --git a/test/atmega1284p/runtraceold.sh b/test/atmega1284p/runtraceold.sh new file mode 120000 index 0000000..fc1aeb1 --- /dev/null +++ b/test/atmega1284p/runtraceold.sh @@ -0,0 +1 @@ +../atmega328p/runtrace.sh \ No newline at end of file diff --git a/test/atmega1284p/string-contains.rob b/test/atmega1284p/string-contains.rob new file mode 100644 index 0000000..43b1378 --- /dev/null +++ b/test/atmega1284p/string-contains.rob @@ -0,0 +1,17 @@ +use string.containsstr; + +const str = "W5L꼟ݾ݉E6N޺ߢ/󭀖D𣈬🭯೯몽뷥횖ថ󿼧֮�|钰𿲯􀖽񼽾r󷁸񟫟򔨄Gۯ㨋适ȣ޹1᯲ځ夫ΘӶⰇ5x̛艅ﮝG񜳄ʣߜ7bgӏ&򞈺׹ĶD޽إHń󪼖ۧ𵺔󹬛*Oǜrxʈ蘪ӧ欲΢ 9ЄfΤf󘈒ĉΑ򴕝򱥊ߘ񹶠f𰑊6r񱃬u$D𕽮D򦄯֒+鉨󉖠ݤ򦽫񓘓󿿖FIJܹèצԙΐݯ􎾏󉬋𶺐ə񰁄˒Ņǝᅯsl睠؆4󔵯큐䋴𰑊xgًһJ󂈛𺌾ƿ񏾼ޣۺzȗ񹨔cϐʝ򔆠񶸓jI=۷􈞓̀K䰈搶?䜖麾+禼ܗu񜏫μ𕧳L󸽨󂡡󀶉𹞹㎏/8󒰬0駗掼T]�ռj랳rᢇ!mլEH򁐨9洱P婩ʄu󨚐<{䬘䴒􄖰2ꁯ𰑊𰑊i𘃋򂖉軖⍇ުΥ𮍎ˌP䈸a򼻓ܖ۔㎼́WνϏɓcb꡷ƿ󢶝㍫󐥼񗩫𙠑4ʳ𰑊󨿉󝆅ί㬍ᦐ⢳ʂϬn󡛖%皰ﮨϠݿ(𥢍䓻„䯡𥁘𔎰ȣ񼘋𱵾܌􃴸씟꣯ʒ𞃄<𫌮瘤;6Ĕ�禪΢󪠆ﺍ갥슶Pġʂjo臣䶞ﭭr𷔨o򮵐𞠴,滑uꧼܚ质񠪈𞼨鱞꒔輾gےY𺻜􅾱O!�񪠽’站񘫽򐱸ղ.4񠬜˲@翬ιqډ򵭔S㏢ӎ詼߰緲򻓯סx󬈌㿼𩲻ݪʆ뺭򱕄󣗓ӂ񿩞􂯦髼m穋ąLT䇀󴐡򆔑𪜿쟃򄛰𰑊ʝᱤ충͈弖𠾴󟵻񤽿׻þfշ􀱥𖻢ĝK򤌶ɹ𻛷𿳵0߮򟚶ϼ󴶼䌊힂񈼿"; + +const substr1 = "ߢ/󭀖D𣈬🭯೯몽뷥횖ថ󿼧֮�|钰𿲯􀖽񼽾r󷁸񟫟򔨄Gۯ㨋适ȣ޹1᯲ځ夫ΘӶⰇ5x̛艅ﮝG񜳄ʣߜ7bgӏ&򞈺׹ĶD޽إHń󪼖ۧ𵺔󹬛*Oǜrxʈ蘪ӧ欲΢ 9ЄfΤf󘈒ĉΑ򴕝򱥊ߘ񹶠f𰑊6r񱃬u$D𕽮D򦄯֒+鉨󉖠ݤ򦽫񓘓󿿖FIJܹèצԙΐݯ􎾏󉬋𶺐ə񰁄˒Ņǝᅯsl睠؆4󔵯큐䋴𰑊xgًһJ󂈛𺌾ƿ񏾼ޣۺzȗ񹨔cϐʝ򔆠񶸓jI=۷􈞓̀K䰈搶?䜖麾+禼ܗu񜏫μ𕧳L󸽨󂡡󀶉𹞹㎏/8󒰬0駗掼T]�ռj랳rᢇ!mլEH򁐨9洱P婩ʄu󨚐<{䬘䴒􄖰2ꁯ𰑊𰑊i𘃋򂖉軖⍇ުΥ𮍎ˌP䈸a򼻓ܖ۔㎼́WνϏɓcb꡷ƿ󢶝㍫󐥼񗩫𙠑"; + +const substr2 = "M񩔇󐄝C𒴔ģ_L(°0񹙇󑍫ϫTİǯ魃.!qݼ!򆋐8𿖅솉瘖&܍V:쓃򸻁C�򣢆Dꋕ󗻜㚊탂Ⲻ嶂͹來瞲ؚ4⬎ռ򘔈厦뛴ਧAT6ߐM񓻙է͛䯋Y򬋻ࡽ3н.𕂺eȞ늅#쐬🨲Ԝ參~ݐ¡i񮁃zچ喈񅿧ַs圉󑍫ԡҧ胑.봋@쪻Ҟ򽎻軺뚻ƇϨȽȣòલ婠$枢Γ[b濷㱟񛻨ח􋕍迲{خ衄ޅ֢|c޵ճՑw񸂸쐪ᦲDZ3⩀pT揷󑍫앢奺Ť䮃Eա奦صZЍ񰲗㋴񬅀ş柋K꺋ټᶩ۸ݷ򢫧󺶕󑍫탪렫󳪸䩛͝.솗鉡ˈʘTΊe𜕭鰲񌝄c󭵾]钧󝆘癑I恅檷Ψ檚󸬦֐ͩ9󊦇aӻ򛧄ɛ騩꧴⣋⇳쵥pߔGK󀬏ᙽҎ՜Ʃ􃀋$󆿐A眞󫤿񂤿𖇛¥˻ꉿܚ垓ࣲB༙ⲣ!۠򐈣Éϛ/槀d󵔧簃楦睎v"; + +int8 main() { + r = containsstr(str, substr1); + s = containsstr(str, substr2); + if r != -1 and s == -1 { + return 0; + } else { + return 1; + } +} \ No newline at end of file diff --git a/test/atmega1284p/string-equal.rob b/test/atmega1284p/string-equal.rob new file mode 100644 index 0000000..97235ca --- /dev/null +++ b/test/atmega1284p/string-equal.rob @@ -0,0 +1,15 @@ +use string.equalstr; + +const str = "惱羋󽲠񬽊񋥫ᦊ򽩿򇴙ꍜօ☀ۣ򍞚àj4񪥲躺丿յT󹴷b។񄭇ɓ怍񇰈оʾ*fކ5ᯘȍۂ񟬃񕢑4эЙȵ󆙫妵Ë荊暴`$ᦣɤn􈆮՚仌񳙎⥘܍ڛᘕѧ󚹭mΨ𴑂eRﱫﮮ墭ϋʜ恊抾ԉ߯슈񫀐퇨3ࡊ೸𨎩򢷺򏼷zե񟁛󾎔ꍷ_񳜕#𲜖єp𳳘ಕ痳ܔ�Ք*Ŀ󙢹󗨑๖7􆪷ᔬ󳔶ʪ񆁩逤𭜠SrQϠ񹒴񎧒񃘕|򵹺񧞟9㬞⡵镹Հ񑀄ʉ悊[ђԟIҠ2膋򵇑舨C랢G􍑣񎭄<󿬢򍋶򍶳ⶱϺ, 䏃𓀿젇򞩮󽤡ڲڴ|ڲL(6²1E񲦕8􄏚O񷚲æ񣙾QĹ󒤥a>o񼒝󱛪đ񸧽⛃뭭Dـ*𖵘n䐂g襸ٌ򧴑6σ;Ă֪(鏗Źɿ۪󅙸q􍀞ZŻ𭈍㇘ڂT걮쬨 x}F𧪉񙛀슏-ⵒ񞑇O򾱢Ȯ󝅶랓%}Ꮦ󶲎Ԫ򕞈 Ӈ-𿷘󬜱]₇Қ󧴠󵓳桟ˉ󃓞󧴠Eފ󪒅ԝ𴨇񕇽뀸렵񿞩Ɲp׳񇾭񱴗罣ׂ񎽖ȩlݓ񣫢𚴏׈n񳆶Ի󶺨󍞆鐝󮘝նΏU膩绰ޙ脆&{𳆯Dズ⥤򢈫􋒜𷰧̷'٩Gu׹5Β뀆�󢇉L󊕓𰋣必ػ휻B𽡰ØP蜸ねUꐢ񪐪O򥾵˃Oꬺ궫㤷:􄨡㨋?*ω龜ʋ㧪襅_x]ꖗワ򥘰ָָꎍ浓ժɒ񒫄S򿧊ɥݎ烠쑰藸e퉘𓬈@׵%ڛ䢈񶧇򛠺ԱCs屿󼾦酈챡􉯙񩫚򼮏�#𡄂Ոث􁒸-ٮ񎲚гԱn۷񃒆򱊷᜔XMꚬIƳݸuʚ싉Ӄ܂猺󩔐d񀁅5򊐳)򆎅Խů楻ŒU󭘹󷏦L󢴊򘇱򗺣񐓌򊇰?Žب󅝮�󰒧|򕧋CO槥Ǣ񐚭ԾڰiiЫƆӎ򗤖Ԥ$B󩰃œ򘫄$ܜy젰iނ،񆜙eߓĚūԖ0󬹏ϸ񫩢凒끐D՝̠溗Q̏H"; + +const str_equal = "惱羋󽲠񬽊񋥫ᦊ򽩿򇴙ꍜօ☀ۣ򍞚àj4񪥲躺丿յT󹴷b។񄭇ɓ怍񇰈оʾ*fކ5ᯘȍۂ񟬃񕢑4эЙȵ󆙫妵Ë荊暴`$ᦣɤn􈆮՚仌񳙎⥘܍ڛᘕѧ󚹭mΨ𴑂eRﱫﮮ墭ϋʜ恊抾ԉ߯슈񫀐퇨3ࡊ೸𨎩򢷺򏼷zե񟁛󾎔ꍷ_񳜕#𲜖єp𳳘ಕ痳ܔ�Ք*Ŀ󙢹󗨑๖7􆪷ᔬ󳔶ʪ񆁩逤𭜠SrQϠ񹒴񎧒񃘕|򵹺񧞟9㬞⡵镹Հ񑀄ʉ悊[ђԟIҠ2膋򵇑舨C랢G􍑣񎭄<󿬢򍋶򍶳ⶱϺ, 䏃𓀿젇򞩮󽤡ڲڴ|ڲL(6²1E񲦕8􄏚O񷚲æ񣙾QĹ󒤥a>o񼒝󱛪đ񸧽⛃뭭Dـ*𖵘n䐂g襸ٌ򧴑6σ;Ă֪(鏗Źɿ۪󅙸q􍀞ZŻ𭈍㇘ڂT걮쬨 x}F𧪉񙛀슏-ⵒ񞑇O򾱢Ȯ󝅶랓%}Ꮦ󶲎Ԫ򕞈 Ӈ-𿷘󬜱]₇Қ󧴠󵓳桟ˉ󃓞󧴠Eފ󪒅ԝ𴨇񕇽뀸렵񿞩Ɲp׳񇾭񱴗罣ׂ񎽖ȩlݓ񣫢𚴏׈n񳆶Ի󶺨󍞆鐝󮘝նΏU膩绰ޙ脆&{𳆯Dズ⥤򢈫􋒜𷰧̷'٩Gu׹5Β뀆�󢇉L󊕓𰋣必ػ휻B𽡰ØP蜸ねUꐢ񪐪O򥾵˃Oꬺ궫㤷:􄨡㨋?*ω龜ʋ㧪襅_x]ꖗワ򥘰ָָꎍ浓ժɒ񒫄S򿧊ɥݎ烠쑰藸e퉘𓬈@׵%ڛ䢈񶧇򛠺ԱCs屿󼾦酈챡􉯙񩫚򼮏�#𡄂Ոث􁒸-ٮ񎲚гԱn۷񃒆򱊷᜔XMꚬIƳݸuʚ싉Ӄ܂猺󩔐d񀁅5򊐳)򆎅Խů楻ŒU󭘹󷏦L󢴊򘇱򗺣񐓌򊇰?Žب󅝮�󰒧|򕧋CO槥Ǣ񐚭ԾڰiiЫƆӎ򗤖Ԥ$B󩰃œ򘫄$ܜy젰iނ،񆜙eߓĚūԖ0󬹏ϸ񫩢凒끐D՝̠溗Q̏H"; + +const str_diff = "ၛ 󠹘秙􂬺ʒB볧Ց*O˪쑟ϙ/⒵Ǹн츋+Ȳ蘛礑㍻Ζ)򪖣ϐɷ冭0􌪉гӨ󢦀⪁񈋽4ͤꐏ奸򭒚Ɇ蠲ܤ*󊗇ޖʉꝼpӝO񜁳򊚫٠ʼn䢪􀰉n򊥗ݚ鄞􌴬,Tq񻯬󦙚앎櫐Sшå%󕌞Wː럂ᅵ抌Þ레&󱭹UĘ:ފ񆬟ӛ񐭿󦲺uﺳѫ씸욍_❨ܒ񛯹򽡋󼮖갗W!璵쵅٘I㔧{У֚󐷢把�񷲜탓葉󃯊{򖉜񰚔X3N𔴧˨]𪕠t񥃋<𒨛^횱񘵣󁫜俳۸䎊ެ֭m枷Ғe󝔋U!奲A񋉡0푛Šے㕬�ߍꚉĂ𕸞󸩌iއ萘ⓜ₮O󛮼󯋀񁠹A縪񎏞泩叆·󢘄=𑴣󝐁󊗪ԁ񖎨1띗�uߢ<(V򴴸_ޅŲ򘣽񊏖𗬴܌􅆋񙿂۩绯2�򄌣嶾Ŝ낗4웧򯐝꼮򂭔sɉtϠX‡gO찟򊕎򚵛a汓�ހ󯋀񘂰󯋀󱒑񰉜񞎛6磩/􋥯1F󛽻򦃿Y﨨˚k.뗥񗇎ªō򑲒𽝡ȯ򻺒冔ﻑ򞵘-ᶫվ[𽌤󢾀hۜEԐꮫ𹸉ڷ󼂯𫰈辂%̒դ@4ξ°󍉚޽먨�뷁ө񙁛𿂳̸訅ʢ񻋾򜯖몃⬶Ң$A𖛭ꊚќlÜ񪵶܃袑0򳥦񷷡ǭY`m򿚽󯋀󯋀柴𞴡l޲gʐ(뱇i󜌝󓗹攙_Ʊ墡„馔郠,Đo釁tl󤅦㒷DژĂ.Fꊠh񺩫򓮧šӓ뗹ߐʚN擛҂뽎񓨇ՁŲ񹈺|躀󣁪%0得粒_񔼛􅭘=񫸗úd憏㭓񐲄𴡔ʭݦ󘃌ھ黜𗄎˯ԑĻG󞆕𮠨𞑽?񣊇n޼ǯؽ댬ڙù򘹴🅘񿽄ゎgࣀ񳷥󤕤񔙵ؑǙ@ܐ𳩛؈񛸪㱎ฉθ򆼷ɞa􄟀񦂝ؔ򠰵׵޲蔃ĔJb嗱󑖨񒯲OLÎt5?�º񱱄Īꕊ緳𪈹𶎊꥞ Al=א龽䌴힖󶰡�J󨗺킿ނƖbțѷ󣭑"; + +int8 main() { + if equalstr(str, str_equal) and !equalstr(str, str_diff) { + return 0; + } else { + return 1; + } +} \ No newline at end of file diff --git a/test/atmega1284p/string-len.rob b/test/atmega1284p/string-len.rob new file mode 100644 index 0000000..c408c28 --- /dev/null +++ b/test/atmega1284p/string-len.rob @@ -0,0 +1,12 @@ +use string.lenstr; + +const str = "Ԍ񪹅◣E憕K糈lغȶ픏G񞩑޸壴c񒠛Σ'Ϡڇ𖩢򼧽0澆hې񘃼؃2㭵fȼ돻쒢񗊧왏jĿԑ༯m垢2B覴󇹅S󤟎m2򲷸#烃󆨷쓃Īɑ뾀f򪍕[l𣖖󨜟Y&硨⇑͙𛢾􂶫 呫򟘫ǽ◓򨺗Wz^򽗛򔚽򭑃񓌑ӆW񙊰nݸ򧚱𭪬膌񹩔a%cᔥ𺓈ЭFʟ󯋬ҟ+>©󬔟񎎙񎎙͏᰷:뙉󪦝擛硰>nߘȷߐ񄷝蟐ʼnv쵮𵌐綊MgФ򑧳񎎙ݿ򭶝튠񳭘�ט축Æg㩗󵯊쫹Mԅ࣢ɒ»ⱖӳ򃑜ն𾲜򞭤Σ交ᄜ󼩠ד򦻬⿰쬦񼮜侶դߩŏz喧ф;�_͛弎ׯ߲OҐ@򠰼򷞞9񎑆𦺞𮨸Ȱ$.Ӧп񦡦|ʈ讥򒳛򬯚)񫟉sεTȗ𵐾3򈆠Ƭ񑨰ߪn3򀯛³ݘﯽs󳪖沄􎛒pй򣤍󖍾o=༂ړ񁢗󆿏J顯˶ᱣ󚃈􅯥򹯓ֽϊ征󪕅񼡪�B曡՟พ𒏚ӈs񎎙ۑR󬭵򧞑胂Ѥ𘘋𡢶ި+𻛹Ⴧѱƌ𶄼􃟨񪳭l򢩅t򦂲船𓧨񵞰񻛂⒤߀Ֆ剩򭐃򓝛쪑ޙմ߆ٱҀ﬉ϗ(񸠴o𾈺şi㥉lk`𱨶稯哫仇ǚƜtⲂỖbō𦪷睋󚼩ضF㟆拄౞8녘櫡өo2݈_捰򜼉슋�Y躘Y�*瑍ǃ󄑬񞊃G΢򼇉򨇓$B堁ʈȆᎰ̻󀏞􄞝𞞋򍐇Ŝˢɧ𗽢2힃Ǩ󱘅Ğͬ񓞥򣋱^߯󔛌ү-𠛛Ϻ0򋔑௯󓺣ᗣ𣦭95M򡹟􍎃ör蝗džЃ1񱠥藩󦛷Ꙧȶ󺇲1҅픸󃅭򉬻{犧 έț󤆯ꯨ񙾢X򟈜ཡس⵳ؕ?JժyJ(⋏܈󎴦ۥ农ߊʹ壛i󄻏󶮨䟊z逵ϳ񎎙轣󲾑y⮰VYφ񎎙⹁ίᜭર껔Ϳ❵૽䓮瘝pYeꤚ򐩼򥞢󲡞噲澘须󰜚c]cҺǙ󙁸󏾖ퟭ򘲱ͩ󆿳է0?񳤍󊟆񧖍𭷡򘹕୓;򬌆Ӽ搏:򅇚ٕ'񐂕ԣ>Ґ̀ԃ—薹熹U󴯽辑ҵ򵗥󆺜᲎ϟ͐񱪂ˌTР멡㪬샎ތO𬼝B鳩󋏌0䡡Ϋ𸃶⼔۴𿘅A󧿉􎹲ۑˑ䲨b9H୉⽏̊ݣꜢ곲򯎭c毣ﮒȟ߁ĘḔƲ֢檓嶷֑󊑵鎭ԥ̥䜏𦠼몖򏥖첡&뷠Դє𢀫$鉙牝ʓ)󩟈򪣅Ü𯏺 󘆷楂滵쐝󌰁ӆD𸉭鳔⌝װ򭺞Ү񓭥֋΅K^ì⫑kpȏ򝁢䑫‡o垡ѐط昆۱ଏ+𗥤L@3ݒ󼹭骱序ʲ􊜃ۓ􀯧cч7ῤ󓟞ߨ򩶾@Ì⑫aӰ𭹦M񄙲Ī𾚏扄ЯuN̾嘟佣c℡첪򪣅޷vǮс麟ՑϮ𛪺𒚀ޜ𮜈x)⬿𐎭񴤩︬񝩥쌏"; + +int8 main() { + r = lenstr(str); + if r == 1000 { + return 0; + } else { + return 1; + } +} \ No newline at end of file diff --git a/test/atmega1284p/timetest.sh b/test/atmega1284p/timetest.sh new file mode 100755 index 0000000..6ad5190 --- /dev/null +++ b/test/atmega1284p/timetest.sh @@ -0,0 +1,34 @@ +#!/bin/bash +CMD="./robcmp-simavr-debug -c 16000000 -m atmega1284p -f $2" + +GREEN="\033[0;32m" +RED="\033[0;31m" +NC="\033[0m" + +echo -n " $1 " +timer=0 +make -s $2 &> /dev/null +REP=10 +if [ "$?" -eq 0 ]; then + if [ "$V" = "1" ]; then + ${CMD} + else + timeout 10s ${CMD} &> /dev/null + fi + STATUS=$? + if [ "${STATUS}" -eq 0 ]; then + + TIMEFORMAT="%U" # get only the User time + for i in $(seq 1 $REP); do + timer=$timer+$({ time $CMD &>/dev/null; } 2>&1) + done + timer=$(echo "${timer//,/.}") + avg=$(echo "scale=6;($timer)/$REP -q"| bc) + + echo -e \\r${GREEN}[PASS]\\t\\t${NC}\\t\\t\\t${avg} + else + echo -e \\r${RED}[FAILED] ${STATUS}\\t${NC} + fi +else + echo -e \\r${RED}[BUILD FAILED]\\t${NC} +fi \ No newline at end of file diff --git a/test/atmega1284p/uart.rob b/test/atmega1284p/uart.rob new file mode 120000 index 0000000..a97d855 --- /dev/null +++ b/test/atmega1284p/uart.rob @@ -0,0 +1 @@ +../atmega328p/uart.rob \ No newline at end of file diff --git a/test/atmega1284p/uartdata.rob b/test/atmega1284p/uartdata.rob new file mode 120000 index 0000000..60d70e6 --- /dev/null +++ b/test/atmega1284p/uartdata.rob @@ -0,0 +1 @@ +../atmega328p/uartdata.rob \ No newline at end of file diff --git a/test/atmega328p/Makefile b/test/atmega328p/Makefile index f171d3d..562eb8a 100644 --- a/test/atmega328p/Makefile +++ b/test/atmega328p/Makefile @@ -1,6 +1,7 @@ ALL=$(patsubst %.rob,out/%,$(wildcard *.rob)) ALL_LL=$(patsubst %.rob,out/%.ll,$(wildcard *.rob)) ALL_TT=$(patsubst %.rob,%.tt,$(wildcard *.rob)) +ALL_TIME=$(patsubst %.rob,%.time,$(wildcard *.rob)) ALL_OO=$(patsubst %.rob,out/%.o,$(wildcard *.rob)) out/atmega328p.o ROBCMP=../../build/robcmp @@ -8,7 +9,7 @@ INCLUDES=-I ../../lib ifndef OPT #OPT=-g -O0 -OPT=-Oz +OPT=-Oz -w endif LD_FLAGS=-nostdlib -entry=main -L../../lib -Tatmega328p.ld ../../lib/avr5.o @@ -21,6 +22,8 @@ LINK_DEPENDS=out/atmega328p.o all: out test +time: out time + out: mkdir -p out @@ -40,11 +43,15 @@ out/%.ll : %.rob ${DEPENDS} %.tt : %.rob ${DEPENDS} @-./runtest.sh $< $(patsubst %.rob,out/%,$<) +%.time : %.rob ${DEPENDS} clean + @-./timetest.sh $< $(patsubst %.rob,out/%,$<) + out/% : out/%.o ${LINK_DEPENDS} ld.lld ${LD_FLAGS} $^ -o $@ test: ${ALL_TT} -clean: - @rm -f ${ALL} ${ALL_LL} ${ALL_OO} +time: ${ALL_TIME} +clean: + @rm -f ${ALL} ${ALL_LL} ${ALL_OO} ${ALL_TIME} \ No newline at end of file diff --git a/test/atmega328p/bsscheck.rob b/test/atmega328p/bsscheck.rob index 56f3e0f..f617e0e 100644 --- a/test/atmega328p/bsscheck.rob +++ b/test/atmega328p/bsscheck.rob @@ -28,5 +28,4 @@ int8 main() { return 2; } return 0; -} - +} \ No newline at end of file diff --git a/test/atmega328p/float.rob b/test/atmega328p/float.rob new file mode 100644 index 0000000..9516bd2 --- /dev/null +++ b/test/atmega328p/float.rob @@ -0,0 +1,88 @@ + +/* Test case to check float support on atmega328p */ + +use math.float; + +a = 1.2; +b = 1.1; + +float sum() { + c = a + b; + return c; +} + +float sub() { + c = a - b; + return c; +} + +float mult() { + c = a * b; + return c; +} + +float div() { + c = a / b; + return c; +} + +int64 floattoi64(float x) { + return int64(x); +} + +int32 floattoi32(float x) { + return int32(x); +} + +const epsilon = 0.000001; + +int8 main() { + r = sum(); + if r - 2.3 >= epsilon { + return 1; + } + + r = sub(); + if r - 0.1 >= epsilon { + return 2; + } + + r = mult(); + if r - 1.32 >= epsilon { + return 3; + } + + r = div(); + if r - 1.090909 >= epsilon { + return 4; + } + + r = NAN; + if !isnan(r) { + return 5; + } + + r = INFINITY; + if !isinf(r) { + return 6; + } + + r = -INFINITY; + if !isinf(r) { + return 7; + } + + r = div(); + s = floattoi64(r); + if s != 1 { + return 8; + } + + t = floattoi32(r); + if t != 1 { + return 9; + } + + return 0; +} + diff --git a/test/atmega328p/robcmp-simavr-debug b/test/atmega328p/robcmp-simavr-debug index d508ef4..c9994e3 120000 --- a/test/atmega328p/robcmp-simavr-debug +++ b/test/atmega328p/robcmp-simavr-debug @@ -1 +1 @@ -../../platformio/toolchain-robcmp/bin/robcmp-simavr-debug \ No newline at end of file +../../build/robcmp-simavr-debug \ No newline at end of file diff --git a/test/atmega328p/string-contains.rob b/test/atmega328p/string-contains.rob new file mode 100644 index 0000000..80f5a2a --- /dev/null +++ b/test/atmega328p/string-contains.rob @@ -0,0 +1,17 @@ +use string.containsstr; + +const str1 = "򐟎빉萦%ˍ켁̿Ǩ윊c升T{奀վuA񲁒𫾡𤃔򜄼􋉦괄񆔷ӌ>r󮤋ֆ۲𻍠ᚧ속腠ƒ󷼨񀐶񈪾ʴ󛐯mɁ姎-蓥񒡳^OC񉡎Łȵ́ꫢ؝񎯀𯏍є򬎧6􁜧Ǚ􂸫Æ񝽥DŽ흃򼵾ͥp񷰥񌕀y홋޹ӑqꥈ麧º겪𷣟󽨏񮆠Ҳߜ蟩̐󒉂m󽮁Ԏ粈#Aܳ𓖎k碽󶪩È೦繯˯󺶌ׂԠ:㮹>𸜝I񯙼V𙾌қ𷂯j𖪜٦Aॼ񩵜Ȯ怄᤟4񄥳肁睈)Ѿ又怾􉿿笚ǦO匯ؤĒ径lӪ񈦦񍿅ƣ꒥Yܐܩ>ꂛ߉򏆍ۗ/껠D䑥궖􌠬ՙ𓎪zb �롏|ʸh毕_š􅪃0փ򈔵񤁯ܡ歨򣍓򱤂ԛ񧞂댙ڞ#򯚭򽊤ĭעǃүK񷼝�e񙖰˵𤘖ق֩R𷄹Θx-껇ǹĻ񽀄靺O㊖Ĥ󙿗򗮡!ܒOLp񽿚ݰ񢛏$搜򯝠纱؟4ر� Ὧi󴢼啣򙤙瑉⤄񫝛񛎗UϘ󩧜݋󉏿񙥠ޔҴ󨮣޳ל򓁓d􍩶򡲵𥉐9Е󇆦󀨑2gڷ^󎽠𺹽ܨՋf酁ֲ🄒^񫨅)4L񆔜�⾎𑨂򡟸R쯐Ʃ󏅡4i䀠ݾ ܫ󷡚!컳䭾fX݃Ѝ)𑳛k􋫷J閇앳񑻻@nƝ󟧈򟏞򬁶𯘗񔳅ӧd򇾾ئ򱫪î׻9⿥m˒:ȞΆ텍Ⓐ򱭴䤁𒻯身摏c󤊋Т,׉߰淜Q켮L{ĭ˨󇿛㻒ș󪲑󔗩򀵃̂ŝCN򱢕἖­𚣿񉚘ô.弎Ь:*ܽ񴷎^󁒸􈥡)ፌ杻È[Ό󘵘ᆅ眔񟑤"; + +const str2 = "􂸫Æ񝽥DŽ흃򼵾ͥp񷰥񌕀y홋޹ӑqꥈ麧º겪𷣟󽨏񮆠Ҳߜ蟩̐󒉂m󽮁Ԏ粈#Aܳ𓖎k碽󶪩È೦繯˯󺶌ׂԠ:㮹>𸜝I񯙼V𙾌қ𷂯j𖪜٦Aॼ񩵜Ȯ怄᤟4񄥳肁睈)Ѿ又怾􉿿笚ǦO匯ؤĒ径lӪ񈦦񍿅ƣ꒥Yܐܩ>ꂛ߉򏆍ۗ/껠D䑥궖􌠬ՙ𓎪zb �롏|ʸh毕_š􅪃0փ򈔵񤁯ܡ歨򣍓򱤂ԛ񧞂댙ڞ#򯚭򽊤ĭעǃүK񷼝�e񙖰˵𤘖ق֩R𷄹Θx-껇ǹĻ񽀄靺O㊖Ĥ󙿗򗮡!ܒOLp񽿚ݰ񢛏$搜򯝠纱؟4ر� Ὧi󴢼啣򙤙瑉⤄񫝛񛎗UϘ󩧜݋󉏿񙥠ޔҴ󨮣޳ל"; + +const str3 = "׾΁A?Ӥ󨨎Žr񮷤򩟴Zࢥ񸃞Σ퟽陊ޤ上櫄򼔄걜㟰żLޏu󍘧vۺ򣚃ӓ𞆟܀�􇶦IĽ栿u𮔏c􊙾𽻪퀊歲𦢠y󇎹ꉃӁ繻縠𷈶0򙤁𧭼=ԫ店򳜳͗Ȕ ƕ퇍蘛ラ𡭑 뢛4ږR첻/򇞆gI𘍎뢼􀑠8͕hȞ󝆬󷜇䯗ӹ󥺞𩏠p1ɍ𫔎*�عw٘ڞQ򝼄mr㛙唅x䞰䋝eF񲯫꿽ѭھ矩D磀Y[Pԫ򓚦ⱗ򔧕񲸤B֦툫񣼙􎺍MMl癔㨥󝰼󪰪򳓶𸰁VΈ،Y˕j׶꬇񉥵걇򓮡򘮖ᆧέ㯼ӷ􈗮󧖂򐳂BtN󞢊.䓉=󗍒ۤ𡱭�遦o񢣾؎Ьﶴ򏍋󗚇񈸝砅J񙍅恴뷀Ɠꤋ֡ٚя$"; + +int8 main() { + r = containsstr(str1, str2); + s = containsstr(str1, str3); + if r != -1 and s == -1 { + return 0; + } else { + return 1; + } +} \ No newline at end of file diff --git a/test/atmega328p/string-equal.rob b/test/atmega328p/string-equal.rob new file mode 100644 index 0000000..68c2b5e --- /dev/null +++ b/test/atmega328p/string-equal.rob @@ -0,0 +1,15 @@ +use string.equalstr; + +const str = "ඣ𮱮䡌얊䎻霂↎𝆁򘋟쌆ҕ􈙲񁆺葒񆉠l힦]ks酪ڴѹr򂨰񝡵쉽T󎬹A򯕙􍰴橖вǬ񩁅􀊻ꚧﲎ̰ى鉡л㧌􂐓챿⻧􅕍ࣶʶ#;姱䗗֠緿/HƤ掶?𜩨򮹯򙢜ʉwKv鰪ƶw赟ʼÌّF󴵇䅧{󣦵뭭㶚Cʦߩ𷊺zAۿ@ޜˊ2蛽⃆ߠ򈧱뉳ʃ2*󚾊%]Tݍ񴒠쯦𑙀㬮襘پ󔑦Ȁ𶍧K󶤬Q蟂뤵𒂎񓶞RϨ(.릹EXϦȋ蛩뫵䥸蜑Xz$񗊶P􇊦۾೷Gىᙄ򅖩貘暾ٙ󀠋饣өƑ𤫷򸿢󬓣ٽ󕀤Ղ_Ş󤳨ƭͲ􊌵UꈂΑLἲ~蔵鏀c嚦s묫ӹ7㿲Гͩ⠦糺ťͽ‚񱆘ꂛ𠕣򞍥󲱊/HƤ掶?𜩨򮹯򙢜ʉwKv鰪ƶw赟ʼÌّF󴵇䅧{󣦵뭭㶚Cʦߩ𷊺zAۿ@ޜˊ2蛽⃆ߠ򈧱뉳ʃ2*󚾊%]Tݍ񴒠쯦𑙀㬮襘پ󔑦Ȁ𶍧K󶤬Q蟂뤵𒂎񓶞RϨ(.릹EXϦȋ蛩뫵䥸蜑Xz$񗊶P􇊦۾೷Gىᙄ򅖩貘暾ٙ󀠋饣өƑ𤫷򸿢󬓣ٽ󕀤Ղ_Ş󤳨ƭͲ􊌵UꈂΑLἲ~蔵鏀c嚦s묫ӹ7㿲Гͩ⠦糺ťͽ‚񱆘ꂛ𠕣򞍥󲱊/HƤ掶?𜩨򮹯򙢜ʉwKv鰪ƶs묫ӹ7㿲Гͩ⠦糺ťͽ‚񱆘ꂛ𠕣򞍥󲱊/HƤ掶?𜩨򮹯򙢜ʉwKv鰪ƶs묫ӹ7㿲Гͩ⠦糺ťͽ‚񱆘ꂛ𠕣򞍥󲱊/HƤ掶?𜩨򮹯"; + +const str_equal = "ඣ𮱮䡌얊䎻霂↎𝆁򘋟쌆ҕ􈙲񁆺葒񆉠l힦]ks酪ڴѹr򂨰񝡵쉽T󎬹A򯕙􍰴橖вǬ񩁅􀊻ꚧﲎ̰ى鉡л㧌􂐓챿⻧􅕍ࣶʶ#;姱䗗֠緿/HƤ掶?𜩨򮹯򙢜ʉwKv鰪ƶw赟ʼÌّF󴵇䅧{󣦵뭭㶚Cʦߩ𷊺zAۿ@ޜˊ2蛽⃆ߠ򈧱뉳ʃ2*󚾊%]Tݍ񴒠쯦𑙀㬮襘پ󔑦Ȁ𶍧K󶤬Q蟂뤵𒂎񓶞RϨ(.릹EXϦȋ蛩뫵䥸蜑Xz$񗊶P􇊦۾೷Gىᙄ򅖩貘暾ٙ󀠋饣өƑ𤫷򸿢󬓣ٽ󕀤Ղ_Ş󤳨ƭͲ􊌵UꈂΑLἲ~蔵鏀c嚦s묫ӹ7㿲Гͩ⠦糺ťͽ‚񱆘ꂛ𠕣򞍥󲱊/HƤ掶?𜩨򮹯򙢜ʉwKv鰪ƶw赟ʼÌّF󴵇䅧{󣦵뭭㶚Cʦߩ𷊺zAۿ@ޜˊ2蛽⃆ߠ򈧱뉳ʃ2*󚾊%]Tݍ񴒠쯦𑙀㬮襘پ󔑦Ȁ𶍧K󶤬Q蟂뤵𒂎񓶞RϨ(.릹EXϦȋ蛩뫵䥸蜑Xz$񗊶P􇊦۾೷Gىᙄ򅖩貘暾ٙ󀠋饣өƑ𤫷򸿢󬓣ٽ󕀤Ղ_Ş󤳨ƭͲ􊌵UꈂΑLἲ~蔵鏀c嚦s묫ӹ7㿲Гͩ⠦糺ťͽ‚񱆘ꂛ𠕣򞍥󲱊/HƤ掶?𜩨򮹯򙢜ʉwKv鰪ƶs묫ӹ7㿲Гͩ⠦糺ťͽ‚񱆘ꂛ𠕣򞍥󲱊/HƤ掶?𜩨򮹯򙢜ʉwKv鰪ƶs묫ӹ7㿲Гͩ⠦糺ťͽ‚񱆘ꂛ𠕣򞍥󲱊/HƤ掶?𜩨򮹯"; + +const str_diff = "𴙗Ȉ􉏺ݤ歠šω9୆碻ノ쿵E΃f񟸠&𗌐Ҁϓ򀙷睆i๒ۯ荬ե}萒㽁ȐƤ 𚟙𷓂񂅘㯩펑Ƹ确ʺ󩰭ݍ𧗐ٷꑩ6Х줎Q͙󎕭龜𙛿ٹꑙ X𫄕@u񐑧蔥ⰬF鐸痳ݠچ&{𳕷j惛򐴇cPǀΌޮQ𷼦𷼦󸯃,vǁˆ𢨿􅵈᷐崎?]xŃ朇⻕%WļͬlƸЯ򾨝Aֶ轟촆󥆵偲󝓇А󸤍m䙡7񵶛󡶓򘑧仐񯺝RP𐊆s٠~j炃ٴ񦷕򎶩դm󸳲招Ljق䓩󑮤W⍛񇹆朚쿃렼υȧ՚⠑ᄒf}뢮𳜞򃀷씊Rꅻ޻̘鵢ϳ̓�`󉝰񵱹󨏰۝m󂶍x󆍈ٿ6ЁⒻْƧ`š䃭TOs:P󎨜򷳍ު㌁솃亍ﯯ)ᷰ’ǀĒȃЍ֎𖼚󡋁3L򭣰ߪ듻ݯ9f򰳫󳾾Ƞ!柎򿥊󐱮Y㒇𾙌ѷ͌ݬݦ˒ƒϢ㾔㠆䙡ρ깪ꖘ9򃔺论癛uӖ켬e۶ذ򮪬Vꥰ􏣠O중옝㌬㦥𓫑򶭟-񹋭ᰶψ4s䑎󀿚􋥶Ӳ_758쉓ܵʁ缂;âs輌毑{鷛 ӵ񒧴񝹾틢sև󂴫X񈙔ӓʾ<奠묷å򅛬ꥪݹإݾv҉⪐敢gʃ򣻳éx釻񹓚򷧶ӆ򧩸늿ᶃ򵔹˭ԑ勇Ǹܮ𻜯񞄴6ױ琧򙺓bʼn❪#q邔ನ霞ᤡ͆V􇅑ٺ񞡪𘃘򸆌z񒼋󕌙ʿ𭖎򗜽􍩒դ۱h𚠫*󂺆襗oײQ9ݓ퐅𝒪𷨺𹸷3ɹ񶌎֚߯ȍ񽫺𡉥7}󑞉ρ菱񹓚󿌶𜖷o̸򷧶ӆh󡹶􊲓맢0"; + +int8 main() { + if equalstr(str, str_equal) and !equalstr(str, str_diff) { + return 0; + } else { + return 1; + } +} \ No newline at end of file diff --git a/test/atmega328p/string-len.rob b/test/atmega328p/string-len.rob new file mode 100644 index 0000000..0444ef9 --- /dev/null +++ b/test/atmega328p/string-len.rob @@ -0,0 +1,12 @@ +use string.lenstr; + +const str = "Ԍ񪹅◣E憕K糈lغȶ픏G񞩑޸壴c񒠛Σ'Ϡڇ𖩢򼧽0澆hې񘃼؃2㭵fȼ돻쒢񗊧왏jĿԑ༯m垢2B覴󇹅S󤟎m2򲷸#烃󆨷쓃Īɑ뾀f򪍕[l𣖖󨜟Y&硨⇑͙𛢾􂶫 呫򟘫ǽ◓򨺗Wz^򽗛򔚽򭑃񓌑ӆW񙊰nݸ򧚱𭪬膌񹩔a%cᔥ𺓈ЭFʟ󯋬ҟ+>©󬔟񎎙񎎙͏᰷:뙉󪦝擛硰>nߘȷߐ񄷝蟐ʼnv쵮𵌐綊MgФ򑧳񎎙ݿ򭶝튠񳭘�ט축Æg㩗󵯊쫹Mԅ࣢ɒ»ⱖӳ򃑜ն𾲜򞭤Σ交ᄜ󼩠ד򦻬⿰쬦񼮜侶դߩŏz喧ф;�_͛弎ׯ߲OҐ@򠰼򷞞9񎑆𦺞𮨸Ȱ$.Ӧп񦡦|ʈ讥򒳛򬯚)񫟉sεTȗ𵐾3򈆠Ƭ񑨰ߪn3򀯛³ݘﯽs󳪖沄􎛒pй򣤍󖍾o=༂ړ񁢗󆿏J顯˶ᱣ󚃈􅯥򹯓ֽϊ征󪕅񼡪�B曡՟พ𒏚ӈs񎎙ۑR󬭵򧞑胂Ѥ𘘋𡢶ި+𻛹Ⴧѱƌ𶄼􃟨񪳭l򢩅t򦂲船𓧨񵞰񻛂⒤߀Ֆ剩򭐃򓝛쪑ޙմ߆ٱҀ﬉ϗ(񸠴o𾈺şi㥉lk`𱨶稯哫仇ǚƜtⲂỖbō𦪷睋󚼩ضF㟆拄౞8녘櫡өo2݈_捰򜼉슋�Y躘Y�*瑍ǃ󄑬񞊃G΢򼇉򨇓$B堁ʈȆᎰ̻󀏞􄞝𞞋򍐇Ŝˢɧ𗽢2힃Ǩ󱘅Ğͬ񓞥򣋱^߯󔛌ү-𠛛Ϻ0򋔑௯󓺣ᗣ𣦭95M򡹟􍎃ör蝗džЃ1񱠥藩󦛷Ꙧȶ󺇲1҅픸󃅭򉬻{犧 έț󤆯ꯨ񙾢X򟈜ཡس⵳ؕ?JժyJ(⋏܈󎴦ۥ农ߊʹ壛i󄻏󶮨䟊z逵ϳ񎎙轣󲾑y⮰VYφ񎎙⹁ίᜭર껔Ϳ❵૽䓮瘝pYeꤚ򐩼򥞢󲡞噲澘须󰜚c]cҺǙ󙁸󏾖ퟭ򘲱ͩ󆿳է0?񳤍󊟆񧖍𭷡򘹕୓;򬌆Ӽ搏:򅇚ٕ"; + +int8 main() { + r = lenstr(str); + if r == 810 { + return 0; + } else { + return 1; + } +} \ No newline at end of file diff --git a/test/atmega328p/timetest.sh b/test/atmega328p/timetest.sh new file mode 100755 index 0000000..26b8478 --- /dev/null +++ b/test/atmega328p/timetest.sh @@ -0,0 +1,34 @@ +#!/bin/bash +CMD="./robcmp-simavr-debug -c 16000000 -m atmega328p -f $2" + +GREEN="\033[0;32m" +RED="\033[0;31m" +NC="\033[0m" + +echo -n " $1 " +timer=0 +make -s $2 +REP=10 +if [ "$?" -eq 0 ]; then + if [ "$V" = "1" ]; then + ${CMD} + else + timeout 10s ${CMD} &> /dev/null + fi + STATUS=$? + if [ "${STATUS}" -eq 0 ]; then + + TIMEFORMAT="%U" # get only the User time + for i in $(seq 1 $REP); do + timer=$timer+$({ time $CMD &>/dev/null; } 2>&1) + done + timer=$(echo "${timer//,/.}") + avg=$(echo "scale=3;($timer)/$REP -q"| bc) + + echo -e \\r${GREEN}[PASS]\\t\\t${NC}\\t\\t\\t${avg} + else + echo -e \\r${RED}[FAILED] ${STATUS}\\t${NC} + fi +else + echo -e \\r${RED}[BUILD FAILED]\\t${NC} +fi \ No newline at end of file diff --git a/test/debug/platformio.ini b/test/debug/platformio.ini index 26e80a0..014f3a6 100644 --- a/test/debug/platformio.ini +++ b/test/debug/platformio.ini @@ -1,7 +1,7 @@ [env] platform = robcmp -board = atmega328p +board = atmega1284p upload_protocol = serial [env:release] @@ -14,4 +14,17 @@ debug_tool = robcmp-ssd1306 [env:native] board = native build_type = debug -upload_protocol = none \ No newline at end of file +upload_protocol = none + +[stm32] +platform = robcmp +board = stm32f1 +upload_protocol = stlink +#board_hardware_spec = specs/stm32.spec + +[env:stm32-release] +extends = stm32 + +[env:stm32-debug] +extends = stm32 +build_type = debug \ No newline at end of file diff --git a/test/general/bool-branch-cond.rob b/test/general/bool-branch-cond.rob new file mode 100644 index 0000000..c74641f --- /dev/null +++ b/test/general/bool-branch-cond.rob @@ -0,0 +1,11 @@ +int8 boolteste() { + return 0; +} + +int8 main() { + if boolteste(){ + return 0; + } else { + return 1; + } +} \ No newline at end of file diff --git a/test/general/byref-simple.rob b/test/general/byref-simple.rob new file mode 100644 index 0000000..708c169 --- /dev/null +++ b/test/general/byref-simple.rob @@ -0,0 +1,24 @@ + +mapping = { + 0x00E1, 0x00C1, + 0x00E9, 0x00C9 +}; + +type Integer { + codepoint = int32(0); +} + +void utf8_decode(Integer i) { + i.codepoint = 10; +} + +int8 main() { + cp = Integer(); + utf8_decode(cp); + if cp.codepoint != 10 { + return 1; + } + + return 0; +} + diff --git a/test/general/float.rob b/test/general/float.rob new file mode 120000 index 0000000..ba4a261 --- /dev/null +++ b/test/general/float.rob @@ -0,0 +1 @@ +../atmega328p/float.rob \ No newline at end of file diff --git a/test/general/strcpy.rob b/test/general/strcpy.rob new file mode 100644 index 0000000..dfabb9c --- /dev/null +++ b/test/general/strcpy.rob @@ -0,0 +1,21 @@ +void strcpy(char[] src, int16 spos, char[] dst, int16 dpos, int16 len) { + i = 0; + while (i < len) { + dst[dpos + i] = src[spos + i]; + i++; + } +} + +int16 main(){ + a = "a noifas SDOINDAda"; + b = "B akjsad ADJNDAODA"; + strcpy(a, 0, b, 0, a.size); + i = 0; + while i < a.size { + if b[i] != a[i] { + return i; + } + i++; + } + return 0; +} diff --git a/test/general/string-contains.rob b/test/general/string-contains.rob new file mode 100644 index 0000000..40e6590 --- /dev/null +++ b/test/general/string-contains.rob @@ -0,0 +1,17 @@ +use string.contains; + +const str1 = "򐟎빉萦%ˍ켁̿Ǩ윊c升T{奀վuA񲁒𫾡𤃔򜄼􋉦괄񆔷ӌ>r󮤋ֆ۲𻍠ᚧ속腠ƒ󷼨񀐶񈪾ʴ󛐯mɁ姎-蓥񒡳^OC񉡎Łȵ́ꫢ؝񎯀𯏍є򬎧6􁜧Ǚ􂸫Æ񝽥DŽ흃򼵾ͥp񷰥񌕀y홋޹ӑqꥈ麧º겪𷣟󽨏񮆠Ҳߜ蟩̐󒉂m󽮁Ԏ粈#Aܳ𓖎k碽󶪩È೦繯˯󺶌ׂԠ:㮹>𸜝I񯙼V𙾌қ𷂯j𖪜٦Aॼ񩵜Ȯ怄᤟4񄥳肁睈)Ѿ又怾􉿿笚ǦO匯ؤĒ径lӪ񈦦񍿅ƣ꒥Yܐܩ>ꂛ߉򏆍ۗ/껠D䑥궖􌠬ՙ𓎪zb �롏|ʸh毕_š􅪃0փ򈔵񤁯ܡ歨򣍓򱤂ԛ񧞂댙ڞ#򯚭򽊤ĭעǃүK񷼝�e񙖰˵𤘖ق֩R𷄹Θx-껇ǹĻ񽀄靺O㊖Ĥ󙿗򗮡!ܒOLp񽿚ݰ񢛏$搜򯝠纱؟4ر� Ὧi󴢼啣򙤙瑉⤄񫝛񛎗UϘ󩧜݋󉏿񙥠ޔҴ󨮣޳ל򓁓d􍩶򡲵𥉐9Е󇆦󀨑2gڷ^󎽠𺹽ܨՋf酁ֲ🄒^񫨅)4L񆔜�⾎𑨂򡟸R쯐Ʃ󏅡4i䀠ݾ ܫ󷡚!컳䭾fX݃Ѝ)𑳛k􋫷J閇앳񑻻@nƝ󟧈򟏞򬁶𯘗񔳅ӧd򇾾ئ򱫪î׻9⿥m˒:ȞΆ텍Ⓐ򱭴䤁𒻯身摏c󤊋Т,׉߰淜Q켮L{ĭ˨󇿛㻒ș󪲑󔗩򀵃̂ŝCN򱢕἖­𚣿񉚘ô.弎Ь:*ܽ񴷎^󁒸􈥡)ፌ杻È[Ό󘵘ᆅ眔񟑤"; + +const str2 = "􂸫Æ񝽥DŽ흃򼵾ͥp񷰥񌕀y홋޹ӑqꥈ麧º겪𷣟󽨏񮆠Ҳߜ蟩̐󒉂m󽮁Ԏ粈#Aܳ𓖎k碽󶪩È೦繯˯󺶌ׂԠ:㮹>𸜝I񯙼V𙾌қ𷂯j𖪜٦Aॼ񩵜Ȯ怄᤟4񄥳肁睈)Ѿ又怾􉿿笚ǦO匯ؤĒ径lӪ񈦦񍿅ƣ꒥Yܐܩ>ꂛ߉򏆍ۗ/껠D䑥궖􌠬ՙ𓎪zb �롏|ʸh毕_š􅪃0փ򈔵񤁯ܡ歨򣍓򱤂ԛ񧞂댙ڞ#򯚭򽊤ĭעǃүK񷼝�e񙖰˵𤘖ق֩R𷄹Θx-껇ǹĻ񽀄靺O㊖Ĥ󙿗򗮡!ܒOLp񽿚ݰ񢛏$搜򯝠纱؟4ر� Ὧi󴢼啣򙤙瑉⤄񫝛񛎗UϘ󩧜݋󉏿񙥠ޔҴ󨮣޳ל"; + +const str3 = "׾΁A?Ӥ󨨎Žr񮷤򩟴Zࢥ񸃞Σ퟽陊ޤ上櫄򼔄걜㟰żLޏu󍘧vۺ򣚃ӓ𞆟܀�􇶦IĽ栿u𮔏c􊙾𽻪퀊歲𦢠y󇎹ꉃӁ繻縠𷈶0򙤁𧭼=ԫ店򳜳͗Ȕ ƕ퇍蘛ラ𡭑 뢛4ږR첻/򇞆gI𘍎뢼􀑠8͕hȞ󝆬󷜇䯗ӹ󥺞𩏠p1ɍ𫔎*�عw٘ڞQ򝼄mr㛙唅x䞰䋝eF񲯫꿽ѭھ矩D磀Y[Pԫ򓚦ⱗ򔧕񲸤B֦툫񣼙􎺍MMl癔㨥󝰼󪰪򳓶𸰁VΈ،Y˕j׶꬇񉥵걇򓮡򘮖ᆧέ㯼ӷ􈗮󧖂򐳂BtN󞢊.䓉=󗍒ۤ𡱭�遦o񢣾؎Ьﶴ򏍋󗚇񈸝砅J񙍅恴뷀Ɠꤋ֡ٚя$"; + +int8 main() { + r = containsstr(str1, str2); + s = containsstr(str1, str3); + if r != -1 and s == -1 { + return 0; + } else { + return 1; + } +} \ No newline at end of file diff --git a/test/general/string-equal.rob b/test/general/string-equal.rob new file mode 100644 index 0000000..97235ca --- /dev/null +++ b/test/general/string-equal.rob @@ -0,0 +1,15 @@ +use string.equalstr; + +const str = "惱羋󽲠񬽊񋥫ᦊ򽩿򇴙ꍜօ☀ۣ򍞚àj4񪥲躺丿յT󹴷b។񄭇ɓ怍񇰈оʾ*fކ5ᯘȍۂ񟬃񕢑4эЙȵ󆙫妵Ë荊暴`$ᦣɤn􈆮՚仌񳙎⥘܍ڛᘕѧ󚹭mΨ𴑂eRﱫﮮ墭ϋʜ恊抾ԉ߯슈񫀐퇨3ࡊ೸𨎩򢷺򏼷zե񟁛󾎔ꍷ_񳜕#𲜖єp𳳘ಕ痳ܔ�Ք*Ŀ󙢹󗨑๖7􆪷ᔬ󳔶ʪ񆁩逤𭜠SrQϠ񹒴񎧒񃘕|򵹺񧞟9㬞⡵镹Հ񑀄ʉ悊[ђԟIҠ2膋򵇑舨C랢G􍑣񎭄<󿬢򍋶򍶳ⶱϺ, 䏃𓀿젇򞩮󽤡ڲڴ|ڲL(6²1E񲦕8􄏚O񷚲æ񣙾QĹ󒤥a>o񼒝󱛪đ񸧽⛃뭭Dـ*𖵘n䐂g襸ٌ򧴑6σ;Ă֪(鏗Źɿ۪󅙸q􍀞ZŻ𭈍㇘ڂT걮쬨 x}F𧪉񙛀슏-ⵒ񞑇O򾱢Ȯ󝅶랓%}Ꮦ󶲎Ԫ򕞈 Ӈ-𿷘󬜱]₇Қ󧴠󵓳桟ˉ󃓞󧴠Eފ󪒅ԝ𴨇񕇽뀸렵񿞩Ɲp׳񇾭񱴗罣ׂ񎽖ȩlݓ񣫢𚴏׈n񳆶Ի󶺨󍞆鐝󮘝նΏU膩绰ޙ脆&{𳆯Dズ⥤򢈫􋒜𷰧̷'٩Gu׹5Β뀆�󢇉L󊕓𰋣必ػ휻B𽡰ØP蜸ねUꐢ񪐪O򥾵˃Oꬺ궫㤷:􄨡㨋?*ω龜ʋ㧪襅_x]ꖗワ򥘰ָָꎍ浓ժɒ񒫄S򿧊ɥݎ烠쑰藸e퉘𓬈@׵%ڛ䢈񶧇򛠺ԱCs屿󼾦酈챡􉯙񩫚򼮏�#𡄂Ոث􁒸-ٮ񎲚гԱn۷񃒆򱊷᜔XMꚬIƳݸuʚ싉Ӄ܂猺󩔐d񀁅5򊐳)򆎅Խů楻ŒU󭘹󷏦L󢴊򘇱򗺣񐓌򊇰?Žب󅝮�󰒧|򕧋CO槥Ǣ񐚭ԾڰiiЫƆӎ򗤖Ԥ$B󩰃œ򘫄$ܜy젰iނ،񆜙eߓĚūԖ0󬹏ϸ񫩢凒끐D՝̠溗Q̏H"; + +const str_equal = "惱羋󽲠񬽊񋥫ᦊ򽩿򇴙ꍜօ☀ۣ򍞚àj4񪥲躺丿յT󹴷b។񄭇ɓ怍񇰈оʾ*fކ5ᯘȍۂ񟬃񕢑4эЙȵ󆙫妵Ë荊暴`$ᦣɤn􈆮՚仌񳙎⥘܍ڛᘕѧ󚹭mΨ𴑂eRﱫﮮ墭ϋʜ恊抾ԉ߯슈񫀐퇨3ࡊ೸𨎩򢷺򏼷zե񟁛󾎔ꍷ_񳜕#𲜖єp𳳘ಕ痳ܔ�Ք*Ŀ󙢹󗨑๖7􆪷ᔬ󳔶ʪ񆁩逤𭜠SrQϠ񹒴񎧒񃘕|򵹺񧞟9㬞⡵镹Հ񑀄ʉ悊[ђԟIҠ2膋򵇑舨C랢G􍑣񎭄<󿬢򍋶򍶳ⶱϺ, 䏃𓀿젇򞩮󽤡ڲڴ|ڲL(6²1E񲦕8􄏚O񷚲æ񣙾QĹ󒤥a>o񼒝󱛪đ񸧽⛃뭭Dـ*𖵘n䐂g襸ٌ򧴑6σ;Ă֪(鏗Źɿ۪󅙸q􍀞ZŻ𭈍㇘ڂT걮쬨 x}F𧪉񙛀슏-ⵒ񞑇O򾱢Ȯ󝅶랓%}Ꮦ󶲎Ԫ򕞈 Ӈ-𿷘󬜱]₇Қ󧴠󵓳桟ˉ󃓞󧴠Eފ󪒅ԝ𴨇񕇽뀸렵񿞩Ɲp׳񇾭񱴗罣ׂ񎽖ȩlݓ񣫢𚴏׈n񳆶Ի󶺨󍞆鐝󮘝նΏU膩绰ޙ脆&{𳆯Dズ⥤򢈫􋒜𷰧̷'٩Gu׹5Β뀆�󢇉L󊕓𰋣必ػ휻B𽡰ØP蜸ねUꐢ񪐪O򥾵˃Oꬺ궫㤷:􄨡㨋?*ω龜ʋ㧪襅_x]ꖗワ򥘰ָָꎍ浓ժɒ񒫄S򿧊ɥݎ烠쑰藸e퉘𓬈@׵%ڛ䢈񶧇򛠺ԱCs屿󼾦酈챡􉯙񩫚򼮏�#𡄂Ոث􁒸-ٮ񎲚гԱn۷񃒆򱊷᜔XMꚬIƳݸuʚ싉Ӄ܂猺󩔐d񀁅5򊐳)򆎅Խů楻ŒU󭘹󷏦L󢴊򘇱򗺣񐓌򊇰?Žب󅝮�󰒧|򕧋CO槥Ǣ񐚭ԾڰiiЫƆӎ򗤖Ԥ$B󩰃œ򘫄$ܜy젰iނ،񆜙eߓĚūԖ0󬹏ϸ񫩢凒끐D՝̠溗Q̏H"; + +const str_diff = "ၛ 󠹘秙􂬺ʒB볧Ց*O˪쑟ϙ/⒵Ǹн츋+Ȳ蘛礑㍻Ζ)򪖣ϐɷ冭0􌪉гӨ󢦀⪁񈋽4ͤꐏ奸򭒚Ɇ蠲ܤ*󊗇ޖʉꝼpӝO񜁳򊚫٠ʼn䢪􀰉n򊥗ݚ鄞􌴬,Tq񻯬󦙚앎櫐Sшå%󕌞Wː럂ᅵ抌Þ레&󱭹UĘ:ފ񆬟ӛ񐭿󦲺uﺳѫ씸욍_❨ܒ񛯹򽡋󼮖갗W!璵쵅٘I㔧{У֚󐷢把�񷲜탓葉󃯊{򖉜񰚔X3N𔴧˨]𪕠t񥃋<𒨛^횱񘵣󁫜俳۸䎊ެ֭m枷Ғe󝔋U!奲A񋉡0푛Šے㕬�ߍꚉĂ𕸞󸩌iއ萘ⓜ₮O󛮼󯋀񁠹A縪񎏞泩叆·󢘄=𑴣󝐁󊗪ԁ񖎨1띗�uߢ<(V򴴸_ޅŲ򘣽񊏖𗬴܌􅆋񙿂۩绯2�򄌣嶾Ŝ낗4웧򯐝꼮򂭔sɉtϠX‡gO찟򊕎򚵛a汓�ހ󯋀񘂰󯋀󱒑񰉜񞎛6磩/􋥯1F󛽻򦃿Y﨨˚k.뗥񗇎ªō򑲒𽝡ȯ򻺒冔ﻑ򞵘-ᶫվ[𽌤󢾀hۜEԐꮫ𹸉ڷ󼂯𫰈辂%̒դ@4ξ°󍉚޽먨�뷁ө񙁛𿂳̸訅ʢ񻋾򜯖몃⬶Ң$A𖛭ꊚќlÜ񪵶܃袑0򳥦񷷡ǭY`m򿚽󯋀󯋀柴𞴡l޲gʐ(뱇i󜌝󓗹攙_Ʊ墡„馔郠,Đo釁tl󤅦㒷DژĂ.Fꊠh񺩫򓮧šӓ뗹ߐʚN擛҂뽎񓨇ՁŲ񹈺|躀󣁪%0得粒_񔼛􅭘=񫸗úd憏㭓񐲄𴡔ʭݦ󘃌ھ黜𗄎˯ԑĻG󞆕𮠨𞑽?񣊇n޼ǯؽ댬ڙù򘹴🅘񿽄ゎgࣀ񳷥󤕤񔙵ؑǙ@ܐ𳩛؈񛸪㱎ฉθ򆼷ɞa􄟀񦂝ؔ򠰵׵޲蔃ĔJb嗱󑖨񒯲OLÎt5?�º񱱄Īꕊ緳𪈹𶎊꥞ Al=א龽䌴힖󶰡�J󨗺킿ނƖbțѷ󣭑"; + +int8 main() { + if equalstr(str, str_equal) and !equalstr(str, str_diff) { + return 0; + } else { + return 1; + } +} \ No newline at end of file diff --git a/test/general/string-len.rob b/test/general/string-len.rob new file mode 100644 index 0000000..c408c28 --- /dev/null +++ b/test/general/string-len.rob @@ -0,0 +1,12 @@ +use string.lenstr; + +const str = "Ԍ񪹅◣E憕K糈lغȶ픏G񞩑޸壴c񒠛Σ'Ϡڇ𖩢򼧽0澆hې񘃼؃2㭵fȼ돻쒢񗊧왏jĿԑ༯m垢2B覴󇹅S󤟎m2򲷸#烃󆨷쓃Īɑ뾀f򪍕[l𣖖󨜟Y&硨⇑͙𛢾􂶫 呫򟘫ǽ◓򨺗Wz^򽗛򔚽򭑃񓌑ӆW񙊰nݸ򧚱𭪬膌񹩔a%cᔥ𺓈ЭFʟ󯋬ҟ+>©󬔟񎎙񎎙͏᰷:뙉󪦝擛硰>nߘȷߐ񄷝蟐ʼnv쵮𵌐綊MgФ򑧳񎎙ݿ򭶝튠񳭘�ט축Æg㩗󵯊쫹Mԅ࣢ɒ»ⱖӳ򃑜ն𾲜򞭤Σ交ᄜ󼩠ד򦻬⿰쬦񼮜侶դߩŏz喧ф;�_͛弎ׯ߲OҐ@򠰼򷞞9񎑆𦺞𮨸Ȱ$.Ӧп񦡦|ʈ讥򒳛򬯚)񫟉sεTȗ𵐾3򈆠Ƭ񑨰ߪn3򀯛³ݘﯽs󳪖沄􎛒pй򣤍󖍾o=༂ړ񁢗󆿏J顯˶ᱣ󚃈􅯥򹯓ֽϊ征󪕅񼡪�B曡՟พ𒏚ӈs񎎙ۑR󬭵򧞑胂Ѥ𘘋𡢶ި+𻛹Ⴧѱƌ𶄼􃟨񪳭l򢩅t򦂲船𓧨񵞰񻛂⒤߀Ֆ剩򭐃򓝛쪑ޙմ߆ٱҀ﬉ϗ(񸠴o𾈺şi㥉lk`𱨶稯哫仇ǚƜtⲂỖbō𦪷睋󚼩ضF㟆拄౞8녘櫡өo2݈_捰򜼉슋�Y躘Y�*瑍ǃ󄑬񞊃G΢򼇉򨇓$B堁ʈȆᎰ̻󀏞􄞝𞞋򍐇Ŝˢɧ𗽢2힃Ǩ󱘅Ğͬ񓞥򣋱^߯󔛌ү-𠛛Ϻ0򋔑௯󓺣ᗣ𣦭95M򡹟􍎃ör蝗džЃ1񱠥藩󦛷Ꙧȶ󺇲1҅픸󃅭򉬻{犧 έț󤆯ꯨ񙾢X򟈜ཡس⵳ؕ?JժyJ(⋏܈󎴦ۥ农ߊʹ壛i󄻏󶮨䟊z逵ϳ񎎙轣󲾑y⮰VYφ񎎙⹁ίᜭર껔Ϳ❵૽䓮瘝pYeꤚ򐩼򥞢󲡞噲澘须󰜚c]cҺǙ󙁸󏾖ퟭ򘲱ͩ󆿳է0?񳤍󊟆񧖍𭷡򘹕୓;򬌆Ӽ搏:򅇚ٕ'񐂕ԣ>Ґ̀ԃ—薹熹U󴯽辑ҵ򵗥󆺜᲎ϟ͐񱪂ˌTР멡㪬샎ތO𬼝B鳩󋏌0䡡Ϋ𸃶⼔۴𿘅A󧿉􎹲ۑˑ䲨b9H୉⽏̊ݣꜢ곲򯎭c毣ﮒȟ߁ĘḔƲ֢檓嶷֑󊑵鎭ԥ̥䜏𦠼몖򏥖첡&뷠Դє𢀫$鉙牝ʓ)󩟈򪣅Ü𯏺 󘆷楂滵쐝󌰁ӆD𸉭鳔⌝װ򭺞Ү񓭥֋΅K^ì⫑kpȏ򝁢䑫‡o垡ѐط昆۱ଏ+𗥤L@3ݒ󼹭骱序ʲ􊜃ۓ􀯧cч7ῤ󓟞ߨ򩶾@Ì⑫aӰ𭹦M񄙲Ī𾚏扄ЯuN̾嘟佣c℡첪򪣅޷vǮс麟ՑϮ𛪺𒚀ޜ𮜈x)⬿𐎭񴤩︬񝩥쌏"; + +int8 main() { + r = lenstr(str); + if r == 1000 { + return 0; + } else { + return 1; + } +} \ No newline at end of file diff --git a/test/general/string-upper.rob b/test/general/string-upper.rob new file mode 100644 index 0000000..1e1f4a0 --- /dev/null +++ b/test/general/string-upper.rob @@ -0,0 +1,15 @@ +use string.equalstr; +use string.upperlowerstr; +int32 main() { + ol_str = "aώḹ"; + ou_str = "AΏḸ"; + l_str = "aώḹ"; + u_str = "AΏḸ"; + strtouppercase(l_str); + strtolowercase(u_str); + if equalstr (ol_str, u_str) and equalstr(ou_str, l_str) { + return 0; + } else { + return 1; + } +} diff --git a/test/general/strlen.rob b/test/general/strlen.rob new file mode 100644 index 0000000..d0917c4 --- /dev/null +++ b/test/general/strlen.rob @@ -0,0 +1,16 @@ + +const str = "abcd"; + +int8 strlen(char[] s) { + return s.size; +} + +int8 main() { + r = strlen(str); + if r == 4 { + return 0; + } else { + return 1; + } +} + diff --git a/test/stm32f1/Makefile b/test/stm32f1/Makefile new file mode 100644 index 0000000..53c5eb4 --- /dev/null +++ b/test/stm32f1/Makefile @@ -0,0 +1,54 @@ +ALL=$(patsubst %.rob,out/%,$(wildcard *.rob)) +ALL_LL=$(patsubst %.rob,out/%.ll,$(wildcard *.rob)) +ALL_TT=$(patsubst %.rob,%.tt,$(wildcard *.rob)) +ALL_OO=$(patsubst %.rob,out/%.o,$(wildcard *.rob)) out/stm32f1.o + +TOOL_OPEN_OCD_FOLDER=~/.platformio/packages/tool-openocd +ROBCMP=../../build/robcmp +INCLUDES=-I ../../lib + +ifndef OPT +#OPT=-g -O0 +OPT=-Oz +endif + +LD_FLAGS=-nostdlib -entry=main -L../../lib -Tstm32f1.ld +LD_FLAGS+=-Bstatic +LD_FLAGS+=--gc-sections +LD_FLAGS+=--lto=thin + +DEPENDS=${ROBCMP} Makefile +LINK_DEPENDS=out/stm32f1.o ../../lib/cortex-m3-arm-missing.o ../../lib/arm-eabi-libgcc.a + +all: out test + +out: + mkdir -p out + +out/stm32f1.o : ../../lib/stm32f1.rob ${DEPENDS} + ${ROBCMP} -a stm32f1 ${OPT} -o $@ $< + +out/stm32f1.ll : ../../lib/stm32f1.rob ${DEPENDS} + ${ROBCMP} -a stm32f1 ${OPT} $< > $@ + +.SECONDARY: +out/%.o : %.rob out/stm32f1.o ${DEPENDS} + ${ROBCMP} -bdep -a stm32f1 ${OPT} ${INCLUDES} -o $@ $< + +out/%.ll : %.rob ${DEPENDS} + ${ROBCMP} -bdep -a stm32f1 ${OPT} ${INCLUDES} $< > $@ + +%.tt : %.rob ${DEPENDS} + @-./runtest.sh $< $(patsubst %.rob,out/%,$<) + +%.up : %.tt ${DEPENDS} + ${TOOL_OPEN_OCD_FOLDER}/bin/openocd -f ${TOOL_OPEN_OCD_FOLDER}/scripts/interface/stlink.cfg -f ${TOOL_OPEN_OCD_FOLDER}/scripts/target/stm32f1x.cfg -c "program $(patsubst %.tt,out/%,$<) reset exit" + +out/% : out/%.o ${LINK_DEPENDS} + ld.lld ${LD_FLAGS} $^ -o $@ + +test: ${ALL_TT} + +clean: + @rm -f ${ALL} ${ALL_LL} ${ALL_OO} + diff --git a/test/stm32f1/blink.rob b/test/stm32f1/blink.rob new file mode 100644 index 0000000..06ff3b1 --- /dev/null +++ b/test/stm32f1/blink.rob @@ -0,0 +1,20 @@ +/* + * Blinks the board default led + */ + +use intfs.ports; +use arch.stm32.stm32f1; + +int16 main() { + mmcu = stm32f1(); + led = mmcu.c13; + + led.mode(port_mode.output); + + loop { + led.set(true); + mmcu.wait_ms(500); + led.set(false); + mmcu.wait_ms(500); + } +} diff --git a/test/stm32f1/coseno.rob b/test/stm32f1/coseno.rob new file mode 100644 index 0000000..ba7bbca --- /dev/null +++ b/test/stm32f1/coseno.rob @@ -0,0 +1,94 @@ + +use intfs.ports; +use arch.stm32.stm32f1; +use convert.itoa; + +use math.abs; +use math.fconsts; +use math.trigonometric; + +precision_digits=1E6; + +values={ + 1.000000,0.999962,0.999848,0.999657,0.999391,0.999048,0.998630,0.998135,0.997564,0.996917,0.996195,0.995396,0.994522,0.993572,0.992546,0.991445,0.990268,0.989016,0.987688,0.986286, + 0.984808,0.983255,0.981627,0.979925,0.978148,0.976296,0.974370,0.972370,0.970296,0.968148,0.965926,0.963630,0.961262,0.958820,0.956305,0.953717,0.951057,0.948324,0.945519,0.942641, + 0.939693,0.936672,0.933580,0.930418,0.927184,0.923880,0.920505,0.917060,0.913545,0.909961,0.906308,0.902585,0.898794,0.894934,0.891007,0.887011,0.882948,0.878817,0.874620,0.870356, + 0.866025,0.861629,0.857167,0.852640,0.848048,0.843391,0.838671,0.833886,0.829038,0.824126,0.819152,0.814116,0.809017,0.803857,0.798636,0.793353,0.788011,0.782608,0.777146,0.771625, + 0.766044,0.760406,0.754710,0.748956,0.743145,0.737277,0.731354,0.725374,0.719340,0.713250,0.707107,0.700909,0.694658,0.688355,0.681998,0.675590,0.669131,0.662620,0.656059,0.649448, + 0.642788,0.636078,0.629320,0.622515,0.615662,0.608761,0.601815,0.594823,0.587785,0.580703,0.573576,0.566406,0.559193,0.551937,0.544639,0.537300,0.529919,0.522498,0.515038,0.507538, + 0.500000,0.492424,0.484810,0.477159,0.469472,0.461749,0.453991,0.446198,0.438371,0.430511,0.422618,0.414693,0.406737,0.398749,0.390731,0.382683,0.374607,0.366501,0.358368,0.350207, + 0.342020,0.333807,0.325568,0.317305,0.309017,0.300706,0.292372,0.284015,0.275637,0.267238,0.258819,0.250380,0.241922,0.233445,0.224951,0.216440,0.207912,0.199368,0.190809,0.182236, + 0.173648,0.165048,0.156434,0.147809,0.139173,0.130526,0.121869,0.113203,0.104528,0.095846,0.087156,0.078459,0.069757,0.061049,0.052336,0.043619,0.034899,0.026177,0.017452,0.008727, + -0.000000,-0.008727,-0.017452,-0.026177,-0.034899,-0.043619,-0.052336,-0.061049,-0.069756,-0.078459,-0.087156,-0.095846,-0.104529,-0.113203,-0.121869,-0.130526,-0.139173,-0.147809,-0.156434,-0.165048, + -0.173648,-0.182235,-0.190809,-0.199368,-0.207912,-0.216440,-0.224951,-0.233445,-0.241922,-0.250380,-0.258819,-0.267238,-0.275637,-0.284015,-0.292372,-0.300706,-0.309017,-0.317305,-0.325568,-0.333807, + -0.342020,-0.350207,-0.358368,-0.366501,-0.374607,-0.382683,-0.390731,-0.398749,-0.406737,-0.414693,-0.422618,-0.430511,-0.438371,-0.446198,-0.453991,-0.461749,-0.469472,-0.477159,-0.484810,-0.492424, + -0.500000,-0.507538,-0.515038,-0.522498,-0.529919,-0.537300,-0.544639,-0.551937,-0.559193,-0.566406,-0.573576,-0.580703,-0.587785,-0.594823,-0.601815,-0.608761,-0.615661,-0.622515,-0.629320,-0.636078, + -0.642788,-0.649448,-0.656059,-0.662620,-0.669131,-0.675590,-0.681998,-0.688354,-0.694658,-0.700909,-0.707107,-0.713250,-0.719340,-0.725374,-0.731354,-0.737277,-0.743145,-0.748956,-0.754710,-0.760406, + -0.766044,-0.771625,-0.777146,-0.782608,-0.788011,-0.793353,-0.798635,-0.803857,-0.809017,-0.814116,-0.819152,-0.824126,-0.829038,-0.833886,-0.838671,-0.843391,-0.848048,-0.852640,-0.857167,-0.861629, + -0.866025,-0.870356,-0.874620,-0.878817,-0.882948,-0.887011,-0.891006,-0.894934,-0.898794,-0.902585,-0.906308,-0.909961,-0.913545,-0.917060,-0.920505,-0.923880,-0.927184,-0.930418,-0.933580,-0.936672, + -0.939693,-0.942642,-0.945519,-0.948324,-0.951056,-0.953717,-0.956305,-0.958820,-0.961262,-0.963630,-0.965926,-0.968148,-0.970296,-0.972370,-0.974370,-0.976296,-0.978148,-0.979925,-0.981627,-0.983255, + -0.984808,-0.986286,-0.987688,-0.989016,-0.990268,-0.991445,-0.992546,-0.993572,-0.994522,-0.995396,-0.996195,-0.996917,-0.997564,-0.998135,-0.998630,-0.999048,-0.999391,-0.999657,-0.999848,-0.999962, + -1.000000,-0.999962,-0.999848,-0.999657,-0.999391,-0.999048,-0.998630,-0.998135,-0.997564,-0.996917,-0.996195,-0.995396,-0.994522,-0.993572,-0.992546,-0.991445,-0.990268,-0.989016,-0.987688,-0.986286, + -0.984808,-0.983255,-0.981627,-0.979925,-0.978148,-0.976296,-0.974370,-0.972370,-0.970296,-0.968148,-0.965926,-0.963630,-0.961262,-0.958820,-0.956305,-0.953717,-0.951057,-0.948324,-0.945519,-0.942641, + -0.939693 + }; + + +int16 run_test(stm32f1 mmcu) { + + degress=float(0.0); + value=int32(0); + result=int32(0); + i = int32(0); + while degress <= 200.0 { + value=int32(values[i]*precision_digits); + result=int32(Cos((float(degress) * FM_PI) / 180.0,18)*precision_digits); + if (abs32(value-result)>10) { + if i!=0 { + return int16(i); + } else { + return 1; + } + } + i=i+1; + degress+=0.5; + } + return 0; +} + +int16 main() { + mmcu = stm32f1(); + serial = mmcu.uart2; + serial.setup(9600); + serial.enable(); + + //led = mmcu.c13; + //led.mode(port_mode.output); + + loop { + start = mmcu.millis(); + + ret = run_test(mmcu); + + // millis is counting downwards, thus start - current + time = start - mmcu.millis(); + + timestr = {'0': 10}; + chars = itoa(time, 10, timestr); + + if ret != 0 { + serial.write_array("FAIL"); + } else { + timestr[chars] = ' '; + timestr[chars+1] = 'm'; + timestr[chars+2] = 's'; + timestr[chars+3] = ' '; + serial.write_array(timestr); + } + serial.write('\r'); + serial.write('\n'); + + } + return 0; +} + diff --git a/test/stm32f1/example.rob b/test/stm32f1/example.rob new file mode 100644 index 0000000..e02e4d2 --- /dev/null +++ b/test/stm32f1/example.rob @@ -0,0 +1,41 @@ + +use intfs.ports; +use arch.stm32.stm32f1; +use convert.itoa; + +void run_test(stm32f1 mmcu) { + mmcu.wait_ms(500); +} + +int16 main() { + mmcu = stm32f1(); + serial = mmcu.uart2; + serial.setup(9600); + serial.enable(); + + //led = mmcu.c13; + //led.mode(port_mode.output); + + loop { + start = mmcu.millis(); + + run_test(mmcu); + + time = mmcu.millis() - start; + + timestr = {'0': 10}; + itoa(time, 10, timestr); + + serial.write_array(timestr); + serial.write('\r'); + serial.write('\n'); + + /*led.set(true); + mmcu.wait_ms(500); + led.set(false); + mmcu.wait_ms(500);*/ + + } + return 0; +} + diff --git a/test/stm32f1/runtest.sh b/test/stm32f1/runtest.sh new file mode 100755 index 0000000..5676a41 --- /dev/null +++ b/test/stm32f1/runtest.sh @@ -0,0 +1,27 @@ +#!/bin/bash +#CMD="./robcmp-simavr-debug -c 16000000 -m atmega328p -f $2" +CMD="echo \"no simulator for stm32f1 yet.\"" + +GREEN="\033[0;32m" +RED="\033[0;31m" +NC="\033[0m" + +echo -n " $1 " +make -s $2 +if [ "$?" -eq 0 ]; then + if [ "$V" = "1" ]; then + ${CMD} + else + timeout 10s ${CMD} &> /dev/null + fi + STATUS=$? + #if [ "${STATUS}" -eq 0 ]; then + # echo -e \\r${GREEN}[PASS]\\t\\t${NC} + #else + # echo -e \\r${RED}[FAILED] ${STATUS}\\t${NC} + #fi + ${CMD} +else + echo -e \\r${RED}[BUILD FAILED]\\t${NC} +fi + diff --git a/test/stm32f1/uart.rob b/test/stm32f1/uart.rob new file mode 100644 index 0000000..1863f45 --- /dev/null +++ b/test/stm32f1/uart.rob @@ -0,0 +1,41 @@ + +use intfs.ports; +use arch.stm32.stm32f1; +use convert.itoa; + +void run_test() { + +} + +int16 main() { + mmcu = stm32f1(); + serial = mmcu.uart2; + serial.setup(9600); + serial.enable(); + + //led = mmcu.c13; + //led.mode(port_mode.output); + + loop { + start = mmcu.time(); + + run_test(); + + time = mmcu.time() - start; + + timestr = {'0': 10}; + itoa(time, 10, timestr); + + serial.write(timestr); + serial.write('\r'); + serial.write('\n'); + + /*led.set(true); + mmcu.wait_ms(500); + led.set(false); + mmcu.wait_ms(500);*/ + + } + return 0; +} +